Close and Go BackBack to Viget

Outsourcing to Open-source

Ben Scofield
Ben Scofield, Development Director, September 24, 2007 0

Patrick gave the low-down on our full Europe experience, but I wanted to call special attention to one session in particular: Tobias Lütke‘s “Outsourcing to Open-source”.

Lütke is one of the driving forces behind Shopify, one of the oldest and largest Rails apps on the web. His company only has five employees, though, and so was faced with a challenge: how can such a small team accomplish all of the various tasks that needed to be done? In building a merchant platform, you’ve got internationalization to worry about, dozens (if not hundreds) of different payment gateways to integrate with, and the worry of letting your clients customize their storefronts, just to name a few things.

Shopify solved these problems by open-sourcing the relevant components of their application. End-user customization is allowed by Liquid, which they released to the community and were receiving patches for even before their product launched. For payment, they built and open-sourced ActiveMerchant, bundling a few gateways at the start and relying on others to integrate the rest of them as they were needed.

One of the more interesting outsourcings they did, however, was related to the ActiveMerchant documentation. Shopify is a Canadian company; all of the core documentation is in English. Furthermore, it gets updated fairly regularly, so translating it and keeping both (or all of the) versions up-to-date would be onerous. Instead, Shopify has a system for allowing the community to take over maintenance of the translated documentation. Each language has a progress bar, tracking the current state of the translation - French might be 100% complete, while Italian sits at 80% until someone finishes it up.

Whenever the core documentation is updated, all of those completion statuses are updated - the 100% numbers get reduced to 99%, and so on. As a result, the translation maintainers know that something new has happened, and can go back in quickly and update their version of the content.

It’s a win-win strategy - Shopify gets free development time, and the community gets useful tools - and I think that many small teams and companies would do well to consider it.

Back From RailsConf Europe

Patrick Reagan
Patrick Reagan, Development Director, September 22, 2007 0

On Friday, Ben and I returned to Falls Church after a week-long trip to Berlin for the 2nd annual European Rails Conference.  Berlin was a lot of fun and the conference was a blast – again, the folks from both Ruby Central and O’Reilly Media organized another great event.  Thanks to FiveRuns and their Try and Fly contest, we were fortunate enough to attend.

After experiencing a packed schedule in Portland, we knew that this time around we had to get out and enjoy some local German culture (and beer).  We started our adventure off with the excellent Bratwurst on Rails event held at Kalkscheune and hosted by the Berlin Ruby User Group with support from ELC Technologies and O’Reilly.  It was great to see some familiar faces and connect with new people from around Europe at the event.  In the following days we visited some chilling historical spots, checked out some local cuisine, and tried our best at becoming Berliners – all while being painfully aware of how bad our German was.

Despite all our extracurricular activities, I was able to catch up on some aspects of Rails development at the conference:


  • RSpecDan, David, and Aslak did a great job providing a history of Behaviour-Driven Development and demonstrating how to use the RSpec framework to exercise BDD in Ruby.  I had seen David give a live demo of RSpec at LSRC the week before, but the 4-hour tutorial format at RailsConf really helped fill in some of the missing pieces.

  • Rails 2.0 – Though I missed David’s keynote (it wasn’t me, it was the Pilsner!), he announced the upcoming release of Rails 2.0 in the coming months in addition to some new features since 1.2.3.  While it was good to finally hear that 2.0 is on the horizon, we’ve actually been ahead of the curve now that we’re building our greenfield apps against the current “edge” release.

  • Capistrano – Though our deployments have made use of Capistrano 2.0 for quite some time (thanks, Mark), I was able to pick up some new tips from the useful recipes that Ferdinand discussed.  Selfishly, the highlight for me was when he mentioned his affinity for Mark’s RSync deployment strategy that he’s been using for a majority of his deployments – it’s always great to see people in the community benefiting from our open-source efforts.

  • Metaprogramming – Fresh off his RejectConf performance in Portland, Dr. Nic discussed some great metaprogramming techniques in Ruby and demo’ed his Magic Model Generator plugin as well as some controversial uses of metaprogramming.

  • Amazon Web ServicesJohnathan’s talk again reminded me that I need to start looking more into the EC2 and S3 platforms that Amazon offers to anyone who needs quick access to additional computing or storage needs.  The availability of AWS along with the RightScale platform promises to make multi-server scaling less painful.

  • Selenium – Till Vollmer (of MindMeister) got me thinking about using Selenium (on Rails) again for automated UI testing.  The MindMeister application has some pretty complicated AJAX functionality, and he was able to clearly demonstrate the benefit of using Selenium on an application with such a complex user interface.

  • (A) Presenter Pattern – I had never heard Jay Fields speak at a conference before, but I do follow his blog and thought this would be a good talk to attend.  I had seen Marcel discuss his presenter pattern in January at the Rails Edge conference and I was interested in seeing how Jay’s implementation differed.  After his 15 minute talk, and at his own urging, Jay’s “solution” is not something that we will pursue.

