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

We love jQuery ? many things are now easier/cleaner/more testable using JavaScript rather than ASP.NET (that statement blows my mind, but it's true!). Because of that, we have a lot of JavaScript code. Ideally, we want to develop using readable JavaScript files (even 3rd party files) and deploy
#karl_custom_1 code{color:#833;background:#fcfcfc;} #karl_custom_1 h4{margin:30px 0px 0px 0px;font-color:#fff;font-weight:bold;border-bottom:1px dashed #ccc;font-variant: small-caps} The purpose behind the repository pattern is to provide a layer of abstraction between your domain and data laye
A couple weeks ago Microsoft released their first public version of Oxite - a blogging engine built using ASP.NET MVC. One of the goals of Oxite is "to provide a real-world sample written using ASP.NET MVC". When you take into consideration that ASP.NET MVC is relatively new and scarcely d

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.
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).

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.