#122: That’s the Kind of Friend you are

In this episode Jason and Dan bring you all the latest news and links from the Ruby and Rails worlds. And from the GitHubs.

Links for this episode:

June 30, 2010: The Triumphant Return of the Monster Link Post

The end of the repair story

At the end, a very positive experience with Apple support. The repair was free, done when they said it would be done, and all told, I spent less than fifteen minutes in the store between both halves of the visit. Plus, they replaced the top part of my pre-unibody MacBook, which was worn down and discolored from my gunky hands, almost as though they didn’t want an ugly Mac in the field.

Book Status

With the laptop back, I’m back to work, last night going back over the Style chapter. I think now the plan is to do a slightly smaller next beta that would get out next week, just the Coverage and Style chapters, with the next batch, probably the Legacy and redo of the startup example coming shortly on its heels.

Also, the book has somewhat quietly shown up on Amazon and, I presume, other online outlets.

Of course, the beta is still available at PragProg.


Many, many links, as I catch up on an entire week’s worth.

Thoughtbot announces that factory_girl is now split into a separate Rails 3 gem, in much the same way that Cucumber and RSpec are.

Also in Thoughtbot-land, the should_change command has been deprecated from Shoulda.

Jeremy McAnnaly announces the 2010 Ruby Hoedown, after some rescheduling due to the Nashville flooding. Again, it’s the low, low, price of free. I’m hoping to break my 0-for-2010 streak on conference proposals with my submission.

Everyday Rails has a good post about getting Rails 3 and RVM working together.

I haven’t watched this video yet, but a little Don Norman is a good thing, right? (via Joel Spolsky)

Test Inline is a Ruby library from Eric Anderson to put tests in the Ruby source file. Eric freely admits that this is an experiment, which is good because my experience with this kind of tool (Python doctests) is that it gets messy pretty quickly.

Ever think that Lemmings would make a great iPhone game? Me too. Also, the people who have the rights to the code. Coming soon.

I love Steve Martin. He’s posted the rider for his tours. A sample: “BUFFET … Six-packs of any canned beverage for Steve to compare his abs to.”

I’ve been waiting for this: Lifehacker posts some Handbrake presets for iPad and iPhone 4. Seem decent, but a bigger file size than what I had been doing.

Please don’t do this. It’s a bad idea and will make your code harder for other Ruby developers to maintain.

Two from David Chelimsky: Having a topic branch when contributing to git projects, and a change in how views are handled in controller tests in RSpec 2.

I really need to watch this presentation from RailsConf on Beautiful Markup by John Athayde.

Speaking of RailsConf, here’s a retrospective from John Trupiano of the BohConf “unconference” that happened alongside.

Dan Ingalls was one of the people behind Smalltalk 80, here’s an interview with him.

Over at Teach Me To Code, a screencast about setting up a Rails project and writing the first Cucumber feature.

Still in Cucumber, Michael Orr shows how you can use an instance variable to track objects in a Cucumber test. I do this a lot, myself, although I’m not completely convinced that you get a cleaner test suite at the end.

Rands has a great post about his writing process. I love that everybody does this a little differently, although calling what I do a “process” is probably a little much.

Paolo Perrota, author of Metaprogramming Ruby, has a nice note about how great the Ruby community is.

UxMyths seems like a useful site to browse.

Speaking about great writing, I loved, loved the opening of this article by Adam Keys about why he always comes back to TextMate. Also some good comments. I hadn’t thought of the issue exactly this way, but it makes perfect sense.

The Time of Day gem lets you treat ActiveRecord time columns without their date information for certain kinds of comparisons.


I think I mentioned that I did a talk at Refresh Chicago last week. It was fun, but we think turnout was down due to the tornado warning over Chicago that night — it’s possible the sirens acted as a deterrent. Well, video of that is not up, but here’s a video of the storm that night, featuring lightning striking three Chicago skyscrapers at the same time.

Filed under: Cucumber, Don Norman, iPhone, Rails 3, Ruby, rvm, Shoulda, Steve Martin, UXD, writing

