Writing
macOS Launch Agents have a minimal PATH. Here’s how to stop playing whack-a-mole every time you add a new tool.
Getting Caddy and Tailscale to serve multiple local apps on reboot without thinking about it.
I made a warm, earthy theme for Zed. It took exactly a month to get merged.
I built a GitHub CLI extension for engineering flow metrics. Here’s
the philosophy behind it, and two stories about what went wrong.
Serving a local HTML file over your tailnet with Caddy, Tailscale, and a macOS LaunchAgent.
What I learned building an AI job search agent as a Claude Work plugin
in three days—and why I open-sourced it instead of selling it.
What I learned building CalcMark — a calculation language embedded in markdown — in Go.
Lexers, parsers, type systems, and the tradeoffs that bit me.
I wrote an agent skill so Claude Code can use CalcMark for calculations. Then I asked Claude what was hard, and it taught me a few things about building tools for agents.
How I used compound engineering to build a real product as a solo developer.
Not “look how many commits I made” but “look at the quality and speed of
issue resolution.” The …
Using Caddy as a web server for a local file system.
I like Hugo for static web sites but I always forget how to start from from scratch without a template. This is my short guide with some handy tips and reminders.
Using a slightly nicer
curlA reminder to keep Github Actions simple and as free of logic as possible.
I spun up a couple of projects to explore two separate topics: how to implement a basic MCP server; how to use NumPy for numerical computations.
Cross-compiling Go code to WebAssembly (WASM) is really powerful.
It also produces massive files to download.
So how can we shrink this down?
Using git worktrees for the first time in local development requires some new muscle memory.
I really wanted a tiny little version of Jupyter notebooks but for personal calculations that can also
have Markdown in them. So I started chatting with my buddy, Claude, who gave me an inflated sense …
I decided to vibe code, truly putting Anthropic’s Claude CLI in the driver’s seat. It was instructive!
Overview of generative approaches to image and video generation. Includes text-to-image and text-to-video tasks.
In which I finally read some docs on what a JavaScript module is and how it made my Hugo shortcodes self contained.
Complex prompts are better handled with multi-step logical answers. Reasoning models are still an LLM, but we add reasoning before the response is provided.
I’m running Ollama on a Macbook so shifting the default location that Ollama downloads massive models to is a necessity. It’s just one environment setting away.
Week 3 is all about agents. Workflows, tools, multi-step agents, and the protcols and frameworks involved.
How I integrated D2 diagram rendering into my Hugo blog with a custom Go script
I want to set up an exit node on my Mac Mini using Tailscale. That way I can watch movies from anywhere and print stuff without being at home.
RAFT (Retrieval-Augmented Fine-Tuning) confused me when I first heard about it in a training class. It’s a technique that combines both offline fine-tuning and runtime retrieval to improve the …
How to interpret the numbers used to describe LLMs.
Part two of the AI Engineering Course, focusing on adapting exsiting LLMs with post training work. It covers Retrieval Augmented Generation (RAG) and Fine Tuning.
Using
uv instead of Anaconda environment.yml to set up a virtual environment for LLM experiments.Resources from Week 1 of the AI Engineering Course
Dependency free markdown server
Slides and recording of my presentation about how technical program management (TPM) came about at GitHub. All in context of Tuckman’s model of group development.
How two German automotive engineers got inside my head.
Or: how I learning to stop stressing out and to start solving problems.
How to write with a busy reader in mind by answering some questions.
What altitude are they at?
How can you be succinct?
Are you highlighting the important bits?
Are you being as direct as you can be?
Working with Pi-hole and a bit of
sed.I had a great chat with a college student about a career in tech. I thought I’d share some of the advice I gave them. It’s not going to change the world, but it might help someone.
Using SQLite to work with hierarchical data and learning about CTEs and data loading along the way.
Using the GitHub CLI to make authenticated and authorized download from a private repo.
Using
task as a Make alternative for your automation tasks and wonderment.Starting some micro-donations to open source developers. And a font.
Using Go and SQLite to munge YAML data for fun and profit…or for free.
Learning a few bits about SQLite that are worth noting.
Writing Markdown using VS Code
Feedback is a gift. But how do you provide feedback to someone while increasing the chance that the person can hear and maybe even act on what you’re sharing with them?
Data engineering audiocast, plus Python photos
Using
direnv to automatically handle environment variables.Using GitLFS for the first time.
JSON Schema is an old concept wrapped in a relatively new format. I learned a few things as I was defining a data model using JSON Schema.
Using Google Sheets for event planning