23 Aug 2008
My first full length presentation
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
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
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
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!
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
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
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