Crux
-
We’ve released a new version: “19.06-1.1.0-alpha”, the changes are listed below.
-
Malcolm and Jeremy were interviewed by Daniel Compton on episode #24 of The REPL podcast.
-
The Crux team will be giving a talk at the Strange Loop conference in Missouri this September, “Temporal Databases for Streaming Architectures”.
Crux night in London
Next Tuesday we are delivering a London Clojurians hands-on workshop for Crux (generously hosted by Funding Circle!), with free pizza and t-shirts featuring John McCarthy: visit the meetup.com page. Already 80 spaces are taken and tickets are available on a first come first serve basis, get yours before they run out.
Here’s the agenda:
-
Introductions
-
Lightning Talks
-
Tick by Malcolm Sparks
-
Bitemporality by Jon Pither
-
Crux 101 by Jeremy Taylor
-
-
Q&A Panel
-
Hands-on Tour
-
Food & Drink
You can see the slides online now.
The core development team will be giving a talk describing the architecture and features of Crux, followed by a code-along session giving you a chance to use Crux yourself. You will come away with an understanding of Crux’s datalog, extension points, and the value of bitemporality in a database.
Crux changes
CAS and Put now do not require a duplicated ID to be placed into both the document and the op, it’s now only specified once in the op. This makes the API much friendlier, and reduces unnecessary user burden of duplication.
There were a number of internal bug fixes which you can find the details of in the changelog.
Edge
There was an investment into solving some of the UX issues that Emacs
users experience when using cider-jack-in-clj&cljs
. If you typed
(go)
into your Clojure REPL, you would end up getting a port conflict
exception. Eventually it turned out to be a race
condition in
figwheel-main as you would restart the server underneath it, and it
would try to helpfully start one. Until that issue is resolved, Edge now
has a workaround for this problem.
Lucio updated the default Edge app template with a nicer set of default CSS.
Edge got a new site and a redesigned UI for the documentation set to go with it. As the templates for the Edge docs are now custom, the hope is that we can do more useful things with it. One things that’s already implemented are convenient “Suggest and edit” links on every page. We also want to explore the idea of “expanding snippets” which will be more self contained in order to aid in creating tutorials.
Speaking of Edge docs, several new articles were added:
-
How Edge Works Under the Hood explaining how Edge works to de-mystify it.
-
Creating Your First Component, a short tutorial on creating a simple component
-
Dev logging setup documentation
-
Lifecycle was expanded to include a section on how you can modify your Edge
There were a few minor bug fixes too:
-
Fix for newer Clojure’s which was broken in some setups by only loading piggieback into ClojureScript projects (which would otherwise bring in an ancient ClojureScript)
-
Remove the hard-coded “edge” from the test-all function
-
Prevent the dev-extras namespace from being unloaded when reloading initially fails
Aero
We did some major work on the internals of Aero. This restructure resolved all of the open bugs in Aero due to a new way of handling collections. We’re still testing it on some client projects, but initial results look good. If you have a complicated config.edn, we’d be interested in hearing if this pull request works for you.
The new approach enables a new kind of tagged literal in Aero config
files, these behave more like macros. The built-in Aero conditionals
like #or
and #profile
have been migrated to this new API. Due to the
existence of this new API, deferreds can now be deprecated. Deferreds
were a workaround for the lack of true conditionals in Aero, and they
had severe limitations such as non-composability.
There’s an alpha namespace available, which will allow you to create custom macros, but the API may still see some revisions.
With this work out of the way, it’s now possible to start looking into
namespacing the tagged literals in Aero. Namespacing will be an
opportunity to avoid breaking changes while improving behavior. For
example #include
does not throw if the file being included does not
exist, but #aero/include
may do so.