Family Trees and Logical Deduction

This last weekend, I got bit by the genealogy bug again. It started off as an investigation as to why my existing GEDCOM file didn’t work in a WPF demonstration app (Family.Show), and kept losing relationships. It turns out that the GEDCOM format requires a relationship (or FAM record) to specify the two people who are ‘husband’ and ‘wife’ in a family, but also that both those people must have a reference to the relationship. Technically, you can say that it is a poorly formed file if it doesn’t have all those links in place but I prefer to think of it as a weak file format if it allows such ambiguity. My particular family tree file works fine in Family Historian (the program that my Dad and I use to edit the tree), but opening it in Family.Show loses relationships. It assumes that if Alice has Bob listed as her husband, then Bob should have Alice listed as his wife regardless of whether he does or not.

Anyway, from the techie stuff, I looked at alternative file formats, but quickly got side-tracked by different pages about how to research a family tree. It seems that the best way is to go to the records office and trawl through by hand, which is a bit time-consuming. Online databases are patchy, and don’t provide a great deal of detail. There is an excellent site at www.freebmd.org.uk that is aiming to get the indexes of births, marriages and deaths online for free search, but they will only give information in three month ranges, not at specific days. The amount of other information is also fairly sparse, such as places and names. They do tell you where the certificates will be found, so you can order them (at a cost of approximately £9). This is without even knowing for sure that it is the person you’re looking for more information about! At almost £30 per person (if you want the whole set of birth, one marriage and death records), the hobby becomes quite expensive. I don’t know if harassing a local records office will actually yield more information or not, but it’s worth a try to circumvent those costs.

On the other hand, I did find a Family History Society based on the Isle of Wight that has made the island’s records searchable and incredibly easy to use. It’s slightly easier that FreeBMD to search things on, and remembering my mother and some of her siblings were born on the island, I plugged in the few names I had for that side of the family to see what I could find. I got my granddad’s birth record back which gave me his mother’s maiden name (although it only gave me a year for birth, not a day). I checked her surname for marriage records with his surname, and found one match. This gave me my great-grandparents full names. Putting those into the birth records gave me years for their births, and their mothers maiden names.

So I repeated, and went backwards. I’ve hit a couple of dead-ends – people who must have been born or married off of the island (hey, it happens), or multiple possibilities of who a person is (one Toogood I found could have been any one of a half-dozen recorded births). But I managed to get a couple of lines with confirmed dates in the 1860s, and names for the generation before them. All based on free information I found on the internet. Which is slightly scary.

One afternoon’s work gave me about 50 new names to add to the tree – and for a change, it’s going backwards! One of the hardest parts of building a family tree is keeping it up to date. At present, at least three of my cousins are expecting babies in the new year.

familytreezoomout

This is it, as it stands today. The highest point on the far left, and the third of the chart on that side is where my Dad got to researching his line. The two-pronged point in the middle and the two slightly lower points either side are what I managed to research from the Isle of Wight Family History  Society. The two low points on the far right are what we’ve managed to get for my wife’s family so far. The lowest point on the chart (about 3/4 of the way along) is my son, around whom my tree research is based.

Unfortunately, not all family history societies are quite as useful as the IoW’s. The Bristol and Avon FHS has a research room in the records office, although from the look of the website I originally thought it might have been a ‘quirky name’ for the records database search of their own site. The website gives off a bit of the 1995 vibe – alas, a lot of FHS websites have a bit of an ‘information superhighway’ feel to them. It turns out that to find information, one must physically leave their desk and look for it!

It feels, in this modern age, a little bit strange to have to know what area you’re looking for and actually go there to find records.

Learning Unit Testing III – Emergent Design

So having seen the answers on my own StackOverflow question on TDD Design, I’ve decided to go ahead with the ‘emergent design’ crowd and see what happens. It appears that the refactoring and mid-stream redesigning is an integral part of the TDD process. It’ll all, of course, be described here (the process might be a little bit stream-of-consciousness) as I go through my design decisions ‘out loud’).

I got up to the end of page 9 last time, about to start on the Movement section. In keeping with the single responsibility principle, I’ll be putting movement logic in it’s own class. Movement happens in a strict order – all chargers are declared and moved first, then any compulsory moves are made, and finally ‘everything else’ movement. This would be represented in the MovementManager class as having an internal phase structure, just like the GameManager.

