Remembering Penny

Penny

This is one of my favorite photos of Penny. She’s hard at work on one of the three chores she loved best, sniffing. The other two being eating and sleeping, of course. If all of those can be considered a career, then Penny was a seasoned professional.

There’s another picture here with her sister, Casey, when we celebrated Penny’s fifteenth birthday last Summer. That was a very happy day for all of us. Frankly, we never thought Penny would last that long. Every day after that was a gift. And we cherish them all.

Today would have been Penny’s sixteenth birthday.

Sweet sixteen for a Labrador Retriever is more like 99 for you and me. And toward the end, Penny did seem that ancient. But I like to remember when she was still black as a hairy coal, filled with mischief and energy, ready to chase those pesky cats or sneak away to find one of their feline bowel snacks. You dog people know what I mean.

Penny would eat just about anything. One time she chewed into my son’s backpack and swallowed two handfuls of foil-wrapped candies. Stomach-pump time for any other breed, but not Labradors in general nor Penny in particular. As they say, it came out all right in the end. Foil-wrapped, too. Watching her remanufacture those candies the next morning was an inspiration to anyone who’s ever been constipated.

She loved to eat healthy foods as well. Years ago when we worried that she might be putting on a little too much weight, we started feeding her carrots, broccoli and cauliflower as snacks. She loved them as much or more than her kibble or biscuits. But we quickly had to back away from that strategy due to the risk of a methane explosion. The cauliflower was especially dangerous and unpleasant.

But Penny loved the smells she made. Just like she loved all the odors. She didn’t even have to bury her head in the grass or dirt to enjoy them. At times, she would stand in our yard on the hilltop, leaning into the wind, her nose quivering, concentrating, trying to suss out all that lay below her. So focused. I never interrupted her when she was like that. I didn’t want to break her spell.

Another passion of hers was walking. Up the block and down the hill, all around and around. No doubt to get closer to whatever she had smelled from her perch above. Every morning after breakfast she wanted to get out and check her pee-mail. We would go strolling to investigate the neighbors, the deer, fresh lawn clippings, some spilled refuse, perhaps a varmint or two. And she never tired of it. Even treading the same paths every day. It was just as exciting to her as dog food.

Meetings were always fun for Penny. She could get scratched, smell some new humans, and pick up a few sympathy snacks. She never bit anyone nor threatened a child. Although she did lick a few of them pretty thoroughly. She certainly loved my son — they grew up together. But it took her awhile to accept Casey, our other dog. Penny had us all to herself for so long that I think she was a bit miffed at the newcomer. But once Casey was no longer an annoying puppy, they became family. Eventually they would curl up asleep next to each other.

Penny had a rich, double-thick coat of fur with a subtle but stylish wave running down the middle of her back. Beautiful and therapeutic. When I would come home from a long day at work — after she licked me repeatedly in my face – I would place my hands on her hairy head or fuzzy sides, scratching her, tickling her, stroking her back. And soon all the tension would leave my body, and all my worries would dim from my mind. Every time she would give me this gift. Every time.

She was dedicated to sleeping. Even as a puppy, Penny seemed to spend over half the day at it. And she had a snore that would shame an apnea-suffering fat man. Her dreams could be loud too. While not exactly violent, she sometimes moved and shook, twitching her legs, tail and nose. For a long time she slept on the bed at our feet. I always liked her close by, even if she was noisy and in the way. It just seemed right to have her there.

In her later years, when she could no longer leap up safely on the bed, Penny would curl up in the closet. Tucked away like a shadow in the shade. That little room became like a burrow for her, and she sought it out for comfort. And as I moved around during the night, I took comfort too in the gentle buzzing and creaking emanating from the darkness between the clothes and the hangers.

Now, when I get up in the middle of the night, I still pause to check on her in that closet. To make sure she’s okay. To make sure she’s safe. I thought I heard her collar tags jingle. Didn’t I hear it? And every time I’m sad all over again.

She’s gone away forever.

Toward the end of March, Penny couldn’t walk or even stand. Her bowel and bladder episodes were not at all regular. But on her last day she wanted a bit to eat again. So we bought her a bacon burger from Five Guys and fed some of it to her in little pieces. How many of us will have bacon on our last day?

We carried her out to the front lawn and let her lay on the grass so she could sniff the air and feel the breeze. A few of our neighbors came around to hug her and say goodbye. She was a celebrity on our block.

At the end of that day, my wife, son and I took her to the same room where we said goodbye to Casey. We kissed her, we hugged her, we stained her still beautiful coat with tears. And with all of us gathered around, and with her head resting on my knee just like Casey had done, Penny passed away from this world.

We placed her ashes in a little oak box on the mantle next to where Casey also rests. Together. They’ll always be my little girls. But I miss them so very, very much.

We love, you Penny. And we’ll never forget you. Find Casey and be at peace. Be at peace.

What I’ve been doing lately

A few words of explanation to those who are asking where I’ve gone and what I’ve been doing the last few months.

Sometime in March, shortly after I recorded my first “Debug” podcast, our dog Penny took a turn for the worse. My family and I struggled with her illness for long days and longer nights. And then we made a very hard decision. She passed away just before the month was over.

