Perl: The Lazy Way to Write WPF

I hate writing boilerplate. Recently I was writing a test tool where I needed to be able to build messages from a WCF interface. That’s a lot of ViewModels and a lot of views and a lot of tedious typing.

That is, of course, unless it’s Friday lunchtime and you happen to have spent the first half of your career working on *nix systems. Enter Cygwin and some now rather sketchy memories of how to write Perl.

$ perl -ne \
'if($next) \
{ \
$_=~/^\s+void\s+(\w+)\s*(([^\)]+)\)/; \
$cType=$1; \
print "public class ${cType}Model:DependencyObject\n{\n"; \
@props=split /,\s+/,$2; \
foreach $p (@props) \
{ \
($type,$name)=split /\s+/,$p; \
$name=~s/^([a-z])/\U$1/; \
print "public static DependencyProperty ${name}Property = DependencyProperty.Register(\"${name}\",typeof($type),typeof(${cType}Model));\npublic $type $name\n{\nget => ($type)GetValue(${name}Property);\nset => SetValue(${name}Property, value);\n}\n"; \
} \
print "}\n"; } ; \
$next = /\[OperationContract\]/ ;' \
< IClient.cs >../../../../../Models.cs

I then just used ReSharper to move the classes into their own separate files.

Yes, I realise that the little snippet of Perl is very poorly written, both from the point of view of its fragility in processing C# and also because these days I really only use Perl for one time lash-ups like this. It’s be 15 years since I could say that I wrote Perl in any professional sense and I’ve forgotten a lot in that time.

My point however isn’t to provide a shining example of Perl for you to cut and paste. It’s to point out that a few lines of text processing script in whatever language, written in a few minutes, can save you from a whole load of tedious typing.

I use Cygwin a lot in programming, because utilities like find, xargs, grep, sed, awk, cut, uniq and bash scripting itself can save a heck of a lot of time.

If you’re not an old *nix wonk like me however all is not lost. Perl can do pretty much everything anyway and there are plenty of Perl implementations for Windows.

Of course there is the world of Powershell too and that’s where I have a confession to make. Aside from learning the basics; just enough to do what I need to do, I haven’t really delved into Powershell. I’m sure Microsoft have put a lot of research into it, but to me it feels really awkward, like you’re always having to jump through hoops to get even the simplest thing done.
I realise the potential hypocrisy of this, Despite being notoriously counter-intuitive, vi has become second nature to me. It’s only when I try to explain to others that I remember that if you’re not thinking about trying to operate an editor over a 300 baud serial link then none of it makes any sense at all.

Anyway, I digress, the simple conclusion is that if you’ve got a mountain of boiler-plate to write, have a think about using some sort of script. There’s a lot of power in your fingertips.

Racism Is Hard-Baked Into White People

In fact all the institutions I dealt with were [or claimed to be] against racism. They were however white. Books were white, TV was white, culture was white, science was white, the law was white, power and influence were white. That gets baked into you whether you like it or not.

Why was there a brouhaha when black actress (Noma Dumezweni) was cast as Hermione Granger in The Cursed Child? Because people, many of whom would say they were against racism, just assumed Hermione was white.

Rowling‘s description of her doesn’t specify or even imply: it is distinctly indistinct. Instead it concentrates more on her character and how clever she is. We – me included – just assumed she was white. Why?

Because she’s privileged, because she’s bookish, because she’s clever, because she’s powerful, because she’s a heroine. All these cues refer back to the environment most Westerners grew up in and they all tell us that she’s white. We don’t think about it, we just assume it.

We might not think this matters because we think we make all important decisions consciously where we can weigh up the evidence objectively. That however is far from the whole picture. We make thousands of decisions every day without them ever fully surfacing into our consciousness. Similarly we send out thousands of signals that we’re not consciously aware of.

Those biases that have been baked into us by our upbringing do still have an effect, a very subtle effect, but it’s there nonetheless. If it’s just one person then it’s insignificant, the problem is that we’re not just one person, those of us who grew up in an almost exclusively white environment are a majority. On top of this almost everyone in the UK grew up – and continue to grow up – in an environment where the vast majority of significant institutions are predominantly white.

