Archive for August, 2009

St. Louis Day of .Net Day 2 Overview 4

Day two of St Louis Day of .Net held up the high expectations of day 1. Without the need to herd through the registration lines, we were able to jump right into the breakfast; however I missed part of the JumpStart sessions in exchange for a few more minutes of sleep.

Session 0: JumpStart: Silverlight
by Clint Edmonson

As I mentioned I intended to come a little late, and between that and running into a former colleague, I only caught the last thirty minutes of Clint’s presentation. Clint did a great jump with his presentation, style, pace and content. Silverlight 3 looks like it is a solid and extensible platform. I’m interested to see if the out of browser experience is available on multiple platforms. It might be a potential replacement to Adobe Air. It also looks like the first step to desktop applications, written with Microsoft tools, that run on all platforms. This has to be the eventual future of Silverlight.

Session 1: An Introduction to Inversion of Control
by Dru Sellers

This session, like Tim Bracz’s session, reaffirmed some of the efforts our team tried, but ultimately failed, to direct a former employer to adopting a Dependency Injection pattern. Dru had one of the most fluent presentation styles at the conference. It really helped me to pay less time reading slides, and more time listening to what he had to say. I love presentations with props, and even though Dru’s prop was as simple as a magazine cover, it brought a tactile perspective to his session that others lacked. Props go a long way in my opinion. If for nothing more than holding up the book you are talking about, I pay more attention.

This presentation would have been awesome following right behind the Tim Bracz’s. Tim’s session does just what the title says and eases you into unit test by eliminating dependencies and introducing mocking. Dru’s shows how IoC allows classes to be designed and instantiated without those hard coded dependencies. Lee Brandt’s session on BDD then breaks the stigma of tests. It feels like a full journey from no testing to living breathing specifications in code.

Session 2: n/a

I started out in one of the sessions in this time slot, but was interrupted with a phone call and felt the talk looked like it was similar to another, so I skipped out.

Lunch

Lunch was again way too long. The previous session ended at 11:40, but lunch didn’t start until 12:00? And then it ended at 1:05, but the next session does start until 1:15? That’s 95 minutes for lunch. It was made even worse since I skipped out on part of the previous session.

Session 3: Getting Started with Behavior-Driven Development (BDD)
by Lee Brandt

Lee made a great case for BDD. Whenever people have asked me what was different between TDD and BDD, I usually struggled and described TDD as the class-per-test anti-pattern and BDD as a specification focused more on what was going to be delivered to the customer. It turns out Lee agrees with me!

Lee gave a good introduction to MSpec, which I’ve seen before. MSpec looks so foreign to people, I think showing a sample of an NUnit test broken in the parts of an MSpec might ease the eyes into seeing the classes named “It”. Take for example our specification pattern.

[TestFixture]
public class When_a_specific_action_happens : Specification{
	override public void Context(){
		// Arrange
	}

	override public void Behavior(){
		//Action
	}

	[Test] public void the_specific_action_should_be_tested(){
		// Assert
	}
}

And then transform that into:

[Concern("Console runner")]
  public class When_a_specific_action_happens
  {
    Establish context = ()=>
    {
      // arrange
    };

    Because of = ()=>{
	   // action
    }

    It the_specific_action_should_be_tested = ()=>{
	   // assert
    }
  }

Classes named “It” and the extensive use of Lambda can make the MSpec look intimidating.

Another warm fuzzy I took from Lee was keeping in “User Voice” throughout the spec. I’ve written several extension method to Selenium and NUnit’s assert statements to keep the tests as readable as possible. Our Selenium test specifications have lines that look like the following.

	theBrowser.hasTextBox("firstName").WithValue("Mark");
	"errorPanel".aspNetControl().isVisibleIn(theBrowser);

It isn’t as close to English as MSpec, but is better than without it.

Session 4: Something about WPF and Surfaces

The session I saw on Microsoft Surfaces is not on the agenda via the website. Surfaces looks really attractive, but I still see little use for it, at its current price point, beyond marketing eye candy. That is a valid use, and the application they wrote for it would definitely draw people into a trade show booth.

