Posts

Showing posts from 2011

Visual Studio Hotkey for Web Devs: Attach to W3WP

Friends keep asking for this, so here are the instructions:

In VS2010 open the Tools / Macros / Macro IDE menu itemCreate or edit the MyMacros projectAdd a new Module called "AttachToProcess"Replace all the code with the following:Imports System Imports EnvDTE Imports EnvDTE80 Imports EnvDTE90 Imports EnvDTE90a Imports EnvDTE100 Imports System.Diagnostics Public Module AttachToProcess Sub IISWorkerProcess() Dim attached As Boolean = False Dim process As EnvDTE.Process For Each process In DTE.Debugger.LocalProcesses If process.Name.EndsWith("w3wp.exe") Then process.Attach() attached = True End If Next If Not attached Then MsgBox("Couldn't find w3wp.exe") End If End Sub End Module Save this macroClose the Macro IDERight click the VS2010 menu barSelect Customize...Click Keyboard...Select Macros.MyMacros.AttachToProcess.IISWorkerP…

Global Day of Coderetreat - Attendee Report

Yesterday was my first opportunity to attend a Coderetreat. I am so glad I did. What an amazing day. I think every developer should attend a Coderetreat. Using the closing circle format, allow me to share my experience as an attendee of the Salt Lake City event.

What, if anything, did you learn today? I learned that I need to slow down and focus on writing code well. The mute session taught me how hard it is to see an architectural vision from the code. It felt like I was painting a picture using the stippling technique and my pair could only see the dots, not the image. I learned that the idea of intention-revealing, self-documenting code cannot be judged by the author only by another developer.
I also learned that Amber Smalltalk is pretty sweet. Thanks, Johnny T!

What, if anything, surprised you today? The biggest surprise for me was how many developers said the Coderetreat inspired them to go out and actually do TDD. I had expected that most of the attendees would be rather dogmat…

Global Day of Coderetreat - Organizing

Yesterday was the first ever Global Day of Coderetreat. Using the closing circle format, allow me to share my experience as an organizer of the Salt Lake City event.

What, if anything, did you learn today? The first lesson I (re-)learned as an organizer is that we have an awesome community both globally and locally. There were so many people willing to help out and make this a great day for coders. Of the many tasks required to make the day happen, I could only do a portion on my own.

Kay Johansen did an amazing job as the facilitator. I don't know how to thank her enough for all she did.Mike Clement took the lead in communicating with the facility sponsor including making last minute calls to get doors unlocked so we could set up early.The STG office staff, including Crystal, Kelly, Thayne, Marth, Ron and Chick, took care of our catering needs including correcting a communication error with the restaurant.All of the attendees helped clean setup and clean up the room.
The most impo…

Linux and Coderetreat

So, I haven't posted in a while. I guess I've been busy? I dunno. I have been organizing/coordinating the Salt Lake City event for Global Day of Coderetreat. I guess that is keeping me busy. We have a facility, a facilitator and meal sponsor, so we are getting pretty close to ready. Good thing, since it is only 3 weeks away! Oh yeah, we're almost sold out too, so if you wanna come, you better register soon!

The other thing eating up my free time is Linux. Specifically Ubuntu. As you may remember, I decided to run an Ubuntu VM on my Windows 7 laptop. I really want to expand my skills in new (and somewhat uncomfortable) directions and this seemed like a great option. I have been going through the 7 Languages in 7 Weeks book with the Utah Software Craftsmanship group and it seems like the Linux support for a lot of these languages is better/easier.

Here is my experience and what I have learned so far:

The first thing I did was use the Wubi installer to create a dual-boot, pse…

SOA : RPC : : Object Oriented Design : Procedural Programming

Back in 2008, I attended SDBest Practices in Boston. I had recently read Jimmy Nilsson's Domain Driven Design book. One of the contributors to the book was Udi Dahan, so when I say that he was talking at the conference, I was excited to attend his session: How to Avoid a Failed SOA. At that point, I didn't know much about Service Oriented Architecture, but what he described as a failure mode sounded like an architecture I had discussed and planned with coworkers. That session was the start of a journey into learning about SOA.

I spend my spare time reading about SOA. I read Udi's blog. I read Thomas Erl's book Service Oriented Architecture. I read SOA in Practice. I played with various ESBs and Message Brokers. I built a pretty sweet prototype of my company's systems using NServiceBus. I even attended the SOA World 2009 conference in NYC and a full week immersion course on SOA taught by Jean-Jacques Dubray. In the end, I never took any of it to production because i…

