Archive for the ‘Uncategorized’ Category
Creme Brulase
Metrix Create:Space, located at Roy and Broadway in Capitol Hill (Seattle), has a laser cutter. Mix culinary inclination with said laser cutter, plus a dash of vector art, and voila:

The best part: it’s edible.
The Plan
I left Microsoft two weeks ago. Despite quitting the same day the New York Times ran a very damning op-ed, I left for personal reasons. A lot of great people work at Microsoft, and whereas most “software companies” of Microsoft’s size are really “software distribution companies”, Microsoft still writes most of the code they sell themselves. Additionally, Windows wouldn’t have a prayer of running as smoothly as it does on such a vast array of hardware, was it not for a world-class test organization to ensure software quality.
I’ve wanted to do a startup for a long time, and I figure now’s as good a time as any. Currently, I’m working toward freelancing 20-30 hours/week, and spending the rest of my time developing products with a world-class team. This lifestyle is a real change from the big-company 9-5, but I absolutely love it. I’ll post some notes as things progress.
CP: The Board
My first circuit board, sent off to BatchPCB for fabrication today! Thanks again to BatchPCB and Sparkfun for the very helpful writeups on producting PCBs, and thanks to Cadsoft for producing Eagle for PCB layout. Also, props to Instructables user westfw for the great instructable entitled, “Turn your EAGLE schematic into a PCB”.

CP: We’re halfway there
On December 14, the gauntlet was thrown:
I challenge a team of you to design a computing device that enables people with mild to moderate cerebral palsy to contribute to society in meaningful and productive ways.
The challenge came from the Spastics Centre Kanpur. Grant money was offered, and The Nerd Herd—my high school friends, and me—went to work. Mike, Kurt, Mark, Jeff and I have been working on the project since December, and we have some results to show.
Cerebral Palsy
The project began with a trip to the library. Before I started any design work, I needed to understand the symptoms of the condition. I spent a few hours at the library with Cerebral Palsy: A Complete Guide for Caregiving, which I checked out and brought home. A few facts about cerebral palsy:
- CP is a congenital disorder (it is present at birth). In Freud’s time, CP was believed to be caused by asphyxiation during birth, but modern science has attributed the condition to fetal blood clots. Fetal trauma is sometimes responsible for the clots, but many cases have no discernible cause. Lifestyle factors are not a major cause of CP.
- Incidence: approximately 2 cases per 5000 births (0.4%). Prevalence does not vary by nation, but has risen slightly in all locations during the past 20-30 years.
- CP does not affect cognitive function. However (possibly due to a shared root cause), the condition is highly correlated with other mental disorders which, unfortunately, do impair cognitive function.
- Symptoms vary widely, but 70-80% of cases are spastic. Spastic CP is not treatable. Athetoid CP is less common, but better therapeutic methods have been developed to treat it. Generally, the disease causes impairment of motor function in one side of the body (hemiplegic cases), or in both legs. Some cases are quadriplegic, but they are less common.
Owing to the diversity of symptoms, we identified reconfigurability as an important factor. Also, we tried hard to keep cost down, to accommodate the budget of a person living in India. Finally, to ensure accessibility to a non-technical audience, we strove for ease of configuration. We chose not to sacrifice functionality for ease of use, believing that over time, a person would prefer a more functional device, even if it required a bit more upfront training (we might reconsider this decision later.)
The Design
After some brainstorming, we settled on a modified version of Objective Development’s HIDKeys. The HIDKeys codebase includes V-USB, a software-only USB stack for Atmel’s AVR line of processors. When plugged into a USB port, the device presents a standard USB human interface device to the operating system, requiring no drivers or configuration.
Using HIDKeys, we plan to attach a group of switches to the user’s body. We’re currently exploring novel input strategies including chording- and hotkey-based approaches; I’ll post the details when they become available.
Full code for the project will be made available as soon as we finish it (per the V-USB license terms). Right now, I’m working on getting a PCB cut.
Apple: a retail company
“Getting real is a system that’s worked terrifically for us. That said, the ideas in this book won’t apply to every project under the sun. If you are building a weapons system, a nuclear control plant, a banking system for millions of customers, or some other life/finance-critical system, you’re going to balk at some of our laissez-faire attitude. Go ahead and take additional precautions.” – Getting Real, a book by 37signals
I’d been having some trouble with my second-generation iPod shuffle, so I took a trip to the Apple store. Visiting the store reminded me again how strongly the culture of an engineering organization shapes the way it designs and sells products.
Steve McConnell’s “Secrets of World-Class Software Organizations”
“So my view of world-class software doesn’t have all that much to do, well in some sense, doesn’t have as much to do with software, as you might think. It has to do with company success; do the software development practices support the business directives? How low is the resistance between the software organization, and the business needs of the organization?”
Steve McConnell (Code Complete, Rapid Development, Software Estimation) spoke Thursday night at Bellevue College. Steve operates a consulting company, Construx, which advises clients around the world on how to develop software. Steve’s talk, entitled “Secrets of World-Class Software Organizations”, presented some distilled thinking on what makes world-class software organizations great.
Art, meet science (and vice versa)
“Aesthetics” is the study of beauty. The connotation is art: painting, sculpture, dance, etc.
Science and engineering has aesthetics, too, but it hides behind the term “elegance”, not “beauty”. What could possibly be more elegant than Euler’s identity, that single equation relating e, i, and π?

Recently, I’ve seen more acceptance of the idea that science can partner with art to create very beautiful things. Electronic music creators — “artists”, use sophisticated digital hardware to create beautiful music. Brooklyn-based NYC Resistor is using LEDs and microcontrollers to create stunning visual experiences. The MakerBot allows sharing and replication of physical artifacts, the same way open-source authors share source code.
Walking on Broadway last Sunday, I came across the above display. Using laser projectors aimed at a grid of semi-reflective rods, artist Don Corson projected the laser beam into three dimensions. The end result looked SO COOL.
Taking the Gloves Off
At Microsoft, there are three major engineering disciplines: development, test, and program management. Program managers define what the product should do by authoring scenarios and specifications, developers write the code, and testers create automated test frameworks to ensure quality.
There’s a fun create tension between the disciplines. The stereotypical tester is an obsessive-compulsive geek, who always worries about what could go wrong. To a tester, a program manager is a pie-in-the-sky idealist with no clue what’s going on, but program managers and testers agree that the product would be infinitely better, if only the developers weren’t so, ahem, incompetent.
Some teams adhere strictly to disciplinary roles, (“I’m a tester, I don’t make those kinds of decisions”), while others are more fluid — everyone contributes as best they can, to get the work done. I’m a big believer in the second model, where everyone contributes what they can. Developers are not even remotely interchangeable, Joel Spolsky insists, and I think he’s right. We’re all good at different things, so it makes a lot of sense to parcel the work out based on who’s most fit to handle it.
I had a good opportunity to bridge a disciplinary boundary this week. Shi, one of our developers, is facing a big backlog of bugs, and my manager has been busy trying to get our internal partners onboard with a big project we’re doing. Faced with the choice of (a) working on some bugs or (b) doing nothing, I decided to take the gloves off and hack some C.
A few years back, Rob Mensching, one of the old hats, developed a tool called ESD Box (short for “Electronic Software Distribtion”), which we use to create self-extracting binaries. ”Boxtool”, part of ESD Box, consumes an XML manifest describing how the self-extractor should work (which files it should contain, what it should launch post-extraction, etc.) Boxtool creates a cabinet containing all the files we’re distributing, and then glues the cabinet onto the end of a boilerplate binary (“boxstub”) to create the redistributable package.
ESD Box works well, except for one annoying “feature”: it extracts all its files into the working directory, not a temporary folder, as is customary with most self-extractors.
Over the past two days, I waded through a few hundred lines of gory C code, extending ESD Box to allow selective extraction into a temporary folder. In the process, I learned a lot about the Windows dialect of C (LPCWSTR, DWORD, lstrcmpW(), etc.), but moreso, I was reminded of how spoiled we are, up in .NET/Java/Python/Ruby managed-land. Something as simple as copying a string (copying a string!) requires several function calls, because as we all know, strings are not a first-class primitive in C. The entire experience felt like visiting an old friend, as the memories of nights spent hacking Linux Kernel code rushed back: string allocation by double-indirection, sizeof(), null dereference checks, the -> operator…
There’s something romantic about programming on the metal. But I feel like it would get old, if I did it every day.
Facebook Seattle Engineering Roadshow
I think another fun story about scalability is our usernames launch…So, this was a product launch like many at Facebook, that was quite controversial, as we talked about doing it. So we decided that, you know, kind of a lot of sites allow you to have a short name, and a lot of people have their association with Facebook as their personal identity, so it seems to make sense that instead of being facebook.com/uid, you know, blah blah blah, I could actually have a nice, easy-to-read username. So, this was all well and good, except that when most people do this, they have zero million users — and at the time, we had a little over 200 million users. So the problem was, how exactly do you get 200 million users to pick a username, and do this in a fair, and kind of balanced manner? So pretty much every way of allocating a scarce resource was debated, standard auctions like eBay, VCG auctions, for you auction nerds out there, which give you optimal results, but are confusing as hell to explain to someone what’s going on — we actually user-tested that one and people had no idea what they were doing — so, it’s like, telling them that it was the fairest way to allocate wasn’t going to make it any better — so we finally said, look, let’s just do this the simple way, everyone’s used to standing in line, first-come, first-served.
The problem with standing in line first-come first served, is that it basically means we’re asking 200 million people to show up at our website at exactly the same second on one evening. When that happens, most people call that something like a denial of service attack. For us, it’s like, a product launch. — Mike Schroepfer
Last Wednesday, Facebook brought their Seattle Engineering Roadshow to EMP. The event featured a presentation by Mike Schroepfer, Facebook’s Vice President of Engineering, on the challenges of scale.
Trick or Treat!

I got a knock on my door at work last week from some special visitors. I didn’t have any treats for them, so I made sure to watch out for tricks.
