created mirror
This commit is contained in:
911
Documentation/CyberText/ct-old.wml
Normal file
911
Documentation/CyberText/ct-old.wml
Normal file
@@ -0,0 +1,911 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
|
||||
"http://www.w3.org/TR/html4/strict.dtd">
|
||||
<!--
|
||||
This is an article intended for the CyberText yearbook.
|
||||
|
||||
It is written in WML, which is close to HTML while providing
|
||||
some easier ways to create certain constructions, such as
|
||||
the figure tag.
|
||||
|
||||
NOTE! This file uses WML 2.0.1
|
||||
|
||||
PLEASE PLEASE PLEASE don't edit .HTML. Edit .WML!!!! Actually,
|
||||
it's more important for you since your changes will be LOST FOREVER
|
||||
if you edit the .HTML files.
|
||||
-->
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title>GZigZag: a platorm for Hypertext experiments</title>
|
||||
|
||||
#include '../wmlinc/article.wml'
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<substdims>
|
||||
<H1>GZigZag: a platorm for Hypertext experiments</H1>
|
||||
<pre>$Id: ct-old.wml,v 1.1 2000/09/13 14:58:08 tjl Exp $</pre>
|
||||
<grid layout=3x3 spacing=20>
|
||||
<cell> <b>Tuomas Lukka</b> <br>
|
||||
<code>lukka@iki.fi</code><br>
|
||||
Dept. of Mathematical Information Technology <br>
|
||||
University of Jyväskylä
|
||||
</cell>
|
||||
<cell> <b>Vesa Parkkinen</b>
|
||||
</cell>
|
||||
<cell> <b>Katariina Ervasti</b></cell>
|
||||
<cell colspan=3> and </cell>
|
||||
<cell colspan=3> <b>Ted Nelson</b> </cell>
|
||||
</grid>
|
||||
|
||||
<toc>
|
||||
|
||||
|
||||
<p>
|
||||
This is a preprint of an article to appear in the Cybertext Yearbook 2000,
|
||||
edited by Markku Eskelinen & Raine Koskimaa, to be published by Research Unit
|
||||
for Contemporary Culture.
|
||||
All trademarks are the respective trademarks of their owners.
|
||||
|
||||
<warn>
|
||||
|
||||
<abstract>
|
||||
We present a short summary of the ongoing work at the Hyperstructure Group
|
||||
in Jyväskylä University.
|
||||
We are interested in structures that currently dominant software
|
||||
paradigm makes difficult
|
||||
or impossible to express or edit.
|
||||
For example, current operating systems are fixated on files and directories
|
||||
which could be replaced by a much more flexible and more
|
||||
fine-grained structural system.
|
||||
For many applications it would be useful to keep track of where text
|
||||
has been copied from via cut&paste. The current paradigm does not support
|
||||
this but e.g. the Xanadu88 paradigm does.
|
||||
Additionally we are interested in useful visualizations of these structures.
|
||||
|
||||
Most of our work is based on Nelson's ZigZag
|
||||
structure, and we have a prototype program GZigZag on which various
|
||||
variations are tried.
|
||||
</abstract>
|
||||
|
||||
|
||||
<h2>Introduction</h2>
|
||||
|
||||
<p>
|
||||
This article attempts to give an overview of the activities of the
|
||||
Hyperstructure Group at the University of Jyväskylä.
|
||||
The group, founded in fall-99 is focused on a long-term collaboration
|
||||
with Ted Nelson and implementing and testing
|
||||
his ZigZag design and some Xanadu designs.
|
||||
|
||||
<p>
|
||||
The most basic idea
|
||||
underlying all of our work is that today's computers do not
|
||||
allow the user to store and visualize most of the real structure of
|
||||
his information.
|
||||
An interesting feature of this problem is that it is never visible
|
||||
on a small scale, with a few documents or files. On a small scale, the human
|
||||
brain is able to superimpose the true structure of the data on the
|
||||
structure forced by the computer (filenames and directory hierarchies).
|
||||
|
||||
<p>
|
||||
Unfortunately, most software is only tested with small amounts
|
||||
of example data in the prototype stage.
|
||||
If there are hundreds of documents, modified by dozens of people,
|
||||
it is easy to fall into chaos unless the true structure of the data
|
||||
is used. One simple example of such true structure is that of origination(XXX):
|
||||
being able to track all text across several cut&paste operations and
|
||||
visualize this makes it simple to see what rearrangements other people
|
||||
have done on a piece of text after having seen it last time.
|
||||
|
||||
<p>
|
||||
Our work is based on Nelson's ZigZag structure XXXREF, introduced below.
|
||||
We often use the term ``ZigZag structure''. This is an approximation:
|
||||
ZigZag is in a sense a metastructure with which it is easy to model any
|
||||
structure, even structures that would be difficult to model on paper
|
||||
or on usual computer programs without a special program designed explicitly
|
||||
for that structure - for example a family tree.
|
||||
|
||||
|
||||
<h2>Basics of ZigZag</h2>
|
||||
|
||||
<p>
|
||||
ZigZag is a new way of putting information into computers, kind of a crossing
|
||||
between a database, a filesystem, a personal information manager and
|
||||
many others. And even that isn't sufficient to describe it: it's simply
|
||||
something new.
|
||||
There are two important differences between systems built on ZigZag
|
||||
and "normal" computer systems.
|
||||
|
||||
<p>
|
||||
First of all, files and directories are unnecessary (REF paradigms).
|
||||
A traditional filesystem uses filenames to refer to large chunks of
|
||||
information and possibly HTML-like anchors to refer to smaller pieces
|
||||
inside the files. This is a fragile way of representing the information
|
||||
since the only <em>structure</em> stored by the system is the files based
|
||||
on the names - finding which files reference a given file is timeconsuming
|
||||
or requires a pre-indexing scheme.
|
||||
ZigZag is a flexible hyperstructure, allowing different micro-level
|
||||
connections between various pieces of information.
|
||||
In ZigZag all references are two-directional and do not work through
|
||||
user-visible namespaces. Rather, the micro-level two-directional
|
||||
referencing is built right into the system. Changing some of
|
||||
the connections of a piece of information (e.g. renaming the "file" it
|
||||
is inside in the listing) will leave the other connections unchanged.
|
||||
|
||||
<p>XXXXX
|
||||
Second, in ZigZag, <em>all</em>
|
||||
the information about the system will be stored in the same structure.
|
||||
In Windows, there is a filesystem and separately from it, there is the
|
||||
registry. In UNIX, there is just the filesystem with configuration
|
||||
information for applications being represented as text files inside
|
||||
the same filesystem; same tools can be used to edit normal text files
|
||||
and configuration files.
|
||||
ZigZag takes this a step further: all information is in the same fine-grained
|
||||
structure instead of the coarse "file-grained" structure.
|
||||
The same tools can be used to edit any part of data on the system, be it
|
||||
metadata, configuration information, user interface bindings or a spreadsheet
|
||||
or document. XXX selitä paremmin
|
||||
|
||||
<h3> Cells and dimensions </h3>
|
||||
|
||||
<figure img="rank1vert.png" width="250px">
|
||||
Two ranks on <CODE>d.2</CODE>. The rules of the ZZ structure
|
||||
are that each cell may only be on one rank along a given dimension.
|
||||
</figure>
|
||||
|
||||
<figure img="rank2vert.png" width="250px">
|
||||
Two different ranks involving some of the same cells, on
|
||||
a different dimension <CODE>d.1</CODE>
|
||||
</figure>
|
||||
|
||||
<figure img="rank3both.png" width="250px">
|
||||
One possible way to flatten the ranks of the two previous
|
||||
figures to show both dimensions at once. Note how the structure
|
||||
feels locally spreadsheet-like at each cell but globally
|
||||
the connections between the cells must curve when flattened
|
||||
to a 2-D plane.
|
||||
</figure>
|
||||
|
||||
<p>
|
||||
In ZigZag, all data is in cells, much like a spreadsheet.
|
||||
The only important difference is that while a spreadsheet enforces
|
||||
a two- (or possibly three-) -dimensional lattice structure
|
||||
between the cells, ZigZag allows the cells to be connected in
|
||||
a much freer way.
|
||||
|
||||
<p>
|
||||
First of all, the number of dimensions is unlimited.
|
||||
Like on a spreadsheet, a dimension is still structured so that
|
||||
each cell may have one predecessor and one successor on each
|
||||
dimension, and the converse relationship "A is B's successor
|
||||
implies B is A's predecessor" holds.
|
||||
However, there are no restrictions <EM>between</EM> the dimensions
|
||||
for the connections: for example, in the figure,
|
||||
the cell A is located two steps right and three steps up
|
||||
from itself (right = <CODE>d.1</CODE>, down = <CODE>d.2</CODE>).
|
||||
|
||||
<p>
|
||||
To manage the potentially infinite number of dimensions,
|
||||
they are referred to with descriptive strings.
|
||||
The most commonly used dimensions are the three general-purpose
|
||||
dimensions <CODE>d.1</CODE>,
|
||||
<CODE>d.2</CODE> and <CODE>d.3</CODE> and then <CODE>d.clone</CODE>,
|
||||
used for logical duplication of cells and <CODE>d.cursor</CODE>, used
|
||||
for pointing. These uses are mostly a matter of convention.
|
||||
|
||||
<p>
|
||||
The strength of using dimensions instead of names (as in filenames)
|
||||
or numbers (as in pointers or references) to refer to other
|
||||
information is that all references are two-directional.
|
||||
This is an important feature since a large fraction of programming
|
||||
errors in languages such as HTML or C++ have to
|
||||
do with referring to things
|
||||
that are no longer there: on WWW, moving a page or changing the
|
||||
name of an anchor on a page breaks all links to that page or anchor,
|
||||
because the links are strings, naming the previous location.
|
||||
In C++, the references are pointers, i.e. numbers representing
|
||||
memory addresses: if the object being referred to is not any
|
||||
more at the given address, the program crashes.
|
||||
ZigZag introduces the concept of connection
|
||||
on a primitive level and obviates the need for making new systems
|
||||
of referencing for each new program. XXX
|
||||
|
||||
<p>
|
||||
There are many different possible structures with similar
|
||||
capabilities. What makes ZigZag special is the beautiful tradeoff
|
||||
between simplicity and complexity: each cell's neighborhood
|
||||
is limited by the two-neighbours-per-dimension rule but further
|
||||
away the cells can be connected to each other in a free fashion.
|
||||
|
||||
<h3> Rasters and operations: the default UI </h3>
|
||||
|
||||
<p>
|
||||
Given the complexity of the structure, it is usually impossible
|
||||
to see it all at once. Focus&context methods (XXXREF) are
|
||||
useful for simple visualizations: two or more dimensions are
|
||||
chosen, and the cells near the user's focus (cursor) are
|
||||
laid flat on the screen using those dimensions, as far as is
|
||||
possible within the limits of the structure. Since the structure
|
||||
locally resembles a spreadsheet, this visualization is extremely
|
||||
navigable, especially with animation between the motions.
|
||||
|
||||
<p>
|
||||
There are several different possibilities for choosing which cells
|
||||
to place where, called rastersXXX.
|
||||
The vanishing raster, for example, renders all cells
|
||||
up to a given number of steps from the cursor, while
|
||||
gradually reducing the size of the cells. This gives the user a good
|
||||
picture of what is happening slightly further along in the structure
|
||||
and uses the depth perception cues of the human eye to a great
|
||||
advantage. There are also rasters based on rectangular grids,
|
||||
with the two most important ones being the vertical and horizontal,
|
||||
which
|
||||
Examples of these rasters showing a looping structure are shown in
|
||||
XXX.
|
||||
|
||||
<p>
|
||||
Motion is performed through the keyboard or the mouse.
|
||||
Many simple edit operations take directions as parameters,
|
||||
so for instance, creating a new cell leftwards from the current
|
||||
cursor is achieved by pressing <KBD>n</KBD> and then the same
|
||||
key that normally moves the cursor left (<KBD>l</KBD>).
|
||||
|
||||
|
||||
<p>
|
||||
The basic operations include connecting and disconnecting cells,
|
||||
moving the cursor, rotating the view (choosing different dimensions
|
||||
to show on the X, Y and Z axes) and modifying the text in a cell.
|
||||
There are also some more complicated operations that are especially
|
||||
useful, such as hop, an example of which is shown in XXX.
|
||||
|
||||
<h3> Totality of the structure </h3>
|
||||
|
||||
<p>
|
||||
Currently, computers are complicated and messy.
|
||||
Application code has to worry about the structure of data on
|
||||
disk, the structure of data in memory, and the structure of data
|
||||
held by the operating and windowing systems.
|
||||
All these are usually different and cause applications to
|
||||
translate between each other, making the application overtly
|
||||
complicated.
|
||||
|
||||
<p>
|
||||
ZigZag represents all this data in the structure: the structure is
|
||||
persistent and unified.
|
||||
Just as with virtual memory,
|
||||
the program does not need to care whether a cell
|
||||
is in memory or on disk. The logical structure
|
||||
is the same. Of course, to retain an acceptable level of performance,
|
||||
solutions such as transient cells or saving only every <i>n</i>
|
||||
seconds have to be devised but these are optimizations rather
|
||||
than fundamental structure of the application.
|
||||
|
||||
<p>
|
||||
The unification of the structure is more difficult to explain
|
||||
since it reflects a completely different mindset from the ordinary.
|
||||
Ideally, the lower-level code which takes the structure and renders
|
||||
it on screen will have to know only one cell.
|
||||
From this cell, it uses the structure to find what windows are
|
||||
where, which cells to show
|
||||
in the centers (via <CODE>d.cursor</CODE>) and which dimensions
|
||||
to raster along (also via the structure).
|
||||
|
||||
<p>
|
||||
This greatly simplifies programming in ZigZag since <em>all</em>
|
||||
operations can be expressed as alterations to the structure.
|
||||
For example, when the user presses a key to move the cursor left,
|
||||
what happens is that the callback code looks through the structure
|
||||
to see which dimension is currently "left-right", then looks
|
||||
for the cursor and the cell leftwards of it. Finally, the code
|
||||
connects that cell in the structure so that it will thereafter
|
||||
be interpreted as the cursor.
|
||||
|
||||
<p>
|
||||
There are many other benefits as well: since all operations
|
||||
are in the structure, scripting becomes trivial since everything
|
||||
can be achieved simply through modifying the structure.
|
||||
|
||||
<p>
|
||||
Unification of data is not a new idea: the original
|
||||
UNIX philosophy of "everything is a file" contains some of the same
|
||||
spirit. However, the UNIX APIs still force the loading of files
|
||||
into memory into a different representation; in ZigZag, the cell
|
||||
structure is all you need.
|
||||
|
||||
<p>
|
||||
Another previous version of the same basic idea is the
|
||||
popular Model-View-Controller paradigm (XXXREF), where a program
|
||||
with a user interface is split into a model and
|
||||
user interfaces (views and controllers) to that model.
|
||||
This structure makes it simple to add a new view to the same data.
|
||||
ZigZag takes this approach to new heights by providing a
|
||||
<em>global</em> model which all features of the visible display
|
||||
use.
|
||||
|
||||
<h3> Permascrolls </h3>
|
||||
|
||||
<p>
|
||||
Permascrolls are a concept that originated in Xanadu88 (XXX???).
|
||||
The essential idea is that whenever a piece of <DFN>fluid media</DFN>
|
||||
(i.e. text, audio, video, image) enters the system, it is assigned
|
||||
a permanent identifier. After that, all references to that
|
||||
piece of media go through that identifier so that it is easy to find
|
||||
where a particular piece of text has been cut&pasted to, for example.
|
||||
|
||||
<p>
|
||||
Permascrolls seem to be the most easily misunderstood part of
|
||||
Xanadu88 because with today's web, confusing the physical
|
||||
location and the identity of a document is easy. A permascroll
|
||||
does <strong>not</strong> mean that all information should only be
|
||||
stored in one place. It is not an URL, but more like an URI: it
|
||||
is an identifier which is known to map to the same information
|
||||
always. It is also more fine-grained than run-of-the-mill W3C
|
||||
URIs, as it allows referencing any subset of the original up to
|
||||
an atomic level.
|
||||
Most commonly it is not single atoms in the permascroll that
|
||||
are referred to; rather, the reference type is
|
||||
<DFN>span</DFN>, which is a reference to a single contiguous piece
|
||||
of a permascroll.
|
||||
|
||||
<p> XXX SELITÄ VSTREAM HETI
|
||||
In the permascroll paradigm, a particular version
|
||||
of a "document" is represented as a vstream: a list
|
||||
of spans. Editing a document then consists of adding a new
|
||||
span, splitting existing spans, deleting existing spans and
|
||||
rearranging spans.
|
||||
|
||||
<figure img="permascroll.png" width="250px">
|
||||
Two different versions of a document using vstreams
|
||||
and permascrolls. The second version is produced from the
|
||||
first by a rearrangement and an insertion.
|
||||
When comparing the two versions side by side, it is
|
||||
easy to determine
|
||||
which parts are the same and simply have been rearranged
|
||||
by comparing the references to the permascroll.
|
||||
</figure>
|
||||
|
||||
<p>
|
||||
ZigZag supports permascolls by allowing a cell to contain
|
||||
a <DFN>span</DFN> (a reference to a single
|
||||
contiguous piece of the permascroll).
|
||||
A rank of cells on a dimension (usually <CODE>d.2</CODE>)
|
||||
can then be interpreted
|
||||
(see next section) as a virtual text (or other media) stream.
|
||||
|
||||
<p>
|
||||
To reiterate, a permascroll is not a place:
|
||||
it is a state of mind, in which you keep track of what all
|
||||
information copied or cut&pasted originally was.
|
||||
For example, it is planned that in a future version of GZigZag
|
||||
the user will be able to send an email with some cells
|
||||
as well as the parts of the permascroll that is referred to
|
||||
by those cells. The recipient's computer can then
|
||||
store those pieces of the permascroll and notice if any other
|
||||
references to them exist.
|
||||
In fact, permascrolls are excellent candidates for caching since
|
||||
the identifiers to the content are indeed permanent, unlike
|
||||
on WWW where the content of a cached URL can change at any time.
|
||||
|
||||
|
||||
<p>
|
||||
Another application where permascrolls show their power is
|
||||
comparison: most utilities used for text comparison (e.g. the
|
||||
unix <CODE>diff</CODE> utility) do a reasonably good job if the
|
||||
user is simply adding or removing or changing small pieces of
|
||||
text. However, such tools have great troubles with rearrangement,
|
||||
exactly because of the lacking text model where only the content,
|
||||
not the origin is stored. Thus, a rearrangement usually shows
|
||||
up as large insertions and deletions, which is actually exactly
|
||||
what it is, in the primitive text model.
|
||||
|
||||
<p>
|
||||
It is possible to overcome some of this problem by writing
|
||||
more and more refined algorithms for finding similar texts but
|
||||
once we get to phrase-level elements, they become useless since
|
||||
the same phrases can occur again and again in a document.
|
||||
|
||||
<p>
|
||||
With permascrolls, rearranging a text file is not about moving
|
||||
the text content - it's about moving <em>pointers</em> to the
|
||||
content. So two different revisions, the latter of which has
|
||||
been rearranged, still point to the same spans of text in the
|
||||
permascroll. Now, visualizing the differences becomes easy:
|
||||
all that is necessary is to point out to the user which pieces
|
||||
of text are stored in the same place in the permascroll.
|
||||
See Figure XXX below, where this is demonstrated.
|
||||
|
||||
<p>
|
||||
This feature may seem like unimportant but in projects with more
|
||||
than one worker and much rearrangement of the manuscript
|
||||
it can be truly invaluable for finding where a certain part of the
|
||||
previous version of the manuscript ended up.
|
||||
|
||||
<h3> Alternative visualizations: applitudes </h3>
|
||||
|
||||
<p>
|
||||
Although interesting, the above structure and visualizations
|
||||
would fit most applications rather poorly. However, given the
|
||||
basic ZZ structure it is simple to define new visualizations.
|
||||
|
||||
<p>
|
||||
Taken together, a visualization and operations are referred
|
||||
to as an <dfn>applitude</dfn>,
|
||||
as opposed to the traditional term application
|
||||
since all the data is still in the same structure and other
|
||||
operations can be used to edit this data and these operations
|
||||
can be used to edit other data.
|
||||
|
||||
<p>
|
||||
For example, a vstream is a kind of an applitude: there is a
|
||||
clearly defined internal structure and special operations for
|
||||
the vstream for inserting and deleting characters.
|
||||
There is also a good visualization of a text vstream: simply
|
||||
the characters in a paragraph (formatting capabilities will
|
||||
be added later).
|
||||
The default cell-based visualization and the natural vstream
|
||||
visualization for a small piece of text is shown in XXX.
|
||||
Note how the colored cursor is shown in both panes.
|
||||
|
||||
<p>
|
||||
The interesting thing about applitudes is that they can be designed
|
||||
to be connected to each other in a more fine-grained fashion than
|
||||
current embedding frameworks such as Bonobo, KParts, or OLE/COM.
|
||||
|
||||
|
||||
|
||||
|
||||
<h2>Some Textual Applitudes of ZigZag</h2>
|
||||
|
||||
<p>
|
||||
In this section, we'll look at some functioning applitudes.
|
||||
As explained in the previous section, the strength of ZigZag lies in that
|
||||
all these applitudes can be used together fairly easily since all the data
|
||||
is stored openly in the ZZ structure.
|
||||
|
||||
<p>
|
||||
One important function that GZigZag provides for all applitudes is
|
||||
<em>animation</em>. This works by associating a cell with all "things"
|
||||
that are rendered on the screen.
|
||||
When two "things" in subsequent keyframes (i.e. the fully rastered frames)
|
||||
are associated with each other, the system generates as many interpolated
|
||||
frames between them as the speed of the host machine allows.
|
||||
The time between keyframes is estimated from the interval between
|
||||
the user's keystrokes: the system attempts to be ready 100ms before
|
||||
the user strikes the next key. This gives the system a fluid, responsive
|
||||
feel while allowing smooth, slow animation if the user is moving slower.
|
||||
|
||||
<p>
|
||||
An example of such animation can be found in XXX ANIMATED GIF ON
|
||||
GZIGZAG PAGES
|
||||
|
||||
<h3>Text cloud - <strong>real</strong> cut&paste</h3>
|
||||
|
||||
<p>
|
||||
One of the points Nelson has made in several talks (XXX??? on paper?)
|
||||
is that the term "cut&paste", as used in the computer field, is
|
||||
a really bad choice of words. Originally cut&paste meant physically
|
||||
cutting a text into pieces, rearranging the pieces and glueing
|
||||
them together. This seems a little similar to what the computers
|
||||
do.
|
||||
|
||||
<p>
|
||||
However, there is a crucial difference: in physical cut&paste,
|
||||
the text can be cut up into as many pieces as desired;
|
||||
all the pieces are visible all the time; the pieces can be slowly
|
||||
rearranged into the optimum order in a parallel fashion.
|
||||
Indeed, when the text is cut up, the actual <em>data model</em>
|
||||
of the text
|
||||
is changed from the single text stream to a cloud of text
|
||||
fragments.
|
||||
|
||||
<p>
|
||||
Most current computer programs (XXX Exceptions?) force the user
|
||||
to stay within the formal one-stream text model all the time during
|
||||
editing, except for a single piece of text cut onto the "clipboard",
|
||||
which is not seen.
|
||||
This is why several people (REF: private communication) seem
|
||||
to use a second window next to the main one to hold fragments.
|
||||
This, of course, has several disadvantages: the fragments are
|
||||
stored separately from the main body of text, the fragments still
|
||||
have to be stored in the one-stream text model and the system is
|
||||
rather clumsy. Of course, some people are able to write near-perfect
|
||||
prose in near-perfect order.
|
||||
|
||||
<p>
|
||||
One of the interesting differences between this system
|
||||
and the dominant paradigm is the way of selecting text.
|
||||
In most current systems, selecting text is performed by
|
||||
painting, i.e. pressing the mouse button at one end of the
|
||||
span being selected and releasing the mouse button at
|
||||
the other end. In the TextCloud demo, text is never really
|
||||
"selected" in the same way: instead, the user can make any
|
||||
number of <dfn>cuts</dfn> into the document using the right
|
||||
mouse button. Then, when the user presses the left mouse button
|
||||
on some text and drags, the text is separated at the neighbouring
|
||||
cuts to allow the user move a single piece of text.
|
||||
|
||||
<p>
|
||||
Already Nelson's original mockup pictures about Xanadu
|
||||
(see XXX (pic on WWW))
|
||||
include transpointing windows, i.e. windows which show the
|
||||
connections of their respective contents graphically.
|
||||
These connections can be either transclusions or links. In this
|
||||
article, we concentrate on transclusions.
|
||||
|
||||
<p>
|
||||
GZigZag is probably (XXX???) the first system to implement such
|
||||
transpointing with beams: an earlier Xanadu client Pyxi by XXX
|
||||
shows transclusions by colors but does not do transpointing.
|
||||
The TextCloud applitude is a good place to see the transpointing beams
|
||||
in action: simply copying (i.e. dragging with Shift-MouseButton1 instead
|
||||
of just MouseButton1) a vstream creates a transclusion and the
|
||||
beam appears. Then, when editing one (or both) of the streams by
|
||||
cutting&pasting text the beams remain
|
||||
connected; this is because the beams are really connected to the actual
|
||||
text content, not just the external object.
|
||||
|
||||
<p>
|
||||
The TextCloud is a simple model and its current implementation clear
|
||||
limitations: all text must be stored in this one area and the size
|
||||
of the text cannot be changed.
|
||||
Also, it does not interface well with the other parts of the system.
|
||||
It is simply one step on the way towards the full system, in order
|
||||
to test one user interface aspect of it.
|
||||
|
||||
|
||||
<h3>Editing longer documents using cells</h3>
|
||||
|
||||
<p>
|
||||
A different way for editing longer documents is through putting
|
||||
vstream fragments of the documents in ZZ cells which are then rendered
|
||||
in a raster. All the structural capabilities of ZigZag are
|
||||
then in use for rearranging the pieces.
|
||||
|
||||
<p>
|
||||
This being ZigZag, note that "putting fragments in ZZ cells"
|
||||
does not a literal inclusion but an <i>interpreted inclusion</i>:
|
||||
the view has a special raster which knows how to look for
|
||||
the vstream to include in a cell.
|
||||
When the space is being rastered,
|
||||
|
||||
<p>
|
||||
Unfortunately this demo is not yet finished so we cannot offer
|
||||
a screenshot.
|
||||
|
||||
<h3>Hypertext without lexias (XXX?)</h3>
|
||||
|
||||
<p>
|
||||
Hypertext has come to mean "WWW-like" in many places:
|
||||
a paradigm where the user is presented with one lexiXXX,
|
||||
performs a selection, for example clicking with the mouse,
|
||||
and is taken to another lexiXXX.
|
||||
|
||||
<p>
|
||||
GZigZag makes it possible to easily create a wealth of flexible
|
||||
visualizations that do not use such fixed screenfuls of text.
|
||||
This is because GZigZag is built in a modular fashion and makes
|
||||
it easy to describe a new visualization.
|
||||
|
||||
<p>
|
||||
For example, let's start with a text model that contains
|
||||
simply paragraphs of text, one after another.
|
||||
|
||||
|
||||
<h3>Email or forums with coordinates</h3>
|
||||
|
||||
<p>
|
||||
In this section, we come once again to a problem which
|
||||
does not exist for small data sets. If there are
|
||||
only 10 messages in
|
||||
a mailbox, it does not matter in the least how incredibly
|
||||
bad the mail reading program is:
|
||||
humans can still manage since they can remember
|
||||
and overlay the true structure on top of the rigid and unnatural
|
||||
structure imposed
|
||||
by the mail reader program.
|
||||
|
||||
<p>
|
||||
However, consider the linux-kernel email list or
|
||||
corresponding high-volume newsgroups on the usenet.
|
||||
Most programs for reading news or email are based on the assumption
|
||||
that the reader wants to read all or most of the incoming messages -
|
||||
a natural assumption stemming from the original volume of the forums.
|
||||
However, with time the number of messages in a forum has grown
|
||||
unmanageably yet programs mostly offer only rigid pre-selection systems
|
||||
such as killfiles which remove all messages with a given subject
|
||||
or sender from the view.
|
||||
|
||||
|
||||
<p>
|
||||
ZigZag and FloatingWorld provide an interesting alternative
|
||||
which we have so far had time to only scratch the surface of.
|
||||
When a mailbox or a newsgroup is incorporated into the structure
|
||||
correctly, it is simple to write interesting visualizations
|
||||
that show some of the emails.
|
||||
|
||||
<p>
|
||||
The structure underlying the email applitude is described in
|
||||
FIGUREXXX.
|
||||
|
||||
<p>
|
||||
The first, simplest visualization FIGUREXXX
|
||||
is simply the traditional
|
||||
mailbox visualization, offered by many programs such as Pine, XXX.
|
||||
This simply shows some of the most relevant header fields of
|
||||
messages on each line, arranged vertically in the mailbox order.
|
||||
Already here ZigZag has several tricks up its sleeve. For example,
|
||||
a message may be stored in several "folders" (lists), either
|
||||
by using different dimensions for different folders or by
|
||||
cloning the headcell of the
|
||||
message onto different ranks on the same dimension.
|
||||
Another trick here is that it is easy to see which folders
|
||||
a given message has been connected to, since all connections are
|
||||
two-directional. This is an advantage caused by the fact that ZZ
|
||||
considers the message to be an entity rather than a stream of
|
||||
characters that can be copied but has no <em>identity</em>
|
||||
(like emails in normal email folder files).
|
||||
|
||||
<p>
|
||||
Sorting the emails is of course possible, either by presorting
|
||||
and making a rank of them and using that
|
||||
or by post-sorting at each time they are shown.
|
||||
For sorting, ZZ offers an interesting user interface: when the
|
||||
user moves the active cell <em>horizontally</em>, the list of
|
||||
mails is shown sorted according to that cell.
|
||||
XXX Mailboxes, many folders per email!!!!!
|
||||
XXX Good argument for postsorting or cached postsorting.
|
||||
XXX Notifications
|
||||
|
||||
<p>
|
||||
|
||||
<p>
|
||||
Now, one interesting thing that ZZ offers is multiple windows
|
||||
with different views whose cursors are bound together (using
|
||||
the cursor-cargo mechanism; see the ZZ Spec XXXREF).
|
||||
All the views above have one "active" cell. We can have several
|
||||
useful views visible at the same time, which stay in lockstep with
|
||||
each other.
|
||||
|
||||
|
||||
|
||||
<p>
|
||||
The FloatingWorld model offers an alternative: messages
|
||||
or icons of messages can be shown in a two- or three-dimensional
|
||||
coordinate system.
|
||||
|
||||
<p>
|
||||
Such a system is trivial to implement in a general fashion
|
||||
using ZigZag since the homogeneous structure makes it simple
|
||||
to specify paths to obtain coordinates through, whereas if
|
||||
using a traditional programming language, it would be all too easy
|
||||
to restrict the world of possible coordinates to some set
|
||||
that is easily specifiable in the structure that was chosen.
|
||||
|
||||
<p>
|
||||
Additionally, normal email programs or HyperMail (XXXREF)
|
||||
-like HTML indexers treat the messages as their own, making it
|
||||
almost impossible to link the discussions into the places where
|
||||
they would belong: for example, linking the discussion leading up
|
||||
to a particular decision in a standard (say XHTML) into the place
|
||||
in the standard would be an invaluable aid to those trying to
|
||||
understand afterwards how something is supposed to work.
|
||||
|
||||
<p>
|
||||
Consider, for instance, a document such as the Kernel Traffic
|
||||
weekly newsletter (XXXREF) which summarizes the main discussion threads
|
||||
on the Linux-Kernel mailing list that week.
|
||||
|
||||
XXX transclusions, etc.
|
||||
|
||||
<h3>Editing hyperliterature with nodes</h3>
|
||||
<p>
|
||||
- editing trad. hyperliterature easier: visualize the STRUCTURE of
|
||||
the whole work, then rendered into HTML
|
||||
|
||||
<h3>Scientific publishing using Xanadu hypertext</h3>
|
||||
|
||||
<p>
|
||||
A long-known problem in scientific publishing on paper media is
|
||||
that bibliographic references are always backwards in time, while
|
||||
it would often be more interesting for the reader to
|
||||
know the future references, i.e. either articles that refer
|
||||
to the current one or articles that the author has deemed
|
||||
interesting enough to refer to at a later date from publication.
|
||||
|
||||
<p>
|
||||
Now, in the Xanadu model, quoting is equivalent to linking because
|
||||
of transclusions.
|
||||
|
||||
<p>
|
||||
Transclusions may seem foreign as an instrument of quoting and
|
||||
responding to a selected portion of an article. However, they
|
||||
are actually quite close to another widely used paradigm: quoting
|
||||
when replying to an email. The only addition here is that
|
||||
the quoted parts (which are somehow visually indicated) are
|
||||
not copies but transclusions from the original article. Because of
|
||||
this, they are actively connected to the originals in an implicit
|
||||
two-way link.
|
||||
|
||||
<p>
|
||||
The system of moderation used on sites such as <code>slashdot.org</code>
|
||||
is surprisingly similar to the scientific refereeing process.
|
||||
The privilege of moderating other users' comments is granted
|
||||
to established members of the community (members whose previous
|
||||
moderations have been approved by other members), the process
|
||||
is anonymous and determines on whether users get to see the comment.
|
||||
However, there are important differences:
|
||||
<ul>
|
||||
<li> The moderation is not "accept/reject" but rather
|
||||
"leave as is/ increase score/ decrease score".
|
||||
<li> Comments are not deleted even if they have a low score;
|
||||
users browsing the site can set their comment limit
|
||||
themselves to determine what minimum rating for comments
|
||||
they wish to see.
|
||||
<li> A user has a default score based on his/her earlier
|
||||
success in posting comments
|
||||
<li> Comments are usually short notices on
|
||||
</ul>
|
||||
Upon consideration, some of these points are quite applicable
|
||||
to scientific publishing as well. Specifically, the "letters
|
||||
to the editor" section of scientific journals seems to be the
|
||||
closest that print journals can come to this kind of convenience.
|
||||
|
||||
<p>
|
||||
Indeed, this sort of publishing system could create a far more
|
||||
interactive scientific <em>discourse</em>.
|
||||
For example, a user can choose which links he wishes to see
|
||||
when reading an article: refereed links, all links, links by certain
|
||||
persons etc.
|
||||
|
||||
|
||||
|
||||
|
||||
<h2>The Code</h2>
|
||||
|
||||
<p>
|
||||
GZigZag, which is the program that is shown in all of the screenshots
|
||||
in this article, is free software. It is distributed under the FSF's
|
||||
Lesser General Public License (LGPL) and is available on SourceForge.
|
||||
|
||||
In the language of the free software community, "Patches accepted".
|
||||
|
||||
<h2>Conclusions</h2>
|
||||
<p>
|
||||
|
||||
<h2>Acknowledgements</h2>
|
||||
<p>
|
||||
|
||||
<h2>References</h2>
|
||||
<p>
|
||||
http://www.acm.org/cacm/AUG96/antimac.htm
|
||||
|
||||
<h2>Glossary</h2>
|
||||
|
||||
<p>
|
||||
This article uses many terms that are most likely unfamiliar to the reader.
|
||||
We attempt to summarize the most important ones below.
|
||||
|
||||
<hr>
|
||||
<dl>
|
||||
<dt>ZigZag structure / space
|
||||
<dd> A simple structure, based on <i>cells</i> and <i>dimensions</i>
|
||||
which the user is able to easily shape into any desired
|
||||
structure. All interrelated pieces of information can be
|
||||
close to each other on some dimension.
|
||||
<dt>cell
|
||||
<dd> The smallest unit of information in ZigZag.
|
||||
A cell can contain a text string or
|
||||
a single span in a permascroll; the separation is
|
||||
because a text string can be edited but a span can only
|
||||
be lengthened or shortened: no characters can be
|
||||
inserted. Cells are connected to each other along
|
||||
dimensions.
|
||||
<dt>dimension
|
||||
<dd> Connecting cells along dimensions is what ZigZag is
|
||||
about. Locally, dimensions work just like on a spreadsheet:
|
||||
each cell can be connected to one cell in the positive
|
||||
direction and to one cell in the negative direction
|
||||
along each dimension. However, there are no global constraints
|
||||
between the dimensions.
|
||||
|
||||
<dt>rank
|
||||
<dd> A rank on a dimension D is simply a set of cells that are
|
||||
connected to each other on D. A given cell can only
|
||||
be on one rank on a given dimension.
|
||||
|
||||
<dt>raster
|
||||
<dd> A simple visualization of the ZZ structure.
|
||||
A raster is given a cell to place in the center of
|
||||
the view and a set of dimensions chosen for the coordinate
|
||||
axes X, Y and possibly Z, and it starts at the center cell
|
||||
and places other cells on the screen according to simple
|
||||
rules.
|
||||
There are several different rasters.
|
||||
</dl>
|
||||
<hr>
|
||||
<dl>
|
||||
|
||||
<dt>FloatingWorld
|
||||
<dd> Ted Nelson's design built on top of ZigZag structure,
|
||||
based on <i>flobs</i>.
|
||||
<dt>flob
|
||||
<dd> A multi-dimensional flying object. That is, an entity
|
||||
representing something that may have any number of
|
||||
<i>flob coordinates</i>. For example, an email's sender is one
|
||||
flob coordinate, its subject another.
|
||||
|
||||
</dl>
|
||||
<hr>
|
||||
<dl>
|
||||
|
||||
|
||||
<dt>Xanadu88
|
||||
<dd> A hypertext system, finished in 1988, which works by
|
||||
stable <i>fluid media</i> content instead of URL-like pointers.
|
||||
<dt>fluid media
|
||||
<dd> Any media types that can be subdivided.
|
||||
Text, audio, video, images.
|
||||
<dt>permascroll
|
||||
<dd> A storage philosophy for fluid media where
|
||||
each smallest unit (e.g. character of text)
|
||||
is assigned a permanent identifier when
|
||||
it first enters the system. Of course,
|
||||
references to the smallest units usually happen
|
||||
through <i>span</i>s for efficiency.
|
||||
<dt>span
|
||||
<dd> A (reference to a) contiguous section of the permascroll.
|
||||
<dt>vstream
|
||||
<dd> A list of spans that describe a virtual stream of
|
||||
fluid media. A "document" or one version of a document.
|
||||
Modifying a document does not modify the permascroll, except
|
||||
by appending new inserted characters. Instead, the spans
|
||||
of the vstream are modified: split apart, new spans
|
||||
inserted etc.
|
||||
<dt>transclusion
|
||||
<dd> The inclusion of the same material in a permascroll in
|
||||
two different documents. One of the fundamentals of the Xanadu88
|
||||
model is that it is efficient to search for transclusions
|
||||
of a given span.
|
||||
<dt>transpointing windows
|
||||
<dd> Windows on a computer screen that show the connections or
|
||||
transclusions between each other.
|
||||
|
||||
</dl>
|
||||
|
||||
<h2>SCRATCH</h2>
|
||||
|
||||
<p>
|
||||
<b>
|
||||
This section contains rejected pieces of text that may still
|
||||
have some interest.</b>
|
||||
|
||||
<p>
|
||||
Naturally, if desired, dimensions can be used to construct
|
||||
systems analogous to files and directories: for instance,
|
||||
a number of cells going down <code>d.2</code> can contain names
|
||||
and these cells are connected on some dimension to the content
|
||||
for that "file".
|
||||
|
||||
<p>
|
||||
This is somewhat analogous
|
||||
to the hyperbolic visualization
|
||||
for graphs (XXXREF): hyperbolic space also looks locally like
|
||||
Euclidean space but there is more "room" because the correspondence
|
||||
to Euclidean space does not hold over distances.
|
||||
An interesting similarity between the two is the volume of balls:
|
||||
in hyperbolic space, the volume enclosed in a ball grows exponentially
|
||||
with the radius and the same is true for ZigZag - <em>if</em>
|
||||
desired; ZigZag cells can also be arranged in a less complex
|
||||
fashion where the growth of the volume of balls is more restricted.
|
||||
|
||||
<hr>
|
||||
</substdims>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
<!--
|
||||
vim: set syntax=html :
|
||||
-->
|
||||
|
||||
Reference in New Issue
Block a user