2009 Workstation recovery – libvpx benchmark

I’m slowly upgrading my old 2009-era workstation into the modern world. It’s kind of a fun project! Although the CPUs are a bit long in the tooth, with 8 cores total it still can run some tasks faster than my more modern MacBook Pro with just 2 cores.

Enjoy some notes from benchmarking VP9 video encoding with libvpx and ffmpeg on the workstation versus the laptop…


A British driving adventure in five parts (or, Google Maps Can Suck It)

So I’m doing a little post-Wikimania traveling with my wife and my parents. Yesterday we drove from London to Cardiff via Stonehenge. It was… Quite the experience for a first-time driving in the UK.

Part one: Escaping London

IMG_0146.JPG Our adventure begins in the London Docklands, where the 72nd World Science Fiction Convention was held at the Excel Centre (loncon3.org). I was able to hire a car at the Europcar branch in the convention center, made it over to our hotel, and we just managed to squeeze our luggage into the back of this Skoda something or other.

Google Maps wanted to route us through the London city center to get out to the M4 motorway, but everyone I asked assured me this was a terrible idea and I should get to the M25 “orbital” highway that circles the city. A13 runs east from the docklands to the M25 and was pretty easy to get to; after some initial confusion getting used to driving on the left and being on the right side of the car I more or less adjusted, and we stopped for a quick lunch at a rest stop (“services centre”) off M25.

Part two: reaching Stonehenge

From there the route to Stonehenge was very simple: go south and west on the M25 orbital until the M3 branches off, then take A303 out to Amesbury and follow the signs to Stonehenge. This route was great; mostly big modern highways, well labeled, in the middle of the day. My main difficulty was adjusting to properly centering the car in the lane when I’m sitting on the “wrong” side of the car.


Part three: English country back road hell

When I planned out the route I didn’t do enough research on how to get back to the main motorway; it looked clear enough on Google Maps and I just turned on navigation on my phone and followed the directions a while.

The phone losing gps signal at first was a bad sign, but in retrospect the route was bad to begin with. We ended up taking A360 sorta northwestward toward the M4 which leads straight to Cardiff. As it turns out, while A303 was mostly a pretty comfortable minor highway, A360 is actually a series of tiny country and village back roads.

Often it narrows to one lane, has no shoulder, squirrels around and makes weird turns, etc. this was a somewhat harrowing experience, especially as signage was nearly nonexistent and I had a poor idea of how far I was from the main highway.

Part four: finding M4

Eventually we reached the entrance to M4… And I missed the exit from the roundabout and ended up on the wrong road. Google Maps rerouted us… Down another country road which eventually took us back to M4, much much later than I had hoped to be on the main road.

Once on M4 we were back in a world of wide lanes, divided highways, good signage, etc. Life was good again. We kept going west, crossing the Severn bridge to Wales. Interestingly this is a toll bridge westbound, but the toll collection is a good few miles past the bridge instead of before it like San Francisco’s bridges.

Part five: diversion hell

Then, as we got to about 20 miles from Cardiff, the damn motorway closed down for “works” — possibly related to the upcoming NATO summit and security measures being put in place around town.

I tried to follow the diversion signs but ended up taking the wrong exit from the roundabout and got stuck going north on A449. Unlike our old friend A360 this was a very nice modern highway, but there’s no place to turn around for 10 miles… So it takes a while to get back and try again.

Following the diversion signs we ended up back on M4 but eastbound, back towards London. Argh! We stopped at the next services centre for another break and to regroup.

Google Maps just kept routing us to the closed section of M4 so was of limited help. I called the hotel in Cardiff to ask for a recommended alternate route, but they knew nothing about the closure. I called Europcar but they couldn’t give me anything useful either. Finally, a nice lady at the Costa coffee place overheard our dilemma and offered a route through Newport which would take us around the closure and pick up M4 again. Thanks Becky!

