RubyFlow : The Ruby Community Blog

Home   Submit   Sign Up   Log In   leaders   Twitter   RSS Feed  

seacreature — 67 posts

Practicing Ruby Scavenger Hunt
In celebration of the fact that Practicing Ruby's archives are now completely open to the public, I've put together a little contest. You can read the rules here and participate without signing up for anything.

First prize is a detailed code review from me on any Ruby project, and the Top 5 will be invited to a group session where we practice our programming skills together.

But even if you're not looking to win, it should be fun to read a bunch of interesting Ruby articles and code samples, right? :-)

You can follow me on Twitter (@practicingruby) to see ongoing updates about the contest. Happy hunting!
Since RailsConf, tensions have been running high among prominent community leaders surrounding the issue of test-driven development. This is unfortunate, because it means that otherwise valuable ideas are being obscured by the way they're being presented.

With Bob Martin's permission, I revised his Professionalism and TDD article to provide concrete examples of how to express the same thoughts in a more measured way. Included with the edited work are the reasons behind my changes, as well as some commentary from Uncle Bob.

Hopefully this serves as a useful case study for those who want to communicate more constructively!
Prawn PDF Toolkit goes 1.0.
After six years of hard work, we've finally shipped Prawn 1.0.

Please use it, contribute to it, complain about it, and make it better.
First of all and most importantly: Enjoy the articles!

If you want to learn more about why we're changing things up, check out this blog post.

And because we're still relying on reader subscriptions rather than advertising or sponsorship as our funding model, please subscribe if you like our content. It's only $8/month, and we're going to keep adding in member benefits over the coming months.
Prawn 0.13.0 Released
After a long hiatus, active development has resumed on the Prawn PDF toolkit -- and we're trying once again to make it to 1.0. For now, please give our newest release a try, and get involved with the project if you can!
Even though Practicing Ruby is a paid service, a good portion of its content has been released under a free documentation license. You can find the archives for the first four volumes (over 60 articles) below:

Volume 1
Volume 2
Volume 3
Volume 4

I wrote the first three volumes by myself, but the fourth volume features guest articles by James Edward Gray II, Piotr Szotkowski, Avdi Grimm, and Greg Moeck.

I hope you enjoy these articles, and if you do, please spread the word and consider subscribing to Practicing Ruby to support its ongoing work. This is still mostly how I pay my bills, so any help I can get is appreciated!
This 13 page PDF summarizes what I've learned about the differences between behavior sharing and implementation sharing techniques (i.e. composition vs. inhertance). Hope it's useful to you!
I'm thinking of starting up a community funded project to do some scientific experiments that would be focused on answering questions that everyday programmers might benefit from. I'd love to hear your feedback on my initial ideas about this project, so please check out this gist.
I'm in the very early stages of trying to find a reasonable balance between Rails concerns and the DCI paradigm. I plan to work on an implementation to test the ideas myself, but I'd appreciate your feedback on the basic ideas before I do. Direct and blunt criticism, as well as any questions are welcome!
Linkbait title, I know. But I feel like to avoid more design cargo culting, we must balance the hype of DCI with some solid critical review. Here are some specific suggestions for possibly convincing evidence that DCI can live up to its promises.
Towards a Common Ruby definition
Although I'm not directly involved in any Ruby implementation, I've been in the community for a better part of a decade and want to see us spend less time on politics and more time on evolving an awesome language. Here's my two cents on how I think we can attain a Common Ruby definition in a pragmatic way.

Mostly, I'd love to hear what you think of it whether or not you agree.
I've been working on the Practicing Ruby Journal since 2010, and have managed to produce nearly 70 great articles during that time. However, because that's a lot of content, not everyone is able to get the most out of that service. Today I launched Practicing Ruby Monthly, which is essentially a trimmed down version of my journal that provides readers with one of my finest articles in eBook friendly formats on a monthly basis.

