#clojure log - Jul 07 2010

The Joy of Clojure
Main Clojure site
Google Group
List of all logged dates

0:01 mudge: hey rhickey

0:14 _KY_: How good is clojure on .NET currently?

0:29 fuchsd: I'm trying to use some of the functions from the leiningen uberjar namespace in another lein plugin that I'm writing. When I try to use them in the plugin's namespace like this:

0:29 (:use [clojure.contrib.duck-streams :only [spit make-parents]]

0:29 [leiningen.uberjar :only [get-default-uberjar-name]])

0:30 I'm getting this exception:

0:30 Exception in thread "main" java.lang.IllegalAccessError: get-default-uberjar-name is not public (project.clj:10)

0:30 As far as I can tell from the source, that function isn't private

0:30 (it's definied with defn, not defn-)

0:30 Is there any other reason that I would be getting that exception?

0:31 (using lein 1.1.0

0:31 tomoj: I don't see a get-default-uberjar-name in 1.1.0

0:32 fuchsd: Crap, right; I'm looking at the source for the wrong version

0:32 D'oh!

0:32 thanks

0:32 tomoj: that's a silly error message though

0:33 ,(use [clojure.core :only (foo)])

0:33 clojurebot: java.lang.ClassNotFoundException: clojure.core

0:33 tomoj: err

0:33 ,(use '[clojure.core :only (foo)])

0:33 clojurebot: java.lang.IllegalAccessError: foo does not exist

0:33 tomoj: uhwhat?

0:33 I get "foo is not public"

0:34 fuchsd: Hmm

0:37 jkkramer: ,(clojure-version)

0:37 clojurebot: "1.2.0-master-SNAPSHOT"

0:38 wdouglas: ,[(= #"" #"") (= (str #"") (str #""))]

0:38 clojurebot: [false true]

0:39 wdouglas: Why regular expressions equal themselves?

0:40 and is turning them into string form the best of of doing equality testing for my unit tests?

0:42 tomoj: ,(class #"")

0:42 clojurebot: java.util.regex.Pattern

0:42 tomoj: it's java's fault :P

0:42 wdouglas: I usually blame java

0:42 =(

0:43 tomoj: I guess turning them into strings should work..?

0:43 real equivalence for regexes sounds like a pain

0:43 if it's even possible..

0:44 wdouglas: Hrm I'd be okay with trivial equivalence where the regex patterns themselves are the same and not full on if they evaluate the same but I guess I'm stuck with string representations.

0:45 Thanks!

2:11 Bahman: Hi all!

2:11 _KY_: Is there a guideline for translating lisp to clojure for someone new to clojure?

2:15 tomoj: _KY_: I don't know of any

2:15 that would be an interesting project

2:16 perhaps with some examples

2:16 I think if it's not just some small function, it'd be pretty hard to write a book on techniques for translation

2:17 because the algorithm itself might need to change

2:17 but some worked examples would be helpful anyway I imagine

2:21 zmila: there are some portings of PCL to Clojure. one may see the examples

3:25 tomoj: anyone know if the clojure-json protocols branch has been abandoned?

3:25 looks like the master branch has some changes not in the protocol branch, but maybe those bugs were already fixed in protocols?

4:26 esj: Hello all

4:33 Raynes: esj: Good morning, sir.

4:57 LauJensen: Good morning all

5:01 esj: Morning Lau

6:13 cais2002: - query-param-names# (sort (map (fn [x#] (keyword (re-gsub #"-" "_" (name x#))))

6:13 - (concat ~required-params provided-optional-params#)))

6:13 - query-params# (apply hash-map (interleave query-param-names#

6:13 - (vec (concat ~required-fn-params

6:13 - (vals (sort (select-keys rest-map#

6:13 - provided-optional-params#)))))))

6:13 + required-query-param-names# (map (fn [x#] (keyword (re-gsub #"-" "_" (name x#))))

6:13 + ~required-params)

6:13 + optional-query-param-names-mapping# (map (fn [x#] [x# (keyword (re-gsub #"-" "_" (name x#)))])

6:13 + provided-optional-params#)

6:13 + query-params# (merge (apply hash-map (vec (interleave required-query-param-names# ~required-fn-params)))

6:13 + (apply merge (map (fn [x#] {(second x#) ((first x#) rest-map#)}) optional-query-param-names-mapping#))

6:13 + )

6:14 sorry guys.. was meant for another private chat window

7:24 npoektop: does clj-apache-http require clojure 1.2?

7:25 LauJensen: npoektop: The AOT compiled version of any clojure lib, requires a 100% match in Clojure version. When you use the source, typically its very flexible and if any changes are required they are small. Dont know the specifics for that project

7:38 npoektop: what does mean "All :namespaces already compiled." line in lein uberjar output?

7:49 Licenser: Npoektop, it means you have Not specified namespaces to compile. That is no proplem in general unless you need oat

7:50 Aot

7:54 npoektop: what is aot and do i need it?

7:55 AWizzArd: It means "Ahead of Time" - the compilation happens when you call compile-file, and not when the Clojure code gets loaded.

7:55 In Java terms: aot = compile a file

7:56 cemerick: npoektop: it's only needed when (a) you can't/don't want to ship source or (b) you need to make startup time for the app as fast as possible or (c) you are aiming to integrate with some other Java code that needs to statically refer to classes.

7:59 npoektop: got it. thank you

8:00 AWizzArd: Hi hoeck

8:00 hoeck: hi

8:13 _KY_: How do I use the stacktrace?

8:14 I typed (ns user (:require clojure.stacktrace))

8:14 And then I type (e) but it says symbol not resolved

8:14 neotyk: (clojure.stackrace/print-stack-trace t)

8:15 AWizzArd: _KY_: when you require a namespace, then you must preceede (sp?) its vars and fns with the NS, or an alias.

8:15 neotyk: _KY_: use (:use ..) if you want to use it as print-stack-trace

8:19 _KY_: Thanks=)

8:21 neotyk: np

8:46 _KY_: How can I break from program execution to debug?

8:49 neotyk: _KY_: you mean like getting thread dump of running process?

8:49 or connecting with debugger?

8:49 _KY_: I mean break into the REPL

8:49 Like (break) in Lisp

8:50 neotyk: you could try swank.core/break if you use new swank

8:58 npoektop: i'm using clojure-contrib-1.1.0 and trying to do (:require [clojure.contrib.io :as io]), and it says "Could not locate clojure/contrib/io__init.class or clojure/contrib/io.clj on classpath". Clojure.contrib.io is specific to 1.2?

8:59 AWizzArd: npoektop: when .io does not work try clojure.contrib.duck-streams

8:59 esj: _KY_: This http://georgejahad.com/clojure/cdt.html was just mentioned on the google group, could be good for you ?

8:59 npoektop: AWizzArd, i'm trying to make clj-apache-http work with 1.1

9:00 it uses contrib.io

9:01 AWizzArd: What does the manual of clj-apache-http say about which version of Clojure and Contrib one should use?

9:01 npoektop: nothing

9:01 but when building with lein, it uses 1.2

9:02 is there a way to provide contrib.io for 1.2?

9:02 no. 1.1

9:05 AWizzArd: You could manually copy io specific files from a fresh clojure-contrib.jar that you can get from http://build.clojure.org/ into the .jar that you are using.

9:08 npoektop: AWizzArd, thank you. i found duck-streams was renamed to io, so i'll try it first

10:03 jcromartie: I've got a proposal for adding examples to defn

10:15 here we go

10:15 liberally borrowing from doc

10:15 and print-doc

10:15 http://gist.github.com/466743

10:18 (updated the gist, for anyone who might have already looked at it)

10:25 cemerick: jcromartie: I've not followed any threads about examples so far -- the example metadata would exist separate from the defns themselves?

10:29 jcromartie: not necessarily

10:29 it could just be a :examples key in the attributes map

10:29 set-examples! is just for testing with existing vars

10:29 cemerick: ah, ok

10:30 Anyway, that looks pretty nifty

10:30 jcromartie: yeah, and it works two ways: either a vector of arguments, or actual code in case you need to set things up with a let or whatever

10:30 but the vector of args is nice and simple

10:32 cemerick: I know it'd be repetitive, but I'd almost rather see '(reduce + [1 2 3])

10:33 it's taking some degree of mental overhead to remind myself that there's an invocation occurring with the vector of args

10:34 oh, '(reduce + [1 2 3]) would work too :-)

10:34 * cemerick tips his hat to jcromartie

10:35 jcromartie: yup :)

10:36 vibrant: hello

10:46 jcromartie: howdy vibrant

11:03 vibrant: hey what's up jcromartie

11:22 rbxbx: what is the preferred way for testing that a string matches a regex with test-is ?

11:23 something akin to (deftest test-name-generation

11:23 (let [new-clomo (clomo/create {})]

11:23 (is (= true (re-find #"\w{2,}" (new-clomo :name))))))

11:23 ?

11:26 AWizzArd: rhickey: ping

12:55 rbxbx: for reference, if anyone was interested in my prior query...

12:55 (deftest test-name-generation

12:55 (is (re-find #"\w{2,}" (new-clomo :name))))

12:55 seems to be a good assertion

14:04 LauJensen: Good morning all

14:05 (UGT) :)

14:10 qbg: Good afternoon

14:48 leafw: ,(.getField StringBuilder "count")

14:48 clojurebot: java.lang.NoSuchFieldException: count

14:48 leafw: ,(.getField (class StringBuilder) "count")

14:48 clojurebot: java.lang.NoSuchFieldException: count

14:48 leafw: ,(.getField (class (StringBuilder.)) "count")

14:48 clojurebot: java.lang.NoSuchFieldException: count

14:48 leafw: sigh

14:48 how can one access the .class object of an instance?

14:49 chouser: you're doing it

14:50 leafw: yes, it gets a java.lang.Class instance

14:50 but not the particular StringBuilder.class

14:50 what am I missing?

14:51 chouser: there is no field named count

14:51 ,(.getMethod StringBuilder "length" (into-array Class []))

14:51 clojurebot: #<Method public int java.lang.StringBuilder.length()>

14:51 chouser: there's a method named "length"

14:51 leafw: right, it's in AbstractStringBuilder

14:51 its superclass

14:52 chouser: perhaps not public?

14:52 leafw: setAccessible will fix that

14:52 I see, I need getDeclaredMethod

14:52 pr getDeclaredField

14:52 slow day

14:52 thanks chouser

14:52 chouser: :-) np.

14:53 leafw: ,(.getDeclaredField (class (AbstractStringBuilder.)) "count")

14:53 clojurebot: java.lang.IllegalArgumentException: Unable to resolve classname: AbstractStringBuilder

14:53 leafw: ,(.getDeclaredField (class (java.lang.AbstractStringBuilder.)) "count")

14:53 clojurebot: java.lang.IllegalArgumentException: No matching ctor found for class java.lang.AbstractStringBuilder

14:53 leafw: xD

14:54 right ...

14:54 qbg: ,(.getDeclaredField AbstractStringBuilder "count")

14:54 clojurebot: java.lang.Exception: Unable to resolve symbol: AbstractStringBuilder in this context

14:55 leafw: no worries, I got it solved. (class <instance>) does the right thing. I was just not using getDeclaredField

14:55 rbxbx: before I go ahed and re-implement it, do clojure or java have an equivalent to ruby's succ method on string? I've looked into it and haven't found anything, but perhaps I'm short on the google-fu today.

14:56 ie: 'a'.succ

14:56 -> 'b'

14:56 'z'.succ

14:56 -> 'aa'

14:58 chouser: java's Integer has base-36 support, but that's not quite what you're describing.

14:58 ,(Integer/toString (inc (Integer/parseInt "a" 36)) 36)

14:58 clojurebot: "b"

14:58 chouser: ,(Integer/toString (inc (Integer/parseInt "z" 36)) 36)

14:58 clojurebot: "10"

14:58 rbxbx: right, it'd have to be base26, no?

14:58 chouser: I guess

14:59 Integer supports base 26 too, but it'll use numeric digits ahead of the alphabet

14:59 rbxbx: basically though, I must write my own :)

14:59 ah.

14:59 hmm

14:59 chouser: rbxbx: there may be some solution in java that I'm not aware of.

15:00 rbxbx: Nothing has been immediately obvious, I think I'll give up and plow onward.

15:00 Just wanted to make sure i hadn't missed something obvious.

15:00 Thanks :)

15:00 chouser: sure

15:06 jcromartie: If anybody hasn't seen it and is interested, please check out my "examples" concept http://gist.github.com/466743

15:06 seems quiet in here today

15:06 I should post to the group

15:07 rbxbx: interesting.

15:09 I'm not sure how much value this gives over having examples in the docstring though, other being able to programmatically extract them.

15:09 makes for easier doc generation, i suppose?

15:12 tomoj: I think I might like (join-str "," [1 2 3]) better than ["," [1 2 3]] even though it's redundant

15:24 jcromartie: tomoj: you can do that

15:29 LauJensen: For those who care about productivity, I blogged: http://bestinclass.dk/index.clj/2010/07/trail-blazing-innovators.html

15:36 tomoj: "emacs for everything and conkeror for the rest" - right on!

15:39 LauJensen: Right on! :)

15:40 tomoj: whoa I never knew the repl would hang inside a frame with swank.core/break

15:40 LauJensen: Its a cool trick

15:40 tomoj: brilliant

15:41 LauJensen: Makes it easier to 'fiddle', which is at the heart of dynamic development :)

15:48 dakrone: hey LauJensen, I'm curious, any particular reason you like Awesome over WMII?

15:48 LauJensen: dakrone: No not at all

15:49 Of the tiling WMs Ive only tried Awesome, but I liked it so much that I didnt feel the need to try out the others :)

15:49 dakrone: heh :)

15:49 tomoj: LauJensen: did you have to build a TAGS file for the clojure java sources?

15:50 LauJensen: tomoj: yea, find . -name *.java -type f -exec etags.emacs -a --language=java {} \;

15:51 tomoj: nice, thanks

15:51 LauJensen: np, I got it from hugod

15:56 Raynes: http://gregslepak.posterous.com/on-lisps-readability Looks like he really is starting a movement.

15:57 I hope very few people agree with him. I couldn't bear seeing Clojure code formatted the way he wants it formatted. :\

15:58 fogus: Seems like a lot of words for something so simple.

15:58 LauJensen: Raynes: It really takes away from the seriousness of your comment, when you start with "The second is tons less readable" :)

15:58 Raynes: LauJensen: Huh?

16:00 Because I said "tons"?

16:00 D'oh well.

16:00 fogus: My first action when reading someone else's source is C-x h, CM-\

16:00 Raynes: I can't edit it now. Guess I'll have to don my red clown nose.

16:02 Maybe the reason people get so "religious" about this formatting debate that all of a sudden exists is because they actually have to read this code. :p

16:04 I guess I just don't understand how it's any easier to see what that println is in the second example than the first. Even in curly-bracket languages I always have to do the show-matching-x thing to know where stuff is.

16:05 LauJensen: I really hope we dont have to waste any time on that discussion

16:05 I think people who prefer poorly formatted lisp are using bad editors

16:05 Raynes: I think his argument would make more sense if he would realize that you aren't putting the parens *after* the function name and argument list like you would be doing in a curly bracket language, and there is no special indentation being done, so his example quite literally does nothing but take up unnecessary lines. ._.

16:05 LauJensen: I have never, not that I can remember at least, found myself wondering about which scope a println was in. And if I did, by the time I realized that I was wondering, the cursor would already be a the paren which would need highlighting to find out

16:06 Raynes: Sorry. Just kind of irks me.

16:06 LauJensen: Exactly.

16:06 fogus: I remember working in a few codebases where people would close every bracket with something like `} //end if (foo == 42) ... that was fun

16:07 LauJensen: hehe

16:07 fogus: There was never a doubt which bracket was closing which block... um, unless the comments were out of date -- that never happened right?

16:09 Maybe we should do that with Clojure... ) ;; end (let [foo 42] ...

16:11 Raynes: :)

16:11 fogus: Or better yet, we could attach metadata to the closing parens so that the compiler can validate that the right block is being closed properly? ) {:closing '(let [foo 42] ...)}. Hmmm, but that forces us to rely on the compiler.

16:11 :p

16:13 Raynes: Me go sleepy.

16:15 fogus: Also, thanks for those kind words in the header of our interview. I've never been called a prodigy before. <3

16:16 fogus: Raynes: :-)

16:16 LauJensen: Interview? Link

16:16 ?

16:16 Raynes: http://is.gd/dhplh

16:17 LauJensen: cool, I'll check it out

16:19 Nice

16:20 Raynes: He also interviewed technomancy.

16:21 That one was fun to read.

16:21 LauJensen: And see

16:21 rbxbx: I've found them all pretty enjoyable thusfar :)

16:21 Raynes: technomancy: I request Phil action figures. <3

16:21 LauJensen: Oh yea I definitely want one of those

16:21 Raynes: I haven't read any of the other interviews.

16:22 I read mine four times.

16:22 No vested interests there.

16:22 rbxbx: haha

16:22 LauJensen: haha

16:22 rbxbx: spoken like a true 16 year old :p

16:23 * rbxbx is just jealous

16:23 LauJensen: I forgot to mention you in my last screencast Raynes, thats a mistake on my part :(

16:23 qbg: I still like this from liebke's: http://images.fogus.me/blog/cookie.gif

16:23 LauJensen: rbxbx: you're 17? :)

16:23 rbxbx: :p

16:23 23, looming on 24.

16:23 ancient, I tell's ya.

16:24 LauJensen: Yea, when I was 16 I was mostly having fun, being unserious. When I was 23 I was married and had a house :)

16:24 rbxbx: but with an almost 4yo daughter, so I'm pretty I've aged 2-3 years every year since she was born.

16:24 I'm pretty sure* rather.

16:24 LauJensen: Ah yea, thats a great age

16:24 rbxbx: agreed!

16:24 Raynes: LauJensen: You said you mentioned me in one a while back.

16:24 I forget why though.

16:25 LauJensen: Raynes: I spoke on you for a while a my DKUUG talk, I dont know why they're taking so long with the video release though

16:25 Raynes: Er, in a talk.

16:25 Something.

16:25 LauJensen: Anyway - About 30 people in Denmark know you by name now

16:25 Raynes: Aye.

16:25 Haha.

16:25 :)

16:25 rbxbx: You're the hasselhoff of denmark.

16:25 LauJensen: So if you visit here, you might have to go undercover :)

16:25 Haha

16:26 Raynes: technomancy: Awesome comment on Greg's post. I didn't realize that was your uberjar function until just now.

16:26 :p

16:26 rbxbx: is that the same greg that was griefing the mailing list about __> ?

16:26 Raynes: I'm guilty of that as well.

16:26 rbxbx: I don't think so.

16:27 He griefed the channel a week or so ago about the same thing he made that blog post about.

16:28 rbxbx: Poor guy. He just wants acceptance :(

16:28 Raynes: And he griefed the mailing list about the "Clojure newbie experience".

16:28 But that's the extent of his griefage.

16:28 rbxbx: the clojure newbie experience isn't that bad.

16:28 Raynes: At least he hit home in some areas with the Clojure newbie experience post.

16:28 rbxbx: *shrug*

16:28 I will say I got the functional aspects of clojure much more so after spending some time with haskell.

16:28 I think embracing lisp and FP was too much for me at once

16:29 Raynes: I don't think I would have gotten Clojure if I hadn't spent time with Haskell before that.

16:29 rbxbx: Glad to see I haven't been misleading people in advocating that then :)

16:29 at least in 2 out of n cases.

16:30 Raynes: I think Haskell is important to learn just because you'll think back on when you said "Lisp was insane and a total mindfuck" and laugh until your eyes bleed.

16:31 rbxbx: :D

16:31 aye.

16:31 LauJensen: ok, I think you guys need to get some sleep now, at least I do :)

16:32 rbxbx: It's only 4:30 pm here, I should probably stay awake for a bit.

16:32 But by all means, sleep, denmarkian.

16:32 cheers.

16:33 Raynes: Indeed. Goodnight.

16:33 It's only 3:30pm here, but I woke up at 11 last night. :>

16:34 rbxbx: Ah, right, summer.

16:35 Raynes: rbxbx: I do that in the Winter as well. I'm home schooled.

16:35 No reason to get up in the morning until I have a job.

16:36 rbxbx: bastard!

16:36 c'est le vie.

16:36 you could always go the startup or freelance route, and never have to be a real human.

16:37 that said, if you're freelancing, your clients will wake you up.

16:37 or at least try to

16:37 Raynes: Heh.

16:37 Goodnight for real.

16:37 <3

16:37 rbxbx: ta!

16:50 mabes: could someone explain to me the motivation on why records (defrecord) don't implement clojure.lang.IFn?

16:51 if records are meant to be treated like a hashmap it seems like having clojure.lang.IFn implemented would make sense so you could say (record :value) in addition to (:value record)

16:57 polypus: mabes: agreed

16:58 rbxbx: I didn't realize you couldn't. o_O

16:58 I wonder if there's any sane reasoning behind that.

16:59 mabes: I believe there is.. at least people on the list have alluded to that.. but I have not been able to find the motivation documented anywhere so I'm curious

17:00 TakeV: Does Clojure work for Android development?

17:00 arohner: mabes: I know that (:value record) uses a java accessor rather than a hashmap lookup, so it's faster. Of course, that's not by itself a justification

17:01 mabes: arohner: ahh, well, that might be it.. since clojure tends to discourage practices that lead to poor(er) performance

17:04 polypus: arohner: yeah i think it does, but then couldn't defrecords' IFn implementation do the same?

17:14 eevar_: meh @ http://gregslepak.posterous.com/on-lisps-readability -- of course the 2nd example is easier to scan (despite his formatting), he's using 4-space tabs instead of 2 spaces

17:30 arohner: is there a lein plugin thats sort of like rake tasks? I don't need a full blown plugin, just something to make it easy to call 3 line clojure functions

17:31 neotyk: arohner: just put that function in proper package

17:32 arohner: oh right. I keep forgetting you can put src/leiningen in your own code

17:32 neotyk: quite convenient, isn't it?

17:33 arohner: yes it is.

17:33 That will be called by lein's jvm, rather than the target's jvm, right?

17:34 neotyk: can you describe diff between those two?

17:35 arohner: the clojure.jar may be different. lein starts with the clojure.jar it wants, while lein swank starts with the clojure.jar in your project.clj

17:35 s/lein swank/target jvm/

17:35 sexpbot: the clojure.jar may be different. lein starts with the clojure.jar it wants, while target jvm starts with the clojure.jar in your project.clj

17:36 technomancy: arohner: correct

17:38 neotyk: so in lein's clojure.jar hook/plugin gets executed

18:58 duncanm: quiet

19:21 clojay: Good evening. I'm using Clojure 1.1 and when I try to use the source symbol from the Repl, it doesn't work for me. Do you know why that may be the case?

19:24 polypus: i have a class name as a symbol and want to make a new instance. how do i do it?

19:25 i.e. i don't know the class name at compile time

19:30 arohner: clojay: source symbol? you mean like (source map)?

19:30 clojay: arohner: correct.

19:30 arohner: clojay: I think that was added to clojure core in 1.2. Try clojure.contrib.repl-utils/source

19:31 polypus: you can use the reflection api, or mess with the class class

19:31 polypus: http://download.oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/api/java/lang/Class.html

19:31 clojay: arohner: contrib is in my classpath already. How do I load the functions in contrib from Repl?

19:32 arohner: polypus: see .getConstructors(), and then .newInstance() on the constructor

19:32 polypus: arohner: thanks many

19:32 arohner: polypus: also worth checking out Reflector.java in the clojure source

19:32 clojay: (use 'clojure.contrib.repl-utils)

19:34 clojay: arohner: thank you. that worked.

19:36 Is there a way to clear the Repl (like clear in bash) and to exit without Ctrl+D?

19:37 arohner: clojay: Try Ctrl-L to clear

19:37 clojay: to exit (System/exit 0)

19:37 clojay: arohner: fantastic

19:37 arohner: thanks

19:39 arohner: earlier you questioned my use of the word "symbol" to describe "source". What would be the right term? Function? Form?

19:39 arohner: clojay: function

19:39 clojay: thanks

19:40 arohner: clojay: in clojure, symbol means the literal sequence of characters

19:40 clojay: the symbol evaluates to an object

19:41 clojay: so the source symbol evaluates to actual function source defined in contrib

19:41 arohner: if the first element in a list evaluates to a function, it's called

19:41 clojurebot: http://www.math.chalmers.se/~rjmh/Papers/whyfp.pdf

19:41 arohner: clojay: right

19:42 symbols and functions are both objects that have values

19:42 ,(symbol "foo")

19:42 clojurebot: foo

19:42 arohner: ,(keyword "foo")

19:42 clojurebot: :foo

19:42 clojay: got it

20:08 dabd: I am searching for the Clojure 1.2.0 roadmap to find more info about support for annotations in gen-class. Does anyone know where this is documented? Thanks.

20:17 polypus: dynamic records: http://gist.github.com/467471

21:06 mudge: i'm writing a namespace I'm going to gen-class, is the init function the constructor?

21:11 hello

21:12 is the init function called before the super method?

21:14 qbg: Looks like it since init must return [ [superclass-constructor-args] state]

22:43 mudge: thanks qbg

22:44 i found what i needed: post-init

22:44 post-init is called after all the constructors are called, just what I needed

23:12 eyeris: If I use leiningen, where should my source files go for a file with a namespace of edu.wisc.uwsc.prosyncd?

23:13 I would thinkg src/edu/wisc/uwsc/prosyncd.clj

23:13 dnolen: eyeris: yup

23:14 eyeris: when I run `lein nailgun`, then open that file and \et to eval the ns macro at the top of the file, it says that no such file is on the classpath

23:19 Nevermind. I guess the lein-nailgun clojar is crap

23:20 You have to use org.clojars.brandonw/lein-nailgun

23:36 brweber2: is there something like a (source function-name) similar to (doc function-name) or (find-doc "module-name")?

23:38 mabes_: brweber2: what do you mean.. there is a source function

23:38 ,(doc source)

23:38 clojurebot: "clojure.contrib.repl-utils/source;[[n]]; Prints the source code for the given symbol, if it can find it. This requires that the symbol resolve to a Var defined in a namespace for which the .clj is in the classpath. Example: (source filter)"

23:40 brweber2: mabes_ thanks, didn't have contrib in my path ... doh!

23:41 Bahman: Hi all!

Logging service provided by n01se.net