Skip to content

Browse our blogs activity over the years…

  • Jan
  • Feb
  • Mar
  • Apr
  • May
  • Jun
  • Jul
  • Aug
  • Sep
  • Oct
  • Nov
  • Dec
  • Sun
  • Mon
  • Tue
  • Wed
  • Thu
  • Fri
  • Sat
2026
A Step by Step Guide to Hosting TeamCity in IIS 7

A Step by Step Guide to Hosting TeamCity in IIS 7

Howard van Rooijen

Step-by-step guide on setting up TeamCity and using IIS as a reverse proxy for custom domain access.
Layering your API

Layering your API

Matthew Adams

Incrementally adding behaviour should be only incrementally more complex. Layer your APIs so simple tasks stay simple, while still offering a discoverable path to advanced features.
RX and INotifyPropertyChanged

RX and INotifyPropertyChanged

Matthew Adams

Cleaner Reactive Extensions over INotifyPropertyChanged in C#: helper methods that simplify Expression-based subscriptions for property changes in MVVM apps.
Silverlight CommandManager

Silverlight CommandManager

Matthew Adams

Silverlight has no equivalent to WPF's CommandManager and its RequerySuggested event. This post explores why, and a pattern for porting the behaviour across.
Component discovery & composition – 1f: Generalizing registration

Component discovery & composition – 1f: Generalizing registration

Matthew Adams

This post demonstrates how to generalize component registration using C# generics and base classes, reducing boilerplate code while maintaining the convention-based approach to container bootstrapping with MEF and Castle Windsor.
A follow up to "A Short Tale of a Deceptively Slow LINQ Expression"

A follow up to "A Short Tale of a Deceptively Slow LINQ Expression"

Howard van Rooijen

My last post caused a number of responses from the community. I discuss them here and provide a little bit more context.
A Short Tale of a Deceptively Slow LINQ Expression

A Short Tale of a Deceptively Slow LINQ Expression

Howard van Rooijen

A simple-looking foreach loop was taking over 200 seconds. The culprit: LINQ's deferred execution re-evaluating a query on every iteration.
Component discovery & composition – 1e: Componentizing registration

Component discovery & composition – 1e: Componentizing registration

Matthew Adams

This post demonstrates how to componentize registration by combining MEF's discovery capabilities with Castle Windsor's conventional registration, enabling automatic bootstrapping of self-describing components.
Component discovery & composition – Part 1d: Conventions

Component discovery & composition – Part 1d: Conventions

Matthew Adams

This post explores Castle.Windsor's fluent API for convention-based component registration, enabling low-ceremony dependency injection through namespace matching and interface implementation patterns.
Component discovery & composition – Part 1c: Castle.Windsor

Component discovery & composition – Part 1c: Castle.Windsor

Matthew Adams

This post explores Castle.Windsor's registration and resolution model for dependency injection, contrasting its convention-based approach with MEF's explicit import/export attributes.
Introducing Templify

Introducing Templify

Howard van Rooijen

Templify is a simple tool for tokenising and packaging entire code based solutions. It's designed to unfurl demos / quickstarts / solution templates.
Component discovery and composition Part 1b: Fundamentals - MEF

Component discovery and composition Part 1b: Fundamentals - MEF

Matthew Adams

This post explores MEF (Managed Extensibility Framework) for component discovery and composition in .NET, demonstrating its export/import attributes and explaining its limitations compared to full IoC containers.
Component discovery and composition Part 1: Fundamentals

Component discovery and composition Part 1: Fundamentals

Matthew Adams

This post introduces the fundamentals of component discovery and composition in .NET, exploring how MEF and Castle.Windsor can be combined to create loosely-coupled, modular application architectures.
Work Smarter, Not Harder

Work Smarter, Not Harder

Howard van Rooijen

Feedback loops are an incredibly powerful force. In order adopt a continuous improvement mindset, you need to set up positive feedback loops. Here's how I've internalised the 'Work Smarter, Not Harder' mantra.