37signals job application from 2011

For the sake of posterity, here’s the application that landed me my dream job back in 2011.

Cover letter

Hello Signals,

My name is Trevor. You should hire me. Here’s why:

I’m a Chicagoan

Although I love to travel, I’m a Chicagoan through and through.

I grew up in Hyde Park and attended my first Cubs game at 8 years old. I’ve eaten more Giordano’s stuffed spinach pizzas than I can count and I have an MBA (Master of Beer Appreciation) from Goose Island.

I’ve been living in London for the past six months, but I’m returning home to Lakeview on March 27th.

I’m a creative developer

Here are some of the things I’ve built:

  • Reel Roulette — an easy way to find motion designers (Rails, Devise, Heroku, Solr, jQuery)
  • Flowcoder — code sharing powered by Twitter (Rails, OAuth, Twitter API, haml)
  • El Dorado — a full-stack community web app (Rails, Slicehost, Heroku, Paperclip, S3)
  • Static — a super simple Rails CMS for Heroku (Rails, Heroku, Paperclip, S3)
  • The Unofficial Pygments API — syntax highlighting via Google App Engine (Python, Pygments, GAE)
  • Simplest — the simplest possible theme for WordPress: 83 lines of PHP and 75 lines of CSS in 4 files
I’m an active participant in the open-source community

Here are some of the projects that I’ve been a part of:

I’m a good writer and a critical thinker

I graduated with a Philosophy degree from Lawrence University, where I received Magna cum laude honors for my work in Biomedical Ethics.

At the time of this writing, I’m ranked the #10 Ruby blogger on Postrank.

I’m a pleasure to work with

The people I’ve worked with would speak very highly of me and I’m happy to provide references.

I’m ready for a challenge

I want to be surrounded by smart people, to be excited about my work, and to challenge myself every day. I would love to be a part of your team.

Please take a look at my resume and email me at trevorturk@gmail.com.


  • Ruby web development with an emphasis on concise, maintainable, well-tested code
  • Active participant and contributor in the open-source web development community
  • Proven track record in product development, technical project management, and business analysis
Personal projects and open source
Technical experience
  • Ruby, Rails, Sinatra
  • MySQL, PostgreSQL, CouchDB, Lucene, Solr, MongoDB, Redis, Memcached, Varnish
  • Javascript, jQuery, node.js
  • Amazon EC2, EBS, RDS, S3, CloudFront
  • Heroku, Slicehost, Rackspace, Debian, Ubuntu
  • Chef, Sprinkle, Capistrano, Monit, Passenger, Apache, nginx, Ruby Enterprise
  • Delayed::Job, Resque
  • Braintree, PayPal payment processing
  • Python, Google App Engine
  • PHP, WordPress
  • Git, Subversion
  • Recent work

    CaptainU, Web Developer — 2011

  • Rails application development for various internal and external sites

Laugh Out Loud Theater, Web Developer — 2010

  • Rails application development for an internal ticketing and reservation system

Local Offer Network, Web Developer — 2010

  • Rails application development and infrastructure management for high-traffic, high-availability sites and services used by major national brands handling millions of requests per month

Punchkick Interactive, Web Developer — 2010

  • Rails “rescue” project including application repair, new feature development, and hosting migration

Timelines, Inc., Web Developer — 2008-2010

  • Back-end Ruby development and infrastructure management for various projects including Timelines.com and embeddable sports history timelines used on major newspaper websites

Tribune Interactive, Product Development Analyst — 2007-2008

  • Technical management of special projects and day-to-day maintenance of the Tribune-owned newspaper websites including Chicago Tribune, LA Times, and Newsday

Lente Group, Business Analyst — 2006-2007

  • Procedural interviews, business analyses, and in-depth recommendations for senior management during an offshoring initiative at Bank of America

ProjectStory, Technical Writer and Web Developer — 2004-2006

  • Web application development using PHP and MySQL; technical writing of training manuals for bank employees

Lawrence University, Bachelor of Arts, Philosophy — 1998-2002

  • Magna cum laude honors in Biomedical Ethics
  • Founding member of the Philosophy Group and the Electronic Music Organization
More background

