Exscribe is a CL-based document authoring tool in the spirit of Manuel Serrano's Scribe.Current Exscribe features (as of version 0.94.2) include: output to HTML or PDF, good support for HTML footnotes (endnotes only on PDF backend), ok support for table-of-contents and bibliography, and most importantly, programmability.
All that in a way largely compatible with Manuel Serrano's Scribe (given a published abstraction layer).
These feature are few, but useful enough so that I (Fare Rideau) use Exscribe for all the pages I write.Currently missing (intended future) features include: a better cl-typesetting backend (work in progress), Markdown/ReST/TeX syntax in addition/complement/combination with the Scribble syntax, cl-bibtex bridge, graphics, boxes, orphans, styles, etc.Unlike most other document authoring systems, Exscribe is programmable: I casually compute content on-the-fly within documents.
However, unlike the only widespread programmable document authoring system,
namely (La)TeX, it's programmable in a decent language, namely Lisp.Exscribe is directly inspired by Manuel Serrano's Scribe, and largely compatible with it. Actually, I use Exscribe as a drop-in replacement for Scribe, within the strictures of my programming style: with a small abstraction layer, my Scribe files run with both Scribe and Exscribe, with similar output as seen with a web browser (the output of Exscribe is actually cleaner).I use Exscribe with Scribble syntax, but it is trivial to translate from your usual SEXP syntax, and there is a builtin mechanism to allow for arbitrary text filters (so you could embed a Markdown syntax within Exscribe documents).I used to use Scribe, but Scribe was discontinued in favor of the slightly incompatible Skribe. Instead of learning Skribe and migrating my documents to it, and continue to cope with a few small limitations that really annoyed me, I opted to reimplement myself a variant of Scribe. The result is Exscribe. In many ways, it's a quick and dirty hack, thrown together in a few tens of hours of intensive work. But I like the architecture of it, and though it doesn't do much, it does just what I need for the time being, and it does it exactly the way I want. When it fails, I have noone to blame but myself. All my new web pages are written with it.Exscribe currently mainly targets HTML and so currently is mainly a web authoring tool, and it can also be used as a Lisp Markup Languages. But a CL-typesetting backend is already available, and will hopefully match and surpass the HTML backend Real Soon Now(tm).At the time being, Exscribe is definitely not for non-hacker users: error checking and reporting is minimal, and documentation is almost absent. However, in its current state it is already fit for use by developers, and I'm open to collaboration to develop it. The Scribe documentation should be mostly valid, and an example that uses most of the capabilities present in Exscribe is here:
Bitrot has made it impossible to get the native code Scribe running anymore (one probably could if willing to invest some substantial effort in either retrocomputing or porting). However, the unstable and slow JVM version of Scribe can still be run. Exscribe on CMUCL or SBCL compiles my documents much faster (performance is less good with other implementations, but always better than the JVM Scribe on my documents).Exscribe depends on other packages: meta, fare-utils, fare-matcher, scribble and cl-launch. You will need cl-launch to run it from the unix command-line. The PDF backend uses cl-typesetting. You can also compile Exscribe with XCVB.Exscribe source code is at:
http://common-lisp.net/gitweb?p=users/frideau/exscribe.gitNote that the referred Scribe does not really have anything to do with the already established language Scribe from the early 1980's. That is why Manuel Serrano renamed it to Skribe in its new (slightly incompatible) incarnation. Though there were implementations of the old Scribe in Lisp, it didn't have a Lisp-related syntax. See Brian Reid, "Scribe: A Document Specification Language and its Compiler", Technical Report CMU-CS-81-100, 1981.document format
Pg is a socket-level interface to the PostgreSQL object-relational Database.
Pg implements the client part of the frontend/backend
protocol, so does not require interfacing with the libpq library. SQL
types are converted to the equivalent Common Lisp types where
possible. Supports large objects (BLOBs).
Postmodern is a newer and much-much cleaner library. Its cl-postgres asdf system implements the same functionality as Pg -- Attila Lendvai
The only non portable code is the use of SOCKET-CONNECT. Versions are
provided for CMU Common Lisp (CMUCL), SBCL, OpenMCL, CLISP, LispWorks and Allegro Common Lisp (ACL). Corman CL doesn't support binary I/O on socket streams, so it doesn't work there.Pg is available under the GNU LGPL licence from www.chez.com/emarsden/downloads.
There are also Emacs Lisp and scsh versions of the library.This is a snapshot of the CVS repository at common-lisp.net/project/pg and it is not GPG signed.Here is the last released version, but it's quite old:http://www.chez.com/emarsden/downloads/pg-dot-lisp-0.19.tar.gzSample code:
(with-pg-connection (conn "testdb" "login" :host "dbhost" :password "secret")
(when (member "test_date" (pg-tables conn) :test #'string=)
(pg-exec conn "DROP TABLE test_date"))
(pg-exec conn "CREATE TABLE test_date(a timestamp, b abstime, c time, d date)")
(pg-exec conn "INSERT INTO test_date VALUES "
"(current_timestamp, 'now', 'now', 'now')")))
Stargreen Box Office uses Pg for its database glue layer; it's respectably fast, simple enough to see what it's doing, and impervious to PostgreSQL shared library versioning issues (because it doesn't use them). I'm very happy with it -- Daniel Barlow
You must set unix_socket_directory in your postgresql.conf to /var/run/postgresql
pg doesn't use the default path for the unix domain socket. See Socket Path.