The question is, where should this be called from? The decision to stop moving chargers and move onto the next sub-phase is a player choice, therefore a user interface trigger (just as IncrementPhase). It is not something that can be automated or inferred. Should the IncrementPhase method (and associated fields) be moved out into a TurnManager class which is owned by GameManager – GameManager can then expose valid actions based on what phase and whose turn it is. Would that even need to be moved out into another class – if I am deciding actions based on what the GameManager will expose to a user interface, the turn logic can remain in GameManager.

Alternatively, the MovementManager can broadly restrict actions based on the properties of it’s parent (GameManager) and regulate it’s own, internal restrictions based on sub-phase and a variation of that logic. This seems like the simplest solution – I can raise a custom exception if a method is called on the MovementManager that is invalid (wrong sub-phase, or wrong phase entirely). Time for a new cl- uh, test class, obviously. Some of the tests can be cribbed from the existing GameManagerTests, but there’s no real worry about whose turn it is.

[TestClass]
public class MovementManagerTests
{
[TestMethod]
public void IncrementSubPhase_RollsBackToMoveChargersAfterEverythingElse()
{
MovementManager movementManager = new MovementManager();
movementManager.IncrementSubPhase(); // Go to compulsory moves
movementManager.IncrementSubPhase(); // Go to everything else
movementManager.IncrementSubPhase(); // Go back to Move Chargers
Assert.AreEqual(MovementSubPhase.MoveChargers, movementManager.CurrentSubPhase);
}
[TestMethod]
public void IncrementSubPhase_MovesForwardSubPhase()
{
MovementManager movementManager = new MovementManager();
MovementSubPhase firstPhase = movementManager.CurrentSubPhase;
movementManager.IncrementSubPhase();
MovementSubPhase secondPhase = movementManager.CurrentSubPhase;
Assert.AreNotEqual(firstPhase, secondPhase);
}
}

As expected, after resolving build errors (new class, property and method stubs) the two tests fail. And with the barest minimum of code:

public class MovementManager
{
public MovementSubPhase CurrentSubPhase { get; private set; }
public void IncrementSubPhase()
{
if (CurrentSubPhase == MovementSubPhase.EverythingElse)
{
CurrentSubPhase = MovementSubPhase.MoveChargers;
}
else
{
CurrentSubPhase++;
}
}
}

It all passes. Next up, there needs to be a way of preventing the Movement sub-phase from advancing when it is not the Movement phase at all. The expected behaviour for this should be a custom exception to be thrown, and dealt with elsewhere (presumably, the hypothetical UI). To fool it that it is not the Movement phase, it needs to have a reference to the GameManager – passed in as a constructor parameter to the MovementManager. The GameManager passed in for this test also needs to be mocked, so it will need to be given a public interface. One quick mocking later:

[TestMethod]
public void IncrementSubPhase_ThrowsExceptionIfNotMovementPhase()
{
bool correctExceptionThrown = false;
try
{
Mock<IGameManager> mockGameManager = new Mock<IGameManager>();
mockGameManager.Setup(item => item.CurrentPhase).Returns(TurnPhase.Shooting);
MovementManager movementManager = new MovementManager(mockGameManager.Object);
movementManager.IncrementSubPhase();
}
catch (WrongPhaseException ex)
{
correctExceptionThrown = true;
}
Assert.IsTrue(correctExceptionThrown);
}

Which is passed by:

private void ValidatePhase()
{
if (_gameManager.CurrentPhase != TurnPhase.Movement)
{
throw new WrongPhaseException("Cannot perform Movement actions in the " + _gameManager.CurrentPhase.ToString() + " phase.");
}
}

And calling that at the beginning of the IncrementSubPhase method.

Now it’s time to make some changes to the (as yet unused) Model class. Now it starts to get into things in a bit more of a distinct rule structure – the next line states that ‘models can move up to their move rate in inches in any direction’. I’m deciding that ‘inches’ refers to an arbitrary (and divisible) number, so a decimal will serve very well to decide how far they’ve moved, and how far they can move. The movement manager can either take in a co-ordinate to specify the target position, and change the model’s position to as far as it can go towards that point, or take in a distance and direction and move the model as specified.

