creations digital art | comics | animations | projects | virtual toys
writing personal history | essays | technology | creative writing | introspection
other photography | snapshots | convos | videogames | misc | best of

clock rant 2001.04.20 
A few months ago I wanted an alarm clock-radio that had digital tuning, so it would stay locked onto my favorite NPR station without drifting. The Radio Shack model I found tunes well enough and looks attractive, but is actively user hostile in design. Alarm clocks should be usable by sleepy people in the dark. Setting this clock’s alarm and making sure it’s on is a chore even in the daylight. Here’s the control panel:
Strike One: all the buttons are the same size and shape. Eventually I trained my hand to know that top row, second one in from the gap is SLEEP (90 minutes of radio before turning itself off) but come on—it shouldn’t be that hard.

Strike Two: I could not figure out how to set the alarm. It’s as if they worked to make the button labels as unhelpful as possible...not only that, but it’s easier to set the time than the alarm. The rocker switch on the front is labeled both tune up/down and hours/minutes, so obviously it has something to do with it. But none of the other button labels said ‘set’ or ‘alarm’. Now, hitting ‘MODE’ seemed promising, because on the front panel it started flashing ‘SET ON’. Hitting the hour/minutes button did nothing though. This is when I had to download a PDF copy of the manual. It turns out to set the alarm you have to also hold MEMORY/TIME down. Now, since that button on the front does double duty for tuning and time setting, it makes sense that you have to hold down another button or the clock has to be in ‘set mode’. But both? Why is that? A little experimenting reveals the answer—if you hold MEMORY/TIME down and press the front button when not in 'set mode', you change the time. Not the alarm, the time. That means it’s about twice as easy to change the time than to change the alarm. Now, which one do you think people do more often?

My college roomie Brian used to add or subtract hours to the time setting of his alarm clock rather than change the alarm time itself. For years I assumed he did it because of a sense of surreal-ness it added to everything. Now I’m wondering if he had a clock as user hostile as mine.

Strike Three: If there’s one thing an alarm clock should do, it’s wake you up on time. This clock has a little icon on the front panel. When you hit the [ALARM] ON/OFF button, this icon goes on and off. One might assume that this means the alarm is on, or that the alarm is off, accordingly. No. Because, see, if that switch on the left is on [RADIO] OFF, your alarm clock will not wake you up for love nor money. It might display its little alarm icon, lulling you into a false sense of security, but next morning that radio will not play. The stupidity of this design overwhelms me. I can see the half-assed logic (wanting to separate turning the alarm off in the morning from just hitting snooze) but… jeez. Your clock shouldn’t lie to you.

