#clojure log - Jul 07 2011

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

0:36 amalloy: technomancy: rebuilding my .emacs, and i can't figure out where to put the (setq slime-protocol-version 'ignore)

0:37 whether before or after my (require 'package) (package-initialize), i still get warnings about the version

0:38 hiredman: maybe in a hook on clojure-mode or slime-mode or whatever

0:42 ihodes: totally OT, but is there a config for irssi that allows you to monitor mentions; e.g. i'm awya for 5 hours, come back and a few people have messaged me and i see a highlighted 5 or something on my status bar?

0:46 pcavs: what's the proper way to union two dictionaries?

0:46 ihodes: merge

0:47 pcavs: $findfn {:key1 "val1"} {:key2 "val2"} {:key1 "val1 :key2 "val2"}

0:47 sexpbot: []

0:47 pcavs: thanks ihodes!

0:47 ihodes: pcavs: no problem :)

0:52 pcavs: I'm using leiningen and the swank leiningen plugin, I'm trying to read from standard in from the repl, is this possible? If so, what's the escape char to send EOF?

1:07 Tcepsa: pcavs: I believe this was established as being a bug in Ant. I think someone was going to tackle a workaround/fix/thing in Leiningen working with technomancy, but I am not sure whether anything has yet come of that.

1:07 pcavs: Short answer: I don't think that's possible.

1:07 pcavs: tcepsa: thanks for the info

1:07 tcepsa: (read-line) seems to work just fine from the repl through swank

1:08 Tcepsa: pcavs: But if you just want to send EOF, that should be Ctrl-d or Ctrl-f depending on whether you're using Linux or Windows (can't remember which is for which)

1:08 pcavs: sorry not through swank, but through the repl

1:08 Tcepsa: Oh! Maybe they got it fixed!

1:10 Ahh, okay, yeah, I got the impression that Leiningen used Ant for something related to the Swank REPL and so (read-line) doesn't work if you do lein repl or lein swank and then connect. (This is totally hearsay and I have not experienced or explored it)

1:10 ihodes: ant is a build-tool

1:11 (should't have anything to do with the repl)

1:11 and from memory working on the part that reads from the repl, it's not at all involved with that part

1:12 Tcepsa: ihodes: See the last question of the Leiningen FAQ, here: https://github.com/technomancy/leiningen

1:13 ihodes: Tcepsa: damn, i wonder what that's from. i'm going to look now haha. thanks for linking

1:14 Tcepsa: ihodes: No problem; I agree that it's totally non-intuitive. If you see a way around it, that'd be great! ^_^

1:15 And I'm off

1:24 landy: jjj

1:24 amalloy: pcavs: fwiw they're only called dictionaries in python. here they're maps or (sometimes) hashes

1:25 pcavs: amalloy: I'll keep that in mind, I've always used them interchangeably, probably angering the comp sci gods

1:42 Scriptor: it's funny how a hashmap isn't really like (map f coll)...except it is

1:51 replaca: dnolen: are you around this late?

1:51 ~seen dnolen

1:51 clojurebot: dnolen was last seen in #clojure, 481 minutes ago saying: ejackson: sounds like that's the plan.

2:21 replaca: are george jahad or technomancy around?

2:21 or am I all alone tonight?

2:21 :)

3:43 ^^: when im running lein swank, where would the current working directory be?

3:44 bsteuber: ^^: your project root

3:53 I wonder that's allowed as a nickname oO

4:10 clgv: In leiningen 1.5.2 I explicitely used :warn-on-reflection false and >none< of my files contains any (set! *warn-on-reflection* true) but I get a lot of reflection warnings - most of them are in third party libraries like incanter which I dont want to edit. does someone know a fix for this?

4:14 now I did set "(set! *warn-on-reflection* false)" at the first line of my Main.clj which is used as ":main" in project.clj and I still get all these warnings

4:20 bsteuber: clgv: because the dependencies are compiled before the first line of your namespace gets eval'ed

4:20 so no idea what to do

4:21 clgv: bsteuber: but the thing is that my dependencies didnt change and suddenly after doing a "lein clean" and "lein compile" this behavior emerged

4:21 bsteuber: probably ask the library maintainer to not set it to true in release code

4:22 guess it's done every time the library gets compiled

4:22 clgv: there was no call to "lein deps" and the files didnt change in binary as well since I added them to my git repository.

4:22 bsteuber: but when compiling a namespace, clojure will also compile all required ones

4:23 so the libraries will get compiled once, too

4:23 if they've been distrubuted as code

4:23 clgv: I had this stupid mass-warning about two months ago. then I somehow got rid of them without actively doing anything (no lein deps, nothing). now they show up again

4:24 bsteuber: yeah but they are always compiled. so the above observation does not make any sense :(

4:24 bsteuber: if you aot-compile a file requiring the lib

4:24 the lib will get compiled and the classes written out

4:25 and then not be compiled again until clean

4:25 but if you just call compile from swank, I guess the class files are not written

4:25 so it happens again and again

4:26 does that make any sense?

4:27 clgv: hm yes. so it seems to be some oddity with CCW. since CCW always showed these warnings.

4:27 bsteuber: "call compile" means slime-compile here

4:27 clgv: now I ran "lein compile"

4:27 the second time I ran "line compile" it had no warnings

4:27 and now CCW doesnt show any warnings as well

4:28 ok. I have to remember that ^^

4:28 bsteuber: so probably now ccw won't show the warnings anymore, either

4:28 clgv: yes. as written above ;)

4:28 bsteuber: but you probably still wanna ask the lib maintainer to remove the line when pushing to clojars

4:28 clgv: bsteuber: thx for the help :)

4:28 bsteuber: ah too slow :)

4:32 clgv: yeah but I'd have to figure out which dependency actually sets the warnings. there are quite a lot in my lib folder already ;)

4:35 bsteuber: if I didn't suck that bad at shell, I'd now give you a one-liner that greps all the jar contents ^^

4:36 amalloy: clgv: java.classpath currently sets that

4:37 clgv: amalloy: args! I am using that one. bad Stuart ;)

4:37 amalloy: indeed. it bit us a day or two ago as well

4:38 there's a patch in the works to remove the one offending line. should be released in the next few months :P

4:38 bsteuber: just for the sake of completeness - googling around gave me

4:38 for file in *.zip ; do if unzip -p $file | strings | grep searchstring > /dev/null ; then echo $file ; fi ; done

4:39 well replace zip by jar and searchstring by "*warn-on-reflection*"

4:39 amalloy: bsteuber: or just use zgrep :P

4:39 clgv: bsteuber: good find ;)

