Kool and the Nano Gang

October 16th, 2005

With all the hooplah about iPod Nano’s vulnerabilities: scratching, cracking, etc., I admit I’ve become a little more coddling of precious than I might otherwise be. I have owned exactly two iPods in my life: the 5GB original that I bought for half-price a majillion years ago as an Apple employee, and the 4GB iPod Nano that I bought a few weeks ago as an enthusiastic endorsement of my former employer’s kick-ass sense of product design. Maybe in another few years I’ll spend even more money for a 3GB version!

My first iPod, I remember, was purchased as a glorified hard drive. “I’ll never listen to music on this thing,” I thought, “but I can’t argue with a $200 5GB hard drive.”

That’s how Apple won me, an enthusiastic music lover, over to the iPod. God only knows how they get the rest of America to sign on! Anyway, after a few weeks of using my iPod for extremely exciting things like storing mixes of my own acoustic guitar home recordings, I thought I might actually put some pre-recorded tunes on it. You know, something forward-thinking, like songs to work-out to! I put a couple albums on the thing and walked over to the Apple fitness center to test it out.

“Hey! What do you know, this thing really rocks!” I thought to myself (thankfully, because that would sound really embarrassing if I said it out loud). I was grooving to some Built To Spill or something, pushing 3 miles or so on the treadmill as Judge Judy (always on at the Apple fitness center at 3:30 or so) tried to intrude through my (already replacement black) headphones.

As everybody in the room was distracted by their respective entertainment choices, I sensed a slight tugging at my arm. What was that? I looked down instantly to see my spanking new iPod being lifted out of the little storage space on the treadmill, launching into the air as my spasmatic arm caught the headphone wire.

This is where, in a movie, you might hear a voice, lowered in pitch due to the slow motion effect, screaming “NOOOOOO.” I watched my poor little iPod bounce out of its holster, and fall to the speeding treadmill track below. I then jumped off the track, only to look behind me and watch as my precious little device shot out behind me about three feet, while half the gym looked on in alarmed dismay.

Taking it in stride, I walked over to the little (big, by today’s standards) chunk of plastic and picked it up. It looked OK. My headphones still hung around my neck. I plugged them in. “The Plan Keeps Coming Back Again!” I heard Doug Martsch bellow. Not only had my iPod survived, but it was still playing! I jumped back on the treadmill and finished my workout, a satisfied customer.

Last week I finally got the nerve up to take my precious iPod Nano to the gym. Going to the gym these days means riding my bike down to the Cambridge YMCA, so it feels a bit more awkward to be flashing crazy tech gadgets. I got on the treadmill, plugged in my headphones, and started jogging. This time, as it happens, I was listening to a somber George Jones album. I looked around the Cambridge Y as I ran and tried to imagine the sorry words I was listening to, applied to the lives of those I observed.

Since the iPod Nano is so dang small, and apparently so dang scratchable, I had to carefully place it in a little nook at the bottom of my treadmill’s “magazine cozy.” The Nano sat there undisturbed, next to the boring issue of Running magazine that I will never finish and should donate to the gym (so everybody else can be bored by it). I was about halfway through my run, really enjoying the Nano life, when history repeated itself. I felt a slight tug at my arm, the sign that I’d twitched in such a way to snag the headphone wire just right. Before I could even estimate what was about to happen, my precious iPod Nano appeared in the air before me, almost floating. It proceeded to sink quickly, and before I knew what had happened, it struck the treadmill surface, and as before, shot out like a dart onto the ground behind me.

I felt the gym stand still. Before, it was at Apple. Everybody knew how significant the iPod was, but everybody also already had one. I knew subconsciously that everybody at the Y today was thinking, “that guy has the sexy new iPod.” To see me show such obvious disregard for its safety was more than a little embarrassing. I decided the only thing to do was assume a lackadaisical posture. I slowly disembarked from my machine, strolled the few feet to where my iPod had landed, and picked it up. I carelessly plugged my headphones back into the device, and waited with hopeful anticipation. Nothing.

I panicked for a moment, before realizing that it was no longer 2002. I stared into my iPod Nano and, realizing that it had kindly paused upon removal of my headphones, pressed the play button. George Jones resumed on cue, expressing my sentiments exactly: “Just the thought of losing you, scares me half to death.”

Daring Fireball on “The Life”

October 14th, 2005

An interesting commentary today from John Gruber on independent programmers and the alluring goal of achieving “The Life.

Gruber makes some great points about the not-so-simple criteria that define “ultimate success” for an indie programmer, observing that support responsibilities for one-person shows can be crippling. It’s almost enough to make a developer pray for obscurity. Who am I kidding, of course it isn’t!

In this excerpt, Gruber observes that Brent Simmons of NetNewsWire fame is closer to living “The Life” now as an employee than he was as an independent business owner:

Brent and Sheila get rewarded financially for their success and work over the past two years, and Brent gets to devote his time and energy to programming. By selling his company and working on NetNewsWire as a NewsGator employee, Brent has actually gotten closer to The Life than he was as an indie.

