QITAB - a collection of free Lisp code

QITAB is an umbrella project collecting Lisp code originally released as Free Software by ITA Software, Inc., or later by Google after it acquired ITA.

Note however that ITA (and now Google) has been regularly contributing or funding significant code improvements to free software Lisp implementations (CMUCL, SBCL and CCL), as well as to software such as SLIME, ASDF-DEPENDENCY-GROVEL, ASDF, etc.

Qurrent ITA Bibliography

Currently, we only publish COMMAND-LINE-ARGUMENTS, CL-PROTOBUFS, INFERIOR-SHELL, POIU, QMyND, QUUX-HUNCHENTOOT, QUUX-TIME, RPM, and SINGLE-THREADED-CCL below. However, other projects released under the QITAB umbrella but possessing their own project page include XCVB and cl-stomp. Most of these projects are now available through Quicklisp.

snapshot: we've also released under MIT license a snapshot of the general-purpose code infrastructure used by QRes, our airline reservation system. It includes plenty of general-purpose utilities and macros, support for logging, threading, xml, csv, parsing grammars, testing, oracle, object-relational mapping, various data structures, and more. This snapshot is not usable as is, but we're hoping to take apart those bits that are useful and move them to better, cleaner, libraries. Outside contributors are welcome to join us in this endeavor. We're also hoping to release a stripped down history of the code in the near future. For discussion, please join the qitab-devel mailing-list.

COMMAND-LINE-ARGUMENTS COMMAND-LINE-ARGUMENTS is a simple library to help you get and parse command-line arguments. To get command-line arguments, it uses uses UIOP when available, or else lets you examine what the implementation provides to you, for you to filter. COMMAND-LINE-ARGUMENTS was extracted from our QUUX collection of code. There is some documentation in the README file. Note that another project that implements similar functionality is Didier Verna's CLON; our library is older, simpler and somewhat more portable, and has a more "functional" API; but Didier Verna's library admittedly has a much fancier end-user interface. You can git clone https://gitlab.common-lisp.net/qitab/command-line-arguments.git (If you're a developer, use git@gitlab.common-lisp.net:qitab/command-line-arguments.git ). Or you can browse the git web interface at https://gitlab.common-lisp.net/qitab/command-line-arguments



CL-PROTOBUFS CL-PROTOBUFS is a library to use Google Protocol Buffers in Common Lisp. Its rivals seem to be protobuf and s-protobuf. The library documentation is included in the sources in a ReST document cl-protobufs.rst. You can git clone https://gitlab.common-lisp.net/qitab/cl-protobufs.git (If you're a developer, use git@gitlab.common-lisp.net:qitab/cl-protobufs.git ). Or you can browse the git web interface at https://gitlab.common-lisp.net/qitab/cl-protobufs



INFERIOR-SHELL INFERIOR-SHELL is a simple library to synchronously execute commands or shell pipelines of commands as subprocesses of your Lisp process, and collect what these subprocesses produced on their standard output to a string, a list of one string per line, or whatever you want. INFERIOR-SHELL depends on a variety of other libraries: asdf uiop fare-utils optima fare-quasiquote-readtable fare-mop. There is some documentation in the README file. Unless you need asynchronous execution, we strongly recommend our library (itself based on uiop) over the very incomplete and less portable attempts from trivial-shell, external-program, executor, elephant, GBBopen, kmrcl, asdf-install, uffi-compat, iolib-grovel, cffi-grovel, gsharp-play, mcclim, parse-declarations or philip-jose. You can git clone https://gitlab.common-lisp.net/qitab/inferior-shell.git (If you're a developer, use git@gitlab.common-lisp.net:qitab/inferior-shell.git ). Or you can browse the git web interface at https://gitlab.common-lisp.net/qitab/inferior-shell

POIU, Parallel Operator on Independent Units POIU is an extension to ASDF that will compile each of your ASDF systems in parallel. See documentation on top of the source file poiu.lisp. (Currently only works non-trivially on Unix using SBCL, CLISP, Allegro or (single-threaded) CCL.) You can git clone https://gitlab.common-lisp.net/qitab/poiu.git (If you're a developer, use git@gitlab.common-lisp.net:qitab/poiu.git ). Or you can browse the git web interface at https://gitlab.common-lisp.net/qitab/poiu

QMyND QMyND, the QITAB MySQL Native Driver, is a MySQL client library that directly talks to a MySQL server in its native network protocol. The little documentation there is currently lies in the code itself and its test suite. Its main repository is now on github: https://github.com/qitab/qmynd.

QUUX-HUNCHENTOOT QUUX-HUNCHENTOOT is a set of extensions to Hunchentoot. Currently, the only published extension is a thread-pooling taskmaster; more may or may not come later. It depends on alexandria, bordeaux-threads, chanl, hunchentoot, lisp-interface-library, optima, uiop. The little documentation there is currently lies in the code itself. You can git clone https://gitlab.common-lisp.net/qitab/quux-hunchentoot.git (If you're a developer, use git@gitlab.common-lisp.net:qitab/quux-hunchentoot.git ). Or you can browse the git web interface at https://gitlab.common-lisp.net/qitab/quux-hunchentoot

QUUX-TIME QUUX-TIME is a library to deal with efficient representation of time. It depends on a bunch of macros and utilities that are currently included in QUUX-TIME but will eventually be published (together with plenty of other ones) in their own package that QUUX-TIME will depend on. The little documentation there is currently lies in the code itself. We don't actually recommend you use QUUX-TIME, though you may freely take code from it to extend your own time library. Instead, we recommend you use LOCAL-TIME. You can git clone https://gitlab.common-lisp.net/qitab/quux-time.git (If you're a developer, use git@gitlab.common-lisp.net:qitab/quux-time.git ). Or you can browse the git web interface at https://gitlab.common-lisp.net/qitab/quux-time

RPM RPM is a library to handle RPM packages. It depends on INFERIOR-SHELL. Its functionality is rather limited at this point: it can extract the version and package name from a RPM name, compare versions, list packages installed (all of them, or from a list), and determine which packages to install to match a target list. There is some documentation in the README file. You can git clone https://gitlab.common-lisp.net/qitab/rpm.git (If you're a developer, use git@gitlab.common-lisp.net:qitab/rpm.git ). Or you can browse the git web interface at https://gitlab.common-lisp.net/qitab/rpm

SINGLE-THREADED-CCL SINGLE-THREADED-CCL is a simple library to create a version of Clozure CL or applications based on it that can start and run in single-threaded mode. This will allow you to use fork(1) -based concurrency in your Lisp programs (such as with POIU above, or a pre-forking server). The downside is that you will have to manually call finish-output on the terminal streams, as CCL's background tasks won't be there to do that for you anymore. There is some documentation in the README file. You can git clone https://gitlab.common-lisp.net/qitab/single-threaded-ccl.git (If you're a developer, use git@gitlab.common-lisp.net:qitab/single-threaded-ccl.git ). Or you can browse the git web interface at https://gitlab.common-lisp.net/qitab/single-threaded-ccl

We also publish some Lispy packages for the Java world:

leijure leijure is a collection of general-purpose Java classes somewhat related to Lisp concepts, interfacing with Clojure, etc.: LoadClojure dynamically loads clojure on-demand into a Java application; DynamicScope implements dynamic scoping for Java; delta-position is a clojure library to compute line/column position within a file in an associative way; etc. Its main repository is currently on github: https://github.com/qitab/leijure.

pyjure pyjure is an implementation (still incomplete) of a pure dialect of Python, written in Clojure. Its main repository is currently on github: https://github.com/qitab/pyjure.

Mailing Lists

QITAB-devel for developers

QITAB-announce for announcements.

Questions Inquired, Talked About, Begged

Whom shall I contact for more information?

Ask your question on the qitab-devel mailing-list.

As we publish more code, we may provide some better way to report and track bugs.

Under what License are you releasing the software?

All projects originated at ITA Software are copyrighted by ITA Software and released under an MIT-style license.

Bits that are derived from earlier work retain their original copyright and license.

Is this software commercially supported?

While ITA uses this software and ITA engineers care about its quality and will do their best to fix any existing issues, ITA itself is not currently selling support for this software or service to develop it in directions that are not priorities for ITA.

However you will have no problem finding Lisp consulting companies to sell you support, development, maintenance and guarantees about this software; just ask on the mailing-list.

Will the released code contain anything about the Airline Industry?

No it won't. All the code we release here will be general purpose libraries and utilities.

The code ITA writes for the Airline Industry as well as any data about ITA customers and partners remain confidential trade secrets. If you want to access ITA expertise about the Airline Industry, please contact the ITA sales department.

Why the name "QITAB"?

Ever since the low-fare search engine QPX, all ITA Lisp projects have borne names starting with a #\Q : QRES, QUUX, QUISP, QUAKE, QUICKET, QREDIT, QUEPASA, QULTIVATOR, etc. At the same time, we wanted "ITA" to appear in the name of this umbrella project; ITAQA could have been confusing (because these releases are made by our Eng department, not our QA department), and QITA didn't sound that good in French ("il quitta - he left") or serious in German ("kita - daycare facility for children"). QRITA in English sounds awfully like Creature, which describes this code pretty well: we created it, and though it's ugly we're proud that it exists at all. But QITAB sounds very good in Arabic ("Kitab - book"), and corresponds to what we want this to be: a collection of software used by the Lisp community at large; where ITA itself is deemphasized put between parentheses (ok, a #\Q and a #\B ), though it remains present. And so, QITAB It Totally Assuredly Be. Enjoy!

Back to Common-lisp.net.