I won’t write her eulogy now. She deserves better than this haphazard post. But I hope to publish something in a few days, on what would have been her sixteenth birthday.

We were devasted by her loss. More so than I realized at the time. I unplugged myself from the Internet and most everything else I was doing then. I don’t even remember much of what happened the following week.

And then I realized I had to prepare my speech for the Úll conference starting on April 12. I’m thankful for the pressure of that deadline and my own natural tendency to procrastinate. It got my mind off grief and straight on to panic.

Now, public speaking doesn’t bother me much. Years ago I trained as a minister — a whole other story. But when you’re twenty years old, in the pulpit, and telling people four times your age that you have the absolute Word of God for their lives today — well, everything else is downhill from there in terms of pressure.

But I never want to do any kind of presentation without being prepared. The audience deserves better than that. So that had me worried. And blessedly focused.

What did me in was the way I wrote the speech. I scribbled down a 4,000-word outline — just an outline, mind you — and then proceeded to record myself trying it out. When I hit the 90-minute mark I knew I was screwed because we were limited to only 25 minutes at Úll. I figured I might get away with a half hour, but they would march me offstage if I went twice that long.

So it was cut, cut, cut and cut some more. Rewrite, rewrite, rewrite. Again and again.

I was still working on that speech the day before my wife and I got on the plane to Dublin. All the constraints, especially the time limit, actually improved it.

But the process of completing it burned me out on writing.

And then suddenly there was Úll — The Conference. I capitalize it because it’s simply the best event I’ve ever attended.

Not only are Paul Campbell and Dermot Daly crazed saints for hosting such a celebration, but how they attracted all these wonderful people to operate it, speak at it, and attend it — that’s a stunning accomplishment. You need to attend next year. Trust me.

And the venue? Perfect. Dublin is now one of my favorite cities. Some say you can’t swing a cat in that town without hitting a church or a pub. But it’s not just religion and relaxing there. Ireland is thick with history and gorgeous to behold. And after you’ve worn yourself out absorbing it? My advice is too absorb a Guinness and some pub food.

Every Guinness I’ve drank in America tastes like piss compared to the brew — like some magical beer milkshake — that they serve with such expertise and pride there. You have to try it.

But it was the people in Dublin that impressed me the most. Not only did my wife and I make wonderful new friends at Úll, but everyone else we met in Ireland were just so… nice. Even the cab drivers.

So Úll and Dublin were great. And then we got back from that 15-hour flight to find that Penny’s ashes had just been delivered to our home. It was like a punch in the gut. All those feelings were back.

Now, it’s not wrong to mourn and miss someone — and she was a some-one, not a some-thing. If you don’t, did they really matter? But you can’t dwell on just the loss.

That’s when I decided to throw myself into a new project. If I wasn’t so burned out, it would’ve been a writing project and you could’ve already read that here.

I say on this website that I’m a recovering programmer. Well, I’ve really fallen off the wagon this time.

Suddenly, I got a wild hair up my ass about MPlayer, the command line-based, cross-platform media player that geeks and other encoding freaks like myself use incessantly.

Even though it’s a command line program, it still presents a Cocoa UI when displaying video on OS X. But the various quirks and bugs in that UI had been getting on my nerves for a long time.

So I wrote a whole new front end for it. Not by patching it. But by running it as a background process, capturing its output and then dynamically presenting a new UI from yet another command line tool.

Stupid, I know. But it was a wonderful distraction. And the damn thing works just fine.

I call it “MPlayerShell.” The source code is available on Github and, thanks to Valerii Hiora, it’s installable via Homebrew too. You can read all about it here.

This is the project I talked about, but didn’t name, on my second “Debug” podcast with Guy English and Rene Ritchie. Props to Rene for leading off the show with one of my “F” bombs — the man never buries a good lede.

Anyway, the whole process of writing MPlayerShell took me nearly three weeks. Yes, I’m the world’s slowest software engineer. But part of that process was 1) Figuring out MPlayer’s peculiar APIs and behaviors, and 2) Learning to write in Objective-C on OS X again. Seriously, I hadn’t done that in years.

Now I’m on a mission. I must do more coding. That monkey is not crawling off my back anytime soon.

And I know exactly what I’m going to write.

I’m on the “Debug” podcast this week →

My thanks to Guy English and Rene Ritchie for inviting me on their podcast. I don’t know what they were thinking but they’re good people anyway.

Apparently we talked for an hour and a half. At least that’s the length of Rene’s final edit. I don’t remember half of what I said, but I certainly enjoyed droning on and on at those two. I might have mentioned Safari and WebKit maybe once or twice. And used the “F” word — you know, just so you’re certain it was me.

Meet me at the Úll conference in Dublin

I’ll be speaking at the Úll conference in Dublin, Ireland sometime during April. Thanks to Paul Campbell and Dermot Daly for the invitation, and thanks to Jim Dalrymple for talking me into it.

I got a chance to meet Paul at a four-hour lunch last week. He’s obviously both considerate and crazy enough to endure me talking for that long. Perhaps you are too.

If you like the content here at this website, my session will be like a really long-ass blog post. Except that you won’t have to read it. I’ll “perform” it live. Whatever the hell that means. Now I just have to finish writing it before I show up next month.

