23 Aug 2008

My first full length presentation

On Thursday night I presented a full length WF session for the first time, I thought it went well and have gotten some very useful feedback from attendees on things I can improve :) My fellow coordinator Rich Allen also did a nugget on a rather excellent piece of technology called WatiN, which is a very formidable Web testing framework with added bells and whistles!

Watch out Cambridge! V2 is coming your way on the 7th October :) I think I'll rewrite the front end is WPF, as I hear thatCambridge bunch have been spoiled by Chris Hays Silverlight Guru status ;)

19 Aug 2008

Sept & Oct talks at NxtGen Southampton

On September 11th we've got Andrew Hallmark coming down to do a talk on CSLA.Net, no nugget has been confirmed as of yet so if you're interested drop me an email :)

If you don't know what the CSLA is, then here's a quick brief. The CSLA is a Business Object framework by Rockford Lhotka that follows quite a few principles that are set down in the Object Thinking book. It comes in two flavours, either VB or C#.

It's a talk I've been keen on getting presented at Southampton since we started nearly a year ago, then Andrew Hallmark offered his services :)

In October we're be hopefully having our 1st Birthday, it should be a fun night with a mix of presentation and some more light hearted activties. Details to follow.

18 Aug 2008

Debugging a modular application

So you're working on a modular application and you've got individual modules in seperate solutions. You can't currently hit F5 to debug these modules as they're just a class library. What do you do?

It's nice and easy, all you need to do is setup a Post Build Event script and change the Debugger options. Follow these easy steps:

1. Open the Build Events tab in the Project properties.
2. Edit the PostBuild script so that it copies the Projects DLL and PDB files to the location of the application you're extending. A basic Post Build Event to do this would look like so:

if $(ConfigurationName) == "Debug" xcopy "$(TargetPath)" "C:\Program\MyApp" /i /y

if $(ConfigurationName) == "Debug" xcopy "$(OutDir)MyDll.pdb" "C:\Program\MyApp" /i /y

3. Save the Post Build script
4. Open the Debug tab in the Project properties.
5. Set the Start External Program to the absolute path of the exe you're extending, e.g. "C:\Programs\MyApp\App.exe".
6. Set the Working Directory to the directory containing the application your extending "C:\Programs\MyApp". Save.

Now when you hit F5 the DLLs and PDBs are copied to the directory, and the target application is run up for your debugging pleasure.

17 Aug 2008

VS2008 SP1 and the missing Toolbox controls

I recently upgraded my VS2008 installation to the new SP1 release, I found that several of the .Net controls disappeared from the ToolBox, including the Button.

A new Toolbox also appeared labelled "#13119" with nothing in it.

To resolve this issue I had to delete the cached version of the Toolbox in my User profile, then when restarted VS2008 recreated the Toolbox and my missing controls reappeared.

Sorted :)

11 Aug 2008

I'm off to PDC 08!

I've just booked upto got to PDC 08!

This'll be my first big Microsoft event (barring launches and what not in the UK), come say hello :)

7 Aug 2008

CAB/SCSF application and DLL/Project references

At my current place of work we're developing a new uber client application using the CAB/SCSF technologies. We've broken the mold a little as we're developing modules in solutions separate to the main Shell. There are numerous reasons for this, one of them that we've got 3 development teams in 3 different locations.

Now the official line from Microsoft is to use Project References in such situations, see the following MSDN article which is a little dated as it was published in 2002.

Now my big criticism with the Project Reference approach is that in the CAB you may well end up with modules depending on other modules, which means that you have to have all those modules in your solution. Then you have to add in the dependencies for the modules you've just added and before you know it, you've gone to the one big solution approach for each of you module solutions and the entire things becomes a pain to maintain. Just some of the bad points I can see for this scenario:

1. Versioning - Everytime you build your module you rebuild the modules your dependent on. If two modules depend on the same module which version do you deploy?
2. Building - Which version of a DLL do you take if it's build by X solutions?
3. Loading Times - I've seen some solutions with 10 or more projects in that can take 10 to 15 mins to load, is this really acceptable to Developers that just want to nip and have a quick look or do a quick fix on the code?
4. Debugging - This method will let you hit F5 and just debug straight into your app, but you're then stating that all modules will have configuration that Developer friendly.

