Systems and software
I’ve been a professional software developer since 2014, and a hobbyist for several years before that. This blog started as a way for me to share code snippets, and writing about my code has become a key part of how I learn and think about computers.
These entries cover the range of development work: from writing code to running it in production.
Sub-topics:
- AppleScript
- AWS
- Builds and CI
- CSS
- Docker
- Git
- Go
- HTML
- JavaScript
- Python
- Ruby
- Rust
- Scala
- Shell scripting
- SQLite
- Swift
- Tailscale

The Good, the Bad, and the Gutters
A step-by-step guide to a movie poster grid that uses CSS Grid, text-wrap balanced titles, and dynamic hover states.

Using vcrpy to test HTTP interactions in Python
How I record HTTP requests to get fast, reliable, and consistent tests, and the patterns I use in a production codebase.
3 articles
Creating Caddyfiles with Cog
Cog is a tool for doing in-place text generation for static files. It’s useful for generating repetitive config, like my web server redirects.
Create space-saving clones on macOS with Python
You can shell out to
cp -cusingsubprocess, or you can make aclonefile()syscall using thectypeslibrary.Handling JSON objects with duplicate names in Python
It’s possible, although uncommon, for a JSON object to contain the same name multiple times. Here are some ways to handle that in Python.
5 notes
How to expire a Tailscale node key faster than the min expiry
Use
tailscale debug set-expire --in=<duration>.Use
systemctl is-activeto determine if a service is runningRemoving a self-hosted runner from GitHub Actions
My Git config
How I set up Git on a new computer.
Python f-strings cheat sheet
Some Python f-string examples that I find helpful.