Brian discovers the default logging goodness

Brian McCallister started working on a new Rails application and discovered the goodness that is the default logging setup:

This is sort of what using Rails is mostly like. You stumble on a really nice gem — the default logging giving you a breakdown of execution times, translating it to requests per second, giving you any sql, execution times on the sql, etc. Oh yeah, nicely color coding and bolding as well. Then you stumble on another gem. It feels like programming in ruby, where things surprise you by being just really well done, and easier than expected.

It is indeed a powerful tool to have a tail running on while developing as you get an early warning system for performance problems and a minds eye into the internals of the system.

Using the Rails to impress potential employers

Drew McLellan is looking for a job and what better way to demonstrate to potential employers than to show you’re keeping up with the field of web development:

I like to work on the edge and am frequently updating my skills. Right now I’m learning Ruby with the aim of doing some work using the Rails framework in the near future. Learning new things opens your mind to possibilities, and more possibilities lead to better solutions.

With jobs being outsourced left and right, perhaps its also time for you to demonstrate why you’re not just yet another mainstream developer chasing the same Java, .NET, or PHP jobs as everyone else. Stand out from the crowd.

Ruby on the German Rails

I love picking up Rails praise in a foreign language through the wonder that is Google Translate:

…within fewer days it was my small Webapp finished and I a realization enrich: I like Python still rather than Ruby, but Rails rockt without end!

And even if David evangelisiert sometimes somewhat too much , then he is right nevertheless nearly always :)

Because with Ruby on Rails I had to have developed first time fun a Web application and to have written also the feeling somewhat elegant and none dirty PHP chopping.

Thanks for the kind words, Florian Munz. I apologies for publishing your words in a much “gebrochen” English. If you’re fluent in the language of commands, you’d probably prefer the un-mangled German original.

UPDATE: More German praise from Mornography: “Ich hab’ Spaß”.

Rails 0.9.3: Optimistic locking, dynamic finders, 1.8.2

Rails is now fully compatible with Ruby 1.8.2, which we advice all to upgrade to as soon as possible. It contains a year’s worth of bug fixes for Ruby, so it’s great finally to be able to use the new version with Rails. But that is not all we got in store for 0.9.3. A few of the highlights are:

  • Automated optimistic locking: Just add the field lock_version to your table and the associated class will be governed by optimistic locking that’ll raise an exception if a stale object attempts to save.
  • Dynamic finders: Finders like Person.find_by_user_name, Payment.find_by_amount, and even Person.find_by_user_name_and_password are now available with no code at all. Any column can be used and combined with other columns in the new dynamic finders.
  • MS SQL Server and DB2: Active Record now supports both Microsoft SQL Server (through ADO) and IBM’s DB2 databases.
  • MemCacheStore for sessions: You can now store sessions in Action Pack using Danga’s memcache technology.
  • Generators guard against reserved words: Not only will ./script/generate model Thread be denied, you’ll also get a list of synonyms pulled live from WordNet!

That’s just a small taste of the 35 changes, fixes, and features introduced with Rails 0.9.3. You can read the full story in the changelogs for Active Record, Action Pack, and Rails.

Upgrading from Rails 0.9.2 to 0.9.3

There’s only one change you need to make in order to have your application updated from 0.9.2 to 0.9.3. In the config/environments/production.rb and config/environments/test.rb, you need to change:

  ActionController::Base.reload_dependencies = false
  ActiveRecord::Base.reload_associations     = false

…to:

Dependencies.mechanism = :require

And in config/environments/development.rb, you need to change:

  ActionController::Base.reload_dependencies = true
  ActiveRecord::Base.reload_associations     = true

…to:

Dependencies.mechanism = :load

If you’re coming on from 0.8.x, you’ll need to go through the Upgrading to 0.9 manual.

43things in 5,204 lines of Ruby on Rails

Eric Hodel was so kind as to show me the output of rake stats on 43things and it revealed that it took 5,204 lines of Ruby to create the current version. That’s pretty darn amazing considering they’re not even taking full advantage of the huge array of improvements in Rails 0.9.x and that the team consists of three out of four programmers new to Ruby.

Another round of applauds to the team at The Robot Co-op for creating such an interesting application in so few lines. Kudos!

Are you watching the health of your software?

Kent Beck has probably been more responsible for the uptake of automated testing amongst the general developer population than any other figure over the last five years. One of the reasons is that he’s such a great speaker and writer that you can’t help but paying attention. Another, of course, is that automated testing is naturally a Good Thing to do, so it shouldn’t be such a hard sell.

