Tuesday, 14 January 2014

David Crisp-Hihn 1950-2013


David Crisp-Hihn died on December 27th 2013, after being admitted to hospital with a stroke on the 15th. He leaves behind his wife, Sandra, four children and a grandchild.

David Crisp was a pupil at King Edward VI School, Southampton when I knew him first. We became friends as a result of belonging to the same Christian Society and both attending Above Bar Interdenominational Church, Southampton. When David obtained a place at New College, Oxford to study Mathematics, he inspired me to apply also, and I was able to attend two years later. We remained firm friends throughout my university years and long after, and he was Best Man at my wedding in 1977, though later we lost touch.

About three and a half years ago we renewed contact (the internet is a wonderful thing) and arranged to go on a walking weekend together. This was so enjoyable we repeated it twice more, walking in Cornwall, the Welsh borders and Norfolk in the last three years. In Norfolk, David was less able to manage the longer walks.

I was blessed to spend these times with my old friend but I did not know how precious and important these last few days would become.

I miss him terribly.

Wednesday, 29 February 2012

I hate make

Actually, I hate make and shell (all forms) and sed and basically, the *nix command structure.

The main reason: escapes. I just can’t seem to ever get them right.  In Makefiles they are a nightmare!

Just try issuing a sed -e command after a dependency — AFAICT§ there are three levels of escape to consider: 
  1. the make level (where $ is special, and you double it to get a real one), 
  2. the shell level (where $ is special outside of single quotes) and 
  3. the sed pattern level, where $ is special and you “escape” it with a backslash to make it not special again.
Here is the line (almost) I had to get right:
sed -e 's:^ABC=$:ABC=${VAR}:' file >file.tmp

Now, execute this on the command line (bash shell) and it nearly works — it should replace a complete line “ABC=” by the complete line “ABC=${VAR}” in the file called file.

It doesn’t actually work because of the second $.  I have used (single) quotes so that the shell doesn’t try to substitute the (apparent) shell variable ${VAR} but I forgot that $ means ‘end-of-line’ to sed (even though I used it to mean that in the first part of the substitution string). So actually, it ought to be:

sed -e 's:^ABC=$:ABC=\${VAR}:' file >file.tmp

using a backslash escape to tell sed to treat the second $ literally.

So this second version goes in the Makefile, and of course it fails.  (And, it takes me some time to find this out, since the make is executed in the heart of some long-winded build process, and if I don’t execute it there it will not have the context to make it work — bórza!)

The reason is that single quotes don’t protect expressions in make, so it tries to substitute the ${VAR}.  “Aha,” I cried, “I’ll have to escape the backslash and the $ for make.”  Like this:
sed -e 's:^ABC=$:ABC=\\$${VAR}:' file >file.tmp

But I was wrong, the backslash isn’t sufficiently special in make — well it is, but double backslash is not “escaped” to backslash: instead it leaves it as double backslash, and the single quotes still offer no protection.  So we end up with “ABC=\${VAR}” in the output.

Round I go again:

sed -e 's:^ABC=$:ABC=\$${VAR}:' file >file.tmp
and this works.  Finally.

Why all this fuss?

Because *nix systems and their utilities have internalized all this escapery, inherited from an old-fashioned and stupid macro-language-style command structure, and we are now stuck with it.  Everywhere.  And of course, *nix being the democratic organisation it is, everyone does it differently, with different rules and with different exceptions.  Ugh.

So... I think we should start to unravel it.  We could start with make, for example. Let’s create a version of make where all the expressions are evaluated with referential transparency, which is to say that a literal string, once established, is never rescanned and re-interpreted again, even if I pass it around in a variable and it appears in another expression.  Substitutions are only made once if I say they should happen.  If I write an expression with a $ in it, it cannot be interpreted as a variable indicator anywhere else.

Then, the utilities that we call from make should have an ‘uninterpreted’ interface. That is, it should be possible to pass them a literal string without worrying about the contents of the string.  If we are a utility passing strings we haven’t checked, we no longer have to worry about what they might contain and scan them for things to escape.  That way, we also don’t have to worry about what the utility is that we are calling, nor where it might send this string.

I guess we would have to tackle the shell, too.

There would be consequences: some of our tricks (for example: escaping the right number of times so that the cascade of string passings remove the escapes and trigger interpretation at just the right level; or, varying the name of a reference using the value of another) would be harder to achieve — but let’s face it, who needs these really? And when you do, how long does it take to get it right?  And have you ever got it (really) right?

