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

Sorting Books

I wrote a little program to sort lists of books.



Posted Thu, Mar 21, 2019

Automating Email

I just automated a couple common email tasks.



Posted Mon, Mar 18, 2019

How to Add a Subscription Service to Your Blog

I used to use a service to email subscribers updates to my blog. The service broke, but I automated my way around it.



Posted Thu, Mar 7, 2019

Fixing Buggy Haskell Programs with Go

I recently ran into a stupid bug in a program written in Haskell and found it much easier to paper over with a few lines of Go than to properly fix.



Posted Wed, Feb 27, 2019

Learning Day 2: DIY Games

Today I did my second Learning Day; the subject was DIY Games.



Posted Sat, Feb 23, 2019

Busting the Cloudflare Cache

I automated blowing the cache for this blog. Read on to see how I did it.



Posted Wed, Feb 20, 2019

graphviz describing multi-stage docker builds

I recently decided I should learn to use Graphviz more, as a great tool for making certain kinds of plots. Less than a week later a great use case surfaced.



Posted Mon, Feb 11, 2019

Amygdala

This past weekend I started re-creating a tool I used to have, using new tools, techniques, and infrastructure. The tool allows, at least, adding to my own todo list via SMS. It’s working great!



Posted Tue, Feb 5, 2019

Deploying to Kubernetes at ZipRecruiter

At ZR we are working hard to get stuff migrated to Kubernetes, and a big part of that is our cicd pipeline. We have that stable enough that I can explain the major parts.



Posted Wed, Jan 30, 2019

Full Text Search for ebooks

This past weekend I did a learning day that inspired me to try SQLite for indexing my ebooks; it worked!



Posted Mon, Jan 28, 2019

Learning Day 1: go

This is the first Learning Day Log I’m publishing, and it’s about Go.



Posted Sat, Jan 26, 2019

Go Interfaces

I did some work recently that depended on Go interfaces and I found it both straightforward and elegant.



Posted Wed, Jan 23, 2019

The Evolution of The Minotaur

I have a tool called The Minotaur that I just rewrote for the third time, and I think, maybe, it’s done.



Posted Mon, Jan 14, 2019

Self-Control on a Phone

Today I discovered that a lot of people feel alone in how they feel chained, in one way or another, to their phones. I started the fight against that recently and thought my findings might help other people.



Posted Thu, Jan 10, 2019

Updates to my Notes Linking Tools

I recently improved some of my notes tools, most especially around linking to emails.



Posted Tue, Jan 8, 2019

Goals for 2019

As many do, I am attempting to affect 2019 by picking skills to improve, subjects to learn, ways I hope to improve as a person, and then deriving (hopefully) concrete milestones to benchmark that progress.



Posted Sun, Dec 30, 2018

Self-Signed and Pinned Certificates in Go

I recently needed to generate some TLS certificates in Go and trust them. Here’s how I did it.



Posted Sun, Dec 23, 2018

Validating Kubernetes Manifests

At ZipRecruiter my team is hard at work making Kubernetes our production platform. This is an incredible effort and I can only take the credit for very small parts of it. The issue that I was tasked with most recently was to verify and transform Kubernetes manifests; this post demonstrates how to do that reliably.



Posted Tue, Dec 18, 2018

go generate: barely a framework

I’ve been leaning on go generate at work a lot lately and, when discussing it with friends, found that they had trouble understanding it. I figured I’d show some examples to help.



Posted Mon, Nov 19, 2018

Go Doesn't Have Generics

Go doesn’t have generics. This isn’t news, but it’s more foundational than many might realize.



Posted Mon, Nov 12, 2018

Go Concurrency Patterns

I’ve been spending some time the past couple of weeks playing with some of my personal Go tools. Nearly everything I did involved concurrency, for a change. I’ll document how I did it and some of the wisdom I’ve gathered from others here.



Posted Mon, Oct 22, 2018

Atomically Directory Population in Go

At work I’m building a little tool to write data from AWS Secrets Manager to a directory on disk. I wrote a little package to write the secrets atomically, because that seemed safest at the time. In retrospect just writing each file atomically probably would have been good enough. Code and discussion are below.



Posted Tue, Sep 18, 2018

GopherCon 2018

This year I went to GopherCon. This post is a grab bag of what I thought was interesting and some thoughts on this conference vs others and conferences in general.



Posted Tue, Sep 4, 2018