Into the mine shaft..

Image
I think we are all somewhat familiar with the concept of canaries in coal mines. As recently as 25 years ago, canaries were taken into coal mines as a way to detect poisonous gasses such as CO2 and methane. The canary would sing all day long unless overcome by the gasses. At this point, the miners would realize their environment had become toxic and they would flee for their lives.


Development teams sometimes find that they have a canary in their midst. This person seems to point out unseen dangers ahead based on the current path. The things that the canary sings about aren't really affecting the team, but he or she claims they will if not corrected. How do you know if you have a canary or a whiner? That is tricky. The best advice I have is to look to experience. Does the person have experience working with multiple teams in multiple environments? Has she experienced similar situations in the past? Does she give recommendations for alternate courses of action? Is she passionate ab…

Model View Presenter - A Path Forward from WebForms

Image
This post is a review of my September 10th presentation at Utah Code Camp.

"So you read and hear about Test Driven Development, MVC Frameworks, Continuous Integration and the safety net provided by high levels of unit test coverage. But you work on a WebForms app that has been around since .NET 1.1. It has thousands of lines of code in the code behind classes and you know that isn't easy to test. How can you experience all of these wonderful things you read about? The Model View Presenter pattern is here to rescue you. We will discuss the purpose and structure of MVP as it is applied to WebForms. We will go through a demonstration of some relatively safe refactorings that allow you to start bringing your unruly code under test. We will then add tests using NUnit and Moq. We will wrap up the discussion with a road map from WebForms chaos through Model View Present into the promised land of the MVC frameworks."

Having worked on ASP.NET web sites/apps since .NET 1.0 beta 1, …

Premature Configurability Design Smell

Premature Configurability is making some aspect of your application configurable (or data driven) before anyone has ever asked for a change to that part of the system.

This is a topic I have been contemplating for a while. I started writing this post at least 5 different times, but I was never satisfied with my results. Fortunately, Alex Papadimoulis of The Daily WTF recently presented on the topic at Code PaLOUsa and he said everything I wanted to say. He refers to the smell as Soft Coding. Please watch his presentation and read his post on the topic.

No More Ninjas

Movie ninjas are awesome with the kicking, punching, jumping, etc. Code ninjas are unwelcome on my team.

Let's take a brief look at the characteristics of the ninja:
Ninjas have great skillNinjas work aloneNinjas are stealthyNinjas use unorthodox tacticsNinjas are specialists in espionage, sabotage and assassination
Great Skill - That sounds like what I want in members of my team, provided of course that it doesn't come with Great Arrogance.
Working Alone - Uh oh. No thanks. I want people who collaborate and act as a team. Paired programming for a large portion of the day is a must.
Stealthy - I really don't want anyone sneaking around in my code. I want clear names and explicit abstractions. Make your movements obvious. Create work that you are proud to sign (and then sign it on check in, not in comments.)
Unorthodox Tactics - I liken this to creating your own ORM or web framework. Sure, there may be advantages sometimes, but these are most often outweighed by the constant…

Agile 2011 - Day 4-5

Thursday I went to WIP and Kaizen: Key Tools for Enabling Continuous Improvement: Michael DePaoli. It was a really interesting talk about how you need to make change slowly, incrementally and steadily to arrive at the organizational goal without causing a fight or flight reaction in your people. I enjoyed it though I expected it to be more about personal improvement for some reason.

I wasn't really excited about any of the late morning sessions, so I bailed and went to Coach's Corner to hang out with Tim Ottinger and ended up meeting Colin Jones from 8th Light and then talking with Matt Barcomb from LeanDog for nearly an hour.

Around noon, Evana Fredricko, my dance partner for Brian Marick's session on Tango, The Stance of Reaction, and Pair Programming arrived. We went out for a slice of pizza near the hotel, then returned for a very fun intro to tango and a great discussion on paired programming. A correlation was drawn between the way dance is taught and the way we sho…

Agile 2011 - Day 3

I was too tired to post last night. So I am in the Coach's Corner doing the write up now.

The Plan:
Who even cares?

Actual:
I started the day in Agile isn't Enough: Jeremy Lightsmith. The key discussions were on:
What have you read besides books on agile that has helped your job?A/B TestingPaper PrototypingGetting Things DoneTheory of Constraints Current Reality Tree
The item that was new to me was the Current Reality Tree. I am adding that to my queue of things to study.

