TIL I learned how (and how NOT) to restore my Mac backup

They say you never know if you have a real backup until you try to use it. They’re right.


  • Don’t encrypt your drive until you’ve restored your data
  • Don’t exclude things from Time Machine backup

The details

I sent my 2017 MacBook Pro to Apple because the keyboard was acting up. And as long as I was at the Genius Bar, I thought it’d be a good time to mention a weird problem I’d had when using Screen Mirroring on my Apple TV (moving the cursor would reveal things lower in z-order – it was weird); the Genius duly wrote that down and sent my machine to the depot for repair.

A few days later, the machine was back in my hands; not only had they replaced the keyboard and the top case (as I’d expected), but they also had replaced a few other parts – and they’d either wiped or replaced the SSD, so I had a virgin installation of Mac OS and none of my data. I booted up the machine, and, for security, told it to turn on FileVault to encrypt the SSD; then I set about restoring my data.

Plan A

I had multiple backups: Time Machine, a bootable clone drive (made with SuperDuper!), and Backblaze for offsite backup. I thought that the easiest solution would be to reboot from the clone drive and restore to the SSD, so I did exactly that.

The restore went fine, except for one small problem – SuperDuper! was unable to update the PreBoot environment. When I tried to boot from the SSD, I got a blinking folder with a question mark, which meant that the system couldn’t find the startup disk. I booted from the clone again and used System Preferences to set the startup disk to the SSD; this time, instead of the question mark, I was asked for a disk password…which, of course, I didn’t have.

Back to the clone, where I could easily mount the SSD and see its contents. Searching gave me this thread, but I couldn’t figure out how to apply the hints to my environment, so it was time for Plan B.

Plan B

I booted the “Install High Sierra” USB stick I’d kept around from last year and erased the SSD. Then I restored from my Time Machine backup. Many hours later, I was able to boot the SSD, and all seemed well.

Except…my desktop background was wrong. And my Dropbox folder was empty (though that was easy to fix by firing up Dropbox). And when I looked further, I realized that I didn’t have any of my photos, nor my iTunes library, nor my DevonThink databases. It was as if they’d never existed. But they were on the clone drive. Hmmm….

Plan C

I booted the clone and fired up SuperDuper! again. And, again, I restored the SSD from the clone, using “Smart Copy”, which found 150GB already on the SSD, and about 200GB of data that needed to be copied.

This time, when I booted the SSD, all was well – I had all of my data.

I opened Time Machine Preferences and discovered that I’d excluded my iTunes library, my Pictures folder, and my DevonThink databases from being backed up in order to save space on the drive in the Time Capsule that I was sharing among several computers. Oops. Especially since I’d stopped sharing a Time Capsule months ago and was backing up to a directly-attached 4TB drive, with plenty of space.


All seems to be well; I’ve removed the exclusions from Time Machine and it’s busily backing up everything now.

I haven’t checked to see if the Apple TV screen mirroring problem has been fixed – I guess I should find out, though.

I think I’ll wait a few days after Mojave ships before I upgrade; I really don’t want to go through this again any time soon!

Launch Services did it!

For quite a while, I’ve noticed an odd pattern whenever I open Activity Monitor on my Mac – something was writing to my disk every 2 or 3 seconds, at a peak rate of 4.5MB/second. Over time, the total data written would climb into the terabytes (far exceeding the total data read from the disk) – but my free disk space wouldn’t diminish. Looking at the system logs didn’t enlighten me, and nothing was obvious in Activity Monitor. I’d shake my head and ignore it.

This morning, I noticed the pattern again, right after rebooting the system, and I decided to try to find out what was causing the I/O.

First step: ask Google. In particular, I asked it what process is doing i/o mac and found many potentially-useful pages. The one I chose to pursue was an Ask Different question: Which process is periodically writing to the disk? because the screenshot in the question matched mine almost exactly.

The accepted answer to the question led me to try iotop(1), but I kept getting errors from DTrace (even though I ran it as root). So I tried what looked like the next best answer, using fs_usage(1):

sudo fs_usage -w -f filesys -e grep  \
   | grep -i ' write ' > /tmp/iouse.txt

and then looking at iouse.txt showed me that a process named lssave was doing a ton of I/O. A quick Google for lssave led me to this Stack Overflow page, which led me to this macosxhints discussion, which made it clear that I needed to rebuild my Launch Services database. I used Onyx to do the job, and voilĂ  – no drumbeat of writes!

Two Minute Warning

One of the projects I intended to take on soon after leaving IBM was to write an iPhone app to keep track of our wine experiences. I haven’t quite gotten to that round tuit yet, but I have learned enough Objective C and Cocoa to write a tool to help with one of the aspects of David Allen’s Getting Things Done) methodology, namely the Two Minute Rule: if you can do a task in two minutes or less, do it now.

If you’re a Mac user and think you’d find a two-minute timer app handy, go visit twominutesoftware.com and give it a try.

Declaring victory

A few years ago, I had a great idea, inspired by too many days where I fired up Lotus Notes to find several screenfuls of new mail in my inbox, most of which was inconsequential, spam, or corporate spam. My first step was to filter out as much spam as I could; for example, I decided that any mail with more than a couple of non-ASCII characters in the subject was spam, and my filter deleted it before I ever saw it. Similarly, there were spammers masquerading as mailing lists; they were fairly easy to zap, too. (One could ask why IBM’s spam filters let such crap through, but probably not productively, so let’s not, ok?)

My next step was to find as much inconsequential mail (for example, notices from various systems) as I could and shunt it to secondary folders in my mail; I knew I didn’t have to tend to such mail immediately, but I did want it somewhere I’d visit at least every day or so. And I never did figure out how to automatically identify corporate spam, but the volume was relatively low, so I didn’t try very hard.

The system worked pretty well; I had to tweak it every time there was a new version of Notes or a new mail template, but that was pretty easy. And I kept using the system until IBM and I parted ways this spring.

I did the same thing with my Gmail, but it never felt as comfortable or as helpful. So this weekend, I went back to letting all my mail arrive in one inbox; I use filters to mark things like news articles and merchant offers as read, so they don’t affect the unread count in my mailbox and tempt me to open it, but when I do open the inbox, I have everything in one place.

So far, it seems to be working — of course, it requires me to be diligent about maintaining Inbox Zero — but that’s much easier with one inbox than with several.

Mac Migration Diary

One of the side effects of leaving IBM was the need to buy my very own laptop computer; naturally, I wanted a Mac. So when the upgraded MacBook Pros came out last week, I was quick to order one (15-inch 2.53GHz i5, 7200rpm drive, matte hi-res display), and I eagerly watched its progress on the Apple and FedEx websites until it arrived in my hands Wednesday, a day before the promised delivery date.

I had a backup of my old MBP, but I didn’t want to use the Migration Assistant to copy everything over, since many of the apps were now irrelevant to me (and some had been irrelevant since the moment I installed them!). I took fairly careful notes and thought I’d post them here to help myself the next time I need to change Macs (and if they help others, so much the better).

