Wednesday, April 05, 2006

Attention ASP.NET 2.0 Developers:  The Release Candidate 1 (RC1) of the VS 2005 Web Application Projects (WAP) has now been released.  If you're like me and prefer the 'old' 1.x style of ASP.NET applications (with namespaces, more intuitive folder hierarchy structures, a \bin folder, and much more), you'll really enjoy this.  WAP brings that style of website development to VS.NET 2005.  I've been using WAP since early Beta 2 and despite a few beta-related issues have really enjoyed it.  I'm looking forward to some of the new enhancements and fixes!

Read more about it on Scott Guthrie's blog.

Wednesday, April 05, 2006 6:20:00 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [1]  |  Trackback

My faithful one or two readers out there may have noticed that I've not updated this blog much (if only very sporatically) lately.  This was not for lack of desire, but more accurately for lack of time.  Additionally, for the past week I've really been facing a very difficult decision that pretty much consumed all thought processes and I've not had the energy to devote to adding more content.  I will work harder at that.

My turmoil and deep introspection revolved primarily around whether or not I should leave my current employment (I am full-time engaged and committed to Experlogix) or rejoin the ranks at Microsoft.  Those that know me are aware that I used to be employed by Microsoft in the capacity of Consultant - something I deeply loved and thoroughly enjoyed on so many levels.  I was in MCS for a little over two years and had the wonderful opportunity to get to know some really great people, and learn a TON, and be genuinely influential in my client engagements.  What a wonderful few years.  I have since left Microsoft to pursue other endeavors but always had my heart in Microsoft, thinking full well that I would be back there again one day.

That opportunity presented itself a few weeks ago in the form of a formal invitation to come back.  I would, of course, have to be screened and interviewed as all hires do.  I had a pretty intense day of interviews (though not quite as intense as it was on my first go around) in part because I knew the people interviewing me (some better than others) and had worked with some of them on projects.  Well, it turns out that I got an offer...a very good offer as a Senior Consultant.  One that made me really evaluate my position with Experlogix and my future as well as reflect back on Microsoft and the opportunities there.

I spent four days seriously considering all of the options, literally wracking my brain.  I have a great situation with Experlogix and I work with some wonderful people.  Would I be willing to give that up?  I truly felt that I was presented with two great options, neither of which would be a 'wrong' choice necessarily for me personally.  It came down to contemplating all of the pros and cons and seriously weighing all of the possibilities as well as what I want out of life.

I'll not really beat around the bush here, but I decided to stay and continue on with Experlogix for a variety of reasons, not the least of which is that I really believe in our product and I believe in our future.  I didn't want to give that up and deliver a blow to the company by leaving, as I feel I would sorely be missed.  Technically, no one is irreplaceable, but I felt strongly that my participation going forward coupled with my devotion to them in the past and the committments that I had made outweighed anything anyone could offer.

I really wanted to accept he Microsoft offer, but at the end of the day, I felt that staying with Experlogix was the right decision and one that I will be able to live with very happily and with a clean conscience at this stage in my life.

Wednesday, April 05, 2006 5:08:00 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [3]  |  Trackback
 Tuesday, April 04, 2006

I'm really sad that I missed this conference.  Every once in a while a conference comes around that provides tons of actual and applicable value to the industry that no one should miss.  This particular conference seems to be (pardon the pun) overflowing with rich content and practical information.  I hope there's a Waterfall 2007...I'd be there in a heartbeat.

These seem to be highlights, sessions I would love to attend:

Kent Beck: “wordUnit: A Document Testing Framework“
Jean Tabaka: “Eliminating Collaboration: Get More Done Alone”
Scott Ambler: “The Glacial Methodology Workshop: A Data-Centric Software Development Process”

Tuesday, April 04, 2006 5:02:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Saturday, March 25, 2006

I was updating some code today in ASP.NET 2.0.  The code had originally been written in ASP.NET 1.1 and I'm in the process of migrating the application 2.0 in piecemeal fashion.  I'm doing it thus, in part, to experiment.  In doing so, I encountered an interesting situation that I thought to pass along to my faithful reader.

First of all, allow me to back up a bit to address a few of the issues that have some bearing on the discussion.  I have a web service that I built for user authentication.  I call it my Devstone Authentication Engine.  This web service has a custom SDK that provides functions that call the services, effectively isolating the dependent application from the nuances of setting up web references and associations.  The calling app simply establishes a reference to the SDK dll and we're good to go.

Alright, well, that SDK dll uses Reflection on the calling assembly to discover information about the system to which the user is authenticating.  I like this approach.  I have a custom Attribute-based type that I apply to the client application in question.  When the client application attempts to use the SDK dll, it reflects back on the caller to determine the desired target.

To be honest, this was all well and good in .NET 1.x.  You could build a Web Application, compile the entire site into a single assembly (MySite.dll) and call it good.

ASIDE

