Live from Pro Rubyconf '08 / SMACKDOWN
I'm super busy with my duties as technical chair and M.C. for the conference and I'm not getting the opportunity to live-blog the Professional Ruby Conference the way I would like to. Luckily Nick Quaranto is doing a great job documenting the proceedings in details here: Professional Ruby Conference Notes
Liana (with baby in tow sometimes) is also doing a great job of documenting the highlights of the sessions.
So far it's been a really great experience. Along with friends and familiar faces, I'm also meeting amazing people from all sorts of backgrounds and it's doing wonders for my reputation (heh!)
The single track, 30-minute format is wonderful and we've gotten ample praise about it. Everyone in the audience gets the same content at the same time and has plenty of opportunities to meet informally and discuss what was presented. We have quite a mix of experience levels in the audience -- keeping the talks short and sweet ensures that no single group is bored for an extended period of time. We've covered the gamut of topical ranges, from pure case study "this is what we did" in the New York Times newsroom to Philippe's detailed explanation of DTrace.
Our Tuesday morning keynoter, Giles Bowkett, canceled at the last minute, so I had to scramble. After some undecidedness, I opted to try a concept that I witnessed last week at Conferencia Rails in Madrid. Sebastian Delmont and I brainstormed the content over single-malts in the hotel bar last night.
Photo credit: Sebastian Delmont
We distributed two pieces of colored paper to each person, which they used to vote on their preferred choice from the two displayed on the screen. After most of the votes, I asked for the audience to chip in with an explanation (and occasionally apology) for their choice.
Photo credit: Sebastian Delmont
I was asked to post the results, so here is my list of the smackdown lineup:
vim vs emacs: About half of the audience voted, skewed heavily to vim. I didn't want to start a "religious war" so I didn't ask for elaboration.
svn vs. git: Heavy voting, with fairly even split (perhaps slightly skewed to svn). Will from
jQuery vs. Prototype Apparently when I introduced this lineup I said "...still using Prototype" which I apologize for, since it was leading the audience and it got a laugh. I've been a fan of Prototype for a long time, but Hashrocket as a whole has switched over to jQuery in the last 6 months.
Chad Pytel told us that he's still using Prototype on existing projects because it doesn't make sense to switch over, essentially "if it's broke don't fix it".
Sinatra vs. Camping A few people in the back of the room voted for Sinatra. Matt Bauer told us that it's good for very small standalone web apps and yes, it's ready for production-use.
Blueprint vs. YUI About half the audience voted, skewed towards Blueprint. Someone pointed out that the 960 Grid System is cool, and then we spent at least 30 seconds trying to figure out the name and URL.
MySQL vs. Postgres Heavy vote for MySQL. Consensus appears to be that if you come from big enterprise databases then you're going to prefer Postgres. Also, Postgres is more standards-compliant and
blank? vs. empty? This one was a joke (pretty much) that Sebastian and I included in the smackdown to remind the audience to consider the semantic meaning of API methods. The correct vote would have been for both, since they are not used for the same purpose. The blank? method is for strings and returns true for strings consisting of purely space characters. The empty? method is primarily meant for arrays, but works on strings and returns false for strings consisting of purely space characters.
attachment_fu vs. paperclip Evenly split audience, but consensus was that Paperclip is better than attachment_fu in terms of features and flexibility and its implementation code is very clean and easy to figure out. Also, paperclip allows for attaching more than one file to a single model.
system gems vs. frozen gems Frozen gems won hands-down. Bryan Liles said that if anyone thinks system gems is the way to go then obviously they aren't doing production deployment. Sebastian chimed in that using system gems saves 10 seconds on his deploy time, which everyone took as a joke. Not sure if he meant it seriously. :)
Vlad vs. Capistrano A handful of people voted for Vlad, but otherwise the audience favored Capistrano heavily. I asked Matt Bauer to defend Vlad. He mentioned some reasons about its simplicity and how bad early versions of Capistrano were, but in the end he said it's not worth switching at this point because the pain-points of Capistrano have been resolved.
Mocha vs. Flexmock Mike Schwab was the only person who voted for Flexmock, but wasn't really able to defend the choice except to tell us that Chad Fowler and Marcel Molina suggested it once at a conference. (Comments welcome -- Is this reason still valid? Was it ever?)
FactoryGirl vs. ObjectDaddy Not too many people voted and those that did went for FactoryGirl. Earlier in the conference we heard from the testing panel that ObjectDaddy has way too much magic to be useful.
resource_controller vs. make_resourceful A couple of people voted for each. Got the impression that the audience was largely unfamiliar with these great plugins, so I asked Joe Fiorini to explain them. Bottom line, if you're writing your apps in a RESTful manner then you should check out and use one of these libraries because it'll spare you a bunch of boilerplate code.
HAML vs. ERB One of my favorite topics! The split was maybe 33% HAML with surprisingly heavy voting. The reasons for sticking with ERB? Mostly to keep designers happy or based on what I detect as a resistance to change. I gave my typical impassioned explanation of how HAML lessens the amount of mental mapping needed to effectively think of your views as semantic markup and match them to your CSS.
Bluecloth vs. Redcloth Meh...
RMagick vs. ImageScience Meh...
TinyMCE vs. FCKEditor Rich-text editor widgets in Javascript. They're not that different from each other and the audience was all like, "Meh.." :)
restful_authentication vs. clearance This one was funny. A handful of votes went up for Clearance, which disturbed its author, Chad Pytel. He stood up and told us not to use it since it's not ready. The offshoot of Github's popularity, is that once public projects go up, they start getting used -- whether they're ready or not. :)
Test::Unit vs. RSpec I was pretty much out of time at this point, so I skipped a bunch of slides to this matchup. Even distribution and some confusion about whether Shoulda belongs to TestUnit (yes) or RSpec. I think the consensus is that it doesn't matter as long as you're putting some effort into testing. I wondered to myself if the people that didn't vote weren't doing any testing. Things that make you go "hmm..."
If you're so inclined, take a moment to tell me your vote for the following smackdown matchups that I didn't have time to get to in the session...
Mongrel vs. Passenger
Sphinx vs. SOLR
ThinkingSphinx vs. UltraSphinx
exception_notifier vs. hoptoad
Gruff vs. Google Charts
CouchDB vs. SimpleDB





