Slide 1

Slide 1 text

A Taste of Clojure DevCamp2010 Abhinav Sarkar

Slide 2

Slide 2 text

About Me  Working in Java/JEE professionally for last 2 years at FICO  Programming Hobbyist  Learned JavaScript, C, Perl, Java, PHP, Python, JavaScript, Java (in that order)  Currently dabbling with Functional Programming languages: Haskell, Scala and Clojure  Some personal projects on Google Code and Github 2 DevCamp2010

Slide 3

Slide 3 text

Clojure  Clojure is a dynamic programming language that targets the Java Virtual Machine.  Clojure is a dialect of Lisp.  Clojure is a compiled language.  Clojure is predominantly a functional programming language.  Clojure 1.2 was released two weeks ago 3 DevCamp2010

Slide 4

Slide 4 text

Twitter Feelings DevCamp2010 4  Shows how people on Twitter are feeling, in real-time.  Written in Clojure + Swing  120 line (core logic) + 200 lines (Swing UI)  Written in 10 hours (specifically for purpose of demo at DevCamp2010)  Uses Apache HttpClient and JFreeChart

Slide 5

Slide 5 text

Twitter Feelings: How it works DevCamp2010 5 Twitter released their Real-time Streaming API to public a month ago  Access the Twitter sample tweet stream  Find the feeling related adjectives in each tweet's status text and lookup their type (Positive, Neutral, Negative) against a list of adjectives  Keep the count of the adjective types in a sliding window of tweets  Show the statistics on the UI in pretty charts

Slide 6

Slide 6 text

Twitter Feelings DevCamp2010 6

Slide 7

Slide 7 text

Clojure DevCamp2010 7  Leiningen – the Clojure build tool  Uses Maven for dependency management and Ant for build  Project build file written in Clojure itself

Slide 8

Slide 8 text

Clojure DevCamp2010 8  Basic Clojure data structures  List  Vector  Map  Set

Slide 9

Slide 9 text

Clojure DevCamp2010 9  def: Global Bindings  defn: Functions

Slide 10

Slide 10 text

Clojure DevCamp2010 10  Sequence manipulation  map  filter  reduce

Slide 11

Slide 11 text

Clojure DevCamp2010 11  fn: functions  #(): anonymous functions  (): invoking functions

Slide 12

Slide 12 text

Clojure DevCamp2010 12  -> and ->>: macros  Macros  allow the compiler to be extended by user code  used to define syntactic constructs which would require primitives or built-in support in other languages  possible because in Lisp “code is data”

Slide 13

Slide 13 text

Clojure DevCamp2010 13  use and import

Slide 14

Slide 14 text

Clojure DevCamp2010 14  REPL READ EVAL PRINT LOOP

Slide 15

Slide 15 text

Clojure DevCamp2010 15  Java interop  .  /  doto, ..: macros

Slide 16

Slide 16 text

Clojure DevCamp2010 16  let: Local bindings  Variants:  if-let  when-let

Slide 17

Slide 17 text

Clojure DevCamp2010 17  Lazy sequences

Slide 18

Slide 18 text

Clojure DevCamp2010 18  Code written as parse tree  Uniform prefix invocation syntax

Slide 19

Slide 19 text

Clojure DevCamp2010 19  Protocols, Types and Records  defprotocol  deftype  defrecord  reify

Slide 20

Slide 20 text

Clojure DevCamp2010 20  Concurrency primitives  future  atom  agent  ref  var  Easy thread-less concurrency

Slide 21

Slide 21 text

Clojure DevCamp2010 21  Type inferencing  Type hinting

Slide 22

Slide 22 text

Clojure DevCamp2010 22  Swing in Clojure  clj-swing  miglayout  macros to rescue again

Slide 23

Slide 23 text

Clojure: Libraries DevCamp2010 23  Clojure Core API  clojure.core  clojure.inspector  clojure.java.browse  clojure.java.io  clojure.java.javadoc  clojure.java.shell  clojure.main  clojure.pprint  clojure.repl  clojure.set  clojure.stacktrace  clojure.template  clojure.test  clojure.walk  clojure.xml  clojure.zip

Slide 24

Slide 24 text

Clojure: Libraries DevCamp2010 24  Clojure Contrib API  accumulators  base64  classpath  combinatorics  command-line  complex-numbers  condition  dataflow  duck-streams  error-kit  except  gen-html-docs  generic  Graph  http  jar  java-utils  jmx  json  logging  macros  math  miglayout  mock  monads  pprint  probabilities  profile  reflect  repl-utils  seq  sql  string  swing-utils  test-is  trace  types

Slide 25

Slide 25 text

Clojure: Libraries DevCamp2010 25  Many third-party libraries  Enlive  fnparse  ClojureCheck  ClojureQL  Composure  Ring  Lancet  Cloak  Incanter  Conjure http://clojure.org/libraries#Clojure%20Libraries-3rd-party%20Clojure%20Libraries

Slide 26

Slide 26 text

Clojure: Libraries DevCamp2010 26  All Java libraries!

Slide 27

Slide 27 text

Clojure DevCamp2010 27  Packaging  As JAR  AOT: Ahead Of Time compilation  gen-class and gen-interface

Slide 28

Slide 28 text

DevCamp2010 28 That’s all folks! xkcd #297

Slide 29

Slide 29 text

DevCamp2010 29 Learn more about Clojure at http://clojure.org Check out the code at http://github.com/abhin4v/clj_twitter_feelings See the slides at http://tinyurl.com/a-taste-of-clojure Find me at abhinav@abhinavsarkar.net @abhin4v