The physical unboxing, of course, was up to Apple’s usual standards; unlike a ThinkPad, there’s no silly wordless poster — the box and the contents speak for themselves. And the first boot experience was, as usual, straightforward (though I do wonder why there’s no Hebrew “welcome” in the initial video).

Before I got to work, I ran Software Update, which found eight or nine updates, all of which were applied in a single reboot.

Then I started to work on my applications and data.

The very first thing I installed was 1Password — but then I realized that if I wanted to use my saved passwords, I needed Dropbox, so I installed it, let it copy things, and then finished setting up 1Password.

In previous migrations, I’d always installed Quicksilver next, but its future is uncertain, so I decided to wait until later in the process and see how well I could live without it.

The next step was to start looking at the apps in the old /Applications directory to decide their fate. I’d picked up a number of random apps over the years, many in bundles, and decided that I would only install the ones which I was actively using. So I have bid adieu for now to Acorn, Amazon MP3 Downloader, Audacity, Caffeine, DaisyDisk, DejaMenu, Flip4Mac, Google Earth, HandBrake, RealPlayer, Shovebox, TaskPaper, VLC, and WriteRoom. I wouldn’t be surprised to want some of these again soon, though.

It was also easy to say aloha to apps which I used because of my work at IBM, including Lotus Notes, Lotus Sametime, Lotus Symphony, Microsoft Remote Desktop Connection, Mozilla Thunderbird, Second Life, and tn3270 X.

When it came to browsers, I was torn. Firefox has been my go-to browser for years, but it’s an awkward fit on the Mac since it doesn’t support Services; it also leaks memory like a sieve (though I guess it’s possible that the ton of extensions I’ve installed contribute to the leakage). I eventually decided not to install it for now and see if I can get by with Safari, OmniWeb and Google Chrome. I really like Chrome and would probably make it my default browser if 1Password supported it.

The apps I decided to migrate are AppZapper, Awaken, DEVONAgent, DEVONThink Pro Office, Evernote, Fluid, ForkLift, GPSBabel, Join Together, MailPlane, NetNewsWire, OmniFocus, OpenOffice, Parallels Desktop, PDFPen, PhoneView, Pixelmator, QuickTime Player 7, Skype, Snapz Pro X, Stanza, SuperDuper!, TextExpander, TextMate, Tweetie, WireTap Studio, and XMarks. In most cases, I downloaded a fresh copy, then used ForkLift to easily bring over the associated files in the ~/Library/Preferences and ~/Library/Application Support directories. In retrospect, I probably should have used AppZapper to identify all of those files instead of eyeballing it!

I expected to have to install Growl, but it came along automatically with some other program; I did have to reinstall the SmartSleep prefpane.

I installed two packages from their original DVDs: iWork ‘09 and the software bundle for the Fujitsu ScanSnap 1500; of course, I then went online to install updates for both of them.

I decided not to install the software bundle for my Epson Artisan 810 printer yet; instead, I turned it on and let the system find the right drivers. I’ll worry about the full bundle if I ever need it (and in the meantime, I have the Windows version on a different machine anyway).

The final piece of the migration involved data. My old mail files were in ~/Library/Mail and ~/Library/Mail Downloads (I’m not sure I needed the latter). My music was in ~/Music; my photos were in ~/Pictures. I also made sure to migrate ~/.profile and my ~/.ssh directory. And, of course, I had a lot of data in ~/Documents (including a Windows VM), though I did try to be selective in what I copied.

That marked the end of the migration, but I did decide to install a trial version of LaunchBar to see if it’ll replace Quicksilver in my heart and on my fingers.

Now, on to productive tasks!

Maybe tomorrow

I’d been eagerly awaiting the new line of MacBook Pro laptops from Apple so that I could replace the one I’d used while at IBM with one of my own.

I’d expected the faster processors, of course, and the automatic swap between the graphics processor wasn’t a huge shock, but I was surprised to learn that they’d added a 15″ model with more pixels onscreen. One of the few complaints I had in moving from my old ThinkPad to the MacBook Pro was the loss of vertical screen real estate — 900 pixels just aren’t that many, especially when using Lotus Notes. Lotus Notes isn’t a consideration now, of course, but I think it would be nice to have more vertical room anyway.

So I made a trip to the Apple Store to look at the new systems, especially the new display — but they didn’t have any on the floor yet! The manager told me that the first they knew of the machines was when the truck arrived, and that they hadn’t had the chance to update the floor displays. But she said they should have them out tomorrow — I’m hoping that includes the hi-res 15″ model.

I’m also undecided about the disk — the machine comes with a 5400rpm disk, but there’s an inexpensive upgrade to 7200rpm, or a rather pricey upgrade to SSD. I think I should pass on SSD at this point in the cycle, but 7200rpm is appealing — I just wonder about the impact on battery life. And I have to decide between the i5 and the i7; I’m leaning towards the i5 on the basis of price/performance.

Advice is welcome!

Three days with the IBM Academy in [internal] Second Life

The IBM Academy of Technology used to have an Annual General Meeting where the 300 or so members, along with guests and senior IBM executives, would spend three-plus days in intense interaction, setting our agenda for the next year and taking advantage of chance meetings. Oh, and socializing. It was a highlight of my year.

That, of course, was before the economic meltdown.

Last year’s meeting was cancelled on fairly short notice; instead, we used teleconferences and Second Life to hold the meeting; it was an uneven experience (but having the meeting cancelled did make it easier for me to enjoy a very nice tour of New York, so I wasn’t completely unhappy about the substitution).

I’ve attended a couple of meetings using the behind-the-firewall version of Second Life this year, and, as I’ve written here and here, I found the experience less than thrilling.

This year, they made the unsurprising decision not to hold a physical Academy meeting, which meant that I could expect to spend a significant part of three days in the internal Second Life environment. I wasn’t particularly looking forward to it, but I didn’t see any alternative — especially after they got the code working with Snow Leopard, depriving me of what seemed like a great excuse not to participate.

I’m still not a big fan of the virtual environment (and am very happy that one of the nine mini-plenary sessions was held at Almaden so I could see some of my colleagues in person), but it was a far less unpleasant experience this year.

As before, I think that the very best feature of the environment is the spatial high-fidelity sound, which makes conversations, even in a group, much more realistic than a teleconference. In public areas, the sound tended to carry a bit too far — this was good when it let me eavesdrop (and choose to join) a group conversation with a very senior executive; it wasn’t as good when there were a lot of conversations in a small area, as happened during the closing social event.

The team who put the conference together did some innovative things, like setting up the poster sessions so that each poster was in a sound- (but not sight-) isolated room — you could easily have a discussion without being drowned out by conversations in the hall or at an adjacent poster, which is better than a real poster session, but you could see who was in a room as you walked by (one definite improvement this year was the integration with our LDAP directory, so everyone’s avatar was identified with their real name). And poster presenters were given better instructions, too — many came with one-sheet posters which you could actually read in the environment, rather than trying to show a series of slides which needed more screen room than was available.

