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

The Easiest Way to Use Go from Source

Recently I saw someone suggest using the unreleased version of Go, without the magically easy way to do it. Here’s how.

Posted Fri, May 3, 2019

A Custom Supervisor to Solve Weird Problems

Tuesday at work I finished work on a very specialized supervisor that I started on Monday.

Posted Thu, Apr 25, 2019

uBlock Origin for a More Civilized Web

I set up some dynamic uBlock filters to fix a broken website.

Posted Wed, Apr 17, 2019

Prometheus cloudwatch-exporter Examples

Today I spent a few hours figuring out how to integrate Prometheus with AWS.

Posted Mon, Apr 15, 2019

Lag from Timers in Go

I noticed that timers in Go aren’t perfect.

Posted Thu, Apr 11, 2019

Prometheus Conveniences

At ZipRecruiter we are working towards migrating to a Prometheus as a more modern monitoring solution. I have found it pretty pleasant, so far.

Posted Wed, Apr 10, 2019

Learning Day: Recovery

This weekend I did one of my learning days but instead of my preferred aggressive pace I took it a little easier.

Posted Mon, Apr 8, 2019

Optimizing my Workflow for Go

I spent about four hours programming on a plane last week; thanks to good tools it was fun and easy.

Posted Wed, Apr 3, 2019

Testing in Go

This weekend I wrote a bunch of “happy path” tests in Go.

Posted Thu, Mar 28, 2019

Reading Code

I enjoy reading code and want to talk about it.

Posted Tue, Mar 26, 2019