Monday, February 9, 2009

Flash Prototypes

Flash-bashing seems to be the theme of the day among EDI-ers, so I thought I'd weigh in. Flash...isn't easy to use. There are no quick answers when you're facing a how-do-I-do-this question. Googling occasionally yields results; but more often than not, I the things that I found were either only tangentially related or were using some different version of Flash, so the instructions didn't translate easily. Usually both. The Flash forums that I could find generally consisted of "How do I do something really complicated and specific?" questions and a dearth of simple questions.

The biggest issue is that I haven't been able to find an API anywhere. A list of object methods and properties would have been incredibly helpful when trying to figure out things like "How do I change the color of this button through actionscript?" It seems like the kind of thing that you should be able to do fairly easily, but without knowing exactly what keywords to reference and the format of any parameters, it's nearly impossible. Adobe's LiveDocs has some answers (like this one), but it's very difficult to find the article that you want, and then it still doesn't give you a list of properties - only the syntax for editing them with an example of one or two. Annoying. Incidentally, here is a fairly good API example (although it probably won't mean much to most of you).

Has anyone found a good property list out there?

A few tricks that I figured out that might prove helpful for people:
  • You can define global variables and functions that will persist through different frames.
  • To define a variable, just assign it a value somewhere. (Example: x = 3;). You don't have to give the variable a type, like in other programming languages. I found it useful to declare these variables in the ActionScript area for the first frame. Note that you have to select the same layer when you are trying to find your code again.
  • To refer to these variables later, precede them with" _root." otherwise you might be working with a different version of the variable and frustration and confusion will ensue. (Example: _root.x = 5).
  • I found it useful to create functions to enable/disable certain buttons on my interface which changed frequently. Again, on the ActionScript area for the first frame, you can do something like this: _global.myFunction = Function(Void):Void { ... } where your code goes in between the curly brackets. You can then call the function from anywhere in your program with the line myFunction();
This is probably not the proper way to do things, but it was what I figured out. Anyone else come up with any useful tricks?

Sunday, February 1, 2009

The Uncanny Valley

Last Tuesday, Jodi Forlizzi came from Carnegie Mellon to speak about design research. During the discussion, the term "uncanny valley" came up. This term refers to a phenomenon experienced, particularly in robotics, where as an artifact or other visual representation approaches near-human appearance viewers tend to experience strong feelings of strangeness and revulsion. Exactly why this happens is not entirely clear (and that it has a scientific basis at all is a matter of heavy debate). I have a couple of thoughts on possible causes, though.

Humans excel at judging others quickly based upon their physical appearance. Take our ability to independently detect red and green colors. This trait was evolved relatively recently and only a few animals (including 8% of human males) don't have it at all or experience it only in some limited capacity. The common explanation for the existance of red-green color differentiation is that it facilitates detection of edible food (think about how bananas change color as they ripen). An alternative theory, though, is that it improves our ability to analyze other people - specifically to decect subtle changes in skin tone, as when someone's face becomes flushed. This is just one mechanism that allows us to evaluate people at a glance, but countless others exist that help us to detect people with poor genes, mental disorders, or a sprained ankle. As robots grow more human-like in appearance, we begin to evaluate their visual traits as though they are actually human. Because we aren't good enough to replicate humans perfectly, the resulting robots fail various tests, signaling to us that they might have mental disorders or be dangerous in some other way. This signal manifests itself as a feeling of revulsion and helps us to avoid undesirable encounters (or potentially desirable encounters with helpful robots, but we don't get close enough to find out).

A second possibility draws on a concept presented in Scott McCloud's Understanding Comics - The Invisible Art. A single concept can be represented in different ways. A face, for example, can be represented by a detailed photographic likeness or by a variety of abstractions, all the way down to simply the word "face". McCloud contends that because we don't typically spend much time looking at our own faces, that our mental images of ourselves are fairly abstract; thus, we have an easier time relating to faces lacking detail, because they tend to resemble our mental self-image more closely than a detailed picture. Our mental representations of other people, on the other hand, tend to resemble their actual faces which we experience on a daily basis in all of their glorious detail. Consequentially, we tend to associate detailed faces with the general category of "other". The result is that, in comics, protagonists tend to have fairly plain faces to make it easier for readers to associate with them, while antagonists are often fairly detailed to enhance their other-ness. If this is the case, then our revulsion at human-like robots might be related to their detail-enhanced other-ness.

What does this mean for design? Within robotics, it clearly pays to be careful when making humanoid robots. On a more general note, I suppose it might be beneficial to err on the side of simplicity. In cases where details are not integral to the design, it may be best to leave them out to avoid giving people something to hate.