The second session of the day was Flow Games: Karl Scotland, Eric Willeke. We played a game where we had to toss 20 balls around the group and the WIP and cycle time were tracked by the presenters. We were able to see the affects of our changes to the system and how we could shorten cycle time.

I had lunch at Squatter's with one of my closest friends and that was a great break in the middle of the day.

The first afternoon session was Tests as a Means of Abstraction: Brian Marick, Michael Feathers. This was…

Agile 2011 - Day 2

This is basically my 3rd day a the conference hotel and I am starting to feel it. I had to unfollow the Twitter hashtag because of information overload. Despite that, this is still exactly where I want to be.

The Plan:
Attend the following: keynote on positivity, "What we have learned so far" by Chet Hendrickson and Ron Jeffries, "Deliberate Discovery" by Liz Keogh and Pat Maddox, "It Depends on Context" by Ainsley Nies and Diana Larsen, "Getting Software Projects Done Right" by Bob Martin, "Industry Experts Panel," and "Dinner with a Stranger."

Actual:
The keynote on positivity by Barbara Fredrickson was very interesting. It seems very closely correlated with the work of Martin Seligman whose book "Learned Optimism" I have been reading. A quick search on google reveals that this correlation is not just in my head, but I am too tired to dig deeper tonight. I tried to pick up her book and ask her about the similariti…

Agile 2011 - Day 1

Holy shit! The internet isn't just a series of tubes, it's real! This may affect the way I interact in here... ;-) Anyway, I actually got to meet and shake hands with so many amazing people today including: Michael Feathers, Bob Martin, Angela Harms, Michael Hill, Tim Ottinger, Jeff Langr, Martin Fowler. My mind is nearly blown. There is so much talent and experience here I almost can't believe it.

The Plan:
Attend Refactoring in the 4th Dimension: Michael Feathers in the morning and The Transformation Priority Premise: Robert Martin in the afternoon.

Actual:
The Refactoring session was really interesting. Thinking about how your code base evolves as opposed to just looking at a point in time leads to some interesting metrics. A lot of research needs to be done in this area. Also, my Ruby skills are teh suck. I really need to practice and build a nice breakable toy.

Lunch was better than I expected and worth the wait. The highlight was a brief conversation with Angela Harm…

Agile 2011 - Day 0

While there were no sessions, I think that the Agile 2011 conference technically started today. I was there anyway. Here is the report.

The Plan:
Head up to the Grand America for the 5:15 First Time Attendees session. Hang out until 7:00 then go over to the Zombie Walk.

Actual:
I went to SLC Airport to pick up Brian Marick and take him to the hotel at noon. He treated me to an excellent lunch at Squatters. I had the Black and Bleu burger which is at least as delicious as it sounds. While the food was great, the conversation was better. It was a wonderful opportunity for me to make the hang and learn directly from a well-known master. We spoke at length about software, languages, pets, programming jobs, XP, psychology and gift economies. It was an amazing lunch.
After dropping Brian off at his hotel, I didn't really have time to drive home and back before the 5:15 session, so I decided to wonder around the Grand America. Soon I was helping the volunteers sort shirts and prep welcom…

Current Status: Optimism and Ruby

So I am reading this book: Learned Optimism. It isn't the usual tech fair, but it is full of scientific research rather than fluff, and the topic is something I need right now.

I went to the Salt Lake Ruby Brigade last night. Those guys are awesome. They only made fun me for using Windows once. ;-)

I should be studying Clojure so I am ready for Michael Feathers and Brian Marick's talk at Agile this year.

Not to mention prepping for my talk(s) at Utah Code Camp...

Inspiring Developers to Greatness

How freaking pretentious is that title! And you thought my arrogance knew no bounds. Silly mortal.

Anyway, this is a question that I have been pondering, and asking, for a while. I wish there were a simple answer, but I also wish I could lose weight while continuing to eat like I do and never exercise.

What I have come up with so far are two factors that contribute greatly to the inspiration of developers, but do not actually guarantee anything.

First, you need to give developers some ability to control their destiny. Developers are naturally curious and creative people, so given a little freedom, they are likely to do something interesting. Or maybe they won't, but they will do something out of the ordinary and they will extend their way of thinking and that can only help their ability to do their jobs. [Thanks to Jason Staten for crystallizing this for me.]

