4. The Leibniz TLSI: A secondary macro programming interface and universal ASCII
User Interface Shell for Hypermedia
CALISCE 96 : Donostia-San Sebastian, Spain, 29-31 July,
1996
Dr. Andreas Goppold
Postf. 2060, 89010 Ulm, Germany
Tel. ++49 +731 921-6931
Fax: (Goppold:) +731 501-999
http://www.noologie.de/symbol05.htm
(URL)
4.1. List of abbreviations
ASCII 7-bit code containing the basic American Standard
alphanumeric codes.
CSCW Computer Supported Cooperative Work.
HM Hypermedia
MM Multimedia.
OEM Makes local configuration and adaptations of standardized
products for special
user communities. Literal meaning: Original Equipment
Manufacturer.
OO Object orientation
OOP Object Orientated Programming
SW Software
TLSI Token List Subroutine Interpreter.
4.2. Abstract
The Leibniz TLSI is a simple and flexible programming
interface that can be added as macro programmable user shell to existing C
compatible applications to provide ASCII readable definition files for user
interfaces, menu layouts, key bindings, and help information, as well as
site-local and individual configurations. It thus serves as secondary
programming facility or End User Programming Language (EUPL). In courseware
applications, it provides programming access for local adaptation by teachers
and students. The Inter-Actor technology of the system provides a powerful
user-interface metaphor similar to a mechanical power tool for the end-user to
experiment with available functions and build his own applications. The TLSI
technology used is similar to the Java Virtual Machine (VM) principle and can be
integrated in the Java environment.
4.3. Short Version of the Paper
4.3.1. Challenges of Multimedia Software
Development
There are several challenges posed in Multimedia (MM) software
development projects: 1) The production environment: The need to integrate an
inhomogenous range of skills: programmers, designers, documenters, artists,
media technicians, etc. Each of these groups have their specific work and
communication procedures. 2) The wide range and demands of application media. 3)
The inhomogenous user community that is to be served with the multimedia
applications created. The market is in full flux and the main driving force is
the prospect of opening up ever new customer bases that have not been accessible
with the existing technology so far. Systems that can from the beginning be
designed to accomodate very different user groups will have a strong margin of
profitability. In the education field, a special customer group are intermediary
courseware developers who need very flexible construction sets for their work.
Pre-fabricated, frozen-structure systems as they dominate the market today,
don't serve the needs of this group. Another potential user group that is
presently hard put to use the interfaces of current systems are people with
disabilities who don't have the hand-eye motor control needed to operate the
mouse-icon interface. This paper describes an approach to systems construction
that provides a simple, robust, flexible, and adaptible base, which can be
library-linked to existing C compatible system, and provides a standard common
ASCII programmable interface.
4.3.2. The Leibniz TLSI Virtual
Machine
The technical principle of the Leibniz TLSI is based on
the VM (Virtual Machine) principle, similar to the one used in Java® (and
compatible with it). Similar to SUN's system philosophy, it is the ultimately
open system: The TLSI system was designed on the base of a minimal kernel
system of about 50 K bytes, to be completely open and extendable
in all ways. Its power rests on the ability to create special-purpose
interpreters for special applications on the fly, in the field, and
even by the end-user. A similar, but not as general and flexible,
approach is the popular EMACS editor which implements its functionality in a
special interpreter. The minimal run time kernel can be linked on top of any C
compatible system. This allows to use the TLSI as a re-vectorable and
re-programmable interactive user interface on top of any existing software (the
host system). The minimal kernel alone provides the equivalent of an interactive
low-level debug monitor system that allows to test and execute any of the
functionality of the host system that one desires interactive access to. Any
routine can at any time be called separately from the interactive user shell. By
way of its macro programmability, any higher assembly of a set of basic host
functions can be constructed on the fly.
4.3.3. EUPL: User Programming of the
Macro System
The TLSI approach offers a very easy way to achieve a
secondary programming facility or End User Programming Language (EUPL). The
developer of the basic MM functionality (the MM provider) can use a standard
compiler technology or an authoring system to provide the tool set which the
user (or secondary programmer) can then extend into any direction he deems
necessary. All secondary programming can be done with the macro language of the
TLSI. The TLSI can provide a large functionality to the user without having to
include the original authoring system or the compiler package, who is also
relieved from the need to learn the conventions of the authoring system, he
needs only to concentrate on the functionality that is offered by the specific
TLSI interface which the MM provider supplies. This approach allows a
comfortable division of expertise and responsibilities between the different
groups involved in the authoring process of a MM system. The software engineers
need only to deal with their compiler tools and SW methodology to provide a rich
tool set of TLSI tools for secondary, or applications developers to build their
systems upon.
4.3.4. UIL: User Interface Language,
Field Configuration, Integrated Help
The TLSI principle allows the construction of a very simple
and effective common interface shell on top of different software systems, thus
providing a generalized User Interface Language (UIL) that is adaptdable to
specific user profiles. It allows to create flexible keyboard and menu layouts.
All the functionality of the system is configured in ASCII readable files, that
can be changed and re-configured with any text editor, at any time, even while
the system is running, without any re-compile or otherwise low-level system
interaction. Ideally the whole menu structure of the system resides in a single
file, giving also a transparent access path to the logical structure of the
whole system. In the Leibniz Hypertext Software Development System, an
integrated hypertext function connects every menu with an associated help text
residing in an ASCII readable text file that can be accessed in hypertext
manner.
4.3.5. Factors of the Optimal Rapid
Prototyping Process
In the Leibniz TLSI environment, special focus was laid on
maximum production speed in the rapid prototyping environment. These factors are
essential: 1) Archive: Access to existing large libraries of functions.
This requires optimization and structuring of a hypertext data base. Different
access hierarchies must be possible for the different user groups who have
different views of the system. Quick overview functions are available through a
combination of hypertext with special folding method implemented in the system
editor. The principle is: overview combined with detail view results in
perspective. 2) Constructor: Must allow overloading and modification of
functions without recompile of the system. 3) Testing: Flexible and
powerful testing environment. Allow to generate standard input scripts that can
be used on whole classes of functions. The testing scripts can also be derived
from the interface declarations in the source code. All testing inputs can be
logged, for reproducible error histories and to generate automated test suites
for further testing sessions. All inputs that the user would perform
interactively can be redirected to script files so that auto demo functions are
readily available.
4.3.6. The Inter-Actor Principle and
Power Tool Metaphor
The development of the Leibniz system resulted in the
Inter-Actor principle, a powerful unified representation and access metaphor for
program functionality that is accessible in all its aspects from the user
interface level. The structure of the Inter-Actor is similar to an object class,
but it provides many extra user interface handles, like a self-display function,
and a standardized experimentation field with test data for a new user who wants
to try out the functionality of the system. For training purposes, all
functionality of the system can be provided with sample data, sample inputs, the
display of the internal state of the Inter-Actor before and after each function,
and a way to change all the state variables individually. The metaphor of the
Power Tool provides a tangible and direct user interface for non-software
engineer users. The TLSI resembles a multi-function power tool, which can be
converted in a minute into a drill, a buzz-saw, a jigsaw, a water pump, a
sander, a grinder, and a screw-driver. Its add-on functionality rests on a
practical functional classification that is hard to describe in a generic
structural class inheritance structure of OO Software. It is achieved through
function frames with re-vectorable executor modules. They can be re-vectored
interactively, on the fly, just like in the machine shop. The functionality can
be implemented on top of available OO technology, if it is possible to interface
with the message structure of the OO processor. How this can be practically
added to an existing authoring system, is not a technical question but mostly a
problem with the closed shop proprietary policy of authoring system vendors.
SUN's Java approach seems to provide the most painless access path.
4.4. Long Version
Multimedia (MM) software development poses challenges for
production tools and applications development that are in many ways more
exacting than conventional software projects:
1) The production environment: Here it is the inhomogenous
range of skills that needs to be coordinated in the development of a multimedia
system: programmers, designers, documenters, artists, media technicians, etc.
Not all of these can be assumed to have a working knowledge of the rules of the
trade of software development. Each of these groups have their respective
procedures and communication interfaces. A software system that implements a
workable CSCW approach for the cooperation of these heterogenous groups would is
a useful, if not essential precondition for a successful project. At least it
should be avoided that an authoring system is tailored only to the tastes and
preferences of just one of the participating groups, as is the case with current
authoring systems.
2) The wide range and demands of application media. The
technology is in full flux, and new media and new formats are appearing every
few months, and it is not possible to establish a fixed set of standards and
procedures in an authoring system and expect it to last for more than half a
year. The built-in obsolescence of MM technology is a boon for the authoring
system manufactures who are assured of a constant revenue flow because the
systems developers are forced to buy the latest version of the authoring system
every year, but it is a catastrophe from the viewpoint of backwards
compatibility and re-usability of investments already made in existing
technologies.
3) Third, and most difficult, is the particularly inhomogenous
user community that is to be served with the multimedia applications created. As
much as the technology, the market is also in full flux and the main driving
force is the prospect of opening up ever new markets and user groups that have
not been accessible with the existing technology so far. This means that systems
that can from the beginning be designed to accomodate very different user groups
will have a strong margin of profitability. This also means that the existing
user interface metaphors, like the mouse-/touchscreen and icon interface prove
to be limited, and limiting. There is a need to have field exchangeable
interface routines, for user groups that either have no table top to position a
mouse on, others who only have a keyboard, and still others who can't or won't
use their hands at all and can do only voice input. Then there is the large, and
potentially decisive group of educational multimedia customers, who want to act
as MM-OEMs. These are school teachers or students who want to make their own
selection of materials to present to their special clientele. They want to buy a
CD with a loosely ordered and assembled set of materials, and they need a
programmable access to the interface to make their customized adaptations of
course materials. The business potential of such half-product applications is
substantially larger than that of huge, frozen-structure systems that need to be
targeted at a very large customer base to be profitable. This requirement is
currently being totally neglected by state-of-the art authoring systems which
encapsulate the presentation structure and user access procedures without
modification possibility. The last potential user group that is presently hard
put to use current interfaces are people with disabilities who don't have the
hand-eye motor control needed to operate the mouse-icon interface. (Fig.
TLSI-1)
Current MM authoring systems are struggling to meet the
various, and sometimes conflicting demands from these diverse areas, and
technology will need considerably more time to mature and deliver a platform
that can accomodate to such demands more easily and flexibly than the available
systems. This paper describes an approach to systems construction that provides
a simple, robust, flexible and adaptible base, which can be library-linked to
existing C compatible systems, and provides a standard common ASCII programmable
interface.
4.4.2. The Leibniz TLSI "Token List
Subroutine Interpreter"
The value of computer systems will not be
determined by how well they can be used in the applications they were designed
for, but how well they can be used in cases that were never thought
of.
(Alan Kay, Scientific American/Spektrum, Okt. 1984)
When Alan Kay made this statement in 1984, no one exept maybe
he himself could have foreseen the rise of MM capable computers ten years later.
In effect, the criterium he stated will be the hallmark of successful MM
authoring systems of the future. It was also the criterium for the development
of the Leibniz TLSI or Token List Subroutine Interpreter project. Its use for MM
applications is but one of a range of (unforseeable) domains that it can be
adopted to.
The technical principle of the Leibniz TLSI is based on
the VM (Virtual Machine) principle, similar to the one used in Java® (and
compatible with it). Similar to SUN's system philosophy, it is the ultimately
open system: The TLSI system was designed on the base of a minimal kernel
system of about 50 K bytes, to be completely open and extendable in all
ways. Its power rests on the ability to create special-purpose
interpreters for special applications on the fly, in the field, and even by
the end-user. Similar, but not as general and flexible, approaches exist
in the popular EMACS editor which implements all its functionality in a special
LISP interpreter, or the AutoCad system, which also uses a LISP interface, or
Microsoft's Word Basic, that allows the user to field rig the editor to his
tastes, if and only if he ever finds out how to operate the macro programming
facility. (Fig. TLSI-2, 3)
Hypertext support with instant access: All the system's
interface bindings, names, keyboard configurations, help texts, and (if
supplied) source codes are accessible as plain ASCII files through an integrated
hypertext system that allows to fetch any required information in a time lag of
maximally 100 msec for a one-level lookup, leading to maximal search times for
even deeply structured hypertext searches of about 1 to 10 sec.
Optimization for speed: The optimization principle of
the Leibniz TLSI is speed, speed, and again speed. The system answering reaction
is totally transparent to the user. For this purpose, a fully transparent
programmable keyboard access to all functions is essential, because mouse- /icon
interfaces, though convenient for beginners and casual users, are about one
order of magnitude slower. For any repeated acess to any set of consecutive
actions, the extensive macro programming facility (see below) allows the user to
field rig his own preferred access method.
Implementation of the minimal kernel system: The TLSI
is implemented in C. The minimal run time kernel requires about 30 to 50 K
Bytes. It can be linked on top of any C compatible system, this makes it
feasible to use the TLSI as a re-vectorable and re-programmable interactive user
interface on top of any existing software (the host system). As minimal kernel,
it provides the equivalent of an interactive low-level debug monitor system that
allows to test and execute any of the functionality of the host system that one
desires interactive access to. Any routine can at any time be called separately
from the interactive user shell. By way of its macro programmability, any higher
assembly of a set of basic host functions can be constructed on the fly. A
program for the TLSI consists of a list of code tokens to be executed. Each code
token corresponds to an entry in the code data structure. The token is
accessible via a unique name in the system dictionary. This corresponds to the
conventional linker symbol table but is interactively accessible to the user.
The name table can be exchanged by the user for any name pattern the user
requires. With the necessary pointers, each token code table entry needs on the
average 50 Bytes, depending on the name length. The token can point either to a
directly executable binary code of the host system, or it points to another list
of token codes that are executed recursively as subroutines.
Macro programming facility: New subroutine lists can be
constructed as macros at run time and entered into the system as user programs.
These programs can be saved across sessions in a user dictionary image and
re-loaded again. Since each token code entry in the subroutine table requires 4
bytes, large programs that consist mostly of recursive token calls are much
shorter than C programs whose function calls are usually in-line expanded for
performance reasons. Each new program is identifiable by its unique name and is
entered into the system dictionary together with all the existing programs.
These macro routines can be removed at any time as well. Thus an application can
grow and shrink during a user session or as an applications developer
experiments with the available possibilities.
Conversion to compilable C code and local
optimizations: Since all TLSI subroutines resolve eventually into C function
calls, a simple filter can convert a high level symbolic TLSI code into a
compilable sequence of C function calls that can be optimized with standard
compiler technology. Therefore, optimizations can be fine-tuned either to the
run-time performance end, or to address space conservation end. A complete
conversion into C code will have the fastest run-time performance and will
require the most address space. Since a large code image that has been compiled
for maximum speed will slow down to snail pace when the machine needs to swap a
lot, it is very useful to provide different kinds of optimization images for
different sizes of available target system memory. There still are 4 MB RAM
computers out there.
4.4.3. EUPL: End user programming
facility through the macro system
A pressing need for MM systems development is the facility of
secondary programming (or the end user programming language EUPL). This is
required for any but the most simple-minded consumer applications (which are at
best a very temporary market to disappear when the customers get more
sophisticated). In the case of the MM-OEMs mentioned above, the practicability
and comfort of this facility will prove crucial for wide market penetration of
systems. The TLSI approach offers a very easy way to achieve this secondary
programming facility. The developer of the basic MM functionality (the MM
provider) can use a standard compiler technology or an authoring system to
provide the tool set which the user (or secondary programmer) can then extend
into any direction he deems necessary. All secondary programming would be done
with the TLSI. Because of its simplicity and extendability, the TLSI can provide
a large functionality to the user without having to include the original
authoring system or the compiler package, this also relieves the user from the
need to learn the conventions of the authoring system, he needs only to
concentrate on the functionality that is offered by the specific TLSI interface
which the MM provider supplies. This approach can also be chosen for in-house MM
development of the MM provider. It allows a very comfortable division of
expertise and responsibilities between the different groups involved in the
authoring process of a MM system. The software engineers need only to deal with
their compiler tools and SW methodology to provide a rich tool set of TLSI tools
for secondary, or applications developers to build their prototypes upon. These
can then be converted with the filter tools into "hard" software structures, or
delivered to end users as TLSI structures to be modified by them or not, just as
the MM provider decides is within the scope of his marketing policies. It is as
easily possible to implement tertiary programming structures which can then be
even more simplified and standardized to provide a very specific programmability
to end users. Because of the unlimited extendability of the TLSI, this can have
any shape and form wished for.
4.4.4. UIL: User Interface Language,
field configuration, specialized interpreters
The TLSI principle allows the construction of a very simple
and effective common interface shell on top of different software systems, thus
providing a generalized User Interface Language (UIL) that is adaptdable to
specific user profiles.
One of the main user interface problems of contemporary
software packages in a windowing system like MS-Windows is the chaotic menu and
hotkey layout of the diverse systems that are offered for this platform. The
situation is worse for Windows, than for the Apple System, where a certain level
of standardization has been provided, and it is worse for national language
adaptations than for the original US layout. Each package developer seems to
express his original creativity by inventing his own special hotkey binding
layout from scratch. Some manufacturers insist on using the special symbols from
the national character set for their hotkeys, so that anyone not using this
keyboard will be out of luck and not able to use that nationalized product. The
solution taken by many recent MM systems to provide no hotkeys at all, is also
no solution at all. Because any repeated use of such a system, for example when
the user wants to traverse just a few specific access paths that are often
repeated, leads invariably to the "Pinball Wizard Syndrome", the unhappy user
having to wade through an orgy of points and clicks before he finally gets to
the place where he wants to do some real work. Instead of trying to create a
uniform hotkey and menu pattern for all packages, which is hard do design, and
impossible to enforce, the much easier solution is to allow the end user (or, in
larger organizations, the in-house systems configuration manager) to create
exactly the kind of keyboard and menu layout that is considered most appropriate
at the location.
This can be easily accomplished with the common interface
level of the TLSI, where all the functionality of the system that is accessible
to the user is configured in ASCII readable files, that can be changed with any
text editor, and re-configured at any time, even while the system is running,
without any re-compile or otherwise low-level system interaction. Ideally the
whole menu structure of the system would reside in a single file, giving also a
transparent access path to the logical structure of the whole system, something
that the handbook writers seem to consider a totally unnecessary luxury. The
TLSI enables one to build very simple specialized interpreters that can build
keyboard binding schemes or menu layouts. Below is an example how a menu
configuration file may look like. The exact syntax is open to any design
principle one may want to implement. The sample given is from a menu
configuration file of the string handling processor of the Leibniz Hypertext
Software Development System. (Fig. TLSI-4)
4.4.5. A sample TLSI menu configuration
file
-----------------------------------------------------------------------------------
// start of sample
:GRP VX-IO/MOVE // i/o and move
LD-VX[ VD-A1
$.user_input 0 I 0 "user input string "
$.get 5 G 0 "get string with len
from adr "
$.get_cnt 12 A 0 "get counted string from
adr"
$.put 6 P 0 "put string to adr"
$.put_cnt 6 U 0 "put counted string to
adr"
$.dup_top 0 D 0 "duplicate top string"
$.mov_2nd 0 M 0 "xchg top 2 strings"
$.copy_2nd 0 C 0 "copy 2nd string to top"
$.copy_# 0 O 0 "copy nth string to top
of buffer"
$.mov_# 4 T 0 "move nth string to top
of buffer"
$.mov_bot 0 B 0 "move bottom string to
top"
$.push_#x 16 R 0 "move/del to nth_pos top
string"
$.del_top 0 X 0 "delete top string"
$.del_#strn 9 N 0 "delete n strings"
$.len 0 L 0 "length of top string "
END;
// end of sample
-----------------------------------------------------------------------------------
Explanation:
:GRP VX-IO/MOVE // i/o and move
^ ^
comment
^
The :GRP indicates a new program module or group.
LD-VX[ VD-A1
call the special menu compiler for the following menu,
VD-A1
$.user_input : called method or function, this lets the user
input a string
0 I 0: Menu Hotkey Character (ALT-I), optional input
parameter string (here as MSG#)
"user input string ": menu-entry as shown in the pulldown
menu
4.4.6. Hypertext integrated help
information system
Using the TLSI principle, a complete production system has
been created: the Leibniz Hypertext Software Development System. Through the
integrated hypertext function, every menu entry has an associated help text that
resides in an ASCII readable text file, which can also be edited and modified at
any time (if the systems provider opens access to this option). Below an extract
of the help file associated with the above string processor menu. For specific
national languages, the file contains keyed entries with the prefixes !ENG !GER
!FRA !ITA etc. Switching to different languages is simply done at run-time
through the system configuration menu. The menu configuration file and the help
information file can be filtered and merged easily to produce a printed manual.
Thus, documentation production is centralized on a single data base for all
national language editions, and for all stages of the production process: the
in-house source code documentation provides the base for the help file, which
then enters the printed documentation.
!" M:STRING-ACTOR String
Processor Help
!" $.user_input
!ENG user input string
\LThe user enters a string at the
keyboard. The key <ENTER> finishes
the string. With ESC it is
possible to leave the input, and a
zero-string is produced. The
string input system has an
editing capability which allows
to edit the present line with
the cursor control keys. It also
allows to retrieve old inputs and gives a
full-screen editor for them.
!GER Benutzer String
Eingabe.
\LDer Benutzer gibt einen String
von der Tastatur ein. Die <ENTER> Taste
beendet die Eingabe. Mit ESC kann
man die Eingabe verlassen, und ein
Null-string wird erzeugt. Das
String-Eingabesystem hat einen eingebauten
Zeileneditor, der die
Eingabezeile mit den cursor control Tasten editierbar
macht. Es erlaubt auch, fruehere
Eingaben aus dem Puffer zu holen,
und erlaubt diese in einem
full-screen editor zu bearbeiten.
4.4.7. Sample Leibniz TLSI Source
Code
This sample gives a souce code extract from the program group
( :GRP ) of the string processor, here called the STRING-ACTOR.
The commands :MSG-GRP M:ACX define a message group
M:ACX for the string processor, which contain the prompting and dialogue
strings. These can also be edited and re-loaded at run time with different
nationalized versions if so desired. This way, all language string handling is
completely separated from the actual code implementation.
-----------------------------------------------------------------------------------
// sample Leibniz TLSI Source
Code
:GRP M:STRING-ACTOR //
string processor program group
(| AG 20:15 24/11/92 )
:MSG-GRP M:ACX // actor
function exec and exec messages
M" STRING-INIT" ( 1 ) // this
is the actor init function
M" STRING-DISPLAY" ( 2 ) // this
is the actor display function
M" " ( 3 ) // spare
M" STRING TOOL " ( 4 ) //
actor title II
M" LEIBNIZ ACTOR SYSTEM : "
( 5 ) // actor title I
M" performing Actor command: " (
6 ) // actor message
M" edit input parameters: " ( 7 )
M" enter a string " ( 8 )
M" return parms: " ( 9 )
(| AG 16:22 15/11/92 )
-----------------------------------------------------------------------------------
The function v.std_input is a generic window string
input function called by the
high-level routine $.user_input that appears in the
menu.
-----------------------------------------------------------------------------------
:DEF v.std_input // standard
input in W-MSG , line 0
( $msg -$- $input ) //
parameters: prompt string in, answer string out
{ v.push_parm // push present
window parameters
W-MSG v.default // switch to
message window as new default window
$.len v.msg_push // sav
string len, put prompt msg to window
0 p.m1 v.at>at // position
cur to top win line after prompt string
cur.set // show input
cursor
$.get_inp $.len v.add_cur //
get user input, increment cursor
msg? ZEQ DO_IFT v.clr_display
DO_END
v.pop_parm // return saved
parameters to last window used
TRUE -> V:MSG? // set
state variable
}
// $msg prompt string
displayed in msg window
// $input user string returned.
$"" (0-string) if only ENTER
(| AG 20:16 26/12/89 )
:DEF $.user_input // user
input string
( -$- string )
{ 8 M:ACX M>$ v.std_input
}
(| AG 19:22 08/11/92 )
:DEF STRING-DISPLAY //
string actor display
{ v.push_parm // push present
VDEV window parameters
FALSE -> MK?
W-BUFF v.default // swith to
buffer window as default
0 -> VP:OFFS //
initialize display frame offset
&. v.chr_fillbuf // fill
buffer with "." character
$P:PTR v.mov_$buf // move
string buffer to VDEV buffer
v.brd // show VDEV
border
v.display // display VDEV
contents
W-MSG v.default v.brd
v.display // show message VDEV
v.pop_parm // return to
prior VDEV
}
(| AG 23:00 08/11/92 )
GRP; ( M:STRING-ACTOR )
(| AG 16:11 01/07/92 )
// end of code sample
-----------------------------------------------------------------------------------
4.4.8. Higher functionality and
information management of the Leibniz
System
In the Leibniz TLSI environment, special focus was laid on
maximum production speed in the rapid prototyping environment. For this aim, all
the system components were carefully tuned and integrated with each other to
achieve maximum efficiency. Originally intended for standalone hardware,
embedded systems, and real-time industrial machinery control (the most general
interpretation of multi-media), it contains its own operating system functions,
a software prototyping and testing shell, a fully self-contained windowing
system, a hypertext-integrated full-screen ASCII editor, and a hypertext
database system. In the present implementation, the Leibniz system contains
10.000 functions in 100.000 lines code with 6 megabytes source, and 500 source
and configuration files. A system of this size puts the built in information
management functions to a severe test, because such a huge function library is
impossible to memorize, and printed paper documentation is much too cumbersome
besides being hopelessly behind the current version status. 100.000 lines would
occupy a hefty 2000 pages of A4 paper. Listing only the function names fills a
book of 200 pages. Even an experienced OO SW developer cannot be expected to
master such a library in an afternoon. Therefore the optimal structuring and
maximal speed of the retrieval environment is crucial. The available tools of
the system allow access any of the 10.000 functions even in multi-level
hypertext access in a matter of maximally 5 to 10 seconds. A special interface
shell allows to call the very efficient GREP tool from within the editor with
one keystroke, searching the 6 MB source in about 10 to 30 seconds, and
delivering its output in a table that is routed to the editor. The output can
then be fed into the hypertext system.
4.4.9. Mnemotechnic and embedded database
access keys in function names
The code examples supplied are not just there to show another
kind of yacc (yet another cryptic code) but to
exemplify how a very condensed and powerful knowledge organization scheme can be
embedded in the function names, serving as their own database ordering
principle. While these names may seem cryptic and not very intuitive in the
beginning, they have a few important information management factors speaking for
them. First, the average length of a Leibniz function name is about half of that
of usual comparable systems which have the well known expressive full-length
meaningful english names like:
WindowIncreaseApertureOnMouseClick
These names may be more expressive but if they were used
throughout the Leibniz system, the size would not be 6 Mbytes, but 12 Mbytes,
each file would be twice as big, it would need twice as long to load, the user
dictionary would have to be twice as big, and the listing would need 4000 pages,
not just 2000 pages. And what is even more problematic, testing would be more
than twice as long, and less efficient, because of the tedium of typing in those
long expressive names. Typing errors tend to accumulate more than proportionally
after about eight characters. It is clear to see that there are information
handling limits more on the human than on the machine side that are imposed by
the sheer size of application systems.
The message structure is modeled after the Eiffel pattern:
class.action The dot supplies a very useful visual separation between
the two parts. Commands like: v.brd v.display v.push_parm are messages to
the window or VDEV (for Virtual Device) processor. The individual object needs
to be addressed only once, when its parameters are anchored:
W-MSG v.default
This declares the window W-MSG as default window to which all
the subsequent v.xxx messages apply. This saves a lot of unnecessary
individual name-dropping, also saving code space. Moreover, the usual case in an
application is that we return to the window we came from before we entered the
special function. So we need not even name the old window any more.
v.pop_parm does this all for us, returning us to that window without any
additional code. All string processor commands are keyed with $.xxx, and
for each special processor, there is such a very short keying sequence.
m.xxx for the memory operators, mov.xxx for moves and fills, and
so on. This allows to implement a very cheap run-time search of all methods a
class has to offer by making a string compare through the database for the first
2 or 3 matching letters. More elaborate codification schemes for names are
implemented with matrix words, which are a kind of logical place value system
wherein a certain character at a specific position encodes a specific function
subclass. The move processor has the following message modifications:
mov.<[l mov.>[l mov.[lc mov.[l0 mov.[lb
mov.[]>[ mov.[]<[ mov.[]?[ mov.[]>[a
mov.[]>[x
mov.[]<[a
Without going into unnecessary details, it suffices to say
that the universal prefix mov. specifies the operator class for memory
moves. The < > [ ] ? a x codes specify what kinds of parameters are
needed, if it is a move-and-fill (with a fill pattern of byte, word, longword,
or string), and so on. There are very many combination possibilities for just
this one operator alone. Naming them all with long names would be quite
cumbersome.
4.4.10. Factors of the optimal rapid
prototyping process
The optimal rapid prototyping process rests on the ease and
speed of the interplay of these factors:
1) Archive: Access to existing libraries of functions.
This requires the optimization and structuring of the hypertext data base. The
categorization of functions must be possible under any suitable ordering scheme,
and must not be restricted to (for example) object hierarchies that are
exclusively implementation dependent. Many different access hierarchies must be
possible for the different user groups who have different views of the system.
Quick overview functions are available through a combination of hypertext with
special folding method implemented in the system editor. The principle is:
overview combined with detail view results in perspective (Überblick und
Einblick ergibt den Durchblick). It is necessary to present the system designer
with as much useful information as he can keep in short term memory, and carry
on to the task he has to solve.
2) Constructor: Rapid prototyping method. Must allow
overloading and modification of functions without recompile of the system. The
simple TLSI constructor method provides a very rapid turnaround. The library
database provides a fast and easy update of the new functions created.
3) Testing: Flexible and powerful testing environment.
The TLSI allows to generate standard input scripts that can be used on whole
classes of functions. The testing scripts can also be derived from the interface
declarations in the source code. All testing inputs can be logged, for
reproducible error histories and to generate automated test suites for further
testing sessions. All inputs that the user would perform interactively can be
redirected to script files so that auto demo functions are readily
available.
4) Interface access: Transparent, most direct method.
The mouse- /icon interface provides the easiest to use, and most fool-proof
access method. Unfortunately it is also one of the slowest. For expert users,
this proves to be a serious productivity obstacle. These users need a completely
transparent access to all functions through key-strings, and must be able to
create their own shortcuts. This is possible only when a uniform keyboard
interface exists for all functions. This is ensured by the TLSI principle. Only
through the keyboard interface can the complete control of the system through
script files be achieved, as well as the log function.
(Fig. TLSI-5)
4.4.11. The Inter-Actor
principle
The development of the Leibniz system resulted in the
Inter-Actor principle, a powerful unified representation and access metaphor for
program functionality that is accessible in all its aspects from the user
interface level. The structure of the Inter-Actor is similar to an object class,
but it provides many extra user interface handles, like a self-display function,
and an experimentation field with test data for a new user who wants to try out
the functionality of the system. For training purposes, all functionality of the
system should be provided with sample data, sample inputs, the display of the
internal state of the Inter-Actor before and after each function, and a way to
change all the state variables individually. The functionality also resembles
the Unix filter tool approach, with the difference, that in the filter approach,
the CR-file is the one-and-only class of data it can work upon. Also, the Unix
filters are "lean and mean" tools that are very powerful but don't offer much in
terms of user friendliness. In the Inter-Actor approach, there exists a CR-file
processor which has the functionality of GREP, AWK, and SED combined. Besides
this, there exists a powerful string processor. With all the available string
methods taken together, about 200, the Leibniz String Inter-Actor provides a
functionality much exceeding that of commercially available string libraries and
comes close to special string handling systems, like SNOBOL. There is also a
processor for memory patterns (byte patterns) and shifts, for Windows (here
called VDEVs, see the code example) and for numbers and arrays of numbers (like
in APL), and extensions for pictures and drawings, like an on-board Postscript,
for movies, sound files, can be added as well.
4.4.12. Interfacing with OO-Systems and
the power tool metaphor
While the present implementation of the TLSI presents a
solution to software structure that is in many ways equivalent to the
OO-paradigm currently en vogue in the software industry, it takes different and
parallel approaches in some aspects. The OO-paradigm is a solution to
structuring problems that is geared to a certain way of thinking in the software
industry and needs a lot of training. For unexperienced users, the ins-and-outs
of the OO-classification rules are sometimes hard to understand. This may pose
too much of a time investment for practically oriented user groups who should
better use their time creatively designing and implementing artistic and
aesthetic parts of the system, instead of dealing with deeply nested class
hierarchy trees whose structure is not obvious. The metaphor of the Power Tool
provides a tangible and direct user interface for non-software engineer users.
The TLSI resembles a multi-function power tool, which can be converted in a
minute into a drill, a buzz-saw, a jigsaw, a water pump, a sander, a grinder,
and a screw-driver. Its add-on functionality rests on a practical functional
classification that is hard to describe in a generic structural class
inheritance structure of OO Software. It is achieved through function frames
with re-vectorable executor modules. They can be re-vectored interactively, on
the fly, just like in the machine shop. The functionality can be implemented on
top of available OO technology, if it is possible to interface with the message
structure of the OO processor. How this can be practically added to an existing
authoring system, is not a technical question but mostly a problem with the
closed shop proprietary policy of authoring system vendors. SUN's Java approach
seems to provide the most painless access path.
.