Filed under: Uncategorized
It recently came time to get a new computer. Like any geek, this is one of my favorite times, when you get an excuse to finally spend some money on all those neat things you’ve seen flitting past on Engadget and the like. Historically I’ve always just done a stock pro Apple laptop (PowerBook, MacBook Pro, etc.) and then bought extra memory from somewhere like Crucial or OWC to avoid Apple’s absurd memory pricing. However, this time around I had an idea.
I’ve worked with SSD drives a lot lately and have experienced first hand how quick they can be. Problem is, while they’ve come down in price significantly over the past couple of years, they’re still very expensive per gigabyte, and I need a lot of gigabytes. If I worked on a desktop computer, I’d just install two drives: one SSD as the startup disk, and a traditional hard drive for storage. The lightning-fast SSD would speed system and application startup times, while still leaning on the capacious hard drive for storing my hundreds of gigabytes of data.
Problem is, I don’t work on a desktop computer. My job is mobile, so I work on a laptop, where I’m confined to a single 2.5″ hard drive.
Enter the MCE OptiBay.
Several companies make adapters like this, but MCE’s is the first I saw, and they’re a company whose products I was already familiar with. Its purpose is simple: It allows you to mount a 2.5″ hard drive in place of a slimline optical drive. This is perfectly suited to my plan, as I rarely use my optical drive and would be happy to do without it. To make things even sweeter, the adapter comes with an external USB enclosure for your optical drive, so you don’t even have to give up your ability to read and write optical media.
I ordered a Samsung Spinpoint MP4 7200rpm 640GB hard drive for my data (since 7200rpm 750GB 2.5″ drives weren’t out, yet) and an OCZ Vertex 2 120GB SSD for my operating system. Once they and the MCE OptiBay were all in the same place I got to work. Installation was more difficult than a simple hard drive swap, since removing the optical drive on my MacBook Pro (15-inch, Mid 2010) requires some careful wrangling of the cables snaking around it. The screws that fasten the hard drive to the OptiBay have a tapered head (like wood screws, where you screw all but the surface of the screw’s head into the wood), which caused the heads to stick out of the bottom of the OptiBay a bit. I was nervous that they would stick out far enough to keep the computer’s bottom case from fitting back on properly, but when the time came the case went back on fine. I still question the wisdom of using that specific design of screw, but I suppose if it works it’s all right in the end.
Once I had the two drives installed, it was time to set up the software side of things. It would be nice to start everything from scratch, but I have far too much careful software configuration to want to set everything up again, so my approach was to just restore my old drive onto these ones. (I’ll say now that I tend to do a lot of things on the command line and this project was no exception, so novice users looking to repeat my steps may want to stop here as I’ll be glossing over a lot of details and making assumptions about the reader’s skill level.) First I wanted to check to make sure both drives were recognized, so I booted from a Snow Leopard disc and opened Disk Utility. Happily they each showed up, proudly presenting themselves as internal SATA drives, so I formatted them each and switched over to Terminal.
Ready to start moving data, I connected my old hard drive via a Firewire 800 enclosure and moved its entire /Users onto the spacious new internal hard drive. My decision to move rather than copy was a deliberate one, since I already have a separate backup (thus nullifying the need to keep the original for safety’s sake) and I wanted /Users gone from the original since that would simplify moving everything else onto the SSD. After moving /Users finished, I copied everything that remained on my old hard drive onto the internal SSD. Once it was done, I used the “bless” command to mark the SSD as a bootable drive.
Now all of my data had been successfully moved to these two drives. Problem was, it was now split in two, with user data on one and apps and the OS on the other. They’d never been divorced before, so the OS was still going to be looking for user data on the startup drive. So, for starters I made a symlink of the new “Users” folder and put it at /Users on the SSD. However, there’s also a more “correct” way to do this where you can actually tell the OS that a user’s folder is at a specific path. To do this, I restarted from the SSD in single user mode and issued the following commands:
/bin/launchctl load /System/Library/LaunchDaemons/com.apple.DirectoryServices.plist
dscl .
cd /Local/Default/Users
change will dsAttrTypeNative:home /Users/will /Volumes/Hard/Users/will
exit
…where “will” was my user’s short name and “Hard” was the volume name of my hard drive.
Now, most of the data in my home folder isn’t used that regularly. I’ll open a few photos in iPhoto, play a few MP3′s, etc. Most data accesses are one-offs and not repeated very often. The exception to this is my “Library” folder. Here applications keep their caches, databases, preferences and so on, many of which see very heavy access when the applications that use them are first opened. I thus decided to move my user’s “Library” folder onto the SSD. I created a “UserLibraries” folder in the root of my SSD, moved my “Library” into it, renamed it “will” (in case I moved any other user libraries there in the future) and then symlink-ed the new location to the old one so that applications could still find it. Note that I left a space out of “UserLibraries”: I still run into applications once in a while that can’t handle spaces in file paths, so I air on the side of caution and decided to keep spaces out of the full path to the library folder (/UserLibraries/will).
One restart later and my system was ready for use, so it was time to see what sort of speed improvements had occurred. Here are some video benchmarks from before the upgrade:
So, to summarize, OS startup took 49 seconds, log in took 25 seconds and Photoshop startup took 14 seconds. Now here are the same benchmarks after installing the new drives:
OS startup had 6 seconds (12%) shaved off, which wasn’t as much of a speedup as I was hoping for. The other benchmarks, however, were where things got dramatic. Logging in was shortened by a whopping 22 seconds (88%), which is nothing short of breathtaking, and Photoshop’s startup had been shortened by 9 seconds (64%). Normal use of the computer has since shown that other applications saw similar improvements in startup time, and while things relying on computation power unsurprisingly saw little improvement, a variety of tasks involving heavy file I/O were sped up dramatically.
In short, the benefit of keeping even just some things (OS, apps, user library) on an SSD is very real. They’re not just measurable in benchmark terms, but also very, very noticeable in human terms. Most of peoples’ data consists of audio and video files, both of which stream off a hard drive without issue. There is thus little benefit in putting most of peoples’ data onto an SSD. A hybrid approach like this allows us to avoid the prohibitive cost of larger SSD’s while still enjoying the technology’s benefits. I am still curious why OS startup saw only modest improvement, though I suspect that much of that time is spent probing and communicating with hardware components, something a fast drive will benefit little. Despite that, I am able to heartily recommend this sort of upgrade. And, if the rumors are to be believed, Apple seems to feel the same way.
Filed under: Uncategorized