It’ll probably be easier to sort out the distance and direction at the moment – those calculations will need to be made in the code that calls the MovementManager – though at some future point, these could be made into helper methods on the MovementManager. To work out where the model’s new position is, we need diagrams – this will have to wait until the next post!

This has been a nice long post that gets about halfway through page 10. I’m still not sure I’m allowing the design to emerge – I am, for example, thinking a few tests ahead of where I am – but at this stage, I’ve not (consciously) made a decision about design based on that forewarning, only on the basis of ‘I want Movement code separate from Game Manager code). This is more to do with the single responsibility principle than some master design drawn upfront.

This is a learning project I am documenting in order to teach myself TDD and unit testing – as I publish this, I have already written many parts in advance but I want to know what I’m doing wrong! If you see improvements or corrections, either to the code or the process, please leave a comment and let me know! Introduction to this project can be found here.

Learning Unit Testing II – TDD vs. Traditional Design

As you can see, I’ve only done a small amount of Test-Driven Development so far. I notice that for small classes – so far, there’s only a very simple turn tracker – it’s easy to write a test first when there’s only very little code and no interaction with other classes. When things get a little more complex, will it still be so easy?

I am wondering how people use TDD when they have big projects (as this will invariably become). Is it possible to stick to just writing code to pass tests all the way through to the end? Surely, at some point, major refactoring will need to be done when something comes right out of nowhere. I can see one example I’ll run into at some point: in Necromunda, a model may go on ‘Overwatch’. This allows them to fire in their opponents turn, shooting at a target before it’s move, after it’s move or during it’s move. That’s probably going to require a major change to the Movement code (to account for the opponent taking an action), which could itself lead to a lot of refactoring. Should I try and design around this idea now, or wait until much, much later when I get to the Overwatch section to worry about it?

Whether or not there is a simple solution to that particular problem will depend on many things – not least, the movement and shooting code that is written before it. I would traditionally sit down and try to work out exactly how to architecture the whole thing, taking into account things like shooting, overwatch, etc before I sit down to code. TDD seems to suggest that I write the test, then the code, and then eventually get around to a new test that – had I known – would have influenced the code I wrote earlier. I can see that would have some benefits (for example, the Bowling Game Kata shows the change in design to a simpler one due to TDD) but I don’t know how likely it is that writing code just to pass the test will lead to a design path that isn’t optimal given later functionality requirements.

Maybe I am worrying about nothing, and the forced simplicity of design for TDD will ultimately lead to a good solution. Maybe I’m missing the point entirely, and there will be major refactoring down the road, and that’s a good thing. If that’s true, isn’t TDD going to end up taking a lot more time than is useful? Is there a secret, undocumented art to writing code following TDD where certain things are written first entirely to limit this sort of refactoring? If that’s the case, I may be handicapping myself by slavishly following the rulebook.

After reading the accepted answer on this StackOverflow question,  I’ve decided to push ahead with my TDD experiment. I need to understand the beast. I’ve got an idea of how certain things should be done, but we’ll see if it makes sense once I’ve laid the foundations using TDD. It’s going to be an interesting way to do the work!

This is a learning project I am documenting in order to teach myself TDD and unit testing – as I publish this, I have already written many parts in advance but I want to know what I’m doing wrong! If you see improvements or corrections, either to the code or the process, please leave a comment and let me know! Introduction to this project can be found here.

Throw Away Your Television

I’ve not been a huge TV fan for a long time. So when I have to choose between paying around £150 or not watching television for a year, it’s a pretty easy choice to make. I like to have money in my pocket, and I don’t like watching television.

I’m sick and tired of TV Licensing presuming that I am a criminal because of this. In our previous house, we called up soon after moving in to say “this is who we are, this is not a student house, we don’t watch television” as they ask people to. They sent someone round to check, and we were told we were on a three-year block and wouldn’t be bothered again in that time. One year later, more letters and having to explain on the phone (again, not being treated with a lot of respect – the assumption being that you have a licence or you’re lying to them) that it’s still not a student property but being told “it used to be one.” Yes, it used to be one, now it’s not… so they sent someone round to check again and *gasp* – we’re still not watching television. The following year, I just binned the letters unopened. We were moving house soon anyway.

