Random Disconnected Diatribes of a p&p Documentation Engineer
I discovered this week that online shopping is not something new and exciting, but has been around here in England since 1984; five years before the World Wide Web saw the light of day at CERN, nine years before the first commercially available web browser hit the streets, and eleven years before Amazon sold its first book (which was, rather eerily, all about computers and is still available).
Our pioneering English retailer was Tesco who, following a request from the local council in Gateshead to help elderly people with their weekly shopping, set up a small experimental scheme by attaching a simple modem-containing box to a telephone and a TV set. The display was text-based with about the same information display capability as a DOS command window, and it took 30 seconds or more to display each page. But it worked, and archive film shows people placing orders and taking delivery (and even paying with real money).
I suppose I'm a computing old-timer. I've been playing with and writing about computers for more than 30 years, and more than 20 of those have been directly or indirectly related to the Internet. Though the more I dig into the history of online retailing, the more amazing it is. Here in England we're known as a "nation of shopkeepers", but it seems we are also a nation of online shoppers. On average we spend more online per person than anywhere else in the world, which is amazing when you consider that in our tiny group of islands you're never very far away from a real shop. Though, considering my own shopping behavior (look on Amazon.co.uk first, and get the car out only if I can't find it somewhere on the web) I probably shouldn't be surprised.
The recent TV program about the 1984 experiment also described how rapidly some of the major players in the market have grown. A small London-based company that started by selling a wide range of items on TV, and whose name ASOS came from "As Seen On Screen", are now the largest online clothes retailer in Australia. Without any physical presence there and about as far away from its home base as you can get. And the Government here is in the process of privatizing the Post Office because it needs massive investment; not for delivering letters, but to compete in the fast-growing market of delivering parcels from online retailers.
You have to wonder how far all this would have got if we'd still been using the original 80 characters by 26 lines display and waiting ages for each page to load. Mind you, some old technology still seems to be working fine according to the news this week about the Voyager space probes. Voyager 1 is some twelve million miles away now, and travelling at eleven miles a second. And still working fine after more than 35 years!
Anyway, now that we all do our shopping on the Internet, and buy from retailers located across the globe almost without noticing it, the notion that the world is getting smaller becomes truer by the day. Meanwhile, a note in the article about Voyager 1 says will not reach the halfway point to our nearest star for another 40,000 years. I guess that shows just how small our world really is, or how big the Universe is.
And, supposedly, the on-board computer, built in the late 70's, has just a quarter of a millionth the processing power of a modern mobile phone. Imagine trying to do your mobile online shopping with that...
At one time you had to work in a museum to be a curator, but the wonders of information technology mean that now we can all exhibit our technical grasp of complicated topics and elucidate the general population by identifying the optimum resources that help to answer even the most complex of questions.
I'm talking about the new Curah! website here. The idea is simple: a resource that gathers together the questions most commonly asked about computing topics; each with a carefully and lovingly crafted set of links to the most useful blogs, reference documents, tools, and other information that offers a solution to the question.
Anyone can register and create a curation, and the site is optimized for search engines to make it easy to find answers. It's still in beta as I write this, but already has hundreds of answers to common questions. The great thing is that the curations are not just a set of links like you'd get from the usual search engines, which tend to optimize the list based on keywords in the resources, the number of links to them from other pages, and the newness of the content. None of these factors can provide the same level of usefulness as a list compiled by an expert in the relevant topic area who regularly creates and uses information that provides the maximum benefits.
My interest in the Curah! site also comes about partly because I am part of the group that defined the original vision and got it started. I've also added a few curations of my own, which are centered on the topic area that I now seem to have been permanently assigned to - Windows Azure application design and deployment. My regular reader will probably have noticed this from the rambling posts on this blog in the past.
However, one point that concerned me was that, having created my own curations, I am now responsible for maintaining them. As I plan to create more in the future, I was beginning to wonder if I would end up spending all of every Monday just checking and updating them as the target resources move, disappear, or I discover new ones. What I needed was some type of automated tool that would make this job easier. So I built one.
The CurahCheck utility is a simple console-based utility that will check one or more views on the Curah! site by testing all of the links in each curation ID you specify. The curation title and the linked page titles can be displayed to ensure that it is valid and that all of the linked resources are still available. It can also be run interactively, or automatically from a scheduled task.
The utility generates a log file containing details of the checks and any errors found. It can also generate an HTML page for your website that shows the results of the most recent check and the contents of the log file. If you have access to an email server, the utility can send warning email messages when an error is detected in any of the views it scans.
If you are a Curah curationist you can download the utility from here, and use and modify it as you wish. The source project and code for Visual Studio 2012 is included. Before you use it, you'll need to edit the settings in the configuration file to suit your requirements - the file contains full details of the settings required and their effect on program behavior.
Of course, the usual terms and conditions about me not being responsible for any side-effects of using the program, such as your house falling down, your children being eaten by a dinosaur, or your computer bursting into flames, still apply...
No, this post isn't about parental difficulties and I didn't spell "paternal" wrong in the title, although I admit it is about problems with relationships. More specifically, the relationship between design patterns and pretty much everything else. And, based on previous experience of dabbling in this area, how I hate design patterns.
For more years than I care to remember I've been driven by situation to describe, document, present, and generally discuss software design patterns. Initially it was just patterns related directly to ASP.NET where common ones such as Factory, Singleton, MVP/MVC, and Publish/Subscribe were obvious - and generally built-in to the framework, or easy to implement. We could never agree on a structure for documenting patterns, never mind the actual defintion of the pattern. Or which implementions to show, and in what programming languages.
Then I got involved in Enterprise Library, and more design patterns surfaced in my world: Builder, Adapter, Decorator, and Lazy Initialization. All good solid patterns that are well documented and easy to use in Enterprise Library. I even write code samples to demonstrate how, together with some tenuously humorous descriptions that attempted to relate the guy who comes to paint your house with the way the Decorator pattern works. Needless to say, those documents never saw the light of day.
But now I'm back in the mire of design patterns again, paddling furiously to try and stay afloat at the same time as writing semi-comprehensible verbiage around patterns in Windows Azure. Some of which seem so vague and newly invented that you might think they were giving out prizes for finding new ones. I've reached the state of wondering what design patterns really are, and if many of the new examples I'm trying to document are just techniques, guidance, general advice for implementation, or made-up stuff that sounds like it might be useful.
According to most reputable resources, a software design pattern is "... a general reusable solution to a commonly occurring problem within a given context in software design" and "... a description or template for how to solve a problem, which can be used in many different situations." But then the definition typically continues with "... they are formalized best practices that guide a programmer on the implementation, not complete designs or solutions that can be transformed directly into code."
So is something that's Windows Azure specific, such as how you perform health verification checking for an application, a design pattern? Or is it just a technique? Or guidance? It certainly doesn't fit the idea of a generally reusable solution or template that can be used in many different situations - it's pretty specifically a technique for checking if an application is alive. But it is, I guess, formalized best practice and definitely not a complete design.
In fact there's nothing I can find on the web that seems to relate to "Health Verification Pattern". Or anything related around "probe" or "ping" that fits with the scenario. Yet it doesn't seem like something that somebody just made up for fun either. There's features in Windows Azure Traffic Manager and Windows Azure Management Services to do health verification, even if it is just a simple probe on a specified URL and port.
Of course, what's clever is that you can have the target of the probe do some internal checking of the operation and availability of the resources the application uses, and maybe some validation of the internal state, then decide whether to send back a "200 OK" or a "500 Internal Error" status code (or some other error code). Though you do need to do it in a timely way so that the probing service doesn't think you've gone away altogether, and flag your application as "failed."
For example, with Traffic Manager you get just ten seconds, including network latency while the request and response traverse the Internet, before it gets fed up waiting. So there's no point is doing things like checking a dozen database connections, or validating checksums of every order in your system, because you probably won't have time. And is there any point in sending back a detailed error message if something has gone wrong in the application? You'll need a custom client in this case to handle it. But surely the application will already contain instrumentation such as error handlers and performance counters that will flag up any failed connections or errant behavior within the code at runtime?
Maybe it really is similar to a paternal relationship after all. Whenever I probe our son to ask if he's OK, all I ever get back is "yeah, cool". The real-world equivalent of "200 OK" I suppose...
My rather staid daily newspaper occasionally makes an attempt to be cool and trendy by squeezing an article about technology and lifestyle between the reports of war, famine, crime, and pictures of the Royal Family. But it was still a bit of a shock yesterday to see the headline "42% of People Admit to Nomophobia."
At first I assumed it was another kind of attention deficit disorder they'd identified in kids, or something you caught from watching too many reality TV shows. But after perusing the article I quickly grasped the real meaning: fear of being without your mobile phone. And, from reading more, it seems there is an acute version of the phobia where you're not only without your phone, but you can't remember where you left it.
I suppose I've never come across this condition before because I always know where my mobile phone is. It's at the back of the third drawer down in the kitchen cabinet next to the sink. And if I did forget, there'd be no point in dialing the number from another phone and trying to trace the sound because it's turned off. So it looks as though I should be suffering from chronic nomophobia. Something else I can ask my doctor about during my next visit.
Yet, strangely, I don't feel any symptoms or stress. I guess some people that don't know me will say it's because I don't have much interest in technical gadgets. But that's obviously not true – we have a ton of them in our house, everything from a computer-powered TV to a fully automated weather station (with added solar intensity recording) to a robot vacuum cleaner. And plenty more gizmos and electronic wizardry in between.
But, somehow, I can't get excited about all this new portable and wearable stuff – though that's probably because I hardly ever go anywhere. I have a wristwatch that is guaranteed to be 100% accurate because it gets its time from a radio transmitter in Rugby, but I can't remember when I last wore it. And my phone is a proper smartphone, even if it is three or so years old, though it only ever gets turned on about once a month. I have a Windows Surface tablet, but I've never found any reason to take it past the front door - for some reason it seems to stop working once I get a hundred yards away from the wireless router.
So will I be a customer for some new wearable technology? I already wear spectacles, and none of the photos of people using Google Glass show it perched on top of an existing pair of prescription spectacles - maybe you can get a prescription Google Glass, or one that fixes to existing spectacles? And I doubt that, even with spectacles, my aging eyes are good enough to read anything useful on the one-inch-square screen of a smart watch. Perhaps they'll bring out a smart watch that projects the display two feet square onto into a nearby wall so that everyone else can read my email at the same time.
Or maybe my prescription Google Glass will have a zoom feature so I can see the screen of my smart watch...
Much as I complain about some TV documentaries being dumbed down (for example, showing a clip of an explosion every time the presenter mentions The Big Bang in case you can't remember what an explosion looks and sounds like), I have to admit that a recent episode of the BBC Horizon series was an excellent in-depth examination of the latest nightmare scenario.
"Defeating the Hackers" explored two recent high-profile cases in detail; the hacking of Wired journalist Mat Honan, who had all of his online presence infiltrated, and the Stuxnet attack on Iran's nuclear plant. It also explained in layman's terms how SSL encryption works, and how the ongoing development of quantum computers will render our current secure communication techniques obsolete.
Of course, anyone following the current events in regard to online privacy and government access to our personal data will already be wondering if there is any security left. Or risk travelling through a UK airport where it seems that all of your digital belongings are open to detailed examination and confiscation. But that's another story.
Anyway, getting back to the Horizon documentary, most of the topics are probably well known to most IT people. But there was one that I hadn't come across before: Ultra Paranoid Computing. It's obviously not a mainstream topic. Wikipedia doesn't know about it and there's little on the web. However, I did find one article on the National Science Foundation site that covers the same ground as the TV program.
Ultra Paranoid Computing attempts to deal with the scenario where every other computer on the planet has been taken over by malware (I guess that's where the "ultra-paranoid" bit comes in – I thought I was a paranoid but I never considered this one). As well as the nightmare scenario of all of our utilities (water, electricity, gas, telephone) being hacked and disrupted, and global finance being completely broken, we need to protect ourselves by finding a way to securely identify users and other computers.
However, all of the techniques we currently use for this can, they say, be defeated. The new quantum computers will crack passwords and certificate keys instantly, and be able to read encrypted data. Even fingerprints and retina scans can be imitated, the program suggested, and so a new way of identifying ourselves - which cannot be replicated - is required.
The NSF article mentions an approach called Rubber Hose Resistant Passwords. I couldn't help getting visions of trying to log on with an elastic stocking by waving a leg in front of some specialist detector, but I'm going to assume that's not the case (I couldn't get the video that explains it to play). But typically our identity will need to be confirmed by some technique that makes use of physical attributes.
In the TV program, they showed an interesting approach using the guitar from the Microsoft Xbox 360 Guitar Hero game. You play a tune several times until the computer has built up a pattern of your timing, mistakes, and responses; and this becomes your physical passkey. You just need to play the same song again (in exactly the same way, of course) to log in. Maybe companies will have a central guitar station where you go to sign into the network every morning. Or, more likely, everyone will turn up for work disguised as an itinerant rock star with a guitar slung across their back, like they showed in the program.
Talking of disguises, I suppose I should keep up my usual tradition of helping to publicize the results of the best joke competition at this year's Edinburgh Festival. Jack: "I'm thinking of going to a fancy dress party disguised as a Mediterranean island." John: "Don't be Scicily!"
Meanwhile, I wonder if I can put in for promotion from just being paranoid to being "ultra-paranoid." Though I doubt it comes with a pay raise...