Unfortunately I made a wrong turn and picked up M4 too early, right back at the closure and diversion… And ended up going north on A449 again. We stopped at the first exit to recheck the maps and determined that if we headed back south to the barista’s recommended route and kept going through Newport correctly it would work… But we had to go the 10 miles to the turnaround first, which was very frustrating. Back on the alternate route, another A highway, we entered ROUNDABOUT HELL.

I’m still having nightmares of the Google Maps voice calling out “in 800 feet, at the roundabout, take the second exit to go straight ahead”. Every … fricking … intersection. The alternate route eventually turned out we think to be the recommended diversion route — there were yellow signs with a black circle and a narrow pointing which way to go which lined up with our route and we stuck with that until we returned to the blessed, blessed M4. Finally, we got into Cardiff and Google Maps was relatively sane again leading us to the hotel. We arrived before midnight, but not by much.


Lesson learned: When using your satnav in Britain, research your route first. You can’t tell whether an A road will be comfortable or horrible unless you check it on Wikipedia or something. Gah!

A well deserved post-drive treat.
A well deserved post-drive treat.

Veterans Day

Today is Veterans Day in the US, known as Armistice Day in some other countries. Whatever you call it, it’s the day we remember the sacrifices of soldiers and other military veterans, both present and past.

I’ve never been in a war; I’ve never served in any army; I didn’t even grow up in a military family. But war and its human element have always loomed in the background, both informing the history of the world around me and shaping what comes next.


At least one of my great grandfathers served in World War I, a war now nearly a century old that America barely remembers. But it was this war, the “War to End All Wars”, that brought us the 11/11 Armistice Day.


My grandfathers both volunteered during World War II back in the 1940s — the last time the US was on a “total war” footing. My father’s father served in Europe as an Army supply sergeant, and my mother’s father, too young for the Navy, joined the Merchant Marine and helped with trans-Atlantic shipping. They worked hard for their country, and the work they did on the supply lines helped keep front-line soldiers alive and fighting against the Nazis.


As we get closer to the present, America’s wars have gotten smaller, and fewer people have been directly involved on “our” side. My father was in university during Vietnam, so avoided the draft and instead had great learning and job opportunities here at home. War became something remote and theoretical to our family.


When I was a child, Vietnam was over, the draft had been abandoned, but the Cold War was still alive and well; we were more worried about mutual nuclear annihilation with the Soviet Union than conventional war. It almost seemed an anachronism that we had two Marine Corps air bases nearby (MCAS Tustin and MCAS El Toro, which put on a wonderful air show every year for the kids). Tanks and missiles and machine guns and attack helicopters were “cool” things you mostly saw in movies and video games.

But real wars kept happening, even if they weren’t quite as globe-spanning, and real people were still living and dying in them.

Desert Shield / Desert Storm brought active war into focus for me when I was about 12. I didn’t know anybody directly in the military, but I knew they were real people — a lot of people and equipment shipped out from the local bases, and the news would report on casualties from the local area.

One of my most vivid memories from Desert Storm was reading a newspaper account of a friendly fire incident in which a member of a tank crew was decapitated. I’ve seen far more gruesome things simulated in movies and for real in pictures on the internet (unfortunately), but the shock of a 12-year old reading about a soldier suddenly finding himself holding his crewmate’s lifeless head will never quite fade.

“My” generation’s war didn’t come until 9/11 sparked a US invasion of Afghanistan, followed later by another Iraq invasion. There was no longer a draft, but like my father during Vietnam I was old enough I could have served, but chose instead to stick with university and a career.


I don’t like the idea of war. I hate the idea of people being hurt, displaced, killed, or losing loved ones. But war is a real thing that’s part of the human condition, and for better or worse we have to have people who get involved in them to try to bring the fighting to a close.

Anyway, I’m not really sure I had a point. But please, if you have the day off today, spend some time thinking about the people who go off to war, whether deliberately as soldiers or with no choice as noncombatants, who never come back. And the ones that do come back, often don’t come back the same.

Think about this when you make decisions about your life.

Ada Initiative: help support women (and everybody else) in Open Source!

