0:00 slyphon: does that mean that you should do (foo [this & args]) in your proxy functions, or that you magically have 'this' bound inside your functions?
0:00 carkh: magically
0:00 slyphon: hrm
0:00 ok
0:01 hiredman: it's implied that it is there, so you don't have to explicitly say that it is there
0:03 slyphon: mm'kay
0:04 carkh: try to macro expand, and see the implied this parameter
0:08 dgreensp: ,(macroexpand-1 '(proxy [java.util.Comparator] [] (compare [a b] 0)))
0:08 clojurebot: java.lang.IllegalStateException: Var null/null is unbound.
0:08 dgreensp: eh, worked for me
0:08 implementing interfaces is much terser in Clojure than in Java, I've noticed
0:09 slyphon: xmlrpc, i hate you
0:55 xmlrpc: hey, take it easy slyphon
0:55 slyphon: :)
0:56 defn: slyphon: i think i remember you from #ruby-lang years ago
0:57 slyphon: it's quite possible
0:57 :)
0:57 Crowbar7: Hello
0:57 defn: 'lo
0:57 slyphon: i used to hang out there quite a bit
0:58 defn: slyphon: what brings you clojures
0:58 clojure's way
0:58 slyphon: eh, i was getting kind of bored with ruby
0:58 i felt like i was writing the same thing over and over
0:59 also, i've always had a real curiosity with lisp
0:59 and failed miserably at my last attempt to learn CL
0:59 defn: you?
1:01 defn: slyphon: once i got into the ruby metaprogramming stuff i had been investigating lisp and realized that what i was doing was well-documented and easier elsewhere
1:01 slyphon: hah
1:01 very true
1:02 defn: ruby was a nice step in the right direction though
1:02 slyphon: yeah, totally
1:02 ruby's a good language for a lot of things
1:02 defn: i learned a lot about "the other half"
1:02 slyphon: coming from where?
1:02 defn: namely, oop stuff
1:03 slyphon: ahh
1:03 defn: Java -> C++ -> Ruby -> Clojure
1:03 sort of a weird evolution
1:03 slyphon: heh
1:04 makes sense
1:04 i went from C (college) -> Python -> Ruby -> Scala (and back to ruby) <-> Clojure
1:04 defn: dynamic is a prerequisite nowadays
1:04 slyphon: yeah
1:04 scala annoyed me
1:05 defn: i didnt try it, reminded me too much of C++
1:05 slyphon: heh
1:05 i find static typing gets in the way too much
1:05 more a hassle than a help
1:05 defn: i played with haskell for a spell
1:05 slyphon: oy
1:05 defn: i felt pure but constrained
1:06 slyphon: purity is constricting
1:06 defn: like i was always fighting with my tools
1:06 i still use xmonad and type some haskell every now and then, but in general i'd rather avoid it
1:07 slyphon: yeah
1:07 a buddy of mine loves it
1:07 he's crazy though
1:07 defn: once you know it you're sort of too far to go back
1:07 i walked away from the point of no return
1:07 slyphon: apparently GHC creates insanely fast code
1:07 hah :)
1:08 "Here lies madness...I'll be leaving now..."
1:08 defn: it's very interesting and in a lot of ways "satisfying" or "fun:
1:08 slyphon: yeah, but
1:08 i mean
1:08 if you're in college...
1:08 defn: but in generaly i found it to be a sort of constraint
1:08 general*
1:09 slyphon: i dunno, i haven't heard of many "haskell shops"
1:09 defn: ive heard of haskell programmers doing financial applications and such
1:09 but that's just pure hearsay
1:09 slyphon: orly?
1:09 hahahaha
1:09 defn: :)
1:10 slyphon: i mean, if you want the speed, and your boss isn't going to look at you like "Ok, now go and reimplement that in a *real* language"
1:11 defn: programmers as a commodity
1:11 it's a very sad thing
1:11 TheBusby: FYI, janes street is a financial shop built around ocaml
1:11 slyphon: wow
1:11 "good luck with that"
1:11 i mean, i'm sure these things exist
1:12 i'm sure if you look hard enough you can find Smalltalk shops, or APL shops
1:12 TheBusby: not just a shop, but they sponsor a large number of FP activities
1:12 very active in the FP community
1:12 * defn writes hieroglyphs (APL)
1:12 slyphon: :D
1:13 APL: You shoot yourself in the foot, then spend the rest of the day figuring out how to do it in fewer characters
1:13 TheBusby: I hear screams of pleasure from the Haskell/Ocaml people, but I haven't bought into static typing yet
1:13 I'd certainly like to enforce something like in Clojure from time to time tough
1:13 slyphon: eh, i'm still skeptical of the whole FP religion
1:13 TheBusby: you *must* provide an int here, and don't compile if you don't
1:13 slyphon: that can be useful
1:14 defn: I think we can get on with FP and all the benefits it affords without being overly concerned with types.
1:14 slyphon: but, yeah
1:14 having preconditions is probably more useful
1:14 TheBusby: that's still runtime though, the one advantage of Haskell is that it catches those things at compile time
1:15 slyphon: i find w/ static typing that I spend an inordinate amount of time trying to shoehorn things around the type system
1:15 TheBusby: I expect something like (+ 5 "abdc") to either work, or throw an error/warning during compilation
1:15 defn: haskell is great. ive just chosen to spend me time here.
1:16 not really a judgement or anything, just a preference.
1:16 TheBusby: I certainly prefer clojure over haskell, but sometimes wish I could have my cake and eat it too
1:16 defn: s/me/my*
1:16 slyphon: that's a really silly expression
1:16 it should be "eat your cake and have it too"
1:16 my dad pointed that out to me when i was like 12 and ruined it for me
1:16 defn: it should be "the ability to do whatever one wishes with a cake"
1:17 TheBusby: er, yeah that (my English is only getting worse unfortunately)
1:17 slyphon: HAH
1:17 TheBusby: nah, it's a colloquialism, people look at you weird if you say it the reverse way
1:20 defn: i want to have my eat and cake it too
1:20 slyphon: i want to eat my cake and crap it to
1:20 too*
1:20 defn: cake to i want have my, eat and it too
1:21 * slyphon expects Graham Chapman to barge in any second and declare "Stop that! It's silly."
1:21 defn: :)
1:21 silliness ought to be encouraged in any good society
1:21 slyphon: :)
1:22 indeed
1:25 miltondsilva: hmm... is there an f that can do this? (f {:a 1 :b 2} {:a 1 :b 3}) -> {:a [1 1] :b [2 3]}
1:26 (not home made.. but rather in clojure/contrib? I've had not luck searching :s)
1:29 TheBusby: merge?
1:30 merge-with?
1:30 miltondsilva: naa.. merge does this (merge {:a 1 :b 2} {:a 1 :b 3}) -> {:a 1 :b 3}
1:31 TheBusby: (merge-with list {:a 1 :b 2} {:a 1 :b 3})
1:31 {:a (1 1), :b (2 3)}
1:31 (merge-with vector for the example I guess
1:31 ,(merge-with vector {:a 1 :b 2} {:a 1 :b 3})
1:31 clojurebot: {:a [1 1], :b [2 3]}
1:33 miltondsilva: :) this is a clear sing that I've been up longer than I should :P
1:33 sign*
1:33 TheBusby: happens to all of us ;(
1:33 ;)
1:33 * defn builds a bot which reminds you to go to sleep because you're clearly not thinking straight anymore
1:34 * TheBusby wants super prolog program where you could feed it what you want, and it would return the function/code to do it for you (within limits of course).
1:34 defn: < sleep-enforer> defn: please put your brain away.
1:34 (foe example
1:34 )
3:23 nipra: ,(merge {:a 2} ())
3:23 clojurebot: {:a 2}
3:23 nipra: ,(merge {:a 2} [])
3:23 clojurebot: java.lang.IllegalArgumentException: Vector arg to map conj must be a pair
3:24 nipra: ,(merge {:a 2} nil)
3:24 clojurebot: {:a 2}
3:24 Raynes: ,(merge {:a 2} (seq ()))
3:24 clojurebot: {:a 2}
3:24 Raynes: ,(merge {:a 2} (seq []))
3:24 clojurebot: {:a 2}
3:24 Raynes: Fun.
3:25 nipra: Raynes, I feel that's inconsistent. (merge {:a 2} []) behavior.
3:25 Raynes: ,(seq? ())
3:25 clojurebot: true
3:25 nipra: ,(seq [])
3:25 clojurebot: nil
3:25 Raynes: ,(seq? [])
3:25 clojurebot: false
3:27 nipra: (merge {:a 2} ()) and (merge {:a 2} []) should behave in the same way. Throw error or merge.
3:30 spariev: wonder why [] isn't a seq
3:30 licoresse: .
3:31 morning all
3:31 spariev: hi
3:31 Raynes: http://
3:31 nipra: ,(merge [[:a 2]] [:b 3])
3:31 clojurebot: [[:a 2] [:b 3]]
3:32 nipra: ,(into {} (merge [[:a 2]] []))
3:32 clojurebot: java.lang.IllegalArgumentException: Vector arg to map conj must be a pair
3:34 Raynes: ,(apply merge (map #(apply hash-map %) (merge [[:a 2]] [])))
3:34 clojurebot: {:a 2}
3:34 Raynes: :o
3:35 dcnstrct: I guess this may be more of a java question than a clojure question but perhaps there is some clojure specific way to do what I want.. I have a long-running function and I want to wrap it in a timer so that if it takes too long an exeception is thrown. What might be a good approach to take ?
3:36 require 'timeout'; Timeout::timeout(5) { my_long_running_method() } <--- how I would do it in Ruby for example.
3:37 Do I have to use Java's thread construct to do it or is there a more simple way ?
3:37 Raynes: dcnstrct: http://
3:37 So does clj-sandbox.
3:38 dcnstrct: rad, I will scope it out.
3:38 Raynes: But, I guess it's dangerous for some purposes. chouser said it leaves locks in a bad state, I think.
3:39 Haven't had any problems with it yet though.
3:39 dcnstrct: well this is perfect for my purposes thnx a bunch.
3:39 spariev: here's relevant discussion at sun forum - http://
3:39 Raynes: spariev: Thank you. Useful reading, that is.
3:40 spariev: Raynes: np
3:40 basically they suggest to use Futures like you do
3:41 Raynes: I wish you could use Clojure futures for this.
3:41 Would be prettier with less imports.
3:44 dcnstrct: You're welcome.
4:12 esj: hello all
4:14 AWizzArd: Moin esj.
4:16 licoresse: hi
4:17 AWizzArd: Hallo lico
4:18 * licoresse thinking of moving to 1.2 today
4:18 AWizzArd: good idea
4:18 licoresse: good to hear
4:19 esj: licoresse: I'll join you !
4:19 AWizzArd: Every 1-4 weeks I download the freshest Clojure, and it works fine for me. Just very few times I need to spend 10 minutes to make some minor adoptions in my code, because some small thing got broken.
4:23 licoresse: hate this
4:23 Fossi: if you happen to have binary libraries it's a bit more painful, as i just found out :)
4:23 licoresse: in a lein deps, maven complains about missing artifacts
4:23 AWizzArd: To adopt code?
4:23 Fossi: what do you mean?
4:24 You have binary Clojure libs that depend on a specific version of Clojure?
4:24 Fossi: i have a few clojure compiled jars, that i didn't have the source around and they were compiled against 1.1 apparently
4:25 AWizzArd: okay, that is indeed a challenge then
4:26 Fossi: i don't know if it's even possible to run in a mixed version env like that
4:27 i just switched back and ported back a couple of things
4:27 * licoresse forgot to put -master- in project.clj
4:27 Raynes: Wow. The 1.2 Hudson contrib builds still haven't been fixed? ._.
4:28 Fossi: licoresse: yeah, been there as well :)
4:41 licoresse: after lein new someprojectname, and replaced org.clojure/clojure + .contrib to "1.2.0-master-SNAPSHOT" in ze project.clj, what must be done in order to not blow up lein swank?
4:41 I've done deps, the libs are there
4:42 saw Raynes answered a Stackoverflow question recently
4:42 Raynes: licoresse: A rare appearance.
4:43 I usually just miss all the good questions.
4:43 underdev: licoresse: i pulled those with deps yesterday, and have had no problems with swank-clojure-project
4:43 one second, let me try lein swank
4:44 licoresse: what is the version of swank-clojure ("1.1.0" is mine)
4:44 Raynes: licoresse: Which question did you see? I answered two.
4:44 licoresse: http://
4:45 esj: licoresse: i have 1.1.0, but run swank so i can get 1.2.0 in my project
4:45 (lein 1.1.0 that is)
4:45 underdev: :dev-dependencies [[swank-clojure "1.1.0"] [leiningen/lein-swank "1.1.0"]]
4:45 licoresse: ah
4:45 my deviates, let me try
4:45 underdev: and lein swank is happy
4:46 waiting for me ion port 4005 :)
4:46 Raynes: licoresse: Ah yes.
4:46 licoresse: cool, it works!
4:47 underdev: under no circumstances are you to reveal i was in anyway helpful
4:47 licoresse: :)
4:47 underdev: you were, Thanks ;)
4:48 underdev: it will totally ruin my rep if this gets out shhhhh
4:48 esj: ;)
4:53 licoresse: nothing is like starting converting a 200k java project to clojure, first coffee!!
4:54 underdev: doh!
4:55 for what, may i ask?
4:56 licoresse: for learning :)
4:57 esj: licoresse: dbl espresso for you !
4:57 Raynes: It's not that hard to kill yourself. You don't need these sorts of horrors to teach you.
4:58 licoresse: hehe, I am not finishing this today
4:58 it's a project I want to extend, but the original code turned out too convoluted
4:59 * esj snarls are swank for still giving him 1.1.0..... where is that 1.1.0 jar, its time has come...
5:00 underdev: rock on, rocker
5:02 Raynes: ~def map
5:03 esj: hmmm......
5:03 i thought lein was such that lein swank used the project's version of clojure
5:04 aaah, it is.
5:04 * esj writes on his palm NOT to confuse slime-connect with swank-clojure-project
5:04 esj: maybe i'll remember next time
5:08 _ato: swank-clojure-project and lein swank should both use the project's version of clojure
5:08 unless you've added some strange configuration for slime
5:08 AWizzArd: When I use/require namespaces a, b and c, and when b also uses/requires c, and a uses/requires b, will all those namespaces be loaded only once?
5:09 The-Kenny: AWizzArd: I think so
5:09 _ato: AWizzArd: yes
5:09 esj: _ato: yeah,
5:10 * licoresse ot: how to turn off notifications in erc in emacs
5:10 esj: _ato: not sure what happened there, it passed, though.
5:47 ok, now that I've finally gone to 1.2. Does anybody have a link to any examples of the defprotocol / deftype stuff ?
5:50 hoeck: esj: basically there: http://
5:51 esj: hoeck: thanks, I'm reading that now.
7:17 unhelpful that (doc defprotocol) returns an example using a deftype that is incorrect (it is missing the 'this' parameters)
7:17 where can I report this ?
7:17 i guess as i'm using a clojar i'm behind the edge.... I'll check out github
7:25 must I login to Assembla to create a ticket ?
7:25 not having completed a CA....
7:34 _ato: esj: you can't create a ticket unless you've completed a CA
7:35 esj: i figured.
7:35 _ato: So best place to report it is probably hte mailing list
7:35 esj: Well, for what its worth I think the example in the docs starting at core-deftype:512 should have a this argument for each of the functions.
7:36 i'll see about getting a CA
7:37 hiredman: this arguments to deftyp methods just changed to require an explicit this
7:38 esj: its no sweat
7:38 i had a thought: why not tag some of the tests in a test suite as examples, and have the docs collect them out of there ? Then you don't get stale docs.
7:48 wlangstroth: The CA is pretty funny - I don't think I've ever signed that kind of entity agreement with a person -- it's usually "The Company"
7:50 hiredman: right
7:50 Rich Hickey Contributors Agreement
7:51 wlangstroth: Yeah, it's like he's a statue or something
7:51 anyway, good morning
7:57 AWizzArd: wlangstroth: this text was written by Suns lawyers.
7:58 This is the CA that Sun requires you to sign if you want to work on Suns OS projects.
7:58 The CA itself has a free license, so Rich could simply use that one.
7:58 wlangstroth: AWizzArd: yeah, I figured as much -- it just reads funny
7:59 is there any news about the Clojure compiler in Clojure?
7:59 AWizzArd: yes, new deftype
8:01 wlangstroth: eenteresting. All I could find is the layout/roadmap on assembla -- is there anywhere I could find more specific information?
8:02 hiredman: it doesn't seem to be a priority
8:02 _ato: there's also a first cut of a vector implementation using deftype: http://
8:03 wlangstroth: hiredman: probably not, but I'm geeking out about it anyway
8:03 hiredman: right
8:04 _ato: wlangstroth: I don't think there's been any recent summaries, the little I know is from reading IRC too much and commit messages. ;-)
8:05 wlangstroth: _ato: so it's not the talk of the town; okay.
8:05 hiredman: if you want it, I think it is entirely doable now, but I would not hold my breath waiting for it
8:06 cemerick: wlangstroth: there's a lot of foundational stuff yet to be done IIUC. Most of it's in Rich's head, really.
8:06 Raynes: Oh noes, cemerick. What if Rich loses his head?
8:07 wlangstroth: hiredman: I have to wait for the mail to deliver my Rich Hickey Contributors Agreement
8:08 hiredman: wlangstroth: just to contribute code back, you can start writing right away
8:08 wlangstroth: cemerick: do you know if this is something that will happen one "refactor" at a time?
8:09 cemerick: I don't know what the broader strategy is, but given that there's a couple of core data structure impls out there that are pure-clojure, I can see things moving piecemeal for a while.
8:09 wlangstroth: hiredman: very true
8:10 cemerick: Settling on a new reader impl is probably one of the bigger blockers.
8:10 hiredman: the compiler uses a map for dispatch, it could easily be altered to prefer doing dispatch via a namespace
8:12 I think one thing that could be done is to start moving thinks to the IFn interface
8:12 cemerick: hiredman: like?
8:12 hiredman: uh, LispReader/read
8:12 cemerick: oh, sure
8:13 hiredman: in the compiler there is, uh, I think there are called Parsers
8:13 which are similar to IFn's
8:13 you have an instance and an invoke like method
8:14 similar to how IFn's are used for everything else in the reader
8:15 wlangstroth: reading the code: I didn't realize there's no way to create a variable-length set of arguments in Java. My Java is obviously rusty.
8:15 hiredman: there is
8:16 but it is sugar over passing an array
8:17 mikem: is there a function for writing binary data into a file in Clojure?
8:18 wlangstroth: hiredman: right. It just seems odd to see 20 parameter lists in http://
8:19 hiredman: right
8:19 wlangstroth: but I'm assuming it's ... faster?
8:19 hiredman: right
8:19 cemerick: yeah, if you don't have to pack args into an array or seq for each function call, so much the better
8:19 it'd be like using apply for every invocation
8:19 hiredman: I mean, you already have to box everything
8:20 _ato: mikem: not a single function, as far as I know. (with-open [f (java.io.FileOutputStream. "somefile")] (.write some-byte-array))
8:20 wlangstroth: yeah. otoh, I can't remember ever writing anything with as many as 20 parameters
8:20 so it's not like it's a huge issue
8:20 cemerick: some people honestly complain about that limit. :-/
8:20 mikem: _ato: ok, I'll have to call out to Java for that then. Thanks :)
8:21 wlangstroth: cemerick: buhwhat? they're not kidding?
8:21 cemerick: nope
8:21 wlangstroth: cemerick: that's a firing
8:21 _ato: mikem: ah, just remembered, there is the copy multimethod in duck-streams
8:21 which may or may not suit your purpose
8:22 hiredman: my understanding is that a good chunk of those overloads will be tossed out to make room for some kind of set of primitive signature
8:22 s
8:22 duck-streams tends to assume character data
8:23 _ato: right, but you can pass copy a byte array and an outputstream (or an inputstream and an ouputstream) and it'll do binary
8:23 it's one of the few that can do non-character
8:33 wlangstroth: is contrib.duck-streams contrib.io, now?
8:34 http://
8:35 _ato: yes
8:35 it also picked up some things from java-utils
8:35 tomoj: but not in the current snapshot of contrib
8:36 oh, hmm
8:36 it looks like 1.2.0-SNAPSHOT is up to date
8:36 but 1.2.0-master-SNAPSHOT is out of date
8:36 wlangstroth: cool, thanks
8:36 tomoj: whereas with clojure, there is no 1.2.0-SNAPSHOT and 1.2.0-master-SNAPSHOT is up to date..
8:37 wlangstroth: tomoj: as long as everything's consistent. uh ...
8:49 licoresse: how do you use the clojure.contrib.trace/trace-fn-call?
9:00 wlangstroth: licoresse: you mean instead of deftrace or dotrace?
9:06 AWizzArd: What is foo? (foo #'clojure.core/+) ==> #<core$_PLUS___3678 clojure.core$_PLUS___3678@10d16b>
9:09 licoresse: .
9:09 chouser: AWizzArd: deref
9:11 we're using 'binding' pretty extensively for mocking out network and other inpure functions during testing ... has anyone thought about how to deal with multithreaded code in this context?
9:12 AWizzArd: chouser: oh right, thanks :)
9:17 mikem: hm, why does FileOutputStream.write(byte[] b) not exist for me? http://
9:17 carkh: chouser : it's a pretty open ended question
9:18 chouser: carkh: yeah, I know. I guess I'm wondering if there's a sane way that common thread-launchers or thread-pool-users could be asked to pass along thread-local var bindings
9:18 pmap, future, send, send-off...
9:19 since I'm already specifying the exact vars to be thread-bound, I'd be happy to provide a list of vars whose bindings need to be propogated.
9:19 hm -- I guess I could dynamically bind those core functions as well, to provide implementations that check a list of bindings to propogate.
9:20 carkh: i think there was some tool for that in core ... with-bindings perhaps ?
9:20 chouser: oh, shoot I can't anymore because of core direct-binding. :-(
9:20 spariev: some means to customize futures/agents/etc would be nice
9:20 maybe also custom error handling
9:20 chouser: carkh: with-bindings does the same thing as binding, just a slightly different argument structure.
9:21 we need more knobs to control direct-binding.
9:24 carkh: i would do this : build a high order function that establish dynamic extent using the "binding" macro
9:24 and run all your thread function by passing these to this function
9:24 you pass the function one way or the other to your thread
9:26 chouser: hm.
9:27 carkh: (send-off my-agent (var-builder [var1 var2 var3] agent-function))
9:28 var-context-builder would be a better name or something like it
9:29 patrkris: pmap was deprecated in clojure 1.1.0 right?
9:29 chouser: I don't think so
9:30 patrkris: hmm... I recall somethiing about rewriting it to use the fork/join library or something
9:34 ah, I must have thought about the parallel processing stuff mentioned here: http://
9:36 mikem: is [Ljava.lang.Byte; equivalent to byte[]?
9:37 I'm trying to pass a [LJava.lang.Byte; to FileOutputStream.write(byte[]) but that doesn't seem to be a valid match
9:38 chouser: no, [Ljava.lang.Byte; is like Byte[]
9:40 mikem: oh... (byte 4) does not return a byte, it returns a Byte!
9:41 AWizzArd: ,(byte-array 10)
9:41 clojurebot: #<byte[] [B@6188d>
9:42 mikem: AWizzArd: ok, I think i get it
9:42 chouser: thanks
9:43 AWizzArd: (,doc byte-array)
9:43 hrmpf
9:44 mikem: heh, that's what being new to Java does to you
9:44 got a few more streams like this to cross
9:46 AWizzArd: yes
9:55 When my current working directory is /home/clj/ and I do java -jar application.jar, is then (System/getProperty "user.dir") => "/home/clj"?
9:56 so, is the property "user.dir" set to the directory in which java was started?
9:57 Or is (.getCanonicalPath (java.io.File. ".")) better?
10:02 carkh: (System/getProperty "user.dir") gives you the current directory in that case
10:03 that's what i use for an application that's been in production for a while at several sites
10:06 AWizzArd: sounds good
10:11 carkh: do you also know how to find out the path in which the .jar lives?
10:12 So when the WD is /home/someuser/abc/ and there I do java -jar /home/clj/application.jar then I want "/home/clj/"
10:13 carkh: i don't know that ...what i do is launch the application via a batch file that changes to its own directory first
10:14 your application is running on windows or some unix ?
10:16 AWizzArd: not running yet, I just would like to build a little configuration-file helper lib which can load (surprise) config files.
10:16 Sometimes a user may want that the config files are in the dir of the app itself, no matter from where it gets started
10:16 carkh: yes that's the way i do it
10:17 so if you want an example for those batch files have a look at http://
10:17 AWizzArd: So, the installer of an app should create a starter script which first CDs into the right dir. Ah okay
10:19 carkh: well no, the batch file knows where it is, and automagically changes to its own directory
10:19 so the installer has nothing to do in that respect
10:34 zmila: one more web-framework in Clojure :)
10:35 esj: is a 'variable' declared within a binding within a function unique per function call - ie in a multithreaded env, if two threads call the function at the same time will they clash ? I'm guessing not, but want to check.
10:36 by binding i literally mean a (binding [...] ...)
10:36 carkh: no clash
10:36 esj: whew
10:36 thanks
10:43 Chousuke: the *var* is the same, but binding does thread-local rebinding, so the change is only visible in the thread making it.
10:44 ie. the same var may have different values in different threads at the same time.
10:45 esj: ok, that's great, thanks.
10:49 dnolen: is it possible to filter a collection based on the contents of another collection of the same size?
10:50 stuartsierra: dnolen: probably, what do you want to do?
10:51 dnolen: i'm revisiting a boid simulation i did a while ago. one bottleneck is the cost of assoc.
10:52 I was assoc'ing the distance onto each map which represents a boid
10:52 I need the distance to filter to the list of boids
10:52 it will be faster (I think) if I could just filter skipping the assoc step.
10:54 stuartsierra: dnolen: maybe just a map with two seqs
10:56 dnolen: stuartsierra: ? like (map ...) the boids and dists together ? sorry, don't follow.
10:56 hmm, filter-other seems like it would be a handy function
10:57 (filter-other pred coll other-coll)
10:59 stuartsierra: (filter identity (map (fn [boid dist] ...) boids distances))
10:59 hiredman: if the map'ed function is expensive you can pmap there
11:01 dnolen: hiredman: yeah not expensive enough.
11:28 stuartsierra: Is there a function to retrieve a map entry, not just the value?
11:30 besides .entryAt
11:30 chouser: stuartsierra: 'find'
11:30 stuartsierra: thx
11:37 dnolen: stuartsierra: tried out that idea. seems like it's tens times slower or something to map over two collections then it is to just use assoc.
11:37 looks like I'll be converting my map into a deftype instance to get that last mile.
11:57 the defrecord stuff hasn't made an appearance yet has it?
12:01 chouser: dnolen: I think it's still just (deftype ... clojure.lang.IPersistentMap)
12:02 dnolen: chouser: really? I don't have to implement anything?
12:03 chouser: dnolen: right. If you do that you should get assoc, dissoc, get, etc.
12:03 dnolen: chouser: and it's faster than using maps right?
12:03 chouser: for the predefined keys, absolutely
12:05 carkh: im' confused wasn't reify the fast one ?
12:05 chouser: reify is also fast
12:05 Chousuke: Aren't they built on the same underlying mechanism anyway? :/
12:05 carkh: allright, but the methods of a deftyped thing, these are in a map right ?
12:06 Crowb4r: Has there been anything in writing about using clojure in a best practice way?
12:06 chouser: deftype defprotocol definterface reify and extend all work together to cover various use cases
12:06 Crowb4r: working on it...
12:06 Crowb4r: chouser: you are?
12:06 clojurebot: chouser is ruthless about breaking other people's code
12:06 chouser: heh
12:06 carkh: i remember that one =P
12:06 chouser: Crowb4r: http://
12:06 Crowb4r: or did you mean just using it.
12:06 stuartsierra: Can a macro pass undeclared parameters down the stack to another macro, as functions can with binding?
12:06 * dnolen wonders why Clojure is so *awesome*
12:07 Crowb4r: chouser: When is the book going to be finished?
12:07 chouser: carkh: no, methods appearing in a deftype must have already been declared in an interface or protocol, and they are real methods of the Java class, not keys in a map
12:07 Chousuke: stuartsierra: probably not
12:08 stuartsierra: as the macro form is expanded before the binding form is evaluated
12:08 chouser: Crowb4r: we've got a few months yet
12:08 Chousuke: stuartsierra: however, a macro can establish a binding and call a function, of course :)
12:08 stuartsierra: Chousuke: I was thinking of using let-bound locals somehow.
12:08 dnolen: so I'm guessing Clojure 1.2 is pretty close eh?
12:09 chouser: stuartsierra: I've done something a bit like that using metadata on let-locals and &env
12:09 Crowb4r: chouser: I may pre-order the book when the next round of early access material comes out.
12:09 stuartsierra: chouser: That's what I'm trying to do, but I want the macros farther down the stack to override stuff at the top. Can't change metadata in &env, because it doesn't impact equality in the hash-map.
12:10 chouser: Crowb4r: cool. The next update should include a new chapter 1 that will be free and more useful for evaluating the rest of the book than the current chapter 1 I think.
12:10 dnolen: so when using deftype you have to supply all the fields? there's only one constructor?
12:10 chouser: stuartsierra: oh, you want to be pass stuff from inner macros to outer ones?
12:10 Chousuke: stuartsierra: I dread to think what you need that for. :P
12:11 * chouser guesses lazy-test
12:11 stuartsierra: chouser: no, I want a series of nested "let"-like constructs, (given [x 1] ... (given [y 2] ... (given [z 3] ...)))
12:11 carkh: chouser : still confused i see you can provide a new protocol implementation via extend-protocol passing a map of names to functions
12:12 sorry : via "extend"
12:12 stuartsierra: So that another macro, inside the third "given" can see [x y z] and [1 2 3]
12:12 Chousuke: carkh: the extend mechanism transforms that map into something more efficient
12:13 chouser: stuartsierra: if (given [x 1] ...) expands to something like (let [x 1] ...), you can see that in &env
12:13 carkh: allright, so in the end, my type is a real object with real java interfaces ?
12:13 Crowb4r: Is ther eanyway you could make a fake shell using clojure?
12:13 chouser: stuartsierra: I must be misunderstanding something yet
12:13 carkh: and real java methods ?
12:13 Chousuke: carkh: and deftypes support protocols even more directly by implementing the underlying interface (I don't know if that will remain an implementation detail)
12:13 stuartsierra: chouser: Yes, that's what I did. But once I've set metadata on the symbol "x" in the outer-most macro, the inner macros can't change it.
12:14 Chousuke: carkh: I think you're supposed to treat protocol functions just like any other function
12:14 chouser: why are you trying to change it?
12:14 stuartsierra: I.e., they can call vary-meta on the symbol and bind it in another "let", but the new metadata doesn't appear in subsequent &env maps.
12:14 carkh: Chousuke: well thanks for your help, i really dig this new stuff, too bad i can't use it yet for work =/
12:14 stuartsierra: chouser: to add new symbols
12:15 carkh: it's goo to know that deftyped objects are fast as well, because this extend mechanism is really cool
12:15 good*
12:15 Chousuke: carkh: I think the idea is that the implementation could be a multimethod, a function, or a protocol function and you wouldn't know the difference, except by measuring the performance.
12:15 chouser: I still don't get it -- why do you want to add more symbols to an existing local?
12:15 stuartsierra: Not to the local, to its metadata.
12:16 chouser: to what end?
12:16 stuartsierra: Generating "fn" forms with the right number of parameters.
12:17 chouser: why does that require changing metadata. I'm sorry, I must be missing something obvious...
12:17 Chousuke: can't you generate a local atom or something?
12:17 stuartsierra: So all the (given ... )'s eventually contain an (is...) form that generates an assertion function. "is" needs to know all the "given"s in effect for its lexical scope.
12:17 chouser: right, and it should be able to see all of them in &env
12:17 Chousuke: the inner forms would somehow find and use the outer's form's atom
12:18 stuartsierra: chouser: Yes, maybe I can still make this work.
12:18 chouser: I still don't see why anything needs to mutate
12:18 (let [#^{:is-given true} x 1] ... )
12:18 stuartsierra: What I was doing was storing the "given" state as metadata on a single let-bound symbol
12:18 chouser: ah, I see
12:19 stuartsierra: Keeping them as separate symbols should work, trying that.
12:19 chouser: ok ok, I understand. yeah, separate symbols would be better
12:19 you can munge the names if you want to avoid collisions
12:19 but in general having the name the user gave it be the name of the actual thing is likely a win
12:21 stuartsierra: yeah, I that will work now that I think about it
12:28 thanks, chouser
12:28 chouser: stuartsierra: sure! more metacode ftw! :-)
12:28 stuartsierra: :)
12:39 triyo: Anyone know of any pattern-match lib for clojure that can match on maps and that provides conditional clauses like :when or :where?
12:41 stuartsierra: destructuring does a lot of that already
12:53 triyo: stuartsierra: I need exactlly this: http://
12:53 stuartsierra: dunno
12:53 triyo: I see its in clojars, I'll get the source and have a look. Maybe its not to much work
13:18 stuartsierra: chouser: It works!
13:18 Viva metacode!
13:19 chouser: stuartsierra: heh, cool!
13:30 somnium: mini-dsl for the state monad: http://
13:38 raek: ,::nonexistent/foo
13:38 ,"foo"
13:38 clojurebot: "foo"
13:40 raek: ,(read-string "::nonexistent/foo")
13:40 clojurebot: java.lang.RuntimeException: java.lang.NullPointerException
13:40 raek: it would be better if that threw something more specific...
13:55 stuartsierra: And now lazytest has "givens" that can be declared anywhere!
13:58 Licenser: hmmm I entirely fail to use the xml libraries to parse an xml documente since it seems impossible to turn off validation :(
13:58 anyone ever got them to work with an document that has a doc type definition?
14:07 stuartsierra: Licenser: you can disable validation in Java's SAX parser
14:08 Licenser: stuartsierra: I tried that, did not work :(
14:08 http://
14:09 stuartsierra: Licenser: here's an old message I wrote about this problem: http://
14:10 Licenser: stuartsierra: thanks I'll read through that :)
14:11 stuartsierra: Assuming your problem is that the DTD is not locally available.
14:12 Licenser: no, and sadly I can't influence that since It's a webpage I fetch
14:12 stuartsierra: Oh, so the document is actually invalid?
14:20 Licenser: stuartsierra: nono it is valid but it defines a doctype
14:21 http://
14:25 geez reading your post this sounds like a horrible issue
14:32 good greif this is frustrating, I did not expect that I fail at the point of parsing a html page o.O
14:41 raek: Licenser: using TagSoup with clojure.xml (semi-related): http://
14:41 Licenser: raek: thanks I'll look at that too
14:41 raek: http://
14:42 I also uploaded tagsoup to clojars: [org.clojars.raek/tagsoup "1.2"]
14:43 hiredman: tagsoup should be availble from clojars already, or at least maven central
14:44 [org.ccil.cowan.tagsoup/tagsoup "1.2"]
14:45 (clojurebot uses tagsoup)
14:45 raek: oic
14:47 Licenser: ah neat
14:56 cemerick: Licenser: you can try turning off dtd loading; see http://
14:58 Licenser: cemerick: I'll look into that too :)
14:58 cemerick: the load-external-dtd, false setting is what worked for me
15:04 Licenser: ah neat cemerick that one did the trick!
15:05 cemerick: Licenser: so, you've got a xerces parser in your classpath that is being used by the JDK by default
15:05 Licenser: what?
15:05 clojurebot: what is short for ,(doc ...)
15:06 Licenser: http://
15:06 that works
15:06 cemerick: AFAIK, that option only works with xerces parsers
15:06 sure, that's good :-)
15:07 Licenser: but I don'T have anything special in my classpath I think
15:07 cemerick: the standard java xml APIs are implementation-independent; JAXP just looks for an implementation, and uses it. There's no guarantees about which brand you're getting.
15:08 hrm. Maybe it's applicable across impls. But, I don't need that option with the standard JDK 6.
15:08 Maybe the parser that's included is different on OS X vs. windows, etc. *shrug*
15:09 Licenser: yuck
15:09 cemerick: that's all a good thing, you just don't know it :-)
15:10 Licenser: cemerick: well it works on a clean empty repl
15:10 cemerick: Licenser: with nothing in your JAVA_HOME/ext/lib (or whatever)?
15:11 Licenser: hmm I've no JAVA_HOME set here
15:11 cemerick: sure, it's often set implicitly
15:11 Licenser: :( why has java to be ho horrible
15:12 cemerick: :-/
15:13 Borkdude: because our appreciation of Clojure would grow even bigger because of the Java pain
15:13 Licenser: Borkdude: but java makes my clojure experience horrible lately
15:14 Borkdude: switch to ClojureCLR?
15:14 cemerick: That's *almost* like saying my otherwise-excellent car needing repairs makes my commuting experience horrible lately. ;-)
15:15 hiredman: so you're saying the jvm needs more cupholders?
15:15 Licenser: Borkdude: I run osx :P
15:15 cemerick: I could get down with those awesome builtin seat-heaters
15:16 Borkdude: Licenser: ClojureCLR on Mono?
15:16 Licenser: meh o.O
15:16 well at least this work for me now :P good enough
15:16 cemerick: Did I miss the memo on the CLR being all sqeaky-clean compared to the jvm? :-)
15:17 Borkdude: you can show what's on your classpath with a clojure expression, would that help?
15:17 (println (seq (.getURLs (java.lang.ClassLoader/getSystemClassLoader))))
15:19 Licenser: cemerick: I think it is more saying if you have great wheels on a trabant the trabant makes the experience of the wheels no fun :P
15:20 Borkdude: In F# you can say: reference that dll for me, now!
15:20 Isn't there such a thing in Clojure?
15:20 Licenser: add-classpath?
15:20 clojurebot: add-classpath is bad, avoid it. I mean it!
15:20 Licenser: but that is concidered evil
15:21 cemerick: Borkdude: that's just adding a jar to one's classpath
15:22 Borkdude: it's pretty much what I meant with the F# thing
15:22 #r @"C:\Program Files (x86)\NUnit 2.4.3\bin\nunit.framework.dll";; open NUnit.Framework
15:23 imho it's easier to track wtf you are using
15:23 like this
15:23 than the nebulous classpath
15:23 hiredman: what you want is a classloader that allows for adding stuff dynamiclly, and to set that to be the system classloader
15:24 http://
15:25 you compile that, and set the right -D thing to use it as the system classloader
15:26 Borkdude: hiredman tnx
15:27 hiredman: clojure's own dynamicclassloader may work for that too, but I haven't really looked at it
15:28 Borkdude: is something like that used in swank-project maybe?
15:28 hiredman: (infact I would recommend trying it with clojure.lang.DynamicClassLoader, since I am sure it is better thought out)
15:30 well, DynamicClassLoader certainly doesn't apear to like being the system class loader
15:38 LauJensen: Q: If I'm proxying a Java-Class which was several methods, all taking the same number of arguments, carrying the same name, where the only difference is the types of the arguments. Can type-hints copy that behavior, (method [#^Integer x] x) (method [^String x] (Integer/parseInt x)) etc. ?
15:40 lpetit: LauJensen: not sure about that, but I vaguely remember there's a trick for naming the methods ...
15:41 LauJensen: lpetit: Can you point me to a meaningful doc, thread, log, somewhere?
15:41 drewr: arohner: any progress on https://
15:41 lpetit: LauJensen: that's where the "vaguely remember" comes in the way ... :)
15:42 LauJensen: lpetit: tricky working with a man of your age :)
15:42 arohner: drewr: check out the last patch
15:42 drewr: I'm happy with that one, waiting for testing / approval by higher powers
15:42 lpetit: LauJensen: :-E
15:43 arohner: drewr: if you want things to move faster, maybe you can test it out, and comment on the bug if it works for you
15:43 Borkdude: LauJensen, maybe this? http://
15:43 drewr: arohner: perhaps rhickey is spending his energy on defrecord instead
15:44 LauJensen: Borkdude: no :(
15:45 lpetit: LauJensen: oh, it's not what you're after ?
15:45 LauJensen: lpetit: Its not demonstrating any type-dispatching
15:46 lpetit: ;; gen-class looks for a method with argument types in its name for
15:46 drewr: arohner: I just figured I was missing something since that's such a common use for deftype, but found current master is still broken
15:46 lpetit: ;; overriding specific method signatures. The char<> syntax for
15:46 ;; primitive array types took me a little bit to figure out...
15:46 LauJensen: but I don't know whether the trick works for proxies as well
15:46 LauJensen: lpetit: Thats gen-class though, not proxy - is the naming convention valid in proxy as well ?
15:46 Wow
15:46 arohner: drewr: yeah. re: rhickey + defrecord, he'll either need my patch, or re-implement it himself
15:46 LauJensen: Ok - Guess I'll have to test
15:47 lpetit: LauJensen: yes, tell us !
15:47 arohner: drewr: I have a hard time believing defrecord will be broken the same way when released
15:54 drewr: does anyone know if reader support for #:{} is planned?
15:54 arohner: drewr: what is that?
15:54 or, what will that do?
15:54 S11001001: an uninterned set, obviously
15:54 drewr: sorry, #:Foo{:bar 234} is more descriptive
15:55 it's the print-method for types
15:55 print-dup, to be more specific
15:56 LauJensen: drewr: Have you any idea how often, when I present Clojure to new people, Perl comes up ?
15:57 drewr: LauJensen: I'm not surprised
15:57 clojure does have the write-only feel to it sometimes
15:57 it's the price of brevity though
15:59 LauJensen: True - So sometimes we need to be a little less brief :)
16:00 Borkdude: LauJensen, did you try out if the trick worked for proxy?
16:00 LauJensen: not yet
16:00 Chousuke: I don't think I agree on the write-only thing.
16:00 LauJensen: Borkdude: I was scouring the gen-class docs to see what Rich had to say about this functionality, but he's mute
16:00 Chousuke: that only happpens if you use reader trickery too much :P
16:01 Borkdude: Me neither, I prefer to read Clojure in the morning, it awakens me.
16:01 Chousuke: which mostly manifests as overuse of #()
16:01 drewr: Chousuke: you can definitely write obfuscated clojure; just point-free enough #()s :-)
16:01 yep
16:02 but you can also write really readable perl that doesn't look like someone fell asleep on their keyboard
16:02 LauJensen: drewr: but it wont compile
16:03 drewr: heh
16:04 Chousuke: heh
16:04 a lot of the noise in perl comes from the sigils
16:04 and $_ :PP
16:04 -P
16:06 LauJensen: Yea its really those smileys which are bringing it down
16:06 esj: perl is my favourite write only language
16:06 Chousuke: I don't like perl much. It seems to guess too much
16:06 LauJensen: esj: Thats just for lack of exposure to J
16:07 esj: perhaps, that or whitespace :)
16:07 Chousuke: but I haven't used it in any substantial amount, so...
16:07 but basically you can write completely bonkers code and perl will assign some semantics to it. :P
16:08 esj: it is startling actually.
16:08 Chousuke: and then it becomes your mission to figure out where the problem is, because perl doesn't complain.
16:08 Borkdude: well, you can do that with clojure as well if you don't know what you're doing
16:09 http://
16:09 Chousuke: Borkdude: yeah, but usually you get an error. a cryptic one, but still an error
16:09 Borkdude: Chousuke: see the link...
16:09 * dnolen hopes C-in-C will bring better error reporting, (custom stacktraces pretty please?)
16:09 esj: come on, in perl there aren't even proper arguments to funcitions, just $_[0] and friends
16:10 Borkdude: esj, you mean like #(+ %1 %2) ? ;)
16:10 Chousuke: Borkdude: I think that just shows a misunderstanding of how -> works.
16:10 esj: sure, but I can choose to do ( fn [x y] ...) if i have something more serious
16:10 Borkdude: Chousuke, of course, but no error msg because still it does something
16:10 drewr: dnolen: +1
16:11 * dnolen has practically gained psychic powers to understand Clojure errors
16:12 Chousuke: stacktraces can be pretty-printed
16:12 dnolen: ^ should just be default
16:12 Borkdude: C-in-C?
16:13 dnolen: Clojure-in-Clojure
16:14 Chousuke: I think Clojure development is still primarily focused on the big things
16:15 ugly stacktraces are a big wart, but I suppose tolerating them for now leaves more time for more interesting areas of development
16:15 cemerick: and relatively close changes may make those stacktraces less ugly in and of themselves
16:16 maybe
16:18 hiredman: clojure.stacktrace is nice
16:18 Chousuke: I wonder why it isn't integrated in the repl
16:19 hiredman: *shrug* some people like to see real stacktraces
16:20 Borkdude: gtg
16:21 carkh: (/ 0 3)
16:21 clojurebot: 0
16:21 carkh: hum wrong window, sorry
16:23 Licenser: hmm what am I doing wrong: http://
16:29 Chousuke: Licenser: you should avoid putting dots after urls :P
16:29 Licenser: yuck
16:29 http://
16:30 Chousuke: what exception are you gettings
16:30 -s
16:31 Licenser: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.util.concurrent.ExecutionException: org.xml.sax.SAXParseException: The element type "hr" must be terminated by the matching end-tag "</hr>".
16:31 this one
16:31 Chousuke: sounds like the source document is malformed
16:32 LauJensen: Tagsoup!
16:32 (I mean Enlive)
16:32 Chousuke: maybe it has <hr> instead of <hr/>
16:32 which is okay in HTML, but not in XML
16:32 Licenser: hrm hrm
16:32 Chousuke: which means your code is fine, you just shouldn't be using an xml parser
16:33 Licenser: yes yes, but what scares me is that the try catch does not catch the stuff
16:33 but I guess you people are right, parsing this with the sax parser might be the wrong way
17:11 nteon: so, 'lein swank' isnt working for me anymore. http://
17:11 this is using the latest lein from git
17:11 (as lein-stable doesnt' seem to support swank yet)
17:11 any suggestions?
17:12 or things I can do to be more specific?
17:12 LauJensen: nteon: IIRC export DEBUG=VERBOSE helps a little
17:16 nteon: LauJensen: that helps a bit, yea. I'm still a bit stumpoed, as it has the clojure 1.1 jar on its classpath, but complains about not finding clojure.main
17:16 LauJensen: Can u update the paste?
17:18 nteon: LauJensen: updated (although fpaste doesnt' seem to like wrapping long lines, which i suppose I generally agree with(
17:19 LauJensen: I dont see any extra ouput
17:20 nteon: LauJensen: whoops. apparently pastes are immutable. http://
17:21 LauJensen: Whats with the ::src/:: notation?
17:26 nteon: LauJensen: not sure, I don't have the CLASSPATH set or anything
17:27 LauJensen: What you've shown looks fine, so I suspect perhaps something is amiss in your project.clj ?
17:29 nteon: LauJensen: I'll take a look, although it worked the last time I tried (a week ago or so), but I've upgraded a number of packages on this laptop since
17:30 LauJensen: bisect yourself :)
17:31 licoresse: Anyone on 1.2 using MigLayout?
17:31 nteon: LauJensen: haha. I wish
17:52 licoresse: .
18:43 Licenser: _ato: you're around?
19:03 nteon: technomancy: any way we could make lein swank fail in a better way? I had forgotten that my project wasn't build, and lein tells me this: http://
19:05 (that first part is from giving the -verbose option to java)
19:09 _ato: Licenser: yeah
19:09 Licenser: ah :)
19:09 a question about clojars
19:09 the directory http://
19:10 actually a link to http://
19:11 _ato: web server rewrite rule, nothing much to do with maven
19:11 Licenser: okay so it's your insanity that breaks my code not mavens :P I'm happy with that, can just add a hardcoded workaround then
19:12 _ato: ha
19:12 how does it break your code?
19:12 Licenser: the fact that it redirects to an entirely different domain path and all without looking like a different directory
19:13 I get a index out of bounds exception, I don't know why the heck, might be a thing with tagsoup or some other peace of dependency I use so
19:13 tomoj: I need this thing that I can: 1) put something in, 2) ask for the thing I put in right before the last thing I put in
19:13 pretty simple using a tuple and two functions, but is there a better way?
19:25 Licenser: _ato: I'm working on lein search that allows people to search clojars for a specific jar
19:29 tomoj: nifty
19:30 does clojars do something special other maven repos don't?
19:30 I mean, which facilitates the searching
19:30 Licenser: tomoj: aside from braking the code by http redirects? No
19:31 it will be easy to extend for other repos unless they do silly things like redirects too :P
19:31 only downside, the initial indexing of the repo can take quite a while
19:31 _ato: does it actually read the poms or just list the filenames?
19:31 Licenser: but it is locally cached and you only 'need' to update it when you don't find what you want
19:31 _ato: at the moment just the directory structure
19:31 _ato: if you're just working off the filename, this might be useful (just added and cronned hourly): http://
19:32 Licenser: neat
19:32 if I had known that I
19:32 I'd have saved a lot of trouble :P
19:32 they sound so little so
19:33 Crowb4r: _ato: neat
19:33 I like that
19:34 Licenser: takes nearly 4 minutes to crawl the page
19:34 and the result are 21K of data
19:35 hmm okay the poms.txt is much bigger
19:35 3 times the size
19:36 darn you _ato :P why have you made things so simple?
19:37 _ato: sorry
19:37 it doesn't include stuff from build.clojure.org though, so you might have some more fun with that ;-)
19:38 Licenser: _ato: I am glad it does not :P
19:39 (if (= url "http://
19:39 there that is the result of the hardcoded redirect :P
19:39 _ato: hehe
19:39 Licenser: which makes me hate you very much ;)
19:40 so very cool:
19:40 time java -jar leiningen-standalone.jar search sandbox
19:40 Results for sandbox:
19:40 ([clj-sandbox/ ([clj-sandbox/ (0.1.0-SNAPSHOT/ 0.1.1-SNAPSHOT/ 0.1.3-SNAPSHOT/ 0.2.0-SNAPSHOT/ 0.2.1-SNAPSHOT/ 0.2.10-SNAPSHOT/ 0.2.2-SNAPSHOT/ 0.2.3-SNAPSHOT/ 0.2.4-SNAPSHOT/ 0.2.5-SNAPSHOT/ 0.2.6-SNAPSHOT/ 0.2.7-SNAPSHOT/ 0.2.8-SNAPSHOT/ 0.2.9-SNAPSHOT/)])])
19:40 takes 2s (that includes JVM startup)
19:40 now tossing in some nice formating and happy fun with clj search
19:49 nteon: is there any way to speed up an assoc?
19:49 or anything similar to an assoc that is faster?
19:50 _ato: nteon: http://
19:56 nteon: _ato: awesome! where is that linked-from? (i.e. how could I have found that on my own?)
19:58 _ato: hmm, not sure. maybe it's not linked :( I remembered that page from the original mailing list post that introduced the feature
19:59 nteon: _ato: cool. just trying to get less annoying about asking for obvious help.
20:11 Licenser: geez
20:13 hmm I am out of ideas, sadly
20:13 I have a structure like this: ["clj-sandbox/" (["clj-sandbox/" ("0.1.0-SNAPSHOT/" "0.1.1-SNAPSHOT/" "0.1.3-SNAPSHOT/" "0.2.0-SNAPSHOT/" "0.2.1-SNAPSHOT/" "0.2.10-SNAPSHOT/" "0.2.2-SNAPSHOT/" "0.2.3-SNAPSHOT/" "0.2.4-SNAPSHOT/" "0.2.5-SNAPSHOT/" "0.2.6-SNAPSHOT/" "0.2.7-SNAPSHOT/" "0.2.8-SNAPSHOT/" "0.2.9-SNAPSHOT/")])]
20:14 now I wan't it to get a structure like identifieing that the repo-id is clj-sandbox the entety is clj-sandbox (the second one) and the versions are 0......
20:15 I compleatly fail to come up with a nice or even any algorithm to do that :(
20:24 tomoj: what's wrong with this? https://
20:24 getting "Can't define method not in interfaces: push"
20:26 hiredman: clojurebot: github ba6cc3bde1a1ea9801b2133748a45f1277166368
20:26 clojurebot: http://
20:26 hiredman: bah
20:26 clojurebot: git ba6cc3bde1a1ea9801b2133748a45f1277166368
20:26 clojurebot: reify/deftype methods now take target ('this') object as explicit first arg. Remove support for :as option. Doc differences, including recur, move gvec and reify calls to new format.
20:26 tomoj: I see
20:27 thanks
20:33 Licenser: tere we go, not nice but working
20:37 http://
20:37 there we go lein search, it's far away from being outstanding or very nice but it is a step in the right direction I think
20:41 technomancy: nice!
20:41 Licenser: well the code behind it is ugly but that is another topic :P
20:42 _ato: Licenser: cool! You need to do a / to . replacement though on the group-id. [org/clojars/tomo/compojure "0.3.1"] should be [org.clojars.tomo/compojure "0.3.1"]
20:42 Licenser: ah darn I missed that one
20:43 I acutally do that already just that I added the put / there instead of '.'
20:43 tomoj: _ato: any reason you happened to pick out the one thing I ever pushed to clojars? :O
20:43 Licenser: tomoj: yes I figured I do a search tomoj :P
20:44 _ato: tomoj: it was just the last line in Licenser's gist ;-)
20:44 tomoj: oh I see
20:44 just surprised me
20:44 Licenser: there fixed :)
20:44 * Crowb4r will always use compojure as the benchmark jar when test off clojars.org
20:44 _ato: looks good
20:45 Licenser: *g*
20:47 now to more repos!
20:48 technomancy: Licenser: might be nice to sort non-org.clojars hits last
20:48 (IOW, canonical-first)
20:48 Licenser: technomancy: they are all from clojars.org
20:49 for some reasons some are in the namspace org.cljars, others are not
20:49 but that is something _ato has to explain :P
20:49 technomancy: I mean org.clojars groupIds, since they are non-canonical.
20:49 org.clojars groupIds is shorthand for "this is not my library, I'm just pushing out this alternate version of it"
20:49 Licenser: oh interesting
20:50 didn't new that :P
20:50 _ato: Licenser: there's some notes on it here: http://
20:50 Licenser: I'm just working on getting it work correctly with the repository setup of lein
20:51 so allowing custom and other repositories
20:51 which will most likely entirely kill my computer since updating them all will take a week or two:P
20:51 _ato: that's just a clojars convention though, you won't find that in other maven repos
20:52 Licenser: well question is should this be limited to clojars.org or should it work on lein's repository list
20:53 any thoughts?
20:54 for once clojars is definetly the most important repo, on the other hand lein allows to add custom repos too which means it would be nice to support them
20:54 tomoj: I'd like to be able to search other repos
20:55 I wind up at mvnrepository.org a lot
20:55 seems like people don't want you to know how to get their jars
20:55 clojurebot: max people is 274
20:55 Licenser: tomoj: yes that is something I noticed too :P
20:59 so I am kind of affright to crawl maven central :P
21:00 I mean even clojars takes like 4 minutes :(
21:03 dcnstrct: you guys should built a state of the art jar hosting system on top of Tahoe-LAFS
21:03 http://
21:03 for realz
21:04 I'd chip in a node on it
21:04 Licenser: dcnstrct: I don't tink space is the issue :P
21:05 dcnstrct: it's like some of the good stuff from bittorrent with a lot more privacy / security and it just works over HTTP.
21:05 defn: agh -- i lost logs for all this morning and throughout the day
21:05 (for #clojure)
21:05 * defn needs a more reliable way to do logging
21:05 dcnstrct: it's not about space it's about building a system that highly distributed and always available
21:05 and works over HTTP
21:06 Licenser: okay update started, lets see how long this takes
21:06 dcnstrct: it's like bittorrent meets http
21:08 Licenser: hmm I think it is a bad idea
21:08 not your jar thing but the updting all repos
21:09 I have the feeling this will take like gazillion years and the people at mvn central will be unhappy <tm>
21:12 they also seem to have silly linking stuff
21:13 I mean look at this url: http://
21:14 see this: http://
21:15 it seems that every single maven repository went insane and started to randomly relink stuff
21:15 which leads me to the sad feeling (again) that maven isn't any good for this
21:17 technomancy: Licenser: maven central is pretty explicit about wanting people not to crawl it iirc
21:17 they want you to set up a proxy server instead for things like that
21:18 Licenser: I more and more get the feeling that maven has the goal to hide every jar that was ever tossed into it, it's like the black hole of dependency management systems
21:20 technomancy: I think some of the repos provide lucene indexes you can download; that might be the "blessed" way to provide search.
21:21 Licenser: it should be such a simple thing, but maven has you jup through hoops that were set on fire with space shuttle fuel just to land in a pit with acid filled with shaks and corcidles that carrie lasers on their backs
21:22 _ato: ha
21:22 that's a pretty apt description, yes
21:23 Licenser: so what I say, and I know people don't want to hear it because someone seems to pay them to like maven, we should get as far as possible away from maven
21:23 dcnstrct: viva la revolution!
21:23 Licenser: violently kill every but if it, stick the heads of people who want to use it on pointy sticks and feed the poor lasered sharks (who won't have anyone to chew on when we don't use maven) with the rests of the bodies
21:23 *bit
21:25 I mean, ever silly repository seems to implement their own search engine and finds new ways to make thing non uniform.
21:25 _ato: http://
21:25 http://
21:25 the second is a zip of a lucene index
21:25 Licenser: seriously zipped 60 MB?
21:25 _ato: it includes class names as well
21:26 Licenser: yea but why that fuss?
21:26 _ato: you can do incremental updates via some propritary splitting thing they do
21:26 god knows
21:26 Licenser: all I want is something as simple as lein search clj-sandbox
21:26 _ato: maven people seem to love fuss
21:26 there's probably an API somewhere you can use alternatively
21:26 Licenser: yea it's java that is why?
21:26 I bet they created a own class for every single byte stored in maven
21:27 _ato: there's probably a way to xml or something out of this: http://
21:27 Licenser: I wonder more and more if the core problem is maven or java with it's silly classpath and jar stuff
21:28 why does it has to be so hard to do simple things?
21:29 dcnstrct: so people who are comming from C++ will not have a hard time.
21:30 thats how it was explained to me 10 years ago
21:30 otherwise they would have just built a lisp in the first place aye
21:30 Licenser: I don't really thinkg 'epoeple comming form c++' are those who will feel right at home with clojure :P
21:31 dnolen: Licenser: well rhickey was a C++ programmer for many years. perhaps "people running away from C++"
21:32 _ato: Licenser: http://
21:33 slyphon: is it possible to have a catch-all with the condition lib?
21:33 Licenser: If clojure were not related to the jvm things might be more simple but we're stuck? with the handling of classpathes, even worst with having to deal with the fact that libraries (ideally) shold be working on both .net and jvm
21:33 kwertii: Licenser: making it hard to do simple things is The Java Way™. the idea is that the simple solution only covers 97% of use cases. in order to cover 99%, you need a generic XML-based solution backed with 3 terabytes of storage that makes every program 10x longer and requires special tools to write the code for. Thus, Maven was born.
21:34 dnolen: Licenser: classpath issues solved by good tools, and I like the self-packaged nature of jars.
21:34 Licenser: platform issues never simple. Even with popular langs like Python, peculiarities between osx, linux, windows
21:34 and things always get lame with any lang and native libs
21:34 Licenser: I know
21:35 but it bears the question is packing all our libs as jars the right dicision when there is clr clojure
21:35 or choweveritiscalled
21:35 dcnstrct: lol
21:35 Licenser: stupid .net stuff you know what I mean
21:35 wouldn't be files not in .class but in .clj in some kind of file that clojure can deal with be more helpful?
21:36 dcnstrct: I was loling @ kwertii... sad but true..
21:36 Licenser: ah good
21:36 defn: 'lo all
21:36 * dcnstrct signs the eschew jar petition
21:36 Licenser: I mean when I write my utterly cool library that depends on no silly java or stupid .net stuff but is just some geniouse algorithm packed in wonderufl clojure code why would I force people to use it under java by packing it in a ajr?
21:37 or even worst stuff it in maven to hide it's existence for the rest of the world
21:37 chessguy: ,1
21:37 clojurebot: 1
21:37 chessguy: ,({} 1)
21:37 clojurebot: nil
21:38 Licenser: mind you I've no such library but imagine I'd not be the simple minded person I am but some kind of genious that would write such stuff :P
21:39 I mean I understand that java libraries are in jar files, I even understand that they are in maven repositories since java people seem to get hot from that. But do we really have to follow that path?
21:40 kwertii: Licenser: I think the idea was (at least at first) to provide Clojure connectivity to the massive pre-existing world of Java libs available from that
21:40 Licenser: yes yes and that is great, but I don't think it is right to not only provide clojure with the connectivity but with the chains it brings along that we'd not really require
21:41 dcnstrct: well clojure programs often need jar files in order to operate
21:41 Licenser: clojure can load .clj files at runtime no need to have them in .class format, or in .net's compiled code extension
21:41 dcnstrct: so one way or another java bytecode will be to be packaged with clojure programs
21:42 kwertii: Licenser: I imagine (haven't tested it personally) that loading the .class file is a lot faster, FWIW, and can also be called from other JVM langs, whereas a .clj is slow and cannot
21:42 Licenser: yea at least when it comes from java, but why do the same with clojure code
21:42 dnolen: Licenser: Java ecosystem is good, people making great idiomatic front ends to excellent libs. loading .clj at runtime is slow.
21:43 Licenser: define slow? noticeably slow after the 2s startup time of the JVM?
21:43 or will it be 2.1s instead of 2.0s
21:45 _ato: try running clojure-slim.jar instead of clojure.jar. You'll see. It's several times slower
21:46 scottj: what is -slim?
21:46 Licenser: I was about to ask
21:46 I guess cloure without compiled stuff jsut clj files
21:47 so basically we ignore the .net stuff (I acutally don't mind that) and say everything should be jvm centric?
21:48 dnolen: Licenser: in anycase, Java ecosystem lets Clojure be nimble. Yes, it probably will leave it's nest one day. But it's a big part of reason it's so usable after only 2 years. Especially against other popular langs like Python and Ruby that have 15 or 20 years on it.
21:48 dcnstrct: the enterprise will not swallow it without a proper zip format, XML file descriptor, and friendly familiar file extension.
21:48 ;)
21:48 _ato: I don't mind jars
21:48 python's eggs are basically the same thing
21:49 dcnstrct: and Ruby's gems
21:49 _ato: Ruby unpacks it's gems, which is terribly annoying when running stuff off a network filesystem (zillions of stat calls which each require a network round trip when starting a rails app)
21:49 Licenser: erm not exactly at least ruby gems do carry dependence information and are not tossed into a black hole after generating
21:50 dcnstrct: oh right it does unpackem
21:50 Licenser: I mean jars, OK I can live with that, at the jar matter I only think if we ignore .net we should at least be honest about it and say so not quietly do that
21:50 but it leaves the fact that we don't have a somewhat usable dependency management system
21:51 chessguy: ,(+ nil 1)
21:51 clojurebot: java.lang.NullPointerException
21:51 Licenser: I am not an expert on maven but can maven even do such simple things as version ranges?
21:52 or will it brake together if you have one jar that requires lib x 1.1.0 and one that requires 1.1.2?
21:53 dcnstrct: how did CPAN & friends get started ?
21:53 Licenser: because people were unhappy with maven?
21:53 _ato: yes it can do version ranges
21:56 dcnstrct: why not figure out how to make clojars scale and then forget about maven ?
21:56 Licenser: ah cool that is a important thing to know
21:56 I'd like that :P
21:57 dnolen: Licenser: all I gotta say, you're lucky you're getting into Clojure now instead of late 2008. I don't care what the Clojure community gets around as long as you can write Clojure and it presents a simple interface with passable documentation. Right now that happens to lein.
21:59 Licenser: dnolen: not sure if it's luck or bad luck :P
22:00 hmm _ato I found a document explaing version ranges of maven, but it seems to fail for me
22:01 dcnstrct: I suggest building a high-availability uber-clojars on top of http p2p based infrastructure like Tahoe-LAFS. Commodity discs and normal broadband connections will go pretty damn far. Plus it will be "outside the box".
22:01 Licenser: we could also meet some storrage space on the ISS
22:02 dcnstrct: ;p lol
22:02 Licenser: but I guess that is a lein issue
22:02 dnolen: Licenser: I'd chalk it to running out of patience. If *somebody* builds something better sure. But in my experience lein is no more broken then my experience with the easy dep tools of any other popular dynamic lang.
22:03 Licenser: On I don't mind line at all, or clojars, I just don't like maven :P
22:03 *lein
22:03 hey I even tried today to extend lein with lein search to make it better (half way succeeded even)
22:04 dnolen: Licenser: yeah I just read the backlog. very cool!
22:05 Licenser: I just get more and more convinced that maven is the wrong backend, or at least we should build as many protective layers ontop of it to shield happy clojure programmers from the horrible usage experience.
22:05 yuck
22:07 wb dnolen
22:07 nteon: I've been using maven for java projects for the past 4 months at work and don't think I have a good thing to say about it
22:07 Licenser: nteon: how about: you can get rid of it easiely be removing .m2
22:08 nteon: I prefer autotools to it hands down, which is saying something
22:08 Licenser: yes, but the fact that I've _had_ to do that to get it to work negates the point :)
22:09 Licenser: heh
22:13 _ato: since it seems impossible to search random maven repositories, how about making clojars to search as nice as possible
22:16 rlb: I'd like to see more careful consideration/handling of the provenance of automatically downloaded jars. Running a build that pulls down N jars of unknown origin and just starts running them doesn't give me a great feeling of confidence.
22:17 Licenser: rlb: don't you like the thrill?
22:17 rlb: Sure, and I run every executable someone sends me via email too.
22:18 Licenser: rlb: that's the spirit!
22:18 wlangstroth: don't know if anyone else noticed, but on github, Clojure's the #18 language, Scala #19
22:18 just sayin'
22:18 Licenser: heh nice news wlangstroth
22:20 wlangstroth: Licencer: and that's even after the persistent data structures were yoinked
22:21 good work, people. some day we might even make it to #16. I think you need a mascot for that
22:21 nteon: wlangstroth: link?
22:22 dnolen: http://
22:22 wlangstroth: http://
22:22 et voila
22:22 dnolen: we have to beat Lua and Erlang
22:22 tough company
22:22 to get to #16
22:23 wlangstroth: Erlang has a 20-year head start!
22:23 and Lua's that one that got popular in games, isn't it?
22:23 Licenser: Ha but we have maven!
22:23 </irony>
22:23 wlangstroth: yikes
22:24 I'm enjoying leiningen, myself
22:24 maven needed that wrapper
22:24 hiredman: Licenser: at this point having you wine about it all the time is far more annoying then maven ever was
22:24 wlangstroth: haha
22:24 Licenser: hiredman: might be but while whining I try to improve it in the other screen :P
22:25 maven didn't do that while being annoying.
22:25 wlangstroth: Licenser: what, self-improve?
22:25 Licenser: ^^
22:26 wlangstroth: if self-improving code were possible, we'd all be out of work
22:26 rlb: wlangstroth: nah, someone's got to write the books
22:26 wlangstroth: oh, good point ... waaaiiitaminit
22:27 rlb: (maybe start an infomercial or two)
22:27 Licenser: also somene had to write all the bad programs that could slef improve then
22:28 I'd be up to that :p
22:28 wlangstroth: Licenser: no shortage of volunteers for writing bad programs, I'm afraid
22:28 Licenser: heh
22:30 wlangstroth: Clojure can totally take Lua in a Github deathmatch
22:30 Raynes: We'll never beat Erlang with such traitors as dysinger.
22:30 v_v
22:30 Licenser: hi Raynes
22:31 Raynes: He spends more time writing Erlang than he does fixing clojure-contrib 1.2 snapshot builds. :o
22:31 Licenser: Hi.
22:31 Just read the backlogs.
22:31 Licenser: heh you missed my daily complaint about maven :P
22:32 Raynes: I'm surprised cemerick hasn't jumped through your window with a monitor to show you his Maven video.
22:32 :>
22:32 wlangstroth: Oh, I see the problem: the clojure project counts as Java
22:32 Licenser: there is a maven video? o.O
22:32 cemerick: Raynes: there will be yet another one shortly, just for you
22:32 Licenser: heh
22:32 Raynes: http://
22:33 cemerick: I wont be watching it. :| I never watch videos.
22:33 ._.
22:33 Ever ever.
22:33 programble: lol
22:33 Raynes: You can come over and do and act it out for me though, if you're that desperate. :)
22:33 cemerick: Raynes: I'm crushed.
22:33 Raynes: <3
22:35 Licenser: hmm Raynes we're going to make a clj-sandbox video?
22:35 Raynes: cemerick: In all seriousness, it depends on the length of the video and whether or not it's benefit depends on watching the last video. (no pun intended)
22:36 Licenser: Just show a one minute clip of lasers being fired at the StarTrek Enterprise, yet bouncing off because of the shields.
22:36 Licenser: Raynes: cool idea
22:37 Raynes: :D
22:46 wlangstroth: Licenser: is it the XML that chafes you about maven, or what?
22:46 _ato: rlb: (re: provenance) what would you suggest? jar signing? if you're just using some random person's library then you're just running random code anyway
22:46 Licenser: wlangstroth: generally that it does make things way too complicated, I managed to avoid xml entirely up to now
22:47 for example there seems to be no (general) way to search a repository
22:48 carkh: hm on this topic, what was this nice emacs mode from xml ?
22:48 nxml right ?
22:49 wlangstroth: Licenser: I'm glad that wasn't just me - I was going through quite a number of permutations before I figured out you have to specify "org.clojure/clojure"
22:49 Licenser: wlangstroth: adding the right version number make things even harder :P
22:50 wlangstroth: Licenser: at least there's the magic of "SNAPSHOT", without which I'm pretty sure I would have given up
22:50 cemerick: Licenser: FWIW, all three major IDEs offer excellent code completion on artifact coordinates, including available version numbers
22:51 Licenser: magic of snapshot?
22:52 tomoj: how do they know which versions are available?
22:52 wlangstroth: Licenser: "SNAPSHOT" vs "20455544-lggbbhdi55335-5533"
22:52 Licenser: ah okay
22:52 wlangstroth: so yeah, I'm kidding
22:53 _ato: Licenser: the IDEs use that 60mb lucene index I pointed you art
22:53 s/art/at/
22:53 Licenser: heh
22:53 but that does not include clojars I gues?
22:53 cemerick: tomoj: they grab the index files maintained by (most) maven repos
22:54 tomoj: ah
22:54 _ato: clojars generates the index as well: http://
22:54 tomoj: I was just thinking earlier that maven repos should do that
22:54 _ato: whether the IDEs can use it, I don't know. I haven't tried
22:54 tomoj: well shit, let's just use lucene, no?
22:54 cemerick: both nexus and artifactory (not sure of the others) generate lucene indexes
22:54 _alex: I didn't realize you were using nexus
22:54 _ato: I'm not, I just grabbed their indexer and cronned it
22:55 cemerick: ha
22:55 defn: http://
22:55 cemerick: good 'nuff
22:56 tomoj: defn: do you have something responding by grabbing the js file off the filesystem and responding with it?
22:56 defn: tomoj: no -- i thought simply adding it to the <head> would be sufficient
22:57 do I need to specifically create a response for it with moustache?
22:57 tomoj: well.. I dunno what include-js does
22:57 what does the source output look like?
22:57 I mean, is it a <script src..> or is the script supposed to be inline?
22:58 defn: nothing fancy... <html><head><script src="../../resources/public/javascript/syntaxhilighter/scripts/shCore.js" type="text/javascript"></script><script src="../../resources/public/javascript/syntaxhilighter/scripts/shBrushClojure.js" type="text/javascript"></script><link href="../../resources/public/javascript/syntaxhilighter/styles/shCore.css" rel="stylesheet" type="text/css" /><link ...
22:58 tomoj: yeah
22:58 defn: ... href="../../resources/public/javascript/syntaxhilighter/styles/shThemeDefault.css" rel="stylesheet" type="text/css" />
22:58 tomoj: well
22:58 defn: oy -- sorry for the spam there everyone
22:58 tomoj: do you have any code that responds to /resources/public/javascript/...
22:58 dcnstrct: angle brackets... my eyes....
22:58 tomoj: otherwise the browser can't get to that file
22:59 you need to use .getResourceAsStream I think
22:59 dcnstrct: (GET "/application.js" (.getResourceAsStream (clojure.lang.RT/baseLoader) "my/app/application.js"))
23:00 defn: now to figure out how to do this in moustache
23:00 tomoj: be careful
23:01 defn: tomoj: why's that?
23:02 tomoj: if you do it wrong you will let people read files they shouldn't be
23:02 because getResourceAsStream searches the classpath
23:02 why does it search the classpath?
23:03 defn: hmmm
23:04 tomoj: I mean, is that what you were asking?
23:05 defn: heh im still just sort of confused as to how to make this work -- i thought simply including the .js would be enough... i didn't think there'd need to be specific responses.
23:05 tomoj: well
23:05 the web server is inside the JVM
23:05 so the browser can't just grab files off your filesystem
23:06 defn: what if i moved them to within my src/ directory?
23:06 tomoj: it's like in PHP where you do the .htaccess or whatever that makes apache serve static files
23:06 it wouldn't make any difference
23:06 that's the problem
23:06 resources/ and src/ are the same
23:06 as far as getResourceAsStream is concerned
23:07 I think I have an example somewhere
23:07 defn: tomoj: that'd be nice
23:07 dcnstrct: the thing I pasted above will serve the file right out of src/my/app/application.js
23:07 tomoj: yeah, but you don't want to have to do that for every single static file
23:08 defn: dcnstrct: yes, but what about including that application.js in another web page which responds to a GET?
23:08 tomoj: and that's why you have to be careful not to accidentally serve up src/foo.clj or something
23:08 you've already got the including right
23:08 dcnstrct: defn, that would work
23:08 defn, it gets served up like a normal static file
23:09 tomoj: the problem is that the web browser sees the src="..." you've got and tries to load that page, but your web server doesn't know how to serve that route
23:09 defn: ahhhhh
23:09 i wonder if i could use ring.utils.response/file-response
23:09 dcnstrct: src="/application.js"
23:09 wlangstroth: defn: include-js just returns a string. Is the path going beyond the site's root path?
23:09 defn: no wlangstroth
23:10 tomoj: "ring.middleware.file: Serve static files out of a public directory."
23:10 that sounds right to me
23:10 wlangstroth: bizarre
23:10 defn: it's in the project's root/resources/public/blah/blah.js
23:10 which could be outside of the site's root path i guess
23:10 but it doesn't seem likely
23:10 tomoj: wrap-file in there is what you need
23:11 that's so much easier than using the baseLoader
23:11 not sure how you specify the root path relatively though
23:16 defn: blech
23:16 PITA.
23:16 tomoj: really?
23:16 should be a one-liner
23:16 defn: i just dont really know what im doing tomoj -- dont pay any attention to my stupidity
23:17 tomoj: (wrap-file my-app "../resources") or something
23:17 defn: *nod*, but im using moustache
23:17 tomoj: sure
23:17 Licenser: defn: shave yourself :P
23:17 tomoj: doesn't matter
23:17 defn: trying to figure out how to do that, since (app ...) starts the form
23:17 Licenser: hehe
23:18 tomoj: just pass your moustache app into there
23:18 or you could do this:
23:18 (-> (app ...) (wrap-file "../resources"))
23:18 but, I dunno if "../resources" is quite right
23:18 Licenser: hmm is there a version of nth that does not throw an exception but does something nice?
23:18 as in returning nil as get does
23:20 tomoj: ,(nth [1 2 3] 100 nil)
23:20 clojurebot: nil
23:20 Licenser: ah thank you tomoj!
23:23 defn: now im getting a nice Directory does not exist lol
23:24 tomoj: yeah..
23:24 not sure where .. is relative to there
23:25 defn: bah, well i got it to work with an absolute path, but still not working
23:26 wlangstroth: defn: working or not?
23:26 defn: wlangstroth: not yet
23:27 wlangstroth: defn: I tried on your site, and couldn't get the absolute path to work
23:27 defn: wlangstroth: this is running local
23:27 wlangstroth: defn: gotcha
23:28 defn: im considering pushing all of this to see if someone else can fix my stupidity
23:28 wlangstroth: it's not really stupidity, it's knowing jetty -- I'm just learning myself
23:29 tomoj: I'd take a shot
23:29 I don't have anything ready to test wrap-file out
23:30 defn: http://
23:30 updated^
23:32 wlangstroth: tomorrow, then
23:34 defn: see web.clj and layout.clj
23:36 tomoj: can't find hiccup :(
23:38 Licenser: lein search hiccup? *dodges*
23:39 _ato: http://
23:39 grr stupid search bug
23:39 tomoj: oh, hmm
23:39 defn: are you really using hiccup 1.1.0?
23:42 defn: tomoj: ummm maybe?
23:43 oh yeah i compiled it from src i think
23:43 but erm, that 0.2.3 as well
23:43 my bad tomoj
23:44 tomoj: no problem
23:44 I thought hiccup just wasn't in clojars
23:46 defn: tomoj: basically what im doing is swank-clojure-project on the project root dir, then M-x slime-set-default-directory to the root dir, then I C-c C-k core.clj, then I C-c M-p to set the REPL's ns to walton.core, then i run (background-walton-init) in the REPL
23:47 that should be everything you need to bring up the localhost:8080/examples/concat
23:47 tomoj: you seem to have circular deps
23:47 defn: tomoj: yeah im trying to work that out, im not 100% on how to use/require yet
23:48 feel free to correct anything you see in there
23:48 Licenser: there we go half the trouble with marven is solved
23:48 tomoj: I'll try figuring out wrap-file on a toy example :)
23:48 Licenser: at least you now can work, somewhat nicely with clojars!
23:48 defn: tomoj: did you get web.clj complaining about walton-html?
23:48 tomoj: yeah
23:49 Licenser: technomancy: you're around?
23:49 defn: yeah i was able to resolve that after a bit of tinkering -- i ran C-c C-k on web.clj, and then again on core.clj and that fixed it IIRC
23:49 technomancy: Licenser: hi
23:49 defn: err C-x C-e at the end of the NS macro in the core.clj seemed to fix it tomoj
23:50 then C-c C-k again and it should all work 8|
23:50 Licenser: hi technomancy :) I would like to send you a pull request on my lein fork. I added lein update (reads the clojars reosetory) lein search <regexp> searches it and lein add <regexp> lets people add stuff from clojars to their project.clj
23:51 technomancy: Licenser: awesome work!
23:52 Licenser: technomancy: not as good as I hoped / it looks, it is quite horrible code in there I think, but it seems to work for everything I tested.
23:52 technomancy: generally I like to suggest things like this be done in plugins at least at first though
23:52 because once it's in leiningen then getting updated code out has to be done by pull requests
23:52 whereas if you keep it in a plugin you can update it at your own pace
23:52 mtm: Just posted Adam Smyczek's "Introduction to Monads with Clojure" talk on youtube. I'll try to get an HD version up tomorrow: http://
23:52 technomancy: and then merge it into lein once it's stabilized a bit
23:52 does that make sense?
23:52 Licenser: technomancy: totally
23:53 so I have to admit I failed horribly the first time I tried to do a plugin :P
23:53 technomancy: oh?
23:54 defn: tomoj: remove the reference to core and web in the ns macro for walton.core, and i think that is the fix, sorry for the confusion there
23:54 Licenser: yea I tried to base something on an existing lein command and it didn't found some of the use and requires in there
23:54 theory is that I just copy the 3 files in a own project make a jar and that is a funky plugin right?
23:55 tomoj: defn: well, I got it working with my toy example
23:55 defn: tomoj: wee!
23:55 gist it?
23:55 Licenser: but I think you're totally right, a plugin it shall be
23:55 technomancy: Licenser: that should do it. you can see the swank plugin as an example
23:55 Licenser: hmm how to call it *ponder*
23:55 technomancy: let me know (or post to the list) with any issues you have with creating plugins
23:56 Licenser: okay
23:56 technomancy: it's not as well-documented as I'd like right now
23:56 Licenser: perhaps it works this time :P
23:57 tomoj: (wrap-file my-app "resources/public")
23:57 where resources/ is on the classpath
23:58 tomoj`: err
23:58 defn: tomoj`: how do i add resources to the classpath? perhaps i need to use project.clj?
23:58 tomoj`: did you get that, defn?
23:58 tomoj: I think swank-clojure-project does add resources/
23:58 technomancy: tomoj: not in any release yet unfortunately =\
23:58 tomoj: oh
23:58 well, lein-swank does
23:58 technomancy: yes
23:59 I'm leaning towards recommending lein swank or mvn clojure:swank over M-x swank-clojure-project because of things like that
23:59 tomoj: you could modify some swank-clojure variable maybe
23:59 Licenser: hmm if I add leiningen as dependencie isn't that a circular refference then?
23:59 technomancy: you can definitely do it with hooks