Monthly Archives: May 2008

I will be speaking at the Lansing Day of .NET

29 May 2008
by mjeaton, posted in Uncategorized   |  Comments Off

I will be speaking at the Lansing Day of .NET on June 21st.  I’m looking forward to giving my “An Introduction to Castle ActiveRecord, or Stop Writing CRUD!” talk (which I’ll be re-working a bit), seeing all my friends from Michigan, Indiana and Ohio, meeting new people and having a great time.

There is still time to register, so head over to the event site, check things out and hopefully I’ll see you on June 21st!

Again, I’ll repeat what I’ve said in previous posts:

“These are not your typical vendor-sponsored conferences with lots of marketing fluff.  Code Camps and the Days of .NET are jam-packed with technical content from top to bottom.  The talks are almost always given by local developers that have no agenda other than to help make the world of software development a better place. :-)

Technorati Tags: ,,

Ann Arbor Give Camp – more info

21 May 2008
by mjeaton, posted in Uncategorized   |  Comments Off

This is a follow-up to this post.

The official website is up: http://www.annarborgivecamp.org/default.aspx

I’m registered and definitely plan on being there. :-)

Technorati Tags: ,,

Virtualization for Developers

19 May 2008
by mjeaton, posted in Uncategorized   |  13 Comments

I had the opportunity to sit down with a good friend a few weeks ago (yea, I’m slow on blogging this) and catch up on work and life.  He’s a busy guy so at most I might talk to him once every couple weeks on his drive home from work or we’ll chat briefly via IM (or using the in-game WoW chat), but that’s about it.  We must have sat and talked for almost 4 hours, covering a wide range of topics including outsourcing/offshoring, training, the community, product development along with a few other things.  One item we discussed is the idea of using virtual machines for every day work.  He and I are both surprised when we talk to developers who have either never heard of using virtual machines for development, or those who have heard of it but for whatever reason, choose not to take advantage of it.

Reasons why

Anyone that’s ever built up their own development machine knows that it takes forever (or at least feels like it).  Between installing and configuring the OS, Office, developer tools and all the little utilities that make our lives easier, it can easily take a day or more to get a new computer to a point at which we can be productive.  As a consultant, I deal with a variety of clients, each with their own environment. Some are still on .NET 1.1, some are on 2.0, some don’t care (which means whatever is newest), one even has me doing some maintenance work on an old VB6 application and I had a client last year that wanted me to work with a 3rd party CMS product that I’d never heard of.  Since I also like to keep up with some of the cool betas coming out of Microsoft, trying to keep a stable development environment would be next to impossible without the heavy use of virtual machines.

For the last couple of years, instead of cluttering up my primary development machine (my laptop) with various versions of my dev tools, I’ve been using virtual machines to do all of my software development work. When my laptop died in January, I was able to continue working from my desktop machine without having to do anything other than fire up a remote desktop session to connect to one of my many VMs and I was good-to-go.

How I do it

While I know some people love VMWare, I’ve been a big fan of Microsoft Virtual PC and Virtual Server for a few years. Virtual PC is nice for those times when I need to take a VM with me such as speaking at an event or user group, but for the most part, I have a nice beefy server that runs Virtual Server. I currently have seven virtual machines on my server with four running at any given time. My laptop is nothing more than a tool to run Office 2007, my IM client, my twitter client, connect to my VMs using remote desktop and of course, play World of Warcraft. ;-)  

In the whole scheme of things, my server isn’t anything special.  In fact, it’s a home-built AMD Athlon 64 X2 3800+ with 4GB of RAM running Windows 2003 server.  It’s currently got something like 500GB of drive space.  Not only do I run Virtual Server on that system, but I also run Sharepoint, my internal subversion repositories and it’s where all our mp3s and pictures live.  To be honest though, up until recently, the mp3s all lived on an old Shuttle box I had laying around.  Even with all of that running on the server, the performance of my VMs isn’t bad at all.  In fact, my biggest complaint about working this way is that sometimes the display can suck – for example, if I’m working on a Silverlight app, but that’s easy enough to get around.

