Blah Blah Blah

Separating the Work a System Does From the Interface to that Work

The work a system does and the interface to that work should be separated from one another. This is a concept that evolves from the Single Responsibility Principle and from Test Driven Development. Whether this work be hosted in a console program, a GUI program, exposed as a service for outside systems to utilize, or any other possible configuration, follow SRP and keep the work separate from the hosting interface that exposes the work to a client (a client in this case can be a person or another software system).

Class Invariants and Use of Object Initializers

If you are writing object oriented code and you try to ensure that your classes maintain their invariants (i.e., ensure that your classes are always in a valid and self-consistent state), the new object initializer feature of C# will present you with some new challenges.

Remove Paths in Visual Studio Dialogs

Ever mistype a path during Find and then have to live with it in the list forever?

Get Documents Folder in PowerShell

The default PowerShell profile does not contain a variable for the Documents folder. Meanwhile Windows does not contain an environment variable for it either.

Deep Agile 2008

Rjae, Rob, Kasia Baron, and I went to the Deep Agile 2008 conference run by New England Agile Bazaar. The event was held over the course of two days at MIT's Tang Hall and was truly outstanding. The structure of it, as noted at Agile Bazaar's website, was a one-on-one discussion, debate-style, between Robert Martin and James Coplien and it focused on the realities of Agile software development.

Personalized Monitor Position

Are you running Vista? Do you have dual monitors? Last question: do you have them stacked vertically?

Template Method Pattern in Ruby

One of the most ubiquitous patterns in life is the template. It enables us to generalize behavior - thus ignoring or postponing complexity.

This ability to generalize behavior - deferring derivative details - turns out to be extremely useful in agile software development. It encourages mock-object practices. It encourages simplest possible solutions. It encourages test-driven development. And most importantly it embraces change.

Closures in Ruby, Part I

Closures are a powerful concept in some languages - a powerful tool in others. In my mind a tool is something I can ask for by name - as in, "I'd like a reciprocating saw, please." Languages where closures are truly a tool include Lisp, Python, Ruby, among others. For the time being I will use Ruby to discuss closures - although a switch over to Lisp may be necessary.

Visual Studio Wish List

Every day I work I wish for a single feature in Visual Studio: the ability to move a code file from Visual Studio to another monitor. I can't stand the fact that I can't do this! Even if I switch to MDI view Visual Studio only lets each window move around within Visual Studio and not to other monitors. I would love to have a few code files dispersed on various monitors so that I can see more of what I'm doing at any given time.

In this day and age is this too much to ask? Why the constraint?

ReferenceEquals and ReSharper Assertion Methods

For those of us that use System.Object.ReferenceEquals when checking for null it can be annoying that ReSharper indicates Possible 'System.NullReferenceException' even though that is precisely what we are doing! There is a solution: add an Assertion Method to ReSharper's Value Analysis Options.

Syndicate content