Like many people, I eagerly installed iOS 4.0 on my phone when it became available last week. I have an iPhone 3G, so the most significant new feature (multitasking) wouldn’t work with my device, but I’d at least get some of the smaller bells and whistles, like the unified mailbox and home screen folders.
Well, I got the new features, but I also took a big hit in the performance department. The iPhone 3G never performed very will in the first place, what with its 412MHz processor and paltry 128MB of RAM, but iOS 4.0 worsened things considerably. I’ve long complained of the iPhone’s inexplicable and unexpected pauses when you tap buttons or try to scroll, but iOS 4.0 took things to a whole new level of unresponsiveness. Those pauses occurred much more frequently, and for much longer periods of time. The home screen seemed especially badly hit, with swipes between pages frequently resulting in my swiping over and over again without the image budging one pixel in any direction. Additionally, app launch times increased dramatically, and in-app navigation also suffered.
Hitting the web, I quickly found I wasn’t alone in having this problem. Numerous blogs noted similar problems, including Gizmodo. One fellow even did a side-by-side video comparison:
I’d already installed iOS 4.0 via a restore (as opposed to an upgrade), so the first troubleshooting step was already out. I went ahead and restored again, this time not restoring from a backup on the off chance something in my backup was at fault. It seemed like it might have been a little faster at first, but after a day or two things were definitely back to being painfully sluggish. I cleared out most of my data to no avail. I tinkered for days, all without success. As near as I can tell, this is just how iOS 4 behaves on the iPhone 3G.
When Apple announced that iOS 4 would run on the iPhone 3G but not the nearly-identical (same CPU, same GPU, same RAM, etc.) original iPhone, I was perplexed as to why the original iPhone was left out. Unable to come up with a technical reason, my cynical nature led me to suspect that Apple was creating this arbitrary dividing line to force legacy iPhone users to upgrade if they wanted the new bells and whistles. While this could still be correct, I now have an alternate (or perhaps even complementary) theory. Perhaps Apple knew the performance of iOS 4 was bad on the iPhone and iPhone 3G. Perhaps, knowing this, they didn’t want to support either of the first two generations of iPhones, but because they’d been selling the iPhone 3G as a cheap alternative to the 3GS right up until two weeks before the release of iOS 4 they couldn’t reasonably lock out devices that new. So perhaps they locked out the iPhone because it hadn’t been sold in two years but warily let the iPhone 3G upgrade. I admit this is a cynical theory and even I think it somewhat unlikely, but frankly Apple is no stranger to this sort of calculation.
Today I restored back to 3.1.3. Everything is back to normal and the phone is consistently usable again. While the new features in iOS 4 were nice, they definitely weren’t worth the performance hit. I guess I’ll be sticking with iPhone OS 3 until I upgrade my device.

Sprint’s HTC Hero is where things began to get interesting. The Hero is the first phone I tried that lacks a hard keyboard, making it physically more similar to the iPhone that I’m used to. I’m fond of hard keyboards, but I’m also comfortable relying exclusively on a soft keyboard, so that issue didn’t bother me. And as I’ve said in my impressions of other phones, I don’t like moving parts, so the lack of a sliding mechanism pleases me. The build quality was fine: while the bottom button assembly felt a bit plastic-y, it didn’t feel cheap to the point of concern.
The arrangement of buttons at the bottom was a little odd, with the menu, search, home and back buttons forming a square around the trackball, then with the start and end call buttons hanging off either side. It’s a lot of buttons, and I feel like the four grouped in a square would serve better as a horizontal row above the trackball and call buttons. Also, the center area of the button cluster is strangely raised. I’d prefer a simpler design where it’s just flat with the trackball in the middle. The buttons aren’t delineated at all by the gradual raising of the surface, so I couldn’t discern any benefit from the raising. I’m sure I’d get used to both the button placement and elevation quickly enough, but the layout was still a bit odd off the bat.
Where things start to heat up, however, is in the software. This is the first HTC phone to bear their “HTC Sense” user interface, and the changes to Android that come with it are really nice. There are a lot of little visual tweaks about the place, most visibly being the tabs at the bottom of the home screen for accessing the phone and apps are redesigned as a single crescent and now features an “add” button for more easily adding widgets and shortcuts to the home screens. While I find most of these visual changes appealing, they don’t affect function significantly. What does are Sense’s “scenes” concept and a new soft keyboard.
“Scenes” is a new feature that HTC has brought to Android. One of the great features of Android is how heavily customizable the home screens are. You can add shortcuts to as many or few apps as you want, wherever you want, and you can add widgets, contacts and so on in addition to that. This is already one of Android’s greatest advantages over the iPhone in my book, but HTC takes it even further. Once you’ve set up your home screens the way you like, you can save that setup as a “scene”, and then start all over and create another. Once you’ve got multiple scenes (and the phone comes preloaded with several), you can switch between them on the fly. The most immediate use for this would seem to be having a work-oriented scene (with the e-mail widget, business contacts and so on) that you use during work and then a play-oriented scene (with Facebook, friend contacts and so on) that you switch to when you leave the office.
They keyboard has also gotten some significant reworking at HTC’s hands. The rows of keys are spaced apart a little more, making things a little less cramped. The list of auto-corrections now floats semi-transparently over the text field you’re typing into (rather than in an opaque bar above the keyboard), allowing the Sense keyboard to consume less space than the standard Android keyboard. The Sense keyboard also indicates what alternate character you can get if you hold down on the key (for example, holding down on the “A” key will give you an explanation point). Between the roominess, smaller footprint and increased functionality, the Hero’s new keyboard struck me as a big step up from the simpler soft keyboards I’d used on the Motorola CLIQ and Samsung Moment.
Speed was reasonable. It wasn’t lightning-quick, but even with a few apps running and a couple of windows open in the browser, things remained responsive. I didn’t get any notable delays when switching apps, tapping buttons, scrolling, etc. Also welcome was the inclusion of iPhone-style pinch-to-zoom multitouch in the browser, something missing from the CLIQ and Moment.
Overall, I was pleased with the Hero. After the lackluster (or outright disappointing) performances of the other phones, this was a nice discovery. It’s not perfect, but it’s the first phone I’ve played with that I’d consider taking home. We’ll see how the next few fare in the shadow of the Hero.

The Samsung Moment wasn’t a phone I’d originally intended on test-driving, but it was on display immediately next to the Pre and it runs Android, so I decided to give it a go. Software-wise it seemed pretty similar to the CLIQ I tried at T-Mobile, though it is a slightly older version (1.5 “Cupcake” instead of 1.6 “Donut”) so there are some small differences. After my hands-on I learned that the Moment has an 800MHz processor that is supposedly much faster than its competitors, but I couldn’t tell while using it. The keyboard was a bit laggy and scrolling was sometimes a bit herky-jerky, putting its performance merely on par with the other phones I’ve tried.
Build-wise I was unimpressed. While it didn’t feel shoddy, it also didn’t feel as solid as I’d like. There was a bit of give in the body when twisted and buttons wiggled a little more than I’d like them to, but overall there was nothing that gave me serious concern. I’m beginning to suspect I’m simply spoiled by the iPhone’s rigidity, but regardless it’s the standard I’ve come to expect in that department. Also, the headphone and USB jacks had those annoying little rubber covers you have to pick at to get off, which I really didn’t like. Related to the build, the phone felt kind of big. In terms of raw measurements it actually isn’t much bigger than my iPhone and isn’t dramatically heavier, but something about it just felt kind of clunky. It might be its less-than-slick design, or the presence of the massive keyboard, but whatever it is it does make the phone seem a little hefty regardless of whether or not it actually is.
The keyboard is indeed huge, and it really set this phone apart from the others I’ve seen. The numbers get their own row (unlike the Pre and the CLIQ), the keys aren’t in perfect, vertical, un-keyboard-like rows (unlike the Pre and the CLIQ), and the keys are big enough and have enough space between them to be usable by my big hands. I found it one of the more comfortable hard keyboards I’ve used, and a big improvement over the Pre’s. The keyboard layout, however, really wrecks what otherwise could have been my favorite keyboard so far. The space bar is annoyingly inserted between the V and B keys, and the letters on the bottom row are aligned with the letters above them differently than a normal keyboard layout. So you basically have to learn a new keyboard layout to type on this keyboard. While I’m sure that could be accomplished with time, it was maddening to try to use it initially because my fingers kept going to the wrong places. While I understand the placement of the space key is made tricky by the welcome addition of a dedicated row of number keys, I felt it was simply unwise to put the function and shift keys on the left where they bump the top and middle rows of letters out of place.
The phone seems like it has some advantage over the others on paper, but the real-world implementation really left me underwhelmed. I’d be willing to overlook the dull design and obnoxious port covers if there weren’t any functional problems (e.g. the keyboard was improved), but as it is it’s just another point against the Moment. Hopefully Samsung’s future Android efforts will improve.
Filed under: Uncategorized | Tags: 3g, at&t, iphone, palm, pre, smartphone, sprint, webos

