2011-11-06

November Quicklisp updates

Survey
I'm conducting a new Quicklisp survey. I'd like to find out the best way to reach the most people when there is Quicklisp news to share. It's one question, so if you can, please go fill it out.

Client Update
There's a new Quicklisp client available. You can get it with (ql:update-client). The new version will take effect after you restart your Lisp. 

This client has a feature that I think will be very helpful: any directory created in ~/quicklisp/local-projects/ will be automatically scanned for system files. There's no need to run an additional command to reconfigure ASDF.

For example, if there's a library that isn't part of Quicklisp, you can try it out with something like this in a shell:

$ cd ~/quicklisp/local-projects/
$ git clone git://github.com/xach/format-time.git

And something like this in a REPL:

* (ql:quickload "format-time")

There is no need to update your ASDF source registry or initialize it manually after adding new projects. This should simplify the directions authors can provide to people who want to try their projects.

There are a few things to keep in mind with this new feature:

First, you can't just symlink something into ~/quicklisp/local-projects/; for some Lisps (CLISP, ECL)  that works, for others (SBCL, ClozureCL) it doesn't. I hope to eliminate that limitation soon.

Also, only projects created in the top level of the directory are automatically scanned. Directories created or modified below the top level do not trigger an automatic scan. You can initiate a manual scan with (ql:register-local-projects), though. 

Finally, projects in ~/quicklisp/local-projects/ take precedence over both systems in the ASDF source registry and systems in Quicklisp. I'm not sure I'll keep that ordering if it causes problems.

This feature is a work in progress, so I appreciate any feedback, positive or negative.

Dist Update
I've updated the Quicklisp dist. You can get the update with (ql:update-dist "quicklisp")

Here's a summary of the changes this month:

New projects: able, asdf-dependency-grovel, autoproject, binascii, cgn, cl-apple-plist, cl-generic-arithmetic, cl-launch, cl-prolog, cl-rmath, cl-tokyo-cabinet, data-sift, deoxybyte-gzip, deoxybyte-io, deoxybyte-systems, deoxybyte-utilities, exscribe, fare-mop, lparallel, queues, text-query, thread.comm.rendezvous, xcvb, xml-emitter.

Updated projects: alexandria, antik, blackthorn-engine-3d, buildnode, caveman, chipz, cl+ssl, cl-2d, cl-closure-template, cl-csv, cl-inflector, cl-langutils, cl-match, cl-mediawiki, cl-num-utils, cl-oauth, cl-odesk, cl-quickcheck, cl-random, cl-scrobbler, cl-stomp, cl-test-more, cl-tuples, cl-twitter, cl-uglify-js, clack, clawk, clfswm, closer-mop, clsql-orm, collectors, com.google.base, command-line-arguments, contextl, css-selectors, data-table, doplus, elf, fare-utils, gbbopen, glop, group-by, gsll, gtk-cffi, hu.dwim.defclass-star, hu.dwim.reiterate, hu.dwim.stefil, hu.dwim.util, hunchentoot, hunchentoot-cgi, latex-table, lisp-gflags, lla, meta, metatilities-base, nibbles, parse-js, plokami, postmodern, protobuf, recursive-regex, restas, restas-directory-publisher, rfc2388, rpc4cl, rutils, screamer, simple-date-time, slime, symbol-munger, talcl, tap-unit-test, trivial-types, uri-template.

Removed projects: cl-webkit, tilde, webfunk.

cl-webkit has been removed because it now requires a version of the webkit library that I haven't been able to test. I hope to restore it next month. tilde has been removed because it's an unnecessary sbcl-only library; SBCL supports "~" in pathnames without any patches now. And webfunk no longer builds with the latest Hunchentoot.

Hunchentoot has a big update this month, the first new release in more than a year. It has a few backwards-incompatible changes. Affected projects in Quicklisp (except for webfunk) have been updated. However, you might find that your own Hunchentoot-using projects are affected by the changes. If that's problematic, you can either avoid updating Quicklisp, or if you've already updated, you can go back to a previous version.