If you would love to have some more book-quality Ruby content on your Kindle or iPad, but want stuff that you can read in a single sitting once a month, this service would be great for you!
I have been wanting to do this for a while, and now I have finally put the markdown-based manuscripts for the two publicly released volumes of Practicing Ruby on github. Please feel free to remix them however you'd like: revisions are welcome, as are translations. I'll keep updating this repository as I gradually release more content over time, but if you want immediate access to Volume 3 and 4, you'll need to sign up over at
Global Hack Day #5 is today!
The idea of having weekly or monthly hack nights has worked great for Ruby users groups all over the world, but the folks at Mendicant University feel like the internet deserves a similar kind of event.

Today (Thursday June 14), we will be gathering from 18:00 - 02:00 UTC, in the #mendicant channel on Freenode. Please join us if you can! You can bring your own project to share and work on, or you can help others by offering code reviews and patches to their projects.

For more details, see this announcement.
It's no secret that Practicing Ruby has released a ton of free content. With so much of my writing available for free, some folks may wonder why they should bother paying $8/month for a paid account at

To help answer that question, I have decided to experiment with offering 30-day free trials so that folks can try out the service before deciding whether they want to pay for it or not. If that sounds interesting to you, please send an email to between now and June 1, 2012. You won't need to give me your payment information to gain access, and you will be able to unsubscribe at any time should you decide the service is not for you.

PS: If you were a Rubies in the Rough subscriber and are saddened by the news that it is now retired, you will probably love Practicing Ruby. James and I both learned a lot from each other over the years, and while my style is a bit different from his, you'll surely notice some similarities :-)
Going to write a book called "Composing Ruby"
Ruby is one of the most richly object oriented programming languages that has ever existed. However, nearly two decades of programmers working in Ruby as if it were a foreign language has prevented us from unlocking its true potential.

For this reason, I have decided to write a short book called Composing Ruby that will take a fresh look at object oriented programming in Ruby. This book will attempt to answer the question about how Ruby objects, classes, and modules can be used together in harmony to produce software which is both practical and well-engineered.

Sign up here if you want to receive updates about my progress on the book. You can unsubscribe at any time, so don't worry about me spamming you!
Global Hack Day #3 is today! (Apr 5)
The idea of having weekly or monthly hack nights has worked great for Ruby users groups all over the world, but the folks at Mendicant University feel like the internet deserves a similar kind of event.

Today (Thursday April 5), we will be gathering from 18:00 - 02:00 UTC, in the #mendicant channel on Freenode. Please join us if you can! You can bring your own project to share and work on, or you can help others by offering code reviews and patches to their projects.

For details, please see this Mendicant University community post.
Global Hack Day #3, Thursday April 5
The idea of having weekly or monthly hack nights has worked great for Ruby users groups all over the world, but the folks at Mendicant University feel like the internet deserves a similar kind of event.

Our next gathering is on Thursday April 5 from 18:00 - 02:00 UTC, in the #mendicant channel on Freenode. Please join us if you can! You can bring your own project to share and work on, or you can help others by offering code reviews and patches to their projects.

For details, please see this Mendicant University community post.
When I started writing professionally, I made a promise to myself to eventually release all my content for free. In keeping with that promise, I've decided to share Practicing Ruby's second volume with the Ruby community.

The reason I have been able to spend so much time working on this content is that Practicing Ruby is a subscriber-supported service. I am an independent developer and these articles literally pay my bills, so if you enjoy what you have seen here, please become a subscriber! There is a ton of additional content available to members that has not been publicly released yet, and new stuff is getting added regularly.
Global Hack Day #2 is Today! (March 8th)
Mendicant University is now hosting monthly online hackfests open to all programmers. Today (March 8) we'll be running our second event, from 19:00 - 03:00 UTC. If you have your own project you want to work on, or wouldn't mind helping others with theirs, please catch up with us in the #mendicant channel on Freenode. For more details, see this announcement and this wiki page.
The idea of having weekly or monthly hack nights has worked great for Ruby users groups all over the world, but the folks at Mendicant University feel like the internet deserves a similiar kind of event. Our next gathering is on Thursday 3/8 from 19:00 - 03:00 UTC. Please join us if you can! You can bring your own project to share and work on, or you can help others by offering code reviews and patches to their projects.
For the last week or so, I've been trying to build a framework which does for email what Sinatra/Rack have done for web application development. It's not nearly production ready, but Newman now has good documentation of its implementation, and I'd love to hear what people think of it. I could really use some help, since email is not something I'm an expert on.
Mendicant University Global Hack Day #1, Thursday 2/16
Many Ruby users groups have periodic hack nights where folks get together and work on their own projects while sharing questions and ideas with one another. We'd like to do something similar at Mendicant University, but on a global scale.

