Recreate repository
authorclinton <clinton@unknownlamer.org>
Thu, 13 Mar 2008 22:20:55 +0000 (22:20 +0000)
committerclinton <clinton@unknownlamer.org>
Thu, 13 Mar 2008 22:20:55 +0000 (22:20 +0000)
38 files changed:
Bicycle Routes.muse [new file with mode: 0644]
Bicycle.muse [new file with mode: 0644]
Books.muse [new file with mode: 0644]
Cary to Greensboro Bicycle Route.muse [new file with mode: 0644]
Lisp.muse [new file with mode: 0644]
Metaobject Protocols.muse [new file with mode: 0644]
Music I Enjoy.muse [new file with mode: 0644]
My Bicycle.muse [new file with mode: 0644]
Old Viewpoints.muse [new file with mode: 0644]
Politics.muse [new file with mode: 0644]
Quotations.muse [new file with mode: 0644]
Reading.muse [new file with mode: 0644]
SCWM.muse [new file with mode: 0644]
TRUTH.muse [new file with mode: 0644]
UCWNotes.muse [new file with mode: 0644]
William James - The Varieties of Religious Experience.muse [new file with mode: 0644]
Wisdom.muse [new file with mode: 0644]
files/resume.pdf [new file with mode: 0644]
img/2006-12-18.jpg [new file with mode: 0644]
img/buttons/debian.png [new file with mode: 0644]
img/buttons/foaf.png [new file with mode: 0644]
img/buttons/fsf_member.png [new file with mode: 0644]
img/buttons/hcoop.png [new file with mode: 0644]
img/buttons/kuro5hin.png [new file with mode: 0644]
img/buttons/sbcl.png [new file with mode: 0644]
img/buttons/w3c_ab.png [new file with mode: 0644]
img/hcbadge3.gif [new file with mode: 0644]
img/photos/bicycle/2006-10-25/front.jpg [new file with mode: 0644]
img/photos/bicycle/2006-10-25/handlebar.jpg [new file with mode: 0644]
img/photos/bicycle/2006-10-25/left.jpg [new file with mode: 0644]
img/photos/bicycle/before_tape_upside_down.jpg [new file with mode: 0644]
img/photos/bicycle/bicycle_post_tape.jpg [new file with mode: 0644]
img/photos/bicycle/headlight.jpg [new file with mode: 0644]
img/photos/bicycle/post_tape_nighttime_1.jpg [new file with mode: 0644]
img/photos/me/2006-12-01.jpg [new file with mode: 0644]
img/photos/me/2006-12-18.jpg [new file with mode: 0644]
img/screenshots/2007-05-25_workstation-gimp.png [new file with mode: 0644]
index.muse [new file with mode: 0644]