What can we do about it? We can’t undo decades of programming simply by wishing it away. There is no silver bullet. We have to acknowledge that it’s there, to be aware of it. We have to be aware that no matter how much we believe in equality, we can occasionally be guilty of accidental racism. We have to accept that, for people with my kind of upbringing, just being ideologically opposed to racism is not enough. If we are not actively fighting against racism then we are subconsciously contributing to it.

We have come a long way to eliminate conscious racism from the majority of the Western World. We still have a battle to fight, especially at the moment, but we are making steadily making progress and in the end we will win.

Not That Kind of Router

I have to admit I’m struggling with this one. Usually I can find some kind of spin, some kind of humour, some way of making a very boring subject a little easier to read.

I think with this one I’m just going to have to put on my anorak and face facts: there’s nothing really interesting in this story. It is what it is, but it does have a mildly uplifting conclusion. At least I can tease you with that.

Many years ago I bought a cheap router; the kind that you use for machining grooves in wood, not the kind that hurls packets down the right network pipe. I was fitting out a room with a load of custom built cabinets and I figured if it lasted for just that job I’d not be too bothered.

It lasted a bit longer than just that job, about a decade longer.

A few days ago however it had a problem. I was cutting a chamfer on a roof panel when the motor suddenly slowed and there was a fireworks display in the top.

“It’s done well” I thought to myself and started looking at the price of half decent routers. Ouch!

I’d just assumed that there’d be no way to fix a cheap router like that. There’d be no way to get the parts! Nevertheless I popped the top off and had a look and to my surprise I found that the brush assemblies just slid out and that the brushes themselves were easily replaceable.

A quick visit to Ebay later…

Then it was just a case of slotting them into the housings. In the picture beneath the right one’s done, the left is the old, worn out one.

Then popping them back where they should be.

The exciting moral of the story is not to assume that you’re going to have to throw something away just because it’s developed a fault. The Internet – and in particular ebay – has given us access to millions of parts for all sorts of things. It’s always worth looking.

Primordial Radio Data Usage

The question of how much data allowance Primordial Radio uses has been asked a few times.

The simple answer is about 30 megabytes per hour, which means 1Gb of data will last you about 33 hours.

If you’re interested, the not so simple answer goes as follows.

Primordial are cunning, they use a 63KBit AAC stream. The bit rate is, quite literally, how much data per second the stream uses. The higher the bit rate, the higher the quality of audio that can be squeezed in. It’s a trade-off between data and quality. But there’s another factor – the technique used to encode the audio.

If Primordial used a 63Kbit MP3 stream it would sound dismal, because MP3 is actually a pretty old and inefficient audio encoding technique. Because they use AAC, they can get away with a much lower bit rate, which keeps the amount of data you need to use to listen to Primordial low and the quality acceptable.

BBC Radio 3, in comparison, have a 320Kbit AAC stream (amongst others). You can get your Classical Music fix in super-high quality, but it will munch 150 megabytes per hour.

Now, the relationship between the bit rate and the amount of data it uses isn’t entirely straightforward. In data transmission we tend to talk about bits per second and when we talk about data allowances they’re in bytes, or more likely Gigabytes.

A byte is almost always 8 bits, but when it comes to transmitting data down an actual piece of cable you can’t send 8 bits at once. You have to send bit after bit after bit. So it’s more correct for us to talk about bits per second as a speed of communications. Your broadband speed, for instance, will be quoted in megabits per second.

As a quick ready-reckoner, to work out the amount of data you need for a second of audio you simply divide the bit rate by 8.

63 / 8 = 8 (roughly)

We need 8 kilobytes of data for one second of audio. We can then easily multiply that up.

8 *60 = 480Kbytes per minute

480 * 60 = 28800Kbytes per hour

A megabyte is 1024 kilobytes, so:

28800 / 1024 = 28Mbytes (per hour)

This, however, is always going to be optimistically low. Firstly there is the problem of the envelope. Data over The Internet is sent in billions of packets. You can think of each packet like a… um… packet. You can’t just lob a bottle of Chateau Lafite Rothschild 1899 in the postbox and expect it to get anything other than drunk by the postie. You need to wrap it up in something, put an address on it and pay postage if you want someone to actually receive it. There are similar overheads on the The Internet.

There are various different systems in use over The Internet, often there are in fact several layers of content and packets. This means that there is a lot more traffic on The Internet than just the useful data. A lot of the traffic has to do with where and how to send the data.

