[Edu-sig] PySqueak: More on Croquet and 3D (was: Just ran...)
Paul D. Fernhout
pdfernhout at kurtz-fernhout.com
Mon May 15 05:13:51 CEST 2006
kirby urner wrote:
> All good R&D Paul. In my book, these are some of the deep issues, and
> finding the right combination of libraries is not an easy job.
> Regardless of the ultimate fate of your particular project, you're
> adding to your repertoire plus carving out the basis of some kind of
> graphical framework others might use, and that's a positive thing.
Thanks for the kind words.
Also, I am forced to wrestle with the issue of what are my specific
subgoals here (thinking of a PySqueak which is easy for beginners to use
and experts want to use as well)?
They sort of are, roughly speaking:
* to have Self prototypes in Python as an option (check, though
inefficient :-),
* to have a Self GUI in Python (brooding over),
* to port our 3D educational software to Python and this system (half
done, the translating to Python part, but need to settle on widgets),
* and to make Python development with running systems as interactive and
fun to use as that of a modern Smalltalk (just scratching at the network
debugging approach outlined earlier, but also already have the reloader
window I use with Jython),
* 3D simulated worlds in Python (less importance now to me, but of
potential long term interest in terms of simulation).
I've been trying out the latest version of Croquet some more as I ponder
this 3D and widget issue. I think I am getting past the Wow factor --
though it still remains pretty neat. Of course, as always, I was impressed
more by watching the Alan Kay presentation videos like of drawing a fish
in 2D and having software make it 3D and swim away than by using it myself.
http://video.google.com/videoplay?docid=-9055536763288165825
Ignoring some walkbacks and exceptions when starting some of the demos,
par for the course for my experience Squeaking, what I am left with is the
same feeling I get when I watch pretty good 3D modeling of people -- which
is sometimes a bit disconcerting (in a bad way). :-)
To explain, when you see cartoons of people, or mechanically rendered
sprites of people with no serious attempts at skin texture or hair luster,
you think, wow this is cool, and it is fun to look at. In my mind, that is
something like using 2D apps or the command line. It does cool things its
own way, and you can respect that. You get the immediacy people here talk
about, and having no (or few) expectations about what it should do base
don reality, nothing feels wrong (although it may still be confusing).
But, when you look at images of people rendered in 3D that is pretty good
(say 99%), they often look like corpses, because they are good enough to
set in motion a whole bunch of reality based expectations we have for how
other people should look, while not meeting them. Slightly drab hair?
Maybe they are sick? Skin that looks like rubber? A sign of death. For
more on this, see:
"Realistic Human Graphics Look Creepy"
http://games.slashdot.org/article.pl?sid=04/06/10/1327236
http://www.slate.com/id/2102086 [article discussed]
So, by analogy, when you make fairly realistic 3D environments, but not
100% realistic, you may be worse off for trying, because you raise
expectations you can not fulfill, and the differences make people
unconsciously feel uneasy, creepy, or frustrated. To be clear, I'm trying
to make an analogy here; Croquet as a 1.0 beta demo does not attempt
realistic human avatars, just a silly bunny rabbit avatar which looks
cute. My point is about the 3D world aspect versus the real world.
So, in this case, with Croquet and 3D, perhaps more realism is actually a
worse experience. And perhaps that unconsciously drives some of Alan Kay's
interest in better 3D rendering? Yes, in theory you can get really good,
but until you get there (when? 2020? 2040?), the results are sometimes
almost more disappointing the closer you get to realism. I think Croquet
may be facing that in the 3D realm. It activates expectations, like moving
in 3D, but then you are confronted with how awkward it is to use the mouse
to virtually "walk". You see a cube of blocks that invites you to take
one, but when you put it back, there is no gravity to make it drop back
into place, so it just oddly floats there. A slip of the mouse and the
rabbit falls off the green carpet, to where? And it takes a bit of
slogging to get back to anywhere interesting. I can see portals, but I
can't shortcut click to them; I need to proceed slowly to them, and if I
could click, and I suppose there is some trick perhaps, then I break the
experience.
Obviously, specific popular 3D games solve many of these problems within
the game in a fun "suspension of disbelief" way, and can be entertaining
for twenty hours or so, and even leave you wanting more, e.g. a recent
favorite of ours:
"Beyond Good and Evil"
http://www.gamespot.com/ps2/adventure/beyondgoodevil/
but, they do not seek to be the comprehensive life-time-of-use experiences
that Croquet is implicitly claiming to be for right now (or at least, soon).
So, I wonder if better 3D graphics will really solve the problem in the
near future. Short of Sutherland's "The Ultimate Display" (same as the
Star Trek Holodeck), 3D worlds can be pretty dissatisfying or unfulfilling
by themselves (ignoring their use as settings for games) if for no other
reason (even if 100% visually realistic) than lack of force feedback or
smell or air movement. Now, I'll say they can be useful, just like 2D
white boards are, or conference calls are, and they can be fun (like many
people find 3D games fun), but, ultimately, aside from any addicting game
like aspects ("Evercrack") the 3D aspect by itself isn't a long term win
(and it seems like the implicit notion of the Croquet work is that Croquet
will be where we all spend most of our computer time). And the closer
Croquet or similar systems get to reality, in some sense the more
disappointing they are (up until we have the Holodeck or direct neural
stimulation or something like that). Better to be in reality, I think. And
stick with 2D or 3D graphics geared more towards efficient creation and
collaboration than semi-realistic virtual creation and collaboration.
There's another thing that bothers me with the 3D world approach, and that
is, it tends to run counter to the notion of moving fluidly between levels
of abstraction, where you can see multiple representations of the same
data. Our Garden Simulator (circa 1997) http://www.gardenwithinsight.com/
[See the second picture from the top on the right] tried to lead kids (or
adults) from working in a relatively non-abstract garden setting onwards
to using a level of abstraction using a numerical and graphical browser to
visualize current state and change it, and then from that on to using
graphs to visualize state over time, and so moving to higher levels of
abstraction at each level. You could do that in a 3D Croquet world, say,
by havinga 3D garden and a sheet of virtual graph paper, but it seems to
me the 3D world is getting in the way a bit somehow, when you could just
as well have a flat 2D window on your screen with a graph next to a 3D
widnow of the garden. Granted, having a separate window for a 2D thing
violates the paradigm Croquet is working towards, where multiple people
can see what each other are looking at, so perhaps I need to understand
more if that is really compelling and useful. But, on the other hand, even
knowing where an avatar is pointing can't tell you what someone is
thinking about. One big value of computers is that they can provide
alternative ways to do things and look at things than is possible in the
"real world". [One reason command line diehards like the command line so
much is it makes some things easier to do with a mini-language than with a
2D graphical interface, like change a bunch of files at once.] So, while
the 3D Croquet interface does not demand giving up various levels of
abstraction, it would seem to me it sort of encourages it. But that is not
an opinion from using it much in practice, so perhaps in practice may be
different.
Now this isn't to dismiss Croquet as a valuable experiment or as
innovation. It's a good thing to have tried. And to keep trying with. And
Python as a platform may well benefit from having some of this technology.
It's just to consider it in the light of lessons learned and where to go
next (for me or Python)?
But then you are left with the question -- how should people of varying
abilities best interact with the computer in general and for various
tasks. And, while I can see the value in a Croquet or ActiveWorlds 3D
approach in some situations (I can see the potential value of being able
to see where others are looking in the virtual world when collaborating,
for example), I think there remains a lot of value in other interface
paradigms, including both plain 2D widgets and also using a 3D window
surrounded by 2D controls. (Obviously, whether OpenGL might render all
that 2D stuff as well as the 3D stuff is just an implementation point in
some sense.) So, in looking at the strengths and weaknesses of the
Squeak/Croquet hybrid, derived from Self's Morphic and 2D collaborative
model (and other things), I am again back to thinking that supporting
collaboration in a 2D space (and ideally using prototypes) is potentially
still a very useful thing, and a valuable first step. And so are any other
approaches towards providing the option of doing development with Python
in a way more like development under Smalltalk. And when six years ago I
first brought up Squeak here, it was before Croquet, and in the context of
these basic thing, plus some 2D learning applications built on top of them
(more eToy-ish and HyperCard-ish and Virtual-Robot-programming-ish)
Anyway, having used Smalltalk for years (and ZetaLisp+Flavors before
that), I am still confronted on a daily basis with the knowledge that it
is productive and fun and empowering to develop with the level of
interactivity Smalltalk (or the Symbolics) provides as an environment, and
no Python IDE I have tried can deliver that (parts yes, the whole thing,
no). Yet, I am also left with the reality that Python has gained
acceptance because it is closer to C and BASIC in appearance, and because
of its ability to play nice with other systems (especially ones written in
C, or now, Java), as well as other factors, including that the license
works out well for today's economic structures. So, on the one hand, I
know what is possible, but on the other, I find myself often not able to
make use of those systems in practice, which is what drives my interest on
making such additions to Python more than anything.
> Incidentally, I just bought Civilization IV for my daughter [1], so we
> could give my wife's new computer a workout in the newly rented
> workspace [2], and she (my daughter) noticed right away that it
> contains Python bindings of some kind. I haven't researched this yet,
> but I do find it exciting that a high powered game engine would make
> Python a part of its commercial front end, even mentioning Python on
> the box.
Your point is exactly what gives me pause about the Squeak / Croquet
approach, and why Python has had more widespread commercial success.
Scripting such things is just left out as an encouraged possibility with
Squeak / Croquet (anything is possible with Squeak of course; it's a
matter of focus and clutter). Squeak and Croquet are, as has been said
here, sort of anti-collaborative. Which is ironic, since the whole point
of Croquet is to be collaborative. [That was brought up years ago on this
list.] Or perhaps, collaborative only on Croquet's terms? I liked your(?)
proposal a way back on how what we need are standards for communicating
between virtual world interfaces, so they could be implemented in various
ways. Still, as Alan Kay has said, "any standard of more than three lines
is ambiguous", and so you really need at least reference implementations,
which Croquet is.
Yet, having said that, I am also thinking that given Python's success as
gluing things together, and how all GUI toolkits are somewhat closed
systems, see for example:
"Why Gtk/Qt/WxWidgets... are bad"
http://www.pygame.org/wiki/gui
I don't think it is unreasonable to argue for making another widget set
(perhaps heavily copied from an existing one, like the pure Python on SDL
OcempGUI)
http://www.pygame.org/projects/9/125/
if there is a compelling and overwhelming reason to in terms of creating a
good learning or developing environment in Python supporting a different
paradigm of development ("modeless" versus "edit/run", and
"prototype-oriented" instead of "class-oriented"). That system can still
be used to call existing (non GUI) libraries through Python. I'm not
specifically making that argument right now, just saying, I think one
could make it. For example, my very first Prototype proof of concept used
TK widgets which were inherited from by prototypes. But I found when I
copied one, that the widget was not copied, since internally two
prototypes both point to the same proxied TK widget (as it was not
copied). That's the sort of problem a pure Python solution might work
around better (where a copied prototype would be a different GUI object).
Not to say one might not be able to clone the TK widget, or a wx widget,
just that it is more machinery, and perhaps some other unknown
difficulties may exist in retrieving state from live widgets implemented
in C/C++. But it is still hard to look at all the nice widgets in, say,
the latest wx demo and think there is any point to writing yet another
widget set... With all that entails...
Incidentally, I spent some time with the latest Debian versions of
PythonCard and found a few issues from the standpoint of my using it. One
is the paradigm -- mostly edit and run. Yes, you can change widget
information while it is running, but that does not seem how it is set up.
(HyperCard had a run/edit model too). Also, under GNU/Linux at least, you
could not drag a button or list after you placed it -- they absorbed the
clicks. Other components could be dragged. So, an inconsistency. Not sure
if this is easily fixable with live wx components. In any case, that
paradigm mismatch issue is potentially a large one.
--Paul Fernhout
More information about the Edu-sig
mailing list