For the exact same manufacturing costs, I could’ve designed a better UI than this. Just making labels less misleading would be a start. (I still don't know what '+5' does.) Changing a few behaviors (making it easier to change the alarm than the time setting, not showing the alarm icon if the alarm is turned off because of the switch) would be even better. Changing a few more electronic readouts could actually make it intuitive!

I hate to sound like a curmudgeon about this thing, but it really is bad. I'll try to justify my rant with this next quote:

Quote of the Moment
"If people were going to use computers all day, everyday, the design of such machines was not solely a technical problem-- it was also an aesthetic one. A lousy interface would mean a lousy life."
--Myron Krueger

News of the Moment
Salon article: Judge rules no webcast of McVeigh's execution. Now I'm against the death penalty. But if you're going to go for it, you should really go for it. Don't try to pretend there's some kind of dignity here. Go full tilt for the bread and circuses. If the people demand revenge in cold blood, give it to them! In full color! And Dolby Stereo! On national tv! Really get that "deterence" message out there!

furniture that looks like it has been places 2004.08.24 
Project of the Moment
So, FoSO and I worked together on an interesting furniture project. I think the idea was mine, but the details and the lion's share of the labor ended up being hers. (Which is good, because I'm lazy, but also bad, because I didn't learn quite as much as I had hoped.) My bathroom is desperately short on selfspace, and I'd always been trying to think of a cool project to utilize these beautiful authentic travel stickers that were attached to a crumbling valise I got at an estate sale kind of thing. So, a bunch of slicing, scanning (just in case), staining with wood stain, gluing with Mod Podge, coating with polyurethane, and touching up with a hand sander later, and this is the terrific result:
Front      Inside

Progamming Thoughts of the Moment
Been thinking a little bit about programming rules in general. Here are some rules I've decided I (and maybe everybody) should try and follow...I welcome feedback from my fellow coding geeks.
K.I.S.S.: Don't over-engineer.
I have seen so much over-designed stuff, with layer after layer after layer. Following the programming execution over a single call becomes an enormously difficult task. If any given interaction goes much deeper than 3 or 4 levels, something might well be wrong.
Keep a clean modular approach to your systems.
Have a core engine that drives everything and uses the rest of the system as an API. Think Unix's philosophy of "do one task and do it well"...this guideline comes from stuff I'm dealing with at work. They've developed these APIs, but the APIs are so tightly integrated with the logging and configuration, it's sick. For example, they made a wrapper to a Castor routine that converts an object into an XML representation. You would think that if your central program says "make me an XML representation of this object and put it in such and such a file" it would do just that, right? But no. See, it goes ahead and checks the configuration on its own accord, and then might or might not do the conversion. And whether it tries or not, or if it succeeds or fails with some error, it will do so SILENTLY, catching any exception that occurs, because heaven forfend that the main program has to worry its sweet little head about everything collapsing underneath it... Hideously redundant, impossible to follow.
Keep a devnotes.txt file
I find it useful to have a single text file where I jot things down as I figure them out...usernames, passwords, techniques, etc. It saves me a lot of time.
Consider disabling web access during the workday.
Sometimes it's easier for a programmer to get distracted, especially when things aren't going well. The worse things are going, the more slashdot and various techie websites beckon. ("This task at hand isn't working out but maybe I can learn something else new!"). If your main browser is IE, the easiest option might be to go into Tools|Internet Options|Coonections|LAN Settings and setup a bogus proxy server. Sometimes just putting in that little gatekeeper is enough to make me reconsider a wayword path.
Keep your unit tests close and your smoketests closer
If your environment is at all complex and N-tiered, avoid the trap of your system breaking down and you don't know when and you don't know why by setting up good smoke and unit tests and running them extremely frequently.
Product of the Moment
Making the rounds is this story about a cellphone based Virtual Girlfriend product...unfortunately (or fortunately for the company) you spend non-virtual money to buy her presents and what not, otherwise she gets all mad and sulky.

Man, what a potential goldmine if they find guys who get really into this. Being able to sell trivial virtual goods for real cash...there's that other company that lets people buy each other little iconic gifts, I heard it's a reasonable becomes a social thing I guess, if you can show off your gifts like some kind of trophyroom.

Strange world.

business logic 2004.11.27 
Another cop-out day... but the good thing is I'm this close to finishing up a new feature on the site: throwing open the sidebar location to pretty much anyone who's a regular on the message boards. I hope it'll be a really dynamic part of the site, letting people who may or may not have their own blog get a bigger audience, and adding more interesting content to mine. I really loved what Dylan and Sarah have done, but lately they haven't been able to keep updated as much as I like...but their posts are a great start for the sidebar...more details later!

Geekness of the Moment
One day Jane asked me "what's business logic" in a work e-mail, and I thought it was a great question, and saved my response for future use on this site...which is now. It might be mildly interesting to people who wonder what I do for a living.

-----Original Message-----
From: Jane
Sent: Thursday, March 04, 2004 4:41 PM
To: Israel, Kirk
Subject: all this talk of 'business delegates'

kirk - in one document i'm looking at, they keep mentioning 'business delegates' - do you suppose they just mean 'clients'? or is this some unique term in the industry that i'm not getting?

'Verifies calls issued by the back end of the adapter in response to front-end API invocations. These calls are issued to Business Delegates, whose interfaces are prescribed by the corresponding Zeus Session Facades'

It's a techie term.

Zeus is a "client/server" system, right? The bit connecting to the ERP is over here on the left, it then sends data over the wires, so to speak, to the server over there on the right, and then stuff comes back over the wires to the client.

Now, the thing is, sending the stuff over the wires is relatively hard from a programming point of view. People connecting the client to their code don't want to deal with crap like that. So Business Delegates hide the over the wires crap from that programmer.

More specifically, I think "Business Delegates" usually have the same "signature" as the functions that do the actual work on the signature I mean they take in the same objects in the same order, and spit out the same objects. But of course, the "Business Delegate" on the client aren't doing the "real work"'s just sending it over the wire.

The whole term "business logic" seemed weird to me for a while, becuase it seemed like every damn thing we were writing was "business logic" what's the point of having a special term for it? But later I realized the opposite of "business logic" is...well, "system logic" or "system code", stuff that's directly involved with keeping the infrastructure humming. Business Delegates is a "design pattern" (meaning, a generalized setup that you can apply to many problems) that is a good example of letting the programmer focus on the "business logic" (in our case, grabbing financial data and what not from the ERP and putting it into the tax document objects) while not having to sweat the system level stuff, the sending it over the wire.
quotes ahoy 2004.09.04 
So I spent a rather long time updating my quote-o-matic viewer, harvesting quotes from all the way from May 17, 2002...309 quotes new, up to 1662 in all. It took a surprisingly long time to weed out all the good quotes, maybe 20 minutes per month. By the end I was definately asking myself "is this worth it?" but a few days ago, after most of it was done anyway, UnavailableName dropped a few quotes he liked that he had found in the old version, so that was encouraging.

Windows Annoyance Rant of the Moment
I wrote this to send into the site

This might be more of a gripe, or just a reluctance to shift to a new mental model for search, but the way recent versions of Windows conduct file searches in the sidebar of the current explorer window seems like a huge step backwards from the old way of a seperate finding app...

  1. You lose your place. Often, I'm still interested in keeping the current explorer view open when I hit Ctrl-F to conduct a search, but now my whole window becomes dedicated to this one search task.
  2. Often in NT2K it takes a few seconds for the "Look in" field to be automatically field in with the location of the current Folder. Type in a quick search term, hit return, you get a message "A valid folder name must be entered"
  3. The only way to know if you're looking at a "real folder" or search results is to look at the window caption. And even when the caption indicates "Search Results", it gives you no hint of what you were searching for. (Admittedly, a detailed description could get wordy, but still, having 3 windows that say "Search Results" in the task bar isn't that useful in refinding a specific window.)
  4. To get your normal explorer view again you have to hit an IE like "back" button. This seems like a broken paradigm to me, that viewing a folder is one "task location", viewing search results is another "task location". To my mental model, an explorer view represents a "noun", and a search is more of a "verb", results and all. It's not like search results are really making up a "virtual folder".
  5. When you hit "back" to return to your folder view, the sidebar stays up. But the "Look in" field doesn't get filled in with the new folder location unless you close the sidebar and reopen it. Conversely, if you close the sidebar, your search results looks just like a regular folder though! Also, the "Look in " field changes, but the main search fields remain filled with the old data, which is useful but inconsistent.
  6. To start a search you either have to know the Ctrl-F mnemonic or use a graphical icon, there doesn't seem to be a regular menu option for it.
  7. If you accidentally hit "Up Folder" instead of "Back", you get taken to a folder view of the Desktop. Why isn't the "Folder Up" option greyed out while conducting a search? It's not like it's an easy way of backing up to the parent folder to redo the current search...that requires all the steps I outline in complaint 5...
  8. Don't get me started on XP's default "File Searching For Dummies" mode. Maybe it's good for novice users, and it can be turned off, but for exerienced users it's just a pain in the butt, and we become amazed that other people who seem otherwise to be pretty bright always use it...or even worse, with the goofy animated assistant.
I suppose my main problem is I don't share the idea I describe in complaint 4, and I really miss the old "hit Ctrl-F to launch a seperate simple find application that keeps your place here" . And maybe it's sightly easier for them to give the options to view details, thumbnails, etc in the results. (Though Photo thumbnails are often very sluggish to load.)

Maybe they were looking for a way of letting someone repeat a carefully constructed search from a different location (hence the inconsistency in complaint 5) but it seems like a poor tradeoff to me.

This app is something I use on a daily basis, and not liking its forced browser model (probably some offshoot of that whole "oh but you can't seperate the browser from the OS!") is a constant low-level thorn in my side.

If anyone knows a way of getting back the old behavior when I hit ctrl-F, I'd love to hear about it. Even some registry setting that causes a Ctrl-F search to open up a new window rather than overtaking the current one would be a HUGE improvement.

So it is a subjective opinion, but I'd say: This Is Broken.
javaggravation 2004.09.17 
Geek Ramble of the Moment
You know, I just thought of one major lack of Java, and to be fair, most C-derived programming languages: a function can have many input parameters but only one return value. That's a really odd asymmetry to have to put up with.

Perl, for example, handles it much's no problem to write something like

($foo, $bar, $baz) = somefunction($a,$b,$c);

In Java, though, you'd have two ugly workarounds: create a wrapper object that contains each thing you want to return, or if the objects are complex, sometimes you can have the calling program create an object, pass it in, and let the called function fill in the blanks. (Kind of like Oracle's "INOUT" parameters.)