Could Ruby be Apple’s Language and API Future?

http://parveenkaler.com/2010/06/30/could-ruby-be-apples-language-and-api-future-3/ (or on Ruby Inside)

There has been a shift in development landscape over at Apple. John Siracusa of Ars Technica recently published an article about Apple’s language and API future. I believe Apple is preparing to transition to Ruby as their next default language.

Parveen Kaler

Parveen pulls together some interesting threads about MacRuby, LLVM, and XCode to argue that Apple might be looking at Ruby as a future first-class language for their platforms.

I’m going to put myself on the line with a hunch here and say, yes, MacRuby is going to become a first-class language at Apple. Seriously. Apple’s investment in MacRuby is an interesting one for a company not known for frivolity in its crazy-scale R&D operations and there’s something brewing there. Either that, or they’ll disband the whole thing.

Parveen’s post is being discussed over on Hacker News where danudey makes a good point for why Apple would not make MacRuby a first class language:

I can’t really see Apple doing this, if for no other reason than Objective-C is something they can control, and Ruby isn’t. If the core Ruby developers decide they want to add more features, change the language’s underpinnings, etc. Apple’s left to play catch-up. If Apple wants to add features, then they basically have to fork the language and hope their changes get merged in.

Apple’s shown (and been shown) how much of a benefit it is to control your own destiny; even with Ruby being open-source, it’s still an outside influence they have to work with or against. Objective-C, for all intents and purposes, is their language, one they can take in any direction they want.


Seems like reasonable thinking but I say “watch this space.”

Default to Bamboo

Deployment stacks have been a huge success. For many developers, heroku create —stack bamboo has become the default whenever creating new apps. With the latest version of Rails 2 and Rails 3 both requiring the Bamboo stack, we’re excited to make Bamboo the new default.

Effective immediately, all newly created apps will default to the bamboo stack with REE 1.8.7. You can still use the old aspen stack if you’d like by simply specifying `heroku create —stack aspen`. Existing apps stay on the stack they are on unless you explicitly migrate them.

A key feature of bamboo is to eliminate pre-installed gems. This provides app developers with considerably more flexibility in managing their apps. You can easily use any version of any gem by simply including it in your .gems file or Bundler Gemfile. You’ll need to remember to include all gems you are using. If you’re using Gemfile, this is automatically done for you. If you’re using .gems, please make sure to include all the gems you use, INCLUDING rails!

Gartner: Agile is Mature And Proven

Michael Blechar, vice president in Gartner’s Applications Architecture Research division, just posted his thoughts on Agile development, a development method we at ELC prefer to achieve superior results. Blechar’s post go back to a recently published Gartner research notes entitled “Agile Development: What’s Still Fact and What’s Still Fiction?” (subscription required.)

The Great Ruby Benchmark Shootout (on Windows)

http://programmingzen.com/2010/06/28/the-great-ruby-shootout-windows-edition/ (or on Ruby Inside)

This post contains the results of a Ruby shootout on Windows that I recently conducted. [..] All tests were run on Windows 7 x64, on an Intel Core 2 Quad Q6600 2.40 GHz, 8 GB DDR2 RAM, with two 500 GB 7200 rpm disks.

Antonio Cangiano

Antonio Cangiano has pitched Ruby 1.8.7, 1.9.1p378, 1.9.2, JRuby 1.5.1 and IronRuby 1.0 against each other for a Ruby performance “shootout” on Windows 7. JRuby 1.5.1 came in as fastest.

#121: What is Mongo DB?

In this episode, Jason and Dan bring you the latest news from the Ruby and Rails world and talk briefly about the mythical Mongo DB.

Links for this episode:

iPad or Bust

With my laptop still on the disabled list, I’ve been using the iPad as my primary machine all week. Some thoughts:

Overall, it’s been largely non-disruptive, for two reasons. One is that I borrowed a bluetooth keyboard for the duration, and the second is that I’m not in a position at the moment where I need to code on my laptop, since my work site has developer stations. They keyboard changes the iPad experience quite a bit, really turning it into a nice writing station.