As a former Palm OS user, the Palm Pre is a phone I’ve been really looking forward to using. Years ago I had a Handspring Visor, then a Sony CLIÉ. Even once I usurped them with a cell phone that could sync all my organizer data, I lusted after the Palm Treo 600 and 650. After a few years of Palm’s wheel-spinning the iPhone came along and their anemic offerings lost their appeal, but I’ve still kept a soft spot for Palm-related things. So when in January Palm revealed webOS, I was stoked. The multitasking, web-based app development and iPhone-like multitouch gestures all hooked me, and I was ready to get it into my grubby little hands.
Holding it in said grubby hands at the Sprint store last night, I was pleased with the build of the phone. It felt more solid than the CLIQ, and it seemed to have fewer little bits of plastic joined together, thus resulting in a more rigid feel. It’s still a slider, which I’m not a big fan of build-wise, but it was still an improvement over my last experience in that regard.
The screen was very impressive. It’s definitely the brightest of any phone I’ve seen so far, easily outperforming the one in my iPhone and any of the other phones on display there in the Sprint store. Pictures and video looked great on it, better than on my iPhone. Even though the display is the same resolution (320×480), it’s a good bit smaller dimension-wise so I have to squint a little harder at it if I’m not wearing my glasses (which I don’t 90% of the time). For this reason I wish the screen were a little bigger, but it’s certainly not a dealbreaker.
I liked webOS a lot. Any degree of multitasking is welcome, and webOS delivers in spades. I’ve always been curious how other mobile operating systems handle opening all these different things when they only have ~256MB of memory at their disposal, so I put it through its paces by opening lots of apps and browser windows simultaneously and switching between them. I opened about 8 different “cards” and didn’t notice any significant performance hit, so webOS’s ingenious method of having all apps being nothing more than a window in a browser seems to pay off in terms of performance. One thing that always irks me on the iPhone is that while you can open multiple windows in Safari, the phone won’t keep the page in more than one loaded for very long. I assume this is due to memory constraints, and if window number two needs more memory it will forget the content of window number one so that two can do what it needs. I understand the technical practicality of this, but it’s still frustrating when you’re trying to flip back and forth between two windows and it will have to reload the first one because it forgot its content. I did try having several browser windows open on the Pre, each displaying a page with a large number of individual pictures (the sort of page the iPhone is prone to forget) and it did maintain the content of each page for several minutes of testing. After I’d opened a bunch of other apps and gotten up to about 8 different cards it finally forgot the content of the first browser card I opened (I assume for the same reason the iPhone does), but it definitely fared better than the iPhone in that regard.
The interface wasn’t as responsive as the CLIQ’s was. Like my iPhone 3G there was a slight, fraction-of-a-second delay on a lot of taps, but I didn’t experience any of the frustratingly long (e.g. 1+ second) pauses like I do regularly on my iPhone. I experienced a complete phone crash while watching the demo video that was on the phone. It was playing for several seconds, then the frame abruptly froze and the phone became unresponsive. Tapping the button to go back to the home screen did nothing, and after a few seconds the phone simply restarted itself, presenting me with the Palm boot screen. While it could totally be a one-off glitch, I can’t say that webOS’s built-in media player crashing the whole device while playing Palm-supplied content left me with a flawless impression of the Pre’s stability.
I did the same network tests that I did on the CLIQ, trying to get a feel for Sprint’s EV-DO network. Pings were startlingly low, averaging about 140ms. This was really impressive for someone used to the 240+ ms pings on UMTS networks. However, Sprint’s actual transfer speed wasn’t impressive. I did about ten tests and got widely divergent results. While two were in the 800kbps range, most were down around 500kbps, two even lower. It definitely wasn’t as consistent as T-Mobile, or even as consistent as AT&T. But AT&T definitely has bad days, and maybe I just caught Sprint at an off moment. Not a great impression in terms of bandwidth, though. Real-world testing in the browser yielded average results, more or less on par with my iPhone 3G. It loaded pages well without any noticeable hiccups (it got the page the CLIQ didn’t) but wasn’t as snappy as the CLIQ had been. The presence of multitouch was very welcome in the browser, though, as I forgot to mention in my CLIQ review that the absence of it on that device was a bit frustrating. Obviously as an iPhone user pinching to zoom and double-tapping to zoom on a particular element are second nature, and much simpler and more precise solutions than the zoom slider the CLIQ tried to pass off instead. I was happy to see those gestures implemented on the Pre.

Image from precentral.net
The keyboard was a huge disappointment. At least on the CLIQ there was a soft keyboard I could fall back to if I didn’t like the hard one, but on the Pre no such option exists. Which is unfortunate, because I really disliked the Pre’s keyboard. First off, it is tiny. Far and away the smallest I’ve seen. I’ve got big hands and already find normal mobile keyboards a bit cumbersome because of this, but this really took it to the extreme. The keys are simply too cramped together for me to type on comfortably. When I tried to type with the pads of my fingers, as I do on my iPhone and have done on all other mobile keyboards, the pad of each finger touches three or four different keys simultaneously. As long as I’m careful about where I’m directing my finger’s pressure I was usually able to depress only the desired key, but this required extra care and made typing a less than comfortable experience. I found I could type much more precisely and with less uncertainty if I bent down my thumbs and used their tips and my nails, but this quickly made my hands really uncomfortable so that was no good. Additionally, the keys were made of some sort of soft rubber material that kept the keys from having the sort of firm assurance I’d like from a hard keyboard. I’m sure typing on the Pre would get easier with time, but no amount of time is going to make the keyboard a more reasonable size. I expect that even after months of practice, typing on the Pre’s keyboard would still be less than ideal.
So while in my head I was definitely expecting the Pre to be a final contender, it actually got knocked out pretty quickly entirely because of having a disappointing keyboard. I liked the software, it was reasonably responsive and the phone seemed reasonably well-built, but given how much I disliked the only way the device allows you to type, that pretty much ruins everything else. Maybe Palm will put out a device in the future with a better keyboard (the brand new Pixi sitting next to the Pre I tried wasn’t significantly better), but until then I’m sadly going to have to steer clear of their offerings.
Filed under: Uncategorized | Tags: 3g, android, at&t, cliq, iphone, motorola, smartphone, t-mobile
I’ve been interested in Android since it first appeared on the market, and T-Mobile was its first champion with the G1. They now offer three Android phones, so I swung by their shop near my apartment and looked around. Their sales staff was friendly and helpful, and they quickly pointed me to the sole Motorola CLIQ they had on display. I’d also wanted to check out the myTouch 3G, but surprisingly, despite being branded with T-Mobile’s own name, they didn’t have any working models on display there in the store. (While on that note, why on earth do cell phone stores insist on displaying non-working models of phones? How can they expect customers to make informed decisions about their products if they can’t even see them? Gah.) So, lacking any other choices, Motorola CLIQ it was.

