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

In my last NHibernate post I mentioned that NHibernate is great because it does the heavy lifting for the common tasks that make up 95% of my data access layer, while letting me tweak the remaining 5% as needed. Let's look at some of the ways you can tweak, or even circumvent NHibernate for thos
Please, Just Remember One Thing Just for a few seconds forget everything you know about NHibernate. Good. Now, before I snap my fingers and everything comes flooding back, the only thing you need to know about NHibernate is that whenever you need to, you can easily circumvent it and do whatever is n
A month ago I released CodeBetter.Canvas, a simple application with equally simple goals: Provide developers with a starting point for new ASP.NET MVC projects Provide developers with a learning tool for oft-talked about tools/patterns Instead of building a full-fledge application (like another bl
Almost two years ago, to the day, I completely gave up on Silverlight. How do I remember the day so clearly? Because every now and I again, I get an email notification that someone has replied to my following forum post: http://silverlight.net/forums/p/1334/216456.aspx. In it, I asked why the Shape

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.