Commit c39bd6d9 authored by Dave Cooper's avatar Dave Cooper

merged dad's edits into manual.

parent 2d0f3045
...@@ -14,6 +14,8 @@ bin ...@@ -14,6 +14,8 @@ bin
*.idx *.idx
*.log *.log
*.toc *.toc
*.ilg
*.ind
configure.el configure.el
systems.txt systems.txt
......
\BOOKMARK [0][-]{chapter.1}{Introduction}{}% 1 \BOOKMARK [0][-]{chapter.1}{Introduction}{}% 1
\BOOKMARK [1][-]{section.1.1}{Welcome}{chapter.1}% 2 \BOOKMARK [1][-]{section.1.1}{Welcome}{chapter.1}% 2
\BOOKMARK [1][-]{section.1.2}{Knowledge Base Concepts According to Genworks}{chapter.1}% 3 \BOOKMARK [1][-]{section.1.2}{Knowledge Base Concepts According to Genworks}{chapter.1}% 3
\BOOKMARK [1][-]{section.1.3}{Goals for this Tutorial}{chapter.1}% 4 \BOOKMARK [1][-]{section.1.3}{Classic Definition of Knowledge Based Engineering \(KBE\)}{chapter.1}% 4
\BOOKMARK [1][-]{section.1.4}{What is GenDL?}{chapter.1}% 5 \BOOKMARK [1][-]{section.1.4}{Classic Caching Feature}{chapter.1}% 5
\BOOKMARK [1][-]{section.1.5}{Why GDL \(what is GDL good for?\)}{chapter.1}% 6 \BOOKMARK [1][-]{section.1.5}{Demand-Driven Evaluation}{chapter.1}% 6
\BOOKMARK [1][-]{section.1.6}{What GDL is not}{chapter.1}% 7 \BOOKMARK [1][-]{section.1.6}{The Object-Oriented Paradigm meets the Functional paradigm}{chapter.1}% 7
\BOOKMARK [0][-]{chapter.2}{Installation}{}% 8 \BOOKMARK [1][-]{section.1.7}{Object-oriented Systems}{chapter.1}% 8
\BOOKMARK [1][-]{section.2.1}{Installation of pre-packaged Gendl}{chapter.2}% 9 \BOOKMARK [1][-]{section.1.8}{Object-oriented Analysis}{chapter.1}% 9
\BOOKMARK [2][-]{subsection.2.1.1}{Download the Software and retrieve a license key}{section.2.1}% 10 \BOOKMARK [1][-]{section.1.9}{Object-oriented Design}{chapter.1}% 10
\BOOKMARK [2][-]{subsection.2.1.2}{Unpack the Distribution}{section.2.1}% 11 \BOOKMARK [1][-]{section.1.10}{Goals for this Manual}{chapter.1}% 11
\BOOKMARK [2][-]{subsection.2.1.3}{Make a Desktop Shortcut}{section.2.1}% 12 \BOOKMARK [1][-]{section.1.11}{What is GDL?}{chapter.1}% 12
\BOOKMARK [2][-]{subsection.2.1.4}{Populate your Initialization File}{section.2.1}% 13 \BOOKMARK [1][-]{section.1.12}{Why GDL \(what is GDL good for?\)}{chapter.1}% 13
\BOOKMARK [1][-]{section.2.2}{Installation of open-source Gendl}{chapter.2}% 14 \BOOKMARK [1][-]{section.1.13}{What GDL is not}{chapter.1}% 14
\BOOKMARK [2][-]{subsection.2.2.1}{Install and Configure your Common Lisp environment}{section.2.2}% 15 \BOOKMARK [0][-]{chapter.2}{Installation}{}% 15
\BOOKMARK [2][-]{subsection.2.2.2}{Load and Configure Quicklisp}{section.2.2}% 16 \BOOKMARK [1][-]{section.2.1}{Installation of pre-packaged GDL}{chapter.2}% 16
\BOOKMARK [1][-]{section.2.3}{System Startup and Testing}{chapter.2}% 17 \BOOKMARK [2][-]{subsection.2.1.1}{Download the Software and retrieve a license key}{section.2.1}% 17
\BOOKMARK [2][-]{subsection.2.3.1}{System Startup}{section.2.3}% 18 \BOOKMARK [2][-]{subsection.2.1.2}{Unpack the Distribution}{section.2.1}% 18
\BOOKMARK [2][-]{subsection.2.3.2}{Basic System Test}{section.2.3}% 19 \BOOKMARK [1][-]{section.2.2}{Installation of open-source Gendl}{chapter.2}% 19
\BOOKMARK [2][-]{subsection.2.3.3}{Full Regression Test}{section.2.3}% 20 \BOOKMARK [2][-]{subsection.2.2.1}{Install and Configure your Common Lisp environment}{section.2.2}% 20
\BOOKMARK [1][-]{section.2.4}{Getting Help and Support}{chapter.2}% 21 \BOOKMARK [2][-]{subsection.2.2.2}{Load and Configure Quicklisp}{section.2.2}% 21
\BOOKMARK [0][-]{chapter.3}{Basic Operation of the Gendl Environment}{}% 22 \BOOKMARK [2][-]{subsection.2.2.3}{Load and Start Gendl}{section.2.2}% 22
\BOOKMARK [1][-]{section.3.1}{What is Different about Gendl?}{chapter.3}% 23 \BOOKMARK [1][-]{section.2.3}{System Testing}{chapter.2}% 23
\BOOKMARK [1][-]{section.3.2}{Startup, ``Hello, World!'' and Shutdown}{chapter.3}% 24 \BOOKMARK [2][-]{subsection.2.3.1}{Basic Sanity Test}{section.2.3}% 24
\BOOKMARK [2][-]{subsection.3.2.1}{Startup}{section.3.2}% 25 \BOOKMARK [2][-]{subsection.2.3.2}{Full Regression Test}{section.2.3}% 25
\BOOKMARK [2][-]{subsection.3.2.2}{Developing and Testing a Gendl ``Hello World'' application}{section.3.2}% 26 \BOOKMARK [1][-]{section.2.4}{Getting Help and Support}{chapter.2}% 26
\BOOKMARK [2][-]{subsection.3.2.3}{Shutdown}{section.3.2}% 27 \BOOKMARK [0][-]{chapter.3}{Basic Operation of the GDL Environment}{}% 27
\BOOKMARK [1][-]{section.3.3}{Working with Projects}{chapter.3}% 28 \BOOKMARK [1][-]{section.3.1}{What is Different about GDL?}{chapter.3}% 28
\BOOKMARK [2][-]{subsection.3.3.1}{Directory Structure}{section.3.3}% 29 \BOOKMARK [1][-]{section.3.2}{Startup, ``Hello, World!'' and Shutdown}{chapter.3}% 29
\BOOKMARK [2][-]{subsection.3.3.2}{Source Files within a source/ subdirectory}{section.3.3}% 30 \BOOKMARK [2][-]{subsection.3.2.1}{Startup}{section.3.2}% 30
\BOOKMARK [2][-]{subsection.3.3.3}{Generating an ASDF System}{section.3.3}% 31 \BOOKMARK [2][-]{subsection.3.2.2}{Developing and Testing a ``Hello World'' application}{section.3.2}% 31
\BOOKMARK [2][-]{subsection.3.3.4}{Compiling and Loading a System}{section.3.3}% 32 \BOOKMARK [2][-]{subsection.3.2.3}{Shutdown}{section.3.2}% 32
\BOOKMARK [1][-]{section.3.4}{Customizing your Environment}{chapter.3}% 33 \BOOKMARK [1][-]{section.3.3}{Working with Projects}{chapter.3}% 33
\BOOKMARK [1][-]{section.3.5}{Saving the World}{chapter.3}% 34 \BOOKMARK [2][-]{subsection.3.3.1}{Directory Structure}{section.3.3}% 34
\BOOKMARK [1][-]{section.3.6}{Starting up a Saved World}{chapter.3}% 35 \BOOKMARK [2][-]{subsection.3.3.2}{Source Files within a source/ subdirectory}{section.3.3}% 35
\BOOKMARK [0][-]{chapter.4}{Understanding Common Lisp}{}% 36 \BOOKMARK [2][-]{subsection.3.3.3}{Generating an ASDF System}{section.3.3}% 36
\BOOKMARK [1][-]{section.4.1}{S-expression Fundamentals}{chapter.4}% 37 \BOOKMARK [2][-]{subsection.3.3.4}{Compiling and Loading a System}{section.3.3}% 37
\BOOKMARK [1][-]{section.4.2}{Fundamental CL Data Types}{chapter.4}% 38 \BOOKMARK [1][-]{section.3.4}{Customizing your Environment}{chapter.3}% 38
\BOOKMARK [2][-]{subsection.4.2.1}{Numbers}{section.4.2}% 39 \BOOKMARK [1][-]{section.3.5}{Saving the World}{chapter.3}% 39
\BOOKMARK [2][-]{subsection.4.2.2}{Strings}{section.4.2}% 40 \BOOKMARK [1][-]{section.3.6}{Starting up a Saved World}{chapter.3}% 40
\BOOKMARK [2][-]{subsection.4.2.3}{Symbols}{section.4.2}% 41 \BOOKMARK [0][-]{chapter.4}{Understanding Common Lisp}{}% 41
\BOOKMARK [2][-]{subsection.4.2.4}{List Basics}{section.4.2}% 42 \BOOKMARK [1][-]{section.4.1}{S-expression Fundamentals}{chapter.4}% 42
\BOOKMARK [2][-]{subsection.4.2.5}{The List as a Data Structure}{section.4.2}% 43 \BOOKMARK [1][-]{section.4.2}{Fundamental CL Data Types}{chapter.4}% 43
\BOOKMARK [0][-]{chapter.5}{Understanding Gendl \204 Core GDL Syntax}{}% 44 \BOOKMARK [2][-]{subsection.4.2.1}{Numbers}{section.4.2}% 44
\BOOKMARK [1][-]{section.5.1}{Defining a Working Package}{chapter.5}% 45 \BOOKMARK [2][-]{subsection.4.2.2}{Strings}{section.4.2}% 45
\BOOKMARK [1][-]{section.5.2}{Define-Object}{chapter.5}% 46 \BOOKMARK [2][-]{subsection.4.2.3}{Symbols}{section.4.2}% 46
\BOOKMARK [1][-]{section.5.3}{Making Instances and Sending Messages}{chapter.5}% 47 \BOOKMARK [2][-]{subsection.4.2.4}{List Basics}{section.4.2}% 47
\BOOKMARK [1][-]{section.5.4}{Objects}{chapter.5}% 48 \BOOKMARK [2][-]{subsection.4.2.5}{The List as a Data Structure}{section.4.2}% 48
\BOOKMARK [1][-]{section.5.5}{Sequences of Objects and Input-slots with a Default Expression}{chapter.5}% 49 \BOOKMARK [0][-]{chapter.5}{Understanding GDL \204 Core GDL Syntax}{}% 49
\BOOKMARK [1][-]{section.5.6}{Summary}{chapter.5}% 50 \BOOKMARK [1][-]{section.5.1}{Defining a Working Package}{chapter.5}% 50
\BOOKMARK [0][-]{chapter.6}{The Tasty Development Environment}{}% 51 \BOOKMARK [1][-]{section.5.2}{Define-Object}{chapter.5}% 51
\BOOKMARK [1][-]{subsection.6.0.1}{The Toolbars}{chapter.6}% 52 \BOOKMARK [1][-]{section.5.3}{Making Instances and Sending Messages}{chapter.5}% 52
\BOOKMARK [2][-]{subsection.6.0.2}{View Frames}{subsection.6.0.1}% 53 \BOOKMARK [1][-]{section.5.4}{Objects}{chapter.5}% 53
\BOOKMARK [0][-]{chapter.7}{Working with Geometry in Gendl}{}% 54 \BOOKMARK [1][-]{section.5.5}{Sequences of Objects and Input-slots with a Default Expression}{chapter.5}% 54
\BOOKMARK [1][-]{section.7.1}{The Default Coordinate System in Gendl}{chapter.7}% 55 \BOOKMARK [1][-]{section.5.6}{Summary}{chapter.5}% 55
\BOOKMARK [1][-]{section.7.2}{Building a Geometric Gendl Model from LLPs}{chapter.7}% 56 \BOOKMARK [0][-]{chapter.6}{The Tasty Development Environment}{}% 56
\BOOKMARK [0][-]{chapter.8}{Custom User Interfaces in Gendl}{}% 57 \BOOKMARK [1][-]{subsection.6.0.1}{The Toolbars}{chapter.6}% 57
\BOOKMARK [1][-]{section.8.1}{Package and Environment for Web Development}{chapter.8}% 58 \BOOKMARK [2][-]{subsection.6.0.2}{View Frames}{subsection.6.0.1}% 58
\BOOKMARK [1][-]{section.8.2}{Traditional Web Pages and Applications}{chapter.8}% 59 \BOOKMARK [0][-]{chapter.7}{Working with Geometry in Gendl}{}% 59
\BOOKMARK [2][-]{subsection.8.2.1}{A Simple Static Page Example}{section.8.2}% 60 \BOOKMARK [1][-]{section.7.1}{The Default Coordinate System in Gendl}{chapter.7}% 60
\BOOKMARK [2][-]{subsection.8.2.2}{A Simple Dynamic Page which Mixes HTML and Common Lisp/Gendl}{section.8.2}% 61 \BOOKMARK [1][-]{section.7.2}{Building a Geometric Gendl Model from LLPs}{chapter.7}% 61
\BOOKMARK [2][-]{subsection.8.2.3}{Linking to Multiple Pages}{section.8.2}% 62 \BOOKMARK [0][-]{chapter.8}{Custom User Interfaces in Gendl}{}% 62
\BOOKMARK [2][-]{subsection.8.2.4}{Form Controls and Fillout-Forms}{section.8.2}% 63 \BOOKMARK [1][-]{section.8.1}{Package and Environment for Web Development}{chapter.8}% 63
\BOOKMARK [1][-]{section.8.3}{Partial Page Updates with gdlAjax}{chapter.8}% 64 \BOOKMARK [1][-]{section.8.2}{Traditional Web Pages and Applications}{chapter.8}% 64
\BOOKMARK [2][-]{subsection.8.3.1}{Steps to Create a gdlAjax Application}{section.8.3}% 65 \BOOKMARK [2][-]{subsection.8.2.1}{A Simple Static Page Example}{section.8.2}% 65
\BOOKMARK [2][-]{subsection.8.3.2}{Including Graphics}{section.8.3}% 66 \BOOKMARK [2][-]{subsection.8.2.2}{A Simple Dynamic Page which Mixes HTML and Common Lisp/Gendl}{section.8.2}% 66
\BOOKMARK [0][-]{chapter.9}{More Common Lisp for Gendl}{}% 67 \BOOKMARK [2][-]{subsection.8.2.3}{Linking to Multiple Pages}{section.8.2}% 67
\BOOKMARK [0][-]{chapter.10}{Advanced Gendl}{}% 68 \BOOKMARK [2][-]{subsection.8.2.4}{Form Controls and Fillout-Forms}{section.8.2}% 68
\BOOKMARK [0][-]{chapter.11}{Gendl Reference}{}% 69 \BOOKMARK [1][-]{section.8.3}{Partial Page Updates with gdlAjax}{chapter.8}% 69
\BOOKMARK [1][-]{section.11.1}{CL-LITE \(Compile-and-Load Lite Utility\)}{chapter.11}% 70 \BOOKMARK [2][-]{subsection.8.3.1}{Steps to Create a gdlAjax Application}{section.8.3}% 70
\BOOKMARK [2][-]{subsection.11.1.1}{Object Definitions}{section.11.1}% 71 \BOOKMARK [2][-]{subsection.8.3.2}{Including Graphics}{section.8.3}% 71
\BOOKMARK [2][-]{subsection.11.1.2}{Function and Macro Definitions}{section.11.1}% 72 \BOOKMARK [0][-]{chapter.9}{More Common Lisp for Gendl}{}% 72
\BOOKMARK [1][-]{section.11.2}{COM.GENWORKS.DOM }{chapter.11}% 73 \BOOKMARK [0][-]{chapter.10}{Advanced Gendl}{}% 73
\BOOKMARK [1][-]{section.11.3}{COM.GENWORKS.DOM-HTML }{chapter.11}% 74 \BOOKMARK [0][-]{chapter.11}{Gendl Reference}{}% 74
\BOOKMARK [1][-]{section.11.4}{COM.GENWORKS.DOM-LATEX }{chapter.11}% 75 \BOOKMARK [1][-]{section.11.1}{CL-LITE \(Compile-and-Load Lite Utility\)}{chapter.11}% 75
\BOOKMARK [1][-]{section.11.5}{COM.GENWORKS.DOM-WRITERS }{chapter.11}% 76 \BOOKMARK [2][-]{subsection.11.1.1}{Object Definitions}{section.11.1}% 76
\BOOKMARK [1][-]{section.11.6}{COM.YOYODYNE.BOOSTER-ROCKET }{chapter.11}% 77 \BOOKMARK [2][-]{subsection.11.1.2}{Function and Macro Definitions}{section.11.1}% 77
\BOOKMARK [1][-]{section.11.7}{GENDL \(Base Core Kernel Engine\) Nicknames: Gdl, Genworks, Base}{chapter.11}% 78 \BOOKMARK [1][-]{section.11.2}{COM.GENWORKS.DOM }{chapter.11}% 78
\BOOKMARK [2][-]{subsection.11.7.1}{Object Definitions}{section.11.7}% 79 \BOOKMARK [1][-]{section.11.3}{COM.GENWORKS.DOM-HTML }{chapter.11}% 79
\BOOKMARK [2][-]{subsection.11.7.2}{Function and Macro Definitions}{section.11.7}% 80 \BOOKMARK [1][-]{section.11.4}{COM.GENWORKS.DOM-LATEX }{chapter.11}% 80
\BOOKMARK [2][-]{subsection.11.7.3}{Variables and Constants}{section.11.7}% 81 \BOOKMARK [1][-]{section.11.5}{COM.GENWORKS.DOM-WRITERS }{chapter.11}% 81
\BOOKMARK [1][-]{section.11.8}{GDL-USER }{chapter.11}% 82 \BOOKMARK [1][-]{section.11.6}{GENDL \(Base Core Kernel Engine\) Nicknames: Gdl, Genworks, Base}{chapter.11}% 82
\BOOKMARK [1][-]{section.11.9}{GENDL-DOC }{chapter.11}% 83 \BOOKMARK [2][-]{subsection.11.6.1}{Object Definitions}{section.11.6}% 83
\BOOKMARK [1][-]{section.11.10}{GEOM-BASE \(Wireframe Geometry\)}{chapter.11}% 84 \BOOKMARK [2][-]{subsection.11.6.2}{Function and Macro Definitions}{section.11.6}% 84
\BOOKMARK [2][-]{subsection.11.10.1}{Object Definitions}{section.11.10}% 85 \BOOKMARK [2][-]{subsection.11.6.3}{Variables and Constants}{section.11.6}% 85
\BOOKMARK [2][-]{subsection.11.10.2}{Function and Macro Definitions}{section.11.10}% 86 \BOOKMARK [1][-]{section.11.7}{GDL-USER }{chapter.11}% 86
\BOOKMARK [2][-]{subsection.11.10.3}{Variables and Constants}{section.11.10}% 87 \BOOKMARK [1][-]{section.11.8}{GENDL-DOC }{chapter.11}% 87
\BOOKMARK [1][-]{section.11.11}{GWL \(Generative Web Language \(GWL\)\)}{chapter.11}% 88 \BOOKMARK [1][-]{section.11.9}{GEOM-BASE \(Wireframe Geometry\)}{chapter.11}% 88
\BOOKMARK [2][-]{subsection.11.11.1}{Object Definitions}{section.11.11}% 89 \BOOKMARK [2][-]{subsection.11.9.1}{Object Definitions}{section.11.9}% 89
\BOOKMARK [2][-]{subsection.11.11.2}{Function and Macro Definitions}{section.11.11}% 90 \BOOKMARK [2][-]{subsection.11.9.2}{Function and Macro Definitions}{section.11.9}% 90
\BOOKMARK [2][-]{subsection.11.11.3}{Variables and Constants}{section.11.11}% 91 \BOOKMARK [2][-]{subsection.11.9.3}{Variables and Constants}{section.11.9}% 91
\BOOKMARK [1][-]{section.11.12}{RAPHAEL }{chapter.11}% 92 \BOOKMARK [1][-]{section.11.10}{GWL \(Generative Web Language \(GWL\)\)}{chapter.11}% 92
\BOOKMARK [1][-]{section.11.13}{ROBOT \(Simplified Android Robot example \)}{chapter.11}% 93 \BOOKMARK [2][-]{subsection.11.10.1}{Object Definitions}{section.11.10}% 93
\BOOKMARK [1][-]{section.11.14}{SURF \(NURBS Surface and Solids Geometry Primitives\)}{chapter.11}% 94 \BOOKMARK [2][-]{subsection.11.10.2}{Function and Macro Definitions}{section.11.10}% 94
\BOOKMARK [1][-]{section.11.15}{TASTY \(Web-based Development Environment \(tasty\)\)}{chapter.11}% 95 \BOOKMARK [2][-]{subsection.11.10.3}{Variables and Constants}{section.11.10}% 95
\BOOKMARK [1][-]{section.11.16}{TREE \(Tree component used by Tasty and potentially as a UI component on its own\)}{chapter.11}% 96 \BOOKMARK [1][-]{section.11.11}{JQUERY }{chapter.11}% 96
\BOOKMARK [2][-]{subsection.11.16.1}{Object Definitions}{section.11.16}% 97 \BOOKMARK [1][-]{section.11.12}{RAPHAEL }{chapter.11}% 97
\BOOKMARK [1][-]{section.11.17}{YADD \(Yet Another Definition Documenter \(yadd\)\)}{chapter.11}% 98 \BOOKMARK [1][-]{section.11.13}{ROBOT \(Simplified Android Robot example \)}{chapter.11}% 98
\BOOKMARK [2][-]{subsection.11.17.1}{Object Definitions}{section.11.17}% 99 \BOOKMARK [1][-]{section.11.14}{SURF \(NURBS Surface and Solids Geometry Primitives\)}{chapter.11}% 99
\BOOKMARK [1][-]{section.11.15}{TASTY \(Web-based Development Environment \(tasty\)\)}{chapter.11}% 100
\BOOKMARK [1][-]{section.11.16}{TREE \(Tree component used by Tasty and potentially as a UI component on its own\)}{chapter.11}% 101
\BOOKMARK [2][-]{subsection.11.16.1}{Object Definitions}{section.11.16}% 102
\BOOKMARK [1][-]{section.11.17}{YADD \(Yet Another Definition Documenter \(yadd\)\)}{chapter.11}% 103
\BOOKMARK [2][-]{subsection.11.17.1}{Object Definitions}{section.11.17}% 104
...@@ -65,84 +65,240 @@ written consent from Genworks International.} ...@@ -65,84 +65,240 @@ written consent from Genworks International.}
\label{sec:welcome} \label{sec:welcome}
Congratulations on your purchase or download of Genworks Gendl. By investing some of your Congratulations on your decision to work with Genworks GDL\footnote{From time to time, you will also see references to
valuable time into learning this system, you are investing in your future productivity and you are becoming ``Gendl.'' This refers to ``The Gendl Project'' which is the name of
part of a quiet revolution. Although you may have come to Genworks Gendl because of an interest in 3D modeling an open-source software project from which Genworks GDL draws for its
or mechanical engineering, you will find that a whole new world, and a whole new approach to computing, will core technology. ``The Gendl Project'' code is free to use for any
now be at your fingertips. purpose, but it is released under the Gnu Affero General Public
License, which stipulates that applications code compiled with The
Gendl Project compiler must be distributed as open-source under a
compatible license (if distributed at all). Commercial Genworks GDL,
properly licensed for development and/or runtime distribution, does
not have this ``copyleft'' open-sourcing requirement.}. By first investing some of your valuable time into learning
this system, you will be investing in your future productivity, and in
the process you are becoming part of a quiet revolution. Although you
may have come to Genworks GDL because of an interest in 3D modeling or
mechanical engineering, you will find that a whole new world, and a
unique approach to computing, will now be at your fingertips.
\section{Knowledge Base Concepts According to Genworks} \section{Knowledge Base Concepts According to Genworks}
\label{sec:knowledgebaseconceptsaccordingtogenworks} \label{sec:knowledgebaseconceptsaccordingtogenworks}
You may have an idea about Knowledge Base Systems, You may have an idea about Knowledge Base Systems,
or Knowledge \emph{Based} Systems, from college textbooks or corporate marketing propaganda, and found the or Knowledge \emph{Based} Systems, from college textbooks or corporate marketing
concept too broad to be of practical use. Or you may have heard jabs at the literature, and concluded that the concepts were too broad to be of
pretentious-sounding name, ``Knowledge-based Engineering,'' as in: ``you mean as opposed to \index{Ignorance-based Engineering}Ignorance-based Engineering?'' practical use. Or you may have heard criticisms of the
pretentious-sounding name, ``Knowledge-based Engineering,'' as in:
``you mean as opposed to \index{Ignorance-based Engineering}Ignorance-based Engineering?''
To provide a clearer picture, we hope you will agree that our concept To provide a clearer picture, we hope you will agree that our concept
of a KB system is simple and practical, and in this tutorial our goal of a KB system is straightforward, relatively uncomplicated, and
is to make you comfortable and excited about the ideas we have practical. In this manual our goal is to make you comfortable
implemented in our flagship system, GenDL (or ``Gendl'' and motivated to explore the ideas we have implemented in our flagship
system, Genworks GDL.
Our informal definition of a \emph{\index{Knowledge Base System}Knowledge Base System} is an object-oriented programming environment which implements the features of \emph{\index{Caching}Caching} and \emph{\index{Dependency tracking}Dependency tracking}. Caching means that once the KB has computed something, it might not need to repeat
Our definition of a \emph{\index{Knowledge Base System}Knowledge Base System} is an object-oriented programming environment which implements the features of \emph{\index{Caching}Caching} and \emph{\index{Dependency tracking}Dependency tracking}. Caching means that once the KB has computed something, it might not need to repeat
that computation if the same question is asked again. Dependency tracking is the flip side that computation if the same question is asked again. Dependency tracking is the flip side
of that coin --- it ensures that if a cached result is \emph{stale}, the result will be recomputed the next time it is \emph{demanded}, so as to give a fresh result. of that coin --- it ensures that if a cached result is \emph{stale}, the result will be recomputed the next time it is \emph{demanded}, so as to give a fresh result.
\section{Goals for this Tutorial} \section{Classic Definition of Knowledge Based Engineering (KBE)}
\label{sec:classicdefinitionofknowledgebasedengineering(kbe)}
\footnote{Sections
\ref{sec:classicdefinitionofknowledgebasedengineering(kbe)} through
\ref{sec:objectorienteddesign} are derived from [cite LaRocca20120306]}Knowlege based engineering (KBE) is a technology based on the
use of dedicated software tools called KBE systems, which are able to
capture and systematically re-use product and process engineering
knowledge, with the final goal of reducing time and costs of product
development by means of the following:
\ul{
\li{Automation of repetitive and non-creative design tasks}
\li{Support of multidisciplinary design optimization in all the
phases of the design process}}
\section{Classic Caching Feature}
\label{sec:classiccachingfeature}
Caching refers to the ability of the KBE system to memorize at
runtime the results of computed values (e.g. computed slots and
instantiated objects), so that they can be reused when required,
without the need to re-compute them again and again, unless necessary.
The dependency tracking mechanism serves to keep track of the current
validity of the cached values. As soon as these values are no longer
valid (stale), they are set to unbound and recomputed if and only at
the very moment they are again demanded.
\p{This dependency tracking mechanism is at the base of associative
modeling, which is of extreme interest for engineering design
applications. For example, the shape of a wing rib can be defined
accordingly to the shape of the wing aerodynamic surface. In case the
latter is modified, the dependency tracking mechanism will notify the
system that teh given rib instance is no longer valid and will be
eliminated from the product tree, together with all the
information (objects and attributes) depending on it. The new rib
object, including its attributes and the rest of the affected
information, will not be re-instantiated/updated/re-evaluated
automatically, but only when and if needed (see demand driven
instantiation in the next section)}
\section{Demand-Driven Evaluation}
\label{sec:demand-drivenevaluation}
KBE systems use the \emph{demand-driven}approach. That is, they evaluate just those chains of
expressions required to satisfy a direct request of the user (i.e. the
evaluation of certain attributes ofor the instantiation of an object),
or the indirect requests of another object, which is trying to satisfy
a user demand. For example, the system will create an instance of the
rib object only when the weight of the abovementioned wing rib is
required. The reference wing surface will be generated only when the
generation of the rib object is required, and so on, until all the
information required to respond to the user request will be made
available.
It should be recognized that a typical object tree can be structured
in hundreds of branches and include thousands of attributes. Hence,
the ability to evaluate specific attributes and product model branches
at demand, without the need to evaluate the whole model from its root,
prevents waste of computational resources and in many cases brings
seemingly intractible problems into the realm of the tractible.
\section{The Object-Oriented Paradigm meets the Functional paradigm}
\label{sec:theobject-orientedparadigmmeetsthefunctionalparadigm}
In order to model very complex products and manage efficiently
large bodies of knowledge, KBE systems tap the potential of the object
oriented nature of their underlying language (e.g. Common
Lisp). ``Object'' in this context refers to an instantiated data
structure of a particular assigned data type. As is well-known in
computing community, unrestricted state modification of objects leads
to unmaintainable systems which are difficult to debug. KBE systems
manage this drawback by strictly controlling and constraining
any ability to modify or ``change state'' of objects.
In essence, a KBE system generates a tree of inspectable objects which
is analogous to the function call tree of pure functional-language
systems.
\section{Object-oriented Systems}
\label{sec:object-orientedsystems}
An object-oriented system is composed of
objects (i.e. concrete instantiations of named classes), and
the behavior of the system results from the collaboration of
those objects. Collaboration between objects involves them
sending messages to each other. Sending a message differs from
calling a function in that when a target object receives a
message, it decides on its own what function to carry out to
service that message. The same message may be implemented by
many different functions, the one selected depending on the
current state of the target object.
\section{Object-oriented Analysis}
\label{sec:object-orientedanalysis}
Object-oriented analysis (OOA) is the process of analyzing
a task (also known as a problem domain) to develop a conceptual
model that can then be used to complete the task. A typical OOA
model would describe computer software that could be used to
satisfy a set of customer-defined requirements. During the
analysis phase of problem-solving, the analyst might consider a
written requirements statement, a formal vision document, or
interviews with stakeholders or other interested parties. The
task to be addressed might be divided into several subtasks (or
domains), each representing a different business,
technological, or other area of business. Each subtask would be
analyzed separately. Implementation
constraints (e.g. concurrency, distribution, persistence, or
how the system is to be built) are not considered during the
analysis phase; rather, they are addressed during
object-oriented design (OOD).
The conceptual model that results from OOA will typically consist of a
set of use cases, one or more UML class diagrams, and a number of
interaction diagrams. It may also include some kind of user interface.
\label{sec:goalsforthistutorial} \section{Object-oriented Design}
\label{sec:object-orienteddesign}
During object-oriented design (OOD), a developer applies implementation constraints
to the conceptual model produced in object-oriented analysis. Such constraints could include
not only constraints imposed by the chosen architecture but also any non-functional ---
technological or environmental --- constraints, such as transaction throughput, response time,
run-time platform, development environment, or those inherent in the programming language. Concepts
in the analysis model are mapped onto implementation classes and interfaces resulting in
a model of the solution domain, i.e., a detailed description of \emph{how} the system is to be built.
This manual is designed as a companion to a live two-hour GDL/GWL tutorial, but you may \section{Goals for this Manual}
also be reading it on your own. In either case, the basic goals are:
\label{sec:goalsforthismanual}
This manual is designed as a companion to a live two-hour
GDL/GWL tutorial, but you may also be relying on it independent of the
video tutorial. In either case, the basic goals are:
\begin{itemize} \begin{itemize}
\item Get you excited about using GDL/GWL \item Get you motivated about using Genworks GDL
\item Enable you to judge whether GDL/GWL is an appropriate tool for a given job \item Enable you to ascertain whether Genworks GDL is an appropriate tool for a given job
\item Arm you with the ability to argue the case for using GDL/GWL when appropriate \item Equip you with the ability to state the case for using GDL/GWL when appropriate
\item Prepare you to begin maintaining and authoring GDL/GWL applications, or porting apps \item Prepare you to begin authoring and maintaining GDL
from similar KB systems into GDL/GWL. applications, or porting apps from similar KB systems into GDL.
\end{itemize} \end{itemize}
This manual will begin with an introduction to the \index{Common Lisp}Common Lisp programming language. If you are new to Common Lisp: This manual will begins with an introduction to the \index{Common Lisp}Common Lisp programming language. If you are new to Common Lisp:
congratulations! You have just discovered a powerful tool backed by a congratulations! You have just been introduced to a powerful tool
powerful standard specification, which will protect your development backed by a rock-solid standard specification, which will protect your
investment for decades to come. In addition to the brief overview in development investment for decades to come. In addition to the
this manual, many resources are available to get you started in CL --- overview in this manual, many resources are available to get you
for starters, we recommend started in CL --- for starters, we recommend
\underline{\index{Basic Lisp Techniques}Basic Lisp Techniques}\footnote{ \underline{\index{Basic Lisp Techniques}Basic Lisp Techniques}\footnote{
\underline{BLT} is available at \texttt{http://www.franz.com/resources/educational\_resources/cooper.book.pdf}}, which was prepared by the author of this tutorial. \underline{BLT} is available at \texttt{http://www.franz.com/resources/educational\_resources/cooper.book.pdf}}, which was prepared by the author.
\section{What is GenDL?} \section{What is GDL?}
\label{sec:whatisgendl?} \label{sec:whatisgdl?}
GenDL (or Gendl to be a bit more relaxed) is an acronym for GDL is an acronym for
``General-purpose Declarative Language.'' ``General-purpose Declarative Language.''
GenDL is a superset of ANSI Common Lisp, and consists mainly of GDL is a superset of ANSI Common Lisp, and consists largely of
automatic code-expanding extensions to Common Lisp implemented in the automatic code-expanding extensions to Common Lisp implemented in the
form of macros. When you write, let's say, 20 lines in GenDL, you form of macros. When you write, for example, 20 lines in GDL, you
might be writing the equivalent of 200 lines of Common Lisp. Of might be writing the equivalent of 200 lines of Common Lisp. Of
course, since GenDL is a superset of Common Lisp, you still have the course, since GDL is a superset of Common Lisp, you still have the
full power of the CL language at your fingertips whenever you are full power of the CL language at your disposal whenever you are
working in GenDL. working in GDL.
\index{compiled language!benefits of}\index{macros!code-expanding}Since GDL expands into CL, everything you write in GDL will be \index{compiled language!benefits of}\index{macros!code-expanding}Since GDL expands into CL, everything you write in GDL will be
compiled ``down to the metal'' to machine code with all the compiled ``down to the metal'' to machine code with all the
optimizations and safety that the tested-and-true CL compiler optimizations and safety that the tested-and-true CL compiler provides
provides. This is an important distinction as contrasted to some other [this is an important distinction as contrasted to some other
so-called KB systems on the market, which are really nothing more than so-called KB systems on the market, which are essentially nothing more
interpreted scripting languages which often impose arbitrary limits on than interpreted \emph{scripting languages} which often impose arbitrary limits on
the size and complexity of your application. the size and complexity of the application.
GenDL is also a true \emph{\index{declarative}declarative} language. When you put together a GDL application, you write and think mainly GDL is also a \emph{\index{declarative}declarative} language in the fullest sense. When you put together a GDL application, you write and think mainly
in terms of objects and their properties, and how they depend on one another in a direct in terms of objects and their properties, and how they depend on one another in a direct
sense. You do not have to track in your mind explicitly how one object or property will ``call'' sense. You do not have to track in your mind explicitly how one object or property will ``call''
another object or propery, in what order this will happen, etc. Those details are another object or propery, in what order this will happen, etc. Those details are
...@@ -159,14 +315,17 @@ from an object-oriented language, such as ...@@ -159,14 +315,17 @@ from an object-oriented language, such as
\item The ability for one object to ``inherit'' from others \item The ability for one object to ``inherit'' from others
\item The ability to ``use'' an object without concern for its ``under-the-hood'' implementation \item The ability to ``use'' an object without concern for
its ``under-the-hood'' complexities
\end{itemize} \end{itemize}
\index{object-orientation!message-passing}\index{object-orientation!generic-function}GDL supports the ``message-passing'' paradigm of object orientation, with some extensions. Since \index{object-orientation!message-passing}\index{object-orientation!generic-function}GDL supports the ``message-passing'' paradigm of object
full-blown ANSI CLOS (Common Lisp Object System) is always available as well, the Generic Function paradigm orientation, with some extensions. Since full-blown ANSI CLOS (Common
is supported as well. Do not be concerned at this point if you are not fully aware of the differences Lisp Object System) is always available as well, the Generic Function
between these two paradigms\footnote{See Paul Graham's paradigm is supported as well. Do not be concerned at this point if
you are not fully aware of the differences between these two
paradigms\footnote{See Paul Graham's
\underline{ANSI Common Lisp}, page 192, for an excellent discussion of the Two Models \underline{ANSI Common Lisp}, page 192, for an excellent discussion of the Two Models
of Object-oriented Programming.}. of Object-oriented Programming.}.
...@@ -209,8 +368,9 @@ and solid geometric objects. ...@@ -209,8 +368,9 @@ and solid geometric objects.
\item A drawing program (although it may operate on and/or generate geometric entities); \item A drawing program (although it may operate on and/or generate geometric entities);
\item An Artificial Intelligence system (although it is an excellent environment for developing \item An Artificial Intelligence system (although it is an
capabilities which could be considered as such); excellent environment for developing capabilities which could be
considered as such);
\item An Expert System Shell (although one could be easily embedded within it). \item An Expert System Shell (although one could be easily embedded within it).
...@@ -223,19 +383,20 @@ Without further ado, then, let's turn the page and get started with some hands-o ...@@ -223,19 +383,20 @@ Without further ado, then, let's turn the page and get started with some hands-o
\label{chap:installation} \label{chap:installation}
Follow Section Follow Section
\ref{sec:installationofpre-packagedgendl} if your email address is registered with Genworks and you will \ref{sec:installationofpre-packagedgdl} if your email address is registered with Genworks and you will
install a pre-packaged Gendl distribution including its own Common install a pre-packaged Genworks GDL distribution including its own
Lisp engine. Gendl is also available as open-source software\footnote{http://github.com/genworks/Genworks-GDL}; if you Common Lisp engine. The foundation of Genworks GDL is also available
want to use that version, then please refer to Section as open-source software through The Gendl Project\footnote{http://github.com/genworks/gendl}; if you want to use that version, then please refer to Section
\ref{sec:installationofopen-sourcegendl}. \ref{sec:installationofopen-sourcegendl}.
\section{Installation of pre-packaged Gendl} \section{Installation of pre-packaged GDL}
\label{sec:installationofpre-packagedgendl} \label{sec:installationofpre-packagedgdl}
This section will take you through the installation of Gendl This section will take you through the installation of
from a prepackaged distribution with the Allegro CL Common Lisp engine Genworks GDL from a prepackaged distribution with the Allegro CL or
and the Slime IDE (based on Gnu Emacs). LispWorks commercial Common Lisp engine and the Slime IDE (based on
Gnu Emacs).
\subsection{Download the Software and retrieve a license key} \subsection{Download the Software and retrieve a license key}
...@@ -245,11 +406,13 @@ and the Slime IDE (based on Gnu Emacs). ...@@ -245,11 +406,13 @@ and the Slime IDE (based on Gnu Emacs).
\begin{enumerate} \begin{enumerate}
\item Visit the Downloads section of the \href{http://genworks.com/newsite}{Genworks Newsite} \item Visit the Downloads section of the \href{http://genworks.com}{Genworks Website}
\item Enter your email address\footnote{if your address is not on file, send mail to licensing@genworks.com}. \item Enter your email address\footnote{if your address is not on file, send mail to licensing@genworks.com}.
\item Download the latest Payload and gpl.zip for Windows\footnote{If you already have a gpl.zip from a previous Gendl installation, it is not necessary to download a new one.} \item Download the latest Payload for Windows, Linux, or Mac\footnote{Gnu Emacs is included with the download. The source code for this
is available at http://downloads.genworks.com/emacs-windows-24.3.zip. Gnu Ghostscript
is also included; please contact Genworks if you need the source code for this.}
\item Click to receive license key file by email. \item Click to receive license key file by email.
...@@ -261,60 +424,17 @@ and the Slime IDE (based on Gnu Emacs). ...@@ -261,60 +424,17 @@ and the Slime IDE (based on Gnu Emacs).
\label{subsec:unpackthedistribution} \label{subsec:unpackthedistribution}
GenDL is currently distributed for all the platforms as a Genworks GDL is currently distributed as an setup executable for Windows,
self-contained ``zip'' file which does not require official a ``dmg'' application bundle for Mac, and a self-contained zip file for Linux.
administrator installation. What follows are general instructions; more up-to-date details \ul{
may be found in the email which accompanies the license key file. A five-minute installation video \item Run the installation executable. Accept the defaults when prompted.\footnote{For Linux, you have to install emacs and ghostscript yourself. Please use your distribution's package manager to complete this installation.}
is also available in the Documentation section of the \href{http://genworks.com/newsite}{Genworks Newsite}.
\begin{enumerate}
\item Unzip the gdl1581... zipfile into a location where you have write permissions
\item Unzip the gpl.zip file at the same level as the gdl payload
\item Copy the license key file as gdl.lic (for Trial, \item Copy the license key file as gdl.lic (for Trial,
Student, Professional editions), or devel.lic (for Enterprise edition) into the \texttt{program/} directory within the gdl1581.../ directory. Student, Professional editions), or devel.lic (for Enterprise edition) into the \texttt{program/} directory within the
\textt{gdl/gdl/program/} directory.
\end{enumerate}
\item Launch the application by finding the Genworks program group in the Start menu (Windows), or by double-clicking the application icon (Mac), or by running the \texttt{run-gdl} script (Linux).
\begin{figure} }
\begin{center}
\includegraphics{../images/gendl-installation.png}
\end{center}
\caption{Several Gendl versions and one GPL }