Anyone is who is interested in showing off their open source projects, asking for code reviews, or helping others with their projects can participate in this online event. Check out the details if you are interested.
Jaime Iniesta recently removed all advertising/referral links from in the hopes of sustaining its development with support from the community. W3Clove is a site-wide markup validation website (and soon to be service API) which is based on work started in a Mendicant University course.

I will be working with Jaime to come up with a long term plan for sustaining the project that does not depend so much on the kindness of strangers, but sure would appreciate if you can help cover his operating costs for the next year or so by either making a one time donation or becoming a supporter. We need more grassroots efforts like this in our community!
What gets built in a Mendicant University course?
We've historically been pretty bad at publicizing just how productive the Mendicant University students are. We're trying to change that, and so I did a writeup on the results of our January 2012 session. Seeing several dozen new projects coming into existence as well as nearly a dozen patches to existing open source projects over the course of just three weeks is an amazing experience!
In this blog post, I've attempted to distill a year and a half of lessons learned about how to build good code study groups based on my experiences at Mendicant University.
How Mendicant University Works
I've written a blog post explaining how things work at Mendicant University, in the hopes that it will answer some of the frequently asked questions about the program. It's a free online school for software developers that I've been running since June 2010, and it is awesome. If you'd like to join us, admissions are now open for our January 2012 core software development skills course. Please spread the word if you like what we've been up to!
To celebrate the fact that it's been a full quarter of a year since I relaunched my subscription based weekly journal Practicing Ruby, I have publicly released our three most popular articles. In that same post I've made an attempt at explaining what makes this project a unique learning resource / experiment in social responsibility.
I just released three new puzzles on Check them out if you enjoy Project Euler / IPSC style problems, or if you're planning to apply to Mendicant University when admissions open a few days from now. We use these puzzles as our entrance exam.
Mendicant University's Hackfest for Grea...
Mendicant University's Hackfest for Great Justice is happening this weekend (Oct 21-23). We've teamed up with three organizations that are dedicated to positive social change, and are looking for volunteers to help out with these projects over the weekend. So if you're in the mood for writing some code that will make a positive impact on the world, please join us this weekend!
This week is MRI Documentation Week
Several months ago, Eric Hodel issued a challenge encouraging folks to contribute to Ruby's documentation to make 1.9.3 the most documented version of Ruby ever. That challenge was met, but then contributions died down after that. This week, Mendicant University is making contributing to Ruby's documentation easier than ever by providing open office hours via IRC and also helping you find areas of Ruby that need documentation the most. We'll tell you what needs patching, help you form a patch, and make sure it gets merged upstream. No matter whether you're an OSS newbie or a Ruby expert, you're welcome to join us!
The Practicing Ruby newsletter was a big hit towards the end of last year, but I didn't plan things well enough back then to keep it alive. In recent months I've worked hard to bring the project back to life, and it is now better than ever. Please subscribe now if you want to get access to a great learning resource while simultaneously helping sustain this project as well as my volunteer work on Mendicant University. You may also want to check out this sample article before signing up, so that you know what to expect.
SOLID Design Principles
This article I wrote about the SOLID design principles was one of the more popular issues of Practicing Ruby volume 1. Now that it's publicly available I'd love to hear your thoughts on it.
Saying thanks to OSS maintainers
Over the last few days, Mendicant University students and staff said thanks to OSS maintainers by making tiny contributions to their projects. We did this because we were inspired by and wondered if there was a way we could take it a step farther. You're encouraged to follow in our footsteps and do the same for a project you love!
Thoughts on Mocking
A few months ago I wrote a two part article about my thoughts about using mock objects for testing Ruby code. You can now find both part 1 and part 2 over on the RBP blog. When I originally released these to the Practicing Ruby newsletter subscribers, they generated a very interesting conversation. I'm hoping to see more of the same now that they're publicly available.
Many Ruby folks followed my @seacreature account on twitter to keep track of my projects and news about Mendicant University. Unfortunately, twitter has been unpleasant for me to work with lately, so I've quit posting there for now. This post explains how you can keep in touch with me.