Of course, there are many other fine folks speaking at and joining in the conversation at the conference. I look forward to meeting them all.

See you there.

Regarding fake projects and loyalty tests

I meant to write this article a few weeks ago when I was on a roll here. In the meantime, life intruded with several distractions — some serious, like another illness for our 15-year-old Labrador Retriever, Penny. That situation caused me to completely unplug from the Internet for a few weeks to focus on her recovery. Penny is much better now and I’m trying to get back to that original thought.

Like me, many of you probably read Jacqui Cheng’s article on Ars Technica, “Does Apple really assign engineers to ‘fake’ projects as a loyalty test?” Her article was a response — a refutation, really — of a meme that wouldn’t seem to die.

Once you get past the overly dramatic headline, it’s a well-written, thoughtful piece with actual research, sprinkled with quotes from real people who know what they’re talking about, including a tweet from my friend Daniel Jalkut. Props to Ms. Cheng for being an honest-to-God journalist and doing the hard work on this one.

The conclusion to the article is, of course, “no,” Apple doesn’t do that.

And I can also confirm that’s the case. As a manager and then director at Apple for over 10 years, I never once assigned anyone to a fake project. And loyalty tests? I never heard of either practice there.

So, how do silly ideas like this stay alive? It’s because many don’t understand — even at a basic level – how Apple works.

A qualification for that understanding doesn’t require employment at Cupertino. I doubt very seriously if John Gruber, Jim Dalrymple or Horace Dediu — none of whom have ever worked for Apple — fell for that original story.

I picked those three folks as examples because all of them — as far as I’m concerned — have a good track record of discerning Apple’s motives and interpreting the company’s actions. There are certainly other people out there like those three, but sadly it’s a small number compared to the legion employed as media gas bags.

Anyway, here’s a lesson for the gas bag army — not that they’ll really take it.

As I’ve mentioned here before:

… at Apple, we defied business orthodoxy by being a functional rather than divisional organization. Meaning we were organized by product focus like a much smaller company, rather than in discrete business units like some the size of IBM or General Motors. It certainly staved off the complexity of duplication that continues to plague other companies.

This isn’t some insider scoop I gave away with that post. It’s been obvious to people on the outside for years.

Clearly, duplication of effort is not big in Cupertino. Even with two operating systems — iOS and OS X — the idea is to share technologies that make sense and keep those technologies from diverging too much. Otherwise it becomes really complicated to coordinate releases. It’s not perfect, but anyone who’s attended an Apple developer conference knows the company takes reducing even that kind of duplication seriously.

Which makes the idea of fake projects so ludicrous. That’s not even duplicated effort. That’s completely superfluous work. When you have a focus on efficiency like Apple, why would you waste time and resources doing that?

Apple is also known for having very high standards when it comes to hiring. And it’s clear that those candidates who make it through the interview process, are offered a job, and finally accept employment — well, those folks really want to be at Apple.

It’s also common knowledge that Apple keeps what they’re working on a secret until it’s unveiled to the public. There are very explicit rules for employees — told to them on their first day of their employment or later disclosure on a specific project— about what they can say regarding that project and to whom they can say it. And it’s very clear to everyone what happens if those rules are broken. Such a policy is probably not that much different from what other technology companies have these days. This is old news.

Now, if Apple is going to screen candidates so thoroughly and then explain the rules to them so carefully after they’re hired, what is the point of an additional loyalty test?

None. It’s a stupid idea. Not only stupid, it’s insulting to the person you just hired. And basically an excellent way to demotivate the person you invested so much time in finding.

So much of what is written about Apple these days is just horseshit meant to draw flies. And it makes me sad that somebody had to clean up after that particular pile.

Touring by yourself →

Dalton Caldwell after watching Phil Elvrum perform his solo act:

Going “indie” is clearly not for everyone, but I have the utmost respect for the people that are able and willing to do it.

Read the whole story of how Dalton arrived at that thought. It’s such a wonderful reminder of the courage people must summon to venture out on their own. I immediately sent this article to a friend who recently left Apple to start her own business. Just seemed an appropriate way to tell her how much I respect what she’s doing.

Power users vs. empowered users →

Rene Ritchie on the tension between the traditional desktop and the new world of touch:

When the iPad was announced, a friend and former colleague of mine lamented it as the death-knell of powerful, open computing. I welcomed it as the death-knell of me providing tech support for every relative and neighbor who walked into a Best Buy and walked out with a beige box of mystery and pain. Turns out, we were both right.

And this:

And that was Apple’s plan. It’s always been their plan. From Apple II to Mac to iPad to Siri or whatever’s next, Apple has relentlessly pushed form factor and interface towards the mainstream.

Don’t know how I missed this article last week, especially with that perfectly catchy title. Rene totally gets it. That was our plan. And we came to terms with the bargain that made it.

They’ll pry the Mac from my cold, dead hands, but I’m a geek. The good news for me and other power users? That Mac is not going away anytime soon. Plus, now we have an even better solution to recommend to everyone else. Nothing but upside since we can enjoy it too.

By the way, the support war stories within the article are great — the anecdotes aren’t just anecdotal. As I mentioned to Rene earlier today, we’ve all been there with friends and relatives.

