vsync: Okay, this is because [redacted_1] is not authorized in sudoers
vsync: Which is because the filename you gave me before is [redacted_2]
vsync: What is [redacted_1]?
[redacted]: what? you mean we have to add programs to a list?
vsync: Yes, that is part of the idea of access control
Brendan: So I started watching that show "Monk" recently, and I actually like it.
But dude, you're so like him.
Me: Martin, am I the loud American?
Martin: Today for sure.
Me: In a bad way though?
Martin: It's manageable.
Pinot is a Web programming framework as well as some content management functionality built on that framework. It's written in ANSI Common Lisp, requires CMUCL, Apache, and mod_lisp, and is licensed under the GNU General Public License. Funnily enough, my Web site isn't using it yet, but I use it for lots of my personal development work lately, and I've installed it at my current employer and built a lot of internal resources atop it.
Lately most of my work has been on the content functionality (e.g., links, articles, file libraries). It's quite rough, but you can successfully create content through Web forms. Authentication is even rougher currently but I'm very pleased with the basis of the privilege framework and I have plans for a lot of proper security features (decoupling identity from authentication, privilege escalation, fine-grained access control, and more).
svn://piro.quadium.net/pinot/trunk/
If you use the file library functionality of Pinot at all, you'll probably want the graphical editor displayed below. I have a handy precompiled JAR for you.

I recently wrote a simple sexp reader/writer library for Java. It uses normal Java classes as much as possible instead of subclassing everything into my own weird framework. svn://piro.quadium.net/java/trunk/ if you care.
I've also made an interface to the Gimp's Script-Fu. It requires CMUCL but should be trivial to port. svn://piro.quadium.net/gimp/trunk/. Example:
(defun gimp-add-numbers (&rest numbers)
(gimp:with-gimp-server (gimp)
(values
(parse-integer
(gimp:gimp-server-execute gimp
(format nil "~A" `("number->string" ("+" ,@numbers))))))))
CL-USER> (gimp:register-gimp-server)
#<NET.QUADIUM.GIMP:GIMP-SERVER {582571CD}>
CL-USER> (gimp-add-numbers 1 2 3 4)
10
I wrote an LDIF parser and an LDAP library. I've packaged it up into a tarball [sig] for version 0.9.