IMHO
IMHO is dead, as far as anyone knows. The upstream sources and Debian packages are no more; this page is kept around for archival purposes and in case the feature description inspires anyone to take over development or to replicate the functionality. See https://sources.debian.org/src/cl-imho/1.2.1-1/ for a (probably obsolete) release of sources.


IMHO from onShore Development is a toolkit that provides facilities for building highly interactive Web applications. Some of the features that are in a useful state at this point are: session management, componentized document construction, template-based HTML rendering, and Java/JavaScript integration. It is a loose functional equivalent of Apple's WebObjects framework.

IMHO is Apache-only. It uses either mod_lisp or a homegrown mod_webapp to establish a connection between Apache and the Lisp server. The included mod_webapp package is derived from the one in the Apache project.

When it was active, you could find it at http://alpha.onshored.com/lisp-software/. Eugene Zaikonnikov posted a message to the Lispweb mailing list providing installation and usage tips.

I'd really hate for imho to go lost. In the hopes that someone may eventually find it usefull, or just interesting, I've grabbed from debian what I believe are the latest release of imho (and its supporting library odcl) and put them up on ucw's ftp directory. -- Marco Baringer


I'm not sure I've ever seen a summary of IMHO's features, so here's my stab at one:

  • Built in session management. Sessions are set-like objects used to keep track of one current instance of any lisp class. These "session instances" are used to maintain the current snapshot of a user's interaction with the application.
  • HTML element class hierarchy. Each HTML tag (and therefore each HTML document) is represented by a CLOS class descended from imho:html-element.
  • Webmethods. Imho keeps track of a bunch of programmer-specified generic functions called webmethods; a browser request causes imho to lookup the appropriate webmethod, target element and arguments and select and invoke the proper webmethod based on parsing the method name and typed arguments out of the submitted URL.
  • Element tree structure. An element is an n-ary tree of child elements and a parent element. This allows cleanly abstracted widgets to be created with minimal code, since, say, a submit button placed at the bottom of a tree of elements can simply ascend the parent tree looking for a target object to call its method on.
  • Template-based presentation layer (HTML plus a single tag with a single parameter). Designers can code mostly-HTML page templates and refer to live, session-particular lisp objects by name.
  • Plenty of other stuff but just that much is pretty cool, huh?
The real fun comes when you combine IMHO with UncommonSQL.

Damn, lisp rocks!

—Lyn Headley


Is IMHO the Lisp analog of Python's Zope, then?

Kinda, yeah. Only Zope tries to solve many problems (it comes with its own object-database) IMHO doesn't even address (a good thing, if you ask me). They have quite different approaches and from my experience with the two of them, I would prefer IMHO over Zope because of the way IMHO is interegrated with CL. It feels quite natural to work with it. Erik Enge