from desktop
Pinging 192.168.1.105 with 32 bytes of data:
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Reply from 192.168.1.105: bytes=32 time<1ms TTL=128
Ping statistics for 192.168.1.105:
Packets: Sent = 100, Received = 100, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
C:\Users\xenot>ping -n 100 192.168.1.130
Pinging 192.168.1.130 with 32 bytes of data:
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=5ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=5ms TTL=128
Reply from 192.168.1.130: bytes=32 time=6ms TTL=128
Reply from 192.168.1.130: bytes=32 time=6ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=6ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=8ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=3ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Reply from 192.168.1.130: bytes=32 time=4ms TTL=128
Ping statistics for 192.168.1.130:
Packets: Sent = 100, Received = 100, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 3ms, Maximum = 8ms, Average = 3ms
Post by Caleb Cushingping from laptop
C:\Users\xeno>ping 192.168.1.105 -n 100
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=5ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Reply from 192.168.1.105: bytes=32 time=4ms TTL=128
Reply from 192.168.1.105: bytes=32 time=3ms TTL=128
Packets: Sent = 100, Received = 100, Lost = 0 (0% loss),
Minimum = 3ms, Maximum = 5ms, Average = 3ms
Post by Neil DaviesThere are a few more issues - the relative drift between the two clocks
can be as high as 200ppm, though typically 50-75ppm is what we observe, but
this drift is monotonic.
200 ppm seems pretty high, but not off scale. If ntpd is running and not
getting confused by long queuing delays, it should correct the drift to well
under 1 ppm. If you turn on loopstats, you can graph it.
Iâm saying that is the maximum rate of drift between two clocks even
when they are under NTP control. As you say below the clock rates
are not completely stable they are temperature dependent.
When we did this with the guys at CERN we could
correlate the results with the workload (see below for references).
Weâve got ~1M experiments using this approach across various networks,
the numbers are what we are seeing in practice.
The caveat is that, after a while (i.e several 100s) the clock drift can make
a significant difference (i.e a few ms) in the one-way delay estimation.
If you are blasting the network and adding long queuing delays, ntpd can
easily get confused.
There is another quirk to keep in mind. The temperature coefficient of the
crystal is ballpark of 1 ppm per C. Things can change significantly if an
idle system starts flinging lots of bits around.
Also NTP can make changes at one (or both) ends - they show up as distinct
direction changes in the drift.
I'm not sure what you mean by "direction change". I'd expect a graph of the
time offset vs time to be linear and the slope would have a sharp change if
ntpd changed it's "drift" correction and/or maybe a rounded bend as a system
warmed up.
Donât forget you are measuring the difference in the rates between two NTP clocks,
hence the change when one of the NTP systems decides to change the drift rate
the relative rate can change direction.
----------
Are you happy with whatever you are doing? Should we try to set things up
so ntpd works well enough? How close would you like the times to be? âŠ
Yep, weâre very happy - we donât care that there is a linear clock drift (we
can correct for that) and the step changes are infrequent and can be eliminated
from the long term analysis.
You might find §4.4 (esp §4.4.5) and §5.6 in
https://cds.cern.ch/record/1504817/files/CERN-THESIS-2013-004.pdf
interesting. It illustrates these sort of issues.
--
These are my opinions. I hate spam.
_______________________________________________
Bloat mailing list
https://lists.bufferbloat.net/listinfo/bloat
--
Caleb Cushing
http://xenoterracide.com
--
Caleb Cushing
http://xenoterracide.com