It was nice getting re-acquainted with a hard keyboard. As much as I like the iPhone’s soft keyboard, I find it impossible to be totally confident that the key I’m trying to press is the key I’m actually pressing. You quickly learn to just do your best and trust the auto-correction, but situations where it doesn’t determine the correct word happen frequently with normal use. Being able to feel each individual key and thus be assured I’m hitting the right key is a welcome relief. I’m so out of practice with hard keyboards that it was slow going, but I imagine I’d get back up to speed again pretty quickly. My only real complaint with the CLIQ’s hard keyboard is that it seemed like the top row of keys were too close to the other half of the phone (the part housing the screen). I found my thumbs bumping against it whenever I tried to use those keys. It could just be my big hands, but it was annoying regardless.
One thing that I realized while using the hard keyboard was how spoiled I’d become by soft keyboards’ ability to use different key layouts in different contexts. For example, when I went to type a URL in the browser, I instinctively looked for the “.com” button the iPhone’s soft keyboard gives you in the address box. Similarly, when typing an e-mail address in the mail app, I had to go and alt-click for an @, whereas on the iPhone that key is one tap away in Mail’s “to” fields. So there’s a significant advantage of soft over hard keyboards, there.
I thought the CLIQ’s soft keyboard was excellent. The thing that really stood out to me as a major improvement over the iPhone’s soft keyboard was the way it shows a list of words it thinks you might be trying to type, rather than the iPhone which only shows you one. This would be very useful in situations where the iPhone’s first (and only) guess isn’t the right one, but there’s another legit guess that the CLIQ would show you and you could select. On the iPhone you’d have to stop and correct it manually, which after two and a half years I still find annoying.
I didn’t think the build quality of the phone was very good. Granted, I was using a display model, so it’s quite possible that the phone has seen a rough life and everything isn’t quite as tight as it was originally, but at the same time that may be a good indicator of how the phone will feel after a few months of use. There wasn’t really anything specifically wrong with it, the body just had a bit of flex and give when you’d apply pressure to it from different directions. It seemed like it could be a bit more rigid and solid-feeling. I’m also fundamentally concerned with the sliding aspect of slider phones for the same reason I’m concerned with the hinge in flip phones. Joints are points of structural weakness, and they tend to wear more than other parts due to their constant opening and closing. I avoided flip phones for this reason for many years, and my fears were realized less than a year after getting a Motorola RAZR when its hinge literally fell apart and broke the phone in half.
I ran a few speed tests to see how T-Mobile’s 3G network compared to AT&T’s. While I found the pings to be a little higher than on my iPhone (avg. 280ms vs. 230ms), the transfer speed was much faster, averaging about 750kbps, much better than the 400kbps I average on AT&T. I noticed a very noticeable increase in browsing speed, though some of that could be attributable to a faster browser. Either way, big win for T-Mobile on this point.
The apps seemed nice, though they didn’t feel as consistent design-wise (both in terms of UI and function) as Apple’s do. Appealing design has never really been Google’s strength, so that’s not exactly a surprise, but it was still something I noticed. I didn’t have time to get too deeply into them, but I had enough to come away feeling like the software was much more responsive than the software on my iPhone 3G. Apps loaded faster on the CLIQ, and once they were open I didn’t experience any inexplicable pauses between a tap and the software’s reaction as happens regularly on my iPhone. I liked the browser, it seemed to be pretty capable and displayed most pages as I expected. There was one page that I know displays properly on an iPhone but didn’t here, so it seems to fall at least a little short of Safari, but only more thorough testing could tell how much of a discrepancy there really is. The mail app was fine, no surprises there. I set up my Gmail account on Google Talk without a problem and had a good experience with that until I tried to figure out how to remove my account. There was nothing in the app’s settings for doing this, and while there is an “Accounts” app on the device that did indeed list my Gmail account, it had a little padlock by it and wouldn’t let me delete it. Since there was no explanation of what this padlock meant, I speculated that perhaps you always have to have at least one Google account set up, so I tried to set up another so that I could remove the first, but it told me I could only have one account. It took me 10 minutes of tinkering before I finally did a search on Google and found someone explaining that you had to go into the phone’s general settings, manage the apps, find Google Talk and clear its data. While it’s cool that on the CLIQ there’s a standard way to remove an app’s data without removing the app itself, the relatively simple task of removing a Google Talk account turned out to be a frustratingly unintuitive experience.
One thing Android offers that I really liked was the widget system. Being able to sprinkle your home screen with things that are actually useful (unlike the iPhone, which only allows app icons) and can save you a trip into an app struck me as a huge advantage. While several looked very useful, I especially liked the weather widget, which gives you a snapshot of the current weather, and then when tapped it can show you a day-by-day forecast or an hourly forecast, the latter being something I wished a hundred times Apple’s weather app could do and ultimately led to me ditching it for the Weather Channel’s app. Widgets are something I’m going to look more closely at on the next Android phone I try out.
So overall the Motorola CLIQ seems a pretty decent phone. It’s snappy, has some really nice software features and is on a better 3G network than the one I am now. That said, the build quality is unimpressive, the keyboard seems a little cramped and the Android OS could use some improvement in terms of polish and usability. If I can find an Android phone that solves some of these issues, I may have found something I’d take home for more exhaustive testing. The CLIQ is close, but not quite there.
I’ve had an iPhone since it came out. It’s a great phone that does a ton of things very, very well. I love its browser, its iPod functionality and its over-the-air synchronization with my Mac’s calendar and contacts. The app store ushered in with the 2.0 software opened the gates on a torrent of really useful apps I use on a daily, sometimes even hourly, basis. It improves my life in many ways and I can’t imagine going about my day without it.
That said, there aren’t many days that go by where I don’t want to throw the damn thing out a window.
My first problem is the device itself. It clearly has neither the processing power nor the memory necessary to run its operating system smoothly. Many times a day I will try to scroll the browser window or tap a button and it will sit frozen for an indeterminate period before it responds to my input. Sometimes it’s only half a second, but sometimes it’s longer than ten seconds. This problem persists across all apps on the phone, be they built-in Apple apps or third-party ones from the app store. Some apps also take an irritatingly long amount of time to launch and become usable. The worst offenders are Apple’s own Messages and Maps apps. Messages (formerly known as “SMS”) has had a long, long, long history of being slow to open (which is bizarre given how simple the app is technically) and I recently counted 14 seconds pass as I waited for the app to load and show me anything beyond a blank, gray screen. Maps is similar but will actually draw out the map before stalling a while, leaving me tapping at the search box over and over as I wait for it to respond. Conversations with customers and peers revealed that these problems weren’t isolated to my own phone.
I’ve spent countless hours over the past year trying to suss this issue out, having restored and even replaced the phone multiple times. I’ve done split-half searches, I’ve tried installing no 3rd party apps, I’ve tried restarting the phone regularly, I’ve tried keeping WiFi disabled, basically everything I could think of I’ve tried. After each restore it would seem like the latency had disappeared, but after a week or two of use it’d be right back to its old tricks. But when the iPhone 3GS came out and starting running the same software on a faster processor with twice the memory, all of a sudden the software ran much more smoothly. This confirmed my suspicion that I wasn’t doing something wrong, the pre-3GS phones just weren’t powerful enough to run their software well.
Obviously upgrading to a 3Gs would alleviate this complaint, but I’m not upgrade-eligible until next year. But even if I shelled out the extra $200 to do it now, bringing my total to $400, it would do nothing to solve my other problem:

The network. AT&T has done a remarkable job of earning themselves a very nasty reputation over the past year as their network (at least in urban areas) has crumbled under the onslaught of heavy 3G activity. I’ve been a customer of AT&T’s for over 6 years and had no complaints until about a year ago, whereupon the problem developed very quickly. Apple customer service itself acknowledges that dropped calls are frequent and normal here in New York, and the reports I hear from other major cities in the US don’t paint a much rosier picture. It is normal for iPhones in major cities to lose their 3G connections and fall back to EDGE, only to drop that connection for a new 3G one a few minutes later. The speed of the network has been deteriorating steadily and frequently tests below 200kbps. While all of these are issues I experience regularly at home in New York and while traveling to other cities, they are also widely corroborated online by other users in the same locales.
Where does the blame for AT&T’s poor network performance lay? Well, of course a great deal of it lies at the feet of AT&T, the one responsible for maintaining and expanding the network in question. But I’m often surprised by how frequently Apple’s role in the fiasco is overlooked. After all, it’s widely accepted that the iPhone’s popularity and typical data-guzzling use are the main contributors to AT&T’s network overload. So why is this taxing phone only on one of the four major wireless carriers in the U.S.? Normally a hot new phone will get an exclusive launch on a single carrier, but usually once the launch hype has subsided it will get released on other carriers as well. Not so with the iPhone. Apple’s decision to keep the iPhone on AT&T has meant that the millions of iPhone users in the United States, who consume up to ten times more data than the average smartphone user, are all stuck sharing the same 3G network instead of being spread amongst as many as four. I’ve seen no evidence that any of the other networks could handle the sort of load AT&T has abruptly assumed any better, leading me to believe managing all iPhone subscribers on any single network is, at present, an impossible task. I thus believe Apple’s repeated insistence on AT&T exclusivity is the real problem here, not AT&T’s network.
So it’s after two and a half years of being frustrated with the device and one year of the device being limited by a slow, unreliable network that I’m starting to look at other phones. Android launched a little over a year ago, and Palm stepped back from the brink with the launch of webOS, so there are a lot more choices out there since the iPhone first appeared three summers ago. I’m going to spend the next few days researching various offerings in an effort to find the most interesting one on another network, then I’ll be taking it home for a month-long test-drive. I’ll post my hands-on impressions with each contender here, then have regular, more in-depth posts on the device I take home. At the end I’ll decide how it stacks up against my iPhone 3G, and if I like the challenger better I’ll jump ship from Apple and AT&T.
The contenders have their work cut out for them. For all of my complaints with the iPhone and AT&T’s service, the iPhone is a powerful device and AT&T’s network still works most of the time. Apple has been typically stubborn in delivering many things that its customers have asked for since day one of the iPhone (copy and paste, MMS, tethering, etc.) but after two years it’s delivered most of them. Android and webOS, by contrast, are much younger and still sorting out many of their shortcomings, so they’re operating at a disadvantage there. Additionally, as someone who relies heavily on the iPhone’s multimedia capabilities, I’m already worried about them not matching the formidable example set by the iPhone in that department. That said, I absolutely want them to. If something can match or even exceed the capabilities of my iPhone, I’ll be thrilled.
I’ll be indexing everything at The Search for a Better Smartphone, so check back there periodically for updates. In the meantime, I’m off to the T-Mobile store!
For the past few weeks, AppleVNCServer (aka screen sharing) crashes when you connect to it. It’s on a Mac mini running Mac OS X Server 10.5.8. Here’s the relevant bit from system.log:
Oct 3 14:17:35 minnie ReportCrash[12942]: Formulating crash report for process AppleVNCServer[12874]
Oct 3 14:17:36 minnie com.apple.launchd[264] (com.apple.ScreenSharing.server[12874]): Exited abnormally: Segmentation fault
Oct 3 14:17:37 minnie ReportCrash[12942]: Saved crashreport to /Users/will/Library/Logs/CrashReporter/AppleVNCServer_2009-10-03-141730_minnie.crash using uid: 501 gid: 20, euid: 501 egid: 20
Nothing too interesting there, so here’s the crash log it mentions:
Process: AppleVNCServer [12874]
Path: /System/Library/CoreServices/RemoteManagement/AppleVNCServer.bundle/Contents/MacOS/AppleVNCServer
Identifier: AppleVNCServer
Version: ??? (???)
Code Type: X86 (Native)
Parent Process: launchd [264]
Date/Time: 2009-10-03 14:17:30.662 -0400
OS Version: Mac OS X Server 10.5.8 (9L34)
Report Version: 6
Anonymous UUID: 1DFDDD4A-5259-4417-A19F-8DA81EA911FC
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: 0x000000000000000d, 0x0000000000000000
Crashed Thread: 4
Thread 0:
0 libSystem.B.dylib 0x90d51286 mach_msg_trap + 10
1 libSystem.B.dylib 0x90d58a7c mach_msg + 72
2 com.apple.CoreFoundation 0x9098de7e CFRunLoopRunSpecific + 1790
3 com.apple.CoreFoundation 0x9098eb04 CFRunLoopRun + 84
4 com.apple.AppleVNCServer 0x00005a4f 0x1000 + 19023
5 com.apple.AppleVNCServer 0x00002675 0x1000 + 5749
6 com.apple.AppleVNCServer 0x00025636 0x1000 + 149046
7 com.apple.AppleVNCServer 0x00001fd9 0x1000 + 4057
Thread 1:
0 libSystem.B.dylib 0x90d819c6 kevent + 10
1 ...ple.CoreServices.CarbonCore 0x95789057 PrivateMPEntryPoint + 56
2 libSystem.B.dylib 0x90d82155 _pthread_start + 321
3 libSystem.B.dylib 0x90d82012 thread_start + 34
Thread 2:
0 libSystem.B.dylib 0x90d883ca select$DARWIN_EXTSN$NOCANCEL + 10
1 com.apple.AppleVNCServer 0x00004c9b 0x1000 + 15515
2 ...ple.CoreServices.CarbonCore 0x95789057 PrivateMPEntryPoint + 56
3 libSystem.B.dylib 0x90d82155 _pthread_start + 321
4 libSystem.B.dylib 0x90d82012 thread_start + 34
Thread 3:
0 libSystem.B.dylib 0x90d512da semaphore_timedwait_trap + 10
1 ...ple.CoreServices.CarbonCore 0x9579c47b MPWaitOnSemaphore + 125
2 com.apple.AppleVNCServer 0x00006be5 0x1000 + 23525
3 ...ple.CoreServices.CarbonCore 0x95789057 PrivateMPEntryPoint + 56
4 libSystem.B.dylib 0x90d82155 _pthread_start + 321
5 libSystem.B.dylib 0x90d82012 thread_start + 34
Thread 4 Crashed:
0 com.apple.AppleVNCServer 0x00037a1e 0x1000 + 223774
1 com.apple.AppleVNCServer 0x000157c8 0x1000 + 83912
2 com.apple.AppleVNCServer 0x00014a5f 0x1000 + 80479
3 com.apple.AppleVNCServer 0x00008fa4 0x1000 + 32676
4 ...ple.CoreServices.CarbonCore 0x95789057 PrivateMPEntryPoint + 56
5 libSystem.B.dylib 0x90d82155 _pthread_start + 321
6 libSystem.B.dylib 0x90d82012 thread_start + 34
Thread 5:
0 libSystem.B.dylib 0x90d51286 mach_msg_trap + 10
1 libSystem.B.dylib 0x90d58a7c mach_msg + 72
2 com.apple.framework.IOKit 0x911a94b7 io_connect_method + 592
3 com.apple.framework.IOKit 0x911333c6 IOConnectCallMethod + 300
4 ...er.AppleIntelGMA950GLDriver 0x00782c95 glrReadPixels + 1973
5 GLEngine 0x005ff144 glReadPixels_Exec + 2004
6 libGL.dylib 0x93eecaa9 glReadPixels + 73
7 com.apple.AppleVNCServer 0x000155ee 0x1000 + 83438
8 com.apple.AppleVNCServer 0x00009d87 0x1000 + 36231
9 ...ple.CoreServices.CarbonCore 0x95789057 PrivateMPEntryPoint + 56
10 libSystem.B.dylib 0x90d82155 _pthread_start + 321
11 libSystem.B.dylib 0x90d82012 thread_start + 34
Thread 6:
0 libSystem.B.dylib 0x90d5846e __semwait_signal + 10
1 libSystem.B.dylib 0x90d82dcd pthread_cond_wait$UNIX2003 + 73
2 libGLProgrammability.dylib 0x93f43b32 glvmDoWork + 162
3 libSystem.B.dylib 0x90d82155 _pthread_start + 321
4 libSystem.B.dylib 0x90d82012 thread_start + 34
Thread 4 crashed with X86 Thread State (32-bit):
eax: 0x00807c00 ebx: 0x00000000 ecx: 0x000b5000 edx: 0xffffeaa8
edi: 0x000b5000 esi: 0x125d40a8 ebp: 0xb0226c28 esp: 0xb0226854
ss: 0x0000001f efl: 0x00010202 eip: 0x00037a1e cs: 0x00000017
ds: 0x0000001f es: 0x0000001f fs: 0x0000001f gs: 0x00000037
cr2: 0x00037a10
Binary Images:
0x1000 - 0x4dff7 com.apple.AppleVNCServer 3.3.1 (3.3.1) <5b4a7fdb0c13de88d2d0bd7c309047ed> /System/Library/CoreServices/RemoteManagement/AppleVNCServer.bundle/Contents/MacOS/AppleVNCServer
0xcb000 - 0xe7ff7 GLRendererFloat ??? (???) <7badea5e2b8167c0e6391623bb46140a> /System/Library/Frameworks/OpenGL.framework/Versions/A/Resources/GLRendererFloat.bundle/GLRendererFloat
0x5b2000 - 0x737fe3 GLEngine ??? (???) <052e02d9a452a45d014ffbd2a84a4e7c> /System/Library/Frameworks/OpenGL.framework/Resources/GLEngine.bundle/GLEngine
0x765000 - 0x7beff7 com.apple.driver.AppleIntelGMA950GLDriver 1.5.48 (5.4.8) <806d3030842b46995c46c9059046f2fc> /System/Library/Extensions/AppleIntelGMA950GLDriver.bundle/Contents/MacOS/AppleIntelGMA950GLDriver
0x8fe00000 - 0x8fe2db43 dyld 97.1 (???) <458eed38a009e5658a79579e7bc26603> /usr/lib/dyld
0x9020b000 - 0x90264ff7 libGLU.dylib ??? (???) <64d010e31d7596bd8f9edc6e027d1d0c> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib
0x9034d000 - 0x90354ffe libbsm.dylib ??? (???) /usr/lib/libbsm.dylib
0x9036d000 - 0x9077dfef libBLAS.dylib ??? (???) /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
0x9077e000 - 0x907dbffb libstdc++.6.dylib ??? (???) <04b812dcec670daa8b7d2852ab14be60> /usr/lib/libstdc++.6.dylib
0x907dc000 - 0x907dcffd com.apple.Accelerate 1.4.2 (Accelerate 1.4.2) /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate
0x907dd000 - 0x907ebffd libz.1.dylib ??? (???) <5ddd8539ae2ebfd8e7cc1c57525385c7> /usr/lib/libz.1.dylib
0x90890000 - 0x9091afe3 com.apple.DesktopServices 1.4.8 (1.4.8) /System/Library/PrivateFrameworks/DesktopServicesPriv.framework/Versions/A/DesktopServicesPriv
0x9091b000 - 0x90a4efe7 com.apple.CoreFoundation 6.5.7 (476.19) /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
0x90a94000 - 0x90a94ff8 com.apple.ApplicationServices 34 (34) <8f910fa65f01d401ad8d04cc933cf887> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices
0x90cfe000 - 0x90d4fff7 com.apple.HIServices 1.7.1 (???) /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices
0x90d50000 - 0x90eb7ff3 libSystem.B.dylib ??? (???) /usr/lib/libSystem.B.dylib
0x90eb8000 - 0x90f4bfff com.apple.ink.framework 101.3 (86) /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework/Versions/A/Ink
0x90f52000 - 0x90f8cfe7 com.apple.coreui 1.2 (62) /System/Library/PrivateFrameworks/CoreUI.framework/Versions/A/CoreUI
0x90f8d000 - 0x90f96fff com.apple.speech.recognition.framework 3.7.24 (3.7.24) /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition
0x91073000 - 0x91074ffc libffi.dylib ??? (???) /usr/lib/libffi.dylib
0x910f3000 - 0x910f8fff com.apple.CommonPanels 1.2.4 (85) /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/CommonPanels.framework/Versions/A/CommonPanels
0x9112e000 - 0x911bbff7 com.apple.framework.IOKit 1.5.2 (???) <7a3cc24f78f93931731203854ae0d891> /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
0x911bc000 - 0x91243ff7 libsqlite3.0.dylib ??? (???) /usr/lib/libsqlite3.0.dylib
0x91244000 - 0x912d1ff7 com.apple.LaunchServices 292 (292) /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices
0x912d2000 - 0x912f0ff3 com.apple.DirectoryService.Framework 3.5.6 (3.5.6) <48d78074835db0d5fe5b632991c21b1b> /System/Library/Frameworks/DirectoryService.framework/Versions/A/DirectoryService
0x912f1000 - 0x91310ffa libJPEG.dylib ??? (???) <50b881dd5a5795d38405c9c88c2806fa> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib
0x91311000 - 0x91350fef libTIFF.dylib ??? (???) <801873cbd85ba7bdfe7646fe97a54ca3> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib
0x92330000 - 0x92501ffb com.apple.security 5.0.5 (36371) <1f7f48b36bc90d114220cc81e4e4694f> /System/Library/Frameworks/Security.framework/Versions/A/Security
0x92666000 - 0x92693feb libvDSP.dylib ??? (???) /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib
0x92694000 - 0x9273bfec com.apple.CFNetwork 438.14 (438.14) <5f9ee0430b5f6319f18d9b23e777e0d2> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CFNetwork.framework/Versions/A/CFNetwork
0x9278e000 - 0x9278effd com.apple.Accelerate.vecLib 3.4.2 (vecLib 3.4.2) /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib
0x9278f000 - 0x927a4ffb com.apple.ImageCapture 5.0.2 (5.0.2) /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/ImageCapture.framework/Versions/A/ImageCapture
0x92978000 - 0x92978ffb com.apple.installserver.framework 1.0 (8) /System/Library/PrivateFrameworks/InstallServer.framework/Versions/A/InstallServer
0x92cc7000 - 0x92cc7ffa com.apple.CoreServices 32 (32) <2fcc8f3bd5bbfc000b476cad8e6a3dd2> /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices
0x92cc8000 - 0x92fd0fe7 com.apple.HIToolbox 1.5.6 (???) /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox
0x92fd1000 - 0x92fedff3 libPng.dylib ??? (???) <271373dd41f56369a3dfca0ed2be579a> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib
0x92fee000 - 0x93017fff libcups.2.dylib ??? (???) <3f0976287f63781607864f6586ad7229> /usr/lib/libcups.2.dylib
0x93018000 - 0x9303cfff libxslt.1.dylib ??? (???) /usr/lib/libxslt.1.dylib
0x9303d000 - 0x9303dffc com.apple.audio.units.AudioUnit 1.5 (1.5) /System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit
0x93075000 - 0x930f4ff5 com.apple.SearchKit 1.2.2 (1.2.2) <3b5f3ab6a363a4d8a2bbbf74213ab0e5> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit
0x931ef000 - 0x93296feb com.apple.QD 3.11.56 (???) /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD
0x932c1000 - 0x93413ff3 com.apple.audio.toolbox.AudioToolbox 1.5.2 (1.5.2) /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox
0x93414000 - 0x9342afff com.apple.DictionaryServices 1.0.0 (1.0.0) /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices
0x93453000 - 0x9346bff7 com.apple.CoreVideo 1.6.0 (20.0)
/System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo
0x934a7000 - 0x93587fff libobjc.A.dylib ??? (???) <3ca288b625a47bbcfe378158e4dc328f> /usr/lib/libobjc.A.dylib
0x93590000 - 0x93594fff libmathCommon.A.dylib ??? (???) /usr/lib/system/libmathCommon.A.dylib
0x93596000 - 0x93613fef libvMisc.dylib ??? (???) /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib
0x93614000 - 0x93652fff libGLImage.dylib ??? (???) <2e570958595e0c9c3a289158223b39ee> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib
0x93653000 - 0x93a11fea libLAPACK.dylib ??? (???) /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib
0x93a12000 - 0x93a18fff com.apple.print.framework.Print 218.0.3 (220.2) <8c541d587e4068a5fe5a5ce8ee208516> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Print.framework/Versions/A/Print
0x93a19000 - 0x93a1bfff com.apple.securityhi 3.0 (30817) <2b2854123fed609d1820d2779e2e0963> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SecurityHI.framework/Versions/A/SecurityHI
0x93a1c000 - 0x93a2cffc com.apple.LangAnalysis 1.6.5 (1.6.5) /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis
0x93a2d000 - 0x93ca9fe7 com.apple.Foundation 6.5.9 (677.26) /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
0x93caa000 - 0x93d24ff8 com.apple.print.framework.PrintCore 5.5.4 (245.6) <9ae833544b8249984c07544dbe6a97fa> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore
0x93d25000 - 0x93ddffe3 com.apple.CoreServices.OSServices 228 (228) /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices
0x93ee7000 - 0x93ee7fff com.apple.Carbon 136 (136) <98a5e3bc0c4fa44bbb09713bb88707fe> /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon
0x93ee8000 - 0x93eeaff5 libRadiance.dylib ??? (???) /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib
0x93eeb000 - 0x93ef7ffe libGL.dylib ??? (???) /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib
0x93ef8000 - 0x93f10fff com.apple.openscripting 1.2.8 (???) /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/OpenScripting.framework/Versions/A/OpenScripting
0x93f11000 - 0x93f1bfeb com.apple.audio.SoundManager 3.9.2 (3.9.2) <0f2ba6e891d3761212cf5a5e6134d683> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/CarbonSound.framework/Versions/A/CarbonSound
0x93f1c000 - 0x943edfbe libGLProgrammability.dylib ??? (???) /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLProgrammability.dylib
0x943ee000 - 0x94430fef com.apple.NavigationServices 3.5.2 (163) <7f4f1766414a511bf5bc68920ac85a88> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/NavigationServices.framework/Versions/A/NavigationServices
0x94456000 - 0x94485fe3 com.apple.AE 402.3 (402.3) /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE
0x94486000 - 0x94503feb com.apple.audio.CoreAudio 3.1.2 (3.1.2) <782a08c44be4698597f4bbd79cac21c6> /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio
0x94504000 - 0x9450bfe9 libgcc_s.1.dylib ??? (???) /usr/lib/libgcc_s.1.dylib
0x9450c000 - 0x9452afff libresolv.9.dylib ??? (???) <0e26b308654f33fc94a0c010a50751f9> /usr/lib/libresolv.9.dylib
0x94592000 - 0x945a2fff com.apple.speech.synthesis.framework 3.7.1 (3.7.1) <9a71429c74ed6ca43eb35e1f78471b2e> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis
0x945a3000 - 0x94636ff3 com.apple.ApplicationServices.ATS 3.7 (???) /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS
0x94637000 - 0x9463ffff com.apple.DiskArbitration 2.2.1 (2.2.1) /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration
0x9465b000 - 0x946a4fef com.apple.Metadata 10.5.8 (398.26) /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata
0x946a5000 - 0x946a5ff8 com.apple.Cocoa 6.5 (???) /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa
0x946a6000 - 0x946aafff libGIF.dylib ??? (???) <3c7100e80b7f7ca8809cf9512c1a6004> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib
0x946ab000 - 0x9475dffb libcrypto.0.9.7.dylib ??? (???) <8ac6abef4b3bb125c8bf84634421bcee> /usr/lib/libcrypto.0.9.7.dylib
0x94897000 - 0x94978ff7 libxml2.2.dylib ??? (???) <4d54971007e14f8d80e6889ee1111f21> /usr/lib/libxml2.2.dylib
0x95206000 - 0x95206ffd com.apple.vecLib 3.4.2 (vecLib 3.4.2) /System/Library/Frameworks/vecLib.framework/Versions/A/vecLib
0x95207000 - 0x95340ff7 libicucore.A.dylib ??? (???)
/usr/lib/libicucore.A.dylib
0x95341000 - 0x956defef com.apple.QuartzCore 1.5.8 (1.5.8) <18113e06d296230d63a63b58baf35f55> /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore
0x95708000 - 0x9573ffff com.apple.SystemConfiguration 1.9.2 (1.9.2) <41d5aeffefc6d19d471f51ae0b15024f> /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration
0x95740000 - 0x95a1aff3 com.apple.CoreServices.CarbonCore 786.11 (786.14) /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore
0x95a1b000 - 0x95a1efff com.apple.help 1.1 (36) /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Help.framework/Versions/A/Help
0x95aa7000 - 0x95b6eff2 com.apple.vImage 3.0 (3.0) /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage
0x95b6f000 - 0x9636dfef com.apple.AppKit 6.5.9 (949.54) <4df5d2e2271175452103f789b4f4d8a8> /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
0x967de000 - 0x968c6ff3 com.apple.CoreData 100.2 (186.2) <44df326fea0236718f5ed64084e82270> /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData
0x96936000 - 0x96961fe7 libauto.dylib ??? (???) <4f3e58cb81da07a1662c1f647ce30225> /usr/lib/libauto.dylib
0x9699b000 - 0x96a4bfff edu.mit.Kerberos 6.0.13 (6.0.13) /System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos
0x96a4c000 - 0x96aa8ff7 com.apple.htmlrendering 68 (1.1.3) /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HTMLRendering.framework/Versions/A/HTMLRendering
0x96cae000 - 0x96cbbfe7 com.apple.opengl 1.5.10 (1.5.10) /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL
0x96cbf000 - 0x96e07ff7 com.apple.ImageIO.framework 2.0.6 (2.0.6) <7f73ef328c8e8566f3f204b5a540a7f0> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/ImageIO
0x96e08000 - 0x96e62ff7 com.apple.CoreText 2.0.4 (???) /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreText.framework/Versions/A/CoreText
0x96e79000 - 0x96f44fef com.apple.ColorSync 4.5.3 (4.5.3) /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSync.framework/Versions/A/ColorSync
0x96f45000 - 0x975e5fef com.apple.CoreGraphics 1.409.4 (???) /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics
0xfffe8000 - 0xfffebfff libobjc.A.dylib ??? (???) /usr/lib/libobjc.A.dylib
0xffff0000 - 0xffff1780 libSystem.B.dylib ??? (???) /usr/lib/libSystem.B.dylib
Here’s where I reach the limits of my knowledge. It looks like the system is pointing its finger at thread 4 as the culprit, and thread 4 looks like it’s loaded up the libSystem and Carbon libraries. So perhaps one of those core system libraries are corrupted? I tried re-applying the 10.5.8 combo update (since that will overwrite a lot of libraries with the latest version, just in case) to no effect, and I removed all the VNC- and Remote Desktop-related files in /Library/Preferences/ without any luck, either.
Obviously I could do an archive or erase and install and it’d take care of the issue, but I’m interested in actually sussing out the cause and pinpointing it. Any suggestions are welcome at this point!
UPDATED – Nov. 19th, 2009
A few days after posting this I noticed that while connecting to the VNC server with Mac OS X’s built-in VNC client (called by choosing “Connect to Server…” from the “Go” menu in Finder and providing it a “vnc://ip.goes.here” URL) incurs the crash of the server, connecting to it with Apple’s Remote Desktop application doesn’t. So, I’ve got a workaround, but still no solution. I’m going to try to chase this down in the next couple weeks, hopefully I’ll be able to pinpoint the cause.
In a recent fit of masochism, I decided to get all of my systems onto IPv6. I get the impression that the worldwide IPv6 transition is going to continue to be a very slow and tedious one, but by God I don’t intend to be on the trailing edge of it, so in I dove. Hurricane Electric has a quite good setup featuring a nice, technical site that caters to us geeks without falling into the common trap of being difficult to use. I’ll assume that you’ve already created your tunnel on their site. It should be a “regular” tunnel and you should provide them with your public IPv4 address, even if the machine you’ll be using it with is NAT-ed.
It’s worth mentioning here that if you’re behind NAT, it is my impression that your router needs to be able to pass “protocol 41″ traffic in order for this to work. I use pfSense for my router, and it has a special field where I can provide the LAN IP of the machine incoming protocol 41 traffic should be forwarded to. Other router software may have similar abilities, but yet others may be unable to do this. There are apparently other ways of getting IPv6 tunnels through routers, such as AYIYA or Cisco’s GRE, but I won’t be getting into them here.
So, back to your tunnel. At the bottom of the “tunnel details” page there’s a not totally obvious but very handy menu that you can use to get instructions on how to set up your tunnel under several popular operating systems:

The only problem is, these instructions only tell you how to fire up the tunnel once. It doesn’t tell you how to have your system start the tunnel automatically during start up. So, after looking at a few search results and then a bit of tinkering, I’m happy to say I figured out how to have FreeBSD start your tunnel during startup. Here’s what I ended up putting into my /etc/rc.conf file:
ipv6_enable="YES"
ipv6_network_interfaces="gif0"
ipv6_defaultrouter="<server IPv6 address>"
gif_interfaces="gif0"
gifconfig_gif0="<client IPv4 address> <server IPv4 address>"
ipv6_ifconfig_gif0="<client IPv6 address> <server IPv6 address> prefixlen 128"
Now, note that <client IPv4 address> should be your local system’s assigned IPv4 address, as in the one that shows up when you run ifconfig. It’s okay if this is a private, NAT-ed IP address. In fact, if you are using NAT, using your network’s public-facing IP address will not work. Use the IP address your system is actually assigned, regardless of whether it’s a public or private IP.
In addition to the IPv6 address Hurricane Electric assigns you for your side of the tunnel (listed on their site as the “Client IPv4 address”), they kindly give you a whole /64 subnet to have your way with. If you want to assign any of those addresses to your system in addition to the one we already do above, add a line like this to /etc/rc.conf for the first address:
ipv6_ifconfig_gif0_alias0="<first subnet address> prefixlen 64"
Your subnet address is listed as “Routed /64″ on your “tunnel details” page. If, for example, it’s listed as 2001:618:400:33bb::/64, your first address in that subnet could be: 2001:618:400:33bb::1 For additional addresses, you’ll need to increment the alias number, e.g. alias1, alias2, etc.
So that’s it! Now your FreeBSD box should be tunneling IPv6 traffic to and from Hurricane Electric’s network. You can test it out like so:
ping6 ipv6.google.com
Filed under: Uncategorized
I’m generally a fan of Mail.app, the simple e-mail client that is a part of Mac OS X. I find that simplicity in software is a virtue, as it usually results in small, reliable programs. Mail.app is, for the most part, a good example of that. It is easy to use, fast and is less prone to data corruption than alternatives like Entourage.
Sometimes its simplicity can be a liability, though. This is especially true when trying to troubleshoot connection issues, as Mail.app will often not relay error messages from the server it’s communicating with. For example, if you try sending an attachment that’s too big, the outgoing mail server that you try to send it through will tell Mail.app, “Hey, this is too big,” but Mail.app will only tell you that it couldn’t send the message. It’s left up to you to try to figure out why.
In my case, a client was trying to forward an e-mail and its attachments that he’d received in Mail.app from his Gmail account. I could watch the forward’s send progress in Mail.app’s activity window, but shortly after it got to 96%, Mail.app would simply report that it can’t send the message without any elaboration.

Historically I would fire up tcpdump in Terminal in order to observe (“sniff”) the conversation between Mail.app and the server, thus seeing any error messages that pass between the two. Servers are usually very explicit in their messages, so usually when you finally see the message you know right away what’s going wrong and how to fix it. Trick is, tcpdump is only useful if you’re not using SSL or TLS to encrypt the connection to the server. If you are, everything will be garbled and unintelligible. Often I could simply turn off encryption temporarily and sniff the connection long enough to glean something useful, but services like Gmail will not work at all unless encryption is enabled.
After a bit of googling, I finally came across a post on Erik’s Lab that explained how to sniff any Mail.app communications, regardless of encryption. Apparently there is a hook built into Mail.app that repeats a specified port’s traffic to the console. So, if you launch Mail.app from Terminal using the following command (in our case sniffing port 25 to troubleshoot outgoing mail), you will see all the relevant data:
/Applications/Mail.app/Contents/MacOS/Mail -LogActivityOnPort 25
Leave Terminal open, since that’s where you’ll see the data appear. I went ahead and sent the message again, and lo, after watching gobs of attachment data fly past, the following message appeared:
552-5.7.0 Our system detected an illegal attachment on your message. Please
552-5.7.0 visit http://mail.google.com/support/bin/answer.py?answer=6590 to
552 5.7.0 review our attachment guidelines.
I removed the attached ZIP file and then the e-mail sent without a problem.