The rules changed with .NET 2.0, however.  The compilation model is substantially more complex; heck, the programming model is (IMHO) a bit more complex because it is much less structured.  (I know I'm not the only one who doesn't really care for the App_Code, no-namespace programming model.  I'll discuss that more in depth another time.)

To address these and many other concerns expressed by developers moving to the 2.0 Framework who were comfortable with the 1.1 programming model Microsoft has created what are called Web Development Projects.  If you're comfortable in the .NET 1.x programming model but want the power and flexibility of the 2.0 Framework, I highly encourage you to download the Beta V2 and experiment with it - it's pretty sweet!

In 2.0, however, when each page/folder/whatever gets compiled into its own dll, the attributes applied in the AssemblyInfo.cs don't get incorporated into each dynamic, on-the-fly assembly.  Therefore, calls to the web service SDK fail because it can't find an instance of the attribute within the calling assembly via Reflection.  If you set a breakpoint and inspect the assembly name you get the name of a dynamically created assembly (e.g. App_Web_y7sgdlhd.dll). 

The trick with 2.0 is simply to move the [assembly: myattribute()] from the AssemblyInfo.cs into the same page as the ASPX page that needs to call the web service. Then, when the runtime compiler grabs the file and compiles it, the [assembly:...] attributes get applied to the dynamic assembly as well.

Saturday, March 25, 2006 2:50:00 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [3]  |  Trackback
 Thursday, March 23, 2006

Today I'm off to Dallas, Texas for Microsoft's Convergence Conference 2006 with Experlogix.  We've had the annual tradition of attending these conferences showcasing our software in the expo hall and each year it's been a blast!  We are very much looking forward to meeting the various Microsoft Partners, talking to the Microsoft CRM team, and interacting with customers.

If you're going to be in Dallas and/or are going to be at the conference, drop me a line and let's get together!  I look forward to a fun weekend!

Thursday, March 23, 2006 3:40:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Tuesday, March 21, 2006

Last week we had overwhelming success with our SQL Server 2005 Overview event, that people have been banging down the doors for more.  By popular demand, therefore, we are pleased to invite you to a follow-up event.  If you were unable to attend the first session for one reason or another and would like to attend this one, please check it out!  We had a great time doing it and it was a lot of fun.

Three separate seminars are presented: SQL Server Development Platform, Business Intelligence, and Infrastructure.  The event is to be held on March 9th from 9:00 AM to 5:00 PM at the Microsoft offices in the International Center.

Date / Location:

March 29th, 2006, 9:00 AM - 5:00 PM
Microsoft Corporation
123 Wright Brothers Drive, Suite 100
Salt Lake City, Utah 84116
(801) 257-6400
http://www.microsoft.com/mscorp/info/usaoffices/rockymtn/saltlakecity.mspx

Registration:

Register today at http://www.microsofttraining.com/devonsites
Class / Invitation ID: 304560

Tuesday, March 21, 2006 2:00:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Saturday, March 18, 2006

We had, today, our first board gaming session in which we tried something completely different.  For some time now we've wanting to play Puerto Rico after hearing so much goodness about it.  In our usual monthly get-togethers we play Settlers of Catan, Carcassonne, Shadows over Camelot.  This time, however, we opted for a completely new game, seeing that one couple wasn't able to make it tonight.  Not one of us had ever played it so we were on even ground to start, which made for a lot of fun and discovery.

Wow! What a cool game!  At first the rules looked daunting - even after having read them some 3+ times.  They didn't really make a lot of sense until putting them into practice and then it was oh so simple!  The game was extremely well balanced and everyone had a great time.  We will definitely need to try the 6-player unofficial variation when we get together in our normal 3 couple gatherings.

If you're a board gamer and haven't tried it out, or are wanting something quite different and a blast, I highly recommend Puerto Rico.  I can't say that I've developed a strategy yet, as the first two games have been focused on learning the rhythyms and patterns in the game and learning how what I do and choose affects all the other players (and myself), but I'll be watching for more of the subtle nuances and tricks in future games.  I'm looking forward to it!

Saturday, March 18, 2006 5:05:00 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Thursday, March 16, 2006

We (fellow MVP Patrick Wright, our regional RD Scott Golightly, and I) had the opportunity to head down to the local Microsoft offices to participate in some free SQL Server 2005 training.  The day was split up into three sections.  Pat started out the day, presenting on Migration, Management, and Infrastructure.  Scott followed up with a talk on Business Intelligense, focusing on Reporting Services, Analysis Services, and Integration.  I finished off the day with a discussion on the Development platform, targetting the SQLCLR, TSQL enhancements, etc.

The event was completely booked and it appears that most everyone who registered showed up and we had some walk-ins too so it was a full house.  As far as I'm aware the even went very well and people left pleased with the day.

In the event that you missed it, we'll be putting it on again on March 29th.  As soon as I have the event details, I'll post them here and on the Utah .NET User Group site.

Thanks everyone for showing up and participating.  I had a great time doing it and look forward to the next opportunity.

Thursday, March 16, 2006 6:33:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Tuesday, March 14, 2006

I have both the .NET 1.1 and .NET 2.0 frameworks installed on my laptop because I frequently write software on both platforms.  I recently had the need to create a new ASP.NET 2.0 website.  I set everything up in IIS first (because I like to be able to dictate the name of the virtual directory and have it routed somewhere other than the InetPub\wwwroot folder for development.

Aside: VS2005 happily supports having a virtual directory pointed at a folder with a name other than the virtual directory name :)  VS2003 and prior didn't support this, so I didn't have nearly as many hoops to jump through when setting it up.  For instance, my virtual directory might be named TestSite and point to a folder named Source within the TestSite folder.  (I might have other peer folders, such as DbScripts, Documentation, etc all within the TestSite parent folder.  I no longer have to jump through hoops to make that work. :)

Anyway, I set it up and began writing some framework code for the site, setting up some master pages, themes, et al.  When I went to browse to the page I was greeted with a 'Mutex could not be created' error page.  Not deterred (and, frankly, half expecting the exception in the first place), all I had to do was this:

  1. Grant myself (rather the user the site impersonates) Full Control to the %WINDIR%\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files folder.
  2. Then, as I have the tradition of doing, delete the 'TestSite' folder (and all others for that matter) from the 'Temporary ASP.NET Files' folder.
  3. Perform an IISRESET.

Once those steps were done, the site worked like a charm!  Happy Coding.

Tuesday, March 14, 2006 7:41:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [12]  |  Trackback