In the new house, I didn’t bother to call and explain. It only annoys me when the reaction to “I don’t watch television, I don’t need a licence” is “yeah, right” and a repeat of the “you will be fined if you’re caught watching television.” If they believe I’m a criminal, I dare them to press charges. I’m innocent until proven guilty. Still, they sent someone round who told us that, again, we’re on a three-year block in our new house (the block, apparently, is on a property rather than an individual).

The block lasted only nine months. I bought a new television (for games and DVDs), and I received monthly reminders. They’re more polite than they used to be – for example, they no longer threaten court action and fines right off the bat, but list all the ways you can pay for the television that you must be watching, because who doesn’t watch television? But they still feel a little patronising to me. Since the phone number is not free to call and the envelope provided isn’t Freepost (it says ‘please attach a stamp’, when they’re already asking you to put £150 in it!) I do nothing. There’s no reason for me to expend any money (however trivial) in telling someone I’m not a criminal, especially when they won’t even believe me (or at least have the decency to hide that fact behind a polite telephone manner).

Now, I get home from work and there’s a note pushed through with the time their ‘Enforcement Officer’ called round, but we weren’t in. It is labelled “We told you we’d call.” It’s a little bit menacing, and raises the irritation all over again. As you can tell, it’s a subject I get pretty annoyed about. If I obey the law, I don’t like people to treat me like I don’t. It’s like if the police stopped every single motorist to test them for drink-driving, no exceptions. Everyone who’s been chugging along obeying the law quite happily is treated like a criminal.

If I’m home when they call again, I’ll ask about the three-year block. I don’t want  I checked up, and unless they bring a search warrant from the police they have no right to come in my home. Since they’ve already checked this home once, and my previous address twice, and found nothing to concern them, I don’t really think they’re being fair. The three year block from the first time they checked me, albeit in a previous address, only ran out a month ago. The second block was only put on last year, and so should be covering me till 2012.

On the other hand, since most of the TV Licence fee goes to Capita (the company enforcing and administering the licence), it’d be a shame to waste the money that my friends have paid for a licence by not making them run around chasing me, bothering me, harassing me and treating me like a criminal. If they didn’t spend it on their patronising letters or bothersome enforcers, they’d just pocket it. And who thinks that’s value for money?

Learning Unit Testing I – The Basics

Right, so I’ve chosen my project and I’m ready to begin. I’ll skip past the introduction, straight to page 8 of the rulebook. The characteristics section. This is basically a class layout, nothing too heavy, so I’ll start off by creating Model.cs:

class Model
{
public string Name { get; set; }
public int WeaponSkill { get; set; }
public int BallisticSkill { get; set; }
public int Strength { get; set; }
public int Toughness { get; set; }
public int Wounds { get; set; }
public int Initiative { get; set; }
public int Attacks { get; set; }
public int Leadership { get; set; }
}

Nothing really testable here yet. No point in testing basic getters and setters.

Next up is a description of the turn structure – this calls for a game manager of some sort. How about GameManager.cs, with an enum (TurnPhase)?

class GameManager
{
    TurnPhase CurrentPhase { get; private set; }
    int _numberOfPlayers;
    int _currentPlayersTurn;
}
enum TurnPhase
{
Movement,
Shooting,
CloseCombat,
Recovery
}

I think I’ll also add in an integer to GameManager to determine the number of players, and the number of the player whose turn it is. That should be enough to track that for now. To increment the turn onwards, though I’m not sure how that will be triggered yet, I need to add some actual logic! This should have a unit test. In proper TDD fashion, the test will be written first.

[TestMethod]
public void IncrementTurnPhase_RollsBackToMovementPhaseAfterRecovery()
{
GameManager manager = new GameManager();
manager.IncrementPhase(); // Go to Shooting
manager.IncrementPhase(); // Go to Close Combat
manager.IncrementPhase(); // Go to Recovery
manager.IncrementPhase(); // Go back to Movement
Assert.AreEqual(TurnPhase.Movement, manager.CurrentPhase);
}

