Thursday, 24 January 2013

The Uncanny Valley

Over at 'diogenesian discourse' (see sidebar) Gerry has been trying to tease out whether bigotry is innate, and, if it is, whether we can rise above it. I think the topic I am going to discuss here is very relevant to that discussion.

In 1970 the roboticist Masahiro Mori published an essay titled Bukimi No Tani or The Valley Of Eeriness in English. He proposed (with evidence) that humanoid robots can provoke a uniquely uncomfortable emotion that their mechanical cousins do not. He suggested that we feel uncomfortable because humanoid robots appear dead and thus remind us of our own mortality.

Bzzzzt! Wrong.

Take a waxworks. Madame Tussaud's or indeed any other waxworks can be creepy (some of the original Tussaud's waxworks were based on death masks) but it's not because we are reminded of our own mortality. It's because it's creepy to hang out with dead people, or rooms full of dead people; we prefer the company of the living. And all of those immobile human-looking wax figures look like they are dead: they don't blink, breathe or react.

Now imagine the waxworks ramped up so that Hitler or Kylie Minogue move, talk and so on, but still in a not completely natural way. That's your humanoid robot. Our reaction is revulsion. What is going on?

(Image courtesy of New Scientist Vol 217, no 2899, p36)

First, the effect is real and uniform, and is reproducible, so our knowledge of it is based on good science. It's a phenomenon worth studying not only because everything we don't know needs to be studied, but also because it matters not just to roboticists but also to animators and CG artists. Getting past the Uncanny Valley might be worth a huge amount of money in film.

One thing that is certainly going on is that as the humanoid robot becomes more and more like us our brains spend more and more time processing in the visual and motor cortices. So when we see Edge, The Robotic Arm, we go 'Cool' and move on. No processing power is required to determine that Edge is not a competitor or an interloper.

On the other hand, if I walk past Kylie Minogue in the street (I Should Be So Lucky) I have to invest a considerable amount of processing power into judging whether it really was Kylie, or some convincing simalcrum or some flawed simalcrum.

What I am really trying to do here is discover whether this is Kylie (one of my tribe) or The Other (a member of some other tribe). This is really important because if it is The Other I may only have a second or two to bang Kylie over the head before she does the same thing to me. This has to be sub-conscious because our awake conscious brain is way too slow. So I look, absorb, the visual cortex reports 'not quite human' and I'm already swinging my mighty stone axe before I even realise what is happening.

And the more like us The Other is, the greater the cognitive dissonance, the slower the sub-conscious reaction, and the greater the risk. Until some threshold is passed where they are so much like us that we cannot, on visual inspection, tell the difference, and we react as if they are part of our tribe. If this all sounds familiar, it should, because it is one of the central themes of Battlestar Galactica, amongst other TV shows and films.

Note also that all the extra visual and motor cortex effort to discern whether this is Us or The Other can trigger a Fight or Flight reflex which, if unresolved, leaves us feeling physically sick, never mind the revulsion (which is cognitive). One reason surely that humans evolved to operate in groups larger than the nuclear family was to spread the load of deciding whether that human-looking thing over there is Us or The Other. Not quite sure? Get the Alpha Male to sort it out, we're not giving him all these nuts and berries and groomings and stuff just so he can kick back and do nowt.

The Other is not that which is not us; most of the Universe is not us. The Other is that which is creepily almost exactly, but not quite, like us, dwelling in the Uncanny Valley.

Sunday, 6 January 2013

HP Officejet 7500A: The Kludge

Wowsticks! 64 pageviews yesterday; I usually get 6 if I'm lucky. I doubt it's my peerless prose doing this, so it must be my topic. In this post I'll present the kludge that will allow you to print custom sizes on your HP 7500A up to the maximum width the transport mechanism can cope with. You might even be able to print banners metres long provided their height is 297mm or less.