Yup, a proper referentially transparent shell would be a first step.  Or maybe a grep....

hmm...

§ I also hate all these cheesy acronyms — it’s just a linguistic barrier to ensure the prols can’t easily join the club.

PS: Did you notice that the ‘footnote’ didn’t link properly? I don’t know how to do this in this form — how do I link to an anchor in the same page?

Friday, 12 June 2009

Spec thought for the day

Browsing around StackOverflow I came across a question about specifying binary files. One of the answers said that the Java spec for class files was a good example of how to do it.

So I went there to look and found this:

  ClassFile {

u2 constant_pool_count;
cp_info constant_pool[constant_pool_count-1];

}

and the following description:

constant_pool_count
The value of the constant_pool_count item is equal to the number of entries in the constant_pool table plus one. A constant_pool index is considered valid if it is greater than zero and less than constant_pool_count, with the exception for constants of type long and double noted in §4.4.5.

constant_pool[]
The constant_pool is a table of structures (§4.4) representing various string constants, class and interface names, field names, and other constants that are referred to within the ClassFile structure and its substructures. The format of each constant_pool table entry is indicated by its first "tag" byte. The constant_pool table is indexed from 1 to constant_pool_count-1.

and I wondered if this is a good spec what does a horrible one look like?

Granted, this is quite chatty, but when you read it for sense you get more and more confused.

It looks like a C structure, so let's read it like one… 

Why is the count one more than the number of elements in the array?  The array index starts at 0 when I declare one.  Oh yeah: the valid indexes are greater than zero (why omit the zero index?)—except for some long and double stuff, life's too short—and then the valid indexes are from 1 to count-1.

Whoa! where do they go? The declaration a[3] normally allocates three elements (indexes 0, 1 and 2), but here we allocate count-1 and index from 1 to count-1.  The last index would be invalid!??!

Aha!  We must be basing our arrays from one and not zero!! 

…and the count entry isn't a count really.

Ugh!

If this is a good spec my name is Edsgar Dijkstra.

Thursday, 2 April 2009

Install updates?

It's a few weeks now since I last posted about my new job.

