Have you helped change the world?
It’s not often that as developers we get a chance to work on projects that are truly going to change the world. Changing the Present is one of those sites. In a partnership with Arvato Systems and WellGood LLC, EdgeCase has had the chance to help build this fantastic site that is helping change the nature of gift giving.
The premise is simple but powerful: you pick the cause you want to donate money to (children, education, environment, cancer, human rights, whatever). You then browse the various gifts available. You can choose gifts ranging from small to large, each specifically targeted to give exactly what you want to give. From the website:
For just a few dollars, you can protect an acre of the rainforest or fund an hour of a cancer researcher’s time. You can provide a child with a first book, an AIDS patient with life-saving drugs or a hungry family with a nourishing meal.
Wish lists, registries and printed, personalized greeting cards make these donation gifts an attractive alternative to traditional gifts. After all, many of us just don’t need more stuff.
That’s the beauty of Changing the Present as they say:
ChangingThePresent will do for nonprofits what malls have done for shopping. And it will do for shopping something that shopping has rarely done for anyone: elevate spirits and add meaning to our lives.
Technically this has been a fun project to work on as well. The site has quite a few challenges that were interesting for the teams to overcome: large quantities of shared data, a large amount of people administering their own sections of the site, and very high traffic. Simple caching does not work. It required a whole new way of approaching the problem.
We have also been able to work very closely with Jason Hoffman of Joyent. Jason knows scalability and the issues behind it inside and out. He’s helped Changing the Present in their quest to fill the enormous traffic needs they have. He’s taught us a lot about load balancers, mongrels and deployment. kudos.
Thanks go out to Bruce Tate for introducing us to the project and Arvato for allowing us to partner with them.
EdgeCase on the Ruby on Rails Podcast
We were interviewed for the Ruby on Rails podcast. We’ve been excited and waiting for this to come out for the last few weeks.
Hear about how we work, why we got together and what it is about Ruby and Ruby on Rails that excites us.
Columbus Ruby Brigade Tops 200
Looks as if the CRB has just gone above the 200 mark on the mailing list. We’ve been growing very strong. We toped 40 people at our meetings this summer. Columbus Ohio is becoming quite the hot bed for Ruby activity.
I’m very proud of this mark. I co-founded the group well over a year and a half ago just hoping to get a few people together to talk about my new found passion. Since then the interest in the group has exploded. We have had some excellent speakers come and join us such as my good friends Jim Weirich and Scott Barron. Recently Josh Schairbaum and Dan Manges, two of our own members were on the Ruby on Rails podcast talking about the success they have had with Ruby on Rails at JPMorgan Chase. We have covered a lot of ground and are looking forward to the year ahead.
In Feburary the CRB will be kicking off the year by co-hosting erubycon, the first conference to focus on Ruby and Ruby on Rails in the Enterprise.
rSpec 0.7 is out
Looks like they shipped rSpec version 0.7. If you have used it, please make sure the check the upgrade section of the wiki for notes on where it breaks backwards compatibility.
We have been using it at EdgeCase with great success. Our latest project has been helped by the paradigm shift that rSpec helps bring about in our testing. Plus the output is just like reading a printed spec sheet.
Why upgrade to 0.7? They have made some excellent improvements to the mocking and stubbing libraries, and some awesome improvements to the rSpec on Rails plugin. Most notably, you can test your views independently of your controllers (thanks to ZenTest). You can also test your rjs responses as well.
But the real reason you should check it out:

That’s right, they’ve taken the idea of RedGreen (part of the ZenTest package) a step further and highlighted which specs are passing and which are failing.
Mephisto routes hack refactored
I love this community. Where else can you have the guy who wrote the blog engine jump on you for doing it wrong. Seriously, I’m very appreciative to Rick for showing my why it sucked. I thought this was worth promoting up to a post.
Rick writes:Yuck, you have rss links pointing to atom feeds? heresy! Anyways, you can probably do something like this instead: Mephisto::Routing.redirect ‘xml/rss/feed.xml’ => ’/feed/rss.xml’, ‘xml/rss20/feed.xml’ => ’/feed/rss.xml’. At least that way you don’t have to worry about what controllers/actions Mephisto is using.
My first thought was that this is something in routes that I was missing. Then after looking at the lib/mephisto/routing.rb file I saw the method he was talking about. So, the routes file now looks like this thanks to Rick:
ActionController::Routing::Routes.draw do |map|
Mephisto::Routing.redirect 'xml/rss/feed.xml' => "http://feeds.feedburner.com/objo",
'xml/rss20/feed.xml' => "http://feeds.feedburner.com/objo"
Mephisto::Routing.connect_with map
end
Sweet. If you want to change a redirect make sure to clear the cache of your rss feeds first. If you are looking for good example code of the current state of Rails, check out the mephisto code. It’s fun to look at.
Thanks Rick.
Sqlite and Rails
I have enjoyed working with Sqlite ever since Aslak pointed me to it at RubyCon last year. I like having everything inside the same application when I run. All I have to do is checkout the source, run migrate and I’m off
There is, however, a bug on Mac OSX with Sqlite3 that I thought I should help point out – thanks to ruy.asan on the Rails Wiki for pointing out the solution.
The bug exists when you create or save an object in Active Record. The id field gets set to zero instead of the actual value:
objo:08:55 ~/somewhere > script/console >> u = User.create :name => 'alex' => ... User:0x2 ... >> u.id => 0
Turns out that you need to install Swig BEFORE you install the sqlite bindings. I installed swig using ports and then reinstalled the sqlite3-ruby gem. It seems to have taken care of the problem:
objo:08:55 ~/somewhere > script/console >> u = User.create :name => 'alex' => ... User:0x2 ... >> u.id => 7


