Chip's Quips
A tiny spark of wit for a highly flammable world

Paint me into a corner

December 2nd, 2008 2:52:17 pm pst by Sterling Camden

I know that Microsoft Paint is one of the least intelligent graphics programs available.  My children like to use it sometimes, precisely because it is simple.  But on Windows, anything simple can be rendered impossible if you know how.  Or even if you don’t.

Today I was torn away from my work by a user emergency:  the “tool box” in Paint was no longer visible.  Yet, selecting “View/Tool Box” from the menu (or Ctrl+T) had no effect.  I presumed that somehow my son had managed to drag the tool box out of view, so I brought up Spy++ to look for the window.  I found it easily enough as a child of the main “Paint” window.  To my surprise, the tool box window’s rectangle had a zero width — even though the tool box isn’t sizable by the user.

“How on earth…” I wondered.  But long ago I learned not to waste time trying to figure out how users get themselves into situations unless it helps to figure how to get them out.  In this case, Spy++ reported that the left side of the tool box was still docked to the left side of Paint, but there wasn’t anything visible of it that you could grab with a mouse.

Since Spy++ also gave me the window handle, I tried writing a C program to change the window’s width.  This worked after a fashion, creating a swath of gray, but there was still nothing to grab in order to resize it – and the tools were still not visible.  Restarting Paint went back to a zero-width tool box.

I googled and googled, and searched through the registry looking for where this kind of information might be saved — to no avail.  In the end, I logged on as another user — which restored defaults.  That shows me that the settings are saved per user — most likely in the registry somewhere under HKEY_CURRENT_USER — but for the life of me I couldn’t figure out where.  Searching the built-in Help wasn’t helpful at all, either.

Has anyone else run into this?

Design lesson:  if you want to make a product simple, provide a simple way to completely start over with defaults.  Don’t assume that your product is too simple to get FUBAR.

Posted in Get Outta Here, Wildly popular | 9 Comments » RSS 2.0 | Sphere it!

Chipping the web: November 26th

November 26th, 2008 4:00:25 pm pst by Sterling Camden

Chipping the web

Posted in Share the Love | No Comments » RSS 2.0 | Sphere it!

Chipping the web: September 8th

September 9th, 2008 7:00:28 am pst by Sterling Camden

Chipping the web

Posted in Share the Love | 6 Comments » RSS 2.0 | Sphere it!

links for 2008-03-04

March 4th, 2008 2:26:55 am pst by Sterling Camden

Posted in Share the Love | 1 Comment » RSS 2.0 | Sphere it!

links for 2008-02-21

February 21st, 2008 2:40:59 am pst by Sterling Camden

Posted in Share the Love | No Comments » RSS 2.0 | Sphere it!

Simon says, don’t play Simon says with your users

September 28th, 2007 12:13:29 pm pst by Sterling Camden

Did you ever play the game “Simon Says” when you were a child?  One designated person tells the rest of the players to perform some act, but they are only supposed to comply if the command was prefaced by the words “Simon says”.  It can be entertaining, in a laughing-at-your-neighbor’s-frustration kind of way.  The game plays on the distinction between what sounds like a valid command versus what has been agreed to comprise the requirements for a valid command within the context of the game.

A computer would be very good at playing Simon says.  They’re notorious for following instructions to the letter, within the context of the current instruction set.  They always “do what you said, not what you meant.”  Humans, on the other hand, almost always try to bring knowledge from other contexts into the interpretation of any request — so context-specific requirements for success can be elusive.  I often wonder whether the development of human-like artificial intelligence could compromise a computer’s abilities in the same way.

When designing human interfaces, it’s good to keep this difference in mind.  When the user has to remember to do things in a specific, non-intuitive sequence or combination in order to achieve a desired result, I call that a Simon Says Rule.  Simon says, don’t put Simon Says Rules into your products.  This applies to a wide variety of human interface domains — all of them, in fact.

