Sunday, July 29, 2007

Wow! What a week!

It's been an exciting time of late.  Not only were many things accomplished (and a few plaguing bugs resolved), but I found out Friday (yesterday to me still despite it now being Sunday) that I'd be leaving for the Netherlands (a.k.a. Holland, despite Holland being a pair of provinces of the country) on Saturday for the week.  Well, I'm here now in the town of Eindhoven.  And it's beautiful, though overcast.  I've not been in town but a few minutes so I've not had a chance to get out, but here's a quick photo from my hotel room.

I left Salt Lake at 1:30 PM, arrived in Houston and departed there at 7:10 PM to arrive in Amsterdam at 12:30 PM.  It was so nice to fly business class where I could fully recline the seat, watch movies, have great food, and all-in-all have a great flight.  Then, upon arriving I grabbed the train in the airport to Eindhoven (which was about a 1 hr 20 min ride).  The hotel is only a few blocks from the train station so the walk was nice.

I'll be here all week and I'm looking forward to a great time.

Sunday, July 29, 2007 12:12:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Tuesday, July 24, 2007

I've been developing an ASP.NET application for quite some time now without a single problem and all of the sudden when I attempt to open the project in VS 2003 (it's an ASP.NET 1.1 app) I am greeted with the following dialog box:

I've been coping with the issue for a few weeks as I'm able to simply open the application directly in IE and attach the debugger as necessary.  Something must have changed of which I'm unaware, but this had me confused.  Needless to say, the very first thing I tried upon seeing this message was to register ASP.NET 1.1:

C:\>cd\windows\Microsoft.NET\Framework\v1.1.4322
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322>aspnet_regiis -i

Investigating it beforehand with the -lv and -lk revealed that it was indeed already registered with ASP.NET 1.1, but I figured redoing it wouldn't hurt.

When I tried opening the project in Visual Studio, still the problem persisted.

The only solution that I could come up with was to create the file that VS looks for when opening a web project (get_aspx_ver.aspx) explictly in my web application's root, even though it's not expecting to find the file in the first place.

Has anyone else seen that and/or have a better solution?

Tuesday, July 24, 2007 7:09:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [4]  |  Trackback

I was greeted rather abruptly today by an error message that resembled the following:

The module 'XXX' is already in the application and cannot be added again.

This surprised me as I hadn't made any changes to my web.config file's <httpModules /> section.  In fact the module in question is only in my web.config file one time.

I have a web configuration file editor that I had written that updates config files and it automatically adds the <httpModules /> section if necessary, wiring up the httpModule in question. As it turns out, I had inadvertently updated the web.config in my root website which was causing the module to be loaded globally.  Removing the erroneous information from my root web.config file fixed the problem straightaway.

Tuesday, July 24, 2007 6:43:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Sunday, July 15, 2007

This past week was a very quiet one on the blog-front as I was full-time engaged in Denver for an in behalf of Experlogix.  This was my fourth Microsoft Worldwide Partner Conference and it was fantastic.  Since 2004, the WPC's that I've attendend have been in Toronto, Minneapolis, Boston, and this past week in Denver.

We had the great opportunity to have our expo hall booth situated adjacent to the Microsoft booths which was ideal for funneling traffic our way.

It is wonderful to be associated with such an awesome company and work with great people.  I love what I do! :-)

Sunday, July 15, 2007 6:30:00 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Tuesday, July 03, 2007

I've been working with the Visual Studio deployment projects for years now, but always in a very simplistic manner.  That is, I've used them to deploy my applications, install my services, etc, but I've never needed to get into custom development.

Sure, I've long leveraged .NET's ability to have Installer classes to execute custom code when the application in installed to perform tasks such as Event Log creation and/or registration.  This is quite easy, in fact.

Without diving too deeply into it right now, a simple form comes down to the following tasks:

  1. Create a public class that derives from System.Configuration.Install.Installer.
  2. Add the [RunInstaller(true)] attribute to the class.
  3. Add the appropriate code to your Install, Rollback, and Commit method overrides.
  4. Add your application's output to your setup project's Install and Uninstall Custom Actions.

That's it - the installer takes care of everything.

