If you have Ubiquity installed, visiting this page should give you a command subscription option.


  • nhs-search – search NHS Choices from Ubiquity

Giles Bowkett turned up in my Reddit feed today with a thought-provoking article: Programmer Interviews: Two Warning Signs. He says:

“But the ability to locate reference materials isn’t an important criterion in hiring programmers; it’s an important criterion in hiring librarians.”

As I commented over there about a nanosecond before I realised it’d make a decent post for the first time in about ten months:

Au contraire :) I feel that the ability to locate the right kind of reference materials in the right situation is something that is sadly lacking in even some otherwise wonderful coders. In fact, one of my interview questions in the late 90s was “What do you read?”

Even today, it seems that many coders think themselves too busy to actually read up on the right ways to deal with certain challenges, preferring instead to use their ‘initiative’ and fudge around the problem rather than seeking out prior art.

I know, I know – I’m quoting myself, on a comment I made on someone else’s blog. I’m pretty certain this contravenes some basic blogger’s code of conduct that I’d have read if only I’d have found the time (hey, I’m too busy. See above). But my point remains – too many coders struggle for way too long by themselves before reaching for the great white google search box in the sky. And when they do reach for that search box, they use it poorly. Very poorly. I see too few people even use double quotes to indicate that words should occur in sequence, and many give up after one or two searches, whereas I’ll try up to a dozen rephrasings before I’m satisfied that I’ve exhausted the possibilities.

So really all I’m saying is this: the world’s full of people who are cleverer than you and who post to their blogs more often than you do. Use their effort, not yours, since the chances are good that whatever you’re doing is a solved problem. The next interview I perform, I’m going to confront the hapless code monkey in front of me with an obscure ADO.NET issue and a laptop running Firefox and see how long he takes to winkle out the solution. Then I might show him some code and ask him what’s wrong with it, and finally I’ll ask him what flavour doughnut filling he takes (custard is a no-hire).

And Mr. Bowkett, I’d never dream of posting something as potentially career-threatening as this (scroll down to the blue photo, which is probably SFW but not for small children), but props to you for having the brass knackers to so do.

I’ve been having a bit of an odd experience with some backup software that came with an external hard drive I bought for the purpose. The software in question is Dantz (now EMC) Retrospect Express 6.5, which I’d have to recommend as a great solution for personal data or small networks. Except a couple of days ago, I’d have greeted its mention with a hollow laugh.

It was easy to blame Retrospect.

The problem started a couple of months ago after a hard drive crash (my second this year – I’m starting to feel cursed). I meticulously reinstalled XP and restored data from backups. I prefer not to “ghost” system disks as I regard XP reinstalls as an opportunity for spring cleaning which should not be missed.