There is also the problem of packet loss. A small amount of data on The Internet just disappears. This is actually expected, it was designed that way because it’s easier and more resilient. What it does mean however is that a small amount of data has to be sent twice.

You can pretty much account for all this by simply adding a fudge factor. 20% is usually considered a safe margin.

28 * 1.2 = 33.6MBytes per hour.

If you don’t trust these kinds of calculations of course, you could just measure it.

If you wanted a bit more accuracy though, you could listen to Primordial for, say, 1/4 hour, record the amount of data every packet contained and the overall length of the packet, then add them all up.

You’d have to be a right geek to do that though.

The total data received was 8150537 bytes, of which 7247617 was useful content. Those can pretty easily be multiplied up to an hour:

Total audio and related data: 27.65 megabytes per hour.

Total data exchanged: 31.1 megabytes per hour.

Naturally I can’t guarantee these figures absolutely. They’re over Wi-Fi rather than a mobile network and there will be differences. There will also be differences between different networks and even different times of day as The Internet itself changes and adapts to the traffic.

What I can say is that they should be somewhere near, within a few percent.

The Healthy Business Traveller’s Survival Guide

Disappointing hotel room

Tonight’s bed is in a characterless chain hotel just off the M1. Like every business hotel, the bar is stuffed full of regretful corporate peons in cheap suits. It’s a club that’s far too easy to join. At first you’re only away for the odd night, so it doesn’t matter if you have a burger and a couple of pints.

It creeps up on you though, a few nights here and a few nights there and suddenly you buy and Audi A4, can’t see your feet when you’re standing up and find yourself discussing house prices with a Regional Business Development Manager from Nuneaton.

“It’s really hard to keep up the diet when you’re on the road” I hear time and time again from the person loading their plate with fried sausages and hash browns. They look down at the bowl of muesli and fruit I’m holding then briefly catch my eye again before they awkwardly shuffle off to join a table of 3 others, all with plates piled high, all wearing the same expression.

It’s not about the diet though, it’s about the choice of lifestyle: they’ve subscribed to the road warrior lifestyle; “You’ve got to play the game, Tom, you’ve got to play the game” one of them once told me. He never could tell me why.

You can join that world if you want to. It’s kind of cool for a while, but it starts getting old very, very quickly. You don’t have to join that world. You don’t have to play that game.

Here then are my tips for not getting sucked into that cycle of drudgery.

Eliminate Unnecessary Travel


Rule 1: if you don’t need to travel, don’t travel.

The face-to-face meeting is still the default for an awful lot of people. If there’s any doubt about anything then they want to get all the people in a room and talk about it. It’s a reflex, often no more than arse-covering, but it often results in a lot of people wasting a lot of time.

Of course there are occasions when it’s the right thing to do and it’s right that you should be there. Otherwise however it’s better for both you and the business if they conference you in only for the bit where you’re actually needed.

The key point is that travel is often not the most efficient use of business resources, it’s just an assumption that you – or someone – should go. Question that: if it’s not the best use of resources put the case for why.

Choose The Right Hotel

There are many employers that give you some flexibility about the hotel you book. In which case always book a hotel with a free gym and free breakfast.

Being away on business is a good opportunity to visit the gym. Not only that but being away from home is stressful and exercise is proven to combat stress and anxiety. Remember to pack your gym kit though eh? And a water bottle is useful too.

In the morning, always choose the healthy breakfast option. Start how you mean to go on. This is where the free breakfast comes in: many hotel chains lower their room rate but don’t include breakfast, You book them thinking you’re getting a bargain and then find they’re charging £18 for breakfast. Even though you’re not paying, the idea of shelling out 18 notes for a bowl of muesli and banana irks, so if you’re not careful you head for the buffet and have a Full English.

Don’t do it. Book the more expensive hotel and have the muesli and banana.

Whilst we’re on the subject of hotels, pay attention to the distance the hotel is from the place you’re visiting. The cost to the business of having you stuck in traffic for an hour is £50 as an absolute minimum. It could be many times that. Saving £10 to spend and extra 1/2 hour in traffic isn’t worth it. I’ve justified trampling on various hotel booking policies many times this way.

Supermarkets Are Your Friends

