Git Disciplined

In our day to day work, one of the most common tools we as developers use is [Git]( In a nutshell, Git is a tool...more.

Using The Option Type Effectively

In a previous [blog post](, craftsman Dave Torre showed how optional types can alleviate common problems with null values. Bulding on that post, we are...more.

Stack Overflow

Let's play a word association game. When I say "stack overflow" what comes to mind? Is it Spolsky and Atwood's popular question and answer site?...more.

The Option Type

I've been writing some [Rust][rust] recently and have finally had my first experiences with the Option type, a data type that wraps either some value...more.

Hide Your Queries

One of the quickest ways to turn a well-factored Rails project into an old-fashioned legacy app is to use ActiveRecord `where` and `find_by_sql` calls outside...more.

Test-Driving the Game Loop pt. 2

[When we last saw our Test-Driven Game Loop](, we hadn’t really made it very far, at least in terms of production code. This is what...more.

Functional-ish Ruby

In a [recent Apprentice Blog of the Week](, Alex Hill detailed one way that we can apply common Ruby patterns to our Clojure code. I’ve...more.

Lispy Elixir

There has been some recent interest in the [Elixir language]( and with good reason, it's an exciting language! Elixir not only brings the power of...more.

Ruby DeRailed: Emergent Data Design

In his talk about [Redis]( at Scottish Ruby Conf a few years ago, [Ryan Briones]( covered the importance of deferring the design of data structures...more.

Higher-Ranked Types

The Hindley-Milner type system is very powerful: it allows you to express functions with complex type signatures in an elegant, readable way. For example, consider...more.

Performing Code Katas

Coauthored by [Kelly Steensma]( Wikipedia defines a kata as a detailed choreographed pattern of movement. Based on the Japanese word meaning "form", katas were originally...more.

Flash - TPP

February 3 2011 I read a nice blog today exploring the Transformation Priority Premise using the flash card kata. The author did it in both...more.

Fib. The T-P Premise.

February 2 2011 Guilherme Silveira wrote a lovely blog exploring the Transformation Priority Premise using the Fibonacci sequence. He posed a suite of tests similar...more.

What is a Bug?

A while back I wrote a little about [bugs]( I got a few questions and objections and the most common one goes something like this:...more.

Transformation Priority Premise Applied

At [SCNA 2012]( I entered into a kata battle against [Aaron Bedra]( The idea was that we'd both perform the [Coin Changer Kata]( live in...more.

Composition over Mixins

This is not the first post [cautioning the use of modules]( on our blog. However, while I do mostly agree with the points raised in...more.

Adapting To Change

“The only constant is Change.” — Heraclitus While it was doubtful that Heraclitus was addressing developers, the sentiment certainly still applies. As developers, we live...more.

Out of Controller

In the beginning of using rails it was amazing at how fast everything was compared to my previous java web experiences. I could finally run...more.

Pointers, Schmointers

I'm writing this blog from the train, my head hung in shame. I'm taking a course in Game Optimization and today something exceptionally embarrassing happened....more.

The future of Lisp

I’ve been thinking about existing Lisps a lot lately and where we’re headed. In particular, I’ve been considering the possibility of writing another Lisp dialect,...more.

Clean This Code

If you follow me on twitter @paytonrules you’ve probably seen me griping at various times about writing a testing framework for Objective-C. I’m currently writing...more.

Walk and Code

A few years ago when we were buying furniture for the first 8th Light office I came across a piece called the WalkStation. It was...more.

Reflection on Hangman

Last week concluded the Hangman Ruby Sparring Tournament. Unlike the previous Battleship Tournament, I put the effort in to write a competitive hangman player (of...more.

Hangman Tournament

Several months ago, I hosted the Ruby Battleship Tournament. It was an all-round fun event where craftsmen sharpened their claws and pitted their skills against...more.

Announcing chiPhone

It’s with great pleasure that I announce the creation of chiPhone, the Chicago iPhone developer’s group, with our first meeting on July 23rd at 6:30....more.


You remember the classic Simon game, right? The one where the electronic devise will blink a color and make a sound that you have to...more.

Erlang and the OCP

OCP was defined in 1988 in Bertrand Meyer’s book “Object Oriented Software Construction” as follows: “Modules should be both open (for extension and adaptation) and...more.

Rinda 101

When building a software system composed of multiple decoupled components, the need typically arises for interprocess coordination and communication. As an example, say that we...more.


Often times while writing meta programming code, I am using the eval function and doing manipulation on method/class/variable names. Today I needed to un–Rubify a...more.

Pair Me Up

I am a better pair than solo developer. For me, software is a collaborative art from the start of a project to the end. Starting...more.

Ruby DSL Blocks

There’s a common pattern I’ve seen for developing DSL in Ruby. It’s used in RSpec, the Statemachine Gem, and Unclebob’s Clean Code talk at RailsConf...more.

Day Two At RailsConf

Hello again from RailsConf. I’ve gone through five presentations. I don’t have any enormous revelations, and no good pictures yet, but I do have some...more.

Ruby and Human Compilers

In Paul Graham’s Book, Hackers and Painters, he talks about patterns and Human Compilers. I started to think about how some traditional Object-Oriented patterns are...more.


Pre–factoring is when you see a piece of code which the story you are working on which has a re–factorings which would make your story...more.

Buffer to the Rescue

Recently I was working on FitNesse to solve the problem of large file uploading and downloading. Previously when a file was downloaded FitNesse would happily...more.