I'm Steve. That's me. That's my twitter handle. I sometimes wear cowboy shirts, I'm blonde, I'm from Canada. I'm from a tiny little village in the middle of seriously nowhere. That's a picture of-- actually, it's right beside the pond I used to play in as a kid. I'm looking back at my town, so there's nothing there [laughter]. [coughs] There are cowboys. So this is a website that some friends in Canada sent me this week, which I think is amazing - farmersonly.com - this is actually the town that I went to university. These are people looking to marry farmers, or farmers looking to marry farm girls [laughter]. It's pretty sweet. Uh, I'm not a cowboy - I'm a Smug Lisp Weenie. I'm not a particularly good Smug Lisp Weenie, so uh... I don't really know what this is. I did a Google image search for 'Smug Lisp Weenie' and it gave me a cute bunny, [laughter] and I know you're supposed to include one cute animal slide, so there it is. I've worked these places. So I worked at ADX Studio, ThoughtWorks, and DRW Trading - which is in Chicago. DRW is where I've done all my Clojure so far. Introducing Clojure into an environment is kind of difficult. We started with just a t-logger. It was listening to a really terrible messaging framework called LBM - which is some UDP, drop all your packets, head loss piece of junk. So we just had an old application that was written in JRuby which would connect to this thing, and dump all the messages out to a file. So we figured, that thing is like 50 lines of Ruby, we'll rewrite it in Clojure. So we got then 12 lines of Clojure. That was a start. Then we moved on to market data republisher, which is also boring. So it basically gets a data-stream from an exchange, and broadcasts it out to the rest of the companies, so that not everyone needs to connect to the exchange all at once. It was a little bit more interesting, because we had to deal with Java Interop and things like that. It was 300 lines of Clojure. And then the last thing that I wrote before I left was a web application and service, so it was basically your standard RESTful web service, in behind what would normally be kind of a Rails app. So we were using Compojure and stuff for that. That was about 2000 lines of Clojure. It was actually kind of cumbersome, because it was also speaking LBM in addition to HTTP. Okay, people are tweeting at me, so I'm just going to... Nokia phones - they're amazing. So the last thing that was written just as I was leaving, was our trade capture and positions management system. So this was an application that we'd taken from 60,000 lines of C#, down to about 5,000 lines of Ruby. The code samples that people were sending me after I left and joined C42 made it look like it would probably go down to about 3,000 lines of Clojure, which is pretty cool. So now I work at C42. I'm their token white guy. They can only have one until they hire 100 more employees, according to Indian 'import white people from Canada' laws. I work on RubyMonk, so I've inherited a pretty sweet code-base from from Josum and kitty and clojuremonk is definately coming. Its not there yet but i will build it, i promise. So this what we are going to do. So, we basically got this broken up into 2 chunks. 1 through 4 is going to go really fast so I can kind of do the Zedshaw thing and maybe ask everybody not to be that guy, we can leave questions for the end but this is a pretty tight talk so we might not have time for questions. I am totally happy to stop by like the coding room and hack with you on clojure if you actually want to try something out after the talk this afternoon or tomorrow. So we are just going to do the baseline stuff, give you a quick introduction to Clojure, talk about lisp history. I think the curiousity is joy, thats the whole reason i am a programmer. Quick introduction to functional programming as it pertains to Ruby, atleast one of the colonels, I think, for me and feeling good because that also why i am a programmer, for writing codes makes me feel good. Little bit of metaprogramming and then little bit of concurrency just finishing stuff. So Baseline.. Really Quickly! How many people have read about Clojure? Anything at all? Okay. So, a lot of people. How many people have tried Clojure? Dowload, lining in, get it rapid running? Okay, So, about like 20% or something. Allright! How many of you have read some lisp literature? sicp, lisp in small pieces, anything? That's about half.. Alltight!! Do you beleive this? Clojures equals Objects? Hands up.. This is a serious one.. Wow!! Nobody!! Allright, I am screwed!! Okayyy. So, we will do a quick introduction to Clojure but maybe i need more material than this. What is this? Just shout it out. Okay, what sort of expression is it? S expression. Okay, thats technically a correct answer. Thats function call, assuming the stretch is in the macro or a built in special form. What is this, for anybody who has actually played with Clojure, you should know this one? Sorry?? Conditional special form. Special form is a good guess. Its actually a macro call which is totally awesome. Check it out. This is the mactro that defines "when not" which is basically Ruby's on list. So you have a language element defined as a macro in one freaking line. RAD.. Okay, so this is bastardisation of a Rich Hickie code. Basically he says, if you want a new for loop, you can should be able to ready it yourself. You shouldn't have to wait for the compiler or the interpretor/implementer to come up with Java 1.8 to do something fancy for each. What's this? Ya, okay, a string. What's this? Keyword.. Right on.. some people.. What's this? Symbol. Right on.. So, basically, in Clojure, like one of the things that's gonna screw you up is keyword and symbol are more or less reverse, not exactly but it helps to think of them that way. 6.21