Get control of your food. Buffet lunches these days are better than they used to be, but be careful. Work out how much you usually eat for lunch and don’t got over that. If it feels socially awkward not to have food, grab a glass of water.

Similarly if there’s a canteen, don’t get sucked into having 2 main meals that day.

If lunch isn’t laid on, make sure you bring some. Otherwise it’ll end up with someone doing a run to Joe’s cafe at 2pm for a large sausage and meatball butty.

There are some pretty good petrol stations these days with mini supermarkets in. They often have good healthy meal options. Either make your own lunch or buy your lunch in advance.

Keep some travel cutlery into your day bag. That vastly increases the amount of food you can eat.

When it comes to dinner, some hotels have good options and if you’re staying in an urban centre there can be good options there, too.

Otherwise buy some cold food from – you’ve guessed it – a supermarket. Then you can make sure that you have a balanced intake with the right amount of calories.
If you’re really inventive there are actually quite a few cooking options in a hotel room, you can do a lot more than Pot Noodle.

Don’t forget drink. I don’t usually drink as much liquid when I’m away, so I’ll buy at least a litre of flavoured water per night.

Whilst we’re here, stay away from the extra-large chai latte, from fizzy drinks and especially from energy drinks. This isn’t just a travel tip, it’s a life tip. They put you on a roller-coaster that you really don’t need to be on.

Plan Your Evenings

You’re in a disappointing room near a disappointing town in a disappointing hotel commanding disappointing views of a disappointing motorway. This is a really good time to sort out your car insurance and catch up on a couple of episodes of that TV series that you love but which your partner hates.

This requires forethought however. You need (copies of) the documents or access to them online.

Never rely on hotel WiFi. Sometimes it works brilliantly, other times you can barely get to Google. Make sure you have anything you want to watch or any substantial document on a device you have with you.

Pack a HDMI cable if you carry a laptop. Most hotel TVs have a HDMI input that you can use, whether they advertise it or not.

If you rely on a mobile device then pack a Chromecast or similar, you can put it into guest mode and stream to the room’s TV.

Plan Driving Breaks

Live traffic Sat-Navs and automated reminder services are pretty good at estimating how long it will take you to get somewhere. That time doesn’t include breaks. Driving requires concentration and that means you need breaks. It’s is, quite literally, for your health and safety.

Don’t mess with your meal times too much and, especially, never miss a meal. If you usually eat at 12:30 then try to make a break fit in around that time and have a bite. Again, stay away from burger chains and greasy spoons. There are plenty of healthy, tasty food options in service stations these days.

Keep a Travel Bag

One of the really annoying things about travelling is the continual packing. It helps if you have a spare set of toiletries in a bag that you can just throw in and know that you don’t have to worry about deodorant, toothbrush, etc.

It’s not just toiletries either, there are a few other things:

Buy a warm high-vis jacket and keep it in the boot. Your car is lovely and warm when it’s working, but the engine management unit has a problem with its lifestyle it can get very cold very quickly. A warm hi-vis jacket kills 2 birds with 1 stone. I got mine – and in fact most of my safety equipment – from Arco (and no, they’re not a sponsor).

Include a USB extension cable. These are surprisingly useful, not in the least because hotels have a funny habit of putting the electrical sockets as far away from the bed as possible. Your phone however you generally want to both charge and use as an alarm.

A mobile phone power bank is another good investment. You might think you’ll be near a socket all day and all night, but if you get stuck in meetings then get a particularly unfortunate room, it can get dicey.

Finally, Look After Yourself

Above all remember that you and your health are the most important things. Don’t compromise that. You don’t have to get sucked into the business travel lifestyle.

It is a profoundly unhealthy lifestyle and this is worth remembering not just for your own sake but for that of your employer. There’s a reason many employers offer private health schemes, gym memberships and other health related benefits. It’s an investment on their part, because healthy people work more effectively and more efficiently.

It’s good business sense for your employer to let – even encourage – you to keep yourself healthy.

Moreover it’s an investment by you. You only have one life and if you compromise your health now you will pay for it later, financially, physically and emotionally. When it comes down to it, it’s as simple as that.

Emergency Calls, Locations and 55: The Truth

You may well have seen this meme going around Facebook and other places. As a general rule, unless you can trace information like this back to an actual emergency service or other reputable outlet, you should assume that it’s fake.

In this case it’s inaccurate, but it does contain some information that’s true.

