RadRails 1.0 released

Aptana has released RadRails 1.0 with a bunch of cool new features. I really like their debugging and profiling tools that allow you to inspect the call graph and see where the hot spots in your code are. The fact that RadRails is free and open source as well certainly doesn’t hurt.

RailsConf seats filling up

The $100 early-bird discount lasts until April 10th, but it seems like the open seats might not. So if you’re looking to meet up with the rest of the Rails community in Portland, you probably better get your registration in and your travel plans in line. It’s going to be a blast.

Capistrano 2.2.0

Capistrano is a utility for managing remote servers and automating remote tasks. It is popularly used to deploy Rails applications (but can do oh, so much more!). Version 2.2.0 is now available (well, it’s released, anyway, you might need to wait for the file to propagate to the gem mirrors).

gem install capistrano

Version 2.2.0 sports the following changes:

FEATURE: Dynamic role definition. The role() method now accepts a block, which should return either a host name, a Capistrano::ServerDefinition object, an array of host names, or an array of Capistrano::ServerDefinition objects. This can be used to describe the servers in a role at runtime.

role :app do
  hosts = some_method_that_looks_up_the_current_hosts

FEATURE: Alternative server-centric role definitions, using the server() method:

role :app, "server"
role :web, "server"

# the above is the same as this:
server "server", :app, :web

FEATURE: Support for a :max_hosts option in tasks, that restricts the task so that it is only executed in hosts at a time, in chunks. This helps people who use Capistrano with very large numbers of servers, and prevents them running into connection caps and from running out of memory.

task :ping, :max_hosts => 100 do
  # anything here will only run against 100 hosts at a time

# alternatively, you can pass :max_hosts to the run command itself for
# finer granularity
task :pong do
  # this will run on ALL hosts at once
  run "something"

  # this will run on no more than 100 hosts at a time
  run "something-else", :max_hosts => 100

ENHANCEMENT: Improved Git support!

ENHANCEMENT: Password prompt support in the Mercurial SCM.

ENHANCEMENT: Implement Bzr#next_revision so that pending changes can be reported correctly, and use checkout —lightweight instead of branch.

ENHANCEMENT: Bring back the :p4sync_flags and :p4client_root variables for perforce SCM.

Additionally, there are several minor bugs and typos that have been fixed. You can see the CHANGELOG for all the gory details.

As ever, please report bugs via the Rails trac, at http://dev.rubyonrails.org. And if you aren’t yet subscribed to the Capistrano mailing list, it’s where all the cool cappists hang out.

RubyFools: Danish Ruby conference, April 1-2

We normally don’t cover general-purpose Ruby conferences here, but since RubyFools is actually going down in the birth place of Rails and I won’t be able to be there, I thought the least I could do was mention it.

RubyFools is happening from April 1st through 2nd and will feature Ruby-creator Matz and Dave Thomas of Programatic Programmers as keynotes along with lots of other speakers.

I highly recommend checking it out. Copenhagen is such a nice place to visit.

Write rails apps in your browser

Heroku is a rails platform with a twist: it all runs in your browser.

The entire platform is build around a web based IDE which allows full rails development and deployment. Your apps are deployed to Amazon’s Elastic Cloud by the push of a button.

ActiveMerchant 1.3 released

ActiveMerchant 1.3 has been released. The focus on this latest release was the addition of standardized support for the Address Verification System (AVS) and credit card verification value (CVV2) checks across all gateways which is the latest extraction from Shopify.

AVS information helps reduce fraud by checking the billing address of the customer with the cardholder information on file at the credit card company. CVV2 checks help ensure that the cardholder information has not been stolen from a database of credit card numbers because it is forbidden to record or store CVV2 numbers in any way.

The results of the AVS and CVV2 checks are now available in the response object. ActiveMerchant does all the work of interpreting the information returned from the payment gateways for you and makes the information available in a consistent hash format.

Sample AVS/CVV2 result:

response.avs_result['message']      #=> 
     "Street address and 9-digit postal code match."

response.cvv_result['message']      #=> 
     "Suspicious Transaction."

# Details: 
response.avs_result['code']         #=> "X"
response.avs_result['street_match'] #=> "Y"
response.avs_result['postal_match'] #=> "Y"
response.cvv_result['code']    #=> "D"

Other notable improvements with the 1.3 release include:

  • Improved documentation
  • Common interface to AVS / CVV2 results
  • New gateways, including Authorize.net Recurring Billing (ARB)
  • Improved supported feature set of many existing gateways
  • Automatically retry failed connections (when it’s safe)

Coinciding with the 1.3 release of ActiveMerchant is the [ActiveMerchant PeepCode PDF](http://peepcode.com/products/activemerchant-pdf) by [Cody Fauser](http://www.codyfauser.com). The PDF goes over the basics of payment processing, making purchases with ActiveMerchant, and security considerations to keep in mind when processing credit cards in your Rails application. The PDF also walks through the development of a sample Rails application that addresses topics such as order pipelines, order state management and the appropriate unit testing a financial application requires. It is definitely a great read if you are curious about payment processing or require payment processing in your application.

RailsConf '08: Registration is open!

The registration for RailsConf ‘08 is now open. And if previous years are any indications, I’d register sooner rather than later if you intend to go. We’re returning to the same conference hall in Portland as last year, so we won’t be able to fit materially more people, despite the fact that so many new faces has joined the community this year.

The conference is happening from May 26th till June 1st. If you register before April 10th, there’s a $100 discount.

The content this year will also take a step up in terms of experience required for many sessions. Less “I’m just getting started, how does it work?” and more “I’ve been doing this for a while, how can I become better?”.

A good number of the sessions are already announced, as well as the tutorials. But the keynote names are still being pinned down. And we’re also reserving some session slots for emerging topics as we get closer to the conference.

Would you believe that this is going to be our fifth RailsConf? That’s just incredible. I can’t fathom that time has passed by so quickly. And I can’t wait to meet everyone again this year in Portland. The atmosphere at RailsConf is always radiant with enthusiasm and passion. People who love what they do are very contagious to be around.

The Rails Way and Advanced Rails Recipes

The flow of new Rails books seems unstoppable these days and it’s hard to keep up with all of the new releases. But there are two books that I’ve recently have had a chance to taste that I’d like to highlight.

The first is The Rails Way by Obie Fernandez, which I wrote the foreword for. It’s a big whooper of a book (900+ pages!), but also a very comprehensive walk-through for the Rails developer who already has his feet wet. It also includes a good dose of community commentary on the how’s and why’s, which I rather like.

The second is Mike Clark’s Advanced Rails Recipes, which is still not finished, but there’s a beta book available. It takes up from Chad Fowler’s original Rails Recipes book and gives you another 72 how-tos on more in-depth topics, such as REST, deployment, and testing. I’ve had a chance to taste a few of the recipes already and it’s good stuff.

If there’s a new Rails book that you really like, write a note in the comments and point people to it.