The Ada Initiative is raising money for their programs supporting women in open source, open culture, and geekdom in general. They’ve reached about 70% of their fundraising goal… can you help them reach $100k by Saturday?

Like it or not, there are widespread issues with poor behavior, outright harassment, and creepy misogynistic tendencies in our beloved nerd communities:

  • free/open source software
  • gaming
  • Wikipedia
  • science-fiction fandom
  • atheism/skepticism
  • etc

Having grown up, worked, or dabbled in all of those communities, I’m often saddened by the continued negative experiences that many women have had and continue to have. The issues that Ada Initiative deal with affect many men and other social subgroups of all sorts, too — LGBTQ folks, people with depression or other mental illness, etc — which matters to me because so many of my coworkers and friends fall into some of those categories.

I’d like to see us move away from glorifying douchebaggery in all forms, and towards respectful participation for all! Care to help?


Donate now

Fare well, old friend Shuttle

This morning marked Space Shuttle Discovery’s final return to Earth, closing out the Space Shuttle program after three decades, a lot of wonder, and a few tragedies.

I grew up in a family that’s always been gung-ho about space exploration. My parents were teenagers during the 1969 moon landing — a time when aerospace was still strong in Los Angeles and the moon landers were being built locally — and have always had a passion for science fiction and fact alike. Growing up in this family in the 1980s, naturally I always loved the Space Shuttle.

Though the full promise of making shipping people and stuff into space cheap and everyday never quite came to pass, the Shuttle fleet has done a strong service to humanity over the years, helping us keep our fragile foothold on the edges of our planet and reminding us how far we have left to go — both in space stuff itself and in organizing ourselves for the long-term future of our world and our species.

It’s fitting that the final flight was Discovery; in 1988, it was Discovery that re-opened the Shuttle program, the first to fly after the Challenger disaster grounded the fleet for safety inspection and repairs, and again in 2005 after Columbia was lost.

My parents took my brother and I out to the deserts north of Los Angeles to see Discovery’s return landing back in 1988. Along with thousands of other people, we crowded the dry lake beds of Edwards Air Force Base, camping out all night to try to get a clear spot. Even at such distance, finally hearing the sonic booms and seeing that little shiny blob zip through the air — knowing it came from space, carrying human beings — was something I’ll never forget.

We’ve got a lot of problems here on earth — poverty, war, oppression, greed, indifference, disease, disasters, etc. But it’s always going to be important for us to be able to get the perspective that comes from stepping back and reminding ourselves that we’ve only got one life-sustaining planet. We’re going to have to learn to share…

Hotel MediaWiki: You can check out, but you can never leave

As announced today, I’ll be returning to the Wikimedia Foundation to work on MediaWiki full-time at the end of the month, after about a year and a half working on StatusNet‘s open-source social networking systems.

Of course in open source, leaving doesn’t mean good-bye… expect to still see SN bug reports and code commits from me in April and beyond! ;)

Never stop learning

First I want to give a shout-out to StatusNet founder and awesome guy Evan Prodromou — the flagship identi.ca community he started has been a major influence on how the freedom-loving end of geekdom sees social networking and its possibilities, and was what drew me to work on the project. I’ve had a great time working with the StatusNet devs & user community, and had chances to delve into new worlds both on the server (fun with queueing!) and the client (I certainly have a whole new appreciation for what JavaScript can do!)

The thing that has always distinguished StatusNet from its more commercial competitors has been respect for users’ autonomy. (The original name of the company was even “Control Yourself, Inc”!) As more and more applications move into “the cloud”, more and more of the “stuff” that makes up our personal lives is living on computers thousands of miles away that belong to some company whose only claimed responsibility is to its shareholders. Maybe your app works like you want, maybe it doesn’t. Maybe you can move your data to another web site, maybe you can’t. Maybe your private data stays private, maybe it doesn’t…

Not only is StatusNet’s code free to use for your own server, but you can actually do so without being cut off from the rest of the network — a consumer-friendly goal that the monolithic Twitters and Facebooks of the world are still fighting against. Evan, Zach, James, myself, and other StatusNetters have put real work into avoiding consumer-unfriendly lock-in and instead promoting interoperability with things like our work on the OStatus protocol and organizing last year’s Federated Social Web Summit at OSCON.