The Full Fact article does a reasonably good job of explaining, but I can add little more detail from a different perspective.

When you make a 999 (emergency) call in the UK, the emergency services have access to some extra information about that call that they don’t get for other calls. This happens automatically whether you dial 55 or not.

If you call from a land-line or telephone box, the emergency service has access to the subscriber details for that line. This includes the name of the person that the line is registered to and the address.

If you call from a mobile, the situation is a little more complex. The emergency service can request the location of the mobile phone – and usually does so automatically. That request gets passed to the mobile phone company. Before the days of GPS, the mobile company would return, if it could, an estimate of the location based upon the signal strength and the location of the cell masts nearest to the phone. It can sometimes provide quite accurate results, but other times it’s not so good.

The mast information is still sent to the emergency services. Now however almost every mobile phone has GPS so new methods have been developed so that the phone can also send its location data all the way through to the emergency service control room. Not every phone can do this, so you can’t rely on it, but the more time that passes, the more phones are coming on-board.

It’s worth noting that a mobile phone’s own location data isn’t always accurate. It’s usually pretty good, within a few metres, but there are a number of factors that can throw it off, sometimes by just a few metres, but I’ve seen examples of phones thinking they’re on a different continent.

Again, to be clear, you do not need to dial 55 or perform any secret handshake to make your location available. If your phone can do it, the mobile network can do it and the emergency service can do it, then your phone’s location data gets sent to the control room. It’s all automatic. This is what I think the meme is talking about as “new technology”. Otherwise, the mast data is almost always available.

Where dialling 55 comes in is if you’re in a situation where you can’t talk. If you’re hiding from an attacker for instance you might not want to talk as it may alert the attacker to your location. The mobile operator may well ask you to dial 55 if you’re there and are in danger. That’s the point of dialling 55 – it lets the operator know that, although nobody is speaking, you have not dialled 999 by mistake.

I should point out here that the emergency services do not always respond to silent 999 calls. They have to assess each call individually and decide whether to respond, whether the person talks or not.

Ultimately then there is some truth to the meme and I suspect somewhere, underneath it all, someone knew what they were talking about. It looks however as if it’s been through a few people and by the time the meme was made some of the messages have got a bit mixed up.

To conclude:

  • The emergency services can always get your location and usually do automatically. You do not have to dial 55 to make that happen.
  • The “new” bit is that the emergency services can now get the location data direct from many smartphones, instead of having to rely on mast data.
  • Only dial 55 if you are unable to speak for some reason. The operator may ask you to do this anyway if you don’t speak. If you can speak however, do.

Finally, don’t assume when you call that the emergency services do have your location. Things can go wrong, the more information you can give them over the phone, the better.


Tom Fosdick is a software engineer who is responsible for the system that several UK emergency services use to get 999 call locations.

I’m Pulling the Social Media Plug

In the words of a certain radio station, “Social media can be a force for good, but it can also be a giant pain in the arse.”

When I wrote that First Class Post was the most rapid form of communication of which I approved I was only half joking. I recently spent two weeks in India. Rather than deal with the expense of roaming or hassle of a local SIM I just turned mobile data off. It was a surprisingly liberating experience.

It’s not like I dropped off The Internet completely: there’s free WiFi in most hotels and a few restaurants. What I found though was that having Internet access time-boxed had a far greater effect on the way I lived my life than I could ever have imagined.

I’ve spent pretty much my entire career in communications, most of it trying to improve the connectivity and communication technology used by the emergency services. I’d always kind of assumed that more connectivity and more flexible communications were a good thing.

It’s true – the increased ability to communicate can benefit us very greatly. For instance, we’re now talking about the ability for members of the public to stream video directly into an emergency service control room. That information could be hugely useful to the call-taker, in informing the member of the public, in informing the crews being sent to the scene and also providing an evidence trail for any followup action.

On the flip side however, as I’m sure you can imagine, the ability to stream video from a remote location to another, particularly via an end-to-end encrypted channel, facilitates some of the most appalling people in existence.

To a lesser extent the same is true of social media. It enables us to keep in contact with people that we would otherwise naturally lose touch with, but it also throws up conflicts that we would never otherwise have. On top of this the social media companies themselves aren’t making money unless you’re using them. They make every effort to ensure that their platform invades your life as much as possible.