Personally, I think this lack is something that provokes over use of Exceptions, which really do horrendous things to understanding a programs flow of execution.

Seriously, would it be so hard to add a syntax so something like this would work?

int foo;
String bar;
(foo,bar,String baz) = somefunction();

public int,String,String somefunction(){
   return (5,"hey","ho");

Does anyone know if any of the other C-derived languages handle this case better? C# or any of that? I know they're hyper-conservative about adding this kind of structure to Java, since it breaks old compilers and what not. But still, it seems like one of those things that actually is pretty stupid and only around for legacy reasons but that everyone just kind of accepts.

Quote of the Moment
"The more sensitive you are, the more likely you are to be brutalised, develop scabs, never evolve. Never allow yourself to feel anything, because you always feel too much."
--Marlon Brando, via Candi. An odd if depressing idea, but it seems like not allowing yourself to feel anything is a kind of scab in and of itself, a protective barrier. I guess I like the more mild message of Janeane Garofalo's line "Cultivate the Switzerland of your soul and remain delightfully detached."

Analysis of the Moment
So just how badly is Iraq going for us? What a dumbass idea the occupation has been. Neocons live in a dreamland.

Photo of the Moment

--Hurrican Ivan as seen from the International Space Station. I like how my eye misread this at first, seeing the solar panels as buildings, with the menacing cloud in the apocalyptic sky above...

a pressing issue 2006.12.22 
My latest UI gripe: physical buttons that change their function when you press and hold, versus just pressing. Three case studies as of late:
  • One grey lining to the silver cloud of the Wii's innovative controller schemes is that they've ditched the traditional "start" button, and while every game seems to respect the "home" button that takes you to a system menu and offers to totally reset the game (almost like power-cycling), there doesn't seem to be a single convention for an "in game pause menu" that might offer to, say, end the current match and return to the previous menu. The Plus button seems to be a non-universal standard for it, but games like "Super Monkey Ball" ignored it. Or seemed to... through trial and much error I finally figured out it's press and hold of the Plus button. That's irritating! The button serves no other use during the game, and it's not in place where it's likely to be pressed accidentally. So why do that? What possible benefit is there in making people think "this button does nothing"? Is the needed prolonged hold a way of expressing the sincerity of our desire to stop the game?
  • My car radio's tuning feature. By default, pressing up or down adjusts the tuning .2 degrees on FM or whatever. Like most modern cars, it has a "seek" function, which kicks in after a second or two after pressing and holding the button. Now, given what a huge percentage of the time is spent driving near home, and at any given moment people likely have a big selection of strong radio signals to choose from (rather than having to fiddle and tuning in a station that's almost out of range), how smart is it to have the default be "tweak this tuning" rather than "find me another damn station"? And when you're trying to "channel surf" radio stations, the extra second of delay is infuriating. You listen, judge the content in like a quarter to half a second, go to move on, and listen to whatever crap you just rejected for another second or so, 'til the thing beeps and moves on to the next station...
  • Ksenia's grandfather's radio... he asked me to set the clock for it. Now, clock-setting is a whole 'nother ball of bad-UI wax, but having to press. And hold. And hold the button labeled "Clock/Sleep/Timer" was just not something Ksenia's grandfather was going to stumble on by himself.
In some cases I can see why the designer does this, sees "press and hold" as a way of reusing buttons, adding functionality without the "clutter" cost or physical cost of extra buttons there. But there's no real iconography or concise language for "press and hold for function X", so it just makes these functions more obscure. (And in the case of Monkey Ball, there's absolutely no excuse. Games are all about reacting to input, providing feedback. If you press every button on a controller looking for a command you think you should be there, you should activate every command, not have to press and hold everything for an indetrminate period like some sort of mad functionality Easter Egg hunt.)

Dumb UI designers: making your life a little worse in a thousand little ways.

best of
creations digital art | comics | animations | projects | virtual toys
writing personal history | essays | technology | creative writing | introspection
other photography | snapshots | convos | videogames | misc