INT: Worlds and Generic Services
Jecel Mattos de Assumpcao Jr.
jecel@lsi.usp.br
Sun, 18 Jun 1995 21:02:53 -0300
"'Chris Harris' B. Harris" <chharris@u.washington.edu> wrote:
> Sketch
> ------
>
> -User interaction takes place through "worlds"
> -Instead of a login shell, user "logs in" to a world.
Good start.
> -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.
And the user should be able to choose which interaction method is best -
3D worlds are neat but are not very good to a blind person. Of course,
some worlds might not make sense with some interaction methods - who
wants a text based DOOM?
> -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.
A "fetch" function might be the best way to introduce objects into a world.
> -"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.
Ok, sort of like the "window manager" in X.
> -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.)
Yes - you might need to "move" from just using the objects to programming
them, for example. Multiple levels of abstraction is a powerful idea. Self 4.0
is comming out very soon - I wish there was some way of you seeing what
they have done there!
> -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.
You lost me here - what does "enclose" mean and what does it have to
do with drivers and such low level stuff?
> -(?)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?)
This isn't such a good idea - the objects in the world must be just the
tip of the iceberg - you should also be able to access objects that are
referred to by these objects and so on. I would make the security issue
orthogonal to the worlds idea, or multiuser worlds ( see below ) won't
make sense.
> Issues
> ------
>
> -Where are objects when not in a world?
Where are the files that are not in the current directory? As long
as you admit a number of worlds, you can always imagine that the
objects are in one of them ( not the current one ). You might not
be able to "navigate" to where the objects are, but you could
"fetch" them to where you are.
> -Can an object reside in multiple worlds at once?
> -yes
I also prefer to answer yes, but the Self folks have powerful arguments
against that: it makes objects much less concrete. They believe an object
must have a unique on-screen presence. On the other hand, any object can
be "seen" in multiple places in the object graph that is part of the
implementation, and I think this idea must be reflected in the UI. It
could be something like "aliases" in MacOS or "shadows" in OS/2 ( see
the confusion they can cause to understand what the Self people are
talking about ... ).
> -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...)
Er.. I think we want concreteness, not abstraction. Abstraction is a bad
thing in a UI. The great thing about Unix was how it abstracted disks files,
serial IO, etc into a single idea - but we already get enough of that with
objects and polymorphism without having to add layers to the UI.
> -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...)
Self 4.0 already allows many users to share a window - it is very neat!
There is a great potential here ( why do you think IBM spent 3.3 billion
dollars on Lotus - to get a little of thie functionality with Notes ).
> -Communication between worlds
> -done only with objects, or do we allow sort of sort of "portals/warps" to
> other worlds?
There are two issues - communication between worlds and the user
navigating between the worlds. I think the first can be totally invisible
and the second done with "portals".
> *****
>
> 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?
Structured Query Language ( SQL ) can already do better than that. I
think part of the answer might be Fare's annotations - just sweep
through the objects looking at what they tell you about themselves.
> 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?
This is where reflection comes in - the ability of the system to
"look inside itself" and work with that. This is already present
in Smalltalk, for example: I can ask for the "implementors of #search:"
and get a browser with all of the classes that implement this method.
We are talking about 70s technology here.
> 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?
Binaries *will* work if they are virtual binaries. No need to
install objects - just a method of communicating them ( via internet,
floppies, CD-ROM, etc.. ) from one system to another. It is exactly
the same thing as copying an object from one world to another within
a single system.
-- Jecel