Raptor: A Forthcoming Ruby Web Server for Faster App Deployment

Raptor bills itself as a new Ruby “app server” and it claims to blow everything else out of the water performance-wise (by between 2-4x!) whether that’s Unicorn, Puma, Passenger, or even TorqueBox on JRuby. The bad news for now is there’s no source or repo yet and only a handful of people (including me) have been given a sneak peek, although a public beta is promised on November 25th.

The history of Ruby webapp deployment

The deployment of Ruby (and therefore Rails) webapps was a painful mess for years, a state I lamented 7 years ago in No True ‘mod_ruby’ is Damaging Ruby’s Viability on the Web. Thankfully, shortly thereafter a number of projects came out to make life easier, the most famous being Phusion Passenger (then known as mod_rails) in April 2008.

Things have continued to improve gradually over the years, with Passenger getting consistently better, and new approaches such as those offered by Unicorn and Puma, using JRuby, as well as proxying through Nginx, coming into the picture.

Enter Raptor

Raptor, a new entry to the burgeoning world of Ruby Web servers, boasts some compelling features. “Visibility” is cited as a key feature so that you can look ‘into’ your app and analyze its performance as easily as possible using a JSON API (so building your own tools around the API should be simple). Raptor also uses the HTTP parser from Node which itself was derived from Nginx’s HTTP parser; both are renowned for their speed and stability. Raptor boasts a zero-copy, concurrent, evented architecture which makes it efficient memory and IO-wise – so even if you have slow clients or a slow network, these won’t bring your app server to a stuttering standstill.

Another feature that jumped out at me is integrated caching. Raptor doesn’t rely on an external services like memcached or Redis at all, but is truly internal and optimized specifically for Web workloads. If you’ve never set up caching before, this could provide a big boost as with Raptor it’ll be available “out of the box”.

The initial results seem promising. Fabio Akita has already shared some early benchmark results which broadly mirror my own experience (disclaimer: as someone with rather little experience and authority in benchmarking, my benchmarks are oriented around Raptor’s own benchmarking suite) but, as always, YMMV and such benchmarks are often criticized.

The waiting game..

The team behind Raptor promise they’ll be releasing some interesting blog posts soon about the technology behind it, including how the cache is implemented and has been optimized, how the zero-copy system works and how it’ll benefit your code, and similar things. So keep an eye on rubyraptor.org, especially around November 25th.

This Month in Ruby: PeepCode Acquired, Rails 3.2.14, And More

Welcome to a roundup of Ruby news, articles, videos, and more, for July 2013 cobbled together from my e-mail newsletter, Ruby Weekly.

Highlights include: PeepCode acquired by Pluralsight, Practicing Ruby archives made public, Rails 3.2.14, and an interesting interview with Matz.

Featured

The First Four Volumes of Practicing Ruby, Now Available Online
Practicing Ruby is a high quality, paid Ruby journal run by Gregory Brown, but he’s made archives of over 60 articles available to the public. There’s a ton of stuff to enjoy here.

PeepCode Acquired by Pluralsight
Ruby and Rails screencasting pioneer Geoffrey Grosenbach has announced he has sold Peepcode to Pluralsight, a large online training provider.

The Plan for RSpec 3
RSpec 2.0 was released in October 2010 and RSpec 2.14 will be the last RSpec 2 feature release. Work on RSpec 3 has begun and Myron Marston shares what’s going to be involved.

Rails 3.2.14 RC1 and RC2 Released
A variety of bug fixes for Rails 3.2 arrived in 3.2.14 RC1 with one minor regression fixed in RC2. Final due soon.

The Future of Computing – An Interview with Matz
Last year, Ruby’s creator Yukihiro ‘Matz’ Matsumoto released a book called The Future of Computing (only in Japanese, I believe) and did an interview with a Chinese publisher. Fred Wu has translated it into English.

RSpec 2.14 Released
Myron Marston unveils the last 2.x feature release of the popular spec framework and announces work is well underway for the future RSpec 3. 2.14 includes a new feature called ‘spies’ which is shown off here.

Functional Programming and Ruby
At GoRuCo 2013, Pat Shaughnessy gave a 40 minute talk comparing Haskell (a functional language) to Ruby and looked at how to implement common functional patterns in Ruby. Well explained and backed by good slides.

Reading

Streaming with Rails 4
Saurabh Bhatia looks at Rails 4’s support for live streaming (the ability to send partial requests out to the client on the fly).

Reading the Ruby Source to Understand Rails Idiosyncrasies
I’m not sure you always need to dig quite so deep but Eno Compton takes an interesting journey through MRI’s source code to see the difference between Range#cover? and Range#include?

Speed Up Heroku Deploys
Alex MacCaw was suffering from slow deploys to Heroku but he found a workaround.

Shoes 4 – A Progress Report
Shoes was a graphical toolkit put together by Why the Lucky Stiff that made it simple to create GUI apps in Ruby. Since Why disappeared, others have picked up work on it, and Shoes 4 is set to be a complete rewrite.

Put Yourself on Rails with A Push of A Button
A technique for quickly bringing up a workspace for doing Rails work (including terminals, a Rails console, a Rails server, etc.)

Multitenancy with Rails: An E-book by Ryan Bigg
Ryan Bigg, of Rails in Action fame, is writing an e-book about building a multi-tenanted Rails app.

Incremental Redesign with Rails
Lars Klevan shows how to use prepend_view_path to make in-progress redesigns on a production codebase simpler.

How to Declutter Your ‘lib’ Directory
If you have an established Rails project, its ‘lib’ folder might be getting a little full. Kuba Suder looks at ways to clean it up and put things elsewhere.

Design Patterns: The Template Method Pattern
An introductory Ruby-oriented look at arguably the simplest design pattern.

Object Oriented Rails: Writing Better Controllers
Damien Le Berrigaud of Pivotal Labs tries to avoid stubs and mocks and leans on dependency injection to test his controllers’ code.

Vimscript And You
HashRocket’s Jonathan Jackson demonstrates how you can use RSpec against Vim to aid in the development of a Vim plugin with Vimscript.

MotionPhrase: Next Level Localization for RubyMotion Applications
PhraseApp is a translation management tool for producing multilingual Web sites, Rails apps, etc, but it also works for localizing RubyMotion apps too, as demonstrated here.

Ruby’s Eigenclasses Demystified
Andrea Singh looks at Ruby’s quirky ‘eigenclasses’ (a.k.a. metaclasses) and explains things in both code and diagrams. Dates from 2011 but worth revisiting.

The Self-Pipe Trick Explained
Jesse Storimer shows off a cute Unix trick/technique in Ruby.

Practical RSpec Wrapping
Why would you want to use around hooks in RSpec? Dru Riley explains.

Using PostgreSQL’s ‘hstore’ in A Rails Application on Engine Yard Cloud
If you want to take advantage of schemaless features without abandoning your relational database, using ‘hstore’ within Postgres is a great option. Here’s an introduction on using the hstore PostgreSQL extension in a Rails app.

Implementing Subdomain and Custom Domain Support in Rails
A look at how one development team implement subdomain and custom domain features in their Rails app.

Events

dotRB: The Largest Ruby Conference in France (October 18, Paris)
Following on from a successful ‘dotJS’ JavaScript event comes dotRB. Announced speakers so far include Steve Klabnik, Konstantin Haase, and Brian Ford.

Watching

11 Talks from La Conf Paris
Some big names to enjoy here including Yehuda Katz, Amy Hoy, Sandi Metz, and Steve Klabnik.

Deathmatch: Bundler vs Rubygems.org
At GoRuCo 2013, Andre Arko told the story of the quest to make ‘bundle install’ faster.

How to Set Up RSpec
A well produced 6 minute screencast.

To Know A Garbage Collector
Mike Bernstein discusses his experiments with MRI Ruby’s garbage collector, his investigations into other languages and the influence of their GC implementations, the history of the subject, and more.

Kata and Analysis with Jim Weirich
From RubyConf India 2013 comes a live coding session by the inimitable Jim Weirich where he walks through the popular ‘roman numeral’ conversion kata using TDD along the way.

Aaron ‘tenderlove’ Patterson’s RubyConf India 2013 Keynote
An hour with Ruby and Rails core contributor Aaron ‘tenderlove’ Patterson covering esoteric Ruby stuff and Postgres to career advice and cats. Warning: The audio is rather poor here and cuts out entirely for the second half so don’t waste your time if this will drive you crazy.

5 Minutes of EuRuKo 2013
European Ruby conference (EuRuKo) took place in Athens last month and Clemens Helm has put together a 5 minute collection of clips and insights from the event. Includes Matz, Xavier Noria, Benjamin Smith, Pat Shaughnessy and Steve Klabnik.

Nokogiri: History and Future
Nokogiri is the most popular way to parse and process XML in Ruby and at GoRuCo 2013, Mike Dalessio gave a short 11 minute talk on the origins of the project, how to determine if it suits you, and looks at some of the tooling around it.

Libraries, Code and Tools

Upton: A Web Scraping Framework
A Ruby-based web-scraping framework that abstracts away the common parts of web scraping so developers can concentrate on the unique parts of their project.

LanguageFilter: Detect and Optionally Filter Multiple Categories of Language
Wave goodbye to sex, hatred, profanity, violence, etc, in your app.

Lita: A Ruby Chat Bot with Redis-based Storage
Can be twisted to work with any chat service and extended with plugins.

Pkgr: Make A Debian Package Out of A Rails App in 5 Minutes
A high-level tool that turns Rails applications into native Debian packages.

Flynn – Open Source Platform As A Service, Powered by Docker
Flynn is an as-yet-unreleased Heroku-inspired system to simplify deploying and maintaining apps. Instead of using complex config management systems, Flynn allows self-serve management of containerized deployments. The creator is currently trying to raise money to work on the project.

Jobs

Software Craftsperson at Bendyworks
If you’re the type of person who learns new languages as a matter of course, contributes to open source for fun, and ships code with a calm and collected professionalism: you seem like our kind of developer. Join our world-class team in Madison, Wisconsin.

Senior backend- / API-developer at Rabble (Stockholm, Sweden)
Tired of bullshit ads? Help us develop Sweden’s leading app for mobile offers, where customers and businesses meet on equal terms! Join us in the heart of Stockholm to play with geospatial data and Ruby API’s all day long!

Ruby on Rails developer at SupaDupa (London, UK)
We’re looking for an experienced Ruby on Rails developer to join the small team behind SupaDupa.me, an e-commerce platform aimed at creatives. Excited about the challenge of working on the full stack, from front-end dev to system administration? Get in touch!

Ruby Programmer: IT and System Automation
Want to change the future of education? We are trying to build an awesome team that enjoys challenges and results. Interested? Come work with us in beautiful Switzerland.

Ruby Developers at HouseTrip (London, UK)
Want to work with a 18-person team of passionate Ruby developers who love good code and care for their product in central London? We are currently hiring. Ranked by Wired Magazine the number two start-up in London (2012), HouseTrip is Europe’s largest holiday rental booking website!

Last but not least..

ruby -run -e httpd . -p5000
Run a local HTTP server with a single line of Ruby. Just one character longer than the classic python -m SimpleHTTPServer but more obviously flexible (plus, it’s Ruby ;-)).

Does the GIL Make Your Ruby Code Thread-Safe?

This is a guest post by Jesse Storimer. He teaches the Unix fu workshop, an online class for Ruby developers looking to do some awesome systems hacking in Ruby and boost their confidence when it comes to their server stack. Spots are limited, so check it out the class while there’s still room. He’s also the esteemed author of Working with Unix Processes, Working with TCP Sockets and Working with Ruby Threads.

There are some misconceptions in the Ruby community about this question surrounding MRI’s GIL. If you only take one thing away from this article today, let it be this: The GIL does not make your Ruby code thread-safe.

But you shouldn’t take my word for it.

This series started off just trying to understand what the GIL is at a technical level. Part 1 explained how race conditions could occur in the C code that’s used to implement MRI. Yet, the GIL seemed to eliminate that risk, at least for the Array#<< method we looked at.

Part 2 confirmed that the GIL did, in fact, make MRI’s native C method implementations atomic. In other words, these native implementations were free from race conditions. These guarantees only applied to MRI’s native C functions, not to the Ruby that your write. So we were left with a lingering question:

Does the GIL provide any guarantee that your Ruby code will be thread-safe?

I’ve already answered that question. Now I want to make sure that the misconception doesn’t go any further.

Race conditions redux

Race conditions exist when some piece of data is shared between multiple threads, and those threads attempt to act on that data at the same time. When this happens without some kind of synchronization, like locking, your program can start to do unexpected things and data can be lost.

Let’s step back and recap how such a race condition can occur. We’ll use the following Ruby code example for this section:

class Sheep
  def initialize
    @shorn = false
  end

  def shorn?
    @shorn
  end

  def shear!
    puts "shearing..."
    @shorn = true
  end
end

This class definition should be nothing new. A Sheep is not shorn when initialized. The shear! method performs the shearing and marks the sheep as shorn.

sheep = Sheep.new

5.times.map do
  Thread.new do
    unless sheep.shorn?
      sheep.shear!
    end
  end
end.each(&:join)

The bit of code creates a new sheep and spawns 5 threads. Each thread races to check if the sheep has been shorn? If not, it invokes the shear! method.

Here’s the result I see from running this on MRI 2.0 several times.

$ ruby check_then_set.rb
shearing...
$ ruby check_then_set.rb
shearing...
shearing...
$ ruby check_then_set.rb
shearing...
shearing...

Sometimes the same sheep is being shorn twice!

If you were under the impression that the GIL made your code ‘just work’ in the presence of multiple threads, this should dispel that. The GIL can make no such guarantee. Notice that the first time running the file, the expected result was produced. In subsequent runs, unexpected output was produced. If you continued running the example, you’ll see still different variations.

