All posts by Craig Murphy

Rip-Off Britain

I have just returned from another jolly to mainland Europe .

Folks who know me will appreciate that I like McDonalds Mcflurry – an ice-cream dessert (priced at 99P)

Can anybody please explain how a shot of finest (black, not opaque) espresso topped with a good sized ” dob” of ice-cream costs just 1€? In Europe.

This delicacy is known as an helado e café. One Euro, 70p roughly – how does a McFlurry cost more? Does a shot of espresso in Europe cost 29p? No, we’re being ripped off here in Britain: overcharge for everything, forget “please” and “thank you” and dispense with customer service.

My local golden arches can’t even do me an espresso, never mind a coffee with a dob on top…when challenged to come up with a price, they reached nearly £3.00

I would use the phrase “wake up and smell the coffee”, but the UK’s McCoffee is probably pants too.

SOS?

The general public (and by virtue that you are reading this blog excludes you) are by definition generally dense.

Take for example a recent incident that involved my wife requesting a simple “garlic bread with cheese” dish in The Plaza in Golf del Sur, Tenerife. Now, the menu contained garlic bread, garlic bread with tomatoes and cheeseburgers. My wife’s request for some garlic bread with cheese should not have been beyond the wit of the English woman taking the order…or so we thought.

“Have you had it here before?”, she squealed.

“No, but you have cheese and you have garlic bread and you can do garlic bread with tomatoes…therefore…”, we responded.

“I’ll have to check with the chef, to see if he can do it” replied the English woman.

This was “the sign”. He’s a chef for crying out loud, he can do anything. Well, anything, it seems, except call garlic bread with tomatoes on top bruchetta, but that’s another issue.

A few years ago a good friend introduced me to a phrase that can be used to identify these moments of daftness, cluelessness, call it what you will. SOS – this is the Sign Of Stupidity. You’re best using the shortend version: “the sign”, this way you can use the phrase “that’s the sign” in the company of fellow SOSers without alerting the general public who just are so good at exhibiting the sign.

Here is the original text.

Friday the 13th

Today, being Friday the 13th, I was expecting something unlucky to happen.

Here’s the scenario:

1. My colleague’s flight departs Luton (well, London Luton as it seems to be called, kind of like “Glasgow Prestwick”…) at 1450 – he’s travelling to Glasgow.
2. My flight departs Luton at 1455 – I am travelling to Edinburgh.
3. At 1355, we are both in the same hire car heading towards Luton airport
4. The hire car needs to be re-fuelled and returned to the “hire car return” place.
5. The hire car return place requires a courtesy coach ride back to the terminal – via the Long Term Car Park so this ride takes longer than planned.

My colleague comes up with a brilliant plan: we’ll go straight to the airport and check our bags in. We’ll park the hire car in the “drop off” car park and each run in to the airport individually – this was a great plan that worked a treat. Once checked in, we then re-fuelled the hire car and returned it. We jumped on the courtesy coach that would take us to the terminal…this was at 1430.

For those of you who might be wondering where this story is going: easyJet insist that you are at your departure gate 30 minutes before the flight takes off. Clearly we had both missed this “deadline”. Anyway, the coach was moving and we were minutes away from the terminal. There was a chance we might be able to make it – hey, no bags to check in, we had our boarding passes: surely it’s just a case of dash through security and jump on the plane?

The Italian language is so elegant, so beautiful, so graceful, I could listen to it for hours. I was pleased that we shared the courtesy coach with four Italians: I could listen to their banter for a few minutes. We were slightly amused at their style: one of them went forward to the driver to ask if this bus went to the airport departure terminal. However he did so in a very “Anglo” way: his first words were: “EXCUSE ME”…followed by a barrage of native Italian. Hand gestures of an aircraft taking off were the only clue the bus driver got!

I should point out that I know some Italian and my colleague knows none.

Imagine how quickly we both “learnt” a handful of Italian words when one of them went forward to the driver, “EXCUSE ME”, followed by the Italian for “we’ve left important travel documents, tickets, in the car hire return area, can we go back for them?”

We returned to the car hire return, we checked our watches, 1440. Luckily our Italian friends recovered their missing documents and we were back on the road and at the terminal at 1445. Run: gate 17 for Glasgow, gate 18 for Edinburgh.

We made it with seconds to spare: my colleague’s name was announced as “holding up the flight, please proceed immediately to gate 17”, etc. My flight was still queuing prior to boarding.

I waited in my queue, moving forward when required. I had moved forward by about 10 paces when I heard what sounded like a door alarm going off. Nobody else panicked, so we just remained in our queue. Seven minutes passed; then a gentleman (not from these parts) from easyJet spoke to us. I didn’t understand a word he said, however it culminated in all of us moving through the boarding area and on to the tarmac. Hey, I still have all of my boarding pass – that little bit they tear off: I had it in my grubby hands and I was on the tarmac air-side!

