October 2006 Entries

HDC Presentation


Tim and I just finished out presentation on Model View Presenter in ASP.NET 2.0 this afternoon which we followed up by doing a podcast for PodcastStudio.net with Jeff Julian and Dru Sellers. Overall I was very pleased with the presentation, we had one issue with a live demo, but since when do demos work in front of 150 people? For anyone interested, the code is available on svn here.

Drawing the line


Ted Neward recently commented about a comment that Scott Hanselman made during the patterns & practices Summit. Scott said that his company Corillian had built an abstraction layer atop of log4net. From Ted's perspective, the Java world has been dealing with too many layers of abstraction for the last decade they are paying the price for it (agreed). Ted also brings up YAGNI, suggesting that layers are added without an existing need.

In my opinion they are both right (way to take sides huh?) Java is attempting to dig itself out of a hole, an example of this are the changes made to EJB 3.0 compared to EJB 2.1, take a look. However there are valid reasons to build abstraction layers, even if it's only a layer onto of logging. What are those reasons and when is it valid is where the gray area comes into play. You see it all depends, but I think you can break it down to the relative concern you have with your application or SDK (in Scott's example) relying on external dependencies. As we introduce dependencies we become slightly more reliant on the versioning and support of said dependency. While taking on dependencies that are open source may mitigate some of this risk as we may have access to the source code, it is something we need to take into account.

We all know that Microsoft likes to change their data access libraries every 5 to 10 years, so if you are building a product that is intended to transcend that margin, an abstraction might just very well be a good choice. If you look internally to Microsoft, as Joel stated, the Excel team uses their own C compiler to mitigate risk and eliminate dependencies. I applaud Scott for the long-term vision of the Corillian product.

Windows Installer Issues


This morning I ran into an issue where I couldn't remove a Windows Service from my development machine from ARP (Add/Remove Programs). It would exit with an error. After manually removing the executable and associated files (don't do this) and removing the entry from
\Microsoft\Windows\CurrentVersion\Uninstall", I thought I was in the clear (again don't do this). Not so quick, the item I thought I had removed continued to show up under ARP, this time without the Repair or Remove buttons. After talking to Heath, the suggestion was to run msiexec /fvomus {productcode}, the {productcode} can be found in the Property table within the msi. You can view this within Orca the database table editor for Windows installer packages and merge modules. But wait, because I had rebuilt the msi with changes, the {productcode} entry was different so this option wouldn't work for me either, running the above command gives an error message stating the current msi doesn't match what is installed due to productcode differences.

Heath then suggested using msizap and locating the old product code, but since I no longer had the original .msi, well, I think you can see where this leaves us. The solution I found was a knowledge base article here which not only includes msizap but a nice UI for the tool which lists all installed products and allows you to uninstall from there - highly valuable. Always remember to backup your .msi's incase you need them in the future.

Heartland Developers Conference


The 3rd annual Heartland Developers Conference will be October 26th and 27th in Omaha, NE. HDC has just sold out with over 500 attendees expected! Tim Gifford and I will be presenting on the Model View Presenter pattern within ASP.NET 2.0. It appears that Kent Tegels is presenting at the same time. He is covering the new Entity Data Framework which sounds intriguing. For those that are curious, we will be using NHibernate for our data persistence tool during the presentation. :-) Let me know if you'll be out there the night before for the party.