However, my needs with a recent pet project involved passing data to my installer class from the setup project.  This is easily accomplished by following these steps:

  1. Add a dialog to your installer (e.g. there's one called "Textboxes (A)" that will work fine).
  2. Each of these basic dialogs (A, B, and C) contains 4 edit fields.  In order to pass the values from the edit fields to your installer you must name them.  You can use the defaults, but EDITA1, EDITA2, etc don't tend to make much sense.  You name them by changing the EditxProperty property on the dialog.  This is now the variable name you can reference in your code.
  3. Pass the value to your installer by selecting the 'Primary output from XXX (Active)' node in the appropriate Custom Action and setting the CustomActionData property.  This string is defined as a space delimited parameter list.

    For instance, if you named a property 'ROOTFOLDER', you could define the parameter as follows:
    /rootFolder=[ROOTFOLDER]

    If you want to pass more than one parameter, you space delimit them:
    /rootFolder=[ROOTFOLDER] /userName=[USERNAME]

    Of course, if there's a space (or the potential for a space) in the value, you'll need to enclose the property in quotes:
    /rootFolder="[ROOTFOLDER]"
  4. You can then reference the parameters by name in your installer code:
    public override void Install(IDictionary stateSaver) {
       base.Install(stateSaver);
       try {
          string rootFolder = this.Context.Parameters["rootFolder"];
          // do something, such as create the folder, write a configuration file, etc
       }
       catch ( Exception ) {
          // do some logging here
       }
    }

All in all it's pretty straightforward and easy to do.

Happy coding!

Tuesday, July 03, 2007 4:28:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [3]  |  Trackback
 Saturday, June 30, 2007

Well, I must say that I'm happy about our very first .NET User Group Lunch which took place a couple of days ago (06/28/2007).  We had about 15 people show up to Ruby Tuesday in Jordan Landing and we had a great time.  I really enjoy the commaradie of the group.  We're going to shoot for another lunch in a few weeks and we're looking for suggestions for locations (both to maximize accessibility and therefore attendance to these events).

If you have thoughts, please follow up on the User Group forums.

Saturday, June 30, 2007 4:19:00 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Monday, June 25, 2007

This week we're starting what we hope will be a long and fun tradition for the Utah .NET User Group: A .NET User Group Luncheon.

Here are the details as outlined on the website:

By popular demand, we're starting up what we hope will be the first of many .NET User Group lunches.  This is a time where the members of the group can gather, collaborate collectively, frolic and fraternize, and consume comestibles.  We've had a great time gathering after the monthly meetings each month and would like to continue that tradition during the daylight hours when (hopefully) more people can make it..

As a tentative schedule, we're thinking of having a lunch gathering every two weeks at different points throughout the valley.  That way, if you can't make one lunch, hopefully you can make the next one.

This first one will be in Jordan Landing at Ruby Tuesday.  To accomodate everyone's disparate work hours and various commutes, we're allotting 1.5 hrs for lunch from 11:30 AM - 1:00 PM.  You don't need to come for the entire time, show up whenever you like.  Again, things may and probably will change as we get this underway (such as times, dates, and locations), but we just want to get the ball rolling.

We love this group and hope to have a good turnout to this, the inaugural lunch.

If you plan on attending, please check the appropriate option below so we can arrive in time enough to warn them :)

Come one and all, good times are to be had!

Date: Thursday, June 28th, 2007
Time: 11:30 AM - 1:00 PM
Place: Ruby Tuesday in Jordan Landing (
http://www.rubytuesday.com/locator.asp?template=map_search&pWidth=339&pHeight=299&transaction=locMap&recordId=7132)

If you'd like to attend, please visit the post and sign up on the poll, indicating you'll be there.

It should be a lot of fun!

Monday, June 25, 2007 2:47:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [1]  |  Trackback
 Wednesday, June 20, 2007

Tonight I had the distinct pleasure of giving a presentation at the Utah County .NET User Group on the topic of Silverlight - specifically Silverlight 1.1 Alpha.  It was a blast!  Honestly, I was a little nervous going into it, having never really presented on the topic and being relatively new to it myself, but I had a great time.  We talked about Silverlight (previously known as WPF/E) and used Visual Studio “Orcas” with Expression Blend and did some really cool things.  We talked about XAML, created custom controls, retrieved a file from the server and read its contents, automated the HTML DOM from the Silverlight .NET code, did the reverse (called .NET methods from JavaScript), and much more!

If you missed it, never you fear because I'll be addressing the topic at the September 2007 Utah .NET User Group meeting.

Thanks all for coming and to Scott Golightly for giving me this opportunity to present.

Wednesday, June 20, 2007 3:39:00 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [4]  |  Trackback
 Wednesday, June 13, 2007

Well, the time has once again arrived, my friends, for our monthly Utah .NET User Group meeting.

We will be pleased to have Craig Campbell stepping up to the plate to discuss Team Foundation Server (TFS).  We know that this has been a topic long desired and we're excited to be able to bring it to you.

Topics of discussion will include (but are not limited to):

  • What is TFS (in relation to SCM)?
  • Source Control
    • Comparisons
    • Features
    • Branching/Merging/Shelving
    • Visual Studio Integration/Other integration/Command line
  • Build
    • Team Build
    • Continuous Integration
    • Orcas changes (v2 of TFS)
  • Project Features
    • Work items
    • Methodologies offered
    • Source control integration
  • Customizations/Extensibility

So bring your friends, family, fellows, and fraternities...you won't want to miss this event.  And though there is no need to mention this, I will:  don't forget it's FREE and open to all.

Date: Thursday, June 14th, 2007
Time: 6:00 PM
Place: Digital Draw Network - Suite 300 (10897 South River Front Parkway, South Jordan)

We'll see you there!

Wednesday, June 13, 2007 4:23:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback