Welcome to mvwood.com Sign in | Join | Help

The first ever Indy Code Camp was last weekend so I don't feel as bad being late in blogging about it.  I don't recall where I came across the event, but I'm glad I did.  Aaron Lerch and the staff did a really good job with the event.  The facility they have for the IndyNDA and the event was awesome.  I wish we had something similar around Cincinnati (if you know of one, let me know!).  Something like this would be great for events.

I met Joe Wirtley and Dan Hounshell in Harrison and we rode over to Indy together.  This time I actually got to sleep in compared to the prior weekend for the Central Ohio Day of .NET.  We arrived a few minutes after the event started so the halls were pretty bare with all the attendees in the sessions. 

I met Aaron at the check in and then ran into Dan Rigsby who led us back to the speaker table.  Joe and Dan settled into the speaker table and I stepped in to Bill Steele's talk on Office 2007 development. 

Next I sat in on Joe Wirtley's talk on WPF for Developers.  I had missed this at CODODN, so it was great to catch it here.  It was a good presentation and got a little more in depth than the "whizz-bang" WPF demos I've seen previously.  Joe was trying a new approach to his presentations and I think it turned out quite well.  Since Dan and Joe spoke at the same time I wasn't able to make Dan's talk...sorry Dan.

I sat out the next session to talk to some of the speakers and I met Brad Jones, the Indy .Net group's leader.  I enjoy talking to other user group leaders for ideas and see how they run things.  IndyNDA has about 100 members show up every month!  CINNUG is averaging around 35 and I'd like to push 50 by the end of the year.  Sounds like we need another membership drive. :)  I also met Jeff Moser and got more of a chance to talk to Michael Neel.  Somehow I missed introducing myself to Chad Campbell who was there speaking.  Chad came to speak at CINNUG last year the month I was on vacation.

During lunch a few of the speakers commandeered a table in one the session rooms to eat.  Alan Stevens, Jeff McWherter, Michael Eaton, Dan, Joe and I chowed down on some pizza and talked about all sorts of things.

After lunch, which was supplied by Bill Steele (and I'm assuming Microsoft), I sat in on Dan Rigsby's talk on Agile Project Management with Scrum.  About half of the company I work for has had Scrum training and I wasn't able to make it.  Dan had a great intro to the techniques.  I left a little early from this session to prep for my own.

My talk went well, at least the five people in the room seemed to be interested (to be honest there were six attendees in the room, but one was about 11 years old and he was working on his laptop). :)  I had a lower attendance than expected, but I blame my session title.  "Be a Rules Follower" just doesn't have the same draw as something like "Deep Dive into TDD with the ASP.NET MVC Framework".  I had tough competition also speaking the same time as Alan Stevens, Michael Eaton and Dan Rigsby.  To be fair I got a lot of good questions from the people in my talk and continued those conversations after the talk as well.  I need to work my session titles.

I skipped out on the last session because I got into a couple of good conversations with some of the attendee.  The first conversation was with a gentleman about the WF Rules Engine.   He had been putting together a type of rules system for his work for the past few years.  Turns out that after discussing it with him that WF wouldn't have been that efficient for him given he was working with large sets of a data at a time.  After that talk I spoke with another one of the attendees who came to my talk for quite a while.  He was just getting back into the development world and it was a great conversation about finding resources and learning.

The raffle was last with both Dan and Joe winning some software.  We met up with several of the other speakers and some attendees/staff over at Champps for an after event party.  I didn't get a chance to hear much of the conversation beyond my end of the table, but I really enjoyed it.  Alan Stevens, Michael Eaton, Dan Hounshell and I talked for quite some time before I realized we still had a two hour trip home.

Once again I got in late after the event.  Dan and Joe were troopers despite the fact I told them that they had to stay awake in order to keep me awake.

I'm looking forward to next year.  Thanks to the Indy Code Camp staff!  It was a great event!  I appreciated the opportunity to come speak.

