
Terminator is a new library developed by Ara Howard and Mikel Lindsaar that solves the problem of Ruby's own "timeout" feature not actually being up to the task of terminating code. timeout is supposed to terminate the execution of a block of code if it's not finished within a certain amount of time, but due to Ruby's threading model it doesn't always work that way!
Initially, Mikel considered SystemTimer - another replacement for timeout. SystemTimer is based upon UNIX alarm signals and, for some reason, still didn't resolve the main problem (although SystemTimer has ridiculously good documentation and is clearly working well for someone). After lamenting on the Ruby-Talk mailing list, Ara Howard stepped in with a potential solution which turned into what is now Terminator.
Terminator works by starting up another Ruby instance that tracks the PID of the Ruby instance that spawned it. Windows is currently not supported.
You can install Terminator with gem install terminator or check out the code directly from here (note: they have some weird issue with referrals, just reload the URL when you get there).
NeverBlock is a Ruby (1.9) library developed by eSpace - an Egyptian Web 2.0 development team - that could make your life a whole lot easier if you have to deal with blocking IO operations that hold up all your Ruby threads.
NeverBlock makes it easy to get the benefits of non-blocking IO (IO operations that aren't held up by mutexes) in your Ruby apps without having to take the usual route of redesigning your app to be event-based. You get all the benefits of event-based code (lower CPU overhead, lower memory use, less hangups) but with the benefit of a normal program flow model.
The catch? It's Ruby 1.9 only - relying heavily on fibers - and the documentation isn't particularly strong yet so it'll take a bit of work to figure out. It could be worth it, though, as in benchmarks on the NeverBlock-based Postgres library, throughput is shown as significantly increased where a percentage of queries are complex and slow (and would usually block up the client).
If you're still interested, NeverBlock is available on Github - there's also an official home page and documentation available.
This post is sponsored by AlphaSights Ltd - AlphaSights are recruiting. If you're looking for a Ruby on Rails opportunity, can work in Cambridge, UK and enjoy the buzz of a brand new well-funded startup then look no further. AlphaSights are recruiting from entry level to senior positions and offer very competitive salaries and a great working environment.
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...
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!

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):
Ruby 1.9 Coming To Symbian OS
David Wood talks about the development of a port of Ruby 1.9 for Symbian OS (as used in many portable devices). The port includes TCP/IP and filesystem access, although GUI-level features are expected to be implemented by third party developers if the interest is there. An initial release is scheduled for April 2008. (Thanks to Jose Marinez for the lead.)
Rubyizumi - Open Source Ruby-Powered RMTP Server
The official site says it best: “RubyIZUMI is an open source RTMP Server for Flash Video/Audio Streaming. It is written in (Pure) Ruby and it supports to broadcast MP4(H.264 + AAC).”
Ruby Inside in Indonesian!
The Indonesian version of the official Ruby homepage is now live, and features translations of Ruby Inside posts! If anyone else is interested in doing the same for their own language, feel free. Good work guys.
Ruby-Processing Continues to Evolve