I don't claim any credit for this solution; I discovered it on the Customer To Customer Product Support Community Forum (hosted by HP) in a conversation in October 2010 between Daniel (posting as 'freethinkin') and Bob Headrick, who is a Microsoft MVP Windows expert. Now it reads as if Bob and Daniel independently cooked up this solution, but they weren't the first to experience this problem with HP printers or find this solution; if you trawl the forums you find that exactly this problem of f****d up printer software has been going on for years with several other machines. And the usual fix is a kludge like the one I am about to present.

Let me repeat that. This. Has. Been. Going. On. For. Years.

What? No, no, there won't be any more ranting, I promise. What? OK, OK, no more profanity either, f-word above now redacted.

What we are going to do is install an imaginary printer; what the geeks call a virtual printer. The trick here is to make it send its output to the HP7500A, which will then print just as we desire. And the fact that this works means that the machine is perfectly capable of doing what we want, which is an even bigger indictment of the HP software engineers.

First we have to determine which port our HP7500A is hanging off, because we want to send our output from our virtual printer to the same destination. Start -> Devices and Printers, click on the HP7500A, then click on Print Server Properties on the top menu strip, and when the Properties window opens click on the Ports tab, and then scroll down if necessary until you find the HP7500A (make sure it is the printer, not the fax). In my case it is USB002:

You'll need to write this port name down on a scrap of paper because we're going to reboot the computer shortly.

Now go to HP's website and download the printer software for the HP Officejet 7000 E809a printer; it's called OJ7000v809a_Basic_14.exe, and it's about 115Mb, so you've got time to freshen up your coffee while it downloads. When it finishes downloading, double-click it to run it, and answer any questions it asks. And when the installation is complete, reboot your computer - I don't know why this stage is necessary, but on my Win 7 machine I couldn't get the printer to show up in the next bit until a reboot had occurred.

Now go Start -> Devices and Printers and click on the Add A Printer on the top menu strip. Wait for the panes to populate in the Add A Printer window, then select HP in the left pane and the Officejet 7000 809a in the right pane, then click OK. When asked, enter the port number you wrote down on the scrap of paper. When the Add A Printer routine completes, the window looks like this:

Wait, what? Where's my new printer? Don't worry, it's there, it's just Win 7 doesn't display it (might be the same problem with Win XP). This is probably because the programmers working for Microsoft on this area used to work for HP.

Now open up your custom size document in your application (DL envelope in this case):

And Ctrl-P, which reveals:

The highlight is on the Officejet 7500A because that is the default printer, but you can see the Officejet 7000A immediately above it, so select it and press OK:

You might have noticed just before you pressed OK that the preview didn't change. Sadly, auto-detect the size you are trying to print is not present, you have to do it manually. Nevertheless, we now have this window, which I must say looks a bit better thought out than the HP7500A version:

Click on the Features tab and you get this:

We've had to go here because the Officejet 7000A doesn't have DL envelopes built-in either, but if you click the down arrow next to the size you do get the option of a custom size. So click the custom selection and you get this:

So you call it something other than 'custom' (DL Envelope in my case). Remember to put the the narrow dimension as the width and the wider as the height, because in this instance we're printing Landscape. You might have to think about that for a bit. And after you press OK you new paper size will appear in the custom listing:

So select it, then press OK repeatedly until you are back in your document, whereupon your print job will start. Simple, reelly (like f*** it's simple). Now whenever you want to print your custom size you just have to remember to change your printer from the default.

In a subsequent post I'll cover how I got around the scanner in this gadget behaving badly, but that's for another time.


Saturday, 5 January 2013

HP Officejet 7500A: Thanks For Nothing, Hewlett Packard

Now it happens that I had been using Windows XP Professional SP3 on all my computers for quite a while (up until recently I had 3 computers, 2 desktops and a laptop). I had a stable home network, and all of the computers could see the printer and use the Internet. I was enjoying this environment so much it was inevitable that something would go wrong, and so it did in the shape of the C drive on the main desktop going to cack. Fortunately I had time to put a copy of my data (250Gb) onto a secondary drive before it died completely.

So I bought a new C drive. What I should have done, what any sensible person would have done, would have been to reinstall Windows XP. So I didn't, I installed Win 7 (64-bit) instead. That had 2 immediate and predictable bad effects: the network vanished (and I still haven't got it working) and some of my software couldn't be installed. This isn't front line software, so there's no point in setting up a Win XP 32-bit virtual machine just so I can get my favourite world clock software up and running. I decided I'd live with it.