Why I retired from Apple

Today is the one year anniversary of my last day at Apple. It’s Sunday now but it was a Friday back then. And that evening I was given a very warm sendoff by my crew and many others at The Fruit Company.

Several folks on the Safari and WebKit teams produced a video in order to more thoroughly embarrass me. Which didn’t work because I’m beyond embarrassment. But the experience was great. I loved it.

My wife and son joined me for the going-away party. I think it was a shock to my son to see how I was regarded at work. Of course, that didn’t mean he started respecting me at home but, hey, a man can dream.

Seeing all those folks that night — that last week, really — was so bittersweet. I still don’t know how many I’ll ever see again. If there’s one thing I miss most about Apple, it’s the people. They were always the best thing about the place.

Not that Apple was some kind of gulag, mind you. You got the chance to change the world there. And you did. Your work mattered. It was interesting and, as they say, challenging. Certainly no shortage of it either.

It’s Sunday night as I publish this. That means it’s a working night for most managers at Apple. Even more so for Director-level personnel like I was.

Why? Our veeps had to be ready for the big status and planning meeting on Monday morning and we had to be available to help them. Steve always had the meeting then. I assume to set the tone and the pace for the week. Good idea, really. I doubt that’s changed now.

It’s not like other folks there weren’t working nights and weekends too. Many of my engineers worked longer and harder than I did. It was a busy place. By our choice.

But I don’t miss any of the work.

What surprised me after I retired was not missing the control and authority I had, such as it was. My ego remained intact. And I didn’t feel diminished. I woke up February 18 without any minions. Of course, I woke up that morning without any obligations either.

Why did I retire? People often ask me that. When I’m feeling boorish I just say, “Because I could.”

The truth is I was done.

I accomplished far more there than I expected. And I had no dreams of greater power and glory, if such a thing were available to me. When I looked inside myself, I didn’t see ambition or even drive to continue. I’m not sure how that happened. Maybe I was just tired.

And when you’re responsible for so many people, you owe them more than that. Better to step aside and let others have their turn. So I did.

It’s not like I wanted to leave and start my own software business. People always assume I have some massive entrepreneurial spirit. But I’m not like that at all. At my core, I’m just a tinkerer who got very lucky.

I refer to myself here as a “recovering programmer.” That simply means I no longer pursue engineering as a primary activity. And that I’m self aware enough to know that I’ll occasionally fall off the wagon and start coding again.

But if there’s anything I do aspire to, it’s being a writer. So far it’s been hit and miss with maintaining that activity. It turns out writing is even harder than engineering. Who knew?

Even though my first month of floundering around, thick-fingered on this blog got me over a half million page views, I’m not vain enough to think it’s my snappy prose that drew the visitors. It was the subject matter.

No matter how hard I try, I can’t ever really leave Apple.

It’s not a toomah

Some of you inquired online as to whether I continue to exist as a going concern. I can understand your curiosity since I’ve been absent here and mostly absent elsewhere for more than a week. Let me assure you that I do still live, albeit in a rather feverish and mucus-filled fashion.

As near as I can tell, I don’t have influenza. That’s a very serious disease. That last time I caught the flu — the real it-can-kill-your-ass flu — I went to the hospital for several days. Thankfully, I don’t remember much from the whole ordeal. That was back in the 90s.

What I possess now is an uncommon cold. I call it that because a more humble infection just annoys for two or three days. This one knocked me flat for more than twice that and won’t seem to let its foot up off my chest without draining me of strength and will first.

At least it started out as a cold. While not the flu and not life-threatening, it’s certainly moved on to more than just occupying my nasal cavities and now appears to building a summer home in the more southern parts of my body.

So it might as well be the flu. Even if it’s more prosaic.

The worse part of this experience is that not only am I not writing or programming, but I have little desire to even amuse myself with the vast library of movies, television programs and books I long ago prepared for just such a sickness.

So I sleep. And drink water. Lots and lots of water. Whole bottles of water. Which, besides the cold itself, is why I can’t remain sleeping for very long. Sooner, rather than later, I need to return the deposit on those beverages. Which means my record is about three hours of sleep at one time. And the average is half that.

My advice? Don’t get sick this winter. There are some annoying creatures out there besides the flu. One of those jerks is staying with me now.

Lesson learned from a performance scare

Last Wednesday I posted this on Twitter and App.net:

It’s taking almost two seconds to completely regenerate all content on donmelton.com using Magneto. I need to speed that up.

As I’ve mentioned before, Magneto is a static site generator. It’s a tool I wrote myself, and what I use to create all the HTML, CSS, JavaScript, etc. that you’re reading now. The entire website is generated from this online source.

Some might think I was humble-bragging about Magneto’s speed, but I only had 42 posts here at the time and just under two seconds to generate that seemed a bit slothful to me.

Of course, I didn’t do anything about it right away — there are days when I make Jeff Lebowski look vigorous — but I did think on the problem for awhile. And then I was distracted by pictures of cats and bacon on Reddit. You know how it is.

But two days later, John Gruber made these two posts on Twitter:

Just fixed a punctuation typo in the first-ever DF Linked List entry, from 25 June 2004: df4.us/73

That was 18,989 items ago.

