alexwlchan
The file(1) command can read SQLite databases
My randline project is tested by Crater
Dreaming of a ten-year computer
Drawing an image with Liquid Glass using SwiftUI Previews
Gumdrop, a silly app for messing with my webcam
Road signs in the Soviet union don’t have circular heads
Setting up golink in my personal tailnet
Create a file atomically in Go
Get a map of IP addresses for devices in my tailnet
The SQLite command line shell will count your unclosed parentheses
Use SQL triggers to prevent overwriting a value
Testing date formatting with date-fns-tz and different timezones
The bare minimum for syncing Git repos
The “strangler” pattern is named after a tree, not an act of violence
Place with the same name, but different etymology
Use systemctl is-active to determine if a service is running
Creating Caddyfiles with Cog
Removing a self-hosted runner from GitHub Actions
My Git config
Swapping gems for tiles
Who is Bufo the frog?
Python f-strings cheat sheet
Parody posters for made-up movies
The Good, the Bad, and the Gutters
Using perceptual distance to create better headers
The caret anchor (^) matches differently in Python and Ruby
The passwords I actually memorise
Where I store my multi-factor recovery codes
Quick-and-dirty print debugging in Go
My favourite books from 2025
Ignore AI upscaled YouTube videos with yt-dlp
Drawing Truchet tiles in SVG
Adding a README to S3 buckets with Terraform
The palm tree that lead to Palmyra
Meeting my younger self
Hard problems in social media archiving
The Internet forgets, but I don’t want to
When square pixels aren’t square
Collapsing whitespace in a Liquid template
The LastModified date of an S3 multipart upload is when the upload started, not when it finished
Can you take an ox to Oxford?
Cleaning up messy dates in JSON
Detecting AV1-encoded videos with Python
Python has a builtin tool to do rot13 (among other things)
Why can’t my iPhone play that video?
How to find the Pygments token type for a short name
Doing my own syntax highlighting (finally)
Remove the microsecond precision from a datetime in Python
Look at the __annotations__ to learn about the definition of a TypedDict
Don’t show Dock icons from apps on another device
Creating a personal wrapper around yt-dlp
Get the avatar URL for an Instagram page
Opening all the files that have been modified in a Git branch
Linking to text fragments with a bookmarklet
Resizing images in Rust, now with EXIF orientation support
Using vcrpy to test HTTP interactions in Python
Create space-saving clones on macOS with Python
Slipstitch, Queer Craft, and community spaces
Today was my last day at the Flickr Foundation
Minifying HTML on my Jekyll website
Moving my Glitch apps to my own web server
Recreating the bird animation from Swift.org
My favourite websites from my bookmark collection
What I learnt about making websites by reading two thousand web pages
Building a personal archive of the web, the slow way
Creating a static website for all my bookmarks
Handling JSON objects with duplicate names in Python
A faster way to copy SQLite databases between computers
A flash of light in the darkness
Beyond None: actionable error messages for keyring.get_password()
Localising the <time> with JavaScript
Always running
What I’ve Learned by Building to Last
Whose code am I running in GitHub Actions?
Fast and random sampling in SQLite
We all lose when art is anonymised
An unexpected lesson in CSS stacking contexts