Blog, Flickr, GitHub, Last.fm, Pinboard, Twitter

Get in touch

I’m happy to provide references upon request. I look forward to hearing from you.

Code Academy

I’ve been mentoring at Code Academy and just did an interview with one of the founders. Working with Code Academy students has been really fun and rewarding. If you’re a Ruby developer in Chicago, you should consider being a mentor, too!

Handling ActionView::MissingTemplate exceptions

Perhaps you’ve been receiving annoying emails about exceptions like this in your Rails apps:

A ActionView::MissingTemplate occurred in posts#destroy:

Missing template posts/destroy with {:formats=>[:html], :locale=>[:en, :en]} in view paths...

This exception is raised when you’re missing the template for responding to a request of a certain format. So, if the browser requested HTML and you only expected to receive JS, you might simply modify your controller action like so:

respond_to do |format|

This specifies that you’re only going to respond to JS requests, and any others will be served a 406 “not_acceptable” response, which will quiet down that exception noise.

Have you handled these in some other way? If so, please let me know!

Links for 12-9-2011

Consistent Hashing in memcache-client

paperplanes. The Simple Magic of Consistent Hashing

Welcome to the Age of Overparenting – Boston Magazine – bostonmagazine.com

You’ve Probably Read Enough | Ben’s Blog

To get started on one of your lingering interests, you probably don’t need to read about it as much as you think. Go. Do it. And learn from there.

Profiling Rails startup with DTrace – Tender Lovemaking

Twine : Listen to your world, talk to the Internet by Supermechanical — Kickstarter

Knyle Style Sheets — Warpspire

