Writing
Engineering notes, a little teaching, and the occasional experiment. Grouped by month, newest first.
21 entries 7 months magnitude = reading time 8+ min 6–7 min under 6 min
October 2026
2 entriesHosting an agent is the hard part
An agent needs a machine it can act on freely — a sandbox or a VM. A terminal is only how you aim it, and reaching everyone means moving the machine.
Using a coding agent as an observability agent
A coding agent can be an observability agent, given one remote MCP server and a config change.
June 2025
1 entryNovember 2022
3 entriesHacktoberfest 2022
A month of open source, one small word cloud generator, and the parts of it that were not the word cloud.
Getting a subreddit's data with Python
The .json trick, a Python crawler, and the async version that pulls whole comment threads — plus the part of it that stopped working.
Measuring code similarity for Intro to Programming
Mixed zip, rar and 7z submissions, renamed archives, unicode and __MACOSX — the shell work that made JPlag usable over 481 submissions a semester.
October 2022
4 entriesGenerating anime art with Waifu Diffusion
Four prompts, four outputs, and how hard it was to tell them apart from a person's work.
Setting up Pi-hole as an ad blocker
Under thirty minutes from a blank SD card to a network-wide ad blocker on a Raspberry Pi, with the screenshots from my own setup.
How a unit's exam papers get marked
Three hundred students, five markers, one question each — and the procedures that exist so the mark a student gets does not depend on who read the paper.
Scoring sentiment in the browser
VADER is a lexicon and a set of rules for reading tone, and it fits in a worker. Paste a paragraph and get four numbers back.
October 2021
1 entryNovember 2019
2 entriesFive ways to get the min and max of an array in Java
A loop, a sort, two streams and a collections call — and the one I would actually use, plus the snippet from 2019 that throws.
A singleton and an observer, in a lucky dip machine
One machine, one inventory, and two observers that hear about every prize. The Singleton and Observer patterns on an assignment that deserves better than it usually gets.
October 2019
8 entriesNearest neighbour on a map
A Voronoi diagram turns the most common question you can ask a map into a region lookup. Two live diagrams, one of them clickable.
Promise.all, and the same requests one at a time
The Hacker News API hands you IDs, not stories. Promise.all turns three hundred round trips into one wait — and the 2019 version of this page fetched five hundred at once.
The travelling salesperson, by genetic algorithm
Thirteen US cities, a browser worker, and a genetic algorithm that gets within a few hundred miles of the optimum in twenty-one generations.
Evolving a phrase out of random letters
A genetic algorithm that starts from noise and converges on whatever string you give it — running in a worker, with every improvement plotted as it arrives.
A word cloud of Hacker News headlines
The front page of Hacker News, turned into a cloud of the words its titles keep repeating. Live, from a read-only mirror of the site.
Scoring a thread's sentiment with AFINN
AFINN rates 2,477 words from -5 to +5, which is enough to tell a positive comment from a negative one — with no model and no context.
Turning a subreddit's titles into a word cloud
The same layout the Hacker News cloud uses, fed by r/programming when Reddit answers and by text you paste when it does not.
Percentage charts for r/AmItheAsshole
The subreddit's five verdicts, counted from the comments it attracted.