Sitemap
This is a list of more-or-less every page on the site, for quick and easy navigation.
Primary pages
- About
- Contact me
- Posts
- 3D Prints
- Projects
- Sitemap ← you are here
- Snippets
- Things I use
Feeds
Keep up-to-date with things I write by subscribing to one of these feeds in an RSS reader.
Blog posts
Everything I've written on the site. See the posts page for a nicer overview.
- Avoiding the Consequences of Dumb Laws with Tailscale
- Further Adventures in Music Organisation
- Blogging and the Imaginary Quality Bar
- 10 Weeks with an Apple Watch 10
- Making a font of my handwriting
- Fixing a loud PSU fan without dying
- Escaping Spotify the hard way
- How tech companies failed to build the Star Trek computer
- Finding an awkward bug with Claude Code
- How I use Tailscale
- The Ethics of LLMs
- If all you have is a hammer…
- An app can be a ready meal
- Building a new Computer
- Coming around on LLMs
- Home Automation Without the Megacorps
- The Curse of Knowledge and Blogging
- Building a travel toolkit
- Simple backups with Restic and Hetzner Cloud
- How I Get Things Done
- Further adventures in 3D printing
- A year of boardgames
- HTTP/2 and TLS Server Name Indication
- Project log: Filament weight display
- Adventures in 3D printing
- Upgrading the RAM in a Dell G15 laptop
- Generating infinite avatars
- Docker reverse proxying, redux
- Adventures in IPv6 routing in Docker
- Reproducible Builds and Docker Images
- Artisanal Docker images
- On the utility of user stories
- Reverse engineering an Arctis Pro Wireless Headset
- Apple, Google and aligned incentives
- How to break everything by fuzz testing
- An introduction to containers
- Obfuscating Kotlin code with ProGuard
- Debugging beyond the debugger
- Understanding Docker volume mounts
- Over-the-top optimisations with Nim
- DNS-over-TLS on the EdgeRouter Lite
- A look at the DNS habits of the top 100k websites
- Android testing with Espresso and Spoon
- Shoring up SSHd configuration
- Creating an offline GnuPG master key with Yubikey-stored subkeys
- Why you should be using HTTPS
- Automatic reverse proxying with Docker and nginx
- Monitoring power draw with WeMo Insight Switches
- Reverse engineering the Sense API
Snippets
Small code snippets or how-to guides for things I use. See the main snippets page.
- Android ➔ Enable SQLite logging
- CSS ➔ Dark mode selector
- CSS ➔ Lighten or darken colours
- CSS ➔ Text area resizing
- Docker ➔ Volumes in a rootless container
- Eleventy ➔ Deploy assets in page bundles
- Eleventy ➔ Render templates in shortcodes and filters
- Eleventy ➔ Use ES modules
- Firefox ➔ Register domains as secure contexts
- Firefox ➔ Stop searching for single word domains
- Firefox ➔ Stop using certain local fonts
- Git ➔ Ignore revisions in git-blame
- Git ➔ List creation dates of tags
- Git ➔ Stop LFS requiring multiple security key touches
- Git ➔ Tidy up merged branches
- Go ➔ Alternative YAML representations
- Go ➔ Check if a string is an integer
- Go ➔ Download a file
- Go ➔ Extracting a Zip file
- Go ➔ Generate a random string
- Go ➔ Gracefully stopping HTTP server
- Go ➔ Handling interrupts
- Go ➔ Listing files in a directory
- Go ➔ Listing files recursively
- Go ➔ Modify path of a URL
- Go ➔ Read line-by-line
- Go ➔ Reverse part of a slice
- Go ➔ Tests with golden data
- Go ➔ Use nested ServeMux with path stripping
- GTK ➔ Unicode input
- HTML ➔ Provide dark and light mode versions of images
- HTTP ➔ Redirect types
- IDEA ➔ Changing SQL scope
- Java ➔ Class file versions
- JavaScript ➔ Array intersection
- JavaScript ➔ Load JSON
- JavaScript ➔ Remove all child elements
- JavaScript ➔ Run code when document is loaded
- Jetpack Compose ➔ Mix Composables and Views
- Jetpack Compose ➔ Override composition locals
- Nginx ➔ Allow CORS requests from certain origins
- Nginx ➔ Log only partial IP addresses
- Nginx ➔ Redirect to canonical domain
- Nginx ➔ Serve WebP images
- Nmap ➔ Ping all hosts in a range
- Nmap ➔ Scan all TCP ports
- Pacman ➔ Overwriting conflicting files
- PDFTK ➔ Splitting pages out of a PDF
- PostgreSQL ➔ Adding a new user and database
- Systemd ➔ Check calendar event formats
- Systemd ➔ Find unit that owns a PID
- Systemd ➔ Listing available targets
- Systemd ➔ Passing env vars to a service
- Systemd ➔ Running a service on a cron-like timer
- Thunderbird ➔ Remove signature delimiter
- TLS ➔ Alert codes
- X ➔ Get symbolic names for keycodes
- XXD ➔ Convert hex to binary
- zsh ➔ Split data on newlines
Poems
I occasionally write poems. Note that I didn't say "good poems".