The second common thread in these discussions is "where I work, we do..." The company culture of giving a crap about

Utah Ruby Users Group - First Impression

So, last night I went to the URUG meeting. I have been dabbling in Ruby in the evenings for a while now and I decided it was time for a mentor. Dave Brady has been unwittingly filling that role, and in addition to telling me to go through the Ruby Koans, he suggested a little community involvement. I am thrilled that he did because it was the best user group I have attended.

It started off with the AA style My-name-is-and-I-have-been-doing-Ruby-for-X-years introductions. This was a nice change from the anonymous sea of faces at the .NET User Group.

We got right down to the business of blowing my mind with a presentation on EigenClasses. Basically, this seems to be a private class on the instance object that allows you to modify the instance without modifying all instances of the actual class. If I got that wrong, please flame the comments.

Next was Rack middleware. I drew a lot of analogies to FubuMVC. Again, flames in the comments, please.

I couldn't get wireless connectivity, and m…

Status Update: Videos for Great Good

The NDC 2011 videos are available via torrent: http://thezendev.com/blog/ndc-2011-video-torrent (direct link). My download is still in progress, but the handful I have already watched are as excellent as the last 2 years, so I highly recommend them.

Also, I just downloaded and started watching the Structure and Interpretation of Computer Programs video series. Mind expansion in process. Updates as events warrant.

Not a video, but more like a video game: http://rubykoans.com/. I am determined to learn me some Ruby. I started last night and I'm about a third of the way through.

That is all for now.

Review: Apprenticeship Patterns

We have been reading Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman as part of our Sequential Learning in the Utah Software Craftsmanship Group. The discussions have been excellent and have lead to greater understanding of the material, at least for me.

The explicit discussion of how to improve has been enlightening for me. There are many patterns that I am now or have in the past applied to my career. There are a few that are new to me. Many of the recommended Actions push me out of my comfort zone.

The assertion that there are not yet any Master Software Craftsmen came as a surprise. There are quite a few people whose works I follow who I have considered masters for a while. Either way, there is a lot of room for improvement all around, so I am excited to Rub Elbows with other aspiring craftsmen.

My favorite quote from the book was "Moreover, most programmers think they are above average. The sad reality is that, due to the skewed distribution of skill illus…

Interaction Tests with Mocks

I seem to always be working on large, unwieldy WebForms apps. Because I am test infected, this means I often find myself refactoring large amounts of code out of code behind classes into Presenters a la Model-View-Presenter so that I can unit test the Application logic as the first step toward a proper Domain model, separation of concerns and, eventually, MVC. Because the only way to know that most of these pages is working is by looking at the UI, I use interaction style tests to verify that the UI is displaying the correct data. Mocks and Stubs become crucial elements of my tests. I used to use Rhino Mocks, but for nearly a year, I have been using Moq. Overall, I prefer Moq, though I don't have any specific reasons why.

Here is a (somewhat contrived) example of how I have been writing these tests using Rhino Mocks:

[Test]
public void HandlePageLoad_displays_client_full_name()
{
var clientRepositoryMock = MockRepository.GenerateMock<IClienRepository>();
var viewMock = MockRepos…

Review: The Clean Coder

TL;DR - If you care about software development at all, read this book now!This book is a condensation and distillation of more than 40 years of industry experience. It is an amazing read. The book expresses the concept of professionalism in the clear, simple (not simplistic,) unapologetic style that Bob uses in all his writing. At a short 204 pages, you can read it in a weekend (like I did.)
Having been involved in Agile (XP, XPish, ScrumBut) projects for several years and recently in the software craftsmanship movement, many of the concepts in the book were familiar.
The chapters on Saying Yes, Saying No and Estimation really spoke to me. I have had many experiences where I have agreed to "try." Now I see the danger of that statement clearly. I have also had experiences where I have stayed firm on my estimates and been encouraged to feel as though I was not a committed team player. I now have additional tools to help me combat that feeling and take professional actions despit…

MicroTip: Searching

Finding the correct code to edit is essential. Here are a few shortcuts to make that easier:
Ctrl+I => Incremental search. Just hit the keystroke and start typing. Your cursor will move to the next match. Ctrl+F => You better know this one! Ctrl+Shift+F => Find All. F3 => Next match. Ctrl+Shift+F7 => Highlight usages. Esc clears the highlight. Use it more than once is you will see it is a stack. Alt+F7 => Find usages. Excellent for detecting the scope of a refactoring.
Practice these until they are burned into your fingers. I honestly had to execute the command and watch my fingers.

Ubuntu 11.04

I updated yesterday. So far, so good. Well, mostly. The top 2 options in my boot menu don't actually work, they just load a black screen and I have to power off the machine and try again. But the next option works like a champ and I get some nifty new features. I hope to figure out what those are in the near future . . .

MicroTip: ReSharper Navigation

I've read a couple times that the difference between the apprentice and the master performing a the same task isn't one big thing, it is many, many small things that together make a big difference. To that end, I am going to share the small things that help me work more efficiently under the title MicroTips. Here is the first of (hopefully) many:

ReSharper is a very powerful add-on for Visual Studio that improves the way one develops .NET code, but only if you know how to use it. (To see a ReSharper Jedi in action, go here.) One of the primary ways it improves one's ability to express thought in code is to eliminate the need to context switch from keyboard to mouse for navigation.

First of all, you need to configure the keyboard shortcuts. Do yourself a favor and learn the IntelliJ IDEA shortcuts now, because you will eventually find the Visual Studio flavored shortcuts are inefficient as they each require 2 keystrokes for common activities while the IDEA shortcuts only requ…

You’re not a software craftsman if…

Software craftsmanship is the new fad to replace ALT.NET and Agile as the cool thing to do if you actually like writing software. This post is inspired by a recent post by Whitney Hess about UX designers.

There is a lot of debate about that software craftsmanship means. See my previous post so you can get started on your education.

YOU’RE NOT A SOFTWARE CRAFTSMAN IF… You don't write code as a primary function of your job. Software craftsmanship is about crafting software. It isn't about being a manager, scrum master or (PowerPoint) architect. It's about creating code that helps people. If you are once involved directly in code, this doesn't count. A craftsman is involved in the craft, not a parallel/supporting craft.

You aren't reading. Blogs, books, magazines (really? do people still get magazines?) are great sources of collective experience. You can't learn do it all on your own, so a wise programmer (person) attempts to learn from the experience of others. Per…

What is a Software Craftsman?

What is a craftsman? What is a Software Craftsman? There is a lot of debate. Educate yourself and make up your own mind...

This is a little old, but I wanted to make it available so that I could reference it in another post.

The Manifesto
The Software Craftsmanship Manifesto

The Book
Software Craftsmanship: The New Imperative

The Other Book
Apprenticeship Patterns - Guidance for the Aspiring Software Craftsman

Pete McBreen's Response to The Manifesto
Software Craftsmanship Revisited

David Harvey speaks to the topic
Danger! Software Craftsmen at Work

Dan North starts a war
Programming is not a craft

Liz Keogh explains her discomfort with the software craftsmanship manifesto
Why I didn’t sign the Software Craftsmanship manifesto

Gil Zilberfeld draws a comparison between software craftsmanship and alt.net
The Path Already Taken

Jason Gorman wants us to avoid getting hung up on labels
Enough With The Software Holy Wars!

Michael Feathers looks for more deliberate practice in our work
The Thing of Software …

Ruby Inspired Sugary Syntactical Goodness for C#

I have been playing with Ruby recently and it has lead me to want a couple of methods off of commonly used objects. I have found myself typing each and times into my VS editor regularly rather than curse my primary language, I decided that I should just implement the the missing functions. It is surprisingly easy to do. Here are some snippets for you to drop into a static class:

//Each & Times
public static void Each<T>(this IEnumerable<T> enumerable, Action<T> block)
{
foreach (T item in enumerable)
{
block.Invoke(item);
}
}

public static void Times(this int count, Action block)
{
for (int i = 0; i < count; i++)
{
block.Invoke();
}
}

public static void Times(this int count, Action<int> block)
{
for (int i = 0; i < count; i++)
{
block.Invoke(i);
}
}

The usage should be fairly straightforward, but just in case you need a pointer, here is some code I took from one of my Bowling Game Kata practice sessions:

21.Times(() => _game.Roll(0));
...
private void Mult…

Review: Adrenaline Junkies and Template Zombies

This is another book in the project management vein. I put it in my Amazon wish list about a year and a half ago, though I only recently got around to buying it. I had a manager strongly dissuade me from reading it based on title. Apparently, Zombies are not approved work fare. ;-)