This was just last weekend right?  I'm pretty backlogged on my blogging and I'm just now getting around to posting my wrap-up for a event I helped put together! That's just sad.

The day started at 4:45 AM.  I picked up Ben on the way and we made it to the Roberts Centre around 7:00 AM (we had a stop in Mason to eat some Panera for breakfast).  I had expected about five volunteers to be coming in early to help out and was pleasantly surprised by about ten guys that showed up to help! I'd name some of them, but I'd leave too many out.  You guys know who you are and I THANK YOU!  We had the attendee bags stuff and registration set up in no time flat.

People were coming through the door by 7:45 (yeah, that surprised me too).  We had a total of 178 attendees come through the door, with about 15 of those being walk-in registrations.  That's about thirty more than last year! 

The new facility turned out really great.  It was a little spread out with some rooms quite a distance away from each other; however, as developers who sit all day we can all use the exercise. :)  I think a big win for the facility was the ability to sit down for lunch at a table to eat!  It was definitely better than having to sit with the box lunch in your lap in the session rooms like we did at the Wingate.  Some of the rooms got a little crowded during the more popular sessions.   We'll work on that for next year.

Justin Kohnen did a great job on the excellent Central Ohio Day of .NET sign and the programs.  The programs this year were a change from the pocket mods we've done in the past.  One complaint we had from previous years was not having enough information regarding the session abstracts and such in the pocket mods.  The programs contained everything you needed as an attendee and they turned out great! 

Carey Payette was our speaker coordinator this year.  She wrangled our twenty-four speakers and made sure all of slots were filled.  Carey also produced the signs for the doors so you could tell what was in each room.  This was something that was an improvement over the previous year as well.

Bob Sledge was our "Director of Finance" for this year's event.  Bob's the treasurer for the Dayton .NET Development Group as well, so they handled all the cash and dealt with the sponsors when it came to the sponsorship funds.  Jim handled the finances last year and once again I'm glad someone else managed the bills. :)

Jim Holmes was once again my partner in crime for this event.  Jim managed the facility contact and supported the Open Spaces endeavor.  The Open Spaces turned out really well and we've discussed having a location for a full day of it next year rather than just half the day.

Jim and I really appreciated the extra help from Bob, Justin and Carey this year.  It made planning and execution of the event so much less stressful.  To all four of you, THANKS!

So with all the people I've mentioned and their jobs you may be wondering what I did.....I think they are wondering that too. :)  Actually, my role was pretty minimal this year compared to last year.  I mainly kept track of the big picture and dealt with the website and some of the sponsors.  The day of the event I wanted the other four to kick back and enjoy themselves as much as possible, which I think they did.

We had great sponsors for the event.  Check out the list on the CODODN website.  Without these sponsors the event just wouldn't be possible.

The speakers were great and I'm sorry that I missed all the sessions.  I'm slowing catching a few of them as I hit other events or inviting the speakers to come to CINNUG to give the talks again.  I know that there is a lot of time spent putting these sessions together and I appreciate all the speakers who came to speak.

The after event party didn't really go off as planned, but nevertheless I think people enjoyed themselves.  I think I made it home around 10:00 PM or so.  All in all, a great day and a great event.

I know I've posted about this video before, but Andy Erickson did a great job summing up the event!

Lastly, I have to apologize to the groups in the Open Spaces room for interrupting the great conversations going on.  I'm blaming the one group who completely stopped their conversation to look at me when I walked in like they were expecting some sort of prophetic decree....most of them should know me well enough to know nothing like that is coming out of my mouth. :)

I came across this completely by accident.  I was dragging a folder up to the Recycle bin, which I normally keep in the upper left hand corner of the screen (not sure why I was dragging as I usually just use the Del key...), but I must have had my mouse all the way up against the edge of my screen when I let go.  A new toolbar docked to the top of the screen appeared!  The contents of the folder were displayed.  I could close the toolbar by right clicking and selecting close, or by turning the toolbar off by right-clicking and deselecting it in the Toolbars content menu. 