These unexpected results are due to a race condition in your Ruby code. It’s actually a common enough race condition that there’s a name to describe this pattern: a check-then-set race condition. In a check-then-set race condition, two or more threads check a value, then set some state based on that value. With nothing to provide atomicity, it’s possible that two threads race past the ‘check’ phase, then both perform the ‘set’ phase.

Recognizing race conditions

Before we look at how to fix this, first I want you to understand how to recognize this. I owe @brixen for introducing to me the terminology of interleavings in the context of concurrency. It’s really helpful.

Remember that a context switch can occur on any line of your code. When switching from one thread to another, imagine your program being chopped up into a set of discrete blocks. This sequential set of blocks is a set of interleavings.

At one end of the spectrum, it’s possible that there’s a context switch after every line of code! This set of interleavings would have each line of code interleaved. At the other end of the spectrum, it’s possible that there are no context switches during the body of the thread. This set of interleavings would have all the code in its original order for each thread. In between these two ends, there are lots of ways that your program can be chopped up and interleaved.

Some of these interleavings are OK. Not every line of code introduces a race condition. But imagining your programs as a set of possible interleavings can help you recognize when race conditions do occur. I’ll use a series of diagrams to show this code may be interleaved by two Ruby threads.

Just to make the diagrams simpler, I replaced the shear! method call with the code from the body of the method.

Consider this diagram the legend for the ones to follow; the code highlighted in red is the set of interleavings from Thread A, the code highlighted in blue is the set of interleavings from Thread B.

Now let’s see how this code could be interleaved by simulating context switches. The simplest case is if neither thread is interrupted during the course of executing this code. This would result in no race conditions and would produce the expected output for us. That might look like this:

Now I’ve organized the diagram so you can see the sequential ordering of events. Remember that the GIL locks around the execution of Ruby code, so two threads can’t truly run in parallel. The ordering of events here is sequential, starting at the top and working down.

In this interleaving, Thread A did all of its work, then the thread scheduler triggered a context switch to Thread B. Since Thread A had already done the shearing and updated the shorn variable, Thread B didn’t have anything to do.

But it isn’t always this simple. Remember that the thread scheduler could trigger a context switch at any point in this block of code. This time we just got lucky.

Let’s look at a more nefarious example, one that would produce unexpected output for us.

In this possible interleaving, the context switch occurs right at a point that can cause trouble. Thread A checks the condition and starts shearing. Then the thread scheduler schedules a context switch and Thread B takes over. Even though Thread A already performed the shearing, it didn’t get a chance to update the shorn attribute yet, so Thread B doesn’t know about it.

Thread B checks the condition for itself, finds it to be false, and shears the sheep again. Once it finishes, Thread A is scheduled again and finishes execution. Even though Thread B set shorn = true when it ran through the code, Thread A does it again because it picks up exactly where it left off.

A sheep getting shorn twice may not seem like much to care about, but replace sheep with invoice, and shearing with collecting payment; we would have some unhappy customers!

I’ll share one more example to illustrate the non-deterministic nature of things here.

This just adds more context switches, so each thread progresses a little bit at a time, but keeps switching back and forth. Let your mind take this to its logical conclusion, it’s possible for a context switch to happen on any line of the program. The interleaving that occurs can also be different each time the code is executed, so it may produce the expected result on one iteration, and an unexpected result the next time around.

This is really a great way to think about race conditions. When you’re writing multi-threaded code, you want to be thinking about how the program might be chopped up and interleaved, and the effects of various interleavings. If it seems that some interleavings will lead to incorrect results, you should re-think your approach to the problem or introduce synchronization with Mutex.

This is terrible!

At this point it seems fitting to tell you that you can make this code example thread-safe by introducing synchronization with Mutex. It’s true, you can do that. But I intentionally cooked up this example to prove a point;  it’s terrible code. You shouldn’t write code like this in a multi-threaded environment.

Whenever you have multiple threads sharing a reference to an object, and making modifications to it, you’re going to run into trouble unless you have some kind of locking in place to prevent a context switch from happening in the middle of the modification.

However, this particular race condition is easily solvable without explicitly using locks in your code. Here’s one solution using Queue:

require 'thread'

class Sheep
  # ...
end

sheep = Sheep.new
sheep_queue = Queue.new
sheep_queue << sheep

5.times.map do
  Thread.new do
    begin
      sheep = sheep_queue.pop(true)

      sheep.shear!
    rescue ThreadError
      # raised by Queue#pop in the threads
      # that don't pop the sheep
    end
  end
end.each(&:join)

I left out the Sheep implementation because it’s the same. Now, instead of each thread sharing the sheep object and racing to shear it, the Queue provides the synchronization.

If you run this against MRI, or any of the other truly parallel Ruby implementations, it will produce the expected result every time. We’ve eliminated the race condition in this code. Even though all the threads may call the Queue#pop method at more-or-less the same time, it uses a Mutex internally to ensure that only one thread can receive the sheep.

Once this single thread receives the sheep, the race condition disappears. With just one thread, there’s no one else to race with!

The reason I suggest using Queue instead of a lock is that its simpler to use a Queue correctly. Locks are notoriously easy to get wrong. They bring new concerns like deadlocking and performance degradations when used incorrectly. Using a data structure is like depending on an abstraction. It wraps up the tricky stuff in a more restrictive, but simpler API.

Lazy initialization

I’ll just quickly point out that lazy initialization is another form of the the check-then-set race condition. The ||= operator effectively expands to

@logger ||= Logger.new

# expands to 

if @logger == nil
  @logger = Logger.new
end

@logger

Look at the expanded version and imagine where the interleavings could occur. With multiple threads and no synchronization, it’s definitely possible for that @logger to be initialized twice. Again, initializing a Logger twice may not be a problem in this case, but I have seen bugs like this in the wild that do cause issues.

Reflections

I want to leave you with some lessons at the end of all this.

4 out of 5 dentists agree that multi-threaded programming is hard to get right.

At the end of the day, all that the GIL guarantees is that MRI’s native C implementations of Ruby methods will be executed atomically (but even this has caveats). This behaviour can sometimes help us as Ruby developers, but the GIL is really there for the protection of MRI internals, not as a dependable API for Ruby developers.

So the GIL doesn’t ‘solve’ thread-safety issues. As I said, getting multi-threaded programming right is hard, but we solve hard problems every day. One way that we work with hard problems is with good abstractions.

For example, when I need to do an HTTP request in my code, I need to use a socket. But I don’t usually use a socket directly, that would be cumbersome and error-prone. Instead, I use an abstraction. An HTTP client provides a more restrictive, simpler API that hides the socket interactions and associated edge cases from me.

If multi-threaded programming is hard to get right, maybe you shouldn’t be doing it directly.

“If you add a thread to your application, you’ve probably added five new bugs in doing so.”

Mike Perham

We’re seeing more and more abstractions around threads. An approach that’s catching on in the Ruby community is the Actor model of concurrency, with the most popular implementation being Celluloid. Celluloid provides a great abstraction that marries concurrency primitives to Ruby’s object model. Celluloid can’t guarantee that your code will be thread-safe or free from race conditions, but it wraps up best practices. I encourage you give Celluloid a try.

These problems that we’re talking about aren’t specific to Ruby or MRI. This is the reality of programming in a multi-core world. The number of cores on our devices is only going up, and MRI is still figuring out its answer to this situation. Despite its guarantees, the GIL’s restriction on parallel execution seems like the wrong direction. This is part of MRI’s growing pains. Other implementations, like JRuby and Rubinius, are running truly parallel with no GIL.

We’re seeing lots of new languages that have concurrency abstractions built-in at the core of the language. The Ruby language doesn’t have any of this, at least not yet. Another benefit of relying on abstraction is that the abstractions can improve their implementation, while your code remains unchanged. For example, if the implementation of Queue switched from relying on locks to using lock-free synchronization, your code would reap the benefits without any modification.

For the time being, Ruby developers should educate themselves about these issues! Learn about concurrency. Be aware of race conditions. Thinking about code as interleavings can help you reason about race conditions.

I’ll leave off with a quote that’s influencing much of the work being done in the larger field of concurrency today:

Don’t communicate by sharing state; share state by communicating.

Using data structures for synchronization supports this; the Actor model supports this. This idea is at the core of the concurrency model of languages like Go, Erlang, and others.

Ruby needs to look to what’s working in other languages and embrace it. As a Ruby developer, you can do this today by trying out and supporting some of these alternative approaches. With more people on board, these approaches could become the new standard for Ruby.

Thanks to Brian Shirai for reviewing a draft of this.

This Week in Ruby: Matz on Ruby 2.0, Numerous Conference CFPs, Tenderlove on define_method

Welcome to this week’s roundup of Ruby news, articles, videos, and more, cobbled together from my e-mail newsletter, Ruby Weekly. Sorry these roundups have been missing for a couple of months, I’ve been focusing very heavily on the e-mail newsletters which are continuing to grow like crazy! 🙂 I hope to get back into blogging more soon.

Matz on Ruby 2.0
Matz spoke about Ruby 2.0 (‘the happiest release ever’) for 30 minutes at the Heroku Waza event a week ago and the video is already available to watch. He stresses that “Ruby 1.8 will die soon” and encourages everyone to upgrade.

Dynamic Method Definitions
Aaron ‘tenderlove’ Patterson says that “depending on your app, using define_method is faster on boot, consumes less memory, and probably doesn’t signigicantly impact performance” compared to eval-based techniques. (And he has the numbers to prove it.)

Steel City Ruby Conference 2013 CFP Now Open
Steel City Ruby takes places in Pittsburgh, PA on August 16-17 and the CFP is now open if you want to submit a talk. The Burlington Ruby Conference has a CFP open too, as does RubyConf India.

Reading

Inspecting Rails 4 using Ruby 2.0 and TracePoint
Matt Aimonetti shows off a practical use for Ruby 2.0’s TracePoint execution tracing functionality.

Visualizing Memory Leaks in Ruby 1.9
Conrad Irwin on some clever work to extend ObjectSpace with a new find_references method to perform better analysis on object and memory usage on Ruby 1.9.

Parsing TOML in Ruby with Parslet
Recently, GitHub founder Tom Preston-Werner created an interesting INI-influenced ‘TOML’ format. In this series of posts, Nathan Witmer looks at what’s involved in building a parser for TOML using the Parslet PEG parser construction library.

Introducing Ress: A System for Building Mobile Optimized Rails Apps
Matthew Robertson introduces his new system for building mobile-optimized Rails applications using semantic, media query-based device detection and server side component optimization.

Ruby 2.0 Walkthrough: The Best Bits
Some slides from my yet-to-be-released ‘Ruby 2.0 Walkthrough’ that quickly skim through what I consider to be the ‘best bits’ (and not just the headline features).

Rails + Ember.js
An introduction to the open source Ember.js JavaScript app framework for Rails developers.

Watching and Listening

Sinatra in SIX Lines: How to Do Crazy Stuff with Ruby
A talk by Konstantin Haase at Ruby Australia.

Libraries and Code

Phusion Passenger 4.0 Release Candidate 4
Leading Rack-based app deployment tool Passenger gets yet another step closer to the 4.0 release.

time-lord: A Human DSL for Time Expressions
A gem that gives you more human like expressions for time and space math. Get fun like 1.hour.ago.to_range and 200.minutes.ago.to_words

identity_cache: Opt-in Read-through ActiveRecord Caching, From Shopify
IdentityCache lets you specify how you want to cache your model objects, at the model level, and adds a number of convenience methods for accessing those objects through the cache. Uses Memcached as the backend cache store.

neg 1.1.0: A Small PEG Parser Library
“One could say it’s a small brother of Parslet.”

Jobs

Web Application Developer for Big Nerd Ranch
Seeking smart, kind folks who want to make the world a little better through developing, training and writing about cutting-edge code.

JS / Ruby Developer at ReplayPoker (Full-Time, Remote)
Looking for a challenge? Our company is looking for a top-notch junior to mid level developer to join our small team and make a big difference!

Last but not least..

RTanque: A Robot Programming Game for Rubyists
Players program the ‘brain’ of a tank and then send their tank into battle with other bots. Based upon the Java project ‘Robocode.’

A Simple Tour of the Ruby MRI Source Code with Pat Shaughnessy

I’m not in Ruby core or, well, even a confident C coder anymore, but I’ve long enjoyed digging in the Ruby MRI source code to understand weird behavior and to pick up stuff for my Ruby course.

Pat Shaughnessy is also a fan of digging around in Ruby’s internals and has written some great posts like How Ruby Executes Your Code, Objects, Classes and Modules, and Exploring Ruby’s Regular Expression Algorithm.

When Pat released his Ruby Under a Microscope book, I knew it would be right up my street! He digs into how objects are represented internally, why MRI, Rubinius and JRuby act in certain ways and, of course, “lots more.”

I invited Pat to take a very high level cruise through the MRI codebase with me so we could share that knowledge with Ruby programmers who haven’t dared take a look ‘under the hood’ and to show it’s not as scary or pointless as it may seem.

It’s 100% free so enjoy it above or on YouTube in 720p HD.

P.S. Pat is happy to do another video digging deeper into how Ruby actually takes your code and executes it and he’s able to walk through the actual virtual machine for us. If the reaction to this video is good, we’ll sit down again and see if we can do it! 🙂

A Simple Tour of the Ruby MRI Source Code with Pat Shaughnessy

I’m not in Ruby core or, well, even a confident C coder anymore, but I’ve long enjoyed digging in the Ruby MRI source code to understand weird behavior and to pick up stuff for my Ruby course.

Pat Shaughnessy is also a fan of digging around in Ruby’s internals and has written some great posts like How Ruby Executes Your Code, Objects, Classes and Modules, and Exploring Ruby’s Regular Expression Algorithm.

