Sep 2024
Alternatives to cosine similarity (code)Archive
Here are all the articles I've published since 2013. They're mostly about frontend web tech (although there are a few curveballs in there).
Aug 2024
How does cosine similarity work? (code)Jul 2024
How do you test the quality of search results? (code)Jun 2024
What even is a week? (dates are hard) (code)May 2024
Subsetting my font files reduced their size by more than 60% (typography)Apr 2024
Stacked Sparklines web component (code)Mar 2024
Known Pleasures: SVG line art (code)Feb 2024
RSS is Awesome (code)Jan 2024
So long, and thanks for all the Sass (code)Dec 2023
Mapping LLM embeddings in three dimensions (code)Nov 2023
Publishing on npm is weird (code)Oct 2023
TomBot2000: automatically finding related posts using LLMs (code)Sep 2023
Improving SVG chart interactivity with Voronoi diagrams (svg)Aug 2023
What if minesweeper kept getting harder? (code)May 2023
Adding client side search to a static site (code)Oct 2022
Oblique Strategies via npx (code)Feb 2022
Improving my Wordle opening words using simple node scripts (code)Oct 2021
Humility in software development (career)Sep 2021
Podcasting: what gear do you need? (podcasting)Jul 2021
Line graphs with React and D3.js (svg,audio)Apr 2021
Learning (and doing) in public (productivity)Mar 2021
Falling back in love with music (audio)Feb 2021
The year of writing (productivity)Jan 2021
RSS in 2021 (yes, it's still a thing) (code)Dec 2020
Building a delay effect with the Web Audio API (audio,code)Nov 2020
Dark mode: hard mode (code)Sent on 12th Aug, 2020
Sent on 5th Aug, 2020
Sent on 29th Jul, 2020
Sent on 22nd Jul, 2020
Sent on 15th Jul, 2020
Sent on 8th Jul, 2020
Sent on 1st Jul, 2020
Sent on 24th Jun, 2020
Sent on 17th Jun, 2020
Sent on 10th Jun, 2020
Sent on 3rd Jun, 2020
Sent on 27th May, 2020
Sent on 20th May, 2020
May 2020
Podcasts for Nerds (podcasting)Sent on 13th May, 2020
May 2020
Spiraling out of control? Open up the Bullet Journal again (productivity)Sent on 6th May, 2020
Apr 2020
Installing acoustic panels (podcasting,audio)Apr 2020
CSS Naked Day (typography)Feb 2020
Twitter Cards with Nunjucks and 11ty (code)Jan 2020
The things I use (general)Jan 2020
Static site generators: Hugo vs Jekyll vs Gatsby vs 11ty (code)Dec 2019
Rugby prediction: retrospective (sports,data)Sep 2019
Algorithmically predicting the results of the 2019 Rugby World Cup (sports,data)Aug 2019
Using world ranking to predict the results of the 2019 Rugby World Cup pool stages (sports,data)Jul 2018
Writing well is essential. Try your best to get good at it (career,code)Jun 2017
You can now install Picobel using NPM (audio,code)May 2017
Recommended Listening: my favourite podcasts (podcasting)Apr 2017
Introducing Picobel.js - an audio player you can style with css (audio)Apr 2017
I changed my site's font to Comic Sans as an April Fool. It was a disaster. (typography)Mar 2017
Living with Alexa: the problems with "voice" as an interface (internet-of-things)Mar 2017
What is a decibel, anyway? (audio)Feb 2017
Inline SVG icon sprites are (still) not scary. (svg)Feb 2017
Getting to grips with SVG markup (svg)Jan 2017
Bullet Journal Revisited (productivity)Jan 2017
Well-written HTML doesn't need any styling. Except that it does. (typography,code)Jan 2017
n-minute read: calculating an average reading speed (code)Sep 2016
You are only as good as your README (career,code)Aug 2016
Don't turn your problem into your users' problem (career)Jan 2016
Which do you choose: native app or web app? (code)Dec 2015
Notes from ThingMonk: Day Two (internet-of-things)Dec 2015
Notes from ThingMonk: Day One (internet-of-things)Aug 2015
Why doesn’t everyone have an Internet Fridge? (internet-of-things)May 2015
Getting started with inline SVG icons (svg)Sep 2014
Inspirational Web People (career)Feb 2014
Fullpage screenshots in Firefox (utilities)Feb 2014
Futura for the win (typography)Sep 2013
Simple is hard (career)Sep 2013
A bullet-journal workflow (productivity)