Video Tape Transcript of Toronto Usenix Symposium Keynote Address
This is a transcript of a video taped keynote address in absentia,
for the Toronto Usenix Symposium. The normal text is Don
Hopkins talking. The (parenthetcal italic text) is extra annotation
and explanation that's not on the video tape.
-- Beginning of Video Tape --
Hello, my name is Don Hopkins, and I ported SimCity
to Unix on top of X11 using the TCL/Tk
toolkit, and also on top of the NeWS window
system using HyperLook. Unfortunately
I can't be in Toronto to demonstrate this stuff to you, but fortunately
I have some video tapes that you can see that demonstrate the whole system.
The X11 version of SimCity is multi player, and several people can join
the game, and cooperate, and people draw roads, and put down buildings in
different places, and then when you do something important, like change
the tax rate, or build an airport, you have to get everybody else who's
playing to agree where to put it, and which thing to put down. So it makes
you slow down and rationalize what you're doing, and explain to people why
it is you want to put it there. It's a really interesting addition to SimCity
because it adds politics.
I'm going to show first the X11 version, which is on top of TCL/Tk,
and that's a free toolkit that's available, written by John Ousterhaut at
Berkeley. There's a book that's coming out describing it, and you can just
get TCL/Tk and use it to make products for free. You don't have to pay anything
for it, and it's actually very good code. It really beats the pants off
of Motif, and we were
able to modify it in order to support things like colormaps and multiple
displays the way we needed to, and add things to it like a sound server
to make sound effects, and pie menus for quickly selecting city editing
tools. TCL/Tk made alot of sense for SimCity.
The first port of SimCity that I did to Unix is on HyperLook, which is an
interactive graphical environment based on NeWS. We took the source code
to SimCity for the Mac, and I threw away all the user interface code written
in C, and just took the core simulator, and then rewrote the user interface
using HyperLook, which is this direct manipulation graphical environment,
kind of like HyperCard, where you can take pictures and paste them in to
define the look, and then every object has a script on it that in HyperLook,
the script is PostScript, which defines its behavior.
So you just create a user interface by drawing it, and then hook it up to
the application, and that user interface is separated from the application,
and they send messages back and forth. Now this separation of the user interface
from the application is really important, and that made it much easier later
to port SimCity to X11.
HyperLook has this scripting language in it, and TCL/Tk has the TCL scripting
language in it, so I was able to translate the things I had written in PostScript
into TCL, and have a very similar structure. It makes it much easier to
develop a thing as complex as SimCity if you have an interpretive programming
language there, so you can just fiddle around, and paste new function definitions
into the running system.
There are some user interface editors that have been developed for TCL/Tk,
but I just wrote code by hand because I was doing some more specialized
things, like multiple views and putting up views on different X11 displays
over the net, that the user interface editors didn't support. HyperLook
has a built in user interface editor, and I'll demonstrate HyperLook SimCity
and the HyperLook environment in the following video tape.
The X11 version of SimCity supports multi player, so you can add several
people to the same game, and it connects up like an octopus, several X11
displays connected to one X11 client. You can cooperate on these important
decisions like setting taxes and building airports. Everybody's participating
in the same game and lives with the consequences of each others actions,
so now you have politics in the game. There are some tools for communicating
and drawing on the map, and seeing what other people are doing.
Unix was very good for porting SimCity
because it's a very good programming environment. It's very difficult and
lacking in multimedia things like the sound, and just doing animation easily.
I had to create alot of things that didn't exist before, that other people
are independantly working on creating too. That stuff is slowly fading into
view, like for example there's the NetAudio server now that lets two programs
make sounds at once, it just mixes them together.
SimCity wants to go "Roar!", "Roar!", "Kaboom!",
and my email program wants to go "dinga linga linga ling" at the
same time, so you have to have one program handling the sound that mixes
One of the things I developed for TCL/Tk and for HyperLook was this sound
mixer server. And then we got an NCD X-Terminal, and just layered my sound
mixer on top of their sound server. It can either use the built-in audio
device and be a TCL sound server, or it can use the sound server that's
in your X-Terminal or your Sun or SGI or whatever, if you're running NetAudio.
There are some other hard problems to solve like the bitmap animation. X
has some extensions like shared memory, that make it easy to animate, but
you can't depend on it, and some peoples servers don't have quite the whole
shared memory extension. It's just a pretty frightening prospect just trying
to write pixels onto the screen. You have to deal with about 50 different
possible combinations of different display devices, and different ways of
getting to that display device.
It's very difficult programming this stuff under X.
It was alot more fun doing it in NeWS. We had to give up alot of the neat
graphical features for the X version that we had in the NeWS version, like
scaling and zooming around. You just can't do that in X. Unfortunately,
NeWS is dead. There's no longer any support for it. The thing that was really
wrong with it was that it was not cross platform. You were just stuck on
The good news though is that there are much better systems, I'm working
on one right now at Kaleida called ScriptX,
that are cross platform. Their whole purpose in life is to provide you a
really nice high level abstraction, that lets you ignore which operating
system you're running on, so instead of developing for Unix, or for MS-DOS,
or for the Mac, you would develop for ScriptX, and that would get you to
Unix, and the Mac, and MS-DOS. More interestingly, that would get you to
things that don't exist yet, that are just coming into existance, things
like set top boxes with really hot graphics, and nicer systems than you're
currently even dreaming about.
What we need are high level multimedia abstractions; the X graphics model
is very low level, and just doesn't work, but the NeWS PostScript graphics
model is really nice, but we want the best of both worlds: a high level
system that runs fast on lots of platforms. Once we have a truely object
oriented system, things start plugging and playing like Legos, as this video
tape of the HyperLook system will demonstrate.
The good news is that in the future, we will have systems like this that
plug and play with each other over the network, and it won't matter what
kind of hardware you're using. And that'll be in the hands of consumers
too, it won't be just for Unix weenies.
I will show you a video tape of a talk that I gave at Interval,
about "Self Revealing Gestural Interfaces", which is computer
jargon for "pie menus". That
is a thing that I put into both version of SimCity that lets you select
editing tools really quickly.
One of the nice things about running on a fast platform, is that SimCity
runs really fast, and now it's a question of keeping up with the simulator.
You need a streamlined user interface in order to keep up with this city
that's zooming years into the future at you sit. That's what the pie menus
are for, and I'll demonstrate that.
For the pie menus and the multi player interaction stuff, like putting up
windows on different screens and letting people have a shared view of this
one environment, it was really nice to have the source code to the TCL/Tk
toolkit, in order to support that kind of stuff.
It wouldn't have been possible to port SimCity to X11 using Open
Software Foundation's Motif toolkit. It just absolutely sucks. It's
not open, and you have to pay for the source code, and it's not being maintained.
But there's a really wonderful community that's grown around TCL/Tk, and
people are allowed to use it in their products for free, and get the source
code. I implemented pie menus with TCL/Tk for SimCity, and out of gratitude,
I put the source code for the pie menu module out for other people to use,
just to help to community. It's a nice positive feedback situation, as opposed
to the cold war situation you have with COSE, Motif, and Open Software Foundation.
We bundled the HyperLook runtime system
with the NeWS version of SimCity.
If you're running OpenWindows 3.0, you can get it and try it out.
We have been distributing
SimCity over the Internet, and (less successfully) on CDROMs.
That's possible because Unix systems have serial numbers, so we can node
lock SimCity, and you can run the program for five minutes if you don't
have a license, and then it melts, so you get the whole feel of the whole
full blown product, and if you like it, then you call up DUX
Software's 800 number, give them your credit card number, tell them
your serial number, and they tell you a password to type in that will unlock
it for your particular machine, then you're up and playing SimCity. No physical
transaction has taken place. You're encouraged to get a copy of it over
the net, and give it to your friends.
This is the best way to distribute software. Whenever we make updates, we
can just put them right online, and people can just grab a new copy. I think
that's the future of software distribution. I don't like the little boxes
with plastic insets and little pieces of cardboard folded up to make then
seem heavier and thicker. The instant gratification of distributing it over
the net is really great.
Well, anyway, here's the talk, and the video tapes.
-- End of Video Tape --