#clojure logs

2011-09-30

00:00ZolrathHm I'm trying to use Google Closure like JQuery and I don't know if that's a good idea
00:00amalloycark: you can only adjust reflection warnings around top-level forms, because they are compiled as a unit
00:00carkamalloy: that's unfortunate =(
00:01carkmy problem is with proxy-super
00:01carkit always gives warnings
00:01carkso i need to expand it to proxy-call-with-super
00:01carkand manually anotate it
00:01ZolrathTrying to figure out a way to easily do things like $("li:last") but I can't find a way to select the last occurance of a given element in goog.dom, everything Ive found that seems like it would.. doesn't
00:01carkwhile i really don't care about performances for this part
00:03carkthere is some kind of a barrier which prevent macros to propagate type hints
00:03carki'm guessing there is some good reason for that
00:03carkbut it's annoying
00:05amalloycark: there is no such barrier
00:08carkwell there is
00:08carktrying to make a short example
00:09carkactually you're right... maybe my earlier tests were bad
00:10carkor it changed at some point
00:12carkwell then it begs the question, why is the "this" captured symbol not annotated in a proxy declaration ?
00:16brehauthttps://plus.google.com/115094562986465477143/posts/Di6RwCNKCrf another reason lein (ok and cake) are great
01:50amalloyso for some f which takes a while to compute, (memoize f) may result in f being called multiple times for the same args, as different threads each look in the cache, see nothing there, and compute f. is this perceived as a problem?
01:52companion_cubeit would be more efficient to waitt for the first thread that began computing the value
01:52companion_cubemaiss then you have to know that some thread is computing it
01:52companion_cubebut then*
01:54cemerickmaking it so that f returned a future that contains the result for a given set of parameters gets around that cleanly.
02:06amcnamaraRaynes: how's meet clojure coming along these days?
02:08amalloyanyway, if anyone is interested in that, https://gist.github.com/1252810 is a solution that avoids that problem (trading it for a slightly slower fast-path)
03:10mindbender1please, In a (let [foo (baz)] foo) does the foo get the value of baz immediate eval or is eval delayed until foo is called outside []?
03:11carkimmediate
03:11mindbender1cark: ok thanks
03:11mindbender1how are you today?
03:12carkim' fine, how about you ?
03:12mindbender1I'm fine thank you... you guys are being of much help
03:13cark=)
03:14carkyou can use delay and force if you need delayed evaluation
03:14mindbender1how would I rewrite the let?
03:16cark,(let [a (delay (+ 1 2))] @a)
03:16clojurebot3
03:16carkor
03:17cark,(let [a (delay (+ 1 2))] (force a))
03:17clojurebot3
03:18carkyou can also start the computation directly with futures
03:21mindbender1ok thanks
03:28carkgrrr there is absolutely no way to have good looking text rendering with swing >>
04:04Fossi,find
04:04clojurebot#<core$find clojure.core$find@594d1d>
04:04Fossi#find
05:01Blktgood day everyone
07:31markc,(+ 1 2)
07:31clojurebot3
07:34gfrederickscan gen-class create vararg methods?
07:34clgv,(ns-publics *ns*)
07:34clojurebot{}
07:35clgv&(ns-publics *ns*)
07:35lazybotjava.lang.SecurityException: You tripped the alarm! ns-publics is bad!
07:36clgv,(ns-publics 'clojure.core)
07:36clojurebot{sorted-map #'clojure.core/sorted-map, read-line #'clojure.core/read-line, re-pattern #'clojure.core/re-pattern, keyword? #'clojure.core/keyword?, unchecked-inc-int #'clojure.core/unchecked-inc-int, ...}
07:37clgvWhen doing a (ns-publics *ns*) I get #<ClassCastException java.lang.ClassCastException: clojure.lang.Var cannot be cast to clojure.lang.IObj>
07:37gfredericksclgv: any context?
07:37gfredericksyou just fire up a repl and that's what happens?
07:37clgvgfredericks: I start CCW's REPL for a file
07:38gfredericksokay then I don't know what's going on :)
07:49clgvhm yeah. in normal repl it just works.
07:50clgvreally strange. might be some problem with nrepl
07:50clgvhm lol. it works in another file, but files in that one reproducable
07:56clgvok a related question to ##(doc defn)
07:56lazybot⇒ "Macro ([name doc-string? attr-map? [params*] body] [name doc-string? attr-map? ([params*] body) + attr-map?]); Same as (def name (fn [params* ] exprs*)) or (def name (fn ([params* ] exprs*)+)) with any doc-string or attrs added to the var metadata"
07:57clgvthat means I can define a fucntion like (defn f {:meta-attr :fn} [x] (inc)) right?
07:57clgvs/(defn f {:meta-attr :fn} [x] (inc))/(defn f {:meta-attr :fn} [x] (inc x))
08:03clgvoh right using metadata {:type :something} in a defn causes the problem
08:23dbushenkohi all!
08:24dbushenkohow to sort a clojure vector?
08:24Raynes&(sort [4 2 1 3])
08:24lazybot⇒ (1 2 3 4)
08:25Raynes&(sort-by - [3 2 1 4])
08:25lazybot⇒ (4 3 2 1)
08:26clgvor if it has to be a vector again: ##(vec (sort [3 1 4 2]))
08:26lazybot⇒ [1 2 3 4]
08:27Raynes(but it probably doesn't, so don't bother changing it back unless it actually *needs* to be a vector)
08:27dbushenkothank you guys!
08:27dbushenkobut what if the vector looks like this:
08:28dbushenko[[:a 1] [:b 3] [:c 2]]
08:28dbushenkoprobably I should use sort-by?
08:28clgv&(sort-by first [[:a 1] [:b 3] [:c 2]])
08:28lazybot⇒ ([:a 1] [:b 3] [:c 2])
08:28RaynesIt'll sort properly ##(sort [[:b 3] [:c 2] [:a 1]])
08:28lazybot⇒ ([:a 1] [:b 3] [:c 2])
08:28clgv&(sort-by second [[:a 1] [:b 3] [:c 2]])
08:28lazybot⇒ ([:a 1] [:c 2] [:b 3])
08:28dbushenkogreat! thanks!
08:29Raynesclgv: We're a team, you know.
08:29Raynes<3
08:29clgvlol^^
08:29clgvwell. had to wait for lein uberjar ;)
08:43dbushenkois there a way to change the order of (sort-by second my-vector) ?
08:48gfredericksdbushenko: the argument order? just gotta define your own function
08:49gfredericksdbushenko: if you do that alot you can create a helper: (defn reverse-args [f] #(apply f (reverse %&)))
08:49dbushenkooh, great! thanks!
09:08clgvdbushenko: just in case you are using -> there is also ->> and hence maybe no need to reverse arg order
09:09dbushenkoclgv, thanks!
09:16TimMc,(class (sort [1 2 3]))
09:16clojurebotclojure.lang.ArraySeq
09:17TimMc,(class (vec (sort [1 2 3])))
09:17clojurebotclojure.lang.PersistentVector
09:17clgv,(class (sort (range 1000)))
09:17clojurebotclojure.lang.ArraySeq
09:17clgv,(class (sort (range 100000)))
09:17clojurebotclojure.lang.ArraySeq
09:17clgv,(clojure-version)
09:17clojurebot"1.3.0-master-SNAPSHOT"
09:18clgv&(class (sort (range 1000)))
09:18lazybot⇒ clojure.lang.ArraySeq
09:18clgv&(clojure-version)
09:18lazybot⇒ "1.2.0"
09:18TimMcOh, that's handy.
09:39`fogusseancorfield: Did you have a draft of a documentation plan for 1.4? If so then I'd love to get that up on the wiki. (I recall that you mentioned you'd take a stab at it, but if my memory is bad then please smack me)
09:52BlafaselAny documentation for math.combinatorics? The old github repository gives a 404, the new contrib build (0.0.1) seems to be just a binary blob..
09:52BlafaselHow do you guys explore things like this?
09:52stuartsierraBlafasel: Read the source!
09:53BlafaselYeah.. Where is it?
09:53fdaoudwtfm?
09:53stuartsierrahttps://github.com/clojure/math.combinatorics/blob/master/src/main/clojure/clojure/math/combinatorics.clj
09:54Blafaselstuartsierra: Thanks.. I searched clojure.org (ended up in a dead end on the page on the old contrib library) and the new 'where did contrib go' page, which only links to the build status / artifact on maven, as far as I can see.
09:54BlafaselAppreciated!
09:56thorwil_what happens if you use libraries that depend on varying versions of clojure?
09:57thorwil_i'm considering to try clojure 1.3 with appengine-magic's beta branch
09:58thorwil_but do moustache and hiccup actually play along with 1.3?
09:58stuartsierrathorwil_: If you're using a Maven-based dependency resolution (Lein, Cake) it will resolve to the version you declare.
09:58stuartsierraObviously the library has to be compatible with that version of Clojure.
10:02thorwil_so hiccup should be fine: http://groups.google.com/group/ring-clojure/browse_thread/thread/d833d6741e1a8d32
10:05fdaoudcan't wait for that book to come out! :)
10:21clgvCan I limit the number of threads that is used for agents?
10:28carkwhen using send, it's already limited
10:28gfredericksis it impossible to generate a vararg function with gen-class?
10:32clgvno. I mean the total amount of threads that my programm is able to use?
10:33carkyou need to use threadpools then i guess
10:33carkdon't know how to hook the agents into your own thread pool
10:33clgvwell agents already do have their threadpool ;)
10:34carkyou're the reflecgtion wizard, i guess you'll patch that just like you want it =)
10:34dpritchett_Anyone know of a nice github-style open source repo browser I can set up to serve read access to my local repos?
10:35clgvlol, in that case something in the language is preferable.
10:35dpritchett_I can even consider switching SCMs if the solution is good enough
10:35clgvyou cant always use as many threads as processors are there, since others are using that machine too, and there is an agreement on how much are allowed to use
10:36carki don't think there's any facility on the clojure side of things to do what you want
10:36clgvbut why not? it's not that uncommon...
10:36carkbut the java implementation of agents might have some puggable stuff, you'd need to check the source
10:37carkhey i don't know !
10:37clgvI think it's a pretty straight forward use case
10:39carkhttps://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Agent.java
10:40carklooks like pretty final to me
10:40clgvI am already overthere ;)
10:41clgvdamn thats true.
10:53clgvhmm even in 1.3 it's the same :/
11:04cemerickLooks like dev.clojure.org/jira is having issues?
11:06clgvhmm ThreadPoolExecutor has methods to change the number of Threads used, so it's no java problem but something missing in the clojure implementation of agents
11:06fdaoudthat's what jira is for - issues\
11:06fdaoudj/k ;)
11:06cemerickfdaoud: well done :-P
11:06clgvfdaoud: lol!
11:06fdaoudit's Friday :-)
11:27zerokarmaleftgreetings, programs.
11:37technomancyclojurebot: do you believe in the users?
11:37clojurebotIt's greek to me.
11:37fdaoudclojurebot: parlez-vous francais?
11:37clojurebotNo entiendo
11:38fdaoudclojurebot: who is Rich Hickey?
11:38clojurebotis_rhickey_a_minor_god is yes
11:38foodoofrench != spanish(?)
11:38fdaoudclojurebot: what is Lisp?
11:38clojurebotlisp is the red pill
11:38fdaoudman, they thought of *everything*
11:38foodooclojurebot: what is the blue pill?
11:38clojurebotNo entiendo
11:39fdaoudclojurebot: what is Java?
11:39clojurebothttp://java.sun.com/docs/books/tutorial/java/index.html
11:39fdaoudclojurebot: what is Cobol?
11:39clojurebotThe use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offence. -- Dijkstra
11:39foodooclojurebot: (world-dominion)
11:39clojurebotNo entiendo
11:39fdaoudclojurebot: what is Object-Oriented Programming?
11:39clojurebothttp://www.math.chalmers.se/~rjmh/Papers/whyfp.pdf
11:39fdaoudlove it :D
11:40foodooclojurebot: are you an AI?
11:40clojurebotHuh?
11:40foodoothat reaction seems pretty human to me
11:40fdaoudclojurebot: what do you have to say about women?
11:40clojurebotwomen are just jealous, since lisp has nice curves. -- Chousuke
11:41fdaoudclojurebot: what do you have to say about religion?
11:41clojurebotI don't understand.
11:41clgvclojurebot: what is the blue pill?
11:41clojurebotblue pill is viagra
11:41fdaoudclojurebot: what do you have to say about politics?
11:41clojurebotI don't understand.
11:41gtrakclojurebot, java?
11:41clojurebot
11:41foodooclojurebot: what do you have to say about Java?
11:41clojurebot
11:41fdaoudclojurebot: what is Scheme?
11:41foodoodammit, two fools, same thought :D
11:41clojurebotscheme is Scheme is like a ball of snow. You can add any amount of snow to it and it still looks like snow. Moreover, snow is cleaner than mud.
11:42gtrakclojurebot, lisp?
11:42clojurebot"Like DNA, such a language [Lisp] does not go out of style." - Paul Graham, ANSI Common Lisp
11:42foodooclojurebot: recursion
11:42clojurebotI don't understand.
11:42foodooa clojurebot that doesn't understand recursion. That's bad
11:42gtrakclojurebot, recursion is recursion
11:42clojurebotAlles klar
11:42gtrakclojurebot, recursion
11:42clojurebotrecursion is recursion
11:43fdaoudclojurebot, John McCarthy?
11:43clojurebotGabh mo leithscéal?
11:43foodooah, so he's an AI after all :)
11:43fdaoudHuh?
11:43fdaoudclojurebot: who is John McCarthy?
11:43clojurebotIt's greek to me.
11:43fdaouddisappointed!
11:43gfredericksfdaoud: you can teach him things
11:44fdaoudgfredericks: really? cool, show me
11:44gfredericksclojurebot: John McCarthy is nobody of note.
11:44clojurebotOk.
11:44gfredericksclojurebot: who is John McCarthy?
11:44clojurebotJohn McCarthy is nobody of note.
11:44clgvlol what??
11:44lazybotclgv: Definitely not.
11:44foodooclojurebot: NP == P?
11:44clojurebothiccup is http://tinyurl.com/426og7n
11:44clgvdoes clojurebot hate that many questions???
11:44lazybotclgv: Oh, absolutely.
11:45fdaoudclojurebot: without John McCarthy we would not be here today.
11:45clojurebotJohn McCarthy is nobody of note.
11:45fdaoudclojurebot: John McCarthy is someone without whom we would not be here today.
11:45clojurebotc'est bon!
11:45gfredericksfdaoud: I think you have to format it as 'X is Y'
11:45foodooclojurebot: Are macros good?
11:45clojurebotBarking spiders!
11:45fdaoudclojurebot: who is John McCarthy?
11:45clojurebotJohn McCarthy is nobody of note.
11:45foodoohow mysterious...
11:45fdaoudcan't override I guess
11:45gfredericksclojurebot: who is John McCarthy?
11:45foodoohe's fooling around with us :D
11:45clojurebotJohn McCarthy is nobody of note.
11:45gfredericksclojurebot: who is John McCarthy?
11:45clojurebotJohn McCarthy is someone without whom we would not be here today.
11:46gfredericksclojurebot accepts multiple thruths
11:46gfrederickstruths
11:46foodooclojurebot: where is here?
11:46clojurebotPardon?
11:46gtrakclojurebot, do you exist?
11:46clojurebotIt's greek to me.
11:46foodooclojurebot: What is the solution to all problems?
11:46clojurebotexcusez-moi
11:47gfredericksclojurebot: what is the answer to the great question of life, the universe, and everything?
11:47clojurebottufflax: there was a question somewhere in there, the answer is no
11:47fdaoudclojurebot: Francais is Le langage de l'amour
11:47clojurebotIk begrijp
11:47fdaoudclojurebot: what is Francais?
11:47clojurebotFrancais is Le langage de l'amour
11:47foodooclojurebot: goto hell
11:47clojurebotHello, mcoffbyone
11:47fdaoudbwahaha
11:47foodooi don't get that one
11:47foodooclojurebot: hell
11:47fdaoudgot you there
11:47clojurebotBUENOS DING DONG DIDDLY DIOS, fRaUline foodoo
11:48foodooclojurebot: goto
11:48clojurebotI don't understand.
11:48fdaoudclojurebot: how sad are we, really?
11:48clojurebotI don't understand.
11:48foodooclojurebot: why is 1 true and 0 false?
11:48clojurebotGabh mo leithscéal?
11:48foodooclojurebot: you are disgressing
11:48clojurebotGabh mo leithscéal?
11:49foodooseems like there's a knot in his tongue now
11:49foodooclojurebot: ()
11:49clojurebot() is awesome
11:49foodooclojurebot: xml
11:49clojurebotxml is like violence; if it's not working, you're not using enough of it.
11:49foodoowohooho
11:49clgvlol
11:49clgvclojurebot: cloud computing
11:49clojurebotHuh?
11:50foodooclojurebot: Microsoft
11:50clojurebotI don't understand.
11:50gfredericksclojurebot: java
11:50clojurebot
11:50foodoois that a cup?
11:50fdaoudJava logo
11:50gfredericksclojurebot: scala
11:50clojurebotUnfortunately the standard idiom of consuming an infinite/unbounded resource as a stream can be problematic unless you're really careful -- seen in #scala
11:50foodoocomputing itself can be problematic ;)
11:51gfredericksunless you're really careful
11:51fdaoudfoodoo: http://bp2.blogger.com/_DV4mNdm8j8Q/SIHBlsbtFAI/AAAAAAAAANc/qpphGzkZSPU/s1600-h/322px-java-logo.svg-1
11:51fdaoudclojurebot: ruby
11:51clojurebotChunky bacon!
11:51fdaoudclojurebot: groovy
11:51clojurebotIt's greek to me.
11:51foodoofdaoud: thanks. But I know what the java logo looks like. But in this terminal you can hardly make it out ;)
11:51clgvclojurebot: c++
11:51clojurebot:negative/num-1 + :positive/num-1 = :zero/zero
11:51fdaoudfoodoo: ok :)
11:52clgvclojurebot: c#
11:52clojurebotGabh mo leithscéal?
11:52clgvclojurebot: .net
11:52clojurebotGabh mo leithscéal?
11:52foodooclojurebot: BASIC
11:52clojurebotPardon?
11:52foodooclojurebot: )(
11:52fdaoud,(repeatedly #(+ 40 2))
11:52clojurebotExcuse me?
11:52clojurebot(42 42 42 42 42 ...)
11:52clgvclojurebot: C#
11:52clojurebotExcuse me?
11:52foodooclojurebot: )(
11:52clojurebotNo entiendo
11:52gtrakclojurebot, ()
11:52clojurebot() is awesome
11:53gtrakclojurebot, (damn)
11:53foodooclojurebot: json
11:53clojurebotI don't understand.
11:53clojurebothttp://dakrone.github.com/cheshire/
11:53foodooclojurebot: UNIX
11:53clojurebotit's a UNIX system! I know this!
11:53foodooclojurebot: iteration
11:53clojurebotamac: So it's a seq of connections? And what do you do with them? I understand what disjoined sets look like, but the representation and iteration is where I run into trouble.
11:56pjstadigclojurebot: suddenly
11:56clojurebotBOT FIGHT!!!!!111
11:57pjstadigclojurebot: suddenly
11:57clojurebotCLABANGO!
12:01clgv&(println "Clojurebot: take this!")
12:01lazybot⇒ Clojurebot: take this! nil
12:02clgvhm damn that worked a while ago ;)
12:02gfredericks,(println "&(println \"Clojurebot: I'm sorry, I didn't mean it. Friends?\")")
12:02clojurebot&(println "Clojurebot: I'm sorry, I didn't mean it. Friends?")
12:02lazybot⇒ Clojurebot: I'm sorry, I didn't mean it. Friends? nil
12:02clgv&(println "clojurebot: json")
12:02lazybot⇒ clojurebot: json nil
12:02clgvharrharr^^
12:09crazyFoxhi. i'd like to use clojure.math.numeric-tower in a leiningen project. on http://dev.clojure.org it says this project is awaiting releases. does that mean i cant use it as it is?
12:22gfredericksisn't it weird that library releases aren't published with something like a commit-id? So that e.g. you could put the hash in your project.clj and validate the jars as they're downloaded?
12:29dnolenawesome post http://sritchie.github.com/2011/09/29/getting-creative-with-mapreduce.html
12:39duck1123Does anyone know what I can do if lein marg is extracting all of my ;; comments, but none of my docstrings?
12:41pyrduck1123: there's an open issue for that
12:42pyrduck1123: marginalia is broken in that regard
12:44duck1123I thought I had read that it was fixed, guess not
13:00kzarCan anyone recommend a library to generate HMAC-SHA-512s?
13:04crazyFoxthe slamhound plugin from technomancy is a really handy thing. though the project didnt move since may. is there a later/better version?
13:11duck1123kzar: you could always use the java libs
13:12kzarduck1123: Yea exactly, I've done no Java though so I wasn't sure which library was best to use
13:12technomancycrazyFox: the easy parts all got finished. =)
13:12TimMckzar: Java standard libs should do it.
13:12technomancypretty-printing is hard to do right though
13:12gfrederickstechnomancy: is it expected for lein to break under gcj 1.5?
13:13gfredericks(no big deal if so)
13:13technomancygfredericks: I'm not aware of any clojure code that works under gcj
13:13duck1123kzar: http://download.oracle.com/javase/6/docs/api/java/security/MessageDigest.html
13:13gfrederickstechnomancy: very good :)
13:14gfredericksI figured that was the case
13:14TimMc,(java.security.MessageDigest/getInstance "MD5")
13:14clojurebot#<Delegate MD5 Message Digest from SUN, <initialized>
13:14clojurebot>
13:14TimMc,(java.security.MessageDigest/getInstance "SHA512")
13:14clojurebot#<RuntimeException java.lang.RuntimeException: java.security.NoSuchAlgorithmException: SHA512 MessageDigest not available>
13:14technomancygfredericks: IIUC gcj is pretty skooky
13:15TimMc,(java.security.MessageDigest/getInstance "SHA-512")
13:15clojurebot#<Delegate SHA-512 Message Digest from SUN, <initialized>
13:15clojurebot>
13:15TimMckzar: ^
13:15kzarduck1123, TimMc: Thanks
13:17crazyFoxtechnomancy: is was not rly meant as a criticism... just wasnt sure if anybody had taken it (even) further
13:17gfrederickstechnomancy: but that's what my fresh install of debian comes with
13:17gfrederickstechnomancy: which is so much not your fault it's not even hilarious
13:18fdaoudcemerick: just got a note from amazon saying your book is delayed..
13:18technomancygfredericks: heh. there's talk on the debian-java-maintainers list to drop gcj as the default soon. the only reason it's there now is that openjdk isn't so hot on MIPS or some such.
13:18cemerickfdaoud: hah, that it is :-|
13:18gfrederickstechnomancy: what? They're willing to break all of my MIPS laptops??
13:18lazybotgfredericks: What are you, crazy? Of course not!
13:18kzarIs it possible to stop Enlive wrapping <body> and <html> tags around templates / snippets?
13:19gfrederickslazybot: phew
13:19fdaoudcemerick: are you guys still writing?
13:19cemerickfdaoud: Everything's "done", it's an editing game at this point.
13:20technomancygfredericks: oh noes!
13:20fdaoudcemerick: oh ok. no problem then. it's normal to take 2-3 months from "done writing" to "in print".
13:21cemerickfdaoud: No, there's no real problem. I think O'Reilly had some optimistic timetable in mind (as did we).
13:21S11001001gfredericks: got a bunch of yeeloong lemotes do you?
13:21S11001001or lemote yeeloongs
13:22cemerickI never had any clue just how demanding writing a book would be.
13:22fdaoudcemerick: I sent in my final chapter end of July, book came out end of October.
13:22cemerickfdaoud: which is your book?
13:22fdaoudcemerick: http://www.amazon.com/Stripes-Development-Pragmatic-Programmers/dp/1934356212
13:23cemerickNice. I like the cover and tagline. :-)
13:23fdaoudcemerick: thanks! I am happy with the positive reviews :)
13:24cemerick5 stars out of 14 — nice!
13:24kzardnolen: Do you know if this ever got sorted out? http://goo.gl/CO7jJ
13:25fdaoudcemerick: made all the hard work worthwhile :)
13:25cemerickfdaoud: https://twitter.com/#!/cemerick/statuses/119825104346677248
13:26cemerick;-0
13:26cemerick;-)
13:26fdaoudcemerick: I knew it would be hard work, I knew it would be even harder than I thought, and then it was even harder than *that*
13:26cemerickfdaoud: agreed.
13:27fdaoudcemerick: that's funny! well, since having been through writing a book, I do pay more attention to books and especially giving positive feedback to the authors of the good ones.
13:27cemerickTrying to do it on top of two other full time jobs was…questionable.
13:30fdaoudcemerick: on the other hand I've been extremely annoyed with some early-access books I've purchased from Manning and 3 years later the final book still has not been finished.
13:30cemerickyeah, I can imagine that's frustrating.
13:30cemerickIronically, I don't really buy programming books.
13:31cemerick(let's keep that between us and the other 300 people here)
13:32fdaoudcemerick: that's ok, I make up your average by buying 2-3 books/month ;)
13:34crazyFoxam i right that slamhound doesnt pick up usages of functions that were defined in the same project (but different namespace)?
13:34fdaoudcemerick: how was it working with co-authors? I was alone. Did you just have to write your part and let the publisher coordinate everything?
13:41technomancycrazyFox: it should pick those up
13:48cemerickAnyone here an HTTP protocol expert?
13:49TimMcYeah, I use a browser like every day.
13:49TimMc:-)
13:49cemericksweet, I need some googling assistance. :-P
13:50TimMchaha
13:50TimMcWhat's the question?
13:51technomancyTimMc: 408
13:51cemericknevermind — was just trying to clarify whether multiple headers of the same type were actually in the spec, or merely allowed via convention
13:57kencauseydepends on the header I believe
13:58cemerickkencausey: Yeah; accept and cache-control seem to explicitly allow for it; others, perhaps not.
13:59enquoraconsidering moving a node.js web app server/proxy to jvm. server-sent event and websocket support required. my understanding is that ring/compojure is unsuitable. correct?
13:59cemerickI was just checking as to whether it's a known pattern.
14:00kencauseySee Section 4.2 of RFC 2616
14:00gtrakenquora, see clj-socketio
14:00gtrakhttps://github.com/ibdknox/clj-socketio
14:01gtrakand http://socket.io/
14:01cemerickkencausey: Thank you. :-) How did I miss that last paragraph…
14:02gtrakenquora, or http://cometd.org/documentation/cometd-java
14:02kencauseycemerick: You just didn't get lucky with a search for multiple like I did ;)
14:02cemerickThat's a long way of saying, multiples of the same header have set semantics for their values.
14:03cemerick(insofar as the comma-delimitation already implies set semantics)
14:03enquoragtrak: which means knocking together routing, authentication support on my own, it appears. looking at aleph
14:04gtrakenquora, ah, does aleph and websockets work together?
14:05enquoraI'm just looking at it, but it decouples request from response, so it appears
14:05gtrakenquora, i think that's necessity when you're talking async, yes?
14:05enquorapretty much
14:06enquoradon't want to reinvent the wheel here, and working from socket support up seems just that. Prefer using clojure to scala, too, if possible ;-)
14:06gtrakibdknox would probably know about it, but he's not around right now
14:07gtrakenquora, socket.io != socket
14:12enquoragtrak: so it doesn't. socket.io looks a little thin on the ground for my purposes, though. need a full http stack that can be exposed to the 'net. That seems to mean using netty in the jvm world.
14:12gtrakwhat's the issue there?
14:12enquorawhere?
14:12clojurebotwhere is log
14:12gtrakthere's a socket.io-netty already built
14:13gtrakhttps://github.com/ibdknox/socket.io-netty
14:13enquoraah, k. the issue then would be documentation ;-)
14:14gtrakyea, all the stuff is pretty fresh, it looks like it hasn't been touched since August 1
14:14enquoralooking for something of an ecosystem, too. most mental energy is going into radical revamping of datastore and html client.
14:15gtraki think the tech isn't mature enough for that yet
14:15enquorayeah. just exploring. there are Scala options, but I'm much less keen on the language
14:16gtrakif I get around to working on it, I'd be willing to spend some brain cells on improving stuff
14:16gtrakcurious about aleph though, didn't know it was an option
14:16enquora*might* be
14:17enquoraI'm comfortable enough in lisp to hack with it a bit right away. scala and assembly (er java) not so much
14:17gtrakclojure should be able to operate with any scala stuff, too
14:19enquorathat's one of the reasons for moving the entire stack to the jvm. we're committed to it already through lucene and elasticsearch. growing tired of a hodgepodge of deployment environments.
14:19gtrakjvm's hot stuff
14:20enquorajust discovered akka, and that seems to resolve the app reliability issues
14:25kzarWith enlive how do I use a snippet from inside a template? As it's a function I've tried just calling it but that gives me an array-map of the structure instead of HTML
14:27`fogusWe need a contrib adoption drive.
14:31technomancy`fogus: I just stripped contrib out of our project at work; the only things that didn't have replacements were to-byte-array, delete-file-recursively, defalias, and throwf
14:31gtrakibdknox, what do you think of aleph for websockets? did you look at it?
14:31technomancy`fogus: modulo transitive deps of course.
14:32ibdknoxgtrak: yep, back when I was building typewire I wanted to use aleph, but it was about 4 orders of magnitude slower than all my other tests
14:32ibdknoxgtrak: it has improved significantly since then :)
14:32gtrakenquora, ^^
14:33kzarAh figured it out (apply str (emit* (snippet-name "args")))
14:36enquoraibdknox: my need is for an app proxy to mediate between multiple datastores and sources, and rich html offline/online clients. server-sent events and websockets part of picture. Only recently returned to jvm, but netty seems to be only viable http stack. correct? need to use existing libs for routing authentication etc
14:38ibdknoxenquora: if you intend to have long standing connections, i.e. websockets, then yes, you definitely want to be on top of netty
14:38ibdknoxwhich is what aleph is built on
14:38ibdknoxI would point out, however, dealing with websockets is a royal pain
14:39ibdknoxand I suggest you consider for a bit whether or not you really need them, or if a simple polling strategy makes more sense
14:39enquorawe really need them
14:39ibdknoxokidoke
14:39enquorapolling - 1999 called and it wants its protocol back
14:40enquorawe need live updates of changes to persistently connected html clients
14:40ibdknoxhah, sure, but it's the only solution that works consistently
14:40ibdknoxin any case
14:40ibdknoxwhat kind of load are you looking at?
14:40enquoratiny at the moment, but not willing to go with a hacked architecture if not necessary
14:40enquoraand it isn't
14:41enquorahundreds of clients connected
14:41enquoranot thousands or more
14:41ibdknoxoh, aleph will breeze through that
14:41ibdknoxI was looking at millions
14:41enquoradon't want to be in a position next year where we can't handle thousands, though
14:42ibdknoxshouldn't be an issue :)
14:43enquoraorders of magnitude less performance doesn't sound encouraging
14:43ibdknoxaleph could handle 5k back when I was actively screwing around with it
14:43enquoraand, want to be ready to deploy on ARM servers next year
14:43ibdknoxenquora: that was 6 months ago
14:43enquoramuch lower horsepower
14:44enquorawill take a look at it
14:44enquorahave just discovered it
14:44ibdknoxthe other option is writing against netty directly
14:44ibdknoxit's a pain
14:44enquorayes
14:44ibdknoxfor an example,
14:44ibdknoxyou can look at my socket.io-netty
14:44enquorahave enough pain moving backend and clients already
14:44enquoratrying to minimize mental load ;-)
14:45ibdknoxhttps://github.com/ibdknox/socket.io-netty
14:45enquorathat may mean keeping the middleware on node.js or python for the moment :-)
14:45ibdknoxif you don't mind having a node server
14:45ibdknoxthat will be by far the easiest solution
14:45enquoraI *do* mind having a node server
14:46enquorabut it is probably the easiest
14:46ibdknoxwhy?
14:46clojurebotibdknox: because you can't handle the truth!
14:46kjeldahlibdknow: Sorry for busting in, but I just logged on. Any pointers for settuping up a websockets server, sharing a port with a traditional noir server?
14:46kjeldahlibdknow=ibdknox *sigh*
14:47ibdknoxkjedahl: I should probably write a simple tutorial for using a noir handler with aleph :)
14:47enquoraibdknox: just as background, coming from erlang environment for this stuff, but library support becoming a problem. can't be writing every support function from scratch :-(
14:48ibdknoxkjeldahl: basically you just use (server/gen-handler) and then use aleph's (wrap-ring-handler)
14:48ibdknoxthen you can run noir on top of netty :)
14:48amalloykjeldahl: you can usually tab-complete usernames
14:48kjeldahlamalloy: Thanks, now I know! Works in ERC also...
14:48ibdknoxenquora: so make the node server completely stupid and only handle connections. Have a queue that tells it what to do :)
14:49kjeldahlibdknox: Thanks, I'll start reading..
14:49ibdknoxenquora: but yeah, I dropped node too
14:50enquoraibdknox: trying to avoid a middleware queue, but it may be necessary
14:51gtrakyou guys heard of chloe? http://www.trottercashion.com/2011/06/13/introducing-chloe.html
14:51enquoraI know I'm in the java ecosystem now, but I'd really like to *cut* complexity ;-)
14:51ibdknoxenquora: my experience shows that the performance characteristics of a websocket server are *entirely* different than normal web servers, we needed to separate them for scaling reasons
14:52gtrakchloe's a middle-man erlang server for websockets
14:52enquoraibdknox: it may be so. Given my current small scale, I'd prefer to factor that one out later
14:53ibdknoxenquora: kjeldahl's question is pertinent to you too then. You can write your websocket code in aleph and just wrap noir to handle all your normal web traffic. Should work nicely :)
14:54enquoraI was listening
14:54ibdknoxgtrak: that wouldn't work for something that essentially streams data back and forth
14:55gtrakhuh?
14:55ibdknoxgtrak: having written some of this stuff from the ground up, I'm leary of things that say they will magically handle all this stuff :)
14:55gtrakwhat's it mean to stream data back and forth?
14:55ibdknoxgtrak: to get information *back* to your server, your server receives a post request from the Chloe server
14:55gtrakyes
14:55ibdknoxlet's say I'm sending position information from the client to the server, updating once per second
14:56ibdknoxchloe will be sending posts at an extreme rate with 100 users
14:57ibdknoxdealing with an http post will incur a much higher overhead than just decoding the websocket format
14:57gtrakah, perhaps, I'm sure there's optimization that could be made there
14:58gtraklike just sockets instead of http requests
14:58ibdknoxyeah
14:59ibdknoxfor many though, the way that works is probably fine :)
14:59gtrakit's much better to do it all in a single jvm
15:00ibdknoxyeah
15:01gtrakbut he made chloe to get people quickly up and running with websockets
15:01`fogusThere is a plan for this
15:01ibdknoxwhich is awesome, because it really is a pain in the ass
15:01ibdknox`fogus: a plan for what?
15:01`fogusthis
15:02TimMcheh
15:02ibdknoxlol
15:02ibdknox"this" in the cljs sense? :)
15:02TimMcsounds like it
15:05ibdknoxTimMc: it was a drive-by planning
15:07enquoraibdknox: our problem is that users work mainly offline. They are connected every few days to submit data and retrieve it. We're really hamstrung by the constraints of connectionless messaging at the moment. I'll admit, though, I have only a general grasp of the architectural implications at the moment
15:07ibdknoxenquora: so why are websockets necessary?
15:08enquoraI should add that the time users remain online is extremely variable. From an operational perspective, we need a way to keep their attention while processing data, sending out messages, etc
15:09ibdknoxenquora: unless the resolution of new data sends is < 30s polling is by far a better solution
15:09enquoraWe have a need to communicate state changes back to browsers
15:09enquorawe have mobile users to content with
15:09enquoraon cell connections where every bit counts
15:09enquoraas does latency
15:10enquorayes, the resolution of new data sends can easily be less than 30s
15:10enquorawe need soft realtime
15:10ibdknoxrighto
15:10ibdknoxat that point you're "streaming" and wss makes sense
15:10ibdknoxkeep in mind
15:10ibdknoxproxies are going to screw with you
15:10enquorayes
15:11enquorathat's already a problem with hotel wifi :-(
15:11ibdknoxwell, with the number of users you're talking about at this point, you shouldn't run into any real infrastructure problems
15:11ibdknoxmy use cases were a bit ridiculous originally
15:12ibdknoxwe were broadcasting per character typing
15:12ibdknoxwhich means a message every 70 or so milliseconds
15:12enquoraconcern is that we've already put user inquires on hold with ten times as many client users
15:12enquorauntil this feels comfortable
15:12ibdknoxyou can scale horizontally without issue
15:13ibdknoxfwiw a single box with socket.io-netty handles > 100k actives without issue
15:13enquorathat's a nice concept in theory ;-) ...
15:14`fogusOK. That was fun. https://gist.github.com/1254701
15:14enquoraneed quorum-based multi data-center storage settled down first, to make that viable. It's nearly in hand. and that's what's led us back to the jvm
15:16dnolen`fogus: remind me again why ClojureScript needs access to JS this?
15:16`fogusInterop?
15:17dnolen`fogus: I'm sure I'm missing something, but I can't think of when this would be necessary, even for interop.
15:18ibdknoxdnolen: jquery?
15:18gfredericksdnolen: jquery events pass the target as this I think...
15:20`fogusYou would never have the need to use a cljs function as a method?
15:20dnolenibdknox: gfredericks: so only as convenience? If so I think there need to be some thought as to whether it should be banished. Like + coercing objects to strings and concatenating them (we need unchecked-add)
15:20enquoraibdknox: is netty unique in the jvm ecosystem? everything else that's at all high-level seems to be oriented to servlets, which seems pretty much stuck in the 90s
15:21ibdknoxenquora: netty is pretty low level, in the same way that node is low level. It's a NIO networking package
15:21enquorak
15:23`fogusdnolen: Are you serious?
15:23gfredericksdnolen: what about that example qualifies as "convenience"?
15:23gfrederickshow else would you get an event target from a jquery handler?
15:23`fogusIf you have a better way then I'm all for it
15:24dnolengfredericks: event.target, I stopped using this to access the target like 5 years ago
15:24gfredericksdnolen: okay, so bad example. But it's conceivable that a JS API could require that you use this to access something
15:24dnoleneven better you can extend Event, add ILookup and destructure the target out.
15:24dnolengfredericks: show me
15:25dnolenI've looked at lot of them.
15:25ibdknoxdnolen: fogus's example of using a cljs function on an object
15:25gfredericksdnolen: show you an existing one? or construct a hypothetical?
15:25dnolenibdknox: grafting fns onto Objects is not something that is a part of APIs
15:26ibdknoxdnolen: no, but it's a case where this is necessary
15:26dnolengfredericks: not hypothetical, something that people really need.
15:26ibdknoxunless our stance is, we just don't care
15:26dnolenwhat I take issue w/ is including something w/ bad semantics
15:27gfredericksdnolen: so you'd say the best interop strategy is not to allow anything until there's a concrete use-case?
15:27dnolenit is one of the worst parts about JavaScript
15:27`fogusdnolen: bad semantics? this?
15:27dnolen`fogus: yes, it's JavaScript's dynamic binding, but we already have that.
15:28dnolenso we'll have a language w/ two forms of dynamic binding
15:28`fogusdnolen: A js library will not care if we pass a cljs function into it
15:29ibdknoxdnolen: sure it's crappy, but it's a reality of JS as a language that such a thing is not just supported, but widely used
15:29ibdknoxdnolen: is there an example in CLJ proper where we disallow you to do something you could do in Java?
15:29dnolen`fogus: js libraries don't bind this, they expect you to do that yourself, and there's little reason to from the context of ClojureScript.
15:29dnolenibdknox: that's a very long list
15:29gfredericksI suppose if an edge case comes up that requires this, you could always write a helper function in javascript to pass in this as an explicit first arg?
15:30gfredericksibdknox: I've been trying to make vararg methods with gen-class and I'm betting it's not possible
15:30ibdknoxwas that an explicit decision, though?
15:30dnolenibdknox: no inheritance, no real multiple constructors on types, no mutable locals outside of types, etc etc
15:30gfredericksdnolen: gen-class has inheritance...
15:32dnolenagain, I'm not saying we shouldn't do it. But I think we should come up a good long list of why it's a bad idea first.
15:32`fogusdnolen: The interop allows all of that
15:32gfredericksdoes js/this accomplish access to this?
15:32`fogusdnolen: The ClojureScript source code is that big long list.
15:33dnolen`fogus: ? do you need js/this there?
15:33`fogusgfredericks: js/this is an error
15:33`fogusdnolen: There is no js/thus
15:33gfredericksokay. so if it were added, js/this would be the syntax
15:34`fogusthis even
15:34dnolen`fogus: sorry, then what were you saying in your last point, ClojureScript is what big long list?
15:34`fogusThe only ways to get at this is through a hack and an explicit scope
15:35`fogusdnolen: The existence of CLJS is the long list of reasons that JS is bad.
15:35zakwilsonIs there a list or a site showing library compatability with 1.3?
15:35dnolen`fogus: I know that. So what does "this" add?
15:35gtraksomeone needs to give marick a hug
15:35ibdknoxgtrak: ?
15:36`fogusEven in Clojure the interop forms allow things that allow the host semantics to bleed through
15:36gtrakhe's wailing on clojure for bad reasons I think
15:36ibdknoxlink?
15:36clojurebotyour link is dead
15:36gtrakhttp://www.exampler.com/blog/2011/09/29/my-clojure-problem/
15:37TimMc`fogus: Looks reasonable.
15:37TimMcWhat is this-as?
15:38TimMcmacro, or special form?
15:38`fogusmacro
15:39ibdknoxgtrak: to be fair, I agree with him about a number of things. I was in charge of a community of 6 million developers for a while, right now we're not doing it right.I hoped to talk a bit about it at the Conj
15:40TimMc?
15:40gtrakI do too, but I feel like he wants it to be a better ruby... its niche is a really dynamic language that's still fast
15:40TimMcibdknox: Rather, what project?
15:40ibdknoxTimMc: C# and VB
15:41dnolen`fogus: for sure. just wanted to bring the point up. Yeah if you want to monkey-patch some existing object / prototype then yeah I can see how access to "this" would be useful.
15:41`fogusdnolen: I'm not trying to dismiss you, I respect your opinions on this (no pun). It would be very helpful if you could comment on CLJS-26
15:41dnolen`fogus: haha, I didn't think that you were :)
15:41`fogusdnolen: the extend-object! is still a questionable addition. it's not guaranteed to stay
15:42gtrakibdknox, yea, I agree the community wants to be a bunch of elite guys
15:42dnolengtrak: ibdknox: huh, who are these fabled "elite" people?
15:42gtrakhell, rich already argued about this with yegge
15:43ibdknoxwell, I didn't agree with Yegge either lol
15:43gtrakwell you know, people that are willing to learn a lisp and care about speed
15:43TimMcI can't tell what that guy is on about.
15:43ibdknoxhe wants the opposite extreme
15:44`fogusI didn't see the Strangeloop talk, but as far as I know neither did Mr. Marick
15:46`fogusBut he has some skin in the TDD/Agile game, so I suppose it makes sense that he might not like that Clojure's creator is skeptical about it
15:47dnolenibdknox: do you have any simple improvements in mind? (community-wise)
15:48ibdknoxdnolen: redoing clojure.org would make a huge difference
15:48trptcolin"simple" - i see what you did there :)
15:48ibdknoxhaha
15:48dnolen:D unintentional! I'm one of the brain-washed, Marick was right! NOOOOO!
15:49trptcolinlol
15:49ibdknoxhahaha
15:49ibdknox:p
15:49ibdknoxdnolen: my issues are primarily around the experience of getting started with Clojure
15:50dnolenibdknox: yeah there's much to be desired there, especially now that we're at 1.3.0 and ClojureScript is out in the wild.
15:50ibdknoxdnolen: there's a lot we need to do to onboard people, some of it is very simple, some of it isn't
15:50ibdknoxand there are some people who are helping out immensely, especially on here
15:51ibdknoxbut you average dev doesn't use IRC
15:51ibdknoxyour*
15:51gtrakwell, what would be a clear goal for the community? I'd hate to see clojure turn into a blub language
15:52ibdknoxgtrak: let's talk about it at the Conj :) By then I'll have things to show
15:53gtrakI'll be there for sure
15:53ibdknoxI have lots of exciting things in the works :)
15:54`fogusibdknox: I doubt that any solid entry in the way of getting started would be rejected
15:56`fogusIt's a worthy goal
15:56`fogusI wish that I had a great idea to solve it, believe me I would have by now
15:56trptcolinthis is the thing i really want: http://dev.clojure.org/display/design/CLJ+Launcher
15:56`fogustrptcolin: Me too
15:57`fogusI know Russ and he's still motivated to do it
15:57trptcolinawesome
16:02BlafaselSome feedback from a guy that started with clojure a couple days ago:
16:03Blafasel- the google hits are crap (you often end up on outdated pages, on outdated repositories etc.. Dead github repos)
16:03Blafasel- the contrib move now is confusing (but probably not only for new guys and I understand that's brand new and work in progress)
16:05Blafasel- the website could use some love especially around the api section. Example: I didn't understand letfn until I googled for examples. A simple example instead of the KNF derived syntax would've gone a long way
16:06dnolen`fogus: ?
16:06BlafaselThe good parts: 4clojure is immensively helpful to get started, the SO community is really active (so a search with site:stackoverflow.com is mostly a good idea) and the people in here were invaluable.
16:07`fogusdnolen: Just the Marick thing. It's unfortunate.
16:08dnolen`fogus: It hard for me to find anything resembling a rational line of thinking. His points are very ... "feeling" oriented. Nothing wrong w/ that, but make it's difficult to see understand his viewpoint.
16:09gtrakI think he fears that the community is hostile to TDD and agile, and will tend to mirror Rich's opinions, plus he throws in that clojure prefers speed sometimes. I think they're separate issues and he shoudln't conflate them like that.
16:11`fogusdnolen: The guy has spent a long time thinking about and practicing TDD and Agile, so it makes sense that he's stung. I can't say for sure what RH said at Strangeloop, but in person I've never heard him press his views on me. Hell, I wrote a documentation app and a contracts programming API. I doubt those will make it into Clojure any timer soon.
16:12dnolen`fogus: yup. I've pointed out that he's trying to infer from tweets what almost everyone responded to w/ glowing reviews - especially from people who don't give two hoots about Clojure.
16:12`fogusgtrak: It's natural that there are some people who would mimic RH, but there are also people in the Clojure community who were skeptical of TDD/Agile before they met Clojure. Likewise, there are those who adhere to TDD/Agile who do not feel rejected by Clojure/core
16:12thorwilit almost looks like a negative person cult performed due to expecting there to be a person cult
16:13gtrakyea... that's why it needs to be addressed
16:14dnolensage advice, https://twitter.com/vicentebosch/status/119867016839573504
16:14`fogusgtrak: Not sure how it might be addressed. I'm not sure that my anecdotes would help
16:15gtrakmaybe picking apart his various concerns and coming up with some kind of community vision we can point back to
16:15winkis there any common/default/tried-and-true database solution vor noir web apps?
16:16dnolengtrak: sounds tiresome and in the end probably not effective. Better to put resources into making Clojure easier for newcomers ;)
16:18gtrakwell, for example, look at python's site: "Python is a programming language that lets you work more quickly and integrate your systems more effectively. You can learn to use Python and see almost immediate gains in productivity and lower maintenance costs." , our little description is a bit tl;dr
16:21winkto chime in what Blafasel said (and I've also been doing clojure only for 2 weeks): I find it immenseley annoying to not have/find working snippets of certain stuff
16:21winkI'm not new to programming, not even to functional programming, just to lisp-y stuff
16:21dnolenwink: is clojuredocs.org not useful?
16:21hugodgoogle often lands you at rich's github repos and gh-pages - just taking those down might help
16:22winkdnolen: didn't know it. I'll investigate :)
16:22winkone example: I got some map via read-json and it took me a while to get something like: "give me the :name of every item in this vector", like a foreach() :P
16:23winkit was easy, in the end, but for some languages it would be one click away in the docs. with an example
16:23Blafaselwink: Same
16:24winkor trying to write my own integer? for lack of finding it
16:24winkbut all in all, it's tremendously fun :)
16:24winkand I can't give enough praise to leiningen
16:24dnolenwink: http://clojuredocs.org/clojure_contrib/clojure.contrib.json/read-json
16:24gtrakwink, well you know, in some langs a lot of the complexity is in the object model or syntax, in clojure it's about finding what func you need, there are some good books already
16:24BlafaselI'm used to F# (which tends to lend itself to the functional parts, but might lead to overuse of -> and ->> I guess), but here I was lost for lots of things.
16:25BlafaselIt _is_ a lot of fun.
16:25pjstadig`fogus: i was at strange loop, and i like many other people thought that what rich said was well worth hearing, however...
16:25winkBlafasel: ah well, at least in contrast to scala I can search for syntax constructs and not -> ::> :) or whatever symbol :P
16:25winkdnolen: I'm really going to dig into that page :)
16:25pjstadigi think that some of the shots he took at TDD and/or agile were directed at strawmen
16:25gtrakpjstadig, yea some people took those comments way too seriously
16:26winkgtrak: yep, not gotten any book yet
16:26pjstadigand frankly the shots at TDD and/or agile were orthogonal to his points, and unnecessary for the presentation
16:26pjstadigimho
16:26gtrakwink, I like joy of clojure, there's another that came out recently
16:27gtrakor maybe it's not out yet
16:27trptcolinpjstadig: agreed; perhaps a bit complecting :) i was there too, didn't find anything offensive"
16:27trptcolinbut clearly there were some jabs at testing/type systems/category theory
16:28trptcolinwhich is fine
16:28dnolenpjstadig: I disagree. People look for ways of guaranteeing correctness. The usefulness of TDD and types are well established. But in current practice they occlude perhaps deeper ways to get at correctness. To not address them would have weakened the argument.
16:29pjstadigparticularly the tests-as-guardrails and firing-the-pistol-every-hundred-yards comments were directed at mischaracterizations of agile methodology (or at least my conception of them)
16:29gtrakdnolen, I like the way you said that, too bad rich didn't say it like that
16:29gtrakhe also jabbed at pattern matching ;-)
16:30pjstadigdnolen: i don't see how they occlude deeper ways to get at correctness
16:30dnolenNo idea is not worth jabbing. This touchy feely crap has got to stop.
16:30gtrakdnolen, unfortunately people don't work this way
16:30gtrakmaybe even some good coders
16:31gtrakso i think marick a victim of that misunderstanding, too
16:32seancorfieldpjstadig: i think he was taking shots at folks who use agile / scrum / sprints poorly - same with TDD
16:32seancorfieldgtrak: yes, i was just reading marick's blog posts on the subject
16:32pjstadigseancorfield: i don't think that's how it came across
16:32pjstadigmaybe i'll need to rewatch the video
16:32seancorfieldit came across differently to different people i suspect :)
16:32gtrakpjstadig, seancorfield, the room laughed hard, a few people tweeted distaste
16:33trptcolindnolen: i agree w/ that. but that means jabs at rich for giving those jabs are ok too, right? :)
16:33seancorfieldi'm on various xp / tdd / software craft mailing lists and the zealotry of (some) xp / tdd goes beyond religion
16:33meliponeWhat's "->>" in clojure? sorry for interrupting but I need an answer
16:33dnolentrptcolin: of course. I wish the language panel had gone on longer!
16:33TimMcmelipone: It's a "threading macro"
16:33pjstadigdnolen: yes!
16:33foodoomelipone: (doc ->>)
16:33TimMcmelipone: Not to be confused with Threads
16:33meliponemeaning?
16:34Bronsa,(doc ->>)
16:34trptcolinhaha, yeah, Dean was upset that he accidentally cut it off early
16:34clojurebot"([x form] [x form & more]); Threads the expr through the forms. Inserts x as the last item in the first form, making a list of it if it is not a list already. If there are more forms, inserts the first form as the last item in second form, etc."
16:34TimMcgimme a sec
16:34foodoothere are good examples in the full disclojure videos on Vimeo
16:34foodoofor ->>
16:34seancorfieldtrptcolin: i was upset that the language panel was 20 minutes short!!
16:34TimMc,(macroexpand-1 '(->> 4 (f b) (c) d (e h i)))
16:34clojurebot(clojure.core/->> (clojure.core/->> 4 (f b)) (c) d (e h i))
16:35TimMcHaha, never mind that one.
16:35meliponeha, it's like apply it seems to me
16:35pjstadigwell for my part i'm not too upset about the whole thing, i think rich was mistaken in some of his comments, but i think on the whole it was valuable information
16:35TimMcmelipone: http://clojuredocs.org/clojure_core/clojure.core/-%3E%3E
16:35TimMcWhen in doubt, clojuredocs.org
16:35pjstadigi do think there tends to be too much hero worship of rich, not to say that he's not a bright guy with good things to say
16:36winkpjstadig: ever seen a language community without that?
16:36TimMcJava
16:36wink(ok, besides c++)
16:36seancorfieldif TDD is applied well, it's more about evolving the design - but a lot of people claim they're doing TDD when they're not - and it's those people who rich was parodying (in my opinion)
16:36michaelr525`rich is my hero! ;)
16:36meliponethanks!
16:37seancorfieldi was actually disappointed that dean's heresies talk didn't take sharper shots at various topics
16:37foodoosorry for my ignorance: What is TDD?
16:37winkTests first
16:37Bronsatest driven development
16:37foodooah
16:37seancorfieldi thought that was a very "safe" presentation :(
16:38seancorfieldwith clojure i think there's a tendency to use the repl to do what some people do with tdd
16:38winkseancorfield: sounds like you know these yearly "the state of django" at pycon :P
16:38seancorfieldoh?
16:38winkit's basically an educated rant about what's wrong
16:38seancorfieldah...
16:39winkand people sometimes get all upset
16:39winkwhile the core team highly appreciates it
16:39seancorfieldthere should be no sacred cows
16:41`fogusPlease read and comment on the relevant locations. http://dev.clojure.org/display/design/Release.Next+Planning
16:41`fogus(relevant locations being mailing list, page comments, and clojure-dev
16:42cemerickso I missed the TDD chatterings, eh?
16:43TimMcCount yourself lucky.
16:44pjstadigRelease.Next == 1.4?
16:44gtrakJava doesn't have hero worship b/c it's ill-conceived :-)
16:44pjstadigwhat about a 1.3.1 release to address the quick hits that didn't get into 1.3?
16:46michaelr525`quick hits?
16:47pjstadigdocumentation changes and bug fixes that we're pretty much ready, but didn't get into 1.3
16:51michaelr525pjstadig: why they didn't get there?
16:51amalloymichaelr525: 1.3 was taking too long, they wanted to get it out the door
16:52michaelr525cool
16:53michaelr525well, if I were involved I would probably just be eager to do the interesting stuff..
16:54michaelr525like developing new features and such
16:54pjstadigmichaelr525: right i believe most of these have patches already
16:56michaelr525i wonder what motivates the core developers to do their work. i'm pretty sure they are not there for fixing documentation.. hehe :)
16:56BlafaselNewbie at it again: (concat a b c) results in '(( 1 2 3 4 5 )' if I println it. (interleave a b c) results in '( 1 2 3 4 5 )' when output. What's the difference? What's the (( here?
16:56TimMcmichaelr525: I like doing doc work, actually.
16:56amalloyBlafasel: i think that is false. provide a concrete a, b, c that produce that behavior
16:57dnolen,(concat '(1 2 3) '(4 5 6))
16:57clojurebot(1 2 3 4 5 ...)
16:57michaelr525TimMc: you're involved in development of clojure?
16:57dnolen(interleave '(1 2 3) '(4 5 6))
16:57TimMc,(let [a [1 2] b [3 4] c [5 6]] ((juxt concat interleave) a b c))
16:57clojurebot[(1 2 3 4 5 ...) (1 3 5 2 4 ...)]
16:57TimMcmichaelr525: Nope.
16:58TimMcJust noting that not everyone hates doing doc.
16:59michaelr525TimMc: you must join the core team then!
16:59TimMcOr get my CA in.
16:59michaelr525joking..
17:00michaelr525CA?
17:00clojurebotCA is Contributor Agreement: http://clojure.org/contributing
17:00michaelr525clojurebot: thanks robot
17:00clojurebotthanks for your suggestion, but as usual it is irrelevant
17:00gtrakha
17:00TimMc>_<
17:00pjstadigmichaelr525: i think this is part of the (perception) problem...that only Clojure/core has super cow powers and everyone else is on the outside
17:01pjstadigpart of that may just be marketing and communication
17:01pjstadigor maybe it is true
17:02BlafaselLooking at ProjectEuler's problem number 11 (.. so - early) and my solution looks totally bloated. Probably still caught in the 'use everything that's new in this language to you' effect.
17:03michaelr525pjstadig: well that's how it works in human societies. the great thing with open source is you don't have to join you can always fork..
17:03foodoodo (transient) and (persistent!) only exist for performance reasons or are there situations where using them is also more elegant?
17:03gtrakmichaelr525, in practice, that's a terrible idea
17:03technomancyfoodoo: the former
17:03TimMcpjstadig: It certainly doesn't help that I have to find a printer, print the PDF, find a suitable writing implement (!), write actual words on a piece of paper, find stamps and envelopes, write more words, find a mailbox, and drop it in.
17:04TimMcWhen most of my contributions would be little doc tweaks, it is hard to justify that.
17:04jkkramerthere must be a web app that lets you sign & mail pdfs
17:04TimMcI would have to find it. >_<
17:05jkkramerat least it doesn't involve navigating the physical world
17:05TimMcAnd I don't know if Core would accept the equivalent of a fax.
17:05TimMcI mean, imagine if Wikipedia required a CA...
17:07gtrakwikipedia is bigger and moves faster than a language implementation
17:10michaelr525gtrak: i think it's not such a terrible idea.. if you want to influence you have to act and though I'm not going to dive into google to look for examples I think there are such cases when people that wanted to change forked the code and made something that later was accepted as the better option... hmm gcc->egcs is a good example i think
17:10gtrakmichaelr525, yea, those guys were really hostile though
17:11gtraki guess I mean to say, don't fork unless you're going to win
17:11michaelr525they were hostile?
17:11gtrakyea, the gcc guys
17:11michaelr525hehe
17:11pjstadigforking is a nuclear option
17:11jcromartiewho wants to fork?
17:11gtraknobody
17:11jcromartieand why?
17:11jcromartieok
17:12pjstadigi'd prefer for people to play nice with each other
17:13michaelr525sometimes it's a question of ability rather than will :
17:27amalloyBlafasel: i put together a quick solution for euler 11, if you're interested
17:27amalloyhttps://gist.github.com/1255015 or i can have a look at yours
17:33foodooIs there some good document explaining good indenting style for clojure?
17:33gtraksame as lisp
17:33amalloy$googe mumble scheme style
17:34amalloy$google mumble scheme style
17:34lazybot[Riastradh's Lisp Style Rules - mumble.net main page] http://mumble.net/~campbell/scheme/style.txt
17:34foodoos/clojure/lisp/
17:34lazybot<foodoo> Is there some good document explaining good indenting style for lisp?
17:34foodoothanks
17:34duck1123I always follow the rule, take whatever emacs gives you
17:35amalloyduck1123: indeed. there are a couple things it could do better, though
17:35amalloyeg, try ((juxt + -) 10 <newline> 5) - 5 goes in a place that seems definitely wrong
17:36duck1123Well, I have a rather large list of things that are counted as defs
17:36amalloyduck1123: using clojure-defun-indents?
17:36winkhm, counterclockwise does things that appear a bit weird at times
17:37duck1123define-clojure-indent is what I have
17:37amalloyduck1123: try M-x customize-var clojure-defun-indents
17:37foodooduck1123: That would mean, I need to switch to Emacs from Vim ;)
17:37amalloyi added that in 1.7 or so and i love it. much easier than defining that crap yourself
17:38duck1123very nice. I'll switch over
17:39foodooamalloy: You are from the 4clojure team, right? Is there a way to see if the people I follow do code golfing? Because when I look at their solutions I'd like to know if their solutions are made for elegance or shortness
17:40amalloyduck1123: the other indentation thing i think emacs does atrociously is https://gist.github.com/1255043
17:41amalloyhere sam should line up with when, not bar; but the introduction of baz causes it to get confused
17:41duck1123agreed. I find I end up inserting too many line breaks just to make it look normal
17:41amalloyfoodoo: not really. i'm susprised it's ever hard to tell, though?
17:43foodooamalloy: Sometimes. But that could also mean that the users try to be clever instead of idomatic and clean
17:45foodooamalloy: But even if they do code golfing, there is usually something I can learn from the solutions :)
17:46amalloyfoodoo: i learn a lot from people trying to cram the most amount of logic into the least amount of code
17:46foodooamalloy: But I'm also interested in developing a good coding style in the lispy world
18:11seancorfieldi like the focus of Clojure 1.4 (documentation around core and contrib) :)
18:12dnolenagreed
18:12dnolenand errors
18:13ibdknoxdid I miss that statement?
18:13seancorfieldyes, although stack traces are more of an issue imo
18:13ibdknoxseancorfield: I dunno, just look at some of these:
18:13ibdknox,(doc bound-fn)
18:13clojurebot"([& fntail]); Returns a function defined by the given fntail, which will install the same bindings in effect as in the thread at the time bound-fn was called. This may be used to define a helper function which runs on a different thread, but needs the same bindings in place."
18:13dnolenseancorfield: I take it you haven't looked at 1.3 stacktraces yet?
18:14seancorfieldi use 1.3 all the time :)
18:14dnolenseancorfield: no Java stuff, and unmunged
18:14seancorfieldoh, were the stack traces worse in 1.2?
18:14ibdknoxlol
18:14technomancyclj-stacktrace is still a lot nicer
18:14technomancyespecially the alignment, though the coloring helps too
18:15dnolenseancorfield: haha, 1.2 stack traces would have terrified you then.
18:16zerokarmaleftdnolen: but they were only 20+ levels deep!
18:16seancorfieldmostly, for me, clojure exceptions escape into non-clojure calling code so there's not much clojure can do to help me there :)
18:16dnolenseancorfield: ah then you would have preferred the old way.
18:16dnolenseancorfield: the whole thing needs knobs.
18:17ibdknox_and objects that we can inspect and do useful things with :)
18:17seancorfieldi guess i could look at the root of the exception chain and call a clojure fn to pretty print the stacktrace instead...
18:17seancorfieldi'm already calling all sorts of clojure stuff from non-clojure code :)
18:19gtrakat some point you can't escape from needing to know java and the jvm
18:19ibdknox_unless you're in CLJS ;) then you just need to know JS... damn
18:20gtrakyes, actually, it's not terribly hard to debug as I thought it would be, and I don't know any js at all
18:22gtrakthe hardest part of clojurescript is reading the closure api code
18:23ibdknox_heh
18:23ibdknox_use pinot ;)
18:23gtrakpinot?
18:23ibdknox_github.com/ibdknox/pinot
18:23ibdknox_http://github.com/ibdknox/pinot
18:24gtrakah, you're adding canvas stuff
18:25ibdknox_over the past little bit yes
18:25gtraki was working on a little game engine using google's api's
18:25ibdknox_ah :)
18:25ibdknox_don't use seqs, it'll be too slow :-p
18:25gtraki was trying to figure out how to remove a rectangle and got stuck
18:25ibdknox_remove a rectangle?
18:25gtrakyea, you know the graphics.createRect or whatever?
18:26ibdknox_I just wrote my own, since I was porting over some stuff I did for the node knockout
18:26gtraknode.js does graphics?
18:27ibdknox_it could, but no, I wrote a game :) http://wrench-labs.nko2.nodeknockout.com/
18:27gtrakah yea, I played that
18:27gtraksuper easy :-)
18:27ibdknox_I know
18:27ibdknox_lol
18:27ibdknox_didn't get to play test it much :( haha
18:28gtrakis that all canvas then?
18:28ibdknox_yessir
18:29gtrakI'll take a look at pinot then, no use reinventing wheels
18:31gtrakbut you've hard-coded the looping intervals
18:31ibdknox_hm?
18:31ibdknox_you should be using animation frame to handle the render loop
18:31ibdknox_and 10 ms is pretty standard for the update loop
18:32gtrakso the update is asynchronous to the draw?
18:32gtrakI'm used to doing it all in frames
18:32ibdknox_yep, you need it to be to ensure consistency
18:32ibdknox_otherwise a game would play differently every time
18:33gtrakibdknox, how so?
18:34ibdknox_gtrak: http://gameclosure.com/2011/04/11/deterministic-delta-tee-in-js-games/
18:34gtrakonly if it takes longer than a frame to do stuff, yes?
18:34gtraki'm completely new to js, btw
18:35ibdknox_no worries, I just thought that was a better explanation than I could give here :)
18:35gtrakyea, np, I mean, I'm used to C++ thinking for game stuff
18:37gtrakso does the browser interrupt execution to handle a timer?
18:38ibdknox_I'm actually not sure how that happens. I know with the more recent versions it's extremely complex now
18:38kjeldahlibdknox_ Great link, thanks!
18:38ibdknox_like request animation frame operates outside of the rules of normal timers
18:39ibdknox_and monitors screen refresh rate
18:39gtraksure, but you always can believe js is a single thread, yes? so the old school interrupt model of saving the stack is a decent analogy?
18:39ibdknox_yeah
18:40ibdknox_except for animationframe I think
18:40ibdknox_lol
18:40gtrakha
18:40gtrakwonderful
18:40brehautand web workers
18:40ibdknox_I won't claim to know a ton about this part of JS myself, though, so I could be making it up :)
18:40ibdknox_that was the first game I had written
18:41gtrakwell, are there any js forums with good snr?
18:41brehautthe rules around when animationFrame, timeouts, intervals and web worker/socket events enter JS are all different, and i think differ between browsers too
18:43gtrakalso is there any progress on dealing with cljs libs? what's the modern way?
18:44ibdknox_well
18:44ibdknox_if you use cljs-watch
18:44crazyFoxwhat could be the reason that 'lein search clj-stacktrace' doesnt show version 0.2.3 even though i can see it on clojars.org?
18:44ibdknox_you can just do it like you do with any lein project
18:44ibdknox_add [pinot "0.1.1-SNAPSHOT"] to your project.clj and roll with it :)
18:45gtrakwait, huh?
18:45gtrakcljs uses project.clj?
18:45ibdknox_I usually create leiningen projects for them because there's some server showing the page
18:46gtrakdoes the compiler care about what subdirectory stuff is in or can I do what I want there?
18:47gtrakthinking I could just pull in the git repo and hack away
18:48ibdknox_any dir is fine
19:05symboleI can't find a good example of gen-class outside a namespace declaration. I do (gen-class :name "foo.Bar"). When I try to (compile 'foo.Bar), it says that fool/Bar_int.class foo/Bar.clj is not in the classpath.
19:08Blafasel,(doc pr)
19:08clojurebot"([] [x] [x & more]); Prints the object(s) to the output stream that is the current value of *out*. Prints the object(s), separated by spaces if there is more than one. By default, pr and prn print in a way that objects can be read by the reader"
19:08Blafasel,(doc print)
19:08clojurebot"([& more]); Prints the object(s) to the output stream that is the current value of *out*. print and println produce output for human consumption."
19:09ibdknox_,(pr ["hey" "how" "are" "you"])
19:09clojurebot["hey" "how" "are" "you"]
19:09ibdknox_,(print ["hey" "how" "are" "you"])
19:09clojurebot[hey how are you]
19:19jliI think I'm gonna do a "best of Hacker News" thing that polls the site continuously and just sends you the best stories at the end of the week
19:19jlithere's cool stuff on it, but usually only a couple a day. but they move off the page within a day or two, so you have to read it every day to not miss stuff
19:22jlithis must already exist... oh well
19:25ibdknox_jli: As long as it always grabs anything with ibdknox in it, sounds like it'd be a winner ;)
19:26jliibdknox_: but of course :)
19:26ibdknox_I know there was such a thing
19:26crazyFoxtechnomancy: are you around?
19:27ibdknox_but now I can't find it
19:33crazyFoxcould anybody help me with slamhound? when i run 'lein slamhound <my/namespace>' it fails to find some symbol defined in an other file (same project) and throws an exception. i dunno what i can do ^^
19:37symbolecrazyFox: What's the exact error?
19:39crazyFox(after a lot of warnings about earmuffed vars) it says "Exception in thread "main" java.lang.RuntimeException: java.lang.Exception: Couldn't resolve layout-step, got as far as ..."
19:40symboleyou're running it from the root of your project?
19:40crazyFoxyea
19:41symboleCan you dump the whole thing somewhere?
19:43crazyFoxsymbole: error message from leiningen: http://pastebin.com/Pby7GHB8
19:46crazyFoxsymbole: project.clj and directory tree: http://pastebin.com/T9X2XWML
19:46symboleFirewall is blocking it. Grrrr! Try this please http://paste2.org/
19:46TimMcor github
19:47TimMc~gist
19:47clojurebotExcuse me?
19:47TimMc~paste
19:47clojurebotpaste is http://gist.github.com/
19:48dnolenClojureScript stacktraces from Browser REPL - sweet
19:49crazyFoxsymbole: its all here http://paste2.org/p/1682074
19:50symbolecrazyFox: Are you using Clojure 1.3?
19:50crazyFoxyes
19:52konrWhat's the cheapest way to host a clojure web app?
19:52zodiakkonr heroku
19:53TimMchome server
19:53ibdknox_cheapest?
19:53ibdknox_elastic beanstalk is *way* cheaper than heroku
19:53zodiakheroku is free, how do you get cheaper ?
19:54ibdknox_heroku is free for one dyno
19:54konryeah, I don't to spend lots of money in a web forum, nor mix it with my personal data
19:54konrthanks zodiak!
19:54zodiakde nada
19:54konribdknox_: elastic beanstalk! I'll take a look! Thanks :)
19:54ibdknox_as is elastic beanstalk
19:54ibdknox_the minute you want anything more than that though... :)
19:56ibdknox_konr: if you wanna do heroku here's a tutorial: http://thecomputersarewinning.com/post/clojure-heroku-noir-mongo
19:56seancorfieldclojure.contrib.duck-streams - that's in contrib 1.2.0 but not listed in the modules here: https://github.com/clojure/clojure-contrib/tree/master/modules
19:56seancorfieldwhat was it? where did it go? or was it deprecated?
19:57konribdknox_: thanks!
19:57ibdknox_seancorfield: I think part of it was pulled into java.io, and the rest disappeared? People are often looking for it though
19:58crazyFoxsymbole: is clojure 1.3 a problem?
19:59TimMcibdknox_: Would you say Heroku or EB is easier to get started with?
19:59ibdknox_TimMc: roughly equivalent, Heroku is probably a bit less of a pain to sign up with
19:59TimMck
19:59ibdknox_the heroku workflow is beautiful too :)
20:00seancorfieldyeah, +1 for heroku
20:00ibdknox_The only problem is it can get a little expensive
20:00ibdknox_on an AWS box I can run 20 sites if I wanted
20:00ibdknox_for heroku, each one is a separate dyno and costs me money individually
20:01seancorfieldright, as you scale up, you usually have to move off heroku to aws or rackspace cloud or something
20:01konrI think I'll stick with EB, then
20:02seancorfieldclojure.contrib.pprint became... clojure.pprint, right?
20:02gfrederickseither that or they have suspiciously similar names and functionality
20:04seancorfieldooh, where did clojure.contrib.shell and clojure.contrib.shell-out go?
20:04ibdknox_seancorfield: clojure.java.shell
20:04seancorfieldthanx!
20:06seancorfieldi removed all the contrib stuff from http://dev.clojure.org/display/community/Libraries because it was horribly out of date (stuart sierra sanctioned the removal)
20:07seancorfieldthere were a lot of c.c.* namespaces i'd never heard of and can't find documented anywhere so i assume those vanished even before 1.2.0 came out...
20:08ibdknox_predates me, so I'm not sure :)
20:08dnolenseancorfield: yes about pprint
20:09konrWhat's the best way to check out existing software? Clojars?
20:09dnolenkonr: checkout? or use?
20:09ibdknox_konr: what are you looking for?
20:09konrdnolen, ibdknox_ I want to check out for existing forum software in clojure
20:10seancorfieldibdknox_: clojure.contrib.apply-macro and clojure.contrib.condt for example... never made it into contrib 1.2.0
20:10ibdknox_I don't think there is any
20:10ibdknox_seancorfield: ah, I see
20:10seancorfieldkonr: there are very few full-fledged web applications available in clojure yet - just lots of tools for building such things
20:11seancorfielddnolen: tx for the confirm on pprint
20:11glob157-1Any good way to build publication quality charts from in canter?
20:12dnolenseancorfield: you mean full fledged open-source web applications, there are closed source ones.
20:12ibdknox_yeah
20:12dnolenkonr: some stuff on github
20:12ibdknox_there aren't many prepackaged solutions for clojure
20:13ibdknox_only thing I can think of is cowblog
20:13ibdknox_https://github.com/briancarper/cow-blog
20:14seancorfielddnolen: oh? what full fledged web apps are built in clojure?
20:14ibdknox_seancorfield: www.typewire.io
20:14ibdknox_:)
20:15seancorfieldheh, i meant downloadable products, not websites
20:15ibdknox_hm web apps = downloadable?
20:15ibdknox_gmail is a web app
20:15seancorfielddesikiss.com, lovingbbw.com, latinromantico.com, deafsinglesmeet.com and vietvibe.com have a fair bit of clojure behind them too :)
20:16seancorfielddownloadable... you download the app and install it to run on your own web/app server... wordpress, django, joomla are the sorts of things i mean
20:17ibdknox_ahh, I see
20:17seancorfieldphpbb
20:17ibdknox_cow blog is it, as far as I know :)
20:17seancorfieldcfml (coldfusion) has a bunch of downloadable web apps (mostly free open source) but nothing as polished as some of the php stuff
20:18seancorfieldi'd be surprised if clojure saw much take up in that area - i don't get the impression that sort of development is common amongst java / scala / clojure type developers...
20:19ibdknox_those systems are usually very, very painful to work with
20:19ibdknox_once upon a time ago I worked on a number of drupal and joomla sites *shudder*
20:19dnolenseancorfield: tho I don't see anything preventing such things. I didn't totally hate the Django model.
20:20seancorfieldtrue, and i'd love to see more of it out there... i've been championing that cause in the cfml community for years (without a huge amount of success)
20:23ibdknox_django is a framework though, not a complete end to end solution
20:23robermann,((fn [] '( + 1 2)))
20:23clojurebot(+ 1 2)
20:23robermann,(((fn [] '( + 1 2))))
20:23clojurebot#<ClassCastException java.lang.ClassCastException: clojure.lang.PersistentList cannot be cast to clojure.lang.IFn>
20:23robermannCan I run ((fn [] '( + 1 2))) ?
20:24robermannI mean; how can I evaluate dinamically a '(+ 1 2) without using eval?
20:26gfredericksrobermann: what's the purpose
20:27gfredericksobviously if it was the expression (+ 1 2) you were trying to evaluate you'd just put it there; it's not clear what you're after
20:27robermannI resolved this problem using eval: http://4clojure.com/problem/121
20:27robermannbut I "tripped the alarm!"
20:27gfredericksah hah
20:27robermann:)
20:27gfredericksI think the key here is that the set of possible functions is restricted
20:28gfredericksyou don't have to deal with arbitrary clojure code, just the pieces specified in the problem
20:28robermannyep - but here eval is not listed: http://4clojure.com/directions
20:28gfredericksso what you want is a function that takes a list as input, looks at it, and decides what to do
20:29gfredericksI'm not sure what you mean by it not being mentioned in the directions
20:30robermannThey say that "to use "def" or switch namespaces" is not allowed - I thought using eval was permitted :)
20:30seancorfield4clojure questions used to explicitly state which functions you couldn't use in the solution - i'd imagine eval is disallowed for safety reasons (so you can't execute malicious code and take down the service)
20:30gfredericksand certainly it violates the spirit of that particular problem
20:30robermannyes, I can see
20:30dnolenibdknox: true, though it has those too.
20:31robermannmm so, given an input list like '(+ 1 2) I should be able to evaluate it right?
20:32robermannand of course ('(+ 1 2)) does not work
20:33robermannmmm here 2:30 am maybe too tired :D
20:37seancorfieldrobermann: it's asking you to write a function that takes an expression and returns a function that evaluates, when given a map of argument values
20:38seancorfieldso (f '(+ a 2)) would return some function, call it g, that when called like this (g {:a 4}) would return 6
20:40seancorfieldthe returned function has to recursively walk the expression and evaluate it by inspecting the code and supporting just + - * / numbers and lookup of variables
20:40seancorfielddoes that help?
20:41robermannyes I wrote http://pastebin.com/Z19GM8Sd but I'm stuck with that eval
20:41robermannso I should execute that symbol browsing the list
20:42robermannI mean, decoding all the + - etc
20:42TimMcLook it up in a map.
20:42robermannok, I think I understood your advice
20:42TimMcIf you weren't restricted by the sandbox, you would use resolve. :-)
20:42robermannthank you all :)
20:49seancorfieldyou're basically writing an interpreter for a small subset of lisp :)
20:51TimMcYeah, this reminds me quite strongly of PL class at Northeastern.
20:51TimMcwhatchamacallit, a metacircular evaluator
20:52robermannyes - my first step towards a new Clojure 2.0 ! :)
20:57robermannso men - good hacking and good night/morning
20:57robermannsee you
20:58seancorfieldof course now i had to go and solve the problem myself because i couldn't focus on my work until i had!
20:58seancorfield4clojure is quite a bit slicker since i last played
20:59amalloyseancorfield: a lot of pending improvements just waiting to be deployed, too
20:59robermannI know - and it causes addiction too
20:59robermannso... no, really I have to go to bed :D
20:59robermannbye
21:00seancorfieldlol, g'nite robermann
21:00seancorfieldamalloy: the ajaxy stuff around running the code is very slick - nice work
21:00seancorfield(to whoever wrote that part)
21:01amalloyseancorfield: a transient contributor, i think, who we haven't seen since. it's definitely nice to be open-source
21:02seancorfieldsigh... i last played when there were 65 problems
21:02seancorfieldi might have to waste a weekend catching up :)
21:03amalloyseancorfield: more than a weekend. there are some tough problems now
21:04seancorfieldno... must... not... get... distracted...!
21:21jlihm
21:22jliI'm running a ring webapp with a gzip middleware
21:22jliand using apache as a proxy in front of it, so I can hide the random port I'm running jetty on
21:23jliaccessing jetty directly is close to instant, while through apache, there seems to be a weird ~15s timeout
21:23jliand disabling the gzip middleware in ring fixes it. any ideas?
21:26jlilooking at the tcpdump, there's a Keep-Alive timeout of 15s, which is the time it takes to load
21:27TimMcCan you muck with the timeout?
21:27TimMc(for diagnosis)
21:30jliwhat would I learn?
21:30TimMcWhether it is a coincidence. :-)
21:30jlipretty sure not - it's 15s plus some millis in the tcpdump timestamp
21:35jlihm. I wonder if apache is gzipping it again or something...
21:36jliah ha!
21:38jlithe original length of the file is 79k. gzipped, it's only 22k. when using the gzip middleware + apache proxy, the Content-Length is 79k.
21:38jlithe browser must be waiting for the "rest" of the data
21:39amalloyjli: ooc what gzip middleware are you using?
21:40amalloythe problem you're having sounds like one i ran into when i was writing my own gzip middleware
21:40jliorg.clojars.mikejs/ring-gzip-middleware
21:40jlithe version perhaps should have tipped me off
21:40jli0.1.0-SNAPSHOT
21:41amalloyjli: i think that's the base i used to write my own
21:42amalloyyou might try out [amalloy/ring-gzip-middleware "0.1.0"]
21:42amalloywhich has two improvements over mikejs: i fixed the content-length issue by dissoc'ing out the content-length when gziping; and i don't load the whole reponse into memory before gzipping. instead i stream it on another thread
21:44amalloyoh, i even forked his repo. good for me
21:44jliah, sweet
21:44amalloyhttps://github.com/amalloy/ring-gzip-middleware/commit/533a08
21:44jliwould ring take it?
21:45amalloyjli: like, make it a part of ring proper? perhaps, but who cares
21:46jliamalloy: can you remind me how http works? is Content-Length only necessary when using keep-alive? how does the client know it has all the data - the tcp connection closes?
21:47amalloyjli: i don't know the full answer to that question. but i think when ring doesn't know the full length it specifies Transfer-Encoding: Chunked
21:48amalloythen it sends a bunch of blocks, "this chunk is N bytes, here they are"
21:48amalloythe last chunk is of zero length, perhaps?
21:49jliamalloy: ah, I do see "Transfer-Encoding: chunked" with the response ending in "0" for my index.html, with no Content-Length
21:50jliand for my big javascript file, I see the *incorrect* Content-Length (it's the length of the original file)
21:50jlibut then it looks like the tcp connection closes right after, so the browser puts up with it and displays what it has, I guess
21:50jlihm.
21:51amalloybut apache won't put up with that while proxying? plausible, i suppose
21:52jliwhen going through the apache proxy, I see Keep-Alive headers
21:52jliso I think the tcp connection stays open until it finally times out 15s later
21:52amalloyi see
21:52jliat which point the page loads correctly
21:52amalloyanyway: use my fork, problem solved?
21:52jliyeah, I think so :)
21:56amalloyjli: fwiw, 4clojure uses it to gzip all its content and hasn't had trouble. so it's at least a little battle-tested
21:58jliamalloy: sweet. I think the bug is unambiguously caused by the gzip middleware keeping the incorrect Content-Length, right? i just wasn't noticing before because keep-alive wasn't in play.
21:59jlihow did you notice the bug?
21:59amalloyi don't remember. it was months ago
21:59amalloyprobably the same way you did
21:59jlioh, maybe because you realized you couldn't know if you were streaming it?
21:59amalloyoh, of course
22:01jliheh
22:01jlicool.
22:02amalloyi wonder why i cared so much about not reading the whole thing into memory at once
22:03jliamalloy: do you no longer think it matters?
22:04amalloy*shrug* i still think it's "right" not to read it all
22:07amalloyoh right, i was going on a performance binge, improving page load/render speed for 4clojure
22:08amalloyand we were serving up, uncached and unzipped, like 1MB of javascript
22:08amalloyso i zipped it, and attached headers/meta to avoid retransferring if nothing has changed
22:11amalloygfredericks: that actually happens
22:12gfredericksamalloy: he's under pressure to put something good on the monthly report that the CIO will glance at?
22:13amalloygfredericks: whiny users tell him they wish 4clojure.com redirected to www.4clojure.com instead of transparently serving the same content
22:13gfrederickshow does that inconvenience anybody?
22:13gfredericksI guess stuff could get indexed twice...
22:14amalloygfredericks: broswer doesn't know the cookies/passwords are the same
22:14gfredericksoh and that
22:14gfrederickswhy doesn't technology just work?
22:14gfredericksdoesn't it know what it should do?
22:14jliDWIM!
22:14amalloyso a couple days ago i made the webserver multi-host-aware, and while i was at it said to not serve cookies at all if the host is static.4clojure.com
22:15amalloythese changes not yet deployed, though :P
22:15jliamalloy: true hilarity. using your gzip middleware, Content-Length isn't there anymore. BUT I think Apache has the same bug. using the apache proxy, I see the same incorrect Content-Length header
22:16jlior maybe I'm wrong. double-checking
22:16amalloyhuhhhh, how can it?
22:16amalloyapache doesn't even have a guess as to what content-length to serve, it's just delegating
22:17jlino, I'm wrong. seems like it's still using the old library somehow? grr
22:20jayunit100hahahahahahah
22:21gfredericks,(println "&(println \"hahahahahahah\")")
22:22clojurebot&(println "hahahahahahah")
22:22lazybot⇒ hahahahahahah nil
22:27jayunit100@gfredricks whats the comma do
22:28gfredericksgets clojurebot's attention
22:28gfrederickshe likes commas
22:28jayunit100oooo ok lol
22:51jliamalloy_: ack, just blew 30 minutes on this. didn't run "lein clean", so I guess I was still using the /old/ ring.middleware.gzip :/
22:52jli0.5 hours down, 9,999.5 left to go :)
22:56amcnamarawe just updated 4clojure with a new look (and small fixes to ranking and solutions pages), would love some feedback
22:56amcnamaraeveryone ^
22:58jlidid the logo change recently?
23:00dnolencemerick: you're being nice, but I think Marick is indeed trolling. On multiple fronts.
23:01cemerickheh
23:01cemerickI don't know. But then, I try to give everyone the benefit of the doubt, especially online.
23:02trptcolinand here i thought rich was trolling w/ the whole driving-into-the-guardrails thing :)
23:02cemericktrptcolin: oh, Rich was *definitely* trolling ;-)
23:02cemerickI think that was pretty explicit.
23:02cemerickBut I think the point is, that should be OK — it's his keynote, after all.
23:03trptcolinfair
23:03cemerickIt'd be a horrible thing to have to live in a PR cocoon in order to build a "successful" community/language.
23:03cemerickIt's certainly not required: I remember witnessing all sorts of mayhem anytime Guido talked down FP.
23:04cemerickAnd there, he actually *kept stuff out of the language*, preventing people from doing certain things. I don't think Rich is going to pull X from Clojure, because he happens to not like TDD or whatever.
23:05jlielementary 4clojure problem taught me something. didn't expect (= [:a :b :c] '(:a :b :c))
23:05dnolencemerick: trptcolin: trolling and criticism are not the same. Criticism attacks an idea, we can all stay rational. Marick attacks people w/ an idea, there's no rational response.
23:05cemerickAnyway…I'm writing up a comment. Hopefully Brian will be less stressed once the real video is out, etc.
23:06trptcolindnolen: c'mon, that metaphor?
23:06trptcolini'm all for rational criticism
23:06trptcolinand funny metaphors
23:06dnolen"The dodgy attitudes come from the Clojure core, especially Rich Hickey himself, I’m sad to say."
23:06dnolenthat's a hard line to justify.
23:06cemerickdnolen: If you self-identify with a particular idea, then criticism of it is viewed as criticism of you. The "recipient" doesn't (can't) distinguish the two.
23:07amcnamarasince when does the core team have dodgy attitudes?
23:07ibdknoxhm
23:07trptcolinyeah, i'm not defending marick's sound bites. i'm just saying i felt like rich was trying to get a rise out of people
23:07gfrederickscemerick: as someone who self-identifies with lots of ideas, I take offense at that personal attack!
23:07ibdknoxthings were a little heated lately I think
23:08trptcolinsome of it was reasonable, some purely funny metaphor
23:08cemerickibdknox: Indeed. I don't think using twitter as the main vehicle of discourse helped much, either.
23:08trptcolin+1
23:08ibdknoxnot at all.
23:09dnolentrptcolin: I would agree w/o you - except Marick be naming names - not cool.
23:09ibdknoxcemerick: I kept out of it, because I don't think a lot of the way discussion has been happening lately has been effective. The Conj will be *very* interesting.
23:09amalloyjli: yes, new logo is part of (indeed most of) the new look
23:10carkwhatwhat ? there's a new clojure logo ?
23:10cemerickThere's a little drama at every language/community-specific conf.
23:10jlicemerick: yes. it's really unfortunate people try to squish coherent thoughts into 140chars. I don't think it's possible.
23:11jlicark: not clojure itself, http://4clojure.org
23:11cemerickjli: Human nature. We'll try to squish coherent thought into smoke signals, too. :-)
23:11ibdknoxcemerick: yes, but I'm hoping something good comes out of it. :)
23:11jlinot... enough... bits... :(
23:11trptcolindnolen: yeah, not how i would've approached it; though i'm not as married to agile/tdd
23:13danlarkinI have a question which is entirely unrelated to drama
23:13jliYES!
23:13danlarkincons : list :: ? : hashmap
23:13danlarkinthe cons cell, I should say
23:14jliyou mean, what's the underlying data structure?
23:14cemericklists aren't made of conses, so I'm not sure what to put in ?
23:14danlarkinjli: I suppose... more like what's the most simplistic reduction
23:15dnolen,(conj {} '[foo bar])
23:15danlarkincemerick: this is kind of a "let's pretend they are" situation
23:15clojurebot{foo bar}
23:15dnolenthere is no cons, only conj
23:15trptcolin,(type (first {:a "b"}))
23:15clojurebotclojure.lang.MapEntry
23:15cemerickdanlarkin: then, as dnolen demonstrated, entries
23:15dnolenconj : ?
23:16jlicemerick: what do you mean lists aren't made of conses?
23:16scgilardiand MapEntries print as two-element vectors and two-element vectors can be auto-converted to map entries as needed.
23:16cemerickjli: They aren't. They are in other lisps; not so in Clojure.
23:17trptcolinrainbows and unicorns!!!
23:17trptcolinsorry couldn't resist
23:17gfredericksis (cons 'foo []) a cons?
23:17cemericka head object, and a tail list
23:17danlarkinyes, I suppose MapEntry fits in the question mark slot
23:17dnolen,(type (cons 1 nil))
23:17clojurebotclojure.lang.PersistentList
23:18dnolen,(type (cons 1 ())
23:18clojurebot#<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: EOF while reading>
23:18gfrederickscemerick: I do not know the difference between that and a cons
23:18dnolen,(type (cons 1 ()))
23:18clojurebotclojure.lang.Cons
23:18jlicemerick: are you talking about what users should think about, vs. implementation details?
23:19cemerickjli: one shouldn't generally think about conses *or* lists. Think of collections and seqs.
23:19cemerickThe latter are abstractions. The former are impementations.
23:20jlicemerick: right, yeah. but I'm talking about implementation :)
23:20jlior, interested in knowing about
23:20ibdknoxcemerick: I hear you're visiting us in san fran soon?
23:20cemerickjli: well, lists aren't made of conses :-)
23:20trptcolinamalloy: i like the new 4clojure look. haven't visited in awhile; especially like the not-yet-solved-at-the-top view
23:21cemerickcons == clojure.lang.Cons
23:21amalloytrptcolin: yeah, that's new as of...monday?
23:21jlicemerick: gack, so what are they made of then?
23:21cemerickclojure.lang.PersistentList never uses it
23:21danlarkinand for everyone's edification, clojure.lang.MapEntry has two ivars, final Object _key and final Object _val.... makes perfect sense!
23:21cemerickjli: a head object, and a tail list
23:21trptcolinoh really? i seriously haven't been in months; picked a great time to come back!
23:22cemerickibdknox: yeah, seancorfield recruited me (tbatchelli did earlier as well) :-)
23:22cemerickJava One, talk there on Tuesday, then you guys on Thursday.
23:22cemerickIt'll be…interesting ;-)
23:23cemerickEspecially since the thursday talk's content isn't implemented completely, nevermind prepared fully.
23:23ibdknoxcemerick: haha, well if you need anything, let me know. I'd be happy to help.
23:23jlicemerick: why's that functionally different from cons? because cons have 2 pointers to arbitrary things, and so aren't necessarily well-formed lists?
23:23gfrederickscemerick: so by 'conses' you were simply referring to the class by that name?
23:23dnolenanyone know what abedra's gonna talk about at the Script Bowl?
23:23gfredericksjli: PersistentList has two privates: _first and _rest
23:23dnolen,(cons 1 (lazy-seq nil))
23:23clojurebot(1)
23:24dnolen,(type (cons 1 (lazy-seq nil)))
23:24clojurebotclojure.lang.Cons
23:24cemerickgfredericks: well, yes; those are what `cons` return
23:24dnolen,(type (cons 1 (list 2 3)))
23:24clojurebotclojure.lang.Cons
23:25gfrederickscemerick: I've always thought of "a cons" in the noun sense as an abstractish data structure consisting of a pair, which is most often an object and a list
23:25cemerickjli: IIRC, using conses directly made the lazy sequence abstraction less lazy.
23:25dnolen,(type (conj 1 (list 2 3)))
23:25clojurebot#<ClassCastException java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IPersistentCollection>
23:25cemerickThere's a wiki page about that somewhere, I think.
23:25dnolen,(type (conj (list 2 3) 1))
23:25clojurebotclojure.lang.PersistentList
23:26cemerickibdknox: Thanks. Things should go smoothly. We'll see how quickly I tame the ClojureScript… ;-)
23:26dnolencemerick: ClojureScript is very tameable - initial thoughts?
23:26cemerickgfredericks: well, clojure conses are never any pair; the tail must be a seq.
23:27cemerickNot being able to create a dotted pair is probably already a bridge too far if you're really married to the cons concept.
23:28dnolengfredericks: tho if you want dotted pairs, there's always core.logic
23:29jlidnolen: I've done some little things with clojurescript - it's fun! I can pretend to be a web programmer now :)
23:29ibdknoxweb programming sucks ;)
23:30jlidnolen: but I feel like without really knowing javascript, I'm probably creating a ton of memory leaks. like with event handlers. I guess I should be removing them from the dom elements if I remove the dom elements?
23:31dnolenjli: leaks mostly problematic in ancient browsers like IE6
23:31cemerickdnolen: I don't see any blockers for what I'm doing, though I'm off the beaten track (if such a thing exists yet).
23:31dnolenjli: if you abstract over google events, you're probably ok
23:31jlidnolen: oh, so event handlers on removed dom elements get GC'd?
23:31ibdknoxjli: most libraries prevent that from happening now
23:31cemerickIt is a definitely bummer that cljs isn't available from a repo yet though; that is a pain.
23:32jlicemerick: what do you mean?
23:32ibdknoxcemerick: I tried
23:32cemerickI may offer to fix that; I thought I saw an issue for that.
23:32cemerickibdknox: oh?
23:32dnolencemerick: well … I wonder how serious rhickey is about no releases for CLJS
23:33cemerickdnolen: Is there a link for such a statement?
23:33dnolen#strangeloop
23:33cemerickah
23:33technomancyhaving to set $CLOJURESCRIPT_HOME makes me cringe and think of hadoop a bit =\
23:33cemerickI will aim to disabuse him of that notion, then.
23:33dnolenI know's he's pissed about Clojure releases
23:33ibdknoxcemerick: I couldn't ever figure out what was going on, but it never worked consistently. I even started tearing the compiler apart to figure out what was breaking. For some reason it would stop being able to compile and read core.cljs
23:33cemerick./bootstrap.sh, the new autoconf
23:34ibdknoxI haven't tried lately
23:34ibdknoxmaybe I'll give it another go
23:34technomancycemerick: careful; autoconf is very nearly in "don't even joke about it" territory =)
23:34cemericktechnomancy: in a good or bad way?
23:34cemerickI assume the latter
23:34dnolentechnomancy: you getting on the CLJS bandwagon now?!
23:35cemerickdnolen: the actual release process, or the community extracurriculars?
23:35technomancydnolen: not sure, but probably at some point now that I work for a company that does web apps =)
23:35dnolentechnomancy: figured!
23:36cemerickibdknox: so you tried to bundle it up and use it 'headless'?
23:36dnolencemerick: I think he's unhappy with people waiting around for official releases. He seemed more interested in the Google Closure model.
23:36ibdknoxcemerick: https://github.com/ibdknox/noir-cljs
23:37ibdknoxcemerick: essentially, yes
23:38cemerickdnolen: the "send out a tarball from svn" model, that is?
23:38dnolencemerick: no - everyone just works off HEAD model.
23:39cemerickheh, yeah
23:39technomancythat's the slime model
23:39dnolentechnomancy: but slime doesn't maintain a matrix of dependant libs right?
23:39dnolenGoogle Closure does
23:39technomancyit actually worked out ok for them as long as everything that interacted with slime was in the repo
23:39dnolenyou can veto commits
23:39ibdknoxwhy not just do point releases all the time?
23:40technomancydnolen: slime has the elisp client and swank servers for various CL implementations all in the same repo in lockstep
23:40ibdknoxis there a way to specify latest in a maven dep?
23:40dnolentechnomancy: but not Clojure :P grrr
23:40cemerickibdknox: every commit => release to central? Clojure v1.4.833?
23:40cemerickThat might actually work.
23:40technomancydnolen: yeah, but I'm not sure I would want that even if they changed their mind about not caring about clojure
23:41dnolentechnomancy: why not?
23:41technomancydnolen: I like stable releases
23:42technomancyand I don't want to have to scramble to immediately support a change in swank-clojure just because they decided to make a change on the elisp side
23:42dnolentechnomancy: I do too. But I think you're pretty good about staying up to date, being in charge of a essential build tool and all.
23:42danlarkinworking from HEAD or whatever only gets yo so far
23:42dnolenmost devs aren't
23:42danlarkineventually you need to ship, and get backported bugfixes or whatever
23:42dnolenthe tension is the psychology of … I won't upgrade till the next big point release.
23:42danlarkinand that can't happen with everybody-works-from-HEAD model
23:42technomancydnolen: also most of the changes to slime head recently come with no actual upside
23:43dnolentechnomancy: but that's really relevant. eventually some commit will come in that you want, and the gap is now a gulf.
23:44dnolennot really relevant I mean.
23:44technomancydnolen: true, though that's much more likely to happen in a project that's as young as clojurescript vs something as mature as slime
23:45cemerickI remember when there was hesitation about putting out a 1.0 to begin with.
23:45dnolentechnomancy: "mature" but just cuz you're mature doesn't mean you can predict events like Clojure. It's sad we can't be brought in to the fold.
23:45cemerickI think it's hard to argue that things would be as they are today if drops from HEAD were the path taken.
23:46carkclojure and cl are very different beasts
23:46technomancyit would have to be a pretty badass feature to convince me to use CVS un-ironically
23:47technomancydnolen: I suppose be open to it, I'm just not inclined to spend the effort myself.
23:47dnolentechnomancy: of course. (wow, I don't think I knew SLIME was still on CVS, WTF)
23:47cemerickibdknox: so that cljs-compiler-jar artifact is something you published?
23:47ibdknoxcemerick: yeah
23:48trptcolini'm totally OH'ing technomancy
23:48cemerickLet us now all say about SLIME: WTF.
23:48dnolencemerick: bridge too far man.
23:48cemericklol
23:48cemerickI have to let my emacs hate out of the cage every now and then ;-)
23:48technomancydnolen: pretty sure it's the last thing I actually directly use that's still in CVS
23:48technomancynow that I switched off screen to tmux
23:49technomancymaybe bash?
23:50cemerickThough I was nearly convinced at strangeloop to give it another try sometime soon.
23:50technomancyrelevant: http://memegenerator.net/instance/7741684
23:50technomancywhat
23:50danlarkinoooooh that's a good one
23:51cemerickyeah, that's classic
23:52cemerickibdknox: do you remember what the concrete error/failure was?
23:53cemerick(oh please, let the cljs compiler not require a src dir)
23:54dnolencemerick: you still need that stuff. resolving namespaces and all that. worth it IMO.
23:55chouserwow, the stars are all out on #clojure on a Friday night.
23:55clojurebotthis is not IRC, this is #clojure. We aspire to better than that.
23:55chousertechnomancy: congrats on the new gig
23:55cemerickdnolen: not for what I'm doing. But I need to shut up until I actually dig in properly.
23:56cemerickchouser: And along comes Polaris! ;-)
23:56technomancychouser: thanks!
23:56ibdknoxhaha
23:56ibdknoxtechnomancy: new gig?
23:56technomancyibdknox: starting at Heroku next week
23:57ibdknoxcemerick: it stopped loading core.cljs, past that I don't remember. I'll try again tomorrow :)
23:57ibdknoxsweet!
23:57ibdknoxtechnomancy: my girlfriend works for salesforce :)
23:57technomancyibdknox: cool. never worked for a >50 company before
23:57technomancysounds like heroku is pretty independent in practice though
23:58ibdknoxthat's my understanding as well
23:58ibdknoxso hopefully it won't be too bad ;)
23:58dnolentechnomancy: the future of Clojure deployment … at your fingertips.