Attending Voices That Matter : iOS Developers Conference


I am very excited to be attending the Voices That Matter: iOS Developers Conference in Boston, November 12-13, 2011.  It is put on by the folks of Addison-Wesley Professional, one of my favorite publishers.

The speaker line-up looks fantastics, from the VTM site:

Learn all about developing applications for the iPhone and iPad at the Voices That Matter: iOS Developers Conference. You can learn from leading authors like Erica Sadun, Chris Adamson, Erik Buck and Aaron Hillegass and meet industry leaders such as Graeme Devine, Rod Strougo, Jeff LaMarche and Mike Ash. Join us in Boston, November 12-13, 2011 and learn how you can leverage Apple’s commitment to the iOS platform.

This will be the first Voices That Matter conference I have attended and will be doing so on behalf of InfoQ.  I hope to meet and talk with some speakers and attendees looking to chat about what they’re up to.  If you are reading this and plan on attending, send me an email.

As my company is taking on more projects in the mobile space, particularly iOS applications, I find it increasingly important to get out and meet others who are also creating mobile applications.

Anyone interested in attending, registration is still open and early bird ends September 30, 2011.  They have active Twitter and Facebook accounts where updates about the conference and authors are posted.  I hope to see you there.

InfoQ: Exceptional Ruby

Exceptional ruby

I picked up a copy of the new book by Avdi Grimm titled Exceptional Ruby, an ebook entirely focused on best practices relating to error handling in Ruby.  I have to say it’s a great book and really goes into nice detail about a subject most developers treat as an afterthought.  From the book’s web site:

Exceptional Ruby is an in-depth guide to exceptions and failure handling in Ruby. Over 100 pages of content and dozens of working examples cover everything from the mechanics of how exceptions work to how to design a robust failure management architecture for your app or library. Whether you are a Ruby novice or a seasoned veteran, Exceptional Ruby will help you write cleaner, more resilient Ruby code.

I also had a chance to talk with Avdi about the book for InfoQ, please give it a read.

Readers can also receive a $3 discount off the already great price of $15, just go check out the interview to receive the discount.

InfoQ: Learning Ruby on Rails with Michael Hartl

Rails3tutorial cover

My interview with Michael Hartl of the Ruby on Rails Tutorial series is now live on InfoQ.  Michael is such an interesting guy and has a diverse background ranging from physics instructor at CalTech to Ruby on Rails teacher.

Please give Learning Ruby on Rails with Michael Hartl a read.

You can find out more information about the printed version of Michael’s book Ruby on Rails 3 Tutorial: Learn Rails by Example (Addison-Wesley Professional Ruby Series) on

InfoQ: Meet the Goliath of Ruby Application Servers

Pr ruby

I have had the opportunity recently to discuss Goliath, a new Ruby application server from PostRank Labs, with its creator Ilya Grigorik.  The article and interview titled, Meet the Goliath of Ruby Application Servers, is now up on the InfoQ web site, please give it a read.  I think it is a unique and very useful project worth giving a look.

I was fortunate enough to have a look at the project before it was released and was able to work with it.  I have to say that I am really excited about this project to solve some problems in my own work.  I had previously thought of using node.js but was turned off by the thought of having to write some server-side JavaScript.

Goliath uses Ruby 1.9+ to take advantage of fibers (continuations).  This is one example why developers should be moving to Ruby 1.9.2 and beyond.  Hopefully we see more projects like Goliath that take advantage of 1.9’s features and prod developers to a better Ruby.

InfoQ: DataMapper Turns the Big 1.0

Since my visit to RailsConf in June I have been pursuing various topics to write about for InfoQ.  I have been particularly interested in DataMapper and the fact that version 1.0 has been released.

I had the chance to talk with Dan Kubb, the lead on the project, about version 1.0 and it went out this morning on InfoQ, titled DataMapper Reaches 1.0 Milestone.  It was interesting to see the details of this project while thinking how Rails uses ActiveRecord.

One of the more impressive aspects of this project is the number of plugins available.  From the DataMapper web site:

Resource Plugins

These plugins modify the behavior of all resources in an application, adding new functionality to them, or providing easier ways of doing things.


This provides validations for resources. The plugin both defines automatic validations based on the properties specified and also allows assignment of manual validations. It also supports contextual validation, allowing a resource to be considered valid for some purposes but not others.