Turns out you can do this in Windows XP as well as Vista.  I wonder when this feature was introduced.  I've never seen it before or quite know what I'd do with it.  Interesting all the same.

I created a screencast of this and I've put it up on Silverlight Streaming beta.

I posted this to the Silverlight Streaming site partially because I wanted to see how that worked (dead easy for videos) and partially because Screencast is now a pay site.  If you are interested in Silverlight Streaming site you can host videos and Silverlight applications on it (currently for free, but look for ad-based free accounts or pay ad-free accounts coming sometime).  More info can be found here.

I should mention that I recorded this with Camtasia from TechSmith.  Also dead simple.

PowerCommands for Visual Studio 2008 is a set of extensions for Visual Studio written by Microsoft.  You can see a full list at the link above.  What you won't find at the link above (unless I just missed it) is a link to actually download the extension.  You can find that at this link over on MSDN Code Gallery.  If you have the Visual Studio SDK installed you can even pull down the code and take a peak.

In my opinion the Copy Reference, Paste Reference and Copy as Project Reference commands alone are worth the download.  Less time spent waiting on that Reference dialog to come up.

I came across this tool via the Visual Studio Hacks VS Links series (thanks Darren!). 

InformIT, the company that owns Addison Wesley, Que, Sams, Cisco Press, IBM Press, Exam Cram and Prentice Hall runs a monthly contest for user group members.  You simply go fill out their form and you are entered to win two books from their store.  If you are a member of CINNUG make sure to select "Cincinnati .NET User Group" as your user group name.  At the end of the month they draw names from all the entries across all of the groups.

In April I won two books!

I choose:

Working Effectively with Legacy Code by Michael Feathers
ISBN: 0131177052

Refactoring to Patterns By Joshua Kerievsky
ISBN: 0321213351

These have been on my "technical book wish list" for a while now.

This post has been sitting in my draft folder for a while.  At my client we use the Visual Studio Team Suite set of products, which means we also use MSTest for unit testing.  I'm not going to get into MSTest vs. XUnit vs. NUnit vs. MbUnit, but I do have a comment about the implementation of the ExpectedException attribute from MSTest.

Let's say that I have some code that can throw a series of the same exception.  A good example of this would guard clauses on a method.  For example:

public void SomeMethod(FileStream inputFile, FileStream outputFile)
{
    if (inputFile == null)
       throw new ArgumentNullException("inputFile", "inputFile is null.");
    if (outputFile == null)
       throw new ArgumentNullException("outputFile", "outputFile is null.");

}

I'd like to test this method by passing a Null value for inputFile, then pass a Null value for outputFile.  This tests both guard clauses.  Since the guard clauses throw the SAME type of exception, the only thing that is going to be different is the message of the exception. 

Taking a look at one of the constructors of the ExpectedException attribute we see the following:

public ExpectedExceptionAttribute(Type exceptionType, string message)

