Thursday, September 25, 2008

Ruby on Rails

Over the past month or so I've been playing with Ruby on Rails. I've decided I really like the environment and developing in it has been (mostly) fun. It is very powerful and makes accessing database information wonderfully easy. Of course I first had to learn Ruby, which turned out to be a pleasure all on its own. The last object oriented language I did any serious work with was C++, which is a really cumbersome language that tends to make some object oriented programming techniques far more painful than they ought to be. So it's been great to be able to use a language that as designed from the beginning to be object oriented. The Rails framework on top of the language makes so many aspects of web development easy, as much of the "heavy lifting" is already done for you. My biggest complaint about Rails is the documentation. Although every method is well documented, some of the "big picture" is missing, and trying to figure it all out can be frustrating.

So what am I doing with Ruby on Rails? I have over 7000 photos in my on-line library, most of them taken by me but some taken by other members of my family. This collection is growing on both ends. Not only do I continue to take new pictures and add them to the collection, I am in the process of digitizing old rolls of negatives as well. So far I am back to 1995 and am continuing to add older rolls as I get them scanned. Although I am not a terribly prolific photographer, I did take 1000 pictures in 2007 and will probably hit 800 this year. So naturally I need a way to manage all these photos. I've looked at the various packages that are out there and none of them really do what I want. So building a photo database seemed like the ideal project for learning Ruby on Rails. When it is finished, it will have the ability to track the following information for every photo: location (city, state, country), event, date and time, caption and long description, rating, source, and a list of people. It will have extensive searching capabilities so that it will be easy to find, for example, all pictures of Aunt Bertha. I also intend to add the ability to group photos in to galleries (each photo can be in any number of galleries). External scripts will be able to build web pages from these galleries for use on my external web site. I already have a script that does this, but much of its data comes from text files rather than a database. As I get further along in the project I want to do some things with ajax. I doubt anyone outside my family will care to use this system, but I will certainly enjoy building it.

No comments: