alexwlchan
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
Can you take an ox to Oxford?
Cleaning up messy dates in JSON
Detecting AV1-encoded videos with Python
Why can’t my iPhone play that video?
Doing my own syntax highlighting (finally)
Creating a personal wrapper around yt-dlp
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