When I made the decision to start using VMs, I started out with a single Windows XP/sp2 installation that I created using Virtual PC. Before backing that VM up, I made sure all my common utilities were installed including BGInfo from sysinternals, a decent zip utility, FileZilla, GViM and Reflector.  Once I had that base image working, I backed it up. Using a copy of that base VM, I created my first “working” VM.  I installed Visual Studio, SQL Express and tortoisesvn.  Once I had the specific version of those tools I needed installed, I backed that VM up as well.  Keep in mind, going this route requires a lot of disk space, but hey, disk space is cheap, right?  Most virtualization software allows you to reduce the amount of disk space by using “differencing” disks.  This means you start with a base image and new VMs based on that image are only the differences between the base.  I’ve heard good and bad things about this approach.  The bad includes breaking all your images IF you happen to make a change to the base image *after* you’ve created new images based on it.

When a new client comes on-board, it’s easy enough to copy one of my “base” VMs, rename it and fire it up.  I love being able to work on a client project without affecting any other work I’m doing.  I can easily copy a VM to my laptop if I need to go onsite and I can easily blow away a VM if it becomes unstable.

I know of a few other developers who have gone the virtual route and are from what I’ve heard, they love it.  What do you think?  Do you have experience developing in VMs?  Do you love it or hate it?  Let me know!

Cleveland Day of .NET wrap-up

19 May 2008
by mjeaton, posted in Uncategorized   |  4 Comments

Here are some photos I took

Pre-Event

After a pretty uneventful 3.5 hour drive to Cleveland, I arrived at the hotel around 6pm.  As I was getting my stuff out of the car, I met up with John Stockton.  John and I have followed each other on twitter for a few months, so it was great to finally meet him in person (common theme at tech events these days). ;-)

Walking into the hotel we immediately ran into Dan Hounshell, Joe Wirtley, Justin Kohnen, Leon Gersing, Alan Stevens and Joe O’Brien.  After a quick check-in, we dropped stuff off in our rooms and headed to the hotel bar where we spent some time folding the PocketMod schedules for the event.  Some of us started a mini assembly line to make things a bit easier.  By the time we left the hotel bar to get some food, we must have had 20 (me, Dan, Justin, Leon, John, Mike Slade, Joe O’Brien, Joe Wirtley, Maggie Longshore, Joe Fiorini, Alan, Corey Haines, Michael Letterle, James Bender, Amanda Laucher, Dave Redding, Dan Hibbits and I’m sure a few more that I didn’t catch in my pictures)  people folding the schedules.  Sarah bailed on us due to some swag-related issues – LAME!

BTW, I’m not sure what’s up lately, but between Grand Rapids and Cleveland, I have had exactly ONE decently mixed Jack and Coke. :-\  The hotel bartender did a horrible job, and at $7 per drink, I wasn’t about to waste money on a second.  Instead of eating at the hotel, we all decided it’d be cheaper to go somewhere else, so dinner on Friday night was at a Red Robin.  The service kinda sucked and the food was good enough, but I can honestly say the conversation rocked. :-)   At some point, Chris Woodruff called to let me know he was at the hotel, but by that time, we were all heading back.

I learned my lesson last week at the West Michigan Day of .NET (so did Dan), so instead of taking off for a night of partying and karaoke with everyone else, we hung out in the hotel room, watched the Cleveland/Boston game and talked (BTW, what the hell was up with Boston taking it to game 7?).  At one point, we did join Jennifer Griffin and Maggie Longshore at the hotel bar for a few minutes.  I can say for sure that I was back in the room and asleep by 12:30. :-)

The Event

I was up, showered and out the door by 7am to see if I could help Sarah and crew setup for the event.  I ran into John and Mike Slade and got a quick tour of where the event would be held.  It wasn’t too long before Sarah and her husband arrived with all the swag, so John, Mike and I helped bring in box after box of swag.  After unloading the swag, I headed back up to my room to see how Justin, Dan and Leon were doing.  Since we were all speaking at the event, we made a beeline to the speakers room – Nate Kohari was already there, so we introduced ourselves and then settled in for the day.  I’m pretty sure that sometime during that first session Jason Follas showed up along with Brian Prince, Brian Gorbett, Rich Broida and a few other speakers.

