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

Extensibility in Go

Recently I’ve come across some code that allows extensibility in some ways that are limiting.

Posted Wed, Aug 14, 2019

Generics in Go, via Contracts

The newest Contracts proposal was published just a few days ago. I read it in full and have a few thoughts.

Posted Sat, Aug 3, 2019

Making My Notes Easier to Reference

I made a man-like tool to reference my notes. It’s great.

Posted Mon, Jul 15, 2019

The Tyranny of Easy Things

I have some thoughts about personal time management.

Posted Tue, Jul 9, 2019

Nesting Middleware in Go

I recently, finally, figured out how to properly nest middleware in Go.

Posted Mon, Jul 8, 2019

Unreliable Cronjobs

At work we’ve been working on monitoring our cronjobs better; armed with some of the knowledge of how to do this I have made some incredibly unreliable cronjobs much more reliable.

Posted Tue, Jun 25, 2019

Productive Weekend

I got a bunch of random stuff done this weekend.

Posted Mon, Jun 17, 2019

AwesomeWM Agenda

I built a neat little widget for AwesomeWM that shows my agenda beneath my calendar.

Posted Tue, Jun 11, 2019

Getting Carried Away

This weekend I spent probably ten hours trying to make something work a hard way and Monday at work Rob pointed out a solution that worked in about five minutes.

Posted Mon, Jun 10, 2019

Introducing Charitable: XMonad-like Tag Management for AwesomeWM

I am announcing a library for AwesomeWM that provides XMonad-like tag management.

Posted Wed, Jun 5, 2019

Code Search for Go

For a long time I’ve been disappointed by github’s code search functionality and the disappearance of other tools that used to do the same thing. This weekend I came up with a scrappy solution that meets my needs.

Posted Mon, Jun 3, 2019

go/types package

This past weekend I spent some time playing with the go/types package. It was pretty cool!

Posted Tue, May 21, 2019

AwesomeWM II

I just switched back to AwesomeWM. I used AwesomeWM from 2012 to 2017, so this almost feels like a relief.

Posted Mon, May 20, 2019

Stupid Default Alerts for cronjobs

Today I whipped up an initial default set of cronjobs for all of our teams at ZipRecruiter. It was almost trivial and will get most teams started on at least not-terrible alerting. Neat.

Posted Wed, May 15, 2019

Deploying to AWS Lambda with ZR CI/CD

On Friday I got started on a very basic set of tools to deploy code to lambda easily.

Posted Tue, May 14, 2019

Leatherman: Using `go generate`

This weekend I updated the leatherman’s code to be a little more automated, using go generate and some nice parsing tooling.

Posted Mon, May 13, 2019

The Go Errors Proposal

Last week I sorta dove into the proposed interfaces for errors that will probably come out with Go 1.13. This is my experience.

Posted Wed, May 8, 2019