Clojure Conj 2011
Advanced Filters
Unlock powerful filtering options to find exactly what you're looking for with our premium subscription.
Conference Videos
23 results

Learning Clojure: Next Steps - Stuart Sierra
Aug 29, 2025
You can conj and assoc like a pro. You eat macros for breakfast. What's next? This talk will introduce some more advanced areas of Clojure to explore. Possible topics include: - Using the reader and printer - Creating new types that implement Clojure's interfaces - Building abstractions with protocols - Raw concurrency (locks, volatile, java.util.concurrent)

Concurrent Stream Processing - David McNeil
Aug 29, 2025
The foundation of our query processing engine is a concurrent data stream processor. This processor is characterized by the need to efficiently perform parallel, non-blocking processing of multiple data streams which are too large to fit in memory. Many such executions need to be executed simultaneously and fairly. The ideas in this talk are relevant to those who work with large scale, parallel data processing within the scope of a single process. A central theme of the talk is the creation of layers of abstractions to eventually create a language tailored to the problem. The talk discusses characteristics of the concurrent stream processor including: core data structures to represent processing nodes connected by data streams, processing plans represented as s-expressions, compiling s-expressions into processing nodes and streams, processing plan optimizations via s-expression manipulations, concurrent processing via a fork/join pool, facilities for debugging and cancelling executions and using the data stream processor as the core of a federated query processor.

Clojail: Life in a Clojure Prison - Anthony Grimes
Aug 29, 2025
Sandboxing is very useful. You need only look at all the trylanguage sites to get an idea about how useful it can be. Java has very good built in sandboxing, but that isn't really enough for Clojure. The Java sandbox can prevent I/O and things that can damage the system the code runs on. This makes sandboxing Clojure easier, but not a done deal. The hard part is not sandboxing the state of the system, but instead the state of Clojure itself. In this talk, I'll talk about the Java sandbox, how we use it in Clojail, and how Clojail itself works. This will also be a bit of an introduction to sandboxing and should provide you enough information to use Clojail in your own code. Finally, I'll talk about and show example usages of Clojail in places like lazybot, my IRC bot, and websites such as try-clojure and 4clojure.

ClojureScript - Chris Houser
Aug 29, 2025
There are now three official dialects of Clojure. Each of them is made up of a compiler and a library of data structures, functions, and macros. ClojureScript is the first dialect of Clojure which has a compiler that's written in Clojure. In this talk I'll dig into how that compiler works, including some of the unusual details of macro expansion. I'll also discuss the data structures provided with ClojureScript, how they differ from the other dialects, and how they may improve in the future. The talk will contain forward-looking statements, which are subject to certain risks and uncertainties that could cause actual results to differ materially from those projected.

Striving to Make Things Simple and Fast - Phil Bagwell
Aug 29, 2025
I will cover some of the new data structure developments that enable the Scala parallel collections, our new concurrent hash tries, and perhaps a couple of other new structures that will be public by then, All this from the internal algorithm and data structure design point of view rather that the language. All of them are applicable in the Clojure context and therefore perhaps of interest to your audience. The main focus has been on trying to make things simpler for the developer to exploit the multi-core performance potential of modern machines, hence the title.

Introduction to Logic Programming with Clojure - Ambrose Bonnaire-Sergeant
Aug 29, 2025
A well written logic program is a gold mine. Logic programming represents a problem as a set of declarative logical axioms, or facts, which a logic engine uses to construct a proof. With a set of facts, the programmer can offload the work of collecting results to a logic engine in exciting ways. Beyond these wonderful properties, writing a logic program is tremendous fun! We will use Clojure's logic engine core.logic to introduce these concepts and jump into the fascinating world of logical programming.

Hacking the Human Genome Using Clojure and Similarity Search - Arnoldo Jose Muller-Molina
Aug 29, 2025
The Genome inside each cell works like a massively parallel computer. Some proteins called Transcription Factors (TF) attach into specific regions called "promoters". This attachment starts a complex process that can have different outcomes. One of the possible outcomes is the creation of another TF that will in turn attach to some promoter(s) creating a cascade of events. TFs are like functions that have side effects, call other TFs and also can call themselves recursively. In this talk, I will describe a machine learning technique that attempts to reverse engineer the Genome. To achieve this tricky task, you need versatile tools. First of all, Clojure plays an instrumental role in the development of visualizations and data processing pipelines. Clojure makes it really easy to filter, visualize, and synthesize many gigabytes of data. In addition, similarity search is used extensively to find patterns in a huge set of possibilities. I hope to convince you here that similarity search is the next "NoSQL" and that Clojure is an ideal tool for data science projects.

