Archive for September 2007

Outsourcing to Open-source

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.

Add to Del.icio.us | Digg This | Leave a Comment

Back From RailsConf Europe

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.

Add to Del.icio.us | Digg This | Leave a Comment

Team Viget: Under the Hood

We’ve received great traffic and encouraging feedback since launching our Team Viget site just over three months ago. We’ve also been asked quite a few questions regarding the functionality used, so here’s some explanation on how Team Viget works.

The core is a JavaScript (JS) library called jQuery. It’s powerful and simple — even for the programatically challenged designer. Its ability to select HTML elements using CSS selectors and/or XPath is one of its greatest strengths. You should check it out.

The site acts as a dynamic-side scrolling box - except on a larger, site-wide scale. To begin, I created a container that spanned the entire width and height of the browser window (Fig. 1, blue box). If the user has JS enabled I assign a class to it, which sets the overflow property to “hidden” so it will behave like a mask.

The next child container of that mask holds all the content and is given an extra long width to accommodate users with JS disabled (Fig. 1, green box). Sub pages, which are really just classed elements, are then wrapped within another container then stacked and positioned (Fig. 1, pink box).

exampleteamviget1.gif

From that point, we move into animation. All of the movement is handled by the jQuery animate() function. It enables you to create amazingly smooth custom animations using anything from position and opacity to font size and borders. For Team Viget, we use it to animate the position. When a user clicks on one of our navigation elements, the entire content wrapper slides from right to left (Fig. 2, green box). It’s then repeated — moving the opposite direction — to return the user back to the home page.

So there’s a taste for you. Check out our stylesheet and JS file for more insight.

Oh, I almost forgot! We created the beautiful easing effects with George Smith’s jQuery easing plugin.

Add to Del.icio.us | Digg This | Leave a Comment

Fall Rumble Shakes Out Harvest of Applications

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!

Add to Del.icio.us | Digg This | Leave a Comment

Lone Star Ruby Conference 2007 Recap

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.

Read the rest of this entry »

Add to Del.icio.us | Digg This | Leave a Comment

A Whole New Web Site

Read this sentence. You just used the left hemisphere of your brain. That’s because our brains are contralateral, which means the left side of the brain controls the right side of the body and vice-versa. In case you are still trying to figure that out, in the West, we read left to right.

brain_wired Left-brain thinking has traditionally been associated with traits like order, analysis, and logic and jobs in accounting, engineering, and the medical field. But the future, according to Daniel Pink, is in right-brain thinking or at least in it playing a much more significant role.

Pink’s A Whole New Mind provides a compelling argument for the impending transition of society’s influencers to be right-brain thinkers. These thinkers are aesthetic, contextual, and metaphorical and typically have been artists, inventors, or storytellers. In Pink’s future, many left-brain jobs, products, and activities will be outsourced, automated, or less valued due to globalization and incredible efficiencies created by none other than left-brain thinkers (in particular Pink’s three agents of change are Abundance, Asia, and Automation).

Read the rest of this entry »

Add to Del.icio.us | Digg This | Leave a Comment

The New Viget Labs Headquarters

Today, we announced our move to a brand new building in the City of Falls Church.  It’s an exciting announcement for all of us, but especially for those of us who have been with the company for a number of years.  We’ve moved six times since we started in 1999.  Six times.  That’s a lot.  Those who went through it know what I’m talking about.

Our first space was a townhouse basement, with folding tables and an angry homeowners association.  Our first real office building was so dilapidated that they had to kick us out to tear it down.  Our next space was so small that Andy and I couldn’t roll away from our desks at the same time without colliding.  I could go on …

Real progress for any bootstrapped company is often hard to measure.  The most valuable progress isn’t material stuff; but, tangible things like office space are often the most noticeable.  We’re proud of what we’ve accomplished over the years and we’re thrilled to be in a position to invest in the future of Viget with this new office.  It’s a testament to the hard work of our team here and to the success of our clients, and both will benefit from the upgraded digs.

Viget Labs’ Office Building - 400 S. Maple Ave in Falls Church, VA

Why The City of Falls Church?

Read the rest of this entry »

Add to Del.icio.us | Digg This | Leave a Comment