I heard you liked files (Episode #228 – December 6, 2011)

The 2011 Eddys

Riding Rails: What’s new in Edge Rails: EXPLAIN

You Aren’t Who You Hang Out With | Mike Industries

Don’t Be A Free User (Pinboard Blog)

Creating an API // RailsTips by John Nunemaker

thoughtbot/bourne – GitHub

Adds test spies to mocha

github/rack_monitor – GitHub

monitor your rack apps in production

fancyBox – Fancy jQuery Lightbox Alternative

fancyBox is a tool that offers a nice and elegant way to add zooming functionality for images, html content and multi-media on your webpages. It is built at the top of the popular JavaScript framework jQuery and is both easy to implement and a snap to customize.

Custom File Inputs with a Bit of jQuery | Viget Inspire

File inputs are notorious for being a pain to style across all browsers.

Fast, easy, realtime metrics using Redis bitmaps «

lantins/resque-retry – GitHub

A resque plugin; provides retry, delay and exponential backoff support for resque jobs.

Configuration for Rails, the Right Way | The Carbon Emitter

One little known secret is that Rails 3 allows you to define your own configuration elements trivially.


You don’t need a merchant account or gateway. Stripe handles everything, including storing cards, subscriptions, and direct payouts to your bank account.

Solving Cucumber’s Problems — Elabs

Turnip parses Gherkin feature files and runs them in RSpec. You run your feature files the exact same way you would run a normal spec file, and they are automatically run when you run your RSpec suite.

PhantomJS: Headless WebKit with JavaScript API

PhantomJS is a headless WebKit with JavaScript API. It has fast and native support for various web standards: DOM handling, CSS selector, JSON, Canvas, and SVG.

Don’t Call Yourself A Programmer, And Other Career Advice | Kalzumeus Software

tallgreentree/omniauth-37signals – GitHub

37signals OAuth2 Strategy for Omniauth 1.0

timrwood/moment – GitHub

Moment.js is a lightweight javascript date library for parsing, manipulating, and formatting dates.

Stacking the Bricks « Unicornfree

This lesson was specifically crafted for you: The smart person who has the skills and the know-how to execute… but isn’t sure where or how to get started on what seems like a gargantuan task.

glennr/uber-glory-tmbundle – GitHub

Uber Textmate macros to make your life glorious. Well they mostly strip whitespace.

The Social Graph is Neither (Pinboard Blog)

My hope is that whatever replaces Facebook and Google+ will look equally inevitable, and that our kids will think we were complete rubes for ever having thrown a sheep or clicked a +1 button. It’s just a matter of waiting things out, and leaving ourselves enough freedom to find some interesting, organic, and human ways to bring our social lives online.

holman/play – GitHub

We like playing music at the GitHub office. Everyone has their own library on their own machines, and everyone except for me plays shitty music. Play is designed to make office music more palatable.

InfoQ: Simple Made Easy

Rich Hickey emphasizes simplicity’s virtues over easiness’, showing that while many choose easiness they may end up with complexity, and the better way is to choose easiness along the simplicity path.

Day-O // ShaunInman.com

Day-O is a simple menu bar clock replacement with a simple calendar for your Mac.

Mud Rooms, Red Letters, and Real Priorities | 43 Folders

Yield Thought, I swapped my MacBook for an iPad+Linode

Police Slog Through 40,000 Insipid Party Pics To Find Cause Of Dorm Fire | The Onion – America’s Finest News Source | Onion News Network

Fast Rails Tests – Corey Haines – Golden Gate Ruby Conference 2011

In this talk, I will go over some techniques for keeping your test suite lean and fast. Along the way, we’ll discuss the design improvements that come out of these changes.

Hyperbole and a Half: Adventures in Depression

And that’s how my depression got so horrible that it actually broke through to the other side and became a sort of fear-proof exoskeleton.

CSS: Taking control of the cascade – (37signals)

Using CSS sprites with Rails helper methods – (37signals)

A Quick Introduction to Rack

Why We Moved Off The Cloud at Mixpanel Engineering

After getting fed up with variable cloud performance, I decided to make the move to dedicated hardware.

Say Hello to Hubot – GitHub

For the past year or so we’ve been telling people about Hubot, our amazing Campfire bot. We have a lot of fun working on Hubot. He makes us laugh, he ships our code, he is the interface to our CI server, and a whole lot more. Over the last year, he’s grown bigger and messier. So we decided to rewrite him from scratch, open source him, and share him with everyone.

The Dropbox API!

GitHub Secrets – GitHub

Over the years we’ve added quite a bit of stuff to GitHub. Sometimes we ship huge features, sometimes we ship small, lesser-known bonus features.

A Modern Guide to Threads | The Carbon Emitter

“Algorithm” is Not a Four-Letter Word

Web Development Blog | Ruby on Rails Web Development | Viget Extend

When solving a particular problem in an OO language, it often makes sense to take a step back and think about the conceptual entities involved and how they collaborate with one another. By adhering to some basic design principles, notably the separation of concerns and encapsulation, we have a solution that is easier to understand and maintain.

Understanding the Rails Logger | Grinding Gears

Introducing the YouTube Insult Generator

Why Bundler 1.1 will be much faster – Pat Shaughnessy

iOS 5: Tips, Tricks & Hidden Features

Daring Fireball: The iPhone 4S

Why programs become territorial – (37signals)

Until you’re ready to delay things you really want done, it’s fruitless to bemoan that parts of the code base territorial.

Steve Jobs and drug policy – Salon.com

MicroGems: five minute RubyGems – Jeff Kreeftmeijer

Your Number One Priority

An 8 hour work day with exercise is more valuable than an 10 hour work day without. Justifying daily exercise as your number one priority is such an easy thing to do. If exercise isn’t your number one priority, your priorities are wrong.

Rands In Repose: Building Serendipity

The training wheels came off | Aslak Hellesøy

What’s So Great About Siri? | Cult of Mac

Steve Jobs, 1955 – 2011 | Epicenter | Wired.com

Steve Jobs didn’t | asymco

14km – Mocha doesn’t play nice with Rails 3 & Bundler

After an hour or two digging around, I stumbled across a post on the Mocha mailing-list that mentioned ordering problems with Mocha and Test::Unit. Sure enough, if I rearranged the modified require lines so that Test::Unit was loaded after Mocha

Help.GitHub – Ignore files

How I name my apps – Zach Waugh

bassnode/bundler_timer – GitHub

Logs the time you spend waiting for bundler

#101: Wiki page explaining how to use rbenv in production .. – Issues – sstephenson/rbenv – GitHub

Read on (Sinatra: New feature release, Contrib and Recipes)

fog 1.0 is here!

[ANN] Rails 3.1.1.rc2

Timelines.com Sues Facebook, Says Its New Timeline Feature Could “Eliminate” Them – TechCrunch

Kinda cranky pizza guy – chicagotribune.com

Amazon Kindle Fire explodes onto tablet scene – Chicago Sun-Times

? Amazon’s New Kindles

detailed account (Drift: an iPad app for GitHub Gists)

Large Ruby File Downloads Done Right! – Dan Watsons Coding Zen

What is needed is to download and stream the file directly to disk leaving the RAM well alone.

textmate/ruby.tmbundle – GitHub

TextMate support for Ruby

Jason Fried on Learning What Your Employees Really Think | Inc.com

sstephenson/rbenv-vars – GitHub

An rbenv plugin that safely sets global and per-project environment variables

Bundler’s Best Kept Secret – Pat Shaughnessy

This week I just discovered Bundler’s best kept secret: the bundle viz command will generate a network graph showing the dependencies among all the different gems used by your Ruby app.

Links for 09-26-11

How Batman can Help you Build Apps – Shopify

I’d like to give a quick tour of what makes Batman different and why you might want to use it instead of the other amazing frameworks available today.

Bare-bone, stripped-down Devise | Plataforma Tecnologia Blog

It is important to keep in mind that Devise was built by us to be flexible and capable of handling different requirements from different clients, so it is PlataformaTec’s priority to have it as flexible as possible!

wjessop/Scamp – GitHub

A framework for writing Campfire bots

Pogodan | per-app environment variables with pow and rbenv

However with RVM we’d been taking advantage of the per-directory .rvmrc files to set per-application environment variables for configuration (e.g. DB URIs, API keys, etc.) on our dev machines.

summarized the changes over 1.9.2 (Ruby 1.9.3 Release Candidate 1 Released (What’s new?))

A First Look at BankSimple | BankSimple Blog

Gem Versioning and Bundler: Doing it Right « Katz Got Your Tongue?

dwilkie/carrierwave_direct – GitHub

Process your uploads in the background by uploading directly to S3

gzigzigzeo/carrierwave-meta – GitHub

File’s metadata saving plugin for carrierwave

rtomayko/replicate – GitHub

Dump and load relational objects between Ruby environments

ryanb/letter_opener – GitHub

Preview mail in the browser instead of sending

What Self can teach us about the future of JavaScript /by @assaf

[FYI: historic] The desicive moment of the language name Ruby. (Re: [ANN] ruby 1.8.1)

Sane RSS usage

GoRuCo 2011 – Jeremy Ashkenas – CoffeeScript for the Well-Rounded Rubyist on Vimeo

Animated GIFs Capture Stanley Kubrick’s Most Immortal Scenes | Co. Design

GitX (L)

Open Source Mac OS X Git client

How to use iPhone 4 as a Pay-Go iPhone

How to setup an iPhone 4 as a Pay-Go phone

jejacks0n/mercury – GitHub

A fully featured HTML5 WYSIWYG editor written in CoffeeScript on top of the Rails 3.1 asset stack

So, what is GitHub Flow?

Anything in the master branch is deployable
To work on something new, create a descriptively named branch off of master (ie: new-oauth2-scopes)
Commit to that branch locally and regularly push your work to the same named branch on the server
When you need feedback or help, or you think the branch is ready for merging, open a pull request
After someone else has reviewed and signed off on the feature, you can merge it into master
Once it is merged and pushed to ‘master’, you can and should deploy immediately

Ruby on Rails Guides: Ruby on Rails 3.1 Release Notes

Highlights in Rails 3.1: Streaming, Reversible Migrations, Assets Pipeline, jQuery as the default JavaScript library

Mobile development with HTML5 | Engine Yard Ruby on Rails Blog

This post will go over some key concepts and features of HTML5, setting the stage for more advanced subjects.

Heroku Postgres

the largest and most reliable Postgres service in the world

sstephenson/sprockets at v2.0.0 – GitHub

Rack-based asset packaging system

10.6: Terminal and ‘focus follows mouse’ modification – Mac OS X Hints

defaults write com.apple.Terminal FocusFollowsMouse -string NO

Active Record batch processing in parallel processes

My semi-educated guess on the Amazon tablet

balupton/history.js – GitHub

History.js gracefully supports the HTML5 History/State APIs (pushState, replaceState, onPopState) in all browsers. Including continued support for data, titles, replaceState. Supports jQuery, MooTools and Prototype. For HTML5 browsers this means that you can modify the URL directly, without needing to use hashes anymore. For HTML4 browsers it will revert back to using the old onhashchange functionality.

paperplanes. Web Operations 101 For Developers

cloudHQ for Dropbox – Basecamp, Dropbox and Google Docs

Integrate Dropbox, Basecamp, and Google Docs

What came before WebSockets?

ernie/valium – GitHub

Access attribute values directly, without instantiating ActiveRecord objects


No images, no external CSS
No dependencies
Highly configurable
Resolution independent
Works in all major browsers, including IE6
Smaller than an animated GIF (3K minified, 1.7K gzipped)
MIT License

pry/pry – GitHub

an IRB alternative and runtime developer console

Amazon ElastiCache

Amazon ElastiCache is a web service that makes it easy to deploy, operate, and scale an in-memory cache in the cloud.

Skeleton: Beautiful Boilerplate for Responsive, Mobile-Friendly Development

A Beautiful Boilerplate for Responsive, Mobile-Friendly Development

Twitter Bootstrap

Bootstrap is a toolkit from Twitter designed to kickstart development of webapps and sites.
It includes base CSS and HTML for typography, forms, buttons, tables, grids, navigation, and more.

What they’re “protecting” us from – Anil Dash

It’s a choice whether you, or anyone else, wants to accept the falsehood that liberal values are somehow in contradiction with business success at a global scale.

mattmatt/riaktivity – GitHub

Store user timelines in Riak

A Gentle Introduction to CarrierWave | Engine Yard Ruby on Rails Blog

CarrierWave is self-described as a “classier solution for file uploads for Rails, Sinatra and other Ruby web frameworks.” Although I’ve head it referred to as “a new kid on the block” it’s actually quite an old gem. The initial checkin is from August 2008 and the first release was in March 2009. The original name was Merb::Upload and it started without support for Rails.

Share links instantly between computers – SendTab

SendTab is a browser extension that lets you share links instantly between computers.

sj26/rbenv-install – GitHub

A really thin wrapper around ruby-build for rbenv.

Rendering Rails 3.1 assets to string – Phusion Corporate Blog

Understanding “Prototypes” in JavaScript « Katz Got Your Tongue?

ignore the code: More on Software Patents

it is simply not possible to create any non-trivial piece of software that doesn’t violate hundreds of patents. As a result, you can’t release software without putting yourself into a position where you might suddenly lose all of your money.

Why software patents are not fixable – Marco.org

On Being A Journeyman Software Developer: Being honest vs Making excuses

Often times, we choose to be in certain situations and then, rather than admitting that the situation is bad and dysfunctional, then convince ourselves — and justify to others — that this is the only way it can be. While we are free to choose trade-offs for whatever situation we place ourselves in, it is important to be honest with ourselves about the causes of the situation.

kennethreitz/osx-gcc-installer – GitHub

GCC Installer for OSX! Without Xcode!


At a time when our future affluence depends so heavily on innovation, we have drifted toward a patent regime that not only fails to fulfil its justifying function, to incentivise innovation, but actively impedes innovation.

Nodeload2: Downloads Reloaded – GitHub

sstephenson/rbenv – GitHub

Simple Ruby version management

Bulkr: Backup, download flickr photos & sets (Mac, Windows & Linux)

Bulkr is the complete solution to backup, browse & download photos on Flickr. Install it free.

Ava’s 5 girls and 3 boys !! – a set on Flickr

Ava’s 5 girls and 3 boys !!

has_many :bugs, :through => :rails

After moving to Sam Stephenson’s awesome Pow, not being able to use ruby-debug was the primary obstacle I had adjusting to my new development environment. But as it turns out, it’s very simple to use ruby-debug with Pow.

Subtraction.com: A Word About Unsolicited Redesigns

If you have good ideas and the talent to execute them and argue for them, the world will still sit up and pay attention even if you take care in your language and show respect to those who don’t see things quite the way you do.

LevelDB: A Fast Persistent Key-Value Store – Google Open Source Blog

LevelDB is a fast key-value storage engine written at Google that provides an ordered mapping from string keys to string values. We are pleased to announce that we are open sourcing LevelDB under a BSD-style license.

Gerd Arntz Web Archive

The debt ceiling backlash within the GOP – War Room – Salon.com

Obama’s and Bush’s effects on the deficit in one graph – Ezra Klein – The Washington Post

Free Time – Marc-André Cournoyer’s blog

Yeah, life is hard, I agree with that.

Intellectual Ventures And The War Over Software Patents : Planet Money : NPR

Pivotal Labs: Talks

If you don’t measure it, you can’t optimize it. Coda Hale of Yammer talks about service-level performance metrics, how they use them to guide their development strategy, and how you can improve the transparency of your own software.

codegram/rack-webconsole – GitHub

Rack-based interactive console (à la Rails console) for your web application’s front-end

rs/SafariOmnibar – GitHub

Safari plugin to add Chrome like omnibar in Safari


Terminus is an experimental Capybara driver implemented in client-side JavaScript. It lets you script your application in any browser on any device, without needing browser plugins.

Blog II – The Sequel Blog – Dangerous Reflection

Bottom line: don’t call ruby’s reflection methods with user-defined strings or you open yourself up to denial of service.

The Slicehost Story

Slicehost—a scrappy web company bootstrapped with $20,000—cashed out for big bucks in 2008. How did they do it? More importantly, was it worth it?

iOS Integration Testing

Today we’re happy to announce KIF, the “Keep It Functional” framework. KIF allows for realistic iOS integration testing through simulated user interaction.

nginx news

Rails migrations with no downtime

Faraday: advanced HTTP requests made easy

Faraday is a library for making HTTP requests and to serve as a backbone for writing API wrapper libraries such as twitter. It has an interesting philosophy, but to really appreciate it you must first understand what problem it solves.

Heroku | Matz joins Heroku

Today marks a very special occasion in the history of Heroku, as we are honored to announce that Yukihiro “Matz” Matsumoto, the creator of Ruby, has joined the Heroku team as Chief Architect, Ruby.

Tuffcode – Home

HTTP Scoop 1.4. The HTTP sniffer for Mac OS X.

Throw, Catch, Raise, Rescue… I’m so confused!

Ruby is a language that tries to anticipate your needs as a programmer. One common need is a way to terminate execution early when we find there is no further work to be done. Unlike in some languages, where we would have to either abuse the exception mechanism or use multiple loop breaks and method returns to achieve the same effect, Ruby provides us with the catch and throw mechanism to quickly and cleanly make an early escape. This leaves begin/raise/rescue free to be used for errors, and nothing else.

jeremyw/stamp – GitHub

Format dates and times based on human-friendly examples, not arcane strftime directives.

brotherbard/gitx – GitHub

Experimental fork of Pieter’s nice git GUI for OS X. Includes: sidebar, fetch, pull, push, add remote, merge, cherry-pick, rebase, clone, clone to. Mac OS X 10.5+ (see wiki for screenshot)

Scaling a web site using HTTP caching and JS async calls | Merbist

The challenge is that a lot of people using the Rails framework are used to doing page caching instead of relying on HTTP caching, even though this feature was added a long time ago. The major problem with page caching is that it doesn’t scale that well as soon as you run more than one server. Indeed you would need to store the page content to a shared drive between your servers or use memcached and do some work to avoid hitting your app every single time. On the other hand, HTTP caching is extremely easy to handle at the application level and it will dramatically reduce the amount of requests hitting your app. Let me explain a little more about HTTP caching.

jyoungblood/smoke.js – GitHub

framework-agnostic styled alert system for javascript

Courtesy Suicide » Matt Legend Gemmell

Excessive verbiage isn’t courtesy; it’s just waffling. Get to the bloody point.

Wildbit » Responsive design for email – the largest mobile audience – Thoughts on building web apps, businesses, and virtual teams

nathanvda/cocoon – GitHub

Dynamic nested forms using jQuery made easy; works with formtastic, simple_form or default forms