Thoughts

Things I’ve made and questions I’m working through. Some articles look back at things I’ve finished, but most follow whatever I’m working on at the time. Most of the older ones came over from my old blog and were tidied up along the way. I used AI to tidy them up, fixing the grammar and the structure so they’re easier to read and follow. My dyslexia made my older articles ramble quite a bit, and I think they’re much more presentable and digestible now.

2026

  1. Pipit 7 min read

    Pipit is leaving the nest

    Four months of extraction meant untangling assumptions about the host. Moving directories was only one part of making Pipit independent.

  2. Engineering practice 7 min read

    Proof-led development

    My arena fix passed its tests, then an AI-written Coq model found four more failures. Linters, papers and checked traces give me something to work against.

  3. Language design 6 min read

    Convincing myself to like sum types

    Coming from Go and C, I'm reluctant to add another construct. My compiler's homemade alternatives make me reconsider what keeping the language lean actually saves.

  4. Engineering practice 6 min read

    AI is making me a less lazy tester

    I used to put most of my effort into integration and regression tests. AI is helping me write the smaller checks I kept putting off.

  5. AI experiments 10 min read

    Joining the Jev hype

    A deliberately broken application and lots of small questions. I'm seeing what Jev can find, and where my own questions need work.

  6. Interpreter 6 min read

    Vectorise! Vectorise! Vectoriiiise!

    I try handing ordinary Go loops to compiled kernels. It feels a bit like cheating, until the memory and arithmetic dependencies need explaining.

  7. Interpreter 9 min read

    Optimising the bytecode I already have

    Reusing a calculation, removing a check and moving a read each look like small savings. Keeping the facts they depend on valid is becoming a project of its own.

  8. Language design 6 min read

    Terms and conditions apply

    Which arithmetic choices can an implementation change? I'm trying to write a contract that somebody else can follow, including the small print.

  9. Linux desktops 6 min read

    Give me Linux or give me death

    A manifest could bound the files, facts, commands and network access an operator needs, while Piko runs its management logic.

  10. asmgen 6 min read

    Some assembly still required

    A Rob Pike talk sends me towards a text generator for amd64 and arm64 assembly, with fewer stale numbers to chase when the Go changes.

2025

  1. Networking 6 min read

    Lying through my NIC

    A Linux decoy needs to lie in both directions. Getting an OS check to recognise the disguise leaves me with HTTP connections, moving clocks and the next morning to contend with.

  2. Engineering practice 4 min read

    Testing my patience

    AI proposes the cases, I edit them, then it writes the test table. Ten different inputs don't always give me ten different things to test.

  3. Interpreter 6 min read

    Keeping the dispatch loop together

    A small addition can spend much of its time being reached. Keeping dispatch inside the handlers, and calls inside assembly, changes how often the engine finds its way back.

  4. Piko 4 min read

    Bringing it all together

    GoSSR is becoming a home for the shared tools. I want templates, queries and the interpreter to work together, with one Piko release to keep them in step.

  5. Interpreter 6 min read

    When a string outlives its arena

    A saved label needs its own bytes. Other strings can still borrow from the arena, leaving me to work out which old slabs a continuing script actually needs.

  6. Interpreter 5 min read

    Don't Panic

    A deferred function can recover a panic and change a named result to 42. The interpreter must preserve that route back to the caller.

  7. Interpreter 8 min read

    The variables are dead, Dave

    Lending each call a region of the arena keeps returns cheap. Then a pair of closures needs a variable to outlive the call that declared it.

  8. Application tools 7 min read

    A penny for my types

    We started the client's quoting tool with integer pence. Keeping fractional prices and transaction currencies is giving the money type more to do.

  9. Language design 11 min read

    It's arrays all the way down

    Trees, graphs and nested lists can live in arrays. I'm exploring their access costs and a way to keep their relationships attached to the types.

  10. Language design 8 min read

    Keep the data moving

    Carry one tile through the calculation, then take the next. A conditional that needs a full array puts an intermediate back into memory.

  11. Language design 6 min read

    When the graph knows a value is finished

    I'd like the compiler to handle a kernel's memory lifecycle. Following the readers shows when a buffer can be reused, and where the plan still needs runtime information.

