RedCloth is a popular Ruby library for converting Textile-formatted text into HTML. Initially developed by WhyTheLuckyStiff, it's now under the guardianship of Jason Garber, who has just released version 4 (RubyForge or Github). This is a significant update, following on from 3.0.4 which was released almost three years ago, and features a handful of significant improvements and changes:
- New SuperRedCloth (RedCloth 4.0) is a total rewrite using Ragel for the parsing.
- Markdown support has been removed.
- Single newlines become <br> tags, just as in traditional RedCloth and other Textile parsers.
- HTML special characters are automatically escaped inside code signatures, like Textile 2. This means you can simply write @<br />@ and the symbols are escaped whereas in RedCloth 3 you had to write @<br />@ to make the code fragment readable.
- HTML embedded in the Textile input does not often need to be escaped from Textile parsing.
- The parser will not wrap lines that begin with a space in paragraph tags.
- Rudimentary support for LaTeX is built in.
- RedCloth::VERSION on a line by itself inserts the version number into the output.
- Output (less newlines and tabs) is identical to Textile 2 except a few cases where the RedCloth way was preferable.
- Over 500 tests prevent regression
- It's 40 times faster than the previous version.
Unless fiddling with the edge version on Github interests you, you can install or update with gem in the usual way - gem install RedCloth, etc.

