2011-09-30
| 00:00 | Zolrath | Hm I'm trying to use Google Closure like JQuery and I don't know if that's a good idea |
| 00:00 | amalloy | cark: you can only adjust reflection warnings around top-level forms, because they are compiled as a unit |
| 00:00 | cark | amalloy: that's unfortunate =( |
| 00:01 | cark | my problem is with proxy-super |
| 00:01 | cark | it always gives warnings |
| 00:01 | cark | so i need to expand it to proxy-call-with-super |
| 00:01 | cark | and manually anotate it |
| 00: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 |
| 00:01 | cark | while i really don't care about performances for this part |
| 00:03 | cark | there is some kind of a barrier which prevent macros to propagate type hints |
| 00:03 | cark | i'm guessing there is some good reason for that |
| 00:03 | cark | but it's annoying |
| 00:05 | amalloy | cark: there is no such barrier |
| 00:08 | cark | well there is |
| 00:08 | cark | trying to make a short example |
| 00:09 | cark | actually you're right... maybe my earlier tests were bad |
| 00:10 | cark | or it changed at some point |
| 00:12 | cark | well then it begs the question, why is the "this" captured symbol not annotated in a proxy declaration ? |
| 00:16 | brehaut | https://plus.google.com/115094562986465477143/posts/Di6RwCNKCrf another reason lein (ok and cake) are great |
| 01: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? |
| 01:52 | companion_cube | it would be more efficient to waitt for the first thread that began computing the value |
| 01:52 | companion_cube | maiss then you have to know that some thread is computing it |
| 01:52 | companion_cube | but then* |
| 01:54 | cemerick | making it so that f returned a future that contains the result for a given set of parameters gets around that cleanly. |
| 02:06 | amcnamara | Raynes: how's meet clojure coming along these days? |
| 02:08 | amalloy | anyway, if anyone is interested in that, https://gist.github.com/1252810 is a solution that avoids that problem (trading it for a slightly slower fast-path) |
| 03: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 []? |
| 03:11 | cark | immediate |
| 03:11 | mindbender1 | cark: ok thanks |
| 03:11 | mindbender1 | how are you today? |
| 03:12 | cark | im' fine, how about you ? |
| 03:12 | mindbender1 | I'm fine thank you... you guys are being of much help |
| 03:13 | cark | =) |
| 03:14 | cark | you can use delay and force if you need delayed evaluation |
| 03:14 | mindbender1 | how would I rewrite the let? |
| 03:16 | cark | ,(let [a (delay (+ 1 2))] @a) |
| 03:16 | clojurebot | 3 |
| 03:16 | cark | or |
| 03:17 | cark | ,(let [a (delay (+ 1 2))] (force a)) |
| 03:17 | clojurebot | 3 |
| 03:18 | cark | you can also start the computation directly with futures |
| 03:21 | mindbender1 | ok thanks |
| 03:28 | cark | grrr there is absolutely no way to have good looking text rendering with swing >> |
| 04:04 | Fossi | ,find |
| 04:04 | clojurebot | #<core$find clojure.core$find@594d1d> |
| 04:04 | Fossi | #find |
| 05:01 | Blkt | good day everyone |
| 07:31 | markc | ,(+ 1 2) |
| 07:31 | clojurebot | 3 |
| 07:34 | gfredericks | can gen-class create vararg methods? |
| 07:34 | clgv | ,(ns-publics *ns*) |
| 07:34 | clojurebot | {} |
| 07:35 | clgv | &(ns-publics *ns*) |
| 07:35 | lazybot | java.lang.SecurityException: You tripped the alarm! ns-publics is bad! |
| 07:36 | clgv | ,(ns-publics 'clojure.core) |
| 07: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, ...} |
| 07:37 | clgv | When doing a (ns-publics *ns*) I get #<ClassCastException java.lang.ClassCastException: clojure.lang.Var cannot be cast to clojure.lang.IObj> |
| 07:37 | gfredericks | clgv: any context? |
| 07:37 | gfredericks | you just fire up a repl and that's what happens? |
| 07:37 | clgv | gfredericks: I start CCW's REPL for a file |
| 07:38 | gfredericks | okay then I don't know what's going on :) |
| 07:49 | clgv | hm yeah. in normal repl it just works. |
| 07:50 | clgv | really strange. might be some problem with nrepl |
| 07:50 | clgv | hm lol. it works in another file, but files in that one reproducable |
| 07:56 | clgv | ok a related question to ##(doc defn) |
| 07: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" |
| 07:57 | clgv | that means I can define a fucntion like (defn f {:meta-attr :fn} [x] (inc)) right? |
| 07:57 | clgv | s/(defn f {:meta-attr :fn} [x] (inc))/(defn f {:meta-attr :fn} [x] (inc x)) |
| 08:03 | clgv | oh right using metadata {:type :something} in a defn causes the problem |
| 08:23 | dbushenko | hi all! |
| 08:24 | dbushenko | how to sort a clojure vector? |
| 08:24 | Raynes | &(sort [4 2 1 3]) |
| 08:24 | lazybot | ⇒ (1 2 3 4) |
| 08:25 | Raynes | &(sort-by - [3 2 1 4]) |
| 08:25 | lazybot | ⇒ (4 3 2 1) |
| 08:26 | clgv | or if it has to be a vector again: ##(vec (sort [3 1 4 2])) |
| 08:26 | lazybot | ⇒ [1 2 3 4] |
| 08:27 | Raynes | (but it probably doesn't, so don't bother changing it back unless it actually *needs* to be a vector) |
| 08:27 | dbushenko | thank you guys! |
| 08:27 | dbushenko | but what if the vector looks like this: |
| 08:28 | dbushenko | [[:a 1] [:b 3] [:c 2]] |
| 08:28 | dbushenko | probably I should use sort-by? |
| 08:28 | clgv | &(sort-by first [[:a 1] [:b 3] [:c 2]]) |
| 08:28 | lazybot | ⇒ ([:a 1] [:b 3] [:c 2]) |
| 08:28 | Raynes | It'll sort properly ##(sort [[:b 3] [:c 2] [:a 1]]) |
| 08:28 | lazybot | ⇒ ([:a 1] [:b 3] [:c 2]) |
| 08:28 | clgv | &(sort-by second [[:a 1] [:b 3] [:c 2]]) |
| 08:28 | lazybot | ⇒ ([:a 1] [:c 2] [:b 3]) |
| 08:28 | dbushenko | great! thanks! |
| 08:29 | Raynes | clgv: We're a team, you know. |
| 08:29 | Raynes | <3 |
| 08:29 | clgv | lol^^ |
| 08:29 | clgv | well. had to wait for lein uberjar ;) |
| 08:43 | dbushenko | is there a way to change the order of (sort-by second my-vector) ? |
| 08:48 | gfredericks | dbushenko: the argument order? just gotta define your own function |
| 08:49 | gfredericks | dbushenko: if you do that alot you can create a helper: (defn reverse-args [f] #(apply f (reverse %&))) |
| 08:49 | dbushenko | oh, great! thanks! |
| 09:08 | clgv | dbushenko: just in case you are using -> there is also ->> and hence maybe no need to reverse arg order |
| 09:09 | dbushenko | clgv, thanks! |
| 09:16 | TimMc | ,(class (sort [1 2 3])) |
| 09:16 | clojurebot | clojure.lang.ArraySeq |
| 09:17 | TimMc | ,(class (vec (sort [1 2 3]))) |
| 09:17 | clojurebot | clojure.lang.PersistentVector |
| 09:17 | clgv | ,(class (sort (range 1000))) |
| 09:17 | clojurebot | clojure.lang.ArraySeq |
| 09:17 | clgv | ,(class (sort (range 100000))) |
| 09:17 | clojurebot | clojure.lang.ArraySeq |
| 09:17 | clgv | ,(clojure-version) |
| 09:17 | clojurebot | "1.3.0-master-SNAPSHOT" |
| 09:18 | clgv | &(class (sort (range 1000))) |
| 09:18 | lazybot | ⇒ clojure.lang.ArraySeq |
| 09:18 | clgv | &(clojure-version) |
| 09:18 | lazybot | ⇒ "1.2.0" |
| 09:18 | TimMc | Oh, that's handy. |
| 09: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) |
| 09: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.. |
| 09:52 | Blafasel | How do you guys explore things like this? |
| 09:52 | stuartsierra | Blafasel: Read the source! |
| 09:53 | Blafasel | Yeah.. Where is it? |
| 09:53 | fdaoud | wtfm? |
| 09:53 | stuartsierra | https://github.com/clojure/math.combinatorics/blob/master/src/main/clojure/clojure/math/combinatorics.clj |
| 09: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. |
| 09:54 | Blafasel | Appreciated! |
| 09:56 | thorwil_ | what happens if you use libraries that depend on varying versions of clojure? |
| 09:57 | thorwil_ | i'm considering to try clojure 1.3 with appengine-magic's beta branch |
| 09:58 | thorwil_ | but do moustache and hiccup actually play along with 1.3? |
| 09:58 | stuartsierra | thorwil_: If you're using a Maven-based dependency resolution (Lein, Cake) it will resolve to the version you declare. |
| 09:58 | stuartsierra | Obviously the library has to be compatible with that version of Clojure. |
| 10:02 | thorwil_ | so hiccup should be fine: http://groups.google.com/group/ring-clojure/browse_thread/thread/d833d6741e1a8d32 |
| 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 | cark | 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 | cark | hey i don't know ! |
| 10:37 | clgv | I think it's a pretty straight forward use case |
| 10:39 | cark | https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Agent.java |
| 10:40 | cark | looks like pretty final to me |
| 10:40 | clgv | I am already overthere ;) |
| 10:41 | clgv | damn thats true. |
| 10:53 | clgv | 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 | fdaoud | 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://java.sun.com/docs/books/tutorial/java/index.html |
| 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://www.math.chalmers.se/~rjmh/Papers/whyfp.pdf |
| 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 | fdaoud | 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://tinyurl.com/426og7n |
| 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 | gfredericks | 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 | foodoo | 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 | foodoo | 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 | clgv | 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://bp2.blogger.com/_DV4mNdm8j8Q/SIHBlsbtFAI/AAAAAAAAANc/qpphGzkZSPU/s1600-h/322px-java-logo.svg-1 |
| 11:51 | fdaoud | 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 | clojurebot | (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 | clojurebot | http://dakrone.github.com/cheshire/ |
| 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: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://dev.clojure.org it says this project is awaiting releases. does that mean i cant use it as it is? |
| 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://sritchie.github.com/2011/09/29/getting-creative-with-mapreduce.html |
| 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 | pyr | 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 | gfredericks | (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://download.oracle.com/javase/6/docs/api/java/security/MessageDigest.html |
| 13:13 | gfredericks | technomancy: very good :) |
| 13:14 | gfredericks | 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 | clojurebot | > |
| 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 | clojurebot | > |
| 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 | gfredericks | technomancy: which is so much not your fault it's not even hilarious |
| 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 | S11001001 | 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://www.amazon.com/Stripes-Development-Pragmatic-Programmers/dp/1934356212 |
| 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://goo.gl/CO7jJ |
| 13:25 | fdaoud | cemerick: made all the hard work worthwhile :) |
| 13:25 | cemerick | fdaoud: https://twitter.com/#!/cemerick/statuses/119825104346677248 |
| 13:26 | cemerick | ;-0 |
| 13:26 | cemerick | ;-) |
| 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 | cemerick | Ironically, I don't really buy programming books. |
| 13:31 | cemerick | (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 | TimMc | :-) |
| 13:49 | cemerick | sweet, I need some googling assistance. :-P |
| 13:50 | TimMc | haha |
| 13:50 | TimMc | 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 | gtrak | https://github.com/ibdknox/clj-socketio |
| 14:01 | gtrak | and http://socket.io/ |
| 14:01 | cemerick | kencausey: Thank you. :-) How did I miss that last paragraph… |
| 14:02 | gtrak | enquora, or http://cometd.org/documentation/cometd-java |
| 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 | cemerick | (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 | enquora | 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 | gtrak | 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 | gtrak | https://github.com/ibdknox/socket.io-netty |
| 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 | gtrak | curious about aleph though, didn't know it was an option |
| 14:16 | enquora | *might* be |
| 14:17 | enquora | 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 | ibdknox | 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 | ibdknox | which is what aleph is built on |
| 14:38 | ibdknox | I would point out, however, dealing with websockets is a royal pain |
| 14:39 | ibdknox | 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 | enquora | 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 | ibdknox | in any case |
| 14:40 | ibdknox | 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 | enquora | and it isn't |
| 14:41 | enquora | hundreds of clients connected |
| 14:41 | enquora | not thousands or more |
| 14:41 | ibdknox | oh, aleph will breeze through that |
| 14:41 | ibdknox | 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 | enquora | will take a look at it |
| 14:44 | enquora | have just discovered it |
| 14:44 | ibdknox | the other option is writing against netty directly |
| 14:44 | ibdknox | it's a pain |
| 14:44 | enquora | yes |
| 14:44 | ibdknox | for an example, |
| 14:44 | ibdknox | you can look at my socket.io-netty |
| 14:44 | enquora | have enough pain moving backend and clients already |
| 14:44 | enquora | trying to minimize mental load ;-) |
| 14:45 | ibdknox | https://github.com/ibdknox/socket.io-netty |
| 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 | ibdknox | that will be by far the easiest solution |
| 14:45 | enquora | I *do* mind having a node server |
| 14:46 | enquora | 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 | kjeldahl | 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:48 | ibdknox | kjeldahl: basically you just use (server/gen-handler) and then use aleph's (wrap-ring-handler) |
| 14:48 | ibdknox | 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://www.trottercashion.com/2011/06/13/introducing-chloe.html |
| 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 | ibdknox | chloe will be sending posts at an extreme rate with 100 users |
| 14:57 | ibdknox | 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 | gtrak | like just sockets instead of http requests |
| 14:58 | ibdknox | yeah |
| 14:59 | ibdknox | 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 | ibdknox | `fogus: a plan for what? |
| 15:01 | `fogus | this |
| 15:02 | TimMc | heh |
| 15:02 | ibdknox | lol |
| 15:02 | ibdknox | "this" in the cljs sense? :) |
| 15:02 | TimMc | sounds like it |
| 15:05 | ibdknox | TimMc: it was a drive-by planning |
| 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 | enquora | we have mobile users to content with |
| 15:09 | enquora | on cell connections where every bit counts |
| 15:09 | enquora | as does latency |
| 15:10 | enquora | yes, the resolution of new data sends can easily be less than 30s |
| 15:10 | enquora | we need soft realtime |
| 15:10 | ibdknox | righto |
| 15:10 | ibdknox | at that point you're "streaming" and wss makes sense |
| 15:10 | ibdknox | keep in mind |
| 15:10 | ibdknox | proxies are going to screw with you |
| 15:10 | enquora | yes |
| 15:11 | enquora | 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 | ibdknox | my use cases were a bit ridiculous originally |
| 15:12 | ibdknox | we were broadcasting per character typing |
| 15:12 | ibdknox | 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 | enquora | until this feels comfortable |
| 15:12 | ibdknox | you can scale horizontally without issue |
| 15:13 | ibdknox | 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://gist.github.com/1254701 |
| 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 | gfredericks | 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 | dnolen | gfredericks: show me |
| 15:25 | dnolen | 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 | dnolen | 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 | ibdknox | 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 | dnolen | 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 | gfredericks | 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 | `fogus | 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 | `fogus | 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://www.exampler.com/blog/2011/09/29/my-clojure-problem/ |
| 15:37 | TimMc | `fogus: Looks reasonable. |
| 15:37 | TimMc | What is this-as? |
| 15:38 | TimMc | 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 | `fogus | 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 | ibdknox | :p |
| 15:49 | ibdknox | 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 | ibdknox | and there are some people who are helping out immensely, especially on here |
| 15:51 | ibdknox | but you average dev doesn't use IRC |
| 15:51 | ibdknox | 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 | `fogus | It's a worthy goal |
| 15:56 | `fogus | 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://dev.clojure.org/display/design/CLJ+Launcher |
| 15:56 | `fogus | trptcolin: Me too |
| 15:57 | `fogus | I know Russ and he's still motivated to do it |
| 15:57 | trptcolin | awesome |
| 16:02 | Blafasel | Some feedback from a guy that started with clojure a couple days ago: |
| 16:03 | Blafasel | - the google hits are crap (you often end up on outdated pages, on outdated repositories etc.. Dead github repos) |
| 16:03 | Blafasel | - 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 | Blafasel | - 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://twitter.com/vicentebosch/status/119867016839573504 |
| 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 | wink | 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 | 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 | wink | 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 | wink | but all in all, it's tremendously fun :) |
| 16:24 | wink | and I can't give enough praise to leiningen |
| 16:24 | dnolen | wink: http://clojuredocs.org/clojure_contrib/clojure.contrib.json/read-json |
| 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 | Blafasel | 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 | wink | 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 | pjstadig | imho |
| 16:26 | gtrak | wink, I like joy of clojure, there's another that came out recently |
| 16:27 | gtrak | 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 | trptcolin | but clearly there were some jabs at testing/type systems/category theory |
| 16:28 | trptcolin | 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 | gtrak | 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 | gtrak | maybe even some good coders |
| 16:31 | gtrak | 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 | seancorfield | 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 | pjstadig | 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 | foodoo | 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://clojuredocs.org/clojure_core/clojure.core/-%3E%3E |
| 16:35 | TimMc | 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 | seancorfield | 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 | 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 | wink | 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://dev.clojure.org/display/design/Release.Next+Planning |
| 16:41 | `fogus | (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 | michaelr525 | well, if I were involved I would probably just be eager to do the interesting stuff.. |
| 16:54 | michaelr525 | 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 | TimMc | 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 | michaelr525 | CA? |
| 17:00 | clojurebot | CA is Contributor Agreement: http://clojure.org/contributing |
| 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 | pjstadig | part of that may just be marketing and communication |
| 17:01 | pjstadig | 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 | TimMc | 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 | TimMc | 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 | gtrak | 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 | jcromartie | 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 | amalloy | https://gist.github.com/1255015 or i can have a look at yours |
| 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 | amalloy | $google mumble scheme style |
| 17:34 | lazybot | [Riastradh's Lisp Style Rules - mumble.net main page] http://mumble.net/~campbell/scheme/style.txt |
| 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 | amalloy | 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://gist.github.com/1255043 |
| 17:41 | amalloy | 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 | foodoo | 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 | dnolen | 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 | ibdknox | ,(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 | technomancy | 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 | dnolen | 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 | seancorfield | 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 | gtrak | the hardest part of clojurescript is reading the closure api code |
| 18:23 | ibdknox_ | heh |
| 18:23 | ibdknox_ | use pinot ;) |
| 18:23 | gtrak | pinot? |
| 18:23 | ibdknox_ | github.com/ibdknox/pinot |
| 18:23 | ibdknox_ | http://github.com/ibdknox/pinot |
| 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 | ibdknox_ | 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://wrench-labs.nko2.nodeknockout.com/ |
| 18:27 | gtrak | ah yea, I played that |
| 18:27 | gtrak | super easy :-) |
| 18:27 | ibdknox_ | I know |
| 18:27 | ibdknox_ | lol |
| 18:27 | ibdknox_ | 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 | gtrak | but you've hard-coded the looping intervals |
| 18:31 | ibdknox_ | hm? |
| 18:31 | ibdknox_ | you should be using animation frame to handle the render loop |
| 18:31 | ibdknox_ | and 10 ms is pretty standard for the update loop |
| 18:32 | gtrak | so the update is asynchronous to the draw? |
| 18:32 | gtrak | I'm used to doing it all in frames |
| 18:32 | ibdknox_ | yep, you need it to be to ensure consistency |
| 18:32 | ibdknox_ | otherwise a game would play differently every time |
| 18:33 | gtrak | ibdknox, how so? |
| 18:34 | ibdknox_ | gtrak: http://gameclosure.com/2011/04/11/deterministic-delta-tee-in-js-games/ |
| 18:34 | gtrak | only if it takes longer than a frame to do stuff, yes? |
| 18:34 | gtrak | 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 | gtrak | 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 | ibdknox_ | 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 | ibdknox_ | except for animationframe I think |
| 18:40 | ibdknox_ | lol |
| 18:40 | gtrak | ha |
| 18:40 | gtrak | 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 | ibdknox_ | 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 | ibdknox_ | 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 | ibdknox_ | add [pinot "0.1.1-SNAPSHOT"] to your project.clj and roll with it :) |
| 18:45 | gtrak | wait, huh? |
| 18:45 | gtrak | 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 | gtrak | 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 | jli | 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 | jli | 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://pastebin.com/Pby7GHB8 |
| 19:46 | crazyFox | symbole: project.clj and directory tree: http://pastebin.com/T9X2XWML |
| 19:46 | symbole | Firewall is blocking it. Grrrr! Try this please http://paste2.org/ |
| 19:46 | TimMc | or github |
| 19:47 | TimMc | ~gist |
| 19:47 | clojurebot | Excuse me? |
| 19:47 | TimMc | ~paste |
| 19:47 | clojurebot | paste is http://gist.github.com/ |
| 19:48 | dnolen | ClojureScript stacktraces from Browser REPL - sweet |
| 19:49 | crazyFox | symbole: its all here http://paste2.org/p/1682074 |
| 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 | ibdknox_ | 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 | konr | 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 | ibdknox_ | the minute you want anything more than that though... :) |
| 19:56 | ibdknox_ | konr: if you wanna do heroku here's a tutorial: http://thecomputersarewinning.com/post/clojure-heroku-noir-mongo |
| 19:56 | seancorfield | clojure.contrib.duck-streams - that's in contrib 1.2.0 but not listed in the modules here: https://github.com/clojure/clojure-contrib/tree/master/modules |
| 19:56 | seancorfield | 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 | ibdknox_ | on an AWS box I can run 20 sites if I wanted |
| 20:00 | ibdknox_ | 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 | ibdknox_ | seancorfield: clojure.java.shell |
| 20:04 | seancorfield | thanx! |
| 20:06 | seancorfield | i removed all the contrib stuff from http://dev.clojure.org/display/community/Libraries because it was horribly out of date (stuart sierra sanctioned the removal) |
| 20:07 | seancorfield | 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 | ibdknox_ | 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 | seancorfield | 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 | ibdknox_ | only thing I can think of is cowblog |
| 20:13 | ibdknox_ | https://github.com/briancarper/cow-blog |
| 20:14 | seancorfield | dnolen: oh? what full fledged web apps are built in clojure? |
| 20:14 | ibdknox_ | seancorfield: www.typewire.io |
| 20:14 | ibdknox_ | :) |
| 20:15 | seancorfield | heh, i meant downloadable products, not websites |
| 20:15 | ibdknox_ | hm web apps = downloadable? |
| 20:15 | ibdknox_ | 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 | seancorfield | 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 | seancorfield | 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 | ibdknox_ | 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 | robermann | I mean; how can I evaluate dinamically a '(+ 1 2) without using eval? |
| 20:26 | gfredericks | robermann: what's the purpose |
| 20:27 | gfredericks | 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://4clojure.com/problem/121 |
| 20:27 | robermann | 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 | gfredericks | 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://4clojure.com/directions |
| 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 | gfredericks | 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 | robermann | and of course ('(+ 1 2)) does not work |
| 20:33 | robermann | 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 | seancorfield | so (f '(+ a 2)) would return some function, call it g, that when called like this (g {:a 4}) would return 6 |
| 20:40 | seancorfield | 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 | seancorfield | does that help? |
| 20:41 | robermann | yes I wrote http://pastebin.com/Z19GM8Sd but I'm stuck with that eval |
| 20:41 | robermann | so I should execute that symbol browsing the list |
| 20:42 | robermann | 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 | TimMc | whatchamacallit, a metacircular evaluator |
| 20:52 | robermann | yes - my first step towards a new Clojure 2.0 ! :) |
| 20:57 | robermann | so men - good hacking and good night/morning |
| 20:57 | robermann | 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 | seancorfield | 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 | robermann | so... no, really I have to go to bed :D |
| 20:59 | robermann | bye |
| 21:00 | seancorfield | lol, g'nite robermann |
| 21:00 | seancorfield | amalloy: the ajaxy stuff around running the code is very slick - nice work |
| 21:00 | seancorfield | (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 | seancorfield | 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 | jli | I'm running a ring webapp with a gzip middleware |
| 21:22 | jli | and using apache as a proxy in front of it, so I can hide the random port I'm running jetty on |
| 21:23 | jli | accessing jetty directly is close to instant, while through apache, there seems to be a weird ~15s timeout |
| 21:23 | jli | and disabling the gzip middleware in ring fixes it. any ideas? |
| 21:26 | jli | 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 | TimMc | (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 | jli | hm. I wonder if apache is gzipping it again or something... |
| 21:36 | jli | ah ha! |
| 21:38 | jli | 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 | jli | the browser must be waiting for the "rest" of the data |
| 21:39 | amalloy | jli: ooc what gzip middleware are you using? |
| 21:40 | amalloy | 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 | jli | the version perhaps should have tipped me off |
| 21:40 | jli | 0.1.0-SNAPSHOT |
| 21:41 | amalloy | jli: i think that's the base i used to write my own |
| 21:42 | amalloy | you might try out [amalloy/ring-gzip-middleware "0.1.0"] |
| 21:42 | amalloy | 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 | amalloy | oh, i even forked his repo. good for me |
| 21:44 | jli | ah, sweet |
| 21:44 | amalloy | https://github.com/amalloy/ring-gzip-middleware/commit/533a08 |
| 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 | amalloy | then it sends a bunch of blocks, "this chunk is N bytes, here they are" |
| 21:48 | amalloy | 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 | jli | and for my big javascript file, I see the *incorrect* Content-Length (it's the length of the original file) |
| 21:50 | jli | 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 | jli | 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 | jli | 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 | jli | how did you notice the bug? |
| 21:59 | amalloy | i don't remember. it was months ago |
| 21:59 | amalloy | 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 | jli | 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 | amalloy | oh right, i was going on a performance binge, improving page load/render speed for 4clojure |
| 22:08 | amalloy | and we were serving up, uncached and unzipped, like 1MB of javascript |
| 22:08 | amalloy | so i zipped it, and attached headers/meta to avoid retransferring if nothing has changed |
| 22:11 | amalloy | 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 | gfredericks | 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 | gfredericks | why doesn't technology just work? |
| 22:14 | gfredericks | 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 | amalloy | these changes not yet deployed, though :P |
| 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 | jli | or maybe I'm wrong. double-checking |
| 22:16 | amalloy | huhhhh, how can it? |
| 22:16 | amalloy | 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 | gfredericks | 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 | jli | 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 | amcnamara | everyone ^ |
| 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 | cemerick | 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 | cemerick | I think that was pretty explicit. |
| 23:02 | cemerick | 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 | cemerick | It's certainly not required: I remember witnessing all sorts of mayhem anytime Guido talked down FP. |
| 23:04 | cemerick | 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 | trptcolin | i'm all for rational criticism |
| 23:06 | trptcolin | 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 | dnolen | 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 | 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 | jli | cark: not clojure itself, http://4clojure.org |
| 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 | danlarkin | 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 | trptcolin | rainbows and unicorns!!! |
| 23:17 | trptcolin | 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 | 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 | cemerick | The latter are abstractions. The former are impementations. |
| 23:20 | jli | cemerick: right, yeah. but I'm talking about implementation :) |
| 23:20 | jli | 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 | cemerick | Java One, talk there on Tuesday, then you guys on Thursday. |
| 23:22 | cemerick | It'll be…interesting ;-) |
| 23:23 | cemerick | 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 | cemerick | 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 | cemerick | 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 | ibdknox | 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 | cemerick | 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://github.com/ibdknox/noir-cljs |
| 23:37 | ibdknox | 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 | dnolen | 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 | cemerick | 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 | technomancy | 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 | dnolen | 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 | technomancy | 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 | cemerick | 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 | technomancy | now that I switched off screen to tmux |
| 23:49 | technomancy | maybe bash? |
| 23:50 | cemerick | Though I was nearly convinced at strangeloop to give it another try sometime soon. |
| 23:50 | technomancy | relevant: http://memegenerator.net/instance/7741684 |
| 23:50 | technomancy | what |
| 23:50 | danlarkin | oooooh that's a good one |
| 23:51 | cemerick | yeah, that's classic |
| 23:52 | cemerick | ibdknox: do you remember what the concrete error/failure was? |
| 23:53 | cemerick | (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 | cemerick | chouser: And along comes Polaris! ;-) |
| 23:56 | technomancy | chouser: thanks! |
| 23:56 | ibdknox | haha |
| 23:56 | ibdknox | 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 | ibdknox | sweet! |
| 23:57 | ibdknox | technomancy: my girlfriend works for salesforce :) |
| 23:57 | technomancy | ibdknox: cool. never worked for a >50 company before |
| 23:57 | technomancy | sounds like heroku is pretty independent in practice though |
| 23:58 | ibdknox | that's my understanding as well |
| 23:58 | ibdknox | so hopefully it won't be too bad ;) |
| 23:58 | dnolen | technomancy: the future of Clojure deployment … at your fingertips. |