Open Data Communities: New Features

Posted 13 days back at RicRoberts :

Over the last few months we’ve added some new features on the OpenDataCommunities site linked open data site that we continue to run and develop for our friends at DCLG. The first is the Statistics Selector, and the second is the Geography Selector. And both of them make it easy to cherry pick and combine data you want from across all the datasets on the site.

The Statistics Selector was created late last year. It allows you to build your own table of data by uploading a CSV file of geography codes (GSS codes or postcodes) and then creating a table of your choice by combining columns from multiple datasets in the OpenDataCommunities database. The resulting table can be downloaded as CSV (so you can load it into a spreadsheet or other computer program), and conveniently, has a permalink so you can refer to it later.

stats selector

But what if you don’t know the GSS code (or the postcode) of the area you’re interested in? To help address this, last month we launched the Geography Selector. This interactive map is nice and easy to navigate and lets you find the area you’re interested in quickly. When you select an area, its details appear alongside and you can launch the Statistics Selector straight from there. Lovely and quick. As a bonus, you can also download the GSS code(s) of your selection (these are useful to know as they’re often used to identify geographic areas in government data).

geo selector

Both of these features make it easier for users to slice and dice the data so they can get what they need, download it, save it and do with it what they will. Watch this space for more developments with opendatacommunities - in the coming months we’ll be updating it the latest version of PublishMyData and it’s going to get a new look. Exciting!

What Not to Ask


Despite our best intentions, spending time developing software that people won’t use can be devastating to morale and to a product’s long-term viability. How can we stop wasting time on developing features (or whole products!) that won’t be used? How can your customers' most painful problems be identified? Most teams turn to user interviews to flesh these ideas out early on in the product life cycle. With user interviews we can understand what users want and how to best alleviate their problems.

Except it doesn’t work out that way for most teams. Without realizing it we ask questions that yield biased results. That means that if we aren’t careful, we might actually build features or entire products that customers say they want, but actually won’t use.

The mind is a maze.

“If I had asked people what they wanted, they would have said faster horses.” - Henry Ford

There are over 150 biases listed on Wikipedia that may come into play during a conversation with your users. The difference between the answers you will get when asking, “Would a feature that lets you add task templates be useful?” and “What problems do you have with managing tasks?” could mean the difference between spending weeks on a feature or realizing that people won’t even use it (and spending no time at all). Without realizing it, we may build something based on biased feedback.

Why do our minds adopt these patterns of bias? Do they even serve a purpose? Cognitive biases enable faster decisions when timeliness is more valuable than accuracy. They can help us to make decisions quickly when accuracy is not as important or when situations are dangerous. When we are asking questions about our products, we want accuracy, not speed. Are the questions you tend to ask during user interviews invoking these cognitive biases or not? Are they causing your users to answer with speed, or with accuracy?

Without realizing, we often ask questions that trigger these mental shortcuts and produce biased responses. Biased responses lead us to build software that is not really what our users need or want. Luckily, research on cognitive biases and logical fallacies have helped us ask questions that produce honest and actionable results.

Hidden in plain sight.

Let’s go over some common pitfalls and how to avoid them. In the process we’ll figure out what kind of questions will help us identify the information we need, while avoiding questions that lead to inaccurate responses.

  • Avoid giving away too much information. A good question should be goal oriented. Asking someone to, “add a task for sending a proposal to your client” makes it difficult to see how a real person would think through a problem, because you told them how to map their problem to an action in the software, “add a task”. Instead don’t tell them what to do in the interface, give them a problem and see how they think through it. “You want to send a proposal to a client later in the week, what would you do?” This helps you see how your customer thinks through a problem and uses your software to solve it. It may be that they don’t need your software to solve their problem.
  • Avoid asking questions that plant an idea in their head and lead them to a conclusion. This is called anchoring. “How useful would task templates be in your project management software?” is a leading question. It plants the idea that task templates would be useful. Why is asking this a problem? Task templates probably are useful, right? So is Tylenol, but only if you have pain. Before prescribing a possible solution, try asking about their pain, the problem they want to solve. “What problems do you have with managing your team’s work?” is a type of question that you will help you find your customers most painful problems. These are the problems that customers really care about.
  • Avoid asking questions that limit responses (false dilemmas). These include yes/no questions and questions where you give the person only a subset of possible responses. For example instead of asking, “Would you rather have a task template feature first or would you rather be able to bulk delete tasks?” you could ask, “if you could choose one feature to be included in the next release, what would it be?”
  • Beware of the current moment bias. When asking if a feature would be useful, there is a good chance that they can see it being more useful in the moment because they are sitting there with the software in their hands. When someone is experiencing normal life, the pain of the problem they need to solve may not be bad enough to cause them to use your software. Instead ask about past experiences and problems to see if they have felt and noticed the pain point you are trying to solve. Ask what they currently do to solve the problem. It is also helpful to do field tests where you observe people using software in the real world.
  • Don’t be afraid to stray from the script and ask, “why?” Knowing why someone says or acts or does things, can be huge. You may realize that their mind took a mental leap to a conclusion that wasn’t really what they thought. Asking “why?” can help you be sure that your findings are accurate. It will require extra work to stray from the script and interpret the responses, but it will be worth the extra effort.
  • Be mindful of your own confirmation bias. We want to agree and remember when users say things that we already agree with. Do not do this. Being actively aware of this bias is essential when speaking with your users. Be open to viewpoints that don’t align with what you were thinking.