I’m going to whine first, because I think the whines are more interesting. The plus stuff is all variations
on “This gizmo really is cool, you know.”, basically, about 75% of my non-coding work was picked up pretty easily.


There are about three or four serious gaps in what I’ve been able to do this week. The biggest is the inability to do serious code or blog editing. I’ve been trying to find an app that would let me at least poke at the book files this week. Basically, it needs just a few features: a) read/write to drop box, b) support for either markup shortcuts or TextExpander, and c) ability to see non-standard extensions as text. There doesn’t seem to be an iPad editor that supports all these features.

None of the programmer or HTML editors that are there have the kind of reviews that would lead me to want to buy them site unseen. Maybe in a few months the space will mature. I’m trying MyWritingNook and keeping an eye on the as-yet-unreleased WriteRoom/iPad, which looks like it will be close.

Somewhat more surprising, there doesn’t even seem to be a decent blogging editor. The WordPress app is horrible — the editor is very basic, and the only thing that kept me from losing my last post entirely was having been warned that I might, so I pasted the whole thing before I tried to post it. This post is being written using MyWritingNook, which both supports TextExpander and lets me export via email so I can post. I suppose it would be possible to do a link post, but the workflow — going back and forth between Reeder, Osfoora, and the editor, pasting all the links — seems daunting. I probably should try one, though, the MyWritingNook flow makes it seem possible. Daniel Jalkut, paging Daniel Jalkut. Please?

The other serious gap is generally getting files onto the thing. There’s no concept of a podcast subscription, which is irritating. I have files on hard drives that I’d like to see, videos or ePubs, some of these things can be gotten onto the device in the absence of the home iTunes library, but it’s not easy or consistent. (Late breaking story — today the iPad media apps decided to crash and rebuild their library without any of my media files. Doubtful I can fix this before my laptop gets back).

There’s a minor issue with things that would normally run in the background. IM and Campfire, most notably. (I know you can have IM systems that push… haven’t found them to be totally reliable). A couple of widgets that I normally check frequently, that kind of thing.

Interestingly, I’ve only missed Flash a tiny bit. The worst web experience is that I’m forced to use the old MS Exchange web app for client-site email, and its bad enough with a mouse, and borderline unusable with a touchscreen.

I had to give a presentation last week. Luckily the slides were in Dropbox, so I could easily import them into iPad Keynote and edit from there. Keynote iPad is very dancing-dog like in the sense that it’s so amazing that the dog dances at all that it seems churlish to criticize how well it dances. Still, it’s pretty much Keynote light, or as I characterized it when giving my talk, like using Keynote with chopsticks. And I’m very clumsy with chopsticks. Not only is it kind of feature-light, it’s just about the only app that makes the iPad feel sluggish (the native iPod app is another). Plus, it was a little crashy. On the plus side, hooking it to a projector via the VGA cable was a snap, and it’s often a pain on Desktop Macs. The speaker screen could be a lot better.

Not Whining

Overall, though, those things are small potatoes and the overwhelming impression is how not-disruptive it’s been to be on an iPad for email, RSS, Twitter, basic text stuff, and so on. The iPad is still snappy, fun to use, and basically great for this kind of stuff.

Having the keyboard undeniably extends the power of the iPad — the soft keyboard is okay for short things, but I haven’t gotten nearly as fast on it as I am on a full keyboard, and it does take up half the screen. With a keyboard, it’s a really nice setup for writing. It’s light — my backpack is super noticeably lighter this week. Pages is quite responsive for just basic typing (boy would I love to see Scrivener on here, though MyWritingNook seems like a first approximation. I wish something could read my existing Scrivener files, though). It’s somewhat ergonomically flexible — I was able to use it with the pad on a coffee table and the keyboard on my lap and it wasn’t bad, and you almost by definition get the WriteRoom-esque full screen experience. The keyboard is acquired and de-acquired quickly enough that its feasible to swap back and forth in the same session. It’s got a lot going for it.

