Monitoring Service start/stop in Upstart

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

Content Based Filetype Detection in Vim

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

JSON on the Command Line

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

Vim Debugging

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

Investigation: Why is SQS so slow?

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

Supervisors and Init Systems: Part 7

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

Supervisors and Init Systems: Part 6

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

Supervisors and Init Systems: Part 5

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

Supervisors and Init Systems: Part 4

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

Supervisors and Init Systems: Part 3

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

Supervisors and Init Systems: Part 2

On Monday I began a series about supervisors. It mostly covered the most basic Supervisors out there, daemontools, daemontools-encore, runit, and perp. This post will cover the more advanced generation, which includes s6 and nosh.

Posted Wed, Jul 19, 2017

Supervisors and Init Systems: Part 1

In 2014 Mike Conrad, of Perl Delorean fame, did a lightning talk about supervisors, including one he wrote. It was a watershed moment for me and since then I have found supervisors interesting.

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

The Read Write Splitter at ZipRecruiter

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

Getting Things Done

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

YAPC::NA 2017 Recap

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

Scalablity, Reliability, and Performance at ZipRecruiter

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

Ten Years Behind the Screen

I started this blog ten years ago today!

Posted Mon, Jul 3, 2017

CSV Databases in Perl

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

Using Amazon Athena from Perl

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

Vim Slow Buffers

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

Vim Advanced Sessions: Corrected

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

Vim File Lists

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

Hello XMonad, Goodbye AwesomeWM

After using the aptly named AwesomeWM for nearly five years I have switched back to XMonad.

Posted Fri, May 19, 2017

lost.vim: for when you're lost in a file

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

AWS IAM at ZipRecruiter

At ZipRecruiter we use AWS for nearly all of our infrastructure, so securing our usage of AWS is important for obvious reasons. In this article I will go over some of the things that I had to do (with help) to go from “pretty insecure” to “pretty secure” with respect to AWS permissions.

Posted Thu, May 11, 2017

file-context: for when you are lost in a file

Sometimes I will edit a huge file and got confused or distracted and lose track of where in the file I am. I wrote a tool a few days ago and integrated it into vim. It’s pretty cool.

Posted Mon, May 1, 2017

Day-to-Day Tools

I have a ton of little programs I use on a day-to-day basis just to make my life easier. I figured it would be fun to share them so other people could either copy them or be inspired to make there own. I have blogged about some of these tools before and will link to the appropriate full posts when applicable.

Posted Fri, Apr 7, 2017

Converting a Slow Shell Script to golang

We have a handy little shell script at work that we can use to figure out what an IP address is. It could be an EC2 instance, or someone’s laptop, or a few other random things. I’ve been using it a lot lately and got annoyed that it was so slow. I ported it to Go over the weekend and wanted to share my experience.

Posted Mon, Mar 27, 2017 Updated Mon, Mar 27, 2017

My Set of Vim Plugins

I use a lot of plugins for vim. I’d like to go through all of my vim settings in a post at some point, but plugins are nicely isolated for the most part so describing their functionality seems more approachable. I am listing (nearly) all of my plugins and various things I know about each.

Posted Fri, Mar 17, 2017

Inspiration: DIY Operating System

Last Friday I blogged about some things that inspire me and mentioned a missing link; how to build your own operating system from scratch. I found it!

Posted Sat, Mar 11, 2017

Adding Features to Git the Easy Way

I have added a handful of features to git. The features are not perfect and most people can’t use them, but they are easy to prototype and I can polish them before writing and submitting a proper patch to git.git.

Posted Fri, Mar 10, 2017

My Mobile (shell) Home

At work I ssh into a lot of machines. I recently came up with a script that would ensure that my dotfiles would be deployed to any server I have access to quickly and reliably.

Posted Wed, Mar 8, 2017

MSSQL ODBC Client and Server on Ubuntu

Many years ago some coworkers and I collaborated on a document that would describe how to install the ODBC drivers from Microsoft on Debian, instead of RedHat as they were intended. Recently Microsoft has made this a much simpler task, so I decided to write a new version.

Posted Mon, Mar 6, 2017

Miscellaneous Inspiration

I thought it would be cool to share a list of things that are inspiring to me. I haven’t done much with any of these things, but I’d like to.

Posted Fri, Mar 3, 2017

The Great S3 Outage of 2017

At 9:36 am, Los Angeles time, my friend sent me a link about GCE vs AWS. It all went downhill from there.

