INT: Worlds and Generic Services
'Chris Harris' B. Harris
chharris@u.washington.edu
Fri, 16 Jun 1995 11:28:07 -0700 (PDT)
Hello TUNESers!
Been pondering lately how to set up a UI framework, as well as how TUNES
will provide generic services, to the extend that Fare describes in his
CD Database example. (If you haven't read that, perhaps you should -- I
wish my computer could do that! =) So here I am, to present a few
thoughts and solicit some feedback (as usual)....
First, about the UI framework: been thinking about how we could create a
flexible, expandable environment with minimal abstraction, maximum
coolness. I haven't come up with anything extremely concrete, but I have
made the following little sketch. If it sounds like this is on the right
track, maybe I could expand this into a "paper". If not, I'd love to
hear rash modifications or alternate proposals! Anyway, here goes...
*****
Sketch
------
-User interaction takes place through "worlds"
-Instead of a login shell, user "logs in" to a world.
-Worlds might be interacted with via text, 2D/3D pictures, sound, etc. --
and different combinations of these (which of these is used depends on
how the world is set up.
-Each world has some subset of the universe of objects inside it
-Objects may be added to a world by a "realize" or some other command, and
then may be later removed/unrealized.
-"Realized" objects become part of the world, and abide by the world's
"physics". (ie realizing a chunk of text might, in a 2D windowing system
world, bring up something not too distant from today's word processors)
-Objects are interfaced to the world through modules/sub-objects, which
specify the object (visually, etc.) in terms of other objects in the world or
low-level graphics/audio/etc primitives.
-Normally, one such module exists for each world an object can interface
with.
-But there are exceptions -- world may provide for "generic"
object support, where users can interact with an object just by setting
attributes, etc.. (For example, in a world that doesn't support input
siders (used for volume controls, etc.), a user might still be able to
set some object's field to a value between 1 and 100 to control the
slider's value.)
-Worlds can enclose other worlds
-a world can even enclose a copy of itself
-to achieve this, worlds must be careful to access drivers (that can be
emulated) and not the hardware directly. Sure, some worlds could
access the hardware directly, but this is not reccomended, as it makes
that world impossible to run within another world.
-(?)Worlds help provide security: only objects in current world can be
accessed (by the user anyway).
-(?)Worlds can help provide context/speed: if a world is setup so that no
objects outside the world can be accessed, the search space (hence time)
is lowered drastically? (Is this REALLY what we want?)
Issues
------
-Where are objects when not in a world?
-Can an object reside in multiple worlds at once?
-yes
-Do worlds encourage abstraction?
-Support yes, but not encourage. Abstractions can be created (as sub-worlds,
perhaps) as needed, but part of the worlds system's advantage is how easy
it is (?) to NOT provide abstraction. Say I have a text object that I want
the user to edit. I can simply plot this object in the user's world, and
it'll figure out what to do with itself. That way, I don't have to support
it with any of my time/code. (Not sure how that relates to abstraction, but
oh well...)
-Multiuser worlds?
-Sure, why not? Let as many folks as need log in to a given world, and
interact with the same stuff! (Or would this result in pointless control
fights? This needs to be refined...)
-Communication between worlds
-done only with objects, or do we allow sort of sort of "portals/warps" to
other worlds?
Cool thoughts
-------------
-Text objects created as sub-worlds, with their own "laws" appropriate to text,
etc..
*****
About generic services: seems to me that due to the lack of sufficiently
advanced/cheap AI items, requests such as "provide me the best database
module availible" (going back to the CD Database) are going to have to be
translated into some sort of structure request, and then the appropriate
module found simply by pattern matching with similar structures attatched
to objects. Something like this:
struct objectRequest {
ulong object_type; // 5, for example, might be our standard database
// ID #
char *attributes; // special needed attributes needed by this database
// module to satisfy our needs
object };
Sure, it's ugly, but how else can we do it without some big ol' AI thing
that hasn't been invented, or is out of our reach if it is?
Harder than this, I think, in Fare's example, is the part where the
system basically goes to ask the database object how it works, and the
module replies with the appropriate information. Pardon my French
(hehe...), but how the hell are we supposed to communicate that
appropriate info for every possible case? Any thoughts on this?
Oh, and I think TUNES should have one standard installation package that
does more than make, imake and all those others put together. The amount
of effort needed to install some UNIX apps is just silly. I know it
can't be as simple as Mac/Win, where you just plop the app there and it
works. (And binaries won't work anyhow, if we want to support 80 zillion
platforms someday.... =) But, assuming we trust the source code,
couldn't things be more standardized, and hence more easily automated?
Feedback is welcomed/begged, as usual.
-Chris
--------------------------------------------------------------------------
"Be careful lest in casting out your devil you cast out the best thing
that's in you." --Nietchie %% Me = Chris Harris (chharris@u.washington.edu)
Check out my web page: http://weber.u.washington.edu/chharris/