<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Dustin Lee</title><link>/posts/</link><description>Recent content in Posts on Dustin Lee</description><generator>Hugo</generator><language>en-us</language><copyright>Dustin Lee</copyright><lastBuildDate>Tue, 24 Mar 2026 15:00:00 +0000</lastBuildDate><atom:link href="/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Why Maths for Machine Learning?</title><link>/posts/why-maths-for-machine-learning/</link><pubDate>Tue, 24 Mar 2026 15:00:00 +0000</pubDate><guid>/posts/why-maths-for-machine-learning/</guid><description>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.</description></item><item><title>Regression and Decision Boundaries</title><link>/posts/regression-and-decision-boundaries/</link><pubDate>Tue, 24 Mar 2026 14:00:00 +0000</pubDate><guid>/posts/regression-and-decision-boundaries/</guid><description>Part 5 of the ML Fundamentals series. Linear and polynomial regression, Ridge and Lasso regularisation, logistic regression, the Perceptron, and visualising decision boundaries — all with infrastructure examples.</description></item><item><title>Classification — KNN, Naive Bayes, Decision Trees</title><link>/posts/classification-knn-bayes-trees/</link><pubDate>Tue, 24 Mar 2026 13:00:00 +0000</pubDate><guid>/posts/classification-knn-bayes-trees/</guid><description>Part 4 of the ML Fundamentals series. Three foundational classification algorithms — how they work, when to use each, and hands-on implementation with scikit-learn using infrastructure examples.</description></item><item><title>Python ML Toolkit</title><link>/posts/python-ml-toolkit/</link><pubDate>Tue, 24 Mar 2026 12:00:00 +0000</pubDate><guid>/posts/python-ml-toolkit/</guid><description>Part 3 of the ML Fundamentals series. Setting up a Python ML environment, and practical workflow patterns with Pandas, NumPy, Matplotlib, Scikit-learn, and TensorFlow.</description></item><item><title>Data Pre-processing and Evaluation</title><link>/posts/data-preprocessing-and-evaluation/</link><pubDate>Tue, 24 Mar 2026 11:00:00 +0000</pubDate><guid>/posts/data-preprocessing-and-evaluation/</guid><description>Part 2 of the ML Fundamentals series. Cleaning messy data, selecting features, splitting datasets, and measuring whether your model is actually any good.</description></item><item><title>What Is Machine Learning?</title><link>/posts/what-is-machine-learning/</link><pubDate>Tue, 24 Mar 2026 10:00:00 +0000</pubDate><guid>/posts/what-is-machine-learning/</guid><description>Part 1 of the ML Fundamentals series. What machine learning actually is, the three main learning paradigms, and why it matters for infrastructure, automation, and ops.</description></item><item><title>Managing a NixOS Fleet with Claude Code</title><link>/posts/managing-nixos-fleet-with-claude-code/</link><pubDate>Mon, 16 Mar 2026 10:00:00 +0000</pubDate><guid>/posts/managing-nixos-fleet-with-claude-code/</guid><description>Using Claude Code as an infrastructure co-pilot: a dedicated service account, scoped sudo, and a workflow for managing NixOS hosts through conversation.</description></item><item><title>Managing NixOS with Git: A Declarative Infrastructure Workflow</title><link>/posts/managing-nixos-with-git-a-declarative-infrastructure-workflow/</link><pubDate>Thu, 05 Mar 2026 04:35:45 +0000</pubDate><guid>/posts/managing-nixos-with-git-a-declarative-infrastructure-workflow/</guid><description>&lt;div class="paragraph"&gt;
&lt;p&gt;NixOS is unlike any other Linux distribution. Your entire system — packages, services, users, firewall rules, filesystems — is described in configuration files. Change a file, rebuild, and your system matches exactly what you declared. Pair this with Git, and you get version-controlled infrastructure that you can roll back, branch, diff, and share across machines.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;This post walks through how a multi-host NixOS setup fits together, how Git integrates into the workflow, and how to use both effectively.&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>Building Gatehouse: A REST API for OpenBSD's PF Firewall</title><link>/posts/building-gatehouse-api/</link><pubDate>Mon, 23 Feb 2026 16:50:00 +1000</pubDate><guid>/posts/building-gatehouse-api/</guid><description>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 — from feature toggles and device blocking to pflog analytics and cron management.</description></item><item><title>Archiving Claude Code Conversations to Hugo</title><link>/posts/archiving-claude-conversations-to-hugo/</link><pubDate>Thu, 19 Feb 2026 00:00:00 +0000</pubDate><guid>/posts/archiving-claude-conversations-to-hugo/</guid><description>&lt;p&gt;Every Claude Code session is a JSONL file sitting in &lt;code&gt;~/.claude/projects/&lt;/code&gt;. Across 17 projects I had 156 sessions — debugging logs, architecture decisions, implementation plans — all invisible unless you go digging through raw JSON. So I built a Python script that batch-converts them into browsable Hugo content, grouped by project.&lt;/p&gt;</description></item><item><title>Shortcode &amp; Theme Showcase</title><link>/posts/shortcode-showcase/</link><pubDate>Thu, 19 Feb 2026 00:00:00 +1100</pubDate><guid>/posts/shortcode-showcase/</guid><description>&lt;h2 id="callout-shortcode"&gt;Callout Shortcode&lt;/h2&gt;
&lt;p&gt;Three variants: &lt;code&gt;alert&lt;/code&gt;, &lt;code&gt;warning&lt;/code&gt;, and &lt;code&gt;tip&lt;/code&gt;.&lt;/p&gt;
&lt;div class="callout callout-alert"&gt;
 &lt;div class="callout-title"&gt;Alert&lt;/div&gt;
 &lt;strong&gt;Alert callout&lt;/strong&gt; — Use this for important information that demands attention. This is the default type if none is specified.
