Talks 2019
February 23
We will have two tracks in parallel. To get updates about the schedule, please check our official twitter account.
[Insert generated title of talk here]
by Jelle Akkerman
September 1954, composer John Cage writes “45 minutes for a speaker”, a set of rules meant to compose a lecture through chance operations. Using questions like “1. Is there speech or silence?” or “4. If speech, is it old material or new?” Cage composed the speech’s content, noises and gestures.
February 2019, I generate and perform a 20-minute talk, on the fly, using clojure.spec, about clojure.spec.
About Jelle Akkerman
Monitoring with Riemann
by Abhishek Anand Amralkar
Monitoring modern real time distributed infrastructure is complex and expensive. In this talk we explore Riemann, specifically, how Riemann’s low latency helped us to get real time metrics from our Distributed Systems.
Large scale real time distributed systems require emitting hundreds of thousands of metrics per seconds for effective monitoring. A significant portions of metrics are either not of any use or we don’t understand them. With the rapid growth in infrastructure, monitoring infrastructure in real time and getting accurate metrics becomes challenging especially when you have an in-house monitoring setup.
Most monitoring systems are pull/poll based where your monitoring system queries the components being monitored. Pull based monitoring systems, where the system keeps changing some x values in every y minutes, are literally dead.
Riemann is a monitoring tool that aggregates events from hosts, servers and applications and can feed them into a stream processing language to be manipulated, summarized or action-ed. Riemann is fast and highly configurable. Most importantly, it is an event-centric push model.
We use Riemann to monitor Distributed Systems. Catching problems in real time requires monitoring tools that have low latency to detect errors faster and immediately see if the fix is working. Riemann provides this along with a transient shared state for systems with many moving parts.
Riemann is written in Clojure and leverages its core concepts. Riemann configs are Clojure code.
We will walk through the concepts of Riemann
- Events
- Streams
- Indexes
We will also go over how to run Riemann in a production environment and how to write Riemann Clojure configs.
We will conclude our talk with the demo for monitoring distributed systems like Apache Zookeeper.
About Abhishek Anand Amralkar
Abhishek leads the Cloud Infrastructure / DevSecOps team at Talentica Software, where he designs the next generation of Cloud Infrastructure in a cost-effective and reliable manner without comprising on infrastructure and application security. He has experience in working across various technology domains like Data Center Security, Cloud Operations, Cloud Automation, writing tools around infrastructure and Cloud Security.
His current focus is on Security Operations and Clojure.
Reinforcement Learning Made Simple
by Robert Avram
For all the fascination that it induces, Machine Learning (ML) is a rather complex area of computer science.
When translating one of its algorithms to some concrete implementation, the correctness of this implementation becomes crucial.
Clojure, on the other hand, is a simple, but powerful language. In most cases, its simplicity tends to transfer to the problem domain it is applied upon.
I argue that we can use Clojure to more simply implement machine learning algorithms and thus largely guarantee their correctness by means of simplicity.
In this talk I would like to concretely show you how Clojure may simplify the implementation of a particular class of ML algorithms, namely Reinforcement Learning ones, and demonstrate their correctness by using them to teach a game how to solve itself.
About Robert Avram
Robert is a software engineer currently working at REWE Digital in Cologne and spends a lot of his time writing functional microservices in Clojure.
He concurrently seeks refuge from the imperative in the world of purely functional programming, and from time to time likes to pester unwilling individuals with it.
Rapid Prototyping with Coast on Clojure
by Ferruccio Balestreri
Introduction: What is the indie maker movement and why you should try and build your own side projects.
Why Clojure is the perfect language to do this.
Introduction to Coast, a full stack Clojure web framework for indie makers that want to get things done.
Walkthrough an example project of a Saas web app (likely this one: https://github.com/magehash/magehash).
My goal with this talk would be to spread enthusiasm for building fun things with Clojure and show how easy it is to get started.
About Ferruccio Balestreri
Decomposing Problems
by Paulus Esterhazy
At the heart of programming lies the task of decomposing problems into subproblems that can be understood and reasoned about independently. In his 2018 book „A Philosophy of Software Design“, John Ousterhout, the author of the Tcl programming language, lays out his approach to module decomposition.
This talk explores ways of applying Ousterhoutian techniques for avoiding complexity to Clojure. How do techniques of problem decomposition apply to the post-OOP world of functional programming?
About Paulus Esterhazy
Paulus is a seeker of simplicity. He is Principal Engineer at Pitch.
Tackling Travel Tech problems with Graph Stores and Finite State Machines in Clojure
by Nicolas Forgerit
Creating a software system for a travel tech startup can get quite complex especially when event timing and configurability are primary concerns.
As the domain model is a constant factor of change, we decided to directly represent the data as a graph, eventually implementing our own Graph Store using CouchDB and GraphQL on top of Clojure.
Yet the biggest obstacle to a maintainable and configurable software platform is to find a good representation for the plethora of interwoven business rules and according actions the platform needs to execute. Naturally, this is a good fit for a bunch of Finite State Machines we called the “Workflow Engine”.
About Nicolas Forgerit
Nico is a passionate software engineer who went a 10 year long journey of working at web agencies, small- and mid-scale startups and finally at a telefónica IoT startup. Being unamused about the ongoings there and in the overall European tech sector he decided to start an own software consulting business “hej.technology” together with an old friend from study times to help startups and mature businesses to succeed with their tech.
How to Graph Your Data
by Paula Gearon
Whether it is Datomic, Neo4j, or RDF/SPARQL, many Clojure users have some familiarity with graph databases, but not everyone understands how and why these databases operate as they do.
This can restrict how effective developers may be when creating data models and queries for graph databases, thus limiting their ability to make informed technology choices for data storage.
This talk describes the implementation of a complete graph database written in Clojure and ClojureScript.
We will discuss how various stores address the needs of indexing and storage for graph data.
We will also look at how queries are evaluated, including the important question of query optimizers, both in local storage, and for distributed systems.
These principles will be demonstrated at every stage with Asami: a Datomic-like graph database implementation that can run entirely within an application or in a web page.
While the demonstration code of this talk will come from Asami, it will be compared and contrasted to other graph databases, including Datascript, Datomic, Mulgara and Jena.
➜ Watch on YouTube
About Paula Gearon
In her 9th year of Clojure development, Paula likes to work in the most technical parts of a system building the infrastructure that lets other developers do their jobs. She has been the technical lead on several commercial and open source projects, with a focus on data storage and processing, and was a lead editor for the SPARQL standard for accessing RDF databases. When not coding, she does triathlons, cooks, helps her children with homework, and mentors and supports young members of Women Who Code. Originally from Australia, she currently lives with her family in Virginia, in the USA.
Reducing Accretion In Monoliths With Stream Processing
by Sourabh Ghorpade and Akshay Gupta
In this talk, we’ll look at how we migrated critical payment flows out of a monolithic order management system (OMS) to a framework in Clojure that composes event streaming, reliable task scheduling and configuration management in a harmonious way. These actors, in this Actor framework, are capable of processing over 100 million bookings per month. We will walk through why this framework is valuable handling varied asynchronous flows and how it helps keep the OMS simple by exposing well-defined contracts over Kafka. We will also talk about our journey in making the decision to write this framework and our ongoing effort to move large parts of Go-Jek’s Ride Hailing OMS into these smaller actors.
About Sourabh Ghorpade
Sourabh is a developer at GoJek and a recent recruit in the Clojure camp. He enjoys refactoring systems to scale better.
He also feels writing about himself in the third person is rather narcissistic, but oh well.
About Akshay Gupta
3DF: Reactive Datalog for Datomic
by Nikolas Göbel
3DF is a stream processing system which feeds off of Datomic’s transaction log and provides clients with the ability to register arbitrary Datalog queries, for which they will then continuously receive any changes to the result set.
It does this efficiently by compiling Datalog queries to differential dataflows.
Using 3DF on top of Datomic provides a powerful, reactive interface to Datomic, making it an even more attractive choice for the real-time web.
It also opens up Datomic to non-JVM runtimes and processes without a peer cache, without sacrificing performance. Finally, it hints at the possibility of significantly speeding up functional UI frameworks like D3 and React, because it allows these systems to skip their own change detection.
This talk will explore the „why?“, „how?“, and „what now?“ of working with a reactive database.
About Nikolas Göbel
I'm a software consultant and computer science graduate student at ETH Zurich. My current interest is in building languages and systems that make application programming more declarative.
Our Journey from Elm and Elixir to Clojure
by Martin Kavalar
The Big Rewrite is generally considered to be a bad idea. Our experience has been different. We would like to share how Clojure sneaked in through the front(-end) door and why we ultimately decided to go full-stack, from Datomic to ClojureScript.
Nextjournal is an integrated notebook-like platform with a focus on long-term reproducibility. Our team consisted of five language polyglots with only one member having had prior Clojure experience.
Starting out, we chose Elixir for the backend and Elm for the frontend. This talk explores the journey building the platform. Specifically:
- what made us switch the frontend from Elm to JavaScript and ultimately to ClojureScript
- how our desire to leverage immutability accross the stack made us switch the database from Postgres to Datomic and the website from Phoenix to Pedestal
- how we streamlined and simplified our application by rewriting the code executing runner from Elixir to Clojure
- how Clojure’s repl-based live programming workflow tightened our feedback loops and made us more productive
- how tools.deps and figwheel.main improved our workflows after a long journey of trial & error
Attendees will learn about the priorities and tradeoffs in the Elm, Elixir and Clojure communities and their effect on newcomers.
About Martin Kavalar
Martin Kavalar is a programmer with a degree in Physics interested in working at the intersection of science and industry. With his small team, he has been running Sauspiel, a web app for the traditional German card game Schafkopf, for over ten years. They are now leveraging that experience to build NextJournal, to facilitate collaboration, reproducibility and reuse in science.
Music made simple
by Thomas Kristensen
There are now loads of Clojure libraries for composing and playing music out there. Some of them can be a bit intimidating to get started with, but in this talk we are going to explore how you can hook your laptop up to a synthesizer (or use the built-in one in your laptop) and begin experimenting with computer generated compositions without libraries at all! Clojure in itself, along with the JVM environment, contains all the things needed for having your laptop cranking out hard-hitting (or mellow) electronic music in no time!
The objective is not to write out scores of music and feed them into the computer to have them played back. The objective is to combine basic Clojure functions in interesting, novel, and sometimes confusing ways and tweak the output until it becomes awesome music and heavy beats.
This is about keeping things simple and cover everything from the basics. We will touch on such diverse topics as:
- Analog synths, modular synthesizers and the eurorack revolution
- The MIDI protocol in all its glory
- Random functions in Clojure
- The Levenshtein distance metric between strings (super teaser)
- Basic tonal music theory (nothing heavy – I promise!)
Expect loads of wires and lots of noise. Only simple tools will be used – I guarantee it! After this talk you will be ready to host your own Clojure powered techno party!
About Thomas Kristensen
When Thomas isn't hacking tunes in Clojure he spends his days working for GoMore, helping people share rides and cars throughout Europe through the magic of Clojure and Ruby. He has previously given talks on a wide selection of topics such as computer aided drug discovery, declarative programming using propagators, and music synthesis using logic programming.
Tricking Sand into Thinking: Deep Learning in Clojure
by Dave Liepmann
With Clojure bindings for Apache MXNet, Clojurists now have the power of a modern and well-supported deep learning ecosystem.
We’ll explore applications of deep learning in Clojure, from tricking sand into writing poetry to asking your laptop to churn out fresh works by van Gogh.
About Dave Liepmann
Dave is a Berlin-based Lisp farmer specializing in free-range organic parentheses on the JVM.
Microservices, REST, and other regrettable decisions
by Ben Lovell
Microservices have been the dominant choice of architecture since the great fall of the almighty monolith a few years ago. The premise was simple: Break apart this complexity into smaller, manageable chunks, and the simplicity will set you free.
This dream lives, but it is destroying everything we care for. REST has led to CRUD, CRUD has led to distributed state, and distributed state has led us right back to complexity.
In choosing Clojure, we made a vow to reduce complexity via state. From a micro level, our services are beautiful, simple and easy to understand. But what has happened to the macro level? And most importantly, what can we do about it?
About Ben Lovell
Ben Lovell is (for the time being) a human with two arms, two legs, and a head. After growing up in England, he studied Computer Science in Scotland after his career advisor suggested he become an accountant because was "quite pedantic" (direct quote) before heading to Berlin to work full time on Software™. One day he ended up being paid to code in his favourite language, and accidentally became co-organiser of the Clojure meetup in Berlin.
About the Unknown East of the Ancient LISP World. History and Thoughts
by Ingo Mohr
Most LISP people don’t know about the small but highly committed LISP community east of the Iron Curtain, in East Germany (GDR). It’s widely unknown that for example in the 1980s LISPers of the Academy of Sciences of the GDR worked on natural language processing, automatic action planning for robots, expert systems, a full featured Common LISP system including a development environment, or on a highly optimizing LISP compiler which produces code nearly as fast as C for problems typically solved in C. They even began to build a self designed LISP machine to speed up LISP processing using specialized hardware! Already in the second half of the 1970s Herbert Stoyan, at that time working at the Technical University of Dresden, provided a basis for LISP development in East Germany with a LISP interpreter on IBM-like mainframe computers. It was widely used in research, teaching and production. I used this interpreter for my first LISP programs, interactive on a very low level – with punch cards and printed listings.
In my talk I will tell you about this exciting time, which is not least an important part of my own history. Besides history and stories I will share with you some of my very own insights and thoughts of this time about programming in general and LISP in particular. Please enjoy and take some knowledge and insights about some special LISP history with you.
About Ingo Mohr
Ingo is a passionate software developer since about 40 years. In 1978 he got to know LISP, when he had to improve a program verification system at the Technical University of Dresden. This influenced his whole professional life. Now Ingo works at the Condat AG Berlin where he is developing software in Java for money. But his heart still beats for LISP. Ingo likes to develop well-designed, simple and sustainable solutions working together with its clients of a wide range from environmental institutions up to television broadcasters.
Faster Computations with Generative Expressions
by Jonas Östlund
As the amount of data to process grows, so does the time to compute a result. In computationally intensive domains such as numerical optimization, machine learning or image processing, achieving satisfactory performance with Clojure can be a challenging task. It is not uncommon to drop Clojure for the performance critical parts and resort to a language such as Java or C++ which tends to result in computationally more efficient code. With the Generative Expressions library, we can write the performance critical parts in elegant Clojure that runs just as fast.
About Jonas Östlund
Native Clojure with GraalVM
by Jan Stępień
GraalVM challenges the status quo on the JVM. This newly-released just-in-time compiler brings substantial speed improvements and support for polyglot applications. It also allows us to translate our JVM bytecode into small self-contained native binaries. In this session we’ll explore Graal’s impact on Clojure.
We’ll use GraalVM to build native binaries with simple command-line tools. We’ll discuss the method’s limitations and their impact. Finally, we’ll build complete Clojure web applications weighing a fraction of their traditional JVM incarnations.
About Jan Stępień
Jan is a senior consultant at INNOQ, where he works a whole lot with people and a little bit with computers. He's based in Berlin but you can run into him in other parts of Europe too. He enjoys community events, where he often discusses functional programming, architecture, and testing. Jan used to organise the Munich Clojure Meetup; swing by if you're in town, we're a really friendly bunch.
Polylith – A software architecture based on LEGO®-like blocks
by Joakim Tengstrand
Polylith is a software architecture that applies functional thinking at the system scale. It helps us to build simple, maintainable, testable, and scalable backend systems. It’s an architecture that has been inspired by the simplicity and composability of functions. We asked ourselves the question „what would a system look like if we could build it with high-level blocks that share the properties of functions?“. It turned out that the answer looks a lot like LEGO®.
Joakim will give a brief overview of the Polylith architecture with code examples.
About Joakim Tengstrand
Joakim has been a professional developer for more than two decades. He fell in love with Clojure in 2013 and has been working full-time with it since 2016. Polylith is the result of many years of Joakim's hammock time, where he was searching for a simpler, faster and more fun solution to software architecture.
Workflow engines with Clojure - It's a match!
by Tim Zöller
With digital processes becoming more complex every year, and the digitalization finally arriving in our companies, workflow engines become more popular in the Java ecosystem. Describing process flows as a graphic model in BPMN (Business Process Model and Notation) makes them readable and enables workflow tools to execute them. When we let these engines keep the state and orchestrate the steps of a process, we gain the possibility to split our software into atomic delegates. We will explore together, how we can integrate a Java BPM engine with Clojure and how both form a love relationship which makes development incredibly fun and rewarding for us.
About Tim Zöller
Tim is an IT-Consultant for ilum:e informatik ag. He helps his clients to digitalize their manual business processes with Java and is a co-founder of the Java Usergroup Mainz. In his free time, he accumulates new side projects with Java and Clojure and sometimes even finishes one of them.
Lightning Talks
Simple Asynchrony with Free Monoids in Clojure
by Robert Avram
Dynamic Typing shouldn’t necessarily stop us from encoding type-driven things in Clojure.
Compared to statically-typed environments, dynamic typing might actually help us implement asynchronous computation in a much simpler way.
I would like to show you how one might leverage Clojure’s dynamic typing to build a simple construct for asynchrony, that is conceptually based on free monoids.
About Robert Avram
Robert is a software engineer currently working at REWE Digital in Cologne and spends a lot of his time writing functional microservices in Clojure.
He concurrently seeks refuge from the imperative in the world of purely functional programming, and from time to time likes to pester unwilling individuals with it.
cli4clj – Easing the Implementation of Interactive Command Line Interfaces in Clojure for "Everyone"
by Ruediger Gad
For Clojure developers, the Clojure REPL is a powerful, often indispensable, tool. However, here also lies the problem that the powers of the Clojure REPL are only accessible for Clojure developers.
In this talk, I present an overview of cli4clj, a library that aims on simplifying the implementation of easily usable interactive command line interfaces (CLIs). The talk is a quick tour covering the developer and user perspectives to illustrate how cli4clj helps during the implementation and how it eases the use of the resulting interactive CLIs.
cli4clj is built on top of the Clojure REPL and the Java jline2 library. Key features of cli4clj are: simple configuration via maps, persistent history, tab completion for commands and hints for arguments, support for complex Clojure data types, two scrolling modes, and functionality for easing the implementation of automated tests for CLIs.
About Ruediger Gad
Ruediger Gad is a computer science and Open Source Software (OSS) enthusiast who was and still is involved in various OSS projects. He works as Project Manager R&D at Terma GmbH, Darmstadt, Germany in the field of space ground systems. He received a PhD degree in Computer Science from the University of Cádiz, Spain and spoke at various academic conferences and workshops in scope of the technical program and in keynotes.
cljdoc – documentation from the future
by Martin Klepsch
About Martin Klepsch
Martin is an independent software developer, community organiser and open source nut. He helped create CLJSJS and recently started cljdoc. He has also contributed to several existing projects like Boot and the ClojureScript compiler.
Pointfree Clojure
by Miikka Koskinen
The style of programming without using intermediate variables explicitly is called „pointfree„. Haskell programmers love this style and they do have a point: coming up with variable names is hard. In Clojure, threading macros are a popular way for writing pointfree programs. In this talk we look at ways to combine threading macros to keep our programs pointfree.
About Miikka Koskinen
Miikka Koskinen is a long-time Clojure programmer. He works as a software developer at Metosin and co-maintains a number of open-source libraries published by Metosin. He likes mathematical logic, literature, and yoga and writes a blog at https://quanttype.net/
Sponsors
Thanks again to our sponsors in 2019:
CircleCI’s continuous integration and delivery platform helps software teams rapidly release code with confidence by automating the build, test, and deploy process. CircleCI offers a modern software development platform that lets teams ramp quickly, scale easily, and build confidently every day. Learn more at https://circleci.com
Acrolinx software helps the world's greatest brands create amazing content: On-Brand, On-Target, and at Scale.
Acrolinx is the only AI platform that uses a unique linguistic analytics engine to “read” your content, score it, and guide you to make it better. Our technology is transforming how brands create high-performing content.
Red Pineapple Media successfully distributes advertisers' branded content across desktop and mobile, to deliver amazing brand experiences. We are a dedicated team of bloggers, gamers, marketing professionals, and ad lovers. Founded in Berlin by two marketers that believe advertising needs to change.
Red Pineapple Media. Be seen by the world.