README.md 7.62 KB
Newer Older
1

Dave Cooper committed
2 3
##Gendl®

Dave Cooper committed
4 5 6 7
Pre-built Distributions available here: 

  http://gendl.com

Dave Cooper committed
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
Gendl® is a Generative Programming and Knowledge Based Engineering
framework, implementing concepts which date back to the 1980s and
which cutting-edge companies have been quietly using to gain
competitive advantage with mission-critical engineering
applications. These concepts required hundreds of thousands of dollars
investment in hardware and software just a couple decades ago. They
are now at your fingertips as an integral part of the Open-Source
ecosystem, running on commodity consumer-grade hardware.

Gendl allows for high-level declarative, object-oriented problem
solving and application development, including but not limited to the
ability to generate and manipulate 3D geometry. To solve a problem in
Gendl, you formulate it using the `define-object` operator, which
allows you to specify inputs, outputs (`computed-slots`), and child
objects, which then gives the ability to generate a "tree" of objects,
useful for decomposing complexity.

A graphical web-based interface, *tasty*, is available for interacting
with your system as it is developed.

The web-based GUI framework used to make tasty (GWL) is also available
for creating your own custom web-based user interfaces. 

### Fundamental KBE Features Provided

- Declarative (non-procedural) Syntax
- Object and value caching (i.e. runtime memorization)
- Dependency-tracking (cached values get recomputed when needed)

Dave Cooper committed
37 38 39 40
Gendl ships with a full set of wireframe 3D and 2D geometry primitives
along with output *lenses* for standard browser-based viewing and
exchange formats such as PDF, SVG, X3D, PNG, as well as DXF.

Dave Cooper committed
41 42
Optionally there is available a set of surface- and solid-modeling
primitives which currently depend on SMLib, a commercial geometry
Dave Cooper committed
43 44 45
kernel available from Solid Modeling Solutions, Inc. SMLib enables the
use of standard CAD data exchange formats such as Iges, STEP, and STL
(for 3D printing). 
Dave Cooper committed
46 47