When Pat released his Ruby Under a Microscope book, I knew it would be right up my street! He digs into how objects are represented internally, why MRI, Rubinius and JRuby act in certain ways and, of course, “lots more.”

I invited Pat to take a very high level cruise through the MRI codebase with me so we could share that knowledge with Ruby programmers who haven’t dared take a look ‘under the hood’ and to

Continue reading “A Simple Tour of the Ruby MRI Source Code with Pat Shaughnessy”

The Last Week in Ruby: A Great Ruby Shirt, RSpec Team Changes and a Sneaky Segfault Trick

Welcome to this week’s roundup of Ruby news cobbled together from my e-mail newsletter, Ruby Weekly.

Highlights include: A time-limited Ruby shirt you can order, a major change in the RSpec project, how to make Ruby 1.9.3 a lot faster with a patch and compiler flags, a sneaky segmentation fault trick, several videos, and a few great jobs.

Featured

The ‘Ruby Guy’ T-Shirt
Grab a t-shirt with a cute ‘Ruby Guy’ mascot on the front in time for Christmas. Comes in both male and female styles in varying sizes. Only available till Thursday December 6 though as it’s part of a temporary Teespring campaign (Note: I have no connection to this, it just looks cool.)

David Chelimsky Hands Over RSpec to New Project Leads
After several years at the helm, David Chelimsky is handing over the reins to Myron Marston and Andy Lindeman for RSpec and rspec-rails respectively. Thanks for all your hard work, David.

Upgrading to Rails 4: A Forthcoming Book (in Beta)
Andy Lindeman of the RSpec core team is working on a new book designed to bring you up to speed with Rails 4. It’s in beta so you can support him now, if you like.

Reading

Making Your Ruby Fly
Andrei Lisnic demonstrates a few compile time ‘tricks’ you can use to make your MRI Ruby 1.9.3 faster. The benchmark results are compelling.

Avoiding the Tar Pits of Localization
Jeff Casimir gave a talk on the ‘Ruby Hangout’ about the trickiness of handling internationalization and localization and some tools and libraries you can use to help. Lots of notes here or you can watch the video.

Recovering From Segfaults in Ruby, The Sneaky Way
We’ve probably all seen the dreaded ‘segmentation fault’ from Ruby before. Charlie Somerville demonstrates a rather clever but sneaky way you can ‘recover’ from them in plain Ruby. As he says, you probably don’t want to use this trick seriously.

Use Rails Until It Hurts
Evan Light pushes back a little against the recent wave of OO purity and, as DHH calls it, ‘pattern vision.’

Speeding Things Up With jRuby
MRI’s global interpreter lock prevents running code in parallel without forking the Ruby process. That’s where JRuby can help.

Try RubyGems 2.0
Michal Papis demonstrates how you can give the forthcoming RubyGems 2.0 a spin using RVM.

Watching and Listening

Rapid Programming Language Prototypes with Ruby and Racc
At RubyConf 2012, Tom Lee demonstrated how you can use Racc, a LALR(1) parser generator that emits Ruby code from a grammar file, in the process of creating a simple programming language of your own.

A Tour Into An Oddity With Ruby’s Struct Class
In which I look into why Struct.new(:foo?).new(true).foo? doesn’t work, even though the Struct-produced class and its instances are valid. I dive into the MRI source code a bit to get to the bottom of things. 12 minutes in all.

RubyTapas 027: Macros and Modules
Avdi Grimm’s latest Ruby screencast for non-subscribers to his Ruby video site.

A Rails 4.0 Roundup in 3 Videos
A summary and links to three Rails 4 related videos (all linked in RW before) by Marco Campana. A handy catch up if you didn’t already.

Libraries and Code

Introducing the Rails API Project: Rails for API-only Applications
A set of tools to use Rails for building APIs for both heavy Javascript applications as well as non-Web API clients. This isn’t entirely new but the project has now become more formally established.

Zuck: A Little Helper to Access Facebook’s Advertising API
An early, prototype-stage gem but you may still find it useful.

Jobs

Blazing Cloud is looking for software artisans
to join us in handcrafting beautiful mobile experiences. We are looking for people who believe in a whole product-approach and agile development practices, and have a strong sense of quality.

Last but not least..

Come Speak at O’Reilly Fluent 2013
OK, it’s slightly offtopic but I’m the co-chair for O’Reilly’s JavaScript, HTML5 and browser technology event and I know many Rubyists are also involved in these areas. Our CFP is open until December 10 and we have lots of awesome stuff lined up.

The Split is Not Enough: Unicode Whitespace Shenigans for Rubyists

That code is legal Ruby! If you ran it, you’d see 8. How? There’s a tale to tell..

The String with the Golden Space

I was on IRC in #nwrug enjoying festive cheer with fellow Northern Rubyists when ysr23 presented a curious problem.

He was using a Twitter library that returned a tweet, "@twellyme film", in a string called reply. The problem was that despite calling reply.split, the string refused to split on whitespace. Yet if he did "@twellyme film".split in IRB, that was fine.

