devyn changed the topic of #elliottcable to: yorickpeterse is undergroin
Sgeo has joined #elliottcable
<ELLIOTTCABLE> cuttle: wat
<devyn> cuttle: wat.
<purr> beep.
<ELLIOTTCABLE> oh
<ELLIOTTCABLE> the album, because the internet
<ELLIOTTCABLE> *so* underwhelmed
<ELLIOTTCABLE> I stopped trying three songs in.
<ELLIOTTCABLE> cuttle: tell me which ones are awesome that I should skip to? because I can't wade through the crap. /=
<ELLIOTTCABLE> back to more Savant.
<dnyy> ELLIOTTCABLE: i thought crawl was cool
<dnyy> the rest i was mostly whatever about
<dnyy> even crawl was so/so, but the beat was nice
<dnyy> i don't like his voice enough to like him without a nice beat carrying it
* devyn ♪ 東京事変 - 恐るべき大人達
<cuttle> ELLIOTTCABLE: crap? :<
<cuttle> ELLIOTTCABLE: ok favorite tracks:
* cuttle lists track listing
<cuttle> just kidding
<cuttle> ok
<cuttle> telegraph ave is great
<cuttle> 3005
<cuttle> the party
<cuttle> flight of the navigator takes a little patience but is beautiful
<cuttle> pink toes is great
<devyn> whitequark: uhhhh serious problem: SSE has max n. connections (same as HTTP); the two connections for each of the five pairs means 10 connections, which is > limit
<cuttle> and the last two are great
<cuttle> though i mean it's like a Concept Album to listen through
<cuttle> but i guess if it's not your thing
<cuttle> at least try those
<devyn> whitequark: need a mux'd stream with all pairs
<whitequark> devyn: oh
<whitequark> I see
<whitequark> one sec, I'll read backlog
* whitequark just woke up
<devyn> kk
<devyn> :p
<cuttle> god i just want to have a fucking audio synthesis library
<cuttle> that can install with gem
<whitequark> ok done
<cuttle> why does every fucking gem have problems
<cuttle> zmq has problems
<cuttle> scruby has problems
<whitequark> alexgord_: getting laid algorithmically is my speciality?
<whitequark> not quite sure how you got that idea
<whitequark> devyn: okay, I'll make you a muxed stream
<devyn> awesome
<whitequark> though now there's the question of the API
<cuttle> ELLIOTTCABLE: though tbh the moment i first listened i knew it would be an album i loved that most other people didn't love the same way
<devyn> whitequark: I suggest using the event: field for the type of data and putting exchange/pair information into an additional line of data (first line)
alexgord_ has quit [Quit: My iMac has gone to sleep. ZZZzzz…]
<devyn> that way you don't have to touch the JSON, if that's a concern
<whitequark> devyn: how about making it a true multiplexed stream?
<whitequark> event: contains substream ID, data: contains the same data as before
<devyn> I'm good with that, but how will the ID work
<whitequark> and /live endpoints reply with substream IDs they have just allocated
<devyn> ah
<devyn> wouldn't you have to provide it with knowledge of the SSE connection you belong to?
<whitequark> yep, the first event you'll receive is the SSE stream ID, you'll have to feed it to the /live endpoints
<devyn> that's what I was just about to say
<devyn> okay
<whitequark> also I've finished depth delta compression and added a live endpoint
<devyn> not that it's likely to happen, but what if I want to stop receiving a substream
<whitequark> there will be an endpoint for that
<devyn> alright, sounds good
alexgord_ has joined #elliottcable
<devyn> well, I'm going to bbiab and then rewrite the goddamn candlestick renderer because it's totally screwed up lol
<purr> lol
<whitequark> ok
yorick has quit [Remote host closed the connection]
<devyn> ahh, much better
<devyn> guess I was trying to be too fancy before
<devyn> lol
<purr> lol
<devyn> yeahhhh that looks right.
<devyn> >_<
eligrey_ has joined #elliottcable
<whitequark> devyn: ok, finished stream multiplexing
eligrey has quit [Ping timeout: 245 seconds]
<whitequark> actually, not yet...
<devyn> whitequark: anyway, http://i4.minus.com/iblaRtS6v0SgSv.png
<devyn> I just have to add a ruler
<devyn> and I guess cursor information
<whitequark> oh cool
<devyn> it's so beautiful
<whitequark> that was sudden
<whitequark> okay I almost added Last-Event-ID support back
<whitequark> it's somewhat of a pain
eligrey_ is now known as eligrey
<whitequark> devyn: okay, finally done
<whitequark> devyn: so I'll describe the API.
<whitequark> GET /live gives you the stream
<devyn> ok, go ahead
<whitequark> first thing it does is sends an empty event with id set to the stream id
<whitequark> also, when the browser auto-reconnects and sends Last-Event-ID with that stream id, I handle it properly
<whitequark> you need to POST /live/ping with header X-Stream-Id set to the stream id every 30 seconds
<whitequark> otherwise it will time out on the server side and kill the stream
<whitequark> all other live endpoints have the same URL, but you need to POST them, and in return they will give you a piece of JSON
<whitequark> {"id":42}
<whitequark> where 42 is the substream ID
<devyn> I POST them with X-Stream-Id?
<whitequark> similarly, you need to set X-Stream-ID for all those POSTs
<whitequark> yes
<devyn> ok
<devyn> Id or ID?
<whitequark> you can cancel an existing substream with DELETE /live/42, similarly you need to set X-Stream-Id
<whitequark> doesn't matter, http headers are case insensitive
<devyn> are supposed to be* :p
<whitequark> I use Id
<devyn> okay
<whitequark> oh and there's also a depth endpoint, /exchange/BTC-e/pair/BTC/USD/depth/live
<devyn> oh, so the streams still work just as before if X-Stream-Id isn't set?
<devyn> perfect
<whitequark> no, I broke the API :3
<devyn> oh?
<devyn> but
<devyn> oh never mind
<devyn> I didn't run make
<devyn> lol
<purr> lol
<devyn> no worries :p
<whitequark> okay
<whitequark> oh also I properly report errors everywhere
<whitequark> {"error":"descriptive message"}
<whitequark> and proper code
<whitequark> you'll need to set EventSource.onerror
<whitequark> if the connection was out for >60 seconds, it'll barf with "unknown stream id"
<devyn> in that case, should I just reinitialize the EventSource?
<devyn> yeah that should do it
<whitequark> and reopen all substreams, yes
<devyn> mmhm
<devyn> this song
<whitequark> hm, I think I would lose events in case of a disconnect
<whitequark> that's bad
<devyn> lose BTC-e events?
<devyn> or
<whitequark> don't send events to frontend
<whitequark> which have happened while it was reconnecting
<devyn> the web frontend?
<whitequark> yes. this is nontrivial to fix though :/
<devyn> I don't think you need to worry about it
<devyn> I was just going to request some history upon reconnecting
<whitequark> yes. if it's important, you can always request history from the last event
<whitequark> yeah
<whitequark> oh, neat, bars.
<whitequark> candles*
<devyn> yeah, currently getting a well-distributed ruler is what I'm working on
<whitequark> ooooh yes, that is a hard problem
alexgord_ has quit [Quit: Textual IRC Client: www.textualapp.com]
<devyn> ideally it should be a little more rounded than that, but, later.
<whitequark> devyn: nice
<whitequark> what about multiplexer?
<devyn> not yet
<devyn> next
<whitequark> okay
<whitequark> seems like my ISP's router in this house is dead
<whitequark> or hung up
<devyn> power cycling it didn't work?
<whitequark> house, not my apartment
<devyn> ah
<whitequark> I guess it's in a locked attic
<whitequark> oh
<whitequark> loose cable.
<devyn> working on multiplexed stream now
* whitequark is staring at http://i.imgur.com/u136hSB.png
<devyn> why
<devyn> …
<whitequark> trying to understand what holds a reference to my shit preventing it from being collected
<devyn> ah
<whitequark> I really could use a demangler -_-
<whitequark> or more like
<whitequark> id2sym
<whitequark> symbolizer*.
<devyn> so a mangler
<devyn> :)
<whitequark> no
<whitequark> from function addresses to names
<devyn> oh
<devyn> ok
<devyn> so a demangler
<whitequark> no, demangler would be from function linkage names to function source names and signatures :p
<devyn> oh addresses
<devyn> totally missed that
<devyn> :p
<whitequark> I think I can use nm, sed and awk...
<whitequark> this is horrible though
<devyn> jesus christ I've sound makes the weirdest music videos
<devyn> rather disturbing, too
<devyn> oh, and nudity.
<devyn> and a spider.
<whitequark> __PRETTY_FUNCTION__.13850
<whitequark> you can not surprise me.
<devyn> hahahahaha
<devyn> what
<whitequark> lol what the fuck
<purr> lol
<whitequark> I compiled it to native code and the object graph is totally different
<whitequark> though it's simpler so I guess it's good ?
<devyn> isn't that to be expected?
<whitequark> no
<whitequark> "global_substitute regexp subst s returns a string identical to s, except that all substrings of s that match regexp have been replaced by the result of function subst. The function subst is called once for each matching substring, and receives s (the whole text) as argument."
<whitequark> >the whole text
<whitequark> how the fuck is this useful exactly
<whitequark> oh, shitty global state
eligrey has quit [Quit: Leaving]
sharkbot has quit [Remote host closed the connection]
sharkbot has joined #elliottcable
<devyn> whitequark: can you actually send a blank data: message with the id:?
<devyn> it doesn't trigger onmessage otherwise
<whitequark> devyn: oh, sure
<whitequark> one sec
<whitequark> devyn: pushed
<devyn> thanks
<whitequark> http://i.imgur.com/dHy10Li.png much better
<devyn> sweet, multiplexed stream is working. no error handling or anything yet though
<devyn> whitequark: exxcept for Block(0): #2 lol
<purr> lol
<devyn> whoops, s/xx/x/
<whitequark> devyn: well, that's ocaml's untyped runtime representation for you
<devyn> whitequark: you should probably add make deps or something to make deploy
<devyn> idk whether make deps is enough
<whitequark> devyn: make deps is enough
<whitequark> and yeah I should
<devyn> well now that I know it's enough I could do it :p
<whitequark> please do
<whitequark> I'm screwing with Lwt_unix
trolling has quit [Ping timeout: 245 seconds]
<devyn> whitequark: alright, multiplexed + a few other changes are now live
trolling has joined #elliottcable
<whitequark> devyn: neat
<whitequark> devyn: what next?
<whitequark> devyn: also, your candle chart is awesome <3
<devyn> probably history grabbing/error handling. but I'm going to sleep; I have work tomorrow
<devyn> thanks :)
<whitequark> oh, sure
<devyn> whitequark: before I go... surely this means they're not getting the same messages? http://i2.minus.com/iBT3FfnhKjhNI.png
<devyn> (ignore the filled rectangles on FF; Chrome won't fill them for some weird reason)
<devyn> think I prefer them unfilled anyway
<whitequark> devyn: oh
<whitequark> see, the ticker period currently starts at the moment you've requested the ticker
<whitequark> I should start it at `now mod period`, not `now`
<devyn> yeah
<devyn> ok
<whitequark> er, now - now mod period
<devyn> makes sense
<whitequark> devyn: filled/unfilled: it looks waaaay better if you make them smaller
<whitequark> 15px across
<whitequark> and make the central part dimmer than border
<whitequark> well, look at bitcoinwisdom :3
<devyn> that will be left up to the user; it will be adjustable like bitcoinwisdom
<devyn> and yes I'm basically copying them
<devyn> :p
<whitequark> yeah that's fine
<whitequark> I copied them too
<devyn> it'll be more unique once we get the actual bot features in
* whitequark nods
<devyn> whitequark: btw, I'll probably end up calculating current period ticker clientside, for partial/current period charting
<whitequark> devyn: yeah, server-side it's mainly for history
<devyn> well I'll still reconcile with the server as I get them
yorick has joined #elliottcable
fwg has joined #elliottcable
Sgeo has quit [Read error: Connection reset by peer]
alexgord_ has joined #elliottcable
eligrey has joined #elliottcable
<whitequark> devyn: ok I'll be sleeping for longer today, so some things worth mentioning
<whitequark> 1) I wrote a shitton of code, check it out
<whitequark> 2) I've switched to trunk cohttp because it has lots of fixes we need
<whitequark> git clone git://github.com/avsm/ocaml-cohttp ; opam uninstall cohttp ; opam pin cohttp ocaml-cohttp ; opam install cohttp
<whitequark> 3) I fixed the ticker live stream, but the very first element it gives you is broken
<whitequark> because it's an aggregate over a partial period
<ELLIOTTCABLE> whitequark: what are you and devyn working on now?
<ELLIOTTCABLE> so, wait, devyn and alexgord_ are working on a Bitcoin trading bot, and he's working on something with whitequark *too*?
<ELLIOTTCABLE> I wish I was still a programmer. Envy you guys, sounds like fun.
<whitequark> ELLIOTTCABLE: devyn and me
<whitequark> why can't you be a programmer?
<ELLIOTTCABLE> haven't spent more than fifteen minutes straight in front of a computer for … idk, months, now?
<ELLIOTTCABLE> except on flights.
<ELLIOTTCABLE> to/from San Francisco, I wrote a little, but that's about it.
<ELLIOTTCABLE> I also vaguely realized I'm a terrible programmer, and I tend to be *really* bad at motivating myself to do something I don't think I'm good at.
<whitequark> mhmm.
<ELLIOTTCABLE> (I'm “walk away” not “improve myself” by default, with everything. My single worst personality trait.)
<ELLIOTTCABLE> and, on that note, time to go find pants and leave again.
<ELLIOTTCABLE> dropped a banana milkshake on the floor, exploded ALL OVER me. ಠ_ಠ
<yorickpeterse> ELLIOTTCABLE: so then what the fuck *do* you do?
<yorickpeterse> besides dropping stuff on the floor
<ELLIOTTCABLE> government secret can't talk about it
<ELLIOTTCABLE> soz
<ELLIOTTCABLE> didn't realize you can change your address online, now
<ELLIOTTCABLE> that took all of two minutes. really impressed.
<ELLIOTTCABLE> the future is Grrrrreat!
<yorickpeterse> so you're unemployed?
<ELLIOTTCABLE> yorickpeterse: I tend not to discuss my financial status, with a couple exceptions.
<ELLIOTTCABLE> That said, I *am* looking for a local day job. If you happen to know anybody in Chicago … =)
<yorickpeterse> I don't live in the US
<ELLIOTTCABLE> trying to find a good barber in the city is a bitch.
<alexgord_> ?
<alexgord_> yorickpeterse: he has fuck you money by proxy
eligrey has quit [Quit: Leaving]
eligrey has joined #elliottcable
<cuttle> HI
<purr> cuttle: hi!
<cuttle> hi eligrey
<cuttle> ELLIOTTCABLE: *
<cuttle> eligrey: nothing wrong with you but i was meaning to hilight ec
<cuttle> lol
<purr> lol
soroush has joined #elliottcable
<soroush> hi am i doing this right
<ELLIOTTCABLE> probably.
<soroush> great!
<ELLIOTTCABLE> cuttle: “eligrey: nothing wrong with you”
<ELLIOTTCABLE> lies. dirtyfilthylies.
<ELLIOTTCABLE> alexgord_: you around? soroush wants to talk objc.
<ELLIOTTCABLE> soroush: I'll be in-and-out, FYI
<soroush> no worries
<soroush> anyway it's a somewhat crazy idea but i've been thinking about it a lot
<soroush> objective c needs a rails like framework to rid us of a lot of the boilerplate
<soroush> the problem is i know a lot about objective c and not nearly as much about ruby or rails
<ELLIOTTCABLE> jesus christ, what is up with my Internet
<ELLIOTTCABLE> I am probably the only person in the world with this, er, situation … but I'm routinely getting twice, or more, the bandwidth I'm paying for. Tested several times since I moved in, in the last month or so.
<ELLIOTTCABLE> They miiiiiiight just be giving speedtest.net traffic higher priority, though.
<soroush> what city do you live in
<ELLIOTTCABLE> Chicago
<ELLIOTTCABLE> :D
<ELLIOTTCABLE> why do you need to know Ruby or Rails? Why copy Rails *at all*?
<ELLIOTTCABLE> you've identified the problem, and know a lot about the environment: solve the problem as you know it, with respect to the environment as you know it, without reference to how <other system> in <other environment> solves <other problem>.
<soroush> i don't, but a lot of the paradigms around how models and controllers work with rest are really instructive imo
<soroush> i'm definitely solving it in a very objective-c-esque way, but also 90% of the time we connect our apps to apis powered by rails
<soroush> and whether or not the exact way that it works is good, it's definitely the go-to framework for web development
<soroush> yes there's django and yes there's sinatra, but neither of them have the traction
<ELLIOTTCABLE> hah.
<ELLIOTTCABLE> (forgive me, I'm mostly a Node guy, nowadays, so that's mildly funny.)
<ELLIOTTCABLE> so, what you *really* want to do, is to write an ObjC framework for apps that interface/integrate with Rails apps?
<soroush> ok SORRY node is good too
<soroush> i started it last night, just kicking some stuff around
<soroush> 90% of the time in an objective c app you want to get a list of objects (from somewhere, maybe an API, maybe local storage) and then display the list
<soroush> it really shouldn't be more complicated than "here's the url my objects are at, and here's how each object looks like in a table view cell"
<soroush> but instead there's a bunch of BS boilerplate around it and a class that should be 15 lines of code is now 200
<joelteon> chef is just an all around terrible piece of software
<joelteon> everything about it as absolutely abysmal
<joelteon> is*
<alexgord_> hi soroush
<soroush> hi
<purr> soroush: hi!
<alexgord_> you want to make web apps with objc?
<alexgord_> you sound insane, you'll do well here
<soroush> yes, i do, but that's not related to this particular project
<alexgord_> tbh
<alexgord_> what I want is a web server for C++
<alexgord_> with a focus on security
<alexgord_> ObjC wouldn't seem to have many advantages over ruby
<alexgord_> but C++... it would solve a lot of peoples' problems with slowness
<soroush> i would bet objective c is really fast too, especially compared to ruby
<alexgord_> nah
<alexgord_> about the same I'd think
<alexgord_> what makes languages slow is memory layout and allocation
<alexgord_> ObjC allocates all objects on the heap
<alexgord_> same as ruby
<alexgord_> only advantage is ARC I suppose
<soroush> you'd definitely get huge gains over the ruby GC though
<soroush> yeah
<soroush> and not to mention reasonable threading
<alexgord_> but that's more to do with ruby having a shit GC, than ARC being fast
<alexgord_> jruby might be better
<alexgord_> yeah GCD fucking rocks
<soroush> and the OO patterns are way way better than C++
<alexgord_> soroush: wait I just realized... what are you going to RUN it on?
<alexgord_> soroush: ehhhhh depends on the project
<soroush> so ok: the actual thing i want to do is make a new framework for making iPhone apps
<soroush> tangentially, unrelatedly, i also want to put objective c on the server
<alexgord_> on linux?
<soroush> nah it would have to be os x server unfortuantely
<soroush> since all the important libraries are in foundation and cocoa
<soroush> http://kevinlawler.com/objective-c i read and liked this post
<alexgord_> thing is, nobody can run OS X server
<alexgord_> since you can't virtualize it
<alexgord_> so you have to go to the expense of buying a mac, then using macminicolo or similar
<alexgord_> and most people don't have that sort of money
<soroush> right of course
<alexgord_> (I mean you *can* virtualize OS X, but there's no VPS providers who do afaik)
<soroush> well it's against the os x TOS
<soroush> that's why they don't do it
<alexgord_> nah it's not
<alexgord_> as long as it's running on mac hardware
<alexgord_> I think
<soroush> bare metal mac pro trash cans in a giant data center
<joelteon> so i get to drive up to SFO at 11 PM at night
<joelteon> unless i want to take the train
<joelteon> maybe I should take the train
<joelteon> I should probably take the train
<alexgord_> soroush: anyway so what do you want to do exactly?
<soroush> take the boilerplate out of writing objective and using cocoa/cocoa touch
<alexgord_> but there's so much boilerplate! which boilerplate in particular?
<soroush> all of it, if i can help it
<soroush> mostly around networking and tableviews
<soroush> also core data/persistent storage, also forms
<alexgord_> problem is
<alexgord_> where these kind of projects fail is making the win better than the loss
<alexgord_> like, there's no point learning a big framework, if it's so different that you spend all your time doing that
<alexgord_> it ends up being more work than simply writing the boilerplate
<alexgord_> you want something like jquery, where it's *so* much better, that everybody decides to learn it
<joelteon> and you probably can't do that
<soroush> hm, this is a good point
<alexgord_> what I'd do
<alexgord_> is go for the long hanging fruit
<alexgord_> find the *worst* bit of cocoa
<alexgord_> and write something to replace it
<alexgord_> like say requests for python
<alexgord_> everybody uses it now because it's so much better than urllib
<alexgord_> you just have to keep in mind that every new thing you add, actually makes the whole thing worse, because it's more of a burden to learn
<soroush> right, true
<soroush> any other advice?
<alexgord_> nope :P
<alexgord_> jquery for cocoa sounds horrifying and awesome
<soroush> one thing i was thinking about is doing screencasts, the same way dhh did with rails
<soroush> showing like here's a basic app, i made it in 8 minutes
<soroush> i think reactive cocoa has to be jquery for cocoa
<soroush> and it is horrifying and it is awesome
<alexgord_> oh yeah that's the one I was taking the michael out of on twitter :P
<alexgord_> reactive cocoa is a brilliant way of showing how NOT to do things. it actually makes the code less readable
<alexgord_> I love the <example code> could be expressed in RAC like so: <longer example code>
<soroush> lol
<purr> lol
<soroush> alex how can i find you on twitter
<alexgord_> @alextgordon
<soroush> baller i'm @khanlou
<soroush> mind if i hit you up a little later when i think i have something sensible?
<soroush> it'll probably be weeks
<soroush> oh wow you made chocolat cool
<alexgord_> lolol I'm internet famous!
<purr> lolol
<alexgord_> soroush: jeannicolas too
<alexgord_> everybody always forgets jeannicolas!
<soroush> my bad y'all
<soroush> ok i'm going home peace everyone good to talk to yall
* jeannicolas waves
soroush has quit [Quit: Page closed]
<ELLIOTTCABLE> gods
<ELLIOTTCABLE> so much everything-is-a-nail, I want to poop
<ELLIOTTCABLE> go away objc you are wrong. wrongwrongwrongeatadick.
<jeannicolas> TIL: obj-c is as fast/slow as ruby...
<alexgord_> jeannicolas: believe it!
<jeannicolas> l2arc
<alexgord_> lrn2jruby
<jeannicolas> not interested
<alexgord_> :P
<alexgord_> there's nothing special about ARC that makes it faster than a good GC
<jeannicolas> well.. it's not a gc
<alexgord_> technically it is!
<alexgord_> under the traditional definition of GC
<jeannicolas> except.. it's not
<alexgord_> retain/release is GC
<jeannicolas> sure… so's your mom
<alexgord_> ...are you calling my mother a refuse collector?
<jeannicolas> under your definition
<alexgord_> jeannicolas: funny thing is, python's old GC was basically ARC
<alexgord_> then they added a cycle collector relatively recently
<jeannicolas> when I say GC I mean… GC done at runtime… not "any form of memory management that's not COMPLETELY MANUAL"
<alexgord_> anyway, point is a modern moving collector like the one in oracle jvm can absolutely be competitive with ARC
<jeannicolas> well prove it
<alexgord_> jeannicolas: right... and ARC satisfies all of that
<alexgord_> it's done at runtime *check*
<alexgord_> it's automatic *check*
<alexgord_> hell it even has weak references
cuttle has quit [Ping timeout: 272 seconds]
cuttle has joined #elliottcable
<jeannicolas> … it adds release calls automatically at compile time...
<alexgord_> the calls are made at runtime
<alexgord_> compile time "GC" would be storing stuff on the stack or something
<alexgord_> 50% of ARC is a runtime library
<alexgord_> with the autorelease pools, the objc_retain/objc_release/etc functions, the weakrefs
<jeannicolas> oh so what's a memory management system where the calls are not made at runtime?
<alexgord_> alloca
<jeannicolas> just realized I actually don't care!… so… did you benchmark jruby and obj-c?
<alexgord_> man you and whitequark would get along
<purr> hah
<alexgord_> lol purr
<purr> lol
<jeannicolas> alexgord_: being pedantic about memory management isn't really interesting… you know what I mean when I say GC… and if you don't well… I don't really care either… still curious as to if JRuby is faster than obj-c...
<alexgord_> jeannicolas: I dunno, GCs come in all shapes and sizes
<jeannicolas> you're thinking about penises
<alexgord_> that too
<alexgord_> e.g. haskell's gc has less in common with ruby's gc than ruby's gc has in common with ARC
<alexgord_> only reason people don't want to call ARC a GC is political
<jeannicolas> I blame republicans
<alexgord_> I blame david cameron
<ELLIOTTCABLE> don't blame republicans
<jeannicolas> actually I blame Stephen Harper
<cuttle> clojure <333
<cuttle> also vim is very nice