The way Clojure libraries use sequences, maps and vectors makes it very easy to combine data from multiple sources.
Incanter is a powerful library for statistical computing in Clojure. While this might seem only useful to people who need to do scientific computing it is very useful for the everyday programmer.
The purpose of this talk is to show you how you can use Clojure to tear through databases, json, xml and logfiles and then Incanter to analyse the resulting data structures to help you understand what is going on without needing a degree in mathematics.
First: Journeys with Maps by Robert Rees: moving from Object-Orientated languages with a strong emphasis on typing to a functional style with a duck-typing approach. Expect the talk changed therefore: surprise! :-)
Second (starts at minute 14:00): Riemann by Sam Newman: Riemann is a Clojure stream processing server based on the c10k server Netty. Capable of processing a large number of concurrent events, using its elegant stream processing functions it is possible to collect large amounts of data from disparate clients.
Third (starts at minute 24:00): http.async.client by Hubert Iwaniuk: Simultaneously fetching a lot of data over HTTP, consuming HTTP stream, or just needing as painless interface as curl at you REPL – async.http.client is for you. It is lightweight, fast, asynchronous HTTP client.
Fourth (starts at minute 36:30): Canon fodder by Chris Ford: Musical canons employ a base melody accompanied by one or more ‘imitations’ – transformations of the original melody. Clojure lends itself to describing canons because the transformations can be represented by pure functions. This talk will use the Overtone audio environment to explore the canonic form, from ‘Row, Row, Row Your Boat’ to Johann Sebastian Bach.
Search is not only an exciting topic, but also a great fit for Clojure. The problem domain is well suited to the functional programming methodology that is idiomatic in Clojure and thanks to the plethora of excellent Java libraries that are available you never have to reinvent the wheel. This will be a very practical session. Theory will be kept to a minimum so we can focus on actual code. Thankfully, we can let libraries like Apache Lucene do the hard work for us, so we won’t have to worry about the deeper mechanics.
After a quick overview of the topic we will dive into the code for the different components you need for a search engine: a data gathering mechanism, indexing and of course the actual search process. There will be a healthy amount of data wrangling as we parse the source material with Enlive, examine and possibly modify it and finally feed it into a Lucene index.