I still found many aspects of the virtual space to be distracting or counter-productive — there was a lot of tedium involved in getting from place to place, and watching a slide show in-world is not an inspiring experience.

Another interesting choice was the way video messages from senior executives were played — you went to a theater, sat down, and watched as a video was played (at a low frame rate and resolution) on a screen at the front of the room. It reminded me of Apple’s first Mac commercial; I think the video would have been better served up without the trappings (and outside the virtual space, at higher quality).

One social hour went very well — the space was arranged so that I was able to position my camera overhead; I could see the names of everyone who was there, and when someone talked, the green-bar animation made it clear who it was (and the audio quality made dealing with accents much easier, too). And there was even room for a text chat on the screen, for additional comments (both public and private). It beat the hell out of a teleconference.

Using a big screen (relatively speaking — 20 inches, 1600×1200) instead of the laptop’s screen made a big difference; I didn’t have to squint to see things (and I was able to do other stuff on the laptop screen). Using a headset also helped, because then the sound was properly aligned with my vision — the first day, I used the external screen but the laptop’s speakers, and that was a problem. And having a new MacBook Pro with the fast graphics chip helped, too, though it did a number on battery life and made the machine run hot.

I still found no reason to spend any time or effort customizing my avatar, though if it had been completely generic, I might have wanted to do something to make it more recognizable at a distance, but I was fortunate enough to have been used as a test case for “realistic” avatars earlier in the year, so I was already wearing a distinctive aloha shirt. Nor did I see any reason to drink virtual drinks at the socials (though many people did — and some lucky folks were at home with real drinks available).

I’ve been using Lotus Notes for more than 15 years, and I’ve gotten fairly good at making it do what I want — but, with apologies to my Lotus friends, it’s not a tool that I really like. I expect that the same thing will be true about meeting in virtual spaces — it’s going to have to be part of my toolkit, and I’ll get better at using it, but I don’t expect to become a fan. And I look forward to the time when those who are enthusiasts stop trying to convert skeptics and settle for helping us become competent enough to get our work done.

Now, can I tell you about this wonderful Mac-only application I just started using?

Controlling the Airport from the command line

Both my MacBook Pro and my 20″ iMac are running Leopard 10.5.8. On both machines, it’s easy to turn off the Airport from the command line:

sudo ifconfig en1 down

On the MacBook Pro, it’s also easy to turn the Airport back on in the obvious way:

sudo ifconfig en1 up

But on the iMac, nothing happens if I issue that command. I don’t know why, but tonight I discovered how to get the job done:

sudo networksetup -setairportpower On

Why did I care, you might ask? Until 10.5.8, the iMac wouldn’t reliably join the network after the machine woke from sleep (or rebooted), and I had to turn the Airport off and on — I could turn it off easily enough from the command line, but I had to use the GUI to turn it back on, which seemed silly. Now I can do the whole thing from the command line (but with luck, I won’t have to).

Watch out for zombies!

My mother’s Yahrzeit is coming up, and her name will be on the Kaddish list this Shabbat, so perhaps it’s appropriate that I’m making a posting she would have considered complete gibberish.

For the last three weeks, my MacBook Pro has been giving me fits. When I tried to start a program, sometimes it just wouldn’t start. And, when I looked in /var/log/system.log, it was littered with lovely messages like these:

Apr 17 00:45:31 dssmac com.apple.launchd[103] ([0x0-0x2effefd].com.apple.systemevents): fork() failed, will try again in one second: Resource temporarily unavailable
Apr 17 00:45:31 dssmac com.apple.launchd[103] ([0x0-0x2effefd].com.apple.systemevents): Bug: launchd_core_logic.c:6780 (23714):35: jr->p
Apr 17 00:45:36 dssmac /usr/bin/osascript[13552]: spawn_via_launchd() failed, errno=12 label=[0x0-0x2f01eff].com.apple.systemevents path=/System/Library/CoreServices/System Events.app/Contents/MacOS/System Events flags=1
Apr 17 00:45:36 dssmac com.apple.launchd[103] ([0x0-0x2f01eff].com.apple.systemevents): fork() failed, will try again in one second: Resource temporarily unavailable
Apr 17 00:45:36 dssmac com.apple.launchd[103] ([0x0-0x2f01eff].com.apple.systemevents): Bug: launchd_core_logic.c:6780 (23714):35: jr->p
Apr 17 00:45:42 dssmac /usr/bin/osascript[13553]: spawn_via_launchd() failed, errno=12 label=[0x0-0x2f03f01].com.apple.systemevents path=/System/Library/CoreServices/System Events.app/Contents/MacOS/System Events flags=1
Apr 17 00:45:42 dssmac com.apple.launchd[103] ([0x0-0x2f03f01].com.apple.systemevents): fork() failed, will try again in one second: Resource temporarily unavailable
Apr 17 00:45:42 dssmac com.apple.launchd[103] ([0x0-0x2f03f01].com.apple.systemevents): Bug: launchd_core_logic.c:6780 (23714):35: jr->p

with the occasional

Apr 15 14:41:42 dssmac kernel[0]: proc: table is full    

thrown in for bad measure.

I couldn’t figure out what was going wrong (Activity Monitor only showed between 60-80 processes, far fewer than the system limit), so yesterday, I reinstalled Mac OS X (using the archive-and-install method) — and it didn’t help.

I was, needless to say, unhappy. I hadn’t brought my external drive to the office, so I couldn’t do a bare-metal reinstall yet. But I could (and did) tweet about my problem:

Still getting fork(1) failures (“resource not available” — which one, dammit?), so I guess it’s time for a full reinstall. Crud.

This one caught the eye of many people who wanted to help, and I want to mention two in particular:

Ed Costello thought it might be hardware — I ran the hardware diagnostics, which showed nothing.

Rich Berlin (from Sun) made the suggestion which wound up putting me on the right path — he suggested running:

sudo dtrace -n 'syscall::fork*:entry{printf("%s %d",execname,pid);}'

which showed two Eclipse-based processes forking their little hearts out. So I did a “ps” to discover what they were (unsurprisingly, Lotus Notes and Lotus Sametime), but what startled me was how many “(NotesDynConfig)” processes there were in the process table. I wondered how many, so I ran

ps -aA | wc

and was shocked to see a result of about 160, compared with the 70 processes shown in Activity Monitor. So I stopped Notes and suddenly, I was down to 70 processes via both methods.

It seems that Activity Monitor doesn’t report zombie processes. Neither does the line at the top of “top(1)”, which I’d also used while trying to troubleshoot.

