Generating realistic-looking stories in Pivotal Tracker

We are heavy users of Pivotal Tracker here at Carbon Five, and each project evolves workflows around its use. I recently spent some time writing a Chrome extension to help support some of the common interaction patterns that come up in our workflows.

This blog post is not about that.

I started to write up a post about the Chrome extension and how I developed it (forthcoming), but realized that I needed to show screenshots. Unfortunately, I can’t use images of a client’s production tracker. Hmm.

I quickly whacked together a Ruby script to generate realistic-looking stories in a tracker project. Here it is!

Continue reading

Posted in Everything Else | 2 Comments

Modern Cucumber and Rails: No More Training Wheels

Last month, cucumber-rails 1.1 was released. This release removed web_steps.rb, a collection of step definitions for interacting with a web app.

For months, web_steps.rb contained a warning of its negative effects on feature maintenance. Like most developers, I ignored the warning. During a recent upgrade of an existing Rails app, I realized it was now gone. Instead of copying and pasting it from an older app or using the newly created cucumber-rails-training-wheels gem, I decided to accept the challenge and refactor its steps out of the app’s existing features.

After the refactor, the features read much better. They were simpler, less verbose, and felt more maintainable. I also cleaned up my factory_girl usage, which was causing issues similar to web_steps.rb. Here’s a short overview of the main refactorings.

Continue reading

Posted in Process, Web | Tagged , | 13 Comments

Why Your Daily Standup Sucks (and how to fix it)

The daily standup is the “Hello World” of agile development. It’s a daily, 15-minute meeting, about the current status of a project. Each participant answers three questions: what did I do yesterday, what am I doing today, what is in my way. Sounds simple, right? However, it’s surprisingly easy to turn a standup into another useless meeting.

Let’s look a few common standup “smells” and how to fix them.

Continue reading

Posted in Process | Tagged , | 37 Comments

Up and Running with Clojure

For the last three years or so, Clojure has been a language that I admired from afar: the design of the language is wonderful but I’ve never really used it to build anything and haven’t looked closely at the language in a while. Recently we had a Carbon Five tech showdown between Node.js and Ruby to see which system could pump out “Hello World” as fast and as consistently as possible. Since then we’ve added a Go version that impressed us a lot.

But we’re missing a JVM-based entry which gives me a great excuse to dive into the Clojure world and learn how things work.

Continue reading

Posted in Web | 16 Comments

There’s a (Vim Plugin) for That! Part I: Fuzzy Finder

One of the most popular features of TextMate and RubyMine is Command-T, the ability to jump to a file with just a couple of keystrokes. Vim lacks this feature out of the box, leaving Vim newcomers less efficient.

For the casual Vim users out there, when in doubt, remember this: there is a plugin for that!

Continue reading

Posted in Process | Tagged , | 7 Comments

Vim Text Objects: The Definitive Guide

To edit efficiently in Vim, you have to edit beyond individual characters. Instead, edit by word, sentence, and paragraph. In Vim, these higher-level contexts are called text objects.

Vim provides text objects for both plaintext and common programming language constructs. You can also define new text objects using Vim script.

Learning these text objects can take your Vim editing to a whole new level of precision and speed.

Posted in Process | Tagged | 29 Comments

A Modern Guide to Threads

I spoke recently at Rubyconf 2011 on some advanced topics in threading. What surprised me was how little experience people had with threads so I decided to write this post to give people a little more background on threads. Matz actually recommends not using threads (see below for why) and I think this is a big reason why Rubyists tend not to understand threading.
Continue reading

Posted in Web | 11 Comments

Crafting Commits in Git

A commit, like a well-designed function or class, should represent a single concept. A distinct, cohesive commit is easy to understand, review, and, if necessary, revert.

Git’s powerful staging area allows you to finely craft your commits. You decide which files and even which changes in a file, down to the individual line level, to commit.

Let’s take a look at how to use Git’s staging area to divide a large set of un-related changes into several smaller, well-defined changes.

Continue reading

Posted in Design, Process | Tagged | 8 Comments

Explorations in Go: A dupe checker in Go and Ruby

I've recently started exploring the new(ish) programming language "Go". Go is intended to be a systems programming language and offers speed and low-level API along with some sweet features and the beginnings of a great standard library.

At Carbon Five we do most of our work in Ruby, JavaScript, Objective-C, and lately, node.js. I've really been enjoying Objective-C but realistically half the value is in the standard library, which is not public, which precludes its use in any kind of server environment to which we're likely to deploy (i.e. non-Mac). I also spent some time this year contributing C code to an open source project and remembering why I don't program in C, given the choice.

I'm exploring Go as a possible solution for times when I want to get close-to-the-metal and really control what's going on, but without having to reinvent the wheel. Example: having to write your own collection frameworks. Blehft.

I wrote a dupe checker in Ruby for a project recently and thought I'd write a Go port as an experiment. (In case you're curious about the motivation: tons of files get moved from a tree to a flat namespace, leading to collisions -- and confusion.)

I've written walkthroughs of the Ruby and Go versions below - please check it out.

Continue reading

Posted in Everything Else | Tagged , | 23 Comments

Lightning talks at Carbon Five, 9/28/2011

Carbon Five had a set of lightning talks over lunch recently. Giving our designers and developers a chance to share recent experiences and side projects.

A debate over the relative performance of different languages at our last hack night called for a measurable comparison. Mike demonstrated the resulting head to head to head speed test serving “Hello World” from Ruby, Node.js, and Go.
https://github.com/carbonfive/hellod

Dave gave us a summary of Agile UX presentations from the Balanced Team Conference

Jonah has been working on a tool to parse and manipulate Xcode project files. Using a parsing expression grammar defined in treetop to parse the file and generate a tree of ruby objects which could be manipulated to resolve merges, organize resources, or manage dependencies.
https://github.com/jonah-carbonfive/Project_err

Our resident node.js expert Ben explained how he has been using jasmine and zombie to practice BDD while working with node.
http://node-bdd.heroku.com

Rudy has been working on iOS apps and gave us a demonstration of how to use objective-c metaprogramming to monkey-patch new behaviors and state onto existing framework classes.
http://rudyjahchan.github.com/Monkey-Patching-Objective-C

We will be playing with these and other ideas at our next Hack Night on Wednesday October 5th if you would like to see more.

Posted in Everything Else | 1 Comment