2012-01-09

Recent Quicklisp bugs

My CDB changes to the Quicklisp clients caused a few subtle problems.

First, the system CDB file was built with incorrect keys. That could lead to a spurious SYSTEM-NOT-FOUND error when trying to use ql:quickload something.

Second, the CDB files were not cleared out when updating dist metadata. The CDB indexes would point to old systems and software even after everything was meant to be updated.

If you run into a Quicklisp problem that seems like it might be related to these issues, here's a way to fix things:

  1. (ql:update-client) to make sure you have the latest client
  2. Restart your Lisp
  3. (in-package #:ql-dist-user)
  4. (map nil 'delete-file (directory (relative-to (dist "quicklisp") "*.cdb")))
At that point the CDB files should automatically regenerate with the correct data, and will be properly updated during the next dist update.

Sorry for the hassle!

2012-01-08

January client and dist updates

There's an updated Quicklisp client available now. This version fixes up several problems with the support for looking up metadata in CDB files. To get the new client, use (ql:update-client).

I've also updated the software available in Quicklisp. To get the update, use (ql:update-dist "quicklisp").

New projects:

  • bitfield-schema - SIMPLE-BIT-VECTOR low level routines and convenient eDSL over it.
  • cl-bloom - Simple Bloom filters with efficient hashing.
  • cl-dropbox - Common Lisp Client for the Dropbox API.
  • cl-gpu
  • cl-murmurhash - 32-bit version of MurmurHash3.
  • cl-rsvg2 - Bindings for RSVG Library.
  • cl-sam
  • cl-scribd - Commong Lisp Client for the Scribd API.
  • cl-yahoo-finance - CL interface to Yahoo's finance API
  • computable-reals - Computable real numbers.
  • deoxybyte-unix
  • do-urlencode - Percent Encoding (aka URL Encoding) library
  • ext-blog - A BLOG engine which supports custom theme
  • image - An image-drawing with some drawing primitives
  • kl-verify - A library to generate simple verify code picture
  • lisp-executable - Library for defining and creating executables that can be called from the Unix shell.
  • pettomato-deque - A set of double-ended queue implementations.
  • pettomato-indexed-priority-queue - A binary heap based priority queue implementation with efficient support for find, update, replace, and delete operations.
  • priority-queue - A priority queue for Common Lisp.
  • restas.file-publisher - A restas module which can publish static files
  • stumpwm - A tiling, keyboard driven window manager
Updated projects: 3b-swf, 3bil, 3bmd, babel, bknr-datastore, cl-azure, cl-csv, cl-data-format-validation, cl-docutils, cl-fluidinfo, cl-llvm, cl-locale, cl-marshal, cl-oauth, cl-opengl, cl-quickcheck, cl-stomp, cl-string-complete, clack, clfswm, closer-mop, clpmr, clsql, cobstor, collectors, data-table, deoxybyte-gzip, deoxybyte-io, deoxybyte-systems, diff, doplus, fare-utils, gbbopen, gtk-cffi, hu.dwim.asdf, hu.dwim.delico, hu.dwim.logger, hu.dwim.perec, hu.dwim.rdbms, hu.dwim.reiterate, hu.dwim.stefil, hu.dwim.syntax-sugar, hu.dwim.util, hu.dwim.walker, idna, let-plus, lhstats, linedit, lisp-unit, lla, manifest, mime4cl, mixalot, monkeylib-html, relational-objects-for-lisp, restas, restas-directory-publisher, rfc2388, sclf, shuffletron, slime, static-vectors, stem, thread-pool, toot, trivial-features, trivial-garbage, uffi, wuwei, xcvb, yason, zcdb.

Removed projects: cl-bson-tim.

If you have a project that is available in Quicklisp, please check your system definition. Make sure it has useful metadata in it, like :description, :author, and :license. Several systems have empty description strings; for me, that's worse than a missing description.

SLIME has been updated with a new wire protocol. Please report any SLIME issues to the SLIME maintainers.

If you have any problems getting or using Quicklisp updates, let me know by email or on the Quicklisp mailing list.

2012-01-03

Speeding up system info

Quicklisp uses two text files for information about project releases (releases.txt) and systems (systems.txt). Whenever information about a system was needed (for example, where its system file can be found), both files were loaded completely, from scratch.

I made it that way because it was pretty easy. People immediately noticed that it was also pretty slow, especially when using (asdf:load-system "...") instead of (ql:quickload "..."). The penalty for frequent loading and reloading of the metadata got worse as the number of Quicklisp systems grew.

Today I released a client update that can load metadata from a fast on-disk hash table, a CDB file. The big flat files are converted to CDB once, as needed, and thereafter getting metadata is super-speedy. On my laptop, the improvement for lookups is about 100x; your results will depend on the speed of your disk.

To get the update, use (ql:update-client) and restart Lisp.

If this change causes you any trouble, please let me know via the Quicklisp mailing list.

UPDATE: This change causes trouble. I'm going to put out a fix as soon as I can. Please don't update; if you did update, you can revert with something like this:

    cd ~/quicklisp/
    wget http://beta.quicklisp.org/quickstart/quicklisp-2011111500.tgz
    tar xzvf quicklisp-2011111500.tgz
    rm -rf ~/.cache/common-lisp/

UPDATE 2: I can't reproduce the trouble I saw earlier. If you run into trouble, let me know. I really need cases I can reproduce to fix things.

UPDATE 3: Thanks to Mike Clarke, I found a serious problem with the CDB scheme. A fix will be available within a day or two.