The shared language of a software project is not English or Python but it is the common understanding of what its concepts mean, where the boundaries are, which invariants matter, who owns what, and why the system has the shape it does. This language is rarely written down in one place. It lives partly in documentation and code, but also in code review, conversations, arguments, and the…
Doing radio is the thing I miss the most from my djing days . In an effort to recapture some of that fun I recently built a small streaming site where me and a few friends occasionally dj for each other, sending shout outs, taking requests and spinning tunes. It runs on a small Hetzner box with an Icecast server . The stream is audio only, no ads, no cookie banners, simple but fun. 1
I’m building In the Long Run where runners do virtual runs on famous routes around the world. The app tallies up your Strava mileage and plots your total distance as progress against country- or continent-spanning routes. The intention is to provide long-term inspiration and motivation; life is a marathon, not a sprint. You can have a bad month or season but still make progress on your…
A while back a colleague told me about the --fixup option for git commit and its cousin --autosquash . I’ve long been a proponent of squashing and fixing up commits; it means you can commit work earlier which in turn means less chance of data loss as well as smaller diffs being easier to reason about. With the fixup and autosquash options you do the re-organising work up front and save…

 When you’re in the throes of an incident that involves an unexpected interaction, this architecture that was built for managing complexity now works against you. Because you’ve built an analysis solution but you’re now faced with a synthesis problem. You need to understand how the pieces all normally fit together to function in order to determine what is going wrong with the system right…
I just added a couple of new features to SQLYac , my sql cli tool. SQLYac brings structure to your sql files and queries, making them version controlled and shareable and enables variables for reuse and readability. It gives you the power and flexibility of the terminal and the unix philosophy while avoiding lock in with expensive and proprietary gui tools. See my previous blog post for more…
I switched jobs recently and went from working mostly in a self hosted Gitlab instance to Github. Going beyond my mostly personal, isolated repos in Github really made me miss GitLab’s command palette for navigating within organizations with multiple repos. But it turns out Github has something similar, , hidden behind a feature preview toggle. Here’s how to enable it: 
 
…
Recently I’ve been parsing a bunch of open source software release data. Semantic versioning seemed to be the most common versioning schema, it is encouraged by many package managers and a de facto standard in the space. Here is the official summary, in the unlikely case that you are not familiar with it: 
 
 Given a version number MAJOR.MINOR.PATCH, increment the: 
 
 MAJOR…
It is a common ritual, grepping through http handlers or spelunking in a project’s Slack when you just want to know how to hit the auth endpoint. But it doesn’t have to be like this! If your service or app exposes or consumes an http api it should have .http file(s) that show how to make requests to it. Simple, executable, version controlled request documentation that improves…
Lately I’ve been trying to build my shell keyboard shortcut skills. I have a few commands etched into muscle memory (like ctrl + l , ctrl + a , ctrl + e and ctrl + w ) but I’d like to expand my repertoire. Imagine the productivity I can unlock and the nerds I could impress! 
 I found a couple of good sources , but I just had them in an open browser tab forever, scanning the…
A few years back I did a bit of dance music related data visualization over at Lazily Evaluated . My favourite was an analysis of clubs and their lineups using Resident Advisor / RA data, I called it Clubster Analysis . I always wanted to dig into the technical aspects of gathering the data, analyzing it and building the charts and graphs to tell a story and give people insight. With this blog I…
For the last couple of months I’ve been trying out the Zed editor. So far I’m quite happy with it. It’s open source, really fast, flexible, has good ai support, a helpful community and a growing ecosystem of extensions. 
 I’d been a VS Code user for the last couple of years but it often felt sluggish to me. So the initial selling point of Zed, was its speed (and it is…
SQLYac is a tool I built to help me manage and structure sql files and run the queries within them. For many projects I’ve worked on I find it helpful to maintain a list of frequently used sql queries (typically in queries.sql or the like), for debugging, running administrative tasks, or testing purposes. I find this improves developer experience and helps document the structure of a…
Mockoon is a great tool for mocking http servers or apis. It’s open source, has a great ui that gets you up and running fast and a powerful feature set that will let you use and deploy your mocks in many ways. 
 Starting a mock is easy, you can import an Open Api spec or build routes by hand. For your responses you can use Faker.js helpers to get realistic looking but changing data. With…
If you are slinging JWTs around you’ll often want to inspect the claims contained within to check expiry, user identity or whatever else. 
 I made a little alias to decode and pretty print the header and claims, as well as printing the exp and iat values as dates: 
 alias jwt = 'jq -R 'split(\'.\') | .[0], .[1] | @base64d | fromjson | \
 (.. | select(has(\'exp\') or…