I wanted to make it to objo’s “Why Ruby?” session, but got caught up with the goings-on in the speakers room and didn’t make it.  During the second session, I wandered between rooms and snapped some pictures.  The simple fact of the matter is I couldn’t decide which one to go to…3 friends speaking at the same time made it tough to decide even though I’ve already seen 2 of the sessions at previous events (Dan’s SEO talk and Alan’s TDD/MVC talk).  For the third session, almost all of us packed into Nate Kohari’s talk on dependency injection.  Almost all of us have been following Nate on twitter, but this was our first time seeing him speak and it was on a topic we were all interested in!  He did a fantastic job during his talk and definitely has me interested in taking a look at his DI framework (Ninject).

Unfortunately lunch wasn’t provided for the attendees — turns out the hotel catering was just too expensive for the organizers to deal with. :-\  That was a bummer and I’m sure it pissed off a few of the attendees.  The organizers were nice enough to provide lunch for the speakers though.  I couldn’t help but feel a bit guilty, but at the same time, I sat at a table with Alan, Chris and Jason Follas. :-)

My Session

My “Lessons Learned” session was immediately after lunch.  I was worried about being in the “big” room, but I ended up having a packed house.  I think I counted 35.  This is the second time I’ve done this particular presentation and to be perfectly honest, I think I’m gonna pull it from the rotation and re-work it.  I’ve gotten a lot of great feedback from people about the session and I love to hear people tell me how much they enjoyed it, but I’m not happy with it yet.  I feel like I ramble on too much.  I also need to re-work the abstract a bit.  Of course, I’m probably the biggest critic of my work whether it’s code, writing or speaking, so we’ll see how it goes.  I did end up blasting through the slide deck in about 40 minutes, so the final 20 minutes was spent taking questions from the audience.  After my session, I went back to the speakers room to decompress a bit.

The Final Sessions

I skipped the 5th session, but a bunch of us ended up in Sarah’s “IronPython” talk at the end of the day.  In fact, a few of us sat in the front row and tried to heckle her.  I snagged a few “photoshoppable” pictures during the 30 minutes she talked.  Overall, it was a good talk, but since I’m not a big Monty Python fan, I didn’t get some of the jokes. :-)

Dinner

The event organizers treated all the speakers to dinner at P.F. Changs!  Mmmmmm…..good stuff.  We had some great conversations at my table – I was sitting next to Nate Kohari, Alan Stevens and Brian Prince.  Once again: good food and great conversation!

I ended up heading home around 8:30.  To be totally honest, I was really emotional when I left.  I’ve been hanging out with the same group of people (for the most part) every weekend for the past couple of months and it was sad to say goodbye again.  These are the people I *want* to hang out with.  Almost all of them (in fact…I’m pretty sure it is all of them) are on twitter, so we’re always in contact, but still…it was hard to say goodbye. 

I’m not sure I can say it much better than Alan….

“Beyond all the productivity, entertainment and publicity benefits of twitter lies this fact: I love the people in my Twitter Tribe. If you’re uncomfortable with the “L Word”, then please accept that I feel emotionally connected to them, even if I’ve never met them. When I do meet people after following them on Twitter, I have an urge to hug them like a reunited friend.”

Overall

Overall, the event was pretty cool.  As a speaker, I did feel a bit disconnected from the attendees, mainly because there was no common area to hang out in.  The rooms were all down a single, narrow hallway in the hotel and everytime a group started to talk, some hotel staffer would come rolling down the hall with a cart and break things up.  Also, it didn’t help that there was some kind of freakish doll-related meeting across from one of the rooms.  I don’t know that I’d have it at that hotel again, but I’m pretty sure the organizers feel the same way. 

Beyond the venue-related complaints, I’m glad I made the trip and I’ll definitely go next year if they do it again! 

Thanks!

Huge thanks go out to Sarah, MikeL, MikeS, Corey, Sam, JoeF and John for putting on such a great event!  Thanks to the sponsors (Microsoft, Bennett Adelson, 4TechWork, Hyland Software, Lazorpoint, Exential, Beacon Hill Staffing Group, TEKSystems, Sogeti, Robert Half Technology, PreEmptive Solutions, RedGate, JetBrains, Wrox/Wiley, and InformIT.com/Pearson Education) for helping make this event a reality!

 

