Lisp journey

Recent content on Lisp journey
https://lisp-journey.gitlab.io/ (RSS)
visit blog
CLOS tutorial: I published 9 videos (1h 22min) on my course. You'll know enough to read the sources of Hunchentoot or the Kandria game 🎥 ⭐
20 Dec 2024 | original ↗

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...

Three web views for Common Lisp: build cross platform GUIs with Electron, WebUI or CLOG Frame
10 Dec 2024 | original ↗

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,...

cl-ansi-term: print tables with style, and other script utilities
22 Nov 2024 | original ↗

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...

Running my 4th Common Lisp script in production© - you can do it too
22 Oct 2024 | original ↗

--> Last week I finished a new service written in Common Lisp. It now runs in production© every mornings, and it expands the set of services I offer to clients. It’s the 4th service of this kind that I developed: - they are not big - but have to be done nonetheless, and the quicker the better (they each amount to 1k to 2k lines of Lisp code), -...

Common Lisp: equality functions explained (=, eq, equal, string= et all)
23 Aug 2024 | original ↗

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...

Oh no, I started a Magit-like plugin for the Lem editor
14 Mar 2024 | original ↗

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...

Celebrating 1001 learners on my Common Lisp course 🥳
14 Feb 2024 | original ↗

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,...

Latest string manipulation functions in the STR library
22 Dec 2023 | original ↗

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...

Common Lisp on the web: enrich your stacktrace with request and session data
13 Oct 2023 | original ↗

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...

I published 17 videos about Common Lisp macros - learn Lisp with a code-first tutorial 🎥 ⭐
15 Sept 2023 | original ↗

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...

Pretty GUIs now: nodgui comes with a pre-installed nice looking theme
1 Jun 2023 | original ↗

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...

Pretty GUI in Common Lisp with nodgui's Tk themes
26 May 2023 | original ↗

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...

i18n in my Lisp web app with Djula templates and gettext
8 May 2023 | original ↗

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...

How to parse command line arguments in Common Lisp (bis)
19 Apr 2023 | original ↗

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...

Debugging Lisp: fix and resume a program from any point in stack 🎥
6 Dec 2022 | original ↗

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...

Debugging Lisp: trace options, break on conditions
2 Dec 2022 | original ↗

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...

Lisp for the web: building one standalone binary with foreign libraries, templates and static assets
28 Nov 2022 | original ↗

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...

Lisp for the web: deploying with Systemd, gotchas and solutions
30 Aug 2022 | original ↗

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...

State of Common Lisp Web Development - an overview
24 Jun 2022 | original ↗

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, January 2024: see my new video on Youtube, a demo on how to assemble Hunchentoot, easy-routes, Djula templates (with ready-to-use Bulma themes), with error handling and common traps:...

New video: how to request a REST API in Common Lisp: fetching the GitHub API 🎥
11 Jun 2022 | original ↗

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...

Video: Create a Common Lisp project from scratch with our project generator 🎥
11 May 2022 | original ↗

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????...

Writing an interactive web app in Common Lisp: Hunchentoot then CLOG
28 Apr 2022 | original ↗

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....

Resources
21 Apr 2022 | original ↗

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...

I Am Creating a Common Lisp Video Course on Udemy (free video previews) 🎥
15 Apr 2022 | original ↗

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....

Who's using Common Lisp ?
5 Apr 2022 | original ↗

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...

Lisp Interview: Arnold Noronha of Screenshotbot: from Facebook and Java to Common Lisp.
6 Dec 2021 | original ↗

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...

Lisp for the web: pagination and cleaning up HTML with LQuery
25 Nov 2021 | original ↗

