Today I Learned

Short snippets of knowledge that my future self will find useful. Borrowed from Simon Willison’s TIL concept. Check out the blog for longer form writing.

Global Map Data from Overture til —
Global OSM map data is even easier to get with Overture.
Cookie-free analytics with GoatCounter on Hugo til —
The two Hugo template gates that keep dev-server pageviews out of production analytics.
Up and running with Pi til —
Instructions and tips for getting the pi.dev agent harness running on a Mac with 8GB of RAM.
Tooling to build learning micro-sites til —
Train My Brain is a Claude Code plugin that builds micro-sites for personal learning. Have an esoteric learning need? Spin up a site—modules, exercises, and a glossary, served locally and ready …
Markdown to PDF on Mac til —
How to convert a Markdown file to a PDF with pleasant fonts and great footnotes using pandoc and TeX.
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.
Caddy + Tailscale for Remote File Serving til —
Serving a local HTML file over your tailnet with Caddy, Tailscale, and a macOS LaunchAgent.
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.
Caddy File Server til —
Using Caddy as a web server for a local file system.
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!
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.
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.
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.
Interpret LLM Model Size til —
How to interpret the numbers used to describe LLMs.
Previewing Markdown Files with mdserve til —
Dependency free markdown server
Whitelisting Pi-hole til —
Working with Pi-hole and a bit of sed.
GitHub CLI til —
Using the GitHub CLI to make authenticated and authorized download from a private repo.
OSS donations, fonts til —
Starting some micro-donations to open source developers. And a font.
SQLite schema til —
Learning a few bits about SQLite that are worth noting.
VSCode for Markdown til —
Writing Markdown using VS Code
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.
2021-08-18 til —
Using Google Sheets for event planning
JS Dates are Weird til —
In which type coercion and JavaScript magic bite me in the…date math.
awk-ing til —
Some awk for text file munging
OSM and Python til —
Using Python to work with addresses and Open Street Map networks.
Wardley Maps til —
Simon Wardley figured out how to make maps that support strategy by balancing user-facing visibility and technical evolution from innovation to commodity.
2021-05-29 til —
Trying svelte-kit and Tailwind CSS
2021-05-15 til —
ICU for Python head-scratcher solved
2021-05-05 til —
Getting Python running on fresh Linux
Main not Master, and Python formatting til —
Default git branch name and Python formatting
Leadership memo and role definitions til —
PM and Eng leadership
Squishing PNGs til —
PNG squishing and static sites on GCS
Pangeo for geospatial compute til —
Learning about Pangeo and friends
TIL Cloud migration and terraform til —
From GCP to Terraform
Visidata as a multi-purpose tool for data exploration and analysis til —
OSS Licenses and Richard Feynman til —
How to Make a Hugo Blog from Scratch til —