That said, the keyboard is not fully integrated into the iPad experience. One obvious missing feature is that you can’t arrow up and down through a select list, such as the suggestions when you type into the Safari address bar. Reaching over the keyboard to the touch screen to edit feels odd, like interface metaphors are colliding at full speed. It’s also hard to see if the keyboard is on — the only screen notification you get other than the soft keyboard not showing up is the bluetooth symbol in the upper-right. I’ve accidentally had the keyboard on in my backpack and had to pause to figure out why I wasn’t getting the soft keyboard.

Still, I’ve gone from skeptical about the value of a real keyboard as an add-on to seriously considering getting one after I have to give this back. And I’m very interested in what the bluetooth keyboard/iPhone 4 experience feels like. That has the potential to be a very interesting mobile experience.

The iPad, in general, encourages a really close feeling with the stuff you are doing. Watching something on the iPad feels like you are curling up with a movie in the same kind of cozy way that you do with a good book. The keyboard gets in the way a little bit, but there’s still something amazing about the size to power ratio going on here. I suspect that it will feel very cozy for writing fiction, I just wish I could more cleanly get it to work with my PML pragmatic files.

Also, as usual what Charles Stross said.

Filed under: iPad

#220 PDFKit

Generating PDFs in plain Ruby can be a lot of work. Instead, consider generating PDFs from HTML using PDFKit.

#220 PDFKit

Generating PDFs in plain Ruby can be a lot of work. Instead, consider generating PDFs from HTML using PDFKit.