International man of mystery Will Jessop suggested checking $; (it’s a special global variable that defines the default separator for String#split). It was OK.

In an attempt to look smarter than I am, I suggested reply.method(:split).source_location to see if the String class had been monkey-patched by something annoying. Nope. (Though this is a handy trick if you do want to detect if anyone’s tampered with something.)

Someone suggested Mr. Ysr23 show us reply.codepoints.to_a:

# reply.codepoints.to_a
 => [64, 116, 119, 101, 108, 108, 121, 109, 101, 160, 102, 105, 108, 109]

Something leapt out at me. Where was good old 32!? Instead of trusty old ASCII 32 (space) stood 160, a number alien to my ASCII-trained 1980s-model brain.

From Google with Love

To the Google-copter!

Aha! Non-breaking space. That’s why split was being as useful as a chocolate teapot.

After an intense 23 seconds of discussion, we settled on a temporary solution for Mr. Ysr23 who, by this time, was busy cursing Twitter and all who sailed upon her:

reply.gsub(/[[:space:]]/, ' ').split

The solution is simple. Use the the Unicode character class [[:space:]] to match Unicode’s idea of what whitespace is and convert all matches into vanilla ASCII whitespace. reply.split(/[[:space:]]+/) is another more direct option – we just didn’t think of it at the time.

Quantum of Spaces

Solving an interesting but trivial issue wasn’t where I wanted to end my day. I’d re-discovered an insidious piece of Unicode chicanery and was in the mood for shenanigans!

Further Googling taught me you can type non-breaking spaces directly on OS X with Option+Space. (You can do the homework for your own platform.)

I also knew Ruby 1.9 and beyond would let you use Unicode characters as identifiers if you let Ruby know about the source’s encoding with a magic comment, so it was time for shenanigans to begin!

My first experiment was to try and use non-breaking spaces in variable names.

Cool! So what about variable names and method names?

What about without any regular printable characters in the identifiers at all?

And so we’re back to where we started. A hideous outcome from a trivial weekend on IRC. But fun, nonetheless. Stick it in your “wow, nice, but totally useless” brain box.

A Warning

Please don’t use this in production code or the Ruby gods will come and haunt you in your sleep. But.. if you want to throw some non-breaking spaces into your next pair programming session, conference talk, or job interview, just to see if anyone’s paying attention, I’ll be laughing with you. (And if you’re a C# developer too, Andy Pike tells me that C# supports these shenanigans too.)

P.S. My Ruby 2.0 Walkthrough Kickstarter only has about 12 hours to go! Check it out if Ruby 2.0 is on your radar or you want a handy way to get up to speed when it drops in February 2013.

This Week in Ruby: Ruby 2.0 Refinements, Cost of GC::Profiler, and BritRuby Cancelled

Welcome to this week’s roundup of Ruby news, articles, videos, and more, cobbled together from my e-mail newsletter, Ruby Weekly. If you’ve been celebrating Thanksgiving this week, I hope you’re having a good break.

Highlights include: Charles Nutter on Ruby 2.0 refinements, the cancellation of the British Ruby Conference, and DHH’s latest object instantiation (thanks Doug Renn).

Featured

Refining Ruby (or The Best Study of Ruby 2.0 Refinements Yet)
I’ve editorialized the title somewhat but this article by Charles Nutter is a great look into the world of ‘refinements’ in Ruby 2.0, what they’re intended for, and all of the challenges they throw up, both for developers and language implementers.

The British Ruby Conference.. Cancelled
It’s a pretty long story but the British Ruby Conference, which I was getting rather excited about.. is no more. There’s a statement as to why but if you want to join the melee of conversation, try here or here. Luckily other attempts are now afoot – news coming soon.

DHH’s Latest Project: Colt Heinemeier Hansson
It’s DHH’s latest release 🙂 Congratulations to him and his growing family. And before anyone complains about having a human interest story here, cheer up a bit – it’s Thanksgiving 😉

Edge Rails Now Tested on Ruby 2.0 with Travis CI
Little to read but Ruby 2.0 is now most clearly on the edge Rails developers’ radar.

Reading

Deploying Ruby Applications to AWS Elastic Beanstalk with Git
Just last week, Amazon announced Ruby support for its AWS Elastic Beanstalk semi-automated deployment and scaling system. This tutorial by Loren Segal fills in all the blanks by walking us through using it from start to finish with a Rails app.

Zen and The Art of Speaking at RubyConf 2012 – The dRuby Way
An excellent story and walkthrough about both preparing a talk for RubyConf 2012 and what happened while the speaker was there. More articles like this please.

The Cost of Ruby 1.9.3’s GC::Profiler
James Golick presents an examination of the flaws in Ruby 1.9.3’s included garbage collector instrumentation in his typically punchy style. Luckily he presents a potential solution too: GC::BasicProfiler.

Is Your Application Running with Ruby – Slow?
Two developers moved a large Ruby webapp between two machines and experienced a 50% drop in performance. Why? Clue: It was something to do with RVM.

A 2012 Mac Setup for Ruby development
We see articles like this quite often but there are a lot of handy links here despite not being particularly Ruby focused.

A Lightweight ‘CMS’ Using Ruby and Google Drive
An interesting approach to content management. Let users enter text in a Google Drive spreadsheet, grab it with Ruby, and use the data to create your content or templates locally.

A ‘yield’ Gotcha Every Ruby Developer Should Be Aware of
It’s not a true yield gotcha but is something you might trip over nonetheless regarding earlier than expected returns. Luckily, ‘ensure’ blocks help save the day.

Profiling Ruby (or How I Made Rails Start Up Faster)
Four steps: measure, find the problem, fix, and repeat.

Watching and Listening

Guest User Records – RailsCasts
Ryan Bates is back with another Rails Cast, this time demonstrating how to create a ‘temporary guest record’ in a Rails app so users can try out apps without filling in their information up front.

Matz Speaking at LinkedIn about Ruby
Back in October, Matz spoke at LinkedIn about his background, Ruby’s history, and his current work. I enjoyed this.

Libraries and Code

Convert Syck to Psych YAML Format
Change has been afoot with Ruby’s attitude to YAML parsing for a while now but the shift from Syck to Psych can still cause issues. If you still have legacy Syck-produced YAML files around that are causing problems, this code might help.

Daybreak: A Simple Key/Value Store for Ruby
Very lightweight and very Ruby (in the best possible way).

chruby: Changes The Current Ruby
An ‘ultra-minimal’ (around 80 lines) alternative to RVM and rbenv. chruby allows one to install rubies into /usr/local/$ruby, /opt/$ruby or ~/.rubies/$ruby but install gems into ~/.gem/$ruby/$version. chruby only modifies $PATH, $GEM_HOME and $GEM_PATH, and does not hook cd or rely on shims.

Jobs

Last but not least..

Giles Bowkett: ‘I Wrote An eBook In A Week’
Being silly enough to not send me a copy for review or give me a title, all I can do is say Giles has written an interesting sounding book about how ‘DHH gets OOP wrong’ but why that’s OK. It costs money but hopefully we’ll see some reviews soon. He does have a no-quibble refund policy, however, and his writing is always an eye opener.

This Week in Ruby: Ruby 2.0 Refinements, Cost of GC::Profiler, and BritRuby Cancelled

Welcome to this week’s roundup of Ruby news, articles, videos, and more, cobbled together from my e-mail newsletter, Ruby Weekly. If you’ve been celebrating Thanksgiving this week, I hope you’re having a good break.

Highlights include: Charles Nutter on Ruby 2.0 refinements, the cancellation of the British Ruby Conference, and DHH’s latest object instantiation (thanks Doug Renn).

Featured

Refining Ruby (or The Best Study of Ruby 2.0 Refinements Yet)
I’ve editorialized the title somewhat but this article by Charles Nutter is a great look into the world of ‘refinements’ in Ruby 2.0, what they’re intended for, and all of the challenges they throw up, both for developers and language implementers.

The British Ruby Conference.. Cancelled
It’s a pretty long story but the British Ruby Conference, which I was getting rather excited about.. is no more. There’s a statement as to why but if you want to join

Continue reading “This Week in Ruby: Ruby 2.0 Refinements, Cost of GC::Profiler, and BritRuby Cancelled”

This Week in Ruby: MRI 1.9.3-p327, Rails 3.2.9, Capybara 2.0, and the Fukuoka Ruby Award

Welcome to this week’s roundup of Ruby news, articles, videos, and more, cobbled together from my e-mail newsletter, Ruby Weekly.

Highlights include: MRI 1.9.3-p327, Rails 3.2.9, Capybara 2.0, and the Fukuoka Ruby Award.

Featured

Ruby 1.9.3-p327 Released: Fixes a Hash-Flooding DoS Vulnerability
Carefully crafted strings can be used in a denial of service attack on apps that parse strings to create Hash objects by using the strings as keys. This new patch level release of 1.9.3 counters the issue.

2013 Fukuoka Ruby Award Competition
Each year Matz and the Government of Fukuoka in Japan run an award for Ruby programs. Submit by November 30th to enter – it doesn’t have to be an all new app either. The grand prize is 1 million yen (about $12,000).

Capybara 2.0.0 Released: The Acceptance Test Framework for Webapps
Not backwards compatible with Capybara 1.x so be careful and read the notes. It also drops support for Ruby 1.8.

Reading

Printing ‘Hello, World’ in Style (Concurrently)
Daniel Szmulewicz looks at what’s involved in using Celluloid and two actors to print out ‘Hello, World’.

Matz Is Not A Threading Guy
Jesse Storimer talks about the status of concurrency in Ruby and Matz’s opinions in a Q+A session at RubyConf. Reinforcing the status quo, Matz said: ‘Using multiple processes is the best way to do concurrency in MRI for the near future.’

rspec-rails and Capybara 2.0: What You Need to Know
Andy Lindeman of the RSpec core team talks about the new Capybara 2.0 release and what you need to be aware of when using it with RSpec and Rails.

Why Ruby Class Methods Resist Refactoring
Bryan Helmkamp demonstrates why he thinks class methods are much trickier to refactor than instance methods.

Reference Graphs as Tools for Refactoring
A quick look at using graphs of references in order to refactor Ruby code.

Watching and Listening

How I Set out to Benchmark an Algorithm and Ended Up Fixing Ruby
Joshua Ballanco wanted to build a delegation library but got lured into the worlds of benchmarks and garbage collectors.

Ten Things You Didn’t Know You Could Do in Ruby
A month ago, we linked to the slidedeck of James Edward Gray II’s Aloha on Rails talk with 101 various Ruby tricks and code snippets. Now the video is available too! Enjoy.

The Ruby Rogues on Documenting Code
The Ruby Rogues tackle a sore subject: documentation.

Libraries and Code

ruby-lint: Static Code Analysis and Linter for Ruby
Currently a prototype and work in progress so your mileage may vary. It makes it possible for developers to detect errors such as undefined or unused variables and the use of non existing methods.

Spinel: A New, ‘Ruby-Infused’ Open Source Game Engine
Spinel is a new open source game engine still under development that uses ‘mruby’ (the embeddable Ruby interpreter Matz is currently working on) as its scripting layer while leaning on speedy C/C++ under the hood.

Version Cake: An Unobtrusive Way to Version APIs in Your Rails App
Easily version views with their API version in the filename (e.g. index.v3.xml.builder). The cool part is if a request comes in for a different version, the closest version will be used.

Jobs

Test Driven JavaScript and Ruby Developer [San Francisco and Santa Monica, CA]
Carbon Five builds web and mobile products for startups, institutional companies and non-profit organizations using a finely tuned agile process with cutting edge tools and technology. Join a team of seasoned pros in a highly-collaborative environment and work on a new project every couple of months.

Last but not least..

Write Faster Rails Tests: Insights via E-mail
Get an infrequent e-mail from Thoughbot’s Ben Orenstein packed with battle tested advice for speeding up your Rails apps’ tests.

This Week in Ruby: Rubinius 2.0-rc1, Rake 10, Refactoring video, Passenger 4.0 supports JRuby, and more

Welcome to this week’s roundup of Ruby news, articles, videos, and more, cobbled together from my e-mail newsletter, Ruby Weekly.

Highlights include: Passenger 4.0 gets support for JRuby and Rubinius, Ben Orenstein’s awesome refactoring video, Pat Shaughnessy’s new ‘Ruby Under a Microscope’ book, AWS adds Ruby support to Elastic Beanstalk, and more.

Featured

Rubinius 2.0.0 Release Candidate 1
Sadly the Rubinius blog seems to be on hiatus but plenty of people noticed Rubinius 2.0.0rc1 has been tagged. Rubinius is an alternative Ruby implementation largely written in a subset of Ruby itself and the 2.0 release brings 1.9 syntax to the fore.

Pat Shaughnessy’s ‘Ruby Under a Microscope’ Now Available
It’s a great time for indie books in the Ruby world lately and this is no exception. Pat’s book is a truly deep dive into Ruby’s internals with lots of diagrams and lucid explanations to help you along the way.

Phusion Passenger 4.0 Now Supports JRuby and Rubinius
Phusion’s popular Ruby app deployment module for Nginx and Apache takes another leap forward by extending support from just MRI to JRuby and Rubinius. This could be big.

Refactoring from Good to Great
Thoughtbot’s Ben Orenstein takes a brave approach of ditching slides and going with live coding to boldly refactor where no presenter has refactored before.

Amazon Adds Ruby Support to AWS Elastic Beanstalk
Amazon’s Elastic Beanstalk service provides a way to quickly deploy and manage apps within AWS’s cloud of services (EC2, S3, etc.) It now supports Ruby apps by using Phusion’s Passenger (I hope Amazon are paying Phusion handsomely for this :-))

Reading

Yet Another Ruby Shootout: MRI 1.9.3 vs MRI 2.0 vs Rubinius 2.0
Igor Alexandrov picks up where Antonio Cangiano left off by benchmarking MRI 1.9.3-p286, MRI 2.0.0-preview1 and Rubinius 2.0.0-rc1. As always with benchmarks, don’t read too deeply but it seems Ruby 2.0.0 holds its own so far.

‘require is slow in its bookkeeping; can make Rails startup 2.2x faster’
An issue on the official MRI issue tracker that shares a patch which can improve the performance of ‘require’. Follows on to the work seen optimizing code loading in Ruby 1.9.3 in June 2011.

Ruby 2.0 Preview Available on Heroku
It’s still only a preview so don’t pull out your production apps yet, but Heroku’s polyglot stack supports Ruby 2.0 preview 1 without much work at all.

Reinventing Wheels of Future: Matz’s RubyConf Keynote Slides
No technical content as such but Matz celebrates the reinventing of wheels and confesses his love for PHP. Worth a quick swipe through for the sentiments.

Game Development and Ruby
Another slide-deck from RubyConf, this time sharing some options and opinions on game development in Ruby.

RubyConf Roundup: Day One
If you missed RubyConf, here are some handy notes for the talks that Mike Leone attended.

Dead Simple Login System for Rails Apps with OmniAuth and Facebook
In just six special steps with Gal Steinitz.

Let’s Not: Refactoring RSpec Specs with Plain Ruby Methods
A look at using plain Ruby methods rather than DSL constructs with RSpec.

Thinking in Objects
Josh Susser drops some object orientation principles on us in his RubyConf 2012 slides.

Building a Peer-to-Peer Chat System using Multicasting in Ruby
IP multicasting allows you to send a datagram to multiple recipients on a network. In this post John Pignata looks at multicasting and creates a simple chat system using Ruby’s socket library.

Ruby’s EventMachine Part 3: Thin
Phil Whelan continues his blog series looking at EventMachine, this time with a quick explanation of how the Thin Web server library uses it.

Making Queries More Composable with ActiveRecord and Arel
Mike Swieton says it isn’t always clear how to get ActiveRecord and Arel to tackle certain difficult database queries so he shares some pointers he figured out here.

A High Level Overview of Acceptance Testing
A straightforward slidedeck from Andy Lindeman of the RSpec core team.

Upgrading to Rails 4 – A Parameters Security Tour
A look at what’s going to change for parameters in controllers from Rails 3 to Rails 4.

Profiling JRuby with NetBeans
The NetBeans IDE includes a profiler for Java which you can twist to profiling JRuby apps instead. Patrick Polycrystal shows us how.

Collecting Metrics from Ruby Processes with Zabbix Trappers
‘Zabbix Trappers’ will be my new name if I ever get abducted by aliens and taken to their home planet. (Back in the real world, Zabbix is an ‘enterprise-class open source distributed monitoring solution.’)

Watching and Listening

RailsCasts Digs Into Rails 4.0’s Turbolinks
A 7 minute tour of ‘turbolinks’ (as will feature prominently in Rails 4.0) with Ryan Bates.

Wrangling Large Rails Codebases
Stephan Hagemann looks at ways to wrestle with large Rails apps to get faster test suites, cleaner structures, and generally more flexible apps.

Modular & Reusable Front-End Code With HTML5, Sass and CoffeeScript
Keeping your Rails app’s front-end code clean can be tricky. Find out how to keep things tidy and reusable using the HTML5 document outline and modular Sass and CoffeeScript.

To Mock or Not to Mock
Mock objects for testing purposes have their supporters and detractors. At Rocky Mountain Ruby 2012, Justin Searls gave a ‘broad-stroke survey’ of the different ways developers use mocks/test doubles and guidelines to bring everyone to a happy medium.

Yay! Mocks!
45 minutes with Corey Haines.

Git and GitHub Secrets
Zach Holman, GitHub’s chief of spreading the love, gives us a peek behind the Git and GitHub curtains and shares some tricks and tips applicable to both.

Life Beyond HTTP
There’s a whole world of interesting network protocols beyond HTTP says Anthony Eden. In this 30 minute talk, he provides examples of interacting with them using Ruby.

Let’s Talk Concurrency
José Valim of the Rails core team shares a digest of what he’s recently learned about concurrent programming and techniques.

The Farmhouse Podcast: Rubyist Talk from Los Angeles
Hard to describe but I’ve been enjoying this podcast from The Farmhouse. The latest episode features Shane Becker and Evan Phoenix discussing the Puma Ruby Web server. Steve Klabnik features on two earlier episodes.

Libraries and Code

Rake 10.0 Released: Yes, Version 10
Ruby’s make-like build utility takes a small step for Jim Weirich but a giant leap for version-kind by going from 0.9 to 10.0. Why? Jim explains.

A Rails Membership Subscription or SaaS Site with Stripe
A Rails 3.2 application with recurring billing using Stripe. Open source and ready to roll.

Rails 3.2.9 Release Candidate 1 Released
Don’t get overexcited. Bug fixes and tweaks.

IProcess 3.1.0: Ruby Tools for Subprocesses and IPC
Provides a number of abstractions on top of spawning subprocesses and interprocess communication. It has an easy-to-use API that supports synchronous and asynchronous method calls and custom serialization.

Espresso: A New Scalable Web Framework Aimed at Speed and Simplicity
I don’t think we’ve had a new Ruby framework for a while so.. enter Espresso 🙂 Has a few interesting ideas but without being too alien to existing Rails, Ramaze, or Sinatra fans.

Ruboto 0.9: The JRuby on Android Platform
Now supports Ruby classes directly subclassing Java classes.

A Simplified Version of Ruby’s Object System, Implemented in Ruby
A clever experiment by James Coglan. It’s intended to model inheritance and method lookup in as little code as possible, for ease of understanding by Rubyists.

Jobs

Sr. Rails Engineer at VMware Socialcast (San Francisco)
Socialcast is looking for a passionate, experienced Ruby and Rails Engineer to join our growing Engineering team! Continue your career in a start-up atmosphere focusing on fast experimentation with the latest technologies and frameworks (Rails 3 and Ruby 1.9).

Ruby on Rails Developer at Litmus (Remote, anywhere!)
Litmus, the e-mail testing and analytics company, offering a great salary, full health care benefits and 28 days paid vacation. We’re looking for great developers wherever you live in the world. Come and see what our team have to say about working here.

Rails Software Engineer at Sleepy Giant (Newport Beach, LA, Chicago)
Sleepy Giant is a game company based in Newport Beach. We are looking for Rails developers to join our talented team. You will work on high-profile, high-scale game services and franchise development projects, including green-field systems engineering.

Last but not least..

The British Ruby Conference: Giving 15% of Sales for Movember
The British Ruby Conference is in Manchester, England in March 2013 with lots of lovely speakers (and I’ll be there!) and for this month only will be giving 15% of ticket sales to the Movember cause. Come join in the fun.

Official (Private) RubyMotion Training Available
The folks behind RubyMotion, the Ruby development toolkit for iOS devices, are now offering official RubyMotion training to groups of 15 or more.

This Week in Ruby: JRuby 1.7.0, Passenger 4.0b1, Ruby 2.0 Feature Freeze

Welcome to this week’s Web-based syndication of Ruby Weekly, the Ruby e-mail newsletter.

Highlights include: a massive release for JRuby, a promising beta for Phusion Passenger 4.0, the announcement of a ‘feature freeze’ for Ruby 2.0, the Rails Rumble 2012 results, and just what did the Rails Rumble winners use to power their apps?

Featured

Ruby 2.0.0 ‘Feature Freeze’ Announced
Right on schedule, the core Ruby team have announced a ‘feature freeze’ for the forthcoming Ruby 2.0. All this means for now is that no features not already approved by matz will make it into 2.0.0.

Working with TCP Sockets: Jesse Storimer’s New Ruby E-Book
Jesse Storimer (‘Working with Unix Processes’) has released his latest book, Working with TCP Sockets. If you want to learn more about socket programming from a Ruby POV, check it out.

The 2012 Rails Rumble Results
A superb Rumble with 500 teams taking part and findthin.gs, a TV series and movie search tool, took the lead with the judges, with ‘Deploy Button’ being the public’s favorite.

Reading

Yehuda Katz: My Problem With Turbolinks
Rails 4.0’s ‘Turbolinks’ feature has been.. a little controversial. Yehuda explains what they are, as well as why he’s not entirely happy with them. And as a Rubyist who’s also very deep into JavaScript, his opinion counts for a lot.

Rails Rumble Winners, A Gem and Technology Teardown
The folks at Dwellable looked at the Gemfiles of the ten Rails Rumble winners and put together some interesting stats of what gems and technologies they used. Winning technologies included jQuery, CoffeeScript, Bootstrap, Sass, RSpec, Sidekiq and Haml.

Eating The (Ruby) 1.9 Elephant
The New Relic engineering team on the trials, tribulations, and eventual success in switching their app over to Ruby 1.9.

Version Your Ruby Objects with Aversion
Include the Aversion module into your objects and whenever the state of that object changes, Aversion remembers the change and keeps track of the history. Clever idea though beware of memory use if you go over the top with it.

Try mruby Today
mruby is a smaller, embeddable Ruby implementation that Matz is currently working on. This post by Richard Schneeman digs into what it’s about and how to give it a go for yourself. Aimed at an introductory level.

Create a Custom Slider With RubyMotion
A complete walkthrough of customizing a UISlider to get your own custom look and feel for a control within an iOS app built on RubyMotion.

Hybrid Concurrency Patterns: Threads and Events in Harmony with Celluloid
Describing a slide deck with ‘Ruby developers need to stop using EventMachine. It’s the wrong direction’ is a sure-fire way to get attention 🙂

Growing a Rails Application: How We Made Deploy Fast Again
The developers at PagerDuty brought their deploy time down from 10 minutes to 50 seconds. How? You gotta read for that.

Watching and Listening

Aaron Patterson on ‘Rails 4 and the Future of Web’
Earlier this month at Aloha Ruby Conference 2012, Aaron ‘tenderlove’ Patterson gave a keynote on a myriad topic of topics including threading, Rack, locking, and cats and how they relate to Rails 4.

Cache Digests (RailsCasts)
Episode 387 of RailsCasts is here(!) and Ryan Bates looks at the cache_digests gem which automatically adds a digest to fragment cache keys based on the template (so if a template changes the cache auto-expires).

The Ruby Rogues Discuss Service-Oriented Design with Paul Dix
Service-oriented design is the idea of taking a complex application with many parts and splitting them out into more modular parts that communicate with each other. Paul Dix chats to the Rogues about the concept.

Libraries and Code

GitLab 3 Released: An Open Source GitHub-Clone-In-A-Box, Sorta
GitLab is an open source Rails app that provides an interface for git repository hosting and management. Version 3 includes an in-page file editor. It takes a lot of inspiration from GitHub, though that’s not a bad thing.

RubyInstaller 1.9.3-p286 Released
In the last issue, we mentioned the new MRI 1.9.3-p286, released to patch up a couple of security vulnerabilities. Now, the Windows-based RubyInstaller distribution is also up to date (there’s also a build of 1.8.7-p371 if you’re still on 1.8.)

Gamebox: A Game Template for Building and Distributing Gosu Games
Generate a game and get it up and running quickly. Could be very handy for contests like Ludum Dare! It’s not new but somehow I hadn’t seen this before.

FIFO: Queueing Library Using Amazon’s Simple Queue Service
FIFO is a Ruby queueing library built on top of Amazon SQS. Like DelayedJob it encapsulates the pattern of executing tasks in the background but doesn’t rely on a database.

LiterateRandomizer: A Random Sentence and Paragraph Generation Library
Rubber tree and watched him. Vulgarized the larger than the faithful presence! Go slowly protruded round the beginning of shoulders.

Jobs

Rails Software Engineer at Sleepy Giant (Newport Beach, LA, Chicago)
Sleepy Giant is a game company based in Newport Beach. We are looking for Rails developers to join our talented team. You will work on high-profile, high-scale game services and franchise development projects, including green-field systems engineering.

Last but not least..

gSchool: An Intensive 6 Month Web Development Training Program
An intensive 6 month program to learn Ruby, Rails, JavaScript, CSS and HTML5 from scratch so you can build your own webapps. Run by esteemed Rubyist, Jeff Casimir.

The Past 2 Weeks in Ruby: 1.9.3-p286, JRuby 1.7RC2, Sidekiq Pro and Much More

Welcome to this week’s Web-based syndication of Ruby Weekly, the Ruby e-mail newsletter (just passed 17,000 subscribers – c’mon, sign up! :-)). While I have you, be sure to follow @RubyInside on Twitter as I’m going to be posting news more frequently there than on the Web site from now on.


