Introducing: Tracker Keeper – A Batch-Assignment Tool for Pivotal Tracker

Pivotal Tracker is a popular project management tool used by development teams the world over. While popular, Pivotal isn’t without its flaws. One of the biggest complains I’ve heard is the inability to easily assign multiple stories to one project member.

Having to assign a dozen or more stories to one team member, one at a time, can be incredibly tedius in the face of a fast-paced project development plan. To combat this issue for my own team, I created a new Chrome Extension (it’s starting to become an unofficial hobby of mine) called Tracker Keeper. Continue reading “Introducing: Tracker Keeper – A Batch-Assignment Tool for Pivotal Tracker”

Using PSequel With Vagrant

I’m a huge fan of SequelPro, a Mac OSX application that provides an incredibly easy to use GUI for managing MySQL databases. Unfortunately for me, I’ve spent the past year working on a project with a Postgres database, so my easy-as-you-please SequelPro days are pretty much over. Thankfully, after about 6 months of searching and trialing different applications, I stumbled upon PSequel, an excellent SequelPro alternative for Postgres databases.

Almost every project I work on (a good 98% of them) uses Vagrant to manage the development environment. I love Vagrant, so much so that I am usually the person who insists on setting it up whenever possible. What makes Vagrant great is the consistency between development environments through the use of virtual machines, but this can also cause an issue with applications that aim to “ease” development by working with services directly on your machine (I’m looking at you, every IDE I’ve ever used). Continue reading “Using PSequel With Vagrant”

Why We Review

Many development agencies refuse to inherit projects from other agencies. A few months ago, I finally found out why.

The most dreaded part of any developer’s job is dealing with “legacy code.” While legacy code is a near inevitability in most tech companies, understanding and maintaining it is time consuming and costly. For this reason, many freelancers and agencies refuse to accept work for existing projects. The knowledge transfer alone can be enough to whittle earnings on a flat rate project down to minimum wage, but when you tack on maintenance, support, and feature development, the project ends up costing more money than than it makes.

My Code “Good,” Your Code “Bad”

Complete project ownership is more profitable. It’s a pretty straighforward concept. Unfortunately for me, it’s an opinion I don’t tend to subscribe to. Legacy code is difficult to maintain and manage, and as a solo freelancer I have the luxury of being able to charge for the added difficulty without going over budget. This stance has served me well in the past. While my professional experience has made me a relatively decent programmer, it has made me a much better engineer. I’ve learned that, more often than not, “bad” code is really just “ugly” or “inexperienced” code. Being able to understand the why of design decisions is far more important than the how. Continue reading “Why We Review”

The Rise and Fall of the Free Lance

Originally coined as a term to describe mercenary soldiers, the phrase “free lance” has come a long way in the past 200 years. Sir Walter Scott, originator of the term, first wrote it in the book Ivanhoe in 1820:

I offered Richard the service of my Free Lances, and he refused them—-I will lead them to Hull, seize on shipping, and embark for Flanders; thanks to the bustling times, a man of action will always find employment.

In its first usage, Scott used the phrase as a proper noun, literally naming his soldiers for hire “Free Lances”. A “free lance” very quickly became used synonymously with “mercenary,” and while the meaning stuck for a good 40 years, by the 1860s the usage became purely figurative. By the end of the 19th century a freelance was a person who “acts independently without being affiliated with, or authorized by, an organization.” No longer about medieval mercenary soldiers, “freelance” evolved to carry a meaning that hinted at intrigue and excitement. Continue reading “The Rise and Fall of the Free Lance”

4 Time-Saving Tools for Freelance Developers (Updated)

As a freelance developer, I have to account for every minute I spend at work in order to ensure I am spending my time on billable hours. The less time I spend on accounting, marketing, and project management, the better my profit margins are!

Wave (NEW)


About 8 months ago, I replaced FreshBooks with Wave, a free accounting tool for freelancers that kicks so much ass I feel a little guilty I don’t have to pay anything for it. Wave does everything FreshBooks does and then some. From project quoting to invoicing to collecting payments to expense tracking, Wave literally does everything I need (and well) at no cost to me.

Did I mention it is free?! Continue reading “4 Time-Saving Tools for Freelance Developers (Updated)”

