About Me

I'm an Ottawa-based software developer, specializing in .NET enterprise development. I'm passionate about what I do and believe that continuous improvement and learning is essential to our craft. I'm a practitioner of TDD and DDD, and a strong proponent of OSS tools. I'm a fan of Ruby, will always be fond of C, know Java and am considering learning either objective-c or python. You can follow me through my blog as well as twitter.

Latest Blog Posts

iptables is a linux application that allows you to configure the built-in linux firewall. There are abstraction layers built on top of it, including nice GUIs, but I recently had some very basic rules I wanted to implement, and figured I'd learn how to do it directly in iptables. It turned out t
I recently needed a configuration mechanism which would detect changes without requiring an application domain restart. I also wanted to move away from XML. This is what I came up with (and hopefully I'll get some helpful feedback). First, we declare a ConfigurationData object which holds our ac
Exception handling has been talked about a lot over the last decade and a half. However, despite a general consensus on how to properly handle exceptions, a divide on usage continues to exist. Improper exception handling is easy to spot, easy to avoid, and is a simple code (and developer) quality me
Ever since ASP.NET MVC was announced/released, there's been a lot of talk about it with respect to ASP.NET WebForms. People want to know which technology they should use, and are likely confused by the fact that there isn't a consensus amongst respected developers with respect to which of th

My Projects

Often referred to as the ALT.NET book, this is a free 79 page ebook covering core topics such as Dependency Injection, O/R Mapping, Unit Testing and more.
A twitter utility that enabled you to tweet more than 140 characters
A simple aggregate of must-read blogs
The .NET Extension Library adds common functionality to .NET's system libraries. Most new features are added to existing types via extension methods. The rest of the features are either new classes or improvements to existing classes (such as the introduction of an ICache interface for greater abstraction).
A lightweight JSON serializer and deserializer for the .NET Compact Framework (v2.0).
An AMF serializer/deserializer for .NET (no longer being maintained).

My Articles

A fundamental aspect of jQuery is the ease with which developers can build plugins. In this article we look at a simple plugin to add a numeric mask to any textbox.
JQuery is a lightweight, yet powerful, JavaScript library specializing in DOM traversal and manipulation, event handling, and extensibility. It is quickly becoming the premiere JavaScript library of choice due to its elegant and simple syntax.
Ruby is a dynamic object oriented programming language which has found growing popularity amongst all types of developers. Shoes is a cross-platform framework for building desktop applications in Ruby. Shoes is particularly well suited as a Ruby-learning tool due to its simplicity and ability to quickly produce useful applications.
Within a project, classes will inevitably rely on each other. In some situations, this coupling can make code difficult to unit test or dynamically extend. A common solution is to this problem is to use a Dependency Injection Pattern. In this article we'll look at how we can leverage the open-source Dependency Injection Framework called StructureMap, within The Code Wiki application.
Become a master of your databinding code, including an solid understanding of how databinding works and how to get the most out of it. Learn how to do advanced dynamic formatting as well as how to nest binding controls within each other.
Create isolated settings, strongly-typed objects and collections inside your web.config by leveraging the flexibility of .Net to create your own configuration sections and handler.
The Session and Cache objects each have their own advantages making it tricky to know which to use for a given piece of data. SessionCache is a simple class meant to bring together the best of both worlds.
There are situations for which untyped DataSets may not be the best solution for data manipulation. The goal of this guide is to explore an alternative to DataSets: custom entities and collections.
Improve the way data is shared across user controls and pages, this is an older article which isn't as relevant given the rise of ASP.NET MVC.
An older series dedicated to building robust multilingual websites, leveraging a custom (and very simple) set of user controls and resource manager. Still relevant today as far as I'm concerned.
An older series dedicated to building robust multilingual websites, extends part 1 by extending the controls, discussing database design, and using URL rewriting. Still relevant today as far as I'm concerned.
An older series dedicated to building robust multilingual websites, extends part 1 by extendnig the resource manager, and addng javascript support. Still relevant today as far as I'm concerned.