Category: Uncategorized

After my last post, promising (mainly to myself) that I’d blog more, I asked on Twitter what should be On Deck, so to speak.

I’ve decided I’m going to focus first on thoughts about user experience design, and related team/project stuff, since that’s what I’ve been spending a lot of time thinking about of late.

I’ll probably do some posts about resumes and job hunting soon, and that may (at my sole discretion) include some thoughts about what it was like to work at Microsoft. I’ll also definitely touch either directly or tangentially on software development lifecycle, and team dynamics issues.

But mostly what I’m interested in – for many years now – is great software, with great user experience, and engineering practices that enable its creation and ongoing evolution.

So… Stay tuned… Thanks!

Ps. New Tagline and About text. Let me know what you think…


The other night I was talking with Brent Simmons, and he told me that he’d tried to send my last post to Instapaper, and it didn’t work. The error message sucked, but clearly this requires action in any case.

Now the decision is whether to try to fix my template (or Manila itself), or to finally find a contemporary blog host. I have a machine that could be a home for a self-hosted WordPress blog, but do I really want the hassle of maintaining backups and all the other crap that goes along with self-hosting… anything, really?

Then again there are still a few other die-hards out there who are using Manila. If the fix were simple, it would be a nice gift for them. (And I still need to find a good ship vehicle for the work I did to get Manila working in Dave Winer’s OPML editor…)

Update: it turns out that Instapaper works just fine on my site if you use the browser bookmarklet, but it breaks if you use the API to save one of my posts. Still no idea why it’s broken.


There’s no time like the present, right? Or the near future… Or someday, when I get to it…

For quite a while I’ve been telling myself, “Self: You should really blog more.” And then I don’t.

Since I left the indie developer world at UserLand in 2006, for an all-consuming, emphatically non-indie job at Microsoft, I’ve been learning a tremendous amount about software design and development, … and not blogging about it.

At the same time my list of excuses for not blogging has grown: I don’t have time to juggle work, family and blogging. I can’t write about things I’m doing at Microsoft. I’m not doing interesting stuff outside work. Nobody wants to hear about my toddler -or- I don’t want an argument about parenting. I shouldn’t write about health issues. Windows 8 is too super-top-secret to say anything. I can’t talk about interviewing outside of Microsoft, or writing resumes, or flying to San Francisco, or driving to Portland… And on and on…

But these are mostly shallow excuses. And it’s time to fix this bug.

So what’s new?

Yesterday, Brent Simmons pointed out some Things That Are New since he was last an indie developer. The tech industry has changed quite a bit since 2005. (And Congrats to Brent on going indie again!)

Here are a few things I’d like to add to Brent’s self-admittedly “partial” list:

  • Ubiquitous and relatively fast mobile broadband
  • Amazing advances in batteries and low-power computing
  • Cheap-and-big (or cheap-and-fast) storage
  • Inexpensive, high-speed wireless home networking
  • Streaming high-quality video everywhere
  • Proliferation of rational programming languages and SDKs
  • Cloud computing at huge scale – IaaS, PaaS, SaaS – and APIs to manage them

All things I’ve been a consumer of, some of which I’ve worked with or worked on.

And all things I could be blogging about.

As a counterpart to Brent’s list and mine about what’s new-and-mostly-good, there’s also a darker side to the current technology climate:

  • Widening connectivity gaps between the “wealthy” and everyone else
  • Indiscriminate government and private surveillance of… well, everybody
  • Widening scope of baseless patent litigation
  • Downward price-pressure on ISV software, driven in part by platform vendors
  • Commoditization of user-authored content, to the benefit of VCs and their startups

Again, all things I could be blogging about.

And then there are the things I’ve been learning about in the course of my work: User experience design, team dynamics, software project management and execution, working with stakeholders, competitive analysis, presentation skills, and on and on…

More recently on the career management front I’ve learned a ton about resumes and interviewing, personal branding, professional networking, critical self-assessment, and generally figuring out what the heck I want to do with the rest of my life!

Not to mention the fact that my son Gabriel, who was born less than a year after I started working for Microsoft, is about to turn 6-years-old. As his parents, Cindy and I receive new life-lessons from Gabe on a daily basis…

So tell me again, what’s new?

Tons of stuff, plus a backlog!

In short, my excuses for not blogging just aren’t working anymore: While it’s true that I still have too little time, I’m no longer at Microsoft, Windows 8 is a done deal, life outside work is fun and interesting, Gabe says funny shit every day, I’m relatively healthy and have some great stories to tell about it, and I’m not looking for a new job or flying anywhere for interviews any time soon. (Knock wood.)

All things I could should be blogging about.

So I’m going to fix this bug.

Thanks for listening!


(Rhetorical question.)


Dead. Dead. Dead, dead, dead, dead, dead.

Before going on vacation to Maui, I was working on backing up all the data from Cindy’s 1st-gen MacBook Air, after her hard disk started flaking out. That effort was thankfully, a success!