git
MySQL
attachment_fu
capistrano
make_resourceful
haml
restful_auth, but likely Authlogic if it's as good as it sounds.
RSpec
Passenger
Sphinx
ThinkingSphinx
getexpetional!
Posted by: Lar Van Der Jagt | November 19, 2008 at 06:21 PM
Sounds like an interesting and fun session. One note about blank?. It can be used generically, not just with strings. If you *know* you're dealing with an array, IMO it's clearer to use empty?. In fact, blank? is aliased to empty? for arrays. But if you're not sure what kind of object you're dealing with, blank? works well. From Rails source:
An object is blank if it's false, empty, or a whitespace string. For example, "", " ", nil, [], and {} are blank.
Posted by: TJ | November 19, 2008 at 06:36 PM
Leaning towards svn!? Wow, that is very surprising to me. To weigh in: git, jQuery, MySQL, paperclip, frozen, Capistrano, mocha, FactoryGirl, make_resourceful, HAML, Test::Unit.
You were one of the first people I read that passionately endorsed HAML. I gave it a try, hated it, stopped using it immediately, then tried again for some reason, and now I want to vomit on my keyboard every time I look at ERB. HAML is a godsend. Question: Do you guys use HAML for layouts at Hashrocket, or just templates?
Posted by: Alex Sharp | November 19, 2008 at 07:39 PM
@Alex Sharp: HAML is use at Hashrocket for layouts and templates. Have you run into a need to use ERB for layouts?
Posted by: Big Tiger | November 19, 2008 at 08:49 PM
On the Mocha vs Flexmock issue I currently use rr http://github.com/btakita/rr/tree/master in part because it supports mock proxies which I often wanted when using Flexmock.
Posted by: Marcel Molina | November 19, 2008 at 09:42 PM
My non-"meh" choices:
vim
svn (git growing on me, though)
jQuery
Sinatra
MySQL
paperclip
Capistrano
Mocha
FactoryGirl vs. ObjectDaddy: dm-sweatshop!
resource_controller
HAML
restful_authentication
RSpec
Mongrel
...and you missed Rails vs. Merb!
Posted by: Greg | November 19, 2008 at 11:59 PM
I'll take Ben Johnson's Authlogic over Restful-authentication any day!
Posted by: Nick Hoffman | November 20, 2008 at 01:25 PM
Awesome, Obie! I'm glad to hear things went well. The single track with 30 minute spots approach seems like a real win to me.
I'm so confused as to why people continue to hate on Haml. I'm confident if people tried it, they'd never go back. Why can't they just take our word for it?
Posted by: Pete Forde | November 21, 2008 at 03:56 PM
Sphinx vs SOLR => Sphinx
Gruff vs. Google Charts => Google Charts
Posted by: Palani Murugan | November 23, 2008 at 01:33 AM
Sphinx vs. SOLR
Have used both. Sphinx by a longshot.
ThinkingSphinx vs. UltraSphinx.
Have also used both, ThinkingSphinx gets my vote.
Posted by: Casey Jenks | December 02, 2008 at 10:59 AM