Technorati Tags: ,,

Jennifer Marsman: geek, developer evangelist and blogger

14 May 2008
by mjeaton, posted in Uncategorized   |  4 Comments

While attending the Central Ohio Day of .NET a few weeks ago, Josh Holmes introduced me to Jennifer Marsman, one of the community-focused Developer Evangelists for the Heartland District.  Jennifer works with Josh (RIA Architect Evangelist), Jeff Blankenburg (Developer Evangelist) and Brian Prince (Architect Evangelist).  If you’re not familiar with what a Microsoft evangelist is, check out this great post from Sarah.

As Jennifer points out in her “who am I” post, she has a broad range of experience and in the last year has jumped into many of the new tools and technologies coming out of Redmond including  “the Windows Presentation Foundation (WPF), the Windows Communication Foundation (WCF), Windows Workflow, Visual Studio Tools for Office (VSTO), ClickOnce, development on Windows Vista, Silverlight, the .NET Framework 3.5, and Visual Studio 2008.“ 

Before jumping into an evangelism role, she worked on the Microsoft campus in Redmond:  “My team’s goal was to map a computer user’s intent to an action that the computer can perform, beginning with the search and help domain.  To do this, we utilized machine learning techniques (Naïve Bayes and Decision Tree classifiers).  I personally designed the algorithms that determine the user’s intent from the data we collected, which earned me two patents.

How cool is that?  Of course, if after reading that you’re not convinced she’s a geek, in 2007 she did a few episodes of CodeToLive on the XNA gaming framework (Part 1, Part 2, Part 3, Part 4)!  I was recently reminded that she was the one who shaved Josh’s head at the first CodeMash conference in 2007 (another video here). :-)

Jennifer is organizing the upcoming GiveCamp that I blogged about a couple days ago.  If you want to get involved in this very cool event, let her know!  As I said in my post, I plan on being there and hope to see plenty of my friends there as well.  What a great opportunity to hang out with smart people, write code and help others in the process.

While she hasn’t been blogging for very long, the one thing that really stands out about her blog is the “Featured Women in Technology” series she started in April.  Since Jennifer started the series last month, she has already highlighted four women including Carey Payette, the president of the Central Ohio .NET Developers Group.  Carey was instrumental in putting together the recent Central Ohio Day of .NET and also gave a talk on “Getting Started With IronRuby, the DLR and Silverlight” at the event.

Anyway, this post started because I really enjoy Jennifer’s blog and especially the “Featured Women” posts and wanted to let people know.  If you’re not already subscribed, you should do it now. :-)

Technorati Tags: ,,

Wrestling with WCF

12 May 2008
by mjeaton, posted in Uncategorized   |  6 Comments

A few days ago, I was working on LightReader, trying to nail down some features before the West Michigan Day of .NET.  I ended up spending a few hours chasing down a WCF issue and wanted to write about it in hopes it will help others. :-)

The error I was seeing was:

“An exception of type ‘System.ServiceModel.ProtocolException’ occurred in System.ServiceModel.dll but was not handled in user code

Additional information: The remote server returned an unexpected response: (404) Not Found.”

Not very helpful is it?

The particular functionality I was working on involved importing an OPML file.  This turned out to be one of those classic examples of having passing unit tests, but a big failure when running the application (or integration tests).  The method I was working on has this signature:

List ImportOPML(string opmlContents);

 

BTW, the application is being developed using TDD, so let’s review that process: write a test that fails, add just enough code to get that test to pass, refactor.  Red, Green, Refactor!

After selecting the OPML file to import, I pull the contents into a string variable and then call LightReaderService.ImportOPML to save the feeds to the database.  The ImportOPML method uses a 3rd party library – the Argotic Syndication Framework – to parse the OPML so once the data is loaded, I simply iterate through the “outlines”, persist and then return the imported feeds in List.

 

   1:  private void importOPMLButton_Click(object sender, RoutedEventArgs e)
   2:  {
   3:      OpenFileDialog dlg = new OpenFileDialog();
   4:      dlg.Filter = "OPML Files (*.opml)|*.opml";
   5:      if (dlg.ShowDialog() == DialogResult.OK)
   6:      {
   7:          using (StreamReader reader = dlg.SelectedFile.OpenText())
   8:          {
   9:              string opmlContents = reader.ReadToEnd();
  10:              if (opmlContents.Length > 0)
  11:              {
  12:                  _lightReaderServiceProxy.ImportOPMLAsync(opmlContents);
  13:              }
  14:          }
  15:      }
  16:  }