Once the backup was done, I booted up my Lion recovery disk, and reinstalled the OS. Surprisingly this worked too, so I copied Cindy’s user folder back over to the machine, and gave it back to her. Then we went on vacation, and we only wanted to bring one laptop, so I added her user folder to my machine.

I had planned on findi ng a utility to sector-test the disk, and hopefully lock out bad sectors, but alas, before I got that the drive seems to have flaked out again. So now my laptop is living at home until I can get a new drive for hers, and get it up and running again.

KingSpec 128GB ZIF SSDWe decided to upgrade with an SSD drive, since slow storage is usually the biggest performance bottleneck for most things normal people do with their computers. I’ll be ordering one today as soon as I figure out which has the best controller and longest expected life. The machine had a 64GB 4200RPM drive before, so we’ll double the capacity to 128GB for what looks like about $200.

Update: After a bunch of research, I decided to go with the Super Talent 128GB DuraDrive ZT2 for about $245 shipped. It’s a little more expensive than the King Spec, but should be both faster, and more heat/battery efficient.


Steve Blank on quitting his first job as an electronics tech at the nuclear reactor at U-Mich:

Lessons Learned

  • Things you can’t see can hurt you (microwaves, gamma rays, toxic bosses.)
  • No job is worth your health.
  • If it seems dangerous or stupid it probably is.
  • Rules and regulations won’t stop all possible mistakes.
  • No one but you will tell you it’s time to quit.

My personal favorite is the last one.


For a couple of years, Cindy has been doing her computing on a first-gen MacBook Air that we bought used from a Microsoft developer. (He joked that his boss got sick of him doing presentations with a big glowing Apple logo facing the audience.)

While she was away on vacation, the machine decided to stop booting up. I initially suspected some serious filesystem corruption, but nothing that couldn’t be fixed with some command-line mojo in single-user mode (fsck_hfs apparently has options that aren’t available directly via fsck).

But I wanted to make sure I had a viable backup of her data before mucking around with anything while not in read-only mode. Sadly that turned out to be lots harder than it should have been…

The MacBook Air doesn’t have a Firewire or Thunderbolt port, so there’s no target-disk mode – strike one. (Target disk makes the machine act like an external drive that you can hook to another computer.)

Realizing this might be harder than I thought, I tried booting into the OS X install disc, with a mind to find a way to copy files over the network onto my NAS. Unfortunately this won’t fly because the install disc doesn’t have the required tools – no Finder, no  mountsmb, no  rsync, no filesharing, and though I could mount the internal disk easily enough in read-only mode, I couldn’t actually make the data go anywhere meaningful.

My next thought was to copy files onto one of the many external USB drives or thumb-drives I’ve got hanging around. I figured this would be easy once I got the install disc booted, and launched into Disk Tools. But the machine only has one USB port, and that was being used by the external DVD drive. I had a USB hub, but the external drive didn’t seem to be recognized on the hub. (Maybe it’s not supported on Mac for some reason.)

So I figured I’d set up the install disc as a remote DVD. That’ll work – then I’ll have the USB port free for a hard disk, and I can copy the files no problem. Problem: Once I set this up, I couldn’t get the Air to see the network-shared disc. I think this is an issue with network discovery on my wireless router, since I’ve had some similar issues with AirPlay not working in some cases.

Ok… What next? Well, let’s try getting networking working in single-user mode and  rsync the files to my NAS. After all,  rsync was sitting right there on the boot disk – all I had to do was get the network up. Whoops – this isn’t as easy as it might be either.

Turns out you have to start up the kernel extension daemon and some services in order to get either the network or the external USB drive support working. It took an hour or two to find the right incantations in order to make this happen.

But I kept getting a “ Socket not connected” error every time I tried to start anything with  launchctl. Humph.

After beating my head on this one for a while, I figured I had to try putting the filesystem into read-write mode or else none of Apple’s services will work.

That got me through getting all the  launchctl commands to work. Phew! Now back to the network.

The machine has WiFi obviously, and I’d already figured out that I could theoretically get that working.

But wouldn’t this be a lot faster with Ethernet instead? I happened to have a gigabit USB/Ethernet adaptor for my other machine, so I plugged that in. It only took a minute to figure out that this is  en7, and I got about half-way through figuring out how to bring it up when I realized something…

Maybe now that  kextd etc are running, I can get my USB 3.0 drive working. That will be way faster than Ethernet. Sure enough I plugged in the drive and then looked at available devices…

And there was  disk1s1 through  disk1s3. Yay! I wonder…

Hey – there it is. Now let’s copy some stuff…

And wait… Well, we’ll see what happens…


Admiral Thad Allen, National Incident Commander for Gulf Oil Spill:

“What we want to do is, take as much pressure coming from the well bore as possible, and put that into production.”

As seen on CBS news tonight.


