Archive for the 'General .NET' Category

Vista Launch Presentations

The presentations from my Vista Community Launch talk (21 Jan 2007) at the Manchester VBUG meeting held at Manchester Digital Development Agency

Thanks to all those who attended and congratulations to the lucky Vista winners… You know who you are.

Generic Methods… Now there’s a thing

Like the rest of the .NET world I have been soaking up the classes in the System.Collections.Generic namespace which have saved me a shed load of lines of custom collection code.

The other day I was writing some CodeSmith templates and needed a class to represent a property that could be hydrated from an XmlNode. And thus I began…

private XmlNode _propNode; 

public string Name 

{ 

    get 

    { 

        string attName = "name"; 

        //check the attribute exists 

        if (_propNode.Attributes[attName] != null) 

            //it does so return it 

            return _propNode.Attributes[attName].Value; 

        //it doesn't so return an empty string 

        return string.Empty; 

    } 

}

After the first few properties I realised I needed to refactor the XmlNode reading out as I was going to have about 20 properties that did the same thing. The problem was that the Value property of the Attribute returns a string so I was going to have to do some type conversion and so would need a method for each type string, int and bool that I needed. I seemed to recall reading about Generic methods and so I investigated… As it turns out I ended up wrapping this method with a method for each type anyway but I discovered Generic methods along the way which I’d not taken advantage of before.

public void GetAttributeValue<T>(ref T attValue, 

    XmlNode nodeToParse, string attName) 

{ 

    //check the attribute exists 

    if(nodeToParse.Attributes[attName] != null) 

    { 

        //get the string value 

        string strVal = nodeToParse.Attributes[attName].Value; 

        //set the attributeValue that has  

        //been passed in by reference, casting it 

        //from an object using the Generic parameter 

        //and using its own type to perform the conversion 

        attValue = (T)Convert.ChangeType(strVal, 

            typeof(attValue)); 

        attValue = (T)Convert.ChangeType(strVal, 

            typeof(T)); 

    } 

}

You can’t specify a Generic return type so you get the value out by passing in an argument by reference. So, you call this method like so:

public bool IsPrimaryKey 

{ 

    get 

    { 

        //set your default value here 

        //that is returned if the attribute 

        //doesn't exist 

        bool returnVal = false; 

        //call the method specifying the type 

        GetAttributeValue<bool>(ref returnVal, 

            _propNode, "isPrimaryKey"); 

        return returnVal; 

    } 

}

This allowed me to use the same method for all of the types of parameter I wanted to fill from the XmlNode’s attributes.

In the end this didn’t save me a great deal of code from doing it without using Generics and I still ended up casting the return value from an object so there would be no performance benefit either (not that performance was an issue here) but it is definitely an interesting language feature that I am sure I will find more uses for…

Visual Studio on Vista

This all looks a bit alarming… The gist being that none of Microsoft’s dev tools for the .Net framework are fully compatible with Vista and only VS2005 is ever going to be. This leaves mine and everyone else’s 1.1 projects out in the cold as far as Vista is concerned.

There are lots of efforts around to get VS 2005 building against the .Net framework 1.1 but surely, especially in light of the fact that the Windows folk claim it is a piece of piddle to get your applications to run on Vista, we should be able to run 2003.

Baffling…

UPDATE:

Jonathan Allen links to a bit of Microsoft opinion on this issue… The official line lies between “great progress w/Vista on the security front” and “We are just as (financially)constrained as everyone else”. In some ways I can buy the first one. Security is a trade off and generally, to get the benefits, you have to give up something. Whilst the second one may be true in that the dev tools folk no doubt have a budget and a finite amount of resources I don’t think it is a good choice of argument to pacify the VS using public. As it happens, it also turns out that most of VS2003 will work if you are running as admin so hopefully it isn’t going to be too much of an issue.

Vista RC1… Feel the pain

In my earlier post on Vista in Virtual PC 2004 I mentioned some of the troubles I had installing and running Vista RC1. Scott Hanselman posted yesterday about some of the issues, rather all of the issues (I hope as there is a big old list of them) that he has come across since taking the plunge to install on his ‘everyday’ machine. Sounds like it has made a right mess of it.

I like that way he points out that he is still ‘stoked about Vista’ despite the fact it has buggered his machine up. Never say die…

I reckon if Scott Hanselman (without lavishing too much praise in his general direction) is having trouble then there isn’t much hope for the rest of us…

So what does RC stand for then?

  • Retreat Cautiously
  • Really Crap
  • Return at Christmas

Any suggestions?

VBUG Manchester Meet…