4:39 zgrep sounds even better^^

4:40 amalloy: hm. zgrep may not recognize jar files, absurd as that sounds

4:41 clgv: amalloy: hm yes it does not :/

4:42 bsteuber: and zgrep doesn't recognize -r on my machine, though it'S supposed to forward this to grep

4:42 amalloy: bsteuber: uh. -r on an archive file is unlikely to work out well

4:43 bsteuber: ic

4:43 amalloy: since zgrep is unzipping the file and passing them to grep via a pipe, there's no directories to recurse into

4:43 bsteuber: amalloy: by the way, I wanted to ask you about this flatland thing

4:44 is this some sort of startup, or just some hackers sharing code?

4:44 amalloy: bsteuber: ninjudd started it a week or two ago as a shared place for the devs at our company to put code that's not proprietary

4:44 since having it all under his name was kinda silly

4:45 bsteuber: i see

4:45 so you're also one of the lucky guys who can use clojure at their company

4:45 well me too :)

4:47 clgv: which companies do you two work for?

4:48 amalloy: geni

4:49 bsteuber: pandanet, some japanese server for playing go

4:50 * clgv is googling

4:50 amalloy: also: lucky? i moved to LA for the privilege

4:50 clgv: uh there are more hits to geni then I though. have to add LA ;)

4:52 amalloy: if you can't get foo.com as your website, your company probably shouldn't pick the name foo :P

4:52 clgv: hehe. got it ;) you are "the LA transplant from the Big Apple"? ;)

4:53 ejackson: amalloy: i think its to the point where all three letter domains are registered. Guess i'll have to be IBM2.com :)

4:54 * clgv just noticed he cant read japanese. but it looks funny ;)

4:55 amalloy: clgv: eh? what about the big apple?

4:55 ibdknox: amalloy: I think he was looking for you in this list: http://www.geni.com/corp/the-geni-team/

4:55 clgv: clgv: that was written on the staff page for one of the guys. so I guessed ;)

4:55 ibdknox: which you don't appear to be in

4:56 clgv: seems to be a wrong guess then

4:56 amalloy: ah. yes

4:56 clgv: i started a month ago

4:57 clgv: ok, so we need to wait a bit

4:57 ;)

4:57 ibdknox: amalloy: where were you before?

4:57 amalloy: san francisco

4:58 ibdknox: I meant more of who were you working for

4:58 amalloy: heh

4:58 www.hubpages.com

4:59 ibdknox: I see :)

5:02 amalloy: did you have any luck with the aichallenge stuff?

5:02 amalloy: ibdknox: i got your starter kit running. haven't tried changing anything yet

5:02 probably won't have time for a few days

5:03 juturna: How should you handle async access to resources like files in clojure?

5:03 ibdknox: cool, well if you do mess around with it some, I'd love to hear what you come up with

5:04 amalloy: juturna: reminds me of college, when i implemented an AI for CodeRuler, one of IBM's similar things

5:06 er

5:06 ibdknox: ^

5:06 juturna: I was really wondering how your AI reminded you of async file io in clojure

5:07 amalloy: juturna: depends what you want to do. async is pretty vague

5:07 not my fault some idiot put the I and J keys so close on this keyboard

5:07 juturna: well I want to access files from within transactions on N threads

5:08 Fossi: amalloy: your choice to use such an insane layout ;)

5:08 juturna: is there some way to treat a file the same way as a ref? If the file has been changed, retry the transaction?

5:08 would wrapping the file object in a ref do this?

5:08 * ibdknox googles coderuler

5:08 Fossi: although i have to admit the distance between i and j wasnt the biggest factor in switching to dvorak

5:08 juturna: but I guess that doesn't really make sense

5:08 Fossi: :D

5:10 ibdknox: juturna: you can use futures to generically do something asynchronously

5:11 that won't have any retry semantics though

5:13 amalloy: you probably want an agent

5:16 ibdknox: amalloy: how does that work though, since the thing changing is a file?

5:17 amalloy: ibdknox: it works great in what i'm pretending his use case is, which is appending to log files. he still hasn't said what he wants to do besides "access" the file

5:18 ibdknox: amalloy: ah, yes. changes work nicely, I was assuming he was trying to read the latest version of a file that is constantly changing

5:18 lol

5:18 clgv: what is the easiest way to remove the last "/" of a file path like "/home/bla/blubb/"?

5:18 ibdknox: juturna: better problem statement please :D

5:19 amalloy: if you have a file that's changing all the time and you need to read and write it deterministically across threads, you should be using a database, not a file

5:19 juturna: I have a serversocket accepting clients and spawning a fresh thread for each. The users are then prompted to log in, and each account is stored in a separate file

5:19 amalloy: (disclaimer: the above is an overstatement)

5:19 ibdknox: amalloy: lol

5:19 I agree

5:20 juturna: I know I COULD use a database, but I'm just trying to keep stuff simple and mess around with the language

5:20 and I know I COULD put them all in one file

5:20 ibdknox: juturna: what's the value in having them be separate?

5:20 amalloy: ibdknox: putting them together wouldn't really help his issue, would it?

5:21 ibdknox: I guess not

5:21 juturna: it's really just a matter of taste... I want to be able to quickly edit an account through a text editor

5:22 amalloy: juturna: and each user has the ability to affect any other user?

5:22 clojurebot: chouser: I really did wonder why you had all those photobombers on slide 2.... audio is so useful :)

5:22 amalloy: clojurebot: way to go on the phantom ping

5:22 clojurebot: llahna: anyway the answer is no. you can use #(some-fn %1 default-arg %2), for example

5:22 juturna: well if two users try to log in to the same account at the same time

5:22 then each thread would be trying to get to the same file

5:24 ibdknox: clgv: this will do it: (if (= \/ (last my-path)) (subs my-path 0 (dec (count my-path))) my-path)

5:25 clgv: though I'm pretty sure the java Path class has something for it too

5:25 clgv: ibdknox: I am doing it reverse now. I check whether it's not there and add it in that case, since I'll need it later anyway

5:27 ibdknox: I see

5:29 clgv: hmm I cant attach metadata to a string :/

5:31 ibdknox: alright guys, it's late. G'nite!

7:47 lnostdal-laptop: technomancy, https://github.com/technomancy/leiningen/issues/228 .. lein repl seems to work ok, but it still fails in lein swank here (last update to swank-clojure repo is from 24 june also i see)

7:49 bsteuber, does futures work for you now?

7:51 bsteuber: lnostdal-laptop: yes it does

7:51 lnostdal-laptop: hm

7:52 bsteuber: I installed swank-clojure as a plugin, so not sure if it updated the version