Due to a scheduling issue, one of the sessions was transformed in to an hour-long lightning talk session.  At Chad’s request, Ben was able to give a quick demonstration of Sandstone, his new CMS plugin, to a responsive crowd.  This format is always a big hit with the attendees, so it was nice to see it happen again at the European conference.

From what I can remember, my experience in Berlin was a great one.  Thanks again to the guys from AutoScout, Rails for All, and FiveRuns for the beers, food, and good times.

Fall Rumble Shakes Out Harvest of Applications

Clinton R. Nixon
Clinton R. Nixon, Senior Developer, September 14, 2007 0

Last weekend, September 7 and 8, Viget Labs entered two teams in the Rails Rumble, a 48-hour grueling marathon of web application development. In those 48 hours, each team had to design, develop, and successfully deploy a web application built in Ruby on Rails. Both Ben’s team and my team finished the race, creating a beautiful interface for using IRC from the web and a social calendaring system.

Exercises like this are chances to stretch your creativity and they present a unique opportunity to learn. Lessons learned while under stress—“in the trench,” one might say—are lessons kept a long time. I learned several interesting things while completing Clubhouse.


  • The Triangle area of North Carolina is really heating up for quality web development. We had Ben working as a solo team, and my team was made up of three members from some of the highest-caliber web companies in the area. It was amazing to see how three people from different work environments were able to achieve a high level of cohesion in one weekend. Our shared vocabulary of web standards, Agile development, and simplicity in design didn’t hurt. The Triangle also produced a brilliant new take on Digg, a document collaboration system, and a way to find restaurant recommendations from your friends.

  • Rails is moving very quickly towards a 2.0 release. Even over the weekend, as we developed, the code base changed. There are so many good things in Edge Rails right now to take advantage of.

  • Confronted with such a time limit, our team looked for options to lay out web pages without spending a lot of time tweaking CSS to work with every browser. I had not used the Yahoo! User Interface CSS tools before; but, after using them for a weekend, I can fully recommend their CSS for grids. It is, frankly, amazing in its cross-browser support for complicated grid-based layouts.

  • One thing I found that the Rails community needs, though, is a way to point out the highest quality plugins. When it came time to add tagging and pagination to my application, I was presented with myriad options. Options are good; but, a way to find the pros and cons of each option is better.

  • Writing software truly is a multi-faceted process. Having a project manager, a designer, and a developer on my team helped us out. Those three perspectives let us describe the elephant we were groping for in the dark with much more accuracy.

  • With that said, a sharp focus and a small group can greatly heighten the chance of success. Out of about 150 teams that entered the Rumble, 92 completed a functioning, useful application. That is a tremendous success rate! Many of those teams are going on to try to turn their application into a start-up. The limit on team size—four people—is, I believe, directly responsible for the ability to make quick decisions and keep application requirements focused and simple.

Of course, we were fueled all weekend by the promise of fabulous prizes (and a championship belt.) If you have a chance, feel free to check out Viget’s entries into the Rumble, Irksome and Clubhouse, as well as the other fabulous entries, and vote!

Lone Star Ruby Conference 2007 Recap

Kyle Peyton
Kyle Peyton, Web Developer, September 12, 2007 0

This past weekend, from September 7th to the 8th, marked the first-ever Lone Star Ruby Conference in Austin, Texas. Great coding minds from around the nation convened to discuss the language they’ve all come to know and love. Some people lived in the area, some convinced their bosses it was worth flying them across country for a two-day drink code-fest, and some just wanted to escape their .NET, Java, and PHP day jobs.

Whatever the reason for attending, each person there had a unique and interesting story behind their love for Ruby. Some, like Glenn Vanderburg, adore it for its beauty. More cherish Ruby for its friendly testing frameworks, like David Chelimsky, Chris Wanstrath, and Viget’s own Patrick Reagan. And, practically all, including Adam Keys, would love to see more social cohesion in the Ruby community.

