You're on Ops. Debugging Error-s in Invoicing Rails app, as usual. They're stored in MySQL, and accessed through ActiveRecord and some helper methods. They've already...more.
In this multi-series blog post, we're going hands-on through the steps that can help transform the design of a default Rails application into one with...more.
In this multi-series blog post, we're going hands-on through the steps that can help transform the design of a default Rails application into one with...more.
In this multi-series blog post, we're going hands-on through the steps that can help transform the design of a default Rails application into one with...more.
I mostly work with developers who prefer Vim or Emacs as their editor of choice. This is certainly understandable, because each of those editors provides...more.
Being able to run your unit tests quickly from Vim is vital when doing test-driven development. I've often seen developers using Vim to write code,...more.
As a developer there are an infinite number of things to remember: everything from intricacies of the language you’re using to the domain knowledge of...more.
Ruby's low-overhead metaprogramming facilities make it easy to create elegant APIs with minimal effort. As a testament to its power, I can say with a...more.
I'm a proponent of building small, composable pieces over one large piece that does many things. The large piece usually works well, but it eliminates...more.
One of my favorite tips for writing software comes from one of my favorite software role models, Sandi Metz. In her book Practical Object-Oriented Design...more.
Unit tests that fail intermittently, without exposing any production bugs, are the worst. Like the boy who cried wolf, they reduce our confidence that they're...more.
Yesterday, my pairing partner and I came across an interesting situation. The feature we were working on required receiving some data, constructing a date range...more.
I use TDD as my development workflow. Red, green, refactor. It creates a quick feedback cycle, allows me to build momentum, and gives me confidence...more.
The process of learning Ruby has brought several surprises. Some of which are more pleasant than others. The latest I have encountered is that Array#sort...more.
Keep your cookies to yourself Browser cookies are a good way to provide a stateless protocol with some memory. Unfortunately, they're also good for hijacking...more.
I’ve been using routing constraints a lot lately. Before I learned about constraints, my controllers were littered with data typing checks and filters, some of...more.
Don’t trust outside data! SQL injection attacks were once considered the greatest threat plaguing the Internet. They continue to be the source of many large...more.
A short post to start the new year. Let's imagine that you are building an application that requires the application of a specific algorithm, but...more.
Protect your users, take password management seriously. There are too many databases in the world with completely unencrypted passwords. Even when databases have encrypted passwords,...more.
A Rails application has many configuration options. Learn how to test one of them. Why? Well, what are the consequences of an improperly configurated application?...more.
TL; DR Rather than including modules and hooking into .included, write a method that adds the behaviour (even if the method just includes and extends)....more.
Do you use validates_uniqueness_of in Rails? Do you feel confident that it works to prevent duplicate records? If you’re like most of us, you won’t...more.
I have been working on migrating half a dozen 8th Light projects to our continuous integration server last week. Barring one open-source gem project, most...more.
Let's start off with some backstory: there was a time when only one Ruby implementation existed in the world: Matz's own Ruby Interpreter (MRI) written...more.
We encountered a strange spec failure today in our continuous integration build. It’s a Rails project, we’re using RSpec, and this was the failing expectation...more.
“It's kind of a Frankenstein.” We’ve used this phrase more than a few times to describe the architecture and technology used to design a product...more.
Here’s the situation. You’ve spent days working on an open source project. Your sweat, blood, and tears have been poured into thousands of lines of...more.
I spent the beginning of my career working on embedded systems for some audio company. These embedded systems were my first love in programming and...more.
I’ve recorded my Langston’s Ant kata for all to see. This particular kata, with slight variations, has been in front of an audience twice before....more.
Yesterday in my talk at RubyConf2008, I announced the commencement of the Ruby Battleship Sparring Tournament. This is an open tournament. All are welcome to...more.
I’m pleased to announce the open source Limelight project: A thin client and application framework written in Ruby (JRuby). Check it out at https://github.com/slagyr/limelight. https://github.com/slagyr/limelight...more.
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.
Recently, I started reading Knuth’s Art of Computer Science. To spice up the exercises, I am writing them out in Ruby. Thinking about the basic...more.
Ruby files have to require other files. There’s no avoiding it. Techniques to manage require statements are numerous and varied. Having tried most of them,...more.
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.
Last night I presented the Ruby Statemachine Gem to the Chicago Ruby Users Group (Chirb) Below are links to download the slides and coding example...more.
I consider Statemachines to be a programming gem. An invaluable tool for the software craftsman’s toolkit. It’s not everyday that a Statemachine comes in handy,...more.
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.