Anyway, it turns out it was a fire alarm. I muttered to another easyJet spokesman that the alarm wasn’t really much cop and that it needs a voice telling us what the alarm sound is for. He looked stunned, they had installed a female voice that exclaimed “Evacuate!” just last week! Incidentally, this said easyJey employee, nice bloke, very funny, communicated using his mobile ‘phone…something that is prohibited for us travellers.

The Glasgow flight had fully boarded, the doors were closed, ready to go etc. The fire alarm grounded everything.

I had boarding pass number 127, which meant I had to wait for 1-30,31-60, 61-90 to board before me. As luck would have it, we had to go through the whole boarding card/passport check thing again, even those passengers who had already lost the tear-off part of their boarding pass. Since I was last in the first time ‘round, I was first in when we snuck back in through gate 17 to get back to gate 18.

Once I had part of my boarding pass torn off, I moved in to the 91 and above boarding area: there were four of us in the boarding area, the other three being in the 1-30 area. There was another problem behind us and nobody joined us for a few minutes. Anyway, the gates to the tarmac opened and an easyJet employee said “come on, let’s go!” So I did, and I was amongst the first five people to get seats, despite having boarding pass number 127. Jackpot.

So whilst today was full of drama, I enjoyed an element of luck. The whole thing only delayed my travel by 30 minutes.

Blogging: does this signify the end of NNTP?

Earlier this year (2004), I wrote an article called Change Imperative.

In that article I discussed how I set about changing my e-mail client and my NNTP newreader tool. It’s not important, but I chose TheBat and XanaNews.

Anyway, since I wrote the article, I’ve pretty much given up reading NNTP newsgroups. Why? Well, I’m getting a similar, but higher quality, more focused “fix” of information from the blogs that I’m subscribed to.

I think that’s the key: “subscribed to” and “focused”. I choose which blogs to subscribe to because their authors offers me a more focused view. Previously, using NNTP I had to filter through a lot of dross in order to locate good content. Indeed, a lot of NNTP groups have their resident “bozos”. Luckily, XanaNews has a “bozo bin” – which is just great for filtering out dross.

Of course, the blogs that I subscribe to are telling me when they’ve been updated (either via an RSS or ATOM feed).

Under the hood, we’re all merrily blogging away, carefully classifying each post using categories. This is very similar to the NNTP grouping hierarchy – folks can choose to subscribe to blogs that offer them, say, Test-Driven Development content. Except, blog content tends to be of higher quality, it’s more focused and bozos are just ignored. Ultimately, I have less to read because of the focused content – in reality I subscribe to just over 100 RSS feeds, so the time-saving balances out.

Does this mean the end of NNTP? Given that I pretty much stopped using NNTP over a period of three months (having been a user for longer than I care to remember), perhaps NNTP has a limited lifespan? I know that I can’t be alone.

Roll on the Semantic Web – the profusion of information sources makes the delivery of a real information aggregator even more essential. I’ve downloaded Haystack . I have soft spot for this kind of tool, perhaps because there’s an XML element (no pun intended) relating to how such a tool might work: XML Topic Maps. I’ll blog about Haystack later.

Now, I do have one concern: we’ve all got RSS aggregators, right? And they periodically go off and update themselves, pulling new RSS content from all our subscriptions. Isn’t all this extra traffic going to slow things down? Suddenly, sites that enjoyed average traffic are suddenly having to serve up MBs worth of RSS content to thousands of subscribers. Bandwidth is going to go through the roof. I’m off to check my stats: I’ll blog about my findings later.

Hire Developers, Not Programmers

Eric Sink has written another fine article. His first article, Make More Mistakes was fantastic – if you’ve not read it, I can strongly recommend it.

In his article about the Hazards of Hiring, Eric must have been sat at the back of one of my presentations: he describes “programmers” and “developers” in exactly the same way I do! Indeed Eric has blogged about it here. Another fine piece of writing.

When necessary, however, I do state that some tasks bring the developer down to the same level as the programmer. For example, when discussing Test-Driven Development (TDD), I believe it is the person at the coal-face who should be writing the programmer tests. Whether a developer writes them, or a programmer writes them, in my opinion is neither here nor there.

However, as for Eric’s thoughts? I agree: I was a programmer in my youth, I just churned out code.

Back then, despite my title (Library Programmer), I became a developer…because the distinction Eric and I agree on wasn’t written down back then. The team I worked with also were developers: we took an open-minded approach to challenges, in many cases turning what might have sounded almost impossible into reality.