7:57 pyr: is it expected that when using lein repl, resources can't be accessed ?

7:57 bsteuber: lnostdal-laptop: oh you'e right, it still doesn't work

7:57 had some github lein version

8:00 lnostdal-laptop: "Leiningen 1.6.1 on Java 1.7.0 Java HotSpot(TM) 64-Bit Server VM" here .. from git .. it only works in the repl, yeah

8:02 bsteuber: ok so better downgrade to 1.5.2 until swank is fixed

8:04 matthias_: i'm using "Leiningen 1.5.0 on Java 1.6.0_22 OpenJDK 64-Bit Server VM

8:04 " is that bad?

8:13 lnostdal-laptop: matthias_, i think 1.6.0 is what broke calls to future, so 1.5 should be ok in that regard .. if that's what you mean

8:22 matthias_: i mean generally. i haven't been keeping up with it all... could be that everyone thinks my version is crap and are all really happy that they dont have to use it anymore and im still using it ;)

8:23 lnostdal-laptop: ok, well i guess doing `lein upgrade' would be a bad idea right now :)

8:23 since it'll upgrade to the very latest; not something in-between your 1.5.0 and 1.6.1

8:23 (or <=1.6.0)

8:24 matthias_: is it normal that my "uberjar" contains 8.7mb of clojure stuff? seems a little much :p

8:25 talios: thats uber!

8:25 lnostdal-laptop: yes, you should add some more java stuff to it; to balance things out .. heh :)

8:56 clgv: how can I read a resource file within a jar?

8:57 fliebel: clgv: I think there is some weird jar:/path/file syntax for that, or... some getResource call on the classpath thing. I can;t remember.

8:58 clgv: I tried FileReader and failed

8:59 fliebel: hm http://stackoverflow.com/questions/941754/how-to-get-a-path-to-a-resource-in-a-java-jar-file

9:00 cemerick: clgv: if you're trying to load from your current classpath, use the resource methods on Class, e.g. (.getResource clojure.lang.RT "/clojure/lang/PersistentVector.class")

9:03 clgv: fliebel: I already have the path. it's just the reading. I need some Reader that I can put into a PushbackReader

9:03 fliebel: cemerick: What has happened to the Clojure survey? Just busy, busy, busy? I don;t want to hurry you, but I *am* curious :)

9:04 cemerick: It's coming, I promise.

9:04 Yes, it's been a crushing, difficult past couple of weeks.

9:05 fliebel: clgv: Maybe getResourceAsStream combined with InputStreamReader?

9:06 clgv: fliebel: that could work

9:06 cemerick: clojure.java.io/reader will return a Reader from the URL

9:06 clgv: but it's a pity that it is not transparent between jar and non-jar

9:07 cemerick: oh ok. with clojure.java.io/reader I only need an URL and it wil be transparent between jar and non-jar?

9:07 cemerick: exactly

9:07 clgv: :)

9:10 great. just tested in-place with debug-repl

9:15 pyr: so, yeah, apparently resources are not accessible from a repl inside a project

9:22 clgv: pyr: what exactly do you mean? I access clj-resource files from repl with two different modes: (1) via use (2) via reader

9:24 pyr: I have files in resources/

9:25 clgv: yeah thats where I have them as well

9:25 pyr: Via reader I have to specify an absolute path

9:25 i.e, I can't do (reader "somefile")

9:26 clgv: you can use clojure.java.io to get an URL with only specifying the relative path within "resources"

9:26 pyr: 'k

9:26 clgv: oh the function is called "resource"

9:27 pyr: you're right

9:28 lpetit: hello

9:28 pyr: clgv: resource it is!

9:28 lpetit: Just to let you know that CCW 0.3.0 is out. Only one change since 0.2.0, but an important one : perf. improvement of the source code editor for medium to large files

9:28 clgv: pyr: and 'reader when you actually want to read it

9:29 peteriserins: Is there a limitation of 1000 related to something around pmap, doseq or the like?

9:29 clgv: lpetit: great^^

9:29 pyr: clgv: yes that part I got :)

9:30 peteriserins: My program after refactoring with pmap updates exactly 1000 entries of a database.

9:30 dnolen_: lpetit: nice

9:32 lpetit: And I've also some interesting stats: ccw version 0.2.1 (just prior to this one) has generated 1718 downloads.

9:32 clgv: lpetit: count me 4 times ;)

9:32 lpetit: clgv: yes, probably to be cut by 2 or 3 at least

9:33 clgv: lpetit: I have it on 2 working pcs on is dual boot and my laptop ;)

9:33 cemerick: lpetit: the revenge of parsley is here?! :-D

9:33 lpetit: cemerick: yep :)

9:35 Next step: remove antlr which is still used for syntax coloration :-D

9:36 Correction: for lexical coloration. Removing antlr will also result in having syntax coloration (eg correct coloration of #(comments) for example )

9:45 clgv: lpetit: also correct coloration of local names that are equal to clojure.core names?

9:46 lpetit: clgv: this would not be just syntax coloration, but rather semantic coloration. Definitely a must have, but probably not at the same time of the antlr removal.

9:47 clgv: and to be honest, there's something into having local names coloration equal to clojure.core names. Like a gentle way to warn you that you're shadowing things :)

9:47 clgv: I have a bash script that wraps my call to a jar with rlwrap. I forward parameter with "$*" the problem is that filenames with spaces become separate argument through that. any idea how I can fix this?

9:49 lpetit: but there are some quite common names that are already taken by core. e.g. "name" ;)

9:49 lpetit: clgv: quite true.

9:50 clgv: lpetit: I wont shadow it, if I needed the core function ;)

9:50 peteriserins: I pull 2k entries from a database, pmap parse them, then doseq put the results in the database. It only updates 1000 entries. Where could the problem arise?

10:01 StrangeLoopy: Hi everyone. I'm kind of new to clojure, but I've been really enjoying the libraries. One thing I found very useful is to wrap a lazy-xml/parse-trim output in a zipper. My question is, once all the modifications and filters have occured, is there an idiomatic way to print back to xml? xml/emit or prxml don't work with the lazy version.

10:06 chouser: lazy-xml has an emit that ought to work

10:07 StrangeLoopy: Hmm. I'll give that a look.

10:08 By the way, I love your book "The Joy of Clojure."

10:09 chouser: Thanks, that's very kind of you!

10:10 Fossi: ah, another thing to finally put on my amazon list

10:13 StrangeLoopy: The clojure aphorisms tie everything together. The whole thing is very zen. e.g. "Awkwardness is good. It is a sign that the developer is straying from the path of clojure enlightenment."

10:14 chouser: Well, you should thank Fogus not me for any such nice turns of phrasing.

10:15 Also, anything to do with vocabulary, organiztion, philosophy, or literary references. :-)

10:17 StrangeLoopy: I'll be sure to do that. I know I've been using a ton of code that you authored though, so I'll thank you for that.

10:18 I guess a ton of code in clojure is not very many lines, but that's one of the plus sides. Lots of functionality with little bulk.

10:19 :)

10:19 chouser: :-)

10:19 I'm in the process of reorganizing lazy-xml and getting it ready for Clojure 1.3

10:20 StrangeLoopy: What is going to change?

10:21 And is 1.3 going to be the release that sees the par branch hit main once open-jdk 7 is released?

10:21 chouser: The underlying concepts will be the same. The function names may change a bit, the api cleaned up, the deps will be managed better, the algorithms will be lazier.

10:21 prxml may be better integrated

10:22 I think 1.3 is in beta with no par work that I'm aware of, so I'd have to guess no.

10:27 StrangeLoopy: Thanks for the info. Back to reading your book for a while.

10:51 pyr: so if I get things correctly

10:52 in clojure 1.3, clojure.contrib.logging is clojure.tools.logging and clojure.contrib.json is clojure.data.json, right ?

10:53 fliebel: pyr: sounds reasonable.

10:54 I also heard you can substitute contrib with amalloy-utils, but I've never tried that. :P

11:18 dnolen: StrangeLoopy: there's nothing stopping an enthusiastic contributor from releasing a parallel collection library for contrib :)

11:23 StrangeLoopy: Rich Hickey's github has a good start with his par branch. I might poke around there.

11:24 chouser: dnolen, StrangeLoopy: hasn't there been some work on par (for example as discussed at the 2010 Conj) that isn't realeased anywhere?

11:25 fliebel: What is par about?

11:28 StrangeLoopy: chouser, dnolen: The only place I've seen par is on rich's github. Do you have a video link for the 2010 conj? fliebel: In my limited viewing, par is an abstraction library for running parallel computation for list comprehension. For instance, pmap, pfilter, and preduce use a queing algorithm to distribute the work to different threads automatically. pvmap pvfilter and pvreduce use a divide

11:28 and conquer distribution thats better for larger collections.

11:29 fliebel: ah, the forkjoin stuff. want! want!

11:31 StrangeLoopy: My impression is that the convenience something like dosync offers for concurrency over locks is much like what the par collection functions would offer over making your own threads, using a java ThreadBufferQueue or whatever their optimized work queue is, etc.

11:32 jcromartie: Is there any support in ClojureQL for "like"?

11:41 StrangeLoopy: What is the point of like other than pattern matching fields?

11:42 You can use clojure lang predicates to pattern match fields directly in select.

11:47 This is just a cursory glance, but something like (select (table :yourtable) where (empty? (re-matches #"pattern" :yourfield)))

11:48 parentheses should have gone around the entire where ^^

11:52 replaca: dnolen: you still here?

11:53 dnolen: replaca: yup

11:54 replaca: dnolen: I've been setting up autodoc for the new clojure contrib libs & I wanted to see what you want to do about core.logic

11:54 I see that you're already building out gh-pages

11:54 which is where autodoc usually goes

11:55 (though I'm sure we can figure out how to have both your stuff and the autodoc stuff in there if you want)

11:55 I just wanted to get your read on how you'd like to proceed there

11:56 no hurry, either, I just noticed it over the weekend

11:58 dnolen: replaca: ah, hmm ... yeah need to think about that. I might just remove the current gh-pages since I don't really have time to build that out at the moment. But gh-pages for docs will also be said since core.logic has no inline docs at all.

11:58 replaca: hah! :)

11:59 dnolen: the idea is to have a autodoc repository for each lib and then a global index for clojure and all the contrib libraries

11:59 but, of course, we need docstrings

12:00 in any case, give it some thought

12:00 * hugod wishes for an autodoc release that didn't depend on clojure-1.1.0-master-SNAPSHOT

12:01 replaca: hugod: it's coming. I haven't had much time for it, but I'm trying to make some now

12:02 dnolen: replaca: yeah, probably won't add docstrings until I get this optimization stuff sorted out, but it will happen eventually.

12:02 replaca: there's a long backlog of autodoc stuff that I need to get to

12:02 dnolen: cool. just keep me posted and I can turn it on when you're ready

12:03 technomancy: autodoc is an eval-in-leiningen project anyway, so it shouldn't be declaring *any* dependencies

12:03 replaca: technomancy: yes, but it's also a standalone project, so it needs to have the clojure dependency

12:03 hugod: technomancy: not even for use outside lein?

12:04 replaca: I need to separate the lein plug-in from the regular autodoc

12:04 technomancy: in the latest standalone autodoc I started using the leiningen maven jar collection stuff as a library

12:05 but lein isn't on clojars or central in a recent version, so that's a little problematic

12:06 do you want to make tht type of use available or is it ok if I copy the deps code over to autodoc (or some other option)?

12:07 technomancy: replaca: leiningen is an application rather than a library, so making it available as a dependency opens up a whole new can of worms I'm not sure I'm ready to do

12:08 what do you mean by "jar collection"?

12:08 replaca: technomancy: but it's got so much useful stuff! :)

12:09 When autodoc is run standalone, I now allow you to set dependencies in a similar way to what lein allows in the defproject

12:09 (autodoc has its own parameter file format)

12:10 I don't copy the libs, but reference them straight from ~/.m2

12:10 dince you already had code to figure all that out, do dependency update, etc., I just call that and it's super-simple

12:11 technomancy: I'm not sure I understand. you want to run autodoc on a project that doesn't use leiningen, but still uses leiningen's dependency notation?

12:11 replaca: more or less, yes

12:12 technomancy: sounds really ... hypothetical.

12:12 replaca: excpet that I'm doing it now and it's great

12:12 hiredman: sounds like the kind of thing cemerick may want to do

12:12 replaca: problem is that I have to build a version of lein locally and install it

12:12 technomancy: so you have to repeat your dependencies in two places?

12:12 hiredman: since he prefers to use build systems with an ecosystem

12:13 cemerick: hiredman: well played :-)

12:13 replaca: well, for programs like the contrib libraries, this makes things easier for me cause I don't have to parse every way that deps could be referenced

12:13 I just have my own

12:14 technomancy: shouldn't it read the pom? that's the canonical dependency list.

12:14 hiredman: cemerick: huzzah

12:14 cemerick: "I don't always use build systems. But when I do, I prefer to use one with an ecosystem."

12:14 replaca: yeah, but I'd still need to act on that info

12:15 so it doesn't matter too much how I spcify it, I need to be able to do something with it

12:15 (i.e. get the deps, figure out the jar paths and add them to my classpath)

12:15 so it's not the syntax, it's the semantics

12:16 technomancy: oh... and since clojure-maven-plugin is mostly written in java you would rather avoid going that route?

12:16 cemerick: The application/library divide is tricky. I understand where replaca is coming from, but thanks to different circumstances.

12:16 hugod: replaca sounds like you need a maven plugin…

12:16 replaca: hugod: not for what I'm doing here

12:16 I'm actually outsde the project looking at it, not inside the project building it

12:17 hugod: although in general, a maven plugin would be good for autodoc

12:17 hugod: iiuc you want the project dependencies, which maven can pass to a plugin

12:17 replaca: I *know* the dependencies, I just want maven to get them for me

12:17 hugod: clojure-maven-plugin has a goal for autodoc

12:18 it can pass the resolved dependencies

12:18 replaca: technomancy has already written a bunch of great code to do this so it's a one line call to get the jars fetched and expanded

12:18 technomancy: replaca: probably best to copy it now; I'll consider factoring out library vs application in the next version.

12:19 replaca: hugod: right, but I'm not running maven here

12:19 technomancy: cool, thanks. So long as that's OK with you.

12:20 technomancy: I think that's a useful set of stuff for lots of different tools that might want to think about using maven to manage jars that they may be using in different ways

12:21 technomancy: 2nd question: Have you and George though about integrating swank-cdt into lein jack-in in a way that doesn't require modding the project.clj?

12:22 technomancy: replaca: well in the next version it'll all be done using aether rather than maven, which is all about separating the library from the application

12:22 replaca: technomancy: oh, that sounds nine

12:22 *nice

12:22 technomancy: replaca: I definitely want to make it easier to piggy-back elisp code from swank and other jars into the Emacs process.

12:23 right now it only works with slime and slime-repl, but it should be easy to make it pluggable for other things like slamhound and cdt

12:24 replaca: technomancy: yeah, mostly you just want an option to clojure-jack-in that tells lein jack-in to set the right jvm args (and probably do the classpath stuff for tools.jar since that looks broken in 1.3 beta1)

12:25 technomancy: replaca: oh, stuff for the lein launch, not elisp. yeah you could setenv JVM_OPTS I suppose

12:25 open to suggestions on that front

12:26 replaca: technomancy: well, it depends how "native" you want CDT to be in this.

12:26 technomancy: a solution where lein just "knew" what args to set for debug would be easy for folks

12:27 then lein jack-in debug

12:27 or something

12:27 technomancy: maybe the prefix arg or something; not a bad idea

12:27 replaca: yeah, or another entry point: clojure-jack-in-debug

12:27 doesn't matter too much

12:28 (at least to me)

12:28 technomancy: good call. open a clojure-mode issue?

12:28 replaca: will do

12:28 I think I'll see George tonight too, so I'll talk to him about it

12:29 technomancy: thx

13:16 sritchie: does anyone here use midje?

13:19 mids: sritchie: gave it a try but fell back on clojure.test

13:20 amalloy: fliebel: amalloy-utils is a drop-in replacement for contrib, provided you don't mind that all your code stops working

13:21 fliebel: amalloy: Doesn't it contain all the answers to "does clojure have a function that does X"?

13:21 amalloy: I swear someone told me he replaced contrib with amalloy-utils and claimed it works.

13:21 amalloy: *chuckle*

13:22 clgv: how do I do something like (assoc-in data [:a last :b] value)?

13:22 fliebel: But as I said, I did not try it myself. I don;t want to spoil the magic.

13:22 clgv: is there such a shortcut for vectors?

13:22 fliebel: clgv: So you have a map in a vector in a map?

13:23 clgv: yes sir

13:23 mids: (-> x :a last :b)

13:24 clgv: but I need assoc-in^^

13:24 fliebel: (assoc-in data [:a (count (:a data)) :b] value)

13:24 clgv: fliebel: thats ugly ;)

13:24 it's even more ugly since the "data" is an atom ;)

13:25 * mids just learned to read

13:25 fliebel: clgv: well, yea.

13:25 pauldoo: how do I know which version of (the same) function to use when it's available from two different contrib places? (e.g read-lines from c.c.duck-streams or c.c.io)

13:25 amalloy: (update-in x [:a] #(assoc-in % [(count %) :b] value)) is the best you can do, i think

13:25 pauldoo: in this case read-lines has exactly the same implementation, so I suspect one is deprecated, but I can't tell which

13:26 clgv: amalloy: I'll write a helper defn then... ;)

13:26 joegallo: pauldoo: http://clojure.github.com/clojure-contrib/#duck-streams

13:26 says it's deprecated since clojure-contrib 1.2

13:26 amalloy: they're both deprecated, use ##(doc line-seq)

13:26 sexpbot: ⟹ "([rdr]); Returns the lines of text from rdr as a lazy sequence of strings. rdr must implement java.io.BufferedReader."

13:26 joegallo: not on the function individually, but on the namespace

13:27 pauldoo: amalloy: so this answer is incorrect? http://stackoverflow.com/questions/6613470/using-line-seq-with-reader-when-is-the-file-closed/6613685#6613685

13:27 fliebel: ctrl+r has ceased to show the command history for cake. What provides that? Am I silently switched to JLine?

13:28 amalloy: fliebel: ruby readline. cake's terminal i/o is mostly in ruby, so i doubt it's jline

13:30 fliebel: amalloy: Hm, okay, so any gem command I need to run?

13:31 amalloy: beats me, i'm afraid

13:34 fliebel: I installed rb-readline but it doesn't work. My cake experience has been troubled recently.

13:36 bsod1: what should I add to my project.clj to be able to use clojure.contrib?

13:37 StrangeLoopy: Hey joegallo

13:37 Keithwyss here.

13:37 joegallo: Seriously?

13:37 StrangeLoopy: Yessir.

13:37 joegallo: WOW.

13:37 What brings you to clojure?

13:37 Also, let's move this over into a private chat.

13:37 StrangeLoopy: It's the best language to handle changes to multicore in hardware imho.

13:39 amalloy: pauldoo: read-lines is necessarily side-effecty and unpredictable. what if someone decides to (take 20) on the line seq? the file never gets closed

13:39 instead, you're encouraged to structure your code so that with-open will work, rather than just passing around an open file handle everywhere

13:40 eg, by moving all the work inside of a constrained scope, or calling (doall) on the sequence if you don't mind having it all in memory at once

13:41 bsod1: what should I add to my project.clj to be able to use clojure.contrib?

13:41 amalloy: :dependencies [[clojure-contrib "1.2.0"]]

13:54 dnolen: cemerick: that chart looks a lot better now :)

13:54 amalloy: cemerick: charts! that reminds me: did i miss the results of the survey?

13:54 dnolen: I meant flowchat

13:54 cemerick: dnolen: yeah, once I pulled my head out of the interop chapter I was building it for, it improved significantly. It's now the basis for an appendix.

13:55 pauldoo: amalloy, joegallo: it's a shame clojuredocs.org doesn't show them as deprecated

13:55 cemerick: amalloy: No, I've been flailing. :-( Coming, honest, really, for serious.

13:56 dnolen: cemerick: make that type fit in those diamonds.

13:56 cemerick: dnolen: It's fine for the blog. O'Reilly's illustrators will make it print-worthy.

13:57 dnolen: cemerick: I think it's really useful for people book aside - make that type fit in those diamonds. That should be on the dev.clojure.

13:58 pauldoo: hm - interesting that clojure.contrib.io isn't marked as deprecated, only duck-streams

14:01 grr - more deprecated fun.. join, where the docs don't say what to use instead... http://clojuredocs.org/clojure_contrib/clojure.contrib.string/join

14:02 mids: pauldoo: clojure.string/join

14:03 dnolen: pauldoo: any contrib not visible on http://github.com/clojure is deprecated.

14:05 cemerick: dnolen: fair enough, text fixed

14:09 dnolen: cemerick+

14:10 oops, cemerick: cool! that's a great resource.

14:10 cemerick: dnolen: Thanks for the early feedback. :-)

14:13 pauldoo: hm - is there a util to take two sequences [1 2 3] [4 5 6] and produce [[1 4] [2 5] [3 6]] ?

14:14 edw: Whoa! My copy of the Dylan reference manual is worth $200, if the CLojure Bookshelf page on Amazon.com is any indication.

14:16 pauldoo: aha - (map vector .. )

14:23 bsteuber: ,(assoc {})

14:23 clojurebot: java.lang.IllegalArgumentException: Wrong number of args (1) passed to: core$assoc

14:23 bsteuber: ,(apply assoc {} [])

14:23 clojurebot: java.lang.IllegalArgumentException: Wrong number of args (1) passed to: core$assoc

14:23 edw: ,(assoc {:a 42} :b 13)

14:23 clojurebot: {:b 13, :a 42}

14:24 bsteuber: this violates the principle of least surprise, doesn't it?

14:24 edw: How so?

14:25 bsteuber: because I might want to write something like (apply assoc {:foo 1} args)

14:25 of course I can still do

14:25 (into {:foo 1} (partition 2 args))

14:26 but in a language where (+) works, I don't think (assoc {}) should break

14:26 so I wonder if I should file an issue

14:26 edw: ,(let [foo []] (and (seq foo) (apply assoc {:a 42} foo)))

14:26 clojurebot: nil

14:27 edw: Yeah, I can see how (assoc {...}) might be handy.

14:28 fliebel: I agree. I remember some other function got this functionality as well recently. Like comp, I think.

14:28 &(comp)

14:28 sexpbot: java.lang.IllegalArgumentException: Wrong number of args (0) passed to: core$comp

14:29 bsteuber: ,(clojure-version)

14:29 clojurebot: "1.2.0"

14:29 edw: Huh, ASSOC works with vectors too...

14:29 bsteuber: yes

14:29 dnolen: http://outputstream.io/dear-scalasphere-why-arent-we-talking-more-ab

14:30 ^ STM vs. Actors from Scala perspective

14:30 edw: Where's the URL shortener bot when you need it?

14:30 bsteuber: fliebel: indeed, (comp) works in 1.3

14:30 then I'll report it and write a patch

14:30 edw: Congrats, nathanmarz, btw.

14:32 fliebel: edw: What is he to be congratulated for that I'm unaware of?

14:32 edw: Backtype was acquired by Twitter.

14:32 nathanmarz: edw: thanks

14:33 edw: Hope your experience goes way better than eBay's acquisition of Half.com.

14:33 fliebel: Oh, dunno if that's a good thing, but, congratulations.

14:35 nathanmarz: I hope Twitter is not going to make you rewrite your stuff in Scala, like those classic acquisitions with Clisp and such.

14:35 ejackson: fliebel: a liquidity event is *always* a good thing :)

14:35 you were the one wanting to fly in private jets not so long ago :D

14:36 fliebel: ejackson: Care to explain? I know to little about these things. What do private jets have to do with it?

14:36 edw: ejackson: Remember that Twitter's still privately held, and we have no idea what how the deal was structured, and that nathanmarz quite possibly is not eager to discuss these things.

14:36 ejackson: edw: of course, I'm not suggesting he does. I surely wouldn't.

14:37 fliebel: aquisition :: [ramen noodles] -> $$$

14:38 in the general case

14:38 edw: ejackson: I hope you didn't think I was suggesting that you were suggesting that. ;)

14:38 ejackson: edw: oh NO !!! its turtles all the way down again. I hate it when that happens :

14:40 fliebel: ejackson: Turtles? I don't understand you... If some sources wouldn;t have told me otherwise, I;d have said you where american.

14:40 edw: fliebel: You seriously don't know what he's talking about?

14:40 ejackson: fliebel: its worse, I'm Zimbabwean by way of South Africa. However, I did *marry* an American.

14:41 fliebel: edw: I get the noodles -> $$$ now, but not the turtles.

14:41 ejackson: fliebel: oh its a reference: http://en.wikipedia.org/wiki/Turtles_all_the_way_down

14:42 edw: (That's my Fb religion, btw: "Turtles all the way down")

14:43 ejackson: lol

14:43 fliebel: btw, if $$$ would stop me from writing NoSQL databases in Clojure, I'd prefer noodles ;)

14:44 ejackson: yummm.... noodles.

14:45 technomancy: oh man I am totally having shin ramun for lunch now

14:48 * fliebel is thinking about private jets

14:49 hugod: how do you call a protected static method of a base class from a gen-class method implementation function?

14:50 ejackson: hugod: i don't think you can

14:50 i've had to got through and make those suckers public in the past

14:50 hugod: mm, so reflection it is…

14:50 I have no control over the base class

14:51 ejackson: bummer

14:57 edw: technomancy: Shin ramun?

14:58 technomancy: ramyun I guess: http://en.wikipedia.org/wiki/Shin_Ramyun

14:59 hell of spicy

15:00 edw: Ah.

15:01 With two eggs (egg drop style), I could eat those indefinitely.

15:01 technomancy: my mouth is already begging for mercy

15:02 zerokarmaleft: with kimchi is the only way to eat it

15:03 technomancy: oh! I think I have some kimchi in the back of my fridge

15:04 hiredman: pretty sure you would know that for a fact

15:04 dnolen: zerokarmaleft: I agree.

15:05 even better than shin ramyun w/ kimchee is some properly extra spicy kimchee chigae.

15:06 ejackson: hiredman: i dunno, the best kimchi can just decide to leave on its own accord. Ain't nothing in the fridge gonna stand up to it.

15:06 Mosterd: What is wrong with my arities? The look completely different. http://pastebin.com/dFJXRLnc

15:06 zerokarmaleft: dnolen: touche

15:07 bsteuber: Mosterd: two of your cases define one-argument functions

15:07 hiredman: Mosterd: the last two are both arity 1

15:08 bsteuber: with different destructuring

15:08 but that doesn't count :)

15:08 zerokarmaleft: though you might as well go for a home-cooked korean meal at that point

15:09 Mosterd: I just noticed my first one doesn't pattern match a list.

15:10 It seems to work when I change it to [[]].

15:10 dnolen: Mosterd: destructuring is not pattern matching.

15:10 Mosterd: Or it just prints a different error.

15:13 ejackson: welcome, man of the moment !

15:13 Mosterd: Should I use the length function instead of trying to destructure a list?

15:19 I could abuse the apply function.

15:22 lnostdal-laptop: on vacation .. still reading clojure; http://goo.gl/VJTRg ... :)

15:22 timvisher: lnostdal-laptop: my kind of vacation! :)

15:27 dnolen: Mosterd: Clojure doesn't have pattern matching, you'll probably want to use cond.

15:30 lnostdal-laptop: timvisher, ^^

15:30 Mosterd: dnolen: I got it to work using if. Somehow I thought clojure would support pattern matching.

15:30 But it's still a great language.

15:40 dnolen: Mosterd: rhickey is not a fan of current pattern matching implementations. I've done some work towards fixing that but it's a long term project.

15:41 fliebel: dnolen: What doe he have against them?

15:41 dnolen: fliebel: clause order limitation.

15:42 fliebel: dnolen: Ah, hi predicate dispatch.

15:42 dnolen: fliebel: yup

15:49 Mosterd: dnolen: I don't understand what you mean by clause order limitation means, but I think that pattern matching would be a great addition.

16:00 dnolen: Mosterd: clause order matters in pattern matching.

16:01 Mosterd: pattern matching is also often implemented to only allow a closed set.

16:02 Mosterd: Pure Prolog is a more interesting model to strive for.

16:03 jsnikeris: I've just setup a hello-world webapp w/ leiningen/ring/compojure/enlive. The Content-Type response headers are indicating a charset of iso-8859-1, but I'd rather have them be UTF-8. What would be the preferred way to fix this? I'm not sure where on the stack, the default charset is being decided.

16:06 Mosterd: But when using cond clause order matters as well?

16:06 dnolen: Mosterd: of course, cond is precisely what you don't want - it's a fixed order and closed.

16:10 Mosterd: I think I don't really understand the disadvantages.

16:12 prolog would require returning multiple values

16:12 amalloy: jsnikeris: someone was asking this in here just a few days ago. i'll see if i can find the log

16:13 jsnikeris: amalloy:Thanks. I've been reading lots of threads about it, but I'm not really seeing a definitive answer

16:14 amalloy: jsnikeris: discussion starts at roughly http://clojure-log.n01se.net/date/2011-07-05.html#00:09

16:15 jsnikeris: amalloy: thanks as always :)

16:18 amalloy: amalloy: too many pronouns. none of those "it"s are clearly bound

16:18 :)

16:22 dnolen: Mosterd: you can't extend pattern matching after the fact. disadvantage. You have to be very careful about order. disadvantage.

16:25 Mosterd: yes Prolog would return multiple values, but that's not necessary.

16:26 what I'm talking about would have an implied once.

16:28 nathanmarz: fliebel: we're going to continue using clojure

16:29 fliebel: nathanmarz: Wee :)

16:31 Mosterd: dnolen: thanks

16:33 dnolen: Mosterd: some thoughts/examples on the matter here, https://github.com/swannodette/match/wiki/Crazy-Ideas

16:34 Mosterd: I'd like to support local matching as well as matching across fns.

16:35 Mosterd: I'd like the generality of multimethods but the perf from OCaml/SML/Haskell pattern matching compilation

16:41 ibdknox: anyone in here messed with Noir?

16:47 Mosterd: dnolen: Okay, so pattern matching won't be there for a while because you are working on a better idea.

16:48 dnolen: Mosterd: there's already pattern matching libs for Clojure. I'm working on a better idea that I plan on submitting as a contrib lib. Even so I don't think it'll make core anytime soon.

18:16 chuck: Hi all! I've got a question about Clojure web development

18:16 With the hacker news code, there's some sort of REPL that can be used to modify the server's running code to change how the site functions while the server is still running

18:16 Is this possible somehow with clojure/compojure?

18:19 sritchie: hey all -- I see the following in the midje code: (defmacro facts [& forms] (with-meta `(fact ~@forms) (meta &form)))