This looks about right – but I’ll need to give GameManager a bit of a tidy up and make things a little more accessible. Now the code to pass that test:

public void IncrementPhase()
{
if (CurrentPhase == TurnPhase.Recovery)
{
CurrentPhase = TurnPhase.Movement;
}
else
{
CurrentPhase++;
}
}

That’s nice and neat. But I found that without writing any code in that method, it still passes – since the turn phase is still Movement. Another test to make sure that it only increments one space will probably be in order.

[TestMethod]
public void IncrementTurnPhase_MovesForwardPhase()
{
GameManager manager = new GameManager();
TurnPhase firstPhase = manager.CurrentPhase;
manager.IncrementPhase(); // Go to Shooting
TurnPhase secondPhase = manager.CurrentPhase;
Assert.AreNotEqual(firstPhase, secondPhase);
}

This one does the trick. Makes sure that the phase has changed within the turn.

Finally, the last couple of paragraphs on page 9 say that control alternates between players. I know from experience that there could easily be multiple players, and I want to be ready for that. So the GameManager will increment _currentPlayersTurn every time the turn finishes (after the Recovery phase), and reset the _currentPlayersTurn integer back to 1 when it exceeds _numberOfPlayers.

Once more, write a test to check that it increments at the end of a turn:

[TestMethod]
public void IncrementTurnPhase_ChangesPlayerAtEndOfTurn()
{
GameManager manager = new GameManager();
int firstTurn = manager.CurrentPlayersTurn;
manager.IncrementPhase(); // Go to Shooting
manager.IncrementPhase(); // Go to Close Combat
manager.IncrementPhase(); // Go to Recovery
manager.IncrementPhase(); // Go back to Movement
int secondTurn = manager.CurrentPlayersTurn;
Assert.AreNotEqual(firstTurn, secondTurn);
}

Now to test the next bit, it’ll be necessary to add a proper constructor with a parameter – number of players. Here’s the test:

[TestMethod]
public void IncrementTurnPhase_ReturnsToFirstPlayerAfterAllHaveHadTurn()
{
GameManager manager = new GameManager(2);
manager.IncrementPhase(); // Go to Shooting
manager.IncrementPhase(); // Go to Close Combat
manager.IncrementPhase(); // Go to Recovery
manager.IncrementPhase(); // Go back to Movement
manager.IncrementPhase(); // Go to Shooting
manager.IncrementPhase(); // Go to Close Combat
manager.IncrementPhase(); // Go to Recovery
manager.IncrementPhase(); // Go back to Movement
Assert.AreEqual(1, manager.CurrentPlayersTurn);
}

And the code that passes both of those tests:

public GameManager(int numberOfPlayers)
{
NumberOfPlayers = numberOfPlayers;
CurrentPlayersTurn = 1;
}
public void IncrementPhase()
{
if (CurrentPhase == TurnPhase.Recovery)
{
CurrentPhase = TurnPhase.Movement;
if (CurrentPlayersTurn == NumberOfPlayers)
{
CurrentPlayersTurn = 1;
}
else
{
CurrentPlayersTurn++;
}
}
else
{
CurrentPhase++;
}
}

After adding the requirement for a number of players to the other tests, all the tests so far pass. There is, as I’ve been warned, more test code than real code (67 lines in GameManagerTests compared to 40 in GameManager) but seeing all those little green ticks is definitely a psychological boost. As I’ve neatly finished page 9 and the ‘Rules’ section, I will start the ‘Movement’ section next time. This will have a bit more design than the fairly sparse classes here, and a bit more deliberation over where to put particular bits of code. I know a big idea of TDD is to write, then refactor, but I don’t want to do too much refactoring. It could become quite a hassle, especially later in the day. We’ll see when we get there!

This is a learning project I am documenting in order to teach myself TDD and unit testing – as I publish this, I have already written many parts in advance but I want to know what I’m doing wrong! If you see improvements or corrections, either to the code or the process, please leave a comment and let me know! Introduction to this project can be found here.

My Next Learning Project