To me though, this is still the how I see surfaces (even through this isn’t Surfaces.).

Session 5: LINQ Internals
by Keith Dahlby

The final session of the conference was by far the most in depth. This happened to me when I went to Tech Ed in 2008. The last session was on LINQ and how expressions trees worked, but I was too exhausted to stay awake through it all. Luckily for me, either STLDODN was shorter and I wasn’t as exhausted or Keith was more entertaining, but I was able to walk away with a good foundation for developing my knowledge of LINQ and Providers to the point where I can start writing my own.

Keith is another one of those presenters that I would see regardless of what they were presenting. I saw him talk at St Louis MOSS Camp, and his presentation saved the event for me. While STLDODN was good all around, Keith not only knows his stuff very well, but tries to transfer as much of that knowledge as he can in 75 minutes. In the arena of LINQ, that is a difficult task.

We have several vendor API’s that could be easily wrapped with a LINQ provider and we would be free from their tedious API calls.

Overall

Overall St Louis Day of .Net was a huge success and well worth the registration cost and time away from work. You won’t find so much knowledge, so close to home for so little money. Tomorrow, or later in the week I have a few improvements I would like to see next year.

Here are some of the photos from the event.

St Louis Day of .Net Day 1 Overview 1

Following acronymitis, today’s post, in addition to being subtitled The Return from Hiatus, will be so called SLDODNDOO. It’s been a while since my last post, but I have been hard at work, and will soon have plenty of new and exciting jQuery adventures to detail. For now, I thought I would get back in the swing of things by covering today’s events at St Louis Day of .Net. I was able to attend last year’s STLDODN while on a few days break between jobs and I am lucky enough to be attending this year’s event, packed with 100% more excitement (two days instead of one).

The Venue

This year the event has, what looks like to me, to be twice the number of attendees and the venue is a twice as nice. The Ameristar Casino and Conference Center is a great venue for a conference. Walking into a Casino at 6:30 AM on a weekday does feel a bit odd, but the facilities are beautiful, spacious and impeccably clean. Registration lines looked intimidating long at first, but they moved incredibly fast and I was through in no time.

Breakfast was delicious. I ended up showing up a bit late and there were still plenty of pastries left. There was plenty of coffee, soft drinks and water. The porcelain cups and plates highlight the elegance of the venue.

Session 0: The Jump Start Sessions

The first set of sessions in all tracks were Jump Start sessions meant to provide a brief, bird’s eye overview of a topic in each track. I am always a little skeptical of such sessions. I’m afraid they will either be full of malicious use of flashy technologies or nothing more than what I could read in a blog post. It was probably a mistake on my part, but I chose a topic I know pretty well, in hopes of getting a new angle on my problems or validation in what I was doing. If I had been more outgoing, I could have offered additional insight to the problems others in the session voiced, but not being so, I sat, gaining little, offering even less.

Being all the sessions at that time, across all tracks, were probably similar in content depth, I would have been better spent in a session I knew little to nothing about, or were willing to offer more in those where I have a well-established understanding.

Maybe instead of starting the day with sessions easy on the brain, letting everyone ease into the day, starting off with a keynote, with everyone in the same room, might fire up excitement and get people ready to absorb all the information they can the rest of the two days. The intro sessions could be moved to lunch where we could be enlightened while we eat.

Another option, for both the opening session of the day and lunch, would be to intentionally presenting topics from outside people’s comfort zone, but do so in small 15 minute slices. Sessions like showing SVN, Git, Ruby, Rails, IronPython, IronRuby, etc. would , while not directly relating to most people’s daily lives, offer some breadth to their understanding about what what else is going on in the world. I have a list of session I would like to see, and/or possibly contribute to in the future.

Session 1: Agile Iteration 0
by Ken Sipe

