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…

Named Gem Environments and Bundler

In the beginning, Rubygems made a decision to allow multiple versions of individual gems in the system repository of gems. This allowed people to use whatever versions of gems they needed for individual scripts, without having to partition the gems for specific purposes. This was a nice starting place. Being…

Ruby Require Order Problems

Bundler has inadvertantly exposed a number of require order issues in existing gems. I figured I'd take the opportunity to talk about them. There are basically two kinds of gem ordering issues: Missing Requires Imagine a gem that uses nokogiri, but never requires it. Instead, it assumes that something that…

Some of the Problems Bundler Solves

This post does not attempt to convince you to use bundler, or compare it to alternatives. Instead, I will try to articulate some of the problems that bundler tries to solve, since people have often asked. To be clear, users of bundler should not need to understand these issues, but…

Using .gemspecs as Intended

When you clone a repository containing a Unix tool (or download a tarball), there's a standard way to install it. This is expected to work without any other dependencies, on all machines where the tool is supported. $ autoconf $ ./configure $ make $ sudo make install This provides a standard way to download,…

Ruby's Implementation Does Not Define its Semantics

When I was first getting started with Ruby, I heard a lot of talk about blocks, and how you could "cast" them to Procs by using the & operator when calling methods. Last week, in comments about my last post (Ruby is NOT a Callable Oriented Language (It’…

Ruby is NOT a Callable Oriented Language (It's Object Oriented)

I recently ran across a presentation entitled Python vs. Ruby: A Battle to the Death. I didn't consider it to be a particularly fair battle, and may well reply in more detail in a later post. However, what struck me as most worthy of explanation was the presenter's concern about…

The Blind Men and the Elephant: A Story of Noobs

If you will indulge me, I'd like to paraphrase a familiar tale: Once upon a time, deep in the forest, there was a tribe of elephant curators. The elders of this tribe kept sophisticated, detailed notes about the proper care and feeding of elephants, and the villagers tended to follow…

Using Bundler in Real Life

A lot of people have asked me what the recommended workflows for bundler are. Turns out, they're quite simple. Let's step through a few use-cases. You Get a Repo for the First Time You've just checked out a git (or other) repository for an application that uses bundler. Regardless of…