Spring (in my step) source
    One of the nicest things that ever happened to me, being in a new (smaller and friendlier) company has boosted my energy, optimism and self-esteem. That, and free membership to the local gym, has made me feel younger! It is simply amazing what a challenge and a change (with, it has to be said, a wise and people-savvy company) can make to a person. [I still look the same age, though--you can't have everything.]

A few weeks ago (about six, now) we adopted Scrum working. (See picture below.)














This, in case you didn't know, is an iterative development structure that encourages short, development spurts, with clearly defined and effort-sized deliverable outcomes. These spurts are called Sprints and in our case are three weeks (elapsed time). [Of course, in my old place we couldn't have just `adopted' Scrum. This would have been hard to do without several levels of sign-off: and the running and scheduling of Sprint planning meetings would be very difficult indeed.]

Progress
    We just completed our second (full) sprint. (That's how I knew it was six weeks -- see?) I have to say that, normally cynical about these much-lauded `methodologies' (and having experienced--and even taught--a fair few in my time), I have found this one to be quite positive.
    Since the internal workings of a sprint are really up to the team (and they are relatively free to do as they please) we have been guided (by the team leader) rather than driven, and are still feeling our way. However, the nature of the beast is that teams are expected to learn for themselves what is good and bad about the process -- including how to estimate the team's tasks beforehand. 
    For us, that means we are still tinkering with how we deal with change: most of these are the usual--design changes, external dependency lapses, unexpected and persistent bugs, unplanned absence; and the answers are the usual ones--postpone design disruption (until the end of the sprint), re-order tasks to allow more external time (and plan tasks to negotiate with third parties), rally the `troops' to crack hard bugs once and for all, pull together to keep the sprint plan on target.
    In the case of a short spurt (the sprint), and well-defined and agreed tasks for that spurt, we find it is easier to apply those standard solutions. In every case the small tasks and sprint structure makes it easier:
  • postponing tasks is easier since there are enough small tasks planned to rearrange and even re-assign;
  • re-ordering is easy, even if there are inter-dependencies, since the short sprint meant that not too many were scheduled at once, and the dependencies are manageable;
  • rallying the troops is not hard, because only a week or so ago all the team members took joint responsibility for the deliverables--there is no shortage of offers of help.
After a number of these, too, the members of the team have worked closely and regularly and this makes joint responsibility easier to execute: we learn each others' skills. New guys learn more quickly and have a sense of achievement earlier. They become old guys sooner (and I mean that in the nicest possible way).

Distress
It is prudent of me to talk about the not-so-good things, or things for which the jury is still out:
  • the expectations of the product owner can be skewed, and not allow enough team experience before expecting (or trusting) tight estimates -- hopefully this is something that can be ironed out over time;
  • the team members have to work at close co-operation during the sprint (we are lucky to be all in the same room--although this could be a problem for a larger team);
  • learning what `hours worked', `task complete', `ideal hours' mean requires several sprints to iron out--and this can easily be disrupted by team personnel changes;
  • it is hard to do difficult things--especially if they require sustained, co-ordinated effort.
There are other niggles, but I have to be careful not to confuse genuine concerns with my natural tendency to be a Grumpy Old Man.
    More on the progress of this `experiment' later.

Meanwhile...
    Back at the (old) ranch I hear all is not happy: the large management structure, lack of technical autonomy (caused by lack of trust), and catastrophic disconnect between effort, achievement and reward, means that more and more (oftener and oftener?) I am hearing heart-rending bleats of discontent from my old friends. What they can do about it, I don't know, but I wish better for them.

Sunday, 15 February 2009

Re:sprung

Well, it has been a few weeks since I started at this place, and I promised an update.
It hasn't been entirely easy, of course, and I can't say I've fully found my feet yet, but it is still exciting and I'm still enjoying it. I guess that is good enough in this present economic climate; there are some I fleetingly met here who are no longer with us.
Just a week after I joined, there was a full company meeting. (Oh, the joy of having so shallow a corporate structure that the CEO was in the same room as me.) The company had to make savings of such-n-such per month; suggestions for savings were being taken now (from anyone); redundancies were inevitable; we will consult with each and every one of you over the next two weeks; those who are ear-marked to leave us already know this.
I was, understandably nervous -- I only just got here, and one of the criteria was length of service. Well, I'll get my coat. But it turned out, I hadn't known it, so maybe I wasn't going, and this was confirmed (in a personal interview) soon after (approx. an hour later).
It transpires that the percentage cut in our (little) company was only just higher than that for my previous (humungous) company. About twenty from the new firm were let go. I shudder to think of the number in the old place. I guess the procedure was a little slicker here -- it was all over in two weeks, and everybody had a say. In the old place, I hear there was FUD (and blood) but that, thankfully for my old colleagues, not many casualties in the UK Lab.
All in all, I'm happy to have moved. Although my chances of being snuffed were (numerically, at least) higher here, I think I might have been a casualty (early retirement forced) and although I missed a redundancy offer, I'm happier to have jumped rather than being pushed. I feel so much better about this place having made the decision myself.
And they seem to want me.
All we gotta do is make money this year.  Shouldn't be too hard :-)

Jamie update


So now Jamie is nearly full-grown, and simply runs over the garden fence without a paws. He is delightful, wilful and fearless, and we can't imagine life without him.

I suppose the dismembered rodents and fledgelings by the back door are a small price to pay for such delight, though our solution to the bird feeder (a big pole) seems to be working fine.

Although much affection is paid towards James, not a lot is returned. He purrs a lot, but seems to lose interest quickly.
Ho hum, we live and learn.  And love.

Friday, 2 January 2009

Sprung

I'm not sure I'm suited to writing blogs.

I've spent a little time trying to get this one going, but it seems like there is never anything important to say, and when there is, I'm far too busy to write a blog entry about it.

However, there is something good to say at the start of this new year. Last December I 'retired' from my old job -- after 31 years working for them.  I was 55, so entitled to retire, and collect my pension.

However, this wasn't an easy decision -- financially, of course, but also emotionally and logistically. I wasn't considering retirement in my list of potential life changes at all until October last year.

I notice that in this very blog (a post about a year ago) I lament the loss of a colleague -- who went to work for another company. Well, it turns out this other company was interested in my joining them, too. My friend (we have kept in touch) mentioned this to me last September, and I thought about it for a month or two.

Finally, I decided to jump. I managed to retire and start work for the new place in December 2008.

The last three weeks of 2008 have been interesting, to say the least. I'm enjoying it immensely, though it is a little scary, too. Everything is different: the people, the equipment, the development systems, the coffee... and they are all brilliant.  I've had to be the 'new boy' again, and it is tremendously refreshing. For a very long time, I now realise, I wasn't enjoying my work -- nor giving my old company my best shot. These days I get up with a spring in my step -- I'm eager to learn and develop -- I want to do well. I didn't know I'd lost that spark.

Do I miss my old mates? Yes, immensely. Are there any regrets? Some. On a scale of 1 to 10, how stressful a transition was it? About 6. Nowhere near as stressful as, say, moving house was (three years ago), but it feels like good stress.

So now I'm in the new place, the coffee is free, the people are bright, the work is challenging (very, at the moment) and the future slightly less certain than before; it is probably the best single career decision I have made in twenty years.

As I begin to fit in, and learn how to make a positive contribution (rather than now -- where I'm slowing people down with silly questions more than helping, just at the moment) I'll try to remember to return here and let you know about it.

[I've decided not to mention names -- not because there is any reason to hide them, but simply because it is not relevant. However, the title of this entry gives a clue.]

Friday, 27 June 2008

Jamie the Kitten

Born on 28 April, and brought home two days ago, Jamie already promises to be a handful! His name was, for a moment there, likely to be Bandit (because of the black mask and cape over his fundamentally white fur), but James was considered more dignified -- and there is something of the air of a butler about his appearance.


Not so his behaviour. Though terrified of our labrador bitch (Seal), he shows no sign of running away -- standing firm all spit and hiss (and twice his normal size). We are gradually getting them used to each other. It is clear that Seal will eventually come out worse in the arrangements, and we know who the king of the household is destined to be.

He demands (and gets) non-stop play and food from all his loyal subjects already!
Presently his dominion extends from the kitchen into the (warmer) dining room, with Seal carefully shunted sideways when he roams. This will have to do for the moment, though in a few days they will be allowed to mix (supervised). More news then.




He is already hitting the bottle.

[I forgot just how much hard work a baby animal can be :)]

Monday, 23 June 2008

BSL new venture for me

Just started learning BSL -- British Sign Language: had my first lesson last Thursday.

It is fascinating how regional it is: the sign for my home village is surely not known more than a few miles from here :)

I've learned to finger-spell, but very slowly. I've learned that my surname has a short form -- many of these rely upon similar sounding words which signs are then used as a proper name -- mouthing the real words as you go helps to disambiguate.

The lesson was very well run, by a totally deaf teacher. She asked us to practice conversing (simple things like -- where do you live, and how did you get here today?) by moving 'round the room. It was a moment of revelation to me that I didn't have to get near someone -- I stood up on my chair and signed to someone on the other side of the classroom. It was very liberating!
[I know, others thought I was weird, too -- but I did it because I could!]

I signed up (pun?) for this course because recently I met a colleague who is deaf, and who signs well. I was at a loss, and resented the feeling of impotence the lack of communication gave me. He helped me to learn a few words and signs, but I thought a proper course would be better. So here we go... My ability with non-native spoken/written languages is abysmal, so it remains to be seen how well I do with this.

The ability to hold a conversation across a crowded, noisy room is a plus, though.

Saturday, 17 May 2008

Norfolk Coast Path

Visited Norfolk again this year, and stayed in a little village called Binham. This has a ruined Priory, out of which the village church rises -- one of the tallest inside I have ever seen.
Our plan was to walk the Norfolk Coast Path, in stages, over about five days, driving or bussing to the start and returning to the cottage each evening. The coast path goes from Hunstanton to Cromer (and normally in that direction) and a glance at the map shows Binham to be roughly centrally placed, less than 4 miles from the coast itself.
[Actually, it takes more than a glance -- quite close scrutiny is required to find Binham. Between Langham and Great and Little Walsingham is a clue!]
Photos later.

----
No photos arrived; sorry.

Thursday, 18 October 2007

Long time...

After over twenty-five years working here a good friend of mine has left the company I still work for, and gone to pastures new. To say that I envy him is not strictly accurate but I certainly envy the excitement he must be feeling around now. And the chance to learn new things and meet new people.

At my ripe age I wonder if I'll ever feel that sense of possibility again.

Tuesday, 8 May 2007

Red free

Fit the Third

So now I'm under and I've checked that power is getting to the pump (it would help if I set the universal meter correctly before probing), and I need to remove it.

A rather surprising piece of tubing is brushing my face as I work — it isn't attached at this end, is it a venting tube? Just hanging down?

I disconnect and get the pump off and go back to the diagrams in the Parts Catalogue (Moss) and look at the owner's maintenance manual, too. There are really good instructions there, and the parts are just discernible in the pictures. I need to take it apart.

This is nasty, since I don't have any gaskets or other replaceable parts, I have to be careful. But, hey ho, nothing ventured, and I can always buy another one if this one is damaged by my fumblings.

Inside the diaphragm is clean and sweet, the seals are re-usable, the springs are good and the points — uh oh the points are black.

Some paraffin later, and some ginger repositioning and I'm ready to try again.

Reassembly is a little awkward — I have to squeeze the five silicone plastic 'figure-of-eight rings' that centre the solenoid into their groove and then adjust the solenoid 'throw' by screwing it in and out. Unfortunately, this requires holding onto the diaphragm itself and turning. Not something I want to do with a lot of force. But the rings in place make this hard, so I remove them again (prise them out) and with just three of them in place I can turn it. When it seems about right (pressing in and out against the spring shows when this is) I align to the nearest set of holes to fix this setting and reseal the pump chamber. Tricky stuff.

I now reassemble the electrical end (don't ask) and notice that there are two venting tubes on the pump. One from the solenoid housing and one from the points end. Quick glance back to the parts manual: aha! there is supposed to be tubing from here to... where?

That tube — where did it go? After some scrabbling I find there is a T-piece, the two aligned ends of which simply open into the well of the boot. Actually there are two of them! Are these the places that the vent tubes should be connected to? Yes! I see in the parts catalogue that this is right! But the tubing I have doesn't fit on the vents (it is too big) so I suspect that this pump is not original. At some point in the future I'll get some more tubing and refit the T-pieces. For now they are removed.

Much later I read, in a book about restoration of Midgets and Sprites, that these are vents which were fitted to the earlier MkIII models. It's nice to have confirmation of one's guesses.

Now to try the pump again — it is a little awkward refitting the pump, there isn't a lot of room to tighten the connections — and I'm just a tad apprehensive when reconnecting the battery.

All is well; the reassuring 'clicking' sound is back. How could I have forgotten it? And Red starts first time.

Now all I have to do is start researching and fixing the rough running!

Sunday, 6 May 2007

Red too

Fit the second

After the fuel was obtained and I could actually get some into the tank, I tried to start him again, but Red [my MG Migdet MkIII — see my previous blog] still refused to fire.

Still no fuel at the carburettor.

Now many of my friends and colleagues will not be surprised to know that while I am at work I am not always concentrating on "matters at hand". I often think about other things and Red figured a few times. Sometimes, I had glanced at the manuals in passing.

When I bought Red I was bequeathed a few manuals and books that have proved to be of immense use. They include:
  • Haynes Workshop manual
  • Owners manual (not for my model, but still handy)
  • (old) Parts catalogue
and I browsed through them for hints. It was in Haynes manual that I noticed that this model has an electric fuel pump (later models had a mechanical one), and it slowly dawned on me that if this was the case, I should have been able to hear the pump when I switched on the ignition. Since Red had been with us only a few short weeks, I couldn't remember this noise, it certainly wasn't 'clicking' now. So the fuel pump was implicated.

First problem — where is it? It turns out this requires a closer look at the manuals. Haynes proved surprisingly unhelpful here: it gives a photo of the offending, but a mere word or two about where it is! The other stuff, including the parts catalogue (amazing how much you can learn from an exploded diagram if it includes everything), was more helpful. It was underneath; next to the Petrol tank. I got to it.

This sounds easier than it was, since I didn't have any ramps or stands, and getting under with only a jack or two is not recommended.

I therefore bought (second hand) a couple of ramps. This took another few days, and also some trouble getting the car up on a ramp! I couldn't push it, it wouldn't drive up and so I had to jack it up and put the ramp under. This involved a few bricks and two jacks. [I wonder if Anne will let me dig an inspection pit?]

Red

Fit the first
In my profile I mention a MG Midget MkIII. I acquired it last year and when I bought it it was in reasonable condition, and working (with an MOT!). This is a speculative purchase for me (spurred on by Anne, who thought that it might be fun — she knows me too well) and I don't have the tools or experience really. But half the fun of ownership is to gain the tools and experience. She tells me.

The first order of the day was to decide what to call it/him/her. My daughters decided it was male, although every other car I have owned (or my father has owned) has been female, so we wanted a suitable nom de la rue.

To cut a long story short, Jen wanted to call him Red Rum — the paintwork (such as it is) is Red, Tartan Red I think — but I thought that was demeaning since it implies it is only one horse-power. So in the end we shortened it to Red. I bought a Black n' Red workshop notebook, and ink-blackened the Black n' on the cover, so it reads (in red insert on a black background) appropriately, and was smug.

However, soon after we garaged him and I got a new battery (the old one loses charge quite quickly) Red failed to start. There was no trouble turning the engine over, so the new battery is OK — just no inclination to fire at all. We go into detective mode.

Aside: While fitting the new battery I banged my head so often on the bonnet, which is heavy and back-hinged with the battery right up against the back of the dash, that I removed it. It now stands against the wall at the back of the garage.

First, electrics: the spark was fine (this is so tricky to do on your own). Check.

Second, fuel: I took the fuel lead off the carburettor, switched on and turned the engine — no fuel. Aha! Have I run out? [It might true: the fuel gauge was one of the things marked dodgy when I got him, so looking at it was not obviously helpful.] From what I could tell by rocking him, and listening for sloshing at the filler, we might be very low.

Red had been lovingly managed by his previous owner, and amongst other things had been converted to run on unleaded petrol. My other car (no name, notice) is a diesel, so I do not have a ready supply of fuel in the garage: I had to get some. Also a can. Also a funnel. This took a few days.

Monday, 18 December 2006

Yo Ho Ho

Christmas is coming and it has been a busy season already.

Last night we hosted some 40 people in our house for 'carols, mince pies and mulled wine'. Mostly singers (and players) from our west gallery music group The Madding Crowd but we were also joined by neighbours and work friends. The neighbours especially came out of self-defence: the singing was rather loud.

As usual we over-catered. The mulled wine was made in three batches and was almost perfect, but 108 mince pies was a little too many to make! Oh well, we'll just have to eat them ourselves. The cheese and french bread we added at the last minute was overkill. Surprise surprise, people brought things with them: mostly wine, but there were (more) home-made mince pies and mini sausage rolls -- still hot from the oven.

One person brought a reed-organ, another a cello, another a violin and my daughter Jennie went upstairs and came down with a box of percussion instruments, including a kazoo which was nobly and shrilly played for most of the evening. Most of us were used to many old carols and a glee or two, and otherwise some well-known favourites were sung.

There is something quite special about making music and enjoying good things together with friends. At Christmas. Not only then, of course, but especially so as the sharp frosts and dark evenings draw in. Not a television on, nor a recording played; no canned laughter, no professional entertainment -- only real friends, real voices and real food.

Bliss.

Thank you, singers. Thank you.

Tuesday, 21 November 2006

Wot I'm reeding

I'm reading Scott Meyers's Effective C++ (Third Edition).

This was published in 2005, but of course the book has been out for some time in earlier editions. This is the second time of reading it, and I can say that it is still fascinating, and readable in equal measure.

This is not a review however.

Reading this book has inspired me to share more of these insights with my colleagues (who work with me in a large middleware development organisation). The main problem is remembering them all -- there are subtleties and details it is hard to recall at the appropriate time.

So what I could do is to compile my own list of aphorisms that would be memorable, witty, and encapsulate a gem from the book, like:
  • The only good code is eliminated code.
  • Private data is too hot to handle.
  • Exception safety is like pregnancy: you can't be only partially exception safe.
and so on. Of course, these are only starters and I might want to expand on these. Any comments out there?

Tuesday, 14 November 2006

First pass the post, please

Hello. This is my personal blog.

I'm not a prolific blogger [although I have a company one] but I find that there is little time (or incentive) to write one most days. Since this is a personal blog, which I can access from anywhere (yay, Google) I think I might post a bit more.

My personal favourite topics are recreational mathematics, software engineering, singing (barbershop and west gallery), and MG Midgets MkIII. I'm a bit of a pedant and have a tendancy to be a 'Grumpy Old Man'. This ought possibly to go into my profile.

I don't know how to do that yet.
Cheers.