I attended Clojure/conj this past weekend and I wanted to recollect my
notes and thoughts on my experience to share with others who weren’t able to
make it.
The Venue
The event was held at the George Washington Masonic Memorial, a landmark
structure in Alexandria, Virginia.
Being a VA native, I have seen this building several times while visiting the
area, but never been inside. Even if I had, I don’t think I’d imagine that it
would be a good spot to host a programming conference, but it was.
There was a single stage with theater seating — the acoustics were great and
it seemed to be exactly the right size. Not being able to bring food & drinks
(i.e., caffeine) into the theater might have been the only inconvenience, but
totally understandable given the significance of the building.
The Talks
Day 1
Stu Halloway – data.fresssian
Stu kicked off the conference by introducing a new data encoding library,
data.fressian (pronounced ‘data freshen’), that’s being used
in Datomic to efficiently transport data across the
wire.
It has similar properties to edn, like
being language agnostic, self-describing, and extensible, but in a binary
format. The library’s designers prioritized effectiveness before efficiency to
avoid common idiosyncrasies found in existing (JVM) serialization libraries.
Checkout the clojure implementation and the
format’s wiki for more information.
Update: video
Mike Anderson – Enter the Matrix
Mike presented the core.matrix API for matrix and vector
operations. At its core, the library is a set of protocols that abstract both
fundamental (required) and composite (optional) matrix operations. This allows
any of the existing matrix libraries for the JVM to be leveraged.
By providing a standard API to build applications and leaving the underlying
matrix engine pluggable, you can optimize for your particular use case.
Since this is all protocol-based, you could conceivably mix & match them.
core.matrix currently ships with protocol extensions for vectorz-clj, Clatrix
and NDArray.
Update: video
Aria Haghighi – Prismatic’s Schema
I was looking forward to this talk about Prismatic’s schema library,
as I had seen their introductory blog post and started playing
with it on my flight to the conference. Schema, as its name suggests, is a way
to describe and validate the shape of your data.
Aria made the point that while it’s certainly possible to infer the
shape of data from the source code or convey with a docstrings, it’s time
consuming and imprecise even in the most trivial of situations. Schemas provide
a clear and concise documentation that is non-intrusive like static type systems
can be. He reported noticeable productivity gains at Prismatic from using
schema and simple code organizational patterns.
Aside from documentation and validation, he mentioned that schemas can be used
for other interesting things, like code generation. Prismatic has been using
schema to generate ObjectiveC and Java code for their mobile iOS and Android
applications, which they plan to open source in the future.
Update: video
Chris Houser & Jonathan Claggett – Illuminated Macros
Clojure has powerful macro facilities, but they can be hard to debug when something
goes wrong. There aren’t many ways for a macro’s author to provide fine-grained
error messages or suggested fixes. And aside from macroexpand
, macros
can be opaque to inspect and understand.
Chouser presented properties of macros and ideas that we can
learn from (good parts of) Racket’s macros. And Jonathan demoed
seqex, a library for “s-expression regexes.”
He gave examples by describing the syntax for the let
macro that provides helpful
feedback to users and even generates a colorized, complete syntax specification.
It would be really cool to see some of these patterns become popular in Clojure.
Update: video
Nada Amin & William Byrd – From Greek to Clojure!
A talk that was equally entertaining as it was thought-provoking;
Nada and Will gave tips on how to approach technical
research papers with some live coding using core.logic.
Update: video
Rich Hickey – Harmonikit
Rich took a break from his normal keynote this year to present a
“fun” project that he’s been working on. Harmonikit is a musical synthesis
system built with core.async, overtone,
Supercollider, Lemur and
a keyboard controller that I didn’t catch the name of.
As always, Rich did an exemplary job of dissecting & describing the problem
domain, choosing the distinct problems he wants to address and modeling a system
to do it. This system focused on realistically synthesizing acoustics of harmonic
(e.g., stringed, wind) instruments.
I won’t do this project & presentation justice if I continue attempting to
describe it, so I’ll spare you (and myself) and let you check out the recording
when it is released.
Update: video
Day 2
Carin Meier – Learning to Talk to Machines with Speech Acts
Carin is a great presenter and story teller. She told a story
illustrating how computer science can learn from philosophy and vice versa. She
did an awesome demo of a flying drone using babar and
clj-drone, and of course, now I want a drone.
Update: video
Timothy Baldridge – core.async
Tim skipped talking about the rationale of
core.async, which is well documented elsewhere,
and jumped right into the usage and mechanics of the library that has recently
taken the Clojure & ClojureScript communities by storm. I’ve been using this
library in a side-project, yet learned several new things like the
size of the threadpool.
Update: video
Michael O’Keefe – Predicting Vehicle Usage with Clojure
Michael is a mechanical engineer by trade who has written
several vehicle efficiency simulators
in the past, with
his most recent being in Clojure. He had helpful graphics of the simulation model
and totally awesome original illustrations. It seemed that Clojure’s
immutable values and ease of building dataflows via functional composition were
significant advantages of this type of system.
Interestingly, he was also the only presenter to use LightTable editor during a
demo (AFAIK), which was very easy to follow (one presenter used vim, and the
rest used emacs)
Update: video
Tim Ewald – Clojure: Programming with Hand Tools
This was one of the most memorable talks I’ve been to. This wasn’t a Clojure or
even programming specific talk. Instead, Tim shed some light on the craft of
woodworking, particularly with hand-tools rather than than power-tools. Here
are a few of the observations he made that I can remember:
- The less you do, the less you know.
Automating a complex process isn’t a bad thing in and of itself, but it can
build reliance on machines to do a job; humans begin to lose the skills and
appreciation for the task at hand.
- Your tools change the way you perceive the world.
This is related to the “if all you have is a hammer, everything begins to
look like a nail” lesson. Confirmation bias leads to bad decisions that
don’t appear bad on the surface.
- Simpler tools give you a broader perspective.
You are closer to your trade when your tools allow you (humans) to create
unique items, leaving automation to handle the tasks that never change.
Regardless of how archaic hand-tools may seem, it can be impossible to
match the level of precision that they provide.
Looking forward to watching the recording of this talk.
Update: video
Day 3
Thomas Kristensen – Propagators in Clojure
Thomas presented propaganda, a library for
declarative logic programming with propagators. It provides similar
functionality as core.logic, but benefits from a more transparent
processing model and has efficiency benefits for numerical problems.
Update: video
Fogus – Zeder: Production Rule Systems in Clojure
Zeder is a production rule system
(think OSP5), that Fogus has been
building. The syntax was very similar to Datomic’s and looks very powerful.
He doesn’t appear to have released the source for it yet, but I did find a
gist with an example.
Update: video
Russ Olsen – To the Moon!
Russ gave a vivid recollection of America’s race to
the moon in the 60’s and the little and big lessons we can learn from it today.
The talk’s theme was centered around one of JFK’s quotes, “We choose to go to
the moon, not because it’s easy, but because it’s hard.”
As a Millennial, I’ve heard and seen this story in popular culture countless
times, but he covered some amazing context & details that most leave out.
Russ is a great speaker and the story was inspirational.
Definitely watch this talk when the video is released.
Update: video
Last but Not Least
There were a handful of talks not mentioned here, including
some lightning talks. One of which was from Alan Dipert on
gherkin, aka bash killer. I also got a kick out of talks by
Steve Miner and Amit Rathore.
Update: video
Final Words
Huge thanks to conference organizers, Alex Miller and
Lynn Grogan, for your hard work and leadership. I am immensely
grateful.
And, of course, thanks to all of the speakers, as well as the sponsors, for
making it happen. For me, this has been a real testament to the authenticity of
the Clojure community.
Lastly, I wanted to give a big thank you to my employer,
Huddler, for sponsoring me to attend this conference
(and letting me work in Clojure).
Until next year!