Archive of UserLand's first discussion group, started October 5, 1998.

Re: Xanadu--some initial reactions

Author:Don Hopkins
Posted:8/27/1999; 9:56:09 PM
Topic:Xanadu--some initial reactions
Msg #:10165 (In response to 10164)
Prev/Next:10164 / 10166

[Continued from previous message...]

I programmed a lot of stuff in PostScript with the NeWS window system, including toolkits and graphical user interfaces (pie menus, The NeWS Toolkit, etc), extensible text editors like Emacs (both UniPress and Gnu), hypermedia browsers and authoring systems (HyperTIES, GoodNeWS/HyperNeWS/HyperLook), visual programming (PSIBER), and games (SimCity).

I wrote NeWS display drivers and user interface stuff for Emacs (at UniPress, and later for Gnu Emacs), and did a lot of user interface programming for Emacs, eventually using it to implement another hypermedia authoring system (HyperTIES). I optimized the Emacs NeWS display driver to run well over a slow modem connection, by downloading PostScript code to the NeWS server to implement as much local intelligence and interactivity as possible. For example, it could pop up and track menus, and give real-time text selection feedback, without incurring any client/server round trips.

Emacs has always had a built-in hypertext facility called "info", which has evolved over the years, between different versions of Emacs. Originally, it was written in Teco, but it's been rewritten in many different forms, in MockLisp, Lisp Machine Lisp, Gnu Emacs Lisp, C and other languages.

UniPress Emacs stored the info nodes in an ndbm database, and UniPress enhanced it a lot by adding many features borrowed from HyperCard. It had a messaging system like HyperCard events, and facilities for storing named resources in info nodes. The resources could include executable MockLisp code, that was called in response to events like displaying nodes and following links. Or arbitrary text data that the MockLisp code could transform, to dynamically fill out the info page template, and stuff like that. Or PostScript code that was downloaded to the window server, to describe interactive behaviors like nested trees of pie menus. The PostScript code, MockLisp code, text resources, and the resulting info page itself could be dynamically generated by Emacs.

You could use Info to describe a tree of interactive menus and other applets as interlinked "info" nodes in Emacs. It was possible to use the menus through the Info browser built into Emacs. But you could also compile them into either pie or linear menus, that were downloaded into the NeWS server and bound to Emacs functions through virtual function keys. Since menu items were bound to virtual function keys, you could include menu selections in keyboard macros, get help on menu items using the normal emacs describe-key command, and undo/redo the effects of menu commands.

I wrote MockLisp code that compiled the info database (think of it like an XML model of a menu tree and actions) into PostScript code (that was data describing the nested pie menus, to be downloaded to the NeWS server) and MockLisp code (that defined the virtual function keys and menu item to key bindings, that emacs would execute to bind the menus to emacs functions).

Then it stored the dynamically generated PostScript and MockLisp code in another info resource, that could be quickly downloaded and executed the next time you start up Emacs. So the user was able to use the standard "info" hypertext editing facility in Emacs to construct their own custom menus for Emacs, including binding items to function keys, MockLisp code (executed by emacs), PostScript code (executed in the window server), as well as submenus (handled locally in the server without causing any network traffic).

While at the University of Maryland, I worked on HyperTIES at Ben Shneiderman's Human Computer Interaction Lab. HyperTIES was a hypertext browsing and authoring system, that we developed for Unix, using Sun's NeWS (Gosling's window system programmed in PostScript) and UniPress Emacs (Gosling's text editor programmed in MockLisp). HyperTIES formatted pages into PostScript display lists, with interactive NeWS user interface components embedded on the page like "applets".

I wrote a formatting library in C that downloaded dynamically generated PostScript code to the NeWS server. We implemented a markup language with conditional text and macros, that I first prototyped in Forth, then we rewrote in C. Then I built an authoring tool with UniPress Emacs written in MockLisp (and other graphical image mapping tools written in NeWS).

Then I used HyperTIES and Emacs to create several works of "intertwingled" text and graphics. I made a database about a collection of public domain NeWS software I put together, that categorized it and gave credit to the authors, and let you browse the documentation, view pictures, and run many of the programs by clicking links. I also used it to write some interactive papers about pie menus, that were illustrated with embedded examples (like "applets", but programmed in NeWS instead of Java.) It's funny how I was using two of Gosling's older languages (MockLisp and NeWS), to do the same thing that Java (another of his later languages) is used for today.

We had a nice "Hubbell Space Telescope" demo that had an articulated image map of the different parts of the telescope, that popped up cookie-cutter shaped targets with drop shadow when you pointed at parts of the image with the mouse. I made a general purpose pop-up image map component in NeWS, and an authoring tool that let you create links in an image by drawing arbitrary PostScript paths around different parts of an image, adjust the pop-up scale and offset, etc.

It was typical academic research project: a huge heap of ugly tangled together code in many different languages. I learned a lot from programming and using it, but the time it would take anyone else to detangle it all and make any sense out of it, would be much better spend redesigning something else from scratch.

[Continued in next message...]

There are responses to this message:

This page was archived on 6/13/2001; 4:52:13 PM.

© Copyright 1998-2001 UserLand Software, Inc.