T-Mobile G1 Requires Data to Make Calls and Send Texts

A cautionary tale: I took my T-Mobile G1 (aka HTC Dream) on a trip abroad recently. As I didn't want to pay exorbitant data roaming charges, I turned off all data access on the phone[1] before I left for my trip. While abroad I did make a few phone calls and sent and received some text messages. However, upon returning I discovered that my T-Mobile bill did have data roaming charges, in addition to the expected voice and text message roaming charges. The data roaming charges were minor—it was quite obvious that the phone wasn't pulling down its usual smorgasbord of daily data—and surprisingly regular—each of the handful of line items on my bill was a multiple of 0.0244 MB. After much polite arguing with a T-Mobile representative, an explanation emerged: If a data connection is available, the G1 will use it when establishing phone calls and sending text messages. It will do so even if all other data access is disabled on the phone. The T-Mobile rep claimed that this is an optimization that allows the G1 to make a "better" connection to the cell tower. As proof she pointed out that each data roaming line item on my bill matched up with a voice call or text message (this was generally true but did require a bit of squinting with one eye closed for the data to actually match as she claimed). I'm still a bit skeptical of the explanation I received from T-Mobile. But, while I haven't heard of GSM-based phones sending/receiving data while dealing with voice calls or text messages, it sounds plausible and somewhat matches the tiny amount of data that my phone actually consumed.
[1] Uncheck "Settings > Wireless controls > Mobile networks > Data roaming". For good measure I also turned off background data usage, "Settings > Data synchronization > Background data", and disabled automatic refresh in all installed apps that gave me the option to do so.

Numbers everyone should know

"Numbers everyone should know", courtesy of Jeff Dean:
* L1 cache reference                              0.5 ns
* Branch mispredict                               5 ns
* L2 cache reference                              7 ns
* Mutex lock/unlock                             100 ns
* Main memory reference                         100 ns
* Compress 1K bytes with Zippy               10,000 ns
* Send 2K bytes over 1 Gbps network          20,000 ns
* Read 1 MB sequentially from memory        250,000 ns
* Round trip within same datacenter         500,000 ns
* Disk seek                              10,000,000 ns
* Read 1 MB sequentially from network    10,000,000 ns
* Read 1 MB sequentially from disk       30,000,000 ns
* Send packet CA->Netherlands->CA       150,000,000 ns
Similarly (and courtesy of Jeff Dean and Sean Quinlan), "The Joys of Real Hardware" lists the typical problems a new cluster will experience in its first year:
  • ~0.5 overheating (power down most machines in <5 mins, ~1-2 days to recover)
  • ~1 PDU failure (~500-1000 machines suddenly disappear, ~6 hours to come back)
  • ~1 rack-move (plenty of warning, ~500-1000 machines powered down, ~6 hours)
  • ~1 network rewiring (rolling ~5% of machines down over 2-day span)
  • ~20 rack failures (40-80 machines instantly disappear, 1-6 hours to get back)
  • ~5 racks go wonky (40-80 machines see 50% packet loss)
  • ~8 network maintenances (4 might cause ~30-minute random connectivity losses)
  • ~12 router reloads (takes out DNS and external vips for a couple minutes)
  • ~3 router failures (have to immediately pull traffic for an hour)
  • ~dozens of minor 30-second blips for dns
  • ~1000 individual machine failures
  • ~thousands of hard drive failures
in addition to "slow disks, bad memory, misconfigured machines, flaky machines, etc.".

Getting out of a full-screen Citrix session in Linux

If you're running the Citrix ICA client under Linux and your Citrix session runs in full-screen mode, you can press Ctrl-F2 to pass the following keystroke to the host Linux desktop rather than the Citrix session. For example, if the Citrix session is connected to a Windows desktop, then pressing Alt-Tab in full-screen mode will normally send the Alt-Tab to Windows. Pressing Ctrl-F2 followed by Alt-Tab will send the Alt-Tab to the Linux desktop instead.