Easy enough, right?

It worked in the context of my unit test, but as soon as I fired up LightReader and selected a “real” OPML file, things went straight to hell and I started receiving the error I described at the top of this post.  Being a relative noob to WCF, I ended up googling for more information on that error.  I quickly found out that I would need to turn on logging for WCF since it is turned off by default for WCF.  Bummer.  Luckily I found a blog post that helped me configure things so I could get more detail about what was happening.  Of course that post talked about using the “Service Trace Viewer” (SvcTraceViewer.exe), but didn’t say where to get it.  After some searching, I found that it’s in the Windows SDK along with the service configuration utility.  Thank God I had the SDK installed because otherwise it’s a 1+ GB download (iso). :-)

After modifying my config file to include the sections for logging, I fired up LightReader, opened my OPML file and watched the exception pop up.  Opening the log filen that was generated gave me this extended error:

“The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://tempuri.org/:opmlContents. The InnerException message was ‘There was an error deserializing the object of type System.String. The maximum string content length quota (8192) has been exceeded while reading XML data. This quota may be increased by changing the MaxStringContentLength property on the XmlDictionaryReaderQuotas object used when creating the XML reader. Line 57, position 166.’.  Please see InnerException for more details.”

Huh?  I had already set the readerQuotas in my config file because of another issue I had early on in the development.  I originally modified these values because I was unable to return the contents of a full feed back to my client.  In this case, the error above was being caused because I was trying to send the opmlContents string to the service, but it was larger than 8192 bytes.

Anyway, here is what the config section looked like:

<readerQuotas maxDepth="32"
    maxStringContentLength="2147483647"
    maxArrayLength="2147483647"
    maxBytesPerRead="4096"
    maxNameTableCharCount="4096" />

I also had the following code in the client portion of my app:

   1:  BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.None);            
   2:  binding.MaxBufferSize = Int32.MaxValue;
   3:  binding.MaxReceivedMessageSize = Int32.MaxValue;            
   4:   
   5:  EndpointAddress address = new EndpointAddress(http:///LightReaderService.svc);

Note: As I continue in the development of LightReader, I’ll probably tweak those “max” values to something more reasonable than Int32.MaxValue.  The same goes for the values in my config file. :-)

Because I knew I had already changed those values in my config file (AND in code), I became fixated on the “XMLDictionaryReaderQuotas” and spent at least an hour surfing, trying to figure out how in the hell to set the value.  None of the solutions I found seemed to apply to my situation so I kept looking.  I even posted on twitter at one point.  As luck would have it, the “XMLDictionaryReaderQuotas” had nothing to do with it because the error was related to the configuration.

 