The latest highlights include:

Featured

Ruby 1.9.3-p286 Released
The latest, official production patch-level release of MRI 1.9 is out. The primary motivation was for fixing a couple of security vulnerabilities and a handful of bugs.

A Whirlwind Tour of Rails 4
Andy Lindeman presents a 40 minute tour of some of the forthcoming Rails 4’s new features, including strong_parameters, Russian Doll caching, PATCH verb support, removal of Rails 2 finder syntax, and more. Recording and audio quality is very good.

The British Ruby Conference: Standard Tickets Now on Sale
Rubyists like Avdi Grimm, Russ Olsen, Dr Nic Williams, Aaron Patterson (and many more!) will be in Manchester, England in March 2013. Join us by grabbing a ticket now.

101 Things You Didn’t Know Ruby Could Do
James Edward Gray II just gave a talk at the Aloha Ruby Conference covering a bundle of random tricks you can do with Ruby. Here’s the slidedeck.

Sidekiq Pro: A Commercial, Supported Version of Sidekiq
Sidekiq is a efficient background job processor (think Resque on steroids) that’s free and open source, but creator Mike Perham is now offering a commercial variant with extra features and support.

RubyConf Australia 2013 Call for Proposals Open till October 31st
The conference itself is in Melbourne between February 20-22, 2013. Fancy a trip to the homeland of Dr Nic?

Reading

7 Ways to Decompose Fat ActiveRecord Models
Some handy tips and examples on breaking apart ‘fat models’ into separate objects that each encapsulate a concept.

So You Want To Optimize Ruby
Charles Nutter of the JRuby core team explains some of the ‘hard problems’ Ruby implementations need to solve before getting all gung-ho with benchmarks.

Explain: A Ruby Source to Natural Language Compiler
An interesting experiment in automatically converting Ruby code to English prose.

Would You Like A Mobile App With That?
Want to build your first Rails API-backed iPhone app? Follow along with Richard Schneeman here.

Lazy User Registration for Rails Apps
Goes into the concept of having your auth system providing an omnipresent anonymous user which can then be ‘upgraded’ to a regular user when the visitor chooses.

An Interview with Xavier Noria, The Code Gardener
Xavier Noria (a Ruby Hero and Rails core contributor) faces Pat Shaughnessy for an interview about how he got started with Ruby and Rails, what’s coming in Rails 4.0, and more.

Booleans are Baaaaaaaaaad
John Nunemaker is back and flying the flag for state machines saying that ‘using true/false for state is bad.’ Several interesting comments on this one; go join the fray.

Ruby Microframeworks: Camping and Cuba
Dhaivat Pandya looks at two unconventional webapp ‘microframeworks’.

How to Win a Hackathon
The Rails Rumble is just around the corner, so Brian Burridge has put together a series of seven short posts looking at how to do well in a hackathon situation.

Moving Forward With The Rails Asset Pipeline
A look at what’s happening with the Rails asset pipeline in Rails 4.0 and beyond.

Automating Web Performance with mod_pagespeed
mod_pagespeed is a just in time (JIT) performance compiler for the web. This free and open-source Apache module automates all of the most popular web-performance best practices by dynamically rewriting and optimizing your website assets. Google’s Ilya Grigorik shows it off.

Capistrano + Rails + Bundler + RVM + Unicorn + EC2 == Deployed
Practical instructions for deploying a Rails app on Amazon EC2 using Capistrano, RVM, Bundler and Unicorn.

Watching and Listening

Exploring RubyGems (RailsCasts)
In a mere 7 minutes, Ryan Bates offers some tips on researching gems to decide which ones to choose, or when to build something from scratch.

Ruby’s Symbols Explained
Never quite got your head around how Ruby’s symbols work and what they represent? Here’s a video from my Ruby Reloaded course now available to watch on YouTube.

Go Ahead, Make a Mess!
Sandi Metz, OO guru and author of ‘Practical Object-Oriented Design in Ruby’, talks about using the principles of object oriented design to make ‘messes’ in code manageable. Sandi always gives great talks; check it out.

How to Find Valuable Gems
At RailsConf 2012, Nathan Bibler talked about ways to find the right gems for your project (along similar lines to Ryan’s video above). My answer, of course, is to read Ruby Weekly and check out RubyFlow 😉

The Ruby Rogues on (Physical) Developer Environments
A discussion about ergonomics, chairs, standing desks, working in coffee shops, colors, multiple monitors, background noise, and more with the five always charming and chatty Ruby Rogues.

Live Reloading with Rails 4
Aaron ‘tenderlove’ Patterson shows off something he’s working on that brings live reloading functionality to edge Rails.

PeepCode Releases ‘Meet Chef’ Screencast
Chef is a handy sysadmin and server configuration tool and former 37signals sysadmin Joshua Sierles goes through the basics of building Chef recipes including for deploying Rails apps.

RubyTapas Episode 7: Constructors
Avdi Grimm continues with his RubyTapas project with this free episode digging into how Ruby constructs new objects and how to customize constructors for your own ends.

Libraries and Code

Opal: Ruby to JavaScript Compiler
A source-to-source compiler (so no special VM required) and the compiled code aims to be fast and efficient by mapping directly to underlying JavaScript features and objects where possible. Not the first such experiment but well presented.

Selfstarter: Roll Your Own Crowdfunding
A project called Lockitron raised $1.9m recently in a crowdfunding campaign. They had to build their own Kickstarter-esque software as Kickstarter rejected them and.. it’s in Rails and they’ve shared the source.

Fun with Unicode Math in Ruby
Want to use Unicode’s square root, sine, fraction, infinity, pi, or other mathematical symbols in your Ruby code? The unicode_math gem gets you there.

node-mruby: Embedding Ruby into Node.js
mruby is an embeddable Ruby interpreter and node-mruby makes it possible to embed mruby into Node.js. Very much a prototype/work in progress for the curious.

digest-sha3-ruby: An SHA-3 Library for Ruby
Based on the reference C implementation and attempting to maintain the typical ‘Digest’ API style, Phusion has released a library that implements the SHA-3 (Keccak) cryptographic hashing algorithm.

Poltergeist 1.0: Hooking Up Capybara to PhantomJS
Allows you to run your Capybara tests on a popular and powerful headless WebKit browser: PhantomJS.

ClientSideValidations 3.2 Released: A Key Release
ClientSideValidations extracts the validations from your Rails models and applies them to your forms directly on the client. 3.2 brings quite a few changes and extras, such as support for Rails 4.0’s Turbolinks feature.

Jobs

Ruby Engineer
Zendesk is looking for a Ruby engineer to join a team in San Francisco that’s focused on improving the application from the inside out. We care about elegant code and we are passionate about shipping great software – just like you.

Last but not least..

rubytune: Rails Shop Specializing in Performance and Troubleshooting
Joshua Sierles (ex-37signals) and Sudara Williams (ex-Engine Yard) have launched a consultancy focused on providing scaling, performance and server advice for Rails developers.

Next Ruby Reloaded Course to be Announced Soon
From time to time I run an online Ruby course aimed at intermediate Rubyists looking for a refresher or Rails developers who want more of a deep dive into Ruby itself. The 5th run finished a few weeks ago and I’ll be opening registration for Ruby Reloaded 6 very soon. Sign up to the list at the far bottom of the page to get a discount code and notified first (since it fills quickly.) Thanks!

This Week in Ruby: What to Expect in Rails 4.0 talk, EventMachine tutorial, and StrongParameters hit Edge Rails

Welcome to this week’s Web-based syndication of Ruby Weekly.

Featured

Yehuda Katz Needs Your Input on the Tokaido (a.k.a. rails.app) UI
5 months ago, Yehuda Katz raised $51k to work on Tokaido, an app designed to make setting up a Rails environment on OS X easy. He now has some mockups of the app’s user interface and needs your input.

Tddium Looking for Beta Testers of its New JRuby CI Service
Tddium is a cloud-based continuous integration service for Ruby apps and they’re expanding into CI for JRuby. Got a JRuby app and want to get into the beta program? Check it out.

Reading

How Ruby Borrowed a Decades Old Idea From Lisp
Pat Shaughnessy shares another excerpt from his Ruby Under a Microscope book that digs deep into the world of blocks, lambdas, procs, and bindings and how they relate to closures.

raise ‘hell’: Better Programming Through Error Messages
Exceptions suck, but they don’t have to. Learn how to program better with error messages, and see how improved messages will lead to a better experience in Rails 4.0.

Ruby’s EventMachine: Event-based Programming (Part 1)
Not up to speed with EventMachine yet? No worries, Phil Whelan kicks off a series of blog posts introducing us to the popular event-processing library (which, incidentally, hit version 1.0 just this month.)

An Experiment in Static Compilation of Ruby: FastRuby
Charles Nutter (of JRuby fame) shows off an experiment in doing static compilation of Ruby to Java. Short and sweet and leans on JRuby’s parser and AST walker.

8 (New) Steps for Fixing Other People’s Code
Many moons ago, Dr Nic wrote a popular article about contributing to open source projects. Alex Grant builds on Dr Nic’s work with a more up to date set of guidelines.

Learning Chef
Some things Mathias Lafeldt has picked up while learning to use the Ruby-based infrastructure automation framework.

Watching and Listening

Simulating the World with Ruby
Brian Liles (remember TATFT?) digs into creating simulations in Ruby, covering concurrency issues, domain modelling, testing, and more.

Ruby’s Symbol#to_proc: A Walkthrough
A 15 minute extract from my Ruby Reloaded course that digs into what Symbol#to_proc is, where it came from, how it works, and how to make your own version from scratch.

What to Expect in Rails 4.0
Prem Sichanugrist shows off some of the new features and changes in the forthcoming new version of Rails.

Libraries and Code

minitest-reporters: Reporters for MiniTest
A new way to create customizable MiniTest output formats. I’ve tried it. It works. It’s awesome.

