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
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. This isn’t news, but it’s more foundational than many might realize.
Posted Mon, Nov 12, 2018
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
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
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
We spent hours debugging a logging issue Friday and Monday. If you use UUIDs in Perl, you should read this post.
Posted Wed, Jul 25, 2018
I’ve written (and ported) some new tools and thought others might find them useful or inspiring.
Posted Tue, Jul 17, 2018
I’ve always wanted to carefully measure my activity on the computer and recently
built a tool called
make it happen.
Posted Thu, Jul 12, 2018
In my effort to port certain tools to
go I’ve authored another
Posted Thu, Jul 5, 2018
Recently at work we had a minor incident involving exhaustion of the EC2 metadata server on some of our hosts. I was able to get enough detail to delegate the rest to a team to fix the issue.
Posted Thu, Jun 21, 2018
I just wrote some code to make a (hopefully) trustworthy, shared known_hosts file for our whole company. A handy side benefit is that it also grant us hostname tab completion.
Posted Fri, Jun 1, 2018
A few weeks ago when I was reading The Go Programming Language I was reading about buffered channels and had a gut instinct that I could write some code taking advantage of them in a precise way. This was the comical code that came out of it.
Posted Mon, May 14, 2018
Over the past couple months I have had the somewhat uncomfortable realization that some of my assumptions about all programs are wrong. Read all about the journey involving Unix, C, Perl, and Go.
Posted Tue, May 1, 2018
I built a little package for loading Firefox cookies into my Go tools!
Posted Fri, Apr 20, 2018
I recently took Andrew Ng’s Machine Learning class on Coursera; here were my takeaways.
Posted Tue, Feb 27, 2018
For a little over a year at ZipRecruiter we have had some tooling that “fixes” a non-trivial amount of cronspam. Read on to see what I mean and how.
Posted Mon, Feb 26, 2018
I recently added exponential backoff to service startup. Read how here.
Posted Thu, Feb 22, 2018
I recently deleted a couple non-trivial scripts from my dotfiles and I’m proud of that.
Posted Tue, Feb 20, 2018
I recently automated yet another part of my disk usage tool. Read about it here.
Posted Mon, Feb 19, 2018
Yesterday I wanted to graph some data by date but I didn’t want to mess with spreadsheet software or other graphing libraries. I reached for gnuplot after hearing good things over the years. The results were great.
Posted Fri, Feb 16, 2018
I recently stumbled upon a pattern that motivates me to write little scripts in Go instead of my normal default. I was surprised at some of the benefits.
Posted Fri, Jan 12, 2018
I have used Hugo, the blog engine this blog runs on top of, more and more lately for less and less typical use cases. Hopefully this post will inspire others in similar ways.
Posted Tue, Jan 2, 2018
I recently came up with the most satisfying way to edit registers in Vim I’ve ever seen. I hope you like it as much as I do.
Posted Fri, Oct 20, 2017
Posted Mon, Oct 16, 2017
Recently at ZipRecruiter I implemented a tool to ensure that we know if some service is crashlooping. It was really easy thanks to Upstart but it took almost a whole day to get just right.
Posted Mon, Sep 25, 2017
Yesterday I spent a little over an hour finally figuring out how to detect a file based on its contents in vim. It’s pretty easy!
Posted Wed, Sep 20, 2017
Recently my coworker Andy Ruder was complaining that he often reached for grep when filtering JSON, and I offered to give him some tips. This post is an expansion of what I told him.
Posted Mon, Sep 18, 2017
I use Vim quite a bit and fairly heavily, so I run into a good amount of bugs. I’ll share a couple tricks I’ve learned that help debug vim.
Posted Fri, Sep 8, 2017
Recently I spent time figuring out why sending items to our message queue often took absurdly long. I am really pleased with both my solutions and my methodogy, maybe you will be too.
Posted Sun, Aug 20, 2017
This post is the seventh in my series about supervisors and I’m discussing some ideas that I’ve had while writing this series.
Posted Wed, Aug 2, 2017
This post is the sixth in my series about supervisors. I’ll spare you the recap since it’s getting silly at this point. This post is about readiness protocols.
Posted Mon, Jul 31, 2017
This post is the fifth in my series about supervisors. The first two posts were about traditional supervisors. The third was about some more unusual options. The fourth was about the current most popular choices. This post is about some of the unusual trends I’ve noticed during my three year long obsession with supervisors.
Posted Wed, Jul 26, 2017
This is the latest in my apparently unending series about supervisors. While the first two posts were about “traditional supervisors,” the third was about a few odd variants, both good and bad. This post is about the current reigning champions: Upstart and systemd.
Posted Mon, Jul 24, 2017
This post is a continuation of my series about suprevisors. The first post was about the most basic supervisors. The second post was about some more advanced, but still basically traditional supervisors. This post is about some more unusual options.
Posted Fri, Jul 21, 2017
On Monday I began a series about supervisors. It
mostly covered the most basic Supervisors out there,
perp. This post will cover the more
advanced generation, which includes
Posted Wed, Jul 19, 2017
Posted Mon, Jul 17, 2017
I say “station” all the time and people never seem to know why. Here’s why.
Posted Fri, Jul 14, 2017
At my talk at YAPC a few weeks ago I discussed some technology at ZipRecruiter that’s called the read/write splitter (or more often the rwsplitter or simply the splitter.) I have intended to write about this for a long time and the fact that I was unable to refer to a blog post for the talk finally convinced me that I must.
Posted Wed, Jul 12, 2017
A year ago, when I was on paternity leave, I decided that I needed to be better at time management. I think that my inspiration was simply the recommendation of the book, Getting Things Done by Alfie John. Having used the GTD system for about a year, I feel comfortable writing about it.
Posted Mon, Jul 10, 2017
A couple of weeks ago I went to YAPC::NA 2017. I already wrote about my own talk, but I still want to highlight a few other talks that I think people should see.
Posted Fri, Jul 7, 2017
I did a talk at YAPC this year, and while I am really proud of it and think that it went well, I think it could have gone better. This post is a retrospective on what I could do better next time.
Posted Wed, Jul 5, 2017
I started this blog ten years ago today!
Posted Mon, Jul 3, 2017
On Monday I wrote about using Amazon Athena from Perl. That’s only step one though, because often I find myself needing to dig further.
Posted Wed, Jun 14, 2017
At ZipRecruiter we write “a lot” of logs, so actually looking at the logs can be a lot of work. Amazon Athena provides a nice solution, and recently an API was (finally) provided to allow us to use it in our code. I wrote some code recently to leverage the API.
Posted Mon, Jun 12, 2017
On Monday I wrote about how QuickFix and friends are slow. I was legitimately chasitized on reddit for giving up too soon in trying to find a solution, so I did some more digging.
Posted Fri, May 26, 2017
Last time I blogged about vim sessions I showed a cool pattern for making sessions more generally useful. There was a bug in my example that hamstrung the technique, so I’ll be sharing and updated version here.
Posted Wed, May 24, 2017
I have recently been working on honing a lot of my tools, and a coworker, Andrew Ruder, mentioned using Denite.nvim for selecting more than simple directories. I decided to investigate using it instead of builtin file selection mechanisms. I was surprised at the result.
Note: while this post is still worth looking at for comparing how you can define various lists for vim, the performance issues turned out to be unrelated. See my new post for more details.
Posted Mon, May 22, 2017
After using the aptly named AwesomeWM for nearly five years I have switched back to XMonad.
Posted Fri, May 19, 2017
I wrote a plugin on Friday to making orienting yourself in a large piece of code
easier. The short version is that with the new plugin
lost.vim you can call
:Lost or use the
gL mapping to find your bearings.
Posted Mon, May 15, 2017