As usual, if you have any questions or comments about Quicklisp updates, feel free to email me or discuss things on the Quicklisp mailing list.

Happy Lisping!

2011-11-03

A word of warning

I will update the Quicklisp dist within a few days. The update will include a fairly major update to Hunchentoot, one that changes the public Hunchentoot API in a few backwards-incompatible ways.

All Quicklisp libraries that depend on Hunchentoot have been updated, if needed, to work with the API changes. However, if you have a private or local project that depends on Hunchentoot, you may find that it needs to be updated to work with the new version.

If, for whatever reason, you don't want to use the new Hunchentoot, you can always use Quicklisp's ability to go back in time to the previous version.

This is the first big backwards-incompatible update of its kind for such a major project, so if you run into problems or have feedback, please let me know. Feel free to email me or contact the Quicklisp mailing list.

2011-11-01

Project download statistics

Here are the top 100 Quicklisp downloads for the past three months:
   2131 alexandria
   1964 babel
   1742 trivial-garbage
   1630 slime
   1583 usocket
   1512 trivial-features
   1501 bordeaux-threads
   1482 cl-ppcre
   1476 cffi
   1390 trivial-gray-streams
   1386 cl+ssl
   1226 closer-mop
   1192 rfc2388
   1154 flexi-streams
   1105 cl-fad
   1074 cl-base64
   1048 chunga
    965 anaphora
    953 md5
    925 quicklisp-slime-helper
    918 puri
    910 trivial-backtrace
    892 hunchentoot
    763 split-sequence
    720 cl-json
    668 iterate
    654 salza2
    630 cl-who
    613 drakma
    612 clsql
    606 uffi
    596 named-readtables
    589 metabang-bind
    571 parenscript
    543 zpb-ttf
    479 metatilities-base
    465 weblocks
    460 zpng
    458 local-time
    421 cl-vectors
    412 vecto
    410 cxml
    402 fare-utils
    397 fare-matcher
    397 cl-opengl
    395 ironclad
    391 parse-number
    376 lispbuilder
    375 asdf-system-connections
    368 f-underscore
    366 cl-containers
    365 s-xml
    359 clx
    358 arnesi
    357 osicat
    313 closure-common
    307 html-template
    295 postmodern
    294 fiveam
    285 mcclim
    284 cl-cont
    272 moptilities
    264 iolib
    262 trivial-timeout
    254 metatilities
    218 kmrcl
    217 rucksack
    207 quickproject
    207 portableaserve
    202 cl-utilities
    202 closure-html
    196 cl-yacc
    195 trivial-utf-8
    183 clack
    181 s-sysdeps
    177 cl-annot
    175 uuid
    173 ltk
    172 elephant
    171 cl-oauth
    165 ieee-floats
    164 gsll
    163 trivial-shell
    162 spatial-trees
    162 restas
    161 cl-unicode
    157 hu.dwim.asdf
    153 flexichain
    153 cl-gtk2
    151 cl-prevalence
    148 linedit
    148 cl-cairo2
    147 cl-routes
    146 cl-colors
    143 cl-test-more
    138 fsbv
    133 cl-num-utils
    132 lisp-unit
    129 cl-modlisp
    126 cl-store

Note that this does not distinguish between projects explicitly requested and projects implicitly fetched to satisfy dependencies.

2011-10-29

Quicklisp software updates available

Last night I uploaded a new version of the Quicklisp client, and an update to the bootstrap file quicklisp.lisp. You can update your local version of the client with (ql:update-client).

The new client has a few notable changes.

First, Douglas T. Crosher sent patches to enable Quicklisp to bootstrap and run on Scieneer Common Lisp. Thanks, Douglas!

Second, software archives are now checked for size validity before use. Some people have run into trouble with corrupted downloads, but Quicklisp didn't detect the problem very early. It led to obscure, hard-to-debug errors. The new size check will present a more obvious error and a useful restart. (A future update will add content digest checks.)

Third, a new command, (ql:where-is-system "foo"), will return the pathname of the directory in which the system foo is defined. This is useful for determining from where a particular system is loading.