The conference got kicked off in the early hours of September 7th with a rousing account of the beautiful intricacies of Ruby by Glenn. A comparison he made between Java and Ruby code opening a file and reading in the contents did wonders to extol Ruby’s terse syntax. Glenn’s speech went on to compliment Ruby’s openness with classes by way of mix-ins, which were later explored in more detail by Patrick Farley. A final example Glenn provided, which modified the Regexp class to allow for a return of named values, provided convincing closing arguments to any developers on the fence about mix-ins’ usefulness.

Immediately following Glenn was our own Patrick Reagan, who led off a series of speeches that lauded Test-Driven Development (TDD). Patrick defined, explained, and demonstrated TDD in a set of slides which stood as a testament to the value of the “test first” mind-set. His speech made it clear that regression tests provide developers, project managers, and clients with the necessary confidence to move forward with refactoring or feature development. The need for excellent code coverage was another subject Patrick touched on, which other speakers (David Chelimsky) reiterated throughout the conference. Emphasizing that it can provide developers with a “false impression” of the tests’ thoroughness, he cautioned that a balanced mix of TDD and coverage analysis is the healthiest form of testing.


James Edward Gray II
gave an insightful speech on “Ruby as a Glue Language” which drew parallels between characters on the TV show “Heroes” and programmers who make use of Ruby to tie together external systems for the purpose of speed and efficiency. Evan Short later touched on Domain Specific Languages (DSLs) in Ruby. David Chelimsky wowed the audience with a walkthrough of writing tests in RSpec and indicated some soon-to-come features.

H D Moore shocked the audience with a 60-minute lightning talk on his newly resurrected application, appropriately named Metasploit. Whirring through slides, interjecting comments about “owned” systems, and likely intimidating much of the audience, H D gave a chronology of Metasploit’s development. One question following the talk which probably resonated in everyone’s mind was “what can we do to prevent exploitation from people like you?” to which he reasonably replied “keep your systems up to date with patches, be smart with what you download, and use common sense when surfing the net.”

Speeches by Hal E. Fulton and keynote Charles Nutter predicted the future of Ruby and attempted to motivate cautious developers respectively. Hal’s lecture gave a broad view of Ruby’s history, followed by Hal’s own prognosis of things to come. Charles, devoted to developing JRuby himself, encouraged timid developers to get out and get involved, marking the importance of blogging about, experimenting with, and promoting Ruby.

PJ Hyett of Err.the_blog followed up with a talk about monetization and upkeep of a “killer rails app.” PJ stressed the importance of interacting with the site’s users. He noted it’s not only important to give them a voice, but to make sure those voices are heard. Ad revenue, he says, is not really a fiscally reliable way to make money with a site. All in all, PJ’s messages rang to the tune of getting involved in your site from top to bottom, designing to testing, bug tracking to promoting.

Jay Phillips later spoke on his experience writing a Ruby DSL named Adhersion, designed to ease the development process of calling systems. Jay had many encouraging things to say about Voice over IP (VoIP), including an upbeat attitude about the “cool things” anyone can do with just a few pieces of hardware.

Bringing up the rear of non-keynote speakers was Rick Olson. Rick touched on his experience with file uploads and attachments and gave the audience a synopsis of his work on attachment_fu. His mostly technical talk about storing uploaded photos in the database left the audience with the sense that Rick really knew what he was talking about.

Finally, Zed Shaw, keynote from day 2, fascinated everyone with a high-energy speech, the text of which he delivered through IRC displayed on projectors. Zed’s opinionated mind-set and resolute demeanor projected his personality very well. Reiterating and reinforcing a message heard throughout the conference, he emphasized the need for people to “not be afraid of something new”, “stick your neck out”, and “get involved.” Writing better code was another theme of the speech, including a story about a developer he knew who hated Single Table Inheritance (STI) so much that he ignored some of the easiest-to-implement features in Ruby.

In conclusion, Lone Star Ruby Conference 2007 was a success, a great success. Those who came looking for new ideas weren’t disappointed and those who just needed a point in the right direction found hundreds of people ready to help. Minds were opened, knowledge was imparted, and the stage was set for a generation of developers to make a difference with the common language of Ruby.

A Development Community for Viget Labs and Beyond

Every team member here at Viget Labs strives to be an innovator. We members of the development team are no different - that's why we're constantly engaging in community discussions and exploring the unknown that is the next generation of open-source web applications.

Viget Is Hiring!

Viget has job openings for Ruby Developers, Interns, and Front-End Developers. Learn More »

Recent Comments

Interesting.

I’ve been (mis)using similar behaviour in javascript for years.


var i = 0, car;
while( car = cars[i++]){
// do stuff
}

I suppose that the reason it works is exactly the same reason it works in Ruby ... but in this case I think the code is actually very easy to read.