0:00 Zolrath: Hm I'm trying to use Google Closure like JQuery and I don't know if that's a good idea
0:00 amalloy: cark: you can only adjust reflection warnings around top-level forms, because they are compiled as a unit
0:00 cark: amalloy: that's unfortunate =(
0:01 my problem is with proxy-super
0:01 it always gives warnings
0:01 so i need to expand it to proxy-call-with-super
0:01 and manually anotate it
0:01 Zolrath: Trying 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
0:01 cark: while i really don't care about performances for this part
0:03 there is some kind of a barrier which prevent macros to propagate type hints
0:03 i'm guessing there is some good reason for that
0:03 but it's annoying
0:05 amalloy: cark: there is no such barrier
0:08 cark: well there is
0:08 trying to make a short example
0:09 actually you're right... maybe my earlier tests were bad
0:10 or it changed at some point
0:12 well then it begs the question, why is the "this" captured symbol not annotated in a proxy declaration ?
0:16 brehaut: https://
1:50 amalloy: so 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?
1:52 companion_cube: it would be more efficient to waitt for the first thread that began computing the value
1:52 maiss then you have to know that some thread is computing it
1:52 but then*
1:54 cemerick: making it so that f returned a future that contains the result for a given set of parameters gets around that cleanly.
2:06 amcnamara: Raynes: how's meet clojure coming along these days?
2:08 amalloy: anyway, if anyone is interested in that, https://
3:10 mindbender1: please, 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 []?
3:11 cark: immediate
3:11 mindbender1: cark: ok thanks
3:11 how are you today?
3:12 cark: im' fine, how about you ?
3:12 mindbender1: I'm fine thank you... you guys are being of much help
3:13 cark: =)
3:14 you can use delay and force if you need delayed evaluation
3:14 mindbender1: how would I rewrite the let?
3:16 cark: ,(let [a (delay (+ 1 2))] @a)
3:16 clojurebot: 3
3:16 cark: or
3:17 ,(let [a (delay (+ 1 2))] (force a))
3:17 clojurebot: 3
3:18 cark: you can also start the computation directly with futures
3:21 mindbender1: ok thanks
3:28 cark: grrr there is absolutely no way to have good looking text rendering with swing >>
4:04 Fossi: ,find
4:04 clojurebot: #<core$find clojure.core$find@594d1d>
4:04 Fossi: #find
5:01 Blkt: good day everyone
7:31 markc: ,(+ 1 2)
7:31 clojurebot: 3
7:34 gfredericks: can gen-class create vararg methods?
7:34 clgv: ,(ns-publics *ns*)
7:34 clojurebot: {}
7:35 clgv: &(ns-publics *ns*)
7:35 lazybot: java.lang.SecurityException: You tripped the alarm! ns-publics is bad!
7:36 clgv: ,(ns-publics 'clojure.core)
7:36 clojurebot: {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, ...}
7:37 clgv: When doing a (ns-publics *ns*) I get #<ClassCastException java.lang.ClassCastException: clojure.lang.Var cannot be cast to clojure.lang.IObj>
7:37 gfredericks: clgv: any context?
7:37 you just fire up a repl and that's what happens?
7:37 clgv: gfredericks: I start CCW's REPL for a file
7:38 gfredericks: okay then I don't know what's going on :)
7:49 clgv: hm yeah. in normal repl it just works.
7:50 really strange. might be some problem with nrepl
7:50 hm lol. it works in another file, but files in that one reproducable
7:56 ok a related question to ##(doc defn)
7:56 lazybot: ⇒ "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"
7:57 clgv: that means I can define a fucntion like (defn f {:meta-attr :fn} [x] (inc)) right?
7:57 s/(defn f {:meta-attr :fn} [x] (inc))/(defn f {:meta-attr :fn} [x] (inc x))
8:03 oh right using metadata {:type :something} in a defn causes the problem
8:23 dbushenko: hi all!
8:24 how to sort a clojure vector?
8:24 Raynes: &(sort [4 2 1 3])
8:24 lazybot: ⇒ (1 2 3 4)
8:25 Raynes: &(sort-by - [3 2 1 4])
8:25 lazybot: ⇒ (4 3 2 1)
8:26 clgv: or if it has to be a vector again: ##(vec (sort [3 1 4 2]))
8:26 lazybot: ⇒ [1 2 3 4]
8:27 Raynes: (but it probably doesn't, so don't bother changing it back unless it actually *needs* to be a vector)
8:27 dbushenko: thank you guys!
8:27 but what if the vector looks like this:
8:28 [[:a 1] [:b 3] [:c 2]]
8:28 probably I should use sort-by?
8:28 clgv: &(sort-by first [[:a 1] [:b 3] [:c 2]])
8:28 lazybot: ⇒ ([:a 1] [:b 3] [:c 2])
8:28 Raynes: It'll sort properly ##(sort [[:b 3] [:c 2] [:a 1]])
8:28 lazybot: ⇒ ([:a 1] [:b 3] [:c 2])
8:28 clgv: &(sort-by second [[:a 1] [:b 3] [:c 2]])
8:28 lazybot: ⇒ ([:a 1] [:c 2] [:b 3])
8:28 dbushenko: great! thanks!
8:29 Raynes: clgv: We're a team, you know.
8:29 <3
8:29 clgv: lol^^
8:29 well. had to wait for lein uberjar ;)
8:43 dbushenko: is there a way to change the order of (sort-by second my-vector) ?
8:48 gfredericks: dbushenko: the argument order? just gotta define your own function
8:49 dbushenko: if you do that alot you can create a helper: (defn reverse-args [f] #(apply f (reverse %&)))
8:49 dbushenko: oh, great! thanks!
9:08 clgv: dbushenko: just in case you are using -> there is also ->> and hence maybe no need to reverse arg order
9:09 dbushenko: clgv, thanks!
9:16 TimMc: ,(class (sort [1 2 3]))
9:16 clojurebot: clojure.lang.ArraySeq
9:17 TimMc: ,(class (vec (sort [1 2 3])))
9:17 clojurebot: clojure.lang.PersistentVector
9:17 clgv: ,(class (sort (range 1000)))
9:17 clojurebot: clojure.lang.ArraySeq
9:17 clgv: ,(class (sort (range 100000)))
9:17 clojurebot: clojure.lang.ArraySeq
9:17 clgv: ,(clojure-version)
9:17 clojurebot: "1.3.0-master-SNAPSHOT"
9:18 clgv: &(class (sort (range 1000)))
9:18 lazybot: ⇒ clojure.lang.ArraySeq
9:18 clgv: &(clojure-version)
9:18 lazybot: ⇒ "1.2.0"
9:18 TimMc: Oh, that's handy.
9:39 `fogus: seancorfield: 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)
9:52 Blafasel: Any 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..
9:52 How do you guys explore things like this?
9:52 stuartsierra: Blafasel: Read the source!
9:53 Blafasel: Yeah.. Where is it?
9:53 fdaoud: wtfm?
9:53 stuartsierra: https://
9:54 Blafasel: stuartsierra: 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.
9:54 Appreciated!
9:56 thorwil_: what happens if you use libraries that depend on varying versions of clojure?
9:57 i'm considering to try clojure 1.3 with appengine-magic's beta branch
9:58 but do moustache and hiccup actually play along with 1.3?
9:58 stuartsierra: thorwil_: If you're using a Maven-based dependency resolution (Lein, Cake) it will resolve to the version you declare.
9:58 Obviously the library has to be compatible with that version of Clojure.
10:02 thorwil_: so hiccup should be fine: http://
10:05 fdaoud: can't wait for that book to come out! :)
10:21 clgv: Can I limit the number of threads that is used for agents?
10:28 cark: when using send, it's already limited
10:28 gfredericks: is it impossible to generate a vararg function with gen-class?
10:32 clgv: no. I mean the total amount of threads that my programm is able to use?
10:33 cark: you need to use threadpools then i guess
10:33 don't know how to hook the agents into your own thread pool
10:33 clgv: well agents already do have their threadpool ;)
10:34 cark: you're the reflecgtion wizard, i guess you'll patch that just like you want it =)
10:34 dpritchett_: Anyone know of a nice github-style open source repo browser I can set up to serve read access to my local repos?
10:35 clgv: lol, in that case something in the language is preferable.
10:35 dpritchett_: I can even consider switching SCMs if the solution is good enough
10:35 clgv: you 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:36 cark: i don't think there's any facility on the clojure side of things to do what you want
10:36 clgv: but why not? it's not that uncommon...
10:36 cark: but the java implementation of agents might have some puggable stuff, you'd need to check the source
10:37 hey i don't know !
10:37 clgv: I think it's a pretty straight forward use case
10:39 * gfredericks cannot figure out where gen-class is defined
10:39 cark: https://
10:40 looks like pretty final to me
10:40 clgv: I am already overthere ;)
10:41 damn thats true.
10:53 hmm even in 1.3 it's the same :/
11:04 cemerick: Looks like dev.clojure.org/jira is having issues?
11:06 clgv: hmm 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:06 fdaoud: that's what jira is for - issues\
11:06 j/k ;)
11:06 cemerick: fdaoud: well done :-P
11:06 clgv: fdaoud: lol!
11:06 fdaoud: it's Friday :-)
11:27 zerokarmaleft: greetings, programs.
11:37 technomancy: clojurebot: do you believe in the users?
11:37 clojurebot: It's greek to me.
11:37 fdaoud: clojurebot: parlez-vous francais?
11:37 clojurebot: No entiendo
11:38 fdaoud: clojurebot: who is Rich Hickey?
11:38 clojurebot: is_rhickey_a_minor_god is yes
11:38 foodoo: french != spanish(?)
11:38 fdaoud: clojurebot: what is Lisp?
11:38 clojurebot: lisp is the red pill
11:38 fdaoud: man, they thought of *everything*
11:38 foodoo: clojurebot: what is the blue pill?
11:38 clojurebot: No entiendo
11:39 fdaoud: clojurebot: what is Java?
11:39 clojurebot: http://
11:39 fdaoud: clojurebot: what is Cobol?
11:39 clojurebot: The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offence. -- Dijkstra
11:39 foodoo: clojurebot: (world-dominion)
11:39 clojurebot: No entiendo
11:39 fdaoud: clojurebot: what is Object-Oriented Programming?
11:39 clojurebot: http://
11:39 fdaoud: love it :D
11:40 foodoo: clojurebot: are you an AI?
11:40 clojurebot: Huh?
11:40 foodoo: that reaction seems pretty human to me
11:40 fdaoud: clojurebot: what do you have to say about women?
11:40 clojurebot: women are just jealous, since lisp has nice curves. -- Chousuke
11:41 fdaoud: clojurebot: what do you have to say about religion?
11:41 clojurebot: I don't understand.
11:41 clgv: clojurebot: what is the blue pill?
11:41 clojurebot: blue pill is viagra
11:41 fdaoud: clojurebot: what do you have to say about politics?
11:41 clojurebot: I don't understand.
11:41 gtrak: clojurebot, java?
11:41 clojurebot: ☕
11:41 foodoo: clojurebot: what do you have to say about Java?
11:41 clojurebot: ☕
11:41 fdaoud: clojurebot: what is Scheme?
11:41 foodoo: dammit, two fools, same thought :D
11:41 clojurebot: scheme 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:42 gtrak: clojurebot, lisp?
11:42 clojurebot: "Like DNA, such a language [Lisp] does not go out of style." - Paul Graham, ANSI Common Lisp
11:42 foodoo: clojurebot: recursion
11:42 clojurebot: I don't understand.
11:42 foodoo: a clojurebot that doesn't understand recursion. That's bad
11:42 gtrak: clojurebot, recursion is recursion
11:42 clojurebot: Alles klar
11:42 gtrak: clojurebot, recursion
11:42 clojurebot: recursion is recursion
11:43 fdaoud: clojurebot, John McCarthy?
11:43 clojurebot: Gabh mo leithscéal?
11:43 foodoo: ah, so he's an AI after all :)
11:43 fdaoud: Huh?
11:43 clojurebot: who is John McCarthy?
11:43 clojurebot: It's greek to me.
11:43 fdaoud: disappointed!
11:43 gfredericks: fdaoud: you can teach him things
11:44 fdaoud: gfredericks: really? cool, show me
11:44 gfredericks: clojurebot: John McCarthy is nobody of note.
11:44 clojurebot: Ok.
11:44 gfredericks: clojurebot: who is John McCarthy?
11:44 clojurebot: John McCarthy is nobody of note.
11:44 clgv: lol what??
11:44 lazybot: clgv: Definitely not.
11:44 foodoo: clojurebot: NP == P?
11:44 clojurebot: hiccup is http://
11:44 clgv: does clojurebot hate that many questions???
11:44 lazybot: clgv: Oh, absolutely.
11:45 fdaoud: clojurebot: without John McCarthy we would not be here today.
11:45 clojurebot: John McCarthy is nobody of note.
11:45 fdaoud: clojurebot: John McCarthy is someone without whom we would not be here today.
11:45 clojurebot: c'est bon!
11:45 gfredericks: fdaoud: I think you have to format it as 'X is Y'
11:45 foodoo: clojurebot: Are macros good?
11:45 clojurebot: Barking spiders!
11:45 fdaoud: clojurebot: who is John McCarthy?
11:45 clojurebot: John McCarthy is nobody of note.
11:45 foodoo: how mysterious...
11:45 fdaoud: can't override I guess
11:45 gfredericks: clojurebot: who is John McCarthy?
11:45 foodoo: he's fooling around with us :D
11:45 clojurebot: John McCarthy is nobody of note.
11:45 gfredericks: clojurebot: who is John McCarthy?
11:45 clojurebot: John McCarthy is someone without whom we would not be here today.
11:46 gfredericks: clojurebot accepts multiple thruths
11:46 truths
11:46 foodoo: clojurebot: where is here?
11:46 clojurebot: Pardon?
11:46 gtrak: clojurebot, do you exist?
11:46 clojurebot: It's greek to me.
11:46 foodoo: clojurebot: What is the solution to all problems?
11:46 clojurebot: excusez-moi
11:47 gfredericks: clojurebot: what is the answer to the great question of life, the universe, and everything?
11:47 clojurebot: tufflax: there was a question somewhere in there, the answer is no
11:47 fdaoud: clojurebot: Francais is Le langage de l'amour
11:47 clojurebot: Ik begrijp
11:47 fdaoud: clojurebot: what is Francais?
11:47 clojurebot: Francais is Le langage de l'amour
11:47 foodoo: clojurebot: goto hell
11:47 clojurebot: Hello, mcoffbyone
11:47 fdaoud: bwahaha
11:47 foodoo: i don't get that one
11:47 clojurebot: hell
11:47 fdaoud: got you there
11:47 clojurebot: BUENOS DING DONG DIDDLY DIOS, fRaUline foodoo
11:48 foodoo: clojurebot: goto
11:48 clojurebot: I don't understand.
11:48 fdaoud: clojurebot: how sad are we, really?
11:48 clojurebot: I don't understand.
11:48 foodoo: clojurebot: why is 1 true and 0 false?
11:48 clojurebot: Gabh mo leithscéal?
11:48 foodoo: clojurebot: you are disgressing
11:48 clojurebot: Gabh mo leithscéal?
11:49 foodoo: seems like there's a knot in his tongue now
11:49 clojurebot: ()
11:49 clojurebot: () is awesome
11:49 foodoo: clojurebot: xml
11:49 clojurebot: xml is like violence; if it's not working, you're not using enough of it.
11:49 foodoo: wohooho
11:49 clgv: lol
11:49 clojurebot: cloud computing
11:49 clojurebot: Huh?
11:50 foodoo: clojurebot: Microsoft
11:50 clojurebot: I don't understand.
11:50 gfredericks: clojurebot: java
11:50 clojurebot: ☕
11:50 foodoo: is that a cup?
11:50 fdaoud: Java logo
11:50 gfredericks: clojurebot: scala
11:50 clojurebot: Unfortunately the standard idiom of consuming an infinite/unbounded resource as a stream can be problematic unless you're really careful -- seen in #scala
11:50 foodoo: computing itself can be problematic ;)
11:51 gfredericks: unless you're really careful
11:51 fdaoud: foodoo: http://
11:51 clojurebot: ruby
11:51 clojurebot: Chunky bacon!
11:51 fdaoud: clojurebot: groovy
11:51 clojurebot: It's greek to me.
11:51 foodoo: fdaoud: thanks. But I know what the java logo looks like. But in this terminal you can hardly make it out ;)
11:51 clgv: clojurebot: c++
11:51 clojurebot: :negative/num-1 + :positive/num-1 = :zero/zero
11:51 fdaoud: foodoo: ok :)
11:52 clgv: clojurebot: c#
11:52 clojurebot: Gabh mo leithscéal?
11:52 clgv: clojurebot: .net
11:52 clojurebot: Gabh mo leithscéal?
11:52 foodoo: clojurebot: BASIC
11:52 clojurebot: Pardon?
11:52 foodoo: clojurebot: )(
11:52 fdaoud: ,(repeatedly #(+ 40 2))
11:52 clojurebot: Excuse me?
11:52 (42 42 42 42 42 ...)
11:52 clgv: clojurebot: C#
11:52 clojurebot: Excuse me?
11:52 foodoo: clojurebot: )(
11:52 clojurebot: No entiendo
11:52 gtrak: clojurebot, ()
11:52 clojurebot: () is awesome
11:53 gtrak: clojurebot, (damn)
11:53 foodoo: clojurebot: json
11:53 clojurebot: I don't understand.
11:53 http://
11:53 foodoo: clojurebot: UNIX
11:53 clojurebot: it's a UNIX system! I know this!
11:53 foodoo: clojurebot: iteration
11:53 clojurebot: amac: 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:56 pjstadig: clojurebot: suddenly
11:56 clojurebot: BOT FIGHT!!!!!111
11:57 pjstadig: clojurebot: suddenly
11:57 clojurebot: CLABANGO!
12:00 * gfredericks looks into scripting jruby from clojure
12:01 clgv: &(println "Clojurebot: take this!")
12:01 lazybot: ⇒ Clojurebot: take this! nil
12:02 clgv: hm damn that worked a while ago ;)
12:02 gfredericks: ,(println "&(println \"Clojurebot: I'm sorry, I didn't mean it. Friends?\")")
12:02 clojurebot: &(println "Clojurebot: I'm sorry, I didn't mean it. Friends?")
12:02 lazybot: ⇒ Clojurebot: I'm sorry, I didn't mean it. Friends? nil
12:02 clgv: &(println "clojurebot: json")
12:02 lazybot: ⇒ clojurebot: json nil
12:02 clgv: harrharr^^
12:09 crazyFox: hi. i'd like to use clojure.math.numeric-tower in a leiningen project. on http://
12:22 gfredericks: isn'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:29 dnolen: awesome post http://
12:39 duck1123: Does anyone know what I can do if lein marg is extracting all of my ;; comments, but none of my docstrings?
12:41 pyr: duck1123: there's an open issue for that
12:42 duck1123: marginalia is broken in that regard
12:44 duck1123: I thought I had read that it was fixed, guess not
13:00 kzar: Can anyone recommend a library to generate HMAC-SHA-512s?
13:04 crazyFox: the slamhound plugin from technomancy is a really handy thing. though the project didnt move since may. is there a later/better version?
13:11 duck1123: kzar: you could always use the java libs
13:12 kzar: duck1123: Yea exactly, I've done no Java though so I wasn't sure which library was best to use
13:12 technomancy: crazyFox: the easy parts all got finished. =)
13:12 TimMc: kzar: Java standard libs should do it.
13:12 technomancy: pretty-printing is hard to do right though
13:12 gfredericks: technomancy: is it expected for lein to break under gcj 1.5?
13:13 (no big deal if so)
13:13 technomancy: gfredericks: I'm not aware of any clojure code that works under gcj
13:13 duck1123: kzar: http://
13:13 gfredericks: technomancy: very good :)
13:14 I figured that was the case
13:14 TimMc: ,(java.security.MessageDigest/getInstance "MD5")
13:14 clojurebot: #<Delegate MD5 Message Digest from SUN, <initialized>
13:14 >
13:14 TimMc: ,(java.security.MessageDigest/getInstance "SHA512")
13:14 clojurebot: #<RuntimeException java.lang.RuntimeException: java.security.NoSuchAlgorithmException: SHA512 MessageDigest not available>
13:14 technomancy: gfredericks: IIUC gcj is pretty skooky
13:15 TimMc: ,(java.security.MessageDigest/getInstance "SHA-512")
13:15 clojurebot: #<Delegate SHA-512 Message Digest from SUN, <initialized>
13:15 >
13:15 TimMc: kzar: ^
13:15 kzar: duck1123, TimMc: Thanks
13:17 crazyFox: technomancy: is was not rly meant as a criticism... just wasnt sure if anybody had taken it (even) further
13:17 gfredericks: technomancy: but that's what my fresh install of debian comes with
13:17 technomancy: which is so much not your fault it's not even hilarious
13:17 * gfredericks waits for `sudo apt-get install maven2`
13:18 fdaoud: cemerick: just got a note from amazon saying your book is delayed..
13:18 technomancy: gfredericks: 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:18 cemerick: fdaoud: hah, that it is :-|
13:18 gfredericks: technomancy: what? They're willing to break all of my MIPS laptops??
13:18 lazybot: gfredericks: What are you, crazy? Of course not!
13:18 kzar: Is it possible to stop Enlive wrapping <body> and <html> tags around templates / snippets?
13:19 gfredericks: lazybot: phew
13:19 fdaoud: cemerick: are you guys still writing?
13:19 cemerick: fdaoud: Everything's "done", it's an editing game at this point.
13:20 technomancy: gfredericks: oh noes!
13:20 fdaoud: cemerick: oh ok. no problem then. it's normal to take 2-3 months from "done writing" to "in print".
13:21 cemerick: fdaoud: No, there's no real problem. I think O'Reilly had some optimistic timetable in mind (as did we).
13:21 S11001001: gfredericks: got a bunch of yeeloong lemotes do you?
13:21 or lemote yeeloongs
13:22 cemerick: I never had any clue just how demanding writing a book would be.
13:22 fdaoud: cemerick: I sent in my final chapter end of July, book came out end of October.
13:22 cemerick: fdaoud: which is your book?
13:22 fdaoud: cemerick: http://
13:23 cemerick: Nice. I like the cover and tagline. :-)
13:23 fdaoud: cemerick: thanks! I am happy with the positive reviews :)
13:24 cemerick: 5 stars out of 14 — nice!
13:24 kzar: dnolen: Do you know if this ever got sorted out? http://
13:25 fdaoud: cemerick: made all the hard work worthwhile :)
13:25 cemerick: fdaoud: https://
13:26 ;-0
13:26 ;-)
13:26 fdaoud: cemerick: 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:26 cemerick: fdaoud: agreed.
13:27 fdaoud: cemerick: 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:27 cemerick: Trying to do it on top of two other full time jobs was…questionable.
13:30 fdaoud: cemerick: 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:30 cemerick: yeah, I can imagine that's frustrating.
13:30 Ironically, I don't really buy programming books.
13:31 (let's keep that between us and the other 300 people here)
13:32 fdaoud: cemerick: that's ok, I make up your average by buying 2-3 books/month ;)
13:34 crazyFox: am i right that slamhound doesnt pick up usages of functions that were defined in the same project (but different namespace)?
13:34 fdaoud: cemerick: 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:41 technomancy: crazyFox: it should pick those up
13:48 cemerick: Anyone here an HTTP protocol expert?
13:49 TimMc: Yeah, I use a browser like every day.
13:49 :-)
13:49 cemerick: sweet, I need some googling assistance. :-P
13:50 TimMc: haha
13:50 What's the question?
13:51 technomancy: TimMc: 408
13:51 cemerick: nevermind — was just trying to clarify whether multiple headers of the same type were actually in the spec, or merely allowed via convention
13:57 kencausey: depends on the header I believe
13:58 cemerick: kencausey: Yeah; accept and cache-control seem to explicitly allow for it; others, perhaps not.
13:59 enquora: considering 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:59 cemerick: I was just checking as to whether it's a known pattern.
14:00 kencausey: See Section 4.2 of RFC 2616
14:00 gtrak: enquora, see clj-socketio
14:00 https://
14:01 cemerick: kencausey: Thank you. :-) How did I miss that last paragraph…
14:02 gtrak: enquora, or http://
14:02 kencausey: cemerick: You just didn't get lucky with a search for multiple like I did ;)
14:02 cemerick: That's a long way of saying, multiples of the same header have set semantics for their values.
14:03 (insofar as the comma-delimitation already implies set semantics)
14:03 enquora: gtrak: which means knocking together routing, authentication support on my own, it appears. looking at aleph
14:04 gtrak: enquora, ah, does aleph and websockets work together?
14:05 enquora: I'm just looking at it, but it decouples request from response, so it appears
14:05 gtrak: enquora, i think that's necessity when you're talking async, yes?
14:05 enquora: pretty much
14:06 don'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:06 gtrak: ibdknox would probably know about it, but he's not around right now
14:07 enquora, socket.io != socket
14:12 enquora: gtrak: 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:12 gtrak: what's the issue there?
14:12 enquora: where?
14:12 clojurebot: where is log
14:12 gtrak: there's a socket.io-netty already built
14:13 https://
14:13 enquora: ah, k. the issue then would be documentation ;-)
14:14 gtrak: yea, all the stuff is pretty fresh, it looks like it hasn't been touched since August 1
14:14 enquora: looking for something of an ecosystem, too. most mental energy is going into radical revamping of datastore and html client.
14:15 gtrak: i think the tech isn't mature enough for that yet
14:15 enquora: yeah. just exploring. there are Scala options, but I'm much less keen on the language
14:16 gtrak: if I get around to working on it, I'd be willing to spend some brain cells on improving stuff
14:16 curious about aleph though, didn't know it was an option
14:16 enquora: *might* be
14:17 I'm comfortable enough in lisp to hack with it a bit right away. scala and assembly (er java) not so much
14:17 gtrak: clojure should be able to operate with any scala stuff, too
14:19 enquora: that'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:19 gtrak: jvm's hot stuff
14:20 enquora: just discovered akka, and that seems to resolve the app reliability issues
14:25 kzar: With 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 `fogus: We need a contrib adoption drive.
14:31 technomancy: `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:31 gtrak: ibdknox, what do you think of aleph for websockets? did you look at it?
14:31 technomancy: `fogus: modulo transitive deps of course.
14:32 ibdknox: gtrak: 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:32 gtrak: it has improved significantly since then :)
14:32 gtrak: enquora, ^^
14:33 kzar: Ah figured it out (apply str (emit* (snippet-name "args")))
14:36 enquora: ibdknox: 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:38 ibdknox: enquora: if you intend to have long standing connections, i.e. websockets, then yes, you definitely want to be on top of netty
14:38 which is what aleph is built on
14:38 I would point out, however, dealing with websockets is a royal pain
14:39 and I suggest you consider for a bit whether or not you really need them, or if a simple polling strategy makes more sense
14:39 enquora: we really need them
14:39 ibdknox: okidoke
14:39 enquora: polling - 1999 called and it wants its protocol back
14:40 we need live updates of changes to persistently connected html clients
14:40 ibdknox: hah, sure, but it's the only solution that works consistently
14:40 in any case
14:40 what kind of load are you looking at?
14:40 enquora: tiny at the moment, but not willing to go with a hacked architecture if not necessary
14:40 and it isn't
14:41 hundreds of clients connected
14:41 not thousands or more
14:41 ibdknox: oh, aleph will breeze through that
14:41 I was looking at millions
14:41 enquora: don't want to be in a position next year where we can't handle thousands, though
14:42 ibdknox: shouldn't be an issue :)
14:43 enquora: orders of magnitude less performance doesn't sound encouraging
14:43 ibdknox: aleph could handle 5k back when I was actively screwing around with it
14:43 enquora: and, want to be ready to deploy on ARM servers next year
14:43 ibdknox: enquora: that was 6 months ago
14:43 enquora: much lower horsepower
14:44 will take a look at it
14:44 have just discovered it
14:44 ibdknox: the other option is writing against netty directly
14:44 it's a pain
14:44 enquora: yes
14:44 ibdknox: for an example,
14:44 you can look at my socket.io-netty
14:44 enquora: have enough pain moving backend and clients already
14:44 trying to minimize mental load ;-)
14:45 ibdknox: https://
14:45 enquora: that may mean keeping the middleware on node.js or python for the moment :-)
14:45 ibdknox: if you don't mind having a node server
14:45 that will be by far the easiest solution
14:45 enquora: I *do* mind having a node server
14:46 but it is probably the easiest
14:46 ibdknox: why?
14:46 clojurebot: ibdknox: because you can't handle the truth!
14:46 kjeldahl: ibdknow: 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:46 ibdknow=ibdknox *sigh*
14:47 ibdknox: kjedahl: I should probably write a simple tutorial for using a noir handler with aleph :)
14:47 enquora: ibdknox: 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:47 * kjeldahl drools
14:48 ibdknox: kjeldahl: basically you just use (server/gen-handler) and then use aleph's (wrap-ring-handler)
14:48 then you can run noir on top of netty :)
14:48 amalloy: kjeldahl: you can usually tab-complete usernames
14:48 kjeldahl: amalloy: Thanks, now I know! Works in ERC also...
14:48 ibdknox: enquora: so make the node server completely stupid and only handle connections. Have a queue that tells it what to do :)
14:49 kjeldahl: ibdknox: Thanks, I'll start reading..
14:49 ibdknox: enquora: but yeah, I dropped node too
14:50 enquora: ibdknox: trying to avoid a middleware queue, but it may be necessary
14:51 gtrak: you guys heard of chloe? http://
14:51 enquora: I know I'm in the java ecosystem now, but I'd really like to *cut* complexity ;-)
14:51 ibdknox: enquora: 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:52 gtrak: chloe's a middle-man erlang server for websockets
14:52 enquora: ibdknox: it may be so. Given my current small scale, I'd prefer to factor that one out later
14:53 ibdknox: enquora: 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:54 enquora: I was listening
14:54 ibdknox: gtrak: that wouldn't work for something that essentially streams data back and forth
14:55 gtrak: huh?
14:55 ibdknox: gtrak: 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:55 gtrak: what's it mean to stream data back and forth?
14:55 ibdknox: gtrak: to get information *back* to your server, your server receives a post request from the Chloe server
14:55 gtrak: yes
14:55 ibdknox: let's say I'm sending position information from the client to the server, updating once per second
14:56 chloe will be sending posts at an extreme rate with 100 users
14:57 dealing with an http post will incur a much higher overhead than just decoding the websocket format
14:57 gtrak: ah, perhaps, I'm sure there's optimization that could be made there
14:58 like just sockets instead of http requests
14:58 ibdknox: yeah
14:59 for many though, the way that works is probably fine :)
14:59 gtrak: it's much better to do it all in a single jvm
15:00 ibdknox: yeah
15:01 gtrak: but he made chloe to get people quickly up and running with websockets
15:01 `fogus: There is a plan for this
15:01 ibdknox: which is awesome, because it really is a pain in the ass
15:01 `fogus: a plan for what?
15:01 `fogus: this
15:02 TimMc: heh
15:02 ibdknox: lol
15:02 "this" in the cljs sense? :)
15:02 TimMc: sounds like it
15:05 ibdknox: TimMc: it was a drive-by planning
15:05 * `fogus on phone
15:07 enquora: ibdknox: 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:07 ibdknox: enquora: so why are websockets necessary?
15:08 enquora: I 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:09 ibdknox: enquora: unless the resolution of new data sends is < 30s polling is by far a better solution
15:09 enquora: We have a need to communicate state changes back to browsers
15:09 we have mobile users to content with
15:09 on cell connections where every bit counts
15:09 as does latency
15:10 yes, the resolution of new data sends can easily be less than 30s
15:10 we need soft realtime
15:10 ibdknox: righto
15:10 at that point you're "streaming" and wss makes sense
15:10 keep in mind
15:10 proxies are going to screw with you
15:10 enquora: yes
15:11 that's already a problem with hotel wifi :-(
15:11 ibdknox: well, with the number of users you're talking about at this point, you shouldn't run into any real infrastructure problems
15:11 my use cases were a bit ridiculous originally
15:12 we were broadcasting per character typing
15:12 which means a message every 70 or so milliseconds
15:12 enquora: concern is that we've already put user inquires on hold with ten times as many client users
15:12 until this feels comfortable
15:12 ibdknox: you can scale horizontally without issue
15:13 fwiw a single box with socket.io-netty handles > 100k actives without issue
15:13 enquora: that's a nice concept in theory ;-) ...
15:14 `fogus: OK. That was fun. https://
15:14 enquora: need 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:16 dnolen: `fogus: remind me again why ClojureScript needs access to JS this?
15:16 `fogus: Interop?
15:17 dnolen: `fogus: I'm sure I'm missing something, but I can't think of when this would be necessary, even for interop.
15:18 ibdknox: dnolen: jquery?
15:18 gfredericks: dnolen: jquery events pass the target as this I think...
15:20 `fogus: You would never have the need to use a cljs function as a method?
15:20 dnolen: ibdknox: 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:20 enquora: ibdknox: 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:21 ibdknox: enquora: netty is pretty low level, in the same way that node is low level. It's a NIO networking package
15:21 enquora: k
15:23 `fogus: dnolen: Are you serious?
15:23 gfredericks: dnolen: what about that example qualifies as "convenience"?
15:23 how else would you get an event target from a jquery handler?
15:23 `fogus: If you have a better way then I'm all for it
15:24 dnolen: gfredericks: event.target, I stopped using this to access the target like 5 years ago
15:24 gfredericks: dnolen: okay, so bad example. But it's conceivable that a JS API could require that you use this to access something
15:24 dnolen: even better you can extend Event, add ILookup and destructure the target out.
15:24 gfredericks: show me
15:25 I've looked at lot of them.
15:25 ibdknox: dnolen: fogus's example of using a cljs function on an object
15:25 gfredericks: dnolen: show you an existing one? or construct a hypothetical?
15:25 dnolen: ibdknox: grafting fns onto Objects is not something that is a part of APIs
15:26 ibdknox: dnolen: no, but it's a case where this is necessary
15:26 dnolen: gfredericks: not hypothetical, something that people really need.
15:26 ibdknox: unless our stance is, we just don't care
15:26 dnolen: what I take issue w/ is including something w/ bad semantics
15:27 gfredericks: dnolen: so you'd say the best interop strategy is not to allow anything until there's a concrete use-case?
15:27 dnolen: it is one of the worst parts about JavaScript
15:27 `fogus: dnolen: bad semantics? this?
15:27 dnolen: `fogus: yes, it's JavaScript's dynamic binding, but we already have that.
15:28 so we'll have a language w/ two forms of dynamic binding
15:28 `fogus: dnolen: A js library will not care if we pass a cljs function into it
15:29 ibdknox: dnolen: 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:29 dnolen: is there an example in CLJ proper where we disallow you to do something you could do in Java?
15:29 dnolen: `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:29 ibdknox: that's a very long list
15:29 gfredericks: I 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:30 ibdknox: I've been trying to make vararg methods with gen-class and I'm betting it's not possible
15:30 ibdknox: was that an explicit decision, though?
15:30 dnolen: ibdknox: no inheritance, no real multiple constructors on types, no mutable locals outside of types, etc etc
15:30 gfredericks: dnolen: gen-class has inheritance...
15:32 dnolen: again, 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 `fogus: dnolen: The interop allows all of that
15:32 gfredericks: does js/this accomplish access to this?
15:32 `fogus: dnolen: The ClojureScript source code is that big long list.
15:33 dnolen: `fogus: ? do you need js/this there?
15:33 `fogus: gfredericks: js/this is an error
15:33 dnolen: There is no js/thus
15:33 gfredericks: okay. so if it were added, js/this would be the syntax
15:34 `fogus: this even
15:34 dnolen: `fogus: sorry, then what were you saying in your last point, ClojureScript is what big long list?
15:34 `fogus: The only ways to get at this is through a hack and an explicit scope
15:35 dnolen: The existence of CLJS is the long list of reasons that JS is bad.
15:35 zakwilson: Is there a list or a site showing library compatability with 1.3?
15:35 dnolen: `fogus: I know that. So what does "this" add?
15:35 gtrak: someone needs to give marick a hug
15:35 ibdknox: gtrak: ?
15:36 `fogus: Even in Clojure the interop forms allow things that allow the host semantics to bleed through
15:36 gtrak: he's wailing on clojure for bad reasons I think
15:36 ibdknox: link?
15:36 clojurebot: your link is dead
15:36 gtrak: http://
15:37 TimMc: `fogus: Looks reasonable.
15:37 What is this-as?
15:38 macro, or special form?
15:38 `fogus: macro
15:39 ibdknox: gtrak: 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:40 TimMc: ?
15:40 gtrak: I 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:40 TimMc: ibdknox: Rather, what project?
15:40 ibdknox: TimMc: C# and VB
15:41 dnolen: `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 `fogus: dnolen: 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:41 dnolen: `fogus: haha, I didn't think that you were :)
15:41 `fogus: dnolen: the extend-object! is still a questionable addition. it's not guaranteed to stay
15:42 gtrak: ibdknox, yea, I agree the community wants to be a bunch of elite guys
15:42 dnolen: gtrak: ibdknox: huh, who are these fabled "elite" people?
15:42 gtrak: hell, rich already argued about this with yegge
15:43 ibdknox: well, I didn't agree with Yegge either lol
15:43 gtrak: well you know, people that are willing to learn a lisp and care about speed
15:43 TimMc: I can't tell what that guy is on about.
15:43 ibdknox: he wants the opposite extreme
15:44 `fogus: I didn't see the Strangeloop talk, but as far as I know neither did Mr. Marick
15:46 But 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:47 dnolen: ibdknox: do you have any simple improvements in mind? (community-wise)
15:48 ibdknox: dnolen: redoing clojure.org would make a huge difference
15:48 trptcolin: "simple" - i see what you did there :)
15:48 ibdknox: haha
15:48 dnolen: :D unintentional! I'm one of the brain-washed, Marick was right! NOOOOO!
15:49 trptcolin: lol
15:49 ibdknox: hahaha
15:49 :p
15:49 dnolen: my issues are primarily around the experience of getting started with Clojure
15:50 dnolen: ibdknox: 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:50 ibdknox: dnolen: there's a lot we need to do to onboard people, some of it is very simple, some of it isn't
15:50 and there are some people who are helping out immensely, especially on here
15:51 but you average dev doesn't use IRC
15:51 your*
15:51 gtrak: well, what would be a clear goal for the community? I'd hate to see clojure turn into a blub language
15:52 ibdknox: gtrak: let's talk about it at the Conj :) By then I'll have things to show
15:53 gtrak: I'll be there for sure
15:53 ibdknox: I have lots of exciting things in the works :)
15:54 `fogus: ibdknox: I doubt that any solid entry in the way of getting started would be rejected
15:56 It's a worthy goal
15:56 I wish that I had a great idea to solve it, believe me I would have by now
15:56 trptcolin: this is the thing i really want: http://
15:56 `fogus: trptcolin: Me too
15:57 I know Russ and he's still motivated to do it
15:57 trptcolin: awesome
16:00 * `fogus sad panda
16:02 Blafasel: Some feedback from a guy that started with clojure a couple days ago:
16:03 - the google hits are crap (you often end up on outdated pages, on outdated repositories etc.. Dead github repos)
16:03 - 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:05 - 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:06 dnolen: `fogus: ?
16:06 Blafasel: The 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 `fogus: dnolen: Just the Marick thing. It's unfortunate.
16:08 dnolen: `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:09 gtrak: I 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 `fogus: dnolen: 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:12 dnolen: `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 `fogus: gtrak: 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:12 thorwil: it almost looks like a negative person cult performed due to expecting there to be a person cult
16:13 gtrak: yea... that's why it needs to be addressed
16:14 dnolen: sage advice, https://
16:14 `fogus: gtrak: Not sure how it might be addressed. I'm not sure that my anecdotes would help
16:15 gtrak: maybe picking apart his various concerns and coming up with some kind of community vision we can point back to
16:15 wink: is there any common/default/tried-and-true database solution vor noir web apps?
16:16 dnolen: gtrak: sounds tiresome and in the end probably not effective. Better to put resources into making Clojure easier for newcomers ;)
16:18 gtrak: well, 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:21 wink: to 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:21 I'm not new to programming, not even to functional programming, just to lisp-y stuff
16:21 dnolen: wink: is clojuredocs.org not useful?
16:21 hugod: google often lands you at rich's github repos and gh-pages - just taking those down might help
16:22 wink: dnolen: didn't know it. I'll investigate :)
16:22 * dnolen wishes he could destroy all Clojure information on the web pre Clojure 1.2.0
16:22 wink: one 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:23 it was easy, in the end, but for some languages it would be one click away in the docs. with an example
16:23 Blafasel: wink: Same
16:24 wink: or trying to write my own integer? for lack of finding it
16:24 but all in all, it's tremendously fun :)
16:24 and I can't give enough praise to leiningen
16:24 dnolen: wink: http://
16:24 gtrak: wink, 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:24 Blafasel: I'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:25 It _is_ a lot of fun.
16:25 pjstadig: `fogus: i was at strange loop, and i like many other people thought that what rich said was well worth hearing, however...
16:25 wink: Blafasel: ah well, at least in contrast to scala I can search for syntax constructs and not -> ::> :) or whatever symbol :P
16:25 dnolen: I'm really going to dig into that page :)
16:25 pjstadig: i think that some of the shots he took at TDD and/or agile were directed at strawmen
16:25 gtrak: pjstadig, yea some people took those comments way too seriously
16:26 wink: gtrak: yep, not gotten any book yet
16:26 pjstadig: and frankly the shots at TDD and/or agile were orthogonal to his points, and unnecessary for the presentation
16:26 imho
16:26 gtrak: wink, I like joy of clojure, there's another that came out recently
16:27 or maybe it's not out yet
16:27 trptcolin: pjstadig: agreed; perhaps a bit complecting :) i was there too, didn't find anything offensive"
16:27 but clearly there were some jabs at testing/type systems/category theory
16:28 which is fine
16:28 dnolen: pjstadig: 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:29 pjstadig: particularly 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:29 gtrak: dnolen, I like the way you said that, too bad rich didn't say it like that
16:29 he also jabbed at pattern matching ;-)
16:30 pjstadig: dnolen: i don't see how they occlude deeper ways to get at correctness
16:30 dnolen: No idea is not worth jabbing. This touchy feely crap has got to stop.
16:30 gtrak: dnolen, unfortunately people don't work this way
16:30 maybe even some good coders
16:31 so i think marick a victim of that misunderstanding, too
16:32 seancorfield: pjstadig: i think he was taking shots at folks who use agile / scrum / sprints poorly - same with TDD
16:32 gtrak: yes, i was just reading marick's blog posts on the subject
16:32 pjstadig: seancorfield: i don't think that's how it came across
16:32 maybe i'll need to rewatch the video
16:32 seancorfield: it came across differently to different people i suspect :)
16:32 gtrak: pjstadig, seancorfield, the room laughed hard, a few people tweeted distaste
16:33 trptcolin: dnolen: i agree w/ that. but that means jabs at rich for giving those jabs are ok too, right? :)
16:33 seancorfield: i'm on various xp / tdd / software craft mailing lists and the zealotry of (some) xp / tdd goes beyond religion
16:33 melipone: What's "->>" in clojure? sorry for interrupting but I need an answer
16:33 dnolen: trptcolin: of course. I wish the language panel had gone on longer!
16:33 TimMc: melipone: It's a "threading macro"
16:33 pjstadig: dnolen: yes!
16:33 foodoo: melipone: (doc ->>)
16:33 TimMc: melipone: Not to be confused with Threads
16:33 melipone: meaning?
16:34 Bronsa: ,(doc ->>)
16:34 trptcolin: haha, yeah, Dean was upset that he accidentally cut it off early
16:34 clojurebot: "([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:34 TimMc: gimme a sec
16:34 foodoo: there are good examples in the full disclojure videos on Vimeo
16:34 for ->>
16:34 seancorfield: trptcolin: i was upset that the language panel was 20 minutes short!!
16:34 TimMc: ,(macroexpand-1 '(->> 4 (f b) (c) d (e h i)))
16:34 clojurebot: (clojure.core/->> (clojure.core/->> 4 (f b)) (c) d (e h i))
16:35 TimMc: Haha, never mind that one.
16:35 melipone: ha, it's like apply it seems to me
16:35 pjstadig: well 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:35 TimMc: melipone: http://
16:35 When in doubt, clojuredocs.org
16:35 pjstadig: i 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:36 wink: pjstadig: ever seen a language community without that?
16:36 TimMc: Java
16:36 wink: (ok, besides c++)
16:36 seancorfield: if 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:36 michaelr525`: rich is my hero! ;)
16:36 melipone: thanks!
16:37 seancorfield: i was actually disappointed that dean's heresies talk didn't take sharper shots at various topics
16:37 foodoo: sorry for my ignorance: What is TDD?
16:37 wink: Tests first
16:37 Bronsa: test driven development
16:37 foodoo: ah
16:37 seancorfield: i thought that was a very "safe" presentation :(
16:38 with clojure i think there's a tendency to use the repl to do what some people do with tdd
16:38 wink: seancorfield: sounds like you know these yearly "the state of django" at pycon :P
16:38 seancorfield: oh?
16:38 * seancorfield has never used python
16:38 wink: it's basically an educated rant about what's wrong
16:38 seancorfield: ah...
16:39 wink: and people sometimes get all upset
16:39 while the core team highly appreciates it
16:39 seancorfield: there should be no sacred cows
16:41 `fogus: Please read and comment on the relevant locations. http://
16:41 (relevant locations being mailing list, page comments, and clojure-dev
16:42 cemerick: so I missed the TDD chatterings, eh?
16:43 TimMc: Count yourself lucky.
16:44 pjstadig: Release.Next == 1.4?
16:44 gtrak: Java doesn't have hero worship b/c it's ill-conceived :-)
16:44 pjstadig: what about a 1.3.1 release to address the quick hits that didn't get into 1.3?
16:46 michaelr525`: quick hits?
16:47 pjstadig: documentation changes and bug fixes that we're pretty much ready, but didn't get into 1.3
16:51 michaelr525: pjstadig: why they didn't get there?
16:51 amalloy: michaelr525: 1.3 was taking too long, they wanted to get it out the door
16:52 michaelr525: cool
16:53 well, if I were involved I would probably just be eager to do the interesting stuff..
16:54 like developing new features and such
16:54 pjstadig: michaelr525: right i believe most of these have patches already
16:56 michaelr525: i wonder what motivates the core developers to do their work. i'm pretty sure they are not there for fixing documentation.. hehe :)
16:56 Blafasel: Newbie 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:56 TimMc: michaelr525: I like doing doc work, actually.
16:56 amalloy: Blafasel: i think that is false. provide a concrete a, b, c that produce that behavior
16:57 dnolen: ,(concat '(1 2 3) '(4 5 6))
16:57 clojurebot: (1 2 3 4 5 ...)
16:57 michaelr525: TimMc: you're involved in development of clojure?
16:57 dnolen: (interleave '(1 2 3) '(4 5 6))
16:57 TimMc: ,(let [a [1 2] b [3 4] c [5 6]] ((juxt concat interleave) a b c))
16:57 clojurebot: [(1 2 3 4 5 ...) (1 3 5 2 4 ...)]
16:57 TimMc: michaelr525: Nope.
16:58 Just noting that not everyone hates doing doc.
16:59 michaelr525: TimMc: you must join the core team then!
16:59 TimMc: Or get my CA in.
16:59 michaelr525: joking..
17:00 CA?
17:00 clojurebot: CA is Contributor Agreement: http://
17:00 michaelr525: clojurebot: thanks robot
17:00 clojurebot: thanks for your suggestion, but as usual it is irrelevant
17:00 gtrak: ha
17:00 TimMc: >_<
17:00 pjstadig: michaelr525: 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:01 part of that may just be marketing and communication
17:01 or maybe it is true
17:02 Blafasel: Looking 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:03 michaelr525: pjstadig: 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:03 foodoo: do (transient) and (persistent!) only exist for performance reasons or are there situations where using them is also more elegant?
17:03 gtrak: michaelr525, in practice, that's a terrible idea
17:03 technomancy: foodoo: the former
17:03 TimMc: pjstadig: 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:04 When most of my contributions would be little doc tweaks, it is hard to justify that.
17:04 jkkramer: there must be a web app that lets you sign & mail pdfs
17:04 TimMc: I would have to find it. >_<
17:05 jkkramer: at least it doesn't involve navigating the physical world
17:05 TimMc: And I don't know if Core would accept the equivalent of a fax.
17:05 I mean, imagine if Wikipedia required a CA...
17:07 gtrak: wikipedia is bigger and moves faster than a language implementation
17:10 michaelr525: gtrak: 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:10 gtrak: michaelr525, yea, those guys were really hostile though
17:11 i guess I mean to say, don't fork unless you're going to win
17:11 michaelr525: they were hostile?
17:11 gtrak: yea, the gcc guys
17:11 michaelr525: hehe
17:11 pjstadig: forking is a nuclear option
17:11 jcromartie: who wants to fork?
17:11 gtrak: nobody
17:11 jcromartie: and why?
17:11 ok
17:12 pjstadig: i'd prefer for people to play nice with each other
17:13 michaelr525: sometimes it's a question of ability rather than will :
17:27 amalloy: Blafasel: i put together a quick solution for euler 11, if you're interested
17:27 https://
17:33 foodoo: Is there some good document explaining good indenting style for clojure?
17:33 gtrak: same as lisp
17:33 amalloy: $googe mumble scheme style
17:34 $google mumble scheme style
17:34 lazybot: [Riastradh's Lisp Style Rules - mumble.net main page] http://
17:34 foodoo: s/clojure/lisp/
17:34 lazybot: <foodoo> Is there some good document explaining good indenting style for lisp?
17:34 foodoo: thanks
17:34 duck1123: I always follow the rule, take whatever emacs gives you
17:35 amalloy: duck1123: indeed. there are a couple things it could do better, though
17:35 eg, try ((juxt + -) 10 <newline> 5) - 5 goes in a place that seems definitely wrong
17:36 duck1123: Well, I have a rather large list of things that are counted as defs
17:36 amalloy: duck1123: using clojure-defun-indents?
17:36 wink: hm, counterclockwise does things that appear a bit weird at times
17:37 duck1123: define-clojure-indent is what I have
17:37 amalloy: duck1123: try M-x customize-var clojure-defun-indents
17:37 foodoo: duck1123: That would mean, I need to switch to Emacs from Vim ;)
17:37 amalloy: i added that in 1.7 or so and i love it. much easier than defining that crap yourself
17:38 duck1123: very nice. I'll switch over
17:39 foodoo: amalloy: 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:40 amalloy: duck1123: the other indentation thing i think emacs does atrociously is https://
17:41 here sam should line up with when, not bar; but the introduction of baz causes it to get confused
17:41 duck1123: agreed. I find I end up inserting too many line breaks just to make it look normal
17:41 amalloy: foodoo: not really. i'm susprised it's ever hard to tell, though?
17:43 foodoo: amalloy: Sometimes. But that could also mean that the users try to be clever instead of idomatic and clean
17:45 amalloy: But even if they do code golfing, there is usually something I can learn from the solutions :)
17:46 amalloy: foodoo: i learn a lot from people trying to cram the most amount of logic into the least amount of code
17:46 foodoo: amalloy: But I'm also interested in developing a good coding style in the lispy world
18:11 seancorfield: i like the focus of Clojure 1.4 (documentation around core and contrib) :)
18:12 dnolen: agreed
18:12 and errors
18:13 ibdknox: did I miss that statement?
18:13 seancorfield: yes, although stack traces are more of an issue imo
18:13 ibdknox: seancorfield: I dunno, just look at some of these:
18:13 ,(doc bound-fn)
18:13 clojurebot: "([& 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:13 dnolen: seancorfield: I take it you haven't looked at 1.3 stacktraces yet?
18:14 seancorfield: i use 1.3 all the time :)
18:14 dnolen: seancorfield: no Java stuff, and unmunged
18:14 seancorfield: oh, were the stack traces worse in 1.2?
18:14 ibdknox: lol
18:14 technomancy: clj-stacktrace is still a lot nicer
18:14 especially the alignment, though the coloring helps too
18:15 dnolen: seancorfield: haha, 1.2 stack traces would have terrified you then.
18:16 zerokarmaleft: dnolen: but they were only 20+ levels deep!
18:16 seancorfield: mostly, for me, clojure exceptions escape into non-clojure calling code so there's not much clojure can do to help me there :)
18:16 dnolen: seancorfield: ah then you would have preferred the old way.
18:16 seancorfield: the whole thing needs knobs.
18:17 ibdknox_: and objects that we can inspect and do useful things with :)
18:17 seancorfield: i guess i could look at the root of the exception chain and call a clojure fn to pretty print the stacktrace instead...
18:17 i'm already calling all sorts of clojure stuff from non-clojure code :)
18:19 gtrak: at some point you can't escape from needing to know java and the jvm
18:19 ibdknox_: unless you're in CLJS ;) then you just need to know JS... damn
18:20 gtrak: yes, actually, it's not terribly hard to debug as I thought it would be, and I don't know any js at all
18:22 the hardest part of clojurescript is reading the closure api code
18:23 ibdknox_: heh
18:23 use pinot ;)
18:23 gtrak: pinot?
18:23 ibdknox_: github.com/ibdknox/pinot
18:23 http://
18:24 gtrak: ah, you're adding canvas stuff
18:25 ibdknox_: over the past little bit yes
18:25 gtrak: i was working on a little game engine using google's api's
18:25 ibdknox_: ah :)
18:25 don't use seqs, it'll be too slow :-p
18:25 gtrak: i was trying to figure out how to remove a rectangle and got stuck
18:25 ibdknox_: remove a rectangle?
18:25 gtrak: yea, you know the graphics.createRect or whatever?
18:26 ibdknox_: I just wrote my own, since I was porting over some stuff I did for the node knockout
18:26 gtrak: node.js does graphics?
18:27 ibdknox_: it could, but no, I wrote a game :) http://
18:27 gtrak: ah yea, I played that
18:27 super easy :-)
18:27 ibdknox_: I know
18:27 lol
18:27 didn't get to play test it much :( haha
18:28 gtrak: is that all canvas then?
18:28 ibdknox_: yessir
18:29 gtrak: I'll take a look at pinot then, no use reinventing wheels
18:31 but you've hard-coded the looping intervals
18:31 ibdknox_: hm?
18:31 you should be using animation frame to handle the render loop
18:31 and 10 ms is pretty standard for the update loop
18:32 gtrak: so the update is asynchronous to the draw?
18:32 I'm used to doing it all in frames
18:32 ibdknox_: yep, you need it to be to ensure consistency
18:32 otherwise a game would play differently every time
18:33 gtrak: ibdknox, how so?
18:34 ibdknox_: gtrak: http://
18:34 gtrak: only if it takes longer than a frame to do stuff, yes?
18:34 i'm completely new to js, btw
18:35 ibdknox_: no worries, I just thought that was a better explanation than I could give here :)
18:35 gtrak: yea, np, I mean, I'm used to C++ thinking for game stuff
18:37 so does the browser interrupt execution to handle a timer?
18:38 ibdknox_: I'm actually not sure how that happens. I know with the more recent versions it's extremely complex now
18:38 kjeldahl: ibdknox_ Great link, thanks!
18:38 ibdknox_: like request animation frame operates outside of the rules of normal timers
18:39 and monitors screen refresh rate
18:39 gtrak: sure, 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:39 ibdknox_: yeah
18:40 except for animationframe I think
18:40 lol
18:40 gtrak: ha
18:40 wonderful
18:40 brehaut: and web workers
18:40 ibdknox_: I won't claim to know a ton about this part of JS myself, though, so I could be making it up :)
18:40 that was the first game I had written
18:41 gtrak: well, are there any js forums with good snr?
18:41 brehaut: the rules around when animationFrame, timeouts, intervals and web worker/socket events enter JS are all different, and i think differ between browsers too
18:43 gtrak: also is there any progress on dealing with cljs libs? what's the modern way?
18:44 ibdknox_: well
18:44 if you use cljs-watch
18:44 crazyFox: what 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:44 ibdknox_: you can just do it like you do with any lein project
18:44 add [pinot "0.1.1-SNAPSHOT"] to your project.clj and roll with it :)
18:45 gtrak: wait, huh?
18:45 cljs uses project.clj?
18:45 ibdknox_: I usually create leiningen projects for them because there's some server showing the page
18:46 gtrak: does the compiler care about what subdirectory stuff is in or can I do what I want there?
18:47 thinking I could just pull in the git repo and hack away
18:48 ibdknox_: any dir is fine
19:05 symbole: I 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:08 Blafasel: ,(doc pr)
19:08 clojurebot: "([] [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:08 Blafasel: ,(doc print)
19:08 clojurebot: "([& 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:09 ibdknox_: ,(pr ["hey" "how" "are" "you"])
19:09 clojurebot: ["hey" "how" "are" "you"]
19:09 ibdknox_: ,(print ["hey" "how" "are" "you"])
19:09 clojurebot: [hey how are you]
19:19 jli: I 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:19 there'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:22 this must already exist... oh well
19:25 ibdknox_: jli: As long as it always grabs anything with ibdknox in it, sounds like it'd be a winner ;)
19:26 jli: ibdknox_: but of course :)
19:26 ibdknox_: I know there was such a thing
19:26 crazyFox: technomancy: are you around?
19:27 ibdknox_: but now I can't find it
19:33 crazyFox: could 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:37 symbole: crazyFox: What's the exact error?
19:39 crazyFox: (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:40 symbole: you're running it from the root of your project?
19:40 crazyFox: yea
19:41 symbole: Can you dump the whole thing somewhere?
19:43 crazyFox: symbole: error message from leiningen: http://
19:46 symbole: project.clj and directory tree: http://
19:46 symbole: Firewall is blocking it. Grrrr! Try this please http://
19:46 TimMc: or github
19:47 ~gist
19:47 clojurebot: Excuse me?
19:47 TimMc: ~paste
19:47 clojurebot: paste is http://
19:48 dnolen: ClojureScript stacktraces from Browser REPL - sweet
19:49 crazyFox: symbole: its all here http://
19:50 symbole: crazyFox: Are you using Clojure 1.3?
19:50 crazyFox: yes
19:52 konr: What's the cheapest way to host a clojure web app?
19:52 zodiak: konr heroku
19:53 TimMc: home server
19:53 ibdknox_: cheapest?
19:53 elastic beanstalk is *way* cheaper than heroku
19:53 zodiak: heroku is free, how do you get cheaper ?
19:54 ibdknox_: heroku is free for one dyno
19:54 konr: yeah, I don't to spend lots of money in a web forum, nor mix it with my personal data
19:54 thanks zodiak!
19:54 zodiak: de nada
19:54 konr: ibdknox_: elastic beanstalk! I'll take a look! Thanks :)
19:54 ibdknox_: as is elastic beanstalk
19:54 the minute you want anything more than that though... :)
19:56 konr: if you wanna do heroku here's a tutorial: http://
19:56 seancorfield: clojure.contrib.duck-streams - that's in contrib 1.2.0 but not listed in the modules here: https://
19:56 what was it? where did it go? or was it deprecated?
19:57 konr: ibdknox_: thanks!
19:57 ibdknox_: seancorfield: I think part of it was pulled into java.io, and the rest disappeared? People are often looking for it though
19:58 crazyFox: symbole: is clojure 1.3 a problem?
19:59 TimMc: ibdknox_: Would you say Heroku or EB is easier to get started with?
19:59 ibdknox_: TimMc: roughly equivalent, Heroku is probably a bit less of a pain to sign up with
19:59 TimMc: k
19:59 ibdknox_: the heroku workflow is beautiful too :)
20:00 seancorfield: yeah, +1 for heroku
20:00 ibdknox_: The only problem is it can get a little expensive
20:00 on an AWS box I can run 20 sites if I wanted
20:00 for heroku, each one is a separate dyno and costs me money individually
20:01 seancorfield: right, as you scale up, you usually have to move off heroku to aws or rackspace cloud or something
20:01 konr: I think I'll stick with EB, then
20:02 seancorfield: clojure.contrib.pprint became... clojure.pprint, right?
20:02 gfredericks: either that or they have suspiciously similar names and functionality
20:04 seancorfield: ooh, where did clojure.contrib.shell and clojure.contrib.shell-out go?
20:04 * seancorfield is updating wiki documentation to help folks migrate to 1.3
20:04 ibdknox_: seancorfield: clojure.java.shell
20:04 seancorfield: thanx!
20:06 i removed all the contrib stuff from http://
20:07 there 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:08 ibdknox_: predates me, so I'm not sure :)
20:08 dnolen: seancorfield: yes about pprint
20:09 konr: What's the best way to check out existing software? Clojars?
20:09 dnolen: konr: checkout? or use?
20:09 ibdknox_: konr: what are you looking for?
20:09 konr: dnolen, ibdknox_ I want to check out for existing forum software in clojure
20:10 seancorfield: ibdknox_: clojure.contrib.apply-macro and clojure.contrib.condt for example... never made it into contrib 1.2.0
20:10 ibdknox_: I don't think there is any
20:10 seancorfield: ah, I see
20:10 seancorfield: konr: there are very few full-fledged web applications available in clojure yet - just lots of tools for building such things
20:11 dnolen: tx for the confirm on pprint
20:11 glob157-1: Any good way to build publication quality charts from in canter?
20:12 dnolen: seancorfield: you mean full fledged open-source web applications, there are closed source ones.
20:12 ibdknox_: yeah
20:12 dnolen: konr: some stuff on github
20:12 ibdknox_: there aren't many prepackaged solutions for clojure
20:13 only thing I can think of is cowblog
20:13 https://
20:14 seancorfield: dnolen: oh? what full fledged web apps are built in clojure?
20:14 ibdknox_: seancorfield: www.typewire.io
20:14 :)
20:15 seancorfield: heh, i meant downloadable products, not websites
20:15 ibdknox_: hm web apps = downloadable?
20:15 gmail is a web app
20:15 seancorfield: desikiss.com, lovingbbw.com, latinromantico.com, deafsinglesmeet.com and vietvibe.com have a fair bit of clojure behind them too :)
20:16 downloadable... 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:17 ibdknox_: ahh, I see
20:17 seancorfield: phpbb
20:17 ibdknox_: cow blog is it, as far as I know :)
20:17 seancorfield: cfml (coldfusion) has a bunch of downloadable web apps (mostly free open source) but nothing as polished as some of the php stuff
20:18 i'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:19 ibdknox_: those systems are usually very, very painful to work with
20:19 once upon a time ago I worked on a number of drupal and joomla sites *shudder*
20:19 dnolen: seancorfield: tho I don't see anything preventing such things. I didn't totally hate the Django model.
20:20 seancorfield: true, 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:23 ibdknox_: django is a framework though, not a complete end to end solution
20:23 robermann: ,((fn [] '( + 1 2)))
20:23 clojurebot: (+ 1 2)
20:23 robermann: ,(((fn [] '( + 1 2))))
20:23 clojurebot: #<ClassCastException java.lang.ClassCastException: clojure.lang.PersistentList cannot be cast to clojure.lang.IFn>
20:23 robermann: Can I run ((fn [] '( + 1 2))) ?
20:24 I mean; how can I evaluate dinamically a '(+ 1 2) without using eval?
20:26 gfredericks: robermann: what's the purpose
20:27 obviously 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:27 robermann: I resolved this problem using eval: http://
20:27 but I "tripped the alarm!"
20:27 gfredericks: ah hah
20:27 robermann: :)
20:27 gfredericks: I think the key here is that the set of possible functions is restricted
20:28 you don't have to deal with arbitrary clojure code, just the pieces specified in the problem
20:28 robermann: yep - but here eval is not listed: http://
20:28 gfredericks: so what you want is a function that takes a list as input, looks at it, and decides what to do
20:29 I'm not sure what you mean by it not being mentioned in the directions
20:30 robermann: They say that "to use "def" or switch namespaces" is not allowed - I thought using eval was permitted :)
20:30 seancorfield: 4clojure 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:30 gfredericks: and certainly it violates the spirit of that particular problem
20:30 robermann: yes, I can see
20:30 dnolen: ibdknox: true, though it has those too.
20:31 robermann: mm so, given an input list like '(+ 1 2) I should be able to evaluate it right?
20:32 and of course ('(+ 1 2)) does not work
20:33 mmm here 2:30 am maybe too tired :D
20:37 seancorfield: robermann: 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:38 so (f '(+ a 2)) would return some function, call it g, that when called like this (g {:a 4}) would return 6
20:40 the returned function has to recursively walk the expression and evaluate it by inspecting the code and supporting just + - * / numbers and lookup of variables
20:40 does that help?
20:41 robermann: yes I wrote http://
20:41 so I should execute that symbol browsing the list
20:42 I mean, decoding all the + - etc
20:42 TimMc: Look it up in a map.
20:42 robermann: ok, I think I understood your advice
20:42 TimMc: If you weren't restricted by the sandbox, you would use resolve. :-)
20:42 robermann: thank you all :)
20:49 seancorfield: you're basically writing an interpreter for a small subset of lisp :)
20:51 TimMc: Yeah, this reminds me quite strongly of PL class at Northeastern.
20:51 whatchamacallit, a metacircular evaluator
20:52 robermann: yes - my first step towards a new Clojure 2.0 ! :)
20:54 * TimMc writes a new LISP that uses Windows-1252 smart quotes instead of parens.
20:57 robermann: so men - good hacking and good night/morning
20:57 see you
20:58 seancorfield: of course now i had to go and solve the problem myself because i couldn't focus on my work until i had!
20:58 4clojure is quite a bit slicker since i last played
20:59 amalloy: seancorfield: a lot of pending improvements just waiting to be deployed, too
20:59 robermann: I know - and it causes addiction too
20:59 so... no, really I have to go to bed :D
20:59 bye
21:00 seancorfield: lol, g'nite robermann
21:00 amalloy: the ajaxy stuff around running the code is very slick - nice work
21:00 (to whoever wrote that part)
21:01 amalloy: seancorfield: a transient contributor, i think, who we haven't seen since. it's definitely nice to be open-source
21:02 seancorfield: sigh... i last played when there were 65 problems
21:02 i might have to waste a weekend catching up :)
21:03 amalloy: seancorfield: more than a weekend. there are some tough problems now
21:04 seancorfield: no... must... not... get... distracted...!
21:21 jli: hm
21:22 I'm running a ring webapp with a gzip middleware
21:22 and using apache as a proxy in front of it, so I can hide the random port I'm running jetty on
21:23 accessing jetty directly is close to instant, while through apache, there seems to be a weird ~15s timeout
21:23 and disabling the gzip middleware in ring fixes it. any ideas?
21:26 looking at the tcpdump, there's a Keep-Alive timeout of 15s, which is the time it takes to load
21:27 TimMc: Can you muck with the timeout?
21:27 (for diagnosis)
21:30 jli: what would I learn?
21:30 TimMc: Whether it is a coincidence. :-)
21:30 jli: pretty sure not - it's 15s plus some millis in the tcpdump timestamp
21:35 hm. I wonder if apache is gzipping it again or something...
21:36 ah ha!
21:38 the 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:38 the browser must be waiting for the "rest" of the data
21:39 amalloy: jli: ooc what gzip middleware are you using?
21:40 the problem you're having sounds like one i ran into when i was writing my own gzip middleware
21:40 jli: org.clojars.mikejs/ring-gzip-middleware
21:40 the version perhaps should have tipped me off
21:40 0.1.0-SNAPSHOT
21:41 amalloy: jli: i think that's the base i used to write my own
21:42 you might try out [amalloy/ring-gzip-middleware "0.1.0"]
21:42 which 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:44 oh, i even forked his repo. good for me
21:44 jli: ah, sweet
21:44 amalloy: https://
21:44 jli: would ring take it?
21:45 amalloy: jli: like, make it a part of ring proper? perhaps, but who cares
21:46 jli: amalloy: 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:47 amalloy: jli: 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:48 then it sends a bunch of blocks, "this chunk is N bytes, here they are"
21:48 the last chunk is of zero length, perhaps?
21:49 jli: amalloy: ah, I do see "Transfer-Encoding: chunked" with the response ending in "0" for my index.html, with no Content-Length
21:50 and for my big javascript file, I see the *incorrect* Content-Length (it's the length of the original file)
21:50 but 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:50 hm.
21:51 amalloy: but apache won't put up with that while proxying? plausible, i suppose
21:52 jli: when going through the apache proxy, I see Keep-Alive headers
21:52 so I think the tcp connection stays open until it finally times out 15s later
21:52 amalloy: i see
21:52 jli: at which point the page loads correctly
21:52 amalloy: anyway: use my fork, problem solved?
21:52 jli: yeah, I think so :)
21:56 amalloy: jli: fwiw, 4clojure uses it to gzip all its content and hasn't had trouble. so it's at least a little battle-tested
21:58 jli: amalloy: 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:59 how did you notice the bug?
21:59 amalloy: i don't remember. it was months ago
21:59 probably the same way you did
21:59 jli: oh, maybe because you realized you couldn't know if you were streaming it?
21:59 amalloy: oh, of course
22:01 jli: heh
22:01 cool.
22:02 amalloy: i wonder why i cared so much about not reading the whole thing into memory at once
22:03 jli: amalloy: do you no longer think it matters?
22:04 amalloy: *shrug* i still think it's "right" not to read it all
22:07 oh right, i was going on a performance binge, improving page load/render speed for 4clojure
22:08 and we were serving up, uncached and unzipped, like 1MB of javascript
22:08 * gfredericks imagines the project manager at 4clojure Inc getting worked up about arbitrary aspects of the product
22:08 amalloy: so i zipped it, and attached headers/meta to avoid retransferring if nothing has changed
22:11 gfredericks: that actually happens
22:12 gfredericks: amalloy: he's under pressure to put something good on the monthly report that the CIO will glance at?
22:13 amalloy: gfredericks: whiny users tell him they wish 4clojure.com redirected to www.4clojure.com instead of transparently serving the same content
22:13 gfredericks: how does that inconvenience anybody?
22:13 I guess stuff could get indexed twice...
22:14 amalloy: gfredericks: broswer doesn't know the cookies/passwords are the same
22:14 gfredericks: oh and that
22:14 why doesn't technology just work?
22:14 doesn't it know what it should do?
22:14 jli: DWIM!
22:14 amalloy: so 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:15 these changes not yet deployed, though :P
22:15 * gfredericks fires off some angry tweets blasting 4clojure
22:15 jli: amalloy: 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:16 or maybe I'm wrong. double-checking
22:16 amalloy: huhhhh, how can it?
22:16 apache doesn't even have a guess as to what content-length to serve, it's just delegating
22:17 jli: no, I'm wrong. seems like it's still using the old library somehow? grr
22:20 jayunit100: hahahahahahah
22:21 gfredericks: ,(println "&(println \"hahahahahahah\")")
22:22 clojurebot: &(println "hahahahahahah")
22:22 lazybot: ⇒ hahahahahahah nil
22:27 jayunit100: @gfredricks whats the comma do
22:28 gfredericks: gets clojurebot's attention
22:28 he likes commas
22:28 jayunit100: oooo ok lol
22:51 jli: amalloy_: 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:52 0.5 hours down, 9,999.5 left to go :)
22:56 amcnamara: we just updated 4clojure with a new look (and small fixes to ranking and solutions pages), would love some feedback
22:56 everyone ^
22:57 * gfredericks just failed problem 7 on his first try
22:58 jli: did the logo change recently?
23:00 dnolen: cemerick: you're being nice, but I think Marick is indeed trolling. On multiple fronts.
23:01 cemerick: heh
23:01 I don't know. But then, I try to give everyone the benefit of the doubt, especially online.
23:02 trptcolin: and here i thought rich was trolling w/ the whole driving-into-the-guardrails thing :)
23:02 cemerick: trptcolin: oh, Rich was *definitely* trolling ;-)
23:02 I think that was pretty explicit.
23:02 But I think the point is, that should be OK — it's his keynote, after all.
23:03 trptcolin: fair
23:03 cemerick: It'd be a horrible thing to have to live in a PR cocoon in order to build a "successful" community/language.
23:03 It's certainly not required: I remember witnessing all sorts of mayhem anytime Guido talked down FP.
23:04 And 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:05 jli: elementary 4clojure problem taught me something. didn't expect (= [:a :b :c] '(:a :b :c))
23:05 dnolen: cemerick: 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:05 cemerick: Anyway…I'm writing up a comment. Hopefully Brian will be less stressed once the real video is out, etc.
23:06 trptcolin: dnolen: c'mon, that metaphor?
23:06 i'm all for rational criticism
23:06 and funny metaphors
23:06 dnolen: "The dodgy attitudes come from the Clojure core, especially Rich Hickey himself, I’m sad to say."
23:06 that's a hard line to justify.
23:06 cemerick: dnolen: 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:07 amcnamara: since when does the core team have dodgy attitudes?
23:07 ibdknox: hm
23:07 trptcolin: yeah, 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:07 gfredericks: cemerick: as someone who self-identifies with lots of ideas, I take offense at that personal attack!
23:07 ibdknox: things were a little heated lately I think
23:08 * gfredericks tries to figure out if his joke made sense or not
23:08 trptcolin: some of it was reasonable, some purely funny metaphor
23:08 cemerick: ibdknox: Indeed. I don't think using twitter as the main vehicle of discourse helped much, either.
23:08 trptcolin: +1
23:08 ibdknox: not at all.
23:09 dnolen: trptcolin: I would agree w/o you - except Marick be naming names - not cool.
23:09 ibdknox: cemerick: 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:09 amalloy: jli: yes, new logo is part of (indeed most of) the new look
23:10 cark: whatwhat ? there's a new clojure logo ?
23:10 cemerick: There's a little drama at every language/community-specific conf.
23:10 jli: cemerick: yes. it's really unfortunate people try to squish coherent thoughts into 140chars. I don't think it's possible.
23:11 cark: not clojure itself, http://
23:11 cemerick: jli: Human nature. We'll try to squish coherent thought into smoke signals, too. :-)
23:11 ibdknox: cemerick: yes, but I'm hoping something good comes out of it. :)
23:11 jli: not... enough... bits... :(
23:11 trptcolin: dnolen: yeah, not how i would've approached it; though i'm not as married to agile/tdd
23:13 danlarkin: I have a question which is entirely unrelated to drama
23:13 jli: YES!
23:13 danlarkin: cons : list :: ? : hashmap
23:13 the cons cell, I should say
23:14 jli: you mean, what's the underlying data structure?
23:14 cemerick: lists aren't made of conses, so I'm not sure what to put in ?
23:14 danlarkin: jli: I suppose... more like what's the most simplistic reduction
23:15 dnolen: ,(conj {} '[foo bar])
23:15 danlarkin: cemerick: this is kind of a "let's pretend they are" situation
23:15 clojurebot: {foo bar}
23:15 dnolen: there is no cons, only conj
23:15 trptcolin: ,(type (first {:a "b"}))
23:15 clojurebot: clojure.lang.MapEntry
23:15 cemerick: danlarkin: then, as dnolen demonstrated, entries
23:15 dnolen: conj : ?
23:16 jli: cemerick: what do you mean lists aren't made of conses?
23:16 scgilardi: and MapEntries print as two-element vectors and two-element vectors can be auto-converted to map entries as needed.
23:16 cemerick: jli: They aren't. They are in other lisps; not so in Clojure.
23:17 * gfredericks wants to know what clojure lists are made of
23:17 trptcolin: rainbows and unicorns!!!
23:17 sorry couldn't resist
23:17 gfredericks: is (cons 'foo []) a cons?
23:17 cemerick: a head object, and a tail list
23:17 danlarkin: yes, I suppose MapEntry fits in the question mark slot
23:17 dnolen: ,(type (cons 1 nil))
23:17 clojurebot: clojure.lang.PersistentList
23:18 dnolen: ,(type (cons 1 ())
23:18 clojurebot: #<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: EOF while reading>
23:18 gfredericks: cemerick: I do not know the difference between that and a cons
23:18 dnolen: ,(type (cons 1 ()))
23:18 clojurebot: clojure.lang.Cons
23:18 * danlarkin looks up MapEntry.java
23:18 jli: cemerick: are you talking about what users should think about, vs. implementation details?
23:19 cemerick: jli: one shouldn't generally think about conses *or* lists. Think of collections and seqs.
23:19 The latter are abstractions. The former are impementations.
23:20 jli: cemerick: right, yeah. but I'm talking about implementation :)
23:20 or, interested in knowing about
23:20 ibdknox: cemerick: I hear you're visiting us in san fran soon?
23:20 cemerick: jli: well, lists aren't made of conses :-)
23:20 trptcolin: amalloy: i like the new 4clojure look. haven't visited in awhile; especially like the not-yet-solved-at-the-top view
23:21 cemerick: cons == clojure.lang.Cons
23:21 amalloy: trptcolin: yeah, that's new as of...monday?
23:21 jli: cemerick: gack, so what are they made of then?
23:21 cemerick: clojure.lang.PersistentList never uses it
23:21 danlarkin: and for everyone's edification, clojure.lang.MapEntry has two ivars, final Object _key and final Object _val.... makes perfect sense!
23:21 cemerick: jli: a head object, and a tail list
23:21 trptcolin: oh really? i seriously haven't been in months; picked a great time to come back!
23:22 cemerick: ibdknox: yeah, seancorfield recruited me (tbatchelli did earlier as well) :-)
23:22 Java One, talk there on Tuesday, then you guys on Thursday.
23:22 It'll be…interesting ;-)
23:23 Especially since the thursday talk's content isn't implemented completely, nevermind prepared fully.
23:23 ibdknox: cemerick: haha, well if you need anything, let me know. I'd be happy to help.
23:23 jli: cemerick: why's that functionally different from cons? because cons have 2 pointers to arbitrary things, and so aren't necessarily well-formed lists?
23:23 gfredericks: cemerick: so by 'conses' you were simply referring to the class by that name?
23:23 dnolen: anyone know what abedra's gonna talk about at the Script Bowl?
23:23 gfredericks: jli: PersistentList has two privates: _first and _rest
23:23 dnolen: ,(cons 1 (lazy-seq nil))
23:23 clojurebot: (1)
23:24 dnolen: ,(type (cons 1 (lazy-seq nil)))
23:24 clojurebot: clojure.lang.Cons
23:24 cemerick: gfredericks: well, yes; those are what `cons` return
23:24 dnolen: ,(type (cons 1 (list 2 3)))
23:24 clojurebot: clojure.lang.Cons
23:25 gfredericks: cemerick: 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:25 cemerick: jli: IIRC, using conses directly made the lazy sequence abstraction less lazy.
23:25 dnolen: ,(type (conj 1 (list 2 3)))
23:25 clojurebot: #<ClassCastException java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IPersistentCollection>
23:25 cemerick: There's a wiki page about that somewhere, I think.
23:25 dnolen: ,(type (conj (list 2 3) 1))
23:25 clojurebot: clojure.lang.PersistentList
23:26 cemerick: ibdknox: Thanks. Things should go smoothly. We'll see how quickly I tame the ClojureScript… ;-)
23:26 dnolen: cemerick: ClojureScript is very tameable - initial thoughts?
23:26 cemerick: gfredericks: well, clojure conses are never any pair; the tail must be a seq.
23:27 Not being able to create a dotted pair is probably already a bridge too far if you're really married to the cons concept.
23:28 dnolen: gfredericks: tho if you want dotted pairs, there's always core.logic
23:29 jli: dnolen: I've done some little things with clojurescript - it's fun! I can pretend to be a web programmer now :)
23:29 ibdknox: web programming sucks ;)
23:30 jli: dnolen: 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:31 dnolen: jli: leaks mostly problematic in ancient browsers like IE6
23:31 cemerick: dnolen: 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:31 dnolen: jli: if you abstract over google events, you're probably ok
23:31 jli: dnolen: oh, so event handlers on removed dom elements get GC'd?
23:31 ibdknox: jli: most libraries prevent that from happening now
23:31 cemerick: It is a definitely bummer that cljs isn't available from a repo yet though; that is a pain.
23:32 jli: cemerick: what do you mean?
23:32 ibdknox: cemerick: I tried
23:32 cemerick: I may offer to fix that; I thought I saw an issue for that.
23:32 ibdknox: oh?
23:32 dnolen: cemerick: well … I wonder how serious rhickey is about no releases for CLJS
23:33 cemerick: dnolen: Is there a link for such a statement?
23:33 dnolen: #strangeloop
23:33 cemerick: ah
23:33 technomancy: having to set $CLOJURESCRIPT_HOME makes me cringe and think of hadoop a bit =\
23:33 cemerick: I will aim to disabuse him of that notion, then.
23:33 dnolen: I know's he's pissed about Clojure releases
23:33 ibdknox: cemerick: 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:33 cemerick: ./bootstrap.sh, the new autoconf
23:34 ibdknox: I haven't tried lately
23:34 maybe I'll give it another go
23:34 technomancy: cemerick: careful; autoconf is very nearly in "don't even joke about it" territory =)
23:34 cemerick: technomancy: in a good or bad way?
23:34 I assume the latter
23:34 dnolen: technomancy: you getting on the CLJS bandwagon now?!
23:35 cemerick: dnolen: the actual release process, or the community extracurriculars?
23:35 technomancy: dnolen: not sure, but probably at some point now that I work for a company that does web apps =)
23:35 dnolen: technomancy: figured!
23:36 cemerick: ibdknox: so you tried to bundle it up and use it 'headless'?
23:36 dnolen: cemerick: I think he's unhappy with people waiting around for official releases. He seemed more interested in the Google Closure model.
23:36 ibdknox: cemerick: https://
23:37 cemerick: essentially, yes
23:38 cemerick: dnolen: the "send out a tarball from svn" model, that is?
23:38 dnolen: cemerick: no - everyone just works off HEAD model.
23:39 cemerick: heh, yeah
23:39 technomancy: that's the slime model
23:39 dnolen: technomancy: but slime doesn't maintain a matrix of dependant libs right?
23:39 Google Closure does
23:39 technomancy: it actually worked out ok for them as long as everything that interacted with slime was in the repo
23:39 dnolen: you can veto commits
23:39 ibdknox: why not just do point releases all the time?
23:40 technomancy: dnolen: slime has the elisp client and swank servers for various CL implementations all in the same repo in lockstep
23:40 ibdknox: is there a way to specify latest in a maven dep?
23:40 dnolen: technomancy: but not Clojure :P grrr
23:40 cemerick: ibdknox: every commit => release to central? Clojure v1.4.833?
23:40 That might actually work.
23:40 technomancy: dnolen: yeah, but I'm not sure I would want that even if they changed their mind about not caring about clojure
23:41 dnolen: technomancy: why not?
23:41 technomancy: dnolen: I like stable releases
23:42 and 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:42 dnolen: technomancy: 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:42 danlarkin: working from HEAD or whatever only gets yo so far
23:42 dnolen: most devs aren't
23:42 danlarkin: eventually you need to ship, and get backported bugfixes or whatever
23:42 dnolen: the tension is the psychology of … I won't upgrade till the next big point release.
23:42 danlarkin: and that can't happen with everybody-works-from-HEAD model
23:42 technomancy: dnolen: also most of the changes to slime head recently come with no actual upside
23:43 dnolen: technomancy: but that's really relevant. eventually some commit will come in that you want, and the gap is now a gulf.
23:44 not really relevant I mean.
23:44 technomancy: dnolen: 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:45 cemerick: I remember when there was hesitation about putting out a 1.0 to begin with.
23:45 dnolen: technomancy: "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:45 cemerick: I think it's hard to argue that things would be as they are today if drops from HEAD were the path taken.
23:46 cark: clojure and cl are very different beasts
23:46 technomancy: it would have to be a pretty badass feature to convince me to use CVS un-ironically
23:47 dnolen: I suppose be open to it, I'm just not inclined to spend the effort myself.
23:47 dnolen: technomancy: of course. (wow, I don't think I knew SLIME was still on CVS, WTF)
23:47 cemerick: ibdknox: so that cljs-compiler-jar artifact is something you published?
23:47 ibdknox: cemerick: yeah
23:48 trptcolin: i'm totally OH'ing technomancy
23:48 cemerick: Let us now all say about SLIME: WTF.
23:48 dnolen: cemerick: bridge too far man.
23:48 cemerick: lol
23:48 I have to let my emacs hate out of the cage every now and then ;-)
23:48 technomancy: dnolen: pretty sure it's the last thing I actually directly use that's still in CVS
23:48 now that I switched off screen to tmux
23:49 maybe bash?
23:50 cemerick: Though I was nearly convinced at strangeloop to give it another try sometime soon.
23:50 technomancy: relevant: http://
23:50 * technomancy pokes at his ears
23:50 technomancy: what
23:50 danlarkin: oooooh that's a good one
23:51 cemerick: yeah, that's classic
23:52 ibdknox: do you remember what the concrete error/failure was?
23:53 (oh please, let the cljs compiler not require a src dir)
23:54 dnolen: cemerick: you still need that stuff. resolving namespaces and all that. worth it IMO.
23:55 chouser: wow, the stars are all out on #clojure on a Friday night.
23:55 clojurebot: this is not IRC, this is #clojure. We aspire to better than that.
23:55 chouser: technomancy: congrats on the new gig
23:55 cemerick: dnolen: not for what I'm doing. But I need to shut up until I actually dig in properly.
23:56 chouser: And along comes Polaris! ;-)
23:56 technomancy: chouser: thanks!
23:56 ibdknox: haha
23:56 technomancy: new gig?
23:56 technomancy: ibdknox: starting at Heroku next week
23:57 ibdknox: cemerick: it stopped loading core.cljs, past that I don't remember. I'll try again tomorrow :)
23:57 sweet!
23:57 technomancy: my girlfriend works for salesforce :)
23:57 technomancy: ibdknox: cool. never worked for a >50 company before
23:57 sounds like heroku is pretty independent in practice though
23:58 ibdknox: that's my understanding as well
23:58 so hopefully it won't be too bad ;)
23:58 dnolen: technomancy: the future of Clojure deployment … at your fingertips.