18:19 can anyone explain what &form means, here?

18:20 ah, got it: http://blog.jayfields.com/2011/02/clojure-and.html

18:23 technomancy: chuck: definitely possible; usually done by running the server out of swank or embedding a swank server in your application. but a raw socket-repl can be used if you don't like slime.

19:00 amalloy: technomancy: if i (setq slime-net-coding-system 'utf-8-unix), should slime/swank be able to handle any unicode character?

19:00 i'm fiddling around with stuff like using ∘ as a shortcut to comp

19:00 hiredman: amalloy: you also need to set the jvm to use utf8 as a file encoding

19:01 or as the default

19:01 technomancy: I think M-x clojure-jack-in with the latest slime should get you unicode across the board

19:01 with raw slime that setq should do the trick though

19:02 * technomancy mumbles something about CL and the 80s.

19:03 amalloy: hiredman: as a file encoding? i'm not even asking clojure to compile a file (yet); i'm just sending it a character over the slime tunnel

19:03 technomancy: doesn't seem to. slime-eval-region with just ∘ highlighted sends slime into a black hole until i slime-disconnect

19:04 hiredman: amalloy: file.encoding is used as the default for all streams I believe

19:04 technomancy: hm; I may have been mislead

19:04 misled?

19:05 works here

19:05 amalloy: hiredman: i see. (System/getProperty "file.encoding") is already "UTF-8"

19:05 hiredman: hmmm

19:06 https://gist.github.com/1070768 is what I have for emacs

19:07 amalloy: technomancy: what's the magic words to install the swank plugin for lein these days?

19:07 technomancy: lein plugin install swank-clojure 1.4.0-SNAPSHOT

19:09 amalloy: technomancy: thanks. looks like a cake bug (ninjudd!)

19:09 works fine in lein

19:33 jonabbey: /?

19:33 clojurebot: :negative/num-1 + :positive/num-1 = :zero/zero

19:36 keithwyss: Hello everyone. Quick question. If I open a java.io.File(".") in a leiningen project, say in src/myproject/myproject.core, where does the . point to?

19:38 technomancy: keithwyss: should be the project root

19:38 amalloy: ,(.getAbsolutePath (java.io.File. "."))

19:38 clojurebot: java.security.AccessControlException: access denied (java.util.PropertyPermission user.dir read)

19:39 amalloy: keithwyss: try the above yourself and see

19:39 keithwyss: Thanks.

19:48 Great. The root it was. Once I wrap everything in an uberjar, I don't see prints though. Do those get redirected to some other stream? Do I have to use the test folder for stuff like this?

21:00 tauntaun: set beep_msg_level hilight msgs dccmsgs

21:11 gmtreacy: hello all, does anyone know why a println would be suppressed when it is called indirectly?

21:12 (defn improve [guess x]

21:12 (println "guess: " guess " x: " x)

21:12 (average (square guess) (/ x guess))

21:12 that works but if i try to run a function that calls improve, the print does not show up in the repl output. I am using clojurebox

21:50 technomancy: http://clojure.org/getting_started -> (. javax.swing.JOptionPane (showMessageDialog nil "Hello World")) ; what is this I don't even

21:54 that whole page is a facepalm really

21:56 * dnolen_ doesn't understand the Getting Started hate at all

21:57 danlarkin: dnolen and abedra and like the only two voices of reason on the ML

21:57 it must be difficult

21:57 technomancy: jswat and yourkit are not "getting started" topics

21:58 why is asm mentioned at the top?

21:59 dnolen_: technomancy: because some Java folks want to know what's in the jar. nothing weird about that.

22:00 technomancy: I posit that less than 1% of developers in the history of clojure have cared about asm on their first day of using Clojure.

22:00 danlarkin: position seconded!

22:01 dnolen_: when I first used Clojure near 3 years ago, I was like HELLS YES, I download a jar and it works! time to start < 30s.

22:02 no effin make file, no global install, no C deps, no ... etc

22:02 technomancy: when I started the readme didn't even have working build instructions.

22:03 scgilardi: dnolen_: yeah, that was pretty darn cool. and then delving into clojure.clj and reading and learning the bootstrap. very sweet.

22:06 cemerick: Wow, I hadn't looked at the ML in a number of days. Seems swampy.

22:06 technomancy: cemerick: yeah......skip it

22:07 scgilardi: getting-started could definitely use some updating. one can, however, download the zip file from the "downloads" like at the upper right and then read the readme in it to get into a repl.

22:07 technomancy: a repl without readline is hardly a repl

22:07 scgilardi: not true

22:07 cemerick: technomancy: Yeah. I should definitely do that. Maybe just one message…

22:07 * cemerick loses an hour

22:09 dnolen_: I mean if you look at Ruby / Python Getting Started they're hardly any better. It's just that some unbelievably selfless person(s) has created a pre-package binary for their platform so you don't have to read Getting Started for those langs. Where are those people for Clojure I ask? Where?!

22:10 Hey somebody forgot to add "brew install node" to the Node.js getting started page?!

22:12 technomancy: dnolen_: the second code sample on getting started on clojure.org has deprecated dot notation

22:14 dnolen_: technomancy: since when was that deprecated? (I missed this if so)

22:17 scgilardi: I had recalled deprecated as well, but this is all I can find currently: java interop mentions this: "The member access forms given at the top of this section are preferred [over a form beginning with .] for use in all cases other than in macros."

22:17 technomancy: it's only kept around for use from within macros

22:17 scgilardi: so it's at leas showing a non-preferred form (that's harder to read than the preferred alternative)

22:19 dnolen_: technomancy: well the better update this then too http://clojure.org/java_interop

22:19 doesn't seem deprecated to me.

22:25 technomancy: I know it's been mentioned in here by either rich or stu H

22:29 duck1123: What's the best way to read in some config information for my app? Previously, I had a namespaced file that contained some settings, but I want to get this out of my src tree

22:30 I could read a pushbackreader from the file, but is there a better option?

22:30 alternately, I could look into something like yaml, but clojure is the superior syntax IMO

22:31 technomancy: duck1123: (comp read-string slurp) maybe

22:33 duck1123: oh nice, that is a bit shorter than what I had

22:33 but is that my best bet for the equivalent of a config/database.yml ?

22:45 cemerick: duck1123: stick a map literal in a file, use what technomancy provided, and you're done :-)

22:45 assuming the values are literals and you're not looking to eval things

22:47 duck1123: Thanks. That's what I'm doing. I just wanted to make sure I wasn't missing anything cool

22:48 cemerick: duck1123: dude, that's not cool enough for you? ;-)

22:49 duck1123: well, at the time I didn't know about read-string

22:49 and the alternative felt dirty

23:02 sritchie: hey all - does any function like this exist? https://gist.github.com/1071033

23:03 I was looking for a way to compose predicates, to see if any match

23:16 cemerick: sritchie: every-pred

23:17 ,((every-pred number? odd?) 3 9 11)

23:17 clojurebot: java.lang.Exception: Unable to resolve symbol: every-pred in this context

23:17 cemerick: hah, 1.3-only

23:17 clojurebot: you're a luddite

23:17 clojurebot: Excuse me?

23:17 sritchie: ah, got it

23:18 time to upgrade!

23:18 duck1123: get with the picture, clojurebot

23:18 sritchie: and some-pred, or some-fn?

23:18 cemerick: sritchie: or just copy/paste into a private ns until you do

23:19 sritchie: some-fn, yes

23:38 Yamazaki-kun: Are clojure.test deftests supposed to just work with Enclojure?

23:39 The test options in the GUI claim no tests run. Works fine with lein test.

23:42 technomancy: heeeeeeeeroku: http://deep-snow-641.herokuapp.com/

23:47 Yamazaki-kun: hm. have to show up to a Seajure meeting one of these days. Problem is I'm never in Seattle on a Thursday night.

23:51 hugod: technomancy: :) is that up on the seajure github yet?

23:56 does it suffer GAE like startup latency?

Logging service provided by n01se.net