New Baby

New Baby

He’s here !!

Born at 11:10am on Friday 1st September 2006. Weighing in at 8lbs 7oz and sporting a big pair of lungs, both he and mother are fine.

The bad news is that Sarah and I have both agreed that he doesn’t look like a ‘WILLIAM’, so we’ll have to be thinking of names over the next few days / weeks.

XMLSerializer – what a pain !!

So I’ve spent a lot of time (seems like a huge amount) trying to get to grips with the XMLSerializer in .NET. I think I have pretty much come to the conclusion that what I’m trying to achieve is not possible (even though it seems like a logical thing)…

I’m trying to serialize a bunch of class data into XML format. The actual objects seem to Serialize correctly (if I set the ArrayList, al, to public in the collection) and I can modify the element names in the XML that is produced by using the [XmlElement(“new_name”)] attribute.

However, trying to set the ArrayList to non public and have the XMLSerializer use the C# indexer to get the objects gives me no end of hassle.

  1. If I set the indexer to return objects of the interface type it will always fail
  2. If I change the indexer to return objects of the concrete class then I cannot seem to modify the element name of the concrete class in the XML – it always comes out as ‘MyClass’

I’ve tried overrides, but these also fail telling me I cannot apply a RootAttribute or TypeAttribute to the class

Looks like it’s going to have to be implementing IXMLSerializer instead…

Here’s a snippet of the code that I can’t get working…

public interface IMyInterface

{

    double BigNum { get; set;}

}

 

public class MyClass : IMyInterface

{

    private double mBigNum = 0;

    public MyClass() { } // default contructor

    [XmlElement(“bignumber”)]

    public double BigNum // property

    {

        get { return mBigNum; }

        set { mBigNum = value; }

    }

}

 

[XmlRootAttribute(“gpx”)]

[XmlInclude(typeof(MyClass))]

[XmlInclude(typeof(IMyInterface))]

public class MyCollection : ICollection

{

    private ArrayList al;

    public MyCollection() { } // default constructor

    public Add(IMyInterface obj) { al.Add(obj); }

    public IMyInterface this[int index]

    {

        get { return (IMyInterface)col[index]; }

    }

 

    // ICollection members all implemented correctly

    // IEnumerable members all implememnted correctly

}

 

// code you want to run to do the serialization

MyCollection mc = new MyCollection

XmlSerializer xSer = new XmlSerializer(typeof(WaypointCollection));

TextWriter writer = new StreamWriter(@”c:myfile.gpx”);

xSer.Serialize(writer, mc);

writer.Close();

 

Implementing SCRUM – Lessons Learnt

I’ve recently implemented the SCRUM methodology at work (C2C Systems).

It has been a really interesting process, has taught us some very valuable lessons and provided a number of benefits :

  1. There are many things that go into the development process that people do not view as (or understand are) part of the software development lifecycle (SDLC). During the first couple of Sprints we didn’t have all of these surrounding tasks in the backlog so our time estimates for getting features complete were a good deal off. However this was made visibile by the daily SCRUM meeting very quickly and sorted out on the subsequent Sprints.
  2. Developers really appreciate the kind of visibility it gives them of what is going on. What is left to do and in what sort of timescale, also what the objective for the Sprint is and the (non changing) list of tasks for the Sprint are.
  3. It doesn’t work well when you have interdependant tasks in the same Sprint. OK, maybe one or two would be OK but lots of dependancies are a bad thing. All design and investigation work should be in the first (or early) Sprint and the coding in the subsequent (or later) Sprints.
  4. It ‘s incredible the visibility you get of Impediments. …and the difference it makes when you ‘fix’ them. Fixing them also demonstrate to the development team you are serious about helping them be successful.
  5. It ‘s incredible the difference it makes when you focus everyone on SCRUM work. For example we got a little behind during one Sprint, we focused all developers on the Sprint work, barred interruptions (I triaged all Support Escalations for the day) and the productivity for the day went through the roof.
  6. Our estimating (of timescales) improved beyond recognition. Instead of ‘Oh that’ll take about 2 weeks’, you get accurate estimates (because the developers know that you have all components of the SDLC in the ‘plan’ they feel more comfortable providing accurate timescales instead of trying to cover their arses). I measure the delta between time worked on a task and the time estimated, then add all those together for all tasks and generate a percentage figure – last Sprint was 98% accuracy in our estimating

