A Tale of Abort Traps (or Always Question Your Assumptions)

For a few months now, the bundler team has been getting intermittent reports of segfaults in C extensions that happen when using bundler with rvm. A cursory investigation revealed that the issue was that the C extensions were compiled for the wrong version of Ruby. For instance, we would get…

Using >= Considered Harmful (or, What's Wrong With >=)

TL;DR Use ~> instead. Having spent far, far too much time with Rubygems dependencies, and the problems that arise with unusual combinations, I am ready to come right out and say it: you basically never, ever want to use a >= dependency in your gems. When you specify a…

Threads (in Ruby): Enough Already

For a while now, the Ruby community has become enamored in the latest new hotness, evented programming and Node.js. It's gone so far that I've heard a number of prominent Rubyists saying that JavaScript and Node.js are the only sane way to handle a number of concurrent users.…

Everyone Who Tried to Convince Me to use Vim was Wrong

A couple weeks ago, I took the plunge and switched to vim (MacVIM, to be precise). It wasn't the first time I tried to make the switch, and I had pretty much written it off entirely. Why? Because the past few times I tried switching to vim, I took the…

What's New in Bundler 1.0.0.rc.1

Taking into consideration the huge amount of feedback we received during the Bundler 0.9 series, we streamlined Bundler 1.0 significantly, and made it fit user expectations better. Whether you have used bundler before or not, the easiest way to get up to speed is to read the following…

Encodings, Unabridged

I wrote somewhat extensively about the problem of encodings in Ruby 1.9 in general last week. For those who didn't read that post, let me start with a quick refresher. What's an Encoding? An encoding specifies how to take a list of characters (such as "hello") and persist them…

My Common Git Workflow

A recent post that was highly ranked on Hacker News complained about common git workflows causing him serious pain. While I won't get into the merit of his user experience complaints, I do want to talk about his specific use-case and how I personally work with it in git. Best…

The How and Why of Bundler Groups

Since version 0.9, Bundler has had a feature called "groups". The purpose of this feature is to allow you to specify groups of dependencies which may be used in certain situations, but not in others. For instance, you may use ActiveMerchant only in production. In this case,…

Ruby 1.9 Encodings: A Primer and the Solution for Rails

UPDATE: The DataObjects drivers, which are used in DataMapper, are now updated to honor default_internal. Let's keep this moving. Since Ruby 1.9 announced support for encodings, there has been a flurry of activity to make existing libraries encoding aware, and a tornado of confusion as users of Ruby…

The Web Doesn't Suck. Browsers Are Innovating.

This week saw a flurry of back-and-forth about the future of the web platform. In the "web sucks" camp were Sachin Agarwal of Posterous (The Web Sucks. Browsers need to innovate) and Joe Hewitt (Sachin summarized some of his tweets at @joehewitt agrees with me). Chris Blizzard responded…