LinkedIn is full of useful little articles about mistakes not to make in the world of work. However here’s one I’ve never seen mentioned. I’ve just had a kick-off meeting with a new client. In order to appear friendly and unthreatening I dressed in a dark green suit, with a brighter green shirt. Unbeknown to me, the brighter green is not only quite similar to one of the company’s logo colours, it’s also the colour they have chosen for many of the walls and much of the furniture at their offices. Take off my jacket, and I was approaching sniper levels of camouflage. There’s a lesson here somewhere…
Scary Format Reversal
My penultimate purchase of music on vinyl was in 1989. I think, if memory at this distance serves, it was Running in the Family by Level 42. In the intervening 26 years I have felt very limited need to use other than CD or purely electronic formats.
That all went out of the window last week, when I tried to track down a particularly arcane track by the King’s Singers (their version of Eurovision winner Ding-a-Dong, if you must know). Despite their enduring popularity their album Lollipops has apparently never been released in a digital format. However a few minutes on eBay and £9 later I tracked down the LP, which turned up a few days ago nicely packed and in good order. Our record deck with a USB output and EZ Vinyl/Tape Convertor made quick work of digitising it, although it did get a bit confused by the track on side 2 with the substantial rests… Makes you wonder why the youth of today are so obsessed with all this downloading business when the alternative is so straightforward
Edge of Silence
We’ve just finished our 30th anniversary viewing of Edge of Darkness. I must now have seen the series at least 10 times, but in this case familiarity breeds respect. Like the best Shakespeare play or Verdi opera the series rewards repeated study, and every time we notice something new about the story, the production, or both.
I’ve noticed before how Edge of Darkness has such an unforced pace, with space for the actors just to act. This time I consciously observed the phenomenon. In the first episode, after Emma’s death, there’s a period of about 20 minutes where Craven is grieving and the other policemen trying to help him deal with it. There are perhaps half a dozen lines of dialogue. In the 5th episode, where Craven and Jedburgh break into Northmoor, there are no more than a couple of hundred lines of dialogue in total. In over 50 minutes. Yet in both cases your attention is held completely, and there’s never a sense that the pace should be even slightly quicker.
This was also the first time I had watched it on a big screen, but at its original 3×4 aspect ratio. Now 3×4, especially with 1980s slightly grainy video, doesn’t suit expansive vistas or dramatic special effects. It does suit portraits, much better than wider presentations. What I noticed on this viewing was how Martin Campbell and his team really exploit this, filling the screen from corner to corner with one or two faces. It was powerful in the days of 20" TVs, but really punches through on a 50" set.
Yet again our understanding of the politics and personalities deepened. When I first saw the series, I wasn’t sure that Harcourt and Pendleton were the good guys. This time, I started to appreciate some glimmers of humanity in Grogan, the chief villain. Maybe by the 20th viewing we’ll understand him as well.
It’s slightly odd that the BBC chose to repeat the series last year rather than on this anniversary. 30 years on Edge of Darkness is still unmatched as a conspiracy thriller, and deserves some celebration.
Review: Next Generation SOA
A Concise Introduction to Service Technology & Service-Orientation, By Thomas Erl and others
Dry, terse text which misses its mark
This book sets out to provide a concise overview of the current state of, and best practices for, Service Oriented Architecture. While it may achieve that for some managerial readers, it is simultaneously too general for those with more background, and may be too terse for those with less technical understanding.
The authors and editors have clearly set themselves the admirable aim of producing a short and concise overview of the field. Unfortunately in the quest for brevity they have ended up with a terse, dry and dense writing style which is very difficult to read. At times it feels almost like a game of "buzzword bingo". I frequently had to re-read sentences several times to understand the authors’ intended relationships between the elements, and I’m a very experienced integration architect.
At the same time, for a book on architecture there are very few explanatory diagrams, wordy descriptions being used instead. To add insult to injury a few low-value diagrams such as one depicting the cycle of interaction between business and IT change drivers are used repeatedly, when once would be enough.
The first chapter provide a overview of service orientation and its key principles, characteristics, goals and organisational implications. This is followed by a chapter on service definition and composition. Ironically this part of the book is is quite repetitive, but manages to omit some key concepts. There’s no real concrete explanation of what a service is or does – maybe that’s taken as read, but a formal definition and some examples would go a long way. Likewise there’s nothing at this point on basic concepts such as service contracts and self-description, synchronous vs asynchronous operation or security. The second chapter goes into some detail on the idea of service composition but only really deals with the ideal green-field case where functionality can be developed new aligned exactly to business functions.
The following chapter on the SOA manifesto is better, but again doesn’t recognise the realities of real enterprise portfolios, with legacy systems, package solutions and external elements which must be maintained and exploited, and non-functional priorities which must be met.
Chapter 5 deals with service-related technologies and their potential interactions. This is good, and for me represented the core value of the book, but is crying out for some diagrams to supplement the lengthy text. There are good notes on service definition under Model Driven Service Design, but this key topic should really have been a major section in Chapter 3 in its own right. The statements about technical architecture are rather simplistic, with an overall position of "this is expensive and difficult, or just use the cloud" which is not necessarily right for all organisations.
The next chapter, on business models, is very prescriptive. It is also slightly misleading in some places about the role of IT in transactional services – such services are delivered by a business unit, possibly but not necessarily enabled by and carried through an IT service. It would be perfectly viable in some cases for specific services to have a manual implementation. This is well explained in the case study, but not here or in the Business Process Management section of the previous chapter.
The final chapter of the main text is a "case study" describing the wholesale transformation of a car rental company through adoption of service, agile and cloud approaches. It feels slightly contrived, especially in terms of its timeline, the preponderance of successes, and the surprising lack of resistance to CIO-led business change. However it fills a useful gap by explaining much better than the technologies chapter how the different technologies and approaches fit together and build on one another.
Appendix A is a taster for the other books in the series. Unfortunately the content is presented as small images which cannot be resized and are almost unreadable in the Kindle version. It has also been "summarized", with the result that it appears to add very little meaningful detail to what has already been said.
Appendix B is a useful expansion of the main text regarding organisational preparation, maturity levels and governance for SOA. I would personally have been tempted to merge the first two parts to the main text rather than positioning them as an appendix, where they are necessarily repetitive of some material which has already been read.
Appendix C is another taster for one of the other books in the series, this time with an overview of cloud computing. While this is at a fairly high level, it’s a useful and well-written overview for those unfamiliar with the concepts.
Overall this is a frustrating book. There is some good material, but missing key "reality checks" and presented in a terse, text-heavy style which makes it harder to read than it should be.
Standardising the Mac Keyboard
My MacBook Pro is, ironically, the best portable PC I’ve owned. The Big Old Alien is slightly faster and more powerful, but you’d never use the word "portable" about it without gritted teeth, and since the PC world went to silly wide (=short) screens as standard, nothing else with a 15" screen can match the Apple’s bright, colour-accurate and relatively tall display. The form factor and elegant, strong body suit me very well.
The initial teething problems with accessing external displays resolved themselves when I bought some slightly higher quality display adapters. Ironically the best one for VGA has "Dell" written on it. The multi-touch trackpad works well with Windows as soon as you set the bottom right corner to provide a right mouse click, and the spacing and action of the keypad allows me to type quickly and fairly accurately in a way which isn’t possible on many of the other laptops I’ve owned.
The keyboard layout, however, is a different matter. I’m sure that Apple’s position is that you should just use Apple keyboards all day every day and get used to it, and that the more common layout is a Microsoft/IBM standard anyway. The latter point might be true, but that doesn’t help those of us who operate in a more heterogeneous world. I have to work on PCs as well. About half the time, I use my Mac via Remote Desktop, from a PC with a standard Microsoft Keyboard. Even when I’m working on it directly, and even though I’m not a true touch typist, my muscle memory is sufficiently good that I default to the UK PC positioning of the ", @, \ and # symbols, all of which I use quite frequently. And occasionally Frances gets to use it, and she is a touch typist who uses PCs all the rest of the time.
I therefore decided that something had to change, and that was the Mac! Unfortunately turning it into a "standard" PC layout is non-trivial, but I’m getting there.
The first step was to implement a proper "Delete" key, without which the Mac is unusable in many Windows programs. The solution to that one’s fairly well documented: you use SharpKeys to adjust the registry, and remap a suitable key to send the Del scancode, which is an easily reversible but permanent fix. I chose F12, which is easy to map and in pretty much the same relative position to Backspace as most Windows laptops. I believe it may be possible to use the CD Eject button instead, which would be even better, but I haven’t got that working yet.
The next layer is the Windows keyboard definition. Microsoft provide a free utility called the Microsoft Keyboard Layout Utility, which allows you to define the mapping for the main text keys. The advantage of this is that you can define multiple layouts and switch between them on the fly, if, for example, you work in several languages. I initially tried having the Apple layout, plus one based on a standard UK keyboard. This works tolerably well, but you can get tripped up if you haven’t switched the layout correctly, as you have to switch the keyboard separately for each application used in a login session. It also doesn’t resolve the problem of muscle memory on the Mac. Something more enduring was required…
I decided it was time to try and sort out the MacBook keyboard more directly. It’s relatively easy to pop the keycaps off and swap the standard text ones around. First change is to swap the \| key with the ~ key, which puts them into their correct positions for PC users, and remap their output in a copy of the Apple keyboard layout. While I was at it I remapped the non-shifted character on the ~ key from a grave accent to a # – consistent with PC keyboards and about 1 million times more useful in this hash-tagging world!
Apple’s approach to the quote keys appears to be wilfully obstructive. All European keyboards since the age of typewriters, including British ones, put the double quote above the 2. So do older American keyboards. However the US IBM Selectric typewriters put the @ above the 2 and the double quote above the single quote, and that became the standard for US PC keyboards. For reasons which I can only assume are due to an arrogant American company trying to impose American standardisation on others the UK MacBook keyboard follows US rather than standard UK practice. Fortunately they don’t impose the same change on the rest of Europe, so a partial solution presents itself by purchasing a replacement 2/" key for a German machine (from the excellent http://www.thebookyard.com), and swapping the outputs of the two shifted keys in the keyboard mapping file.
At this stage I have a single keyboard map which works with both the native keyboard or a PC one, and outputs all the symbols I regularly use on PC rules. The majority of keys on the MacBook keyboard also follow their labels. There are two exceptions: the @ key is generated by shift+quote as expected, but not shown on the key, and the same goes for the #, as the base symbol on the ~ key. Unfortunately as far as I can see there are no variants of the MacBook keyboard for any country which have these key combinations, so getting replacement keycaps is not an option. However I can probably live with this limitation.
The one remaining annoyance is the fact that the Fn and Ctrl keys are the opposite way round on the Apple keyboards to most PCs. That’s a bit of a problem with muscle memory for Ctrl+key shortcuts. However I’m gradually training myself to hit the standard PC Ctrl key on its right edge, which is almost the right position for the Mac Ctrl key as well. The real fix is to develop a new keyboard driver which swaps those keys altogether, and then swap the key caps. That’s not for the faint hearted, and I’m not going there unless I have to (and have lots of spare time).
There’s one more layer! Some of my software (particularly XnView, which I use for image management) uses the numeric keypad, which doesn’t exist on the MacBook (one of the big advantages of the Alienware M17X being so enormous!). However that has a relatively quick fix, using AutoHotkey to temporarily map the equivalent keystrokes from the standard number keys. This has the advantage that I only need to have those changes in place on demand, and can tweak the mapping on the fly if needed.
It’s a complicated process, and definitely not standard end-user territory, but I’m nearly there!
Schizo!