Stunning — not the typo, everyone makes those — but that he’s made over 18,989 posts to his website. That is truly impressive. Of course, he’s been doing it for over 10 years so you would expect him to have written maybe one or two.

Rather than make the “Finally!” joke like everyone else about him fixing the typo, I replied to John asking, “How long does it take to regenerate the site with Movable Type?” And he responded, “Good question. It’s been years since I’ve done a site-wide rebuild.”

And that… Got. Me. Thinking.

A site-wide rebuild? I do that here every time I make a single change. It’s just easier that way — no dependencies to calculate. And my website is still small so it makes sense, even if it’s taking almost two seconds right now. If Gruber doesn’t want to do a rebuild with Movable Type, maybe this is a bad approach. How long would it take Magneto to generate a website with 18,989 posts? Hmmm, how long?

So, I put down my White Russian, hung up my bathrobe, and got to work figuring that out.

First thing to do was fake up a shitload of posts. My usual approach to problems like this is a single and convoluted line of shell and sed script, typed and executed directly on the command line in Terminal.app. It’s gruesome, but I’m a hack and that gets the job done.

My not-a-real-script started copying my existing posts and then replacing their published timestamps. A minute into the process and I realized my outside loop counter was wrong and I would wind up with more that 20,000 posts. Oh well, it would just be a better test. And Gruber’s total number of posts was probably closer to that anyway.

Then life interrupted. Not just more pictures of cats and bacon this time, but actual family interaction. For several hours, too.

When I managed to get back to my precious iMac, it was late thirty and I was tired. I kicked off Magneto and started it chugging on 20,394 posts, along with all of the other content already included in the website.

And I waited. Five minutes into staring at Terminal.app I remembered there’s no way to tell which post Magneto was processing because everything happens in memory before it writes anything out to disk. This isn’t as stupid, wasteful, and uncommunicative as it sounds. That behavior was, in fact, by design.

I yawned and thought, screw it, this is taking too long. Something’s wrong, but I’ll just let it keep running and check the results in the morning. Off to bed.

Saturday morning.

Made my coffee and started reading the news. Halfway into my usual RSS feeds when the caffeine finally loosened the knot in my frontal lobes — I remembered. Say, what about that test I was running last night?

I switched over to Terminal.app. Magneto was done. Oh, how nice. But how long did that take? I looked at the console spew. Hmmm, 24,415.52 seconds — a lot. Lesse, that’s… trying to do the math in my head… switching to Calculator.app because I can’t count that high… that’s … MOTHER OF GOD?!? That’s 6 hours and 47 minutes! What the hell was Magneto doing?

I thought, there goes my performance bona fides. My reputation on Safari is shot. They’ll ask for my union card back.

So, I set to work figuring out what went wrong.

The first task was to measure. Folks online pointed me at ruby-prof, a great little code profiler for Ruby. I reduced the number of posts in the test to a thousand or so since I couldn’t stand to iterate all weekend on the problem.

And then it was lather, rinse and repeat with ruby-prof, while also adjusting the number of posts in the test.

It turns out, the problem was not with Magneto. I made an even stupider mistake — I trusted the tool to protect me and didn’t pay attention to how I was misusing it.

Now, Magneto is very simple. It’s devoid of features, really. It’s not even “blog aware” like some other systems. It requires you to write a site controller script, plugins and templates to tell it exactly how to generate blog posts, index pages, RSS feeds, etc. And you get to make all the policy — that’s its power.

When I wrote Magneto, I generated a thousand pages with Magneto before I released it just to make sure it didn’t have any glaring performance issues. It scaled well. Of course, I tested other things, too. And it was plenty speedy with a simple site controller script. A. Simple. Script.

However, I was much more cavalier with my own site controller script, plugins and templates that I wrote to use here. And I made the cardinal sin of never measuring the performance implications of that sloppy-ass code.

I was right when I thought almost two seconds was too long to generate 42 posts. That’s about .03 seconds per post. I thought I could do better on my hefty iMac.

But taking 6 hours and 47 minutes to generate 20,394 means it was taking 1.2 seconds per post. That’s not linear — not even close.

Thank god for ruby-prof. It took awhile, but I was able to zero in on the problems. Yes, it was more than one. But they were all the same issue — not caching the unchanging result of a slow subroutine that was repeated in every post.

All these rookie mistakes were in one of my plugins and one of my templates. None of it in Magneto itself. And after some judicious use of static variables and other grotesque hacks, I was able to improve things a tiny, tiny bit.

Now it takes only 5 minutes and 19 seconds to generate 20,394 posts. That’s a much more linear .016 seconds per post. And a 76.576x improvement overall — that’s not a percent improvement, that’s 76.576 times faster.

Yes, I was that stupid.

I’m sure I can find more improvements, but it’s unlikely that I’ll be able to generate over twenty thousand posts in less than 10 seconds without a massive upgrade in hardware. And 10 seconds is about the most I ever want to wait for something like that. Right now, 10 seconds would be about one thousand posts.

No, if I ever approach the proficiency and productivity of John Gruber, then for daily use I’ll need to extend Magneto or my site controller script to only rebuild what’s changed and cache what hasn’t.

In the meantime, I’ll be measuring more up front. Maybe I’ll even write about how I made a similar mistake with Safari and the other lessons we all learned from that.