I maintain a web application written in Common Lisp, used by real world© clients© (incredible I know), and I finally got to finish two little additions: add pagination to the list of products cleanup the HTML I get from webscraping (so we finally fetch a book summary, how cool) (for those who pay for it, we can also use a third-party book...

Lisp Interview: questions to Alex Nygren of Kina Knowledge, using Common Lisp extensively in their document processing stack
22 Oct 2021 | original ↗

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...

Discovering the Lispworks IDE
24 May 2021 | original ↗

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....

Lem can now be started as a full featured Lisp REPL
24 Mar 2021 | original ↗

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...

The Common Lisp Cookbook Is Now Available in EPUB and PDF
19 Jan 2021 | original ↗

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...

Another Common Lisp app in production
14 Dec 2020 | original ↗

A quick post to celebrate the birth of another Common Lisp application running in production©. This time, it is not open source, but I can describe it. It is used by bookshops in France and Belgium to upload their catalogue to online platforms. And no, they don’t know, and don’t need to know, the language it is implemented in! It is a simple...

Pro mailing list: on Common Lisp and parallel GC
14 Dec 2020 | original ↗

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++,...

Lisp Interview: more questions to CLPM author. Common Lisp at university for temporal reasoning and risk-bounded planning
15 Nov 2020 | original ↗

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...

You can buy a preview of the Common Lisp Cookbook in ePub
13 Nov 2020 | original ↗

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...

Composing queries with Mito, or doing without Django lazy querysets and Q objects
24 Sept 2020 | original ↗

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...

How are Lisp REPLs different from Python or Ruby REPLs ? (Hackernews, 2020)
14 Jul 2020 | original ↗

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...

Looking for a Lisp Web Developer (not a real job, but nearly)
5 Jun 2020 | original ↗

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...

A free software for bookshops to show their catalogue online
30 May 2020 | original ↗

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...

Today I Realized that to live reload my Lisp web app is straightforward and so convenient
12 May 2020 | original ↗

We all know that we can start a web server in the REPL and develop a web app as interactively as any other app, we know how to connect to a remote Lisp image by starting a Swank server and how to interact with it from our favorite editor on our machine, we know we can build a self-contained binary of the web app and simply run it, but one thing I...

I Worked Remotely in Common Lisp. Here's My Incredible Story.
12 May 2020 | original ↗

Nearly one year ago, I received an email that asked me if I was available to do remote Lisp work. It was the day before the end of a contract and I had to tell my team if I wanted to continue or not. I made a virtual offering to the Lisp god and I started the Lisp job. Disclaimer: this post was written on Lisp Advocates’ reddit. Lisp Advocates is...

Custom Djula filters
8 Apr 2020 | original ↗

Djula is a Common Lisp port of the Django templating language. It’s good, it’s proven (it’s one of the most downloaded Quicklisp packages), it is easy to use and it has good documentation. It basically looks like this: {% extends "base.html" %} {% block title %}Memberlist{% endblock %} {% block content %} {% for user in...

GUI Programming in Common Lisp, part 5/5: Nuklear
27 Mar 2020 | original ↗

Nuklear is a small immediate-mode GUI toolkit: Nuklear is a minimal-state, immediate-mode graphical user interface toolkit written in ANSI C and licensed under public domain. It was designed as a simple embeddable user interface for application and does not have any dependencies, a default render backend or OS window/input handling but instead...

GUI Programming in Common Lisp, part 4/5: IUP
27 Mar 2020 | original ↗

IUP is a cross-platform GUI toolkit actively developed at the PUC university of Rio de Janeiro, Brazil. It uses native controls: the Windows API for Windows, Gtk3 for GNU/Linux. At the time of writing, it has a Cocoa port in the works (as well as iOS, Android and WASM ones). A particularity of IUP is its small API. The Lisp bindings are...

GUI Programming in Common Lisp, part 3/5: Gtk3
27 Mar 2020 | original ↗

We continue our tour of GUI toolkits for CL with Gtk+3 and cl-cffi-gtk. The previosu posts are: part 1: Ltk part 2: Qt4 This blog post series was initially written for the Common Lisp Cookbook, you can (and should) read it there: https://lispcookbook.github.io/cl-cookbook/gui.html Gtk+3 (cl-cffi-gtk) Gtk+3 is the primary library used to build...

GUI Programming in Common Lisp, part 2/5: Qt4 with Qtools
27 Mar 2020 | original ↗

Here’s the second part of our exploration of GUI toolkits for Common Lisp. The first part and introduction is accessible here: part 1: Ltk This blog post series was initially written for the Common Lisp Cookbook, you can (and should) read it there: https://lispcookbook.github.io/cl-cookbook/gui.html Qt4 (Qtools) Do we need to present Qt and Qt4?...

GUI Programming in Common Lisp, part 1/5: Tk
27 Mar 2020 | original ↗

Lisp has a long and rich history and so does the development of Graphical User Interfaces in Lisp. In fact, the first GUI builder was written in Lisp (and sold to Apple. It is now Interface Builder). Lisp is also famous and unrivaled for its interactive development capabilities, a feature even more worth having to develop GUI applications. Can...

Literate Programming in Lisp With Erudite
21 Mar 2020 | original ↗

Erudite is a Common Lisp library to write literate programs. The latest release (march, 2020) brings cool new features, amongst which the ability to capture and print code output. This page was created with Erudite. You can follow along with its source here. Blogging about a programming language in the language itself is pretty awesome and...

Common Lisp Macros By Example Tutorial
2 Mar 2020 | original ↗

I have recently edited and somewhat expanded the macros page on the Common Lisp Cookbook. I find it may more legible and reader friendly, so I reproduce it below (however, I cut two parts so than you get the essential). You’d better read it on the Cookbook: https://lispcookbook.github.io/cl-cookbook/macros.html The word macro is used generally in...

Yes Google Uses and Hacks on Common Lisp
2 Mar 2020 | original ↗

ITA Software, owned by Google, the airfare search and pricing system that is still used by companies such as Kayak.com or Orbitz, is a well-known example of a successful industrial and large Common Lisp software. We’re legitimate to wonder if they still run it (they do), if Google develops more CL software (I don’t know), or if they put resources...

Python VS Common Lisp Workflow and Ecosystem
6 Nov 2019 | original ↗

please see Python VS Common Lisp (it’s a static page you can find in the menu).

Snippet: Manipulating Rows and Columns With ClAWK
4 Nov 2019 | original ↗

I just discovered clawk, that seems to originate from lispbuilder-clawk. Its last commit dates from 2011, typical from Lisp and that’s OK, libraries have the right to be done, it has no useful README nor documentation, but we can see its use in the tests, and the library is easily discoverable. This library seems perfect to manipulate data in...

Python VS Common Lisp, workflow and ecosystem
30 Oct 2019 | original ↗

I learned Java and C at school, I learned Python by myself and it was a relief. After 8 years working and doing side projects in Python and JavaScript (mostly web dev, Django/Flask/AngularJS/Vuejs), I am not satisfied anymore by the overall experience so I’m making Common Lisp my language of choice. I am not here to compare languages themselves,...

Replic v0.12
29 Oct 2019 | original ↗

We recently pushed our replic library version 0.12, adding a couple of expected features, thanks to the input of our users user: we can TAB-complete sentences (strings inside quotes) we can define a different completion method for each arguments of a command. we added a declarative way to automatically print a function’s result. The default...

Compile Time Type Checking in Common Lisp
29 Oct 2019 | original ↗

We often hear that Common Lisp is dynamically typed, which is not wrong, but that leads to the belief that Lisp is as bad as Python concerning types, which is plainly wrong. We don’t hear enough that CL is a compiled language, that we can add type annotations, and that SBCL does thorough type checking. Hence, what we have at hand is awesome: we...

Reddit: ABCL Common Lisp vs Clojure
22 Sept 2019 | original ↗

Not that I’m interested in using the Java platform :D but relevant comparisons between ABCL (Common Lisp on Java) and Clojure are rare. We just had a nice feedback on reddit, so here it is. The question was: After looking at the quite old benchmarks, ABCL seems to perform alright. Can anyone share their experience with ABCL in terms of...

Slime Tips
26 Aug 2019 | original ↗

Recently on reddit there was a reminder about lisptips.com and slime-tips. I already knew the two, but this time I fully enjoyed the Slime tips. I copy my favourites. As usual, I enhanced the Cookbook/emacs-ide.html at the same time. The Slime documentation is here: https://common-lisp.net/project/slime/doc/html/ Documentation lookup C-c C-d h ...

How to Check Slots Types at make-instance
10 Jul 2019 | original ↗

In CLOS, a slot can have a :type option, but it doesn’t inforce type checking. It is good practice to use it, for documentation and for compiler optimizations and warnings sometimes (with CCL and SBCL when safety is high), but one shouldn’t rely on it. To comply this need, we can simply create our own constructor functions. However, the...

Web Development in Common Lisp: frameworks overview, templating, deployment
7 Jul 2019 | original ↗

We just published a long overdue page on the Cookbook: web development in Common Lisp. We have an ambivalent feeling about it since it isn’t really a recipe as in the other pages. Yet it is valuable content that required a certain amount of digging and tryouts. Indeed, it took us about two years to discover and advertise many projects, to learn,...

Pattern Matching in Common Lisp
26 May 2019 | original ↗

New page on the Cookbook: https://lispcookbook.github.io/cl-cookbook/pattern_matching.html All examples come from Trivia’s wiki. The ANSI Common Lisp standard does not include facilities for pattern matching, but libraries existed for this task and Trivia became a community standard. Table of Contents Common destructuring patterns cons list,...

Functions Tutorial: Arguments, Multiple Values, funcall and apply, closures and more
26 May 2019 | original ↗

Here’s an enhanced page for the Cookbook: https://lispcookbook.github.io/cl-cookbook/functions.html Only the Currying part was untouched (we enhanced it already), the higher-order functions part existed and was rewritten. The rest is new, and it should help you start writing Common Lisp quicker than ever. Happy lisping ! Table of Contents Named...

I Now Work Professionally in Common Lisp O_o
20 May 2019 | original ↗

I’ve been paid to work on Common Lisp projects for a company for three months already. I didn’t expect it :) And we did hire ! My Github profile shows a good part of what my experience is. I am a regular “full stack developper”, with 7 years of professional experience. I worked on diverse Python and Javascript projects for huge to small...

TIL how to interactively fix a failing test
12 Mar 2019 | original ↗

I knew it was possible, but I got to try it recently. Here I run a test with fiveam. It fails. I tell fiveam to enter the debugger on failures with (setf 5am:*on-error* :debug) so we have an immediate feedback and we can re-run the test from where it left off by choosing the appropriate restart. Other test frameworks like Parachute allow that....

These Years in Common Lisp 2018
28 Feb 2019 | original ↗

It’s been already a little more than a year that I began my Lisp journey. I made quaterly news digests, mainly from reddit’s feed: Q1 2018 - Q2 2018 - Q3 2018 - Q4 2018 Time has come for a yearly overview ! What happened in the Common Lisp world ? Are there (or groundbreaking promising useful fun) projects, articles, discussions, tutorials ? No...

Gray streams
22 Jan 2019 | original ↗

This is a copy of http://www.nhplace.com/kent/CL/Issues/stream-definition-by-user.html with syntax highlighting. FAILED Issue STREAM-DEFINITION-BY-USER (“Gray Streams”) This is the writeup of failed issue STREAM-DEFINITION-BY-USER. Because it did not pass, it has no official standing other than as a historical document. NOTES: Several vendors...

These Months in Common Lisp Q4 2018
15 Jan 2019 | original ↗

Q1 2018 Q2 2018 Q3 2018 I wanted to do this for a year and here we are ! I don’t think I’ll carry on, with this format at least. If I missed anything crucial: you have comments and PRs: https://gitlab.com/lisp-journey/lisp-journey.gitlab.io/ Happy (re)discoveries ! Documentation Debugging – the Common Lisp Cookbook Loop, iteration, mapping – the...

Why Deftask Chose Common Lisp
11 Jan 2019 | original ↗

We heard about Deftask, a task management app for teams, a few days ago, in an article about the internals of the Chronicity library. Deftask uses Common Lisp for its backend and its command-line app. This reasonates with the fact that Turtl doesn’t use CL anymore. So I asked Deftask’s author: why did you go with CL ? More than anything else, I...

Why Turtl Switched From CL to Js
11 Jan 2019 | original ↗

Turtl is a very well done, secure collaborative notebook web app. https://turtlapp.com Its api backend is built in Common Lisp: https://github.com/turtl/api/ It is based on many async libraries the developer wrote for Turtl, like the Wookie async HTTP server. “is” ? No, was :/ Even though this repository is still maintained (latest commit: 2nd of...

Introducing Replic: an executable and a library to build a readline app in no time
9 Jan 2019 | original ↗

When I started dabbling in CL, I tried to build a readline application to see how it goes. I found cl-readline (I’m only the new maintainer) and it went smoothly. So I built a second and a third app, and found many things to refactor and provide out of the box: now comes replic. It comes as a library (now in Quicklisp, since 2018-01) and as an...

Debugging in Common Lisp
20 Dec 2018 | original ↗

You entered this new world of Lisp and now wonder: how can we debug what’s going on ? How is it more interactive than in other platforms ? What does bring the interactive debugger appart from stacktraces ? note: this tutorial is available on the Common Lisp Cookbook and it will receive updates there. If you want step-by-step examples of...

One liner, Git from Lisp: commit every file of this repository
4 Dec 2018 | original ↗

Hey, pardon this very short post, it’s just for the pleasure of blogging, and to balance the usual lengthy ones. I wanted to commit, one by one, every file of the current directory (it’s useless, don’t ask). I use legit as the interface to Git, and this one-liner: (dolist (file (uiop:directory-files "./")) (legit:git-add :paths (pathname...

Overview of Documentation Generators
7 Nov 2018 | original ↗

I have a simple need: I’d like to generate an html documentation from my code. What options do we have ? I searched for “documentation tool” on Quickdocs: http://quickdocs.org/search?q=documentation%20tool, from which I remove old ones (clod, qbook, manifest). I had two pure Lisp solutions working out of the box, two more are of interest, and...

We now have comments. Thanks, Utterances !
25 Oct 2018 | original ↗

We just installed a comment system, and it isn’t Disqus ! We just discovered https://utteranc.es/, a lightweight widget based on Github issues. If it doesn’t find an issue corresponding to the current article, it will create one and post your comment there. Simple :) You dreamed of it ? They did it.

These Months in Common Lisp: Q3 2018
6 Oct 2018 | original ↗

Q1 2018 Q2 2018 Documentation CLOS – the Common Lisp Cookbook (extensive rewrite) Advanced Use of Lisp’s FORMAT Function (2004) Book: Luger/Stubblefield, 2009; AI Algorithms, Data Structures, and Idioms in Prolog, Lisp, and Java (PDF) GitHub - DalekBaldwin/on-lisp: A modernized and annotated code companion to Paul Graham’s “On Lisp” SLY User...

Shuffletron, a Common Lisp Music Player for the terminal
11 Sept 2018 | original ↗

Shuffletron is a nice music player for the terminal written in Common Lisp, “based on search and tagging”, that seduced me with its attention to details. Moreover, its author was very responsive to fix a couple issues. The first time you launch it, it will ask for a music repository and will propose to scan it for id3 tags with the scanid3...

These Months in Common Lisp: Q2 2018
2 Jul 2018 | original ↗

Q1 2018 Documentation Paradigms of Artificial Intelligence Programming epub Models and Databases, with Mito and SxQL - the Common Lisp Cookbook Awesome Common Lisp learning list Announcements ELS2018 proceedings (PDF) SBCL 1.4.6 released SBCL 1.4.7 Released LispWorks 7.1.1 - Patches SBCL method-combination fixes SBCL method tracing $500 Bounty on...

New Weblocks tutorial: widgets
25 Jun 2018 | original ↗

Weblocks is a web framework, created circa 2007, that allows to write dynamic web applications in full Lisp, without a line of Javascript. It is based on so called widgets, that are rendered server-side and updated on the client, and it was also based on continuations (they were removed in this fork, at least for now). It was quietly being...

Models and databases with the Mito ORM and SxQL
29 May 2018 | original ↗

Following is a tutorial on how to use the Mito ORM. As usual, this is best read on the Common Lisp Cookbook. It will be updated there. The Database section on the Awesome-cl list is a resource listing popular libraries to work with different kind of databases. We can group them roughly in four categories: wrappers to one database engine...

These months in Common Lisp: Q1 2018
1 Apr 2018 | original ↗

Documentation Multidimensional arrays – the Common Lisp Cookbook Error and condition handling - the Common Lisp Cookbook Scripting: parsing command line arguments, building self-contained executables - the Common Lisp Cookbook ASDF Best Practices for 2018 The Quicklisp local-projects mechanism How to distribute your software, not library, on...

Tip: capture standard and error output
6 Mar 2018 | original ↗

What if we want to capture standard (and/or error) output in order to ignore it or post-process it ? It’s very simple, a little search and we’re good: (let ((*standard-output* (make-string-output-stream)) (*error-output* (make-string-output-stream))) (apply function args) ;; anything (setf standard-output (get-output-stream-string...

Fixing a CL21 error message in an unrelated library after a quicklisp update (it's about cache)
12 Feb 2018 | original ↗

I just updated my Quicklisp dist and suddenly couldn’t load some libraries any more. I got an error related to cl21 looking like the one below (I didn’t note the exact message sorry), even though the library was unrelate to cl21 (it was about osicat and cffi.grovel): couldn’t find adjustable-vectors from CL21.core.arrays If you skip through the...

snippets - functional style, sequences, debugging and more utilities
23 Jan 2018 | original ↗

From sjl’s utilities (thanks so much for the nice docstrings). The goal here is to read some code and learn about (hidden) gems. The following snippets should be copy-pastable. They are the ones I find most interesting, I left some behind. To reduce the dependency load, Alexandria or Quickutil functions can be imported one by one with Quickutil....

(bookmark) Get a list of all the dependencies of a lisp system
23 Jan 2018 | original ↗

I’ll save here a reddit discussion, which I find interesting but that will be burried quickly down reddit’s history. The goal is to get all the dependencies of a system. You’d better read the OP’s question and the discussion (where the OP is the experimented svetlyak40wt/40ants, at the moment doing a god’s work on Weblocks). His solution is...

Print licences used by a given project and its dependencies
22 Jan 2018 | original ↗

print-licenses is a little utility found in Steve Losh’s gigantic utilities and ported to a stand alone project. Example usage: (print-licenses 'fast-io) => alexandria | Public Domain / 0-clause MIT babel | MIT cffi | MIT cffi-grovel | MIT cffi-toolchain | MIT ...

Generic, consistent and dotted access of data structures with Access
12 Jan 2018 | original ↗

A common frustration for (impatient) beginners is to see different function names to access common data structures (alists, plists, hash-tables) and their inconsistencies (the order of arguments). Now they are well documented in the… Common Lisp Coobook of course: https://lispcookbook.github.io/cl-cookbook/data-structures.html, but still; and it...

Structures: lightweight records, a step before classes
3 Jan 2018 | original ↗

Structures offer a way to store data in named slots. They support single inheritance. Classes provided by the Common Lisp Object System (CLOS) are more flexible however structures may offer better performance (see for example the SBCL manual). As usual, this is best read in the Common Lisp Cookbook. Structures Creation defstruct (defstruct...

Error and condition handling
2 Jan 2018 | original ↗

Common Lisp has mechanisms for error and condition handling as found in other languages, and can do more. What is a condition ? Just like in languages that support exception handling (Java, C++, Python, etc.), a condition represents, for the most part, an “exceptional” situation. However, even more so that those languages, a condition in Common...

Scripting. Parsing command line arguments, building self-contained executables.
2 Jan 2018 | original ↗

Using a program from a REPL is fine and well, but if we want to distribute our program easily, we’ll want to build an executable. Lisp implementations differ in their processes, but they all create self-contained executables, for the architecture they are built on. The final user doesn’t need to install a Lisp implementation, he can run the...

cl-torrents, app and (extensive) tutorial: web scraping and building executables
20 Dec 2017 | original ↗

Lately we exercised our Lisp skills by writing cl-torrents, an app that searches for torrents on several sources (the Pirate Bay through piratebay.to, Kickass torrents and torrent.cd), and we wrote an extensive tutorial in the making (that was actually our primary goal). It comes as a library to use from the REPL and as a self-contained...

Continuous Integration and delivery on Gitlab CI, testing locally with Docker
1 Dec 2017 | original ↗

Best read in the Cookbook ! also Travis CI, code coverage, testing with Prove. Gitlab CI is part of Gitlab and is available on Gitlab.com, for public and private repositories. Let’s see straight away a simple .gitlab-ci.yml: image: daewok/lisp-devel before_script: - apt-get update -qy - apt-get install -y git-core - git clone...

Installing libraries, dependencies management
27 Oct 2017 | original ↗

Common Lisp may have more libraries than you think. See: Quickdocs - the library documentation hosting for CL. the Awesome-cl list, a curated list of libraries. lisp-lang.org’s recommended libraries (from State of the CL ecosystem, 2015) Quicklisp is the de-facto package manager, but not the only tool. Some terminology first In the Common Lisp...

Lisp software
19 Oct 2017 | original ↗

There’s a fantastic showcase of succesfull Common Lisp software on lisp-lang.org: http://lisp-lang.org/success/ so go there first. However all are not open source and it doesn’t list new or not so awesome but very cool or interesting software. That’s what we’ll do here to see that yeah Lisp is used today and to have code bases to look at. If you...

Why do we have to wait one month for Quicklisp updates ?
31 Aug 2017 | original ↗

If you didn’t know that, now you do. Quicklisp releases software updates once a month (see Quicklisp’s blog). I didn’t know why, it isn’t explained on its website, so I asked (issue #148). I found the discussion very insightful, everybody being constructive, existing solutions being discussed and architectural choices explained. But it ended up...

How to do Functional Programming in Common Lisp ?
28 Jul 2017 | original ↗

or “Common Lisp is not very functional-programming oriented”. What are the options ? I mean, map is uncommon and there is no short words like take etc for functional composition. Right ? edit see those snippets. edit january, 2019: see this SO answer and the modf library. Map and filter Indeed, there are 8 or so map functions. The one we’re used...

Common Lisp Async Web Scraping
29 Jun 2017 | original ↗

The set of tools to do web scraping in Common Lisp is pretty complete and pleasant. In this short tutorial we’ll see how to make http requests, parse html, extract content and do asynchronous requests. Our simple task will be to extract the list of links on the CL Cookbook’s index page and check if they are reachable. Best read in the Cookbook !...

How to Get a File Size (and others Posix Attributes like its mtime) in Common Lisp
16 Jun 2017 | original ↗

There is nothing built-in since CL predates the posix standard. After a look at Awesome CL, the Osicat library was my go-to package to look for such functionnality. There is its osicat-posix package indeed, even though it is undocumented (issue)… Now a look at the Cookbook is ok. osicat, osicat-posix osicat-posix is included in osicat....

How to access url query parameters in Clack, Lucerne or Caveman
4 May 2017 | original ↗

edit: I found Snooze (by Sly and Yasnippet’s author) easier and cleaner in this regard. It also has built-in settings to choose where to catch errors: with Slime’s debugger, with a full stacktrace in the browser or displaying a custom error page. If you’re using Lucerne don’t search more like I did, its with-params macro works with url query...

Is There Something Like Clojure's Figwheel for interactive web dev with the browser in Common Lisp ?
4 May 2017 | original ↗

Looks like there is: trident-mode, an “Emacs minor mode for live Parenscript interaction”, based on skewer but: trident-mode doesn’t seem to be used in the wild (while skewer-mode is) and I don’t know Figwheel so all I can say is that it seems a bit different: instead of letting us selectively evaluate and send code to the browser, Figwheels...

Getting started: how to install a Common Lisp development environment
3 May 2017 | original ↗

or “could not find recent and easy installation steps [fixed]“. When I started I was a bit confused by old instructions (google is not good at CL), so hopefully this post will help show up recent and easy steps and most of all, help every CL enthousiast discover Portacle. (and this post is editable through its Gitlab repository) Portable, a...

String manipulation is frustrating [fixed]
2 May 2017 | original ↗

One of the first things I wanted to do in the REPL was some string manipulation. But it was tedious. To trim whitespace, and I mean all whitespaces, we had to define #\Space #\Newline #\Backspace #\Tab #\Linefeed #\Page #\Return #\Rubout. To concatenate two strings: either giving an unusual 'string argument to concatenate, like this: (concatenate...

Why is there no generic operators ?
14 Apr 2017 | original ↗

TLDR; because the object system came afterwards (and it was not the intention to make CL entirely object oriented). As a CL enthousiast coming from Python, I feel the pain not to have generic or polymorphic operators but having to learn about many specialized operators instead. Why is it so and are there solutions ? I asked on SO. In CL, there...

Example of interactively changing the current executed Lisp code in the debugger
14 Apr 2017 | original ↗

The awesome example we will read comes from a comment by user lispm inside a discussion on this reddit thread: https://www.reddit.com/r/programming/comments/65ct5j/a_pythonist_finds_a_new_home_at_clojure_land/. The article it discusses is a “Not a monad tutorial” post, where the interviewee is experienced in C++, Java, Javascript and Python and...

About me
5 Feb 2017 | original ↗

Hi, it’s Vincent. I write about my Common Lisp journey here. I started the blog when I was discovering the language and the ecosystem, wishing more people wrote about CL. Because Common Lisp is was the most hidden world I know. I now wrote tools, libraries and software, I run a web app in production©, and I am creating videos on Youtube and a...

↑ These items are from RSS. Visit the blog itself at https://lisp-journey.gitlab.io/ to find everything else and to appreciate author's digital home.