Over the past year or so I’ve become utterly frustrated with this: I’ve disabled all notifications from every social media app on my phone. What India taught me however is that this isn’t enough. If I really want to take back control from social media, I have to remove myself from the social media environment and only step back into it on my terms.

Social Media is not a new thing, it existed back in the dial-up days. The difference was that to be online you had to make a phone call, and the costs could mount up if you weren’t careful. You had to set limits, for purely financial reasons (especially if you were on a trainee’s wage).

So I’m setting usage limits again.

Just before we left for India, my partner and I were in a restaurant and the couple next to us spent the entire meal on their phones. They barely talked to each other. The first rule therefore is:

No phones at the dinner table, wherever that dinner table is: in the house; in a restaurant; a picnic table in a field; etc.

If I’m out and about doing jobs or visiting people, the chances of me needing to call someone are fairly high, but the chances of me needing a smartphone are fairly low. The second rule:

Unless there is a clear reason to take the smart phone out, take the dumb phone [see above photo].

The penultimate rule I call the “Soap Opera Rule”. In many ways Social Media is like a Soap Opera, the two differences are that it deals with real people and that it’s constant, it doesn’t come in half hour chunks 3 times a week. The former is somewhat the point of Social Media. The latter is something that you have to manage and it helps if you think of it more like a Soap Opera:

Set clear daily usage limits and don’t exceed them.

Of course there are exceptions to every rule. When we’re talking about usage limits we have to consider what the purpose of usage is. If you’re organising a family meal via WhatsApp that’s not the same as reading your Twitter timeline.

The key here is be sensible and maintain perspective.

The last rule is the simplest of them all:

Talk to people.

Social media is no way to conduct a friendship. Sure, it’s a great way to allow you to find people with common interests and to keep touch with people who you would otherwise lose touch with. Those people aren’t your friends (although they may have been or may become so). Ultimately, friends are not people you broadcast status updates to. Friends are the people you have a conversation with when you have news.

So call them, invite them round for tea, go to lunch with them, go watch a film with them but interact with them directly and personally, not via timelines and group chats.

From now on I’m going to be following these rules. In reality you probably won’t notice any difference, but I think it’s going to make a big difference to me and I hope these words make a difference to other people.

Remember that it’s in the interests of the Social Media companies to create a society where it’s socially unacceptable not to be glued to your phone. Don’t sign your life over to them: take back control and always, always be true to yourself.

Poppies

A few years ago I took the very deliberate decision to stop wearing a remembrance poppy, because I actually believe in remembrance.

Take a look around social media in the few days around November 11th and you’ll see an awful lot of messages simply thanking military personnel for their service.

That is only half the message of remembrance. Not only that but without the other half it’s a dangerous message because it’s easily corrupted.

We sleep-walked into the First World War. The warning signs were there years before. They were noticed, alarm bells were rung, governments were advised: “unless we change course,” they were told, “there will be war”. The warnings were ignored and there was the most terrible war the world had ever seen.

The economic and social devastation of the First World War pretty much guaranteed the subsequent rise of populism, particularly in the hardest hit countries. That does not however mean that the rise of the Nazi Party was inevitable. They could and should have been stopped.

Martin Niemöller’s seminal “First They Came” highlights just one thing – that it was within the power of ordinary people to stop it. However we stood aside and did nothing and by doing so damned a whole generation.

Tens of millions died in two catastrophic wars, both of which were entirely avoidable.

For me that has always been the meaning of the phrase “Lest we forget…” We must remember the senseless waste of two generations. We must never again sleep-walk, or let ourselves be led as lambs into another unnecessary war.

If you want that put in transparent, soul-piercing clarity Siegfried Sassoon was there:

AFTERMATH

Have you forgotten yet?…
For the world’s events have rumbled on since those gagged days,
Like traffic checked awhile at the crossing of city ways:
And the haunted gap in your mind has filled with thoughts that flow
Like clouds in the lit heavens of life; and you’re a man reprieved to go,
Taking your peaceful share of Time, with joy to spare.
But the past is just the same,—and War’s a bloody game….
Have you forgotten yet?…
Look down, and swear by the slain of the War that you’ll never forget.