I find this especially striking because in many ways Brent has transitioned to steady employment without (it would seem) giving up the benefits of his independence. He continues to work from home (for better and for worse), is charged with mapping the future progress of NetNewsWire, and most likely received stock in the acquiring company, giving him a vested interest in the continuing growth of his product’s popularity.

Most importantly, he and Sheila don’t have to bear the brunt of *everything* anymore. In many cases an acquisition gives more power to the individuals in the smaller company than it does to any individuals in the larger one. Take Apple’s acquisition of NeXT. The individual employees of NeXT who stayed on at Apple suddenly became about a bazillion times more influential on the future of the Mac than the employees who had been working on the Mac for the past 15 years.

I agree with the gist of Gruber’s analysis – “The Life” is getting hired to keep doing what you’ve been doing, with fewer headaches, better pay, and more influence.

Stealing Seconds Back from Xcode

October 14th, 2005

A lot of people like to complain about how Xcode is, in some ways, too slow. Especially when it comes to compilation time, developers who were familiar with CodeWarrior’s relatively blazing speed are often disappointed at the non-stellar performance of gcc in Xcode.

While we wait patiently for Xcode’s performance to improve, it’s important to make sure that we don’t waste any more time or frustration in the program than we need to. To that end, I am always looking for ways to automate those “repeat them all the time” actions I am liable to take in Xcode.

One of the tedious tasks I often find myself can be summarize in three easy words: “Reveal Active Product.” Unfortunately, the process is slightly less straightforward in all but the simplest of projects. One must first navigate through the Files & Groups tree to find the “Products” group. This group may or may not need to be disclosed to reveal its contents. Then the brain must be asked to do extremely menial work for a few moments as it decides which of the multiple products generated by this project is actually the one you’re interested in now. When these brain cells finally die, you’re left with a mouse right-clicking the item of interest, to locate and select the “reveal in Finder” item.

That’s too much work for me! I do this all the time. I need a keyboard shortcut. So, compliments of FastScripts and the following AppleScript, I am from this day forward using “Ctrl-Cmd-R” as a shortcut in Xcode for “Reveal Active Product.”

-- Get the active target's product as a posix path
tell application "Xcode"
	set myTarget to active target of active project document
	set myFile to product reference of myTarget
	set myPath to full path of myFile
end tell

-- Convert to an alias and ask Finder to reveal
set myAlias to POSIX file myPath
tell application "Finder"
	if exists myAlias then
		activate
		reveal myAlias
	else
		beep
	end if
end tell

If the active target’s product exists, the Finder will reveal it. If there is no such file, you get a beep. Enjoy!

Font Panel Sucks the Life Out of Interface Builder

October 9th, 2005

Normally I find Interface Builder to be pretty snappy. From time to time over the past few months, however, I have encountered periods of time where Interface Builder’s responsiveness has slowed to a crawl. What the heck! Could my Nib files be getting too complicated for IB’s scrappy little frame to handle? I doubted it seriously, considering the complexity of other applications whose Nib files I have known and loved.

I finally traced it down to an insidious, parasitic relationship between the standard font panel and Interface Builder.

It seems that when the Font Panel is enabled, Interface Builder is liable to start choking on things like mouse clicks and drags. I have observed repeated delays of up to 2 or 3 seconds, just to click on a UI element in IB! And this is a on Dual 2.0Ghz G5! Pity the poor iMac user! When the Font panel goes away, responsiveness comes back 100%. If you’re just a little bit of a clutter-rat, as I am, then you’re liable to leave your Font Panel open as you forge ahead with your interface design. It never occurred to me that this might be robbing precious minutes from my work day!

This problem can be reproduced easily on Mac OS X 10.4.2 with Xcode 2.1 installed. Follow these steps to reproduce the problem yourself and gape in awe:

  1. Launch Interface Builder, creating a new “Cocoa Application” document.
  2. Observe the quickness with which you can click and change the selection between each of the 4 instance icons:

  3. Press Cmd-T to bring up the Font panel.
  4. Resize the Instances window such that the icons rearrange. For some reason this helps reveal the problem. I don’t know if this is a caching issue or what:

  5. Now try clicking between the icons again. It may take a few rounds through, but you will soon start to observe hideous delays between mouse click and selection change.
  6. Once you’ve observed the slowdown, close the Font panel by again pressing Cmd-T. This should return responsiveness to normal levels

This is a small demonstration of what it’s like to have this kind of delay plague your entire design session. The delay applies to anything clickable, selectable, draggable, etc., in IB. This includes all UI elements in your windows, views, etc.

So if you’ve been plagued by mysterious, dramatic reductions in IB responsiveness. Make sure your Font panel is closed. It may be sucking the life out of IB!

I’d be interested to hear if any readers can or cannot reproduce this on their own machines. For now I’m assuming it’s widespread, and I’ve reported it as Radar 4293149.