Ousterhout's Dichotomy Isn't (Part 2 of the Simplicity/Power/Focus Series) - Stuart Halloway
Aug 29, 2025
Ousterhout's Dichotomy attempts to split the language world into system and scripting languages. This split isn't simple, and doesn't work. But understanding where it fails is a great way to approach the concept of power in programming languages. In this talk we will cover - what it means to be powerful - how Clojure's design gives you power - the relation between power and stratification - why the numerics changed in 1.3 - a post-Ousterhout classification scheme that is more useful - some predictions for Clojure's future.

miniKanren - Dan Friedman and William Byrd
Aug 29, 2025
In this UnConf talk, Dan Friedman and William Byrd demonstrate the miniKanren logic programming system for Scheme.

(Neal's) Master Plan for Clojure Enterprise Mindshare Domination - Neal Ford
Aug 29, 2025
Everyone who has used Clojure for more than 5 minutes realizes that it's the best thing since puppies and double rainbows. So why hasn't it dominated the programming landscape? And, more importantly, what is it going to take to make everyone else realize what many of us already have? This talk outlines plans, strategies, and plots to finally get the rest of the world up to date. For your convenience, I tag each idea with #hashtag to facilitate arguments over drinks later

Predicate Dispatch - David Nolen
Aug 29, 2025
When designing functions that can leverage more than the type of the first argument, the Clojurian reaches for multimethods. Yet after some experience, he/she might realize that multimethods have considerable limitations, particularly the closed nature of the dispatch function itself. How can we fulfill the promise of open extension? Predicate dispatch as described by Craig Chambers and Weimin Chen seems promising, but their implementation hardwires many important details. By leveraging the literature around high performance pattern matching compilation as found in Standard ML, OCaml, and Haskell and by driving the compilation with a logic engine, we can achieve a fully open predicate dispatch system with considerable performance gains over multimethods.

Extending JavaScript Libraries from ClojureScript - Kevin Lynagh
Aug 29, 2025
Kevin will discuss using the D3 JavaScript data visualization library from ClojureScript. In particular, using macros to construct a ClojureScript façade that implicitly coerces types and allows one to naturally extend jQuery-style chained syntax. He will also discuss miscellaneous ClojureScript tips and rough edges, and compare ClojureScript with CoffeeScript and more traditional JavaScript functional-mixin libraries like Underscore.js.

From Linear to Incremental - Christophe Grand
Aug 29, 2025
In this talk I expose some of some of the insights I gathered while turning an inherently linear process (parsing) into a sublinear (bestcase logarithmic) process. This is a tale of datastructures (featuring 2-3 and fingertrees), inversion of control, twisted memoization strategies, profiling and optimizing.

Logs as Data - Mark McGranaghan
Aug 29, 2025
A unifying principle of Clojure's design is expressing programs in terms of a few universal abstractions such as functions, maps, and sequences. Such unification allows us to apply Clojure's powerful library to diverse problem domains and to compose programs that cross these domains. We've previously seen this principle applied to HTTP servers and runtime exceptions. In this talk we examine the traditionally-overlooked area of logging in light of the unifying abstractions of functions, maps, and sequences. Treating logs as a sequence of maps and log analysis as the application of functions over map sequences allows logs to become an enormously powerful and general tool for metrics, analytics, alerting, and debugging in production systems. In additional to a general discussion of logs-as-data, we examine the paradigm in detail for Clojure applications on both the producing and consuming sides. On the producing side, we show how a Clojure application can be instrumented to capture log data and to emit it in a way that is orthogonal both to the application's execution environment and to the one or more possible consumers of the log sequence. On the consuming side, we discuss the Pulse service. Pulse is a distributed log consumer, analyzer, and aggregator, written in Clojure, that processes the log firehouse from the Heroku cloud platform and uses it to power a real-time Heroku operations dashboard.

Modeling the World Probabilistically using Bayesian Networks in Clojure - Chas Emerick
Aug 29, 2025
Some of the most challenging problems that programs can face include classification, prediction, and making decisions in the face of messy or incomplete observations, data, or understanding. Bayesian networks provide a basis for implementing solutions to many of these sorts of problems, and Clojure offers excellent raw materials for building them. This talk will briefly introduce the concepts of Bayesian probability and networks, demonstrate the usage of an open source generalized Bayesian network modeling library, and discuss its implementation - highlighting the Clojure facilities that made it possible.

Clojure and Android - Daniel Solano Gomez
Aug 29, 2025
My ideas are naturally about Clojure and Android. The first is primarily about the technical challenges to making Clojure a first-class language for Android development and would appeal primarily to developers who are interested in hacking the language or are interested in lower-level language details. This talk would first start with some background on the Android platform and how it differs from a traditional Java stack. The next part would concentrate on how I got Clojure fully working, including dynamic compilation, on Android. I would then talk about how the change from 1.2 to 1.3 affected Clojure on Android and conclude with my thoughts on what barriers are left to making Clojure a first-class choice for Android development.

Cascalog: Making Data Processing Fun Again - Nathan Marz
Aug 29, 2025
Cascalog is a data processing library for Clojure for processing Big Data on top of Hadoop or doing analysis on a local computer from the REPL. Cascalog is inspired by Datalog and blends logic programming with functional programming. Cascalog's power comes from its nature as a library for Clojure (instead of being a custom language like SQL or Pig). This gives Cascalog amazing capabilities for abstraction and composition. After you learn Cascalog, you wonder how you ever did data processing any other way.

Extreme Cleverness: Functional Data Structures in Scala - Daniel Spiewak
Aug 29, 2025
This talk will cover the theory and implementation of 6 unique functional data structures in Scala. We'll start out with the concept of functional persistence and then dive right into actual data structures. Each data structure will be motivated and built up by the associated theory and ideas. All of these will be illustrated (with requisite colorful diagrams) and implemented with the necessary trappings to be a first-class Scala Collection. Finally, we'll look at some of the real-world constraints imposed by hardware architecture and the JVM itself, touching on how these constraints affect data structure design in ways that the theory doesn't show.

The Macronomicon - Michael Fogus
Aug 29, 2025
A dive into the arcane arts of macrology. Topics include: the basics of macros, the "times" of macros: macro-expansion, compile, and run times, hygiene, macro scoping (lexical and sub-lexical), my approach to writing macros and a case study on Trammel.

Clojure/conj 2011 - Lightning Talks
Aug 29, 2025
Alex Redington on "Monotony," a Clojure library for modeling recurring events. Jim Crossley on "Immutant", an application server for Clojure built on JBoss. Alan Dipert and Jon Distad on "Uberlisp," a Lisp interpreter for Arduino microcontrollers. Chris Granger on "Korma," a SQL library for Clojure.

Performance in the Wild - Craig Andera
Aug 29, 2025
Here at Relevance, we've been building production systems with Clojure for quite some time. In the course of this, we've had to figure out how to make them fast enough to meet performance goals. In this talk, we'll examine some of the philosophy, approaches, tools, we used and some of the challenges we experienced while optimizing one particular system, a high-performance web service.

Programming Music with Overtone - Sam Aaron
Aug 29, 2025
Can programming languages help us to free our creative potential? Formalised descriptions of data, events and process have been used to great effect within industrial settings but could they also be useful in artistic contexts? This presentation introduces Overtone - a Clojure front-end to the state-of-the-art realtime sound synthesis engine SuperCollider - currently being established as a music platform for both research and performance. Overtone facilitates a truly exciting high-level exploration of musical ideas such as the design and structure of sound, the coordination of multiple concurrent performers and even new forms of musical notation. Through live coding, monome button bashing and loud music performances such as synthesized dubstep, we'll dive into the architecture of the system and explore some of the deeper computational questions that working in a musical context forces you to answer. Ultimately we will see how Clojure can manage so much more than the representation of business logic or the construction of web apps. We will cover a lot of ground - so hold onto your ears!

Keynote - Rich Hickey
Aug 29, 2025
Rich Hickey, the inventor of Clojure, discusses pods and other in-progress Clojure design work.