Updating SSD Firmware on MacBook Pro

I’ve got an OCZ Vertex III SSD in my Macbook, which is awesome! Not so awesome: OCZ doesn’t provide firmware updaters that work on MacOS. Furthermore, recent Macbooks will only boot off internal drives (or via PXE netboot, which I’ve never been able to figure out) and getting them to boot from a linux partition is next to impossible. So, of course, the answer is Windows under BootCamp.  Ah, but even that can’t be simple: the Windows-based updater needs to access the SATA SSD via AHCI, but BootCamp accesses your SATA disks through an IDE emulation layer…

  • Temporarily remove the SSD,  move the HDD from the superdrive bay back to where the SSD was, and reinstall the superdrive (BootCamp can only install from an internal drive).
  • Boot from the HDD
  • Run BootCamp and be sure to allocate plenty of disk to the new Windows partition.  30G won’t cut it; 40G should be enough.  Windows update will chew up that much space when you bring the OS up-to-date. I ended up needing iPartition to get me past the .NET 4.0 update because I was too conservative.
  • Let BootCamp install Windows 7 x64
  • Put all your drives back where they started
  • Order a new cable for the secondary disk because you flexed the original one into oblivion.  You need to go to ebay because nobody has it in stock.
  • Reboot with the option key down, boot into Windows, run Windows Update. Repeat until your eyes bleed.
  • Try running OCZ toolbox from Windows and discover that it has no effect
  • Find and follow this procedure to enable AHCI on the hard disk containing the BootCamp partition
  • Run OCZ toolbox again; like magic, now it works!

It does seem faster, for what that’s worth. Dead ends included installing Ubuntu via Wubi from Windows and trying the linux-based updater. Because linux is installed in a file under NTFS mounted with loopback, of course it is subject to the same lack-of-AHCI problem.  Might be worth looking into these Mac SSD hints, too, especially setting noatime.

Posted in Uncategorized | Comments Off

1and1: Nae Scottish!

Welcome to part I in a two-part series about web “service” providers whose offerings are… less than completely Scottish.  We’re holding off on part II until we can get fully-away from the other provider, but today I’m warning everyone to avoid doing business with 1and1.com.  

Working DNS menu

1and1 was the domain registrar for boostpro.com for years without incident, but when we decided to point at a different DNS server a couple of weeks ago, their interface was broken: the little drop-down menu that is supposed look like the one on the left, instead came up in the broken state you see above, with the “Edit DNS” entry missing. Hilarity ensued, and after many hours on the phone with their friendly but ultimately powerless tech support people in the Philippines, I got the issue escalated to their second-level tech support. Now,“second level tech support” never talks to customers, so you don’t really know what they’re doing over there, and everything takes just about 24-48 hours to happen. We waited and waited for the issue to be resolved, and after a couple of days the nameservers magically changed: to 1and1′s own servers!

That would have been fine, but the menu was still broken so we had no way to add domain records on 1and1′s servers. More hours on the phone with tech support and many supposed “escalations” later, and nothing was fixed. We asked to speak to the manager of the tech support people (in several different calls) and were told that the manager was unavailable. We were constantly being “assured” that the problem was being handled, but nothing changed.

Eventually we decided we had to get the domain registration away from 1and1 so we could regain control of the situation, so we unlocked the domain in 1and1′s interface, and initiated a domain transfer. The next day we called their tech support line again to check on the progress of the transfer and were told that nothing was happening because the domain was still locked! Meanwhile, our subdomains of boostpro.com, which had at least remained functional there, suddenly acquired the same status as the parent domain. Things were going from bad to worse.

We unlocked the domain again and called back. We were then told that it would take five days for them to release the domain, and there was nothing they could do to expedite that process. Furthermore, while the transfer was pending, they claimed they could not set up an “A” record on their own DNS servers to point back at our site. Somehow, despite the extremely poor service we had received, the people we could reach, and even the people they could reach, had no ability to directly access the DNS or domain registration servers in question. They could only access internal controls that allowed them to make changes with two- to five-day delays attached. This policy may reduce their overall costs and liability, but it prevents them from providing anything approaching real service in case of a problem. All told, boostpro.com was out of commission for ten whole days.