In the documentation the parameter "message" is defined as: "A message to be attached to the exception".  The description of this constructor states: "Initializes a new instance of the ExpectedExceptionAttribute class with and expected exception type and a message that describes the exception."  Originally, I read this to mean that what I put in the message parameter for this attribute would be compared to the message being thrown in the exception; however, that is not the case.  This parameter just "names" the exception for some unknown purpose (if anyone can tell me why I'd appreciate it).

So doing the following doesn't work the way you think it should:

[TestMethod()]
[ExpectedException(typeof(ArgumentNullException), "inputFile is null.\r\nParameter name: inputFile")]
public void SomeMethod_InputFileIsNullThrowsException()
{
    Bar target = new Bar();
    FileStream inputFile = null;
    FileStream outputFile = null;
    target.SomeMethod(inputFile, outputFile);
}
 
 
[TestMethod]
[ExpectedException(typeof(ArgumentNullException), "outputFile is null.\r\nParameter name: outputFile")]
public void SomeMethod_OutputFileIsNullThrowsException()
{
    Bar target = new Bar();
    FileStream inputFile = new FileStream("C:\\temp\\foofile.txt", FileMode.Open);
    FileStream outputFile = null;
    target.SomeMethod(inputFile, outputFile);
}

If you run these both will pass, but that's actually a false sense of security in this case.  Because if I changed the ExpectedException attribute message parameter to "a;sjfa;kjfa;fj" it will also pass. 

This means to accurately test this I have to do something like this:

[TestMethod()]
public void SomeMethod_InputFileIsNullThrowsException()
{
    Bar target = new Bar();
    FileStream inputFile = null;
    FileStream outputFile = null;
    try
    {
        target.SomeMethod(inputFile, outputFile);
 
    }
    catch (Exception ex)
    {
        Assert.IsInstanceOfType(ex, typeof(ArgumentNullException));
        Assert.IsTrue(ex.Message.Contains("inputFile"));
    }
}
 
 
[TestMethod]
public void SomeMethod_OutputFileIsNullThrowsException()
{
    Bar target = new Bar();
    FileStream inputFile = new FileStream("C:\\temp\\foofile.txt", FileMode.Open);
    FileStream outputFile = null;
    try
    {
        target.SomeMethod(inputFile, outputFile);
    }
    catch (Exception ex)
    {
        Assert.IsInstanceOfType(ex, typeof(ArgumentNullException));
        Assert.IsTrue(ex.Message.Contains("outputFile"));
    }
}

Note, I've removed the ExpectedException attribute, tested for the exception type on my own and then added an Assert that let's me determine which of the argumentNullExceptions was thrown.  I could have left the ExpectedException attribute and added the IsTrue assert adding a "throw" to let the ExpectedException attribute do it's work as well.

Let's compare this to NUnit:

[Test]
[ExpectedException(typeof(ArgumentNullException), ExpectedMessage="inputFile is null.\r\nParameter name: inputFile")]
public void SomeMethod_InputFileIsNullThrowsException()
{
    Bar target = new Bar();
    FileStream inputFile = null;
    FileStream outputFile = null;
    target.SomeMethod(inputFile, outputFile);
}

This works exactly as I expected it to.  It checked the type and the message.  Note that NUnit is more explicit regarding the name of the parameter in the attribute "ExpectedMessage".  Perhaps coming from NUnit I was just expecting the message parameter on the MSTest version of ExpectedException to work the same way.

Note that there was feedback left on the Connect site regarding this issue by none other than Roy Osherove.  I guess I'm not only one that thinks this is unexpected (no pun intended) behavior.  This feedback was marked "Closed (Fixed)".  It clearly wasn't.  As you can see Roy entered this against VS 2005.  The code above was executed in VS 2008.

I posted this as a .NET Nugget since it caught me off guard and I actually had several unit tests coded to work the way I thought they should and only discovered this because one of them should have been failing and wasn't.

Matt Winkle has a humorous post regarding the length of Type names in the .NET Framework.  This just proves two things to me:

1) Intellisense rocks!

2) I can no longer jibe Levy for the length of his type names.

This reminds me of another little (useless) factoid I've been meaning to blog about.  While digging into the ADO.NET code with reflector (can't really recall why) Levy and I came across what must be the greatest method name in the framework: DoomThisConnection().  This on the System.Data.ProviderBase.DbConnectionInternal class.  It even has a property named _connectionIsDoomed!  How great is that?

Check out Andy's great clips of the Central Ohio Day of .NET.  If you made it you might recognize some things, if you didn't make it, see what you missed!

Thanks Andy!

I'm just learning PowerShell.  In fact, I'd say I'm just beyond the understanding what's behind "dir" and "help" (Get-ChildItem and Get-Help).  But even with my limited knowledge I can still do some pretty cool (and time saving) things.

For tomorrow's Central Ohio Day of .NET I need to collect all the presentations so that I can post them to the website after the event is over.  I did this last year by creating a directory for each speaker on my thumb drive.  This was a little time consuming since I had to do "New -> Folder" for each one.  This year I decided to solve the problem with PowerShell.