After that, I took a position that allowed us to customise our job title to suit what we were doing at the time: enterprise development. We kept a focus on the bleeding edge – everything we did involved XML, it was so cool back then. Nowadays of course, XML has its place, but we don’t have an “XML everywhere” scenario anymore.

Since then, I’ve still kept the word ‘development’ in my title: because I believe that one shouldn’t pick a single track and follow it. It’s important to be able to lend a hand to many tasks without selling yourself as a Jack of all trades, that’s totally different from being a Developer.

Nowadays, I’m a Certified ScrumMaster, with a strong bias towards all things Agile. I can see how Agile could have helped me/us on earlier projects. Equally, somewhat prophetically, can see that Agile will bring my current project in on time and within budget. So much, so I’ve signed up to SellingAgile, Clarke‘s Yahoo group aimed at individuals and developers who need to understand how traditional approaches can be improved by adopting Agile approaches.

Lending a hand to many tasks facilitates getting the job in hand completed through team-work, drive and focus. Developers can do this, they have the mind-set – hire developers, not programmers: good advice, I’ll follow it when I set up my own shop.

How big are your steps?

I re-ran my An Introduction to Test-Driven Development session yesterday…to an exceptionally interactive and responsive audience.

The slides are free to download here (1134k). Feel free to download the Delphi 5-7 code, the Delphi 8 code or the Visual Basic.net code.

I was using DUnit with Delphi 7. I re-iterated the fact that eXtreme Programming and TDD extol the virtues of “doing the simplest thing that could possibly work”.

Read more about the session here.

Tied in with this debate was a lengthy discussion about the concept of “small steps”.

Early on in my session I took lots of really small steps, panicking the audience slightly as they wondered how long it would take me to get from 1 to 2000 in Roman numerals (I was applying TDD to a Roman numeral conversion class).

TDD promotes the notion of taking plenty of small steps, gradually taking slightly larger steps as your confidence increases. However, the instant you step over your mark and take a step that’s too large, you should revert to taking smaller steps until to regain your confidence.

The size of TDD steps is important and it’s one that you have to be happy with yourself: a “small step” that works for you might be a large step to somebody else. It’s about finding a happy medium – go out and try TDD for yourself, make the mistakes that I did, take large steps, try to do too much in a method and test. It’ll all come out in the wash and eventually as Erich Gamma said, you’ll be “test infected

Want to learn more about TDD? These books are highly recommended:

Test-Driven Development in Microsoft .net
Test-Driven Development: a practical guide

Test-Driven Development: a practical guide: Reviewed here.

Test-Driven Development by example

Doing “the simplest thing”

I re-ran my An Introduction to Test-Driven Development session yesterday…to an exceptionally interactive and responsive audience. The slides are free to download here (1134k).

I was using DUnit with Delphi 7. I re-iterated the fact that eXtreme Programming and TDD extol the virtues of “doing the simplest thing that could possibly work”.

About half way through my session (which could easily have run on to 2 hours had dinner not got in the way!) a well-respected friend, Adrian, raised his hand and said: “Building a class isn’t the simplest thing!”

I had built a class that converts integers into Roman numerals. The first step was to add a method, toRoman, that took an integer and returned nothing. The second step was to have it return ‘I’ when ‘1’ was passed in as a parameter. Feel free to download the Delphi 5-7 code, the Delphi 8 code or the Visual Basic.net code.

Of course, he was right, building a class that has one method returning the letter ‘I’ is overkill. It’s not the simplest thing. Everybody knows that the simplest thing would have been a simple function with no class wrapper and no hint of object-orientation.

I realised that what I had done was the simplest thing the could possibly work in this xUnit testing framework. It wasn’t the simplest thing that might get the job done.

Similarly, in an earlier re-run of the same session, Andy, pointed out that my idea of the simplest thing perhaps wasn’t his. And herein lies one of TDD’s ironic facets: whilst TDD provides us with a great understanding of “how” a piece of code should be invoked, thus increasing the chance that somebody other than the original developer/programmer will be able to understand it, TDD can be an emotive process.

TDD will help you as far as your “under the bus count” goes, it will give you the most accurate form of documentation that you’ll ever have for your code base, but it won’t help you ring fence or blinker your programmers in to writing code the in the same way. But, since that’s not something any of us should relish, Borg-like programmers churning out the identical code for the same problem, it shouldn’t put you off TDD.

I’ve just googled under the bus count only to realise that it’s not defined anywhere.

I’m using the phrase to mean:

    the number of people on a project who need to be run over by a bus, that will then make the project fail or incur a severe cost/time delay

If you are on a project with a team of one: yourself, then the under the bus count is one. If one person, you, is run over by a bus, the project fails, or meets almost insurmountable cost/delays. Of course, if it’s just you on the project team, you probably don’t need to worry about who’s going to be picking up the project after you’re gone!