Do you remember the dark months you held the sector at Mametz,—
The nights you watched and wired and dug and piled sandbags on parapets?
Do you remember the rats; and the stench
Of corpses rotting in front of the front-line trench,—
And dawn coming, dirty-white, and chill with a hopeless rain?
Do you ever stop and ask, “Is it all going to happen again?”

Do you remember that hour of din before the attack,—
And the anger, the blind compassion that seized and shook you then
As you peered at the doomed and haggard faces of your men?
Do you remember the stretcher-cases lurching back
With dying eyes and lolling heads,—those ashen-grey
Masks of the lads who once were keen and kind and gay?

Have you forgotten yet?…
Look up, and swear by the green of the Spring that you’ll never forget.

Make no mistake, I am not a pacifist. There are times where war is the only practical solution. And of course I support The Royal British Legion and Help For Heroes, of course I have enormous respect for those who are prepared to lay down their lives to defend the free way of life.

There is a very important distinction however between the individuals who serve and those who would lead us into war. The latter, we must reflect, is substantially our fault: in a democracy we are the ones that set the agenda.

In remembrance it is therefore not sufficient simply to thank those who have given military service. We must take time to reflect on why their service – and in many cases sacrifice – was needed. We must reflect on our failure as the people of the United Kingdom, the people of Europe, to prevent two devastating wars and numerous conflicts since.

Moreover those who do not learn from history are doomed to repeat it. We can see, very clearly, where the mistakes that led to each war, each conflict were made. It is imperative that we learn those lessons.

Currently some of The Poppy’s most ardent supporters are far right groups. Far from being reflective and contemplative on the horrors of war, these groups delight in militaristic imagery and seek to glorify military conflict.

They even use The Poppy and the concept of remembrance to try to shut down their critics, “Your grandfathers!” they scream, “Your grandfathers didn’t give their lives so that…”

Economic stagnation breeds populism. Austerity breeds populism. Populism inevitably veers either toward communism or fascism. These are delicate times and we, those of us who are sufficiently well informed to understand this, have a duty to try to steer our countries away from those extremes.

This is why I don’t wear a poppy: because I believe that it is not an effective means of communicating how I feel about remembrance. Because most people just pin the badge on because they think they ought to without really understanding it. Because that lack of understanding is easily corrupted into support for very people that Remembrance was designed to condemn. Because I’m scared that as the generation that fought the Second World war dies out, the memory how of terrible, how devastating it was and why we must never allow history to repeat itself will die too.

Because I’m scared that we will wear The Poppy and tell ourselves that we have not forgotten when in truth we have.

C# Best Practice: Why a Separate “lock” Object?

Some time about 1995 I noticed that I was writing a lot more concurrent code than the other programmers. It was almost as if someone was deliberately pushing it in my direction… That theme never really changed.

I was rather surprised then when a developer made a comment on something I’d written a few years back, because I was pretty confident I’d covered all the bases.

public class SomeServer
{
    private readonly Dictionary<KeyType, ValueType> queries = new Dictionary<KeyType, ValueType>();

    //stuff

    public void PerformLookup(string someQueryTerm)
    {
        //some logic...
        lock(queries)
        {
            //some more logic
        }
    }
}

The comment was:

Please use a separate lock object. e.g. private readonly object _queriesLock = new Object();

Eh? What?

OK, hands up I missed this. I learnt to use basic concurrency tools way before C# existed. For me C#’s ‘lock’ construct was great because it allowed me a very clear and concise way to use a monitor. As far as I was concerned there was no downside. Why on earth would I want to use a separate lock object?

There are 2 things you need to be really careful about when using a lock in this way.

You must carefully manage the lifetime of the locked object.

Imagine above if ‘queries’ were not a readonly object created at instance initialisation. Imagine if someone did…

lock(queries)
{
    //stuff
    queries = new Dictionary<KeyType, ValueType>();
}

You have to make sure that the locked object is instantiated before the fist lock is taken out and you must make sure that it is not reassigned in any way until after the last lock has been exited.
If you don’t it leads to all different flavours of bad.

If you instantiate a separate lock object at object initialisation, an object that has no purpose other than as a lock, then you know it’s there at the start and the chances of someone messing with it before the end of the last lock are very significantly reduced.

You must be careful not to expose the locked object externally

C# allows an implicit monitor to be created on any object. You can use that monitor by wrapping the object in a ‘lock’ statement.