diff --git a/Bicycle Routes.muse b/Bicycle Routes.muse
new file mode 100644 (file)
index 0000000..05d39a2
--- /dev/null
@@ -0,0 +1,15 @@
+I travel mostly by bicycle, and have to plot routes out for myself
+often. I think some may be useful to people in the Baltimore area of
+Maryland.
+
+* My Routes
+
+** [[http://www.bikely.com/listpaths/by/clinton][Bikely Routes]]
+** [[Cary to Greensboro Bicycle Route]]
+
+* Maryland/DC Routes
+
+** [[http://bikewashington.org/routes/all.htm][Bikewashington]]
+
+A nice collection of routes for travelling around Maryland with full
+cues and maps.
diff --git a/Bicycle.muse b/Bicycle.muse
new file mode 100644 (file)
index 0000000..41d1d74
--- /dev/null
@@ -0,0 +1,42 @@
+#title Bicycles Are Our Friends
+
+* [[Bicycle Routes]]
+
+* [[My Bicycle]]
+
+* [[http://journal.unknownlamer.org/tag/bicycle][Bicycling Journal Entries]]
+
+I write about various bicycle related things in my journal.
+
+
+* Why I Do Not, and Shall Never Again, Own a Car
+
+Do you find asphalt attractive? Do you enjoy the smell of gasoline? Is
+going to the pump a pleasant experience for your wallet? What of our
+wonderful insurance system?
+
+Asphalt is ugly. Gasoline smells terrible. Gasoline is expensive. Auto
+insurance costs more than I spend on food every month (twice as much
+even).
+
+I am free of these things and refuse to be enslaved by them again. I
+have no need for useless status symbols and vehicles which can take me
+places five times faster than I have the desire to get there. It is
+much more enjoyable to put fuel into myself rather than a gas tank (my
+tongue and stomach do quite enjoy it as well).
+
+Every mile travelled in a car eats money, pollutes the air just a
+little bit more, causes some damage to the roads, and is (I think)
+quite stressful when there is heavy traffic.
+
+Every mile travelled on a bicycle is another 100 Calories of food I
+get to eat at the end of the ride (mmm carbohydrates). I suppose my
+lungs are releasing CO_2 into the air, but perhaps this is made up by
+my bicycle causing no stress to the asphalt beneath me. Most of the
+time I find bicycling to quite relaxing; even on the 30F
+mornings. There is, naturally, some stress; usually when cars pass me
+on the left as I am signalling with my arm that I am preparing to make
+a left turn, or forcing me off of the road because I am in the center
+of the lane as we drift to a red light, or passing me when I am
+exceeding the speed limit (hills are friendly when you're going down
+them).
diff --git a/Books.muse b/Books.muse
new file mode 100644 (file)
index 0000000..72b248b
--- /dev/null
@@ -0,0 +1 @@
+#title Book Reviews of a Sort
diff --git a/Cary to Greensboro Bicycle Route.muse b/Cary to Greensboro Bicycle Route.muse
new file mode 100644 (file)
index 0000000..7ebeb8f
--- /dev/null
@@ -0,0 +1,71 @@
+#title Earth Day Trip to Greensboro
+
+UNCGreen was having an Earth Day celebration a bit early (to avoid
+conflicts with final exams) on April 19, 2007. I know several people
+who attend UNCG, and I was in Morrisville at the time so I decided to
+tape my handlebars green and make the trek.
+
+* Route 
+
+The route starts in the middle of Morrisville/Cary on Davis Drive at
+the corner of High House Road facing South, and ends at the Amtrak
+Depot in Greensboro.
+
+ 1. R High House Road
+ 2. Continue on High House - becomes Green Hill Road
+ 2. L Lewter Shop Road @ End of Road
+ 3. R NC-751
+ 4. L Martha's Chapel Road
+ 5. R Farrington Road (1008) @ Jordan Lake
+ 6. L Lystra Road @ Light
+ 7. L Jack Bennet Road 
+ 8. L US-15-501 @ Light
+ 9. R Andrew's Store Road @ Shop Quick Gas Station
+ 10. L Mann's Chapel Road
+ 11. R Oak Hill Road
+ 12. R Hamlet Chapel Road
+ 13. L River Road
+ 14. L Chicken Bridge Road (crossing Haw River)
+ 15. R Mount Olive Church Road
+ 16. Continue on Mount Olive - becomes Russell Road
+ 17. L Greenhill Road
+ 18. R Old Switchboard Road
+ 19. R Lindley Mill Road
+ 20. L Major Hill Road
+ 21. Bear R Hollman Mill Road
+ 22. L Griffin Road
+ 23. L Snow Camp Road
+ 24. R Sylvan School Road
+ 25. Bear R Sylvan School Road - becomes W Greensboro Chapel
+ Hill Road (1005) at Pleasant Hill Church Road
+ 26. L Alamance Church Road
+ 27. Cross 40 and enter Greensboro
+ 27. R Willow Road
+ 28. L McConnel Road
+ 30. Bear L E Washington Street
+ 31. Arrive at Amtrak Depot
+
+** UNC Greensboro
+
+ 1. Continue on E Washington Street
+ 2. L S Spring Street
+ 3. Bear R Spring Garden Street
+ 4. R Tate Street
+ 5. Arrive at University
+
+* Return Route
+
+I based my route on a route from the
+[[http://cycling.ahands.org/greensboro-raleigh.html][Greensboro Amtrak to Raleigh Amtrak]]. I had to reverse it as it was in
+the wrong direction. It should be obvious how to get back to Cary or
+Morrisville; simply hit whatever road in town you need from High House
+Road.
+
+** Alternative
+
+Instead of turning on Andrew's Store Road, continue on Mann's Chapel
+until it hits US-15/501. If you take the left you will end up
+intersection with NC54 or can go into Chapel Hill. NC54 East can be
+taken all the way back to Raleigh. It isn't *that* bad to ride on, but
+I'd recommend not doing it after dark unless your bicycle is very
+bright.
diff --git a/Lisp.muse b/Lisp.muse
new file mode 100644 (file)
index 0000000..6c10550
--- /dev/null
+++ b/Lisp.muse
@@ -0,0 +1,21 @@
+#title Lisp is for Cool People
+
+I am a programmer, and I write most of my software in Scheme and
+Common Lisp. Lately I have been tending toward Common Lisp for
+potential commercial ventures as there is a very solid set of
+libraries for doing almost anything in Common Lisp. It's like using
+perl, but with well designed libraries and readable applications.
+
+* [[SCWM][Scheme Constraints Window Manager]]
+
+Some work I have done on [[http://scwm.sourceforge.net][SCWM]].
+
+* [[Metaobject Protocols]]
+
+Notes for a short (fifteen minute) presentation on MOPs.
+
+* [[UCWNotes][UCW Structural Notes]]
+
+Notes on the structure of the =ucw_dev= branch of [[http://common-lisp.net/project/ucw/][UnCommon Web]]. The
+source is nicely documented, but lacked a handy roadmap so I compiled
+a few notes after reading through it.
diff --git a/Metaobject Protocols.muse b/Metaobject Protocols.muse
new file mode 100644 (file)
index 0000000..550a8b9
--- /dev/null
@@ -0,0 +1,493 @@
+In Fall of 2006 I did a small project on Metaobject Protocols for my
+CS 331 class. Here lie my notes which may perhaps be useful to
+others. I hope to expand them into something more useful over time.
+
+* Background
+
+** Object Protocols
+
+An object protocol is a set of methods and specification of the
+interactions between the methods which provide some generic behavior
+(e.g. of a sequence) that are then implemented by classes which
+conform to the protocol (e.g. a vector or list). In most object
+systems a class contains both the methods which implement a protocol
+and the data used by the implementation. The intent is to emulate
+state machines which pass messages between each other.
+
+** CLOS Way of OO
+
+The Common Lisp Object System (CLOS) is different. It separates
+the data and method concepts into classes and generics. A class
+contains data fields only, and a generic has methods specialized for
+certain types attached to it. This seems a bit weird at first, but is
+significantly more powerful as it encourages complete encapsulation
+through its use of classes primarily for method specialization rather
+than for state storage.
+
+
+*** Classes for scratch data and types
+
+In CLOS classes store data in slots (which are the same as data
+members). Encapsulation is not provided; any bit of code can use
+=slot-value= to access or set the value of a slot. This may seem odd at
+first, but encapsulation is of questionable importance as the slots
+are meant only to be used by the protocol defined around the class.
+
+Classes are defined with defclass
+
+<src lang="lisp">
+(defclass name (superclasses ...)
+  ((slot-name :accessor slot-accessor ...)
+   ...)
+  (class-options ...))
+
+(defclass example ()
+  ((foo :accessor foo-of :initform 5)))
+
+(defclass example-child (example)
+  ((bar :accessor bar-of :initform (list 1 2 3))))
+</src>
+
+Slot defintions have several option; the above example shows only the
+=:accessor= and =:initform= options which are the most commonly
+used. =:accessor= generates an accessor for the slot (e.g. if you have
+an instance of =example= you can =(setf (foo-of some-example-instance) 'some-value)= to set and =(foo-of some-example-instance)= to access the
+value). =:initform= provides a default initial value for the slot as a
+symbolic expression to be evaluated when an instance is created.
+
+*** Generics with methods that implement protocols
+
+Generics are like normal functions in Lisp, but they only provide a
+lambda list (parameter list). Methods are added to the generic which
+specialize on the types of their parameters, and provide the actual
+implementation. This allows for rich layered protocols to be developed
+which can enable selective modification of individual facets with
+minimal code.
+
+<src lang="lisp">
+(defgeneric generic (parameters ...)
+  (options) ...)
+
+(defmethod generic-name ((parameter type) parameter ...)
+  "documentation string"
+  body)
+
+(defgeneric foo (bar baz quux)
+  (:documentation "Process the baz with the quux capacitor to make the
+foo widget fly into the sky at warp speed"))
+
+(defmethod foo ((bar example) baz (quux capacitor))
+  (launch bar (process-with quux baz)))
+</src>
+
+A method lambda list differs from a normal lambda list only in that it
+can specify the type of the parameter using the notation =(name type)=. 
+Note also that methods can specialize on the types of every
+argument and not just the first one. This is quite powerful for
+reasons outside of the scope of this presentation.
+
+* Limitations of Default Language Behavior
+
+The behavior of a language is a compromise between many competing
+issues that attempts to be as generally useful as possible, and most
+applications will have no issue with the default behavior. There are,
+however, certain applications that could be cleanly written with minor
+modifications to the behavior of the language, but would be impossible
+or quite difficult to write otherwise.
+
+** Slot Storage
+
+Most languages choose to preallocate storage for all of the slots of
+an instance. Imagine a contact database that stored information about
+people as slots of the class. There may be dozens of slots, but often
+many of them will be left blank. If slot storage is preallocated much
+memory will be wasted and the system may not be able to fit into the
+memory of the hardware it must run on (perhaps for financial reasons,
+huge datasets, etc.).
+
+To save memory the author of the contact database must implement his
+own system to store properties and allocate them lazily. This
+represents a fair bit of effort, and would implement a system that
+differed from the existing slot system of classes only in the method
+of data storage.
+
+It would be useful if there were a way to customize instance
+allocation. The customizations would be minor and require overriding
+only the initial allocation behavior and the behavior of the first
+assignment to the slot. It is a a trivial problem in a language that
+allows customization of these.
+
+** Design Patterns
+
+Design Patterns are generalized versions of common patterns found in
+programs. Many of them are merely methods to get around deficiencies
+in the language, and can be quite messy to implement in some
+languages.
+
+* Metasoftware
+
+Some types of programs could be written easily if the language were
+customizable, but are nearly impossible to write when it is not.
+
+** Runtime Generated Classes
+
+Say you wanted to write a video game where players could create their
+own objects, attach behaviors to the objects, and perhaps mix
+different objects together to create new ones. When you abstract the
+problem this looks just like an object system!  Wouldn't it be nice if
+your program could create new objects and methods on the fly portably?
+
+** Object Inspection
+
+Imagine if you were developing a complicated program with many
+different objects that interacted in fairly complex ways. A tool to
+inspect the structure of objects while debugging would be quite
+useful, but in a traditional language would be impossible to implement
+portably. This could force you to purchase a certain compiler
+implementation which provided one, and even then would more than
+likely not be customizable.
+
+This problem can be generalized to apply to most debugging tools; it
+would be useful to write such tools portably because users of the
+*language* and not the *compiler* need to debug software. Sharing
+infrastructure would result in better tools (more developers), and
+save man-years of wasted effort that comes with having to rewrite
+non-portable functionality from scratch multiple times.
+
+* Metaobject Protocols
+
+** Limited/Generalized Internals of the Implementation
+
+A Metaobject protocol is a generalized and limited subset of the
+underlying implementation of the language. It is generalized and
+limited in scope to allow for multiple implementation strategies;
+this, along with careful design, is essential because programming
+language research is ever advancing and new techniques for creating
+more reliable and faster implementations are still being discovered.
+
+This subset of the implementation is exported as a set of methods on
+metaobjects. Thus the system is implemented in itself. The system can
+then be customized using the extension and overriding features of the
+system.
+
+** Classes of MOPs
+
+*** Reflective
+
+A reflective MOP provides a functional/procedural interface to
+information about the system. It exposes class relationships, the
+methods are attached to a generic, etc. A reflective MOP often
+provides some functionality for creating new classes at runtime.
+
+**** Example: Object Inspector
+
+**** Example: Runtime Generated Classes and Methods
+
+*** Intercessory
+
+Intercessory MOPs allow the user to customize language behavior by
+implementing methods which override certain aspects of the language
+behavior. This class of MOPs are what make MOPs especially
+powerful. No longer must a problem be restructured to fit the
+implementation language; the underyling language can be reshaped to
+fit the task at hand, and obfuscation of the intended structure of the
+application can be avoided.
+
+**** Example: Lazily Allocated Slots
+
+**** Example: Observer Design Pattern
+
+** Violation of Encapsulation?
+
+A MOP may seem like a violation of encapsulation by revealing some
+implementation details, but in reality a well designed protocol does
+not reveal anything which was not already exposed. Implementation
+decisions affect users, and some of these details do leak through to
+higher levels (e.g. the memory layout of slots). Implicit in the
+protocol specification are these implementation details, and the MOP
+merely makes this limited subset available for customization.
+
+A MOP makes it possible to customize certain implementation decisions
+that do not **radically** alter the behavior of the base language. The
+conceptual vocabulary of the system retains its meaning, and so code
+written in one dialect can interact with code written in another
+without knowing that they speak different ones.
+
+* MOP Design Principles
+
+** Layered Protocol
+
+A layered protocol design is good for both meta and normal object
+protocols, and enables a combinatorial explosion of customizations to
+the protocol.
+
+*** Top level **must** call lower level functions
+
+The top level methods of a layered metaobject protocol are required to
+call certain methods to perform some tasks. This both makes it easier
+to customize the top level methods (which perform very broad tasks) by
+providing some pieces of them for the programmer, and allows more
+customization to be done by opening up the replacement of lower level
+functions as a way to alter a small detail of the high level behavior.
+
+*** Lower level methods are easier to customize
+
+The lower level methods of a MOP are limited in scope and can be
+implemented easily. Often the changes to language behavior that are
+wanted are very small, and having methods that perform simple tasks
+which are often customized reduces the effort required to extend the
+system.
+
+** Functional Where Possible
+
+Functional protocols are preferred for MOPs (and object protocol in
+general). Functional protocols open up several optimizations for the
+implementation without burdening the user of the protocol.
+
+*** Memoization
+
+Memoization is the process of saving the results of a function call
+for future use. This avoids expensive recomputation of values which
+have not changed (recall that a true function will always return the
+same result when given the same arguments).
+
+A functional MOP can be optimized easily by exploiting this property
+to memoize the return values of calls to expensive operations. A MOP
+must be be very fast to avoid making programs unusably slow, and
+memoization is able to give an appreciable speedup in many cases
+without an insignificant burden on memory usage.
+
+**** Constant Shared Return Values
+
+Disallowing the modification of values returned by protocol methods
+allows the implementation to return large data structures by reference
+to avoid expensive copying without having to do expensive data
+integrity checks.
+
+*** Cleaner Code
+
+** Procedural Only Where Neccesary
+
+Some operations like method invocation are inheretly stateful and so
+must use a procedural protocol. There is no benefit to be gained from
+using a functional protocol, and indeed an attempt would result in
+obtuse code that severely restricted the implementor. Do note that
+only a very small part of method invocation is stateful (the actual
+call), and most of it can be implemented functionally (e.g. computing
+the discriminating function).
+
+* Examples
+
+** Object Inspector
+
+A primitive portable object inspector is presented here.
+
+<src lang="lisp">
+(defgeneric example-inspect (instance)
+  (:documentation "Simple object inspector using CLOS MOP"))
+
+(defmethod example-inspect ((instance t))
+  (format t "Simple Object~% Value: ~S~%" instance))
+
+(defmethod example-inspect ((instance standard-object))
+  (let ((class (class-of instance)))
+    (format t "Class: ~S, Superclasses: ~S~%"
+           (class-name class)
+           (mapcar #'class-name
+                   (class-precedence-list class)))
+    (let ((slot-names (mapcar #'slot-definition-name
+                             (class-slots class))))
+      (format t "Slots: ~%~{ ~S~%~}" slot-names)
+      (inspect-loop slot-names instance #'example-inspect))))
+
+(defun inspect-loop (slots instance inspector)
+  (format t "Enter slot to inspect or :pop to go up one level: ")
+  (finish-output)
+  (let* ((slot (read))
+        (found-slot (member slot slots)))
+    (cond (found-slot
+          (funcall inspector (slot-value instance slot))
+          (funcall inspector instance))
+         ((eq slot :pop) t)
+         (t
+          (format t "~S is invalid. Valid slot names: ~S~%"
+                  slot
+                  slots)
+          (inspect-loop slots instance inspector)))))
+</src>
+
+** Observer Design Pattern
+
+A simple implementation of the observer pattern is under 100 lines,
+and the user level code requires only a single line of code to make
+any existing class observable.
+
+In a language lacking a MOP, implementing the observer pattern
+requires modifying every accessor of a class to explicitly invoke any
+observers, and neccesitates the addition of a mixin class to the class
+heirarchy. The fact that an object can be observed is a meta property
+of the class, and forcing it to be implemented at the application
+level dirties the inheritance heirarchy and adds uneccesary meta
+details to the program.
+
+<src lang="lisp">
+;;; This metaclass adds a slot to instances which use it, and so the
+;;; system is defined in its own package to avoid name conflicts
+(defpackage :observer
+  (:use :cl #+sbcl :sb-mop)
+  (:export observable register-observer unregister-observer))
+
+(in-package :observer)
+
+;;; Metaclass
+(defclass observable (standard-class)
+  ()
+  (:documentation "Metaclass for observable objects"))
+
+(defmethod compute-slots ((class observable))
+  "Add a slot for storing observers to observable instances"
+  (cons (make-instance 'standard-effective-slot-definition
+                      :name 'observers
+                      :initform '(make-hash-table)
+                      :initfunction #'(lambda () (make-hash-table)))
+       (call-next-method)))
+
+(defmethod validate-superclass ((class observable)
+                               (super standard-class))
+  t)
+
+(defun register-observer (instance slot-name key closure)
+  (register-observer-with-class (class-of instance)
+                               instance
+                               slot-name
+                               key
+                               closure))
+
+(defun unregister-observer (instance slot-name key)
+  (unregister-observer-with-class (class-of instance)
+                                 instance
+                                 slot-name
+                                 key))
+
+(defun get-observers (instance slot-name)
+  (get-observers-with-class (class-of instance)
+                           instance
+                           slot-name))
+
+(defun add-observer-table (instance slot-name)
+  (setf (gethash slot-name (slot-value instance
+                                      'observers))
+       (make-hash-table)))
+
+(defgeneric register-observer-with-class (class instance slot-name key closure))
+(defgeneric unregister-observer-with-class (class
+                                           instance
+                                           slot-name
+                                           key))
+
+(defmethod register-observer-with-class ((class observable)
+                                        instance
+                                        slot-name
+                                        key
+                                        closure)
+  (setf (gethash key 
+                (or (gethash slot-name 
+                             (slot-value instance 'observers))
+                    ;; Lazily add observer hash tables
+                    (add-observer-table instance slot-name)))
+       closure))
+
+(defmethod unregister-observer-with-class ((class observable)
+                                          instance
+                                          slot-name
+                                          key)
+  (remhash key (gethash slot-name
+                       (slot-value instance 'observers))))
+
+(defmethod get-observers-with-class ((class observable)
+                                    instance
+                                    slot-name)
+  (gethash slot-name (slot-value instance 'observers)))
+
+(defmethod (setf slot-value-using-class) :before (new-value
+                                                 (class observable)
+                                                 instance
+                                                 slot)
+  (let ((slot-name (slot-definition-name slot)))
+    (if (not (eq 'observers slot-name))
+       (let ((observers 
+              (get-observers instance (slot-definition-name slot))))
+         (if observers
+             (maphash #'(lambda (key observer)
+                          (funcall observer 
+                                   (if (slot-boundp instance slot-name)
+                                       (slot-value instance slot-name)
+                                     nil)
+                                   new-value))
+                      observers))))))
+</src>
+
+** Real World
+*** [[http://common-lisp.net/project/ucw/][UCW]] and [[http://common-lisp.net/project/bese/arnesi.html][Arnesi]]
+
+Arnesi uses the CLOS MOP to implement methods which are transparantly
+rewritten into continuation passing style. This allows their execution
+to be suspended at certain points and resumed later. UCW builds on top
+of this to support a web framework where the statelessness of http is
+hidden from the user; displaying a page suspends the execution of the
+current continuation, and resumes it upon submission. The user level
+code is completely unaware of this.
+
+*** [[http://clsql.b9.com][CLSQL]]
+
+CLSQL uses the reflective part of the CLOS MOP to map Common Lisp data
+types into SQL types, and the intercessory protocol for slot
+allocation to map slots onto database columns or sql expressions (for
+implementing relational slots).
+
+*** [[http://common-lisp.net/project/elephant/][Elephant]]
+
+Elephant uses the CLOS MOP to transparantly store any class to disk
+and handle paging between the disk store and memory efficiently and
+with no user intervention.
+
+* Sources & Further Reading
+
+** Sources
+
+*** The Art of the Metaobject Protocol
+**** Kiczales, Gregor et al. MIT Press 1991
+
+Highly recommended reading even if you plan to never implement a MOP
+or use the CLOS one. The design principles it recommends are quite
+useful.
+
+*** [[http://www.lisp.org/mop/contents.html][CLOS MOP Specification]]
+
+Specification of the MOP for CLOS defined in *The Art of the Metaobject Protocol*.
+
+*** [[http://citeseer.ist.psu.edu/399658.html][Metaobject Protocols: Why We Want Them and What Else They Can Do]]
+
+A short overview of MOP design principles followed by three example
+metaobject protocols for Scheme.
+
+*** [[http://www2.parc.com/csl/groups/sda/projects/oi/towards-talk/transcript.html][Why Are Black Boxes so Hard to Reuse?]]
+
+Transcription of a talk on the benefits of open implementations of
+software. It first discusses several problems that black box software
+implementations pose, and then presents existing solutions. It shows
+how the existing solutions are insufficient, and then provides
+metaobject protocols as a solution to most of the problems.
+
+** Further Reading
+
+*** [[http://citeseer.ist.psu.edu/chiba95metaobject.html][A Metaobject Protocol for C++]]
+
+Example of a purely compile time MOP. It implements the functionality
+of a code walker and something similar to the Lisp macro system.
+
+*** [[http://www.parc.com/csl/groups/sda/publications/papers/Kiczales-TUT95/for-web.pdf][Open Implementations and Metaobject Protocols]]
+
+It is a bit long, but it seems to follow a similar structure to AMOP
+in introducing MOPs and their usefulness. The pages are slides with
+notes, and so the 331 pages might not actually take that long to read.
diff --git a/Music I Enjoy.muse b/Music I Enjoy.muse
new file mode 100644 (file)
index 0000000..b95fd73
--- /dev/null
@@ -0,0 +1,87 @@
+I have a [[http://www.last.fm/user/unknown_lamer/][last.fm]] account.
+
+* The Bands I Like the Most
+** Skyclad
+
+Skyclad is incredible folk metal. The first two albums (*Wayward Sons
+of Mother Earth* and *Burnt Offerings for the Bone Idol*) are Testament
+style thrash with a bit of fiddle and keys. The third album, *Jonah's
+Ark*, blunts the edge of the guitars and adds a lot more fiddle and is
+really where the band goes from making good to incredible
+music.
+
+*Prince of the Poverty Line* is about as 'heavy' as the first two
+albums, but the the song structures are far more worked out and there
+is an interesting infusion of folk and power metal into the sound. The
+songs are mostly scathing social critiques of the state of society at
+the time. The follow up, *Silent Whales of Lunar Sea*, is a decent album
+but is scarred by terrible recording quality and mixing. It has
+listenable songs (with "The Present Imperfect" and "Another Fine Mess"
+standing out), and the only really noteable aspect is the slight
+change toward a much less thrashy riff structure.
+
+*Irrational Anthems* more than made up for *Silent Whales of Lunar
+Sea*. The less thrashy and slightly more punkish riffing structure
+takes over here and the songs are all fast paced with guitar and
+fiddle duels taking place often
+
+The next two albums see the electric guitar deemphasized and the band
+making something more like heavy rock than heavy metal. The EP *Oui
+Avante Garde a Chance* starts out with a fast paced fiddle oriented
+song, moves into a nearly entirely fiddle and acoustic guitar song,
+and then goes into a few slow songs dominated by keys and fiddle. The
+albums picks up in intensity with *Bombjour*, and then has an acoustic
+version of a song from the previous album. The new material ends with
+the slow and intense *Badtime Story*. A couple of covers and an
+instrumental version of a song follow to pad the EP to album length.
+
+*The Answer Machine?* is my favorite album in my entire collection. Most
+of the songs have a fuzzy electric guitar and an acoustic guitar going
+at the same time, and the album is music that I have found is
+listenable to people who don't like metal. The fiddle, violin, and
+piano dominate and are backed by interesting bass and just the right
+amount of guitar. The album is a pseudo-concept album; each song is
+about a different quest for the answer to life.
+
+The last two Skyclad album with Martin Walkyier (the original singer)
+see a two step return to a more metal style, but this time something
+resembling *Powerslave* era Maiden with heavy folk overtones rather than
+Testament. Both albums lack any weak songs, and have a few that are
+among the best Skyclad has ever done: "Cancer of the Heart," "A Well
+Beside the River," and "Vintage Whine" on *Vintage Whine*, and "The
+Antibody Politic," "The Disenchanted Forest," and "Think Back and Lie
+of England" on *Folkemon*.
+
+Alas, after *Folkemon* Martin left, and the band seems to have lost its
+magic. It is much like At the Gates; the core members meshed quite
+well together and lost some magical chemistry upon a major component
+leaving. Skyclad's first album with the new singer was ok, and perhaps
+the next one will be better. Sadly Martin Walkyier decided to abandon
+music forever.
+
+** Kevin Moore
+Kevin Moore is the first keyboardist of Dream Theater who left after
+*Awake*. His work since then has surpassed the quality of everything
+Dream Theater has produced since then for he posesses a unique
+songwriting style and wonderful artistic ability.
+
+*** Chroma Key
+
+Chroma Key is Kevin Moore's primary project. It is mostly electronic
+and fairly mellow.
+
+*** OSI
+
+OSI was originally a collaboration between Kevin Moore, Jim Matheos
+(guitarist of Fates Warning), Mike Portnoy (drummer of Dream Theater),
+and a few other prog rock/metal people. The first album, *Office of
+Strategic Influence* was a moderately heavy and good album that sounded
+quite similar to *Disconnected* Fates Warning with Kevin Moore on vocals
+and complicated drumming.
+
+*Free* followed three years later and is completely different from the
+first. This time the album was done with Kevin Moore and Jim Matheos
+alone, and it finds a much nicer balance between keyboard and
+guitar. The first OSI sounded too much like Fates Warning with more
+ambient keyboarding; this one has a sound of its own. My ears have
+heard this album many times, and will listen again many more.
diff --git a/My Bicycle.muse b/My Bicycle.muse
new file mode 100644 (file)
index 0000000..c5e627a
--- /dev/null
@@ -0,0 +1,95 @@
+#title Clinton's Bicycle
+
+[[img/photos/bicycle/2006-10-25/front.jpg][Greetings Friend]]
+
+* The Death of the Internal Combustion Engine
+
+In May 2006 and Camaro decided it was time to die and cost more than
+it was worth to repair (although in reality it cost more to repair
+than it was worth the first time it broke, but hindsight...). I
+travelled by foot for the remainder of the summer.
+
+* The Birth of the Organic Oxidization Engine
+
+In August I decided that I should get a bicycle as my [[http://umbc.edu][university]] took
+about an hour to walk to on roads which did not have a terribly good
+sidewalk. What was initially meant merely to get me to school in a
+reasonable amount of time has now become a new love.
+
+[[img/photos/bicycle/2006-10-25/left.jpg][It is good to be a bicycle]]
+
+* A Kind Emacsing Friend
+
+[[http://emacsen.net][Emacsen]] gave me his Spring 2003 Giant Iguana which was hardly ridden
+and merely needed a tiny bit of tuning to get riding again. Soon after
+getting it I added a rear rack with panniers, a tail light, and a
+cheap headlight (which, alas, was smashed to bits in a small crash).
+
+I rode the bike with its knobby and wide mountain bike tires for a
+month as I built strength. There are many hills in Catonsville, and so
+for the first few weeks lazy nerd me was defeated by the terrain. A
+mere two months after starting to ride, however, I achieved a level of
+strength I never thought I would. I could ride thirty miles in a day
+and *not feel it the next day*! A few months after that, even with a
+long interlude of no riding due to a broken bone, I found myself able
+ride seventy miles with a few thousand feet of elevation change.
+
+* Metamorphosis
+
+In late September I replaced the mountain bike tires with 26x1.75
+[[http://www.conti-online.com/generator/www/de/en/continental/bicycle/themes/tires/city/travelcontact/travelcontact_en.html][road tires]] which nearly doubled my range, and improved the handling of
+the bike on pavement considerably. I chose 1.75 over 1.50 tires
+because I tend to ride with a fairly heavy load (textbooks and other
+type things), and enjoy the freedom of being able to go off road and
+not sink into the ground or get trapped in the grass.
+
+I [[http://unknown-lamer.livejournal.com/160217.html][fell]] in October and bent my straight handlebar. I needed a new
+handlebar so I found a trekking style handlebar on the internet that
+gave me additional spots to put my handle, allowed for a slightly
+lowered position while riding, and was the same diameter as the
+straight bar so I could keep the shifter/brake combo (it being a bit
+expensive to replace). It now has cork tape covered in cloth tape (I'm
+hoping the cloth tape will take the brunt of the wear and I can extend
+the life of the expensive cork tape). I plan to try using heat shrink
+tubing to cover the ends of the tape in place soon (if it works it
+should look neater than duct tape).
+
+[[img/photos/bicycle/2006-10-25/handlebar.jpg][It would seem that the amount of destructiveness to be found in individuals is proportionate to the amount to which expansiveness of life is curtailed. By this we do not refer to individual frustrations of this or that instinctive desire but to the thwarting of the whole of life, the blockage of spontaneity of the growth and expression of man's sensuous, emotional, and intellectual capacities]]
+
+* The Night Is Friendly
+
+** Portable Sun
+
+As the end of October 2006 arrived the days became shorter, but my
+desire to explore the world increased. This presented a bit of a
+problem, and so I spent time scouring the Wise Internet for
+information on headlights. After much futile poking around I settled
+on a [[http://www.cygolite.com/2-Products/1-DualCross300.htm][Cygolite DualCross 300]] and was given one as a birthday gift. It
+is as bright as a single car headlight on the top setting and the
+batteries do actually last as long as the website says. I've ridden
+with it in the rain many times, and it even survived a nasty spill
+that broke my collarbone and bent my front rim.
+
+[[img/photos/bicycle/headlight.jpg][A beacon in the night]]
+
+The nicest part of the light is that it does seem to get its rated
+life of about four hours on the brightest setting. I'm not sure if it
+really gets nine hours on the dim setting as I've never ridden at the
+lowest setting for an extended period of time (I use it as dusk is
+setting in to make myself visible, and then increase to full
+brightness when night falls). It is about as bright as a single car
+headlight; an entire standard width car lane is illuminated with the
+light set to hit the ground about eight feet from the bike. I find
+this adequate to cycle around full speed at night.
+
+
+** I Am the Moon
+
+One day in late April 2007 I decided to cover my bicycle in reflective
+tape. It is very bright now.
+
+[[img/photos/bicycle/before_tape_upside_down.jpg][The last time the bike will be naked]]
+
+[[img/photos/bicycle/bicycle_post_tape.jpg][Not quite strong enough to cause tides]]
+
+[[img/photos/bicycle/post_tape_nighttime_1.jpg][Or perhaps it is a shining star]]
diff --git a/Old Viewpoints.muse b/Old Viewpoints.muse
new file mode 100644 (file)
index 0000000..41292cd
--- /dev/null
@@ -0,0 +1,38 @@
+#title The Weak Must Die
+
+Intermediate forms of thought which have been refined.
+
+* Misc
+
+** Copyright Is Bad for Society
+
+Copyright is a tool used to placate publishers who feel that they will
+make no money if things can be freely copied. Publishers, however,
+contribute **nothing** of worth to our culture; they are mere middlemen
+who print the creative work of others, and so their pleas should be
+ignored.
+
+A short copyright term is acceptable, and worked in most of the world
+for a few hundred years. As it stands now we have perpetual copyrights
+(as in the Old World), and the cultural stagnation that affected
+Europe then is now occurring today in most of the world. There are
+many books published between 1917 and a few years ago that I would
+love to read, but am unable to because they have not been printed (for
+older books often in as long as 40 or 50 years). The albums of a few
+bands I like are out of print now and I will be long dead before I get
+a chance to purchase them (*if* copyright is not extended again, which
+experience tells me will happen soon) because the record labels have
+no interest in returning the masters to the band!
+
+What point is there to allowing copyright to exist on works which are
+not being published? If their terms had expired there is a chance that
+they would be being published by public domain publishing houses who
+subsist on smaller margins. This would [[http://www.ippr.org/publicationsandreports/publication.asp?id=482][create real economic value]], and
+more importantly great **social** value. Allowing art to rot is a
+disrespect to human creativity and an immeasurable loss for all future
+humans.
+
+I predict that in two or three hundred years there will be nearly no
+record of any literature or art produced in the twentieth century. As
+it stands today we have lost most of it with the exception of a few
+trashy works which have become popular to the masses.
diff --git a/Politics.muse b/Politics.muse
new file mode 100644 (file)
index 0000000..0421978
--- /dev/null
@@ -0,0 +1,241 @@
+#title Do Not Accept the Weak State of Mind in Our Time
+
+I have views that could perhaps be seen as odd. Do note that I am **not**
+a liberal; nor am I a conservative. I do not buy into the traditional
+socieconomic dipole scale, and I also reject the *political compass* two
+dimensional scale; my political belief system could best be described
+as anarchism if you must have a label for it. Naturally this is only
+because anarchism isn't an ideology, but rather a broad set of ideas
+centered around the rejection of traditional heriarchial political and
+social structures.
+
+These short essays are continually evolving, and each will be split
+into its own page as the ideas contained within it are fleshed out in
+my mind. Writing things down tends to help me to do this for there are
+limits to how much information the top of my head can hold limiting
+the usefulness of internal thought once an idea becomes complex
+enough. Political and social beliefs are perhaps the most complicated
+ideas a man can have because of our complex intertwined social
+structures.
+
+* [[Wisdom][The Basis of My Philosophy]]
+
+It is often helpful to know what someone considers as the basis of his
+philosophy when interpeting what he has written. As such I have
+compiled a page of links and quotations to reveal the inner secrets of
+my mind.
+
+* The Current Economic and Political Structure Is Broken
+
+** The Government of the Unites States
+
+I feel that the government in the United States is very close to being
+broken beyond repair. As it stands the government above the local
+level ignores the individual citizen and instead is only affected by
+large scale action. As far as the individual is concerned we no longer
+live in a Republic, but rather in an Oligarchy which is quickly
+descending into something far worse.
+
+I do feel that there is still some reform that could be made in the
+near (ten years perhaps) future that could allow the government to
+become tolerable again. We are, however, quite close to the edge where
+there will be no fixing it. If that threshold is passed we are in for
+terrible times.
+
+** Capitalism is Intrinsically Evil
+
+Cooperation is better than exploitation. How can one justify an
+economic system based upon paying others as little as possible in an
+attempt to make the most profit from their labor so as to make some
+profit?
+
+* Misc
+
+** Long Term Copyright Causes Harm to Society (=Draft Revision 2=)
+
+; maybe reinsert intro [[clintons-plans#Writing]]
+
+; - Craft work compensated directly
+
+It is straightforward to calculate a fair cost for material goods. The
+material cost follows from the materials, and the labor cost generally
+derives from the complexity of construction. The fixed price for each
+item consists of both of these factors. Thus it is trivial to ensure
+that a craftsman is fairly compensated for his effort.
+
+;  - Creative work indirectly
+;    - Harder to regain effort spent on creating
+
+Creative works must have their value calculated via a more circuitous
+route. The physical form of a creative work is of little importance;
+the ideas it represents are. The material and direct labor costs
+(printing, binding, etc.) are thus so small as to be of negligible
+importance when calculating value. There is effectively no objective
+way to place value on abstract work; all the value judgements we can
+make are subjective. We must then rely on irrational human valuations
+to determine the value on their own.
+
+;  - Works contain ideas
+;    - Focus on written works
+;  - Inherent nature of ideas
+;    - Absorbed into the mind of the reader
+;      - Freely copied orally, libraries, ...
+;    - Absorbed into the culture
+
+
+Creative works are fundamentally different from concrete works. A
+painting may inspire others start a new stylistic movement, the
+structure of a story may cause the formation of a new literary form,
+an essay may incite a new political movement, etc. Creative works
+weave themselves into the mental fabric of each individual exposed to
+them in a way that material goods cannot. A book may change your life;
+a table will never do that. This suggests that the abstract concepts
+which compose a work have a strange nature and great value. Those who
+control the distribution of creative works wield great power as a
+result of the ability of ideas to change the individual.
+
+After a certain period of time the physical manifestation of a
+creative work loses commercial value. New art is being created
+continually, and no one can be expected to read every important book
+written, see every film, and so on for other areas. When a work ceases
+to be profitable to publish distribution ceases. Allowing abstract
+works to simply drop from the market creates a serious problem. New
+ideas are built upon old ones, and after ideas have assimilated into
+the collective concious it is important to be able to go back to the
+old ideas and analyze them to understand the present culture. If a
+work is no longer available it is impossible to do this. Thus works
+that are no longer being commercially exploited should become the
+property of the public so that any worth preserving will be preserved
+by *someone* and avoid death.
+    
+;  - Copyright helps authors
+;    - Gives reasonable period for ideas to be commercially exploited
+
+Copyright manages to work fairly well for ensuring creators are
+compensated for their effort, preventing abuse of creator rights to
+the detriment of society, and ensuring that works will become public
+property after they are commercially unprofitable. Irrational human
+judgements over time often work well, and so giving exclusive right to
+copy a work makes sense for a period of time to allow society to
+determine its monetary value. The fair use provisions of copyright
+give society reasonable leeway in the use of the ideas contained
+within a work while the work is protected, and this allows society to
+continue enriching its creative culture. The limited term of copyright
+and ensuing reversion to the public domain prevents the cultural
+stagnation and the loss of history that would result from works
+becoming unavailable.
+
+;  - Copyright should be short
+;    - Purpose is to give the creator time to compensate himself for the
+;      effort spent writing
+;    - Works often have short commercial life (cite)
+
+The term of copyright must be finely balanced between the need to
+ensure creators have enough time to receive fair compensation for
+their effort, and the desire to avoid cultural stagnation from
+unavailable works. The term must be short enough that a work will not
+be unavailable for too long after commercial interest dies. Every year
+that passes where the work isn't being published tends to reduce the
+number of copies in existence. It must also be long enough that a
+creator can profit according to the value that society puts upon his
+work.
+
+A term should be just long enough that a work will fall out of
+copyright when physical copies are still likely to exist. A man may
+keep his book collection unto his death, but his children may simply
+sell them off or discard them after he departs the mortal
+coil. Intuitive judgement says that things that are worth entering the
+public domain will be preserved by someone for at least his life. A
+person who has creative works in his posession is often attached to
+them and will keep the ones he likes the most for as long as possible
+(e.g. my music collection is backed up in flac so that I will be able
+to listen to my music forever). After he dies there is a large
+increase in the chance that the works will perish unless he by chance
+made special arrangements to have them preserved.
+
+A generation then seems to be a reasonable term; how many things are
+really commercially viable after thirty years? Some works may be
+relevant to the children of the generation who created them; it seems
+reasonable then that if a work is still commercially viable after a
+generation then the creator deserves to retain copyright for a second
+generation. It is questionable whether more terms would be good
+(issues of supression of information, right to profit, etc. come into
+play), but they can't quite be ruled out. A renewal system with a span
+of roughly thirty years ensures that a work will be out of publication
+for at most a generation's time. This appears to be a good balance
+between the right of the creator and the desire to keep knowledge from
+dying (from my eyes).
+
+The works of the current generation, their parents, their
+grandparents, and their great-grandparents are still copyrighted in
+the US. Works created in the present will be copyrighted for the
+lifetime of the author and seventy years after; a span of roughly six
+generations.
+
+** Fewer Laws Are Better
+*** Individuals should not have their actions regulated
+*** Corporations must have their actions heavily regulated
+
+Corporate power disrupts the functioning of a free society. If the
+power wielded by a corporation were merely the sum of the individuals
+that composed it there would be little issue; the fundamental problem
+is that the benefits of gaining access to mass production facilities
+and a huge workforce that can be forced to cooperate on certain goals
+gives a large corporation much more power than the simple sum of its
+members.
+
+**** Corporate Personhood should be revoked
+**** Corporations should not be allowed to influence politics
+
+* Social Ills
+
+** Mass Culture
+
+American culture in the early 1900s began to homogenize, and now there
+is a single massive culture that almost all three hundred million
+people in the country share. This presents problems to those who do
+not fit in; in the days of the self sufficient village one could move
+to another location to find people similar to him, but now there is
+nowhere to go. Everywhere a *social deviant* goes he will feel alienated
+and have his social options severely limited.
+
+A monoculture reduces the rate of idea formation, and ours is actively
+hostile toward anything not falling in line with the
+mainstream. People are trained to act as a mass instead of as
+individuals; this results in far less creative people. Critical
+thinking is not encouraged; no, it is far worse! Critical thinking is
+discouraged, and those of us who wish to argue our points with logic
+are met with the undefeatable enemy of a closed mind that has been
+exposed to propaganda from birth.
+
+** The Automobile
+
+; How far is your average trip in a car? If you don't often go further
+; than twenty miles have you thought about getting rid of your car?
+; Twenty miles! Quite the distance, isn't it? In reality it is a short
+;  [[Bicycle][bicycle]] ride that is often under or only slightly longer than an hour
+; long! If this pathetic nerd can do it so can you!
+
+; We have finite natural resources, and oil is a resource that we have
+; foolishly exploited to the point of exhaustion. Ethanol and other
+; biofuels are pipe dreams, and you **shall** have no choice but to learn to
+; live without a car as oil is going to increase in cost substantially
+; over the next twenty years. Why wait until you are forced to give up
+; your car to do so? It makes more economic sense to give it up now
+; rather than spend more and more of your income every year just to
+; travel. Even ignoring that aspect the confidence it fills you with is
+; quite wonderful; there was a time when I walked staring at the ground
+; fearful of the world, and now I stand tall and can stare a driver in
+; the eyes and tell him to go ahead and try to run into me because I'm
+; not giving up my ground.
+
+; Try self transport; it is good for your body and mind. The relative
+; low cost of automobiles has forced us into a false sense of needing to
+; be transported by machine. We are humans; the lone bipedal upon this
+; planet. We were born to transport ourselves!
+
+** Learned Ignorance and Weakness
+
+[[Old Viewpoints][obsolete]]
+
+[[TRUTH]]
diff --git a/Quotations.muse b/Quotations.muse
new file mode 100644 (file)
index 0000000..3e7002f
--- /dev/null
@@ -0,0 +1,33 @@
+<quote>
+There are those who consider that studies in harmony, counterpoint,
+and fugue are the exclusive province of the intended composer. But if
+we reflect that theory must follow practice, rarely preceding it
+except by chance, we must realize that musical theory is not a set of
+directions for composing music. It is rather the collected and
+systematized deductions gathered by observing the practice of
+composers over a long time, and it attempts to set forth what is or
+has been their common practice. It tells not how music will be written
+in the future, but how music has been written in the past.
+
+The results of such a definition of the true nature of musical theory
+are many and important. First of all, it is clear that this knowledge
+is indispensable to musicians in all fields of the art, whether they
+be composers, performers, conductors, critics, teachers, or
+musicologists. Indeed, a secure grounding in theory is even more a
+necessity to the musical scholar than to the composer, since it forms
+the basis for any intelligent appraisal of the individual styles of
+the past or present.
+
+On the other hand, the person gifted for creative musical composition
+is taking a serious risk in assuming that this genius is great enough
+to get along without a deep knowledge of the common practice of
+composers. Mastery of the technical or theoretical aspects of music
+should be carried out by him as a life's work, running parallel to his
+creative activity but quite separate from it. In the one he is
+following common practice, while in the other he is responsible solely
+to the dictates of his own personal tastes and urge for expression.
+</quote>
+
+Walter Piston (Intro to the first edition of *Harmony*)
+
+--
diff --git a/Reading.muse b/Reading.muse
new file mode 100644 (file)
index 0000000..a88c42a
--- /dev/null
@@ -0,0 +1,213 @@
+#title The Printed Word Is Stronger Than Nuclear Arms
+
+I enjoy classical literature and works of philosophy and politics with
+a side of cyberpunk novels for when my brain is tired. When I was in
+High School I read technical books for fun, but now I tend to find
+most of them useless (thank you Internet) excepting a few really well
+written ones (*L.i.s.p*, *TAOCP*, ...).
+
+I spend most of my time reading. A full list of things I have read
+would be impossible to compile, but here I am collecting links and
+small summaries of things I have read and find interesting enough to
+mention, but not always recommend, to others.
+
+* Authors
+
+** William Blake
+
+His poetry is the result of spending too much time etching copper
+plates and breathing the fumes. Quite wonderful indeed.
+
+* Fiction
+
+** General
+
+*** Luke Rhinehardt - The Dice Man
+
+<quote>
+And it's his illusions about what
+constitutes the real world which are
+inhibiting him...
+His reality, his reason, his society
+...these are what must be destroyed
+</quote>
+
+A quotation from one of my [[http://en.wikipedia.org/wiki/Slaughter_of_the_Soul][favorite metal songs]] inspired me to grab
+this book; at worst it would be a waste of time. Much reward was found
+in this random stab in the dark. The book is framed as an
+autobiography of the author as a psychoanalyst, and his progression
+through life as a Dice Man after deciding to live his life through
+random chance.
+
+The style, plot, and content are equally neurotic; part comedy, part
+attack on psychoanalysis, and part deep philosophy. It was often
+difficult to put down, and was read in under a week of spare time.
+
+** Philosophical
+
+*** Khalil Gibran - The Prophet
+
+
+** Sci-Fi
+
+*** Neal Stephenson
+
+**** Cryptonomicon
+
+I read *Cryptonomicon* when it was new, and at the time I thought it was
+good. It could have lost a hundred or so pages without detracting from
+the plot, but it was easy reading and didn't take very long to
+finish. The story was enganging, and the continual switching between
+the 1940s and present day slowly unravelled the tale in a nice way.
+
+I'd still have to recommend *Snow Crash* if one wished to read only one
+Stephenson novel.
+
+**** Snow Crash
+
+As one must read the *Bible* to understand English literature, so one
+must read *Snow Crash* today to be a nerd. In the realm of modern pop
+fiction this is one of the better books I've read; it was devoured in
+a mere four nights. Neal Stepheson may not be Milton, but he does come
+up with enganging tales. *Snow Crash* has a nice undertone of (quite
+accurate) political and social commentary that makes it worth reading
+as more than mere cyberpunk fiction.
+
+* Non-Fiction
+
+** Education
+***  John Taylor Gatto - [[http://www.johntaylorgatto.com/underground/toc1.htm][Underground History of American Education]]
+
+Contained within this book (available online for free, but the printed
+copy sits wonderfully on a shelf) is a detailed and seemingly well
+researched history of American Education with a particular focus on
+the transformation that has occured before our eyes in the last
+century. I am unsure if Gatto is entirely correct and not exaggerating
+anything; I have failed to find any negative criticisms, but it is not
+clear to me if that is because he is entirely correct or if no one
+cares enough to write a counterargument. I am in the process of
+tracking down as many of his sources as possible (a good number of
+them are out of print and not in the public domain yet), and will make
+an attempt to verify his argument over the course of the next year
+(that being 2007).
+
+If he is correct then every one of us has had the first eighteen years
+of our lives stolen from us, and we have collectively suffered massive
+intellectual damage. My intuitions tell me he is correct (which is why
+I am driven to verify; I cannot trust myself because I *want* to
+believe) for my individuality and intelligence were nearly stolen from
+me. The only reason I survived relatively unscathed is because I
+became completely socially withdrawn for the last half of elementary
+school until late in high school due to the abuse I received at the
+hands of my peers creating a deep fear of social interaction in
+me. The downside is that I had the confidence crushed from my soul,
+but now that I have begun to regain it (the good that bicycling
+enabling me to stand straight and gradual realization of my own worth
+as a human have done) I would never trade the ability to think freely
+for the social skills I lack.
+
+** Philosophy
+
+*** Chinese
+
+**** Tao Te Ching
+
+**** Confucianism
+
+***** The Analects
+
+*** Marcus Aurelius - Meditations
+
+I enjoyed reading this collection of meditations on Stoic
+philosophy. It is a fairly quick read; I read each of the twelve books
+before sleeping over the course of two weeks. Toward the end of the
+collection things get a bit topically repetetive (e.g. acting
+according to the nature of man is reflected upon over and over), but
+each repetition looks at the topic in a slightly different light. A
+number of passages I found quite inspiring, and scratched them down in
+my notebook to ponder further.
+
+*** Søren Kierkegaard - The Sickness Unto Death
+
+I purchased this when I was looking through books at a store after
+being unable to find the book I really wanted, and I must say that it
+was better for me to have found this one. 
+
+Contained within is a beautiful analysis of despair in the context of
+Christianity (really theism in general). Even if the argument offends,
+the presentation cannot. The dialectical nature of despair is
+reflected in every aspect of the work, and the method of presentation
+forces reflection. 
+
+** Politics
+
+*** Thomas More - Utopia
+
+I read most of Utopia in high school with the TI-89 ebook reader, but
+the way the book was split up made it a bit difficult to grasp the
+overall structure. I found a copy at a used book store one day, and so
+I read it again, and found it much more comprehensible. It is a quick
+read, and decent piece of literature. The interesting social system
+espoused resembles resembles state communism (even if perhaps as a
+negative ideal), but with an strange blend of 14th century European
+social customs.
+
+** Religion
+
+*** [[William James - The Varieties of Religious Experience]]
+
+
+** Technical
+
+*** C J Date - Database in Depth
+
+This was a complete waste of time. The author rants on for 180 pages
+and presents the information in a disorderly and shallow manner. It
+could be rewritten in about fifty pages and contain the same amount of
+information if it were organized properly and the off topic commentary
+were minimized.
+
+*** Gregor Kiczales - The Art of the Metaobject Protocol
+
+AMOP is useful as a reference to the CLOS MOP (although less so with
+the online MOP spec), but the true value of the book lies in the first
+half of the book. It presents the design of the CLOS MOP through a
+series of revisions that fix limitations of earlier implementations
+and gradually work toward a generic and well designed MOP for
+CLOS. Through that process one is made more aware of a few general
+object protocol design skills, and gains insight into how to cleanly
+make mapping decisions customizable.
+
+
+* Reports
+
+** [[http://nces.ed.gov/pubs2006/2006483.pdf][2003 National Assesement of Adult Literacy]]
+
+A depressing view of American literacy rates. Literacy skills
+decreased across almost every population segment in the US between
+1993 and 2003; a mere 31% of college graduates are considered
+proficient in quantitative literacy (defined as being able to do
+things as terribly complicated as comparing two editorials).
+
+
+* Books That I Cannot Find
+
+If you know anyone who has copies I'd appreciate an email. I'm willing
+to buy books for a reasonable cost, and for ones that are more than 25
+years old and out of print I am not opposed to *piracy* (no one is
+making money from them, and I feel that long copyrights are unethical
+and therefore feel no pangs of moral guilt).
+
+ - *Crystallizing Public Opinion* by Edward Bernays
+   - A supposed classic in the field of public relations. Curiosity
+     demands that I read the writings of the father of the field to
+     better understand the way the international media works.
+   - Another example of out of print books clearly having a market,
+     but no publisher due to copyright (used copies go for nearly a
+     thousand dollars in poor condition and hit five thousand or so
+     for ones in good shape).
+
+* Essays
+** Computing
+*** Design
+**** [[http://deadhobosociety.com/index.php/Essays/ESSAY12][Confucianism and Technical Standards]]
diff --git a/SCWM.muse b/SCWM.muse
new file mode 100644 (file)
index 0000000..48c3745
--- /dev/null
+++ b/SCWM.muse
@@ -0,0 +1,128 @@
+#title Scheme Your Windows
+
+* Installing SCWM
+
+** Dependencies
+
+*** Required
+
+ - [[http://www.gnu.org/software/guile][Guile]] 1.8.0+
+ - IMLib 1.x (in Debian imlib11-dev)
+
+*** Optional
+
+ - [[ftp://ftp.gnu.org/gnu/guile-gtk/guile-gtk-0.60.tar.gz][Guile-GTK]] 0.60 for dialog support. Guile-GTK 2.x and scwm are not
+   compatible yet
+
+** Downloading and Building
+
+A working version of SCWM can be obtained from
+[[http://sourceforge.net/cvs/?group_id=225][sourceforge CVS]]. Compilation is much more straightforward than one
+would suspect from a project so old (thanks to dsmith for doing the
+painful parts of unbitrotting). The standard autoconf sequence of
+commands should work.
+
+<example>
+./autogen.sh
+./configure
+make
+sudo make install
+</example>
+
+** Running
+
+The directory =sample.scwmrc= has a few sample SCWM
+configurations. =system.scwmrc= and =sample.scwmrc= both work fairly well;
+I have yet to test the others. If not using =system.scwmrc= it is useful
+to at least include the bits that enable debugging.
+
+<src lang="scheme">
+(define debug #t)
+
+(if debug
+    (begin
+      (add-hook! module-loaded-hook display-module-loaded)
+      (set! %load-verbosely #t)
+      (debug-enable 'debug 'backtrace)
+      (read-enable 'positions)))
+</src>
+
+SCWM will attempt to load =system.scwmrc= by default, but this can be
+overridden with the =-f= option. The default =system.scwmrc= loads user
+config from a series of files in =~/.scwm/=.
+
+** Hacking
+
+*** XNested Setup
+
+The easiest way to hack on SCWM is to run it inside of Xnest.
+
+<example>
+Xnest :1 &
+scwm --display :1 --debug # --debug makes X requests synchronous
+</example>
+
+*** GDS for Interaction
+
+SCWM has an emacs interaction mode that communicates with the window
+manager using X window properties, but the emacs side of the code
+doesn't quite work, and GDS is featureful enough now to be used to
+interact with scwm. Using GDS makes hacking scwm quite a bit
+easier. **GDS requires a Guile built with threads to work properly
+(the version in Debian is built *without* threading).**
+
+**** scwmrc code
+
+The following code should be in your scwmrc somewhere.
+
+<src lang="scheme">
+(use-modules (ice-9 gds-client)
+            (ice-9 threads))
+
+;;; GDS thread (in case it must be killed during debugging, ...)
+(define cke-gds-thread #f)
+
+(define (connect-to-debugging-server)
+  (set! cke-gds-thread
+       (call-with-new-thread (lambda () (run-utility))))
+  cke-gds-thread)
+</src>
+
+After defining you can either use =scwmrepl= to run
+=(connect-to-debugging-server)= after starting a GDS server, or simply
+add =(connect-to-debugging-server)= to the config if one will always be
+running. 
+
+**** Emacs config
+
+I wrote [[http://darcs.unknownlamer.org/site-emacs/init.d/guile-debug.el][a bit of elisp]] to simplify setting up a scratch buffer for
+interaction with guile.
+
+<src lang="emacs-lisp">
+(require 'gds)
+(require 'gds-server)
+(require 'gds-scheme)
+
+(defvar guile-scratch-buffer-name "*guile-scratch*"
+  "Name of the Guile evaluation scratch buffer")
+
+(defun make-guile-scratch-buffer ()
+  (interactive)
+  (let ((scratch-buf (generate-new-buffer guile-scratch-buffer-name)))
+    (switch-to-buffer scratch-buf)
+    (scheme-mode)
+    (gds-auto-associate-buffer)))
+</src>
+
+If you were already running a debugging client process you will need
+to choose the process to associate the buffer with; =ps= will tell you
+the PID of scwm.
+
+**** Known Issues
+
+Occasionally evaluating an expression or viewing a backtrace will make
+scwm lockup. My understanding is that scwm is not threadsafe, and
+there are some evil issues that will take a while to solve. GDS works
+well enough for now; if I can't make GDS completely reliable I shall
+unbitrot the scwm emacs interaction mode (unless someone else beats me
+to it, *hint hint*).
diff --git a/TRUTH.muse b/TRUTH.muse
new file mode 100644 (file)
index 0000000..2202257
--- /dev/null
@@ -0,0 +1,25 @@
+#title Absolute Truths Which Cannot Be Denied
+
+ - Everyone is depressed. It is a normal state of being. Take your
+   pills.
+ - Most children have ADHD. Give them their pills; if you don't they
+   will never learn anything.
+ - You must have a career
+   - Not being employed will make you poor
+   - The point of the University is to attain job skills
+ - Not owning a car will make you a social pariah
+ - Music is background noise and nothing more
+   - Songs which discuss topics other than love, lust, and loneliness
+     are not good
+   - Heavy metal contains the message of Satan and will corrupt your
+     children
+ - The NYTimes best seller list consists of the best books written today
+   - Literature produced today is better than any ever written before
+     - Therefore literature written before 1900 is a waste of time
+ - Logic is for cold and unfeeling people
+   - Good arguments are based on emotion
+   - The axioms of logic cannot be proven, and we must therefore
+     abandon logic as an anachronism of times long past
+ - The individual should serve the state
+ - Average people are incapable of teaching themselves much
+ - Ethanol will enable us to continue consuming energy as we do now
\ No newline at end of file
diff --git a/UCWNotes.muse b/UCWNotes.muse
new file mode 100644 (file)
index 0000000..31271b8
--- /dev/null
@@ -0,0 +1,1126 @@
+#title Roadmap to UCW Codebase
+
+* Abstract
+
+[[http://common-lisp.net/project/ucw/][UnCommon Web]] is a very powerful and mature web framework for Common
+Lisp, but is a bit difficult to learn. It is documented
+extensively--in the form of docstrings. These are extremely helpful
+once you've figured out the rough structure of UCW, but they are of no
+help when first learning unless you just read most of the source. I
+ended up having to do that, and after some urging along by folks in
+=#ucw= I decided to clean up my planner notes and publish them for
+public consumption.
+
+The roadmap is presented with major sections ordered in a logical
+order for learning the framework. The sections are ordered internally
+in order of most immediately useful to least, but it may be worth
+hopping between major sections before reading all of the details. I
+have used abridged class definitions and docstrings with occasional
+commentary to clarify things.
+
+* Roadmap
+
+** Applications
+
+Applications are a bundle of entry points. The base class is,
+naturally, =standard-application=, but you should instead derive your
+application class from =modular-application= and any standard or custom
+application mixins you find useful.
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/rerl/standard-classes.lisp][src/rerl/standard-classes.lisp]]
+
+<src lang="lisp">
+(defclass standard-application (application)
+  ((url-prefix :initarg :url-prefix
+              :documentation "A string specifying the
+start (prefix) of all the urls this app should handle.
+
+This value is used by the standard-server to decide what app a
+particular request is aimed at and for generating links to
+actions within the app. ")
+   (www-roots :initarg :www-roots
+             :documentation "A list of directories (pathname
+specifiers) or cons-cell (URL-subdir . pathname) to use when looking for static files.")
+   (dispatchers :initarg :dispatchers
+               :documentation "A list of request
+dispatchers. The user supplied list of dispatchers is extended
+with other dispatchers that are required for UCW to function
+properly (action-dispatcher, a parenscript-dispatcher, etc). If
+you want full control over the active dispatchers use the (setf
+application.dispatchers) accessor or, if you want control over
+the order of the dispathcers, (slot-value instance
+'dispatchers)."))
+  (:documentation "The default UCW application class."))
+</src>
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/rerl/modular-application/modular-application.lisp][src/rerl/modular-application/modular-application.lisp]]
+
+<src lang="lisp">
+(defclass modular-application-mixin ()
+  ()
+  (:documentation "Superclass for all application mixins."))
+
+(defclass modular-application (standard-application modular-application-mixin)
+  ...)
+</src>
+
+*** Cookie
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/rerl/modular-application/cookie-module.lisp][src/rerl/modular-application/cookie-module.lisp]]
+
+<src lang="lisp">
+(defclass cookie-session-application-module (modular-application-mixin)
+  (:documentation "Class for applications which use cookies for sesion tracking.
+
+Cookie session applications work exactly like
+standard-applications except that when the session is not found
+using the standard mechanisms the id is looked for in a cookie."))
+</src>
+
+This is the most useful of the application components. It makes your
+application urls readable by stashing the session id into a cookie
+rather than as a set of long and ugly GET parameters.
+
+*** L10n
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/rerl/modular-application/l10n-module.lisp][src/rerl/modular-application/l10n-module.lisp]]
+
+<src lang="lisp">
+(defclass l10n-application-module (modular-application-mixin)
+  (:documentation "Application class which can handle l10n requests."))
+</src>
+
+*** Secure
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/rerl/modular-application/security-module.lisp][src/rerl/modular-application/security-module.lisp]]
+
+<src lang="lisp">
+(defclass secure-application-module (modular-application-mixin)
+  (:documentation 
+    "Mixin class for applications which require authorized access.
+Concrete application must specialize the following methods:
+APPLICATION-FIND-USER (APPLICATION USERNAME)
+APPLICATION-CHECK-PASSWORD (APPLICATION USER PASSWORD)
+APPLICATION-AUTHORIZE-CALLZE-CALL (APPLICATION USER FROM-COMPONENT TO-COMPONENT)."))
+</src>
+
+** Components
+
+A component is a special class that handles the complexities of
+continuation suspension and such for you. New components are derived
+from the existing ones by using =defcomponent= instead of =defclass=. This
+adds a few extra slot and class options, and ensures that the proper
+metaclass is set.
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/rerl/standard-component/standard-component.lisp][src/rerl/standard-component/standard-component.lisp]]
+
+<src lang="lisp">
+(defmacro defcomponent (name supers slots &rest options)
+  "Macro for defining a component class.
+
+This macro is used to create component classes and provides
+options for easily creating the methods which often accompany a
+component definition.
+
+NAME, SUPERS and SLOTS as treated as per defclass. The following
+extra options are allowed:
+
+ (:ENTRY-POINT url (&key application class)) - Define an
+ entry-point on the url URL which simply calls an instance of
+ this component. Any request parameters passed to the entry-point
+ are used to initialize the slots in the component. This option
+ may appear multiple times.
+
+ (:DEFAULT-BACKTRACK function-designator) - Unless the slots
+ already have a :backtrack option FUNCTION-DESIGNATOR is
+ added. As with the 'regular' :backtrack options if you pass T
+ here it is assumed to mean #'IDENTITY.
+
+ (:RENDER (&optional COMPONENT) &body BODY) - Generate a render
+ method specialized to COMPONENT. COMPONENT may be a symbol, in
+ which case the method will be specialized on the componnet
+ class. If COMPONNET is omited the component is bound to a
+ variable with the same name as the class.
+
+ (:ACTION &optional NAME) - Generate a defaction form named
+ NAME (which defaults to the name of the component) which simply
+ CALL's this component class passing all the arguments passed to
+ the action as initargs.")
+
+;;; Extra Slot Options
+"Other than the initargs for standard slots the following
+options can be passed to component slots:
+
+:backtrack [ T | NIL | FUNCTION-NAME ] - Specify that this slot
+should be backtracked (or not if NIL is passed as the value). If
+the value is neither T nor NIL then it must be a function which
+will be used as the copyer.
+
+:component [ TYPE | ( TYPE &rest INITARGS ) ] - Specify that this
+slot is actually a nested component of type TYPE. When instances
+of the class are created this slot will be set to an instance of
+type TYPE and it's place will be set to this slot. If a list is
+passed to :component then TYPE (which isn't evaluated) will be
+passed as the first argument to make-instance. The INITARGS will
+be eval'd and apply'd to make-instance. The result of this call
+to make-instance will be used as the effective component
+object."
+</src>
+
+*** Windows
+
+A window-component represents a top level browser window, naturally.
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/components/window.lisp][src/components/window.lisp]]
+
+<src lang="lisp">
+(defclass window-component ()
+  ((content-type)))
+
+(defclass simple-window-component (window-component)
+  ((title) 
+   (stylesheet)
+   (javascript :documentation "List of javascript includes.
+
+Each element must be a list whose first value is either the
+symbol :SRC or :JS. 
+
+ (:SRC url) - writes <script src=\"URL\"></script> tag.
+ (:JS form) - equivalent to (:SCRIPT (js:js* form))
+ (:SCRIPT string) - write <script>STRING</script>.
+
+The elements will be rendered in order.")
+   ...))
+</src>
+
+=window-component= could be useful for doing things like dumping binary
+data to the user, or just deriving your own funky top level window
+type.
+
+=simple-window-component= is the easiest for displaying standard
+webpage. It provides a wrapping method on render that displays the
+html boilerplate based on your component slot values which is what one
+wants most of the time. The initargs to =simple-window-component= have
+the same names as the slots.
+
+**** Status Bar
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/components/status-bar.lisp][src/components/status-bar.lisp]]
+
+There is a generic status bar interface. Messages severity is one of
+=(:error :warn :info)=. Note that the default status bar render method
+just shows a div with status messages. A derivative could be defined
+to insert messages into the browser status bar.
+
+<src lang="lisp">
+(defcomponent status-bar ()
+  ((messages :documentation "An ALIST of the messages to
+show. Each element is a cons of the form (SEVERITY .
+MESSAGE). SEVERITY is one of :ERROR, :WARN, :INFO and MESSAGE is
+a string which will be html-escaped.")
+   ...)
+  (:documentation "Stateless status bar to display messages."))
+
+(defgeneric add-message (status-bar msg &key severity &allow-other-keys)
+  (:documentation "Add the message text MSG to STATUS-BAR with
+severity SEVERITY."))
+</src>
+
+<src lang="lisp">
+(defcomponent status-bar-mixin ()
+  ((status-bar :accessor status-bar
+               :initarg status-bar
+               :component (status-bar))))
+
+(defmethod show-status-bar ((win status-bar-mixin))
+  (render (status-bar win)))
+
+(defgeneric show-message (msg &key severity &allow-other-keys)
+  (:documentation "Show a message in the status bar. Only works if
+  current window is a status-bar-mixin"))
+</src>
+
+**** Redirect
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/components/redirect.lisp][src/components/redirect.lisp]]
+
+<src lang="lisp">
+(defclass redirect-component ()
+  ((target :accessor target :initarg :target))
+  (:metaclass standard-component-class)
+  (:documentation "Send a client redirect.
+
+This component, which must be used as a window-component,
+redirects the client to the url specified in the target slot. A
+302 (as opposed to 303) response code is sent to ensure
+compatability with older browsers.
+
+The redirect component never answers."))
+</src>
+
+There is also a =meta-refresh= procedure.
+
+<src lang="lisp">
+(defun/cc meta-refresh ()
+  "Cause a meta-refresh (a freshly got (GET) url) at this point.
+This is useful in order to have a GET url after a form POST's
+actions have completed running. The user can then refresh to his
+heart's content.")
+</src>
+
+*** Containers
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/components/container.lisp][src/components/container.lisp]]
+
+<src lang="lisp">
+(defclass container ()
+  (...)
+  (:metaclass standard-component-class)
+  (:documentation "Allow multiple components to share the same place.
+
+The container component serves to manage a set of components.
+It does not provide any render impementation, which is the
+resposibility of the subclasses (e.g. switching-container or
+list-container).
+
+Each contained component has a \"key\" associated with it which
+is used to retrieve a particular component. Keys are compared with
+container.key-test.
+
+The :contents inintarg, if provided, must be either a list of (key .
+component) or a list of components. In the latter case it will
+be converted into (component . component) form."))
+</src>
+
+**** Protocol
+
+ - =child-components=
+ - =find-component CONTAINER KEY=
+ - =remove-component=
+ - =(setf find-component CONTAINER KEY) COMPONENT= ->
+   =add-component CONTAINER COMPONENT KEY=
+
+**** Switching Container
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/components/container.lisp][src/components/container.lisp]]
+
+<src lang="lisp">
+(defclass switching-container ...
+  (:documentation "A simple renderable container component.
+
+This component is like the regular CONTAINER but serves to manage a set
+of components which share the same place in the UI. Therefore it provides
+an implementation of RENDER which simply renders its current component.
+
+The switching-container component class is generally used as the super
+class for navigatation components and tabbed-pane like
+components."))
+</src>
+
+Subclass and =(defmethod render :around ...)= to render navigation using
+=(call-next-method)= to render the selected component.
+
+***** Protocol
+
+ - =container.current-component COMPONENT=
+ - =(setf container.current-component CONTAINER) COMPONENT=
+
+**** Tabbed Pane
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/components/tabbed-pane.lisp][src/components/tabbed-pane.lisp]]
+
+<src lang="lisp">
+(defcomponent tabbed-pane (switching-container)
+  (:documentation "Component for providing the user with a standard \"tabbed pane\" GUI widget."))
+</src>
+
+Provides a generic tabbed pane that renders a nested div split into a
+naviation and content box. The navigation box is a set of styled divs
+containing the navigation links.
+
+*** Dialogs
+
+A few convenience dialogs are provided for grabbing data from the
+user.
+
+**** login
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/components/login.lisp][src/components/login.lisp]]
+
+<src lang="lisp">
+(defclass login ()
+  ((username) (password) (message))
+  (:documentation "Generic login (input username and password) component.
+
+This component, which must be embedded in another component,
+presents the user with a simple two fielded login form.
+
+When the user attempts a login the action try-login is called,
+try-login calls the generic function check-credentials passing it
+the login component. If check-credentials returns true then the
+login-successful action is called, otherwise the message slot of
+the login component is set (to a generic \"bad username\"
+message).
+
+The default implementaion of login-successful simply answers t,
+no default implementation of check-credentials is
+provided. Developers should use sub-classes of login for which
+all the required methods have been definined.")
+  (:metaclass standard-component-class))
+</src>
+
+<src lang="lisp">
+(defgeneric check-credentials (login)
+  (:documentation "Returns T if LOGIN is valid."))
+
+(defaction login-successful ((l login))
+  (answer t))
+</src>
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/components/user-login.lisp][src/components/user-login.lisp]]
+
+<src lang="lisp">
+(defcomponent user-login (simple-window-component status-bar-mixin)
+  ((username string-field) (password password-field)))
+</src>
+
+Used by =secure-application-module= to provide a user login. Relevant
+protocol details follow.
+
+<src lang="lisp">
+(defmethod check-credentials ((self user-login))
+  (let* ((username (value (username self)))
+         (password (value (password self)))
+         (user (find-application-user username)))
+    (when (and user (check-user-password user password))
+      user)))
+
+(defgeneric application-find-user (application username)
+  (:documentation "Find USER by USERNAME for APPLICATION."))
+</src>
+
+**** error
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/components/error.lisp][src/components/error.lisp]]
+
+<src lang="lisp">
+(defclass error-message (simple-window-component)
+  ((message :accessor message :initarg :message :initform "ERROR [no message specified]"))
+  (:documentation "Generic component for showing server side
+ error messages.")
+  (:metaclass standard-component-class))
+
+(defclass error-component (error-message)
+  ((condition :accessor error.condition :initarg :condition :initform nil)
+   (backtrace :accessor error.backtrace :initarg :backtrace))
+  (:documentation "Generic component for showing server side
+ error conditions. Unlike ERROR-MESSAGE this component also
+ attempts to display a backtrace.")
+  (:metaclass standard-component-class))
+</src>
+
+**** message
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/components/message.lisp][src/components/message.lisp]]
+
+<src lang="lisp">
+(defclass info-message ()
+  ((message :initarg :message :accessor message)
+   (ok-text :initarg :ok-text :accessor ok-text :initform "Ok."))
+  (:documentation "Component for showing a message to the user.
+
+If the OK-TEXT slot is non-NIL component will use that as the
+text for a link which, when clicked, causes the component to
+answer. It follows that if OK-TEXT is NIL this component will
+never answer.")
+  (:metaclass standard-component-class))
+</src>
+
+**** option-dialog
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/components/option-dialog.lisp][src/components/option-dialog.lisp]]
+
+<src lang="lisp">
+(defclass option-dialog (template-component)
+  ((message) (options) (confirm))
+  (:default-initargs :template-name "ucw/option-dialog.tal")
+  (:documentation "Component for querying the user.
+
+The value of the slot MESSAGE is used as a general heading.
+
+The OPTIONS slot must be an alist of (VALUE . LABEL). LABEL (a
+string) will be used as the text of a link which, when clikced,
+will answer VALUE.
+
+If the CONFIRM slot is T the user will be presented with a second
+OPTION-DIALOG asking the user if they are sure they want to
+submit that value.")
+  (:metaclass standard-component-class))
+</src>
+
+A macro to present an option dialog is provided.
+
+<src lang="lisp">
+(defmacro option-dialog ((message-spec &rest message-args) &body options)
+  ...)
+</src>
+
+=message-spec= is passed to =format= if =message-args= are supplied, and
+used as a string literal otherwise. This does not provide a way to set
+the confirm property which makes the macro not so generally useful.
+
+*** Forms
+
+Reasonably useful forms library that integrates easily with TAL.
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/components/form.lisp][src/components/form.lisp]]
+
+<src lang="lisp">
+(defclass form-field ()
+  ((validators :documentation "List of validators which will be
+               applied to this field.")
+   (initially-validate :documentation "When non-NIL the
+                       validators will be run as soon as the page
+                       is rendered.")))
+
+(defgeneric value (form-field)
+  (:documentation "The lispish translated value that represents the form-field."))
+
+(defgeneric (setf value) (new-value form-field)
+  (:documentation "Set the value of a form-field with translation to client."))
+
+(defclass generic-html-input (form-field html-element)
+  ((client-value :accessor client-value :initarg :client-value
+                 :initform ""
+                 :documentation "The string the client submitted along with this field.")
+   (name :accessor name :initarg :name :initform nil)
+   (accesskey :accessor accesskey :initarg :accesskey :initform nil)
+   (tooltip :accessor tooltip :initarg :tooltip :initform nil)
+   (tabindex :accessor tabindex :initarg :tabindex :initform nil))
+  (:default-initargs :dom-id (js:gen-js-name-string :prefix "_ucw_")))
+</src>
+
+Fields are rendered into the extended =<ucw:input= yaclml tag which
+supports a few fancy features. The =:accessor= for all form elements is
+set to =(client-value FIELD)=, and you should use =value= to access the
+Lisp value associated with it.
+
+<src lang="lisp">
+(deftag-macro <ucw:input (&attribute accessor action reader writer name id (default nil)
+                         &allow-other-attributes others)
+  "Generic INPUT tag replacement.
+
+If the ACCESSOR attribute is specified then it must be a PLACE
+and it's value will be used to fill the input, when the form is
+submitted it will be set to the new value.
+
+If ACTION is specefied then when the form is submitted via this
+input type=\"submit\" tag the form will be eval'd. when the
+submit (or image) is clicked. DEFAULT means that the ACTION
+provided for this input tag will be the default action of the
+form when pressing enter in a form field. If more then one, then
+the latest wins.")
+</src>
+
+Validation of form fields are supported by adding to the validators
+list.
+
+<src lang="lisp">
+(defclass validator ()
+  ((message :accessor message :initarg :message :initform nil)))
+
+(defgeneric validate (field validator)
+  (:documentation "Validate a form-field with a validator."))
+
+(defgeneric javascript-check (field validator)
+  (:documentation "Generate javascript code for checking FIELD against VALIDATOR.
+
+This is the convenience entry point to generate-javascript-check,
+methods defined on this generic funcition should return a list of
+javascript code (as per parenscript) which tests against the
+javascript variable value."))
+
+(defgeneric javascript-invalid-handler (field validator)
+  (:documentation "The javascript code body for when a field is invalid."))
+
+(defgeneric javascript-valid-handler (field validator)
+  (:documentation "Generate the javascript body for when a field is valid."))
+</src>
+
+**** Standard Form Fields
+
+<src lang="lisp">
+(defclass string-field (generic-html-input)
+  ((input-size) (maxlength)))
+
+(defclass password-field (string-field))
+(defclass number-field (string-field))
+(defclass integer-field (number-field))
+
+(defclass in-field-string-field (string-field)
+  ((in-field-label :documentation "This slot, if non-NIL, will be
+                   used as an initial field label. An initial
+                   field label is a block of text which is placed
+                   inside the input element and removed as soon
+                   as the user edits the field. Obviously this
+                   field is overidden by an initial :client-value
+                   argument.")))
+
+(defclass textarea-field (generic-html-input)
+  ((rows) (cols)))
+
+(defclass date-field (form-field widget-component)
+  ((year) (month) (day)))
+
+(defclass dmy-date-field (date-field)
+  (:documentation "Date fields which orders the inputs day/month/year"))
+(defclass mdy-date-field (date-field))
+
+(defclass select-field (generic-html-input)
+  ((data-set :documentation "The values this select chooses
+             from."))
+  (:documentation "Form field used for selecting one value from a
+  list of available options."))
+
+(defgeneric render-value (select-field value)
+  (:documentation "This function will be passed each value in the field's
+   data-set and must produce the body of the corresponding
+   <ucw:option tag."))
+
+(defclass mapping-select-field (select-field)
+  (:documentation "Class used when we want to chose the values of
+  a certain mapping based on the keys. We render the keys in the
+  select and return the corresponding value from the VALUE
+  method."))
+
+(defclass hash-table-select-field (mapping-select-field))
+(defclass alist-select-field (mapping-select-field))
+(defclass plist-select-field (mapping-select-field))
+
+(defclass radio-group (generic-html-input)
+  ((value-widgets)))
+
+(defclass radio-button (generic-html-input)
+  ((value)
+   (group :documentation "The RADIO-GROUP this button is a part
+          of."))
+  (:documentation "A widget representing a single radio
+  button. Should be used in conjunction with a RADIO-GROUP."))
+
+(defmethod add-value ((group radio-group) value)
+  "Adds radio-button with value to group")
+
+(defclass checkbox-field (generic-html-input))
+(defclass file-upload-field (generic-html-input))
+(defclass submit-button (generic-html-input)
+  ((label)))
+</src>
+
+***** File Upload Field
+
+Calling =value= on a =file-upload-field= returns a mime encoded body
+part. =(mime-part-body (value FIELD))= will return a **binary stream**
+attached to the contents of the file. The =Content-Type= header should
+be set to the MIME type of the file being uploaded.
+
+<src lang="lisp">
+(defgeneric mime-part-headers (mime-part)
+  (:documentation "Returns an alist of the headers of MIME-PART.
+
+The alist must be of the form (NAME . VALUE) where both NAME and
+VALUE are strings."))
+
+(defgeneric mime-part-body (mime-part)
+  (:documentation "Returns the body of MIME-PART."))
+</src>
+
+**** Standard Validators
+
+<src lang="lisp">
+(defclass not-empty-validator (validator))
+
+(defclass value-validator (validator)
+  (:documentation "Validators that should only be applied if there is a value.
+That is, they always succeed on nil."))
+
+(defclass length-validator (value-validator)
+  ((min-length :accessor min-length :initarg :min-length
+               :initform nil)
+   (max-length :accessor max-length :initarg :max-length
+               :initform nil)))
+
+(defclass string=-validator (validator)
+  ((other-field :accessor other-field :initarg :other-field))
+  (:documentation "Ensures that a field is string= to another one."))
+
+(defclass regex-validator (value-validator)
+  ((regex :accessor regex :initarg :regex :initform nil)))
+
+(defclass e-mail-address-validator (regex-validator))
+
+(defclass phone-number-validator (regex-validator))
+
+(defclass is-a-number-validator (value-validator))
+(defclass is-an-integer-validator (is-a-number-validator))
+
+(defclass number-range-validator (is-a-number-validator)
+  ((min-value :accessor min-value :initarg :min-value :initform nil)
+   (max-value :accessor max-value :initarg :max-value :initform nil)))
+</src>
+
+**** Simple Form Helper
+
+UCW provides a helper class for developing forms. Subclass and add the
+elements you wish to include in the form. A =:wrapping= method renders
+the form boilerplate and then calls your =render=.
+
+<src lang="lisp">
+(defcomponent simple-form (html-element)
+  ((submit-method :accessor submit-method
+                  :initform "post"
+                  :initarg :submit-method)
+   (dom-id :accessor dom-id
+           :initform (js:gen-js-name-string :prefix "_ucw_simple_form_")
+           :initarg :dom-id))
+  (:default-initargs :dom-id "ucw-simple-form"))
+</src>
+
+*** Templates
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/components/template.lisp][src/components/template.lisp]]
+
+Infrastructure for loading TAL templates as a view of a component.
+
+<src lang="lisp">
+(defclass template-component (component))
+(defcomponent simple-template-component (template-component)
+  ((environment :initarg :environment :initform nil)))
+
+(defgeneric template-component-environment (component)
+  (:documentation "Create the TAL environment for rendering COMPONENT's template.
+
+Methods defined on this generic function must return a TAL
+environment: a list of TAL binding sets (see the documentation
+for YACLML:MAKE-STANDARD-ENVIRONMENT for details on TAL
+environments.)")
+  (:method-combination nconc))
+
+(defmethod template-component-environment nconc ((component template-component))
+  "Create the basic TAL environment.
+
+Binds the symbol ucw:component to the component object itself,
+also puts the object COMPONENT on the environment (after the
+binding of ucw:component) so that slots are, by default,
+visable."
+  (make-standard-environment `((component . ,component)) component))
+
+(defmethod render ((component template-component))
+  "Render a template based component.
+
+Calls the component's template. The name of the template is the
+value returned by the generic function
+template-component.template-name, the template will be rendered
+in the environment returned by the generic function
+template-component-environment."
+  (render-template *context*
+                   (template-component.template-name component)
+                   (template-component-environment component)))
+
+</src>
+
+Subclass and override methods. =simple-template-component= only provides
+the ability to set environment variables in initarg. Subclass to
+provide automagic template file name generation and such.
+
+*** Utility Mixin Components
+
+**** Range View
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/components/range-view.lisp][src/components/range-view.lisp]]
+
+<src lang="lisp">
+(defclass range-view (template-component)
+  (:default-initargs :template-name "ucw/range-view.tal")
+  (:documentation "Component for showing the user a set of data one \"window\" at a time.
+
+The data set is presented one \"window\" at a time with links to
+the the first, previous, next and last window. Each window shows
+at most WINDOW-SIZE elements of the data. The data is passed to
+the range-view at instance creation time via the :DATA initarg.
+
+The generic function RENDER-RANGE-VIEW-ITEM is used to render
+each item of DATA.
+
+In order to change the rendering of the single elements of a
+range view developer's should create a sub class of RANGE-VIEW
+and define their RENDER-RANGE-VIEW-ITEM methods on that.")
+  (:metaclass standard-component-class))
+</src>
+
+<src lang="lisp">
+(defgeneric render-range-view-item (range-view item)
+  (:documentation "Render a single element of a range-view.")
+  (:method ((range-view range-view) (item t))
+    "Standard implementation of RENDER-RANGE-VIEW-ITEM. Simply
+applies ITEM to princ (via <:as-html)."
+    (declare (ignore range-view))
+    (<:as-html item)))
+</src>
+
+**** Widget
+
+Mixin with existing component to wrap in a div or span. This is handy
+for defining lightweight widgets embedded within other components.
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/components/html-element.lisp][src/components/html-element.lisp]]
+
+<src lang="lisp">
+(defclass html-element (component)
+  ((css-class)
+   (dom-id)
+   (css-style)
+   (extra-tags)
+   (events))
+  (:documentation "An HTML element.
+
+HTML elements control aspects that are relevant to almost all tags.
+
+Firstly they provide a place to store the class, id, and style of the
+component. The specific render methods of the components themselves
+must pass these values to whatever code is used to render the actual
+tag.
+
+Secondly, they allow javascript event handlers to be registered for a
+tag. The events slot can be filled with a list of lists in the form
+
+ (event parenscript-statement*)
+
+For example (\"onclick\" (alert \"You clicked!\") (return nil)). If
+the element has a dom-id, these event handlers are automatically
+added."))
+</src>
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/components/widget.lisp][src/components/widget.lisp]]
+
+<src lang="lisp">
+(defclass widget-component (html-element)
+  ()
+  (:documentation "A widget which should be wrapped in a <div>."))
+
+(defclass inline-widget-component (html-element)
+  ()
+  (:documentation "A widget which should be wrapped in <span> and not <div>"))
+
+(defmethod render :wrap-around ((widget widget-component)))
+(defmethod render :wrap-around ((widget inline-widget-component)))
+</src>
+
+**** Transactions
+
+A mixin to provide transactions. =(open-transaction component)= and
+=(close-transaction component)= open and closed nested
+transactions. After a transaction has been closed an attempt to
+backtrack into a step inside the transaction will result in jumping up
+one level of transactions (or out of the transaction entirely if at
+the top level). This ensures that the transaction is only run once,
+naturally.
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/components/transaction-mixin.lisp][src/components/transaction-mixin.lisp]]
+
+<src lang="lisp">
+(defcomponent transaction-mixin ()
+  (...))
+
+(defmethod/cc open-transaction ((comp transaction-mixin)))
+(defmethod/cc close-transaction ((comp transaction-mixin)))
+</src>
+
+**** Task
+
+=(defaction start ...)= on subclass to run a series of actions bundled
+into a task.
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/components/task.lisp][src/components/task.lisp]]
+
+<src lang="lisp">
+(defclass task-component (standard-component)
+  (...)
+  (:documentation "A controller for a single task or operation to
+  be performed by the user.
+
+  A task component's START action is called as soon as the
+component is instantiated. Task components do not have their own
+RENDER method, in fact they have no graphical representation but
+serve only to order a sequence of other components."))
+
+(defgeneric/cc start (task)
+  (:documentation "action which gets called automatically when
+task-component is active. Use defaction to define your own
+\"start\" action"))
+</src>
+
+**** Cached
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/components/cached.lisp][src/components/cached.lisp]]
+
+<src lang="lisp">
+(defcomponent cached-component ()
+  ((cached-output :accessor cached-output :initform nil
+                  :documentation "A string holding the output to
+                  use for this component. This string will be
+                  written directly to the html stream and is
+                  changed by the REFRESH-COMPONENT-OUTPUT
+                  method." )
+   (timeout :accessor timeout :initarg :timeout
+            :documentation "An value specifying how often this
+            component needs to be refreshed. The exact
+            interpretation of the value depends on the type of
+            caching used class."))
+  (:documentation "Component which caches its output.
+
+The component caching API is built around the generic functions
+COMPONENT-DIRTY-P and REFRESH-COMPONENT-OUTPUT and a method on
+RENDER, see the respective docstrings for more details.
+
+Do not use CACHED-COMPONENT directly, use one its subclasses."))
+
+(defgeneric component-dirty-p (component)
+  (:documentation "Returns T is COMPONENT's cache is invalid."))
+
+(defgeneric update-cache (component)
+  (:documentation "Update COMPONENT's cache variables after a refresh."))
+
+(defcomponent timeout-cache-component (cached-component)
+  ((last-refresh :accessor last-refresh :initform nil
+                 :documentation "The time, exrpessed as a
+                 universal time, when the component was last rendered."))
+  (:default-initargs
+   :timeout (* 30 60 60))
+  (:documentation "Render the component at most every TIMEOUT seconds."))
+
+(defcomponent num-hits-cache-component (cached-component)
+  ((hits-since-refresh :accessor hits-since-refresh
+                       :initform nil
+                       :documentation "Number of views since last refresh."))
+  (:default-initargs :timeout 10)
+  (:documentation "Render the component every TIMEOUT views."))
+</src>
+
+Subclass and override =component-dirty-p= to do something useful
+(e.g. flip mark bit when object being presented changes).
+
+** Control Flow
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/rerl/standard-component/control-flow.lisp][src/rerl/standard-component/control-flow.lisp]]
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/rerl/standard-action.lisp][src/rerl/standard-action.lisp]]
+
+*** Calling
+
+Most of what you do in UCW will be calling components so this is a bit
+important. Note that calling interrupts the current control flow so if
+you want to render a component in place as part of another component
+just call =render= on it instead.
+
+<src lang="lisp">
+(defmacro call (component-type &rest component-init-args)
+  "Stop the execution of the current action and pass control to
+a freshly created component of type COMPONENT-TYPE.
+
+COMPONENT-INIT-ARGS are passed directly to the underlying
+make-instance call. This form will return if and when the call'd
+component calls answer, the value returned by this form is
+whatever the call'd component passed to answer.
+
+Notes:
+
+This macro assumes that the lexcial variable UCW:SELF is bound to
+the calling component.")
+
+(answer VAL) ; answer parent component ONLY IN ACTIONS
+
+(ok SELF VAL) ; Used to answer a component anywhere and what answer
+              ; expands into
+
+(jump COMPONENT-NAME &REST ARGS) ; is similar to call, but replaces
+                                ; the current component with the new
+                                ; one and drops any backtracks (back
+                                ; button will no longer work)
+</src>
+
+=(call COMPONENT-NAME &ARGS INIT-ARGS)= calls =COMPONENT-NAME= and returns
+the value returned by =(ok SELF RETURN-VALUE)= called from within
+=COMPONENT-NAME=
+
+*** Actions
+
+Actions are methods on components. The first argument **must** be a
+component for most of UCW to work.
+
+<src lang="lisp">
+(defaction NAME (first ...) ...) 
+ ;  (roughly) expands into
+(defmethod/cc NAME (first ...)
+  (let ((self first))
+    ...))
+</src>
+
+=Self= being bound in the current lexical environment is required for
+most UCW control flow things to work. =defaction= hides this from you,
+and was a big source of confusion for me early on (mostly "hmm, why is
+this not working ... where did that come from in the
+macroexpansion!").
+
+*** Entry Points
+
+<src lang="lisp">
+(defentry-point url (:application APPLICATION
+                     :class DISPATCHER-CLASS)
+   (PARAM1 ... PARAMN) ; GET / POST vars, bound in body
+  body)
+</src>
+
+An entry point is what it sounds like: a static URL matched using the
+mater of =DISPATCHER-CLASS= that enters into =APPLICATION= running the
+code in =body=. An example from a test program I have written
+follows. The entry point allows files to be streamed to user when the
+url audio.ucw?file=FOO is used.
+
+<src lang="lisp">
+(defentry-point "^(audio.ucw|)$" (:application *golf-test-app*
+                                 :class regexp-dispatcher)
+    (file)
+  (call 'audio-file-window
+   :audio-file (make-instance 'audio-file
+               :type :vorbis
+               :data (file->bytes (open
+                                   file
+                                   :element-type 'unsigned-byte)))))
+</src>
+
+** Dispatching
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/rerl/standard-dispatcher.lisp][src/rerl/standard-dispatcher.lisp]]
+
+<src lang="lisp">
+(defgeneric matcher-match (matcher application context)
+  (:documentation "Abstract method for subclasses to implement a
+matcher.  This method would return multiple-values according to
+matcher internal nature.
+
+No methods defined on this function may rebind *context*, nor
+change CONTEXT's application. Only if the method matches the
+request, it is allowed to modify CONTEXT or APPLICATION, even in
+that case methods defined on this function must not modify
+CONTEXT's application nor rebind *context*."))
+
+(defgeneric handler-handle (handler application context matcher-result)
+  (:documentation "Abstract function for handler classes to
+implement in order to handle a request matched by relevant
+matcher.
+
+These methods may modify context as they wish since they'r
+matched, request will be closed after this method is run."))
+
+(defgeneric dispatch (dispatcher application context)
+  (:documentation "Entry point into a dispatcher. Must return T
+  if the context has been handled or NIL if it hasn't.
+
+No methods defined on this function may rebind *context*, nor
+change CONTEXT's application. Only if the method returns T is it
+allowed to modify CONTEXT or APPLICATION, even in that case
+methods defined on this function must not modify CONTEXT's
+application nor rebind *context*."))
+</src>
+
+<src lang="lisp">
+(defclass my-matcher    (abstract-matcher)    ...)
+(defclass my-handler    (abstract-handler)    ...)
+(defclass my-dispatcher (abstract-dispatcher my-matcher my-handler)
+  ...)
+</src>
+
+*** Simple Dispatcher
+
+<src lang="lisp">
+(:documentation "This class of dispatchers avoids all of UCW's
+  standard call/cc (and therefore frame/backtracking/component)
+  mechanism.
+
+Unlike all other UCW dispatchers a simple-dispatcher must not use
+CALL, and must perform the rendering directly within the handler.")
+</src>
+
+** Server
+
+[[http://www.uncommon-web.com/darcsweb/darcsweb.cgi?r=ucw_dev;a=headblob;f=/src/control.lisp][src/control.lisp]]
+
+<src lang="lisp">
+(defun create-server (&key
+                      (backend `(,*ucw-backend-type* :host ,*ucw-backend-host*
+                                 :port ,*ucw-backend-port*))
+                      (applications *ucw-applications*)
+                      (start-p t)
+                      (server-class *ucw-server-class*)
+                      (log-root-directory (truename *ucw-log-root-directory*))
+                      (log-level *ucw-log-level*))
+  "Creates and returns a UCW server according to SERVER-CLASS, HOST and
+PORT. Affects *DEFAULT-SERVER*.
+
+BACKEND is a list of (BACKEND-TYPE &rest INITARGS). BACKEND-TYPE
+may be :HTTPD, :MOD-LISP, :ASERVE, :ARANEIDA, an existing
+backend, an existing UCW server backend or :DEFAULT in which case
+it attempts to return a sane default from the UCW backends loaded
+and available, or any other value for which a valid MAKE-BACKEND
+method has been defined. INITARGS will be passed, unmodified, to
+MAKE-BACKEND.
+
+APPLICATIONS is a list of defined applications to be loaded into the
+server.
+
+Logs are generated in verbosity defined by LOG-LEVEL and directed to
+LOG-ROOT-DIRECTORY if defined."
+  ...
+  server) ; return server, naturally
+</src>
+
+** Debugging
+
+*** Inspector
+
+[[pos:///home/clinton/src/ucw/darcs/ucw_dev/src/components/ucw-inspector.lisp#399][/home/clinton/src/ucw/darcs/ucw_dev/src/components/ucw-inspector.lisp]]
+
+<src lang="lisp">
+(defaction call-inspector ((component component) datum)
+  "Call an inspector for DATUM on the component COMPONENT."
+  (call 'ucw-inspector :datum datum))
+</src>
+
+* Tips
+
+** Getting dojo to load
+
+I had some trouble getting dojo to work properly with UCW. The way
+that the =:www-roots= option for an application works is a bit
+confusing, and it is unforgiving if you mess the pathname up. A
+directory **must** have a =/= at the end, and the directory you are serving
+must also have the =/= (which is counterintuitive given the behavior of
+most unix things that don't want the =/= at the end of the name).
+
+<src lang="lisp">
+:www-roots (list '("dojo/" . 
+                   #P"/home/clinton/src/ucw/darcs/ucw_dev/wwwroot/dojo/"))
+</src>
+
+** Specials Bound During Rendering
+
+The current request context is bound to =ucw:*context*=, and the current
+component is bound to =ucw:*current-component*= in the dynamic extent of
+=render=.
+
+** Printing to the yaclml stream
+
+Occasionally it can be useful to do something like write a byte array
+as an ascii string to the client. Inside of =render= the variable
+=yaclml:*yaclml-stream*= is bound to the stream that you can write to if
+you wish to have content interspersed with yaclml tags.
diff --git a/William James - The Varieties of Religious Experience.muse b/William James - The Varieties of Religious Experience.muse
new file mode 100644 (file)
index 0000000..f4b2c51
--- /dev/null
@@ -0,0 +1,569 @@
+* William James - [[http://www.gutenberg.org/etext/621][Varieties of Religious Experience]] (=In progress=)
+
+;  - book version of lecture series
+;  - large set of quotes with commentary
+;    - Most are similar in nature (too many)
+;    - Seemingly suspect in quality
+;      - Always *perfectly* support his argument (selection process)
+;      - Many accounts from personal correspondence
+;    - Some are quite interesting
+;         - Luther, Tolstoy, ...
+;  - arguments a bit weak
+;    - e.g. cites Freud as being true (Lecture X)
+;    - Seems to take the (then new) discipline of psychology far too
+;      seriously
+;    - Uses questionable arguments
+;      - Model of the subconcious (Lecture IX), etc.
+;  - Depsite flaws still somewhat interesting
+;    - Some quotations are interesting
+
+The *Varieties of Religious Experience* is a set of twenty lectures on
+religious experience from a psychological perspective. The quality of
+the method used is a bit suspect, but my understanding is that it was
+one of the first pyschological surveys of religion, and so could
+perhaps be forgiven of a few flaws.
+
+I found parts to be boring, and others to have flawed reasoning, but
+with a few lectures that were interesting. At the very least the
+lectures give a reasonable glimpse into the religous fashion of the
+late 1800s. There is a small bit of social commentary thrown in that
+is cited by John Gatto in his *Underground History of American
+Education*, which is why I chose to read this.
+
+** Lectures I and II
+
+The first two lectures lay the groundwork for the lecture series. The
+first covers a few views on what religious experience is, and gives
+refutations (although not terribly good ones now, perhaps they were
+seen as fine in the early 1900s) to a few deterministic theories. The
+second lecture defines the scope of the topic to be covered, and
+limits the definitions of religion and spirituality.
+
+; Quote defintions of religion and spirituality
+<quote>
+Religion, therefore, as I now ask you arbitrarily to take it, shall
+mean for us *the feelings, acts, and experiences of individual men in
+their solitude, so far as they apprehend themselves to stand in
+relation to whatever they may consider the divine*.  Since the
+relation may be either moral, physical, or ritual, it is evident that
+out of religion in the sense in which we take it, theologies,
+philosophies, and ecclesiastical organizations may secondarily grow.
+In these lectures, however, as I have already said, the immediate
+personal experiences will amply fill our time, and we shall hardly
+consider theology or ecclesiasticism at all.
+</quote>
+
+In the second lecture James's first extremely arbitrary distinction is
+made; he compares the stoicism espoused by Marcus Aurelius to
+Christian writings and draws what I think is a nonexistent difference
+between the two. It is my opinion that the Stoic is just as religious
+by James's definition as the Christian; the stoic merely sees the
+Universe as his god and makes conformance to the natural order his
+ideal. The Stoic actively embraces the natural order just as the
+Christian actively loves his god; the difference is merely in whether
+God is seen as a definite individual or not.
+
+<quote>
+If we compare stoic with Christian ejaculations we see much more
+than a difference of doctrine; rather is it a difference of
+emotional mood that parts them.  When Marcus Aurelius reflects on
+the eternal reason that has ordered things, there is a frosty
+chill about his words which you rarely find in a Jewish, and
+never in a Christian piece of religious writing.  The universe is
+"accepted" by all these writers; but how devoid of passion or
+exultation the spirit of the Roman Emperor is!  Compare his fine
+sentence:  "If gods care not for me or my children, here is a
+reason for it," with Job's cry:  "Though he slay me, yet will I
+trust in him!" and you immediately see the difference I mean. 
+The anima mundi, to whose disposal of his own personal destiny
+the Stoic consents, is there to be respected and submitted to,
+but the Christian God is there to be loved; and the difference of
+emotional atmosphere is like that between an arctic climate and
+the tropics, though the outcome in the way of accepting actual
+conditions uncomplainingly may seem in abstract terms to be much
+the same.
+</quote>
+
+** Lecture III: "The Reality of the Unseen"
+
+The third lecture consists of a brief overview of various
+interpretations of the structure of the unseen world. An argument for
+a dualistic universe is then given using a few passages on spiritual
+encounters as supposed proof. James criticizes strict rationalism as
+well.
+
+<quote>
+Nevertheless, if we look on man's whole mental life as it exists, on
+the life of men that lies in them apart from their learning and
+science, and that they inwardly and privately follow, we have to
+confess that the part of it of which rationalism can give an account
+is relatively superficial.  It is the part that has the prestige
+undoubtedly, for it has the loquacity, it can challenge you for
+proofs, and chop logic, and put you down with words.  But it will fail
+to convince or convert you all the same, if your dumb intuitions are
+opposed to its conclusions.  If you have intuitions at all, they come
+from a deeper level of your nature than the loquacious level which
+rationalism inhabits.  Your whole subconscious life, your impulses,
+your faiths, your needs, your divinations, have prepared the premises,
+of which your consciousness now feels the weight of the result; and
+something in you absolutely *knows* that that result must be truer than
+any logic-chopping rationalistic talk, however clever, that may
+contradict it.  This inferiority of the rationalistic level in
+founding belief is just as manifest when rationalism argues for
+religion as when it argues against it.  That vast literature of proofs
+of God's existence drawn from the order of nature, which a century ago
+seemed so overwhelmingly convincing, to-day does little more than
+gather dust in libraries, for the simple reason that our generation
+has ceased to believe in the kind of God it argued for.  Whatever sort
+of a being God may be, we *know* to-day that he is nevermore that mere
+external inventor of "contrivances" intended to make manifest his
+"glory" in which our great-grandfathers took such satisfaction, though
+just how we know this we cannot possibly make clear by words either to
+others or to ourselves.  I defy any of you here fully to account for
+your persuasion that if a God exist he must be a more cosmic and
+tragic personage than that Being.
+</quote>
+
+** Lectures IV and V: "The Religion of Healthy Mindedness"
+
+Lecture IV is an interesting read and surveys a few positive minded
+philosophies, but Lecture V focuses entirely on the *mind-cure*
+movement. William James then gives a terrible argument for the
+validity of *mind-cure*, and compares it to science while neglecting the
+complete lack of objectivity in the methods of test the effects of
+*mind-cure*.
+
+<quote>
+It is a deliberately optimistic scheme of life, with both a
+speculative and a practical side.  In its gradual development during
+the last quarter of a century, it has taken up into itself a number
+of contributory elements, and it must now be reckoned with as a
+genuine religious power.  It has reached the stage, for example, when
+the demand for its literature is great enough for insincere stuff,
+mechanically produced for the market, to be to a certain extent
+supplied by publishers--a phenomenon never observed, I imagine, until
+a religion has got well past its earliest insecure beginnings.
+
+...
+
+The plain fact remains that the spread of the movement has been
+due to practical fruits, and the extremely practical turn of
+character of the American people has never been better shown than
+by the fact that this, their only decidedly original contribution
+to the systematic philosophy of life, should be so intimately
+knit up with concrete therapeutics.  To the importance of
+mind-cure the medical and clerical professions in the United
+States are beginning, though with much recalcitrancy and
+protesting, to open their eyes.  It is evidently bound to develop
+still farther, both speculatively and practically, and its latest
+writers are far and away the ablest of the group. It matters
+nothing that, just as there are hosts of persons who cannot pray,
+so there are greater hosts who cannot by any possibility be
+influenced by the mind-curers' ideas.  For our immediate purpose,
+the important point is that so large a number should exist who 
+*can* be so influenced.  They form a psychic type to be studied
+with respect.
+</quote>
+
+The lectures are ended with an argument for the validity of *mind-cure*
+that compares it directly to science with a clear anti-science bias.
+
+<quote>
+These are exceedingly trivial instances [*the first-hand accounts of
+mind-cure working given in the lecture*], but in them, if we
+have anything at all, we have the method of experiment and
+verification.  For the point I am driving at now, it makes no
+difference whether you consider the patients to be deluded
+victims of their imagination or not.  That they seemed to
+*themselves* to have been cured by the experiments tried was enough
+to make them converts to the system.  And although it is evident
+that one must be of a certain mental mould to get such results
+(for not every one can get thus cured to his own satisfaction any
+more than every one can be cured by the first regular
+practitioner whom he calls in), yet it would surely be pedantic
+and over-scrupulous for those who *can* get their savage and
+primitive philosophy of mental healing verified in such
+experimental ways as this, to give them up at word of command for
+more scientific therapeutics.
+
+What are we to think of all this?  Has science made too wide a
+claim? 
+
+I believe that the claims of the sectarian scientist are, to say
+the least, premature.  The experiences which we have been
+studying during this hour (and a great many other kinds of
+religious experiences are like them) plainly show the universe to
+be a more many-sided affair than any sect, even the scientific
+sect, allows for.  What, in the end, are all our verifications
+but experiences that agree with more or less isolated systems of
+ideas (conceptual systems) that our minds have framed?  But why
+in the name of common sense need we assume that only one such
+system of ideas can be true?  The obvious outcome of our total
+experience is that the world can be handled according to many
+systems of ideas, and is so handled by different men, and will
+each time give some characteristic kind of profit, for which he
+cares, to the handler, while at the same time some other kind of
+profit has to be omitted or postponed.  Science gives to all of
+us telegraphy, electric lighting, and diagnosis, and succeeds in
+preventing and curing a certain amount of disease. Religion in
+the shape of mind-cure gives to some of us serenity, moral poise,
+and happiness, and prevents certain forms of disease as well as
+science does, or even better in a certain class of persons. 
+Evidently, then, the science and the religion are both of them
+genuine keys for unlocking the world's treasure-house to him who
+can use either of them practically.  Just as evidently neither is
+exhaustive or exclusive of the other's simultaneous use.  And
+why, after all, may not the world be so complex as to consist of
+many interpenetrating spheres of reality, which we can thus
+approach in alternation by using different conceptions and
+assuming different attitudes, just as mathematicians handle the
+same numerical and spatial facts by geometry, by analytical 
+geometry, by algebra, by the calculus, or by quaternions, and
+each time come out right?  On this view religion and science,
+each verified in its own way from hour to hour and from life to
+life, would be co-eternal.  Primitive thought, with its belief in
+individualized personal forces, seems at any rate as far as ever
+from being driven by science from the field to-day.  Numbers of
+educated people still find it the directest experimental channel
+by which to carry on their intercourse with reality
+</quote>
+
+He draws a very strong conclusion that would be difficult to draw from
+even quality evidence and objective trials; this drawn from subjective
+personal accounts with no controlled testing method. A representative
+example follows of his evidence follows.
+
+<quote>
+"One of my first experiences in applying my teaching was two
+months after I first saw the healer.  I fell, spraining my right
+ankle, which I had done once four years before, having then had
+to use a crutch and elastic anklet for some months, and carefully
+guarding it ever since.  As soon as I was on my feet I made the
+positive suggestion (and felt it through all my being):  'There
+is nothing but God, and all life comes from him perfectly.  I
+cannot be sprained or hurt, I will let him take care of it.'
+Well, I never had a sensation in it, and I walked two miles that
+day."
+</quote>
+
+Ignoring any other problems in William James's argument, it is clear
+that his conclusion is far too heavy to rest upon the evidence he has
+chosen to use.
+
+** Lectures VI and VII: "The Sick Soul"
+
+The lectures on the Sick Soul are filled with rather weak quotations
+(excepting a few short passages of Tolstoy). The reader is reminded
+over and over how terrible and painful it is to be working through
+these horrid expressions of melancholy which aren't really so
+terrible.
+
+James's view is that a state of melancholy is merely a transitional
+stage that comes before a second mental birth occurs, and allows for a
+deep religious belief to set in. Most of the remainder of the lecture
+series is dedicated to analyzing the mind of the Second Born which he
+sees are far deeper spiritually than the simple positive Once Born
+type (depsite his previous praise of *mind-cure*).
+
+** Lecture VIII: "The Divided Self, and the Process of Its Unificiation"
+
+Here the lectures return to things mildly interesting with an overview
+of heterogenous personalities and a few passages on unificiation of
+conflicting desires. James splits unificiations into gradual and
+sudden ones giving examples of each. This lecture is the bridge
+between lectures V through VII and the material on conversion.
+
+** Lectures IX and X: "Conversion"
+
+; IX
+ - conversion allows for unification of divided self
+ - Definition of Association
+ - Conversion is sudden change of *the habitual center of  personal energy*
+ - Examples of conversion
+   - Common people, stereotypical conversion types
+   - Seemingly of suspect quality
+ - Note of the trouble of not being able to be religious
+   - Painted in a negative light!
+; X
+ - Focus on instantaneous conversion
+   - Give prototypical example
+
+<quote>
+"Coming out of the cafe I met the carriage of Monsieur B. [the
+proselyting friend].  He stopped and invited me in for a drive,
+but first asked me to wait for a few minutes whilst he attended
+to some duty at the church of San Andrea delle Fratte.  Instead
+of waiting in the carriage, I entered the church myself to look
+at it.  The church of San Andrea was poor, small, and empty; I
+believe that I found myself there almost alone.  No work of art
+attracted my attention; and I passed my eyes mechanically over
+its interior without being arrested by any particular thought.  I
+can only remember an entirely black dog which went trotting and
+turning before me as I mused.  In an instant the dog had
+disappeared, the whole church had vanished, I no longer saw
+anything, . . . or more truly I saw, O my God, one thing alone. 
+"Heavens, how can I speak of it?  Oh no! human words cannot
+attain to expressing the inexpressible.  Any description, however
+sublime it might be, could be but a profanation of the
+unspeakable truth.
+
+"I was there prostrate on the ground, bathed in my tears, with my
+heart beside itself, when M. B. called me back to life.  I could
+not reply to the questions which followed from him one upon the
+other.  But finally I took the medal which I had on my breast,
+and with all the effusion of my soul I kissed the image of the
+Virgin, radiant with grace, which it bore.  Oh, indeed, it was
+She! It was indeed She! [What he had seen had been a vision of
+the Virgin.]
+
+"I did not know where I was:  I did not know whether I was
+Alphonse or another.  I only felt myself changed and believed
+myself another me; I looked for myself in myself and did not find
+myself.  In the bottom of my soul I felt an explosion of the most
+ardent joy; I could not speak; I had no wish to reveal what had
+happened.  But I felt something solemn and sacred within me which
+made me ask for a priest.  I was led to one; and there alone,
+after he had given me the positive order, I spoke as best I
+could, kneeling, and with my heart still trembling.  I could give
+no account to myself of the truth of which I had acquired a
+knowledge and a faith.  All that I can say is that in an instant
+the bandage had fallen from my eyes, and not one bandage only,
+but the whole manifold of bandages in which I had been brought
+up.  One after another they rapidly disappeared, even as the mud
+and ice disappear under the rays of the burning sun."
+</quote>
+
+  - Notes recent protestant phenomemon of instantaneous conversion
+  - Gives psychological explanation for instant conversion
+    - Field of conciousness
+    - Subconcious on margin
+      - Subconcious life can affect concious existance
+      - Note: cites Freud & friends as reliable
+
+<quote>
+In the wonderful explorations by Binet, Janet, Breuer, Freud,
+Mason, Prince, and others, of the subliminal consciousness of
+patients with hysteria, we have revealed to us whole systems of
+underground life, in the shape of memories of a painful sort
+which lead a parasitic existence, buried outside of the primary
+fields of consciousness, and making irruptions thereinto with
+hallucinations, pains, convulsions, paralyses of feeling and of
+motion, and the whole procession of symptoms of hysteric disease
+of body and of mind.  Alter or abolish by suggestion these
+subconscious memories, and the patient immediately gets well. 
+His symptoms were automatisms, in Mr. Myers's sense of the word. 
+These clinical records sound like fairy-tales when one first
+reads them, yet it is impossible to doubt their accuracy; and,
+the path having been once opened by these first observers,
+similar observations have been made elsewhere.  They throw, as I
+said, a wholly new light upon our natural constitution.
+</quote>
+
+   - Conversion is a transfer of energies from the subconcious
+     - Changes center of focus in the field of conciousness
+ - Disproves religious nature of instant conversion argument
+   - Notes that there are no discernable differences between instant
+     converts and slow converts
+
+<quote>
+The believers in the non-natural character of sudden conversion
+have had practically to admit that there is no unmistakable
+class-mark distinctive of all true converts.  The super-normal
+incidents, such as voices and visions and overpowering
+impressions of the meaning of suddenly presented scripture texts,
+the melting emotions and tumultuous affections connected with the
+crisis of change, may all come by way of nature, or worse still,
+be counterfeited by Satan.  The real witness of the spirit to the
+second birth is to be found only in the disposition of the
+genuine child of God, the permanently patient heart, the love of
+self eradicated.  And this, it has to be admitted, is also found
+in those who pass no crisis, and may even be found outside of
+Christianity altogether.
+</quote>
+
+ - Instant conversion is a natural result of exposing a person with a
+   rich subconcious existence to religion and is merely one type of
+   conversion
+
+<quote>
+Sharp distinctions are difficult in these regions, and Professor Coe's
+numbers are small.  But his methods were careful, and the results
+tally with what one might expect; and they seem, on the whole, to
+justify his practical conclusion, which is that if you should expose
+to a converting influence a subject in whom three factors unite:
+first, pronounced emotional sensibility; second, tendency to
+automatisms; and third, suggestibility of the passive type; you might
+then safely predict the result: there would be a sudden conversion, a
+transformation of the striking kind.
+</quote>
+
+ - Finishes with discussion of pre-conversion emotion
+   - Usually melancholy
+   - Disguist at sin
+ - Post Conversion feeling
+   - New self
+   - Clean
+
+** Lectures XI - XIII: Saintliness
+
+ - Descriptive assement of fruits of conversion
+   - general discussion of what causes differing character
+     - Impulse vs Inhibition
+       - Strong emotions shut down inhibition
+   - Application of general principles to the results of conversion
+     - Top over point -> God works through Subliminal
+     - Ignore how the Subliminal works
+       - [It seems that this is done to avoid concluding that there is
+         no god]
+       - [Minimization of importance of natural processes in
+         post-convesion]
+     - Saintliness
+       - Four universal inner conditions
+       - Four results of the inner conditions
+       - EXAMPLES
+         - Prescence of a higher & friendly power
+         - Charity (agape) love
+           - Charity not unique to theistic religions, therefore it
+             should be seen as coordinate rather than subordinate to
+             the topic of the lecture series (page 296)
+         - Inward Tranquillity
+           - Sombre constitution results in resignation and submission
+           - Cheerful constitution results in joyous consent
+         - Purity
+           - Internal discord leads to suffering
+         - Ascetecism
+           - result of extreme pursuit of purity
+           - List of sources of ascetic behavior
+           - Ascetecism in monks
+             - Obedience
+               - Low reasons
+                 - Obedience expedient in ecclesiastical organizations
+                 - External counsel at certain times is better than
+                   internal
+               - High Reason
+                 - Inner softening
+               - Catholic view as sacrifice
+                 - [quote p.274 "sacrifice which man offers to God..."]
+                 - passages by member of the order of St Ignatius
+             - Poverty
+               - Things steal freedom, therefore a life of doing/being
+                 is superior
+
+** Lectures XIV-XV: The Value of Saintliness
+
+ - Critique of Saintliness
+   - Using empirical methods (unlike Catholics)
+     - Humans cannot differentiate between natural and supernatural
+       effects
+   - (Defense of Methodology)
+     - Current religious views result of empiricism
+       - Rejection of former gods over time as they cease to serve our
+         needs
+     - Must be skeptical (not unreasonably so however) of current
+       beliefs
+       - Humans are fallible; admitting this brings us closer to truth
+         by enabling discussion of flaws in beliefs
+       - Quite probably that no one religion is entirely correct
+ - Concerned with personal religious experiences, and not with
+   instutitional religion [reiteration from second lecture]
+   - Ideas of a prophet -> heterodoxy -> heresy (if accepted by
+     others) -> orthodxy (if survives persection)
+     - Cycle then begins anew
+   - Religion itself cannot be blamed for evils committed
+ - Extreme Saintliness due to excess
+   - In men, excess is due to lack of balance, or excessively strong
+     personality elements mixed with weak ones
+     - If all faculities are strong and cooperate one has a strong
+       character rather than one plagued by excess
+     - Extremely saintly people have strong spiritual faculities, but
+       deficient ability to perceive extravagane
+       - Leads to excessie self-denial
+       - Still useful as archetypes
+ - Four Virtues & Unbalanced Forms
+   - Devoutness
+     - Fanatacism
+       - Strong character mixed with narrow mind
+     - Theopathy (cointed by WJ to describe excess devoutness)
+       - Excess of devotion with feeble mind
+       - Person becomes absorbed in inward love of/from God
+   - Purity
+     - Narrow mindedness results on love of God replacing all other
+       love
+     - In aggressive types stamps external disorder from existence
+     - In passive types disorder is eliminated internall by secluding
+       self
+       - Example: Lous of Gonzaga
+       - Such a life was seen as good in the 16th century, but in the
+         early 20th was seen as repulsive due to secular changes (more
+         value being placed on helping society than merely saving
+         oneself)
+   - Charity / Tenderness
+     - Saintly 'Resist No Evil' versus Worldy Pragmatic Standpoint
+       - No simple answer
+     - Perfect conduct relation between actor, objects acted upon, and
+       recipients of the action
+       - Best intentions fail when executed incorrectly or addressed
+         to the wrong recipient
+       - Thus cannot judge charity by actor alone
+     - Saintly charity works in a perfect world
+       - Excessive in the World That Is
+       - Evil takes advantage of charity
+       - However, the world would be far worse without charitable
+         people
+         - Treating others charitably inspires others to become
+           better
+         - Exposure to an excessively charitable person softens a
+           person
+         - Without this type all would lie in spiritual stagnation
+       - Therefore even excessive charity has value
+         - Force destroys enemies
+         - Prudence at best resists enemies
+         - Non-resistance / Charity turns enemies into friends
+       - Though excessive, the saint makes the world a better place
+         - Compare to Utopianists and Anarchists
+   - Ascetecism
+     - Virtue most prone to excess
+     - It seems at first those wo are excessively ascetic are still
+       inwardly attached to the world
+       - If one were truly liberated he would not need excessive
+         moritification
+     - Different view: Ascetic sees wrongs in the world, and rather
+       than ignore them he conquers them internally
+       - One who does not fear Death seems strong
+     - Ascetecism is a profounder way of handling excistence than
+       simple optimistic naturalism
+       - In the modern time, people should throw away useless
+         asceticism and embrace useful aspects
+       - Attributes of early 20th century life and weakened churching
+         breed weaker character
+         - Militarism used as a subtitute for religious ascetecism
+           - Poor subtitute
+             - Speaks to the base and brutish aspects of human nature
+         - Ascetic poverty much superior to militarism/war
+           - WJ believes it **must** be embraced to fight evils of the
+             time [quote page 319-320]
+           - Desire to gain wealth breeds cowardice and corruption
+             - Wealthy man enslaved to riches
+             - Poor man lacks chains
+  - Single attributes of saintliness are found in the non-religious
+    - Combination of all forms is religious in nature
+      - Flows from sense of divine order
+  - Saintly person palces happiness internally rather than deriving
+    from comfort
+  - Saintly attributes mixed with narrow mind results in terrible
+    excessive forms
+    - We should not, however, place blame for narrow mindedness
+      entirely on the individual
+      - Essentials vs Accidents of saintliness
+  - Dislike of Saintly character
+    - Man traditionally worships strong leaders
+    - Saints are weak and passive
+    - Male vs Female nature [think Yin vs Yang]
+  - Many suppose there is one ideal type of character
+    - Empiricism rejects this as foolish
+    - On the one hande the saintly character is better than the
+      strongman becaue he is adapted to life in a perfect society
+    - On the other in the real world he would be ill adapted
+    - Mixture of the two characters useful [think Nietzsche's
+      uebermensch or Taoist]
+  - Saintly character has real value
diff --git a/Wisdom.muse b/Wisdom.muse
new file mode 100644 (file)
index 0000000..5e39602
--- /dev/null
@@ -0,0 +1,134 @@
+#title The Wisdom of the Ancients
+
+* Mencius 
+
+** III.B.1
+
+<quote>
+Ch'en Tai said, "When you refused even to see them, the feudal lords
+appeared insignificant to you. Now that you have seen them, they are
+either kings, or, at least, leaders of the feudal lords. Moreover,
+it is said in the *Records*, 'Bend the foot in order to straighten
+the yard.' That seems worth doing."
+
+"Once," said Mencius, "Duke Ching of Ch'i went hunting and summoned
+his gamekeeper with a pennon. The gamekeeper did not come, and the
+Duke was going to have him put to death. 'A man whose mind is set on
+high ideals never forgets that he may end in a ditch; a man of valor
+never forgets that he may forfeit his head.' What did Conficius find
+praiseworthy in the gamekeeper? His refusal to answer to a form of
+summons to which he was not entitled. What can one do about those
+who go without even being summoned? Moreover, the saying, 'Bend the
+foot in order to straighten the yard' refers to profit. If it is for
+profit, I suppose one might just as well bend the yard to straighten
+the foot.
+
+"Once, Viscount Chien of Chao sent Wang Liang to drive the chariot
+for his favorite, Hsi. In the whole day they failed to catch one
+single bird. Hsi reported to his master, 'He is the worst charioteer
+in the world.' Someone told Wang Liang of this. Liang asked, 'May I
+have another chance?' It was with difficulty that Hsi was persuaded,
+but in one morning they caught ten birds. Hsi reported to his
+master, 'He is the best charioteer in the world.' 'I shall make him
+drive for you,' said Viscount Chien. He asked Wang Liang, but
+Wang Liang refused. 'I drove for him according to the proper rules,'
+said he, 'and we did not catch a single bird all day. Then I used
+underhand methods, and we caught ten birds in one morning. The *Book
+of Odes* says,
+<verse>
+He never failed to drive correctly,
+And his arrows went straight for the target
+</verse>
+I am not used to driving for small men. May I be excused?'
+
+"Even a charioteer is ashamed to be in league with an archer. When
+doing so means catching enough birds to pile up like a mountain, he
+would still rather not do it. What can one do about those who bend
+the Way in order to please others? You are futher mistaken. There
+has never been a man who could straighten others by bending
+himself."
+</quote>
+
+** VI.A.10
+
+<quote>
+Mencius said, "Fish is what I want; bear's palm is also what I
+want. If I cannot have both, I would rather take bear's palm than
+fish. Life is what I want; dutifulness is also what I want. If I
+cannot have both, I would rather take dutifulness than life. On the
+one hand, though life is what I want, there is something I want more
+than life. That is why I do not cling to life at all costs. On the
+other hand, though death is what I loathe, there is something I
+loathe more than death. That is why there are troubles I do not
+avoid. If there is nothing a man wants more than life, then why
+should he have scruples about any means, so long as it will serve to
+keep him alive? if there is nothing a man loathes more than death,
+then why should have have scruples about any means, so long as it
+helps him to avoid trouble? Yet there are ways of remaining alive
+and ways of avoiding death to which a man will not resort. In other
+words, there are things a man wants more than life and there are
+also things he loathes more than death. This is an attitude not
+confined to the moral man but common to all men. The moral man simply
+never loses it.
+
+"Here is a basketful of rice and a bowful of soup. Getting them will
+mean life; not getting them will mean death. When these are given
+with abuse, even a wayfarer would not accept them; when these are
+given after being trampled upon, even a beggar would not accept
+them. Yet when it comes to ten thousand bushels of grain one is
+supposed to accept without asking if it is in accordance with the
+rites or if it is right to do so. What benefit are then thousand
+bushels of grain to me? [Do I accept them] for the sake of beautiful
+houses, the enjoyment of wives and concubines, or for the sake of
+the gratitude my needy acquaintances will show? What I would not
+accept in the first instance when it was a matter of life and death
+I now accept for the sake of beautiful houses; what I would not
+accept when it was a matter of life and death I now accept for the
+enjoyment of wives and concubines; what I would not accept when it
+was a matter of life and death I now accept for the sake of the
+gratitude my needy acquaintances will show me. Is there no way of
+putting a stop to this? This way of thinking is known as losing
+one's original heart."
+</quote>
+
+* Qohelet
+
+* One
+
+<verse>
+  1 The words of the Preacher, the son of David, king in Jerusalem.
+  2 Vanity of vanities, saith the Preacher, vanity of vanities; all is vanity.
+  3 What profit hath a man of all his labour which he taketh under the sun?
+  4 One generation passeth away, and another generation cometh: but the earth
+abideth for ever.
+  5 The sun also ariseth, and the sun goeth down, and hasteth to his place
+where he arose.
+  6 The wind goeth toward the south, and turneth about unto the north; it
+whirleth about continually, and the wind returneth again according to his
+circuits.
+  7 All the rivers run into the sea; yet the sea is not full; unto the place
+from whence the rivers come, thither they return again.
+  8 All things are full of labour; man cannot utter it: the eye is not
+satisfied with seeing, nor the ear filled with hearing.
+  9 The thing that hath been, it is that which shall be; and that which is done
+is that which shall be done: and there is no new thing under the sun.
+  10 Is there any thing whereof it may be said, See, this is new? it hath been
+already of old time, which was before us.
+  11 There is no remembrance of former things; neither shall there be any
+remembrance of things that are to come with those that shall come after.
+  12 I the Preacher was king over Israel in Jerusalem.
+  13 And I gave my heart to seek and search out by wisdom concerning all things
+that are done under heaven: this sore travail hath God given to the sons of man
+to be exercised therewith.
+  14 I have seen all the works that are done under the sun; and, behold, all is
+vanity and vexation of spirit.
+  15 That which is crooked cannot be made straight: and that which is wanting
+cannot be numbered.
+  16 I communed with mine own heart, saying, Lo, I am come to great estate, and
+have gotten more wisdom than all they that have been before me in Jerusalem:
+yea, my heart had great experience of wisdom and knowledge.
+  17 And I gave my heart to know wisdom, and to know madness and folly: I
+perceived that this also is vexation of spirit.
+  18 For in much wisdom is much grief: and he that increaseth knowledge
+increaseth sorrow.
+</verse>
diff --git a/files/resume.pdf b/files/resume.pdf
new file mode 100644 (file)
index 0000000..682044e
Binary files /dev/null and b/files/resume.pdf differ
diff --git a/img/2006-12-18.jpg b/img/2006-12-18.jpg
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/img/buttons/debian.png b/img/buttons/debian.png
new file mode 100644 (file)
index 0000000..1f617c8
Binary files /dev/null and b/img/buttons/debian.png differ
diff --git a/img/buttons/foaf.png b/img/buttons/foaf.png
new file mode 100644 (file)
index 0000000..fda97b4
Binary files /dev/null and b/img/buttons/foaf.png differ
diff --git a/img/buttons/fsf_member.png b/img/buttons/fsf_member.png
new file mode 100644 (file)
index 0000000..672bc58
Binary files /dev/null and b/img/buttons/fsf_member.png differ
diff --git a/img/buttons/hcoop.png b/img/buttons/hcoop.png
new file mode 100644 (file)
index 0000000..f76d696
Binary files /dev/null and b/img/buttons/hcoop.png differ
diff --git a/img/buttons/kuro5hin.png b/img/buttons/kuro5hin.png
new file mode 100644 (file)
index 0000000..4ef0f68
Binary files /dev/null and b/img/buttons/kuro5hin.png differ
diff --git a/img/buttons/sbcl.png b/img/buttons/sbcl.png
new file mode 100644 (file)
index 0000000..2de4063
Binary files /dev/null and b/img/buttons/sbcl.png differ
diff --git a/img/buttons/w3c_ab.png b/img/buttons/w3c_ab.png
new file mode 100644 (file)
index 0000000..bfae4c4
Binary files /dev/null and b/img/buttons/w3c_ab.png differ
diff --git a/img/hcbadge3.gif b/img/hcbadge3.gif
new file mode 100644 (file)
index 0000000..24ac716
Binary files /dev/null and b/img/hcbadge3.gif differ
diff --git a/img/photos/bicycle/2006-10-25/front.jpg b/img/photos/bicycle/2006-10-25/front.jpg
new file mode 100644 (file)
index 0000000..718f0a5
Binary files /dev/null and b/img/photos/bicycle/2006-10-25/front.jpg differ
diff --git a/img/photos/bicycle/2006-10-25/handlebar.jpg b/img/photos/bicycle/2006-10-25/handlebar.jpg
new file mode 100644 (file)
index 0000000..8136a66
Binary files /dev/null and b/img/photos/bicycle/2006-10-25/handlebar.jpg differ
diff --git a/img/photos/bicycle/2006-10-25/left.jpg b/img/photos/bicycle/2006-10-25/left.jpg
new file mode 100644 (file)
index 0000000..e0db0d9
Binary files /dev/null and b/img/photos/bicycle/2006-10-25/left.jpg differ
diff --git a/img/photos/bicycle/before_tape_upside_down.jpg b/img/photos/bicycle/before_tape_upside_down.jpg
new file mode 100644 (file)
index 0000000..3861812
Binary files /dev/null and b/img/photos/bicycle/before_tape_upside_down.jpg differ
diff --git a/img/photos/bicycle/bicycle_post_tape.jpg b/img/photos/bicycle/bicycle_post_tape.jpg
new file mode 100644 (file)
index 0000000..1556437
Binary files /dev/null and b/img/photos/bicycle/bicycle_post_tape.jpg differ
diff --git a/img/photos/bicycle/headlight.jpg b/img/photos/bicycle/headlight.jpg
new file mode 100644 (file)
index 0000000..9fe1d4d
Binary files /dev/null and b/img/photos/bicycle/headlight.jpg differ
diff --git a/img/photos/bicycle/post_tape_nighttime_1.jpg b/img/photos/bicycle/post_tape_nighttime_1.jpg
new file mode 100644 (file)
index 0000000..852a672
Binary files /dev/null and b/img/photos/bicycle/post_tape_nighttime_1.jpg differ
diff --git a/img/photos/me/2006-12-01.jpg b/img/photos/me/2006-12-01.jpg
new file mode 100644 (file)
index 0000000..4e6561e
Binary files /dev/null and b/img/photos/me/2006-12-01.jpg differ
diff --git a/img/photos/me/2006-12-18.jpg b/img/photos/me/2006-12-18.jpg
new file mode 100644 (file)
index 0000000..e99ad4c
Binary files /dev/null and b/img/photos/me/2006-12-18.jpg differ
diff --git a/img/screenshots/2007-05-25_workstation-gimp.png b/img/screenshots/2007-05-25_workstation-gimp.png
new file mode 100644 (file)
index 0000000..6989f00
Binary files /dev/null and b/img/screenshots/2007-05-25_workstation-gimp.png differ
diff --git a/index.muse b/index.muse
new file mode 100644 (file)
index 0000000..d66acb6
--- /dev/null
@@ -0,0 +1,65 @@
+#title The Home of Your Friendly Neighborhood Terrorist
+#author Clinton Ebadi
+
+Greetings, my name is Clinton and you have stumbled upon my personal
+website. This is a continually evolving project as most things on the
+web are.
+
+* Sections
+
+ - [[Bicycle]]
+ - [[Reading][Things I Have Read]]
+ - [[Lisp]]
+ - [[Politics][Political and Social Views]]
+ - [[Music I Enjoy]]
+
+* Journal
+
+I keep a [[http://journal.unknownlamer.org/][journal]] which is where I tend to send ideas out into the
+Ether before reformulating them into coherent essays for the site
+sitting before you, occasionally interspersed with commentary on my
+mundane daily existence.
+
+[[http://unknownlamer.org/index.1999_2006.html][The Old Site]] is still available. Links to pages there will remain
+stable indefinitely so as to not break the Holy Command of Our Sovran
+Hypertextia.
+
+* About Me / Contact
+
+I am a mild mannered hacker and metalhead.
+
+I welcome criticism and suggestions to improve anything I have
+written here.
+
+** Email
+
+=clinton at unknownlamer dot gro= (a simple puzzle)
+
+** Jabber
+
+=clinton at hcoop dot net= (this also works as an email address and must
+be protected as a result)
+
+** IRC
+
+I hang out on Freenode and oftc as =unknown_lamer= in various
+channels. =/whois= will guide you to me.
+
+** Résumé
+
+I am a programmer by trade, and as such have a (potentially) fancy
+[[files/resume.pdf][Résumé]].
+
+** A Picture
+
+[[img/photos/me/2006-12-18.jpg][A Strapping Young Lad]]
+
+** Site Software
+
+I use [[http://www.mwolson.org/projects/MuseMode.html][muse-mode]] to author the site because [[http://emacswiki.org][Emacs]] is all powerful, and
+the closest approximation to a good user interface available on any
+modern computer system. Muse allows me to simply write with very low
+overhead (I spend most of my time in Emacs, and having hyperlinks and
+a reasonable preview in the file buffer is quite useful), and the file
+format is easy to parse (so in the future I could write a translator
+to some other format with minimal effort if I so desired).