Mercedes-Benz E Class Cabriolet E 350 CDI Blue Efficiency AMG Sport 125. Phew! | |
Camera: Panasonic DMC-GH4 | Date: 14-05-2015 20:09 | Resolution: 4367 x 2457 | ISO: 500 | Exp. bias: -66/100 EV | Exp. Time: 1/60s | Aperture: 2.8 | Focal Length: 12.0mm | Lens: LUMIX G VARIO 12-35/F2.8 |
It has been said that the ideal car for Darth Vader would be an original Mercedes CLS, in black. I think I have discovered the ideal car for Dr. Henry Jekyll, and Mr. Hyde!
Mercedes themselves acknowledge the dual personality of the beast with the space-filling full title of “Mercedes-Benz E Class Cabriolet E 350 CDI Blue Efficiency AMG Sport 125”. Now I may be wrong, but shouldn’t “Blue Efficiency” and “AMG Sport” sort of cancel each other out? Apparently not…
In normal use this is a typical, refined, Mercedes soft-top, very reminiscent of the old 129-series SLs. I was a bit worried before I took delivery that the suspension might be firmer than ideal, but it’s absolutely fine. It’s smooth, stable and quiet, the big Diesel engine hardly audible top up or down.It’s very quick, but doesn’t feel “fast”(even though on main roads you can maintain high speeds very easily), because the throttle response is fairly muted. And, the “Blue Efficiency” bit kicking in, on a long run as long as you keep it under about 85mph you can get around 40mpg, not bad for a heavy car with a 3l engine. Ideal for mild mannered Henry Jekyll.
And then you press the little button marked “SPORT”.
Now I’ve had cars with sport settings before. On the Mercedes SLs and the old Porsche 993 it supposedly made the gearbox a bit more responsive, but I never noticed much difference. On the VW EOS, with its petrol turbo engine there was a noticeable effect if you wanted to drive hard because the different profile meant that the turbo was always spun up and there was no lag, whereas that could occasionally catch you out in normal mode.
This is different. The button should probably be labelled “Dr. Henry Jekyll’s Patent Elixir”, but unfortunately that wouldn’t fit. It seems to signal someone to release a snarling, snorting monster from its cage. In practical terms the car sharpens its steering, firms up the suspension, changes the gearbox profile and dramatically modifies both the throttle response and engine behaviour. I’m not sure whether there’s also a change to the exhaust note, or whether that’s just a side-effect of the engine working harder. The net effect is a bit like having a large, powerful dog pulling you along on its lead – you go from nudging it gently in the rear end in ECO mode to desperately trying to reign it in in SPORT. 0-60 takes just over 6s, but the most noticeable effect is mid-range acceleration, which distinctly betters my last Porsche. Mr. Hyde would approve.
Some cars are soulless, and some have a distinct personality. This has two, and I’m enjoying both of them!
Lotsa Changes!
I’ve taken advantage of a bit of spare time to sort out our web sites, and in particular fix a few things which didn’t work quite right after our enforced emergency upgrade in February.
Hopefully you should see everything working properly now, but let me know if not. ☺
AgileArchitect.org has had the most significant makeover, and is now fully responsive and mobile-friendly, just like our other sites.
Happy browsing!
A Visitation