If you wrote the class to use, say a mutex explicitly rather than the implicit monitor there’s no way you consider making the mutex externally accessible…

public class SomeServer
{
    private readonly Dictionary<KeyType, ValueType> queries = new Dictionary<KeyType, ValueType>();
    public Mutex _queryLock = new Mutex();

    //stuff

    public void PerformLookup(string someQueryTerm)
    {
        //some logic...
        _queryLock.WaitOne();
        try
        {
            //some more logic
        }
        finally
        {
            _queryLock.ReleaseMutex();
        }
    }
}

That’s complete madness – any other class can mess directly with the lock and cause all sorts of unwanted behaviour. Deadlocks are a particular hazard here and compound deadlocks can be really tough to debug.

If you’re using the implicit monitor via the ‘lock’ construct however and you expose the locked object beyond the scope of the class, you are effectively also sharing the monitor.

public class SomeServer
{
    public Dictionary<KeyType, ValueType> queries {get; private set;} = new Dictionary<KeyType, ValueType>();

    //stuff

    public void PerformLookup(string someQueryTerm)
    {
        //some logic...
        lock(queries)
        {
            //some more logic
        }
    }
}

public class SomeOtherClass
{
    private SomeServer myServer=new SomeServer();

    public void SomeMethod()
    {
        lock(myServer.Queries)
        {
            //some logic
        }

        //or worse...
        Monitor.Enter(myServer.Queries)
        //and the Monitor.Exit is in another method that might not get called
    }
}

If you use a separate lock object that you know is private and will always be private then you don’t have to worry about this.

Having written this pattern many, many times in many different languages I’m not likely to fall into either trap. That’s not all that being a good developer is about though.

HwacheonCentreLathe 460x1000

Now, this might seem like a strange tangent but bear with me. I learnt to use an industrial [machine] lathe when I was a kid. They teacher drummed 2 things into us.

  1. Do not wear any loose clothing (e.g. a tie)
  2. Do not leave the chuck key in when starting the lathe

The reason these 2 things in particular were so important was because the lathe I learnt to use had no guard. Either of those 2 mistakes could be fatal.

I’m glad I learnt that, but given the choice would I use the lathe with a guard or the one without? It’s a no-brainer.

We have the same situation here. Unless we’re writing something very specific where memory is absolutely critical, there’s no harm in creating an extra lock object. It provides a useful safeguard against a couple of gotchas that could cause real headaches in production.

Software development purists will be wringing their hands, but they’re not what commercial software development is about. It’s about writing code that does the job in a simple, safe and maintainable way. That’s why using a separate lock object is C# best practice and that’s why I fully support it.

Cultural Erosion

Cultural erosion is often cited as an argument against European Integration. A fortnight ago I was in a Belgian roadside café. They had three different types of mayonnaise in pump dispensers and a man sat eating moules marinière with a tiny bottle of rosé.

Britain has always been a bit special – and that’s not just British exceptionalism speaking. We have always been sailors, explorers; we are a diverse nation that includes cultural elements from all over the globe. It’s one of the things that make us strong.  The question we have to ask however is whether these cultures complement British culture or erode it.

The culture of Britain is under no substantive threat from other Europeans.

Every British town has a McDonalds, Pizza Hut, KFC, Subway and Starbucks. We watch Amazon Prime and Netflix, Nickelodeon, Warner Brothers, Disney, Discovery. We don’t eat moules marinière in roadside cafés, we eat Burger King. We don’t watch François Truffaut films, we watch 20th Century Fox Movies. The biggest threat of cultural erosion that Britiain faces is from the USA.

Remember:

  • Burgers are foreign food
  • Coke is a foreign drink
  • Hollywood is foreign cinema

Other European cultures aren’t immune either, they are more protected because of language but you still find American chains, American food, American films and TV wherever you are in Europe.

We can be much more effective in resisting cultural erosion, from wherever it comes, if Europe works together. The preservation and enhancement of European cultures is a specific objective of the European Union. Far from trying to homogenise European culture there are programmes in place trying to designate, protect and promote individual European cultures (and that includes British culture).

Yes, we are a bit special because we are an island. We mustn’t get carried away with that and think that our past, our present and our future is not inherently tied up with that of the rest of Europe, because it is. Europe is stronger if it acts together, Britain is stronger if it acts with Europe.