... until the collector arrives ...

This "blog" is really just a scratchpad of mine. There is not much of general interest here. Most of the content is scribbled down "live" as I discover things I want to remember. I rarely go back to correct mistakes in older entries. You have been warned :)


The following entries will configure Apache (1.3.2) to dump request/reply header information:

# Minimal request/reply header logging
LogFormat "\n\
%t %h\n\
Cache-Control: %{Cache-Control}i\n\
Authorization: %{Authorization}i\n\
Cache-Control: %{Cache-Control}o\n\
Server: %{Server}o\n\
WWW-Authenticate: %{WWW-Authenticate}o\n\
%b" headers
#CustomLog logs/headers.log headers

# Full request/reply header logging
LogFormat "\n\
%t %h\n\
Cache-Control: %{Cache-Control}i\n\
Connection: %{Connection}i\n\
Date: %{Date}i\n\
Pragma: %{Pragma}i\n\
Trailer: %{Trailer}i\n\
Transfer-Encoding: %{Transfer-Encoding}i\n\
Upgrade: %{Upgrade}i\n\
Via: %{Via}i\n\
Warning: %{Warning}i\n\
Accept: %{Accept}i\n\
Accept-Charset: %{Accept-Charset}i\n\
Accept-Encoding: %{Accept-Encoding}i\n\
Accept-Language: %{Accept-Language}i\n\
Authorization: %{Authorization}i\n\
Expect: %{Expect}i\n\
From: %{From}i\n\
Host: %{Host}i\n\
If-Match: %{If-Match}i\n\
If-Modified-Since: %{If-Modified-Since}i\n\
If-None-Match: %{If-None-Match}i\n\
If-Range: %{If-Range}i\n\
If-Unmodified-Since: %{If-Unmodified-Since}i\n\
Max-Forwards: %{Max-Forwards}i\n\
Proxy-Authorization: %{Proxy-Authorization}i\n\
Range: %{Range}i\n\
Referer: %{Referer}i\n\
TE: %{TE}i\n\
User-Agent: %{User-Agent}i\n\
Cache-Control: %{Cache-Control}o\n\
Connection: %{Connection}o\n\
Date: %{Date}o\n\
Pragma: %{Pragma}o\n\
Trailer: %{Trailer}o\n\
Transfer-Encoding: %{Transfer-Encoding}o\n\
Upgrade: %{Upgrade}o\n\
Via: %{Via}o\n\
Warning: %{Warning}o\n\
Accept-Ranges: %{Accept-Ranges}o\n\
Age: %{Age}o\n\
ETag: %{ETag}o\n\
Location: %{Location}o\n\
Proxy-Authentication: %{Proxy-Authentication}o\n\
Retry-After: %{Retry-After}o\n\
Server: %{Server}o\n\
Vary: %{Vary}o\n\
WWW-Authenticate: %{WWW-Authenticate}o\n\
%b" full-headers
#CustomLog logs/full-headers.log full-headers


Franz' ACL 5 has an interesting 'gotcha' related to backquote syntax.  Consider this form:

`(:a ,x :b ,y :c nil)

The list returned is not entirely fresh.  In fact, the last two conses comprise a constant list.  Therefore, if you destructively alter the last element, all lists generated from this form will be updated.  Ouch.  I am not sure whether this behaviour conforms to ANSI or not (I haven't looked).


I discovered a problem with our ORACLE.C module while working on ITEMSEQ.  If you use bind variables in an SQL statement (e.g. an INSERT statement), our call to OEXEC hangs indefinitely.  At first, I was concerned that the problem existed only in LISP.  But I wrote a small C program that called ORACLE.C directly, and it exhibited exactly the same behaviour.  It made no difference whether blocking was turned on or off.  When turned off, OEXEC always returns the 'would block' error code.  I am stumped as to why this behaviour occurs.  Perhaps it has something to do with the fact that we are using the old, old, old, OCI interface.  Oracle may no longer support that interface.  Bind variables do seem to work for queries.


When connecting to DB2 using the JDBC driver, an additional property gets added to the supplied java.util.Properties object.  The property is 'LANGUAGE=C'.  I don't think the DB2 JDBC driver is supposed to alter this parameter.


Hey, some good news about ACL5!  (About time, too.)  ACL5 allows CLOS objects to be patched!  I tried loading a FASL into an image that contained both DEFCLASS and DEFMETHOD, and it worked.


A few days ago I reported to Franz a problem with the following code:

(defun make-fn (arguments)
   #'(lambda ()
        (labels ((doit (a b c)
                    (try-something-else a b c) )
                 (try-something-else (a b c)
                    (list 666 a b c) ))
           #'(lambda ()
                (apply #'doit arguments) )

(defvar *function* nil)

(setf it (funcall (make-fn '(1 2 3))))
(funcall it)

(compile 'make-fn)
(setf it (funcall (make-fn '(1 2 3))))
(funcall it)

The second FUNCALL, after compiling MAKE-FN, results in a error reporting an invalid object type or some other incongruous message.  Franz acknowledged the bug as a compiler optimization bug and suggested replacing APPLY with a call to our function of this type:

(defun my-apply (function arguments)
   (apply function arguments) )

This fixed it.  Franz promised that the bug will be fixed in "some future version of ACL".

Blog Archive