Anyway, as the second edition of his Extreme Programming Explained is hitting the street, Kent has broadened his focus from just testing to the concept of software health. It’s not just about passing the tests today, it’s about being in a position that allows you to pass the test tomorrow too.

He talks at length about this and other great metaphors in an IT Conversations recording called Developer Testing. It’s about one hour of Kent’s thoughts. For free. So what are you waiting for?

When you come back, all energized with a strong desire to improve the health of your software, do check out Steve Kellock’s A Guide to Testing the Rails. Rails is uniquely supportive of getting your test game on with the least amount of configuration or even learning. For all the controllers and models generated, you already have test suites waiting for test cases to enter. And running rake will execute the whole lot of them.

If you do need a bit more assistance in exactly how you should do testing, and especially unit testing, I can heartily recommend the Pragmatic Unit Testing book by Andy Hunt and Dave Thomas. It’s available in both a Java and C# flavor, but don’t let that scare you off, pretty much all of the meaningful lessons apply directly to any environment. Combined with Steve’s guide, you should be all set.

As a rule of thumb, you want your rake stats to report that you have a 1:1 ration between code and tests.

Watch for huge requests on default FCGI

As you might have noticed, 43things have been down for the count a few times since launch with nasty 500’s. The cause was the combination of default FCGI settings and a bad-ass RSS query that pulled out everything from the system at once and took up a couple of pages in the log.

That action couldn’t be rendered within the 30 second limit that FCGI imposes by default, so Apache suspended the connection to FCGI and caused hits to that particular FCGI process to go out of commission.

Lessons learned…

  1. Make sure you don’t have any actions that take longer than the timeout limit in FCGI
  2. Increase the default timeout limit if you have actions that you expect to take close to 30 seconds or more

How the redesign of the website came to be

Jakob Skjerning is sharing some additional details on what we went through creating the new uniform look for Ruby on Rails:

The project was pretty interesting since we wanted to give the existing parts of the Rails web presence a uniform look’n’feel, mixing Instiki with Trac with RDoc with new additions WordPress and Hierarki. That’s 3 different scripting languages and 5 different ways of templating.

Learning Ruby on Rails with 43things

Ruby on Rails is already going strong on 43things. Learn Ruby is #2 and Write an application on Rails is #8 according to the 43things Zeitgeist. So if you already have done or are doing these things, please do let 43things know and share your experience with all the other people currently working on it.

About the experience of building 43things itself with Ruby on Rails, Erik Benson writes:

My first exposure to Ruby on Rails was when I sat down and started building the prototype for this site (43 Things). From the start, it was easy to learn, full of wonderous surprises, and it encouraged excellent coding practices such as separation of controllers, models, and views, unit testing, and documentation.

It has only been a little over 3 months since I started working in Rails, and 43 Things will be launching soon having been written completely with it. Having used several other languages and frameworks to build websites in the past for both personal and professional sites (I used to work at Amazon), I can say that this has been the most enjoyable one yet.

The Robot Co-op takes 43things.com live!

First things first: The Robot Co-op has launched 43things! Go check it out right now. It’s a portal for ambitions where you track the 43 things you currently want to do with your life. It’s growing fast to become a unique view into the dreams and desires of the human race. Check out my 43 things, sign up, check it out. You can read the rest of this when you’re done playing…

So, I first got in contact Josh Petersen back in late May of last year as he had been tracking the pre-release hype of Rails and was intrigued. That lead to a visit to Seattle in late June where I got a chance to hang with Erik, Daniel, and Josh for a few days to help them explore the idea, inject a (over?) dose of cocky Less Software mentality, and of course convince them that Ruby on Rails was exactly the platform they wanted to develop 43things on.

Over the following months, Josh and friends retained 37signals to work on the user interface, hired Ruby programmer Eric Hodel and three more guys to have a team of seven working on the company and their first Ruby on Rails application. I kept growing inspired by the idea behind 43things, the confidence shown by the Robots in Rails, and impatient to see the final result.

How fitting then, that the Robots would launch 43things on the first day of the new year. Just in time for you to enter all those New Year’s resolutions and committing to them in public. I’m already busy getting lost in the intensely intriguing world of desires. I could easily see one spending hours and hours and hours browsing the depths.

So there you have it. The second poster-app for Rails. Smashing! Huge congratulations to Ivan, Todd, Bob, Erik, Eric, Daniel, and Josh. You did it, guys. Can’t wait to see this thing skyrocket.