a glob of nerd­ish­ness

powered by work over time.

My tradition has been to prepare taxes within Apple's Numbers app, uploading the template I use here. The spreadsheet started with automatically updating tables for the main Federal 1040, and has gradually grown to include some helpers for Schedule A, Schedule C and Schedule E.

I've hit a new low for uploading late this year, sorry; I didn't finish up my own return until yesterday afternoon. So if you still need this, I hope you filed an extension ;-)

My GitHub account has been busy lately, thanks to not just one but two great open source–supporting clients!

Storage drivers for cutting-edge hardware

Top prize goes to Technical Machine, whose ambitious Tessel hardware platform is about to be released! Thanks to their sponsorship, the following modules have been published:

fatfs — you read the FAT spec, and it looks pretty simple, and it is. But turns out wrapping some linked lists, fussily packed bitfields, and some rules for mapping "most any Unicode" to "11 bytes of ASCII"— taking those primitives and building something that's maintainable and acts just like an asynchronous JavaScript interface to POSIX file APIs (and doesn't make mistakes!) is a bit of a project.

tessel-sdcard — this was also no small feat, the SD Card SPI protocol is pretty reasonable and also well documented, but working through all the nuances of card initialization and reliable data transfers wasn't trivial when all the other "working examples" were blocking C libraries that didn't have to worry much about concurrent SPI bus traffic.

fifolock — speaking of concurrency, at one point I implemented a small/quick "serial queue" function to the SD Card library to help keep card communications sane. Then that needed a sort of "automatic transactions" wrapper so the code using the queue would stay clean. There it sat, until I also needed the same thing in fatfs, too. Things got a little out of hand and I ended up putting in some of my own time to polish it up to my personal liking — while keeping it at exactly 42 lines of code [well, including the trailing newline. why am I even explaining/admitting this…?] — and the logic is now published as its own module.

struct-fu — strangely, this one might be my favorite? There were already a handful of ctypes/struct handling/buffer parsing libraries in the npmjs repository, but in a previous project I had started dabbling with a clean and promising "C-like struct declaration" interface design. More intentionally than "fifolock", I invested some of my own time into this too, but it grew alongside the needs of the other libraries and is serving them well. I'm happy with how it turned out; using "struct-fu" for buffer parsing gives me the same feeling I get when using d3 for DOM manipulation or fermata for HTTP — exposing plenty of low-level control, yet not burdening its user with many fussy responsibilities.

parsetition — on the other end of the spectrum, this is at the moment the weakest link, the least complete and mentioned with the least excitement. Basically, there are a variety of ways to partition a drive to make it host a FAT partition. Handling just a cursory subset needed to support the formatted "starter card" that Tessel ships with, right now "parsetition" is mostly an architectural placeholder written in the wee hours of the morning to bridge the gap between the "sdcard" and "fatfs" modules.

The Tessel platform is a big deal, and has an incredible team behind it. Due to my early work porting node-nrf to their platform, I've gotten to watch their hardware, software, tools and documentation get steadily more refined. I'm not sure people realize just how much the Technical Machine team has accomplished in the last year. This isn't a cheaper Arduino, or a smaller Arduino, or an Arduino-with-some-extra-shield-built-in. It's not an Arduino at all, but I don't think it will suffer from being "too different" or too vendor tied either — it builds on, participates in, and contributes to the most interesting and valuable things people are doing with node.js. I'm grateful I could help out with a relatively small (seriously!) piece of their platform…

Mobile demos for cutting-edge storage

A hearty honorable mention to Couchbase as well! I had the privilege to make a cameo appearance at HTML5 DevConf — remotely, using a demo app I wrote for both iOS and Android! CouchTalk shows how you might enable "local islands of connectivity" that still share data with each other in near-realtime through a remote server. It was a treat to take their team's "push-to-talk web chat room" demo and run with it, updating the browser logic to work with Couchbase Lite and filling out the mobile interfaces to make the Sync Gateway features a bit more visible.

We kept the demo simple, but it's clear that Couchbase has solved a lot of the problems I'd been having with actually deploying related databases in an offline-friendly multiuser architecture. [That's quite another blog post…] I hope the demo inspires others to try out Sync Gateway and Couchbase Lite (née TouchDB) for their mobile apps — I know it's gotten me interested in that space again. It was not only a fun project, but I'm glad they found a way to get me to finally try out their storage stack in earnest ;-)

One more thing…

In the midst of all this, I also deployed a major update to the eReader/workbook webapp that's been going through classroom trials (closed source, but lovingly handcrafted with HTML5/D3/CouchDB/node.js etc.) and somehow managed to sneak in a last-minute trip to the Bay Area so as not to miss Edward Tufte, Bret Victor, Mike Bostock and Jonathan Corum all in the same room! It's been kind of frantic, and as a result I've been about a week later getting to each of the projects' "wrap up" stage than I had hoped to on my side.

Because meanwhile, my wife has been working on an even more significant deliverable, which I might add, is also running about a week behind schedule…

By graciously patient reminder from the organizers, I'm posting my slides from CouchConf in Vancouver last year.

My talk was called Building Webapps with CouchDB [pdf] and was basically a wonderful privilege to show off some of the variously handy/silly/ambitious Couchapps I've built through the years. The video of my talk was posted in a much more timely fashion and already has an encouraging (or disturbing? ;-) number of views. There were a lot of great talks you can watch all the videos for; Joan Touzet had a great "FAQ"-style talk that should probably have a prominent place in the docs and Jason Johnson had a really fun talk about storage hardware, just to name two.

And, while I'm posting under this title, a few years ago I also gave a talk at two Couchbase "World Tour" events (in Portland and Seattle) called Scaling Geodata with MapReduce [pdf] which gives more details on how I pulled off some even crazier location handling stuff with LocLog than mentioned in my Vancouver talk. (I don't think videos were posted from that, though IIRC someone had a camera rolling…will update if I find out otherwise.)

In that vein, I gave a talk late last year on "Building apps with D3.js" at CascadiaJS 2013. Personally, I um can't uuuuuuh stand um uhh to watch um, myself uh talk. But I did have several people tell me the presentation was nonetheless encouraging/inspiring (thanks!) so I guess I should promote it a bit…. You can find the video here and I've also posted my slides (pdf).

CascadiaJS (and CouchConf the day before) was great, by the way. As I nervously suspected, I had to give my talk to an audience that included the very people who are busy making frameworks actually intended for building entire web apps. But once that was over I could sit back and enjoy a fantastic time with friends old and new.

You might remember that last year I also started writing a book on D3.js, but couldn't afford to finish it. Well, I recently got official notice from the publisher that they have voided the contract! So that work is now mine to do with as I please. Since I still don't have enough time to make a proper job of it, I'm simply sharing what I had started when I stopped.

Ironically [or perhaps unsurprisingly?] enough, I've recently been asked to do a technical review on someone else's D3.js book. It is indeed a lot easier to critique than to create!

Anyway, last year was a big year for D3.js adoption. It will be interesting to see what comes in 2014 out of Mike, et al's great little library.