I’m darn proud to have been a part of that, and will continue to apply the “autonomous eye for the cloud guy” to the other web apps I work on in future…

StatusNet goings-on

Things have seemed quiet from StatusNet-land lately because the company’s been re-focusing for our 1.0 push (see Evan’s announcement); there’s actually some really cool stuff coming up:

  • A final 0.9.x update should come out as StatusNet 0.9.7 this week or so — currently in final shakedown on identi.ca and status.net hosted sites. This fixes a lot of old bugs from 0.9.6, adds some AJAX-y love, and has improved ActivityStreams output including initial JSON support.
    • Users can now back up and restore their full posting history & friends list (links on settings page sidebar): this should stay future-proof in 1.0.x and beyond.
    • Lots of new plugins abound!
  • StatusNet’s Android and iPhone mobile clients are being brought up to date and fixed up by Ed Finkler of Spaz fame. There should be new beta releases soon which improve performance and fix some of the crashing bugs from the last release.
  • StatusNet development on gitorious and localization on TranslateWiki.net have moved to the 1.0.x branch, which picks up some existing work on improved database-independence and is moving on to a major visual refresh (making it easier to theme) and better extensibility with new data types.
    • A prototype of the new “micro-apps” can be seen in the Bookmark plugin in 0.9.7, which allows you to save Delicious-style bookmarks into your notice stream, including compatible import/export! Bookmarks are stored as a special notice type in the 1.0.x version, and the MicroAppPlugin base class helps take care of some of the work for you.
    • It will become much, MUCH easier to pass arbitrary data for “micro-apps” and for those trying to use StatusNet as a sort of custom message bus.

The backup/restore system, moving accounts from server to server, and the new micro-apps are all built on top of ActivityStreams, the industry-standard(ish) way of marking up social activities in Atom (and now JSON) streams. This follows StatusNet’s established practice of building open, interoperable systems by combining existing open standards where possible — our OStatus site-to-site protocol runs ActivityStreams data in Atom feeds over PubSubHubbub and Salmon transports (themselves using nice standard XML and HTTP).

MediaWiki plans

One of the things that has me super excited about MediaWiki again is the recent 1.17 migration on Wikimedia’s sites. With this new version’s ResourceLoader system we can be a lot more flexible with client-side extensions: jQuery libraries as a standard component, plus loading code modules dynamically makes it a lot easier to move beyond the traditional “post form and reload” interactivity that MediaWiki was originally built for in 2002.

My favorite pet project recently has been integrating an embeddable in-browser vector graphics editor, so SVG drawings and maps can be created and changed as easily as a simple text page. I’m very interested in getting similar sorts of advanced extensions workable with less administrator intervention — it would actually be possible to do this embedding system through user JavaScript or a Gadget, and I hope to make it easier for individual users to create and share this sort of advanced UI extension safely.

Parser ahoy!

At the core of the Wiki ideal is the notion that editing the documents on the site is quick and easy.  Early wikis used very limited markup, reserving just a few characters for formatting and using special patterns for linking (“CamelCase”).

Over the years, the capabilities of wiki systems grew to meet the demands of their users. Wikipedia being a …. serious use case, MediaWiki’s markup syntax got more and more complex. More and more funny characters, subsets of HTML, squiggle brackets, and finally the unholy terrors that can be created mixing tables and templates… Wikipedia’s gotten a reputation as being difficult to edit for newbies and even old hands are often reduced to quivering blobs of brain-goo when faced with a particularly complex template situation.

I won’t go to far into detail, but I’ve been suckered into ….. volunteered for the next-generation parser work. We’ve thrown around some ideas before on this, but it looks like there’s enough interest now to really start hammering things together. Basically what we want to do is:

  1. solidify a sane, but flexible document structure that handles everything needed when templates are used sanely
  2. be able to identify structures that don’t work well (existing weird template edge cases) so people and/or bots can help restructure them
  3. as edge cases get marked out, start using the document structure directly in more places than the raw source — such as for rich inline editing, section extraction, etc