Dave Cooper committed
48
### Basic Requirements:
Dave Cooper committed
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106

 1. Common Lisp: Allegro CL 9.0, LispWorks 6.x, SBCL, or CCL (Clozure
    CL). Without web interface, initial ports to ECL, ABCL, and CLISP
    have also been completed. 

 2. Quicklisp (available from http://www.quicklisp.org)

 3. Gnu Emacs (recommended Editor/IDE -- native CL Editor/IDEs can
    also be used)

 4. Standard Web Browser (Chrome, Firefox, Safari, IE, Opera). Pick
    one with WebGL support if possible (check
    [here](http://www.x3dom.org/?page_id=9) and
    [here](http://www.x3dom.org/check/) to check for WebGL browser
    support)

 5. Curiosity, Creativity, and Courage


### Installation

 To load the entire system, you can do it with:

```common-lisp
  (ql:quickload :gendl)
  (gendl:start-gendl!)
```

Now you can do a quick sanity check by visiting:

  [http://localhost:9000/tasty](http://localhost:9000/tasty)

in your browser and trying to instantiate the default assembly tree
(robot).

### Emacs Editor/IDE Support

Slime (Superior Lisp Interaction Mode for Emacs) is recommended 
for developing Gendl applications with Emacs.  

Slime is available with:

   (ql:quickload :quicklisp-slime-helper)

`Glime' is our Gendl-specific customizations to Slime. This is
implemented entirely on the swank (Common Lisp) side of things, and
can be loaded with

 ```common-lisp
  (load (compile-file ".../gendl/emacs/glime.lisp"))
 ```

Although not strictly necessary, the file `.../gendl/emacs/gdl.el` is
also provided and can be used as a starting point or reference for
loading Glime and Gendl into an emacs environment.

### Further Documentation

Dave Cooper committed
107
Documentation is published
108
[here](http://gen.works/downloads/tutorial.pdf), and this very much
Dave Cooper committed
109 110
an active work in progress. Training tutorials and videos are also in
progress and in their current state are available in the Documentation
111
section on http://gen.works.
Dave Cooper committed
112 113 114


### Support/Community
115 116

* #gendl on freenode.irc.net (irc://irc.freenode.net/gendl)
Dave Cooper committed
117
* @gendl and @genworks on Twitter
118
* (common-lisp.net mailing list hopefully/possibly coming soon)
Dave Cooper committed
119
* [Genworks Google Group](http://groups.google.com/group/genworks)
120 121
* #lisp, #quicklisp, #emacs channels on irc.freenode.net

Dave Cooper committed
122
### Training/Coaching
Dave Cooper committed
123

Dave Cooper committed
124 125
* Genworks would like to begin hosting free Gendl/GDL training
  seminars in Metro Detroit and possibly other locations. Please
126
  contact [Genworks](http://gen.works) if you are interested in
Dave Cooper committed
127
  being notified of any upcoming seminars.
Dave Cooper committed
128 129


Dave Cooper committed
130
### Gendl source code Architecture:
Dave Cooper committed
131

Dave Cooper committed
132 133 134
Gendl is separated into layered components, some of which depend on
others. Some components also depend on third-party external libraries,
which are currently handled with the Quicklisp system.
Dave Cooper committed
135

Dave Cooper committed
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
At the core "kernel" is the `:gendl` (nickname `:gdl`) package,
implemented with files in the folder `gendl/base/`. This includes the
compiler/expanders for `define-object` and related macros as well as
core primitives such as `vanilla-mixin`.

Including the base, there are eight modules supported with Gendl:


* `:base` - (gendl/base/) Gendl language kernel for compiling
     declarative object definitions and working with them at runtime.

* `:cl-lite` - (gendl/cl-lite/) For compiling and loading directory
     trees as projects. This can also generate ASDF files, and
     supplements the standard use of asdf and quicklisp.

* `:geom-base` - (gendl/geom-base/) Built-in Gendl 3D and 2D wireframe
      primitives and cartesian coordinate system for basic geometry
      generation and manipulation.


* `:gwl` - (gendl/gwl/) Generative Web Language, for representing web pages
       using GDL objects, includes Ajax-based web interaction with
       your model.


* `:gwl-graphics` - (gendl/gwl-graphics/) for including graphics
     rendered from geometry object in GWL web pages.

* `:surf` - (gendl/surf/) NURBS surface and brep/boolean solids
      primitives (these don't do much without the underlying geometry
      kernel middleware or implementation).

* `:tasty` - (gendl/apps/tasty/) web-based testing, tracking, and
   debugging utility. 

* `:yadd` - (gendl/apps/yadd/) for self auto-documentation.

* `:regression` - (gdl/regression) regression test utilities and tests.

Dave Cooper committed
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190

### Alternative Geometry Kernels

If you have a different favorite solid modeling kernel
(e.g. OpenCascade, Parasolid, Geometros sgCore), then an interesting
project would be to interface the existing Surface package to that
kernel, by implementing the methods in surf/source/methods.lisp.

The Surface (`:surf`) package (in the `surf/` folder) contains all the
high-level Surface and Solid modeling primitives currently implemented
in Gendl. These primitives provide a protocol for what the objects
should be able to do (i.e. what messages they should answer), but
without the SMLib library and associated middleware available, they
will not be able to return any results.  The SMLib kernel and
associated middleware are available as part of the commercial
Genworks® GDL product from [Genworks®
191
International](http://gen.works).
Dave Cooper committed
192 193


Dave Cooper committed
194 195 196 197 198 199 200 201 202 203 204 205 206 207
### License

[Affero Gnu General Public License](http://www.gnu.org/licenses/agpl.txt).

The AGPL, has the requirement that you release any derivatives and any
applications compiled with Gendl under AGPL-compatible license (if
distributed at all).


### Proprietary Distribution

For Proprietary (closed-source) development and distribution, the
commercial Genworks® GDL system (including Gendl® technology and,
optionally, commercial CL engines, technical support, and commercial
208
solid modeling engine) is available from [Genworks](http://gen.works). 
Dave Cooper committed
209 210


Dave Cooper committed
211
### Bug Bounty Program, Bug Fix Program
Dave Cooper committed
212 213
Genworks offers a modest bounty for reporting (and sometimes solving)
of bugs on the [Issues
214 215 216
List](https://gitlab.common-lisp.net/gendl/gendl/issues?scope=all&state=opened).

Please contact [Genworks](http://gen.works) for details.
Dave Cooper committed
217

Dave Cooper committed
218 219 220



Dave Cooper committed
221

Dave Cooper committed
222

Dave Cooper committed
223 224