All Posts
A prompt pattern for working an epic to completion
What 19 uses of Claude Code's /goal command taught me about pointing an agent at an epic: six ingredients that separate finished runs from stalled ones.
Read postBuilding My Own AI-Native Cloudflare Hosted Project Management Tool
Why I built an MCP-native project management tool on Cloudflare Workers.
Read postGuess the mark: a Solent racing-marks quiz
I built a browser game for learning the Solent racing marks: a nautical chart, a highlighted buoy, and a multiple-choice question against the clock.
Read postBermuda sailing forecasts
Bermuda's weather for sailors: the subtropical synoptic picture, how to read the forecast models, and the live observations — with the sources I rely on.
Read postFrom workout planning to a Typst package
A small Typst package that turns a year and month into a grid you can write on, built for monthly workout-planning sheets and submitted to Typst Universe.
Read postWing foil sizing from first principles
A wing-foil gear calculator that shows its working: float, wing-in-air and foil-in-water joined into one physical model, with the equations on show.
Read postContext Is All You Need: How Self-Improving Agents Learn From Their Mistakes
Most AI agents forget everything between sessions. Self-improving agents accumulate context instead; this post treats context as the abstraction that allows it.
Read postBuilding a Knowledge Graph for My Blog
How I built an interactive knowledge graph linking blog posts by semantic similarity and shared tags, using embeddings, NER and D3 force-directed layouts.
Read postOWASP Top 10 for LLMs Applied to Defence Use Cases
The OWASP Top 10 for LLMs targets commercial applications. This post maps each vulnerability to military scenarios and the JSP 936 requirements that address it.
Read postJSP 936 Compliance Checklist for AI Suppliers
A practical guide to the MOD's Dependable AI directive, distilling the 32-page JSP 936 into the requirements suppliers must meet today.
Read postTeaching Claude to Edit Like The Economist
A Claude Code plugin that applies The Economist's editorial standards to writing: it detects weasel words, fixes passive voice and keeps dialect consistent.
Read postDecorating Christmas Trees with Group Theory
Applying Burnside's lemma and Polya's enumeration theorem to quantify the number of patterns I can choose to arrange the baubles on my Christmas tree.
Read postBuilding a Semantic Blog Post Clustering System
An automated system that finds related blog posts with embeddings and k-means clustering. It runs before the build, so recommendations cost nothing at runtime.
Read postSolving Terni Lapilli: A 2000-Year-Old Game
Applying optimisation and group theory to Terni Lapilli, an ancient version of tic-tac-toe, to model optimal play and learn mathematics I hadn't met before.
Read post
A Nobel-winning model says most UK SaaS startups aren't viable. Here's a calculator that shows why.
A calculator built on the Aghion-Howitt model says a realistic UK SaaS loses money on every customer. The model behind that verdict, and how to flip it.
Read postUnderstanding Ship Deceleration: Interactive Calculator and Mathematical Methods
How long does a ship take to stop? An interactive calculator and the hydrodynamics from first principles show that hull form and propulsion type dominate.
Read postFrom Naval Warfare to the Grimdark
I adapt a naval combat model to Warhammer 40k. Monte Carlo simulation is the most accurate, but Markov chains reveal the distributions expected values hide.
Read postDemonstrating handling Python errors with reproducible scripts
Better Python error handling with the traceback module, using uv's PEP 723 support for reproducible scripts, so production errors carry useful stack traces.
Read postQuickly checking Python dependencies
A short snippet for using
Read postuvto iterate on changing Python project dependencies.Adding goatcounter analytics to a Next.js website
How to add goatcounter analytics to a Next.js website.
Read postDebugging GKE GPU configuration
Debugging GPU configuration for PyTorch on GKE: checking that Nvidia drivers, CUDA and PyTorch agree, and that the container can actually see the GPU.
Read postLLMs on the command line
How I use large language models from the command line to automate developer tasks: code review, summarising files, extracting web pages, inspecting processes.
Read postSailing navigation in the Solent
Useful resources for sailing, specifically in the Solent.
Read postCalling Tensorflow models in Scala
Serving a TensorFlow model from Scala: exporting it to ONNX and calling it through the Java ONNX runtime, step by step, with the pitfalls and next steps.
Read postHow to use GitHub Actions to update a Jekyll blog
A GitHub Actions workflow that builds my Jekyll blog and deploys it to a Droplet with rsync, triggered by pushes to one branch and pull requests to main.
Read postHow to perform Metaprogramming in Scala
Metaprogramming in Scala with Scalameta: generating case classes from a dataset schema in a CSV file by building the abstract syntax tree directly.
Read postHow to write tests in Postgres
Writing simple tests in Postgres without requiring extra dependencies.
Read postOrg-mode and Terraform
Using org mode to generate documentation and infrastructure.
Read postOrg-mode and SQL
Literate programming with org-mode and sql.
Read postHow to Safely Upsert DataFrames into Postgres
A Python script that upserts Pandas DataFrames into Postgres with psycopg2, building the SQL safely against injection and batching writes with execute_batch.
Read postClassifying data with Python
Using scikit-learn to build a machine-learning pipeline that compares how well different classifiers predict the movement of a stock price.
Read postCalculating covariance matrices with Python
I wanted to use lower level linear algebra constructs in Python to calculate a covariance matrix.
Read postHow to reduce the memory used by Pandas DataFrames
A script illustrating how the memory usage of a pandas DataFrame can be reduced through altering data types.
Read postUseful Postgres techniques
Some notes on useful SQL commands and when they might be useful.
Read postWhen should you use the JSONB type in Postgres?
A review of different sources on when JSONB is suitable for use.
Read postLearning about data science
Useful resources for learning about data science.
Read postReconstructing a point set from a Euclidean Distance Matrix
Recovering point locations from vectors.
Read postA review of Matrix Methods in Data Analysis
A review of the MIT 18.065 Spring 2018 opencourseware course, instructed by Gilbert Strang.
Read postHow to practice for coding interviews
Some resources that I use to practice for passing coding interviews.
Read postNumerical Linear Algebra Cookbook
A review of numerical linear algebra for machine learning.
Read postLinear Algebra for Data Science Cookbook
A review of mathematical concepts helpful for data science.
Read postUncertainty analysis literature review
A review of the literature on uncertainty and sensitivity analysis when applied to optimisation models.
Read post