Caleb Thompson

What Free Speech Isn’t

The Constitution of the United States limits Congress from making laws to limit the freedom of speech of United States...

Use One Field to Store Names or Addresses

Collect personal information from users, such as their names or addresses, in a single field rather than multiple fields.

Form Filling is Formulaic

Filling out a form with Capybara can be very tedious. With Formulaic, we aim to make the process less repetitive...

Don’t Talk to (Just) Me

Company chatrooms aid communication, especially across multiple locations; they provide an archive for past conversations for those who were not...

Come for the Git Commits, Stay for the Power

I have a confession to make: I wasn't always a Vim user. There was a time when I used such...

Implementing Multi-Table Full Text Search with Postgres in Rails

Easily searching across an application's data is a pervasive need. If you are lucky, you can get away with simple...

Use RSpec.vim with tmux and Dispatch

As you may know, there are quite a few of us now working at thoughtbot. While we share a...

Iceberg Classes

An “Iceberg Class” is loosely defined as a class with more private than public methods, but we will be specifically...

External Posts in Jekyll

If you contribute to more than one blog, you may want to have all of your posts show up in...

Store Page Titles in I18n

While the <title> element is one of the only required tags in HTML, it is often overlooked by developers...

Apples and Oranges

This is probably the best cocktail concoction I have ever created.

crontab and Vim Sitting in a Tree

Solution for error crontab: temp file must be edited in place

Google Authorship on Giant Robots

You may have noticed a recent addition to thoughtbot’s blog posts. We concluded an experiment to add a “Written by...

Sandi Metz’ Rules for Developers

Back in January, Sandi Metz introduced her rules for developers in a Ruby Rogues podcast episode episode. Around...

It’s for the Orphans!

Too often, I come across GitHub Pages branches (gh-pages) branches that are simply forks from the master branch of the...

5 Useful Tips for a Better Commit Message

You're already writing decent commit messages. Let's see if we can level you up to awesome. Other developers, especially you-in-two-weeks...

Love Your Eyes

If you are a developer or designer, you spend a good portion of your day writing, reading, and generally looking...

Wrong, Sir, Wrong!

You are wrong about a few things, and that is okay. All of history's smartest people have been wrong, so...

How to Write a README

There is a science and an art to writing an effective README for an open source project.

Strong Parameters as Documentation

Besides moving attribute whitelisting to the controller rather than the model, Rails 4’s move to Strong Parameters over attr_accessible...

Stop Counting Hours

An Open Letter To the Management of (Generally) Small Companies with Internal Software Teams

Piracy is a Service Problem

Not that I ever pirated anything in my life, but if I allegedly had, I would have stopped when I...

Thoughts on the Google Reader Redesign

I was one of the power users. I fucking loved Google Reader.