Just a month ago I posted “Using the Processing Graphics System for Ruby” and I’ve had news that thanks to the interest produced by that post, the Ruby-Processing project is progressing by leaps and bounds. Jeremy Ashkenas writes:
The cross-platform issues were hammered out in short order, support for native libraries was added (so now you can use Ruby to write OpenGL visualizations), fullscreen support has been added, and now, today, there’s a new script to export your sketch to an applet. So you can now check out Ruby-Processing sketches in your browser without having to download a thing.
Exhibit A: The WishyWorm demo. Click to toggle translucent backgrounds.
Exhibit B: The Contextual Tree. This one shows off Ruby metaprogramming — it uses a context-free drawing DSL that I’ve been working on. (Which isn’t quite ready for prime time, and so will bork out on you now and again.) Click to generate new trees.
Exhibits C, D, and E: I’ve also exported the other three demos from the Ruby-Processing download.
This is great news for those who want to play with Ruby, generate graphics, and share the results on the Web.
Sun and University of Tokyo Developing Multiple Virtual Machine Environment for Ruby and JRuby
Sun and the University of Tokyo have announced that they’re going to work on developing a “multiple virtual machine environment” for both Ruby and JRuby, enabling multiple programs to run at the same time within the same process. The press release is a month old but skipped my attention as I haven’t found any significant mentions of it anywhere else. Verbatim:
A group led by Professor Ikuo Takeuchi at the Graduate School of Information Science and Technology, the University of Tokyo will collaborate with Sun’s Tim Bray (Director of Web Technologies) and the members of the JRuby team to implement a multiple virtual machine (MVM) environment on both Ruby and JRuby. The MVM environment is expected to make Ruby programs run more efficiently than was previously possible. The results of the research are scheduled to be open sourced via the broader community of Ruby developers, which could inspire further innovations.
Previously, running more than one application simultaneously on Ruby required multiple interpreters, leading to excessive memory consumption. The proposed MVM environment could generate multiple VM instances on a single interpreter, allowing applications to run more efficiently. The collaborative research aims to clarify such technical issues as the definition of common interfaces for using MVM, parallelization of VM instances and memory sharing, and then to implement technologies that can be used on Ruby and JRuby. While Ruby has already been widely in use in commercial and other environments, the research on MVM will further enhance the performance and utility of Ruby.
The collaborative research is scheduled to continue until the end of September 2009. For the first year, Sun will contribute funding to the research. In addition to the principal researchers from Sun’s JRuby team and Professor Takeuchi’s group, various other researchers and programmers will be invited to join in this research.
I suspect Rubinius will be a production-ready option by September 2009, but it’ll be interesting to see what Sun and the University of Tokyo come up with.
Ruby In Steel Releases Alpha of IDE for “IronRuby”

Huw Collingbourne writes in to tell us that Sapphire Steel, the company behind Ruby In Steel, has released the first alpha version of a Ruby In Steel IDE for Microsoft’s IronRuby .NET Ruby implementation. A particularly interesting development is that a visual form designer is included that enables you to drag and drop controls onto forms, as if you were designing a, say, Visual Basic app. Being able to develop Windows applications visually seems quite an appealing prospect.
MacRuby: Ruby Running On Top of Objective-C
Most Mac-based Ruby developers are already familiar with RubyCocoa, a bridge that enables regular Ruby apps to talk to OS X’s various frameworks. MacRuby, however, takes a rather different approach and is a port of Ruby 1.9 that runs directly on the Objective-C runtime and garbage collector. It’s still in its early stages, but for anyone interested in Ruby implementations, this is worth a look.
Try: Stop Using “@person ? @person.name : nil” And Start Using “@person.try(:name)”
try() is a ridiculously simple, but incredibly useful, bit of sugar Chris Wanstrath has come up with for making it easy to “try” and call methods on objects, but without Ruby getting upset if that method doesn’t exist.
ProcessorPool: Easily Farm Work to Amazon EC2 Instances
And the Rubyist infatuation with Amazon’s EC2 service continues! Ari Lerner and Ron Evans have developed ProcessorPool, a new Ruby library that provides a simple load-balancing solution for Amazon’s EC2 and S3 backend. It allows you to “effortlessly farm work to an EC2 instance.” The best source of information is Ari’s own blog post where some demonstration code is shown.
Heroku Gits an API
Heroku, the much heralded Ruby on Rails online development and deployment platform, has launched an API along with external Git access. The combination of these new features mean that you can work on your Rails applications on your local machine and deploy them on Heroku with just a few simple steps. All you need to do is install the Heroku gem, then use the “heroku” command line app to create an application before finally pushing it back to the Heroku servers with git. Miraculously, pushing your code back to Heroku automatically runs the migrations and restarts the processors on the server. One step deployment!
JRuby 1.1 Release Candidate 2 Released
The latest release candidate of JRuby 1.1 has been released. 260 issues have been fixed since RC1 and a number of memory and IO improvements have been made. JRuby developer Charles Nutter gives some interesting background to JRuby’s current state. Nutter explains that JRuby’s performance now regularly exceeds that of Ruby 1.8.6 and even Ruby 1.9 in places. Meanwhile, other developers have been doing benchmarks.
A Single File Rails Application
Pratik Naik has done the unthinkable and made… a single file Rails application. Clever stuff. He then created a tiny wrapper for this nugget of joy called tinyrails which makes things even easier.
Sending Ruby to the Jail: An Attempt at a Haml “Safe Mode”
Sven Fuchs has been working on a “safe mode” plugin for the Haml templating engine. This would allow regular users to supply Haml code for use on public Web sites, but without the risk of malicious code causing issues on the server. I picked some holes in Sven’s initial approach, and he went back to the drawing board. Essentially he’s trying to use Ryan Davis’ Ruby parsing libraries to make any Ruby code “safe” without relying on running code in an actual sandbox. I’m still not entirely convinced his latest approach is 100% safe but it managed to succeed with all of the initial “hacks” I could think of, so I’m happy to mention it.
Sven is hoping that by releasing his work so far to the public, someone will come up with a clever method for getting it to break. If Sven’s efforts succeed, of course, then his technique may be useful for non-Haml applications and allow us to “sandbox” Ruby code in yet another way.
Radiator: Your build statuses on a giant LED display