I already had a list of the speakers names in a document.  I copied that list into a text file, one on each line.  I then executed the following command from the PowerShell command line:

get-content speakers.txt | % {new-item -path f:\ -type directory -name $_}

Bingo...24 folders created in a flash.  This command is reading each line out of the text file speakers.txt and passing each one as a string object to the next command in the pipeline (the pipe character signifies the pipeline delimiter).  The next command (% is an alias for ForEach-Object) takes each of those strings and executes a New-Item command giving it the path and type of directory.  The $_ is the syntax for the object being passed in form the pipeline. 

In english: Read the text file Speakers.txt and for each line create a directory on the F:\ drive using the text read from the file as the name of the directory.

The schedule for Central Ohio Day of .NET has been released.  The Sessions Page on the CINNUG site has all the details so you can plan out your day.  There are 27 sessions this year, up from 24 last year.  We are also putting on Open Spaces so that the attendees can decide additional topics.  I'm really looking forward to the event!

This video is just hilarious.  Scott Hanselman does some impressions during the last three minutes.  Check it out.

CINNUG had it's first ever special event last Thursday on April 3rd.  The event was held at the Microsoft office in Mason and was put on in conjunction with Microsoft (specifically Tim Adams and Randy Pagels).  Randy gave two talks on Visual Studio Team System and Tim brought the SWAG and paid for the pizza!

Randy provided an overview of new features in the Visual Studio Team Edition SKUs and then provided some examples of how to do performance/unit testing with Visual Studio Team System Developer Edition.  All in all, it was really good stuff.  These SKUs really have some great features, such as the performance testing for the Developer & Testers SKU, the designers for the Architect SKU, and pretty much everything in the VBDbPro SKU.

The coolest thing I learned though (defined by something that will help me pretty much every day) is that the intellisense window can be made to be made transparent.  Here's an example:  I've started typing a using statement and the intellisense window has appeared:

image

Notice how the intellisense window is blocking the code behind it.  I'm sure we've all run into the situation where you need to see the code back there for one reason or another.  In Visual Studio 2008 if the intellisense window is up you can hold the Ctrl key down and you get:

image

I've seen several indications that there is a shortage of engineers in colleges, I wonder just how bad this shortage really is in the U.S. In the U.K. Bill Thompson is asking who will write tomorrow's code.

Yesterday Andy Erickson interviewed me for a local podcast called Cincinnati IT Podcast.  You can find the podcast here.  We talked about the history of CINNUG and the newly dubbed Central Ohio Day of .NET.

One of the things I'd like to point out is that Andy indicates at the beginning of the talk that he thought I took up a good leadership role for IT in Cincinnati.  While I might be visible in the IT world around Cincinnati because I'm one of the Directors for CINNUG, there are a LOT of people that are helping me out.

With CINNUG I get a lot of feedback, moral support and ideas from Nino Benvenuti.  More recently, Dan Hounshell has come on board to also help out at the meetings and share new ideas with us regarding the group (sorry I didn't mention your name in the interview Dan!).

For the Central Ohio Day of .NET this year Jim Holmes and I are getting lots of help from Bob Sledge, Carey Payette and Justin Kohnen.  We also have a good number of volunteers that will be helping us out on the day of the event.

Without the help of these people I would be looking out from a circular window in a padded room somewhere. 

There is a great community in the IT around Cincinnati.  If you are a .NET developer I highly recommend coming to a CINNUG meeting, or attending one of the free events from Microsoft.  If you are a developer of another platform there are several other user groups in the area that may be more to your line of interest.  Andy Erickson has been attending a lot of the various groups and posting reviews of the meetings.  Check out his blog for a good summary of what's going on, but better yet, get out and experience it. 

In the latest INETA newsletter I came across a reference to the Second Life .Net User Group.  They meet every other Saturday at noon PST in Second Life.  I've never used Second Life, but I may have to check this out just to see what one of the meetings is like.

More Posts Next page »