Obama’s fighting words →

Conservative writer David Frum on President Barack Obama’s second inaugural address:

In the past, President Obama has spoken of the divisions between Republicans and Democrats as fundamentally unreal, subject to compromise and reconciliation by leaders of goodwill. Not this time. This time, he called his opponents out. Yes, many of them deserve it. Yet that does not make his words any less aggressive. Quite the contrary, actually:

We cannot mistake absolutism for principle, or substitute spectacle for politics, or treat name-calling as reasoned debate.

Those are not words intended to invite Republican cooperation, but to slam Republican non-cooperation; not to conciliate, but to confront. They were fighting words, and they portend a second term in which the president is fully as willing to take the fight to his opponents as they have been to take the fight to him.

Frum is at least more reasoned in his reaction compared to the faux indignation of other Republicans. Like schoolyard bullies, they just can’t believe the skinny kid wants his lunch money back now.

I don’t think President Obama is picking a fight. But it’s clear he’s not going to back away from one anymore.

15 things Kurt Vonnegut said better than anyone else ever has or will →

During a conversation on App.net today, Dalton Caldwell linked to this article to source a snippet from Kurt Vonnegut he had just posted.

Today isn’t the anniversary of anything significant in Vonnegut’s life. At least, not that I know of. And this article dates back to 2007, the year we were all robbed of his acerbic wit. But I never saw it before.

And I’m fascinated by the selection and exegesis of each of these quotations. My favorite of the fifteen is this koan from “Cat’s Cradle” regarding the curse of sentience:

Tiger got to hunt, bird got to fly; Man got to sit and wonder, “Why, why, why?” Tiger got to sleep, bird got to land; Man got to tell himself he understand.

Dalton Caldwell liked that one too. So much so, it was the very first post he made — and only the third anyone ever made — to App.net. Good start, sir.

So it goes.

In her final days as Commander of the International Space Station, Sunita Williams of NASA recorded an extensive tour of the orbital laboratory and downlinked the video on Nov. 18, just hours before she, cosmonaut Yuri Malenchenko and Flight Engineer Aki Hoshide of the Japan Aerospace Exploration Agency departed in their Soyuz TMA-05M spacecraft for a landing on the steppe of Kazakhstan. The tour includes scenes of each of the station’s modules and research facilities with a running narrative by Williams of the work that has taken place and which is ongoing aboard the orbital outpost.

After viewing this, I feel compelled to paraphrase the tagline from “Superman,” “You’ll believe a woman can fly.” And I do. She has the best job ever — superhero.

I can’t recall a longer look at non-fictional humans moving through a microgravity environment. Can you? Even with my Internet-depleted attention span, I couldn’t look away from this 25-minute video — watched the whole thing in one sitting. I bet you will too.

Via Andrew Sullivan.

Woody Allen on hypochondria →

Differentiating himself from a common hypochondriac, Woody Allen writes:

What I am is an alarmist, which is in the same ballpark as the hypochondriac or, should I say, the same emergency room. Still there is a fundamental difference. I don’t experience imaginary maladies — my maladies are real.

You can’t help but hear his voice in your head as your read the essay. It’s old schtick but it’s classic schtick. Good to see him writing something besides screenplays these days. More, please.

Via Mark Evanier.

Based on questions I keep getting on Twitter, App.net and elsewhere, let me update you on Penny, our Labrador Retriever, who stopped eating recently. Thank you all for your concern and my apologies for not posting this sooner. Penny has fully recovered. She’s no longer on an appetite stimulant and is eating normally — which means everything she can find. And we hope she keeps doing that for a long time.

A record hang gliding ride on the Texas wind →

A neat mixed media presentation by The New York Times to clearly explain what Jonny Durand and Dustin Martin did and how they did it.1 Of course, that was 475 miles and they still didn’t make it out of Texas.

Made me wonder how long it’s been since I took my first flight — a powered one — in the aborted pursuit of a private pilot license. Had to consult my log book. Turns out it was six years ago — yesterday. D’oh! Didn’t even celebrate.

What I should really do is haul my ass back to the airport and into that little Citabria again to finish getting my ticket.

  1. Another reason print is dead. Or dying. You know what I mean.

Suicide reporting on the Internet →

Charlie Lloyd on the response to the news of Aaron Swartz’s suicide:

You can tell people who’ve been near suicide before from those who haven’t. The ones for whom this is new are fitting it to a narrative. It’s the compassionate genius who was a little too good, or the activist hounded down by the government, or why would such a promising and beloved young person do something like this, or gosh there seems to be a link between creativity and mental illness, or some other well-meaning script.

Those of us for whom this brings back memories are, I think, a little less eager to see it as something that can be usefully explained, at least not by us.

There’s a collective sadness and anger on the Internet today. I have no idea if Aaron’s treatment by our government here in the United States provoked his action. Others can sort that out.

I did not know the man, but I did know his work — not just the breadth and depth of technologies he created and influenced, but his writing and activism.

Until I read Charlie’s article, I didn’t understand my own melancholy today. Years ago, one of my co-workers and friends took his own life. At that time, I wanted to punish myself for not seeing that act coming, and then for not understanding it after the fact. The thing is, neither reaction helps. Our responsibility is to help make sure it never happens to anyone else again.

Via too many folks on Twitter and App.net for me to remember where I saw this first.

Safari is released to the world

During the early development of Safari, I didn’t just worry about leaking our secret project through Apple’s IP address or our browser’s user agent string. It also concerned me that curious gawkers on the outside would notice who I was hiring at Apple.

Other than a bit part in a documentary about Netscape that aired on PBS, I wasn’t known to anyone but a few dozen other geeks in The Valley. Of course, several of those folks were aware I was now at Apple and working on some project I wouldn’t say anything about. And it doesn’t take many people in this town to snowball a bit of idle speculation.

I found out later that Andy Hertzfeld, an Apple veteran who I worked with at Eazel, had figured it all out by the time I showed up for my first day to work on the browser on June 25, 2001. Andy was very insightful that way. But thankfully he was also quiet about it at the time.

Hiring Darin Adler, also ex-Apple and ex-Eazel, in the Spring of 2002 was likely visible to others in the industry since he was much more well known than me. But because Darin had never worked on a dedicated Web browser like I had, no one made the connection.

However, when I hired Dave Hyatt in July 2002, then guesses started flying fast.

While at Netscape, Dave built the Chimera (now known as Camino) browser for Mac OS X and co-created the project that would later become Firefox. Both of these applications were based on the Mozilla Gecko layout engine on which Dave also worked. He was a true celebrity in the Web browser world, having his hands in just about every Mozilla project.

So, during the Summer of 2002, several bloggers and tech websites speculated that Dave must be bringing Chimera to the Mac. Except that Chimera was already a Mac application and didn’t need to be ported. So what the hell was Dave doing at Apple? Building another Gecko-based Mac browser? No one knew. And none of this made much sense. Which is probably why the rumors subsided so quickly.

But people would remember all of this when Safari debuted at Macworld in San Francisco on January 7, 2003. And at least one of them would remember it at full volume while Steve Jobs was on stage making that announcement.


Until I watched that video I found and posted of the Macworld keynote, I had completely forgotten what else was announced that day. Which is pretty sad considering I saw Steve rehearse the whole thing at least four times.

But you have to realize I was totally focused on Safari. And Scott Forstall, my boss, wanted me at those rehearsals in case something went wrong with it.

There’s nothing that can fill your underwear faster than seeing your product fail during a Steve Jobs demo.

One of my concerns at the time was network reliability. So, I brought Ken Kocienda, the first Safari engineer, with me to troubleshoot since he wrote so much of our networking code. If necessary, Ken could also diagnose and duct tape any other part of Safari too. He coined one of our team aphorisms, “If it doesn’t fit, you’re not shoving hard enough.”

Ken and I started at Apple on the same day so, technically, he’s the only original Safari team member I didn’t hire. But because we both worked at Eazel together, I knew that Ken was a world-class propellor-head and insisted Forstall assign him to my team — essentially a requirement for me taking the job.

Most of the time during those rehearsals, Ken and I had nothing to do except sit in the then empty audience and watch The Master Presenter at work — crafting his keynote. What a privilege to be a spectator during that process. At Apple, we were actually all students, not just spectators. When I see other companies clumsily announce products these days, I realize again how much the rest of the world lost now that Steve is gone.

At one rehearsal, Safari hung during Steve’s demo — unable to load any content. Before my pants could load any of its own, Ken discovered the entire network connection had failed. Nothing we could do. The IT folks fixed the problem quickly and set up a redundant system. But I still worried that it might happen again when it really mattered.


On the day of actual keynote, only a few of us from the Safari team were in the audience. Employee passes are always limited at these events for obvious reasons. But we did have great seats, just a few rows from the front — you didn’t want to be too close in case something really went wrong.

Steve started the Safari presentation with, “So, buckle up.” And that’s what I wished I could do then — seatbelt myself down. Then he defined one of our product goals as, “Speed. Speed.” So, I tensed up. Not that I didn’t agree, of course. I just knew what was coming soon:

Demo time.

And for the entire six minutes and 32 seconds that Steve used Safari on stage, I don’t remember taking a single breath. I was thinking about that network failure during rehearsal and screaming inside my head, “Stay online, stay online!” We only had one chance to make a first impression.

Of course, Steve, Safari and the network performed flawlessly. I shouldn’t have worried.

Then it was back to slides and Steve talking about how we built it. “We based Safari on an HTML rendering engine that is open source.” And right then is when everybody else remembered all those rumors from the Summer about Dave Hyatt bringing Chimera to Apple.

But I chose the engine we used — with my team’s and my management chain’s support, of course — a year before Dave joined the project. Dave thought it was a great decision too, once he arrived. But that engine wasn’t Gecko, the code inside Chimera.

It was KHTML. Specifically KHTML and KJS — the code inside KDE’s Konqueror Web browser on Linux. After the keynote was over, I sent this email to the KDE team to thank them and introduce ourselves. I did it right from where I was sitting too, once they turned the WiFi back on.

You can argue whether KHTML was the right decision — go ahead, after 10 years it doesn’t faze me anymore. I’ll detail my reasons in a later post. Spoiler alert: I don’t hate Gecko.