On the one hand, this book was a fascinating read because so many of the patterns were familiar. Seeing that my experiences haven't been unique, but are often common enough that they have been identified and named was interesting to me. On the other hand, it was a little bit depressing because I had hoped that the industry was more mature than what I have experienced. Apparently, there is a lot of opportunity for improvement everywhere.

The idea of using patterns to describe software development project behaviors struck me as quite appropriate. Unfortunately, the book mostly just presents anecdotes and stories. The patterns all have catchy, if sometimes misleading, names and all have a distillation of th…

Utah Code Camp

Saturday I attended the Utah Code Camp. Despite my previous lack of interest, I decided that this time I would attend out of curiosity if nothing else. I have been invited before, but it never seemed like a good way to spend a Saturday. I have attended a few of the larger software conferences including SD Best Practices and SOA World/AJAX World as well as watching session videos from NDC and QCon. I wasn't really expecting much from a free, local conference.
Wow! I couldn't have been more wrong! Saturday was amazing! I attended 4 sessions that introduced me to new technology and 2 sessions on topics that I a quite passionate about already. All of the speakers were well prepared and interesting. The free lunch (provided by my employer: STG) was also nice. I didn't win any prizes, but I wasn't really that interested in them anyway.
Introduction to Erlang I have been meaning to learn a little about functional programming for a while. I am reading 7 Languages in 7 Weeks pa…

Object Oriented Design Resources

I was recently asked where one might find some good resources on object oriented design. Since the internet is full of free resources on the topic, I thought it might be useful to point out the ones that have helped me most.
Let's start with the SOLID principles. Roy Osherove is kind enough to host a video of the talk Uncle Bob Martin gave at the Norwegian Developers Conference in 2009 describing these principles. Of course, you can always read the about the principles on Uncle Bob's blog. In addition to SOLID, Uncle Bob encourages us to create Clean Code.
Test Driven Development is a known technique for building consistently well designed of software systems. As Michael Feathers demonstrates, unit testing in an excellent way to expose the flaws in your design.
Of course, one needs some idea of where to start, so learning about domain driven design, design patterns and architectural patterns are all crucial.

Wrapper Classes

A couple of the developers involved in our hiring process seem to be obsessed with the different wrapper patterns. That got me thinking about the differences between the Decorator, Adapter, Facade and Proxy patterns.
Here is a quick summary that compares and contrasts these four patterns: The Decorator wraps a single class, exposes the same interface and adds functionality to the wrapped class which is injected into the Decorator.The Adapter wraps a single class and changes its interface while maintaining functionality. Usually this is done to make the class easier to use in the consuming system.The Facade wraps multiple classes and provides a simplified interface for using them together.The Proxy wraps a single class and is similar to the Decorator in implementation, though it does not extend the functionality of the class, but hides an implementation detail such as network transport or lazy loading. The consumer shouldn't know it has a proxy rather than the real object.
This isn…

Software Layers

TL;DR: Please learn the currently accepted definitions terms so that you can use them correctly.I am regularly amazed to see developers, whose primary job function is Applying Proper Names to Things, misapply new (to them) terms to well-known definitions. The most common example is probably calling your process agile whether or not it follows any of the principles. Who hasn't worked on a fixed bid, fixed scope, fixed date project and been told all along how "agile" the project is? The second you hear the phrase "scope creep," you know the customer isn't a priority and agile never made it to the table. While I am a huge proponent of XP (and I mean, by-the-book XP), I won't bore you with a rant on that topic.
What concerns me is Domain Driven Design. Domain Driven Design is a large subject that takes 100 pages to define quickly. I supposed this contributes to the misuse of the term.
Domain Driven Design defines 4 layers of an application: (User) Interface, …

Utah .NET User Group

Last night I attended the local .NET User Group for the first time. The speaker presented on MEF. It was quite informative. I fulling intend to use MEF to support the plugin feature of the TFS build notifier I am working on.

It was fun to get the chance to talk to other .NET devs in the area, eat free pizza and hear about another tool for the toolbox. I am not really convinced that MEF is a full IoC container and I am wasn't thrilled that all the examples were in Silverlight, but the talk was well prepared and Joe McBride (@XamlCoder) knew what he was talking about enough to stand up to Q&A. :-)

I actually was picked for 2 of the door prizes, but I declined them both. I have been a die-hard ReSharper user for 4 years now, so CodeRush doesn't interest me in the slightest. I also haven't done a desktop app in years (just Web and Server side development) so I declined the Infragistics components so that someone who will actually use them can have them. It was funny ho…