When I started to use Retrospect for incremental backups as normal, I discovered the problem. The external drive to which I was backing up would grind and grind for days (yes, days) before finally starting the backup process. You couldn’t kill the Retrospect process, either (not even with taskkill /im retrospect.exe /f. The only way to halt the interminable vibration transmitted through my desk to my mouse hand was to wrench the USB plug from the drive. Backups progressing from scratch worked normally, so my only workaround was to simply back up everything in my list of folders which I must not lose. This inevitably led to a decrease in the frequency of my backups (daily became weekly, excepting my source control database which is small relative to everything else and while slow, could easily complete in under half an hour).

I’d been researching this problem for two hours of every week since the crash, and I’d been getting nowhere. Today I started to get a “bad block” warning from a second machine accompanied by a wonderful scratchy samba beat in sync with the drive light. Uh-oh, I thought. Impending hard drive death (It’s like a sixth sense now). I couldn’t put it off any longer – I simply had to fix the problem.

But where to start? Try putting together a Google search for “my backup never finishes using Dantz (now EMC) Retrospect 6.5 on an external USB drive and I’m about to embed one of my extremities into a solid object” and you’ll be sifting through results until Jeff Atwood writes a boring blog post. It’s easy to Google hard errors like “Windows Delayed Write Failed” – just put the wording in quotes and review the possibilities. It’s less easy when a piece of software just sits there quietly shortening the service life of one of your USB devices. I have a small cache of words I trot out for Google to consume in these situations: “(hangs OR crashes OR freezes)” for simple lockups and “(grinds OR thrashes)” for hard drive activity.

In the end, when you’ve been using these kinds of search combinations for weeks with no luck, you resort to brute force searching. And this is what I did, trawling the Dantz/EMC support forums post by post. By about page 18 of posts I had an answer, and the blame wasn’t going in the expected direction.

System Restore. Great, isn’t it? Sits there, quietly monitoring everything, making sure nothing untoward can happen to your system. Including untoward things like backups, it seems. This is why even taskkill didn’t work – it seems to be MS-process aware when it comes to System Restore. This is why I’ve been risking the life of my external HD by pulling the cable out, because you couldn’t even log out or shut down. System Restore is only good on system drives. Yet by default, XP monitors every “fixed” drive you have in your system (I know, I know, I’d been sticking it out with 2000 until late last year). Why should this be the case? Why can’t XP ask you for each drive you install a program on instead of assuming that big dumpster full of ISOs, RARs and RBFs you’ve got hanging off your USB bus needs watching like a hawk?

So in a backup situation to an external drive, System Restore is the last thing you want turned on. Right-click My Computer, hit Properties/System Restore, and turn it off on a per-drive basis – which in my experience means any drive you don’t add/remove programs to/from with Windows Installer.

I’m happy to say Retrospect is right back up there in my estimation. And MS’s position in my estimation hasn’t changed a great deal.

Microsoft have finally done the decent thing and released the Consolas font as a standalone download. I’ve been using it for a few months snaffled from a Vista beta and it’s far and away the nicest programming font I’ve ever used (even beating my previous favourite, ProFont).

Consolas in action

Caveat: requires ClearENGINE in order not to look like badly designed Tetris pieces, which means whenever I have to use Windows 2000 (not often these days) I fall back to ProFont.

Also, if you don’t like it there are a list of good fonts here.

Ok, I acknowledge WF is an exciting piece of technology. It must be, I’ve spent days poring over examples. However, despite what is asserted on the videos, it’s not an easy piece of technology to get to grips with. In particular, there aren’t any “full” real-world examples. Pretty much all of the examples don’t actually write anything to a recognisable problem domain-specific database, they just use in-memory structures to hold ad-hoc workflow instances which then persist themselves to a very generalised workflow database.

I’m unsure how this squares with traditional app development. To use their helpdesk example, where does the data actually go? If it’s into this generalised persistence database, that makes it impossible for me to query, for example, the latest top 10 high priority cases, doesn’t it? Does this mean I am supposed to keep a domain-specific database in sync with the workflow using activities?

This seems to be the one area that gets no discussion – everyone’s so wrapped up in discussing the technical details of flying the runtime, persisting their instances, writing custom activities, that no-one has mentioned how the traditional application really fits around this. Oh, sure, there are plenty of examples that show how to handle external host app events or call out to the host app, but they’re all hooked up to Console.WriteLine or similar in the examples!

So, if I wanted to write a real-world ASP.NET version of the helpdesk app, do I need one database or two (one domain DB, one for the WF persistence service)? If two, how do you ensure the two stay in sync? If one, how do I query my cases?

Do I just write my application as normal and then put the hooks into workflow? How can I drive my ASP.NET page flow? Do I have to retrieve work items from a queue and display them somehow for helpdesk agents to pick up? Can I use straight ASP.NET data binding for this and which DB would it come from, domain or WF persistence?

These are a lot of questions (these are just *today’s* questions), and answering them one by one is like carving a Bamiyan Buddha singlehandedly. I’d post this to the WF forums, but such questions seem to go unanswered while the simple tech questions get immediate replies.

The quest continues…

EDIT: It looks like Jon Flanders may already have been through this pain.

© 2014 ZephyrBlog Suffusion theme by Sayontan Sinha