Given that discrepancy, I can now understand why the system was running out of processes. I don’t know why Notes is leaving zombies around, but that’s a problem for another day (my next step is to upgrade to the latest beta and see if it helps — I’ve also reported the problem, of course).

And I guess I probably don’t really have to do a full reinstall…though I might, anyway — it’s my Windows training coming to the fore.

Twitter Search beats Google — malware attack averted

As I was driving to work this morning, my iPhone tinged, letting me know I had a new SMS awaiting me. And it tinged a second time as I pulled into my parking place, since I don’t check SMS messages while I’m driving.

It was a Facebook notification from an IBM colleague with a subject of “How did you manage to get on this video?”, sent to me and 19 others, with a link to a geocities.com page.

I was immediately suspicious, because the note wasn’t in my colleague’s style — but it was rather short, so perhaps that wasn’t valid. I was also suspicious because the names on the note were a rather mixed bag.

But it was vaguely possible that the video had something to do with IBM’s Smarter Planet initiative, so I didn’t want to discard the note.

Instead, I did the obvious thing: I Googled for “Facebook” and “get on this video”, looking for reports of malware. But I found nothing. I tried a few other variants, including “Facebook malware” and still found nothing.

So I went to plan B: Twitter. Nothing was obvious on my home page, so I posted a query: “Just got suspicious-looking facebook msg: ‘How did you manage to get on this video?’ with a link to GeoCities. Anyone know if it’s malware?”

While I waited for an answer, I tried Twitter Search, using “Facebook” as my query. Within seconds, I had my answer — yes, it was malware, and apparently virulent stuff.

And when I went back to my Twitter page, I’d gotten three replies from friends telling me the same thing (the first one arrived less than a minute after my tweet).

For timely questions, Twitter is my new go-to tool — sure, Google has depth, but it’s not instantaneous. Twitter gives me three paths to an answer:

  • Stumbling on it in my friends’ tweetstream without ever asking the question
  • Asking the question and hoping a friend answers
  • Using Twitter Search

My search strategy on Twitter is different than what I’d use on Google, though. On Google, it helps to be specific — a search on “Facebook” alone would be pretty useless, hence my attempts to qualify with the hook phrase and the word “malware”.

In contrast, on Twitter, timeliness is your friend — a one-word query (“Facebook”) is just fine, because you’re going to get the current conversation, and the human eye can do a good job of picking out the pay dirt if there is any.

I guess I’ll never find out how I got on that video, though.

In my CUPS yet again!

A few days ago, I posted a reminder about how to deal with installing the latest level of CUPS and the HPIJS drivers on a Mac.

Tonight, I discovered an important caveat when I tried to install them on Jeff’s new Mac: do not try to install the HPIJS drivers before you install GhostScript (and possibly FooMatic)!

If you do, the installer will go into an uninterruptable loop, beeping at you, and the only way out is a shutdown.

Needless to say, I discovered this the hard way.

When “It Just Works” becomes inoperative

Last Friday, I discovered that I couldn’t synch my iPod with my MacBook Pro. The iPod thought it was connected, but the Mac didn’t; oddly enough, I was able to synch my iPhone just fine.

Rebooting the iPod didn’t help, so I decided to reboot the Mac. It didn’t want to go down gracefully for some reason (it kept complaining about programs not ending), so I finally brought up a terminal window and typed “sudo shutdown -r now” to force a reboot.

That was a mistake. I got a big Do-Not-Enter sign on the screen. Repeatedly. So I booted the install DVD and ran Disk Utility to verify the drive — it had no complaints.

Back to booting the disk — this time in Verbose mode (press Apple-V right after the power switch, keep it pressed until the bong sounds). The first attempt was a complete failure; it couldn’t load mach.kernel. But I persevered (it’s not like I had a choice), and got farther — to the point that I started seeing “disk0s2: 0xe0030005 (Undefined)” errors on screen, each of which was accompanied by a long pause.

A quick visit to Google told me that the disk was failing if not already dead (which undoubtedly explained my many spinning beachballs and failures to shutdown over the past few days). So I decided to go home and see if I could rescue any data before taking the machine into the shop.

At home, I connected the system to my Mac mini and brought it up in Firewire Disk Mode (press and hold “T” right after powering on) and managed to recover most of my home directory before it was time for my appointment with a Genius at the Apple Store.

The Genius asked me what I’d done and then suggested I try a reboot while he watched, not in verbose mode. 15 minutes later, the system was up. He then suggested I:

  1. Take the machine home without rebooting
  2. Make a copy of the disk on an external drive
  3. Use Disk Utility to write zeros on the hard drive so that it would assign alternate sectors
  4. Reinstall the OS
  5. Move data back to the machine
  6. Get on with my life

He was half right.

I used SuperDuper! to clone the drive. It took three tries, extending well into Saturday night, before I was able to get a complete copy made.

Then I ran Disk Utility in “secure erase” mode to zero out the drive, reinstalled Leopard, and started the long process of moving things back from the external drive. I was suspicious of the integrity of the copy, so I didn’t move any binaries back, just my data — that meant reinstalling many programs and getting them back up to date (Microsoft Office 2004 was especially pernicious, requiring me to run the updater at least 8 times).

But by late Sunday, I was finished.

On Tuesday, though, I started seeing spinning beachballs again. By Wednesday morning, they were frequent. And a perusal of /var/log/system.log showed more “disk0s2: 0xe0030005 (Undefined)” errors. So I knew I had to have the disk replaced, which was going to be a problem, because the Genius had told me that it would take 4-7 business days, which would extend into an upcoming trip.

The machine was out of warranty, so I could have fixed it myself, but life is too short for that. And since it was the company’s machine, not mine, I really wanted to take it to an authorized servicer. But 4-7 days was unacceptable. Fortunately, there are alternatives to the Apple Store, listed right on the Apple site.

I called the closest one, ClickAway and was speaking to a tech within a few minutes. He said that they’d happily install a new drive (which they’d sell me or I could pick up at Fry’s) the same day. And they’d try to recover the data, or they could sell me a SATA case for $25 so I could do it myself (and then wipe the drive afterwards).

And they did just that. They even installed Leopard for free, saving me the trouble of doing it from the DVD. And they finished two hours earlier than they’d estimated. And the price of the whole process, including the SATA case and a larger drive than I’d originally had, was just about the same as just getting the drive swapped for an identical drive at the Apple Store.

I still had to reinstall and reupdate my software again and put my data back on. But I’ve gotten good at that.

Lessons Learned:

  • Backups are good.
  • Backups before the drive fails are better.
  • Even if all your “important” data is on multiple machines, backups are good.
  • Image backups are very good.
  • Geniuses are not always right.

I now also have a Time Capsule, which is busily backing up my Mac mini as I speak (I’ve already backed up the MBP). I wish the mini were close enough to connect it through a cable, because an over-the-air backup of 300MB takes a very long time.

