Monday, October 24, 2011

Software agents

In cognitive science we are generally interested in studying software agents which are based upon the perception-action cycle. In particular, we are interested in control policies which react to our perceptions in a way that will move us towards some goal.

A reactive agent deterministically translates events into reactions. For example, I may want to declare that (= a (+ b c)), then in this case, I am creating a reactive agent that translates values of b and c to a new value for a.

One important consideration when dealing with agents, is their reaction time. This is especially important in turn based games which may have a reaction time set by a clock.

Wednesday, October 19, 2011

Jason Spisak's Laws of Interface Design

*Fitt was right and no one listened.

I listened and I then implemented corner targets in GoldOS. However, now I use a large monitor at home and I use a tablet in public.  I also suspect I am not unique in this regard.

In neither setup are corner targets a good idea, because on a very large monitor the size of the target doesn't make up for the long distance and on a tablet you have to consider Fitt's law in 3D, so in neither case corner targets are a good solution there.

A much better solution is to use a pie menu with four elements that represent each corner target. Then users can access any of the targets by moving the mouse in the direction of any of the four corners, and this will eventually became a part of muscle memory. Similarly, pie menu can be accessed using gestures on a touch screen.

* Nested menus are evil.

* Pop up dialogs and ballons are a horrible interface tool.

Nested menus, pop up dialogs, ballons, etc, are all products of placing things in menus rather then in place, which is what happens in a ZUI. I strongly oppose all forms of popups, which is something I have written about extensively in the past.

* Scrolling sucks.

I think what you mean here is that forced scrolling sucks. We should have a ZUI which lets allows you to zoom out and get a birds eye view of things whenever you want to.

* The drag-and-drop desktop and its icons are the junk-drawer of the modern computer and should be eliminated.

I totally agree with this. The desktop is a unzoomable pane with space constraints. It is not a viable part of any ZUI.

* Drill down interfaces are evil

* Configuration gluttony must be stopped.

In modern operating systems in order to find what you want you have to search through cumbersome drill down interfaces, and then to get the system to behave the way you want you have to manually specify it in configuration files.

On the other hand, an AI system uses intelligent search algorithms to satisfy the users every want and need, regardless of rather they are specified as a long term configuration file or as a short term query.

* Consistency is worth more than multiple placement.

Consistency certainly is an important part of HCI design and the biggest source of inconsistencies are applications. In an AI system, there are no applications, there is just a unified system which does whatever you want it to do.

Saturday, October 15, 2011

The evolution of computer input models

Keyboard era
Typewriters were created in the 19 century, and at that time the QWERTY layout begun to define keyboard layouts, and it still largely does to this day. QWERTY was designed to prevent jams in these early typewritters, so it is an inefficient layout and it is relatively hard to learn.

The keyboard was an important technology even before then invention of computers, and then when computers where invented, they played an important role in defining their input models.

At first computers couldn't even accept input from keyboards themselves, so you had to use them to separetly created punched cards to input into the computer. This was known as the batch input model.

The next development was the CLI input model, in which computers directly accepted keyboard input and responded to it in various ways, first with printers, and later with CRT displays like the one the IBM 5100 had. The CLI computers were generally used for programming in Basic or some other programming language.

The first challenge to the use of the keyboard as an input device came from indirect pointing devices like the mouse, however, the mouse alone is far from a challenge to the dominance of the keyboard. The PARC input model, based upon the introduction of the mouse, was introduced to the world with the Apple Macintosh and it subsequently came dominate the computing world for nearly thirty years. Most PARC based computers used a desktop environment with windows, menus, toolbars, and icons.

Post-keyboard era
The "tablet revolution" was partially launched by the introduction of the Apple iPad in April 2010, is based upon multitouch and voice input. These input methods allow you to avoid using hard keyboard using at least three separate means:

1) The use of a virtual keyboard or optical character recognition to input text through the touch screen.

2) The use of speech recognition to input text through voice sensors.

These two methods allow you to eliminate the use of hard keyboards in most cases. One of effect of this is that Laptops are now obsolete, since they carry hard keyboards which exerted extra weight, and which aren't ergonomic either. I have given away all of my laptops so that I can use tablets instead.

Now I require that all the keyboards that I use are ergonomic keyboards with a dvorak layout, which will significantly reduce the strain on my fingers, in order to prevent me from acquiring repetitive strain injury, which is a symptom that effects most heavy computer users from the keyboard age. Now that we have tablets, which are no longer dependent upon hard keyboards, I have directions in which I think we should head:

1) Transition from the old WIMP GUI to a multitouch ZUI and effectively do away with all sorts of popups, including menus and dialog windows, which will have the added effect of moving us towards eliminating the distinction web applications and desktop applications.

2) Make commands rather then applications central to the user interface using NLP algorithms and command packages. Commands can be accessed using speech recognition. One important command should be undo, so that the system can forgive mistakes.

These two ideas were first proposed by design expert Jef Raskins, however, he didn't yet realise that they are best implemented on tablet systems with multitouch input to the ZUI and speech input to the commands. I look forward to seeing these ideas implemented in the future.

Tuesday, October 4, 2011

Implementing cauchy sequences

I have decided to work on constructing some of the computable numbers using cauchy sequences. Generally, this is as simple as mapping over the counting numbers. Here is a construction of e:

(def e
 (map
  (fn [i]
    (apply + (map (comp / factorial) (range i))))
  (range)))

You can evaluate this sequence into:

(0 1 2 5/2 8/3 65/24 163/60 1957/720 ...)

In this way we will provide us with an approximation for e. Here are some additional sequences:

(def pi
 (infinite-series
  (fn [n]
    (/ (* 4 (Math/pow -1 n))
       (+ (* 2 n) 1)))))

(def golden-ratio
 (map
  (fn [i]
    (/ (nth fib (inc i))
       (nth fib i)))
  (rest (range))))

These should make for relatively good approximations of these irrational numbers.

Monday, October 3, 2011

Stanford AI

I am taking two AI classes from stanford. The first is the introduction to artificial intelligence, the second is on machine learning.

http://www.ai-class.com/newsfeed/
http://www.ml-class.org/course/auth/welcome