A good example of a Simon Says Rule in programming language design is PHP’s test for failure on strpos.  You have to remember that you can’t say in effect, “is the result true?”  You have to use the “Simon says, is it really, really equal to true?” operation (=== true) to avoid converting a zero result to false.  In my opinion, any language in which you can say the equivalent of ”if (strpos(…))” and get a false result when the string was found has created a Simon Says Rule on that statement.  No matter how consistent it is with the rest of the language, no matter how well-documented it may be, it will trip up programmers because it runs against their wider language experience.

But I won’t just pick on PHP.  C and C++ have the “strcmp” (and related) functions that return 0 for equality – and zero equates to FALSE when used in a condition.  Thus, ”if (strcmp(…))” has an exactly opposite meaning of its intuitive reading.  It was designed this way because a non-zero return value for inequality allows more information to be returned: -1 if the first string is “less than” the second, and 1 for the opposite case.  But in my experience, 99% of the time I use strcmp I don’t care which is lesser or greater, I’m only checking whether they match.  Perhaps this should have been made into two functions: one that returns TRUE for a match, and another that returns an indicator of the collational relationship between the two strings.

Some languages just add unnecessary syntactic elements so their compilers will have something to complain about if you forget to use them.  Synergy/DE used to require the command “xcall” or the prefix “%” when invoking a function.  That’s a Simon Says Rule, as evidenced by their ability to remove that requirement (in most cases) with their version 9 compiler.  The “$” prefixed on variable names in Perl and PHP (oops, I did it again) is another example — one which Ruby demonstrates to be dispensable in a scripting language.  That “$” benefits only the parser:  ”Simon says, this is a variable name.”

In end-user software, if the user can’t install and use your product out of the box, then you’ve imposed some Simon Says Rules on their experience.  The default configuration should be usable in all but a small minority of cases.  If the user does want or need to tweak the settings, it should be obvious how that is done — and the order of those operations should be unimportant (i.e., no Simon Says Rules there, either).

You could argue that usernames and passwords represent cases of Simon Says Rules.  We’re willing to put up with those for security’s sake.  But wouldn’t it be nice if our identity could be secured without resort to a technique as primitive as ancient warfare?  When we humans see someone we know, we instantly recall the degree to which we believe they can be trusted.  Perhaps one day computers will become capable of that level of recognition.  Maybe then they too will become impatient with Simon Says Rules.

Posted in Geek Meditations, Wildly popular | 25 Comments » RSS 2.0 | Sphere it!

links for 2006-08-31

August 30th, 2006 7:20:17 pm pst by Sterling Camden

Posted in Share the Love | No Comments » RSS 2.0 | Sphere it!

Akismet more mouseable

August 17th, 2006 1:34:17 pm pst by Sterling Camden

In version 2.0.3 or 2.0.4 WordPress duplicated the “Delete all” button at the end of Akismet’s list of Caught Spam. So now three or four times a day I no longer have to scroll back to the top of a list of 100+ spam messages between reviewing and destroying them — no doubt postponing my inevitable future mouse-induced repetitive stress injury.

Sometimes, it’s the little things that mean a lot. Thanks, WordPress.

Posted in Geek Meditations | No Comments » RSS 2.0 | Sphere it!

links for 2006-07-25

July 24th, 2006 7:20:36 pm pst by Sterling Camden

Posted in Share the Love | No Comments » RSS 2.0 | Sphere it!

Still trying to wise up on Groupwise

February 17th, 2006 4:44:12 pm pst by Sterling Camden

Believe it or not, I’m still trying to get Novell Groupwise configured. The Novell pre-sales support people know very little about eDirectory or Groupwise, so I’ve been forced to get whatever help I can from the forums. Novell should really not even offer this as an evaluation product if they aren’t going to provide reasonable documentation, on-line help, or pre-sales support. Turns out that the help provided in the forums is not bad, although the UI design on the reader stinks. For instance, you have to re-enter your e-mail address (a required field) on every post or reply — it isn’t remembered. Many thanks to David Gersic and Niclas Ekstedt for their replies to my latest question. Thanks to them, I think I’ve finally got a handle on how eDirectory works now. It isn’t what I would call intuitive, though. Now I need to figure out Groupwise itself, so I’m off to that forum. More to come!

Posted in Get Outta Here | No Comments » RSS 2.0 | Sphere it!

Better Tag Cloud