And I’ve registered my copy of SuperDuper!
to make image backups easier in the future. $27.95 is cheap insurance — and I already have used the program to save my butt, so it’s even retroactive insurance (hey, it works for Warren Buffett, so why not for me?).

Fluid Twittering

On Monday, I read a posting on 43 Folders about using Fluid to create site-specific browsers. The author created a browser for I Want Sandy (a tool I plan to check out one of these days), but I thought it would be perfect for Twitter.

But since I was at work and mostly busy when I read the posting, I contented myself with posting it to del.icio.us for “later”.

That evening, though, I was on Twitter and noticed that Firefox was suffering from Spinning Beachball Syndrome — it didn’t die on me, but it spent a lot of time gazing at its own navel. Restarting it helped, but only for a short while. Then someone mentioned Flock, which I’d tried early in its life but hadn’t looked at since (I even managed to pass by their booth at Macworld, though it wasn’t intentional on my part). I didn’t really want to install Yet Another Browser, but the conversation made me think of Fluid.

I downloaded it and fired it up; less than a minute later, I had a Twitter-specific browser on my system. Since it’s Webkit-based, it doesn’t have the extensions and add-ons that I’ve laden Firefox with — and it’s fast. And since it’s an independent browser, it survives when I forget myself and close Firefox (or when it closes itself).

I just wish I could figure out how to make F5 the refresh key; instead, I have to remember to use Cmd-R. Which doesn’t work in Firefox.

Highly recommended, and the price is right: free (as in beer). That’s http://fluidapp.com — check it out!


Today was an interesting day. I started with a torture session at the JCC (my trainer calls the worst part “Fun with Foam” and promises it will get better some day). I had a call soon enough afterwards that I didn’t have time to drive to work, so I went home instead, took the call, and only then went to the office.

The afternoon started with another call, then my annual review (I live to fight another year!).

And then I got to have some fun. One of the projects I’m working on needs to gather some data from Lotus Notes calendars, and there was a group who had someone working on a tool to get that data. But they were having problems of various sorts, and they were stuck. Fortunately, one of my hobby projects for the last few years has taught me a lot about accessing Lotus Notes calendars from Python code, so I contacted the developer and offered to see if I had anything in my archives which might be helpful.

I didn’t – somehow, I’d not copied the relevant directory to my new Windows system (and this particular technique, using the COM bindings to Notes, only works on Windows). But I did have other Python/Notes code in hand, enough to remember how to start, and her Java code showed me what she was trying to do.

The next time I looked up, two hours had passed. And I had a working program (at least it worked in my environment!) to send her.

It’s been a while since I really dropped into flow on a technical project — it’s fun!

The final word on Macworld

Trying to do all of Macworld Expo in one day was probably a mistake — I didn’t have a chance to go back to interesting booths (especially those in the West Hall), and I was rather tired by the time I left But I had a hard enough time clearing one day from my calendar; two would have been impossible.

After a night’s sleep and sorting through my bag-o-crap, here’s what still clings to my memory.

I am still amazed at how much of the floor was devoted to iPod and iPhone accessories, as well as wraps and briefcases for MacBooks. If I’d wanted to personalize my iPhone or my MacBookPro, the options were endless. Ditto speakers, chargers, and FM transmitters for my iPod — and I probably could use them, but with so many choices, I decided to wait. Replacement headphones were also a Big Deal; I spent time at the Shure, Creative, and Etymotics booths, but wasn’t ready to replace my Frankenbuds yet (I’ll wait till they break).

If I used a desktop Mac as my primary machine, the MacBook Air would be the ideal travelling companion. It’s light, sexy, and functional — the Remote Disk is a cute workaround for the lack of an optical drive (but I wind up installing almost all my software via web downloads, anyway), and I like the multitouch gestures on the trackpad (it would be nice to get those through a software update on the MBP — I would think it could handle the zoom gesture, since it can already tell the difference between one and two fingers). But my primary machine is already a MacBook Pro, so the Air would be superfluous; the extra few pounds aren’t significant given my normal travels.

Bento looked interesting and I’ll probably install the demo when I have some time to play with it (December?). I also walked away with demo disks that I may actually try for The Personal Brain, VMWare Fusion, Nisus Writer, as well as a few that were handed to me which will be as handy as the AOL CDs that used to arrive in the mail.

Intuit was pushing Quicken and their other products. They were showing a demo of their Quicken replacement, due this year, which looks to be a Web 2.0 version of Quicken (in much the same way as Quicken became Web 1.0-like a few years ago). They promised a migration path from Quicken/PC to the new product. We’ll see, but frankly, I’d be happy finding somewhere else to go entirely, as long as I can give my tax accountant the data he needs.

There were lots of people selling storage solutions. I didn’t look at them very closely. I am, however, ashamed to admit that I couldn’t crack the code at the Western Digital booth without giving it some serious thought. Maybe I should get on the air sometime.

I spent some time at the Fujitsu booth ogling the ScanSnap S510M (as mentioned on 43 Folders a few weeks ago). I would have been happy to win one in their drawing, but I didn’t. I did take home a discount coupon, but I’m not really sure that turning paper into PDFs is really a step in the right direction for me; what I need is to make stuff Go Away Entirely.

I also looked at the various printer and camera vendors, but not seriously. I would like a color laser all-in-one to reduce the clutter at home, but the prices are still too high. Even mono laser all-in-ones are expensive and big.

I did buy the Goldtouch for Mac keyboard. I haven’t unboxed it yet, though — it’s for home, to replace the Apple Keyboard I bought for the Mini a while ago. That’ll go to the XO laptop so I can play with it more easily.

I’m glad I went to the show; I’ll probably do it again, schedule willing, next year, but my expectations will be more realistic. And I’ll wear socks with more padding. And maybe even take advantage of the onsite nap service so I can make it through the entire day.

More Macworld!

I’m beginning to burn out, but I think I’ve seen just about everything.

I think there are more ways to dress one’s iPod, iPhone, or MacBook here than there are ways to dress oneself at Bloomingdale’s (which I walked through on my way to lunch — I am not crazy enough to eat at Moscone itself). But I’m not terribly interested in any of them.

There are also a ton of iPod car accessories, some of which are on sale at attractive prices — but not attractive enough for me to buy without the prospect of returning if they don’t work.

Google’s got a huge booth and is giving away swag. Odd swag, like Google socks and flip-flops. I may resist.

And, as expected, there’s a ton of software (some specially priced). Lots of disk enclosures, too. And keyboards — including the Goldtouch keyboard, which I really liked once upon a time. They’ve even finally updated it to have real F11/F12 keys!

I did get to play with the MacBook Air briefly. It is incredibly light and sexy, but I still don’t think I need one. And, unlike the iPhone, I think I really mean it this time.

And I even found the IBM booth. It’s at the very back of the tiny-booth area in Moscone West, and is there to show the flag for the Mac port of Informix. Lotusphere is next week, and so if we have anything to announce (and, according to the press, we do), I’d expect it to be there. But next year, Macworld is at the very beginning of January, before Lotusphere (and, I suspect, before CES), so maybe things will be different then.

