Edmund Jackson presented an introduction to core.logic from the ground up – e.g. what is logic?, why do you care? – to the nuts and bolts – e.g. fresh, unify and conde – to striking new ground – e.g. new goals. He presented a series of increasingly complex and interesting examples as he progressed, ending in a complex example.
Clojure’s focus on immutable data and sequences have been the inspiration for building new data tools for uSwitch.com: treating everything as data and building many tools that operate on the same data.
It has helped us build monitoring, debugging and analytical tools (many of which are written using Clojure) that help us understand how people are interacting with our websites and provides an open-source, open-schema environment for our data that encourages both consumption and production.
Cascalog is a data processing library for Clojure that mixes functional and logic programming. It makes data processing code very concise, easier to grasp and reason about.
Being just a Clojure library, all of Clojures’ features are just a keystroke away – no need to learn another custom language (like Pig or Hive). This also allows for powerful abstraction and composition capabilities.
Although Hadoop being its major use case, Cascalog can be used for local data crunching as well. The talk will mainly focus on how Cascalog leverages logic programming, but real-life experience with Hadoop clusters will be mixed in as well.
When an event occurs, it comes from outside the normal linear flow of execution. Trying to fit these events into sequential code can be an exercise in frustration, making your code more complex and difficult to reason about.
But with the right primitives, this same property can be enormously powerful; events that describe the execution of your code can be combined and correlated, allowing disparate pieces of code to be understood as a coherent whole.
This talk discussed approaches for both the instrumentation of Clojure code and the analysis of the resulting streams of data.
According to Webster, evident means ‘clear to the vision or understanding.’ In this talk, Stuart presented specific practices that you can apply to make your code more evident, particularly on larger projects.
It is relatively easy to make toy-sized programs evident, but the exciting aspect of these ideas is their application at scale. He shared insights from his own experience applying these practices on a multi-year product effort undertaken in Clojure.