Here is my complete (before I fixed it) system.ServiceModel section from my config file.  Can ya spot the problem? 

   1:    <system.serviceModel>
   2:      <diagnostics>
   3:        <messageLogging logEntireMessage="true" logMalformedMessages="true"
   4:          logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true"
   5:          maxMessagesToLog="3000" maxSizeOfMessageToLog="2000" />
   6:      diagnostics>    
   7:      <services>
   8:        <service behaviorConfiguration="LightReaderServiceBehavior" name="LightReader.Business.Services.LightReaderService">
   9:          <endpoint address="" binding="basicHttpBinding" contract="LightReader.Business.Services.Contracts.ILightReaderService">
  10:            <identity>
  11:              <dns value="localhost" />
  12:            identity>
  13:          endpoint>
  14:          <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  15:        service>
  16:        <service behaviorConfiguration="UserServiceBehavior" name="LightReader.Business.Services.UserService">
  17:          <endpoint address="" binding="basicHttpBinding" contract="LightReader.Business.Services.Contracts.IUserService">
  18:            <identity>
  19:              <dns value="localhost" />
  20:            identity>
  21:          endpoint>
  22:          <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  23:        service>
  24:      services>
  25:      <behaviors>
  26:        <serviceBehaviors>
  27:          <behavior name="LightReaderServiceBehavior">
  28:            <serviceMetadata httpGetEnabled="true" />
  29:            <serviceDebug includeExceptionDetailInFaults="false" />
  30:          behavior>
  31:          <behavior name="UserServiceBehavior">
  32:            <serviceMetadata httpGetEnabled="true" />
  33:            <serviceDebug includeExceptionDetailInFaults="false" />
  34:          behavior>        
  35:        serviceBehaviors>
  36:      behaviors>
  37:   
  38:      <bindings>      
  39:        <basicHttpBinding>        
  40:          <binding name="basicHttpBinding" closeTimeout="00:10:00" openTimeout="00:10:00"
  41:            receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="false"
  42:            hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647"
  43:            maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647"
  44:            messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
  45:            useDefaultWebProxy="true">
  46:            <readerQuotas maxDepth="32"
  47:           maxStringContentLength="2147483647"
  48:           maxArrayLength="2147483647"
  49:           maxBytesPerRead="4096"
  50:           maxNameTableCharCount="4096" />
  51:          binding>
  52:        basicHttpBinding>
  53:      bindings>    
  54:    system.serviceModel>  

Did you find the problem?  I made the same error that the guy who posted the last reply in this forum thread.  It took a long time before I realized what I was missing and that was only after I stared at that forum post for way too long.  In my opinion, this was angle brackets for the loss. 

Line 9 should look like this:

<endpoint bindingConfiguration="basicHttpBinding" address="" binding="basicHttpBinding" contract="LightReader.Business.Services.Contracts.ILightReaderService">

Ugh.  Several hours wasted because I didn’t specify the bindingConfiguration!  Honestly, I kinda thought that by specifying the binding that it’d pick up all the configuration information that was needed.  I ASSUMEd incorrectly. ;-)   Like I said, I’m a WCF noob, but it would have been nice if the error had said, oh I don’t know, something like “missing configuration information” or “bindingConfiguration not set”.

I should mention that within a minute or so of me figuring out the issue, Joe Wirtley came through with a link related to my issue. :-)   BTW, I twittered my victory.

Technorati Tags: ,,

GiveCamp – July 11, 12 and 13th in Ann Arbor

12 May 2008
by mjeaton, posted in Uncategorized   |  Comments Off

At the recent West Michigan Day of .NET, Jennifer Marsman and Josh Holmes both talked about an event coming up this July 11, 12 and 13th in Ann Arbor (and Houston too I think).

GiveCamp is a developer program designed to allow developers, designers, DBAs and web enthusiasts to donate their time and talent to developing applications for charities.”

While the website looks like it’s lacking in some content, the plan is for the organizers to line up several charities, find out what they need done, scope those projects to a couple of days and then assign them to developers over the weekend!  I think this is a fantastic idea and plan on being there in July!

Technorati Tags: ,

West Michigan Day of .NET wrap-up

12 May 2008
by mjeaton, posted in Uncategorized   |  2 Comments

I had a great time at the West Michigan Day of .NET

Friday Night

After snagging a ride with Dan, Joe and Justin on their way through Coldwater, we arrived in Grand Rapids just after 7pm Friday night.  We spent a few minutes getting settled into our hotel rooms and then made our way across the street to meet everyone else for dinner.  We ended up being among the first to arrive, so we spent a few minutes catching up with Josh Holmes, Wally McClure and Dan Hibbitts while the staff prepared the tables.  It didn’t take long before people started showing up.  In the end I think there were around 20 people at dinner (me, Joe, Justin, Dan, Chris Woodruff, Josh, Dan, Wally, Amanda Laucher, Steven Harman, Tim Wingfield, James Bender, Dave Redding, Scott Zisherk, Dean Weber, Jeff McWherter, and a few other people — sorry if I didn’t include you).  It was a good time, but to be honest, the food sucked and the bartender couldn’t mix a decent Jack and Coke to save his life. :-\  I did catch Steven Harman in one of his more feminine moments — consuming some kind of pink, mildly alcoholic beverage out of a tall glass with an umbrella.  :-)