oEmbed Ruby Library
oEmbed is a format for allowing an embedded representation of a URL on third party sites. The ‘oembed’ gem helps you lean on oEmbed’s functionality in Ruby.

Ongoing ActiveRecord Optimizations: Freeze Columns Before Using Them As Hash Keys
An interesting (and ongoing) pull request on the Rails GitHub repository where freezing column names before using them as hash keys seems to result in memory and performance improvements.

Sinatra-Like Routes in Rails Controllers
Jose Valim demonstrates how simple it is to tinker with Rails controllers to support Sinatra-style routes.

Jobs

Back-end Software Engineer at Geckoboard (London, UK)
We’re looking for a Rails engineer to help architect, build, test and improve a young, fast moving and market defining web application with all the challenges that come with that. 2+ years’ experience with a dynamically-typed, object-oriented language.

Last but not least..

Dumper: Cloud Database Backup Service for Rails
A (paid) service that hooks into your Rails app and provides cloud-based backup. Has a free trial though.

This Week in Ruby: Rails Rumble Dates, Active Admin 0.5, Protected Methods in Ruby 2.0

Welcome to this week’s Web-based syndication of Ruby Weekly, the Ruby e-mail newsletter (Now at 16,300 subscribers! C’mon.. check it out ;-)).

Highlights include: an announcement over the dates for this year’s Rails Rumble, releases of Active Admin 0.5 and Bundler 1.2, as well as Aaron Patterson looking at a difference in Object#respond_to? in the forthcoming Ruby 2.0.

Featured

The Rails Rumble is Back! Dates and Details Announced
The popular 48 hour Ruby development contest is back and will run this October 13th and 14th. Registration opens on October 1st. Learn all about it here.

Active Admin 0.5.0 Released
Active Admin is a popular administrative interface generation system for Rails and a new version has been a long time coming. 0.5 introduces batch actions (i.e. select multiple rows and delete them all), a customizable root route, and more view components and factories.

Bundler 1.2 Released
The vital dependency management tool gets an update and now supports specifying Ruby versions in Gemfiles, local git repos, and using ‘bundle package’ to package git and local path dependencies.

‘Why The Lucky Stiff’ Documentary to Screen at RubyConf 2012
Fabio Akita talks about Why The Lucky Stiff, a creative and enigmatic Rubyist who disappeared from the Web back in 2009, and reveals that a documentary about his work is under production and due to be shown at RubyConf 2012.

ConFoo 2013 Call for Papers is Open
The Call For Papers is only open for 10 more days and the conference itself is in February 2013.

Reading

Protected Methods and Ruby 2.0
Aaron Patterson looks at how the behavior of Object#respond_to? will change with regards to protected methods in Ruby 2.0.

Backbone.js and Rails
Wondering exactly what you need to do to create a Backbone.js app that leans on
Rails? This blog post (first in a series of two) covers it with an example app and an in-depth look at rendering with Mustache.

How to Easily Create Single Page Apps with Sprockets
A short and sweet example of using Sinatra and Sprockets for the back-end of a single page webapp.

A Ruby exit, exit!, SystemExit and at_exit Blunder
Phil Whelan discovers that the ‘exit’ method doesn’t always do what its name seems to suggest..

Pragmatic Concurrency With Ruby
A delightfully in-depth look at some Ruby concurrency topics by Dotan J. Nahum.

Performing Linear Regression with Ruby
A walkthrough of the basics of linear regression (useful in statistical analysis) and using Ruby to perform simple linear regression.

Random Ruby Tricks: Class.new
Steve Klabnik shares some pointers to using Class.new to summon up new classes.

Ruby Tidbit: __LINE__ and Heredocs
An interesting quirk in how __LINE__ works in association with here documents. Makes sense but I’d never thought about this before.

Building a Geofencing System with Ruby and MongoDB
A short series of posts by John Murray that digs into using Ruby and MongoDB to build a ‘geofencing’ system.

PiecePipe Examples: Map, Aggregation and Group-By
Shawn Anderson shows off PiecePipe, a Ruby library for writing code where you focus on the flow of data through a pipeline of steps without worrying about the iteration and ‘glue code.’ An interesting approach.

Code Tuning, A Programming Pearl in Ruby
Daniel Lobato seems to share my love for the classic ‘Programming Pearls’ book and digs into optimizing a simple sequential search through an array.

What’s New in the Upcoming SimpleForm 2.1.0
SimpleForm is a popular Rails form plugin and this post shares some of what will be in the forthcoming 2.1.0 release.

Watching and Listening

A 2 Hour Introduction to Ruby On Rails
At a recent Boston Ruby Group Project Night, Dan Pickett gave a 2 hour long ‘introduction to Rails’ workshop, building a Rails app along the way.

JRuby Basics (RailsCasts)
Ryan Bates wanders off of the usual Rails-focused trail to give a 10 minute tour of JRuby, including how to set it up and use Java classes from within Ruby.

FnordMetric (RailsCasts)
FnordMetric is a Redis and Ruby based realtime event tracking app that’s great for keeping track of user activity in your Rails app. Ryan Bates demonstrates.

The Ruby Rogues Discuss ‘Growing Object Oriented Software Guided by Tests’
The inimitable Ruby Rogues spend an hour discussing the superb ‘Growing Object Oriented Software Guided by Tests’ by Steve Freeman and Nat Pryce. If you haven’t read this book yet, you should check it out.

Why The Lucky Stiff Documentary Trailer
A short 2 minute preview of a documentary about Why The Lucky Stiff that’s planned to be screened at this year’s RubyConf.

Libraries and Code

Labrador: A Web-based Client for Your Rails Development Databases
Aims to be database agnostic and includes Pow integration and automatic database integrations. Looks really nice.

Rubysh: Ruby Subprocesses Made Easy
Makes shelling out easy with a sh-like syntax layer for Ruby.

pg_power: ActiveRecord Extension for PostgreSQL
An ActiveRecord extension which lets you take advantage of several special PostgreSQL features with Rails, including PostgreSQL schemas, partial indexes, foreign keys, and comments.

Zeus: Boot Any Rails App in Under A Second
A new Rails app preloader, but one that takes a radically different approach to Spork and has very delicate Ruby and OS version requirements.

Ruby Decorators: Python-esque Method Decorators for Ruby
It’s not a new idea but I like Fred Wu’s simple implementation of Python-like method decorators using the unary + operator and method_added.

Jobs

Software Engineer – Experienced / Senior [New York City]
Are you an innovative software engineer with skills equivalent to 5–7 years of Java or Ruby experience? Do you want to be a key member of an incredibly driven team that knows how to have fun? We’re building our team from 14 to 21 this year. Join us!

Ruby Developer, Nature Publishing Group (London, United Kingdom)
Passionate about technology and science? Come join our team of Ruby developers at the Nature Publishing Group, responsible for the most influential scientific journals in the world for over 140 years.

Last but not least..

5500 Flashcards on Web Development With Rails
Jack Kinsella has released a free set of 5500 questions and answers on various aspects of Ruby, Rails, JS and CoffeeScript development. They’re designed to be used with Anki, a free open source flashcard viewer.

What is ARGF.class in Ruby 1.9?
A question on Stack Overflow shows off an interesting quirk in Ruby 1.9. Why does “ARGF.class” give such a curious response? Two respondents try to come up with an answer.

A Mega Ruby News and Release Roundup for July 2012 in 97 Links

Welcome to the bumper pick’n’mix of Ruby and Rails news and releases for July 2012, fresh from the pages of Ruby Weekly (now at 15,400 subscribers – give it a look).

Highlights include: Rails 3.2.7, Phusion Passenger Enterprise, RubyMine 4.5, O’Reilly’s “Learning Rails 3”, GitHub’s funding, and Rails 4.0’s live streaming support.

Headlines

Phusion Passenger Enterprise Released
The chaps at Phusion have unveiled their latest release: Passenger Enterprise. Passenger is a popular Apache and Nginx module for deploying Ruby webapps and the ‘Enterprise’ variant includes rolling restarts, a live IRB console, and more.

Rails 3.2.7 Released
Contains an important security fix for apps using digest authentication from Action Pack. But 3.2.8 is just around the corner..

Phusion Shares A Sneak Peek of the Phusion Passenger 4.0 Roadmap
After a period of radio silence, the Phusion guys are back on the air! With their Passenger system being the most popular way to serve up Ruby apps, all eyes are on the forthcoming Passenger 4.0 and here they explain some of what’s coming up.

Edge Ruby/Ruby 2.0 Adds %i and %I To Notate An Array of Symbols
As %w and %W notates a string into an array of words, %i and %I does the same but into an array of symbols. Coming to an MRI near you.. eventually. Why not %s and %S? They’re already taken. In this case, the ‘i’ stands for intern/interned.

Now In Print: ‘Deploying Rails’ by Tom Copeland and Tony Burns
Make sure your next production deployment goes smoothly with this hands-on book, which guides you through the entire production process. Dives into Puppet, Capistrano, Vagrant, Nagios, Ganglia, and all that sort of devops-y stuff.

RubyMine 4.5 Released: JetBrains’ Commercial Ruby IDE
RubyMine 4.5 introduces suport for formatting and code insight for Slim and Sass, MacRuby syntax highlighting, Capistrano deployment support, extra Sinatra integration, and more. It’s a commercial IDE but the one I’ve heard the most good things about.

GitHub Takes $100m of Funding
The Ruby world celebrates its latest home grown business success, GitHub, who this week announced they’ve received $100m in funding from Andreessen Horowitz. Will every Rubyist eventually work there? Watch this space.

Code Climate (Metrics Service) Is Now Free for Open Source Projects
Code Climate is a hosted software metrics tool for Ruby apps and it’s now available to use for free on public open source projects.

RSpec 2.11 Released
The popular BDD framework takes another step up the version ladder with 2.11. It supports the new ‘named subject’ syntax, you can stub constants for the duration of an example, and on Rails specs now run in a random order by default. And more, naturally.

Reading

O’Reilly’s ‘Learning Rails 3’ Now in Print
Learning Rails 3 by Simon St. Laurent, Edd Dumbill, and Eric J Gruber takes an interesting ‘outside in’ approach to teaching Rails, well suited for front end developers looking to make the leap. There’s a free sampler PDF you can check out.

Is It Live? Rails 4.0 To Get ‘Live Streaming’ Support
Rails 4.0 will be getting real-time data streaming support as it’s just been baked into rails-edge. Aaron Patterson shows it off in this post (yep, you can play with it now!)

Florian Hanke Benchmarks Unicorn, Thin and Ricer
In trying to make his Picky semantic search engine tool faster, Florian Hanke has tried to find the fastest Ruby Web daemon for his uses.

Getting Your Heart Rate Using R and Ruby
A fun post looking at marrying up R and Ruby to tell your heart rate from a small bit of video.

Ruby Constructs: Classes, Modules and Mixins
LivingSocial’s Matt Aimonetti clears up some concepts and misconceptions around classes, modules and mixins and how you should or shouldn’t use them.

Your First Ruby Native Extension: C
A quick how-to from someone who admittedly ‘knows barely any C or Java’ that explains how to wire up some simple C code into a native Ruby extension ready for building a gem.

Objects, Classes and Modules
The latest excerpt from Pat Shaughnessy’s forthcoming ‘Ruby Under A Microscope’ book. This time he looks at how MRI Ruby implements and stores objects and classes internally.

The Hitchhiker’s Guide to Riding a Mountain Lion
Apple’s latest operating system dropped yesterday and Prem Sichanugrist of Thoughtbot shares some insights into the upgrade process for Rubyists.

Building An API for Fun With Grape
Grape is an API-oriented Rack-based microframework for building HTTP accessible APIs. It’s been around a while but this post gives a quick introduction.

Tell, Don’t Ask (with Ruby Objects)
Bad for your relationships but good object oriented programming advice. Ben Orenstein shows off some quick before and after examples of telling your objects what to do rather than querying them to make decisions.

Rails, Objects, Tests, and Other Useful Things
Noel Rappin reflects on the various ‘Object-Oriented Rails’ and ‘fast tests’ discussions going around the Ruby world as of late.

Why I Don’t Like factory_girl
This post won’t be without controversy but Steve Klabnik outlines why he thinks the convenience of factories has ‘set Rails testing strategies and software design back two years.’ Worth a read even if you disagree.

Advanced Caching in Rails: Revised (for 2012)
Adam Hawkins has recently updated his series of Rails caching posts. It aims to teach you everything you need to know to work with any different caching level inside your Rails app.

Zendesk’s Road to Ruby 1.9
Zendesk is a popular help desk app and their dev team explains how their Ruby 1.9 upgrade project went. The end result? A 2-3x improvement in response time for their app.

Processing Images with CarrierWave
An entry level tutorial to managing uploaded files in a Rails app using CarrierWave.

Four Guidelines That I Feel Have Improved My Code
GitHub’s John Nunemaker riffs on some interesting ideas he’s brought into his Ruby development practices including the single responsibility principle, sensible interface design and high/low testing.

Streaming Zlib Processing for Ruby (in Ruby Core/2.0)
Eric Hodel has checked in a patch that adds streaming zlib processing to Ruby core. Why’s this a big deal? For starters, significant memory savings when compressing large files.

Arel’s ‘merge’ Method: A Hidden Gem
Arel is the beautiful relational algebra library that works alongside ActiveRecord in Rails 3 to let you do complex queries easily. Ben Hoskings shows off an interesting method Arel makes available to merge query conditions together.

Case Study: Using Ruby Tools for Non-Ruby Projects
A look at using Ruby tools (like Bundler and Guard) to automate common Web development workflows.

Don’t Make Your Code ‘More Testable’
Gregory Moeck reflects on the mocking and OO design trends in the Ruby world and proposes a way forward to think about the ‘testability’ of our code (or not, as the case may be).

