2011-01-19
| 03:51 | _na_ka_na_ | hey guys can I get a reference to the thread-pools that Clojure creates? |
| 03:51 | _na_ka_na_ | for the futures & agents |
| 04:15 | amalloy | _na_ka_na_: it's probably using java.util.concurrent.xxx classes |
| 04:30 | Licenser | dun dun dun |
| 06:29 | bartj | what does ::blah mean in Clojure? |
| 06:30 | bartj | unforunately, Google cleans up the query clojure "::" |
| 06:30 | raek | if you are in the namespace "user", it means :user/blah |
| 06:31 | raek | if you have required foo.bar.x with the alias x, ::x/blah means :foo.bar.x/blah |
| 06:34 | bsteuber | any ideas on why this might give a VerifyError on some machines? https://gist.github.com/786039 |
| 06:35 | bartj | raek, can you please point me to some documentation on that? |
| 06:36 | raek | bartj: |
| 06:36 | raek | http://clojure.org/reader |
| 06:37 | raek | the doc is not very detailed for this feature |
| 07:03 | clgv | For a Swing Tree control I want to build a structure of tree nodes. The control will (indirectly) call GetChild(this, index) on a deftype I wrote. Straightforward, I could just return a new tree node on every call but that isnt very elegant. |
| 07:03 | clgv | Furthermore I need the special deftype to map datatypes to the appropriate tree nodes |
| 07:05 | clgv | I know the proxy style creation of protocol implementations within functions where I can use let before the proxy statement. but this way I wont have a class for the above mentioned mapping |
| 07:05 | clgv | There is only one way that comes to my mind to solve this right now. using factory functions instead of the classes in the above mentioned mapping |
| 07:07 | clgv | a constructor method for a deftype would also solve the problem, if I could implement it so that it creates the constant tree nodes ... |
| 07:17 | fbru02_ | hey guys i have this (def datas (atom {:a #{ "a"}}) .. how do i swap! a new value (using conj?) in the set ? |
| 07:17 | fbru02_ | been playing with that but couldn't make it |
| 07:20 | hoeck | fbru02_: (swap! datas update-in :a conj "b") |
| 07:20 | Chousuke | (swap! datas update-in [:a] conj "foo") |
| 07:20 | hoeck | ah right, forgot the [ ] around :a |
| 07:20 | clgv | ,(let [data (atom {:a #{"a"}})] (swap! data update-in [:a] conj "b")) |
| 07:20 | fbru02_ | hoeck: Chousuke : nice ! didn't have that idiom !! sweet |
| 07:21 | clojurebot | Execution Timed Out |
| 07:21 | Chousuke | chaining the update functions is fun |
| 07:21 | clgv | $(let [data (atom {:a #{"a"}})] (swap! data update-in [:a] conj "b")) |
| 07:21 | clgv | the bots dont like me... ;( |
| 07:22 | Chousuke | weird. |
| 07:23 | clgv | ##(let [data (atom {:a #{"a"}})] (swap! data update-in [:a] conj "b")) |
| 07:23 | sexpbot | ⟹ {:a #{"a" "b"}} |
| 07:23 | clgv | ah now ;) |
| 07:28 | raek | clgv: &, not $ (I often forget that too) |
| 07:28 | clgv | thx, raek :) |
| 07:31 | clgv | ok, I am using factory-methods and reify now, for the problem I mentioned before |
| 08:21 | LauJensen | Any low-level brutes in here ? |
| 08:25 | LauJensen | nvm |
| 08:25 | LauJensen | the brutes may rest |
| 08:29 | clgv | low-level brutes? |
| 08:33 | LauJensen | clgv: I need some education on low-level communication with usb devices, but Ive found it elsewhere |
| 08:34 | clgv | ok, I didnt know who to make sense of that "nickname" before ;) |
| 08:35 | clgv | s/who/how/ |
| 08:35 | sexpbot | <clgv> ok, I didnt know how to make sense of that "nickname" before ;) |
| 08:44 | ordnungswidrig | (let [a (agent 3)] (send a (fn [a s] (* s 2))) (await a) (prn a)) |
| 08:44 | ordnungswidrig | why does this block? |
| 08:45 | clgv | &(let [a (agent 3)] (send a (fn [a s] (* s 2))) (await a) (prn a)) |
| 08:45 | sexpbot | java.lang.IllegalArgumentException: Wrong number of args (1) passed to: sandbox6318$eval8426$fn |
| 08:46 | ordnungswidrig | I see, must be (fn [s] (* s 2)... |
| 08:46 | clgv | &(let [a (agent 3)] (send a (fn [s] (* s 2))) (await a) (prn a)) |
| 08:46 | clgv | guessed so ;) |
| 08:46 | sexpbot | ⟹ #<Agent@bab945: 6> nil |
| 08:46 | ordnungswidrig | thanks |
| 09:17 | ordnungswidrig | I have a list xs [1, 3, 4…] and an expression like (for [x xs] (do-something-with x)) how can I expand the "for" at compile time, so that I have (do (do-something-with 1) (do-something-with 3) (do-something-with 4))? I tried with macros but i failed |
| 09:18 | chouser | ordnungswidrig: 'for' is lazy ... are you asking for something eager, with side effects, *and* unroll it at compile time? |
| 09:20 | ordnungswidrig | chouser:I don't care about lazyness. I need the list to be expanded at compile time. |
| 09:21 | ordnungswidrig | chouser: having the result of the expression as a sequence (lazy or not) gives bonus points |
| 09:21 | chouser | I'm still curious as to why, but realize that you need to have the value of xs at compile time to even consider this. |
| 09:22 | tonyl | for is already a form, name it differently |
| 09:24 | ordnungswidrig | chouser: I'll give you some background. I'm doing some experiments with "recording" clojure expression in a tx log so that I can "replay" those expressions later. That part is working fine. However the actual expression must be free from side effects. For testing I wanted to record expressions with some random values and look if certain invariants hold. But that means that the "randomization" must occur at compile time. |
| 09:25 | ordnungswidrig | I.e. there is a macro to evaluate and record an expression. I use it like this |
| 09:26 | ordnungswidrig | (logged (let [i (rand-int 100)] (alter foo + i) (alter bar -i))) |
| 09:27 | ordnungswidrig | I want to execute a bunch of them in parallel, so I thought of sending a bunch of those expressions to some agents for execution. |
| 09:32 | clgv | ordnungswidrig: then you have to write a macro |
| 09:35 | ordnungswidrig | hm, I think there is another problem. If I have an expression like (foo bar baz) and I wan't to "record" the evaluation then I must declare which expression of foo, bar and baz have to be evaluated at "recording time" and which have to be evaluated on "runtime". |
| 09:36 | clgv | I have an example for your first description |
| 09:36 | ordnungswidrig | Is there a clojure lib for expression rewriting? |
| 09:36 | clgv | (defmacro rand-ct [max] (rand max)) |
| 09:37 | clgv | using it gives random values on compile time |
| 09:37 | ordnungswidrig | clgv: exactly. |
| 09:37 | clgv | user=> (macroexpand-1 '(rand-ct 100)) |
| 09:37 | clgv | 86.17588352116391 |
| 09:37 | clgv | user=> (macroexpand-1 '(rand-ct 100)) |
| 09:37 | clgv | 27.471785126598846 |
| 09:37 | clgv | user=> (macroexpand-1 '(rand-ct 100)) |
| 09:37 | clgv | 62.612066942592605 |
| 09:38 | clgv | there is the clojure.walk library that is also used from macroexpand-all |
| 09:38 | ordnungswidrig | clgv: but even this fails in my case because the expression (prn (rand-ct 100)) would be recorded, not (prn 5.8972348907) |
| 09:38 | clgv | but I guess it's more general than expression rewriting |
| 09:39 | clgv | ordnungswidrig: that is due to the definition of the surrounding expression |
| 09:39 | clgv | did you define it yourself? |
| 09:39 | ordnungswidrig | yes |
| 09:39 | ordnungswidrig | I could go with the definition (logged [form & args]) where form would be recorded literally and args would be recorded evaluated |
| 09:39 | clgv | it's most likely a macro |
| 09:39 | ordnungswidrig | yes, it is a macro |
| 09:40 | clgv | whats it's definition? you can rewrite it to do compiletime evaluation, most likely. |
| 09:40 | ordnungswidrig | https://gist.github.com/534499f402463b935d62 |
| 09:41 | ordnungswidrig | the macro "logged" records the form to a vector ref and evaluates the form |
| 09:42 | ordnungswidrig | so after calling (logged (ref-set counter 0)) and (logged (alter counter inc)) the log contains [(ref-set counter 0) (alter counter inc)] (properly expanded with full namespace) |
| 09:44 | clgv | ok the change would definitely involve some kind of expression rewriting |
| 09:44 | clgv | you would have to search for the macro expressions you want to have evaluated at compiletime |
| 09:46 | ordnungswidrig | the simplest solution would be to record only a function name and the arguments where the arguments would be evaluated at time of recording (runtime) |
| 09:46 | clgv | you could try to take the definition of macroexpand-all and change it so it evaluates only specified macros |
| 09:47 | ordnungswidrig | I think that makes all this too complicated. |
| 09:47 | clgv | https://github.com/clojure/clojure/blob/c1c39162608551d50cfb18998d015974b11cfecc/src/clj/clojure/walk.clj#L127 |
| 09:48 | clgv | it's definition is pretty simple |
| 09:48 | ordnungswidrig | I'll look into this |
| 09:48 | clgv | you will have to replace the call to macroexpand |
| 09:49 | ordnungswidrig | On the other hand I can live with sth like (logged #(prn (foo) %1 %2) (bar) (baz) where foo is evaluated at runtime and bar and baz are evalutated on "recording time" |
| 09:49 | clgv | just to convince you: (prewalk (fn [x] (if (seq? x) (macroexpand x) x)) form)) |
| 09:49 | clgv | ;) |
| 09:50 | ordnungswidrig | *g* |
| 09:51 | ordnungswidrig | I' d have to invent some syntax to declare which form should be evaluated at recoding time: (logged (prn (at-recording (foo)) (bar) (baz)) |
| 09:51 | ordnungswidrig | Like quote/unquote |
| 09:52 | clgv | nope you dont have to |
| 09:52 | clgv | you could just provide a list of symbols |
| 09:53 | clgv | either to your macro or via thread-local binding |
| 09:53 | ordnungswidrig | the same symbol might required to be expanded at runtime and at recording time |
| 09:54 | ordnungswidrig | I don't know if that would really be an issue. |
| 09:54 | ordnungswidrig | so far. thank you very much for your suggestions. |
| 09:54 | clgv | np |
| 09:55 | ordnungswidrig | cu all |
| 10:07 | phenom_ | hey, can anyone explain why the ants demo in scala performs much better than that of clojure ? I don't want to incite a riot but I'm new and I'd like to understand where to begin :) |
| 10:10 | dnolen | phenom_: I don't think the Scala version even does the same thing - it doesn't use STM right? |
| 10:17 | no_mind | what is the prefered way to develop a plugin based software using clojure ? |
| 10:18 | clgv | no_mind: good question. If you get no other answer, then you probably have to fall back to use java solutions |
| 10:19 | no_mind | clgv: kind of confused, should I use protocols ? |
| 10:21 | clgv | oh well, maybe you have to specify your problem in more detail. I was referring to the problem to be able to load implementation from specified locations (like a plugin folder) |
| 10:22 | Raynes | no_mind: Clojure's dynamic nature makes it relatively easy to develop plugin systems. |
| 10:22 | Raynes | Being able to load and reload code on the fly and such. |
| 10:22 | Raynes | http://github.com/Raynes/sexpbot is entirely plugin based. |
| 10:23 | Raynes | It's hard to answer the question, because plugin systems are very tailored to specific tasks, and thus I can't tell you how to design your own. |
| 10:23 | no_mind | clgv: the problem is not about dynamic loading, that is easy in clojure using s-expressions |
| 10:26 | no_mind | Raynes: I am looking for some sort of generic plugin/module based system. Something like hook based design of drupal |
| 10:26 | Raynes | $google technomancy Robert Hooke |
| 10:26 | sexpbot | First out of 25 results is: technomancy/robert-hooke - GitHub |
| 10:26 | sexpbot | https://github.com/technomancy/robert-hooke |
| 10:26 | Raynes | no_mind: ^ Check that out. Could be what you're looking for. :) |
| 10:26 | clgv | no_mind: if you want to make your plugin interface more explicit I think using protocols is the tool. it's even easier to be able to write plugins in java then... |
| 10:27 | clgv | but you dont need to use protocols |
| 10:27 | clgv | *in general |
| 10:27 | no_mind | clgv: Raynes actually i am exploring if ti is possible to allow plugin in any JVM language |
| 10:28 | Raynes | Yes, it most certainly is. I've done it. |
| 10:28 | Raynes | Cake and Leiningen both do it. |
| 10:28 | no_mind | Raynes: how ? |
| 10:29 | no_mind | Raynes: If I can write core in clojure and let my devs build plugins in PHP, it will a blessing ;) |
| 10:29 | clgv | PHP is a JVM language??? |
| 10:30 | Raynes | Projects do it in different wants. sexpbot has a system for loading, reloading, and unloading arbitrary code. If code is on the classpath, it is really easy to work with it at runtime. |
| 10:30 | Raynes | Oh. |
| 10:30 | Raynes | You want to be able to do plugins in languages that aren't on the JVM? |
| 10:31 | Raynes | That's a different level of difficulty. Never done anything like that, so I can't really help you there. |
| 10:32 | jcromartie | Would protocols/deftype be a good fit for building an associative data structure that tracks history over time? |
| 10:32 | jcromartie | Basically a sequence of "update" maps |
| 10:32 | jcromartie | with timestamps |
| 10:32 | jcromartie | and maybe authors? |
| 10:32 | no_mind | Raynes: PHP is on JVm, though partially |
| 10:41 | harishtella | kinda off topic, but I'm wondering what other IRC channels you clojurians like to visit. |
| 10:42 | robonobo | clojurians? is that an official term? |
| 10:42 | robonobo | because it sounds completely amazing |
| 10:43 | harishtella | robonobo: haha, I think I saw it on one of the clojure meetup.com groups. |
| 10:45 | octe | is there a function for generating a map based on either a list of keys/values and then a generator function for the other part? i.e. the key/value |
| 10:45 | jcromartie | anybody want to comment on the design here? https://gist.github.com/202a9d047123fcb37f24 |
| 10:45 | chouser | octe: there are a couple. zipmap and into are the favorites |
| 10:46 | chouser | oh, and (apply hash-map ...) |
| 10:46 | octe | i thought zimap as used for lists of both keys and values only? |
| 10:46 | pdk | quick q |
| 10:46 | pdk | will clojure let me define mutually recursive functions with defn in a file |
| 10:46 | chouser | octe: maybe I don't understand what you're asking. |
| 10:46 | chouser | pdk: letfn |
| 10:46 | pdk | or is it reserved for letfn or some deal |
| 10:47 | chouser | pdk: defn's can call each other too |
| 10:47 | AWizzArd | pdk: you can (declare your-fn) ahead. |
| 10:47 | pdk | oh cool beans |
| 10:47 | pdk | (doc declare) |
| 10:47 | clojurebot | "([& names]); defs the supplied var names with no bindings, useful for making forward declarations." |
| 10:47 | jcromartie | hmm, need to sort by time |
| 10:47 | octe | chouser, for example, i have a list of values '("a" "b" "c"), and i want to create map with those values but the keys generated based on the element in the list |
| 10:47 | octe | hard to explain.. |
| 10:48 | chouser | (let [ks '(a b c)] (zipmap ks (map #(str % "val") ks)) |
| 10:48 | chouser | ,(let [ks '(a b c)] (zipmap ks (map #(str % "val") ks)) |
| 10:48 | clojurebot | EOF while reading |
| 10:48 | chouser | ,(let [ks '(a b c)] (zipmap ks (map #(str % "val") ks))) |
| 10:48 | clojurebot | {c "cval", b "bval", a "aval"} |
| 10:49 | AWizzArd | ,(reduce #(assoc %1 (keyword %2) %2) {} '("a" "b" "c")) |
| 10:49 | clojurebot | Execution Timed Out |
| 10:50 | chouser | ,(into {} (for [k '[a b c]] [k (str k "val")])) |
| 10:50 | clojurebot | {a "aval", b "bval", c "cval"} |
| 10:51 | octe | ah, thanks |
| 11:24 | bhenry | is the only advantage of using defalias over def understandability? |
| 11:25 | clgv | &(doc defalias) |
| 11:25 | sexpbot | java.lang.Exception: Unable to resolve var: defalias in this context |
| 11:25 | bhenry | &(doc clojure.contrib.def/defalias) |
| 11:25 | sexpbot | ⟹ "Macro ([name orig] [name orig doc]); Defines an alias for a var: a new var with the same root binding (if any) and similar metadata. The metadata of the alias is its initial metadata (as provided by def) merged into the metadata of the original." |
| 11:26 | bhenry | i take it def doesn't keep metadata from the original? |
| 11:27 | clgv | &(doc def) |
| 11:27 | sexpbot | java.lang.SecurityException: You tripped the alarm! def is bad! |
| 11:27 | clgv | lol |
| 11:28 | clgv | I dont really know, but I think everything declared with def has its own metadata |
| 11:29 | clgv | Quote: " If init is supplied, it is evaluated, and the root binding of the var is set to the resulting value." |
| 11:30 | clgv | refering to: (def symbol init?) |
| 11:30 | clgv | so def always creates a new rootbinding which has its own meta data |
| 11:43 | devn | ,(doc def) |
| 11:43 | clojurebot | DENIED |
| 11:56 | clgv | &(doc #'def) |
| 11:56 | sexpbot | java.lang.ClassCastException: clojure.lang.LazySeq cannot be cast to clojure.lang.Symbol |
| 11:56 | clgv | &(doc 'def) |
| 11:56 | sexpbot | java.lang.ClassCastException: clojure.lang.Cons cannot be cast to clojure.lang.Symbol |
| 11:57 | clgv | not much there anyway ;) |
| 11:57 | tonyl | def is denied all together it seems |
| 11:57 | clgv | user=> (doc def) |
| 11:57 | clgv | ------------------------- |
| 11:57 | clgv | def |
| 11:57 | clgv | Special Form |
| 11:57 | clgv | Please see http://clojure.org/special_forms#def |
| 11:57 | clgv | nil |
| 12:08 | arohner | &(set? (.keySet {:a 1 :b 2 :c 3})) |
| 12:08 | sexpbot | ⟹ false |
| 12:08 | lpetit | ,(doc set?) |
| 12:08 | clojurebot | "([x]); Returns true if x implements IPersistentSet" |
| 12:08 | arohner | &(ancestors (.keySet {:a 1 :b 2 :c 3})) |
| 12:08 | sexpbot | ⟹ nil |
| 12:09 | arohner | &(contains? (.keySet {:a 1 :b 2 :c 3}) :a) |
| 12:09 | lpetit | &(set? (keys {:a 1 :b 2 :c 3})) |
| 12:09 | sexpbot | ⟹ false |
| 12:09 | sexpbot | ⟹ false |
| 12:09 | dnolen | &(class (.keySet {:a 1})) |
| 12:09 | sexpbot | ⟹ clojure.lang.APersistentMap$2 |
| 12:10 | lpetit | &(keys {:a 1 :b 2 :c 3}) |
| 12:10 | sexpbot | ⟹ (:a :b :c) |
| 12:10 | lpetit | (.keySet {:a 1 :b 2 :c 3}) |
| 12:10 | lpetit | &(.keySet {:a 1 :b 2 :c 3}) |
| 12:10 | sexpbot | ⟹ #< [:a, :b, :c]> |
| 12:12 | arohner | http://dev.clojure.org/jira/browse/CLJ-69 |
| 12:13 | devn | , |
| 12:13 | clojurebot | EOF while reading |
| 12:13 | S11001001 | arohner: the code highlighting is humorous |
| 12:13 | devn | &(doc ancestors) |
| 12:13 | sexpbot | ⟹ "([tag] [h tag]); Returns the immediate and indirect parents of tag, either via a Java type inheritance relationship or a relationship established via derive. h must be a hierarchy obtained from make-hierarchy, if not supplied defaults to the global hierarchy" |
| 12:14 | devn | (meta #'ancestors) |
| 12:14 | devn | &(meta #'ancestors) |
| 12:14 | sexpbot | ⟹ {:ns #<Namespace clojure.core>, :name ancestors, :file "clojure/core.clj", :line 4434, :arglists ([tag] [h tag]), :added "1.0", :doc "Returns the immediate and indirect parents of tag, either via a Java type\n inheritance relationship or a relationship established v... http://gist.github.com/786464 |
| 12:14 | robonobo | devn: you can PM the bot |
| 12:20 | robonobo | when i use an anonymous function, is that function then evaluated every time I call it? |
| 12:20 | devn | robonobo: you could quote it |
| 12:21 | robonobo | what would that do? |
| 12:21 | devn | &'(fn [x] (+ 1 x)) |
| 12:21 | sexpbot | ⟹ (fn [x] (+ 1 x)) |
| 12:21 | devn | leave it unevaluated |
| 12:21 | hiredman | robonobo: no |
| 12:21 | devn | &(fn [x] (+ 1 x)) |
| 12:21 | Raynes | I'm not sure I understand your question. Anonymous functions are evaluated to function objects when they're read and then stay that way. ##(fn []) |
| 12:21 | sexpbot | ⟹ #<sandbox6318$eval8457$fn__8458 sandbox6318$eval8457$fn__8458@188665b> |
| 12:21 | sexpbot | ⟹ #<sandbox6318$eval8466$fn__8467 sandbox6318$eval8466$fn__8467@1a66ed5> |
| 12:22 | Raynes | devn: o/ |
| 12:22 | robonobo | Raynes: that's what I meant |
| 12:22 | hiredman | robonobo: feel free not to pay any attention to devn, I am sure he means well, but he is new so it's something like the blind leading the blind |
| 12:22 | devn | \o Raynes |
| 12:22 | robonobo | thanks |
| 12:22 | robonobo | hiredman: i mean well |
| 12:22 | Raynes | Talk about the village asshole. |
| 12:24 | devn | hiredman: I'm defn. |
| 12:25 | robonobo | is there any way I could cancel the current command in slime? |
| 12:25 | mrBliss | robonobo: C-c C-c |
| 12:25 | devn | C-c C-c |
| 12:25 | Raynes | And, he merely misinterpreted an easy to misinterpret question. |
| 12:25 | hiredman | devn: well, then I don't see why you would suggest using quote |
| 12:26 | robonobo | hiredman: there are nicer ways of putting that |
| 12:26 | hiredman | he is talking about calling a function, and you don't even have a function if you quote the form |
| 12:27 | lpetit | robonobo: internally functions are compiled to classes. evaluating a function definition will produce a class for the function. calling the same function over and over will just call an invoke(..) method on an instance of the class the function compiled to. A function returning an anonymous function will return a new instance of th anonymous function's compiled class. |
| 12:28 | robonobo | lpetit: i think i get it, thanks |
| 12:29 | lpetit | robonobo: because returning an anonymous function means "capturing" the values of the lexical scope for this anonymous function instance, and this scope will be captured in a particular instance of the function's class. |
| 12:29 | lpetit | robonobo: np |
| 12:30 | devn | hiredman: misunderstanding |
| 12:44 | LauJensen | http://www.ifitweremyhome.com/compare/US/DK |
| 12:44 | LauJensen | Just sayin' :) |
| 12:44 | robonobo | LauJensen: reddit eh |
| 13:00 | Adamant | LauJensen: someone pointed out something interesting about the US, which is that if you look at performance by ethnic group, all major ethnic groups in the US are outperforming the majority-their group nations elsewhere... the essential problem is that doesn't mean the US as a whole is outperforming everyone else. |
| 13:02 | LauJensen | Adamant: That sounds like a myth |
| 13:02 | jcromartie | LauJensen: no, it's true |
| 13:02 | LauJensen | Documentation? |
| 13:03 | jcromartie | especially related to school performance, |
| 13:03 | gtrak | probably b/c the US isn't using clojure enough |
| 13:04 | Raynes | *rimshot* |
| 13:04 | jcromartie | we like our Visual Basic, thank you very much |
| 13:06 | LauJensen | I think my general perception of American Intelligence can be summed up on two words: Fox News |
| 13:07 | S11001001 | Fox News is allied with the CIA? |
| 13:07 | Raynes | I think my general perception of American Intelligence can be summed up in two words: John Stewart. |
| 13:07 | robonobo | Raynes: right on the money |
| 13:07 | gtrak | he's a powerful guy |
| 13:07 | S11001001 | Jon Stewart is also allied with the CIA? |
| 13:07 | robonobo | S11001001: i want to believe |
| 13:10 | jcromartie | The US is just so polarized. |
| 13:10 | robonobo | is there any way an error from the repl can be made to point to the actual point (line) of failure? |
| 13:10 | jcromartie | The congressional Republicans want to defund our public radio and TV. |
| 13:11 | jcromartie | they literally don't want their constituents to be too smart |
| 13:11 | LauJensen | jcromartie: Ah, you mean the great party that gave your country such treasures as the Patriot Act which voided 5 or 6 of your ammendment rights? :) |
| 13:11 | chouser | jcromartie: I'm sure that's exactly why. |
| 13:11 | jcromartie | I understand the revenge motives too |
| 13:11 | jcromartie | Juan Williams and all |
| 13:12 | mrBliss | Great article: http://articles.sfgate.com/2010-09-12/opinion/23999768_1_major-parties-household-income-deficit |
| 13:13 | pdk | (doc every) |
| 13:13 | S11001001 | The real question is how does all this affect Clojure adoption? |
| 13:13 | clojurebot | Execution Timed Out |
| 13:13 | pdk | (doc some) |
| 13:13 | clojurebot | "([pred coll]); Returns the first logical true value of (pred x) for any x in coll, else nil. One common idiom is to use a set as pred, for example this will return :fred if :fred is in the sequence, otherwise nil: (some #{:fred} coll)" |
| 13:13 | pdk | beautiful |
| 13:13 | pdk | ok so refresh me |
| 13:13 | robonobo | ,(doce every?) |
| 13:13 | clojurebot | java.lang.Exception: Unable to resolve symbol: doce in this context |
| 13:14 | pdk | (doc every?) |
| 13:14 | clojurebot | "([pred coll]); Returns true if (pred x) is logical true for every x in coll, else false." |
| 13:14 | robonobo | ,(doc every?) |
| 13:14 | clojurebot | "([pred coll]); Returns true if (pred x) is logical true for every x in coll, else false." |
| 13:14 | pdk | why tf does it have a ? on it |
| 13:14 | gtrak | we need to poll political preference of clojure users vs a control group |
| 13:14 | robonobo | pdk: i don't know, it'sconfusing to me as well |
| 13:16 | LauJensen | mrBliss: Is that article for real1? |
| 13:16 | LauJensen | !? |
| 13:16 | raek | predicates (functions returning booleans) in clojure have names ending in question marks |
| 13:17 | mrBliss | LauJensen: I believe it ;-) Another shocking revelation: http://www.huffingtonpost.com/2009/07/10/only-six-percent-of-scien_n_229382.html |
| 13:17 | LauJensen | mrBliss: If those numbers can be verified, it should be illegal to vote republican |
| 13:18 | KirinDave | Of course |
| 13:18 | KirinDave | "Republican" is not a terribly descriptive term. :) |
| 13:18 | KirinDave | I know staunch conservatives who believe the bible should be the only textbook allowed in schools and they'd NEVER identify themselves as "republican." |
| 13:19 | mrBliss | LauJensen: IMO you are evil when you vote republican, you just want war, more money for the rich, creationism and no health care ;-) (With an emphasis on "IMO"). I'll stop talking about politics now. |
| 13:20 | LauJensen | mrBliss: I didn't mean to vote republican, it was Glenn Beck who told me to do it :( |
| 13:20 | raek | *cough* #clojure-casual |
| 13:20 | robonobo | "Also for when Lau Jensen slaps you for speaking out of turn in irc://irc.freenode.net/#clojure." haha |
| 13:21 | jcromartie | KirinDave: Constitution party? |
| 13:21 | Adamant | if "it should be illegal to vote Republican", why should people bother voting? (note, I'm not Republican.) |
| 13:22 | KirinDave | jcromartie: That couple says they "vote what god tells them to vote." |
| 13:22 | LauJensen | hehe, KirinDave thats funny since the Bible advises its followers to stay out of politics |
| 13:23 | LauJensen | Guess they weren't listening |
| 13:23 | Adamant | the Bible advises a lot of things |
| 13:23 | jcromartie | this is one slippery slope we're on here |
| 13:23 | nachtalp | well, maybe god's answer was "don't vote" :) |
| 13:23 | pdlogan | jeez - sorry - thought I was in the clojure channel... :-( |
| 13:24 | Adamant | pdlogan does have a point. |
| 13:24 | jcromartie | HEY GUYZ HOW ABOUT MY CODE |
| 13:24 | jcromartie | https://gist.github.com/202a9d047123fcb37f24 |
| 13:24 | LauJensen | Look, sure this is #clojure, and if people want to talk Clojure everybody should respect that. But when the channel is mute, there's no rule that says we cant make fun of Americans. |
| 13:25 | jcromartie | is this a decent abstraction? should it be wrapped up in a protocol or anything? |
| 13:25 | LauJensen | jcromartie: I like (historic) |
| 13:26 | jcromartie | I basically want to build my app on it |
| 13:27 | jcromartie | I wonder about performance |
| 13:27 | jcromartie | and persistence |
| 13:27 | jcromartie | if we want to use a RDBMS, it seems like it might be a bad match |
| 13:27 | jcromartie | I don't know |
| 13:27 | LauJensen | jcromartie: You have looked at ClojureQL right? :) |
| 13:27 | jcromartie | could memoize the current state, too |
| 13:27 | jcromartie | yes |
| 13:28 | LauJensen | shamless plug: http://www.clojureql.org |
| 13:32 | mefesto | Hey everyone. I'm experimenting with moustache and came across this example: (app ["foo" bar] my-handler). This will match a url like /foo/baz and bind bar => "baz". How do you access this value from the handler? Is there some sort of middleware that will push those bindings into the request params or something else? |
| 13:33 | LauJensen | (defn the-handler [req id]) (app ["user" id] (delegate the-handler id)) |
| 13:33 | Raynes | mefesto: He lurks no longer! |
| 13:34 | mefesto | Raynes: hah yes finally! :) |
| 13:34 | LauJensen | mefesto: the above was for you |
| 13:35 | mefesto | LauJensen: ah i see. thanks. |
| 13:39 | mefesto | LauJensen: works great thanks again. |
| 13:40 | LauJensen | np |
| 13:53 | robonobo | i'm getting a classcastexception (clojure.lang.ArraySeq cannot be cast to clojure.lang.IFn) on this function: https://gist.github.com/786623, but I can't find what i'm doing wrong. |
| 13:56 | LauJensen | robonobo: Hard to say without seeing the whole thing, but somewhere you're using a sequence like a function |
| 13:57 | LauJensen | ,((.split "h/y" "/")) |
| 13:57 | clojurebot | java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to clojure.lang.IFn |
| 13:59 | robonobo | LauJensen: unless the function is not explicetly called (ie: ((if (blah) (func1) (func2) args)) would it be always visible in the code? |
| 13:59 | LauJensen | I think so |
| 14:14 | dnolen | anybody using Clojure to generate custom JVM ASM which then gets loaded right away? |
| 14:16 | LauJensen | dnolen: No, but I'd love to see an example |
| 14:16 | joshua_ | Hey guys. I have a problem. I'm working with appengine-magic right now. I did a query that grabbed two items from the datastore, but I can't figure out how to look at the contents of the query. I have another query on a different :kind that I access with something like (.item (first (ds/query :kind Project))) but that isn't working in this case (I actually use map in the code, just trying to get across the point). |
| 14:17 | hiredman | dnolen: I've played with the ASM lib a little |
| 14:18 | dnolen | hiredman: any examples? I see that genclass.clj does some of that |
| 14:18 | hiredman | woa |
| 14:18 | hiredman | that was some join |
| 14:18 | hiredman | dnolen: no finished projects |
| 14:19 | hiredman | https://github.com/hiredman/Archimedes has various bits |
| 14:19 | hiredman | but it isn't very nice |
| 14:20 | dnolen | hiredman: still, it's something thx much. |
| 14:22 | hiredman | asm has a pdf reference which is pretty nice |
| 14:23 | dnolen | a Clojure ASM DSL would be sweet. |
| 14:25 | afekz | anyone here have much experience setting up enclojure on OSX? I can't see any "Libraries" node on my Project Properties and I'm starting to feel like I need to ask for a smack with a clue-by-four |
| 14:25 | joshua__ | Is there a way to package a clojure application so that you can distribute it without requiring Java? |
| 14:25 | hiredman | yes, I started on this horrible macro thing on an earlier project (creating a class loader in clojure, that could be used to load clojure, so it couldn't depend on the clojure runtime) |
| 14:26 | hiredman | joshua__: no |
| 14:26 | hiredman | clojure runs on the jvm |
| 14:26 | joshua__ | hiredman: figured it would be impossible, but had to ask |
| 14:26 | Scriptor | joshua__: if it's an option, you can use .net, I thnk |
| 14:27 | afekz | meh |
| 14:27 | Scriptor | and I think someone's working on a clojure->js compiler |
| 14:27 | Scriptor | or translator |
| 14:27 | robonobo | Scriptor: joshua__ : https://github.com/richhickey/clojure-clr |
| 14:28 | hiredman | those tend to translate clojure functions into js functions, but that doesn't mean you have the clojure runtime or collections available in javascript |
| 14:28 | joshua__ | robonobo, thanks |
| 14:29 | Scriptor | hiredman: true, though he just said clojure application, so maybe he won't need too much |
| 14:29 | joshua__ | Scriptor, I would need file IO. |
| 14:29 | robonobo | doe anyone know if clojure-clr runs on mono? |
| 14:30 | Scriptor | joshua__: it's possible if you target something like node, though I'm now sure how well integrated clj-js is |
| 14:33 | joshua__ | Anyone know if the CLR version of Clojure will have better support for recursive calls? |
| 14:34 | Scriptor | not sure, but I know Microsoft is funding a lot of research in functional languages, including some work on Haskell |
| 14:37 | dnolen | joshua__: you have good tools to write performant recursive code *today* in Clojure. Use them. Even if VM targets got TCO, I doubt Clojure itself would move quickly to adopt it. |
| 14:38 | LauJensen | dnolen: I agree. It wouldnt move quickly :) |
| 14:39 | hiredman | :/ |
| 14:39 | Scriptor | and the jdk7 isn't going to support tail calls, so it's gonna be a looong time |
| 14:39 | robonobo | when should 7 be released? |
| 14:41 | Scriptor | robonobo: general availability starts july 28, 2011 |
| 14:41 | Scriptor | http://openjdk.java.net/projects/jdk7/ |
| 14:44 | dnolen | It's nice that you can throw and catch exceptions from within lazy computations - anybody run into any trouble with that? |
| 14:49 | amalloy | dnolen: trouble like how? i'm not sure what could go wrong |
| 14:51 | dnolen | amalloy: that's what I was thinking, but double-checking. |
| 14:52 | ossareh | morning |
| 14:52 | raek | , (try (doall (lazy-seq (throw (Exception. "foo")))) (catch Exception e (.getName (class e)))) |
| 14:52 | clojurebot | raek: excusez-moi |
| 14:52 | raek | &(try (doall (lazy-seq (throw (Exception. "foo")))) (catch Exception e (.getName (class e)))) |
| 14:52 | sexpbot | java.lang.SecurityException: You tripped the alarm! catch is bad! |
| 14:53 | raek | the Exception gets Wrapped in a RuntimeException |
| 14:53 | joshua__ | Update on that error I was having earlier, it turned out that the reason I couldn't grab things (.data_member an_instance) was that data_member was null. I was initializing it with (Class. form-data) instead of (Class (:values form-data)). |
| 14:53 | raek | which makes exception handling across a "lazyness boundary" hard to do |
| 14:54 | raek | dnolen: this is one trouble I have ran into |
| 14:55 | amalloy | Raynes: ^ reminds me, why do we make it illegal to catch things? is there some scenario in which that can cause a problem? |
| 14:57 | dnolen | raek: hmm, in my case I don't need to catch an exception "outside" the lazy sequence as you are there. |
| 14:58 | hiredman | amalloy: you can make infinite loops of catching and throwing |
| 14:59 | tonyl | you can also with other forms like loop/recur but they are not denied |
| 14:59 | tonyl | &(loop [x 7] (recur 8)) |
| 15:00 | sexpbot | Execution Timed Out! |
| 15:00 | hiredman | you can catch the exception that stopping the thread throws |
| 15:00 | amalloy | right |
| 15:00 | raek | sneaky |
| 15:00 | tonyl | oh, now that is something |
| 15:00 | phf` | hello, is it possible to build clojure-clr on mono? |
| 15:04 | amalloy | hiredman: does clojurebot forbid catch as well, or did you find something cleverer? |
| 15:04 | hiredman | amalloy: where do you think sexpbot got it from? |
| 15:04 | amalloy | *chuckle* fair enough |
| 15:05 | amalloy | though i thought clj-sandbox was some separate project that both you and Raynes borrowed from |
| 15:05 | hiredman | the try/catch attack was actually used (demonstrated?) on clojurebot long ago |
| 15:05 | robonobo | if i have a datastructure that should change when it is queried (balanced tree), what would (contains?) then return? |
| 15:05 | hiredman | clojurebot: if you were a super hero, what would your origin story be? |
| 15:06 | hiredman | clojurebot: ping? |
| 15:06 | amalloy | robonobo: balanced trees shouldn't change when they're queried, they should change when you try to change them |
| 15:06 | hiredman | huh |
| 15:06 | robonobo | amalloy: what about semi-splay? |
| 15:07 | robonobo | amalloy: if I look up something taht should change the tree's structure as well |
| 15:07 | hiredman | clojurebot: ping |
| 15:07 | clojurebot | PONG! |
| 15:07 | hiredman | clojurebot: if you were a super hero, what would your origin story be? |
| 15:07 | clojurebot | http://clojure-log.n01se.net/date/2008-11-21.html#13:04 |
| 15:08 | amalloy | robonobo: but it shouldn't change the tree's *contents*, should it? i apparently need to read about semi-splay trees |
| 15:08 | pkinney | Hey all, I'm using emacs and lein (with swank deps to run a swank server), but which is the best way to test small snippets (without starting a lein project everytime) |
| 15:08 | robonobo | amalloy: no, not the contents, of couse, but the structure |
| 15:08 | mrBliss | pkinney: I use cljr for that. |
| 15:08 | robonobo | amalloy: a semi-splay tree will (attempt to) surface the more queried values |
| 15:08 | amalloy | oh those things |
| 15:09 | pkinney | mrBliss: Thanks, I'll check it out on google |
| 15:09 | robonobo | amalloy: every value queried is at least one step closer to the root |
| 15:09 | technomancy | pkinney: ~/.lein/bin/swank-clojure is another option |
| 15:09 | amalloy | robonobo: are you trying to do it mutably or immutably? |
| 15:09 | technomancy | provided your lein/swank are new enough |
| 15:10 | robonobo | amalloy: immutable |
| 15:11 | robonobo | amalloy: so the contains operation returns a boolean, but also returns the restructured tree |
| 15:11 | pkinney | technomancy: Yeah, I've used that in the past (about a year ago), but i think i read somewhere that it's best to use the swank within lein |
| 15:11 | amalloy | robonobo: okay. so isn't contains basically the same as get? they both have the problem of wanting to return a value and a tree |
| 15:11 | robonobo | yeah |
| 15:12 | amalloy | in either case though you can easily enough just return [actual-result new-tree] |
| 15:12 | robonobo | amalloy: ok |
| 15:13 | amalloy | then the caller can do something like (let [[value tree] (get key tree)] ...) |
| 15:13 | robonobo | ok |
| 15:13 | robonobo | now for the second part of my question. how would I let this tree respond to assoc and the like? |
| 15:14 | robonobo | by implemention java.util.Map? |
| 15:14 | amalloy | &(supers (class {})) |
| 15:14 | sexpbot | ⟹ #{clojure.lang.IPersistentCollection java.lang.Object clojure.lang.IFn java.lang.Runnable java.io.Serializable clojure.lang.AFn clojure.lang.IMeta clojure.lang.IObj clojure.lang.MapEquivalence java.lang.Iterable clojure.lang.Associative clojure.lang.IPersistentMap cl... http://gist.github.com/786777 |
| 15:15 | amalloy | or...well, i'm not sure that works because the contract probably specifies that you just return the value |
| 15:16 | tonyl | robonobo: I think Associative is the interface you are looking for that https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Associative.java |
| 15:16 | robonobo | I could make things like (:value ss-tree) look up without restructuring, and also allow the method you mentioned earlier |
| 15:17 | amalloy | that's true |
| 15:17 | robonobo | is there a specification anywhere that's more verbose than the actual code? because there are no specifications whatsoever in there. |
| 15:18 | amalloy | yeah, (assoc m k1 v1 k2 v2) is implemented as (assoc (assoc m k1 v1) k2 v2) |
| 15:18 | amalloy | so you couldn't hijack the actual assoc/get functions |
| 15:19 | robonobo | so i just implement IPersistenMap then? |
| 15:20 | amalloy | robonobo: i think so. not my area of expertise though |
| 15:20 | amalloy | (hint: i don't have any actual areas of expertise) |
| 15:20 | robonobo | datastructures are great fun |
| 15:22 | dnolen | robonobo: that's an abstract interface, that is the specification. |
| 15:23 | dnolen | implement those three methods (via a protocol) and you have something that is associative in Clojure. |
| 15:26 | hiredman | dnolen: I think you have it reversed |
| 15:26 | hiredman | you don't implement an interface with a protocol |
| 15:27 | pkinney | mrBliss: Wow, cljr is working pretty well, donno how I never heard about this before |
| 15:27 | robonobo | I guess if an interface extends another interface, you have to implement that parent interface as well? |
| 15:28 | hiredman | yes |
| 15:29 | robonobo | so i would not just have to implement assoc, assocEx and without but also entryAt? |
| 15:29 | dnolen | hiredman: sorry I meant extend a type to that interface. |
| 15:29 | hiredman | robonobo: you should look at ILookup, much simpler |
| 15:30 | robonobo | hiredman: yes, but would assoc work then? |
| 15:31 | robonobo | it only has a function to query data, not the insert it. |
| 15:31 | robonobo | s/the/to |
| 15:31 | sexpbot | <robonobo> it only has a function to query data, not to insert it. |
| 15:31 | hiredman | ah |
| 15:32 | tonyl | Associative extends IPersistentCollection and ILookup |
| 15:32 | tonyl | if that helps |
| 15:33 | robonobo | tonyl: yes, and IPersistentMap implements Associative |
| 15:33 | tonyl | didn't noticed that |
| 15:57 | Raynes | pkinney: Also, check out cake. It can do a lot of the things that lein and cljr can do. |
| 17:40 | lpetit | rrc7cz: ok. Honestly I'm a little bit lost between the need to provide java wrapper at the same time of refining your clojure API. But you seem to have things under control, so it's probably ok if I stop bothering you with half-baked thought ;) |
| 17:40 | raek | dedeibel: I'm afraid I don't quite understand the question. could you give an example? |
| 17:41 | rrc7cz | lpetit: quite honestly I'm lost a bit as well, so no worries :-) Maybe it would make sense if you saw the (very simple) lib: https://github.com/rcampbell/zenclient |
| 17:42 | lpetit | dedeibel: have you watched "are we there yet" from rich hickey ? |
| 17:42 | rrc7cz | lpetit: I want to use this lib from Java. Once you see how it's typically used, however, you'll see perhaps why I'm struggling to figure out how to structure a Java wrapper |
| 17:42 | dedeibel | yes, but I am not yet sure how to project that into code :) |
| 17:43 | lpetit | dedeibel: he, no one claims the design process is simple, it's the result which is :-p |
| 17:43 | dedeibel | raek: yeah sure, sorry - I heard the talk from rich hickey "are we there yet" where he talks about how OOP kind of shadows what really goes on - and I am wondering if there is just a problem with the objects having methods and being mutable or if it is okay to code in objects. You pass them into pure functions it maybe logs the user in and returns a new value, representing a logged in user. Maybe containing a session key. |
| 17:44 | raek | this is a presentation on the same topic, but slightly more concrete: http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey |
| 17:44 | dedeibel | lpetit: thats what makes it interesting |
| 17:45 | dedeibel | (logging in a user maybe wasn't the best Idea for a pure function ^^) |
| 17:46 | dedeibel | raek: thanks |
| 17:46 | lpetit | dedeibel: there are two problems. uncontrolled mutation is one. having data and behavior at the same place is another. |
| 17:47 | LauJensen | lpetit: Hows the OSGi integration coming along? |
| 17:47 | dedeibel | okay |
| 17:48 | dedeibel | I fear there will be some horrible code coming up from me ;-) but funny to be reminded back to the old days starting coding at all. |
| 17:48 | lpetit | LauJensen: right now, using v1.2.10 of clojure.osgi. Provides a way to bootstrap namespaces with the right classloader as a context. Far from being complete, but has proved sufficient for current ccw needs |
| 17:48 | LauJensen | cool |
| 17:49 | raek | dedeibel: well, clojure has its own (rather non-mainstream) way of handling things whose state that changes over time. it allows you to decouple change in state from calculating the new state. |
| 17:49 | lpetit | LauJensen: not personally working on clojure.osgi those days. aav does, but we've failed to get in touch recently. Maybe tomorrow, though |
| 17:50 | lpetit | dedeibel: we all went through this :) |
| 17:51 | raek | and as lpetit pointed out, code does not have to be in a method beloning to a certain type, but lives independently as functions in namespaces |
| 17:51 | dnolen | dedeibel: getting Clojure is not a short trip. there's a lot of ground to cover, a lot of reading to do. rhickey put some seriously deep ideas into the lang. |
| 17:52 | ohpauleez | dnolen: inc |
| 17:52 | tonyl | (inc dnolen) |
| 17:52 | sexpbot | ⟹ 1 |
| 17:56 | lpetit | dedeibel: back to your question wrt functions with coarse grained args or shorter ones. My bet is that it's just a matter of contemplating how "close" you are from your application domain vs potential generality of more "technical" function. So you'll probably have both kind of functions. The former (generic ones) living near the top of your presumably "split by domain/big feature" namespaces, the latter probably first living near the t |
| 17:56 | frank` | (+ 1 1) |
| 17:56 | clojurebot | 2 |
| 17:56 | dedeibel | which comes back to the layering early mentioned |
| 17:57 | raek | lpetit: message got chopped for me: "(...) living near the t" |
| 17:57 | david` | (+ 2 3 4 5) |
| 17:57 | clojurebot | *suffusion of yellow* |
| 17:57 | dedeibel | yes |
| 17:57 | lpetit | raek: my bad |
| 17:57 | lpetit | The former (generic ones) living near the top of your presumably "split by domain/big feature" namespaces, the latter probably first living near the top of those same namespaces, before being eventually "ejected" into their own (more technical) namespaces. |
| 17:58 | lpetit | raek, dedeibel: ^^ |
| 18:01 | dedeibel | I'd say (send helpers (conj :thx)) or like that and having a nice night - more clojure learning coming up in the next days and hope to be on the channel with you. |
| 18:05 | lpetit | ,(doc send) |
| 18:05 | clojurebot | "([a f & args]); Dispatch an action to an agent. Returns the agent immediately. Subsequently, in a thread from a thread pool, the state of the agent will be set to the value of: (apply action-fn stat... |
| 18:06 | lpetit | dedeibel: really, less parens than you would expect, in Clojure ; just (send helpers conj :thx) ;-) |
| 18:07 | dedeibel | *g* |
| 18:07 | dedeibel | I see |
| 18:07 | dedeibel | bye |
| 18:08 | Raynes | We'll miss you. |
| 18:12 | lpetit | yeah, bed time for me too, bye |
| 18:38 | phenom_ | hey guys ... don't mean to start a riot but I'm new to clojure and am wondering how the ants demo can be improved to be able to perform as well as the scala/akka solution of the same parameters ? |
| 18:38 | cpfr | hey, what is the best way to silently ignore an exception when mapping over a sequence |
| 18:39 | ohpauleez | phenom_: Exciting times are happening in Clojure, so the optimization strategies for 1.2 are a little different from 1.3 (some are the same) |
| 18:40 | phenom_ | oooo, is there a list of enhancements expected in 1.3 ? |
| 18:40 | technomancy | phenom_: the ants demo isn't really interesting without STM. the whole point is that each ant has a consistent synchronous snapshot of the world. |
| 18:40 | ohpauleez | generally speaking, you apply primitive math where you can, use transients when building data structures, use futures to offload work |
| 18:40 | ohpauleez | phenom_: there is, let me dig it up for you |
| 18:40 | technomancy | it was also misported to CL in a way that made it faster, you can read up on the thread about that if you're interested. |
| 18:40 | phenom_ | schweet :D |
| 18:41 | ohpauleez | phenom_: http://dev.clojure.org/display/doc/Enhanced+Primitive+Support and here is the design/work being done: http://dev.clojure.org/display/design/Home |
| 18:42 | phenom_ | in terms of books, should I meap clojure in action and the joy of clojure? |
| 18:42 | ohpauleez | phenom_: 1.3 has a different sense of def'ing and dynamic behavior and a whole bunch of other stuff |
| 18:42 | phenom_ | I'm interested in both the practicall applicability to scalable and performant systems and the lisp paradigm |
| 19:51 | currentB | what's the modern replacement for incanter.chrono? |
| 20:22 | tomoj | I will not name this project "clojurnalist". I will not name this project "clojurnalist". I will not... |
| 20:23 | tonyl | tomoj: be strong |
| 20:25 | amalloy | currentB: clj-time, i think? |
| 20:25 | amalloy | i don't actually know what chrono is but i think technomancy gave that answer to this question once :P |
| 20:33 | ossareh | clj-time has mysteriously disappeared from github |
| 20:33 | ossareh | all of clj-sys stuff has actually |
| 20:34 | ossareh | https://github.com/clj-sys |
| 20:54 | amalloy | if anyone's interested i've written another bloggy-thing at http://hubpages.com/hub/Clojure-macro-writing-macros, to answer the question i've seen repeated most often in #clojure: how to do nested macros |
| 23:54 | gtech | hello, I'm trying to get jswat to debug some clojure code but for some reason it won't even display line numbers when I open the .clj file |
| 23:54 | gtech | The closest thing I've found to an answer is this: http://osdir.com/ml/clojure/2009-09/msg00077.html but I'm not sure where they are finding these settings |