Here are some links that I found useful when planning / implementing SCRUM.

and here is a sample Excel spreadsheet I use for planning and tracking our SCRUM projects.

My Home Computing Utopia

OK, so we’ve moved house and I’ve found my study (computing area devoted to Ken) has been downsized to what I would call a ‘cubby-hole’ – Not Good !! Anyway, alongside trying to rationalize what I use on a day to day basis and moving the equipment around I’ve been thinking of what I really want.

To rationalize everything I currently have and get ‘what I really want‘ I envisage :
A small / low powered PC providing email, instant messaging, file sharing and running Subversion (source code control). This would enable me to run it 24/7 using a minimal amount of power, it would allow Sarah to do email and IM and allow me to get access to source code and files remotely. Then the second (large, more powerful) PC can simply be switched on when needed (DVD burning, importing from camcorder etc).
I noticed a review recently of a ASUS device which is basically a wireless router with built in web server print server, ftp server, it can share USB printer, webcams and has a 160GB drive with RAID 1 option built in. I expect this is based around one of these small Linux based boards that are so prevalent these days – I have another one in the form of a Linksys WRT54G wireless router (running DD-WRT custom software)….. These devices can do much of what I need, the missing parts are email, internet browsing and IM – not present as the devices have no graphics capability (all the interaction with it is done via the clients web browser to a built in web server in the device)… The ASUS device goes a little further in that it can host other USB devices on it’s ports and share those out also (webcams, printers etc), but still not quite far enough…

I guess I’m looking at putting a small form factor Mini ITX based system together that’ll do the email, IM and Subversion and using an external USB drive as the mail store for file sharing.

Of course, this doesn’t cover my HTPC utopia or my PDA utopia – more on those later.

We have a name !!

After months of debating, listing, reviewing, comparing and disagreeing and with only 3 weeks to BoB Day (Birth of Baby day) we almost have a name for the new baby…

WILLIAM

Nest is well and truly built – the whole upstairs of the house has been redecorated, carpeted, walls knocked out and rebuilt, plastered etc etc etc in the last 2 months, all the necessary items have been purchased, hospital bag is packed, baby’s clothes are bought, washed, ironed, folded and stored in the relevant drawer / chest.

Now it’s simply a case of ‘hurry up and wait’

Poor service from web hosting company 1and1.co.uk

I have now been with web hosts 1 and 1 for three years now, I chose them as they seemed to be big (giving the impression that I could
expect a quality service from them) and they were also reasonably priced £4.99 per month for basic ASP.NET hosting allowing ODBC
connections to an Access database.

Anyway there have been a couple of instances where they just stopped my account and locked me out, probably due to my credit
card expiring or something but I never seem to have been notified and the first I know about it is when I can no longer access my email.
The latest spat I’m having with them is the same thing, billing failed because my credit card had expired (for an amount of £25), I was
never notified and now they’ve sent it to a debt collection agency – no doubt it’ll be incredibly difficult to it paid and have an extortionate
admin fee associated with it – I’m looking at weeks before I get my hosting and mail back.

Thankfully, this site (kenandsarah.co.uk) is hosted by ServerIntellect who have been nothing but professional. The hosting is miles better,
allowing me much better control (I’m only using their Starter Tier) , full ASP.NET (v1.1 or 2.0) and they send me an invoice every month
for $9.95 (about the same as 1 and 1)…

As soon as I get the mess with 1 and 1 sorted then I’m moving all other domains over to ServerIntellect as well – goodbye 1 and 1 !!

 

Munrobagging – Reaching Halfway / Ticking the Fannich's

Well, I finally reached the halfway point (in fact I passed it by one) of “munrobagging” (reaching the summit of all 284 of Scotland’s munros – mountains over 3000ft).