Hedgehogs in our courtyard | |
Camera: Panasonic DMC-GH4 | Date: 09-05-2015 21:29 | Resolution: 3833 x 2555 | ISO: 3200 | Exp. bias: 0 EV | Exp. Time: 1/40s | Aperture: 2.8 | Focal Length: 100.0mm | Caption: Hedgehogs in our courtyard | Lens: LUMIX G VARIO 35-100/F2.8 |
Great excitement chez nous last night. The security lights went on and we spotted not one but two hedgehogs snuffling around in the courtyard. Fortunately they stayed round long enough to get a few photos.
The security light provided good illumination, but kept on switching off (as it’s supposed to), so Frances ran around to wave at it and switch it back on. What was very funny was that each time the light came on, the hedgehogs froze mid-snuffle for about 10 seconds, just as portrayed in Over the Hedge, but which we’d never seen before in reality.
I spotted another one later on when I got up for a glass of water, so hopefully these welcome visitors will become a regular feature.
A Failure of Curation

Odd captioning practices at The Photographers Gallery | |
Camera: Canon PowerShot S120 | Date: 05-04-2015 14:48 | Resolution: 3945 x 2630 | ISO: 200 | Exp. bias: 0 EV | Exp. Time: 1/60s | Aperture: 3.5 | Focal Length: 10.4mm |
We visit a lot of photography exhibitions. The majority are inspiring or thought-provoking, and well worth the effort of the photographers, the presenters, and the attendees.
Along the way there has been the odd disappointment: sometimes we just don’t connect with the material, on other occasions we have felt that the volume or quality of the work hasn’t justified a high entrance cost. On one occasion an exhibition presented such a biased left-wing viewpoint that I felt desperate for the injection of some balance.
However today we had a new experience – an exhibition based on a good volume of high quality work, at a great location, which failed abysmally due to comprehensive incompetence in curation.
The offending exhibition was Human Rights, Human Wrongs at The Photographers Gallery. The piece was meant to chart the path of human rights since the Universal Declaration in the 1940s, drawing from a large archive of reportage. It failed.
The main problem was the complete absence of any organising principle. With the occasional exception of sequential shots of the same event, there was no attempt to group items by location, subject, date or photographer. It was just a confusing "bunch of stuff". At times the confusion seemed almost wilful – two related, well explained pictures from Vietnam together on a wall, but separated by a wholly unrelated picture from Chad.
The curators provided copies of original notes on some of the images, but these were presented in tiny type well below the average eye line, underneath the photos. To ensure there was no chance of even this being readable the images had thick frames spotlit from above, so half of each caption was adequately lit, and half in deep shadow. In any event there was no attempt to present any context, explanation or information about what happened next – unless the photographer wrote this on the back of the original you were on your own.
The caption typist had clearly lost the will to live with the highly structured but low information content approach, and even managed to mis-spell "Untitled".
Even the choice of content felt random. There were lots of good pictures of American Civil Rights events in the 1960s. Fine. Plenty of pictures of Martin Luther King Jnr, a portrait of JFK and a nice picture of Nixon with Coretta King. Good. But why have a blurry picture of Lee Harvey Oswald but none of Johnson, Bobby Kennedy or Malcolm X?
The supposed light relief afterwards, pictures of horses on the American prairies, didn’t work either, with captions in about 8pt type several feet away from the related shot, and the beautiful animals captured against wilfully ugly backgrounds.
The Photographers Gallery has a great new location, but they don’t seem to know what to do with it. This is an abuse of our human right to a decent exhibition!
Normal Service Being Resumed
Apologies to all for the interruption to our websites and email service around last weekend. My server was hacked and used to launch DDoS attacks, and had to be taken offline and rebuilt with the latest software versions. Fortunately I only really use it to host the websites and our email endpoint, so it was a nuisance rather than a disaster. There’s a lesson that all servers need to be constantly patched and updated, and I’ll now have to either work out how to do this in the Linux environment, or switch to Windows which I understand a bit better.
If you did have an email bounced, please feel free to re-send. And if you do meet someone who hacks other people’s servers, feel free to give him a kick for me.
Efficient Fuzzy Matching at Word Level
I’ve just solved a tricky problem with what I think is quite an elegant solution, and thought it would be interesting to share it.
I’m building a system in which I have to process fault data. Sometimes this comes with a standard fault code (hallelujah!), but quite often it comes with the manufacturer’s own fault code and a description which may (or may not) be quite close to the description against one of the standard faults. If I can match the description up, I can treat the fault as standard.
The problem is that the description matching is not exact. Variations in punctuation are common, but the wording can also change so that, for example, “Evaporative emission system incorrect purge flow” in one system is “Evaporative emission control system incorrect purge flow” in another. To a human reader this is fine, but eliminates simplistic exact matching.
I spent some time Googling fuzzy matching, but most of the available literature focuses on character or even bit-level matching and looks both complex and compute-intensive. However finally I found the Jaccard similarity coefficient. This is designed for establishing the “similarity” between two objects with similar lists of attributes, and I had a “lights on” moment and realised I could apply a similar algorithm, but to the set of words used in the pair of descriptions.
The algorithm to calculate the coefficient for a given pair is actually very simple:
- Convert Text1 to a list of words/tokens, excluding spaces and punctuation. In VB.NET the string.split() function does this very neatly and you can specify exactly what counts as punctuation or white space. For simplicity it’s a good idea to convert both strings to uppercase to eliminate capitalisation variations.
- Convert Text2 to a list of tokens on the same basis.
- For each token from Text1, see if it appears in the list of tokens from Text2. If so, increment a counter M
- For each token from Text2, see if it appears in the list of tokens from Text1. If so, increment M
- Calculate the coefficient as M / (total number of tokens from both lists)
This produces a very intuitive result: 1 if the token sets are an exact match, 0 if they are completely disjoint, and a linearly varying value between. The process does, however, ignore transpositions, so that “Fuel rail pressure low” equates to “Fuel rail low pressure”. In my context this matches what a human assessor would do.
Now I simply have to repeat steps 2-5 above for each standard error description, and pick the one which produces the highest coefficient. If the value is below about 80% I treat the string as “matched”, and I can quote the coefficient to give a feel for “how good” the match is.
Hopefully that’s useful.
Positively On Fire…

Winter light on the pampas grass, chez nous | |
Camera: Panasonic DMC-GX7 | Date: 11-01-2015 10:45 | Resolution: 4592 x 3064 | ISO: 320 | Exp. bias: 0 EV | Exp. Time: 1/100s | Aperture: 5.6 | Focal Length: 45.0mm | Lens: LUMIX G VARIO PZ 45-175/F4.0-5.6 |
Apologies, my first blog post of the New Year really should have wished you all the very best for 2015. Please accept this as a pseudo-first post, with said wishes.
I also just wanted to post this shot from yesterday. A low winter sun, passing clouds and unusually upright pampas grass for January combined to generate this remarkable light pattern. As we were just going out of the door this is a grab shot taken leaning out of the bedroom window, but I think the result worked. I hope it’s an omen for things being “on fire” (in a good way) in 2015.