The technologies needed to build these models are almost all available today. We've known for a long time how to build the pieces of this scenario-the audio players, the speakers, etc. We can even build programs and set up wirings to connect devices to work together. So what is missing? First, the systems we can build today are special-purpose and fragile. If a user adds or removes a device, or tries to use the system in a slightly different way than its designers imagined, the whole system is sure to break in an unpredictable way. Secondly, when using these devices together, users have to deal with low-level details that do nothing but cause frustration: is the TV on channel 3? is my Beatles album disc 2 or 3 in the CD changer? People should not have to worry about these machine-level details-they should be able to deal with the system in human-level terms: Play this movie. Play my Beatles music.
To solve this fragility problem, I am building software structures that are designed to cope with changing and heterogeneous environments. One key to solving this problem is designing devices for "spontaneous interaction, "where devices can interact with one another based on a few simple protocols and minimal human supervision, with no prior agreement on anything else. One guideline that has come out of our work so far is that devices should not be programmed with assumptions about how they will be used with other devices. Almost paradoxically, it is better for devices to know too little than to assume too much.
This contradicts current design practices, where every home audio/video device from VCRs to cable receivers, assumes that it is the center of the world, and, for example, will be used to control the channel being watched. It would be better if each device assumed that it wasn't in charge-that something else would handle setting the channel. This would have the double-advantage of making each device simpler and making it possible to build a separate "channel changer" that we could depend on to actually change the channel correctly.
To address the problem of interacting with systems in "human-level" terms, I am experimenting with task-based models for coordinating devices. For our purposes, a task is a human-level activity, such as playing music or watching a movie. I use a simple task description to specify how devices combine and how to map back and forth between low-level machine terms and human terms related to the task at hand. I of course follow my own guidelines so that these tasks are robust to changes in device configurations and adaptable to the user's needs.
This task model lets us provide a unified control of the whole system in terms that are relevant to a user. A user can tell the play-music task to "Play my Beatles album." The task handles the details of discovering which device has this album and mapping the high-level "Play" command onto device-level commands such as "switch the speakers to the CD audio source."
I am currently building a prototype of this system for use with home audio/video devices. Within the next couple of months, my goal is to have a working system that allows a user to flexibly combine video players, televisions, computers and cameras, as well as related Internet services, such as on-line program guides. Based on this working system, I plan to fine-tune my models and approaches, as well as expand this prototype to encompass tasks outside of this first "entertainment" scenario.
|Modified 15 January 2003 * Contact Us|