Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
gendl
gendl
Commits
0131a6b9
Commit
0131a6b9
authored
Jul 09, 2012
by
Dave Cooper
Browse files
trying to get site out for launch. Other base modifications.
parent
5769ce91
Changes
23
Hide whitespace changes
Inline
Side-by-side
demos/newsite/source/configurator-engine.lisp
View file @
0131a6b9
...
...
@@ -28,7 +28,7 @@
:computed-slots
((
link-title
"Configurator"
)
(
right-section-js-to-eval
"
$j('#all-go').hide(200
);$j('#product-image').show(200);"
)
(
right-section-js-to-eval
"
hide_all(
);$j('#product-image').show(200);"
)
(
right-section-inner-html
(
with-cl-who-string
()
((
:a
:name
"Top"
))
...
...
demos/newsite/source/configurator.lisp
View file @
0131a6b9
...
...
@@ -493,7 +493,11 @@
(
funcall
(
the
discount-func
)
(
ecase
(
the
selected-geometry-kernel
)
(
:smlib
17200
)
(
:basic
12000
)))))))
(
:basic
12000
)))))
(
explanation
:type
'tech-support-level-explanation
)
))
...
...
demos/newsite/source/explanations.lisp
View file @
0131a6b9
...
...
@@ -360,3 +360,65 @@
during a running GenDL session."
)))))))
(
define-object
tech-support-level-explanation
(
sheet-section
)
:computed-slots
((
inner-html
(
with-cl-who-string
()
(
:h2
"Technical Support Levels Explained"
)
((
:div
:class
"profile"
)
((
:div
:class
"people"
)
(
:p
" While the main goal of Gendl is ease of use, because of the broad and powerful nature
of the system, some level of professional technical support can provide a valuable boost to your project."
((
:a
:name
"tech-support-none"
))
((
:a
:href
"#Top"
)
(
:h3
"None (i.e. self-provided or third-party)"
))
((
:div
:class
"profile"
)
((
:div
:class
"people"
)
(
:p
"With this option, you will have to provide for
your own CL and Gendl support. This option may be
appropriate if you already have an existing CL
infrastructure in place, and you are equipped to
handle your own GenDL technical support."
)))
((
:a
:name
"tech-support-install"
))
((
:a
:href
"#Top"
)
(
:h3
"Installation and Configuration"
))
((
:div
:class
"profile"
)
((
:div
:class
"people"
)
(
:p
"We will support your initial installation..."
)))
((
:a
:name
"tech-support-how-to"
))
((
:a
:href
"#Top"
)
(
:h3
"Technical how-to Questions and Answers"
))
((
:div
:class
"profile"
)
((
:div
:class
"people"
)
(
:p
" With this option, you can call or write to Genworks with customized inquiries
and receive custom support answers, typically within 24 hours. If you send working self-contained
example applications, we can also attempt to replicate and debug any problems you are having with
your application. At this support level we cannot support Nondisclosure Agreements (NDA) on sample
code sent."
)))
((
:a
:name
"tech-support-nda"
))
((
:a
:href
"#Top"
)
(
:h3
"Application Code Nondisclosure"
))
((
:div
:class
"profile"
)
((
:div
:class
"people"
)
(
:p
"At this support level, you may send us your self-contained application code for debugging, and
we will take measures to keep this code under strict Confidentiality and Nondisclosure."
)))
((
:a
:name
"tech-support-mission-critical"
))
((
:a
:href
"#Top"
)
(
:h3
"Mission-critical Production Environment"
))
((
:div
:class
"profile"
)
((
:div
:class
"people"
)
(
:p
"This is the ultimate support level, which
provides you with custom Application Support, default Nondisclosure on
all submitted materials, and real-time telepone and chat support for
mission-critical applications (e.g. high-traffic websites or
manufacturing facilities running on Gendl technology)."
))))))))))
\ No newline at end of file
demos/newsite/source/licensing.lisp
View file @
0131a6b9
...
...
@@ -27,7 +27,7 @@
((
title
"Genworks International - Product Licensing"
)
(
link-title
"Licensing"
)
(
right-section-js-to-eval
"
$j('#all-go').hide(200
);$j('#product-image').show(200);"
)
(
right-section-js-to-eval
"
hide_all(
);$j('#product-image').show(200);"
)
(
right-section-inner-html
(
the
configurator
gendl-license
explanation
inner-html
)
...
...
demos/newsite/source/mixins.lisp
View file @
0131a6b9
...
...
@@ -49,18 +49,30 @@ Generative Programming, Dynamic Languages, 3D Geometry, NURBS, Solid Modeling, D
$j = jQuery.noConflict();
function show_x3dom ()
$j(document).ready(function() {
b = BrowserDetect;
b.init();
display_x3dom_or_raphael ();
})
function hide_all ()
{
/* var x3d_element;
x3d_element = document.getElementById('the_element');
x3d_element.style.width = \"526px\";
x3d_element.style.height = \"420px\"; */
$j(\"all-go\").show();
alert('hey now - shown');
}
$j(\"#no-webgl-no-flash\").hide();
$j(\"#all-go\").hide();
$j(\"#product-image\").hide();
}
function resize_x3dom(width, height)
{$j(\"#the_element\").attr(\"width\",width);
$j(\"#the_element\").attr(\"height\",height);
}
$j(document).ready(function() {
function display_x3dom_or_raphael ()
{
hide_all();
var canvas;
var gl, experimental;
...
...
@@ -68,8 +80,8 @@ Generative Programming, Dynamic Languages, 3D Geometry, NURBS, Solid Modeling, D
var has_flash = false;
var x3d_element = null;
b = BrowserDetect;
b.init();
/*
b = BrowserDetect;
b.init();
*/
canvas = document.getElementById(\"x3dom-logo\");
...
...
@@ -110,8 +122,7 @@ Generative Programming, Dynamic Languages, 3D Geometry, NURBS, Solid Modeling, D
$j(\"#all-go\").show();
}
});
}
"
)))
...
...
@@ -159,7 +170,10 @@ Generative Programming, Dynamic Languages, 3D Geometry, NURBS, Solid Modeling, D
(
right-section-inner-html
(
with-cl-who-string
()
(
:h2
"Empty Template"
)))
(
right-section-js-to-eval
"$j('#product-image').hide(200); $j('#all-go').show(200); $j('#address').hide(200); $j('#tickete').show(200);"
)
;;(right-section-js-to-eval "$j('#product-image').hide(200); $j('#all-go').show(200); $j('#address').hide(200); $j('#tickete').show(200);")
(
right-section-js-to-eval
(
string-append
"display_x3dom_or_raphael();"
(
format
nil
"resize_x3dom('~apx', '~apx');"
(
the
width
)
(
the
length
))))
(
link-title
(
the
strings-for-display
))
...
...
demos/newsite/source/product-descriptions.lisp
View file @
0131a6b9
...
...
@@ -28,7 +28,7 @@
((
title
"Genworks International - Product Descriptions"
)
(
link-title
"Descriptions"
)
(
right-section-js-to-eval
"
$j('#all-go').hide(200
);$j('#product-image').show(200);"
)
(
right-section-js-to-eval
"
hide_all(
);$j('#product-image').show(200);"
)
(
right-section-inner-html
(
with-cl-who-string
()
...
...
dist/emacs/gdl.el
View file @
0131a6b9
...
...
@@ -208,6 +208,10 @@
(
setq
slime-complete-symbol-function
'slime-fuzzy-complete-symbol
)
(
set-slime-shortcuts
)
(
add-hook
'slime-repl-mode-hook
'remove-dos-eol
)
(
add-to-list
'auto-mode-alist
'
(
"\\.gdl\\'"
.
lisp-mode
))
(
add-to-list
'auto-mode-alist
'
(
"\\.gendl\\'"
.
lisp-mode
))
))
;;
...
...
documentation/training/g102-tud/data/aircraft-1.dat
View file @
0131a6b9
...
...
@@ -41,7 +41,8 @@
:tail-c-tip 2
:tail-thickness 0.8
:tail-dihedral 8
:tail-configuration :fuselage-mounted
;;
;; Rudder data
;;
...
...
documentation/training/g102-tud/examples/gdl-examples.asd
0 → 100644
View file @
0131a6b9
(
asdf:defsystem
#:gdl-examples
:description
"Auto-generated asdf defsys from Genworks GDL cl-lite."
:author
"Genworks and Dave Cooper unless otherwise indicated"
:license
"AGPL unless otherwise indicated"
:serial
t
:version
"2012063000"
:depends-on
nil
:components
nil
)
\ No newline at end of file
documentation/training/g102-tud/examples/source/primi-plane.
lisp
→
documentation/training/g102-tud/examples/source/primi-plane.
gdl
View file @
0131a6b9
...
...
@@ -33,26 +33,14 @@
:input-slots
((data-folder *data-folder*)
(aircraft-data-file (merge-pathnames "aircraft-1.dat" (the data-folder)))
(
points-data-file
(
merge-pathnames
"NACA_0012.dat"
(
the
data-folder
))))
(points-data-file (merge-pathnames "NACA_0012.dat" (the data-folder)))
(wing-dihedral (the data wing-dihedral))
(tail-configuration (the data tail-configuration)))
:objects
((
data
:type
'aircraft-data
:hidden?
t
:parameters
(
with-open-file
(
in
(
the
aircraft-data-file
))
(
read
in
))
:points-data
(
with-open-file
(
in
(
the
points-data-file
))
(
read
in
)))
(
canonical-profile
:type
'profile-curve
:hidden?
t
:points-data
(
the
data
points-data
))
:computed-slots ((use-local-box? nil))
(
approximated-profile
:type
'approximated-curve
:curve-in
(
the
canonical-profile
)
:tolerance
0.01
;;:tolerance 0.001
)
(
wing-assy
:type
'box-wings
:objects
((wing-assy :type 'box-wings
:c-root (the data wing-c-root)
:c-tip (the data wing-c-tip)
:span (the data wing-span)
...
...
@@ -60,22 +48,23 @@
:down (- (the fuselage radius) (half (the-child thickness)))
:front (* 1/6 (the fuselage length)))
:thickness (the data wing-thickness)
:dihedral
(
the
data
wing-dihedral
)
:dihedral (the wing-dihedral)
:canonical-profile (the canonical-profile)
:display-controls
(
list
:color
:green
)
)
:display-controls (list :color :green))
(tail-assy :type 'box-tail
:configuration (the tail-configuration)
:c-root (the data tail-c-root)
:c-tip (the data tail-c-tip)
:span (the data tail-span)
:root-center
(
translate
(
the
center
)
:down
(
-
(
the
fuselage
radius
)
(
the-child
thickness
))
:rear
(
-
(
half
(
the
fuselage
length
))
(
the-child
c-root
)))
:fin-root-center
(
translate
(
the-child
root-center
)
:up
(
-
(
twice
(
the
fuselage
radius
))
(
twice
(
the-child
thickness
))))
:fuselage-radius (the fuselage radius)
:root-center-nominal (translate (the center)
:down (- (the fuselage radius) (the-child thickness))
:rear (- (half (the fuselage length))
(the-child c-root)))
:fin-root-center (translate (the-child root-center-nominal) :up
(- (twice (the fuselage radius))
(twice (the-child thickness))))
:thickness (the data tail-thickness)
:dihedral (the data tail-dihedral)
:fin-span (the data fin-span)
...
...
@@ -91,7 +80,25 @@
:l (the data fuselage-length)
:cross-section-percents (the data fuselage-cross-section-percents)
:display-controls (list :color :red)
)))
))
:hidden-objects
((data :type 'aircraft-data
:hidden? t
:parameters (with-open-file (in (the aircraft-data-file)) (read in))
:points-data (with-open-file (in (the points-data-file)) (read in)))
(canonical-profile :type 'profile-curve
:hidden? t
:points-data (the data points-data))
(approximated-profile :type 'approximated-curve
:curve-in (the canonical-profile)
:tolerance 0.01
;;:tolerance 0.001
)))
(define-object aircraft-data ()
...
...
@@ -101,6 +108,7 @@
fuselage-cross-section-percents
tail-c-root tail-c-tip tail-span
tail-thickness tail-dihedral
tail-configuration
points-data
))
...
...
@@ -212,6 +220,7 @@
(define-object box-wings (base-object)
:input-slots (root-center span c-root c-tip thickness dihedral canonical-profile)
:computed-slots ((use-local-box? nil))
:objects
((wings :type 'box-wing
...
...
@@ -238,14 +247,31 @@
(define-object box-tail (box-wings)
:input-slots
(
fin-root-center
fin-span
fin-thickness
fin-c-root
fin-c-tip
)
:input-slots (configuration root-center-nominal
fin-root-center fin-span fin-thickness
fin-c-root fin-c-tip fuselage-radius)
:computed-slots ((root-center (ecase (the configuration)
(:fuselage-mounted (the root-center-nominal))
(:cruciform (translate (the root-center-nominal)
:up
(+ (twice (the fuselage radius))
(half (the fin-span))
(- (twice (the thickness)))
)))
(:t-tail (translate (the root-center-nominal)
:up
(+ (twice (the fuselage radius))
(the fin-span)
(- (twice (the thickness)))))))))
:objects ((fin :type 'box-wing
:root-point (the fin-root-center)
:span (the fin-span)
:c-root (the fin-c-root)
:c-tip
(
the
fin-c-tip
)
:c-tip (ecase (the configuration)
(:fuselage-mounted (the fin-c-tip))
((:cruciform :t-tail) (the fin-c-root)))
:thickness (the fin-thickness)
:orientation (alignment :right (the (face-normal-vector :top))
:top (the (face-normal-vector :left))))))
...
...
@@ -255,10 +281,10 @@
(define-object box-wing (box)
:input-slots (root-point side span c-root c-tip thickness canonical-profile)
:computed-slots
((
width
(
the
span
))
:computed-slots ((use-local-box? nil)
(width (the span))
(length (the c-root))
(height (the thickness))
(center (translate-along-vector (the root-point)
(the (face-normal-vector :right))
(half (the width))
...
...
@@ -296,5 +322,5 @@
:end-caps-on-brep? t
:curves (list (the root-profile) (the tip-profile)))))
(
setq
*tess-max-3d-edge-factor*
0.3
)
(
setq
*tess-max-angle-degrees*
25
)
\ No newline at end of file
(setq *tess-max-3d-edge-factor* 0.2)
(setq *tess-max-angle-degrees* 12)
\ No newline at end of file
documentation/training/g102-tud/examples/source/ui-primi-plane.gdl
0 → 100644
View file @
0131a6b9
;;
;; Copyright 2012 Genworks International
;;
;; This source file contains free software: you can redistribute it
;; and/or modify it under the terms of the GNU Affero General Public
;; License as published by the Free Software Foundation, either
;; version 3 of the License, or (at your option) any later version.
;;
;; This source file is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; Affero General Public License for more details.
;;
;; You should have received a copy of the GNU Affero General Public
;; License along with this source file. If not, see
;; <http://www.gnu.org/licenses/>.
;;
(in-package :gwl-user)
(define-object primi-plane-ui (base-ajax-sheet)
:computed-slots ((use-jquery? t)
(main-sheet-body (with-cl-who-string ()
(:table (:tr (:td (str (the main-area main-div)))
(:td (str (the viewport main-div))))))))
:hidden-objects
((plane :type 'gdl-user::primi-plane
:wing-dihedral (the wing-dihedral value)
:tail-configuration (the tail-configuration value)))
:objects ((main-area :type 'sheet-section
:inner-html (with-cl-who-string ()
(when gwl:*developing?* (str (the development-links)))
(:h2 "x3dom demo")
(:fieldset
(str (the wing-dihedral html-string))
(str (the tail-configuration html-string)))))
(viewport :type 'base-ajax-graphics-sheet
:display-list-object-roots (list (the plane))
:width 800 :length 600
:zoom-factor-renderer 1.8
:inner-html (with-cl-who-string ()
(the-child write-embedded-x3dom-world))
:image-format-default :x3dom)
(tail-configuration :type 'menu-form-control
:size 1
:prompt "Tail Configuration"
:default (the plane data tail-configuration)
:onchange (string-append
(the (gdl-sjax-call :form-controls (list (the-child))))
"location.reload(true);")
:choice-plist (list :fuselage-mounted "Fuselage Mounted"
:cruciform "Cruciform"
:t-tail "T-Tail"))
(wing-dihedral :type 'text-form-control
:domain :number
:default (the plane data wing-dihedral)
:onchange (string-append
(the (gdl-sjax-call :form-controls (list (the-child))))
"location.reload(true);"
)
:prompt "Wing Dihedral Angle")
))
(publish-gwl-app "/ppu" 'primi-plane-ui)
documentation/training/gdl-training.asd
View file @
0131a6b9
(
asdf:defsystem
#:gdl-training
:description
"Auto-generated asdf defsys from Genworks GDL cl-lite."
:author
"Genworks and Dave Cooper unless otherwise indicated"
:license
"AGPL unless otherwise indicated"
:serial
t
:version
"2012060500"
:depends-on
(
:gdl-smlib
)
:components
((
:file
"slide-show/source/package"
)
(
:file
"slide-show/source/assembly"
)
(
:file
"slide-show/source/publish"
)
(
:file
"g101/source/package"
)
(
:file
"g101/source/publish"
)
(
:file
"g101/examples/source/file-io"
)
(
:file
"g101/examples/source/solutions"
)
(
:file
"g101/slides/source/assembly"
)
(
:file
"g101/slides/source/conclusion"
)
(
:file
"g101/slides/source/control"
)
(
:file
"g101/slides/source/data-structures"
)
(
:file
"g101/slides/source/functions"
)
(
:file
"g101/slides/source/input-output"
)
(
:file
"g101/slides/source/introduction"
)
(
:file
"g101/slides/source/lists"
)
(
:file
"g101/slides/source/macros"
)
(
:file
"g101/slides/source/numbers"
)
(
:file
"g101/slides/source/symbols"
)
(
:file
"g101/slides/source/welcome"
)
(
:file
"g102/source/package"
)
(
:file
"g102/source/publish"
)
(
:file
"g102/examples/ackermann/source/package"
)
(
:file
"g102/examples/ackermann/source/ackermann-assembly"
)
(
:file
"g102/examples/ackermann/source/simple-linkage"
)
(
:file
"g102/examples/ackermann/source/tie-rod-arm"
)
(
:file
"g102/examples/city/source/package"
)
(
:file
"g102/examples/city/source/rules"
)
(
:file
"g102/examples/city/source/assembly"
)
(
:file
"g102/examples/city/source/building"
)
(
:file
"g102/examples/city/source/grid-section"
)
(
:file
"g102/examples/solids/source/primitives"
)
(
:file
"g102/examples/solids/source/web-page"
)
(
:file
"g102/examples/source/fuselage-example"
)
(
:file
"g102/examples/source/g102-exercises"
)
(
:file
"g102/examples/source/hairy"
)
(
:file
"g102/examples/source/section-2-examples"
)
(
:file
"g102/examples/source/tower-example"
)
(
:file
"g102/examples/table/source/t-support"
)
(
:file
"g102/examples/table/source/table"
)
(
:file
"g102/slides/source/assembly"
)
(
:file
"g102/slides/source/debugging"
)
(
:file
"g102/slides/source/fuselage-example"
)
(
:file
"g102/slides/source/future"
)
(
:file
"g102/slides/source/geometry"
)
(
:file
"g102/slides/source/outside-world"
)
(
:file
"g102/slides/source/session-01"
)
(
:file
"g102/slides/source/session-02"
)
(
:file
"g102/slides/source/session-03"
)
(
:file
"g102/slides/source/session-04"
)
(
:file
"g102/slides/source/session-05"
)
(
:file
"g102/slides/source/session-06"
)
(
:file
"g102/slides/source/session-07"
)
(
:file
"g102/slides/source/tower-example"
)
(
:file
"g102/slides/source/user-interface"
)
(
:file
"g102/solutions/ackermann/source/package"
)
(
:file
"g102/solutions/ackermann/source/ackermann-assembly"
)
(
:file
"g102/solutions/ackermann/source/simple-linkage"
)
(
:file
"g102/solutions/ackermann/source/tie-rod-arm"
)
(
:file
"g102/solutions/city/source/package"
)
(
:file
"g102/solutions/city/source/rules"
)
(
:file
"g102/solutions/city/source/assembly"
)
(
:file
"g102/solutions/city/source/building"
)
(
:file
"g102/solutions/city/source/grid-section"
)
(
:file
"g102-tud/source/package"
)
(
:file
"g102-tud/source/publish"
)
(
:file
"g102-tud/slides/source/ch2"
)
(
:file
"g102-tud/slides/source/ch3"
)
(
:file
"g105/source/package"
)
(
:file
"g105/source/publish"
)
(
:file
"g105/examples/source/drilled-block"
)
(
:file
"g105/slides/source/assembly"
)
(
:file
"g105/slides/source/session-01"
)
(
:file
"g105/slides/source/session-02"
)
(
:file
"g108/source/package"
)
(
:file
"g108/source/publish"
)
(
:file
"g108/examples/source/examples"
)
(
:file
"g108/slides/source/ajax-sections"
)
(
:file
"g108/slides/source/assembly"
)
(
:file
"g108/slides/source/basic-sheet"
)))
\ No newline at end of file
(
asdf:defsystem
#:gdl-training
:description
"Auto-generated asdf defsys from Genworks GDL cl-lite."
:author
"Genworks and Dave Cooper unless otherwise indicated"
:license
"AGPL unless otherwise indicated"
:serial
t
:version
"2012063000"
:depends-on
(
:gdl-smlib
)
:components
((
:lisp
"slide-show/source/package"
)
(
:gendl
"slide-show/source/assembly"
)
(
:lisp
"slide-show/source/publish"
)
(
:lisp
"g101/source/package"
)
(
:lisp
"g101/source/publish"
)
(
:lisp
"g101/examples/source/file-io"
)
(
:lisp
"g101/examples/source/solutions"
)
(
:lisp
"g101/slides/source/assembly"
)
(
:lisp
"g101/slides/source/conclusion"
)
(
:lisp
"g101/slides/source/control"
)
(
:lisp
"g101/slides/source/data-structures"
)
(
:lisp
"g101/slides/source/functions"
)
(
:lisp
"g101/slides/source/input-output"
)
(
:lisp
"g101/slides/source/introduction"
)
(
:lisp
"g101/slides/source/lists"
)
(
:lisp
"g101/slides/source/macros"
)
(
:lisp
"g101/slides/source/numbers"
)
(
:lisp
"g101/slides/source/symbols"
)
(
:lisp
"g101/slides/source/welcome"
)
(
:lisp
"g102/source/package"
)
(
:lisp
"g102/source/publish"
)
(
:lisp
"g102/examples/ackermann/source/package"
)
(
:lisp
"g102/examples/ackermann/source/ackermann-assembly"
)
(
:lisp
"g102/examples/ackermann/source/simple-linkage"
)
(
:lisp
"g102/examples/ackermann/source/tie-rod-arm"
)
(
:lisp
"g102/examples/city/source/package"
)
(
:lisp
"g102/examples/city/source/rules"
)
(
:lisp
"g102/examples/city/source/assembly"
)
(
:lisp
"g102/examples/city/source/building"
)
(
:lisp
"g102/examples/city/source/grid-section"
)
(
:lisp
"g102/examples/solids/source/primitives"
)
(
:lisp
"g102/examples/solids/source/web-page"
)
(
:lisp
"g102/examples/source/fuselage-example"
)
(
:lisp
"g102/examples/source/g102-exercises"
)
(
:lisp
"g102/examples/source/hairy"
)
(
:lisp
"g102/examples/source/section-2-examples"
)
(
:lisp
"g102/examples/source/tower-example"
)
(
:lisp
"g102/examples/table/source/t-support"
)
(
:lisp
"g102/examples/table/source/table"
)
(
:lisp
"g102/slides/source/assembly"
)
(
:lisp
"g102/slides/source/debugging"
)
(
:lisp
"g102/slides/source/fuselage-example"
)
(
:lisp
"g102/slides/source/future"
)
(
:lisp
"g102/slides/source/geometry"
)
(
:lisp
"g102/slides/source/outside-world"
)
(
:lisp
"g102/slides/source/session-01"
)
(
:lisp
"g102/slides/source/session-02"
)
(
:lisp
"g102/slides/source/session-03"
)
(
:lisp
"g102/slides/source/session-04"
)
(
:lisp
"g102/slides/source/session-05"
)
(
:lisp
"g102/slides/source/session-06"
)
(
:lisp
"g102/slides/source/session-07"
)
(
:lisp
"g102/slides/source/tower-example"
)