RSS.Social

alexwlchan

follow: @[email protected]

Posts

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