I’ve long ago established that I learn best from doing things. Even if those ‘things’ never get anywhere, the journey through real problems helps me get a handle on what they are. My army list program got me through WPF, and then MVC. It’s faltered, since I don’t really have the enthusiasm for it that I once did (I’ve spent over a year on it, and as it is a learning project I keep needing to redesign things…)

This brings me to my new idea. Everyone who is anyone in .NET programming at the moment is unit testing. I’ve read a lot about unit testing, and dependency injection, and all those things but I am not entirely convinced I am doing it right. It was when I tried to apply these things to the wargame tools / army list program that I realised I had lost my direction with that one, and it was time to move to something new. Sticking with what I knew best, I initially thought about a WFRP (second edition, naturally) calculator or helper of some sort – then quickly abandoned that idea as madness.

But what about an easier system? Necromunda is a relatively simple game system. Something to calculate the effects of it’s combat, shooting modifiers, exotic weapons and the many charts and tables for the end-game clean-up would be ideal. If I felt adventurous, I could even add in Gorkamorka variants.

The scope I am envisioning is a disconnected class library, capable of managing and running a game of Necromunda. In theory, I could hook it up to a Silverlight, WPF or XNA (ha!) frontend, and all the functionality will be there to go. I would just need to connect certain bits for display. As it is all pure logic, it should be a good way to practice unit testing using a Test-Driven Development approach.

I’ll be documenting each step of the way in here, so I am forced to think about and describe what I’m doing. The rules for the game are available for free (click on the image to get them) from Games Workshop, so it shouldn’t be a problem me mentioning the odd one or two, followed by reams of code.

Validation and self-worth!

I had an answer accepted as the answer on Stack Overflow! I answered this question absolutely ages ago, not expecting it to go anywhere (the question had already been answered, but I felt it was a valid, different approach) but slowly, over the months, it’s been up-voted (until, I am pleased to say, it had a vote more than the accepted answer) and at the weekend the accepted answer was actually changed to my one.

It makes me feel good, anyway. Now I just need to try hard and see if I can get some more – rather than my usual activity on there, asking tricky questions for which there isn’t an easy answer (or in one deleted case, a simple answer I should really have spotted myself).

Anyway, I answered a question: Woohoo!

I don’t like being called a Nazi

On Saturday, I joined a few (reports vary between ten and over twenty thousand) like-minded people on a stroll through London to let David Cameron know that we aren’t very happy.

The reason is the Pope’s state visit to the UK. I’d been thinking about joining a protest since I found out about the visit earlier this year, but was undecided this week. It seems that Bristol didn’t have anything organised – although this isn’t too surprising, since Benedict wasn’t visiting the West Country – so I’d have to go to London, and it might have been considered rude of me to go off for a day while my sister was supposed to be visiting me! After confirming with her that it was all cool, I sat down to work out if I should go or not.

The following day, Pope Benedict said that Atheism was to blame for the Nazi atrocities of World War Two. A quick change to my Facebook status for the day – “Pete Fullergreen does not like being compared to Adolf Hitler by a man who condones child rape” – and I booked the tickets. I may only be one person, but the more ‘one persons’ that marched the less easy it would be for the government to ignore the fact that they are spending our tax money illogically.

It was an absolutely amazing day. I’ve never been to London completely alone before, I’ve always met someone there to guide me around or gone with someone else. I was a bit nervous about getting lost in the big city, especially since trying to find the start of the march had me walking with an awful lot of people carrying yellow ‘Pilgrim Packs’. I thought I was probably safer finding the place without help. The march stretched on ahead beyond my sight, although I could see the back (and ended up at the end once). The signs were terrific – a lot of Father Ted “Careful Now” (which I initially thought was a message about condoms) and “Down With That Sort Of Thing” (which I completely mistook as a vague protest until someone pointed it out to me). There were dozens of statements – “Pope’s Homophobia Costs Lives” etc, and a few very specific cases – “Money for the arts, not old farts”. Several people mentioning the taxpayer-funded nature of the visit, one of my favourites being “I want my £40 back”. I felt exactly the same way. It’s a matter I may be writing to my MP about.

