Although Verbose is one of few logging libraries that work with threaded applications (See Comparison of Common Lisp Logging Libraries), I had some trouble getting it to work in my application. I have a Hunchentoot web application which handles each request in a separate thread that is built as a standalone executable. Getting Verbose to work in Slime was trivial but once I built the standalone, it kept crashing. The Verbose documentation provides all the information needed to make this setup...| Dark Chestnut
Sometimes it may be necessary to execute an external command that takes a long time to complete, long enough that the user needs visual feedback while it is running to show that the process is still alive. UIOP provides fantastic tools for running external commands in a portable manner but it was not obvious to me how to show the external command’s output to the user while it was still busy. I also wanted to execute the external command in a synchronous fashion, i.e. my lisp application mus...| Dark Chestnut
How to process sub-command style command line arguments is a question that arises more and more. Many of the basic option handling libraries can not handle this at all, or they make it very difficult to do so. One of the newer libraries in the option processing field is Adopt by Steve Losh. It was not designed to handle sub-commands but it is in fact very capable to do this without having to jump through too many hoops. In a Reddit thread someone asked if Adopt can handle sub-command processi...| Dark Chestnut
I was searching for a command line option parser that can handle git-style sub-commands and found a whole bunch of libraries. It appears as if libraries on this topic proliferate more than usual. I evaluated them only to the point where I could decide to skip it or give it a cursory test. The information I gathered is summarised below. If you only need the usual flag and option processing, i.e. not sub-commands, then I would suggest unix-opts. It appears to be the accepted standard and is act...| Dark Chestnut
Index of picking libraries blog series To interact with a database system from your code requires some database driver library. For most database systems there are multiple driver libraries, most of which are stable and work well. There are also options of multi-system and single-system drivers. The multi-system drivers can interface with multiple database systems, usually MySQL, PostgreSQL and SQLite, while single-system drivers only work for a specific database system. The two main reasons ...| Dark Chestnut
Index of picking libraries blog series It may be tempting at the start of a new project to create the first database tables manually, or write SQL scripts that you run manually, especially when you first have to spend a significant amount of time on sifting through all the migration libraries and then some more to get it working properly. Going through this process did slow me down at the start of the project but I was determined to use a migration tool because hunting inexplicable bugs that ...| Dark Chestnut
Index of picking libraries blog series A big part of a web development framework’s value is that it pre-selects a set of common libraries. If you use the framework as-is you will have a reasonable setup to build on without having to put any thought into it. More comprehensive frameworks express opinions on many more issues in addition to libraries and they often make it difficult to stray from their prescribed path. Lightweight frameworks confine their opinions to fewer topics and usually m...| Dark Chestnut
Index of picking libraries blog series Picking a database for your web application can be surprisingly time consuming. There are a variety of databases of various types available and Quicklisp has an interface library for many of them. Unless you need a very specific capability from the database and you are acutely aware of this fact, chances are that a standard relational database will be more than sufficient to provide for your needs. Once you have decided to use a SQL database the three ma...| Dark Chestnut
When you make a standalone application intended as a command line tool you may want integration tests to exercise the application through the normal command line user interface. There are tools that can do this testing on OS executable applications but sometimes it is useful to run these tests as part of the test suite without having to first build a standalone binary. The goal then is to test a function that only interacts via standard input and output. This code demonstrates how it can be d...| Dark Chestnut
The easy-routes library makes it easy and fast to define Rails-like HTTP routes for Hunchentoot. It has the concept of decorators which are functions that fo...| www.darkchestnut.com