æ/Isogeny
Isogeny makes all configuration dynamic.
Isogeny makes all configuration dynamic.
Clojure, like other JVM languages, excels in long-running tasks1. But I was always jealous of the languages that I'd used for scripting and command line tools which can't wait a second for a JVM to start for each invocation. Despite its slow startup time, the JVM shines at peak throughput. Some times we want one, sometimes the other. For tasks that have a very short lifetime (~1s), we need Ahead of Time compilation....
I use Clojure's threading macros perhaps more than I should, but I do so because they mimic the way I think about the code I write. A lisp programme is a tree and yet most of the programmes that we write are, or should be, lines of functions acting on a datastructure1 2. The value of threading macros 1 2 (* 3 (+ 2 (- 10 (+ 10 (/ 2 2))))) ^ To grok this code I have to start from the bottommost leaf, in this case (/ 2 2), yet it is at the line's far right contrary to where it is natural for me and most of the world3 to start reading....
Dodge a Clojure bug by using Java and tools.build
Macros that makes namespace aliases easy. https://github.com/aelfsyg/alias-ns.git Qualified keywords have ballooned in popularity since the release of spec with Clojure 1.9. And thankfully so! A creed amongst Clojurians is that maps should be open to modification, meaning that I should be able to add data to a map without worrying that it will break its consumer, and that when processing maps we shouldn't remove data using something like select-keys without good reason....
See things from another perspective; Clojure functions that build datastructures from events.
This is a very useful pattern that I see rarely used. When working with systems that pass messages, it can be difficult to later reconstruct a conversation or the sequence of events. It is second nature to us to assign entity IDs1 to messages, but two other IDs will help us to understand the structure of conversations. One is a correlation ID. This is used to tie the conversation together....
You don't understand a pattern until you can implement it — domain-driven design, CQRS, event sourcing.
This article is in the process of being written. Introduction State isn't stored. We rebuild it every time we need to query or do something to it. It has its drawbacks, but it does allow us to do things that would be impossible otherwise. We can view out system's history with new perspectives, or add in missed past events. Our view of the past is necessarily wrong for any complex system and yet we design systems that lack any way to account for that....
An Emacs function that tells you how long it takes to read things.
Serialising and deserialising with Java generics and TypeReferences.
Use DuckDuckGo's !Bangs from the comfort of Emacs!