Posted Tue, Feb 28, 2017

The fREW Schmidt Interview Experience

I keep reading tweets about how interviews should be done, almost entirely from the job seeker point of view. Having done (by my coarse count in google calendar) nearly ninety interviews at ZipRecruiter, I think that I can speak from a bit more experience than most about the interview process. I am not going to expose all of the gory details of the ZipRecruiter interview process, just how I (and my interview partner) administer it.

Posted Mon, Feb 27, 2017

Advanced Vim Sessions

I have blogged before about vim sessions and how useful they are. This post is about a pattern I discovered (though I’m likely not the first to discover it) at work when frustrated that certain settings were not stored in the session.

Note (2017-05-24) : this post has a critical error, see the updated version instead.

Posted Fri, Feb 10, 2017

The Dreaded Missing WHERE Clause

I recently had a bug in some of my personal software and found it both interesting and horrifying. The software in question is what allows me to mute some kind of email (usually based on subject but it could be anything really) and unmute it on a given day. It’s great for stuff at work that will continue spewing until we are able to release a new build.

Posted Wed, Jan 11, 2017

DIY Coffee Roasting and Coffee Setup

Lately I have been roasting my own coffee. I am certainly not the first person to do this nor even document it, but I tend to use my own blog as reference, so here we go!

Posted Mon, Dec 19, 2016

Gumbo v1

I grew up in the deep south and had gumbo pretty regularly. It’s delicious and I miss it. This past Saturday I decided to make some from scratch which we rarely did even at home because there were starters available in supermarkets (unlike in Santa Monica.) Read how I did it here!

Posted Sun, Nov 6, 2016

Email Threading for Professionals

Continuing my (likely unending) series of posts on email I want to talk about my latest in a Sisyphean line of tools to make the world suit my preferences.

As mentioned before I am a mutt user. Mutt, being not-Gmail, acts differently than what people have come to expect in 2016, though normally I can ignore other people’s expectations and move on. But I finally had to act in this case: email from the issue tracker we use at ZipRecruiter was not threading properly.

Posted Wed, Nov 2, 2016

The Ultimate Email Filtering

I’ve posted plenty about email before, so it might not be surprising that along with all of my other tooling, I have some email filtering tools as well. I recently rewrote most of my filtering tools after being inspired by my friend and coworker Meredith’s email filtering. It’s pretty cool!

Posted Sat, Oct 29, 2016

Linux Clocks

At ZipRecruiter we have an awesome access log that includes information about each request, like a measure of the response time, the increase in rss, and lots of other details. Before I joined we had a measure of how much CPU was used, but it was a little coarse. Read about how I increased the granularity here!

Posted Thu, Oct 13, 2016 Updated Fri, Oct 14, 2016

Announcing Digest::MurmurHash2::Neutral

This week I released Digest::MurmurHash2::Neutral.

Posted Fri, Sep 23, 2016

Defining Custom URI Schemata on Linux

For years I’ve wanted a way to link to emails without being tied to some specific provider. All emails have a header, Message-ID, that is supposed to be unique. I think it would be incredibly useful if there could be links based on these ids. I implemented that this past week!

Posted Thu, Sep 15, 2016

Perl, Linux Namespaces, and Pedestrian Problems

At ZipRecruiter we have a problem that I suspect is fairly common. We use cronjobs for various tasks and sometimes a cronjob will fail to clean up after itself and end up filling up a partition. It’s annoying. I solved this by using some simple but poorly supported Linux features.

Posted Mon, Sep 12, 2016

Blood Pressure Research

My doctor recently told me I probably have some high blood pressure issues. That may or may not be the case, because apparently isolated measurements are not to be trusted, but I did a bunch of research anyway, because that’s my deal.

Posted Thu, Sep 1, 2016

DIY Seltzer, Club Soda, Soda, etc

While I’ve been on paternity leave I have increased the amount of club soda that I drink hugely. This is mostly because I wanted to have a refreshing beverage while in the non-air conditioned apartment. I did a little research and found out how to make my own so I could have as much as I wanted, and because Googling for how to do it was hard, I figured I’d document it clearly here.

Posted Tue, Aug 23, 2016

The Pomodoro Technique: Three Years Later

A few years ago I posted about my use of The Pomodoro Technique. I’ve been asked more than once for an update on if I still use it and how. Answers are here.

Posted Thu, Aug 18, 2016