I left work in Reading, UK at 6pm on Thursday night, drove until 1:30am when I reached Crianlarich Youth Hostel and met my brother Dougie (needed him to open the Hostel front door as they shut and lock them at 11:30pm.

ASIDE: Youth Hostels are a fantasitic way to experience Scotland, a bargain at around £11 – £13 per night (per person), hot water, extensive cooking facilities, warm bed – everything you need. Much more comfortable than our old method of ‘tent’ which now has comparable costs in many places

Anyway, back the trip report…

We stayed at Ullapool Youth Hostel on Friday night. Saturday morning we got a nice early start and drove South, dropping a car off at the bend in the Wester Ross coastal road from Garvie (GR-NH161760) – there is a fairly big (10 car) parking area just on the roadside on this bend. We jumped in the other car and headed further South (and then West) to Grudie where we left the car by the Picnic area about 100M East of Grudie Hydro Electric Power Station (GR-NH313624).
The road to Fannich Lodge was unlocked and we could have driven up it, but we didn’t know if it might be locked the next day when we eventually returned for the car – best not risk it….

So, we set off at 9:30am and walked the 7.5Km from Grudie on the Fannich Lodge road to the head of the dam at Loch Fannich – this is actually a pleasant walk and a good warm up for the day.
From the track we simply headed up the hillside onto the obvious knoll and then kinda contoured around and up onto the ridge to get an easy route to the summit of An Coileachan (923M GR-NH241680). This summit was in cloud unfortunately.
On and over to the next munro Meall Gorm (949M GR-NH221696) and a bite to eat for lunch. From there there is a small top on the ridge, the cloud cleared and the views from the ridge for pretty much the rest of the day were fantastic – Corries, Lochan, steep drops, wilderness, deer, it had everything !!

The next munro on the ridge is Sgurr Mor (1110M GR-NH203718) with a bit of a pointed summit, but to the East of this, out on a ridge lies Beinn Liath Mhor Fannaich (954M GR-NH220724), also a munro (so it has to be bagged).
To do this, we contoured on a (slight) path about 100M below the summit of Sgurr Mor (1110M GR-NH203718), got onto the East ridge, dropped our rucksacs and nipped out and back.
There is a small Howff by the path (GR-NH207716) – stone built, completely enclosed – looks like someone put a fair bit of work into it, probably only fits two people sitting up.

Coming back along the East ridge, we picked up our sacks and climbed to the summit of Sgurr Mor (1110M GR-NH203718). Again, incredible views from here, we could almost see the car we’d left at the Northern point, Loch Fannich to the South and the whole ridgeline in between.
We had planned to nab the most Northern munro on the ridge on the first day, but by this stage we were getting a bit tired and so decide to head straight to our overnight camp spot by the small Lochan (GR-NH189721). This turned out to be a great spot, we set up the tent, got our sleeping mats and bags out, dived in and got some soup on (We always go for Baxters Crofters Thick Vegetable).
Had the weather held, we would have nipped out to Meall a’ Chrasgaidh (934M GR-NH185733) after our soup, but as it turned out it started heaving it down with rain so we snoozed instead.

Before we knew it it was 10:05pm, we forced ourselves away and put on evening meal (Spaghetti, Chicken and a Tomato Sauce) – this turned into a disaster (see next post)

Anyway, back to sleep and an early start the next morning (6:30am), jumped out of our sleeping bags and nipped out to Meall a’ Chrasgaidh (934M GR-NH185733), nabbed it and back to the tent for an hour long leisurely breakfast (1 munro bagged before 8am, not bad going)
After breakfast we packed up the tent etc and climbed the formidable looking (from our campsite) Sgurr nan Clach Geala (1093M GR-NH184715) – it turned out to be much easier than we expected, topped out, nice views of our planned route for the day and the whole area around us. headed South on the ridge to the low point (dropped our rucksacks) and then continued on to bag Sgurr nan Each (923M GR-NH184697). After this it was back to the sacks and then off the low point of the ridge to the bealach on the track from Loch Fannich to the boathouse at the head of Loch a’ Bhraoin (GR-NH174705) at an altitude of 500M, meaning another 500M climb the other side.

From this bealach it was heads down and into the climb, after a short time I was suprised to see the summit of Sgurr Breac (999M GR-NH158711) coming up (again much easier than I had anticipated). It was a bit of a relief getting to this summit as it was the penultimate and the last real big climb of the day. It was also the mid way point for me in terms of munros bagged (142)

If I remember correctly it was in a bit of cloud and there wasn’t a great deal of visibility at this stage so we carried on to a lower top, Toman Coinnich (935M GR-NH149713) between this and it’s Westerly neighbour. Here we left the sacks and nipped up to bag the last of our 9 Munros, A Chailleach (997M GR-NH136714). Quickly, we hurried back to the sacks and then off on the ridge to the North.
This is a nice wide ridge with a somewhat faint path, we followed this and were getting a bit sceptical as it seemed to head directly over the edge of the ridge into what was marked on the map as crags – however when we got there the path became more pronounced and picked it’s way through the crag and down the hillside to a small (ricketty) bridge at the head of the Loch. Cross the bridge (GR-NH159750), follow the track past the boathouse and on to the road and that was us – back at the car.

Day one started at 9:30am and we got to the mid camp at around 6pm (at a fairly leisurely pace)
Day two started at 6:30am and we completed it at around 3:15pm (including about an hour or so at the camp for breakfast)

All in all this was a succesful trip, very enjoyable, strenuous but not over taxing. Enough distance and climbing to make it challenging but not so much that we didn’t get to savour the surroundings.

Here’s a Google Earth view of the area we covered.

Steps in the technical support process

I have been looking at how to make improvements (in productivity) in our technical support team recently.
One of the ‘tick list’ items I always put on job Descriptions (when advertising) is “Must have a logical and methodical approach to troubleshooting technical problems”. I went right back to basics and thought about ‘how do I define / measure this and what, in fact, is a logical and methodical approach ?’

Heres what I came up with (at a high level) :

Step 1 – Determine who is reporting the problem.
This is gathering the contact information (email, phone, name, company, preferred method of contact etc) of the person reporting the problem to you. It has to be the first step – if the call drops mid way then you need to know who to call back, when troubleshooting you need to know who to communicate the troubleshooting steps / workarounds / resolutions to.

Step 2 – Determine the nature of the problem.
This is gathering the context information – what product is it, what they are trying to achieve, what they are seeing that they believe is incorrect functionality and what they are expecting to see (the users understanding of the problem).

Step 3 – Gather the supporting evidence.
This is where you get log files, screenshots etc. – i.e. the supporting evidence that allows you to troubleshoot in more detail / see exactly what the product was doing at the time of failure. Usually, the best way to do this is to enable whatever logging your software / system has and have the user / customer carry out the steps which result in the (perceived) failure. If it’s reproducable then that is half the battle… I also suggest that you ask for screenshots as they are good solid evidence and nothing is lost in the communication “Oh, I get an error message about DCOM or something”, or “The screen goes a funny color” – much better to have the a screenshot of the actual message / action that is happening. Of course the problem may be so obvious that you can already reproduce it without the need for support evidence – if so, then great, no need to bother the customer to get the supporting evidence, gather it yourself (ALL your support people have immediate access to a demo/lab system – right !!).

Step 4 – Outline the next actions.
TELL THE USER / CUSTOMER WHAT TO EXPECT NEXT. If you can commit to timescales, even better !! – but at a minimum let them know what the next steps are “As soon as I get the trace file from you, I will review it and get back to you, it is likely to be this afternoon sometime, what is the best number to get you on this afternoon”.

This is at a very high level, obviously in a real world scenario the above steps are all interspersed with process steps related to your own systems / infrastructure / policies etc (for example, checking the customer has a valid maintenance contract, opening a ticket in the fault tracking application)

TaHoGen Code Generation – Update

I got hold of Philip Laureano and we’ve been discussing the best way to make this available publically (we’ll probably lump for Sourceforge).

Interestingly he also mentioned that someone else has written a ‘SchemaBrowser’ style extension for it – giving the whole application much more power (on a par with Codesmith).

I rewrote the VS2005 addin so that instead of the UI being a ‘non integrated’ Windows Form, it is now embedded in a VS IDE ToolWindow. Some screenshots below…

 

Expect to see details of the sourceforge project name and possibly a CodeProject article from Philip soon...

рулетка для android

TaHoGen4 Code Generation

TaHoGen4 is an Open Source implementation of
CodeSmith, completely rewritten (for .NET2.0) version of the TaHoGen code
generation application by Philip Laureano (see his ‘old’ blog at
http://blogs.wdevs.com/philiplaureano/).

I grabbed a copy of the source for V4 and the
source for the VS.Addin and hacked it around a bit to remove the dependancies on
ManagedAddins and the Crownwood DotnetMagic control set.

I now have a version that works successfully
in VS2005, without the dependancies. I am now trying to get hold of Philip to
discuss developing it further.

If you would like a copy of the ‘modified’
source I have then let me know…