If you have any questions or comments, feel free to email me or discuss things on the Quicklisp mailing list.

Happy Quicklisping!

2011-10-01

October 1 Quicklisp dist update now available

I've updated the Quicklisp dist again. Here are the differences relative to the last update:

New projects: chemical-compounds, chtml-matcher, cl-anonfun, cl-autorepo, cl-gene-searcher, cl-kanren-trs, cl-langutils, cl-scrobbler, cl-speedy-queue, cl-stdutils, cl-tuples, com.google.base, doplus, gtk-cffi, hh-aws, hh-redblack, lisa, lisp-gflags, periodic-table, recursive-regex, trivial-types, and unicly.

Updated projects: 3bmd, antik, bknr-datastore, caveman, cl+ssl, cl-2d, cl-closure-template, cl-csv, cl-docutils, cl-enumeration, cl-l10n, cl-libxml2, cl-mime, cl-mssql, cl-opengl, cl-openid, cl-pattern, cl-project, cl-redis, cl-syntax, cl-test-more, cl-unicode, clack, clsql, clsql-orm, csv-parser, drakma, elephant, external-program, fare-matcher, fare-utils, gbbopen, glaw, glop, gsharp, gsll, hu.dwim.logger, hu.dwim.partial-eval, hu.dwim.perec, hu.dwim.quasi-quote, hu.dwim.rdbms, hu.dwim.util, iterate, linedit, lredis, parse-js, postmodern, protobuf, rutils, shuffletron, slime, thread-pool, trivial-utf-8, usocket, wuwei, and yason.

Removed projects: cl-soap, hu.dwim.wui, m2cl, and symbolicweb.

To get the update, use (ql:update-dist "quicklisp").

Enjoy!

Slow news month

I don't post very frequently in this blog. I tend to save it for longer announcements and other things. I do post somewhat more frequently to my twitter account, @quicklisp. If you want little bits of Quicklisp trivia delivered more frequently, try following along there.

2011-08-02

Going back in (dist) time

So you updated Quicklisp with (ql:update-dist "quicklisp"), and now a library you depended on is broken. It returns 42 from a function that previously returned 21, or maybe the API changed in an important incompatible way. Now your project is stalled and you have to figure out how to make things work again.

Quicklisp is designed with this situation in mind. Old project sources are kept around in indefinitely, and at a permanent URL, so you can go back to old sets of projects.

The user interface needs to be cleaned up, but here's how it works today:

* (use-package :ql-dist)
* (available-versions (dist "quicklisp"))
(("2011-07-30" . "http://beta.quicklisp.org/dist/quicklisp/2011-07-30/distinfo.txt") 
 ("2011-06-19" . "http://beta.quicklisp.org/dist/quicklisp/2011-06-19/distinfo.txt") 
 ("2011-05-22" . "http://beta.quicklisp.org/dist/quicklisp/2011-05-22/distinfo.txt") 
 ("2011-04-18" . "http://beta.quicklisp.org/dist/quicklisp/2011-04-18/distinfo.txt") 
 ("2011-03-20" . "http://beta.quicklisp.org/dist/quicklisp/2011-03-20/distinfo.txt") 
 ("2011-02-19" . "http://beta.quicklisp.org/dist/quicklisp/2011-02-19/distinfo.txt") 
 ("2011-01-10" . "http://beta.quicklisp.org/dist/quicklisp/2011-01-10/distinfo.txt") 
 ("2010-12-07" . "http://beta.quicklisp.org/dist/quicklisp/2010-12-07/distinfo.txt") 
 ("2010-11-07" . "http://beta.quicklisp.org/dist/quicklisp/2010-11-07/distinfo.txt") 
 ("2010-10-07" . "http://beta.quicklisp.org/dist/quicklisp/2010-10-07/distinfo.txt"))
* (install-dist "http://beta.quicklisp.org/dist/quicklisp/2011-06-19/distinfo.txt" :replace t)
lots of output

That set of commands will revert to the June, 2011 Quicklisp dist. So if your project critically depends on the versions you got in June, you can always go back to it.