A bit of fun this one. “The Hammer” wrote in with news of Radiator, a handy Ruby-based service for blasting your build messages to a USB BetaBrite LED display.
Ruby MySpace Platform and YouTube APIs
Shane Vitarana has released two libraries. The first is a new one called Spacer and implements a Ruby API for the “MySpace Platform”’s REST API. The second is an update to an existing library, YouTube-G, an API for YouTube’s GData API.

License: CC Attribution Credit: conner395 @ Flickr
Bus Scheme is an implementation of the Scheme programming language (a dialect of Lisp) in Ruby being developed by Phil Hagelberg. It’s called “Bus” Scheme because it’s being developed while Phil travels on the bus, but Ryan Davis called Phil out on that sly fabrication! Curiously, Phil claims to have never used any existing Scheme implementations, relying instead on knowledge gleaned from SICP and these incredible computer science lectures (if you have not seen the Abelson / Sussman lectures yet, you are missing a major programming treat.)
Bus Scheme runs on Ruby 1.8, 1.9 and Rubinius, and the repository (where you can view the source without downloading it) is available here at GitHub, although as noted in the documentation, you can also use gem install bus-scheme
Meanwhile, in a land far, far, away Jim Weirich is working on an implementation of Lisp within Ruby too, although Jim’s clever attempt uses Ruby pre-existing data structures and not a typical parsing and interpretation system.

Shoes Meets Merb: Driving a GUI App through Web Services in Ruby by Gregory Brown and Brad Ediger leads us on a six page tutorial extravaganza through not only building a cross-platform GUI app (namely, a pastebin of sorts) using WhyTheLuckyStiff’s Shoes system, but using Rails-killer Merb as a backend for storing the data. It’s an impressive enough effort that Why himself has linked to it and added a few notes of his own (including the provision of a much better illustrative screenshot - as used above).
In related news, yesterday Why announced the launch of a new version of Shoes, known as “Curious.”
In Getting Code Ready for Ruby 1.9, James Edward Gray II is attempting to put together a comprehensive blog post on the various things you need to do to migrate your Ruby 1.8 code over to working on Ruby 1.9. So far, James only looks at a handful of potentially sticky areas, but commenters have already started chipping in with suggestions, including how to rewrite the BlankSlate class for Ruby 1.9.
Further afield, Sam Ruby has written Porting REXML to Ruby 1.9 where he rattles off a laundry-list of things he's had to do to get REXML ported to Ruby 1.9. This will also be a useful read for those migrating code to 1.9.

Troubleshooting Ruby Processes is a "digital short cut" (i.e. an e-book) written by Philippe Hanrigou and published by Addison Wesley. Unlike most Ruby books, my own included, this one really digs into its topic and looks quite low down at how Ruby processes interact with the operating system. While some of the topics are deep, however, the book is only 56 pages long, so it's a useful book to read to learn why problems occur and which tools to solve the problem, even if you're not going to be able to write a dissertation about it. Tammer Saleh of Thoughtbot wrote a review if you want to learn more.
In collaboration with Addison Wesley we're offering three copies of Troubleshooting Ruby Processes to win in a Ruby Inside contest. To enter, post a comment here with an explanation / example of the sort of Ruby book(s) you'd like to see published in the future. No idea is too crazy. Three commenters who provide the most worthwhile or interesting ideas, along with an e-mail address in the relevant field, will be chosen at random to receive a copy of the PDF. And, no, Addison Wesley didn't suggest this topic for market research or the like.. I'm personally interested to see what people want and, you never know, it might get me writing..!
Note that e-mail addresses provided in the "e-mail" field on Ruby Inside comments are not published, not given to anyone, and, well, not really used at all, except for me being able to get in touch with you. That said, if you like you can use a temporary address!
For completists, the topics covered in Troubleshooting Ruby Processes are shown in this shot of the contents:

Note that if you're a member of the Safari book subscription site, the short cut is available to read there with your existing subscription.
Another Contest!
Finally, if contests are your thing right now, check out Pat Eyler's contest to win any three Apress books of your choice! Currently there's only one entry, so you're in with a good chance, and you have until Christmas to enter.

Ramaze is a simple, light weight (in a good way!), modular Web framework developed in Ruby. Like Rails, and unlike some of its newer competitors, such as Sinatra, Ramaze sticks to the MVC (Model, View, Controller) paradigm, making it more like a lighter, more modular Merb-alike. Ramaze is already a year old, and one thing that the official Ramaze Web site does right is provide lots of example code and documentation. The framework has also seen four releases in the last six months, a sure sign that someone cares about it.
Inspired by Ruby Inside's recent post, "Reprise: A Ruby-Powered Blogging App in 100 Lines Including Templates," Aman Gupta, one of the developers of Ramaze, has converted the code from a Sinatra-based non-MVC format over to the Ramaze equivalent, so you can get a direct comparison of the two different approaches by reading two sets of code for the same application.

Eivind Uggedal has written in with a note about a new blog system he's built using the lightweight Sinatra framework. It's about 100 lines long including the inline templates! An example of the finished software powers Eivind's own blog. Sinatra is looking to be an absolutely excellent mini-framework for running up basic non-MVC applications, and you can learn more about it here.

glTail is a great little Ruby script by Erlend Simonsen (aka Fudgie) that uses OpenGL and Ruby to visualize the events taking place in log files in real time. An example video on the official site shows requests coming into an HTTP server, each represented by a "ball" which is thrown across the screen. The script uses net-ssh to connect to a server and then libopengl-ruby to output the graphics. Parsers are included for processing Apache, Rails, IIS and Postfix log files. Nice work! The code is merely a couple hundred lines of Ruby, so if you've fancied putting together a basic OpenGL app, it's worth looking at it for that reason too.
CplusRuby is a new library by Michael Neumann that makes it really easy (as in, even easier than RubyInline, although CplusRuby is of a smaller scope) to define custom C structures from within Ruby. The major goal of CplusRuby is performance, and the ability to easily define small methods within a class that compile to C and which can call each other directly. An example is always better than an explanation, so check out this code.

(image credit: energymech - a cool C-powered bot)
Autumn Leaves is a "full-featured framework on top of which IRC bots can be quickly and easily built," developed by Tim Morgan. It provides everything you need to get an IRC bot up and running, with facilities for loading, daemonizing and logging bots out-of-the-box. Tim says Autumn Leaves has a "Rails-like approach" and presents some example code for building your first bot.

Anvil is a new Ruby framework for developing GUI applications by Lance Carlson. It's a framework around Wx::Ruby (WxWidgets is a popular cross-platform widget toolkit) and offers its own DSL to make developing GUI applications easy. The release blog post has more information, including a great example of the code required to make a basic Anvil app. Interestingly it supports an MVC style of development where the view and control elements of your applications can be separated cleanly.
The first Anvil-powered application is a Ruby based editor called Hamr. Lance is so far the main developer of the Anvil project but he's keen to get other people involved.
Welcome to the first "Interesting Ruby Tidbits That Don't Warrant Separate Posts"! This is going to be a somewhat regular feature of all the reasonably interesting things I'm e-mailed about or discover that aren't getting as much attention as they should, but which aren't captivating enough to warrant an entire post on their own. So without further ado..
thread-dump library
thread-dump is an interesting library that lets you to get a dump of thread activity when a Ruby process quits by Greg Fodor. In his own words:
It allows you to send a SIGQUIT to a ruby process to get a dump of the running threads to STDERR or a file. This is *incredibly* useful for diagnosing hung or slow processes, since you can introspect the ruby process on demand. This is a feature built into the JVM, and has always been an essential part of the diagnostic toolkit.
Using 64 bit primary keys with Rails migrations
Got an app that needs more IDs than the standard 32 bit amount? MySQL can use BIGINT columns, but, as Sanjay Vakil says, "it is a little tricky to convince Rails and Migrations to use it." So Sanjay has come up with a set of instructions and code on how to solve the problem.
How to customize attachment_fu file names
attachment_fu is one of the most popular "file upload" plugins for Rails applications nowadays, but it can prove a little tricky to work out how to get it to use custom file names. Patrick Crowley to the rescue with plenty of code!
Using Amazon S3 from Amazon EC2 with Ruby
Exactly what it says in its title. A great, comprehensive article by Jack Herrington.
Webistrano - Easier Capistrano Deployment

