Plans, not posts
2014.120Leaving the salary to try building something -- a platform where the unit isn't opinion or memory, but a plan.
Leaving the salary to try building something -- a platform where the unit isn't opinion or memory, but a plan.
Adrian Hands contributed a GNOME patch using Morse code typed with his knees. His commit message was three words and an exclamation.
A text-poster on a meeting-room wall, doing more work than a poster should.
Running a custom Node.js blog engine on a Raspberry Pi at home -- from a 45-day wait and a dead board to DuckDNS, ISP port blocking, and the first external request.
A birthday, a public oath, and one line I want to keep.
Two days after the speech. I went looking for the numbers.
He carried a list. That's the part that broke me.
Route handlers don't need to be nested callbacks -- Express middleware chains turn them into a flat, readable sequence.
Phabricator changed what code review means to me. A note from a few months in.
A bash deploy script and a Node.js process monitor -- SSH, pull, touch a file, the cluster reloads. No CI, no dashboard. The terminal.
A composable predicate function for sorting arrays of objects by multiple fields -- with reverse, primers, and short-circuit evaluation.
Upstart, clustering, zero-downtime deploys, heartbeat monitoring, and an embedded REPL -- what it takes to keep Node.js running in production in 2013.
Using bind mounts to move MySQL data, config, and logs to an XFS volume without changing a single MySQL setting.
Our team's Node.js conventions -- error-first callbacks, early returns, callback alignment, and the formatting rules we drilled into every new developer.
Commit history isn't a log of what happened -- it's a narrative you author. Rebase, atomic commits, and the discipline of writing history for the person reading it six months from now.
Some days you build the wall. Some days you notice you're in it.
Ditching WordPress for a custom Node.js blog engine powered by libgit2 -- git as the content store, markdown as the writing format, npm for everything else.
Replacing an e-commerce frontend without turning off the old one -- carving over layer by layer while the store takes orders.
A basement, a barcode scanner, and the moment the dispatch desk stopped waiting.
In-memory rate limiting as Express middleware. No Redis, no external service. Fifty lines, one file.