Alex Chan @alexwlchan.net · 15/09/2026Abusing 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/2026Why 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.netWhy 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 ChanAlex Chan @alexwlchan.net · 13/08/2026I 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/2026I 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 ChanAlex Chan @alexwlchan.net · 05/07/2026Describing 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.netDescribing all my photosWhen 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/2026Describing 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.netDescribing all my photosWhen 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 ChanAlex Chan @alexwlchan.net · 03/07/2026I 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.netI don’t want to repeat repeat myselfI wrote a pair of regular expressions to find repeated words and phrases in my source code. 021
Alex Chan @alexwlchan.net · 03/07/2026I 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.netI don’t want to repeat repeat myselfI wrote a pair of regular expressions to find repeated words and phrases in my source code. 021
Reposted by Alex ChanAlex Chan @alexwlchan.net · 29/06/2026Rebuilding 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.netRebuilding the computer roomWe 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/2026Rebuilding 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.netRebuilding the computer roomWe 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 ChanAlex Chan @alexwlchan.net · 07/06/2026Using 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.netUsing the Screen Capture API to record a browser windowWhen 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/2026Using 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.netUsing the Screen Capture API to record a browser windowWhen 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/2026Using 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.netUsing Pytester to test my Playwright fixturesWho 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/2026Rendering 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.netRendering a chat thread in CSS and JavaScriptI 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 ChanAlex Chan @alexwlchan.net · 11/05/2026Watching 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.netWatching for file changes on macOSI'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/2026Watching 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.netWatching for file changes on macOSI'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/2026Using 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.netUsing Playwright to test my static sitesPlaywright 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/2026Building 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.netBuilding a basic cache with SQLiteAn SQLite table that caches expensive operations has dramatically sped up local development of this website. 000
Reposted by Alex ChanAlex Chan @alexwlchan.net · 26/04/2026HTTP 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.netHTTP GET requests with the Python standard libraryFor 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/2026HTTP 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.netHTTP GET requests with the Python standard libraryFor my local scripting, a lightweight wrapper around the Python standard library gets me a friendly API without the dependencies. 021
Reposted by Alex ChanAlex Chan @alexwlchan.net · 10/04/2026Auditing 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.netAuditing my local Python packagesPython'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/2026Auditing 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.netAuditing my local Python packagesPython'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 ChanAlex Chan @alexwlchan.net · 27/03/2026Creating 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.netCreating a personalised bin calendarEvery 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/2026Creating 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.netCreating a personalised bin calendarEvery year I use Python and a bit of CSS to create a fridge calendar that tells me about bin day. 042
Reposted by Alex ChanAlex Chan @alexwlchan.net · 23/03/2026Some 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.netMonki 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/2026Some 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.netMonki 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 ChanAlex Chan @alexwlchan.net · 19/03/2026The 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/2026The 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/2026Dreaming 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.netDreaming of a ten-year computerModern 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! 090
Alex Chan @alexwlchan.net · 17/02/2026The 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 ChanAlex Chan @alexwlchan.net · 14/01/2026The 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.netThe Good, the Bad, and the GuttersA 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/2026The 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.netThe Good, the Bad, and the GuttersA 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/2026Using 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.netUsing perceptual distance to create better headersI 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 ChanAlex Chan @alexwlchan.net · 10/01/2026I 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/2026I 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/2026I’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/2025My 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.netMy favourite books from 2025Sapphics and spies, butlers and basketball, prophecy and purpose – what I enjoyed reading this year. 040
Alex Chan @alexwlchan.net · 24/12/2025Ignore 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.netIgnore AI upscaled YouTube videos with yt-dlpFilter for formats that don't include `-sr` ("super resolution") in their format ID. 0205
Reposted by Alex ChanAlex Chan @alexwlchan.net · 21/12/2025Drawing 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.netDrawing Truchet tiles in SVGUsing parametric templates to draw Truchet tiles, then placing them randomly to create generative patterns. 122
Alex Chan @alexwlchan.net · 21/12/2025Drawing 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.netDrawing Truchet tiles in SVGUsing parametric templates to draw Truchet tiles, then placing them randomly to create generative patterns. 122
Reposted by Alex ChanAlex Chan @alexwlchan.net · 17/12/2025The 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.netThe palm tree that lead to PalmyraPalmyrene 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/2025The 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.netThe palm tree that lead to PalmyraPalmyrene 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 ChanAlex Chan @alexwlchan.net · 12/12/2025Meeting 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.netMeeting my younger selfI 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 ChanAlex Chan @alexwlchan.net · 10/12/2025Hard 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.netHard problems in social media archivingPreserving social media is easier said than done. What makes it so difficult for institutions to back up the Internet? 174
Reposted by Alex ChanAlex Chan @alexwlchan.net · 08/12/2025The 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.netThe Internet forgets, but I don’t want toI don't trust platforms to preserve my memories, so I built my own scrapbook of social media. 144
Alex Chan @alexwlchan.net · 08/12/2025The 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.netThe Internet forgets, but I don’t want toI don't trust platforms to preserve my memories, so I built my own scrapbook of social media. 144
Alex Chan @alexwlchan.net · 05/12/2025When 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.netWhen square pixels aren’t squareWhen 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 ChanAlex Chan @alexwlchan.net · 21/11/2025Can 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.netCan you take an ox to Oxford?Let's work out exactly when you need to pay Oxford's new congestion charge. 233