There are many reasons that a product can fail to gain traction, but products that are based on user’s real needs have a fighting chance. The best user interview questions avoid biases and attempt to find the real problem people are trying to solve. With these tips you’ll be a bit further ahead in creating your next hit product.

Episode #478 - July 8th, 2014

Posted 14 days back at Ruby5

From small releases of rails, to Awesome Ruby, to MessageEncryptor, to BHF, and Inch CI, Olivier and Gregg fourchette their way through the Ruby world.

Listen to this episode on Ruby5

Sponsored by

Codeship is a hosted Continuous Delivery Service that just works.

Set up Continuous Integration in a few steps and automatically deploy when all your tests have passed. Integrate with GitHub and BitBucket and deploy to cloud services like Heroku and AWS, or your own servers.

Visit and sign up for free. Use discount code RUBY5 for a 20% discount on any plan for 3 months.

Also check out the Codeship Blog!


Rails 4.0.8 & 4.1.4 released

Last week Karle & Chris told you about the Rails 4.0.7, and 4.1.3 security releases that patched a vulnerability in the Postgres adapter for Rails. Well, the same day — actually a mere two hours later — versions 4.0.8 and 4.1.4 were also released.
Rails 4.0.8 & 4.1.4 released

Awesome Ruby

For a list of awesome Ruby libraries, tools, frameworks and software check out Awesome Ruby curated by Marc Anguera Insa. There’s maybe over a 100 libraries listed on this single Github page, but I suspect they might be the most common gems used in Ruby applications today.
Awesome Ruby

Reading Rails - How Does MessageEncryptor Work?

After diving into the Rails implementation of MessageVerifier, Adam Sanderson took to his blog again to tackle MessageEncryptor, a useful class from ActiveSupport. It’s great blog post that literally takes you line by line through an internal Rails tool that actually saves you the hassle of interfacing directly with OpenSSL which doesn’t feel very Ruby-ish.
Reading Rails - How Does MessageEncryptor Work?


Anton Pawlik dropped us a line to let us know about the release of his BHF gem, which is a Rails engine which generates an admin interface for you.


If anybody out there is using Heroku as their production stack, there’s an interesting gem out there called Fourchette. It allows you to use Heroku’s Fork feature in order to create a clone of your production environment, deploy a pull request to it and allow you to poke around as if you had deployed to your real production environment.

Inch CI

On episode 441 of Ruby5 we introduced Inch, a library that will grade how well your code is documented, created by Rene Fohring. Today I discovered Inch CI, a project also created by Rene, which will automatically run Inch every time you push new code.
Inch CI

Sponsored by TopRubyJobs

The Advisory Board Company / (slash) Crimson is looking for a Senior Software Engineer in Austin or Houston, Texas and Metabahn is looking for a Web Application Developer in Huntsville, Alabama. So if you’re looking for a top ruby gig or top ruby talent, checkout

Episode #477 - July 4th, 2014

Posted 19 days back at Ruby5

