Event notes: ClojuTRE 2014

Immo Heikkinen rocking IDEA to code a snake game.

Immo Heikkinen rocking IDEA to code a snake game.

Yesterday was ClojuTRE 2014. It’s the biggest (and the only) Clojure conference in Finland. Here are my main impressions:

  • Wow, there are lots of people in Finland interested in Clojure, and they’re actually using it in production. Clojure is one of the better programming languages available right now and I’m glad that people have found it. Compare this to the Haskell situation: there’s a lot of interest, but almost no-one uses it for “serious” work.
  • ClojureScript is at least as important as Clojure. Judging by the talks and the chatter, people are very much into CLJS. Make sense: JavaScript is everywhere and therefore ClojureScript can be everywhere.
  • Haskell evangelists still have some work to do. Reactions to Bodil’s Haskell talk ranged from “Haskell is the best” to “why on Earth would I use Haskell?” I thought everybody already loved Haskell. Alas!

The talks very pretty basic and there were some technical problems, but otherwise everything went well. Since the talks were short (20-30 min), there was a lot of variety, which was great. In general everybody seemed to have a good time. Thanks to everyone involved!


I’ve summarized the key points of each talk below. Please note: This was written by me, not the presenters. If it sounds like they said something stupid, it’s probably me putting words in their mouth.

  • Wrapping Java in Awesomeness (by Tero Kadenius & Juha Heimonen). While Java is not the nicest language, there are good Java libraries out there. They can be cumbersome to use, so you should wrap them nicely with Clojure. You’ll do this by restricting mutation and feeding the Java objects with immutable Clojure data.

  • Let’s Steal Some Java Goodness (by Antti Virtanen). Clojure books tell you how to write the fib function, but not how to do real-world stuff like logging or performance monitoring. Inspired by Spring Boot, Antti has created a Clojure web app skeleton) which covers these and more, so you do not have to figure them out yourself.

  • How to Introduce Clojure to Your Organization (by Erik Assum). Clojure is elegant and expressive and it has REPL, which will blow your mind if you haven’t seen it before. But how do you impress a programmer with deadlines? Build a simple, valuable and non-critical project it with, like a useful chatbot.

  • Load Testing with core.async (by Markus Hjort). To sneak in Clojure, Markus has built a Gatling-style tool for load testing, called clj-gatling. During the talk, Markus showed us how to build the core logic of the tool using core.async. It was straightforward.

  • Hacking FirefoxOS with ClojureScript (by Timo Sulg). FirefoxOS applications are developed with HTML5, which makes ClojureScript a first-class citizen on the platform. There are some hurdles, like no REPL yet (because eval is disabled), but there are likely workarounds. Since the Firefox OS phones are so cheap (even if the specs are a bit dated), they make a great platform for hacking projects.

  • A Clojurian’s Quest for Qt (by Pauli Jaakkola). Using Qt with Clojure is non-trivial: Qt Jambi is not maintained anymore and Qt Widgets for Node.js does not really work. The way to do it is to use Qt Quick, QML and ClojureScript. QML is no fun, but Pauli has created a Hiccup-style library for generating QML.

  • ClojureScript Live Coding With Ease Using Lively (by Immo Heikkinen). By live coding Immo means editing the live application by reloading code in the running process (as opposed to playing music by writing code, which also involves live coding in Immo’s sense). He has created the library Lively for this purpose. Compared to the alternatives like figwheel, it’s simpler and more straightforward to use. Immo demoed Lively by building a snake game. This was my favorite talk - fun and well presented!

  • Build Tooling With Boot (by Juho Teperi). If you try to build a full-stack web project (with Clojure, ClojureScript, LESS, …) with Leiningen, it soon gets messy. Boot is designed to solve this problem. Boot tasks are Clojure functions which run in the same JVM. This makes them faster and more composable than Leiningen tasks, and not every plugin has to implement file-watching. There are still things missing like IDE support and some common tasks.

  • Live Hacking with Unity 3D (by Tims Gardner). There were some technical problems with this presentation, but basically it was Tims demoing Arcadia, a Clojure interface for Unity.

  • Hay - an embedded language (by Meikel Brandmeyer). Sometimes you want to make your application extensible by users. Exposing the host language - like XMonad does - requires the users to have the full toolchain and expertise in the host language. That’s why a simpler scripting language might be warranted. Meikel is working on Hay, a stack-based concatenative language that is closely integrated with Clojure. Meikel walked use through the basics of Hay and also showed us a useful use of Clojure metadata: storing the stack signatures of Hay functions.

  • Haskell for Clojurists (by Bodil Stokke). The Clojure community has been open to the influences of other programming languages - as shown by e.g. core.logic and core.typed. Bodil thinks that a good language to learn from is Haskell (I concur) and she walked us through implementing linked lists up to their Foldable instance.

Comments or questions? Tweet to me or send me an e-mail.