Around 10:30 or so, about 10 of us headed back to the hotel in hopes of making the hotel bar our home for a couple hours.  I swear, we walked into the *hotel* bar around 10:45 or so and they were closing!  We managed to sneak one round in before moving on.  It was awesome listening to Steven Harman school everyone on git. :-)   After the bar kicked us out, we wandered around looking for another place to hang out.  Unfortunately, there wasn’t much within walking distance except a Meijer so we ended up picking up some refreshments, walking back to the hotel and hanging out in Dan and Justin’s room (outside on the patio actually).  I finally went to bed around 2am, but didn’t sleep very well.  I think some of the guys stayed up until after 3!

The Event

Dan, Joe, Justin and I were out the door around 7:45 since Joe was speaking (Pragmatic Software Architecture and the Role of the Architect) in the first session.  After dropping Joe off and grabbing some breakfast, the 3 of us registered and then made our way to the speakers room where we were greeted by Joel Ross.  I actually missed the first two sessions because I was busy (well, I tried at least) putting some last minute tweaks in my slides and code.  I had planned on doing that the night before, but….well, I didn’t make the time. ;-)   I’m a bit bummed because I wanted to see Joel’s “Continuous Integration: What, Why and How” talk.  Josh Holmes gave me a sneak peak of his slides Friday afternoon, so I really wanted to see his “How to architect Rich Internet Applications” talk as well.  Ugh.  New rule for Mike: limit the partying the night before an event. ;-)

My “LightReader: The anatomy of a Silverlight application” talk was up against Dave Redding’s “The C# Variety Show” talk and Jeff McWherter’s “ASP.NET Performance and Optimization” session, but I still had a full room.  In fact, every seat was filled and there were probably 4-5 sitting on the floor.  I was happy to see several of my friends in the audience.  Overall, I think my talk went pretty well considering the previous night’s activities.  As I told the audience, LightReader is my tool for learning both Silverlight and WCF so much of my talk involved discussing the cons of working with a beta 1 product.  The app itself is still pretty immature, but hopefully I was able to get some people thinking about using Silverlight and WCF.

I spent lunch in the speaker room and then headed out with Josh and my friend Chris for some Chinese food. :-)  

I volunteered to videotape Steven’s “A trip around the block with Rhino.Mocks” since I wanted to see his session anyway.  It was a really good discussion, but it didn’t really convince me to switch from Moq to Rhino.Mocks. :-)   I did get a few minutes with Steven after his session to talk about how I was using Moq in the LightReader project.  I would love to spend a day (more more) working with Steve because he is one of those truly “scary” smart people plus he’s funny as hell. 

I spent the last session hanging out in the speakers room.  The speakers room was packed with super-smart people all day (everyone I mentioned above PLUS Jennifer Marsman, Jay Wren and Dan Rigsby – Dan, BTW, drove up from Indianapolis!) and I hated to leave (as you can probably tell). :-)   At one point during the day, we even tried to get Alan Stevens on ooVoo, but the connection at the event kinda sucked so it didn’t last long.

At the end-of-event giveaways I scored a geek mug AND Expression Studio!  I really wanted CodeRush w/Refactor Pro, but oh well.  Maybe next time.  I’m pretty sure the copy of Expression Studio is the old version and not the one that was just released.  I’m a bit bummed about that…but again, it was free so who am I to complain, right? :-)

By this time, I was completely exhausted so I skipped out on the after party.  I caught a ride back to Coldwater with my friend Chris.  We stopped for dinner in Lansing, but finally made it home around 8:30.  During the course of the day I picked up a few new twitter followers which I thought was very cool. :-)

As I said earlier, I had a great time and it was good to see everyone again.  During the course of the day I met Bruce Abernathy and, after some searching, I found Matt Blodgett.  Matt and I have been twittering for a few months so it was great to finally meet him. :-)   I also ran into a former co-worker (Pradeep) at the end of the day.

Next Saturday: The Cleveland Day of .NET!

Technorati Tags: ,,