Even though I'm leaving twitter, Mendicant University won't be. So if you want to keep up to date on the day to day operations of our free online school for software developers, be sure to follow the newly created @mendicant_news account.
Give the RubyGems documentation some love
As part of my ongoing effort to improve RubyGems, I've volunteered to help get updated and to make it more useful for end users and plugin developers. Please file tickets to help me figure out what I should be working on.
Looking for RubyGems 1.8.5 breakage
Now that SlimGems has been released, it's clear that at least some folks are fed up with RubyGems. This is in part because RubyGems 1.4.0->1.8.3 have been full of nasty surprises and breakage due to poor communication. What I want to know is what is still broken on RubyGems 1.8.5, so that I can investigate and try to help get it fixed!
Last week I promised that I'd follow up with Eric and Ryan about RubyGems release management. I've now done that, and am very happy with the results. Check out my meeting notes for details.
RubyGems is not a BattleField: Part I
For the last several days I've been collecting feedback from RubyGems users and contributors to try to get to the heart of what is causing so much drama. On May 25th, I spent a long time on the phone with Eric and Ryan talking about what they can do to help make things better. Here are the notes from our meeting, I think it's a good start.
Mending the RubyGems Fences
Yesterday I wrote an unsurprisingly controversial appeal for folks to stop raging against the RubyGems maintainers. Today, I've written a followup about how we can mend fences and make things better. If you're someone who's frustrated with RubyGems, I want to hear from you!
All of the RbMU staff and several alumni will be at BohConf this year, and we've put together a bunch of activities to help get folks involved in our community while having some fun. We're even running a programming contest where you can try to win a Kindle 3G or at least get a nice code review for your troubles. If you'll be at BohConf, be sure to catch up with us and say hello.
Supporting the Ruby Mendicant Experiment
I would like to keep working on Ruby Mendicant University and on writing open source code and learning materials full time. I'm trying out the idea of community subscriptions: you give me a few bucks a month, I build awesome stuff, and then I tell you about what I've been up to!
Prawn 0.11.1 released!
After over a year of developing the PDF generation library Prawn without doing an official release, the core team has finally replaced the legacy Prawn 0.8.4 gem with the 0.11.1 codebase. This brings the team very close to 1.0, and fixes many issues and adds many new features that Prawn users have been asking for since the start of the project. See the release notes, check out the awesome self-documenting manual, and kick the tires, because this release is one of our last stops on the path to 1.0!