At my current employer we are struggling to implement an Agile process. We recognize the need for it as the business grows, but are having a hard time breaking tradition. Ken did an amazing job with not only the quality of his content, but the engaging and entertaining presentation. I suppose it is only natural that the process coach would be extroverted and outgoing. He identified the pain points we’re currently feeling and why each of the facets of an agile methodology are important. For example, he discussed why velocity is not only important for providing solid estimates, but to correlate with bug rates, and probably test coverage, to determine when teams are moving to hastily.

Session 2: Easing into Unit Testing with Mock Objects
by Tim Barcz

This session really hit home and not only validated the efforts I’m making at my current employer, but also the code I left at my previous one. While I’ve heard we were creating useless levels of abstraction, just for testing purposes. I am reassured I am not alone in believing in their concept and their importance. We were creating the same abstractions on top of those pesky static calls and are currently organizing tests in a similar fashion.

Tim prefers to separate the responsibilities of each test in a different regions of each test.

	[Test] public void Each_test_should_describe_what_it_does(){
		// Arrange

		// Action

		// Assert
	}

We are essentially doing the same thing.

[TestFixture]
public class When_a_specific_action_happens : Specification{
	override public void Context(){
		// Arrange
	}

	override public void Behavior(){
		//Action
	}

	[Test] public void the_specific_action_should_be_tested(){
		// Assert
	}
}

I actually like our method better as it provides an English readable specification of the code and its current capabilities in the build report. We’re on the same page though and it’s good to hear that from an MVP. A coworker of mine shared my enthusiasm as just this week we were attempting to unit test code that has external dependencies that are difficult to mock.

Lunch

Lunch was your typical boxed lunches. The cookies were good. The oranges were a bit awkward to eat and not make a mess or smell like orange for the rest of the day. Lunch was also pretty long (1 hour 15 minutes). Thirty minutes would have been plenty, but I’m sure some found time to make a few throws at the craps table. We are at a casino after all.

Session 3: .NET 4.0
by Muljadi Budiman

I saw Muljadi at last year’s DODN speaking about pLinq and was really impressed. His talk on what’s new in .Net 4.0 was no disappointment, although I would have rather attended his C# 4.0 talk, as it would more directly affect me. Visual Studio 2010 looks nice, but I see little improvement over what ReSharper already does, outside of the ability to pop out source to a separate monitor. There are plenty of enhancements to its support for WPF, multi-threading, etc. ,but these are all spaces that I don’t dabble in on a daily basis. Muljadi is a great presenter and I would be sure to attend any session next to his name.

Session 4: User Experience != User Interface
by Brad Nunnally

Brad has obviously read Presentation Zen, or seen enough presentations by those whom have. It was nice not having to see bullet point after bullet point, and actually listen to what he had to say. I do think the title of the presentation would better serve the audience if it described, what I felt, was the theme of the presentationL Why should you care about UX?, or: The role of a UX Engineer. The topic, maybe only to me, was ambiguous, although the material was well-prepared and direct. I have to admit, I found the animation between the slides distracting and unnecessary. They disrupted the cadence of the presentation as we all waited for them to transition.

Session 5: ASP.Net MVC
by Chris Patterson

After believing the Windows Mobile session was cancelled (it really wasn’t), I popped into the ASP.Net MVC session expecting an overview of MVC, but was presently surprised. Chris did a good job of closing the gaps on the bits of MVC that I’ve been bothered by in other demos, talks and blog posts; namely the over-dependency on strings. Chris showed how some future/contrib packages allow type safe views, view data and control actions. My next project is slated to be our first step into the MVC space, and I look forward to putting some of Chris’s wisdom into action.

The After Party

It’s late and I’ve been typing for a while. I’m getting brief, but about to get briefer. The after-party was at Home night club at the casino. It was really swank, but it might have been too swank for me. Maybe I’m unrefined, or unsophisticated, but I would have much rather preferred beer and pizza in a casual environment to fancy hors d’oeuvres and night club drink prices at 6:00 in the evening. It was nice to be able to mix with everyone, although I know I wasted the opportunity to meet several of the presenters and people I follow on Twitter.

Tomorrow

I’m looking forward to tomorrow, although I am still undecided if I’ll be there for the JumpStart sessions.

Check out my review of day 2.