There were cleverer signs too – “Jesus Had Two Daddies” and “Abstinence Makes The Church Grow Fondlers”, as well as the more confrontational “Kiss My Ring!” An awful lot of people had pope-dress on, one was in black with pink trim addressing the marchers from a nearby building at one point, getting cheers for each benevolent, condescending wave, and one almighty cheer for screaming “FUCK THE POPE!”

The condom brigade, wearing inflated condoms around their heads, bouncing around condom balloons, were shouting at any Catholics they saw walking to Hyde Park for the Mass later that day (they were easy to spot, because of the yellow pilgrim packs) “Condoms For Catholics? Any Catholics need a condom?”

I met a lot of good people that day, and heard some incredible speeches by Richard Dawkins, Peter Tatchell, and many others (too many to remember), including a Catholic bishop from New York. My only regret is that David Cameron was not in Downing Street to hear us outside, and that despite figures being estimated as high as twenty thousand (I’ll ignore the ‘maybe thirty’ that I’d heard somewhere), no-one is going to apologise to us for spending tax money so unwisely for fear of angering the Pope.

I also regret that no-one challenged the Pope – when he mentioned how wonderful it was that Britain fought the Nazi evil, he warned the Britain’s secularism was allowing ‘aggressive atheism’ to take over and blamed the same for leading to the Nazi atrocities. No-one challenged him, they clapped politely. No-one said “I thought it was racism that made them do those horrible things, not atheism?” or “How come they locked up Jews and homosexuals but not Catholics, if they didn’t like religion?” No-one said “Actually, wasn’t Hitler a Catholic who never renounced his faith and wasn’t excommunicated?” and “Didn’t Hitler always oppose state atheism as a mark of Communism?” Indeed, no-one said “Didn’t the Catholic church sign a treaty six years before the war agreeing not to oppose the Nazi party in democratic elections with their own Catholic party, and to support German Nationalism and the German Reich alongside Catholic teachings in exchange for not being drafted into a possible war – that would have been against the Treaty of Versailles, but still accounted for in this concordat of 1933?”

Nope, no-one was going to present anything other than fawning politeness to the Pope. We let him address members of parliament in Westminster, telling them to be wary of removing religion from law (fun fact: Catholic Canon Law has been introduced in a few countries, banning abortions, divorce and placing warnings on condom packets that they do not protect against HIV) and be wary of secularism marginalising religion “especially Christianity”. He even said that some of those nasty secularists are trying to ban Christmas, which as far as I am aware has not been true in the many, many years that hack tabloids have been reporting those stories. It’s as bad a story as when “England flags are being banned!” appeared all over the media and Facebook during the World Cup – actually reported alongside hundreds of pictures of people displaying England flags, and underneath newspaper competitions to win England flags and St-George’s-Cross emblazoned goodies. Not really much of a ban.

I was glad that I took part in the march – it’s my first march for any cause. I’ve never even seen a gay pride march (although based on the recommendation of friends, I’d love to join one). But I am aware that nothing will change. Nothing will actually get done. But at least I got out there and shouted with the rest of them. If everyone who thought “it won’t make a difference, so I won’t bother” had actually come out instead, then maybe it would have made a difference. Ironic, isn’t it?

Driving me nuts

A pirate walked into a bar. The barman said “why have you got that ship’s wheel in your trousers?” and the pirate said “Arr, it’s drivin’ me nuts!”

I’ve been pretty busy recently, working on a bunch of blog things of very specific interest, all about how I am learning / teaching myself unit testing and test-driven development. I’ll get around to tidying them and putting them online at some point, but I keep hitting snags with it. It’s one of those things that I believe I understand, but having never seen any real examples I keep getting a nagging voice at the back of my mind that says “are you sure you’re not doing it wrong?”

It’s time to update with normal-people stuff though. One of my resolutions for 2010 is to get a driving licence, and I had another crack at that last week. I can’t help but think that if it had been a different instructor, I may have gotten away with it… but I don’t know that for sure. As usual, I had two serious faults. I failed to check my mirror when changing lanes coming off of a roundabout till I was almost halfway where I was going. The other was failing to stop at a stop sign. I believe that I did stop, but maybe it wasn’t for long enough. My instructor was understanding about it and said that a lot of people do stop, then creep forward as they would at any other junction. But that’s a failure, so no licence this month. It’s doubly infuriating because there’s a stop sign on the way out of where I work, and no-one stops or even slows down for it. There’s good enough visibility to see what’s coming and there almost never is.