CodeRetreat - Conway's Game of Life

I wasn't able to justify a trip to Boulder for the CodeRetreat, but I wished I were there, so I watched JBrains virtual session video instead.  That inspired me to implement Game of Life in C#.  I created a GitHub repository and started test driving some code.  Eventually, I got something working, but I have some more ideas I want to try.  I want to add a World ctor that parses a string representing the initial state of the World.  I would also like to try putting a few different UIs on this including an MVC3 + Knockout.js view and maybe a WPF view.Here is what I learned:
Get a pairing partner. I started to get tired around 1130 and I got lazy with the testing.  Now I need to go back and add tests and clean up some of the design that wasn't test driven.
Timebox things like this. CodeRetreat sessions ar 45 min. I realized I had been playing for hours when my wife asked if I was ever coming to bed.
Git is pretty frigging sweet.  I'm just getting familiar with it, but I like …

Review: The Cathedral & The Bazaar

I read it, I liked it, Blogger ate my post.

First, it helped inspire me to try Linux, which is no mean feat for a die hard Windows guy like me. (I haven't even turned on my iMac in the last year.)

Second, the management essay added at the end was the most important part to me. The main point being that OSS works well because the participants self select and are passionate about that they are spending their precious time on. Cube dwelling devs may not be so passionate or skilled, and their output reflects that.

Review: The Passionate Programmer

Chad Fowler's book is all about building a successful career in software development.  When I read that sentence, 2 questions immediately come to mind: what's in it for me (as a developer)? and what's in it for me (as a business owner/manager/project manager/etc)?  Well the answer to the first question is pretty obvious: what I get out of a successful career is happiness, money, purpose, etc.  What does my employeer get out of it?  Well, a happy, motivated, driven developer.  Why does that matter?  Happy, motivated people produce more and better work.  So now we have covered the most rudimentary of why, let's look at how this book helps.There are 5 sections in the book: Choosing your marketInvesting in your productExecutingMarketing... not just for suitsMaintaining your edgeChoosing your market talks to the importance of being aware of what you do and how it related to the larger picture.  Are you .NET developer?  Why?  Why aren't you a Ruby developer?  Or a Java de…

Ubuntu...

Well, after 10+ years of exclusively using Windows, I am now dual booting Win7 and Ubuntu on my laptop. So far, so good. Only complaint so far is that when I tried to install Ruby from the command shell, apt-get was out of date and as a noob to this platform, the error messages didn't make any sense. A quick google search and I had the answer: sudo apt-get update. Anyway, Ruby is installed. Vim is installed. Chrome is installed. I wrote this post in Chrome from Ubuntu. More to come.

Respect - The Currency of IT

Just ready Jeff Ello's article The Unspoken Truth About Managing Geeks (thanks to Michael Feathers for tweeting it.) Jeff talks about the stereotypically negative behaviors of software developers and how organizations can deal effectively with these behaviors.

The part of the article that I found most interesting is the discussion of respect: how to earn it, how to keep it, how to lose it. I can attest to the fact that respect is the number one factor in my reactions to those I work with. I have worked with a team lead who was pushy, bossy, rude and consistently corrected my code and coding style (he even took away my mouse because it was a crutch.) Why did I put up with it? Well, he was an order of magnitude better than I was and I wanted needed to learn from him. I would go home from work mentally exhausted from paired programming, but at the end of several months, I felt like Neo in the training construct: I knew TDD. I knew how to separate concerns and used dependency in…

What Software Craftsmanship Means to Me

Throughout the recent debate catalyzed by Dan North, I have spent a significant amount of time thinking about what this profession is that I have chosen to pursue and what it means to me. During the debate Corey Haines and Dan had on Twitter today, my thoughts crystallized and I felt compelled to record them. I doubt that many will read this, but if nothing else, it will allow me to measure my progress when I come back and reread it later.

While I self identify as a Software Craftsman, like Corey, I find that I agree with Dan regarding the movement. Maybe I agree with Dan because I self identify as a craftsman. No one else calls me a craftsman. There was no exam, no council of masters, just me and a desire to write less crappy software. So what does it all mean? What is Software Craftsmanship?

Well, it means not writing crap code, obviously! But what is crap code? I have never in the last 10 years worked with a developer who set out to write crap code. Working at a Fortune 100…