Webistrano is a Web-based interface for managing Capistrano deployments by Jonathan Weiss. There are two screencasts available to demonstrate its use.
10 Reasons to Learn Ruby
A well written, comprehensive look at ten reasons to learn Ruby. I didn't post this separately as it's going to be second nature to most Ruby Inside readers, but it's a good read that deserves some eyeballs nonetheless.
macaddr - MAC address retrieval library
macaddr is a cross-platform library by Ara Howard that lets you retrieve the MAC network interface addresses from the local machine. Just use gem install macaddr and then require macaddr in and use Mac.addr and Mac.addr.list. Works on OS X, Windows and Linux.

I know there's going to be some controversy around this clever piece of code by Jay Phillips. He's developed "Superators", a library that finally makes it easy to create new operators within Ruby that look like line noise. Always wanted a "-~+~-" or "===~-+~++" operator? Now it's within your grasp! As Aleks Clark says: "Job security and spiffy DSL construction in one neat package."
![]()
Yelp.com is a site that lets people review bars, clubs, shops, and nightlife in various US cities. Yelp only began to offer an API a few weeks ago and Walter Korman wasted no time in releasing a client library for Ruby. It's called, simply, "yelp" and lets you directly use Yelp.com's data from your apps. You can do cool things like search for business reviews, locate business reviews by business phone number, and search for neighborhoods by geo-points or address/location.

Fred George, a Thoughtworks consultant with some 38 years' development experience, presents "Applying Agile to Ruby", a 50 minute video and slide-based presentation. He looks at the usual Agile practices (and a few design patterns) and applies them to the Ruby ecosystem. Be warned, there's a lot of comparison of Ruby to Java, but George's delivery is dynamic enough to keep things interesting.

method_missing is one of Ruby's coolest bits of metaprogramming voodoo. Two years, Why wrote about it, and now Amy Newall, half of a Massachusetts-based husband-wife development team, writes about 10 things you should know about method_missing.
Ruby Inside hasn't had any new items for the last several days as I've just bought a house, and have had to enjoy the various work that brings. So, to get things back on track with Ruby Inside, here's a roundup of some of the key news and articles I've seen over the past week instead:

Why Releases His Shoes To The World
Despite the finest Ruby blog in the land, Why's RedHanded, slipping into a coma earlier this year, Why continues to wow the Ruby community with his contributions. This time around, he's built a cross-platform toolkit for making "Web-like Desktop Apps" using Ruby called Shoes. Drool over this sample code:

Why is releasing regular posts with information about Shoes and how to use it at Hackety.org.
Rails™ Turns 3.. officially, at least.
David Heinemeier Hansson celebrates Ruby on Rails'™ third anniversary of release to the public. Congratulations David and the rest of the Rails core team!
Last Week for Early Bird Prices for RailsConf Europe
You have until August 6 to register for RailsConf Europe at the early-bird rate of €645.00 (for the conference sessions only). It goes up to €795.00 thereafter.
"Scaling a Rails Application" Tutorial
Courtenay of caboo.se fame has written an excellent post that digs into the depths of scaling a Rails application.
Sphincter (a new ActiveRecord search library) Released
Eric Hodel has released version 1.0.0 of Sphincter, a tight library for extending ActiveRecord with Sphinx-powered search capabilities. It automatically configures itself, except telling it which models to search on your Rails applications. Sphinx is worth looking at if you haven't already as there are stable installations of it working well with indexing many terabytes of data.
That's it Jolks!
Normal service will resume in 3, 2, 1...