I am absolutely thrilled to see that this project has continued to move forward even though I left the core team many months ago. These guys have made it better than ever, and are the reason why Prawn is awesome.
Ruby Mendicant University is now accepting student applications for the May 2011 core skills course. This time around, rather than doing a traditional entrance exam, we're inviting folks to solve programming problems on our newly created PuzzleNode website. If you like quiz sites like RubyQuiz or Project Euler, you might like PuzzleNode, whether or not you plan to join RMU.
RMU Study Hall #2
Over at Ruby Mendicant University, we're holding a second series of free mentoring sessions between beginner level Ruby programmers and volunteers from our alumni network. If you could use some help in your Ruby studies and can find some time for a 45 minute meeting with one of our mentors between 3/14 and 3/18, please feel free to sign up for a session.
While we don't have immediate plans for posting genuinely new content to the RBP blog, we've decided to gradually release all of my newsletter articles from the now-discontinued Practicing Ruby newsletter. The first issue has already been posted, and new ones will follow every Tuesday and Thursday until we reach Issue #30. Enjoy!
My work with students at Ruby Mendicant University over the last several months has taught me a ton about what topics are stumbling points for intermediate Ruby developers. In an effort to help support the ongoing operations of RMU while simultaneously helping others learn, I'm launching an inexpensive bi-weekly newsletter. You can learn more about it on the RBP blog.
Some folks have been asking me to summarize what goes on in an RMU core course, so I've written up an article on the RBP blog about it.
RMU Entrance Exam
We're accepting a limited amount of last-minute Ruby Mendicant University entrance exam submissions between now and 10/19. If you have some time to spare and want to join an amazing community of Ruby learners, give it a shot!
RMU and Game Mechanics
I wrote a post describing some of the ideas from game mechanics embedded in the way that Ruby Mendicant University has been shaping up. Might be useful to any folks currently involved in educational initiatives online or otherwise.
IDEA: Ruby Mendicant University
Please comment on the RBP blog about this idea for a free online Ruby training program.
The first draft roadmap for Prawn 1.0 has been announced. We will allow two weeks (until 4/29) for open discussion before locking down the plan and executing. If you do PDF generation in Ruby, please come and participate in the discussion! I have officially retired PDF::Writer today, so you'll want to get involved in this process as Prawn is the way forward. preview:
While we don't officially launch until April 6th, people have been asking about what to expect. So here's a screencast that gives you a sneak peek. Enjoy!
Ruby Best Practices Chapter 5 Released
You can now download Chapter 5: Functional Programming Techniques via the RBP blog. Same link will bring you to download links for Ch1-4 as well. Enjoy!
Chapter 4 of "Ruby Best Practices" released
Over on the RBP blog, you can download Chapter 4 of "Ruby Best Practices". Article also links to downloads of the first three chapters as well. Readers are encouraged to leave comments, in preparation for the book's open source release in March, 2010.
Code Blocks: Ruby's Swiss Army Knife
This RBP Blog Post features an entire section excerpted from the "Designing Beautiful APIs" chapter of Ruby Best Practices.
An alternative to monkey patching
Yet another RBP Blog Article, this time offering a potential alternative to core extensions. Please check it out and share your thoughts.
Quack Attack: Making Your Code More Rubyish
Over on the RBP Blog, I wrote up a quick article on how to write objects that quack like core Ruby objects, and reviewed some of the benefits of this technique. I'm curious to see what other folks come up with as examples.
Over on the RBP Blog, I caught up with Brian Ford about RubySpec and its importance to the Ruby community at large.
Control Flow Features and Readability
Robert Klemme gets philosophical on Control Flow Features and Readability, giving us some insight into why catch ... throw is seen so rarely in Ruby code.
Fun with
The RBP Blog has really been heating up, with some awesome commentary from the readers. Come check out some anonymous class hacks and join the conversation on this and other posts. Ruby Best Practices - Fun With
"Ruby Best Practices" Collaborative Blog
New Collaborative Ruby Blog featuring postings from James Britt, Gregory Brown, Kirk Haines, Robert Klemme, Jeremy McAnally, Sean O’Halpin, Magnus Holm and Lakshan Perera.
I am looking for five or six people to join me in putting together a blog at Check out the details if you are interested.
A sample chapter from Ruby Best Practices has been released. Please let me know what you think!
What you'll find in "Ruby Best Practices"
The full chapter listing for my O'Reilly book RBP is now up on my blog. Feedback is welcome!
For the love of RubyTalk announcements, without the RubyTalk volume, a mailing list for doing software release announcements and other community things. Not meant as a replacement to RubyFlow, but as a complementary service :)