February 2022 Monthly Update

By Alyssa Parado

Clojure LSP

This first month we had one big release with performance and new features.

release 2022.02.23-12.12.12

The focus of this release was to make clojure-lsp faster on a lot of places, especially on the post-startup time, which as a summary stands for the time editor/CLI is waiting for clojure-lsp start to then offer all IDE features clojure-lsp has, the most significant improvement was when clojure-lsp analyzed whole project with clj-kondo default linters but is yet linting whole project for unused-public-vars and looking for test trees. We also had lots of performance improvements in different places since CLI usage using parallelism to code-actions and code completion features, offering a smoother IDE experience.

One big change is that now clojure-lsp, by default, discover the project source-paths from the classpath string and not manually scanning deps/lein files, decreasing a lot the false-positives of wrong source-paths where users would need to manually configure it for more complex projects.

And as a new asked feature, and with the help of clj-kondo, we now have support for finding implementations of defprotocols following LSP spec.

Here is the changelog of this release:

Malli

by Tommi Reiman

Done Stuff

(require '[malli.destructure :as md])

(-> '[a b & cs] (md/parse) :schema)
; => [:cat :any :any [:* :any]]

(-> '[a :- :string, b & cs :- [:* :int]] (md/parse) :schema)
; => [:cat :string :any [:* :int]]
(require '[malli.experimental :as mx])

(mx/defn kakka :- :int
  "inline schemas (plumatic-style)"
  [x :- :int] (inc x))

TODO

Nothing, I’m happy with the things I managed to complete during the 6 month period despite the priorities changed during it. Looking at the original list:

  1. First-class Schema inferring and effective schema types
  1. Re-visit Schema registries, lifecycle, caching and contexts
  1. Error messages and tooling integration: pretty-printing of schema creation

Extra stuff that was added:

  1. SchemaAST - parseless method of creating Schemas
  2. LiteSyntax - optional simple syntax for tools like reitit
  3. Schema Creation Performance - massive improvements
  4. Dev-tooling - improvements to clj, support for cljs (kudos to Dan Vingo), clj-kondo support

Future of Malli

There would be so much to do, need to figure out a sustainable way to work on those. These include:

Cheers.

Michiel Borkent

Babashka

Native, fast starting Clojure interpreter for scripting.

Published versions: 0.7.4 - 0.7.6.

Read the changelog here.

Highlights:

I also submitted a PR to cli-matic to fix the long standing issue about babashka compatibility.

Please leave some feedback about babashka in the Q1 Survey!

Clj-kondo

A linter for Clojure (code) that sparks joy.

Published versions: 2022.01.13, 2022.01.15, 2022.02.09.

Read the changelog here.

Highlights:

SCI

Configurable Clojure interpreter suitable for scripting and Clojure DSLs.

Published versions: v0.2.9 - v0.3.1.

Read the changelog here.

Nbb

Ad-hoc CLJS scripting on Node.js using SCI.

Published versions: v0.1.1 - v0.2.0.

Read the changelog here.

Highlights:

Scittle

Published versions: v0.1.0 - v0.1.2.

Read the changelog here.

Highlights:

Obb

Ad-hoc ClojureScript scripting of Mac applications via Apple’s Open Scripting Architecture.

Published versions: 0.0.1 - 0.0.2

Read the changelog here.

Highlights:

Fs

File system utility library for Clojure.

Published versions: 0.1.3.

Read the changelog here.

Highlights:

Process

Clojure wrapper for java.lang.ProcessBuilder.

Published versions: 0.1.1. Read the changelog here.

Highlights:

Pod-babashka-go-sqlite-3

A babashka pod for interacting with sqlite3.

Released versions: 0.1.0.

Highlights:

Pod-babashka-buddy

A pod around buddy core (Cryptographic Api for Clojure).

Released versions: 0.1.0.

Highlights:

Pod-babashka-aws

AWS pod wrapping the Cognitect aws-api library.

Released versions: 0.1.1-0.1.2.

Read the changelog here.

Highlights:

Dragan Djuric

Since a dedicated project proposal for RNN support in Deep Diamond has been accepted by CT (Mar-Apr-May), I got an unexpected opportunity to create and work on a new project as part of this funding: Clojure Sound.

The main objective during January and February was to learn the fundamentals of sound processing and communicating on control devices on the JVM, and create an initial version of full blown Clojure library that is capable of serious work in this area. So far, I have achieved this in code:

- Full initial Clojure-friendly coverage of Java Sound API
- Extracting common protocols for MIDI and Sampled parts of Java Sound into a core package
- Clojurising the MIDI namespace quite a lot
- UX layer for the MIDI standard that goes further than Java Sound
- Full code examples for a large part of the Java MIDI tutorial, in the form of fully working tests.
- Acquired and experimented with several hardware MIDI-compatible controllers

Although the motivation might be unclear to many Clojurists - who needs sound stuff in Clojure - I predict that this will be a very interesting and attractive project to many Clojurists, beginners and veterans alike. First of all, sound-related stuff is interesting, so it’s a good hobby coding and experimenting platform. As such, it’s a good choice for demonstrating various code techniques while avoiding boring topics. Next, it’s great for beginners to give them a topic that they know and like, music, as a playing ground for learning the topics that they don’t (yet) understand (Clojure and programming in general). Further, it covers things only incidentally related to music: communication with external hardware controller devices, which are often created for musicians in mind, but can be utilized in ingenious ways in general computing, with their abundance of knobs, slider, pads, and other convenient control methods. Last (but there will be more), digital signal processing is one of fundamental domains where high performance computing is applied. This will be an excellent demonstration platform for showing off Clojure’s HPC computing capabilities. Who knows, maybe we’ll even be able to build something that kicks-ass. Even if we don’t it will be an excellent platform for many Clojurists to make the first steps in DSP and HPC, and may even attract some people to look into Clojure.

Thomas Heller

Time was mostly spent on doing maintenance work and some bugfixes. As well as helping people out via the typical channels (eg. Clojurians Slack).

Current shadow-cljs version: 2.17.5 Changelog

Notable Updates

David Nolen

Nikita Prokopov

Hi, this is Niki Tonsky and I continue writing a lot of Clojure! Progress has been steady on all fronts:

Humble UI

Wordle implementation takes ~200 loc, which is very decent in my opinion. Especially considering that API is very rough and not designed for ease of use yet.

Clojure Sublimed

DataScript

Uberdeps

JWM

Helped contributors merge lots of PRs:

Skija

People started expressing genuine interest and even build stuff in both Skija, JWM and Humble UI, which is a fantastic sign!