RubyMotion Tutorials: A Resource Site
A simple resources site aiming to collect together links relevant to learning or working with RubyMotion.

How Can I Contribute to Ruby On Rails?
Steve Klabnik, now a memeber of the Rails Issue Team, shares some quite insights and FAQs into the process of contributing ideas, source, or documentation to Rails.

Functional View and Controller Testing with RubyMotion
RubyMotion (the Ruby toolkit for building iOS apps) now features a new testing layer that lets you write functional specifications for the views and controllers of your apps.

My Favorite Bundler Feature
Jerod Santo loves being able to crack open his gems.

The History of Ruby in Version Numbers
A simple GitHub gist showing what versions of MRI Ruby were released when.

Watching and Listening

Active Record Deep Dive (in 11 Short Videos)
Richard Schneeman explains ActiveRecord’s query interface in several short screencasts. You’re bound to pick something up.

Using MiniProfiler with Rails (RailsCasts)
MiniProfiler allows you to see the speed of a request conveniently on the page. Ryan Bates shows off its usage with Rails.

Making a Rails App Fast and Scalable
Slide deck for a talk given by Richard Schneeman on making a Rails App fast and scalable.

PeepCode’s Rails 3 Play by Play with Yehuda Katz
PeepCode has released the latest in their ‘look over a developer’s shoulder’ screencast series, this time focusing on Yehuda Katz (of Rails 3 fame). In an 80 minute session, he builds the backend for a scoring system using Rails 3.

Five Things You Didn’t Know Your Documentation Tool Could Do
Loren Segal, the creator of Ruby documentation tool YARD, looks at some of YARD’s lesser known features and shows off ways to visualize your code, get basic code metrics, and ensure overall quality in your documentation.

The Well Grounded Nuby
At Boston Ruby Group recently, David A Black (of Well Grounded Rubyist fame) gave a talk about getting the fundamentals of Ruby right.

Sidekiq (RailsCasts)
Sidekiq allows you to move jobs into the background for asynchronous processing. It uses threads instead of forks so it’s more memory efficient than, say, Resque.

Your Face in 10 Minutes… with MacRuby!
At GoRuCo 2012, Haris Amin gave a 10 minute lightning talk about creating a desktop Mac face detection/recognition app with MacRuby. Links to code, slides, and the Vimeo video within.

An ActiveRecord-Based Reputation System (RailsCasts)
If you need to calculate an average user’s rating or sum up a number of votes, consider using the ‘activerecord-reputation-system’ gem. Here Ryan Bates covers the basics and presents a from-scratch solution.

Libraries and Code

Synack: Send Messages to OS X Mountain Lion’s Notification Center
A client/server wrapper for terminal-notifier that allows arbitrary messages to be sent to OS X 10.8’s Notification Center.

Ricer: Fast Rack-Compliant Ruby Web Server Written in C
Unfortunately named but claims to be faster than Thin and Unicorn.

TwitterCLDR: Improving Internationalization Support in Ruby
Twitter’s engineering team has released a library that uses Unicode’s Common Locale Data Repository (CLDR) to format certain types of text into their localized equivalents. Currently supported types of text include dates, times, currencies, decimals, percentages, and symbols.

Clean Tests: Sugar for Making Test::Unit Tests Clearer
Dave Copeland’s Clean Tests aims to bring clarity to Test::Unit tests and provides a Given/When/Then structure for clarifying intent.

Brakeman 1.7.0 Released: The Rails Security Scanner
Adds support for a recent HTTP digest auth vulnerability and includes numerous improvements.

RLTK: Ruby Language Toolkit
A collection of classes and methods designed to help programmers work with languages in an easy to use and straightforward manner. Includes generators for lexers and parsers, LLVM bindings, and more.

Graphene: Stats and Graphs From Collections Of Ruby Objects
A new Ruby gem for transforming collections of Ruby objects into subtotals, percentages, tables and graphs.

Stamp: Format Dates and Times Using Human-Readable Examples
Sick of arcane strftime formatting? Give Stamp an ‘example’ of a date format you want and it’ll dish up a similar date or time for you. Not new but somehow I missed it till now!

csv_shaper: DSL for Creating CSV Output
CSV Shaper claims to make the painful world of CSV rendering and formatting easier. Supports both pure Ruby and Rails.

Sex Machine: Get Gender from First Name
This unfortunately named gem leans on a open source name-to-gender tool to give similar functionality to Rubyists.

classy_enum: Class Based Enumerator Gem for Rails
Adds class-based enumerator functionality to ActiveRecord attributes.

Rubyception: A Realtime Rails Log in Your Browser
Add Rubyception to your Rails project, navigate to /rubyception and get WebSocket-powered live log updates.

Axlsx: Office Open XML Spreadsheet Generation Library
Complete xlsx generation with support for charts, images, automated column width, customizable styles and full schema validation.

Announcing minitest-rails: Extra MiniTest Support for Rails
minitest-rails is a library that enables you to test your Rails 3 apps using minitest, the testing framework that comes in the Ruby 1.9 standard library. Documentation and a short introductory screencast included.

webmachine-ruby 1.0 Released
webmachine-ruby is a Ruby port of Erlang’s Webmachine which lets Rubyists expose interesting parts of the HTTP protocol to their applications in a declarative way. Don’t understand? Check the examples.

Jim Weirich’s Approach to ‘Programming with Nothing’
1800 lines of a cold and lonely place. Intense.

Jobs

Senior Software Engineer (Ruby) at FreeAgent [Edinburgh, Scotland]
FreeAgent are looking for a talented and passionate software engineer to join their engineering team in a senior capacity to work on their popular online accounting software.

Software Engineer at Webdoc SA [Switzerland]
You’ll join the team that develops Webdoc (a rich media sharing site) and work across the stack – Rails, MongoDB, mySQL and JavaScript.

Happy (Ruby) Web Developer (London, UK)
We sell expensive stuff to investment bankers. We run on Ruby. We enjoy using the best tools and technologies available. If you want to be a happy programmer (and join us on our summer trip to Ibiza), get started by solving our quiz.

Senior Ruby on Rails Developer (Cologne, Germany)
“Ich will nicht nach Berlin!”- simfy cologne is looking for talented Ruby on Rails backend developers. You feel at home with large Rails enterprise applications? Join simfy – one of the world’s leading music streaming services – and put our visions to life.

Senior Ruby Developer (Cambridge, MA)
Litmus, the e-mail testing and analytics company, offers a great salary, full health care benefits, 28 days paid vacation, beer fridge and Sonos sound system. They’ll also buy you lunch every day.

Last but not least..

AdhearsionConf Returns for 2012: CFP Now Open
Billing itself as the ‘conference at the Intersection Of Ruby and Voice’, the AdhearsionConf organizers have announced the conference will be back on October 20-21 in Palo Alto. No registration yet but the call for presentations is now open.

MiniProfiler: A New Profiler for Ruby
MiniProfiler is a production and development profiler that you can use to quickly isolate performance bottlenecks, both on the server and client. This post demonstrates how it works.

Writing FizzBuzz Without Modulus Division
Upon a request by JEG2, some Rubyists had a go at solving the old FizzBuzz problem without doing modulus division. This entry by Magnus Holm is a real mindbender and leans heavily on flip flops.

This Week’s Ruby News: Ruby 1.8.7-p370, Rubyist Text Editor Poll Results, MagicRuby and More

Welcome to this week’s Web-based syndication of Ruby Weekly, the Ruby e-mail newsletter (which just turned 100 weeks old this week – issue 100! :-))

Highlights include: Ruby 1.8.7’s last ever bug fix release, the Ruby OpenSource Challenge, a new open source code review system, and the results of a Rubyist text editor poll.

Headlines

Ruby 1.8.7-p370 Released: The Last Bug Fix Release for 1.8.7
Still using 1.8.7? Right on schedule, this is your last bug fix release, with only security fixes available for the next year before 1.8.7 is abandoned entirely.

The Ruby OpenSource Challenge
Backed by a large variety of prize givers and sponsors, the Ruby OpenSource Challenge encourages you to help improve the Active Admin project.

RubyShift 2012: Ukrainian Ruby Conference, September 29-30
Call for proposals and registration are now both open.

The Ruby Greener Test Challenge (A Windows Challenge)
Luis Lavena is well known for his efforts to make Ruby better on the Windows platform, and he’s put out a call to action to clean up the 9 failures and 2 errors in MRI’s test suite.

MagicRuby – A Ruby conference *inside* Walt Disney World!
Join us October 5 and 6, 20120 for MagicRuby 2012. This year we’re dropping some knowledge inside of Disney’s Hollywood Studios Theme Park! Our CFP and registration (only $199 – $49 for Disney passholders) are OPEN, so head over to our site for more info.

Reading

Constant Stubbing in RSpec 2.11
It’s not out yet but Myron Marston gives us a look at a new feature coming to the forthcoming RSpec 2.11: the ability to stub constants.

Vim for Ruby on Rails (and A Sexy Theme!)
Last week’s link to using Sublime Text 2 was popular but this week’s turn is Vim! Aston J aims to show off why Vim is a good choice for Rails development along with a bevy of commands.

Watching

Libraries and Code

Barkeep: An Open Source Code Review System
Billing itself as a “friendly code review system”, Barkeep is a self hosted tool to do code reviews on your projects. It can watch commits made to any Git repository, see diffs, write comments, and have comments e-mailed to your collaborators.

Flowdock Open Sources ‘Oulu’: An EventMachine-Driven IRC Gateway
Flowdock, a collaboration app with chat support, has open sourced their EventMachine-based IRC gateway. Could come in particularly handy if you want to integrate IRC with your own apps.

OmniContacts: Rack Middleware for Importing E-mail Contacts
A library that enables users of an application to import contacts from their email accounts (currently supports Gmail, Yahoo and Hotmail.) As a Rack middleware, you can use with any Rack-based framework, including Rails.

Seedbank: Organize Your Rails App’s ‘Seed Data’
Seedbank allows you to structure your Rails seed data instead of having it all dumped into one large file.

Rack-Policy: Middleware for Complying With the EU ePrivacy Directive
If you’re not based in the EU, you can ignore this idiotic piece of legislation but otherwise Rack-Policy helps your Ruby webapps comply with getting implied consent before any cookies can be stored on your visitors’ machines.

Image Sorcery: A Ruby ImageMagick Library ‘That Doesn’t Suck’
Image Sorcery leverages all three of ImageMagick’s command line tools, mogrify, convert, and identify, to give you image processing functionality, minus the memory leaks. (Looks a lot like MiniMagick on the surface.)

Periscope: Expose Your Scopes to the World
Periscope makes it easy to chain your scopes from the query parameters on your index actions. Includes support for ActiveRecord, MongoMapper, Mongoid and DataMapper.

Twitter Gem Hits Version 3.0
The popular ‘twitter’ gem has reached version 3.0 (now at 3.0.2). Only a changelog to go on but lots of changes you’ll need to be aware of if you use the library.

Ruby OpenSSL Cheat Sheet
August Lilleaas shares a collection of examples for using Ruby’s OpenSSL bindings (as found in the Ruby standard library).

Jobs

Rails Developer at OneLogin [San Francisco]
Join a team of Ruby engineers building the industry’s easiest-to-use Identity and Access Management solution for enterprises. 2-3 years of experience with Rails necessary and community involvement a big plus.

Last but not least..

What Is Your Primary Text Editor for Ruby Development?
Now at over 4,000 votes, this poll is an interesting look at what text editors Rubyists are using. It looks like the era of TextMate has truly passed.

This Week in Ruby: Rails 4 Sneak Peeks, A Gist Drama, and a CoffeeScript Book (by a Rubyist!)

Welcome to this week’s Web-based syndication of Ruby Weekly, the Ruby e-mail newsletter.

Highlights include: MagicRuby 2012, a code structure/patterns ‘drama’, Mark Bates’ new CoffeeScript book, minitest 3.2.0, and the Ruby Rogues chatting with Jim Weirich (who I met for the first time this week, ironically at a JavaScript conference!)

Headlines

‘Programming in CoffeeScript’ by Mark Bates, Now Available
Mark Bates, a Ruby developer, was won over by CoffeeScript and has written a book for Addison-Wesley which has now been published. Despite being a language that compiles down to JavaScript, CoffeeScript has become relevant to Rails developers in recent times given its inclusion in Rails 3.1+.

Reading

Am I Doing It Wrong?
A month ago, Rubyist Justin Ko asked fellow Rubyists if his code in a Rails project was poorly designed or not. The initial consensus was that he’d done a good job but then last week DHH weighed in and.. it got a bit ‘dramatic.’

My (new) Favourite RSpec Pattern
Jordan Maguire shares an interesting RSpec technique and there’s some interesting debate in the comments. It seems popular, though Geoffrey Grosenbach raises doubts about its readability.

Tutorial: Reddit in 10 Lines of Code
A curious walkthrough of taking an existing ‘Reddit in Sinatra’ and using some ‘seldom used features of Ruby’ to cram it down to 10 lines of dense Ruby code.

Generating Random URL-safe tokens with SecureRandom
Burke Libbey shows off a single liner that can generate a URL safe token using something from the Ruby standard library.

Rails 4.0 Sneak Peek: Queueing
A quick look at the new queueing API in edge Rails (to become Rails 4.0).

Watching and Listening

Facebook Authentication in Rails (RailsCasts)
Ryan Bates shows us how to create a new Facebook application, configure it, add authentication with the omniauth-facebook gem and top it off with client-side authentication using the JavaScript SDK.

Complex Made Simple: Sleep Better with TorqueBox
At RailsConf 2012, Lance Ball spoke about TorqueBox, a popular Ruby application server built on JRuby and JBoss AS7 that provides asynchronous messaging, scheduled jobs, long-running processes, caching, and more.

