Writing

launchd PATH whack-a-mole til
macOS Launch Agents have a minimal PATH. Here’s how to stop playing whack-a-mole every time you add a new tool.
Caddy and Tailscale on reboot til
Getting Caddy and Tailscale to serve multiple local apps on reboot without thinking about it.
Pear-ish theme for Zed til
I made a warm, earthy theme for Zed. It took exactly a month to get merged.
gh-velocity: flow metrics for work in GitHub blog
I built a GitHub CLI extension for engineering flow metrics. Here’s the philosophy behind it, and two stories about what went wrong.
Caddy + Tailscale for Remote File Serving til
Serving a local HTML file over your tailnet with Caddy, Tailscale, and a macOS LaunchAgent.
Building the 'Jobs For Me' Agent blog
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.
Building a language in Go blog
What I learned building CalcMark — a calculation language embedded in markdown — in Go. Lexers, parsers, type systems, and the tradeoffs that bit me.
Teaching agents to use CalcMark til
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.
Compound engineering blog
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 …
Caddy File Server til
Using Caddy as a web server for a local file system.
Create a Hugo Site from Scratch blog
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.
httpie for JSON data til
Using a slightly nicer curl
Keep Github Actions Simple til
A reminder to keep Github Actions simple and as free of logic as possible.
MCP and NumPy til
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.
Shrinking output from Go WebAssembly til
Cross-compiling Go code to WebAssembly (WASM) is really powerful. It also produces massive files to download. So how can we shrink this down?
Git worktrees for local development til
Using git worktrees for the first time in local development requires some new muscle memory.
Audaciously deciding to write a new language til
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 …
uv and Jupyter Best Friends til
In which Claude Makes a Map til
I decided to vibe code, truly putting Anthropic’s Claude CLI in the driver’s seat. It was instructive!
Week 5: Image and Video Generation blog
Overview of generative approaches to image and video generation. Includes text-to-image and text-to-video tasks.
JS Modules and Refactoring Hugo Shortcodes til
In which I finally read some docs on what a JavaScript module is and how it made my Hugo shortcodes self contained.
Week 4: Thinking and Reasoning Models blog
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.
Moving Ollama Models to a Different Disk til
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: Agents blog
Week 3 is all about agents. Workflows, tools, multi-step agents, and the protcols and frameworks involved.
D2 Diagram Rendering in Hugo til
How I integrated D2 diagram rendering into my Hugo blog with a custom Go script
Tailscale Exit Node on Mac Mini til
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 for RAG blog
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 …
Interpret LLM Model Size til
How to interpret the numbers used to describe LLMs.
Week 2: Adapting LLMs blog
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.
uv for LLM Experiments blog
Using uv instead of Anaconda environment.yml to set up a virtual environment for LLM experiments.
Week 1: LLM Foundations blog
Resources from Week 1 of the AI Engineering Course
Previewing Markdown Files with mdserve til
Dependency free markdown server
TPM Journey at Github blog
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.
Slice by Slice blog
How two German automotive engineers got inside my head. Or: how I learning to stop stressing out and to start solving problems.
Altitude, Brevity, Contrast, and Directness blog
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?
Whitelisting Pi-hole til
Working with Pi-hole and a bit of sed.
Pay It Forward blog
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.
Tracking program investments in SQLite blog
Using SQLite to work with hierarchical data and learning about CTEs and data loading along the way.
GitHub CLI til
Using the GitHub CLI to make authenticated and authorized download from a private repo.
Task for automation blog
Using task as a Make alternative for your automation tasks and wonderment.
OSS donations, fonts til
Starting some micro-donations to open source developers. And a font.
SQLite and Go App blog
Using Go and SQLite to munge YAML data for fun and profit…or for free.
SQLite schema til
Learning a few bits about SQLite that are worth noting.
VSCode for Markdown til
Writing Markdown using VS Code
Giving Actionable Feedback blog
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?
Python, SQL, and data eng til
Data engineering audiocast, plus Python photos
.env file, tmux, and direnv til
Using direnv to automatically handle environment variables.
Git large file storage til
Using GitLFS for the first time.
Learning JSON Schema blog
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.
2021-08-18 til
Using Google Sheets for event planning