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 entries

Hosting 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 entry

Vibe coding an old blog into something I would actually use

Three days with Cursor, a janky Hugo site, and the surprising amount of guidance an AI still needs.

November 2022

3 entries

Hacktoberfest 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 entries

Generating 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 entry

Drawing a UML statechart, one question at a time

Seven versions of the same statechart for one Order object, each one a question asked of the client — and why the flawed ones are the point.

November 2019

2 entries

Five 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 entries

Nearest 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.