On the other hand, we were so confident about this test that we bought a car. We got it on eBay, never went to see it, and somehow everything turned out alright and it’s a decent car, we weren’t ripped off or robbed or attacked. So that went alright! Since the wife can drive, she’s going to be using that to get us about and all the things that I would have had to do instead. So finally, I’ll be (sort of) mobile! The only real downside is that since I have just spent out on a car and insurance, I’m a lot shakier on financial terms than I am used to being. That’s the reason I’ve not booked my next driving test yet… I just want to see how healthy the bank is this week first.

In the case of other resolutions, I have officially completely shelved Wargame Tools in favour of my new learning project for test-driven development. As I mentioned before, I’m doing that in the blog completely (eventually). I’ve managed to get almost an hour of painting done in the past few months, I’ve not even thought about trying German yet (I’m still enjoying the free time that I get after finishing some of the other bits) and we’ve not booked to see anyone about finishing off this first (easy) stage of the family tree. But with the car now sorted (mobile! whee!) we can probably get onto that one… it would be a good idea, as there’s only ten weeks left to squeeze in two more family visits!

The Ginger Man

My reviews have spoilers. I make no apologies.

In short – I hated it. The style was jarring at the beginning, and mellowed out but still messed around, mixing up third and first person perspectives – most of the third person writing was in the first 15-20% of the book, then it seemed to forget that it was trying that and kept swapping around. This was incredibly annoying.

The plot can be summed up as “An arsehole moves to England, where he gets everything his own way.” As far as I can tell, it’s about a guy who sponges from his friends and treats his wife and child atrociously, never pays rent, then when it appears he can’t live in Ireland anymore due to landlords chasing him, the wife (and the rent his parents were paying directly to her) disappearing to Scotland, he leaves for England. There, he meets up with some friends who treat him well, an old friend who has (gasp!) worked and treats him extremely well, and they set him back up with a woman he cheated on his wife with (one of three) who is working and willing to support him despite him beating her and treating her like crap.

So an arsehole moves to England, where everything comes up roses for him. He always gets forgiven, and no-one means it when they say “this is the last time…” – including the friend who is practically destitute every time he is bothered for a drink!

Our main character, for whom everything works out terrific, is a drunk, an adulterer and a wife-beater. His child is only mentioned a couple of times and he appears to take no notice of her at all. Although he has a bad life in Ireland, it is entirely of his own making – pawning household items to pay for drink, never fixing or paying for anything if he can help it, not studying as a lawyer (as he is supposed to be doing), and driving his friends out of the country.

I was much more interested in the characters who left our lead. The estranged wife who sided with the despicable man’s father to leave him penniless and move firstly across to the nice district of Dublin, then to Edinburgh. His lodger – a devout Catholic taken advantage of, who regretted every time she (apparently willingly) let him have his way, and most of all his best friend who left for France to both make some money and lose his virginity. It appears in his letters to our star that he is having more adventures, including passing himself off as a cook to gain employment in a noblewoman’s house in Ireland, leaving there and moving on once more (all without losing that darned virginity!). He’s not succeeding, and probably not any nicer a person than the main character, but certainly had more interesting adventures and seems like he would have been more entertaining.

Even, and this is a stretch – the young girl beaten by her father who he extorted money from to move to London, who joined him later, left him because he was wicked then came back – after successfully losing weight, getting a job in the film industry, making good money for herself and all so he would like her more would make an interesting character to follow. She’s able to take all his crap right at the end, yet stays with him and supports him!

I don’t like books with characters like this lead. I want them to get their just rewards. There’s no obstacle for him to overcome – or rather, there are obstacles, but he just drinks and slobs and walks away from them. He doesn’t achieve anything, he gets lucky at the end due to his friends and a woman and gets the life he was trying to live all along – no work, no responsibility.

The only thing that I am possibly not understanding about this book is it’s humour. I could follow and like a book about a loser and a bastard if it was funny, but the only way that The Ginger Man is funny is in the Happy Slapper sense – not really very funny at all, on reflection.