Open Source Is Just Plumbing Now
Nobody thinks about plumbing until something comes up through the floor. Open source is plumbing now, and most of it is maintained by one guy in Nebraska.
I write about the things that annoy me until I figure them out, which is basically all of software engineering. Go, Ruby, FreeBSD, infrastructure, API design, the occasional JavaScript when I can't avoid it. If you're here for hot takes on naming conventions and operating systems that most people forgot exist, you're in the right place. If you're here by accident, honestly, stick around. You've already made worse decisions today.
Nobody thinks about plumbing until something comes up through the floor. Open source is plumbing now, and most of it is maintained by one guy in Nebraska.
A grown man loses his mind over a three-letter word in a function name. Turns out he has a point, but still.
A chatbot wearing the Prime Minister’s face slides into your DMs. The marketing funnel is automated, the GDPR violations are artisanal.
Cloudflare’s security guard got a dodgy guest list and decided to turn everyone away. Half the Internet watched from the car park.
One billionaire bought a platform and everyone suddenly remembered they don’t own anything online. A look at protocols, portability, and the quiet work of building something better.
Shipping a 4000-pixel hero image to a phone on 3G is not a personality trait. Here's a Rails helper that uses the picture element like a grown-up.
FreeBSD doesn't ship Python. Ansible needs Python. One environment variable stops the whole thing from hanging forever.
Life is too short to type git@github.com: like a caveman. A few lines in .gitconfig and you're cloning with gh:user/repo.
Heartbleed happened because OpenSSL had its own custom allocator that hid buffer overflows from every tool designed to catch them. Here's how to rip it out.
Postgres is smarter than your migration and it's not going to pretend otherwise. Add the column, backfill, then add the constraint.
Every existing tutorial was either broken or ignoring the conventions both frameworks ship with. So I built one from scratch.
Out of the box, npm behaves like a toddler with a megaphone. A few lines in .npmrc make it twice as fast and half as annoying.
Your database credentials, API keys, and deployment scripts are world-readable by default. Three digits in one config file fix it. You're welcome.
The W3C validator requires the internet, which is exactly the thing that isn't working when you need it. So we put a validator in a container.
Everyone names their callbacks "cb" and then spends forty minutes debugging why the wrong one fires. Two words fix it. You're looking for "next."
They rewrote the serializer gem and broke how you test it. Here's how to wire up adapters so your specs actually test what your API sends.
I wanted to load my Rails app on an iPad without looking up my IP address every five minutes. So I made mDNS do it for me.
Your Capybara test fails, the browser closes, and all you've got is "expected true, got false." Loading Ember Inspector into Selenium changes everything.
Something breaks in an Ember promise and you get... nothing. A blank page, a clean console, and a slow descent into madness. Four lines fix it.
Apple released Yosemite and broke the compiler. Installing a JavaScript runtime now required downloading an entire IDE. A love letter to 2014.