We don’t expect that wiki text-style markup will 100% go away for the forseeable future… this will be a journey, and it’s going to involve a lot of folks testing mass parsers on millions of articles. :) (See some notes from the 2011 Wikimedia Data Summit.)

More to come

That’s about it for now, but there’ll be plenty more fun stuff to come from all those projects and others… I’ll see you all on the internets!

Freedom, compromise, and geek fights

I’ve seen a rash of complaints lately about some absolutist flame wars and trollfests in various parts of the free & open source software community, and it leaves me kind of sad when I see people whose work I respect jumping around and saying hurtful things to each other.

I understand, of course… us geeks tend to like absolutes. Absolutes are often very handy in an engineering context — this algorithm is more efficient with our data sets under these constraints; that algorithm is less efficient. This hard drive performs better for this server load; that one is worse. We unfortunately have a tendency to apply the same sort of arguments when we don’t have a clear-cut context… and there may be legitimately different answers for different people. Which programming language is best? (The one I’m most productive in!) Which mobile gadget is best? (The one that I would buy for my needs!) Which operating system is best? (The one I like to run my applications or tune to my preferences!) Which voting system is best? Which political system is best? Which religion is best?

We quickly fall into unwinnable circular arguments where the participants talk past each other. Not only are these unproductive; they can create very angry, adversarial communities that tend to drive away new members. Especially where participation is self-selected and involves both technical and ideological goals — like free software and Wikipedia communities — there’s a constant danger of ugly geekfights.

I’ll admit I’ve flamed my share of people who disagreed with me on the Internet — more so at 21 than at 31! — but I’ve always tried to keep myself in check by reminding myself of an incident in my youth…

When I was a young lad, I was raised in what is sometimes called a Post-Christian environment. As middle-class white Americans, we inherited some of the outside trappings of the old Christian civilization of medieval Europe, but we were never really religious. We celebrated Christmas and Easter,  assumed “Yahweh” when someone said “God” instead of asking “which god?”, and understood that the “Bible” is the default holy book, with one section where GOD HATES SHRIMP and another where JESUS LOVES YOU. But we only had a token prayer at dinner, and only went to churches as tourists or funeralgoers; the one time I got dragged to my grandparents’ regular Sunday services at a Lutheran church I found the whole thing incomprehensible. Bible stories sometimes got presented to me as cultural background, but no more so than other religious tales like the similarly-ancient Greco-Roman myths which nobody believes are literal truth.

As a 14-year-old or so, I assumed that this was the normal, natural way that everyone in our post-Englightenment science-based Western culture was raised. Someone who believed in any particular religion — so concluded my adolescent brain — must then be either ignorant or stupid. If they were ignorant, then surely explaining the true facts to them would make them give a quick facepalm and finally join the 18th century. If they didn’t get the explanation, then either my explanation wasn’t good enough (let’s try it again!) or they’re just stupid and it’s time to write them off entirely.

Eventually I started realizing that my assumptions didn’t actually hold. One day, a schoolyard discussion about science and philosophy (as only 9th-graders can philosophize… poorly!) resulted in a classmate declaring that “Darwin was a jerk!” for putting forth his theories on biological evolution. Yes, one of my honors-level classmates wasn’t just religious, he was a creationist. I knew he wasn’t an idiot — he was a bright kid who did great in math, science, literature, and history. I knew his parents weren’t idiots — they were smart, successful people. But this smart, successful family believed things I found to range from the odd to the silly to the downright insane.

I’ve never been convinced about religion — and definitely not creationism! — but that day I started to learn that believing things I find to be obviously wrong doesn’t make someone an unintelligent or malicious person, even if I can point to a heap of evidence that totally convinces me how wrong they are.

At best I could accuse him of being wrong and not having the same set of assumptions and values in his decision-making process that made the opposite conclusion so obvious to me. Given time, education, and a changing environment, he might change his mind, or he might not. But my arguments weren’t doing it, and weren’t going to do it, yet I couldn’t dismiss him entirely as an idiot.