&lt;/div&gt;

&lt;div class="callout callout-warning"&gt;
 &lt;div class="callout-title"&gt;Warning&lt;/div&gt;
 &lt;strong&gt;Warning callout&lt;/strong&gt; — Use this for cautionary notes. Something might break if you ignore this.
&lt;/div&gt;

&lt;div class="callout callout-tip"&gt;
 &lt;div class="callout-title"&gt;Tip&lt;/div&gt;
 &lt;strong&gt;Tip callout&lt;/strong&gt; — Use this for helpful suggestions. For example: run &lt;code&gt;make help&lt;/code&gt; to see all available targets.
&lt;/div&gt;

&lt;hr&gt;
&lt;h2 id="note-shortcode"&gt;Note Shortcode&lt;/h2&gt;
&lt;p&gt;Three variants: &lt;code&gt;editor&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, and &lt;code&gt;discussion&lt;/code&gt;. Each accepts an optional date parameter.&lt;/p&gt;</description></item><item><title>Makefiles as Your Project Interface</title><link>/posts/makefiles-as-project-interface/</link><pubDate>Wed, 18 Feb 2026 12:00:00 +1100</pubDate><guid>/posts/makefiles-as-project-interface/</guid><description>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, Terraform wrappers, and smart deploys across a dozen repos.</description></item><item><title>Documenting AI Conversations in Hugo</title><link>/posts/ai-conversations-shortcode/</link><pubDate>Wed, 18 Feb 2026 00:00:00 +0000</pubDate><guid>/posts/ai-conversations-shortcode/</guid><description>&lt;p&gt;I find myself asking AI models questions constantly while working — debugging, architecture decisions, quick syntax lookups. Most of that knowledge disappears into chat history. So I built a Hugo shortcode to embed those conversations directly into blog posts.&lt;/p&gt;</description></item><item><title>GitLab Slash Commands for Claude Code</title><link>/posts/gitlab-slash-commands-for-claude-code/</link><pubDate>Wed, 18 Feb 2026 00:00:00 +0000</pubDate><guid>/posts/gitlab-slash-commands-for-claude-code/</guid><description>&lt;p&gt;I&amp;rsquo;ve been using &lt;a href="https://docs.anthropic.com/en/docs/claude-code"&gt;Claude Code&lt;/a&gt; as my daily driver for development work on a self-hosted GitLab instance. One of its best features is &lt;strong&gt;slash commands&lt;/strong&gt; — custom prompts that you can invoke with &lt;code&gt;/command&lt;/code&gt; from the CLI. I&amp;rsquo;ve built a set of GitLab-focused commands that have become muscle memory.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what I&amp;rsquo;m running and why they&amp;rsquo;ve been useful.&lt;/p&gt;</description></item></channel></rss>