Happy Birthday `Murica. Rails security, modular migrations and N+1 with custom Arel

Listen to this episode on Ruby5

Sponsored by NewRelic

NewRelic just released Ruby Agent 3.9.0, it will now automatically instrument Rack middleware.

Rails 4.0.7, 4.1.3 and 3.2.19

Rails 4.0.7, 4.1.3 and 3.2.19 addresses two distinct but related vulnerabilities in the PostgreSQL adapter for Active Record
Rails 4.0.7, 4.1.3 and 3.2.19

Modular Migrations

swordray has released the Modular_migrations gem to help with OBD
Modular Migrations

Rails and the Warped Asset Pipeline

according to Risa, to most Rails developers the Asset Pipeline is like the magical warp pipe
Rails and the Warped Asset Pipeline

Build a Custom Query with AREL

Arel is another great feature of rails, but sometimes you can fall into an N+1 problem
Build a Custom Query with AREL

Goal! Detecting the most important World Cup moments

Luis Cipriani built a cool project to ring a bell when big moments happen during a the World Cup
Goal! Detecting the most important World Cup moments

Docker on your Server

Posted 22 days back at - Home

TL;DR: Register at if you’re interested in an e-book about using Docker to deploy small apps on your existing VPS.

I’ve been toying around with Docker for a while now, and I really like it.

The reason why I became interested, at first, was because I wanted to move the Printer server and processes to a different VPS which was already running some other software (including this blog), but I was a bit nervous about installing all of the dependencies.

Dependency anxiety

What if something needed an upgraded version of LibXML, but upgrading for one application ended up breaking a different one? What if I got myself in a tangle with the different versions of Ruby that different applications expect?

If you’re anything like me, servers tend to be supremely magical things; I know enough of the right incantations to generally make the right things appear in the right places at the right time, but it’s so easy to utter the wrong spell and completely mess things up1.

Docker isolation

Docker provides an elegant solution for these kinds of worries, because it allows you to isolate applications from each other, including as many of their dependencies as you like. Creating images with different versions of LibXML, or Ruby, or even PostreSQL is almost trivially easy, and you can be confident that running any combination will not cause unexpected crashes and hard-to-trace software version issues.

However, which Docker is simple in principle, it’s not trivial to actually deploy with it, in the pragmatic sense.

Orchestration woes

What I mean is getting to a point where deploying a new application to your server is as simple (or close enough to it) as platforms like Heroku make it.

Now, to be clear, I don’t specifically mean using git push to deploy; what I mean is all the orchestration that needs to happen in order to more the right software image into the right place, stop existing containers, start updated containers and make sure that nothing explodes as you do that.

But, you might say, there are packages that already help with this! And you’re right. Here are a few:

  • Dokku, the originally minimal Heroku clone for Docker
  • Flynn, the successor to Dokku
  • Orchard, a managed host for your Docker containers
  • …and many more. I don’t know if you’ve heard, but Docker is, like, everywhere right now.

So why not use one of those?

That’s a good question

Well, a couple of reasons. I think Orchard looks great, but I like using my own servers for software when I can. That’s just my personal preference, but there it stands, so tools like Orchard (or Octohost and so on) are not going to help me at the moment.

Dokku is good, but I’d like to have a little more control of how applications are deployed (as I said above, I don’t really care about git push to deploy, and even in Heroku it can lead to odd issues, particularly with migrations).

Flynn isn’t really for me, or at least I don’t think it is. It’s for dev-ops running apps on multiple machines, balancing loads and migrating datacenters; I’m running some fun little apps on my personal VPS. I’m not interested in using Docker to deploy across multiple, dynamically scaling nodes; I just want to take advantage of Docker’s isolation on my own, existing, all-by-its-lonesome VPS.

But, really more than anything, I wanted to understand what was happening when I deploy a new application, and be confident that it worked, so that I can more easily use (and debug if required) this new moving piece in my software stack.

So I’ve done some exploring

I took a bit of time out from building Harmonia to play around more with Docker, and I’d like to write about what I’ve found out, partly to help me make it concrete, and partly because I’m hoping that there are other people out there like me, who want some of the benefits that Docker can bring without necessarily having to learn so much about using it to it’s full potential in an ‘enterprise’ setting, and without having to abandon running their own VPS.

There ought to be a simple, easy path to getting up and running productively with Docker while still understanding everything that’s going on. I’d like to find and document it, for everyone’s benefit.

If that sounds like the kind of think you’re interested in, and would like reading about, please let me know. If I know there are enough people interested in the idea, then I’ll get to work.

Sign up here:

  1. You might consider this to be an early example of what I mean.

Episode #476 - July 1st, 2014

Posted 22 days back at Ruby5

Fast attributes, writing Ruby for YouTube with Yt, authorization with Pundit, image cropping for Active Admin, opting out of fragment caching in Rails 4, and Rails 4.1.2 & Rails 4.0.6 are released!

Listen to this episode on Ruby5

Sponsored by Sponsor

Codeship is a hosted Continuous Delivery Service that just works.
This episode is sponsored by

Fast PORO attributes with fast_attributes

The team at AppLift has released a new gem called fast_attributes. It’s goal is to be fast, straightforward, and easily extended. It supports coercion, custom types, and even has a UUID extension.
Fast PORO attributes with fast_attributes


Yt is a Ruby client for the YouTube API. This gem prides itself on being fully tested and documented, and its based on an up-to-date version of the YouTube API. It’s also more “Ruby-styled” than existing gems and follows a straightforward object-oriented approach.

Pundit rails authorisation with RSpec

Netzfisch recently published a blog post about an authorization tool called Pundit. Pundit has a “Migrating to Pundit from Can Can” article and the migration is pretty straightforward. The only catch is a lack of documentation covering using RSpec with the `pundit_scope`, but the blog post provides examples of those tests for you. Overall, this blog post is a great resource if you want to learn more about Pundit.
Pundit rails authorisation with RSpec


If you’ve ever uploaded images using Active Admin, you might have noticed that it doesn’t include any sort of image-cropping functionality. Fortunately, Ricardo Nacif Sader Jr. has solved that problem with a gem called active_admin_jcrop.

If you explicitly expire cached fragments, opt out of cache digests.

Aaron Beckerman put together a short post on how Rails 4 introduces cache fingerprints to give your application a Russian doll-like cachability. How the Rails 3 to Rails 4 migration runs into issues when the templates and controllers may not have access to those fingerprints to perform their expiration. He shows how and why to disable those fingerprints on a per cache basis to fix your cache problem.
If you explicitly expire cached fragments, opt out of cache digests.

Rails 4.1.2 and 4.0.6 have been released!

Rails 4.1.2 and Rails 4.0.6 are finally out. Rails 4.1.2 is the first bug fix release for the 4.1 series. AND Rails 4.0.6 includes a lot of bug fixes to make the upgrade path from Rails 3 easier.
Rails 4.1.2 and 4.0.6 have been released!

Sponsored by Top Ruby Jobs

If you're looking for a top Ruby job or for top Ruby talent, then you should check out Top Ruby Jobs. Top Ruby Jobs is a website dedicated to the best jobs available in the Ruby community.
Top Ruby Jobs

Working Effectively with Unit Tests Rough Draft Complete

Posted 22 days back at Jay Fields Thoughts

I finally put the finishing touches on the rough draft of Working Effectively with Unit Tests. It's been an interesting journey thus far, and I'm hoping the attention to detail I've put into the rough draft will translate into an enjoyable read.

What I did poorly: I'd written the book's sample before I ever put it on leanpub. Before a book is published you can collect contact and price information from those who are interested. However, once you publish and begin selling, you no longer have the ability to collect the previously mentioned information. I published and began selling my book immediately - and forfeited my chance to collect that information.

What I did well: I published early and often. I can't say enough nice things about leanpub. I've gotten tons of feedback on example style, writing style, typos, and content. One reader's suggestion to switch to Kevlin Henney's Java formatting style made my book enjoyable to read on a Kindle. I had twitter followers apologizing for "being pedantic and pointing out typos", and I couldn't have been happier to get the feedback. Each typo I fix makes the book more enjoyable for everyone. If you're going to write a book, get it on leanpub asap and start interacting with your audience.

What I learned from Refactoring: Ruby Edition (RRE): RRE contains errors, far too many errors. I vowed to find a better way this time around, and I'm very happy with the results. Every example test in the book can be run, and uses classes also shown in the book. However, writing about tests is a bit tricky: sometimes "failure" is the outcome you're looking to document. Therefore, I couldn't simply write tests for everything. Instead I piped the output to files and used them as example output in the book, but also as verification that what failed once continued to fail in the future (and vice versa). WEwUT has a script that runs every test from the book and overwrites the output files. If the output files are unchanged, I know all the passing examples are still correctly passing, and all the failing examples are still correctly failing. In a way, git diff became my test suite output. I'm confident in all the code found in WEwUT, and happy to be able to say it's all "tested".

What's unclear: Using leanpub was great, but I'm not really sure how to get the word out any further at this point. I set up a page and many friends have been kind enough to tweet about it, but I don't really have any other ideas at this point. I've reached out to a few publishers to see about creating a paperback, and I suspect a print version will increase interest. Still, I can't help thinking there's something else I should be doing between now and paperback launch.

What's next: The rough draft is 100% complete, but I expect to continue to get feedback over the next month or so. As long as the feedback is coming in, I'll be doing updates and publishing new versions.

If you've already bought the book, thank you for the support. It takes 10 seconds to get a pdf of any book you want these days, and I can't thank you enough for monetarily supporting all the effort I've put into WEwUT. If you haven't bought the book, you're welcome to give the sample a read for free. I hope you'll find it enjoyable, and I would gladly accept any feedback you're willing to provide.

Three In A Tree

Posted 26 days back at Mike Clark

<iframe src="//;byline=0&amp;portrait=0" width="700" height="394" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe>

What's more fun than a black bear cub playing in a tree? Three black bear cubs playing in the same tree, of course! We really enjoyed watching these siblings explore their new world this spring.

GMDSP: Phase 2

Posted 27 days back at RicRoberts :

The Greater Manchester Data Synchronisation Programme project (which I first wrote about here) is entering a new phase after a successful first release of the data at the hack day held in late March.

As a brief background, the initial phase involved Manchester City Council, Salford City Council and Trafford Metropolitan Borough Council releasing open and linked datasets simultaneously. This allowed technical, and non-technical, users to access and use the data in a format that suits them.

The accompanying hackathon saw nine teams from across Europe develop some rather nifty prize-winning apps, including Light Raider (which won the Lifestyle and Wellbeing Challenge and has already recieved publicity). This app uses data about Manchester’s streetlights for a game where joggers compete with others to gain points each time they pass (raid) a street light.

So the next phase involves all ten district councils from the Greater Manchester area - this is a a brilliant example of how local authorities can embrace linked open data.

We’ll be continuing our collaboration with Future Everything on this project. They’re recruiting more code fellows to help model the data whilst we host it and provide training and consultancy. Check out gmdsp on twitter for more details of the next coding challenge to be held this summer.

Reducing risk when running a conference

Posted 28 days back at - Home

It was really interesting to read the news about the potential cancellation of Wicked Good Ruby, a Ruby conference that was due to run for a second time in Boston this year:

Rather than half-ass a conference we’ve decided to cancel it. All tickets will be fully reimbursed. I’ve already reached out to those that have purchased with how that will be done.

There’s lots of interesting stuff in this thread, but one point that jumped out to me was the financial risk involved:

Zero sponsors. […] I had 2 companies inquire about sponsorship. One asked to sponsor but never paid the sponsorship invoice after 82 days.


Last year we lost $15k. In order to made it worth our effort this year we needed to make a profit. The conference we had in mind required a $50k sponsorship budget with an overall budget of close to $100k. (last year’s conference cost about $125k) Consider to date, after 6 months, we have received $0 in sponsorship the financial risk was too high.


Since announcing this a few hours ago I’ve been contacted by 3 other regional conference organizers. They are all having similar issues this year. Sponsorship is incredibly difficult to come by […] I didn’t get the sense they were going to bail but I think this is a larger issue than just Boston.

With costs in the tens or even hundreds of thousands of dollars, it’s really no wonder that organisers might have second thoughts.

But does running a conference really need to come with such an enormous financial risk? With Ruby Manor, our biggest budget was less than £2,000 (around $3,000). Here’s why:

  • We don’t use expensive ‘conference’ venues…
  • … so we aren’t locked into their expensive conference catering.
  • We run a single track for a single day, so we only need one main room.
  • We meticulously pare away other expenses like swag, t-shirts, catering and so on, where it’s clear that attendees are perfectly capable of handling those themselves.

Now, it could be that there are a few factors unique to Ruby Manor that make it difficult, or even impossible, for other conferences to follow the same model. For instance, holding the event in the center of a big city like London means there’s already a wide range of lunch options for attendees, right outside the venue.

Another problem could be the availability of university and community venues as an alternative to conference centres. I really don’t know if it’s possible or not to rent spaces like this in other cities or countries. A quick look at my local university indicates that it’s totally feasible to rent a 330-seat auditorium for less than $1,000, and even use their coffee/tea catering for a total of less than $3,0001, all-in.

I would be genuinely fascinated for other conferences to start publishing their costing breakdown. LessConf have already done this, and even though I might not have chosen to spend quite so much money on breakfasts and surprises, I genuinely do applaud their transparency for the benefit of the community.

In the end it seems there’s hope for Wicked Good:

I think I’ve come up with a plan: reduce the conference from 2 nights to 1 night. Cut out many of the thrills that I was planning. This effectively would reduce our operational costs from ~$100k to around ~$50k. This would also allow us to reduce the ticket prices (I would reimburse current tickets for the difference).

I genuinely wish the organisers the best of luck. It’s a tough gig, running a conference. That said, $50,000 is still an enormous amount of money, and I cannot help but feel that it’s still far higher than it needs to be.

Every hour you spend as a conference organiser worrying about sponsorships or ticket sales or other financial issues, is an hour that could be spent working on making the content and the community aspects as good as they can be.

Let’s not forget: the only really important part of a conference is getting a diverse group of people with shared interests into the same space for a day or two. Everything else is just decoration. A lot of the time, even the presentations are just decoration. It’s getting the community together that’s important.

I realise that many people expect, consciously or otherwise, some or all of the peripheral bells and whistles that surround the core conference experience. For some attendees, going to a conference might even be akin to a ‘vacation’ of sorts. Perhaps a conference without $15,000 parties feels like less of an event… less of an extravaganza.

But consider this: given the choice between a glitzy, dazzling extravaganza, and a solid conference that an organiser can run without paralysing fear of financial ruin, I know which I would choose, and I know which ultimately benefits the community more.

  1. To be clear, they require that you cannot make a profit on events they host, but from what I can tell, most conference organisers don’t wish to run their events for profit anyway.

Feels So Good

Posted 29 days back at Mike Clark

<iframe src="//;byline=0&amp;portrait=0" width="700" height="393" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe>

A few years back I filmed this beaver preening. She gave herself a good rub-a-dub-dub before slipping back into the den for a well-deserved nap.

Episode #475 - June 24th, 2014

Posted 29 days back at Ruby5

Mongoid 4.0.0, a CHANGELOG rant, the Lotus web framework, help on Growing Rails Applications in Practice, the upcoming Keep Ruby Weird conference, ConfConf for safer configuration, and the demise of RubyForge.

Listen to this episode on Ruby5

Sponsored by

Codeship is a hosted Continuous Deployment Service that just works.

Set up Continuous Integration in a few steps and automatically deploy when all your tests have passed. Integrate with GitHub and BitBucket and deploy to cloud services like Heroku and AWS, or your own servers.

Visit and sign up for free. Use discount code RUBY5 for a 20% discount on any plan for 3 months.

Also check out the Codeship Blog!


Mongoid 4.0.0

In Mongoid 4.0.0 field types can now use symbols as well as class names, fields can now be reset to their default values, documents now have a destroy! method that raises in case of destroy callback issues, Mongoid now uses ActiveSupport::LogSubscriber and ActiveSupport::Notifications, *and* there’s a lot more to read in the CHANGELOG including dozens of bug fixes. Since Mongoid follows semantic versioning, there are several backwards incompatible changes with the previous versions: it now only supports MongoDB 2.4.0, Document#metadata has been renamed to Document#relation_metadata, the Rails dependency on database rake tasks has been removed, and there are quite a few more you can find a beautifully detailed CHANGELOG.
Mongoid 4.0.0


Speaking lof CHANGELOGs, I want to encourage open source contributors who listen to us to provide a CHANGELOG as great as the one Mongoid provided for this new release. It’s important to present the new features, removed features, breaking changes and bug fixes in each version release. I’m a bit obsessed about this so I put up a little pamphlet called Just remember: Friends don’t let friends dump git logs in CHANGELOGs.


If Rails isn’t your cup of tea and Sinatra doesn’t strike, there’s a new Ruby web framework on the block. It’s called Lotus and was written by Luca Guidi who describes it as a complete web framework with a strong emphasis on object-oriented design and testability. It’s Rack compliant like them, which seems like good news. The focus seems to be on simplicity — with standalone frameworks: Lotus::Controller, Lotus::Router, Lotus::Model, Lotus::View, etc. For instance you can use Lotus::Router to dispatch HTTP request to a pool of Sinatra applications. Aside from this, Luca emphasizes plain objects, a minimal DSL, and stable APIs. Lotus::View, contrary to Rails, separates view objects and templates. Lotus::Model tries to keep domain-specific logic away from persistence logic. Luca describes the documentation as extensive and at a high level it seems quite thorough. Anybody curious about web frameworks should give it a look and potentially offer Luca some feedback and contributions.

Growing Rails Applications in Practice

Thomas Eisenbarth wrote to us about a new book he’s co-written called Growing Rails Applications in Practice. Instead of advocating a big architectural rewrite, this book aims to provide actionable steps that every Rails developer can use -- like writing *beautiful* controllers, extracting service objects, organizing large codebases with namespacing, and much more. Ultimately, this book is about how to use discipline, consistency and organization to make your application grow more gently.
Growing Rails Applications in Practice

Keep Ruby Weird

Some of the Austin, Texas Ruby community has organized a new conference called Keep Ruby Weird. It’s a one-day conference filled with... weird. It also has a pretty sweet logo. I hope there will be stickers. They’re still in the planning phase, so the Call for Proposals is open. Head over to to submit a talk or sign up for their mailing list and get more info as it’s announced.
Keep Ruby Weird


James Kassemi let us know about a very simple utility called ConfConf, which verifies the correctness of environment variables at application boot so you can fail fast when there's a configuration problem. After adding the gem to your Gemfile and bundling, you can just add an initializer for ConfConf that contains the environment variables you want to check for. If .. when booting your application, the environment variables are not present, a ConfConf::MissingConfigurationValueError is raised.

RubyForge Shut Down

Listener Željko Filipin reminded us that we never mentioned the fact that RubyForge was shut down May 15th. If you still relied on the site it might be a good time to do a cursory check and make sure you don’t depend on it anymore.
RubyForge Shut Down

Sponsored by Top Ruby Jobs

If you're looking for a top Ruby job or for top Ruby talent, then you should check out Top Ruby Jobs. Top Ruby Jobs is a website dedicated to the best jobs available in the Ruby community.
Top Ruby Jobs

Sponsored by Ruby5

Ruby5 is released Tuesday and Friday mornings. To stay informed about and active with this podcast, we encourage you to do one of the following:

Thank You for Listening to Ruby5

Let me tell you a bit about what I'm doing

Posted 30 days back at - Home

This irregularly-kept blog thing is getting so irregular it’s almost regularly irregular. Lest you fool yourself into presuming any ability to predict when I might write here (i.e. “never”), let me thwart your erroneous notion by serving up this rambling missive, unexpected and with neither warning nor warrant!

Take that, predictability! Chalk another one up for chaos.

I live in Austin now, or at least, for the moment

In summer last year, I moved from London to Austin. My other half had already been living in Austin for two years, and I’d been flying back and forth ever other month or so, but 24 months of that is quite enough, and so I bit the bullet and gave up my London life for Stetsons and spurs. It’s been quite an adventure so far, although I do miss a few people back in the UK.

We don’t know how long we’ll stay here, but for the moment I’m enjoying the weather immensely. You might think it’s a balmy summer in London when temperatures regularly reach 20°C, but during Austin’s summer the temperature never drops below 20°C, even at night. Can you even conceive of that?

Farewell Go Free Range, Howdy Exciting

Leaving the UK also marked the beginning of the end of the Free Range experiment for me. Ever since I started kicking the ideas for Free Range around in late 2008, I’ve always considered it an experiment. I wish I could say that it had been a complete success, and it was very successful in a number of important ways, but if you’re going to pour a lot of energy into trying to make something for yourself, it really needs to be moving in the direction you feel is valuable.

I wrote a bit more on the Exciting blog and the Free Range blog. I could say a lot more about this – indeed, I have actually written thousands of words in various notepads and emails – but I’ll save that for another time; my memoirs, maybe. It takes a lot of effort to keep a small boat moving in a consistent direction through uncharted waters.

So: I’ve spun out a lot of the projects I was driving into a new umbrella-thing called Exciting, and that’s the place to look at what I’m working on.

Right, but what are you doing exactly?

Well, I’m still doing the occasional bit of client work, and I have some tinkering projects that I need to write more about, but this year I have mostly been1 working on Harmonia. Although it was built for Free Range, it’s still both a product and a way of working that I believe lots of teams and companies could benefit from. I’ve added a fair bit of new functionality (more calendar and email functionality, webhooks, Trello integration) and fixed a whole bunch of usability issues, the lion’s share of the work has been in working on how to communicate what Harmonia does and how it could help you.

I really cannot overstate the amount of effort this takes. It’s exhausting. Some of that is doubtless because I am a developer by training, and so I’ve had to learn about design, user experience, copywriting, marketing, and everything in between, as I’ve gone along. It’s very much out of my comfort zone, but it’s simply not possible to succeed without them.

You can build the best product in the world, but if nobody knows it exists or can quickly determine whether or not it’s something they want… nobody will ever use it.

The good thing is that the web is the ideal medium for learning all this, because you can do it iteratively. I’ve completely redesigned the Harmonia landing page four times since it became my main focus, and each time I think it’s getting better at showcasing the benefits that it can bring. It still needs more work though; as of writing this I think it’s too wordy and the next revision will pare it down quite a bit.

Going solo

It’s also a real challenge to keep up this effort while working alone. It’s hard to wrangle a group of people into a coherent effort, but once you succeed then it provides a great support structure to keep motivation up and to share and develop ideas. Working by yourself, you don’t have to deal with anyone else’s whims or quirks, but you also only have yourself to provide motivation and reassurance that what you’re working on is valuable, and that the decisions you’re making are sensible.

What’s more, it can be challenging to stay motivated in a world seemingly filled by super-confident, naturally-outgoing entrepreneur types. I don’t operate with the unshakable confidence that what I’m building is awesome, or that my ideas are worth sharing, or that they even have any particular merit.

Confronted with the boundless crowd of what-seems-typical Type A entrepreneurs that fill the internet, prolifically, with their reckons and newsletters and podcasts and blog posts and courses, I often wonder about the simpler life of just being an employee; of offloading the risk onto someone else in exchange for a steady incoming and significantly less crippling self-doubt. I’m sure I’m not the only person who feels this way, whose skin crawls as yet another service or blog post or person is cheaply ascribed the accolade “awesome” when really, I mean, really, is it? Is it?

But… there’s still a chance that I might be able to carve out a niche of my own, and maybe build another little company of friends working on small things that we care about, and investing in our future collectively. I still believe that’s a possibility.

Anyway, so that’s what I’m doing, mostly: crushing it.

  1. Couldn’t resist this turn of phrase; see here if you don’t immediately get it.

Introducing Lotus

Posted about 1 month back at Luca Guidi - Home

A year and a half ago I felt frustrated by the state of the art of web development with Ruby. Secretly, in my spare time, I started hacking with new ideas, taking nothing for granted, destroying and starting from scratch several times, until the software was distilled in a beautiful API.

It took me a decade to get here, by following a process of subtraction of what isn’t essential. Countless refinements to achieve modularity, to balance elegance with performance, and convenience with solid design.

Each alternative was ponderated according to real world scenarios. Use cases that have been pain points or good choices in my and other developers’ experience.

But this project was sitting on my computer for too long.

For this reason, at the beginning of the year, I announced the project and a slow release schedule. Each month I’ve released a library because I wanted to share with other developers the result of this effort, and create a discussion in the Ruby community. Now, six monhts and six frameworks later, I’m proud to introduce the main element: Lotus.

It’s a complete web framework, with a strong emphasis on object oriented design and testability. If you use Lotus, you employ less DSLs and more objects, zero monkey-patching, separation of concerns between MVC layers. Each library is designed to be small (under 500LOCs), fast and testable.

There is Lotus::Router which is an HTTP router and Lotus::Controller for controllers and actions. They both speak the Rack protocol, so they can be used in existing code base, or combined together for small API endpoint, or, again together, in a full stack Lotus app.

Lotus::View is the first library for Ruby that marks a separation between view objects and templates. While Lotus::Model, with repositories, data mapper and adapters helps to keep domain specific logic away from persistence.

We have infinite combinations. Small components have enormous advantadges in terms of reusability.

The power of these frameworks is combined together in Lotus applications.

Microservices are at the core. Several independent applications can live together in the same Ruby process.

Lotus has a smart mechanism of framework duplication, where all the libraries can be employed several times. As the code base grows up it can be easily split in smaller deliverables.

Lotus has an extensive documentation, that covers all the supported architectures.

The future

Lotus is still a young framework, that needs to reach a certain degree of code maturity. Alongside with the vision that I have for the future features, it will improved by collecting feedbacks from real world applications.

Also, starting from today, I’ll offer free consultancy hours to all the companies and individuals who are interested in Lotus.

To stay updated with the latest releases, to receive code examples, implementation details and announcements, please consider to subscribe to the Lotus mailing list.

<link href="//" rel="stylesheet" type="text/css"/>

Episode #474 - June 20th, 2014

Posted about 1 month back at Ruby5

Vic's Ember and Rails tutorial, gemoji, automatic exception googling, dev banners, Grand Central Dispatch, and an awesome laptop dev setup all in this episode of the Ruby5!

Listen to this episode on Ruby5

Sponsored by New Relic

New Relic is _the_ all-in-one web performance analytics product. It lets you manage and monitor web application performance, from the browser down to the line of code. With Real User Monitoring, New Relic users can see browser response times by geographical location of the user, or by browser type.
This episode is sponsored by New Relic

Vic Ramon's Ember Tutorial

Wondering how to build an app that tightly integrates Rails and Ember? Wondering how you might be able to use Ember even better? Read through Vic Ramon's Ember Tutorial for all this and more!
Vic Ramon's Ember Tutorial


Looking for an easy way to get emoji all up in your Rails app? The gemoji gem's got you covered!


The stack_rescue gem will automatically run searches for runtime exceptions in your app.


The rack-dev-mark gem will throw a banner on your non-production environments so you'll never be confused again!

Grand Central Dispatch

This blog post from MotionInMotion will show you how to better leverage Grand Central Dispatch in your RubyMotion apps.
Grand Central Dispatch


Is your development environment a little lacking in the awesome department? The fine folks at thoughtbot just published a new open source project that automates the setup of your dev workstation.