Now the theory we're using is to have a static location to which all solutions copy their DLLs, PDBs and any other relevant files to a location on a directory hierarchy. Other solutions then reference the DLLs from the subst drive without the need of Project References. In order to get the relevant files (DLLs, PDBs and other files) onto the mapped location we use the Post Build Event to copy them, as this is configuration agnostic. The inclusion of the PDb files allows intellisense and navigation when referencing class in other DLLs.

This does mean that the developers all share a common location, in our case we use a mapped drive via the subst command that is run when the Dev logs in.

The mapped location is used to conatin all of the library files that the application uses, so things like Ent Lib, CAB and 3rd Party Controls. Then additional root nodes are added for any applications that use this structure.

One of the nicest aspects of this approach is that when a daily build/CI build is performed it creates the structure for the mapped location. A dev then coming to do the next piece of work can copy the structure to his mapped location picking up all the latest changes without the need of a get from source control and compiling.

So far I've used this at two companies both using CAB based application, and it has worked very well. I'll post shortly on how to debug these applications via the F5 button, instead of attaching to the applications process.

Quake, Vista 64bit and the BSODs

I upgrade my Dev box to have 4GB of Ram last week, and was instantly hit by a series of BSODs. They ranged from System_Service_Exceptions to Memory_Exceptions. I initially thought that the RAM was bad so I returned it and got a replacement.

After installing the new RAM I was again hit by the same random BSODs, this obviously raised concerns that my MB was up the creak on one of the RAM slots that I'd now started using. Hoping for the best I dug around in the Application log of Vista and found the following two Side by Side entries:

Activation context generation failed for "C:\Games\Enemy Territory - QUAKE Wars\ServerLauncher.exe".Error in manifest or policy file "" on line . A component version required by the application conflicts with another component version already active. Conflicting components are:. Component 1: C:\Windows\WinSxS\manifests\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.6001.18000_none_5cdbaa5a083979cc.manifest. Component 2: C:\Windows\WinSxS\manifests\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.6001.18000_none_152e7382f3bd50c6.manifest.

and

Activation context generation failed for "C:\Games\Enemy Territory - QUAKE Wars\ServerLauncher.exe".Error in manifest or policy file "" on line . A component version required by the application conflicts with another component version already active. Conflicting components are:. Component 1: C:\Windows\WinSxS\manifests\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.6001.18000_none_5cdbaa5a083979cc.manifest. Component 2: C:\Windows\WinSxS\manifests\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.6001.18000_none_152e7382f3bd50c6.manifest.

One pained uninstall later and the machine is running beautifully! You can't uninstall in Safe Mode as the service isn't running and won't run under Safe Mode, so I had to try with the BSOD still randomly happening on either start up or during the uninstall.

My only guess is that something in the Quake code is hard coded to expect 32bit sized number, and by adding 2GB on a 64bit platform it could full utilise the extra RAM and started going bang.

4 Aug 2008

Manic Miner in Silverlight!

NxtGenUG Silverlight Manic Miner
http://www.nxtgenug.net/manicminer

NxtGenUG Co-Founder Richard Costall & Member Pete McGann are pleased to announce their “Silverlight” Manic Miner game Beta is now live on the NxtGenUG site. Manic Miner was originally written by Matthew Smith, under games company Bug-Byte in 1983. The game was a landmark title in the history of gaming.

The original classic features 20 caverns to negotiate, and Pete and Rich had lovingly created 9 of these so far, with more to follow shortly.

Silverlight Manic Miner shares a custom built ‘time based’ engine with an XNA version of the game. A library of c# files is shared between the two systems. The Silverlight edition is also integrated into the NxtGenuG site, through Application services, and registered visitors can have their high scores recorded and shown in a leader board which refreshes every 60 seconds.

Pete and Rich will be telling their story at NxtGenUG Coventry on August 11th 2008