1and1 is clearly operationally broken, but we’ve learned a valuable lesson: when choosing a service provider, the good days are almost irrelevant. The important thing is whether they can respond compentently, effectively, and energetically in case of a crisis.

Posted in Uncategorized | 4 Comments

Today’s Cool Tech

Some really cool things I discovered today:

Wuala: distributed, secure, redundant cloud storage, backup, and sync. Watch their Google Tech Talk! It’s what Tahoe-LAFS was supposed to be (but not fully open-source). Let’s build plug appliances that trade storage!

Mailplane puts a nice, separate Mac application interface on top of GMail (and solves a nasty Safari/Flash/GMail interaction bug that’s been driving me nuts).

Rapportive replaces Gmail Ads with cool and useful profile information.

People are actually using ZFS on the Mac. I’ve got to check this out!

Posted in Uncategorized | Comments Off

GMail conversation view in Wanderlust

I’m excited!

I recently migrated all my mail to [GMail](mail.google.com), and the
fact that it keeps an archive of _everything_ by default (just as I
have done explicitly using via server-side rules for years before now)
inspired me to return to my old project of getting some [Emacs mail
client](http://www.emacswiki.org/emacs/CategoryMail)—any client—to show me all the messages in a conversation, even if
they’re not all in the current folder.

I started with [Wanderlust](http://github.com/wanderlust/wanderlust) because, after all, [Gnus](http://www.gnus.org/)’s [IMAP
implementation](http://josefsson.org/nnimap/nnimap.html) is pretty broken. I had been getting something like
this functionality with Wanderlust using [Mairix](http://www.rpcurnow.force9.co.uk/mairix/) on the server side.
Mairix will do a fast search over the Maildirs generated by a dovecot
IMAP server and create a new Maildir containing links to all the
matched messages. It also contains the built-in ability to find every
message in the same thread as another message, so it almost seems
ideal. The downsides:

1. You have to either wait long enough for a server-side cron job to
update the Mairix database and make sure the message whose thread
you want to find has been indexed, or force a “quick” update (not
really all that quick when you have Gigs of message history) and
wait for that to complete before you can even do the search.

2. I can’t run Mairix on Google’s servers. Some people get around the
problem of having no ability to run programs on the remote
mailserver by running a local dovecot server and using offlineimap
to sync it with the remote one, but this is a pretty resource- and
sysadmin-intensive approach and I always worried about the cost to
my laptop’s battery.

So I began by attempting to extend the functionality of
`wl-summary-jump-to-parent-message` (\`^’), which currently is able to switch
to NNTP in case the thread migrated from NNTP to email. I figured I
could replicate the basic functionality and look up the parent message
in Gmail’s “All Mail” IMAP folder instead of going to NNTP.
Unfortunately, that experiment was a failure. Maybe I didn’t try hard
enough, because I never really got it to work at all, but after a
while I intuited that following that avenue would require WL to gather
up enough history from “All Mail” to include the first message in the
thread. I knew from experience that, even if it “worked,” it was
going to be dog-slow.

Next, though, I thought I’d see how well WL’s built-in “filter folder”
feature worked with GMail’s IMAP implementation. So I picked a
message from my INBOX from which I’d already deleted many messages,
looked at it raw (\`,’), and grabbed the first message id from its
References: header field. Then I constructed a filter folder named as
follows:

~~~~
{{lang:txt}}
/(references:|message-id:)/%[GMail]/All Mail
~~~~

Then I entered the folder, expecting it to take a long time. Wow,
that was fast! I’m not sure if I ever really tried this with my
dovecot server; It might actually have worked. Just to be sure this
was going to keep performing, I tried a filter that would have to go
way back in history—I asked it for every message containing “status”
in the subject line:

~~~~
{{lang:txt}}
/subject:status/%[GMail]/All Mail
~~~~

It was just as fast. I know I’ve never had wanderlust load up
messages from this account going as far back as 2002, so I’m pretty
confident that this is working. It seems to me that automating the
creation and entering of such a folder should be really easy, and
that’s what I’m going to do next.

But there’s more to do. For example, I want to be able to update the
INBOX’s read/unread state of individual messages, and do the other
manipulations (such as relabeling the whole conversation) that GMail
makes so easy from within a conversation view. I’ll keep you posted
on how that goes.

Posted in Uncategorized | 2 Comments

Rebasing in Public

It’s been said that rebasing a branch you’ve pushed out to a public Git repository “may invoke the wrath of the git gods.”  For a while I accepted it as gospel that public-facing branches shouldn’t be rebased.

On the other hand, I’m always pushing my development work out into public repos—not least for backups, but also so others (including automated testing systems) can see what I’m doing— and I’ve noticed I often take a branch in one direction, then turn around and try it a different way, which leaves me with a situation like this:

The problem, of course, is that that’s precisely the situation when you’ve rebased a branch that’s been made public.  If you just push the local “develop” branch out to the repository, it will fail.  Deleting the remote branch first causes the kind of jump in history that makes the git gods angry.  So then the remaining choice is to “merge” with the remote branch but discard its changes and push again:


What’s not to like?  A lot, it turns out.  C6′ is really kind of artificial: it’s exactly like c6 except for parentage, and half of that information (heritage from c4) is meaningless—it’s just there to keep the git gods happy.

Well, as it turns out, the Git gods can be a lot more forgiving than that. For a development branch, it’s perfectly acceptable to have a public change of ancestry. To avoid messes, you just need to get those pulling from your development branch to:

git config branch.name.rebase true

which will cause their work to be rebased upon the remote repository’s current HEAD. The Git Docs warn that this is “possibly dangerous,” but as long as there’s a reflog so the person can rewind to the previous head state, I don’t see what the big deal is. Personally, I’ve even set up my ~/.gitconfig to rebase by default for all branches.

Posted in Uncategorized | Comments Off

WordPress is Amazing

I have been using wordpress.com (this site is was hosted there) for quite some time, but a while back I got tired of the limited configurability and the need to pay for every little tweak. When I narrowed down my choices of themes to the ones where source code examples, there wasn’t much left to choose from. Since I was just starting a new C++ blog, it was clear to me that I’d need a better platform for my purposes. I’ve become very particular about how my communications present themselves—who am I kidding? I’ve always been particular!—and it just wasn’t going to fly to have the type too small or the code look bad.

I started looking around at other blogging software, such as MovableType. I really thought I was going to want the Motion add-on, but I tried it and couldn’t really figure out what it was buying me. Furthermore I couldn’t stand waiting for MT to regenerate HTML files. I looked into a bunch of other technologies, too, though not in so much depth.

At some point I tried installing WordPress on my own server. It went smoothly, as most php-based installations seem to for me. IIRC, they guide you through the steps in a browser, using WordPress’ own web UI (why don’t more packages work that way?) Configurability has been just incredible; there are scads of free plugins, many of them very slick, and most of which seem to work pretty well. It feels easily as responsive as another site running on the same server using a custom-built Django-based framework.

But the biggest amazement for me has been the gentle learning curve. I don’t even really know PHP, and still I’ve been able to slowly and incrementally push the design towards the site I want it to be, and the frustration I usually feel with most web software systems seems completely missing. Now it seems to me that WordPress could be a good platform for almost any website, blog or otherwise. I’m impressed; can you tell?

Posted in Uncategorized | 1 Comment

Wish I'd found this site a year ago

This blog series on setting up a home ZFS fileserver has a lot of awfully familiar screenshots. Simon, on the other hand, had the sense to go right to the official ZFS implementation rather than messing around with FUSE. I wish I’d seen it a year ago, but I’m sure there’s more to learn, so will definitely be plumbing it for information. I may only end up posting the few additional things I’ve learned here, since what he’s got looks so complete. Ta ta!

Posted in Uncategorized | Comments Off

Hydra is Dead — Long Live Hoss!

It’s been a while.

Hey, I’ve been busy. My adventures with ZFS-Fuse finally got too exciting when I mistakenly allocated a bunch of partitions to both ZFS and mdRAID, and I had to throw out most of what I’d accomplished. Since I had to tear the machine down anyway, I had the opportunity to do some benchmarking of native ZFS on OpenSolaris against ZFS-Fuse (follow the link and browse the thread for complete results). My conclusions in short were that in addition to continuing to be maintained and improved (it’s already one version ahead of the Fuse implementation), OpenSolaris ZFS is beating ZFS-Fuse on performance consistently, and often by a factor of 5 or more.

Finally, I realized I needed something that was less of a hack than my ZFS-Fuse setup with patches, pre-release Fuse, etc. I really can’t afford to spend the rest of my life getting this system set up. So with a little encouragement from Fajar A. Nugraha, I jumped. Hydra is being rebuilt as an OpenSolaris box called “Hoss.” I’ll try to post the same information about doing this in Solaris that I did on Linux; watch this space for updates.

Posted in Uncategorized | Comments Off

Comments on Unibody MacBookPro 17"

Been working with a MBP17″ for a few months, and Apple asked me for feedback today, so I thought I’d share what I told them with the rest of you:

  • Has HDAPS (“Hard Drive Active Protection System,” an IBM term), which uses inertial sensors to park your disk when you jiggle the computer around!  This is a great feature, but Apple doesn’t seem to market it.
  • Build quality is awesome.
  • Weight is awesome for a 17″-er
  • Battery life is really good, but I’d like it if Apple could do more to help me conserve.  For example, I only use USB at my desktop when the computer is plugged in; I’d like to have it off on battery power by default
  • Keyboard nit: the keys are too flat.  The slight curvature of keys on the earlier MBP keyboard helped with touch typing.
  • Too much tactile feedback in the keyboard.  Tactile feedback has been proven to be ergonomically counterproductive (hurts typing speed, accuracy, and RSI rate), even though everybody seems to want it.  The ideal keyboard technology (IMO of course) was only used in a couple of laptops, the Dell Inspiron 8100 and Latitude C810.  I had a custom external ‘board made from used parts and I’m still using it.
  • Not enough keys on the keyboard.  I miss Home, End, Page Up, Page Down, (forward) Delete, and Insert
  • Its unix is crippled in several ways that make me miss Ubuntu:
    • No single comprehensive package management system.  MacPorts and Fink don’t play well together
    • The X11 server is dog-slow.
    • Keys don’t pass transparently through Terminal.app and/or X11 to a Linux system
    • Command-line apps are 2nd class citizens next to regular Mac .app bundles.
Posted in Uncategorized | 3 Comments

Movable Type, Perl, Apache, CGI, PostgreSQL/SQLite/MySQL… Oh, My!

Bah. Humbug!

I wasted hours on this one as I was trying to install MovableType on my Mac. I had long ago installed PostgreSQL using MacPorts, and that’s where everything started to break. See, MT scripts all begin with #!/usr/bin/perl Don’t get me wrong; I have a perl interpreter there. The problem turns out to be that it’s a 32-bit executable and MacPorts builds 64-bit binaries. So in the end, if you want to use a MacPorts database installation with Movable Type, you end up having to hack all its files to begin with #!/opt/local/bin/perl

This command worked for me:

find . -type f -exec sed -i -e 's|#!/usr/bin/perl|#!/opt/local/bin/perl|g' {} \;

Posted in Uncategorized | Comments Off