Woodworking Advent Calendar

Check out my Woodworking Advent Calendar!

Posted Thu, Nov 2, 2023

Debian and Ubuntu Automatic Updates

How I set up automatic updates on laptops.

Posted Thu, Mar 9, 2023

Serving Static Files from Go

How to easily serve static files in a Go app.

Posted Tue, Mar 7, 2023

Write a Love Letter

Write a love letter by being a full stack engineer.

Posted Tue, Feb 21, 2023

Screen Scrape with Headless Chrome and Puppeteer

Screen scrape more effectively with Chrome and Puppeteer.

Posted Mon, Feb 20, 2023

2023 January Goals Review

Early review of my goals and the system to think through how well it’s working.

Posted Sat, Jan 28, 2023

2023 Goals

Goals for the new year.

Posted Mon, Jan 2, 2023

You Fool!

This post is about ethics.

Posted Fri, Dec 23, 2022

More Perl to Go Conversions

As time goes by I have less and less patience for ecosystems that demand my time. Typically this is in the form of breaking changes in either a language or the modules that language uses. This morning I ported a relatively simple tool from Perl to Go to escape this kind of tax.

Posted Sat, Nov 19, 2022

Announcing dh

I needed a tool to manage a relational database, so I built one.

Posted Mon, Jun 20, 2022

Using Tailscale for Authentication

I recently used Tailscale to add an authenticated portion to a public website, hosted via Fly.io.

Posted Thu, Jun 9, 2022

Setting Up Vim with an LSP for Scala

I write Scala a bunch these days at work. The language (or maybe the Spark culture) really wants you to use an IDE. As much as I tried to use IntelliJ I just can’t bring myself to make such a big switch. If you are interested in language servers (which typically provide autocomplete,) Vim, or specifically setting that up for Scala, read on.

Posted Tue, May 31, 2022

Go 1.18

Go 1.18 just came out, so I’m looking over the new features.

Posted Tue, Mar 15, 2022

Reliably Cross Compiling Go using Zig

Do you ever need a C library to cross compile in Go? I got something to work this week that makes me feel better about my cross-compilation setup.

Posted Sun, Mar 13, 2022

Go Generics Example

Go 1.18 will be adding Go’s version of generics pretty soon. I wanted to get a feel for how I might use them. Read on for a concrete example.

Posted Sun, Jan 9, 2022

Learning Rust with a Side Project

I spent some of my time off for the holidays learning Rust.

Posted Tue, Dec 28, 2021

Decisions and Habits

I’m building new habits to meet new goals.

Posted Mon, Dec 20, 2021

Leatherman Draw

I wrote a weird little tool to draw stuff with code. It was fun!

Posted Thu, Feb 25, 2021

Gumbo v2

Here’s a major update of my original gumbo recipe.

Posted Sat, Feb 20, 2021

Stateless Notes

I made my stateless, Raspberry Pi hosted notes service have an in-memory SQLite for more features and better performance.

Posted Sat, Jan 30, 2021

Personal Monorepo

Today I completed my long-standing project to merge all of my open source Go repositories into a single repo.

Posted Sat, Jan 23, 2021

Steambox 2021: even faster

After Saturday’s work I got my steambox starting even faster.

Posted Mon, Jan 18, 2021

steambox 2021 Edition

I made my steambox start up faster and fixed a race condition with Perl.

Posted Sat, Jan 16, 2021

Dropbox Longpoll Bugs

I fixed a subtle bug in my dropbox client’s longpoll implementation.

Posted Sat, Jan 9, 2021

Embedding Lua in Go

I embedded lua in my leatherman so that I could add even weirder features without too much effort. It was awesome.

Posted Thu, Jan 7, 2021

Useful Vim Features

Some friends and I collaborated on this post about some interesting features in vim.

Posted Mon, Oct 26, 2020


I was part of a convergence of changes that ended up causing us to lose 30% of important logs. The full investigation involved application, log pipeline, and Kubernetes integration. Read how it happened.

Posted Mon, Sep 21, 2020

Mixer Post Mortem

For about 13 minutes on Cinco de Mayo the Mixer had a near total outage. The root cause was a panic due to an out of range access of a slice.

Posted Wed, May 13, 2020

Improve Git Diffs for Structured Data

I made diffs of some structured data more useful.

Posted Fri, May 8, 2020

Go Subtest Tips

I recently learned more detail about subtests in Go.

Posted Tue, May 5, 2020

Adding Autoreload to srv

About a week ago I added automatic reload to my little web server.

Posted Mon, Apr 27, 2020

context Deadlines in Go

I recently learned more about contexts in Go.

Posted Tue, Apr 7, 2020

I Avoid Named Pipes

I recently, finally decided to (almost) never use named pipes anymore.

Posted Tue, Mar 24, 2020

Zine: Software for Managing Notes

I recently completed a major new iteration of my custom notes management software.

Posted Thu, Feb 27, 2020

Testing Perl Clients and Go Servers

At work I recently built what would normally be forced to be an integration test in a unit test. It’s awesome.

Posted Fri, Feb 14, 2020

Calculators, Binary Hybrids, and UNIX History

I wanted to add a calculator to my leatherman but I never ever want to write a parser. The following is what ensued.

Posted Mon, Feb 10, 2020

My Editing Workflow

I recently considered that my day-to-day editing cycle might be of some interest, so here it is.

Posted Mon, Feb 3, 2020

Weird Hobby: Scraped Git Histories

I have discovered a silly new hobby: creating git repos of the data in certain websites.

Posted Tue, Jan 28, 2020

Five Hundredth!

This is my five hundredth post on this blog!

Posted Mon, Jan 6, 2020

Goals for 2020

It’s already a few days into 2020 so I’m gonna keep this brief: Goals for 2020!

Posted Sat, Jan 4, 2020

Writing a Go Linter

I wrote a little linter for Go. Here’s why and how.

Posted Mon, Dec 30, 2019

The Everyday Magic of Simplification

I recently simplified the system I use for RSS.

Posted Sat, Dec 14, 2019

Brute Force Image Recovery

Last week was the ZipRecruiter holiday party. As usual they had a photobooth (two in fact!) Catherine and I took three sets of pictures but I didn’t get an email for one of the three. Read on to find out how I got them.

Posted Mon, Nov 25, 2019

Go's reflect packages vs types package

I’m attempting to migrate some code that uses reflect to instead use go/types and I have some thoughts.

Posted Tue, Oct 22, 2019

Go's Reflect Package is Mostly Read-Only

Today, after playing with the reflect package I discovered that you can’t use it as a construction kit.

Posted Thu, Oct 17, 2019

Direct Observation with Go Tooling

Today I investigated a hunch using some nice tooling built into the Go compiler.

Posted Thu, Oct 10, 2019

Performance; git, go, and otherwise

I recently made a change that made some code non-trivially faster. Also I think most of the performance related advice out there is bad.

Posted Fri, Sep 13, 2019

Go Debris (2019)

Go 1.13 is out and the Gophercon 2019 videos have been released; I have thoughts on both.

Posted Mon, Sep 9, 2019

Ordering Green Coffee with Go and jq

I roast my own coffee and order the green beans from sweetmarias. I automated a big chunck of that. Here’s how.

Posted Wed, Sep 4, 2019

Distraction Free Slack

I have gotten to the point where I can almost use Slack with zero distractions…

Posted Mon, Aug 19, 2019