RPCFN: The Game of Life (#11)

Ruby Programming Challenge For Newbies

RPCFN: The Game of Life (#11)

By Elise Huard

About Elise Huard

Elise HuardElise Huard is based in Brussels, Belgium and is the owner of Jabberwocky, a solutions company mostly focused on Rails. She has worked with a few other technologies before falling in love with Rails and Ruby about 3 years ago and going freelance to work with Ruby full time. She contributes to open source projects as much as she can, and has given talks at a few Ruby and Rails conferences. She’s a jack of all trades, loves reading, tinkering, food, travel, learning, and people out of the ordinary.

Elise has this to say about the challenge:

This challenge consists in implementing the game of life. This is a problem that is simple to understand, but requires some thought to implement correctly. Tests will help you spot your own reasoning fallacies. And of course, every hacker has to have implemented the game of life at least once :)

Our Awesome Sponsor

This monthly programming challenge is sponsored by Backup My App.

Backup My App

Backup My App is an automatic backup service for Ruby on Rails applications. You simply install the plugin to your Rails application and they handle the rest of the process. They store backup history for several weeks and you can restore any of them automatically. Try out their 1 GB plan for free. Backup My App has sponsored this challenge and is proud to make this contribution to the Ruby community.


  • The participant with the best Ruby solution (if there is a tie between answers, then the one who posted first will be the winner) will be awarded any one of PeepCode’s Ruby on Rails screencasts and a free 10 GB account for a year from Backup My App.
  • From the remaining working Ruby solutions, three participants would be selected randomly and each one would be awarded any one of Pragmatic’s The Ruby Object Model and Metaprogramming screencasts.
  • All the participants in this challenge (except the participant with the best Ruby solution) will get a free 5 GB account for 6 months from Backup My App.

The four persons who win, can’t win again in the next immediate challenge but can still participate.

The Ruby Challenge


The Challenge

The entire challenge details are available at: http://github.com/elisehuard/game_of_life

How to Enter the Challenge

Read the Challenge Rules. By participating in this challenge, you agree to be bound by these Challenge Rules. It’s free and registration is optional. You can enter the challenge just by posting the following as a comment to this blog post:

  1. Your name:
  2. Country of Residence:
  3. GIST URL of your Solution (i.e. Ruby code) with explanation and / or test cases:
  4. Code works with Ruby 1.8 / 1.9 / Both:
  5. Email address (will not be published):
  6. Brief description of what you do (will not be published):


  • As soon as we receive your GIST URL, we will fork your submission. This means that your solution is frozen and accepted. Please be sure that is the solution you want, as it is now recorded in time and is the version that will be evaluated.
  • All solutions posted would be hidden to allow participants to come up with their own solutions.
  • You should post your entries before midnight of 2nd Aug. 2010 (Indian Standard Time). No new solutions will be accepted from 3rd Aug. onwards.
  • On 3rd Aug. 2010 all the solutions will be thrown open for everyone to see and comment upon.
  • The winning entries will be announced on this blog before 10th Aug. 2010. The winners will be sent their prizes by email.

More details on the RPCFN?

Please refer to the RPCFN FAQ for answers to the following questions:


RPCFN is entirely financed by RubyLearning and sometimes sponsors, so if you enjoy solving Ruby problems and would like to give something back by helping with the running costs then any donations are gratefully received.

Click here to lend your support to: Support RubyLearning With Some Love and make a donation at www.pledgie.com !


Special thanks to:

  • Elise Huard.
  • Sponsors Backup My App.
  • GitHub, for giving us access to a private repository on GitHub to store all the submitted solutions.
  • The RubyLearning team.


Contact Satish Talim at satish [dot] talim [at] gmail.com OR if you have any doubts / questions about the challenge (the current problem statement), please post them as comments to this post and the author will reply asap.

The Participants

There are two categories of participants. Some are vying for the prizes and some are participating for the fun of it.

In the competition

  1. Dominik Masur, Germany
  2. Sergey Kruk, Russian Federation
  3. Mark Mba Wright, USA
  4. Andrew Cox, U.K.
  5. Julio C. Villasante, Cuba
  6. Nils Riedemann, USA
  7. Valério Farias, Brazil
  8. Christopher Fortenberry, USA
  9. Falk Pauser, Germany
  10. Sam Johnson, Australia
  11. Brad O’Connor, Australia

Just for Fun

  1. Trevor Fountain, U.K.
  2. William Crawford, USA

Previous Challenge

RPCFN: Business Hours (#10) by Ryan Bates.

Note: All the previous challenges, sponsors and winners can be seen on the Ruby Programming Challenge for Newbies page.


  • The (#12) challenge by David Griffiths, USA is scheduled for Aug. 2010.

Technorati Tags: , , , , ,

Gregg Pollack on Screencasting and Podcasting for Developers (in 10 minutes)

I’ve been itching to do some audio or video interviews on Ruby Inside – here’s the first! Gregg Pollack of EnvyLabs and Ruby5 (previously of RailsEnvy fame) is doing a screencasting and podcasting workshop at BizConf so I thought I’d ask him what that entails and how developers can benefit from learning about these media. (I like things short and simple so the interview is just 10 minutes long.)

Link to YouTube in case the video embed doesn’t work for you.

Products mentioned by Gregg include Screenr, Jing, ScreenFlow, and Camtasia for Mac. Gregg is also keen for you to get in touch with him if you have anything to promote on the Ruby5 podcast.

Disclaimer: BizConf is a Ruby Inside sponsor, but while this is not a sponsored post, it seemed a good opportunity to talk with them! Hopefully I’ll be doing something with Obie Fernandez soon too.

ELC was at Structure 2010!

After two full days of incredibly powerful and informative speakers, one of the better panels at Structure 2010 was all about hybrid clouds and included a couple of our colleagues from Santa Barbara; CEOs Michael Crandell and Marten Mickos from RightScale and Eucalyptus. The people who really get the hybrid model, our friends at […]

The Hidden Implications of the iPhone 4 and Droid X

This has been the biggest week for the smartphone industry this year. Following the release of Apple’s iOS 4 on Monday, Motorola and Verizon released the new Android-based Droid X phone on Wednesday. Apple brought its iPhone 4 to stores on Thursday and you may have also heard that Google released a highly anticipated new version of its Android operating system.