I released a hopefully inspiring gallery: lisp-screenshots.org Today's Common Lisp applications in action. --> We divide the showcase under the categories Music , Games , Graphics and CAD , Science and industry , Web applications , Editors and Utilities . Of course: “Please don’t assume Lisp is only useful for… thank you ;) For more example of companies using CL in production, see this…
Advent Of Code 2025 starts in a few hours. Time to practice your Lisp-fu to solve it with the greatest language of all times this year! Most of the times, puzzles start with a string input we have to parse to a meaningful data structure, after which we can start working on the algorithm. For example, parse this: (defparameter *input* "3 4 4 3 2 5 1 3 3 9 3 3") into a list of list of integers, or…
It is with great pleasure and satisfaction that I published new videos about Common Lisp data structures on my course. The content is divided into 9 videos , for a total of 90 minutes , plus exercises , and comprehensive lisp snippets for each video so you can practice right away. The total learning material on my course now accounts for 8.40 hours, in 10 chapters and 61 videos, plus extras. You…
Lisp newcomers, I still care about you ;) A section on variables was missing on the Cookbook, here it is. As usual, this is best read on the Common Lisp Cookbook . This is where it will get updates and fixes . The Cookbook has many contributors. You can contribute too. I myself mostly contributed (out of frustration) as I was discovering Common Lisp, the language and the ecosystem. It’s been…
I updated the Condition Handling page on the Common Lisp Cookbook to show what it means that handler-bind “doesn’t unwind the stack”, along with a couple real-world use cases. This time I must thank Ari. I originally wrote the page (with contributions from jsjolen, rprimus and phoe), starting from Timmy Jose “z0ltan”’s article (linked in the introduction) and…
Hacker News was written in the Arc lisp dialect, a dialect created by Paul Graham. Arc was implemented on top of Racket, but that has now changed. HN runs on top of SBCL since (at least) September of 2024. But why? For performance reasons. I recently noticed that Hacker News no longer uses paging for long threads. In the past, when a discussion grew large, we had to click “More” to…
This is a personal pick of the most interesting projects, tools, libraries and articles that popped-up in Common Lisp land in the last two years. Newcomers might not realize how the Common Lisp ecosystem, though stable in many ways, actually evolves, sharpens, tries new solutions, proposes new tools, ships new libraries, revives projects. And everyone might enjoy a refresher. Here’s my…
I just released a new documentation website specialized on web development in Common Lisp: 🚀 https://web-apps-in-lisp.github.io/ I’d be embarrassed to tell how long it took me to grasp all the building blocks and to assemble a resource that makes sense. I hope it serves you well, now don’t hesitate to share what you are building, it creates emulation! In the first tutorial we build a…
This is an ongoing work I wanted to share sometimes this year. It isn’t ready, it isn’t released, but if you are a motivated lisper I can add you to the GitHub repository and you can try the demo. We all want more tools for easier and faster web development in CL I guess right? An automatic database admin dashboard is an important component for me, both for personal use and development…
This is a follow-up from yesterday’s post on reddit and an announce I wanted to make since this summer: I created 9 videos on CLOS, for a total of 1 hour and 22 minutes , in which you learn what I detail below. You can watch the course and subscribe here (Christmas coupon) and learn more on GitHub . The whole course is made of 51 videos divided in 9 chapters, for a total of 7 hours and 12…
You dream to build a cross-platform GUI in Common Lisp? It’s now easy with web views. Honestly GUIs are a difficult topic. Add in “cross platform” and you can spend your life trying out different solutions and hesitating between the best one for Common Lisp. It’s doable: Tk, Gtk3 and Gtk4, Qt4 and Qt5, CAPI (LispWorks), IUP, Nuklear, Cocoa, McCLIM, Garnet, Alloy, Java…
I am not the original author of cl-ansi-term , but I revived it lately. In particular, I added useful stuff to print data in tables: print list of lists (where the first one is the list of headers) print horizontal or vertical tables the header keys are either the first row, either the first column print hash-tables, plists, alists filter keys to display (include, exclude) limit the number of…
Common Lisp has various equality functions: = , eq , eql , equal , equalp , string-equal , char-equal … but what are the differences?? We tell you everything, with examples. As usual, this is best read on the Common Lisp Cookbook (a new page added on August, 2024). This is where it will get the updates . In short: = is only for numbers and equal is the equality predicate that works on many things.…
Lem is an awesome project. It’s an editor buit in Common Lisp, ready to use out of the box for Common Lisp, that supports more languages and modes (Python, Rust, Elixir, Go, JavaScript, TypeScript, Haskell, Java, Nim, Dart, OCaml, Scala, Swift, shell, asm, but also markdown, ascii, JSON, HTML and CSS, SQL…) thanks to, in part, its built-in LSP support. I took the challenge to add an…
I just got 1001 learners on my Common Lisp course on Udemy. Thanks everybody for your support, here or elsewhere! Starting with CL was honestly not easy. The first thing I did was writing the “data structures” page on the Cookbook, bewildered that it didn’t exist yet. A few years and a few projects later, this course allows me to share more, learn more, have fun, and have some…
We just released cl-str v0.21 . It’s been a while since the last release, and many enhancements make it more useful than ever. Let’s review the changes, the newest first. But first, I want to you thank everyone who contributed, by sending pull requests or feedback. Special thanks to @kilianmh who suddenly appeared one day, helped with new features as well as grunt work, and who is now…
A short post to show the usefulness of Hunchentoot-errors and to thank Mariano again. This library adds the current request and session data to your stacktrace, either in the REPL (base case) or in the browser. TLDR; Use it like this: ;; (ql:quickload "hunchentoot-errors) ;; ;; We also use easy-routes: (ql:quickload "easy-routes") (defclass acceptor (easy-routes:easy-routes-acceptor…
For those who don’t know and who didn’t see the banner :D I am creating a Common Lisp course on the Udemy platform (with complementary videos on Youtube). I wanted to do something different and complementary than writing on the Cookbook. I worked on new videos this summer and I just finished editing the subtitles. I have added 17 videos (worth 1h30+ of code-driven content) about Common…
Being able to load a custom theme is great, but it would be even better if we didn’t have to manually install one. Well, recent changes in nodgui from yesterday and today just dramatically improved the GUI situation for Common Lisp[0]. nodgui now ships the yaru theme @cage commited the Yaru theme from ttkthemes in nodgui’s repository, and we added QoL improvements. To use it, now you…
Do you think Tcl/Tk GUIs are doomed to look outdated? Fear not! A treeview widget: The official example of Forest Light : The ttkthemes gallery Plus, Tk itself has a little choice of built-in themes: We can use these themes with nodgui , the Ltk fork. In June of 2020, @cage added a little function to load a .tcl file: (defun eval-tcl-file (file-path) "This function will feed the TCL interpreter…
I finally added translations to my Lisp web app \o/ I wanted to do it with gettext and Djula templates. There seemed to be some support for this, but it turned out… not straightforward. After two failed attempts, I decided to offer a little 90 USD bounty for the task (I announced it on the project’s issues and on Discord, watch them out for future bounties ;) ). @fstamour took the challenge…
In 2018, I wrote a blog post and the Cookbook page on how to build Common Lisp binaries, and how to parse command-line arguments with the unix-opts library. But since then, new libraries were created an they are pretty good! They are simpler to use, and have much more features. I had a good experience with Clingon: its usage is clear, its documentation is very good, it is very flexible (it has…
And 2022 is over. The Common Lisp language and environment are solid and stable, yet evolve. Implementations, go-to libraries, best practices, communities evolve. We don’t need a “State of the Ecosystem” every two weeks but still, what happened and what did you miss in 2022? This is my pick of the most exciting, fascinating, interesting or just cool projects, tools, libraries and…
You are doing god’s work on a time-intensive computation, but your final step errors out :S Are you doomed to start everything from zero, and wait again for this long process? No! Find out. I show this with Emacs and Slime, then with the Lem editor (ready-to-use for CL, works with many more languages thanks to its LSP client). (This video is so cool :D Sound on) We use the built-in Common…
Those are useful Common Lisp debugging tricks. Did you know about trace options? We see how trace accepts options. Especially, we see how we can break and invoke the interactive debugger before or after a function call, how we can break on a condition (“this argument equals 0”) and how we can enrich the trace output. But we only scratch the surface, more options are documented on their…
In our previous entry, we saw how to deploy our web application with Systemd, either from sources or with a binary. Now we’ll speak more about this building process to produce one binary that contains everything for our web app . We’ll tackle 3 issues: ship foreign libraries alongside your binary, such as libreadline.so or libsqlite3.so , include your Djula templates into your binary,…
How do you run your Common Lisp (web) application on your server? Nowadays most GNU/Linux distros have Systemd. I recently used it more, with a mix of applications running from source, from a binary, running locally or on my VPS. I had to bypass a few gotchas, so let’s recap’ what you need to know. Also stay tuned : next, we’ll see how to build a standalone binary for your Common…
Caution [from 2017: what a road since then]: this is a draft. I take notes and write more in other resources (the Cookbook, my blog). update, Jan 2025 : I published a new resources specialized in web development in Common Lisp: https://web-apps-in-lisp.github.io/ . update, January 2024 : see my new video on Youtube, a demo on how to assemble Hunchentoot, easy-routes, Djula templates (with…
A few weeks ago, I put together a new Lisp video. It’s cool, sound on, ‘til the end ;) I want to show how to (quickly) do practical, real-world stuff in Lisp. Here, how to request a web API. We create a new full-featured project with my project skeleton, we study the GitHub API, and we go ahead. I develop in Emacs with Slime, but in the end we also build a binary, so we have a little…
In this video I want to demo real-world Lisp stuff I had trouble finding tutorials for: how to create a CL project: what’s in the .asd file? what’s a simple package definition? how do we load everything in our editor (Emacs and SLIME here)? how to set up tests? and how to run them from the terminal? and (WTF) how to get the correct exit code???? how to build a binary in order to run…
We want a web app to display a list of data and have an input field to interactively filter it. We’ll start with a simple, regular web app built with Hunchentoot. We’ll have a search input to filter our data, and we’ll see that to be more interactive, typically to filter out the results as the user types, we’ll need more than basic HTTP requests. We’ll need some…
lisp-lang.org Common Lisp Cookbook awesome-cl learning and tutorials Lisp project of the day Google’s Lisp koans Lisp tips a GitHub repository where anybody can post tips an tricks. search libraries on http://quickdocs.org/ Individual sites: sjl’s road to Lisp Martin Cracauer’s Gentle Introduction to compile-time computing - excellent article series Screencasts: Of course, see my…
Everyone, let me celebrate a little bit: I am creating a Common Lisp video course on the Udemy platform . I’m several dozen hours in already and it’s taking a good shape! It is so much more time consuming to create videos than to write a tutorial O_o But I like what’s in there already, although there isn’t everything I want to teach, of course. I’m working on more…
Everyone says “Nobody uses Lisp” and Lispers say “Yes they do, there’s ITA, and, um, Autocad, and, uh, oh yeah, Paul Graham wrote Viaweb in Lisp!” Not very helpful for either side. We now have a list: awesome-lisp-companies . It isn’t official nor exhaustive, but it’s way better than the past situaton. Of course, see also: lisp-lang.org’s success stories for a showcase of…
I have come to like asking questions to people running companies that use CL, and I have Arnold in my radar for quite some time. He contributed a while back to my cl-str library, and at that time, I don’t recall how many Lisp projects he had in his Github, but not as much as today. Since then, he created ScreenShotBot (an open-source screenshot testing service) and he released a few very…
Recently, the awesome-lisp-companies list was posted on HN, more people got to know it (look, this list is fan-cooked and we add companies when we learn about one, often by chance, don’t assume it’s anything “official” or exhaustive), and Alex Nygren informed us that his company Kina Knowledge uses Common Lisp in production: We use Common Lisp extensively in our document…
LispWorks is a Common Lisp implementation that comes with its own Integrated Development Environment (IDE) and its share of unique features, such as the CAPI GUI toolkit. It is proprietary and provides a free limited version . Here, we will mainly explore its IDE, asking ourselves what it can offer to a seasoned lisper used to Emacs and Slime. The short answer is: more graphical tools, such as an…
The Lem editor , which supports Common Lisp as well as other languages, works by default in the terminal with a ncurses frontend (it also has an experimental Electron frontend). It ships a nice Lisp REPL: it has good fuzzy completion, enough keyboard shortcuts, an interactive debugger, a completion menu, etc. It is now possible to run Lem straight in its Lisp REPL. Run it with: lem --eval…
This is a description of the Common Lisp ecosystem, as of January, 2021, from the perspective of a user and contributor. The purpose of this article is both to give an overview of the ecosystem, and to help drive consolidation in each domain. Each application domain has recommendations for consolidating that part of the ecosystem, and pointers for interesting future work. This article is derived…
I am glad to announce that the Common Lisp Cookbook is now available in ePub and PDF. It is available for free, and you can pay what you want[1] to say a loud “thank you” and to further support its development. Thanks! This EPUB represents the work on the span of three years where I have been constantly reading, experimenting, asking, discovering tips, tools, libraries and…
I recently enjoyed this discussion on the pro mailing list . It started with a call of recommendations on music software, and the discussion evolved in discussing parallel garbage collection. By the way, can you site an implementation that has parallel GC? Pascal Costanza: «When moving our elPrep software away from Common Lisp, we evaluated C++, Go and Java as potential candidates, and Go turned…
Some days ago on reddit/r/lisp , we got to (re)discover CLPM, the Common Lisp Package Manager. Its author, Eric Timmons aka daewok , was kind enough to give more context, and to answer some more questions of mine, about his use of Common Lisp in his university group. Below I’ll give an overview of CLPM, stress on how it differs from Quicklisp, and then paste the interview. /Note/: it’s…
See here: https://ko-fi.com/s/01fee22a32 Let me try something: I propose you here to buy the ePub, even though it is meant to be available for free. I contributed quite a lot to the Cookbook and I found since the beginning that having an EPUB and/or a PDF version would be very useful. Some years later, nobody did it, and I finally wrote a script to bundle all the pages together and generate an…
When I didn’t know Lisp at all, I skimmed at CLSQL’s and Mito’s documentation and I didn’t find a mention of “lazy”, “querysets” (a Django term!) nor a mention of any means to compose queries. I had no idea how I would replace querysets , F and Q objects and the many functions for DB queries that were being added into newer Django versions. I…
Mikelevins, https://news.ycombinator.com/item?id=23811382 , July 2020 (some more comments on https://www.reddit.com/r/lisp/comments/hqesvp/explaining_the_advantages_of_the_repl/ ) (on terminology: we should maybe call Python’s “REPL” a shell , and put emphasis on image-based development , instead of only saying REPL, for Lisp) I’ve answered similar questions several times…
Dear lispers, I decided that I can not develop three projects in parallel fast enough, so I’m seeking for a fellow programmer to join the effort. Disclaimer: this is not a real position, but there is a little budget I recently presented my online catalogue for bookshops . You will work on something very similar, but bigger. I need help to re-write the existing free software for bookshops in…
I wrote a free software for bookshops to publish their catalogue online. Clients can now browse the available books and order them. It is enough generic so we can show other products too. https://abstock.gitlab.io/#/en/ sources and bug tracker: https://gitlab.com/vindarel/abstock Github mirror: https://github.com/vindarel/ABStock the demo Here’s how a search result looks like: Features The…