I was instead going to have to just deal with someone being wrong.

This was probably the most important lesson I’ve ever learned. It’s hard, and I mean hard, to practice it, especially as a techie geek.

But it’s one of the foundations of our modern pluralistic democracies, and basically comes down to the social contract of “don’t oppress me, and I won’t oppress you”. My freedom to be an agnostic/atheist comes with the responsibility to tolerate Christians, Jews, Muslims, Buddhists, Hindus, etc… and even Creationists, to an extent. I’m willing to accept that compromise because they’re bound to it, too — it keeps “them” from ostracizing me as a heretic, burning me at the stake, stoning me to death, or just refusing to let me vote, own property, or run for public office just for being an agnostic/atheist, Christian, Jew, Muslim, Buddhist, Hindu, etc. We just have to work out a reasonable compromise — we teach the actual state of science in public-school science class, and it’s up to each religious group to explain to their children the specific ways, if any, that their religious worldview differs from centuries of evidence-based scientific research so that even the creationist kids still learn the cultural context of how our post-Enlightenment society works, even if they disagree with it.

So please… before you go flaming people for being traitors to the cause, or not getting it, or whatever… consider whether what you’re saying is actually going to add anything useful to the conversation, or if you’re just piling more noise on a never-ending geekfight. If we can avoid killing our neighbors over fundamental religious differences, we really ought to be able to live with someone else occasionally saying something nice about a product line you dislike.

The Awful Tooth: missing Wikimania

Let that be a lesson to all the aspiring young computer programmers out there: stay in school, and brush your teeth!

