Like many people who work with JVM languages, I do have many version of Java JDK installed on my machine. There are few utilities which help managing which version a given project should use and how to switch quickly between versions. Some of the most popular are: Jabba jenv Others prefer, a much simpler way to switch between JDKs like what is described in Managing Multiple JDKs on macOS. Similarly to the previous article, I have a small function in my ~/.profile which allows me to quickly sw...| Bits and pieces
Viewstamped Replication is one of the earliest consensus algorithms for distributed systems. It is designed around the log replication concept of state machines and it can be efficiently implemented for modern systems. The revisited version of the paper offers a number of improvements to the algorithm from the original paper which both: simplifies it and makes it more suitable for high volume systems. The original paper was published in 1988 which is ten years before the Paxos algorithm 1 was...| Bits and pieces
In this post I will introduce some of the basic concepts of the Lambda Calculus and use them to define basic terms and operators of the boolean logic. Recently, I was challenged to write a Clojure’s macro called IF which behaves like the clojure.core/if but doesn’t use anything that expands to it. This means that you can exclude pretty much all the usual suspects in the core: cond, condp, and, or, case, cond->, etc. After feeling a bit lost for about a minute or so, I understood that to s...| Bits and pieces
I was looking to use Clojure for scripting. A few years ago there was not much options. Recently the scenario changed rapidly. The options currently available are: Use Clojure in the JVM with lein-binplus Use ClojureScript with lumo Use ClojureScript with planck Use pixie-lang Each of the options have advantages and disadvantages. Clojure with the JVM has brings the full power of the JVM, the portability to many different target platforms, an endless ecosystem of libraries, multi-threading, e...| Bits and pieces
Originally posted at: https://engineering.thetrainline.com/ At Trainline we use AWS Lambda 1 in conjunction with API Gateway 2 for some of our microservices. Different teams use different languages, but in the Data Engineering team we use Clojure 3 - which is a JVM based functional programming language. Here we share some of the experiences we’ve had developing and deploying REST based APIs using JVM based Lambdas. Although we normally use Clojure, in this blog post we will present a Java b...| Bits and pieces
In this post I describe the ideas behind Samsara a real-time analytics system. It as a walk through its design principles, and the decision behind the architecture. Table of contents: Simple. Real-time. Aggregation “on ingestion” vs “on query”.Aggregation “on ingestion”. Aggregation “on query”. Which approach is best? Samsara’s design overview.Cloud native vs Cloud independent Cutting some slack. Kafka. Samsara CORE.Filtering Enrichment Correlation Composition: Pipeline Stat...| Bits and pieces
I will try to introduce concepts gradually without assuming prior knowledge of Clojure (or any other LISP dialect). However I will assume that you are already an experienced developer in any other popular language such as Java, C/C++, Python or Javascript. General programming concepts such as functions, parameters, recursion, objects and common data-structures such as: linked lists, maps (or dictionaries), vectors and sets will be assumed to be already known. The REPL The REPL is (IMHO) one o...| Bits and pieces
Between bits and bytes and all other pieces. A tech blog about Clojure, Software Architecture, and Distributed Systems| blog.brunobonacci.com