Posts
Why Maths for Machine Learning?
Part 1 of the Maths for ML series. What mathematics you actually need, why it matters, and a roadmap for learning it from first principles.
Regression and Decision Boundaries
Part 5 of the ML Fundamentals series. Linear and polynomial regression, Ridge and Lasso regularisation, logistic regression, the Perceptron, and visualising …
Classification — KNN, Naive Bayes, Decision Trees
Part 4 of the ML Fundamentals series. Three foundational classification algorithms — how they work, when to use each, and hands-on implementation with …
Python ML Toolkit
Part 3 of the ML Fundamentals series. Setting up a Python ML environment, and practical workflow patterns with Pandas, NumPy, Matplotlib, Scikit-learn, and …
Data Pre-processing and Evaluation
Part 2 of the ML Fundamentals series. Cleaning messy data, selecting features, splitting datasets, and measuring whether your model is actually any good.
What Is Machine Learning?
Part 1 of the ML Fundamentals series. What machine learning actually is, the three main learning paradigms, and why it matters for infrastructure, automation, …
Managing a NixOS Fleet with Claude Code
Using Claude Code as an infrastructure co-pilot: a dedicated service account, scoped sudo, and a workflow for managing NixOS hosts through conversation.
Managing NixOS with Git: A Declarative Infrastructure Workflow
NixOS is unlike any other Linux distribution. Your entire system — packages, services, users, firewall rules, filesystems — is described in configuration …
Building Gatehouse: A REST API for OpenBSD's PF Firewall
Managing PF through SSH doesn’t scale when you want phone toggles, family controls, and audit trails. Gatehouse wraps pfctl in 66 authenticated REST endpoints — …
Archiving Claude Code Conversations to Hugo
Every Claude Code session is a JSONL file sitting in ~/.claude/projects/. Across 17 projects I had 156 sessions — debugging logs, architecture decisions, …
Shortcode & Theme Showcase
Callout Shortcode Three variants: alert, warning, and tip. Alert Alert callout — Use this for important information that demands attention. This is the default …
Makefiles as Your Project Interface
Every project gets a Makefile before it gets a README. Not as a build system, but as a project interface — coloured help menus, Docker Compose lifecycle, …
Documenting AI Conversations in Hugo
I find myself asking AI models questions constantly while working — debugging, architecture decisions, quick syntax lookups. Most of that knowledge disappears …
GitLab Slash Commands for Claude Code
I’ve been using Claude Code as my daily driver for development work on a self-hosted GitLab instance. One of its best features is slash commands — custom …