A weekly newsletter and podcast diving into Clojure programs and libraries by Daniel Compton.
New Zealand has been under lockdown for the last month to stop the spread of COVID. Our kids have been home from school and kindergarten. They’ve been very well behaved, except for the time they flooded the bathroom with a toilet paper/water slurry!
Things are starting to open up on Wednesday for most of the country. I also got my first COVID vaccination which was good. NZ was pretty slow to start rolling out vaccines but things are now moving very quickly.
This week I’m trying a new tool for preparing the newsletter. As a side effect the format is a little different and more expanded. Reply to this email to let me know what you think. Good change? Bad change?
I restarted The REPL podcast last week. This episode was with Allen Rohner talking about the bank he’s building, building Clojure with Bazel, and type-checking with spec.
Strange Loop has released a 10 year HD remaster of Simple Made Easy. An oldie but a goodie, worth a rewatch.
Clojurists Together members recently voted for six developers to receive $1.5k/month for 12 months to encourage long-term projects. The six recipients were Bozhidar Batsov, Michiel Borkent, Dragan Djuric, Thomas Heller, David Nolen, and Nikita Prokopov.
Special thanks to all the Clojurists Together members who voted and funded these developers, and to Whimsical and AppsFlyer for joining to help us fund an extra three developers.
Clojurists Together is also funding 9 projects for Q3 2021: shadow-cljs, clojure-lsp and Malli with $9,000, clojurians-log-v2, PCP and Holy Lambda with $2,000, and Dependabot Core, Typed Clojure and Polylith with $1,000.
Alex Davis writes for the JUXT blog about building mobile apps with ClojureScript in 2021. A good survey of the landscape and some tips which will save you time if you’re working in this area.
JUXT has updated their Clojure Radar from 2016. I don’t have opinions on everything they mentioned, but I agree with their assessment on all of the tools I have experience with. Well worth a read to look for some promising Clojure technologies that might have slipped by. I was also happy to see that Clojurists Together had funded about 1/3 of the projects listed on the radar.
Crux has a development diary with a bunch of updates. Some of the changes are: adding HyperLogLog for better join estimates, new extension points for full text search, support for Google Cloud Storage via a neat NIO Filesystem Provider for GCS, support for Datomic style return maps, and a Learn Crux Datalog Today website.
They’re also making some very big upgrades to support even more advanced time based querying, adopting Apache Arrow for column-oriented indexing, and moving the index to object storage. This will let the index scale beyond local disk size.
Crux is also getting a lot of interest from Egeria, a Linux Foundation project for handling metadata around enterprise data warehouses.
Miika Koskinen has created a library for implementing split tokens in Clojure. I did this when I was building Deps, but hadn’t thought to publish it as an open source library. It’s an easy pattern to use once you get your head around it, with not much increase in complexity.
Sean Corfield has released HoneySQL 2.0. It uses different identifiers for artifacts and namespace so you can use HoneySQL 1 and 2 in the same project and gradually migrate. One of the big changes is that HoneySQL will come with support for database specific extensions, previously you needed to use a separate library for this like Nilenso’s honeysql-postgres I’ve already started using HoneySQL 2 for some Postgres specific logic and it was a very smooth process.
Wilker Lucio has released an alpha for Pathom 3.
Arne Brasseur has a post on how “the classpath” is a lie/abstraction over a hierarchy of classloaders.
Also recommended from the post is Daniel Smulewicz on how classes are loaded dynamically in Clojure.
SAP has made an enhancement for JDK 16 to improve how the Metaspace allocates memory. The metaspace holds class metadata. As every function in a Clojure program is implemented as a class, improvements here should be help. I’m not sure if there will be a big improvement for the typical Clojure app though, as it seems to mostly improve behaviour with lots of classloaders and classes being unloaded.
AdoptOpenJDK has joined the Eclipse Foundation as Eclipse Adoptium and added a bunch of confusing terminology in the process. AdoptOpenJDK 8 is now called Termurin 8. The new JDK’s will use the Java Compatibility Kit (JCK) for additional assurance that they are compliant with the Java spec.
Also of note, if you’re using GitHub Actions’ setup-java action, you’ll need to update your distribution to reference termurin
.
The Clojure core team is working on tools.build, a new library to fill in the missing (first-party) gaps around using tools.deps, deps.edn and the Clojure CLI to build artifacts. The build files are regular Clojure files and look quite similar in spirit to build.boot
files. It looks like the build files could be a bit boilerplatey but I imagine that people will create higher-level libraries you can use to handle the most common use-cases.
There’s also a new command in the Clojure CLI to add a dependency to your deps.edn file, e.g.
clj -Ttools install io.github.clojure/tools.deps.graph '{:git/tag "v1.0.63"}'
PCP is a Clojure Processor which runs in a similar fashion to PHP. Also of note, Alexander Oloo is being funded by Clojurists Together this quarter.
Eastwood has had a bunch of work done on it recently, including a new :performance linter.
Adam Helinsky has a new pattern for managing a monorepo using deps.edn and Babashka. All dependency data lives in one deps.edn file and external dependencies are broken out into separate aliases. It seems like it might get a little unwieldy, but it would also be a good way to ensure everyone is using the same dependencies.
Bozhidar Batsov released incomplete, a new Clojure code completion library extracted from nREPL.
Sean Corfield has built a library to abstract common build tasks for tools.build into a library so that your build.clj
can stay small.
EmacsConf has a call for talk proposals open until September 30, 2021.
Sean Corfield continues writing about their monorepo and migrating to polylith.
It looks like there is going to be a new :as-alias
option added to :require
in the ns
form. This will let you create “synthetic” namespaces that don’t have to exist before the :require
is run. This is likely to be most useful for spec to let you use namespace qualified keywords without actually creating the namespace.
Jacek Schae has a new video course out for learning Datomic, Datalog and Datomic Ions. You can purchase it on it’s own, or as part of a subscription to ClojureStream which has all of his courses (re-frame, reagent, reitit, and Datomic) included.
Jacek also donates a portion of sales to Clojurists Together and has raised over $10k to date!
Michael Fryar talks about using deliberate practice to learn Clojure after the company he worked for was acquired by Nubank.
David Vujic explains how to to build AWS Amplify apps with ClojureScript, chaining together shadow-cljs to Webpack.
I enjoyed reading this analysis of likely fraud in a research study into dishonesty. There was lots of evidence that the data was fabricated, but my favourite was that half the data used the Calibri font and half used Cambria.
I’m Daniel Compton. I maintain public Maven repositories at Clojars, private ones at Deps, and help fund OSS Clojure projects (along with tons of generous members like Latacora, Roam, Whimsical, Pitch, Nubank, Cisco, AppsFlyer JUXT, Metosin, Solita, Adgoji, Nextjournal, Flexiana, Toyokumo, Griffin, and Parkside) at Clojurists Together. If you’ve enjoyed reading this, tell your friends to sign up at therepl.net, or post a link in your company chatroom. If you’ve seen (or published) a blog post, library, or anything else Clojure/JVM related please reply to this to let me know about it.
If you’d like to support the work that I’m doing, consider signing up for a trial of Deps, a private, hosted, Maven Repository service that I run.
Thanks!