Practical Ruby Gems is a new book written by David Berube and published by Apress that looks at the practical uses of a collection of Ruby gems. Tim Hunter, who also reviewed my Beginning Ruby (which is doing a good job of tanking in the Amazon rankings, but I'm in it for the long haul!), has written a lengthy review for Slashdot. Here's a direct affiliate-free link to the book on Amazon.com. I was expecting to review a copy myself, but I'm more than happy to trust Tim based on his previous reviews of Ruby books.

Last month, a lengthy discussion kicked off on Ruby-Talk called "Why not adopt Python style indentation for Ruby?" .. it wasn't anything particularly new, because a similar discussion occurred six years ago. Nevertheless, a coder called Jinjing has been inspired to create Lazibi, a Ruby pre-processor to allow one to use Python style indentation within Ruby code.
It's clever enough, but I can't see standalone pre-processors becoming popular. It does make me think that official support for pre-processing of some sort within Ruby itself would be pretty cool though for people who want to use hacks like these.
![]()
Peter Szinek (of ScRUBYt! fame) has put together a script that works out the "top 10 Ruby / Rails blogs" using data from Alexa and Technorati. Check out the results! Ruby Inside comes in at #2.

For those more interested in the technique than the results, Peter has also put together an article showing how he used ScRUBYt and other sites and APIs to pull it off along with some of the source code involved.

FaceBook, a popular social networking site, recently announced the availability of an API, allowing third party developers to build tools, apps, and systems that integrate with FaceBook and which FaceBook users can use from within their accounts. MySpace users, who are used to copying and pasting crazy blocks of HTML into their profile foxes, will be aware of what a big deal this is.
Hot on the heels of this announcement, Matt Pizzimenti has updated RFaceBook, a Ruby library for integrating with FaceBook, to support various features of the API. It's not something I'm likely to use, or that I fully understand, but the initial response to RFaceBook appears to be incredibly positive, so if FaceBook is your cup of tea, check it out.
(Post fixed.)

The RSpec development team have just announced the release of RSpec 1.0, the first major version of what has become a popular "Behavior Driven Development" library for Ruby.
If you're fresh to RSpec, check out the official home page for a compelling example, or straight from the mouths of the RSpec team:
RSpec provides a Domain Specific Language for describing and verifying the behaviour of Ruby code with executable examples.
Some people like to call these examples "tests". In fact, they are. But we believe that tests have equally important value as documentation and as a design aid, and that the testing nomenclature and syntax in most unit testing frameworks keep too much focus on only the testing value, and hide the design and documentation value.
40 contributors have been involved with RSpec, along with 5 core developers, making RSpec one of the most popular collective Ruby projects.
(Update: David Chelimsky has written a great RSpec tutorial.)

John Nunemaker has put together a pretty tight library for accessing Last.fm data called Scrobbler. gem install scrobbler will get you most of the way there, and then you can quickly find recent tracks for any user, tracks for particular albums, and all sorts of great data. This could be a useful library for anyone putting together some sort of social networking or profile app in Rails who wants to show a user's recently listened tracks within their own system.
Erlectricity is a very early stage library in a "pre-release" stage that acts as an interoperability bridge between Ruby and Erlang processes. Scott Fleckenstein is the developer, and he is going to continue blogging about Erlectricity's development, and Ruby / Erlang interoperability on his blog. While this topic isn't quite mainstream yet, many Ruby developers have become interested in Erlang lately and Ruby / Erlang interoperability and co-operation is likely to become a big topic in the Ruby community towards the end of the year.

Why The Lucky Stiff is set to guarantee himself a place in the Programming Hall of Fame with his new project, Hackety Hack, an uber-simple programming environment for kids, beginners, and amateur coders. It attempts to resolve a problem brought up in an old article of why's, "The Little Coder's Predicament", which lamented the ability for kids to quickly get coding on modern platforms, unlike in the Commodore 64 days.

Currently the system is in beta and only available for Windows, but OS X and Linux are to follow. Why's ingenuity even goes as far as the installation program which makes it really easy for users to specify where they want their programs to be stored.

As with any of Why's works, words cannot do it justice, so head on over to the official Hackety Hack site and check it all out.