Baking a Cake with Rails

In my [last post][hidden_costs], I cautioned against hastily reacting to the abundance of talks and blog posts describing migrations away from Rails monoliths. A preliminary...more.

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]({{site.baseurl}}/dave-torre/2015/03/11/the-option-type.html), 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]({{site.baseurl}}/eric-smith/2014/08/18/test-driving-the-game-loop-part-1.html), 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]({{site.baseurl}}/alex-hill/2014/07/10/useful-clojure-macros-for-the-object-oriented-programmer.html), 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.

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]({{site.baseurl}}/eric-smith/2013/04/08/we-are-principled-6). 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]({{site.baseurl}}/josh-cheek/2012/02/03/modules-called-they-want-their-integrity-back.html) 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.

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.


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.

Interested in 8th Light's services? Let's talk.

Contact Us