Riding the Rails Again

It feels soooooo good to :)

Let me introduce you to Parking Friend. This website, which I had the pleasure to design and develop, belongs to some friends of mine, currently starting their own valet parking service in Geneva. Located not far from the airport, Jake, Dieter and their team will take care of your car for a small daily fee, for as many days as needed, meeting you at the airport (or anywhere else, for that matter) when you leave and when you return, cleaning up your car and even doing some shopping for you if you need. Handy, easy, relaxing.

Technically speaking, this is my first public, mainstream Ruby on Rails application. What can I say? It has been a delight to create by all means. It took me two weeks to do it, working… on “rails” precisely :) in the morning and evening trains while going to and from work, as well as during the weekends.

Of course the whole thing was typed on TextMate, stored in a Subversion repository, and deployed via Capistrano. The choice of technologies could not be better: TextMate is the most incredible IDE I’ve ever used, Subversion is always responsive and reliable (of course I was the only one using it but anyway!) and Capistrano… my goodness. I wonder how did I do before to deploy applications: “cap deploy” and you’re done.

The logo and marketing banner were created on Inkscape as an SVG file, and then retouched on Gimpshop into transparent background PNG files. Everything standard, cross-platform and open-source; I don’t want to lock people into proprietary stuff right now at the beginning.

The coordination with Jake and Dieter was done through Basecamp for the project management stuff and Tiki for bug tracking. Again, I can’t stress this too much: Basecamp is a joy. It is easy. It is fast. It is great. You cannot do better for these kind of projects. It’s simply perfect. I’ve bought a paying subscription to Basecamp after this live test, and I highly recommend you to take one too for managing these kind of projects.

I have tested the application under the following browsers and operating system combinations (yes Patrick! It works on Konqueror too!!):

I will add IE7 and the next version of Ubuntu as soon as I have them ;)

By the way, with Parking Friend I learnt that one of the best ways to achieve cross-browser compatibility is to start writing meaningful markup from the start. Yes, semantically meaningful. And this is a lesson I got after reading this incredible book called Transcending CSS. I refreshed 10 years of HTML and CSS knowledge thanks to it, and boy I am happy I did it.

Of course, I haven’t done all the work by myself; I used the following plugins in this application:

The most amazing of these plugins is, without any doubt, AssetPackager (well, they are all incredible in their own, but this one really stands out). It allows you to compress JavaScript and CSS files, which reduces the number of HTTP requests, the size of the page and accelerates the speed of rendering. Used together with YSlow and the Yahoo! Performance Guidelines… well, your app rocks, and users are happy with it. I could reduce the total download size of the page by 60% after installing it…

Another nice one is to have the Exception Notifier plugin, informing me automatically about any error in the application; whatever happens, I receive an error message in my inbox, telling me what happened, when, how and even why! This is step 1 of Joel’s Hard-assed Bug Fixin’ strategy, which is the path to remarkable customer service.

Finally, with Streamlined I could add a complete administration backend to the system in just one hour. Now my customers can change lots of things in the system without me having to worry about it.

I have also used the following RubyGems:

And some JavaScript goodies too:

Finally, the whole application has been “frozen” through rake rails:freeze:gems. Of course! This way, I do not have to worry about upgrading RubyGems in the server in the future, which would break the application.

To summarize, working with Ruby in general is a joy. The language is intuitive, pretty fast, has a great library, and Rails throws a lot more of extremely usable stuff into it. I had a level of productivity that I’ve never seen before; and the whole thing is not even 1000 lines of code long (tests included). I can export the database to other servers if I wanted (thanks to migrations) and the code size makes the whole thing extremely maintainable for the future. I can test the whole system, using unit, functional and integration tests all at once.

A dream platform, really. And open source, free, etc, etc, etc. You know the song ;)

Update, 2008-10-20: I’ve just checked that the site also works with the version of Opera for the Wii and on my wife’s Palm handheld. Standards rock!