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

(The following includes affiliate links.)

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

Docker pstree: From The Inside

I recently posted about my docker-pstree tool and in the post mentioned that at some point I might port the tool to be 100% “in-container.” Well I couldn’t help myself and figured out how.

Posted Mon, Aug 15, 2016

Linux Containers and Docker pstree

Once in a while I find myself wanting to see the state of a container from a bird’s eye view. My favorite way to do this is with a special tool I wrote called docker-pstree. Here is how it works. (Stay tuned for angst at the end.)

Posted Fri, Aug 12, 2016

Open Source Infrastructure and DBIx::Class Diagnostics Improvements

Many people know that Peter Rabbitson has been wrapping up his time with DBIx::Class after his attempt to get funding for working on it didn’t work out. I have long had some scraps of notes on a post about that whole situation and how troubling it is but I could just never make it happen. The following is the gigantic commit message of the merge of a large chunk of his work. I offered to host it since I think that it should actually get read. I have left it almost completely unchanged, except to make things proper links. More thoughts after the post.

Posted Mon, Aug 1, 2016

Building Secure UserAgents

I have been working on making an HTTP client (also known as a user agent) that is safe for end-users to control. I investigated building it in Perl, Python, asynchronous Perl, and Go.

Posted Mon, Jul 25, 2016

A visit to the Workshop: Hugo/Unix/Vim integration

I write a lot of little tools and take pride in thinking of myself as a toolsmith. This is the first post of hopefully many specifically highlighting the process of the creation of a new tool.

I wanted to do some tag normalization and tag pruning on my blog, to make the tags more useful (eg instead of having all of dbic, dbix-class, and dbixclass just pick one.) Here’s how I did it.

Posted Wed, Jul 20, 2016

Development with Docker

I have not seen a lot of great examples of how to use Docker as a developer. There are tons of examples of how to build images; how to use existing images; etc. Writing code that will end up running inside of a container and more so writing code that gets compiled, debugged, and developed in a container is a bit tricker. This post dives into my personal usage of containers for development. I don’t know if this is normal or even good, but I can definitely vouch that it works.

Posted Mon, Jul 18, 2016

Set-based DBIx::Class

This was originally posted to the 2012 Perl Advent Calendar. I refer people to this article so often that I decided to repost it here in case anything happens to the server it was originally hosted on.

Posted Sat, Jul 16, 2016

Investigation: Why Can't Perl Read From TMPDIR?

On Wednesday afternoon my esteemed colleague Mark Jason Dominus (who already blogged this very story, but from his perspective), showed me that he had run into a weird issue. Here was how it manifested:

$ export TMPDIR='/mnt/tmp'
$ env | grep TMPDIR
$ /usr/bin/perl -le 'print $ENV{TMPDIR}'

So to be clear, nothing was printed by Perl.

Posted Thu, Jun 30, 2016