(Photo credit: Kieran Huggins)
RubyFringe - described as a "pricey, limited-attendance smoozefest" by Ruby documentation co-ordinator James Britt or as "an avant-garde conference for developers that are excited about emerging technologies outside of the Ruby on Rails monoculture" by the organizers - went ahead last week and appears to have been a significant hit. A small conference with a reasonably high ticket price (though far less than RailsConf Europe!), RubyFringe was set to be a very unique sort of conference with parties, drinks and out-of-hours entertainment laid on, and a limited number of tickets made available to ensure a more intimate gathering. The gamble appears to have paid off.
Praise
I'm not quite sure exactly what went down (I had to pull out of attending) but all references I've seen have been almost over-the-top with excitement and praise:
Soleone says: "Rubyfringe was amazing! So many good talks and great people. Best talk: Giles' presentation on computer generated music. Laughed my ass off!"
Rob Sanheim says: "rubyfringe was a blast, and now i can't sleep."
Lennon Day-Reynolds says: "RubyFringe after-party unsurprisingly turned out to be awesome."
Josh Merchant described it as "an amazing - inspirational - creative- experience."
Heck, there are far too many positive mentions to read on Twitter.
Mark McGranaghan of TechCrunch wrote directly to Ruby Inside:
RubyFringe was a huge win. Unspace set out to raise the bar for software conferences, and I think that they succeeded. I hope that RubyFringe does for web conferences what Rails did for web development; show others that there is a better way, that it does not require corporate sponsorship, and that it can fun, artistic, and productive all at the same time.
Content
There are over 1000 photos from the event on Flickr.
Joey deVilla has put together some handy notes for most of the presentations.
Rowan Hick has put together a list of his RubyFringe highlights.
InfoQ attended the event and, I am told, will be putting up videos of several presentations on their site soon. Until then, the content of the talks is summarized here.
The next RubyFringe?
With such success, it's inevitable another RubyFringe conference will take place within the next year. If you're interested, Pete Forde suggests joining the Google group, and keeping an eye on RubyFringe.com for more info (although it'll be here at Ruby Inside too). It remains to be seen if the success of RubyFringe will encourage "avant garde" conferences elsewhere in the world or for non Ruby communities generally, but Ruby Inside wants to hear about them if so.

Ruby's is not known for its deftness with XML. On RubyFlow, I considered calling the community to arms over it, and solicited twenty responses on what the problem is, and what we could do about it. Robert Fischer was lamenting on the state of Ruby's libxml library, and didn't seem to like REXML much either. Tim Bray has also had a few complaints about REXML. It seemed there was a problem to be fixed; a gap in the market, as it were, for a decent XML parser for Ruby. Hpricot, despite really being an HTML parser, would have to get us by in the meantime.
Today, however, libxml-ruby 0.8.0 has been released, and Charlie Savage explains why this is such a big deal. libxml-ruby now runs on Windows (thanks to Charlie), doesn't segfault all the time, and the bindings have all been fixed over the past year (thanks to Dan Janowski). You can get going with it right now with a simple gem install libxml-ruby
libxml-ruby is known for its performance, the latest release doesn't disappoint. For a range of simple tasks, libxml clocks in at ten times quicker than Hpricot like-for-like and between 30 and 60 times faster than REXML. Charles adds:
In addition to performance, the libxml-ruby bindings provide impressive coverage of libxml's functionality. Goodies include:
- SAX
- DOM
- XMLReader (streaming interface)
- XPath
- XPointer
- XML Schema
- DTDs
- XSLT (split into the libxslt-ruby bindings)
Charles is planning to write a proper tutorial in the next week, covering some of the key features, but suggests referring to the API documentation in the meantime. The test suite (located in the test directory that comes with libxml-ruby) also looks like a great resource for code examples; very clean and straightforward. If you have any libxml-ruby tutorials or resources of your own, please post them in the comments here.
Congratulations to all of those involved in libxml-ruby's long history and especially to Charlie Savage for giving it the finish push to this mature state. Ruby's XML woes are tempered, for now at least.
Autumn is a framework by Tim Morgan that makes it easy to develop powerful IRC (Internet Relay Chat) bots with Ruby. Version 3, a significant update, was launched just a week ago. The code is available on Github, so it's ready to fork, tweak and work on to your heart's content.
An instance of an "Autumn app" is laid out in a similar way to a Rails app. There are config, doc, script, libs, tmp, and log folders, containing much what you'd expect, as well as a leaves folder (Autumn refers to "bots" as "leaves") that contains any number of folders each containing data, helpers, models, tasks, and "views" for individual bots. A default Autumn app comes with two bots pre-installed called insulter and scorekeeper that you can use to learn from.
Autumn is a pretty significant piece of work and Tim has done an excellent job at documenting it, leaving almost no stone unturned in demonstrating how to create bots / leaves of your own with the framework.

Engine Yard, probably the first major Rails-focused hosting company, has today taken a second round of finance of $15m. This second round, from Benchmark Capital, Amazon.com, and New Enterprise Associates, follows on from January's $3.5m from Benchmark.
So where will the money go? Ezra Zygmuntowicz says:
We’re going to use this money towards making Ruby the platform of choice for cloud computing and web development in startups and the enterprise alike.
This assertion is without doubt, as Engine Yard continues to fund and support the development of Rubinius and Merb, and supports several popular Ruby and Rails sites with sponsorships. A $15m round for Engine Yard also helps validates the business models surrounding Rails, in a similar way to New Relic's $3.5m funding round in May.
Personally I am convinced that a significant part of Engine Yard's strategy will involve spending the cash on Red Bull in order to keep Engine Yard operating more quickly than the competition. At $2.50 a can, and the current complement of 80 employees, this works out at 75,000 cans of the amber nectar each. At a work-inducing 8 cans each work day, we're looking at about 37 years' worth of Red Bull to keep Engine Yard ahead of the pack.
To close, Ezra has shared some initial info regarding a new Engine Yard project called Vertebra that's worth keeping a look out for:
We’ve also been delving into the cloud computing arena as I think the next 5 years are going to see huge transition from standard hosting models into the cloud. Our upcoming Vertebra project is a new application programming platform for building distributed cloud applications with XMPP. You can expect to see the first open source release of Vertebra this summer, I think this is a truly unique and very fun project to work on.
Let's hope Engine Yard's newly acquired cashpile will be enough to get them through the recession and become highly profitable as this area takes off.
(Semi-disclaimer: Engine Yard sponsors RubyFlow, a sister site of Ruby Inside.)

You've used Shoes, Why The Lucky Stiff's GUI-app toolkit for Ruby, right? No? You've at least heard of it? (If the answer to this is also no, seriously chastise yourself now.)
Ernest Prabhakar has announced that two online "ShoesFests" will be taking place, involving why the lucky stiff and "friends," with the hope of alluring wannabe hackers (whether on Shoes itself or Shoes-based applications):
The goal of these events is to write and share fun little applications using Shoes, a clever little cross-platform GUI toolkit written in Ruby. This will allow us to test, document, and file bugs on how the various Shoes features work on the different supported platforms (Linux, Windows, Mac), in preparation for our next major release on July 31st, 2008.
No Ruby — or programming — experience is required; we’d love to find out how easy it is for novices to learn Shoes! Of course, if you happen to know the Ruby C API, expert help is always appreciated.
There are two ShoesFests, each taking place for 24 hours, from noon GMT (8am Eastern) on Friday, July 11th, and from noon GMT (8am Eastern) on Friday, July 25th. The venue will be #shoes on the Freenode IRC network (irc.freenode.net).
If spending a day on IRC, asking questions, talking nonsense, helping others, and otherwise hacking away on Shoes and Shoes-based applications with a bunch of exciting people sounds fun to you, make sure to put this Friday in your calendar.

Registration for Texas's own Ruby conference, the Lone Star Ruby Conference, has opened. The overall event takes place between September 4 - 6, 2008 in the Norris Conference Center in Austin, TX. Tickets are $250 for the two-day conference portion, or $425 for one day of training / tutorials followed by the two day conference. The prices shoot up come August 10.
The schedule is bumper packed with some great sessions and tutorials. James Edward Gray II and Gregory Brown will be delivering a three hour training session on Ruby's IO functionality, Jim Weirich and Joe O'Brien will be delivering a tutorial on Test Driven Development, Gregg Pollack and Jason Seifer (of RailsEnvy fame) will be giving an advanced ActiveRecord workshop, and lots more besides. This seems to be one of those rare events where the tutorial day will be worth its weight in gold, unless you're already a self-certified Ruby / Rails expert of course. As well as this, Yehuda Katz, Glenn Vanderburg, Evan Phoenix, Matz, Bruce Tate, Bruce Williams, and others, will be speaking on various Ruby topics at the conference generally.
This post supported by Rails Kits: Skip the hassle of writing recurring billing code: use the SaaS Rails Kit to quickly add credit card and PayPal payments to your Rails app. Get 10% off by using the discount code "rubyinside" at checkout before August 1st.
Trollop is a command-line argument processing library for Ruby. Developer William Morgan says Trollop is "designed to provide the maximal amount of GNU-style argument processing in the minimum number of lines of code." It makes a refreshing change to the more popular, but generally scary, cmdparse. The homepage features some examples of its usage.
Once you've installed trollop with the usual gem install trollop, you could write:
require 'trollop' opts = Trollop::options do opt :http_1_0, "Force HTTP/1.0" opt :http_1_1, "Force HTTP/1.1" opt :hide_referer, "Hide referer", :default => true opt :connections, "Set number of simultaneous connections", :default => 2 end p opts
Running the script with no command line options would result in opt becoming:
{:http_1_0=>false, :http_1_1=>false, :hide_referer=>true, :connections=>2, :help=>false}
You also get a --help (or -h) option for free that describes how to use the options:
Options:
--http-1-0, -h: Force HTTP/1.0
--http-1-1, -t: Force HTTP/1.1
--hide-referer, -i: Hide referer (default: true)
--connections, -c : Set number of simultaneous connections (default: 2)
--help, -e: Show this message
Note that trollop takes care of assigning the short-hand individual letter options, assigning the next letter within the string if the previous ones are taken.
Another option is Optiflag, which present a more DSL-esque solution. Its official homepage features some compelling examples, though the simplicity of Trollop appeals to me more for some reason.
Post supported by Brightbox: Brightbox is a specialist European Rails hosting company. Each Brightbox server includes an optimised Ruby on Rails stack, SAN storage and access to a managed MySQL database cluster. They also manage dedicated clusters for large scale Rails deployments. Click here to learn more...

(Credit: june29 - photo under CC 2.0 Attribution license)
RubyKaigi 2008 took place a couple of weeks ago. As the main Japanese Ruby conference, RubyKaigi is the de-facto authoritative Ruby conference, and the news that came out of the conference this year did little to shake its stature.
The online enterprise news publication InfoQ has covered the conference in two parts. The first features a mini interview with Matz, where he talks about the low adoption rate of Ruby in the enterprise and the role of certifications in the Ruby world. The second InfoQ post reveals that Matz is preparing to "standardize" Ruby, with the ultimate aim to submit a Ruby standard to the ISO, and Koichi Sasada reveals that Ruby 1.9.1 (notable, as it will be the first officially stable / production-ready release of Ruby 1.9) is set to arrive this December.
A lot more seems to have gone down at RubyKaigi than this, as evidenced by the absolute snowstorm of links tagged rubykaigi on del.icio.us, though most of the evidence is in Japanese, of course.

Dr Nic Williams has been busy playing with iPhone and Objective C development lately and, unsurprisingly, has found a way to bring Ruby into the mix. He has developed rbiphonetest, a Ruby-based testing framework for iPhone / Objective C applications that uses RubyCocoa to provide the necessary bridge. As well as producing an in-depth 20 minute demonstration screencast, he has also packed some key information into his blog post.
If you're a Rubyist with ambitions of developing native iPhone applications using Objective C (and perhaps even Ruby one day), it's certainly worth a look (as are all of Dr Nic's projects, of course).

(Remix of an original CC 2.0 licensed work by Joichi Ito.)
From the Ruby Inside job board (costs $99 for a 60 day listing - and you get featured on Ruby Inside like this) come a few new opportunities:
Senior Java Developer with Ruby (Vonage, New Jersey) - Vonage, the well known VoIP company, are looking for a software developer with both Java and Ruby experience. They offer a fun, casual and relaxed environment, a $100/month food credit, dry cleaning and laundry service, medical, dental and vision plans, as well as stock options. In return, you should have both strong knowledge and experience of both Java and Ruby. I suspect not a lot of people will meet the requirements for this job, but it could be extremely rewarding for someone who does!
Incredible Systems/Network Administrator Required! (San Francisco, CA) - Rapleaf, a fast growing SF-based startup in the personal information / privacy space, are looking for a systems and network administrator to manage their Linux (CentOS based, primarily) servers, backup systems, and other network requirements. You will need to be a hot-shot at systems administration and be ready to learn (or already know how) to scale Rails applications (and yes, Rails can scale!)
Atlanta-based Experience Ruby on Rails Developer / Designer (Buford, GA) - A small start-up in Atlanta is looking for an experienced software developer to help develop the next generation of their software. They seek a senior level developer with strong Ruby and Rails skills.
Rails and JavaScript Developer (Pyromedia Studios, California) - Pyromedia Studios are looking for a Ruby on Rails developer with JavaScript experience, preferably with experience with social networking and general Web design. Initially it'd start as a 4 - 6 month contract but could turn into full-time employment, if desired. It seems as if off-site might be okay, but contact them for details.
If you or your company have openings for Ruby and/or Rails developers, consider checking out the Ruby Inside job board. Your job not only gets featured in the sidebar of every Ruby Inside page, but also summarized in posts like this. You could even leave a comment on this post if you want.
Note: There are even more jobs over at RubyNow's jobs section and on the 37signals Job Board.

(Photo credit: slushpup - License: CC 2.0 Attribution)
Six months ago, we featured 11 Tips on Hiring a Rails Developer here on Ruby Inside (and it got a crazy number of comments), but now Ryan Ritirisi has put together a great list of 15 Questions to Ask During a Ruby Interview. They include questioning developers in a way that can separate professional Ruby developers from the hobbyists (or those who are only familiar with Ruby through Rails templates, say).
Pete Forde of Unspace suggests, however, that asking clever questions isn't necessarily the best way:
The best way to recruit amazing talent is to approach people that you already know are at the top of their game. At this point, the most important question becomes whether their personality is a good fit for the existing team.
Really, if an awesome person who is clearly smart doesn’t know the answer to one of these questions, they can learn it quickly with a little direction. That’s the advantage of having a team - you help each other move forward.
In terms of the actual hiring, it seems there's a much larger demand than there is a supply of Ruby developers. I get e-mails every week from people looking for Ruby and Rails developers and most of my contacts now seem to be inundated with work and aren't ready to take on more!
If you are looking to hire, however, here are some tips:
Lastly, remember that there are a lot of Ruby and Rails developers who do not read Ruby Inside, have not filled out their profiles on WorkingWithRails, and do not actively browse the Ruby jobs sites. Sometimes the only way to get the perfect candidate is to actively approach them. Finding these people might require using Google Blog Search (using location names along with keywords like "ruby" and "rails") or actually going to the events they're likely to attend (many of which we post about on Ruby Inside - such as erubycon and RubyFringe - others are very location specific like LRUG Nights in London).
If you have any tips of your own, are looking to be hired, or want to do some hiring, certainly leave comments against this post.
Post supported by Brightbox: Brightbox is a specialist European Rails hosting company. Each Brightbox server includes an optimised Ruby on Rails stack, SAN storage and access to a managed MySQL database cluster. They also manage dedicated clusters for large scale Rails deployments. Click here to learn more...
Here’s the regular update of the most interesting stories posted on RubyFlow (a community-driven Ruby news sister site to Ruby Inside) in the past couple of weeks:
Markdown - 59 times faster: Ryan Tomayko wants to “move past BlueCloth.” The result is two significantly faster Markdown libraries for Rubyists.
Cry: Cry is a Ruby library that provides a nice object oriented way to create, transfer, and manipulate frozen parse trees.
New Ruby Social Network: Acts As Community is a new social network for Rubyists.
Building an MP3 Player with Ruby and Shoes: Satoshi Asakawa has put together a cute tutorial demonstrating how to create a GUI-based MP3 player using Ruby and _why’s Shoes library.
Capistrano 2.4.0: Deployment tool Capistrano has hit version 2.4.0. Lots of new features and tweaks.
“Run Ruby Script” Action for OS X’s Automator: Jason Foreman has put together a custom action for OS X’s Automator tool that makes it easy to run Ruby code from an Automator workflow.
Lazy evaluation for Ruby methods: Lazyeval is an interesting library that makes it possible for methods to only be executed on objects when they’re actually needed (ideal if you’re doing caching on Rails views but still need logic in the controller).
Guide to using Sphinx: Pat Allan has written a great article on installing and using Sphinx, the search library.
Bashfully Yours, Gem Shortcuts: A little Bash script that lets you gain quick access to the RDocs for your installed gems.
Phusion Passenger 2.0 RC 1 and Ruby Enterprise Edition Released: The guys at Phusion have unveiled a release candidate of Passenger 2.0 (now supporting Rack) as well as Ruby Enterprise Edition.
Sequel 2.0: A significant update to the Sequel database access abstraction library has been released.
Disclaimer: I have no financial connection to the Pragmatic Programmers and other than through receiving these videos to review get no direct benefit from this review.
It was only a few weeks ago I announced that the Pragmatic Programmers were getting into the screencasting business. The first Ruby related videos were from the Everyday Active Record series by Ryan Bates. The reaction to these across the Ruby blogosphere has been very positive, and true to their word, the Pragmatics have been quick to release some more interesting videos. The latest addition is the Ruby Object Model and Metaprogramming series by Dave Thomas (of Pickaxe fame). Three episodes are available so far, respectively “Objects and Classes,” “Sharing Behavior,” and “Dynamic Code.” They cost $5 each and clock in at around half an hour each.
With the first episode, Dave starts off at a basic level by covering the history of object-oriented development and taking a look at the core elements of what makes up the object-oriented programming style. He moves on to looking at Ruby specific concerns, metaclasses/eigenclasses, anonymous classes, singleton methods, and the like. He manages to keep things at a level that’s immediately accessible to beginners (lots of diagrams are presented to illustrate concepts and relationships between objects and classes) but isn’t afraid to introduce more complex examples straight after. This is a common pattern throughout each of the screencasts, the contents of which are covered here.
I’d recommend these videos to anyone who wants to quickly get up to speed with the concepts involving classes, objects, and metaprogramming. I don’t believe Dave Thomas has done any screencasting before, but he comes across as a natural. His voice is engaging, eager, and authoritative, which makes the videos very easy to follow without drifting off. Certainly, these screencasts are a superb alternative to the explanations of classes, objects and metaprogramming in most Ruby books. If you’re still unsure, Dave gives a quick 3 minute introduction to the series (video).
Elsewhere: Antonio Cangiano has also reviewed these videos. Check out his review for a slightly different perspective.
Post supported by Ruby Hoedown: Come on down to the south for the Ruby Hoedown, the South’s regional Ruby conference! Submit a talk now or sign up for registration at $199. The first 50 people to use the promo code IMINSIDE will get an additional $25 off the price!

RubyFringe, a rather progressive and brave addition to the Ruby / Rails conference scene, taking place in Toronto, Canada in July will be closing its registration doors in just six hours. When registration initially went live, four months ago, there were many complaints of the conference being overpriced, but despite this, only a handful of tickets (certainly less than 20, I’m told) now remain and an exciting schedule is shaping up. A separate “track” for travel companions / significant others is taking place so that anyone can go to the conference without abandoning their loved ones while they geek out on Ruby all day.
As promised, RubyFringe has no sponsors and is focused not only on the cutting edge, exciting areas of Ruby, but on radical presentations and unheard-of levels of detail in the ancillary events. Live music and entertainment is being provided, a brewery and an art gallery are being rented, and parties are taking place each night, with free bar and food throughout. Some intriguing talks are already lined up from people such as Zed Shaw, Chris Wanstrath, Ezra Zygmuntowicz, Jeremy McAnally, Tobias Lütke, John Lam, Obie Fernandez and Geoffrey Grosenbach. Lastly, a separate FailCamp being run by Amy Hoy and Thomas Fuchs will be taking place before the opening party. More information to come soon from those guys.
It seems like this rather brave attempt at an unusual, high adrenaline Ruby conference is going to work out quite well, but even if it doesn’t, it appears it will provide a lot of significant talking points within the Ruby community in July. If you’ve been waiting to see who’s going or whether it would even go ahead, wait no more, go and register.
Update: On a similar note, the registration for RailsConf Europe has just opened. Oh, and The Ruby Hoedown (Huntsville, Alabama in August) too.
(Note: I wanted to post about this earlier, but a family emergency has put me out of action for several days. This is why the Ruby Inside schedule has slipped. I’m getting back on top of it and wish to apologize for the gap. Disclaimer: I have no financial connection to this conference.)

Pool Party is a new tool by Ari Lerner (of ProcessorPool fame) that makes it easy to automate the deployment, monitoring (using monit), persistent storage (using S3Fuse), and load balancing (using HAProxy) of EC2 instances. While intended to be application agnostic, there’s naturally a major slant towards Ruby applications in general, with support for Rake tasks a core feature.
Ari’s announcement blog post gives more in-depth details. Development is taking place on Github (where the README is somewhat more readable than with RDoc!) along with discussions at a Google group.
Ari presented PoolParty at RailsConf last week, and his slides are available to view below (or at Scribd):