This defines callbacks on the common timestamp properties, making them auto-update when the models are created or updated. The targeted properties are :created_at and :updated_at for DateTime properties and :created_on and :updated_on for Date properties.


This provides methods for database calls to aggregate functions such as count, sum, avg, max and min. These aggregate functions are added to both collections and Models.


This provides several more allowable property types. Enum and Flag allow a field to take a few set values. URI, FilePath, Regexp, EpochTime and BCryptHash save database representations of the classes, restoring them on retrieval. Csv, Json and Yaml store data in the field in the serial formats and de-serialize them on retrieval.


This provides ’to_*’ methods which take a resource and convert it to a serial format to be restored later. Currently the plugin provides to_xml, to_yaml and to_json


This plugin provides foreign key constrains on has n relationships for Postgres and MySQL adapters.


This plugin allows properties on resources, collections and models to incremented or decremented by a fixed amount.

is Plugins

These plugins make new functionality available to models, which can be accessed via the is method, for example is :list. These make the models behave in new ways.


The model acts as an item on a list. It has a position, and there are methods defined for moving it up or down the list based on this position. The position can also be scoped, for example on a user id.


The model acts as a node of a tree. It gains methods for querying parents and children as well as all the nodes of the current generation, the trail of ancestors to the root node and the root node itself.


The model acts as an item in a ‘nested set’. This might be used for some kind of categorization system, or for threaded conversations on a forum. The advantage this has over a tree is that is easy to fetch all the descendants or ancestors of a particular set in one query, not just the next generation. Added to a nested set is more complex under the hood, but the plugin takes care of this for you.


The model is versioned. When it is updated, instead of the previous version being lost in the mists of time, it is saved in a subsidiary table, so that it can be restored later if needed.


The model acts as a state machine. Instead of a column being allowed to take any value, it is used to track the state of the machine, which is updated through events that cause transitions. For example, this might step a model through a sign-up process, or some other complex task.


The model becomes ‘remixable’. It can then be included (or remixed) in other models, which defines a new table to hold the remixed model and can have other properties or methods defined on it. It’s something like class table inheritance for relationships :)


These plugins provide new adapters for different storage schemes, allowing them to be used to store resources, instead of the more conventional relational database store.


An adapter for the JSON based document database couch-db. The adaptor has support for both defining models backed by a couch-db store and also for couch-db views.


An adapter for a XML based REST-backed storage scheme. All the usual DataMapper operations are performed as HTTP GETs, POSTs, UPDATEs and DELETEs, operating on the URIs of the resources.

Integration Plugins

These plugins are designed to ease integration with other libraries, currently just web frameworks.


Integration with the merb web framework. The plugin takes care of setting up the DataMapper connection when the framework starts, provides several useful rake tasks as well as generators for Models, ResourceControllers and Migrations.


Integration with Rails. It provides a Model generator and also takes care of connecting to the data-store through DataMapper.

Utility Plugins

These provide useful functionality, though are unlikely to be used by every project or assist more with development than production use.


A model factory for DataMapper, supporting the creation of random models for specing or to fill an application for development. Properties can be picked at random or made to conform to a variety of regular expressions. dm-sweatshop also understands has n relationships and can assign a random selection of child models to a parent.


Migrations for DataMapper, allowing modification of the database schema with more control thanauto_migrate! and auto_upgrade!. Migrations can be written to create, modify and drop tables and columns. In addition, the plugin provides support for specing migrations and verifying they perform as intended.


This plugin eases operations involving models across multiple repositories, allowing wrapping in arepository(:foo) block to be replaced with a MyModel(:foo).some_method call.


Observers watch other classes, doing things when certain operations are performed on the remote class. This can be anything, but they are commonly used for writing logs or notifying via email or xmpp when a critical operation has occurred.


The dm executable is a DataMapper optimized version of irb. It automatically connections to a data-store based on the arguments passed to it and supports easy loading of DataMapper plugins, models from a directory as well as reading connection information from a YAML configuration file.


This provides alternate syntax for queries, replacing the hash which DataMapper uses with a more ‘ruby-ish’ use of &&, == and =~.


ActiveRecord style syntax for DataMapper. This includes functionality such as find_by_name,find_or_create and find_all_by_title.

DataMapper puts a lot more of the responsibility of the model right in the model definition, similar to Django and other frameworks.  The nice part about this is everything is in one place and we remove the need for migrations when creating new models.  Currently, migrations are needed to change a model but that may change too.