I’ll unfortunately be missing this year’s Wikimania and WikiSym conferences in Gdansk, Poland as I’m recovering from a tooth extraction. It seems to be going ok, but it’s got me totally wiped out — I can barely make it across San Francisco by bus, this ain’t time for me to hit the planes. :(

Those of you who’re also coming to OSCON in Portland later this month, I’ll see you there. The rest of you, I’ll catch ya on the internets!

The sad, sad tale

So when you’re a young man or lady, at some point you have to make a lot of Important Life Choices, such as what to do about your wisdom teeth. These molars are pretty far back in the mouth, and not hugely useful in actual chewing. Moreover, they’re more likely than other teeth to suffer from either bad impaction when they’re new (coming in at funny angles, or butting up against other teeth and screwing things up — they’re entering an already-full mouth) or bad decay later on (since they’re hard to reach they can be hard to clean, greatly increasing the chances of decay).

My teeth were coming in reasonably straight, so as a lad I made the decision to leave them. For many years this served me just fine, but SECRET TOOTH DECAY was my enemy, stealing into my jaw in the night to chip away at one of the ol’ wizzy teeth. A few weeks ago the decay crossed some limit and basically the side of the tooth fell out to reveal a gigantic cave system rivaling Carlsbad Caverns.

Other minor cavities were easily patched up by my local dentist, but this one was gonna need a removal. I was hoping I could push it back until after my packed June-July travel schedule, but it started acting up again last week when I was in Montreal for RecentChangesCamp and to coordinate the StatusNet 0.9.3 release.

Rather than wait and hope it didn’t crack, collapse, or get infected while zipping about Central Europe, I thought I’d better go ahead and get it taken care of while I was on the ground in SF for a few days. If I was lucky, I’d be recovered enough to pack myself up with some painkillers and still make it, and if not I’d have time for a fuller recovery before OSCON.

The actual procedure was quick and easy — local anesthetic does wonders, and I got over my fear of dental procedures as a kid (I find it quite interesting to sort of follow along, actually). Recovery though… well, let’s be honest. Recovering from a wisdom tooth removal is gonna lay you out a bit. This is pretty much a best case — upper jaw, not impacted, reasonably exposed, other teeth not affected. But between the pain, the mental fuzziness from the vicodin treating the pain, and the general tiredness from the body redirecting some of its efforts to healing a wound, I’m still pretty out of it a few days later. It’s particularly aggravating for a knowledge worker liker myself — the wound itself doesn’t prevent me from doing what I do, but the medicine means I just can’t concentrate enough to get much done either for work or fun! Grr!


The trading post: MacBook Air 1.86GHz/2GB/128GB

Hey there my San Francisco buddies, and farther-away buddies who might be willing to pay shipping!

It’s laptop shuffle time at the Vibber house… I’m replacing my MacBook Air as my mobile & webdev machine and am looking for a good home for it… For just US$1150, you can become this ultra-thin laptop’s sponsor. All it needs is a place to plug in and a good meal of electrons every day, and it’ll be your best travel buddy!

I’ve used the box for MediaWiki and StatusNet development, general web surfing, and a little light gaming. Memory and disk performance are a bit tight for a really hardcore workstation (I wouldn’t use it as a mobile video editing studio, that’s for sure!) but it’s perfect for mobile webdev/notes/surfing/skyping and beats the pants off any netbook I’ve tried.

This machine has been to such exotic locales as:

  • San Francisco!
  • Orlando!
  • Paris!
  • Montreal!
  • Los Angeles!
  • Seattle!
  • Berlin!

Purchased from Apple as a refurb in September 2009 with 1 year “like new” warranty — it’s still eligible for purchase of a 2-year AppleCare warranty extension, if that sort of thing floats your boat. Apple still lists this model (full specs) at the refurb price of $1349 that I paid; specs are about the same as the current $1499 base-model MacBook Air but with the 128GB SSD drive.

Machine shipped with Mac OS X 10.5 and a 10.6 install disc; I’ve wiped the drive and put on a fresh install of 10.6. Accessories included: 45W power brick, US 2-prong plug and 3-prong plug w/ extension cord; USB ethernet adapter. Note that VGA and DVI adapters are not included; like other current Apple models it has a native Mini DisplayPort connector and needs an adapter for pretty much any external monitor.

Why I’d recommend it: compared to a netbook, the Air is much more powerful and has a keyboard that won’t hurt your hands. Compared to an iPad, the Air actually can run arbitrary programs and be used for software development. Compared to other full-size laptops, it’s delightfully thin and light, which your shoulders and back will appreciate if you need to travel regularly or cart it to the office on public transit.

Why I’m replacing it: I’ve picked up a MacBook Pro 13″ (same form factor & screen size, but 1kg heavier) primarily for the huge increases in battery life in the last couple product generations. I prefer the lighter weight, but I have a lot of long-distance travel this year and a battery that can actually last me through a cross-country flight or a full day of conferencing is going to serve me better right now… I just have to be really hardcore about keeping extra crap out of my bag!

The good: thin, light, and beautiful! At just 3 pounds, this thing is a joy to carry around when traveling; it really does make a difference to my back. CPU/gfx performance are decent enough for light webdev and a little gaming.

The bad: SSD disk performance is relatively sluggish, which may be painful if you do a lot of compiling. Running heavy CPU for a while can lead to the machine slowing itself down to stay cool. Battery life is similar to the previous generation of MacBooks (theoretically 4-5 hours; I get 2-3 hours of real usage).

The annoying: 2GB RAM is adequate for most needs but cannot be upgraded; folks working with virtual machines will find this awkward. Single USB port can be overly confining when traveling, especially if you need to use the USB ethernet dongle at the same time as anything else. No built-in CD/DVD drive may be a problem for some uses (remote disc is supported if you have another Windows or Mac machine with a CD drive, but has limitations. External USB drives will work, but be warned that Apple’s $99 Air-branded external drive does not work with USB hubs — it must be plugged directly into the Air’s single USB port, leaving you unable to use a USB keyboard, mouse, hard drive, Ethernet adaptor, or iPod.)

If interested, drop me a line. If there’s no excitement it’ll end up on eBay.

One year

A year ago today, I got married to an awesome lady who loves and accepts me, who’s been my amazing partner through all the good times and bad in the last three years. Marti, you rock!