Here are a few simple questions:

  1. How much money did BP stand to make if they had kept the Deep Horizon’s well under control?
  2. How much money would have been made from the oil that’s been lost to the Gulf of Mexico?
  3. How much money do they expect the disaster to cost them, before they are able to hook up to the gusher and recover the rest of the oil?

I have little doubt that if you subtract the answers to #2 and #3, from the answer to #1, you’ll still get a very large positive number.

If BP can manage to figure out how to pump most or all of the gushing oil into ships on the surface, they stand to make a lot of money. But they have to make sure they still have access to the flow.

Some Deductive Reasoning

Let’s say there were some more aggressive way to stop, plug, cap, destroy, or otherwise end the slow-motion environmental disaster we’re all witnessing. But what if this aggressive solution would end access to the oil that they expected to reap in #1 above.

That very large positive number I mentioned — that’s the amount of money that BP could stand to lose by doing the Right Thing.

So how much money is typically made from a modern deep-sea oil well in the Gulf of Mexico these days? A billion dollars? Five billion? Fifty?

Apparently Exxon paid about $500M in clean-up costs, and another $510M in settlements. Add to that a couple hundred million in legal fees and we’re in at well under two billion dollars.

Does BP expect to spend $2B or even $5B on clean-up, legal fees, fines and settlements? Say it were $10B. If the well makes them $50B, then they’re still net-positive by $40,000,000,000.

I have no idea if these numbers are anywhere near realistic. Where are the experts who should be talking about this math? I haven’t heard from them.

The Back of the Envelope

Ok, so I don’t have real data, but let’s do a back-of-the-envelope calculation.

#2: Estimates of the spill vary by more than order of magnitude, but say for the sake of argument that it’s leaking 50,000 barrels of oil per day. At $100/barrell, that’s $5M/day, or $225M over the 45 days since the disaster started. That’s $225M so far. Say it lasts for a year — that’s about 1.8 billion dollars in lost oil. Call it a clean $2B.

#3: Say the spill ends up costing BP roughly 10 times what the Valdez spill cost Exxon. I don’t have exact numbers, but I think it was about $1.2B for Exxon. Round up to $15B.

#1: An oil well’s life might be more than 20 years. Unfortunately it’s hard to predict how how long a well will be productive, or what its yield will be. Let’s be conservative on the time-line and call it 10 years at 150,000 barrels per day. (Atlantis, a very similar rig to Deep Horizon, produces up to 200K barrels a day.) That’s about 54.75M barrels/year, or 547M over 10 years. At $100/barrel, we’re looking at $54B gross over the lifetime of the well. Subtracting say $400K/day for operating costs (about $1.5B over 10 years): About $52.5B.

So here’s the back of the envelope:
Lost oil, plus clean-up costs: $2B + $15B = $17B
Projected net, minus disaster expense: $52.5B – $17B = $35.5B

So here’s that very large positive number I was talking about:


Thirty-five-and-a-half Billion dollars. That’s the amount of money BP might stand to lose if the well were sealed in a permanent way, that prevented them from getting at the oil.


After weeks and weeks of deadlines at work, and sickness and minor injuries at home, I finally had some time to get back to work on UserLand this weekend.

There are still too many servers running UserLand’s sites, making the hosting fees higher than they need to be, which of course limits the amount of time available to get things under control, so the first priority is still to consolidate servers. Not only does this reduce costs, but it also makes it easier to migrate later if necessary.

A couple of weeks ago, I moved to the main UserLand server that hosts the site, and the Manila and Frontier sites. I started work tonight on another server, with an eye toward moving the sites to the same machine.

I haven’t finished this one yet, because as I was exploring what data and sites were there, I noticed a huge amount of traffic on one sub-domain for /RPC2. What on earth is this RPC handler? Well, it turns out it’s spam. The requests were all coming in to, which was the backend host for the Salon Blogs, and the RPC method was Whoops!

So for years, there’s been an open ping server sitting there, waiting for spammers to send URLs to it, and posting links to their spam sites up on the web, under a prominent domain name. This had to stop right away.

Fortunately it was pretty easy to do. UserLand already had code in place to drop requests from spammers. We called it the blocker responder. Its job is to examine all incoming web requests (as efficiently as possible), and look for reasons to reject them. If the request is a “bad” one, it responded with empty content. But it didn’t know anything about RPC requests.

So I made it smarter. Now it looks for any requests that are RPC requests for the method, and it drops them. I also updated the responder to simply drop the request, instead of returning empty content. Hopefully this makes it more likely that the spammers will notice that it’s not working, and turn their bots off.

I should note that this responder runs only on UserLand’s servers. If this is something that you want to do on your own Manila server, let me know, and I’ll be happy to share the code with you. (It’s super simple.)

Tomorrow I’ll move the sites on this server over to the main server, and shut off the old one. After that there’s more old stuff to turn off, and the problem of how to generate viable static HTML from Manila sites.