After a while I found the fact that my original HP printer software couldn't be installed, and I had to use a vanilla driver, was annoying. The reason was that the original software reported ink levels every time a print job launched; with the vanilla driver I couldn't find out the ink levels at all.

This would have been the perfect time to say: "Oh stuff it, I'm reverting to Win XP", so I didn't. Instead, since I have occasionally the need to produce A3 prints, I bought a new printer. Now the old HP 5550 had worked without complaint or problem for years, so when I saw a new HP 3-in-1 (fax, scanner and printer) at a modest price, I bought it.

Bzzzt! Fail.

It certainly looks impressive:

I ran a few test prints and scans and they turned out all right, so I was pretty happy. The scanner is only A4 because A3 scanners cost a fortune, but it came with software that allows you to stitch together images. So far so ordinary. Then I came to print an ordinary business envelope (DL). I noted there wasn't an envelope slot, so loading DL required emptying the paper tray, which is a bit shabby. Never mind, DL loaded, DL page ready, let's go.

Bzzzt! Fail.

No DL paper size. Further investigation revealed no 'Custom Size' either, so I can't even create my own DL. This is pathetic.

And note the bizarre order available sizes are offered to you - why isn't A6 next to A5?

I tried various workarounds to force it to print my DL envelope, eventually settling on creating a frame in the top right corner of an A4 page that is exactly 110mm x 220mm and printing that. It worked but it meant I would have to redo all my stationery.


A little floundering around on the Interwebs revealed that, in fact, you could create custom page sizes, just not in the Ctrl-P dialog. You have go to the Devices and Printers (Start - Devices and Printers) page instead, select your printer and click Print Server Properties:

I should have expected what would go wrong here, but I didn't. So the first tab is Forms and it displays a list of predefined forms, neatly sorted into ASCII order. A little way down the form itself is the check box 'Create a new form'. So I used that, set the size at 110mm x 220mm (cuz we're printing landscape) and saved it as DL Envelope. Yay! All good.

I returned to my DL envelope, opened up the Print Dialog and looked for my DL envelope.

Bzzzt! Fail. The stupid printer will not honour the sizes set in the Print Server Forms settings. My DL Envelope is not visible, and nor is any other custom size I create.

The reason I should have expected this wasn't going to work was that the list of paper sizes presented in the Ctrl-P dialog is not only not sorted, it's clearly a subset of what is available in Print Server Properties. It was a faint hope that my custom size would escape whatever filter is going on here, soon dashed.

In my previous place of work we had an acronym for lumps of technology that patently failed to deliver what their manufacturers' claimed they would do: FUPOS. Fucking Useless Piece Of Shit. Well, thanks very much, Hewlett Packard, for releasing onto the market a FUPOS that can't even do what my little 10-year old printer can do.

The following 2 paragraphs have been edited to remove some swearing that apparently gave offence

And while I'm at it, thanks a heap HP for not having any kind of help or support but offloading all of that onto the 'Forums' (aka decent people who care, as opposed to corporate ****s such as yourselves who don't). Thanks a heap HP for releasing a product to market where the software was developed by the work experience kid, and nobody checked his / her work. Thanks a heap HP for pretending that the rest of the world doesn't exist and only good ol' USA is important, even as you gobble down my Aussie dollars.

Did I find a fix in the end? Yes, but you'll have to wait for the next post to find out what it is. It's a secondary fix, a kludge. The Primary Fix? Do not buy anything from HP. Let those corporate ****s drown in a sea of surplus inventory. All except the product manager responsible for this debacle; him (or her) I want delivered to me personally, in order that a great deal of lingering suffering may be inflicted. Quid pro quo.