2024

  1. Interpreter 8 min read

    Getting comfortable with Plan 9 assembly

    Two numbers first, then a slice. I work through the registers, punctuation and calling boundary before asking assembly to run a larger loop.

  2. Language design 3 min read

    What if a language just didn't?

    Removing a language feature can also remove work from its runtime. Predictable lifetimes and reproducible results gave that thought experiment a direction.

  3. Interpreter 4 min read

    I’d like my live updates back

    GoSSR needs live updates, especially while I'm changing CSS. Running the page's changing Go brings an interpreter, its dependencies and another job before the client deadline.

  4. Testing 5 min read

    All that glitters is not a regression

    I want whole-output golden tests to help me refactor. Choosing an order, controlling changing inputs and keeping useful path details makes their diffs worth reading.

  5. Interpreter 4 min read

    How a tiny interpreter works

    Start with 2 + 3 * 4 and finish with fourteen. A small interpreter gives tokens, precedence and evaluation something concrete to do.

  6. Go templates 5 min read

    Putting Go in the template file

    GoSSR keeps the page's Go and template together, replacing the generated client with direct access to Go data.

  7. Application tools 5 min read

    I'm tired of maintaining the glue

    I want Go and TypeScript to agree, but the generators keep giving me more code and another tool to maintain. I'm looking for a different way to build the page.

2023

  1. SQL generation 8 min read

    Love at first SELECT

    I love writing SQL and letting sqlc do the repetitive Go. I'm trying a different arrangement for dialect rules, expression types and dynamic filters.

  2. Application tools 7 min read

    Putting up with storage

    An object store's ETag looks tempting when I need a file hash. Before I use it in a shared interface, I need to check what each provider's ETag actually guarantees.

  3. Components 3 min read

    Apparently I’m making a component format

    Templates, styles and logic were becoming strings inside JavaScript classes. Giving them named regions let the author work on a component as a whole.

  4. Linux desktops 7 min read

    Can you manage Linux desktops like servers?

    Desktops keep changing. The company describes its development setup. Resource operators inspect each machine to work out what needs installing, upgrading or repairing.

2022

  1. Video tools 6 min read

    Hot-reloading a video without restarting it

    An edit at thirty-five seconds should stay there. Component interfaces help me choose what to redraw, what to keep and how another kind of piece could fit.

  2. Video tools 6 min read

    Building a video out of folder names

    I'm trying reusable browser pieces in a video editor, with a Go worker joining the files to the player. The first timeline is a directory listing.

2021

  1. Kube.ist 4 min read

    Why I'm building Kube.ist

    Kubernetes supplies the cluster. I still need traffic, certificates, images and a way to notice when an application is unhappy.

  2. Kube.ist 6 min read

    Making GitOps feel more like Terraform

    An application description needs more than readable syntax. Borrowing HCL helped me work out which parts of a configuration language I wanted to own.

2020

  1. Web components 6 min read

    Web components are worth betting on

    A pill today, a chart when I open it. Browser components and QUIC make me wonder how much of an application needs to arrive together.

  2. Kube.ist 5 min read

    A platform is like an ogre; it has layers

    I separate what needs to be ready first from what should survive an update. An application change should leave its data and underlying network alone.

2019

2018

  1. Deployment 4 min read

    Can I upgrade without downtime?

    I revisit the country-and-airport problem to learn deployment, keeping the old version serving while its replacement gets ready.

2017

  1. Country search 5 min read

    zimb means Zimbabwe

    The fuzzy-search bonus gave me a chance to reuse Sound of Jersey work. The assessment got me the Lunatech job, and a move to the Netherlands.

  2. Sound.je 2 min read

    Sound of Jersey

    The music site has users and assistant moderators. Now I'm sharing the code too.

2016

  1. Alien Escape 1 min read

    Alien Escape

    The hackathon is over. I can go back and sort out the bits I rushed.

2014

2013

2012

  1. Early projects 1 min read

    NestedBird

    A community site for local bands that I kept building from 2012 to 2016.

2011

  1. Early projects 2 min read

    The long way round

    Life is full of detours, it helps if you learn to smell the flowers along the way.

2010

  1. Early projects 1 min read

    Empire and a world builder

    An unfinished strategy game and a separate world editor for an RPG, both in C++.

  2. Early projects 1 min read

    X Hunter

    A college menu-system assignment that I turned into a C# console game.

  3. Early projects 2 min read

    A* pathfinding

    My proudest project as a teenager was A* pathfinding in C++.

2008

  1. Early projects 1 min read

    War Arena

    My first working game, written in DarkBASIC.

2006

  1. Early projects 2 min read

    It started with RuneScape

    How a departing maths teacher, a friend who wouldn’t share and a RuneScape wanna be clone got me programming at twelve.

Back to top ↑