My 10 Favorite Web Development Tools (Updated)

Web development is as much of an art as it is a science, and like all art, there isn’t any one right set of tools. This is a list of my favorite tools to use when developing both frontend and backend code.


Sublime Text

Sublime Text

Up until 2013, I spent my life in Vim. In fact, I had quite a perfect setup, and was very satisfied with it. That is, until I discovered Sublime Text. Sublime Text is one of the most popular code editors, and with good reason. It has extensive plugin support, amazing customizability, and an awesome community. Continue reading “My 10 Favorite Web Development Tools (Updated)”

Writing Messages on the GitHub Calendar

You know the contributions calendar grid on GitHub profiles? The one with all the pretty green squares? What if you could write a message within that box? That’s exactly what a friend of mine asked me a few weeks ago.

At first, it seemed like a silly question, because even if you could backdate commit messages in Git (which, it turns out, you could), GitHub surely only considers the date commits are pushed, not when they are created. Well, I was wrong.


If you’d rather just skip this writeup and check out the code, head on over to the public GitHub project page at Continue reading “Writing Messages on the GitHub Calendar”

MIME Type Validation Isn’t Good Enough

An uncomfortable majority of companies that offer high storage limits for specific file types have a major problem: MIME type validation isn’t good enough.

If you’ve ever had to implement file validation for user uploads, you’ve probably relied heavily on MIME type validation to ensure that the files you are receiving are what they’re supposed to be. This is an important piece of validating uploads, especially because validating the file extension is incredibly unreliable (and irresponsible). Unfortunately, this type of validation isn’t good enough to detect anomalies within files and, without any further checks, allows users to sneak in “extra” data under the guise of an accepted file format. Continue reading “MIME Type Validation Isn’t Good Enough”

My Second Chrome Extension: Rembrandt

Finding a usable brand name for your startup or project can be stressful and time consuming.

Rembrandt cuts down some of that time by automatically checking Facebook, Twitter, Instagram, and Pinterest for brand username availability whenever you search for a new domain name on

When you spend as much time working on startups as I do, you hit a certain point where you have more ideas than you have time. When an idea hits me, I note it in Evernote and move on with my day. Sometimes I go back through my list, pick something that strikes my fancy, and build it. The toughest part of this whole process, in my opinion, is branding. Coming up with an available domain name gets more difficult every day, but even tougher is finding an available domain name and available Twitter, Facebook, Pinterest, and Instagram usernames. Continue reading “My Second Chrome Extension: Rembrandt”

How to Watch Movies in the Command Line

You know how in The Matrix, they view everything going on in The Matrix using some sort of three-dimensional text-based display, and then later on Neo sees the world in the same way from inside The Matrix? If not, here’s the gist of it:

The Matrix


What if you could watch any movie like that? Okay, maybe not exactly like that, but something a little similar. Enter MPlayer, a cross-platform video player that can support pretty much any format you throw at it, as well as a wide range of output drivers. Combined with the unfortunately named libcaca, MPlayer is the perfect solution for some geek-style movie watching.


Because I work primarily on a Mac, I’m only going to go through this setup on OSX, but be warned, the entire setup and usage is in the OSX command line. So, open up your Terminal app and let’s get started.


Before we can actually set anything up, you will first want to install Homebrew. At the time of this writing, this is the command to do that:

ruby -e "$(curl -fsSL"

I won’t be keeping this post up to date with Homebrew, though, so it’s best to pull the command directly off of their website to be safe.


Once you’ve installed Homebrew, you then have to install MPlayer with libcaca support. To do that, type enter the following command into your terminal.

The “–with-libcaca” part is very important, as it is what allows us to watch videos from within the command line.


That’s it! You’re all set up! Now it’s time to watch some movies. I picked a backup of The Matrix I made a while ago, because what else would I choose? In your terminal, navigate to the directory your movie is in and type the following (replacing “matrix.avi” with the filename of your movie).

For a quick explanation of the command above, “-vo caca” tells MPlayer to use libcaca as the video output driver, and “-quiet” hides all debug information (which gets in the way of the actual video). If you did everything right, you should see something like this in your terminal:

The ASCII Matrix

Now, go enjoy re-watching all of your movies in this incredibly impractical, yet insanely fun way!