Ideally, you should try to drive your under the bus count upwards, away from one. There should be no single point of failure, no empire-builders.

Go practice TDD, trust me, it works. It heralds a new confidence that will allow you to improve (refactor) huge chunks of your code base that you’d probably never want to touch citing “if it a’int broke don’t touch/fix it”…when you know perfectly well that the internal design is like a house of cards and won’t survive the next bout of customer change requests. It improves the quality of your life…there, what else goes this far?

Want to learn more about TDD? These books are highly recommended:

Test-Driven Development in Microsoft .net
Test-Driven Development: a practical guide

Test-Driven Development: a practical guide: Reviewed here.

Test-Driven Development by example

Scottish Developers Perth Conference

Friday saw Scottish Developers holding a day conference in Perth, Scotland.

Extra chairs had to be brought in: we took a couple of last minute bookings that took us over the edge. Good to see a full house!

Full details of all the sessions can be found here.

But briefly, the sessions were:

Duncan Jack – Coldfusion and Flash Integration
John Cant – HyperOS and experiences of designing an ASP webserver for CD
Andy Swan – Design by Contract
Rob Lally – scripting language Groovy designed for the JVM

John’s demonstration of HyperOS was an eye-opener: unlike VMWare or VirtualPC, HyperOS uses real hard drive partitions to manage operating systems. Re-installation of an operating system is simply a matter of drag’n’drop: Windows 95, for example, took less than a minute to restore itself to a “clean” unbroken state. And, of course, whilst HyperOS can only run one OS at a time, that OS has full access to the machine’s resources. Contrast this with VMWare or VPC which uses the host’s resources.

Rob’s Groovy session demonstrated how Groovy sits on top of the Java language and is in fact a very terse language that is converted into Java prior to execution. Rob demonstrated that 50 lines of Java could be expressed in 6 lines of Groovy. Impressive stuff.

Duncan’s session, once again, drummed home the power of Flash. Scottish Developers ran an evening event in June where Flash was demonstrated from an animation perspective. Duncan looked at it from an Rich Internet Application angle. Powerful, fast, fewer roundtrips to the server: that was the main message.

Andy’s DBC session presented Bertrand Meyer’s pre and post conditions. It also covered invariants. Interestingly, once the session entered Q’n’A, the subject of discussion moved to TDD, Test-Driven Development. We ended up discussion how pre/post conditions are often tested using assertions, and since TDD uses assertions too, could we combine pre/post assertions with the test’s primary assertion? Of course we ended up wondering if one assertion per test is a good thing, or should we just bite the bullet and have a handful of assertions per test. Currently, we are agreed on the latter: more than one assertion per test. Emotive stuff.

We gave away a couple of books, a rubgy shirt and some t-shirts: everyone’s a winner!

All in all, these were four very good sessions and excellent speakers: see you at the next Scottish Developers event!

Test-Driven Development: a practical guide – book review

Test-driven development (TDD) has become very popular in recent months. Until now there was only one textbook on the subject: Kent Beck’s. “test-driven development: A Practical Guide” by David Astels, was published in July 2003 and complements Beck’s original TDD work. This book is part of The COAD Series, named after Peter Coad, Borland’s Senior Vice President and Chief Strategist. The book itself is a little over 550 pages long and offers up-to-the-minute advice on how TDD can change your development and testing philosophy.

Read the review here.

Scottish Developers have free books…to give away!

Are you studying for your MCAD or MCSD certification? May be you’re thinking about taking any of these Microsoft exams: 70-300, 70-305/70-315, 70-306/70-316, and 70-310/70-320?

If so, you’ll be pleased to learn that Scottish Developers are giving away the following books:

books

All you have to do is come along to Scottish Developers day conferences and evening seminars! The next one is Friday 25th June: more details can be found here.

Thanks are due to INETA for the provision of these books and for their support!

Tim Bray on TDD

I was interested to read Tim Bray’s push on Test-Driven Development (TDD).

What caught my eye was the closing paragraph (repeated here):

And if you’re a CIO, ask your development people if they’re using TDD internally, and if they’re not, go order some copies of Kent Beck’s Test Driven Development: By Example and hand them out and tell them to get with the program. Anything less would be unprofessional.

Wouldn’t it be just great if upper management handed out [free] books on really cool topics like this?

Isn’t that last sentence just the the ticket? Clearly, Tim is a great TDD fan. And why not? TDD has made my life easy and it has made my users’ life easier too – bugs are caught much earlier in the process.

Download the slides to my Delphi-oriented TDD presentation here (and the code is here). A Visual Basic.net version can be found here.