But back to Steve’s presentation.

Everyone was clapping that Apple embraced open source. Happy, happy, happy. And they were just certain what was coming next. Then Steve moved a new slide onto the screen. With only one word, “KHTML” — six-foot-high white letters on a blue background.

If you listen to that video I posted, notice that no one applauds here. Why? I’m guessing confusion and complete lack of recognition.

What you also can’t hear on the video is someone about 15 to 20 rows behind where we were sitting — obviously expecting the word “Gecko” up there — shout at what seemed like the top of his lungs:

“WHAT THE FUCK!?”

KHTML may have been a bigger surprise than Apple doing a browser at all. And that moment was glorious. We had punk’d the entire crowd.

Older dogs and newer tricks →

Gary Marcus on the widespread view called the “critical-period effect”:

The critical-period effect is the idea that you can’t do certain things — like learn a language, or learn an instrument — unless you start early in life. It’s a discouraging thought for anyone past adolescence. But, recently, the evidence for this idea had started to unwind.

He goes to detail some of the new evidence against that idea and his own adventures in learning guitar at the age of forty.

I’ve always believed — not just hoped — that you can continue learning new things when you’re an adult. Not just information and facts, but real skills — behaviors that are normally envied as talents.

I know this is true because I’ve been doing it my whole adult life. And I plan on learning new things until I run out of air to breathe. I’m not saying it’s easy when you’re my age. But don’t tell me it’s impossible.

Via Andrew Sullivan.

Ignore that bogus RSS feed entry in Google Reader

At 4:08 this afternoon, the Google Reader RSS feed aggregator decided to insert a bogus entry into their version of my RSS feed. My apologies, but I have no idea why they did this.

The bogus entry has the same title as one of my previous posts, but it doesn’t have any content.

If you don’t subscribe to my RSS feed using Google, then this problem doesn’t affect you.

My entire website, including the RSS feed, is static. That means all the HTML, XML, CSS, etc. here is just simple text files. I’ve verified that the RSS feed file on my ISP’s Web server does not contain this bogus entry.

I’m actually writing this in hope that a new post on my website and an new entry in my RSS feed will somehow reset Google’s whacky-ass view of the universe — at least that part of the universe where my feed is located.

Please let me know if you see this problem again.

Via Twitter, Jan Lehnardt let me know that the video I posted earlier was not accessible to him in Germany. Damn. My apologies. This is another reason why embedding videos on your website is often problematic. So, just in case this might be happening to others outside the United States of YouTube, here’s another video Jan found which does work for him. Maybe it will work for you, too. Keep in mind that this is not a complete version of the presentation. It’s missing the description of the technology behind Safari at the end.

Ten years ago today, which was actually a Tuesday, Steve Jobs introduced Safari to the public at Macworld in San Francisco. The video above is the full keynote address. It’s not an official Apple video which explains the rather poor quality. My apologies, but that’s the way I found it online. I didn’t make it.

The good part — well, the part I really cared about at the time — begins 54 minutes and 52 seconds into this particular video. That’s when Steve says, “So, buckle up.”

I love that he started that way, because for myself and the Safari team, it had already been a wild ride. And let me tell you, we really could have used seat belts then as we sat in the audience squirming breathlessly while Safari made its one and only first impression. Spoiler alert: Steve was a demo god, network performance didn’t suck that time and Safari remembered all its lines.

Later this week I’ll have another “inside baseball” post for you about the introduction. Stay tuned.

Comic

While I did spit up a little coffee just now laughing at this, I quickly realized Zach Weiner is conflating two issues here.

Having your email application perform an automatic action on your behalf is not a bad thing. That’s something computers are good at — doing repetitive shit for you. I use this feature in Mail.app all the time to attach a signature to my emails. Probably you do too.

But including irrelevant crap in your signature is neither witty nor useful. Worse is including random irrelevant crap — which might be what Mr. Weiner actually means here using the word “automatic.” The “At Random” feature of Mail.app is something I never use.

If your email signature is longer than your actual name, think very hard about why you’re including that additional information. For business correspondence, your title can sometimes be appropriate. Your entire business strategy and contact page is not.

If your signature is longer than your actual email content, then you’ve failed at the Internet and you must leave. Now.

Via Saturday Morning Breakfast Cereal.

Job applicants’ cultural fit can trump qualifications →

I saw this earlier today on The Loop and had a brief exchange about it with Jim Dalrymple on App.net. I’ll indulge myself expanding on that here.

I’m no lawyer, but screening for cultural fit is a legal slippery slope. If you’re a hiring manager, be very, very careful about which questions you pose to a candidate. For example, you shouldn’t ask someone if they’re married. Or if they have kids. If that candidate doesn’t get the job, someone might claim they were a victim of discrimination. You should already know this.

Now, neither of those questions are examples in the linked article, but this is: “Where do you vacation in the summer?” And that’s a bit borderline to me. That could be interpreted wrong later. So, be subtle.

More importantly, screening for cultural fit is a tricky goal since your organization could wind up with a monoculture. Making sure your new employees embrace your company culture, e.g. innovation, is a good thing. Making sure all those employees are similar culturally can play havoc with diversity and limit perspectives. And that’s bad.