I am looking forward to using DataMapper more.

InfoQ: Architecting TekPub – Moving from ASP.NET MVC to Ruby on Rails


UPDATE: Rob Conery posted a great overview of using MongoDB at Tekpub.  The InfoQ post also stirred up some discussion on Hacker News.

I had the opportunity over the past week to talk with Rob Conery (ex-Microsoft) and James Avery about TekPub, one my favorite training sites on the web, for a detailed case study for InfoQ.

The interview was particularly interesting as it covers Tekpub moving from ASP.NET MVC to Ruby on Rails and ASP.NET MVC is the subject of a book Rob Conery co-authored.  This says a lot about the position Microsoft puts small companies in when trying to build a product.   It also says a lot about the advantages open source gives to these small companies.

As often is the case, cost is a big factor.  Please give it a read.  The interview is up now – Architecting TekPub – Moving from ASP.NET MVC to Ruby on Rails.

InfoQ: Scout – Extensible Server and Application Monitoring

Scout_large It has certainly been a while since I published anything on InfoQ but I had the opportunity recently to talk about Scout with Andre Lewis, the co-founder of the company.  The interview titled Scout – Extensible Server and Application Monitoring went up this morning.

I have had the opportunity to use Scout and witness the power of the application.   One of the most impressive aspects I see is the plugin system.  Scout offers a bunch of plugins, all open source.  Developers can also freely develop their own plugins for their own purposes and are welcome to contribute them as open source.  An all around win.

Please go give it a read.


InfoQ: Rescuing Your Ruby on Rails Projects

Just a quick note:  I recently purchased the Rails Rescue Handbook by Mike Gunderloy from his web site.  The book gives a lot of great tips and best approaches to taking on a Rails project that may not be up-to-par.

I think the book addresses many of the areas we face as Rails consultants on daily basis and should guide us in our own coding efforts and reviewing and refactoring the code of others.

Mike talked with me about the book in an interview for InfoQ to give folks a better understanding of where problems and bad code can occur and what to do about it. 

Please take the time to check out the interview – Rescuing Your Ruby on Rails Projects.


InfoQ Interview with Jeremy McAnally – Ruby in Practice

mcanally_cover150 Just wanted to point out my interview with Rubyist, Jeremy McAnally is up on InfoQ.  The interview covers Jeremy’s new book, Ruby in Practice.  I really love talking to other Rubyists and my role at InfoQ let me do this.  I usually learn a few things from every interview, whether it be the perspective they see in Ruby, the future of Ruby or some obscure feature I wasn’t aware of before.  In this case I really like Jeremy’s perspective of Ruby in the enterprise.

The interview also includes exclusive access to Chapter 5 : Web Services from the book.  Readers interested in how to make best use of RESTful web services, SOAP and legacy system integration with Ruby should give it a read.

Read the interview in its entirety on the InfoQ web site – Ruby in Practice with Jeremy McAnally.  Any feedback is surely welcome.


Interview with David A. Black, The Well-Grounded Rubyist


I recently had the opportunity to review a copy of David A. Black’s new book, The Well-Grounded Rubyist.  I interviewed David for InfoQ, which is now live on the site.  Please take a moment to give the interview a read, I think it was pretty insightful.

David covers many topics including how he got started with Ruby, suggestions on how developers should learn Ruby to his views on moving to Ruby 1.9.1:

I’m afraid that, with all due respect to the core Ruby development team, I’m not a believer in 1.8.7. It’s been described as a stepping-stone to 1.9, and that, together with some of the birth pains of 1.9 as a stable version, has provided a kind of safe haven for people who want some 1.9-era features but are skittish about 1.9. That’s kind of unfortunate.

I’d encourage people very strongly at least to install 1.9.1, and see what problems you come up against. I don’t think that making 1.8 more like 1.9 is the answer. It sends the message that there’s a reason to avoid 1.9 — and while that may have been true before 1.9.1, as far as I can tell it’s now stable and on as solid a footing as any such release before it.

Although the piece is an interview and not a review of the book, I had to hold back my personal views.  I think this book is a definite read and should be in every Ruby developer’s library.  If you are new to Ruby or experienced, this book holds a lot of great information and is a great reference to how Ruby works, the standard libraries and best-practices.  When I review books I normally are sent printed review copies or PDF versions of they exist, I liked this book so much I bought my own copy.

I will likely give a detailed review at another time so look for it here in the future.