Continuing my hectic week of nerd community events (two is hectic by my standards) I attended a VBUG doo in Manchester yesterday evening. The presentation was an overview of the of the newly named, and with characteristic verbosity of course, ASP.NET 2.0 AJAX Extensions and was ably delivered by Gary Rowntree.

The presentation only briefly touched on the other elements of the ‘Atlas’ framework but did cover the server side of things in a fair bit of depth, particularly the update panel and the process it utlises to weave its magic.

I have used all kinds of terribly hackish methods for doing away with obvious page postbacks in the past, which generally involved stashing a hidden page in an iframe or sneaky window, but I haven’t really scratched the surface of the frameworks that are available now. So I’m no expert but what I would say is that we should all give it a little bit of thought before using asynch callbacks for everything. Alex Bosworth has an interesting list of AJAX no nos on his blog. The ease of the update panel might make AJAX monsters of us all…

I stumbled today on a new podcast that I hadn’t listened to before and funnily enough the current episode (show, cast, release… what do you call them?) is about the client library side of the Atlas set up which is the bit that was largely absent from Gary’s talk. The podcast is by Wally McClure and can be found here and includes a demo video.

If you fancy going to any of the Manchester VBUG meetings should keep an eye on the listing or get in touch with VBUG.

Vista RC1 on Virtual PC 2004

I have finally got Windows Vista RC1 going in a virtual machine on my laptop. I started with it yesterday and I have to say it wasn’t the smoothest ride. That isn’t to say it is Vista’s fault but more getting it to play nicely in a virtual machine. The first couple of attempts were slow and unstable, so much so that I couldn’t actually get it not to freeze for long enough to get the virtual machine additions installed.

On a browse around the web this morning I discovered that according to Mike Kolitz (and he should know as according to his bio he is on the Virtualization team) the VM Additions that you need for the RC1 build are cunningly hidden inside the iso that comes when you install Virtual Server 2005 R2 Beta 2. You need to install that first and then attach the iso that ends up in your programs folder to the virtual machine for installation. Why they aren’t available seperately is anyones guess but there they are.

Once I managed to get those installed everything was hunky dory. Well, almost everything except I had no Internet connectivity. After a lot of prodding around I discovered that the Virtual Machine Network Services that are required on the host machine network connection had been mysteriously disabled. Virtual Server perhaps? Who knows but having enabled them again all was well.

I was hoping that, armed with the appropriate VM Additions I would get the Aero interface but alas, the emulated graphics card in Virtual PC doesn’t appear to be up to the task. I didn’t even realise that it emulated a graphics card so I spent a fair while trying to get the drivers for my card into the VM thinking that their absence was causing my initial woes… Well… you live and learn.

As for Vista, it looks great. I don’t think you can really give an informed opinion on an operating system until you use it ‘in the trenches’ but it is looking good so far.

Unit Testing isn’t necessary once you get a bit of experience down you…

What a crock. Following hot on the heels of Phil’s ‘Old developers get on my nerves and smell of soap’ post (not altogether accurate quote, more paraphrasing) I stumbled, via hanselminutes across this load of old tosh…

It appears that once you have 21 years of development experience under your belt you can divine whether your code works correctly using the force.

I have not really got into ‘Test Driven Development’ myself, now that isn’t to say it hasn’t got its merits, but my brain doesn’t work that way at the moment. I at least get a class defined with some method stubs in before I think about unit tests. I very often fill the methods out and I am sure there will be XP purists that balk at that.

I have in the last year written an application that because of time pressure I decided to do away with writing the unit tests. I think this is a reasonable decision to take if there just isn’t room to fit them in. I wish I had though as six months later the client was back for some new features that involved a bit of a reworking of some of the old stuff and it was a nightmare without the unit tests available.

You see, I am of the opinion that to consider unit tests as purely a time consuming mechanism for finding bugs is to undersell them. Bugs will out eventually, unit tests or not but the big thing for me, and the thing that gives the payback for writing them in the first place is when you come to do some refactoring or other. Particularly when things have got a bit out of hand. To be able to instantly see what has broken as a result of your changes is where it is at for me with unit testing. You also can’t argue that if you are able to automatically run a defined, possibly 100%, amount of your public APIs with every build then you are going to have a more robust application at the end of it than if you arbitrarily give it a manual runout.

The ‘time consuming’ argument is not really holding water these days either. I mean, you still have to write some stuff but there are plenty of tools that can lend a hand. Just out of the ones I have had a play with you have CodeRush that has some templates, Visual Studio will generate tests for you that need a bit (or a lot at times) of editing and there is nothing stopping you generating them with CodeSmith or any of the other miriad of code gen tools.

Judging from the comments Wil Shipley isn’t alone. I don’t mind people like that though…

…because they are wrong.