0:02 dnolen: cemerick: Racket folk don't seem to really have much against Clojure from what I can tell. Lots of possibilities for idea cross-pollination there.
0:03 cemerick: I agree. Schemers have always seemed to be friendly, level-headed people.
0:03 dnolen: cemerick: Racket, not Scheme :) Schemers I'm not so sure about :D
0:03 * cemerick swears by stereotypes
0:03 cemerick: yeah, yeah :-)
0:04 I never did catch up on the full Racket/Scheme "split".
0:04 dnolen: cemerick: it's significant. Racket has basically moving on doing it's own thing.
0:05 Scheme is still obssessed w/ the minimalism that makes it crippled for real programming.
0:05 cemerick: dnolen: looks like it's R6RS+++++?
0:06 dnolen: cemerick: nah, to me Racket is the Haskell of Lisps. Very academic, filled w/ cool ideas people should steal into their own langs.
0:07 pcavs: dnolen: Wouldn't scheme be the Haskell of Lisps?
0:07 Racket has a lot of pragmatic features I thought? That's what made it so appealing
0:07 C-M-% made makes
0:08 dnolen: pcavs: no, Haskell is a crazy hack, no standard, practical bits but still academic. Racket seems similar to me.
0:09 Scheme is all about standardization, some truly beautiful ideal which will never be attained and will most likely become obsolete (like Standard ML)
0:09 pcavs: dnolen: interesting, I haven't played around much with Haskell, closest I've come to it is SML-NJ
0:10 dnolen: Scheme is much more like SML-NJ
0:10 sean_corfield: today has been a very happy clojure day :)
0:10 pcavs: dnolen: I really liked SML-NJ, it was a lot of un
0:11 dnolen: pcavs: oh yeah it totally rules, just pointing at that standardization kills languages.
0:11 again and again.
0:12 pcavs: dnolen: I dislike that there isn't as much as an advantage to a business for devs to be writing clean beautiful code, rather than 80% working code faster...worse is better
0:13 hiredman: getting agreement to what is beautiful for a practical program from a team is almost impossible
0:14 pcavs: hiredman: true...
0:14 dnolen: pcavs: yeah but the problem is the Worse Is Better / Better is Better isn't something that stands still. What was Better before is not Better now.
0:14 pcavs: hiredman: I was just reading teach yourself scheme in fixnum days, and the call/cc examples with tree-gen and amb operator are just beautiful
0:15 hiredman: pcavs: ok, what real world problem will it solve?
0:15 does it log each step, is it transactional, etc, etc
0:16 how robust is the error handling?
0:16 pcavs: hiredman: Absolutely None! But boy is it sexy. Maybe it should be called code porn
0:16 hiredman: does it
0:16 erp
0:16 pcavs: it's like code golf, in that it isn't practical, but it's sure fun
0:16 sean_corfield: dnolen: as someone who spent eight years on the ANSI C++ Standards Committee, i'm a bit put out that you think so poorly of standardization...
0:18 dnolen: sean_corfield: ah, for lower level systems programming languages no I don't think so poorly of standardization. Though it's not like C++, C ever really delivered on the run everywhere promise ever.
0:19 it's like JavaScript, death by a million paper cuts.
0:19 sean_corfield: ECMA...
0:19 ok, i'm (somewhat) mollified :)
0:23 cemerick: 'course, it's hard to not notice that the most entrenched languages with the widest distribution are those that have been aggressively standardized, with an obsession with backwards compatibility
0:30 Raynes: Did dnolen say that Haskell isn't standardized?
0:31 I'm pretty sure it is.
0:31 And damn if wikipedia doesn't agree with me.
0:31 I'm kind of sad that he isn't here for me to correct him. I hate it when someone is wrong on the internet.
0:34 amalloy: Raynes: i think sexpbot has a $mail feature
0:34 Raynes: That would be rude.
0:38 pcavs: Raynes: Thinking of this? http://
0:38 technomancy: someone with a facebook page want to tell me what this is all about? http://
0:38 *facebook account
0:39 hiredman: it's just a page about the short story
0:39 technomancy: "about"?
0:39 this isn't wikipedia
0:39 hiredman: like the wikipedia page but somehow part of facebook's "social graph" or something
0:40 infact
0:40 technomancy: like for people to announce that they are fans of certain works of short fiction?
0:40 hiredman: the bottom of the page as a footer:
0:40 pcavs: techomancy: Facebook's endgame is the same as AOL's
0:40 hiredman: Description above from the Wikipedia article Leiningen Versus the Ants, licensed under CC-BY-SA full list of contributors here. Community Pages are not affiliated with, or endorsed by, anyone associated with the topic.
0:40 s/as/has/
0:40 technomancy: hah
0:40 hiredman: yes, exactly that
0:40 technomancy: and this story has no fans? what is wrong with kids these days?
0:41 oh wait, it does have fans
0:41 I just can't see them because I'm not logged in or something. whew.
0:41 excellent. carry on, Internet.
0:42 hiredman: 28 people
1:16 pcavs: is there a letmacro ?
1:16 for a scoped macro?
1:22 cemerick: like symbol-macrolet?
1:23 if so, no
1:38 technomancy: I wonder if it's still worth mentioning inf-lisp on the Getting Started with Emacs in confluence
1:38 sritchie: is it considered bad form to write a function like (defn illegal-args [str] (throw (IllegalArgumentException. str))) ?
1:38 since the error's thrown from this new function
1:39 hiredman: sritchie: depends, not everyone nows how to read a stacktrace
1:40 symbol-macrolet seems more like a scoped version of ^:const
1:42 well, sort of
1:44 cemerick: I'm afraid I never got that far into CL.
1:46 amalloy: pcavs: clojure.contrib.macro-utils has [symbol-]macrolet
1:46 pcavs: amalloy: cool thanks
1:49 amalloy: pcavs: and amalloy-utils has anon-macro, for if you don't even want to name the macro :P
1:49 pcavs: haha, nice
2:19 sritchie: is there a function like split-with that checks all items in a coll?
2:19 (unweave odd? [1 2 3 4]) => ((1 3) (2 4))
2:20 amalloy: (juxt filter remove)
2:20 sritchie: ah, thanks
2:27 zakwilson: I didn't know Clojure had symbol macros or a way to fake them.
2:28 hiredman: well you just need the ablity to define macros, then you can create a macro that expands its arguments and walks and replaces
2:29 amalloy: zakwilson: ^ is what symbol-macrolet in fact does
2:29 zakwilson: Oh... I should have figured that out. It would be hard to have define-symbol-macro, but symbol-macrolet is obvious now.
2:30 * zakwilson once used symbol-macrolet in production code just beacuse it was there.
8:06 pyr_: hi
8:06 is there any chance a call to an agent within a transaction might get resent ?
8:13 bsteuber: pyr_: no, it's guaranteed to be sent only once
8:20 pyr_: bsteuber: thx!
8:27 bsteuber: how can I make paredit 22 correctly recognize [] and {} when used in the slime-repl?
8:42 ejackson: bsteuber: I use technomancy's durendal which handles it: https://
8:42 i think L154 is where it all gets defined
8:44 bsteuber: ejackson: thanks, durendal looks nice
9:37 babilen: Hi, I have a licensing question. Clojure and quite a bunch of libraries are licensed under EPL-1.0, which is incompatible with anything else. Does this essentially mean that I have to license *my* work under EPL-1.0 as well? I'd like to license my work under GPL or BSD, but am not sure about the legal ramifications. And EPL seems to be incompatible with both of them.
9:38 I guess I'll have to license every change to EPL licensed work under EPL, but can incorporate those in BSD/GPL licensed code under GPLs linking exception, or?
9:39 Or does it basically boil down to: If you work with Clojure and use a single EPL lib, I'll have to license my work under EPL too?
9:40 rlb: I'm not sure, but I'd be a bit surprised if you have to license your code (assuming it's not going in to clojure itself) under the EPL.
9:43 babilen: GPL seems to be out of the question, but *I* don't want to license my work under EPL as I find problems like this inherently bad. If I am forced to use EPL as soon as I use any other clojure library (which might just be EPL licensed) I'd probably have to think about the language choice. (citation: http://
9:43 clgv: babilen: afair you have to license derivative work under EPL. If you only use EPL licensed libs unchanged you only have to mention you are using them (and maybe how they are licensed) and your software can have a different license
9:44 but if there is money involved you should recheck that and maybe consult a lawyer.
9:45 babilen: it's a bit odd that you fear being forced to use EPL when you want to use GPL which indeed forces lincencees to use GPL... ;)
9:46 babilen: clgv: I basically favour BSD, but work in GPL environments too.
9:46 clgv: Ok, and if I change some of the libs I'll license those changes under EPL and my own work as BSD/GPL and am fine?
9:46 clgv: babilen: I read the EPL stuff and some FAQs last week since I considered using some clojure code unchanged in a commercial product
9:47 babilen: And no, there is no money involved.
9:47 clgv: babilen: yes you have to license the change licensed lib und EPL and provide the source to them, but the rest of your project can be any license - even a commercial one
9:48 s/und/under/
9:48 sexpbot: <clgv> babilen: yes you have to license the change licensed lib under EPL and provide the source to them, but the rest of your project can be any license - even a commercial one
9:49 babilen: I guess that the majority of people working with Clojure just license their work under EPL. This license is a bummer :)
9:49 clgv: hmm I think the EPL is more relaxed than the GPL
9:50 In general I hate this license stuff because you can never be entirely sure without consulting a lawyer
9:50 babilen: It is, but unfortunately incompatible. What I dislike is that it is also incompatible with BSD (or any other license) ... but meh
9:51 xmux: How is the EPL incompatible with BSD?
9:51 babilen: xmux: http://
9:53 xmux: It'll just mean that I have to work with two licenses for the rest of my Clojure life or give in and just use EPL if that becomes to cumbersome.
9:53 xmux: I think that just means you can't take EPL licensed code and release it under a different license. That's the same as *any* other license
9:55 EPL is weakly copyleft so it has some of the same 'disadvantages' as the GPL
9:55 but I believe the intention is to allow you to *link* EPL components/libraries to applications which have any license you want
9:57 babilen: xmux: Ok, but as I know myself I'll soon contribute to projects I am using. That work has to be licensed under EPL in that case. Is most of the stuff on clojars EPL? (I have no numbers about that)
10:01 Thanks for the clarification, i'll read up on it, but wanted some views from the community too.
10:03 dnolen: babilen: my take - EPL for things you think you want to contribute to Clojure, otherwise use whatever you want.
10:04 timvisher: hey all
10:04 what're people using for json at this point?
10:04 I count no less than 3 options at the clojure toolbox
10:04 they all look to be roughly equally maintained
10:06 cheshire seems to have the best docs and the biggest promises. :)
10:27 eliantor: hi everyone
10:31 i get a RejectedExecutionException trying to run futures
10:31 https://
10:32 and agents never complete submitted actions
10:33 bsteuber: eliantor: leiningen 1.6.0?
10:34 eliantor: bsteuber: yes
10:34 bsteuber: it's fixed in github and should be released soon
10:35 so in the meantime use 1.5.2 or the master version of lein
10:35 eliantor: ok thanks, i didn't know of this bug
10:36 bsteuber: I guess that's the reason why the stable branch got reset to 1.5.2
11:48 shanmu: hi this code errors after printing the first value to the file:(with-open [w (io/writer "t.txt")] (doseq [i '(1 2 3 4) ] (spit w i))) with a file closed error
11:54 timvisher: shanmu: you've run into a laziness issue
11:54 actually, there are a number of issues
11:54 for one, you don't need the whole with-open construct using spit
11:54 spit opens and closes the file stream for you
11:55 are you trying to write 1 2 3 4 on separate lines to t.txt?
11:59 shanmu: timvisher: yes...
11:59 when I tried with .write on writer, it wrote binary data :(
12:05 timvisher: shanmu: ok, what you want is something along the lines of (with-open [w (io/writer "path")] (binding [*out* w] (dorun (map #(prn %) [1 2 3 4] ))))
12:06 read up on *out*, binding, and dorun especially
12:06 Raynes: shanmu: (doseq [i '(1 2 3 4)] (spit "t.txt" (str i "\n") :append true)) ; Untested, but should do what you want.
12:06 timvisher: Raynes: wasn't aware of :append!
12:06 that's neat
12:07 Raynes: dnolen: Haskell is too standardized.
12:07 timvisher: Yeah, it isn't in-your-face apparent.
12:07 timvisher: if you use my solution you'll also need to require clojure.java.io as io
12:10 technomancy: eliantor: lein upgrade and you'll get the fixed version
12:10 1.6.1 is released
12:11 shanmu: Raynes: timvisher: Thanks!
12:12 dnolen: Rayes: sure with 12 years gaps in between and everybody just using the inbetween thing.
12:17 jcromartie: have you all seen the latest PragProg magazine? It's Clojureific
12:26 http://
12:28 kryft: Hmm, growing a DSL looks interesting (from a noob's perspective)
12:28 cemerick: Perfect storm of PR these days…
12:34 pyr_: cemerick: indeed
12:36 ejackson: woah - wall to wall clojure.
12:51 bdesham: I'm trying to transpose a matrix (a vector of vectors), but I get this weird assertion error: https://
12:52 any idea... am I just using assertions wrong?
12:59 Vinzent: bdesham_, I've tried to move :pre to the one-arg body and it works, I think that's the problem
13:00 dnolen: bdesham_: that seems like a bug to me.
13:01 Vinzent: it works with (constantly true)
13:02 (prn mat) in :pre returns [[1 2 3] [4 5 6] [7 8 9]]...
13:03 dnolen: bdesham_: ah silly me not a bug. Your 2nd arity is recursive
13:03 (() ()) is not a square matrix
13:03 the assert will be called on each iteration
13:03 Vinzent: ah! :)
13:03 bdesham: dnolen: oh, silly me!
13:04 so I should put the condition on the one-argument version, since that will be used by all outside callers anyway
13:05 dnolen: bdesham: I would probably use loop/recur in your second arity so you can validate both arities.
13:05 bdesham: ok
13:06 although if I use loop/recur I don't even need more than one arity
13:06 so that's even better! :)
13:09 this works fine now: https://
13:26 mprentice: anyone familiar with using xml structures, zips, and zip-filters care to help me out? i have a graphml file parsed into an xml struct-map, and i want to update all targets that are currently "t1" to be "t2" instead
13:27 (a graphml edge has a source attribute and a target attribute)
13:40 timvisher: mprentice: maybe you could post to gist?
13:40 feel like i'd need more details to help you out
13:40 i'm not directly familiar with what you're doing, but it should be a simple call to `map`.
13:40 amalloy: sritchie: cake master is fixed now if you want to go back to it
13:41 sritchie: awesome, thanks
13:41 * amalloy accepts all the credit for watching over ninjudd's shoulder
13:42 mprentice: timvisher: sure, i'll come up with a small example
13:48 jaskirat: bdesham_: you could just do #(apply map vector %) to transpose matrices
13:52 chouser: mprentice: zip-filter's unfortunately not much good at changing things. It can be used if you only want to make a single change, but changing all x to y is beyond it's capabilities.
13:52 derp__: I have a map that's basically a configuration file, it's made up of smaller maps that declare the function name and source file. But how do I load a specified function outside of the namespace declaration?
13:53 mprentice: chouser:
13:53 chouser: ah, ok
13:54 timvisher: https://
13:55 chouser: so i guess what i want is a looping structure? find edge such that attribute target='n3', assoc target to 'n4', pass new xml to next stage of loop, repeat until there are no target 'n3'
13:57 i've been looking for a good tutorial on how to jump around an xml zipper like that, but i have come up short
14:05 chouser: mprentice: you might consider clojure.walk instead of zippers
14:06 derp__: um, how do you handle dynamically loading functions based on a config file?
14:07 chouser: derp__: not sure what you mean. "based on" how?
14:08 edw: Using Compojure, what's the proper way to handle "connection reset by peer" exceptions?
14:08 chouser: (doc clojure.walk/postwalk)
14:08 clojurebot: "([f form]); Performs a depth-first, post-order traversal of form. Calls f on each sub-form, uses f's return value in place of the original. Recognizes all Clojure data structures except sorted-map-by. Consumes seqs as with doall."
14:08 chouser: mprentice: ^^^
14:08 mprentice: chouser: oh, that looks nice
14:08 thanks!
14:09 derp__: chouser: basically I want to have a file that tells my clojure script which functions to load out of which files
14:11 bryanl: any suggestions on a clojure book for casual learning?
14:13 chouser: derp__: you want to list individual function names and skip over loading any that aren't listed? sounds tricky.
14:14 mprentice: chouser: aha, that works perfectly
14:14 chouser: bryanl: I recommend Joy of Clojure to everyone in every circumstance. :-)
14:14 mprentice: chouser: i had looked at clojure.walk before but couldn't figure out how to apply it. postwalk was what i wanted
14:14 chouser: mprentice: great!
14:15 bryanl: It's got a friendly drunk guy on the cover -- what more could you want? http://
14:16 bryanl: chouser: did you write it?
14:16 chouser: bryanl: helped, yes.
14:16 bryanl: cool
14:16 i will check it out
14:17 technomancy: clojurebot: tell bryanl about the peepcode
14:17 clojurebot: peepcode is a commercial screencast series; see the Clojure one at http://
14:17 chouser: If you want *really* casual and aren't targetting Clojure too specifically, you might like Land of Lisp. ...which I have nothing to do with.
14:17 bryanl: technomancy: I watched that
14:17 technomancy: bryanl: awesome =)
14:18 bryanl: i just wanted to learn a new language
14:18 in my spare time
14:26 i do have a problem that i plan on solving in clojure this evening. scanning gigs of log files for interesting data
14:35 ohpauleez: bryanl: That will be a blast in clojure
14:36 (it's my favorite kind of task to do in the language: Large data analysis, stream processing, etc)
14:36 bryanl: i wrote the first version in ruby. it made me sad
14:37 derp__: I am looking at this: http://
14:37 and it talks about the :require and :as options for the ns macro
14:37 edw: Anyone using Compojure/Ring/Noir around?
14:38 derp__: is there a way to run something like (str-utils/"str-join" "," ["foo" "bar"])
14:38 so that the "str-join" part is not hard-coded
14:39 e.g. name of function turns into an actual function call?
14:39 ohpauleez: edw: I've never used noir, but I'm familiar with it (I've used the other pieces)
14:40 derp__: lol, I meant i.e.
14:40 edw: ohpauleez: How do you catch "connection reset by peer" IOExceptions?
14:43 ohpauleez: I've never seen that happen in any app I've rolled (that I recall), but if you know where the exception is being generated from, you can wrap it in a (try (catch))
14:43 you can also use Contrib's condition lib
14:43 or checkout the discussions here: http://
14:43 edw: ohpauleez: Right. It's running in a different thread, so I don't believe I can catch it.
14:43 technomancy: don't use c.c.Condition; use slingshot instead
14:44 edw: If you take your web app and Command-R/Control-R the crap out of it in your web browser, you *will* suffer a connection reset.
14:44 ohpauleez: edw: It just means the server thread is generating it, but it's happening on an action that's being done in that thread, no?
14:44 sure
14:45 and you just don't want to see that in the logs?
14:45 edw: Which causes the server to fall over. Not a good thing.
14:45 chouser: derp__: resolve
14:45 ,(resolve "map")
14:45 clojurebot: java.lang.ClassCastException: java.lang.String cannot be cast to clojure.lang.Symbol
14:46 chouser: ,(resolve (name "map"))
14:46 clojurebot: java.lang.ClassCastException: java.lang.String cannot be cast to clojure.lang.Symbol
14:46 chouser: heh
14:46 sorry
14:46 ,(resolve (symbol "map"))
14:46 clojurebot: #'clojure.core/map
14:46 ohpauleez: oh weird, I've never had that happen to me (to where it fell over).
14:46 Let me try that
14:46 chouser: derp__: the var that resolve returns is callable
14:47 edw: This happens using 'heroku foreman', 'lein run -m blah.core', and inside the Heroku cloud.
14:47 chouser: ,((resolve (symbol "map")) vector [1 2 3])
14:47 clojurebot: ([1] [2] [3])
14:48 jcromartie: I just had an interviewee that said Lisp was probably his least favorite language
14:48 ohpauleez: edw: I see the connection reset by peer in the logs (even on the prod systems)
14:48 but the server doesn't come down
14:48 jcromartie: I'm not sure what to do with that
14:48 ohpauleez: I even held ctrl/cmd-r down
14:49 to be fair, they were logging warnings, from netty
14:49 edw: Hmm. I wonder why my code is dying. Maybebecause I'm joining on the RUN-JETTY.
14:49 ohpauleez: that sounds likely now
14:49 I was just about to try a jetty system
14:50 edw: I just switching things up and am trying :join false now.
14:50 jcromartie: look at the first version of emit-bash-form here http://
14:51 it uses (case (class a) java.lang.String ...)
14:51 and it doesn't seem to work in my REPL, but the REPL in the article shows the proper output
14:51 ohpauleez: edw: What's the result?
14:51 jcromartie: I know people were just talking about case and class literals the other day
14:52 edw: Hmm. Same thing. It's not hard to get the thing pitting out endless IOExceptions.
14:55 ohpauleez: but is the server failing too?
14:55 or just logging all that noise
14:56 and wrapping the run-jetty call in a try catch doesn't help?
14:58 bdesham: jaskirat: oh, nice, thanks! (regarding #(apply map vector %))
14:59 edw: ohpauleez: wrapping the run-jetty does nothing.
15:01 ohpauleez: I removed the wrap-reload or whatever it's called and the problem went away.
15:01 Or I can't get the connection to reset, at least.
15:01 ohpauleez: Oh weird, that's good to know
15:02 edw: Yeah.
15:09 lpetit: Hi
15:10 chouser: lpetit!
15:11 lpetit: Hello !
15:11 's been a while, isn't it ?
15:11 chouser: I guess so. Been busy / distracted.
15:13 lpetit: Talking 'bout you, or me ? :)
15:13 chouser: heh. It's been a while since *we* talked. *I've* been distracted.
15:13 lpetit: Been very busy, but also working with cgrand on improving perfs of the ccw editor, by means of helping him debug / perf test his parsley library
15:13 ataggart: lpetit: log2logger committed
15:14 chouser: lpetit: ooh, cool!
15:14 lpetit: ataggart: awesome, thx
15:15 ataggart: Now I'm going to pull all the impl stuff out of the clojure.tools.logging namespace
15:20 lpetit: attagart: great, so people requiring the main namespace with some "log" alias will only see code completion for the vars of interest, cool
15:20 ataggart: ^^ (inverted t & g)
15:21 ataggart: yes, the protocols are for implementations, not consumers, so I'll move them into clojure.tools.logging.impl
15:22 and then lib-specific stuff will be in its own ns, e.g., clojure.tools.logging.log4j. That also gives a place to hang any future implementation-specific functionality.
15:22 though for now each will just have a single load-factory function
15:23 sound reasonable?
15:25 lpetit: ataggart: yes
15:34 dnolen: lpetit: parsley's really coming along.
15:35 lpetit: dnolen: I would not speak for cgrand, but really coming soon
15:36 (a version of which will be hopefully packaged by me for use in ccw tomorrow)
15:36 dnolen: lpetit: yeah he sent a couple of emails. Within 3X of Clojure's parser, and whole incremental thing is pretty amazing.
15:36 hiredman: really? does it have docs yet?
15:37 dnolen: hiredman: no but soon I think.
15:38 no lex/parse dichotomy. All in all I think it's gonna be a real nice lib.
15:38 lpetit: hiredman: not yet. Christophe's been busy with the book recently. I've been pulling him off-path to work on parsley for the greater good of it and of ccw, but right now it's not much documented.
15:39 dnolen: a potential to be a killer lib in its area, mind you ! :-D
15:39 dnolen: lpetit: I totally, totally agree.
15:40 dsantiago: I know more about Clojure stuff than Java... what is it about the ScheduledThreadPoolExecutor in Aaron Bedra's PragProg article that makes it a unix service? If anything?
15:40 lpetit: And it's a tiny library, with no dep but clojure jar
15:42 The current state of paredit.clj's clojure grammar is horrible, but anyway, this will give you a sense of how you define the grammar for a language in parsley : https://
15:45 amalloy: dsantiago: link?
15:46 dsantiago: amalloy: http://
15:46 hiredman: lpetit: I don't see the advantage over fnparse (which even though it is being constantly rewritten) which is documented and comes with examples?
15:46 amalloy: hm. he misspelled "leinigen" :P
15:48 lpetit: hiredman: well, I don't know fnparse well, so I'm not really well placed, but here are some hints: parsley generates a parser, and I guess a really optimized one. How much time would it take for a (decently written) clojure grammar written with fnparse to parse clojure's core.clj (6kloc) file ?
15:48 amalloy: dsantiago: i think he just means he's reimplementing cron in clojure
15:49 kephale: i'm playing around with org.eclipse.swt, i'd like to have my project be multi-platform but the SWT dependencies are system specific. is there a simple way to have leiningen auto-discover the correct dependency to use?
15:49 dsantiago: amalloy, yeah, I thought maybe I was reading too much unix into it, but I thought maybe there was something about it.
15:49 hiredman: lpetit: no idea, but how long would it take to write? fnparse has docs, parsley doesn't
15:49 amalloy: although not a very general cron
15:49 lpetit: hiredman: parsley will output an abstract tree. You plug into it custom make-node / make-leaf functions to get a concrete parse tree. Or whatever you want to make out of the abstract parse tree, really.
15:49 hiredman: parsley can be super fast, but if there are no docs
15:50 lpetit: sounds like a great feature, when I am interested in parsing something, how can I find out about parsley's great features?
15:50 lpetit: hiredman: I'm not announcing parsley publicly here, for general consumption. Just reporting progress, and enthousiasm of an early adopter (for ccw)
15:50 hiredman: when ready, cgrand will announce it broadly
15:51 dnolen: lpetit: I'm looking forward to hooking it up to core.logic pronto soon as he does ;)
15:52 lpetit: hiredman: and so, a unique feature of parsley is its use in conjunction with an incremental buffer, which lets him reuse as much as possible of the existing abstract parse-tree (and all the derivative concrete values from your custom make-node / make-leaf functions, which are memoized with the abstract parse-tree nodes)
15:53 dnolen: now parsley is working. It's not a "Christmas promise" anymore :). It's up to Christophe to say if he's happy enough with its public API for general consumption or not.
15:55 dnolen: which means editing then updating the parse tree on a large file like core.clj takes ms.
15:56 thorwil: hmm, how do i wrap a ring handler with both wrap-params and assoc-param?
15:58 lpetit: dnolen: exactly
15:58 dnolen: there are still some worst cases, though, to be improved upon over time. But having all this done generically is damn awesome
16:20 technomancy: I like the latest pragprog issue, but i'm confused why the article on a simple sh compiler uses the term "dsl" instead of compiler
16:20 is it because it's targeted towards ruby programmers?
16:21 jcromartie: technomancy: because compilers are scary?
16:21 pjstadig: technomancy: you're saying it is not a domain specific language?
16:21 bsteuber: because dsl are is a buzzword
16:21 -are
16:21 jcromartie: yeah, DSL is a bit of a stretch
16:22 technomancy: pjstadig: I'm saying that's a meaningless term. how many defmacros do you need to define before you've created a new "language"?
16:22 jcromartie: and I emailed the author about the use of case with class literals
16:22 it just doesn't work
16:22 pjstadig: technomancy: 7
16:22 jcromartie: I think ClojureQL counts
16:22 technomancy: jcromartie: also the use of (fn [form] (class form)) instead of class bugged me, but whatever.
16:22 jcromartie: heh
16:24 technomancy: rubyist: "hey look, I'm writing a DSL" / lisper: "oh, we call that 'programming' where I'm from."
16:24 pjstadig: i guess DSL is fuzzy as a term, but to me it means a way to manipulate nouns and verbs in the domain you're writing for
16:26 lpetit: internal DSL, external DSL ...
16:27 jcromartie: i think it's a good goal to develop a "language" in which to work in the domain
16:28 but an inherent problem in any domain-specific language is that it's not really useful outside of that domain
16:28 bah
16:28 lpetit: interesting thought: create a ns where you refer to clojure.core as alias core, carefully :use some namespaces full of vars relevant to your domain, carefully :require :as some other namespaces related to your domain. Use it in a text editor/IDE with proper completion, and you've customised a "generic" Clojure editor for your "internal DSL"
16:28 jcromartie: I can't use that term with a straight face anymore
16:29 hiredman: a dsl should really be nothing but a on ramp to the full language
16:29 jcromartie: yup
16:29 hiredman: eh?
16:29 I don't think a DSL should be "easy"
16:29 it should be focused
16:29 hiredman: easy?
16:30 jcromartie: you say it should be an on-ramp to the "full" language
16:30 that sounds like "training wheels" or something
16:30 lpetit: jcromatie: thus my thought above ^^^ for the "focus" part of it
16:30 hiredman: they are more or less
16:30 you create a restricted language, domain specific
16:31 means it is cut off from other domains, which you will eventually need in any real application so you will need the full language
16:31 jcromartie: maybe
16:32 I thought the presentation by Naughty Dog about their scripting language for Uncharted 2 was really cool. It used Scheme to build a "DSL" for doing asynchronous game event scripting.
16:32 It was pretty much self-contained.
16:32 once you were writing the state scripts, thati s
16:32 that is
16:33 hiredman: jcromartie: yeah, but has it been used anywhere else? is it really useful outside of uncharted 2?
16:33 jonabbey: Naughty Dog did their PS2 games entirely in a Lisp based system, actually.. they switched to using C++ for their framework on the PS3 so other Sony studios would be able to work with their code. ;-/
16:33 technomancy: isn't that pretty much the only way to write good extensible software?
16:33 I mean unless your main host language is flexible enough
16:33 jcromartie: no that's the point hiredman
16:33 technomancy: that's the same model as mozilla and emacs, the only large programs I can stand using on a daily basis.
16:33 jcromartie: jonabbey: but they're back to Scheme
16:33 jonabbey: smart
16:34 lots of folks are using Lua for that sort of thing.. Civ 4 was done with Python
16:34 jcromartie: PLT (Racket) hosted in C++
16:34 yeah I worked in Lua full time for a while... it's not almost too loose I think
16:34 s/not//
16:34 sexpbot: <jcromartie> yeah I worked in Lua full time for a while... it's almost too loose I think
16:34 * jonabbey laughs at sexpbot
16:35 technomancy: there are really only three ways to write large programs: use a host language that's both flexible and fast enough, embed a flexible language in a fast one, or write software that isn't flexible
16:35 jonabbey: that's awefully nice
16:35 s/we/w/
16:35 sexpbot: <jonabbey> that's awfully nice
16:35 technomancy: but that's not really relevant to the question of what defines a dsl
16:36 edw: A DSL is a language that's specific to a domain.
16:36 jonabbey: i'm investigating clojure for precisely that reason. i've got a reasonably large Java system I've been working on for the last fifteen years, and it's gotten ridiculous, trying to code the business logic in Java
16:37 ibdknox: edw: or, in other words, at the point at which the primary nouns in use are no longer that of the core language, you have a dsl
16:37 jonabbey: doing it declaratively in Clojure and then having a modest constraint evaluation engine is going to be so much better
16:37 pjstadig: technomancy: ambrose is supposedly from your user group
16:38 edw: ibdknox: I think my main point is -- and it may not be quite explicit -- is that some people, specifically Ruby people, overthink DSLs.
16:38 lpetit: "fluent APIs" in java are the closest thing I would call "java internal DSLs"
16:38 pjstadig: but then his bio says he's from western australia?
16:38 ibdknox: edw: agreed.
16:39 technomancy: pjstadig: yeah, I have no idea who he is
16:40 made me feel bad like, "oh, man I suck at remembering peoples' names" but then it was like "ah; vindicated."
16:41 edw: I think Pike and Kernighan call them "little languages" in Practice of Programming. Insecure people, however, regularly couch ideas in terms most obscure.
16:44 * jonabbey orders a copy of The Reasoned Schemer
16:46 dnolen: jonabbey: excellent tough little book.
16:46 ataggart: has anyone recently used autodoc to update a new-contrib lib?
16:46 jonabbey: i read your recommendation for it on the core.logic page
16:47 i did just a bit of prolog back in school, but i haven't touched it in 20 years. i'm looking forward to getting reacquainted.
16:51 dnolen: jonabbey: I'm still sorting through its insights 8 months later. I recommend pairing it with a proper Prolog book since TRS is a bit abstract at times.
16:51 jonabbey: have any recommendations?
16:53 dnolen: jonabbey: The Art of Prolog, Prolog for Artificial Intelligence Programming seem highly recommended. I have the later and like it.
16:54 amalloy: ibdknox: i'm reading over the ai challenge stuff. looks really neat. any idea when the clojure support and starter package are liable to get included?
16:55 (that was you who put together the starter package, right?)
16:55 ibdknox: it was
16:55 I'm not sure
16:55 I submitted a pull request
16:55 but I haven't heard anything back yet
16:55 fwiw you can play locally
16:55 which is worthwhile
16:55 edw: I liked the Art of Prolog. Beautiful too.
16:55 ibdknox: since there's quite a lot to do before you'd even have a chance being competitiv
16:55 e
16:56 amalloy: ibdknox: to do that, i clone your fork of the repo? i don't see any evidence of local-play options on the actual site
16:56 ibdknox: for example, the starter packs are not supposed to track individual ants (per their request)
16:56 ssideris: hello, I find myself writing this very often (apply hash-map (apply-concat (map (fn ...) a-hash-map))), where the fn returns a 2-member vector
16:57 is there a shorther way to express this?
16:57 ibdknox: amalloy: you need the tools, sec I'll get you a link
16:57 ssideris: (I could define it myself I suppose)
16:57 amalloy: ssideris: ##(into {} '[[a b] [c d]])
16:57 sexpbot: ⟹ {a b, c d}
16:57 jonabbey: looks like Prolog for AI 4th edition comes out 12 August.
16:57 dnolen: jonabbey: I just started looking over this, http://
16:57 ibdknox: amalloy: http://
16:58 ssideris: amalloy: thanks, that's very handy
16:58 ibdknox: amalloy: note that you'll need to change the paths inside of the play_one_game command, for some reason they're pointing to a slightly wrong location
16:58 jonabbey: thanks, dnolen
16:59 rimmjob_: I'm a novice with just a few months of python experience and i want to learn lisp, should i start with SICP or just start learning clojure?
16:59 edw: Or there's merge, amalloy (& ssideris), correct?
16:59 pjstadig: ,(into {} (map (fn [[k v]] [k (inc v)]) {:a 1 :b 2}))
16:59 clojurebot: {:a 2, :b 3}
16:59 pjstadig: ssideris: ^
17:00 oh my bad
17:00 i'm too late
17:00 amalloy: pjstadig: feh. for is nicer there
17:00 ibdknox: rimmjob_: I think it depends on why you want to learn lisp
17:00 amalloy: &(into {} (for [[k v] {:a 1 :b 2}] [k (inc v)]))
17:00 sexpbot: ⟹ {:a 2, :b 3}
17:00 pjstadig: amalloy: sure was just writing something quick and literal
17:01 ssideris: thanks pjstadig and amalloy, my code just got a little shorter
17:01 amalloy: edw: yeah, maybe so. ##(apply merge {} [[:a 1] [:b 2]])
17:01 sexpbot: ⟹ {:b 2, :a 1}
17:01 dnolen: rimmjob_: if you want to learn Clojure, get a Clojure book or just start hacking away. SICP is a long and roundabout (tho rewarding) trip.
17:02 rimmjob_: ok ty
17:02 edw: rimmjob_: I heartily second the advice of dnolen.
17:06 amalloy: ibdknox: play_one_game looks right to me
17:06 ibdknox: maybe they fixed it then :)
17:10 amalloy: to run a bot exactly the way the server will you would do: ./play_one_game.sh "java -Xmx500m -cp /usr/share/java/clojure.jar:. clojure.main MyBot.clj"
17:11 amalloy: note that all paths in that need to be absolute, a ~/ won't work
17:12 amalloy: ibdknox: i understand what you mean, but ~/ *is* an absolute path: it's equivalent to /home/foo/
17:12 ibdknox: amalloy: fair enough, it won't get expanded :-p
17:12 amalloy: (the shell does that expansion, rather than the kernel, but ~ is absolute and . isn't)
17:13 jonabbey: found a copy of The Art of Prolog through Amazon, yay
17:14 ibdknox: amalloy: ah, my mistake
17:16 amalloy: ibdknox: it looks like this is all still in beta, but i can't find any timeframes mentioned. any idea when the competition officially starts or ends?
17:17 ibdknox: none has been given, though it seems to be ramping up some
17:18 it's fun to just play around with though
17:20 amalloy: my asking on their IRC channel has yielded me no valid results
17:33 amalloy: ibdknox: and what's the deal with https://
17:34 ibdknox: amalloy: it doesn't include the current directory
17:34 so the inclusion of ants.clj doesn't work
17:34 amalloy: right. so in theory i could submit a clojure bot to them now, but i'd have to put it all in one file?
17:34 ibdknox: in theory, yeah
17:34 amalloy: k
17:39 hiredman: speaking of single file bots
17:39 https://
17:46 ejackson: just read about backtype, woah !
17:46 those guys are amazing
17:46 and now they are aquired !
17:46 i (very selfishly) hope they still release Storm.
17:49 dnolen: ejackson: sounds like that's the plan.
17:53 ohpauleez: yeah, that was awesome news about BackType
17:53 dnolen: I'll be moving back to NYC in September, so I look forward to seeing you at user groups!
17:55 tufflax: hiredman about your randth, there is rand-nth already if im not mistaken
17:56 brehaut: tufflax: that gist is from 2008 isnt it?
17:57 tufflax: oh didnt realize
17:57 amalloy: i was thinking the stone age
17:57 having a five-digit gist is like owning mike@aol.com
17:57 tufflax: hehe
18:08 seancorfield: reading the docs for agents... send and send-off sound suspiciously similar... can someone provide a simple explanation of their real differences?
18:08 both return the agent immediately according to the docs
18:08 amalloy: seancorfield: send-off doesn't use the threadpool
18:08 seancorfield: send runs in a thread from a thread pool; send-off runs in a separate thread
18:09 amalloy: yes, but i'm missing the subtlety of what that really means
18:09 amalloy: consider two uses for agents. (1) serializing access to a log file, (2) incrementing an "event counter"
18:09 seancorfield: both run "subsequently", both return the agent immediately...
18:09 'k... keep going...
18:10 amalloy: if you used threadpool threads for (1), the threadpool would get exhausted as a bunch of threads block on IO
18:10 and adding new tasks would block
18:10 if you created a whole new thread for each action in (2), you'd drown your operating system in threads
18:10 seancorfield: ah, so the threads available to send are limited but the threads available to send-off are not?
18:10 amalloy: indeed
18:10 seancorfield: gotcha... thanx...
18:11 what about pmap? it doesn't say whether it uses separate threads or the threadpool...
18:11 ohpauleez: it uses the threadpool
18:12 seancorfield: thanx
18:12 ohpauleez: np
19:11 seancorfield: if i just want to fire off an async process and forget it, what's the most idiomatic way
19:11 i could use an agent... but that seems a bit wrong if i don't care about its value...
19:11 hiredman: (future ...) is used a lot
19:12 seancorfield: hmm, that says it caches the value... isn't that... wasteful?
19:13 i probably want to fire off tens of thousands of processes over a period of a few minutes
19:13 hiredman: *shrug* it's an object, it'll get gc'ed
19:14 seancorfield: if you use your own threadpool (which is not a bad thing to know about, excutors, threadpools, and futures) what you get back when you submit a job is a Future
19:14 and a clojure future is a java Future
19:16 seancorfield: ah, ok... good to know
19:16 hiredman: if you are doing 10's of thousands of jobs you may want to instead look at queueing up jobs and having some fixed number of threads consuming from the work queue
19:20 seancorfield: interesting... the thread name reported by a log event in a future is clojure-agent-send-off-pool-24 :)
19:21 doesn't 'pool' indicate a thread pool is being used there?
19:21 hiredman: the futures are backed by the same threadpool that send-off uses
19:21 correct
19:21 seancorfield: but that threadpool can grow unlimited amounts?
19:21 hiredman: but it is not a fixed size threadpool
19:21 correct
19:21 seancorfield: cool
19:22 hiredman: but I doubt you'll want 10's of thousands of threads
19:22 seancorfield: indeed
19:22 so i might use an agent and send for now to keep things under control
19:23 hiredman: :(
19:23 I hate it when people use agents for that
19:23 seancorfield: don't worry, i'll go look at threadpool, executors and so on later
19:23 i just want a proof of concept to test my ideas without spending too much time on implementation details
19:23 i didn't want to use agents in the first place
19:24 hiredman: look, for a poorman's executor just use a linkedblockingqueue+(future (while true (do-something (.take lbq))))
19:33 seancorfield: thanx hiredman that does look nice and simple and after reading the docs, easy to use
19:33 you'd rather i did something better tho' right?
19:34 hiredman: an lbq+future is acceptable
19:34 the 'Please stand firm against Steve Yegge's "yes language" push' thread on the mailing list really needs to die
19:35 technomancy: hiredman: time to start a "Please stand firm against 'Please stand firm against Steve Yegge's "yes language" push' thread" thread.
19:35 hiredman: I haven't read any of it
19:35 technomancy: wish I could say the same
19:36 hiredman: I just have to keep deleting it
19:36 technomancy: sounds like you need a better mail client
19:36 hiredman: well you can already tell it is going to be all noise no signal just from the subject
19:37 just people writing essays about nothing at all, no code or any other useful artifacts to show for it
19:38 technomancy: "clojure is what you feel in your heaaaaaaaaart" 𝅘𝅥𝅮
19:38 hiredman: yes
19:38 I mean, correct me if I am wrong (since tl;dr)
19:39 "When Your Heart Finds Clojure: The Rich Hickey Story"
19:42 seancorfield: at least i finally got james keats to say in one sentence what he was writing essays about... and it appears it is just "noise" and no real signal
19:42 so you were right there hiredman :)
19:44 hiredman: see, and I didn't have to read the thread to figure that out
19:45 Tcepsa: How can I tell whether I'm using Marmalade as a package repository for ELPA in Emacs?
19:45 (I promise this is relevant to Clojure; I'm trying to get clojure-jack-in working; right now it says there's no match when I try to use it)
19:46 technomancy: Tcepsa: C-h v package-archives should show you if it's configured as a source
19:47 Tcepsa: you may need to do M-x package-refresh-contents and reinstall if you upgraded from an old package.el
19:47 Tcepsa: technomancy: No match for that variable, so I'm guessing... no. I'll try adding it to my init.el (I'm using the Emacs Starter Kit from a year or so ago, so I'm guessing it wasn't part of it back then)
19:49 technomancy: Tcepsa: http://
19:49 Tcepsa: technomancy: Thanks, I'll give that a shot
19:54 technomancy: ok, I really don't want to be a dick, but http://
20:01 amalloy: technomancy: but most of those threads were started in the last couple weeks, *after* this "stand firm" thread started! i conclude that there is a causal relationship
20:02 dnolen_: technomancy: that post is just offensive.
20:02 technomancy: $kill it
20:02 sexpbot: KILL IT WITH FIRE!
20:03 dnolen_: technomancy: not you, I mean the person you're responding to of course.
20:03 technomancy: dnolen: heh; of course. =)
20:03 amalloy: i am happy to contemn people who use words like contemning
20:07 Tcepsa: I for one appreciate the reminder of the nifty stuff that continues to be added ^_^
20:09 technomancy: I left out slingshot because apparently it hasn't been announced on the mailing list yet, wonder what scgilardi's master plan for that is.
20:09 oh, he's not here. subtle ping plan foiled.
20:10 amalloy: technomancy: practice makes perfect. you'll get someone's attention someday
20:10 technomancy: hehe
20:10 Tcepsa: Switching to the newer version of package.el made the clojure-jack-in command show up in Emacs, but apparently I'm missing lein jack-in. Searching the Web has not yielded info on where to find it; is it supposed to be included in leiningen 1.6.1?
20:11 hiredman: Tcepsa: it actually comes from swank-clojure
20:11 technomancy: Tcepsa: "lein plugin swank-clojure 1.4.0-SNAPSHOT" should get it, but it could get confused if you use it in a project that has an older swank in project.clj
20:11 Tcepsa: hiredman: I'm using swank-clojure 1.3.1. D'oh!
20:12 technomancy: Tcepsa: actually that should do it. where is it installed?
20:13 Tcepsa: technomancy: Wherever `lein plugin install swank-clojure 1.3.1` put it? (Will try to get you more helpful response, but that's how I got it)
20:13 * Tcepsa searches
20:14 technomancy: no, that's fine. "lein help" doesn't show jack-in?
20:15 Tcepsa: It's in ~/.lein/plugins
20:15 "lein help" doesn't show jack-in
20:16 ("lein version" says 1.6.1)
20:16 seancorfield: if i did lein plugin install ... to add a plugin, is there a command to uninstall it?
20:17 or do i just go delete some files?
20:17 technomancy: seancorfield: I think there is an uninstall, but I always just use rm
20:17 Tcepsa: that is... bizarre.
20:17 Tcepsa: Oh wait, maybe it's because the project I'm trying to use it with is using an old version, like you said about 20 lines ago /facepalm
20:18 * Tcepsa updates project.clj
20:18 technomancy: just nix it out of project.clj and re-run deps
20:19 seancorfield: technomancy: yup plugin uninstall exists and works :)
20:19 Tcepsa: Got it. So if it's in .lein/plugins it's automatically included for all projects?
20:19 technomancy: Tcepsa: ja
20:21 IMO swank-clojure doesn't belong in project.clj any more now that there are user-level plugins
20:21 :dev-dependencies are for things that are necessary to make the tests pass, not things you use for your own convenience.
20:21 Tcepsa: technomancy: Shiny!
20:24 Oh that's weird. The jack-in task runs, but it looks like I have issues with... clojure.pprint?
20:24 (run-hooks 'slime-load-hook)
20:24 Exception in thread "main" java.lang.VerifyError: class clojure.pprint$loading__4410__auto__ overrides final method meta.()Lclojure/lang/IPersistentMap; (pprint.clj:4)
20:25 technomancy: that looks like an AOT version mismatch issue
20:25 can you require clojure.pprint from a repl?
20:26 Tcepsa: Can't start REPL with lein repl (Exception in thread "main" java.lang.VerifyError: class clojure.java.shell$loading__4410__auto__ overrides final method meta.()Lclojure/lang/IPersistentMap; (NO_SOURCE_FILE:1))
20:26 Attempting raw Clojure repl
20:27 technomancy: gist project.clj?
20:27 Tcepsa: Ack, nevermind, I'm using clojure-1.1.0.jar in this project
20:28 Upgrading might help with the issue?
20:28 technomancy: yeah... I haven't officially dropped support for 1.1 yet, but there's really no good reason to stick with it as far as I know.
20:29 gfrlog`: technomancy: 11 is a prime?
20:30 technomancy: compelling
20:30 arohner: Class clojure.lang.Compiler$NewExpr can not access a member of class Foo with modifiers "public"
20:30 what does that mean?
20:31 Tcepsa: technomancy: Woo hoo! Hacks and glory await! XD
20:31 amalloy: arohner: i'd guess that you're trying to access Foo/bar when bar is a public non-static member of class Foo, rather than a public static?
20:32 arohner: amalloy: I'm trying to call the constructor, hence the newExpr
20:33 hiredman: my bet would be something like a non-public constructor
20:33 Tcepsa: technomancy: Thanks for all your help ^_^ Now I'm going to give slamhound a try; it also looks fantastic!
20:33 hiredman: the 'with modifiers "public"' bit just being there to confuse things
20:33 technomancy: Tcepsa: sure
20:33 arohner: eyeballing the source, and the output of (show) both that the constructor is public
20:33 I'm doing (Foo. "a string" 5)
20:34 hiredman: and where is Foo? does it extendthing, what does the constructor do?
20:36 extend anything
20:36 arohner: foo is in a jar in lib/. it extends nothing, it doesn't do anything unusual
20:37 the one weird thing about it is it didn't have dots in a java package
20:37 i.e. it's just Foo, not com.bar.Foo
20:38 hiredman: and you are doing this at the repl?
20:38 arohner: yeah
20:43 Tcepsa: arohner: Just out of curiosity, how did you import it? (i.e. How do you import something without a package? Or would that be with a nil package?)
20:43 arohner: Tcepsa: I did (import 'Foo), and it didn't throw an exception
20:44 now I can do (show Foo), and see what I expect
20:44 hiredman: ick, that is a class in the anonymous package
20:44 Tcepsa: Ah, got it. (Lisp may not have syntax, but its macros sure do)
20:44 hiredman: throw it back
20:44 amalloy: hiredman: the default package
20:45 hiredman: default
20:45 right
20:45 amalloy: but yeah, that is seriously gross. all kinds of shit will break on that
20:45 hiredman: disgusting
20:46 arohner: ok, I'll try moving it into a sane package format
20:46 thanks
21:08 Tcepsa: technomancy: Regarding your earlier comments about "things in dev-dependencies are to make tests pass" would it probably be better to do "lein plugin install slamhound 1.1.1" rather than include it in project.clj as a dev-dependency? (Is this something that would have been more appropriate for me to put in as a GitHub issue? Or should I clone the project, change the README, and submit a pull request?)
21:09 * Tcepsa attempts to clamber a little higher up the being-a-good-open-source-contributor learning curve
21:36 amalloy: ,`[! & a]
21:36 clojurebot: [sandbox/! & sandbox/a]
21:36 amalloy: anyone know where the code is that causes & to not get namespace-qualified there?
21:36 hiredman: in the reader
21:36 syntax quote is all in the reader
21:37 and it is ugly
21:37 amalloy: hiredman: yeah, i've been looking through syntazQuote but i can't find the relevant bit
21:37 * gfrlog likes syntazQuote
21:38 arohner: it would be so awesome if clojure could load .java files directly
21:38 would that be possible as a special classloader?
21:38 hiredman: arohner: no
21:39 you would need to turn .java into bytecode first
21:40 arohner: hiredman: well yes. but what if your classloader ran javac and spat out the bytes? that seems possible in theory
21:41 hiredman: arohner: the classloader is spitting out bytes? why?
21:41 arohner: sorry, bytecode
21:41 hiredman: why is it spitting out bytecode?
21:41 Tcepsa: Sounds like a job for JIT compilation!
21:41 arohner: isn't that the interface? I thought the classloader's job was to convert a classname into a stream of bytecode
21:41 hiredman: classloaders generally load bytecode from somewhere (hence "loader") they don't write them anywhere
21:42 arohner: so the interface on classloader is essentially, return the stream of bytecode for a given class, given its name
21:43 it seems possible to write a classloader that looks for a file with the same name under src/, run javac on it, and return that stream of bytecode
21:44 amalloy: certainly that is possible
21:44 gfrlog: I would expect an IDE written in/for java would want similar capabilities
21:44 amalloy: all things are possible
21:45 arohner: amalloy: yes, but how much work is it? does the naive implementation work?
21:46 amalloy: probably not
21:51 arohner: http://
21:58 chouser: I think it's been done. Java source REPL type things
21:58 arohner: chouser: I'm sure it has. I just want clojure to have it
22:02 chouser: why would it be worth anyone's time to create such a thing?
22:03 arohner: chouser: to avoid the compilation overhead when modifying a project that contains clojure and java code
22:03 chouser: If someone else insists on creating java, I hope they are nice to me and provide a tidy bytecode .jar with appropriately declared dependencies.
22:03 arohner: chouser: me too, but it doesn't always work that way
22:15 Tcepsa: chouser: Say I'm working in a Java-only shop, but I'm using Clojure (and the REPL) to do some prototyping and experiment with a Java class that I'm trying a new technique with. It'd be nice to be able to pull changes I make to the class directly into the REPL rather than having to exit the REPL, run ant, fire the REPL back up, and restore my environment.
23:20 dnolen_: so lein 1.6.1 doesn't work w/ 1.3.0-beta1 ?
23:23 ^^: im getting a nullpointer exception and i dont get why. could someone please look at the code: http://
23:23 (i know the code is still incorrect even without that problem)
23:24 hiredman: ,(macroexpand '#(1))
23:24 clojurebot: (fn* [] (1))
23:24 ^^: oh right
23:25 thanks... :S
23:25 dnolen_: what's the easiest way to downgrade lein?
23:30 hiredman: dnolen_: get the patch http://
23:32 if you remove the -Xbootclasspath bit from the lein script it will work
23:36 dnolen_: hiredman: I removed that still borked.
23:36 hiredman: stacktrace?
23:37 dnolen_: https://
23:37 hiredman: the bootclasspath is actually only an issue if lein itself is running on 1.3 (which it isn't) so a failure on a project running 1.3 is interesting
23:38 this is from running lein deps?
23:38 dnolen_: hiredman: yup
23:38 but none of the tasks seem to work, same trace
23:39 hiredman: huh
23:39 dnolen_: lein help is also garbled, https://
23:39 hiredman: 1.6.0?
23:39 dnolen_: 1.6.1
23:41 hiredman: what jvm?
23:41 dnolen_: OpenJDK 7, looking at switching it to 6
23:41 hiredman: on osx right?
23:42 (thought I fixed this already)
23:42 dnolen_: upgrading to latest 7, work on system JDK 6
23:42 s/work/works
23:42 sexpbot: <dnolen_> upgrading to latest 7, works on system JDK 6
23:43 hiredman: actually just what are the values for (System/getProperty "os.name") and (System/getProperty "os.arch")
23:43 dnolen_: "Mac OS X" "x86_64"
23:44 hiredman: lein is most likely missing them, I had a similar problem, the openjdk 7 build I have reports "Darwin" as the osx, and that was missing
23:44 huh
23:44 thats there
23:44 dnolen_: trying latest 7
23:45 works
23:45 I was OpenJDK 7 from May I think.
23:45 hiredman: weird
23:45 different values for the system properties?
23:46 dnolen_: no
23:46 hiredman: fuh
23:46 dunno