Alex Chan
@alexwlchan.net
📤 349
📥 43
📝 257
reposted by
Alex Chan
Can you take an ox to Oxford?
alexwlchan.net/2025/ox-in-o...
I decided to work out exactly when you need to pay Oxford’s new congestion charge.
loading . . .
Can you take an ox to Oxford?
Let's work out exactly when you need to pay Oxford's new congestion charge.
https://alexwlchan.net/2025/ox-in-oxford/?ref=bluesky&t=1
13 days ago
2
3
4
@oldenoughtosay.com
i found more things to procrastinate on
add a skeleton here at some point
13 days ago
0
0
0
Can you take an ox to Oxford?
alexwlchan.net/2025/ox-in-o...
I decided to work out exactly when you need to pay Oxford’s new congestion charge.
loading . . .
Can you take an ox to Oxford?
Let's work out exactly when you need to pay Oxford's new congestion charge.
https://alexwlchan.net/2025/ox-in-oxford/?ref=bluesky&t=1
13 days ago
2
3
4
reposted by
Alex Chan
Cleaning up messy dates in JSON:
alexwlchan.net/2025/messy-d...
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.
16 days ago
1
1
1
Cleaning up messy dates in JSON:
alexwlchan.net/2025/messy-d...
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.
16 days ago
1
1
1
Detecting AV1-encoded videos with Python:
alexwlchan.net/2025/detecti...
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.
25 days ago
1
2
0
Why can’t my iPhone play that video?
alexwlchan.net/2025/av1-on-...
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.
loading . . .
Why can’t my iPhone play that video?
The answer involves the AV1 video codec, Apple's chips, and several new web APIs I learnt along the way.
https://alexwlchan.net/2025/av1-on-my-iphone/
about 1 month ago
0
4
0
Doing my own syntax highlighting (finally):
alexwlchan.net/2025/syntax-...
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.
loading . . .
Doing my own syntax highlighting (finally)
I've redesigned my syntax highlighting scheme to use a smaller colour palette. Here's what I've changed, how it works, and why I think it's better.
https://alexwlchan.net/2025/syntax-highlighting/?ref=bluesky
about 1 month ago
0
11
6
Creating a personal wrapper around yt-dlp:
alexwlchan.net/2025/yt-dlp-...
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.
about 2 months ago
1
3
0
@jonnelledge.bsky.social
Spotted in St Pancras Waterstones đź‘€
2 months ago
1
2
0
@anildash.com
I thought of you as I read this article; it’s a UK version of an idea I know you’ve had:
takes.jamesomalley.co.uk/p/starmer-co...
(Unless I’m misremembering, in which case sorry!)
loading . . .
Starmer shouldn't give a conference speech – he should give an Apple-style keynote
The format is tired and it is time to think different.
https://takes.jamesomalley.co.uk/p/starmer-conference-keynote
2 months ago
1
4
0
Linking to text fragments with a bookmarklet:
alexwlchan.net/2025/text-fr...
I’ve written a bookmarklet that lets me link to specific text on a web page.
3 months ago
0
1
0
@garius.bsky.social
I vaguely remember reading one of your threads where you said somebody like “so-and-so had no experience, and by the end of the night, nobody who witnessed their actions would believe it” – but I’m struggling to find it. Any chance you remember what I’m talking about?
3 months ago
1
1
0
reposted by
Alex Chan
Resizing images in Rust – now with EXIF orientation support:
alexwlchan.net/2025/create-...
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. 🥳
loading . . .
Resizing images in Rust – now with EXIF orientation support
A new version of Rust's image crate has support for EXIF orientation, which allows me to resize images without mangling their rotation.
https://alexwlchan.net/2025/create-thumbnail-is-exif-aware/?ref=mastodon
3 months ago
0
2
1
Resizing images in Rust – now with EXIF orientation support:
alexwlchan.net/2025/create-...
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. 🥳
loading . . .
Resizing images in Rust – now with EXIF orientation support
A new version of Rust's image crate has support for EXIF orientation, which allows me to resize images without mangling their rotation.
https://alexwlchan.net/2025/create-thumbnail-is-exif-aware/?ref=mastodon
3 months ago
0
2
1
On a lighter note, I did some digging around the history of Morse code:
alexwlchan.net/til/2025/aro...
* 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
3 months ago
1
4
0
Using vcrpy to test HTTP interactions in Python:
alexwlchan.net/2025/testing...
How I record HTTP requests to get fast, reliable, and consistent tests, and the patterns I use in a production codebase. 📼
loading . . .
Using vcrpy to test HTTP interactions in Python
How I record HTTP requests to get fast, reliable, and consistent tests, and the patterns I use in a production codebase.
https://alexwlchan.net/2025/testing-with-vcrpy/
3 months ago
0
2
0
reposted by
Alex Chan
Create space-saving clones on macOS with Python:
alexwlchan.net/2025/cloning...
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`
loading . . .
Create space-saving clones on macOS with Python
You can shell out to `cp -c` using `subprocess`, or you can make a `clonefile()` syscall using the `ctypes` library.
https://alexwlchan.net/2025/cloning-with-python/
4 months ago
0
3
1
Create space-saving clones on macOS with Python:
alexwlchan.net/2025/cloning...
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`
loading . . .
Create space-saving clones on macOS with Python
You can shell out to `cp -c` using `subprocess`, or you can make a `clonefile()` syscall using the `ctypes` library.
https://alexwlchan.net/2025/cloning-with-python/
4 months ago
0
3
1
Slipstitch, Queer Craft, and community spaces:
alexwlchan.net/2025/slipsti...
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.
loading . . .
Slipstitch, Queer Craft, and community spaces
Remembering Slipstitch, a queer-friendly yarn shop and the fortnightly crafting meet-ups that were a highlight of my week.
https://alexwlchan.net/2025/slipstitch/
4 months ago
0
0
0
A bit of personal news: today was my last day at the Flickr Foundation. I’m very proud of what I did there, but now it’s time for something new – with a break first! More here:
alexwlchan.net/2025/leaving...
4 months ago
0
10
0
I was unpacking new laundry pods this evening, and I saw a scary warning: “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...
5 months ago
1
0
0
reposted by
Alex Chan
Recreating a bird animation:
alexwlchan.net/2025/swift-b...
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
loading . . .
6 months ago
0
1
1
Recreating a bird animation:
alexwlchan.net/2025/swift-b...
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
loading . . .
6 months ago
0
1
1
@anildash.com
Since you keep talking about “better AI critique”, you might like this article by Chelsea Troy:
chelseatroy.com/2025/05/14/t...
It felt like a really thoughtful approach to helping students understand the limitations of genAI, better than a blanket ban or unconditional acceptance.
loading . . .
The Homework is the Cheat Code: GenAI Policy in my Computer Science Graduate Classroom
I started teaching at the University of Chicago six years ago. Back then, in the spring of 2019, students had not undergone the trauma of a centennial pandemic. They had so far learned in person; I…
https://chelseatroy.com/2025/05/14/the-homework-is-the-cheat-code-genai-policy-in-my-computer-science-graduate-classroom/
6 months ago
0
2
1
reposted by
Alex Chan
To close my bookmarks series on a lighter note, I wrote about some of my favourite websites:
alexwlchan.net/2025/my-favo...
Pages that change randomly, that mirror the real world, or even follow the moon and the sun, plus my all-time favourite website design. đź”–
6 months ago
0
5
1
reposted by
Alex Chan
What I learnt about making websites by reading two thousand web pages:
alexwlchan.net/2025/learnin...
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. 🔖
loading . . .
What I learnt about making websites by reading two thousand web pages
How to write thoughtful HTML, new-to-me features of CSS, and some quirks and relics I found while building my personal web archive
https://alexwlchan.net/2025/learning-how-to-make-websites/?ref=bluesky
6 months ago
1
4
1
reposted by
Alex Chan
Building a personal archive of the web, the slow way:
alexwlchan.net/2025/persona...
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. đź”–
loading . . .
Building a personal archive of the web, the slow way
How I built a web archive by hand, the tradeoffs between manual and automated archiving, and what I learnt about preserving the web.
https://alexwlchan.net/2025/personal-archive-of-the-web/
7 months ago
2
5
2
reposted by
Alex Chan
Creating a static website for all my bookmarks:
alexwlchan.net/2025/bookmar...
I’ve been tidying up my bookmarks, and I’ve moved them out of Pinboard into a static website on my local computer. I’ve written about why I still care about bookmarking in 2025, and how this new site works. 🔖
loading . . .
Creating a static website for all my bookmarks
To help me keep track of interesting links, I created a static website that keeps all my data locally. Why do I care about bookmarks, and how does my new site work?
https://alexwlchan.net/2025/bookmarks-static-site/
7 months ago
1
7
4
Creating a static website for all my bookmarks:
alexwlchan.net/2025/bookmar...
I’ve been tidying up my bookmarks, and I’ve moved them out of Pinboard into a static website on my local computer. I’ve written about why I still care about bookmarking in 2025, and how this new site works. 🔖
loading . . .
Creating a static website for all my bookmarks
To help me keep track of interesting links, I created a static website that keeps all my data locally. Why do I care about bookmarks, and how does my new site work?
https://alexwlchan.net/2025/bookmarks-static-site/
7 months ago
1
7
4
reposted by
Alex Chan
Did you know that JSON objects can have duplicate names? { "sides": 4, "colour": "red", "sides": 5, "colour": "blue" } This is unusual and discouraged – but it is valid syntax! I wrote about how to deal with these unfamiliar JSON objects in Python:
alexwlchan.net/2025/duplica...
7 months ago
1
6
3
Did you know that JSON objects can have duplicate names? { "sides": 4, "colour": "red", "sides": 5, "colour": "blue" } This is unusual and discouraged – but it is valid syntax! I wrote about how to deal with these unfamiliar JSON objects in Python:
alexwlchan.net/2025/duplica...
7 months ago
1
6
3
A faster way to copy SQLite databases between computers:
alexwlchan.net/2025/copying...
I wrote up a quick trick I learned: dumping a SQLite database to a text file can make it much smaller, which means you can download it faster.
7 months ago
0
1
0
@arborelia.net
I used ftfy for a project today, and the fix_and_explain() function was so useful, thank you! đź’šđź’–
7 months ago
1
0
0
A flash of light in the darkness:
alexwlchan.net/2025/fix-dar...
I wrote about a recent bug in dark mode on my website, where I forgot to set a fallback colour for a background image.
7 months ago
0
1
0
Beyond None: actionable error messages for keyring.get_password():
alexwlchan.net/2025/get-req...
I have a wrapper for get_password() so that if it can’t find a password, you get an error that explains how to set the password, and what password to choose.
loading . . .
Beyond None: actionable error messages for keyring.get_password()
I have a wrapper for `get_password()` so that if it can't find a password, you get an error that explains how to set the password, and what password you should choose.
https://alexwlchan.net/2025/get-required-password/?utm_source=bluesky
8 months ago
0
1
0
What a great day to live on terf island Much love to my trans siblings, especially my trans sisters, and good luck for the wave of extra crap that’s about to be flung our way 💚💖
add a skeleton here at some point
8 months ago
1
8
0
Localising the <time> with JavaScript:
alexwlchan.net/2025/localis...
I wrote a quick post about using the <time> element and some JavaScript to display timestamps as human-readable, localised timestamps. Compare: Wed, 16 Apr 2025 at 06:31 BST (1 hour ago) vs 2025-04-16T06:31:27Z.
8 months ago
0
3
0
I try to be gracious when my travel is delayed by a person is struck by a train, because other people are almost certainly having a worse evening than me. But tonight is really quite miserable, because my journey home is being compounded by other delays that are unrelated to the incident.
8 months ago
1
1
0
Always running:
alexwlchan.net/2025/always-...
“When the fire starts, I am already running for the exit. I have always been running for the exit.” I wrote some fiction! I tried to capture the perspective of a character we’re all familiar with, but we rarely interact with.
loading . . .
Always running
When the fire starts, I am already running for the exit. I run because somebody must show the way.
https://alexwlchan.net/2025/always-running/?tm_source=mastodon
8 months ago
0
1
0
Siblings, Software, and Sock Repairs:
buttondown.com/alexwlchan/a...
I just sent out my March newsletter, which is a roundup of all the stuff I’ve been writing and enjoying in the last month. Highlights: Monki Gras talk, a trip to the Netherlands, and three problems that sound simple but aren’t.
loading . . .
March 2025: Siblings, Software, and Sock Repairs
Happy March! Spring has definitely arrived for me, along with an onslaught of pollen. The sun is shining, the trees on my road are lined with blossom, and my...
https://buttondown.com/alexwlchan/archive/march-2025-siblings-software-and-sock-repairs/
8 months ago
0
2
1
What I’ve learned by building to last:
alexwlchan.net/2025/buildin...
🔮 There are patterns in what lasts 💖 People skills matter more than technical skills 🌱 Long-lasting systems cannot grow forever I had a lovely time speaking at
#MonkiGras
yesterday, and I’ve just posted my notes and slides.
loading . . .
Monki Gras 2025: What I’ve Learned by Building to Last
Notes from my talk at Monki Gras 2025.
https://alexwlchan.net/2025/building-to-last/
8 months ago
1
31
5
Whose code am I running in GitHub Actions?
alexwlchan.net/2025/github-...
I strung together some Unix pipelines and text processing tools to find out what third-party code I’m using in my GitHub workflows, so I can decide if I trust it.
8 months ago
0
2
0
Between “Maybe Happy Ending” and “Why Am I So Single?” today is a great day to dance like nobody’s watching as you enjoy cast recordings of new musicals. 🥰
9 months ago
0
0
0
Fast and random sampling in SQLite:
alexwlchan.net/2025/fast-sq...
I tried four different approaches, and I wrote about the performance and tradeoffs of each. 🎲
9 months ago
0
2
0
reposted by
Alex Chan
We all lose when art is anonymised:
alexwlchan.net/2025/anonymi...
I was trying to track down the photographer behind some pretty traffic lights (Lucas Zimmerman), and I wrote a few thoughts about the widespread trend of removing or obfuscating attribution.
loading . . .
We all lose when art is anonymised
When art loses its creator, we lose the story behind the image -- a plea for attribution in our endless scroll culture.
https://alexwlchan.net/2025/anonymised-art/?utm_source=mastodon
9 months ago
1
16
6
We all lose when art is anonymised:
alexwlchan.net/2025/anonymi...
I was trying to track down the photographer behind some pretty traffic lights (Lucas Zimmerman), and I wrote a few thoughts about the widespread trend of removing or obfuscating attribution.
loading . . .
We all lose when art is anonymised
When art loses its creator, we lose the story behind the image -- a plea for attribution in our endless scroll culture.
https://alexwlchan.net/2025/anonymised-art/?utm_source=mastodon
9 months ago
1
16
6
An unexpected lesson in CSS stacking contexts:
alexwlchan.net/2025/new-ban...
How hard could it be to lay out two elements in CSS? Surprisingly difficult, if you’re me!
9 months ago
0
0
0
I wrote about some of the work I’ve been doing recently to create maps with a scatter plot of locations in Python:
alexwlchan.net/2025/static-...
This feels like something that should be possible with a data viz library, but I wrote my own lat/lon code using OpenStreetMap and Pillow instead. 🌍
loading . . .
Creating static map images with OpenStreetMap, Web Mercator, and Pillow
I made some simple map visualisations by downloading tiles from OpenStreetMap, then annotating the tiles with Pillow.
https://alexwlchan.net/2025/static-maps/?utm_source=bluesky
9 months ago
0
1
0
✨ I just sent out my February newsletter, which is a roundup of stuff I’ve been writing and doing in the last month:
buttondown.com/alexwlchan/a...
(And unlike January, I remembered how many days there were, so I wrote it before the end of the month!)
loading . . .
February 2025: What’s it like in New York City?
Happy February! At least in the UK, the days are getting longer and milder. I left work in full sunlight today, and I don’t need to wear a scarf outdoors any...
https://buttondown.com/alexwlchan/archive/february-2025-whats-it-like-in-new-york-city/
9 months ago
0
2
0
Load more
feeds!
log in