Friday, March 26, 2010

Bundler with build_args support

I've been playing with Bundler a lot as I toy with Rails 3. Overall, it's been great. You list the gems you need in a file that lives in your project's root directory and then you run:
bundle install

Bundler takes care of fetching and installing your gems.

One problem however. I have a couple gems that have native extensions and needed me to pass options into the ./configure script. This is pretty easy when done via a normal "gem install" script but Bundler didn't seem to support a good way of handling this.

So I forked the project. http://github.com/ejfinneran/bundler/

Now, your Gemfile can have the following syntax:


gem "raspell", :build_args => "--with-opt-dir=/opt/local"
Sparing you the trail how how that winds its way through the code, that build_args value will get passed to your ./configure script when Rubygems goes to install the native extensions of the gem.

This is my first change I've made to an upstream project via Github so if I've screwed something up royally, please let me know. I'll probably use this version of the gem for a few weeks and then submit a Pull Request is everything looks good.

Thursday, March 4, 2010

User Interface Magic

Open Attachment

In Lotus Notes, this is what one is prompted with after double clicking an attachment in an email.

There are really 2 things users want to do with email attachments:

1.) Open it
2.) Download it

They've managed to split two actions into five buttons. Huzzah! It's bad UI magic!

Apprently, the edit button is in case you want to edit something and then have Notes automatically write the changes back to the email. What?? Why would anyone use their email as storage for a document?

This is one of Notes' (many) problems. It tries to be everything to everyone and succeeds at nothing in the process.

One simple feature is better than 10 complicated ones. For example, Gmail doesn't even support anything other than reverse chronological order in the list view. Does anyone really care? No. Because it's fast and simple.
 
javascript:void(0)