+ (:ul
+ (:li "The easiest way to install is to use the Debian GNU/Linux operating system. Using the testing or unstable distributions, you can give the command:"
+ (:div
+ (:tt "apt-get install libapache-mod-lisp cl-modlisp cl-kmrcl"))
+ (:div
+ "If you are not using Debian, you will need to download and install
+mod_lisp, cl-modlisp, and cl-kmrcl manually."))
+ (:li
+ "Add something like the below to httpd.conf and then restart apache"
+ (:div (:tt "LispServer 127.0.0.1 20123 \"localhost\""))
+ (:div (:tt "AddHandler lisp-handler .lsp")))
+ (:li
+ "Start your Lisp implementation and load cl-modlisp with"
+ (:div (:tt "(asdf:operate 'asdf:load-op 'modlisp)")))
+ (:li
+ "Start the server with"
+ (:div (:tt "(ml:modlisp-start :port 20123)")))
+ (:li "Try some demostration pages"
+ (:div (:tt "links http://localhost/fixed.lsp"))
+ (:div (:tt "links http://localhost/debug.lsp")))
+ (:li "Shutdown the all cl-modlisp servers with"
+ (:div (:tt "(ml:modlisp-stop-all)"))))
+
+ (:h2 "Process Models")
+ (:p "There are two process models")
+ (:ul
+ (:li (:div (:b "Each connection spawns a new thread"))
+ (:div "This is the default model. Each new connection to listener socket spawns a new connection. This allows for an arbitrary number of concurrent connections. This has advantages if the workers require a long execution time."))
+ (:li (:div (:b "Fixed pool of workers"))
+ (:div "This model is selected by passing the number of worker processes to "
+ (:tt "init/listener")
+ " with the keyword "
+ (:tt "number-fixed-workers")
+ ". This model has a lower overhead since new processes are not created and destroyed with each connection. It has advantages when the workers have a short execution time.")))
+
+ (:h2 "Usage")
+ (:p "The demo.lisp file for examples of using cl-modlisp.")
+ )))