I’ve been cleaning up some messy data, and it includes timestamps written by a variety of humans and machines, which don’t use a consistent format.
I wrote a Python script to help me clean things up.
I’ve been cleaning up some messy data, and it includes timestamps written by a variety of humans and machines, which don’t use a consistent format.
I wrote a Python script to help me clean things up.
I’ve been cleaning up some messy data, and it includes timestamps written by a variety of humans and machines, which don’t use a consistent format.
I wrote a Python script to help me clean things up.
I’ve been cleaning up some messy data, and it includes timestamps written by a variety of humans and machines, which don’t use a consistent format.
I wrote a Python script to help me clean things up.
I wrote a Python test to find videos that are encoded with AV1, so I can convert them to a codec my iPhone can play.
I wrote a Python test to find videos that are encoded with AV1, so I can convert them to a codec my iPhone can play.
I wrote about a recent issue playing a video on my iPhone, the AV1 codec that caused the problem, and some web APIs I learnt while debugging.
I wrote about a recent issue playing a video on my iPhone, the AV1 codec that caused the problem, and some web APIs I learnt while debugging.
I’ve redesigned the syntax highlighting on my blog to use a smaller colour palette, so I wrote a bit about what I’ve changed, how it works, and why I think it’s better.
I’ve redesigned the syntax highlighting on my blog to use a smaller colour palette, so I wrote a bit about what I’ve changed, how it works, and why I think it’s better.
I’ve written a new script which calls yt-dlp with my preferred options, so I don’t have to copy my configuration across different projects.
I’ve written a new script which calls yt-dlp with my preferred options, so I don’t have to copy my configuration across different projects.
(Unless I’m misremembering, in which case sorry!)
(Unless I’m misremembering, in which case sorry!)
I’ve written a bookmarklet that lets me link to specific text on a web page.
I’ve written a bookmarklet that lets me link to specific text on a web page.
Any chance you remember what I’m talking about?
Any chance you remember what I’m talking about?
I wrote about a new version of Rust’s image crate, which adds support for EXIF orientation. Now I can resize images without mangling their rotation. 🥳
I wrote about a new version of Rust’s image crate, which adds support for EXIF orientation. Now I can resize images without mangling their rotation. 🥳
I wrote about a new version of Rust’s image crate, which adds support for EXIF orientation. Now I can resize images without mangling their rotation. 🥳
I wrote about a new version of Rust’s image crate, which adds support for EXIF orientation. Now I can resize images without mangling their rotation. 🥳
* The @ symbol was added in 2004
* It’s probably the first symbol since WWII
* It has a delightful name in French
* Punctuation in Morse code has some surprising other omissions
* The @ symbol was added in 2004
* It’s probably the first symbol since WWII
* It has a delightful name in French
* Punctuation in Morse code has some surprising other omissions
How I record HTTP requests to get fast, reliable, and consistent tests, and the patterns I use in a production codebase. 📼
How I record HTTP requests to get fast, reliable, and consistent tests, and the patterns I use in a production codebase. 📼
I talk a bit about what space-saving clones are, and why they’re important, then describe two ways to create them in Python:
1. Shelling out to `cp` with subprocess, or
2. Making a syscall using `ctypes`
I talk a bit about what space-saving clones are, and why they’re important, then describe two ways to create them in Python:
1. Shelling out to `cp` with subprocess, or
2. Making a syscall using `ctypes`
I talk a bit about what space-saving clones are, and why they’re important, then describe two ways to create them in Python:
1. Shelling out to `cp` with subprocess, or
2. Making a syscall using `ctypes`
I talk a bit about what space-saving clones are, and why they’re important, then describe two ways to create them in Python:
1. Shelling out to `cp` with subprocess, or
2. Making a syscall using `ctypes`
I wrote about the closing of my favourite yarn shop, what the fortnightly crafting meet-up meant to me, and why I’m a bit sad at how many spaces like this are disappearing.
I wrote about the closing of my favourite yarn shop, what the fortnightly crafting meet-up meant to me, and why I’m a bit sad at how many spaces like this are disappearing.
More here: alexwlchan.net/2025/leaving...
More here: alexwlchan.net/2025/leaving...
“If swallowed immediately contact a POISON CENTER/doctor.”
which led me down a rather interesting (if morbid!) rabbit hole about poison centres, something I’ve not come across in the UK: alexwlchan.net/til/2025/poi...
“If swallowed immediately contact a POISON CENTER/doctor.”
which led me down a rather interesting (if morbid!) rabbit hole about poison centres, something I’ve not come across in the UK: alexwlchan.net/til/2025/poi...
I learnt a bunch about animation on the web by reading the Swift.org source code, like:
✨ Using a dash pattern to draw partial paths
✨ HTML5 Canvas and globalCompositeOperation
✨ Anime.js
✨ MutationObserver
✨ prefers-reduce-motion: reduce
I learnt a bunch about animation on the web by reading the Swift.org source code, like:
✨ Using a dash pattern to draw partial paths
✨ HTML5 Canvas and globalCompositeOperation
✨ Anime.js
✨ MutationObserver
✨ prefers-reduce-motion: reduce
I learnt a bunch about animation on the web by reading the Swift.org source code, like:
✨ Using a dash pattern to draw partial paths
✨ HTML5 Canvas and globalCompositeOperation
✨ Anime.js
✨ MutationObserver
✨ prefers-reduce-motion: reduce
I learnt a bunch about animation on the web by reading the Swift.org source code, like:
✨ Using a dash pattern to draw partial paths
✨ HTML5 Canvas and globalCompositeOperation
✨ Anime.js
✨ MutationObserver
✨ prefers-reduce-motion: reduce
It felt like a really thoughtful approach to helping students understand the limitations of genAI, better than a blanket ban or unconditional acceptance.
It felt like a really thoughtful approach to helping students understand the limitations of genAI, better than a blanket ban or unconditional acceptance.
Pages that change randomly, that mirror the real world, or even follow the moon and the sun, plus my all-time favourite website design. 🔖
Pages that change randomly, that mirror the real world, or even follow the moon and the sun, plus my all-time favourite website design. 🔖
When I built my web archive by hand, I saw how other people make websites. I wrote about what I learnt – writing thoughtful HTML, new-to-me features of CSS, and some quirks and relics of the web. 🔖
When I built my web archive by hand, I saw how other people make websites. I wrote about what I learnt – writing thoughtful HTML, new-to-me features of CSS, and some quirks and relics of the web. 🔖
I wrote about how I created a personal web archive of all my bookmarks, the tradeoff between manual and automated archiving, and what I learnt about preserving the web. 🔖
I wrote about how I created a personal web archive of all my bookmarks, the tradeoff between manual and automated archiving, and what I learnt about preserving the web. 🔖