Macworld Expo interim report

I’m taking a couple of minutes from wandering the show floor – thanks to Microsoft for the blogger lounge!

The biggest thing I’ve seen so far is iPod/iPhone accessories – in fact, I invested $8 in a earbud Jack from WhatIf Widgets in hopes of being able to carry my Frankenbuds again. Cases are also a Big Deal here.

But I’ve just barely begun to prowl the main show floor; more to come.

I think my wallet is mostly safe

Maybe I’m too far from Moscone to be affected by the Reality Distortion Field, but there wasn’t much in today’s Macworld keynote which really interested me. Yes, the 1.1.3 level of iPhone software has some welcome improvements (and I’ve downloaded and installed it already), but I’m not sure I would have paid even $20 for it.

TimeCapsule is of some interest, especially if I can use it to back up the Windows box at home as well as the Macs — it’d be of even more interest if it could seamlessly and automatically do offsite backups as well.

The AppleTV and iTunes rentals leave me cold; we have more media in hand and unwatched than I can put in one shelf — I don’t need any more.

And the MacBook Air, while interesting, doesn’t meet any immediate need (though I look forward to playing with one sometime). I already have a very lightweight laptop, anyway.

I still plan to go up to Moscone tomorrow to look around on the show floor, though.

XO, XO, it’s blogging now I go

I got my XO from the One Laptop Per Child project yesterday. It is incredibly cute, but the keyboard is going to drive me crazy fairly soon. It’s too small to touch-type on for me, so I am using two fingers, a technique I thought I’d abandoned years ago.

I’m really impressed with its WiFi – it sees (and connects to) networks that my other computers don’t show at all. I need to upgrade the OS so it will automatically connect to my home network – I’ve been using an open network with a cryptic name, probably not the smartest idea for the long run.

The only real problem I’ve had with it is using Twitter; when i type into the posting box, the display lags many seconds behind. I guess it’s due to the keystroke-deriven Javascript, but that’s just a guess. I’m certainly not seeing any delay typing this posting into WordPress’s browser interface.

I can see how a box like this can make a difference in a child’s life. I’m glad I signed up; I’m not quite sure what I’m gonna do with this one in the long run, though.

Waiting for XO

I ordered an XO laptop through the Give One Get One offer (still open through the end of 2007, for those of you looking for that perfect last-minute deduction). Mine hasn’t arrived yet, but Ed Yourdon’s has, and he’s posted a “first reaction” on his blog.

I’m not at all sure what I’m going to do with the machine once I’ve played with it a bit — I knew it was, by design, slow and memory-limited, so I didn’t plan to displace any of my normal computers, but I did have some hopes that it would be a good machine to give to an older relative who “doesn’t want a computer”. But the description of the keyboard in Ed’s review makes that seem unlikely, though I’m reserving judgment until I can touch it myself.

Extending Jon Udall’s LibraryLookup bookmarklet

I routinely use three different public library systems (Los Gatos, San Jose, and Santa Clara County). Needless to say, searching all of them for a book is a real pain.

But today at lunch, a friend reminded me of Jon Udall’s “LibraryLookup” bookmarklet, which worked wonderfully, but still required three searches to check all three libraries. So I decided to extend the bookmarklet to do the work for me, and here’s the result:

javascript:var%20re=/([\/-]|is[bs]n=)(\d{7,9}[\dX])/i;if(re.test(location.href)==true){var%20isbn=RegExp.$2;void(win=window.open(''+'/ipac20/ipac.jsp?index=ISBNEX&term='+isbn,'Santa Clara','scrollbars=1,resizable=1,location=1,width=575,height=500'));void(win=window.open(''+'/ipac20/ipac.jsp?index=ISBNEX&term='+isbn,'Los Gatos','scrollbars=1,resizable=1,location=1,width=575,height=500'));void(win=window.open('http://mill1.sjlibrary.org/search/?searchtype=i&searchscope=1&searcharg='+isbn,'San Jose','scrollbars=1,resizable=1,location=1,width=575,height=500'));}

I’m sure there’s some easy optimization to get rid of all of the repetition in the JavaScript, but I’m lazy.

What I do wish I could do is have the bookmarklet open the results in tabs instead of popup windows, but I don’t think that’s possible without turning this into a Greasemonkey script or a real XUL plugin, and I’m lazy.

But if someone else has done it….

WorldCat would, of course, be a better solution, but it doesn’t seem to include the Los Gatos library (yet, anyway).

Gutsy Ghastliness

I brought home my old Thinkpad T41p from work for a few days; I had wiped out its disk in preparation for giving it to someone else, and so I had to install a new OS. My first plan was just to install Windows XP, but I didn’t have an OEM disk nearby, so I couldn’t use the license key which came with the machine.

So I decided to go the Ubuntu route. I had a 7.04 CD on hand, which installed with no problems, and then I upgraded to 7.10. That was all in the office, connected to a wired Ethernet.

But I wanted to be able to use the machine on my wireless LAN at home (and elsewhere). Using Network Manager and typing in my preshared WPA key didn’t work. And I tried it many, many times.

Eventually, I found wieman01’s OWTO: Wireless Security – WPA1, WPA2, LEAP, etc., which worked wonderfully well — I am up and running on my wireless right now.

I don’t know how easy it’ll be to set things up to connect to an old WEP network, which was my real goal in bringing this beast home for a few days, but I’m sure it can be done.

I do wish I knew why Network Manager didn’t do the job, though. Suggestions welcome.

Leopard for me

I visited the Apple Store on Saturday, thinking I might come away with a new iMac. But I couldn’t quite convince myself that I needed it.

So yesterday, I went back and bought Leopard, thereby using up almost all of my iPhone rebate (for some reason, the sales guy only applied $99.99 of the $100 to the transaction, and my receipt says clearly that I have one cent left). I took it home and installed it on the two-year-old mini.

There were no fireworks.

I did run into a couple of small glitches, though:

  • Quicksilver now shows up in the dock; there is rumored to be an update which solves that, but the official site is down, and I’m not willing to load an unofficial copy yet.
  • My userid fell out of sudoers, so I had to log in to my admin account and put it back.
  • I had to change my path to pick up the new system versions of Ruby and Python instead of the ones I’d installed into /usr/local/bin in the pre-Leopard days. I should uninstall those versions, too, but I haven’t had a chance to see exactly what’s been superceded.

I also found it necessary to put the Dock back to 2D view; the reflective shelf effect is cute for a few minutes. And I really don’t like Stacks.

But otherwise, it was pretty painless. And I haven’t noticed any loss of performance.

I still might want that new iMac, but the Leopard upgrade isn’t the excuse that I need to justify it.

No Leopard for me!

I had it all figured out. We were going to meet some friends for dinner in downtown Los Gatos this evening at 7pm — that would give me enough time to pick up Leopard beforehand.

So we left home just before 6, expecting to be parked by 6:05. But the traffic on North Santa Cruz was horrible, and going over to University didn’t improve matters. Finally, I detoured to the secret parking lot between Santa Cruz and University on the north side of Hwy 9, several blocks from the restaurant, let alone the Apple Store.

But that was OK; I could easily carry the Leopard box around. For that matter, it’d be easy enough to carry a new Mac mini.

But first we had to get to the store. And even the sidewalks were rather crowded. With dogs. In costumes. And their owners. And people giving the dogs treats.

Yes, it was Howlin’ Halloween in Los Gatos.

We pressed on. And as we crossed Bachman, I noticed something else odd — the stores and restaurants were dark, including the place we had reservations. And they stayed dark all the way up Santa Cruz, past the Apple Store. Most of the stores were closed, but not the Apple Store — they had a long line of people waiting, and every few seconds, someone would leave the store with a bag and a smile.

Since part of my hidden agenda for the evening involved having Diane try out an iMac, I decided to skip the store (somehow, much of the system’s charm would be lost if it was powered down) and accompanied Diane and Jeff to Borders in Old Town, which was brightly lit.

I tried calling the restaurant, but they didn’t answer their phone. So I called our friends, and we decided to try somewhere else, Di Ciccio’s in San Jose. As we left the bookstore, I saw that the lights were on again on Santa Cruz — I called the restaurant we’d planned to eat at and cancelled our reservation. They said, “but the power is back on”, but it was too late.

I hadn’t been to Di Ciccio’s in more than 15 years — not for any particular reason, but then again, there was no good reason to go there, either. The ownership had changed in the last couple of years, and I’d definitely be more eager to go back now. The food was quite tasty, even if the portions were too large; I’d rather have had a bit less food and saved a couple of bucks. We had a Clos la Chance 2005 Pinot Noir, which was very enjoyable, and which was priced quite fairly ($32, versus $30 at the winery or $25 from K&L).

And then we came home. I thought about going back downtown and getting my copy of Leopard, but on further reflection, a walk with Diane seemed like a better idea. And that’s what we did.

(Of course, I haven’t given up completely on Leopard — I’m making a backup of my existing disk so I’ll be ready for the upgrade. Tomorrow. Or Sunday. As John Gruber points out, “no one ever got hurt by waiting a week or two to install a new OS.” But where’s the fun in that?)

Open Letter to Steve Jobs

As Todd noticed, I (and many other iPhone early adopters) was a bit miffed last night at the speed at which the iPhone’s price dropped. I’ve been around technology long enough to expect price drops and capability increases…just not that soon.

Today’s note offering a $100 credit is a step in the right direction (and I’ve already got a list of things I want to buy from you, Steve, probably sometime in October).

But you know what would be a real way of demonstrating loyalty and gratitude to your early adopters?

An extra discount on the next generation iPhone. I want GPS and 3G, and giving me a break on an iPhone which includes them would be a great way to keep me on the upgrade treadmill…happily.

Looking forward to hearing from you real soon!

Do they know something I don’t know?

I’m staying out of the hot sun and playing two month’s worth of catchup with Quicken. As part of that joy, I downloaded my last couple of months of credit card transactions — sometimes Quicken automatically assigns a transaction to a category. It’s usually correct, but not always. And sometimes I wonder…such as today, when it assigned meals at Waffle House to “Home Repair”.

Not nearly as easy as it looks on YouTube

Like many others, I don’t like the earbuds that came with my iPhone. It’s easy enough to find an adapter to plug in any headphones for listening, but that doesn’t help when I want to use the phone. So I was delighted to find the DIY Earbud Replacement instructions and video from Engadget. I even thought about doing it myself, but since I knew I was going to be visiting my brother-in-law, an electrical engineer, I decided to wait and enlist his help.

Good decision. It turns out that the video doesn’t actually show the process of opening the earbuds (either the Apple or the JVC) — for the Apple earbuds, the careful application of a pair of visegrips was required to break the seal. The JVCs were harder — they took visegrips and tweezers and some muttering.

After getting the earbuds open, the rest of the process was straightforward — I watched Pete unsolder the existing connections; I undid the knots on the Apple buds and he cut off the (glued) ones on the JVCs; he soldered everything back together and hotglued the JVC bud covers back on. And presto! I have much better earbuds, complete with mic and switch, just like on the video.

Of course, the new earbuds don’t fit the shallow holes in the case I bought for the phone, so I’m going to have to do something about that — and I know it’s not enlarging those holes, because there’s no room available. It’s always something…..

Thanks, Pete!

Warwalking in my neighborhood

Most evenings, Diane and I take a walk through the neighborhood, but she couldn’t go tonight, so I went out on my own. I got bored pretty quickly and took out my iPhone, and just for curiosity, put it on the page where it’s looking for WiFi networks.

There were, as you might expect, dozens; I was pleased to find that most weren’t wide open, and only a few were named “linksys”. But there were other amusing SSIDs to be found: “StayOffMyNet” (locked), and “god” (wide-open), to name but two.

As I said, I got bored pretty easily….

First programming language?

A reader (and friend) writes:

My nearly 17-year-old daughter is starting to be more and more curious about what it is that I
*DO*, and computers and stuff. Which leads us to the perennial question:

What programming language should beginners be exposed to first – this
year? Just to give them a basic notion about programming concepts – not
to get them a job.

I’m completely stumped. I live in a world of C and C++ and Java and
Perl and more recently Ada – yes, Ada – from which I am unlikely to

Is Python the answer? Or ??? I can’t imagine that any of the languages
I listed above is a candidate. Pascal is irrelevant these days. Logo
(“turtle graphics”) were cute 20 years ago. What is it now? Something
simple to grasp but that isn’t too limiting.

Curious what your ideas are.


My first programming language was Fortran on an IBM 1620; I decided that wasn’t a reasonable recommendation, despite the availablility of an 1620 emulator (I had to drive 5 miles each way uphill in the snow to get to the computer).

Instead, I answered thusly:

I, of course, am still partial to Rexx, but I don’t think it’s a good beginner’s language any more, because you can’t do “interesting” things in it (like make GUIs happen, or manipulate other programs, or do things on the web). And, to be honest, I haven’t written anything in Rexx in a few years and don’t even bother to install it any more.

So my suggestions would be Python or Ruby.

Python, because it’s got a very clean syntax (as long as you don’t mind that indentation is syntactically significant), because it is just object-oriented enough (and these days, I think starting with an OO language is the right answer), and because there are packages available that let you do damn near anything (though I still haven’t gotten around to writing anything GUI….). The documentation is pretty good, and there are at least two decent books to start with (Learning Python and Dive Into Python, which is also available free online).

Ruby, because all the Cool Kids are using it (especially with Rails). It has much too much syntax for my taste, and there’s often More Than One Way To Do It, which you may consider to be good or bad. I haven’t really gotten into Ruby or Rails yet, because I haven’t had a real good use case, though that may change.

Other languages to think about:

PHP, the language of WordPress and MediaWiki. There’s even a book, PHP For Teens, which might be interesting from a target audience perspective. OTOH, PHP’s natural habitat is in creating server-based apps, and that might not be ideal.

Java, just because. I’ve been able to avoid it so far, but the time has come for me to get my feet wet there, so I can vouch for Head First Java as a good introductory book.

And one of my colleagues here suggests JavaScript — you can write it and play with it right in your browser and get instant gratification.

Both S. and I are interested in your thoughts on this…comment away!

Installing MySQLdb on Mac OS X 10.4.8

I’m in the process of deleting duplicate copies of photos from my system in the interest of saving disk space (320MB just isn’t all that much when one is playing with video!). I’ve used find and md5 to build a list of all the .jpg files on my system with their hashes, and wrote some simple Python code to find duplicates. The problem now is to choose the best one of the duplicates (“best” in this case means the one with the most useful file and directory name). But my code just creates a pile of small files, one for each set of identical photos. This is a pain.

So I decided to install MySQL so that I could crawl through the duplicates in some interesting manner (yes, I did have wine with dinner tonight. Why do you ask?). The install of MySQL itself was trivial, but trying to install the Python binding (MySQLdb) was a pain. The important tip came from a posting on Jeremy Dunck’s blog — I was using gcc 3.3, and needed gcc 4. His posting explained what to do; I did it, and now I’m all set.

Now I have to actually put the data into the database and do something with it — that’s a problem for another evening, though….

That’s not crashing, it’s thrashing

Much to my surprise, I am now the proud owner of a 300GB backup drive for my Mac Mini.

The story started earlier this week, when I decided to get back to the project of digitizing our Hi-8 tapes before they (or the camcorder) gave up the ghost. So I fired up iMovie and copied the first tape that came to hand.

Except that I’d forgotten to rewind it, so there was a 13-minute segment that was dubbed. No problem; I rewound the tape and copied that part, too. But then I wanted to move the clips into the proper order so I wouldn’t have to remember what I’d done when I finally got around to editing.

Again, no problem. Until I tried saving the rearranged file. The progress bar zipped along for a few seconds, then came to a complete halt (with the spinning beachball in place of the cursor). And I heard a ticking noise from the disk. And the noise continued. And the progress bar didn’t move. And the app was unresponsive to the “Cancel” button.

So I rebooted and tried again. Same results. I even downloaded smartmontools, only to discover that they don’t work against an external Firewire-attached drive. I did wonder how I was able to do the download and compile while the disk was having problems, but it was getting late, so I turned everything off for the night, including my brain. That was Wednesday.

Thursday, I stopped at CompUSA on the way home and picked up the special of the day, a Maxtor 300GB drive (which, for reasons best known to Maxtor, came with a 20GB “bonus”, making it 320GB). I put it in my external USB drive case (which I’d bought in the course of recovering a failed disk on a TiVo) and went to work.

I’d done some research, hoping to find a way to recover the bad sector on my old drive, and there didn’t seem to be one — but The X Lab suggested it would be a good idea to “zero” the new disk before using it, so that the system would find and bypass any bad sectors on the drive. So I started that process and went to sleep.

This morning, I fired up SuperDuper, as recommended at UNEASYsilence, to copy the old disk to the new one. Then I went off to work. When I returned, the copy had finished, so I swapped the new drive into the miniStack; it booted, and I was back in business — back to iMovie to continue where I left off.

When I went to save the movie, the same thing happened. Except this time, the ticking was quieter. And it finally hit me: copying 22GB takes a long time. And the progress bar in iMovie doesn’t reflect the amount of data moved, just the number of clips touched. And I almost certainly didn’t have any bad sectors on my old disk — it was just doing a lot of seeking.

Oh, well; I needed a place to take backups anyway.

But next time, I’ll make sure to rewind the tape before I copy it.

Two failures, not just one

About a month ago, I wrote about problems I was having with my NewerTech miniStack’s Firewire connection (namely that there didn’t seem to be one, at least not consistently). I eventually got around to calling their tech support (high praises to them for being open on Saturday!), and after doing some diagnosis, they gave me an RMA. In the meantime, I’d mounted my external disk in a spare USB enclosure I’d bought to solve a problem on some other computer, so I could get to all my data.

Friday, the unit arrived home, with a note saying that the internal Firewire bridge had been bad and they’d replaced it. So I moved the disk over, and, sure enough, it mounted just fine.

Then I tried to boot from it — and all I got was the grey screen of death. So I tried again, this time using Apple-V to get the console log displayed (is there some way to make that permanent? I find system messages to be reassuring, not scary), and found that, just as had been happening before I sent the unit in for repair, the boot failed with these two messages:

Load of /sbin/launchd, errno 88, trying /sbin/mach_init
Load of /sbin/launchd failed, errno 88

I took everything apart, put the drive back into the USB enclosure, and made sure that /sbin on my internal and external drives were the same. Then I put it back into the miniStack…no dice.

I couldn’t call tech support, since they’re not open on Sunday. So I did the next best thing — I Googled the messages. And I discovered that I was not alone.

And now the problem wasn’t hardware — it was software. Apparently my installation of OS X 10.4.7 on the external disk hadn’t quite succeeded, but I didn’t realize it. And in the meantime, 10.4.8 had arrived.

To make a long story short, the recovery procedure was:

  1. Download the latest Combo Update from Apple, putting it on the internal disk as /tmp/update.dmg
  2. Boot from the Install DVD
  3. Bring up Disk Utility from the menu
  4. Verify the external volume and, after discovering problems, repair the external volume
  5. Bring up terminal
  6. Mount the update image:
    1. /Volumes/Internal/usr/bin/open /Applications/Utilities/Installer.app /Volumes/Internal/tmp/update.dmg
    2. Click on the update.dmg in Disk Utility’s left navigator
  7. Install the update:
    1. /Volumes/Internal/usr/bin/open /Applications/Utilities/Installer.app /Volumes/whatever-it-was-called.pkg
  8. Wait a few minutes for the install to finish
  9. Reboot

When the machine rebooted, it was with OSX 10.4.8 from the external disk. *whew*

I thought this thing was going to be an appliance….

My thanks to everyone who’d documented their experiences with similar problems, especially those who posted to the Washington Post‘s “Security Fix“. The discussion on OSXFAQ was also helpful.

Today’s technical tidbit

The following code fragment works fine in Firefox but fails in IE:

tag = document.createElement("input");
tag.name = "button";
tag.value = "Tag";
tag.type = "submit";

But reordering it to set the type before the value works fine in both browsers. To play it safe, I decided to set the type immediately after creating the element.

tag = document.createElement("input");
tag.type = "submit";
tag.name = "button";
tag.value = "Tag";