The Ruby Rogues Discuss SOLID with Jim Weirich
The Rogues sit down with Ruby old-hand and all round nice guy Jim Weirich to talk about the ‘SOLID’ principles of object oriented design.

The Changelog Interviews Laurent Sansonetti about Ruby Motion, MacRuby and More
The Changelog guys caught up with RubyMotion creator Laurent Sansonetti to talk about MacRuby, RubyMotion, MonoTouch, and more.

Libraries and Code

Rack Canonical Host: Middleware for Defining A Canonical Host Name
Rack middleware for defining a single hostname as the canonical host for your app. Requests for other hostnames will get redirected to the canonical host.

SoundCord: Perform Comparisons for Phonetically Similar Terms
A phonetic algorithm matches two different words with similar pronunciation to the same code, which allows phonetic similarity based word set comparison and indexing. SoundCord is initially aimed at Brazilian Portuguese but English and Spanish support is not far behind.

Jist: Publish GitHub ‘gists’ from Ruby
Jist is a gem that allows you to publish a gist from Ruby or the command line including file uploads and OAuth2 authentication.

ffi-http-parser: Ruby FFI Bindings to the ‘http-parser’ Library
http-parser is a high performance HTTP message parser written in C by Joyent. ffi-http-parser can hook your Ruby scripts up to it for parsing both HTTP requests and responses.

Jobs

Back End Developer, SoundCloud, Berlin, Germany
Soundcloud is looking for an über-talented back end web developer with knowledge of the latest web development tools and methodologies. As part of our A-team, you will be faced with the challenges of developing the world’s leading audio sharing platform.

Sr. Ruby on Rails Software Engineer
Do you live to work hard, play hard, live life big? Then consider working at G5. G5 has created a digital experience management platform designed to allow clients to optimize their online experience. Our mission is to help our customers and employees thrive.

Last but not least..

Sublime Text 2 for Ruby
A look at the Sublime Text 2 programmers’ text editor including why it’s a good fit for Rubyists and how to set it up in a productive manner.

The Last 2 Weeks in Ruby: Rails 3.2.6, Savon 1.0, RailsInstaller for OS X, Pow 0.4.0, Rails 2 Asset Pipeline

Welcome to this week’s Web-based syndication of Ruby Weekly, the Ruby e-mail newsletter. While I have you, be sure to follow @RubyInside on Twitter as I’m going to be posting news more frequently there than on the Web site in future.


The latest highlights include: Rails 3.2.6, RailsInstaller for OS X, Pow 0.4.0, Rails 2 Asset Pipeline, Sidekiq 2.0, and Savon 1.0.

Headlines

Rails 3.2.6 Released: Fixes More Vulnerabilities
Rails 3.2.4 was released a few weeks ago fixing two serious security vulnerabilities (explained in another post below). Rails 3.2.5 then followed a day later as 3.2.4 introduced a nasty scoping bug.. and.. now Rails 3.2.6 to continue to fix those bugs. They’re tricky blighters.

RailsInstaller for OS X: Ruby, Rails, Git, and More in One Download
Engine Yard’s RailsInstaller has long been a popular way to install Rails, Ruby, Git, Sqlite and other tools in one hit on Windows. Now it’s here for OS X too.

Announcing Pow 0.4.0 With xip.io Support
37signals’ Sam Stephenson has unveiled the latest version of the popular Mac OS X zero-configuration web server for Ruby webapp development. Port proxying is one of the new features.

Take My 30 Second Ruby Webcast Survey
I’m planning to run some Ruby oriented ‘webcasts’ (live, 30-60 minute presentations + live coding) and have a handful of ideas. I want to see which are the most popular and would appreciate your help (or even your own ideas).

Early Access to Avdi Grimm’s ‘Confident Ruby’ Available
Avdi Grimm, author of the popular Exceptional Ruby and Objects on Rails, is working on his new book, Confident Ruby. It’s still under development but you can get access now in return for some money or, intriguingly, a postcard.

JewelryBox 1.3 Released: The Official OS X RVM GUI
JewelryBox is a GUI app that brings OS X and RVM together in a loving embrace. 1.3 brings improved usability, gemset management, and Mountain Lion compatibility (it’s a signed app, so no GateKeeper complaints either).

From our sponsor

Michael Hartl’s Rails Tutorial 2nd Edition, Out Now
Michael Hartl has just announced the official release of the 2nd edition of his popular Rails Tutorial screencast series. It’s 15 hours of ‘over the shoulder’ training in Rails 3.2 using Twitter Bootstrap, Ruby 1.9, and full on test driven BDD.

Reading

RSpec’s New Expectation Syntax (Coming in 2.11)
Myron Marston shows off a new syntax for expectations in RSpec. It looks like “expect(foo).to eq(bar)” versus the more typical “foo.should eq(bar)”. What’s the motivation? Learn more here.

Removing config.threadsafe! from Rails
Core Rails developer Aaron ‘tenderlove’ Patterson looks at why the ‘config.threadsafe!’ directive can be removed from Rails and demonstrates the issues involved.

Rails Pull Request: Enable threadsafe! By Default
A 2 character pull request that triggered a big discussion about the role of ‘threadsafe!’ in future Rails apps, best summarized by the Aaron Patterson article linked above.

Setting Up an Ubuntu 12.04 Rails Development Environment
Includes Postgres, RVM, and some handy bash aliases.

Forgotten Rails Features: HTTP Streaming
One of a series of posts looking at interesting Rails features that are no longer in the spotlight. Here, Robert May looks at the HTTP streaming features introduced in Rails 3.1.

Using vim-slime with Pry for REPL Perfection
Alan MacDougall demonstrates how you can set up vim so that you can send Ruby code straight from the editor into an interactive Pry session.

A Write Up of the SQL Injection Vulnerability in Rails
Louis Nyffenegger gives a scrappy yet practical explanation of the latest vulnerability in Rails (which has been fixed by Rails 3.2.4/5).

PhoneGap vs RubyMotion
A somewhat chalk and cheese comparison framework wise but a reasonable discussion of the pros and cons of deploying a similar app using both technologies. An interesting sidenote is it compelled one of the creators of PhoneGap to write a post in response.

Future Versions of Pow Won’t Automatically Support RVM
It seems automatic support for .rvmrc files to set the Ruby environment is going away in Pow. There’s a simple workaround (using the .powrc file for each project) but it’s worth noting for the future.

Ruby Is Faster Than Python, PHP and Perl(?)
Uh-oh, controversy alert! Tony Arcieri attacks the myth that Ruby is the slowest language out there with a look at the Alioth Programming Languages Shootout. Sadly, the shootout is rather flawed but the real take away is that all four languages aren’t far apart.

Watching and Listening

RailsCasts on Brakeman: The Rails Vulnerability Scanner
Ryan Bates looks at the Brakeman gem, which will scan the Ruby code of a Rails application and alert you to common security vulnerabilities.

Ruby Rogues 59: Security with Rein Henrichs
The Rogues sit down with Rein Henrichs to talk about Ruby and Rails app security from password storage and network sniffing through to the GitHub hack and Rails vulnerabilities.

An Intro to Sinatra
At the Pittsburgh Ruby Brigade Language User Group, Carol Nichols gave a 45 minute introduction to Sinatra, the lightweight DSL for building webapps in Ruby.

Creating A Blog Application in Rails 3.2
An hour long screencast by John Ash walking through the development of a blogging webapp in Rails 3.2.

Evented Ruby vs Node.js
A 40 minute talk by Jerry Cheung from RailsConf 2012.

Dangers of Session Hijacking (RailsCasts)
Ryan Bates of RailsCasts takes a look at the dangers of ‘session hijacking’ and shows off a way to improve the situation on a Rails app.

Introducing the ‘Giant Robots Smashing into other Giant Robots’ Podcast
Courtesy of Ben Orenstein and Thoughtbot comes a new development oriented podcast based around Thoughtbot’s popular Ruby and Rails blog.

Matz’s Keynote at Euruko 2012
This year, the annual European Ruby Conference landed in Amsterdam and here’s Matz’s keynote to enjoy on Vimeo.

Geoffrey Grosenbach’s Euruko Keynote
Let the always mellifluous murmurs of PeepCode’s Geoffrey Grosenbach wash over you in this 40 minute keynote.

Using Ruby to Craft and Test Beautiful Command Line Applications
From RubyConf India comes a talk by Shishir Das and Nikhil Mungel about building elegant command line apps with Ruby (on Unix-like systems, naturally). Video good, audio not so good.

Libraries and Code

API Taster: Visually Test Your Rails Application’s API
A handy tool that works out endpoints from your routes file and then lets you perform requests direct from the Web browser. A clever idea.

Rails 2 Asset Pipeline: Familiar Asset Handling for Those On Rails 2
An interesting backport of some of Rails 3.1+’s most interesting functionality by Michael Grosser.

cod: IPC Made Simple
A small library striving to ‘change the way people do IPC in Ruby.’ It abstracts away the toll of using IO.pipe, Sockets and other primitives and allows message oriented communication via a simple interface.

Slacker: Test Framework for SQL Server 2005 and 2008 Programmable Objects
An RSpec-based transacted BDD framework/engine for the automated testing of SQL Server programmable objects (think stored procedures, table/scalar functions, etc.) Runs on both Windows and Linux.

Redis Store: Redis Stores for Ruby Frameworks
Redis Store provides a full set of stores (Cache, I18n, Session, HTTP Cache) for all the modern Ruby frameworks like: Ruby on Rails, Sinatra, Rack, Rack::Cache and I18n. It natively supports object marshalling, timeouts, single or multiple nodes and namespaces.

Talks: Let Your Ruby Programs Talk To You
A gem that hooks into the text to speech tools available on both Mac OS X and Linux.

Savon 1.0 Released: ‘Heavy Metal’ SOAP Client
Okay, SOAP might not be the big deal it once was, but many APIs and enterprise technologies still use it, and Savon, even pre-1.0, has been a popular choice for using SOAP from Ruby.

BubbleWrap: Cocoa Wrappers and Helpers for RubyMotion
BubbleWrap is a collection of (tested) helpers and wrappers used to wrap CocoaTouch code and provide more Ruby-like APIs.

Sinew: Collect Structured Data From Web Sites (by Scraping)
Sinew collects structured data from the Web (using scraping techniques) via a Ruby DSL built for crawling, a robust caching system, and integration with Nokogiri.

Announcing Virtus 0.5.0 (Part of DataMapper 2 Is Done)
Virtus is a key part of the forthcoming DataMapper 2 which provides attributes for plain Ruby objects. You can now use Virtus in modules, dynamically extend objects on the fly, and Structs can be used as an embedded value in other objects.

Doodle: Extended Attribute Accessors for Objects
A Ruby gem for creating extended attribute accessors with defaults, conversions and validations (along similar lines to last week’s ‘SmartProperties’ item).

nanoc 3.4 Released
The popular Web site generation / publishing tool (think a more flexible Jekyll) gets an update.

Markdown Engine Wrapper
An abstraction and wrapper library that gives access to several different Ruby Markdown libraries both in Ruby and via a command line app called ‘markdown’.

Mina: Fast Deployment and Server Automation Tool
Mina lets you build and run scripts to manage your app deployments on servers via SSH. Ruby based and framework/project agnostic.

Sidekiq 2.0 Released, Gets Scheduled Jobs
Sidekiq is a simple but efficient background job processor for Ruby (and Rails.) It’s designed to be Resque-compatible but is faster as many jobs can execute in parallel. Version 2 adds scheduled jobs so you can say ‘send this email 3 days from now.’

Parts of RubyMotion Open Sourced
RubyMotion is a Ruby compiler/framework for iOS that has recently taken the Ruby world by storm. Its creator, Laurent Sansonetti, has now open sourced parts (but not all) of the framework so that the community can contribute to and extend the platform.

IProcess: Transport Ruby Objects Between Processes
IProcess, short for Inter Process Communication(IPC) Process, is a collection of classes you can use to transport Ruby objects between processes running on UNIX-like operating systems.

SmartProperties: Ruby Accessors ‘on Steroids’
Bored of plain old attr_accessors? Include the SmartProperties module and use the property method along with a name and optional configuration parameters to define new properties along with input conversion, validation, and default values.

Jobs

Rails Software Engineer at Mulu.me (Los Angeles)
Join a killer engineering team to build out a social shopping application where users earn for a cause. You’ll be working with Ruby, Rails, JavaScript, PostgreSQL, and building a product you’re proud of with an awesome team.

Rails Developer at IBM [Emeryville, California]
As interested in technical verve as years of experience, IBM has positions for junior and senior engineers with a focus on those experienced with Rails, JavaScript, CSS and jQuery.

Head of Tech or Lead Developer – Purpose (New York, NY)
Manage a new technology initiative for an established agency. The project aims to build tools for the “ethical consumer” and the hands-on role includes all aspects of development, management and deployment. Competitive comp + stock options.

RoR Developers at Quri (San Francisco, CA)
Quri, a San Francisco-based mobile and web startup that’s transforming the $350 billion trade marketing industry, is seeking an experienced Ruby on Rails engineer to join our growing team.

Web Developer – Threespot (Washington DC)
Responsible for more than development, testing, & documentation of web-based software & technical solutions, our Developers are involved in all stages of client engagements, from application design through specifications documentation & production programming. (Ruby welcome!)

Want to post a job? Click here for more info.

Last but not least..

Why Our Code Smells
A well put together slide deck by Brandon Keepers of GitHub with some interesting points on code smells, primarily focusing on testing.

Ruby Fiddle: Ruby Snippets in the Browser
If you’ve done any JavaScript work, you might be familiar with ‘JSFiddle’ a popular site that previews HTML, JS, and CSS you supply in the browser. Ruby Fiddle aims to do similarly for Ruby, though the code runs remotely.