Sign in

Alex Chan

@alexwlchan.net
404 followers 51 following 396 posts
PostsRepliesMedia
Alex Chan @alexwlchan.net · 15/09/2026
Abusing ID3 chapters to turn videos into glanceable podcasts: alexwlchan.net/2026/glancec... If you create hundreds of second-long chapters which have a video frame as cover art, you can get a video into an audio-only podcast player.
231
Alex Chan @alexwlchan.net · 20/08/2026
Why can’t you combine .tar.gz files with cat? alexwlchan.net/2026/cat-con... I wanted to combine some archives, so I had to understand the tar and gzip file formats. I learnt about tape drives, patent laws, and end-of-file markers.
alexwlchan.net
Why can’t you combine .tar.gz files with cat?
To combine archives safely, I had to start by understanding the `tar` and `gzip` file formats. I learnt about tape drives, patent laws, and end-of-file markers.
120
Reposted by Alex Chan
Alex Chan @alexwlchan.net · 13/08/2026
I wrote about finding an SQLite bug for the Tailscale blog! I learnt so much from working on this series of incidents, and I’m proud of the outcome and the story we can finally tell. 🥰
2364
Alex Chan @alexwlchan.net · 13/08/2026
I wrote about finding an SQLite bug for the Tailscale blog! I learnt so much from working on this series of incidents, and I’m proud of the outcome and the story we can finally tell. 🥰
2364
Reposted by Alex Chan
Alex Chan @alexwlchan.net · 05/07/2026
Describing all my photos: alexwlchan.net/2026/describ... I wrote about a change to my photo reviewing workflow: I now write a description for every photo I’m keeping. A sentence or two of context goes a long way to cementing the memory, so I remember more when I look back on the photo.
alexwlchan.net
Describing all my photos
When I save a photo, I write a sentence or two of descriptive context. It helps me remember what's in a photo, why I took it, and how I felt when I did.
041
Alex Chan @alexwlchan.net · 05/07/2026
Describing all my photos: alexwlchan.net/2026/describ... I wrote about a change to my photo reviewing workflow: I now write a description for every photo I’m keeping. A sentence or two of context goes a long way to cementing the memory, so I remember more when I look back on the photo.
alexwlchan.net
Describing all my photos
When I save a photo, I write a sentence or two of descriptive context. It helps me remember what's in a photo, why I took it, and how I felt when I did.
041
Reposted by Alex Chan
Alex Chan @alexwlchan.net · 03/07/2026
I don’t want to repeat repeat myself: alexwlchan.net/2026/repeati... I wrote about these two regular expressions: \b([A-Za-z]+) \1\b \b([A-Za-z]+ [A-Za-z]+) \1\b They helped me find a bunch of mistakes where I had repeated words or phrases. Try them in your writing and code today!
alexwlchan.net
I don’t want to repeat repeat myself
I wrote a pair of regular expressions to find repeated words and phrases in my source code.
021
Alex Chan @alexwlchan.net · 03/07/2026
I don’t want to repeat repeat myself: alexwlchan.net/2026/repeati... I wrote about these two regular expressions: \b([A-Za-z]+) \1\b \b([A-Za-z]+ [A-Za-z]+) \1\b They helped me find a bunch of mistakes where I had repeated words or phrases. Try them in your writing and code today!
alexwlchan.net
I don’t want to repeat repeat myself
I wrote a pair of regular expressions to find repeated words and phrases in my source code.
021
Reposted by Alex Chan
Alex Chan @alexwlchan.net · 29/06/2026
Rebuilding the computer room: alexwlchan.net/2026/compute... I wrote some thoughts on how computers have become a ubiquitous physical presence in our lives, and trying to reintroduce a dedicated space so my digital devices can’t always get to me.
alexwlchan.net
Rebuilding the computer room
We traded the physical boundaries of dedicated rooms for the convenience of our always-on digital lives -- but recently I've been building those walls back up.
021
Alex Chan @alexwlchan.net · 29/06/2026
Rebuilding the computer room: alexwlchan.net/2026/compute... I wrote some thoughts on how computers have become a ubiquitous physical presence in our lives, and trying to reintroduce a dedicated space so my digital devices can’t always get to me.
alexwlchan.net
Rebuilding the computer room
We traded the physical boundaries of dedicated rooms for the convenience of our always-on digital lives -- but recently I've been building those walls back up.
021
Reposted by Alex Chan
Alex Chan @alexwlchan.net · 07/06/2026
Using the Screen Capture API to record a browser window: alexwlchan.net/2026/record-... In which web tech continues to be amazing, and I use it to record a fun animation (with audio!) from the Lego website.
alexwlchan.net
Using the Screen Capture API to record a browser window
When I saw a cool animation, I used the browser's native screen capture API to get a high-quality screen recording, audio included.
021
Alex Chan @alexwlchan.net · 07/06/2026
Using the Screen Capture API to record a browser window: alexwlchan.net/2026/record-... In which web tech continues to be amazing, and I use it to record a fun animation (with audio!) from the Lego website.
alexwlchan.net
Using the Screen Capture API to record a browser window
When I saw a cool animation, I used the browser's native screen capture API to get a high-quality screen recording, audio included.
021
Alex Chan @alexwlchan.net · 05/06/2026
Using Pytester to test my Playwright fixtures: alexwlchan.net/2026/pytester/ I wrote about using the Pytester plugin to make sure my fixtures and test helpers are doing the right thing. Just because code is in your test suite, it’s not immune to bugs!
alexwlchan.net
Using Pytester to test my Playwright fixtures
Who tests the tests? Test code isn't immune to bugs, so I'm using pytest's Pytester plugin to ensure my Playwright fixture is behaving correctly.
110
Alex Chan @alexwlchan.net · 01/06/2026
Rendering a chat thread in CSS and JavaScript: alexwlchan.net/2026/css-chat/ I want to add text conversation to my scrapbook of social media, so I needed to render text bubbles in a web browser. It was tricky but I got it working. Modern web tech is amazing! 💬 💬 💬
alexwlchan.net
Rendering a chat thread in CSS and JavaScript
I thought rendering chat bubbles would be straightforward, but I found it tricky to get the CSS right and make the bubbles "shrink-wrap" to fit the text.
130
Reposted by Alex Chan
Alex Chan @alexwlchan.net · 11/05/2026
Watching for file changes on macOS: alexwlchan.net/2026/watch-f... I wrote about my new Swift/Python scripts to get notified of file changes… without using third-party dependencies.
alexwlchan.net
Watching for file changes on macOS
I've written a Swift script that uses the FSEvents API to get notified of file changes, then I'm using stdout as a bridge to forward those notifications to Python.
121
Alex Chan @alexwlchan.net · 11/05/2026
Watching for file changes on macOS: alexwlchan.net/2026/watch-f... I wrote about my new Swift/Python scripts to get notified of file changes… without using third-party dependencies.
alexwlchan.net
Watching for file changes on macOS
I've written a Swift script that uses the FSEvents API to get notified of file changes, then I'm using stdout as a bridge to forward those notifications to Python.
121
Alex Chan @alexwlchan.net · 02/05/2026
Using Playwright to test my static sites: alexwlchan.net/2026/playwri... I wrote about how I’m using Playwright to test my static websites from Python, the pytest fixtures I use, and a bunch of example assertions.
alexwlchan.net
Using Playwright to test my static sites
Playwright is a testing library that lets you control a browser and check how the page is behaving, and it's great for testing and scripting web apps.
010
Alex Chan @alexwlchan.net · 29/04/2026
Building a basic cache with SQLite: alexwlchan.net/2026/sqlite-... I wrote about how I’m using a simple key-value lookup to cache expensive operations and dramatically speed up working on my website.
alexwlchan.net
Building a basic cache with SQLite
An SQLite table that caches expensive operations has dramatically sped up local development of this website.
000
Reposted by Alex Chan
Alex Chan @alexwlchan.net · 26/04/2026
HTTP GET requests with the Python standard library: alexwlchan.net/2026/python-... For my local scripts I only need a handful of HTTP requests at a time, so I can do everything I want with a lightweight wrapper around urllib.request. Fewer dependencies FTW. 🥰
alexwlchan.net
HTTP GET requests with the Python standard library
For my local scripting, a lightweight wrapper around the Python standard library gets me a friendly API without the dependencies.
021
Alex Chan @alexwlchan.net · 26/04/2026
HTTP GET requests with the Python standard library: alexwlchan.net/2026/python-... For my local scripts I only need a handful of HTTP requests at a time, so I can do everything I want with a lightweight wrapper around urllib.request. Fewer dependencies FTW. 🥰
alexwlchan.net
HTTP GET requests with the Python standard library
For my local scripting, a lightweight wrapper around the Python standard library gets me a friendly API without the dependencies.
021
Reposted by Alex Chan
Alex Chan @alexwlchan.net · 10/04/2026
Auditing my local Python packages: alexwlchan.net/2026/python-... Recent supply chain attacks have me wondering “what Python packages do I have installed” – and virtual environments make that harder. I’ve started keeping a list of my environments so I can see exactly what’s installed, and where.
alexwlchan.net
Auditing my local Python packages
Python's virtual environments mean I can have many versions of the same package scattered across my machine. I've started keeping a list of my environments so I can see exactly what's installed, and where.
031
Alex Chan @alexwlchan.net · 10/04/2026
Auditing my local Python packages: alexwlchan.net/2026/python-... Recent supply chain attacks have me wondering “what Python packages do I have installed” – and virtual environments make that harder. I’ve started keeping a list of my environments so I can see exactly what’s installed, and where.
alexwlchan.net
Auditing my local Python packages
Python's virtual environments mean I can have many versions of the same package scattered across my machine. I've started keeping a list of my environments so I can see exactly what's installed, and where.
031
Reposted by Alex Chan
Alex Chan @alexwlchan.net · 27/03/2026
Creating a personalised bin calendar: alexwlchan.net/2026/bin-cal... I wrote a quick post about how I create my a fridge calendar that tells me about bin day. Python stdlib + CSS = 🚮 💚
alexwlchan.net
Creating a personalised bin calendar
Every year I use Python and a bit of CSS to create a fridge calendar that tells me about bin day.
042
Alex Chan @alexwlchan.net · 27/03/2026
Creating a personalised bin calendar: alexwlchan.net/2026/bin-cal... I wrote a quick post about how I create my a fridge calendar that tells me about bin day. Python stdlib + CSS = 🚮 💚
alexwlchan.net
Creating a personalised bin calendar
Every year I use Python and a bit of CSS to create a fridge calendar that tells me about bin day.
042
Reposted by Alex Chan
Alex Chan @alexwlchan.net · 23/03/2026
Some highlights and reflections from this year’s #monkigras “Prepping Craft” alexwlchan.net/2026/monki-g... Resisting ICE; stories of self-discovery; learning to be a parent of a trans child. So much fun; bring on 2027!
alexwlchan.net
Monki Gras 2026 “Prepping Craft”
When safety and normality are slipping away, how do we make our code, our communities, and our lives truly resilient?
011
Alex Chan @alexwlchan.net · 23/03/2026
Some highlights and reflections from this year’s #monkigras “Prepping Craft” alexwlchan.net/2026/monki-g... Resisting ICE; stories of self-discovery; learning to be a parent of a trans child. So much fun; bring on 2027!
alexwlchan.net
Monki Gras 2026 “Prepping Craft”
When safety and normality are slipping away, how do we make our code, our communities, and our lives truly resilient?
011
Reposted by Alex Chan
Alex Chan @alexwlchan.net · 19/03/2026
The selfish case for public libraries: alexwlchan.net/2026/selfish... I wrote about why I love and use public libraries, and how they help me be a better reader.
001
Alex Chan @alexwlchan.net · 19/03/2026
@grimalkina.bsky.social I don’t think you’re at Monki Gras today (if I’ve missed you around, sorry!), but your presence is being felt! Your work has received glowing mentions in two talks already, and it’s not even lunch ☺️
151
Alex Chan @alexwlchan.net · 19/03/2026
The selfish case for public libraries: alexwlchan.net/2026/selfish... I wrote about why I love and use public libraries, and how they help me be a better reader.
001
Alex Chan @alexwlchan.net · 12/03/2026
Dreaming of a ten-year computer: alexwlchan.net/2026/ten-yea... I wrote about my current Mac mini, and why I’m trying to make it last for at least decade – modern machines are so powerful, and this should be more than enough computer for me for a long time.
alexwlchan.net
Dreaming of a ten-year computer
Modern computers are more powerful than I know what to do with, but the norm is still to upgrade every few years. I want my current computer to last a decade, and I don't think that's unreasonable.
110
Alex Chan @alexwlchan.net · 22/02/2026
@jonnelledge.bsky.social Spotted in a bookshop next to London Bridge yesterday!
A photo of Jonn’s excellent book “A History of the World in 47 Borders” on a bookshop shelf, with a “staff pick” insert that reads “A lateral history with an abundance of fact (always a winner) and an equal abundance of anecdote. Elledge's easy-going style is informative without being dense, and refreshingly jovial for a genre that is too often parochial. In short, one of those rare, quite marvellous history books, from which you will take away as much as you could possibly hope to learn, and a great deal more you did not expect to.”
090
Alex Chan @alexwlchan.net · 17/02/2026
The bare minimum for syncing Git repos: alexwlchan.net/2026/bare-gi... I’m trying to reduce my dependency on GitHub and cloud services, and it turns out that in plenty of cases, syncing Git with a local folder is plenty good enough for my repos.
000
Reposted by Alex Chan
Alex Chan @alexwlchan.net · 14/01/2026
The Good, the Bad, and the Gutters: alexwlchan.net/2026/movie-p... In which I show you some cool CSS features like Grid layout and text-wrap: balance, explain it in a step-by-step guide to help myself learn, and have far too much fun with my placeholder data.
alexwlchan.net
The Good, the Bad, and the Gutters
A step-by-step guide to a movie poster grid that uses CSS Grid, text-wrap balanced titles, and dynamic hover states.
011
Alex Chan @alexwlchan.net · 14/01/2026
The Good, the Bad, and the Gutters: alexwlchan.net/2026/movie-p... In which I show you some cool CSS features like Grid layout and text-wrap: balance, explain it in a step-by-step guide to help myself learn, and have far too much fun with my placeholder data.
alexwlchan.net
The Good, the Bad, and the Gutters
A step-by-step guide to a movie poster grid that uses CSS Grid, text-wrap balanced titles, and dynamic hover states.
011
Alex Chan @alexwlchan.net · 12/01/2026
Using perceptual distance to create better headers: alexwlchan.net/2026/percept... I wrote about perceptually uniform colour spaces and how I’m using them to make nicer-looking header images for my blog.
alexwlchan.net
Using perceptual distance to create better headers
I started picking colours for my site headers with a more perceptually uniform approach, so their colours look more correct to the human eye.
010
Reposted by Alex Chan
Alex Chan @alexwlchan.net · 10/01/2026
I wrote about some of my personal security posture on my blog today: Where I store my multi-factor recovery codes: alexwlchan.net/2026/recover... The passwords I actually memorise: alexwlchan.net/2026/memoris...
051
Alex Chan @alexwlchan.net · 10/01/2026
I wrote about some of my personal security posture on my blog today: Where I store my multi-factor recovery codes: alexwlchan.net/2026/recover... The passwords I actually memorise: alexwlchan.net/2026/memoris...
051
Alex Chan @alexwlchan.net · 01/01/2026
I’d love to read a story about the security implications of bringing boatloads of explosives into central London, then setting them off on purpose. 🎆🎇
110
Alex Chan @alexwlchan.net · 31/12/2025
My favourite books from 2025: alexwlchan.net/2025/2025-in... In what’s now become a fun end-of-year tradition, I wrote about some of the books I enjoyed reading this year. Maybe something for your TBR pile in 2026? ☺️
alexwlchan.net
My favourite books from 2025
Sapphics and spies, butlers and basketball, prophecy and purpose – what I enjoyed reading this year.
040
Alex Chan @alexwlchan.net · 24/12/2025
Ignore AI upscaled YouTube videos with yt-dlp: alexwlchan.net/til/2025/ign... YouTube have started upscaling videos using AI. If you don’t want to download those versions, you can skip them by passing a --format option to yt-dlp. (But I know Bluesky loves AI so I’m sure nobody wants this… 😘)
alexwlchan.net
Ignore AI upscaled YouTube videos with yt-dlp
Filter for formats that don't include `-sr` ("super resolution") in their format ID.
0205
Reposted by Alex Chan
Alex Chan @alexwlchan.net · 21/12/2025
Drawing Truchet tiles in SVG: alexwlchan.net/2025/truchet... I had some fun writing parametric templates to create Truchet tiles and drawing pretty pictures, even if I’m not sure what to use them for. 🤔
alexwlchan.net
Drawing Truchet tiles in SVG
Using parametric templates to draw Truchet tiles, then placing them randomly to create generative patterns.
122
Alex Chan @alexwlchan.net · 21/12/2025
Drawing Truchet tiles in SVG: alexwlchan.net/2025/truchet... I had some fun writing parametric templates to create Truchet tiles and drawing pretty pictures, even if I’m not sure what to use them for. 🤔
alexwlchan.net
Drawing Truchet tiles in SVG
Using parametric templates to draw Truchet tiles, then placing them randomly to create generative patterns.
122
Reposted by Alex Chan
Alex Chan @alexwlchan.net · 17/12/2025
The palm tree that lead to Palmyra: alexwlchan.net/2025/palmyre... I wrote a bit about a historical alphabet I’d never heard of, which I found while looking for the 🌴 emoji.
alexwlchan.net
The palm tree that lead to Palmyra
Palmyrene is an alphabet that was used to write Aramaic in 300–100 BCE, and I learnt about it while looking for a palm tree emoji.
011
Alex Chan @alexwlchan.net · 17/12/2025
The palm tree that lead to Palmyra: alexwlchan.net/2025/palmyre... I wrote a bit about a historical alphabet I’d never heard of, which I found while looking for the 🌴 emoji.
alexwlchan.net
The palm tree that lead to Palmyra
Palmyrene is an alphabet that was used to write Aramaic in 300–100 BCE, and I learnt about it while looking for a palm tree emoji.
011
Reposted by Alex Chan
Alex Chan @alexwlchan.net · 12/12/2025
Meeting my younger self: alexwlchan.net/2025/meeting... Rounding out this week’s trilogy on social media archiving, I looked back on 150,000 posts I’d saved from a decade of social media. Some fond memories I want to keep; some regrets and mistakes I’d rather forget.
alexwlchan.net
Meeting my younger self
I reviewed 150,000 fragments of my online life, and I was reminded of the friends I found, the mistakes I made, and the growth I gained.
032
Reposted by Alex Chan
Alex Chan @alexwlchan.net · 10/12/2025
Hard problems in social media archiving: alexwlchan.net/2025/hard-pr... I wrote about what I see as the key challenges to social media archiving in institutions – choosing what to save, the ethics of saving it, and searching what you’ve saved.
alexwlchan.net
Hard problems in social media archiving
Preserving social media is easier said than done. What makes it so difficult for institutions to back up the Internet?
174
Reposted by Alex Chan
Alex Chan @alexwlchan.net · 08/12/2025
The Internet forgets, but I don’t want to: alexwlchan.net/2025/social-... I don’t trust platforms to preserve my memories, so I built my own scrapbook of social media. I wrote about what the scrapbook is, how it works, and some of the inspirations and influences.
alexwlchan.net
The Internet forgets, but I don’t want to
I don't trust platforms to preserve my memories, so I built my own scrapbook of social media.
144
Alex Chan @alexwlchan.net · 08/12/2025
The Internet forgets, but I don’t want to: alexwlchan.net/2025/social-... I don’t trust platforms to preserve my memories, so I built my own scrapbook of social media. I wrote about what the scrapbook is, how it works, and some of the inspirations and influences.
alexwlchan.net
The Internet forgets, but I don’t want to
I don't trust platforms to preserve my memories, so I built my own scrapbook of social media.
144
Alex Chan @alexwlchan.net · 05/12/2025
When square pixels aren’t square: alexwlchan.net/2025/square-... I wrote about a recent bug where my videos weren’t displaying properly, because I was looking at the storage aspect ratio – not the display aspect ratio.
alexwlchan.net
When square pixels aren’t square
When you want to get the dimensions of a video file, you probably want the display aspect ratio. Using the dimensions of a stored frame may result in a stretched or squashed video.
030
Reposted by Alex Chan
Alex Chan @alexwlchan.net · 21/11/2025
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.
alexwlchan.net
Can you take an ox to Oxford?
Let's work out exactly when you need to pay Oxford's new congestion charge.
233