#clojure logs

2010-09-09

00:11BahmanHi all!
00:12bmhHi Bahman!
00:12BahmanHello bmh!
00:12bmhYou're rather exclamatory!
00:20Bahmanbmh: Just trrying to follow the punctuation guides :-)
00:32bartj,(partition-by #(= 3 %) [1 2 3 4 5 6 7 8 9 10])
00:32clojurebot((1 2) (3) (4 5 6 7 8 9 10))
00:36pdk(doc partition-by)
00:36clojurebot"([f coll]); Applies f to each value in coll, splitting it each time f returns a new value. Returns a lazy seq of partitions."
00:38bartjI am not able to understand why the elements 4,5,... are in one set!
00:39bartjis it that the equality sign changes only when it is 3?
00:39bartjok got it!
00:40_ato,[(= 3 1) (= 3 2) (= 3 3) (= 3 4) (= 3 5)]
00:40clojurebot[false false true false false]
00:41pdkit makes me picture playing 20 questions with clojurebot
00:41pdkbartj in the first partition the two items don't = 3
00:41pdkso they all get lumped together
00:42pdk3 = 3 and that changes the return value of #(= 3 %) from when it was evaluating 1 and 2 so it gets split
00:42pdkthen the return value changes again when you hit 4 and stays the same from there since nothing after that = 3
00:43bartjpdk, yes, I peered at it harder and was able to understand...thanks very much for your explanation
00:48bartjalso, is it possible to partition based on groups of elements
00:49bartjfor eg: partition if the sum of consecutive elements is 6
00:51pdkhmm that i havent looked into
00:51pdkmight need to roll your own but doesnt sound complicated
00:52pdksince when you feed a function to partition it just looks at each value handed to it individually as far as i know
02:43LauJensenMorning gang
02:54BahmanMorning LauJensen!
03:06javehello
03:12bartjgood morning
03:15bartjmy attempt to split a vector so that the sum of the elements is not greater than maximum-sum
03:15bartjis here: http://pastie.org/1147543
03:15bartjany comments greatly appreciated
03:16bartjbecause, it looks too ugly (non-clojurish)
03:21_atohmm
03:33_msthere's a shot at it: http://pastie.org/1147559
03:34LauJensen_mst: Thats how I would have done it
03:41LauJensen_ato: You're working on moving Clojars to a different maintainer now?
03:46hartois there an inverse of select-keys?
03:47AWizzArdharto: what would the inverse function do?
03:47hartocopy a map while excluding a given set of keys
03:48AWizzArddissoc sounds good
03:48hartoeep - of course :)
03:48AWizzArd,(dissoc {:a 10, :b 20, :c 30, :d 40} :b :c)
03:48clojurebot{:a 10, :d 40}
03:49hartoforgot it could take multiple keys
03:49AWizzArdharto: but good that you asked, because as you forgot about dissoc I forgot about select-keys (:
03:49javeI'm trying to make a ring handler in a compojure app that returns a redirect http header. I'm failing, for some reason. does someone have an example somewhere how to do it properly?
03:51LauJensenjave: isn't (defn handler [r] (redirect "/somewhere")) working?
03:52javeLauJensen: thanks, I did it some other bad way
03:52LauJensenk
04:00javeclojure should have been invented 10 years ago
04:00bartj_mst, that seems much much cleaner...thank you
04:01AWizzArdAh, Java 7 was delayed. Earliest point of publishing it will be mid 2011.
04:01bartjjave, people don't appreciate the light if they don't know darkness (:
04:01LauJensenjave: naah, computers were too slow back then :)
04:01javebartj: ah, point taken
04:01javebut imagine all the suffering that would have been avoided
04:03_mstbartj: no worries! It was a bit of a rushed job (written 2 minutes before I left work) so it may be completely wrong :)
04:09bartj_mst, it's right and faster too
04:35javeI have some shared state that I handle properly with dosync, refs and so on. then I noticed I had some shared state in the form of a global variable being redefined with def. this sort of happened to work at the time. which made me think, what actually happens when you def something again?
04:36Chousukejave: the root value in the var just gets replaced I think.
04:37notsonerdysunnycan one access the clojure functions in a namespace from java? if so how?
04:37notsonerdysunnynot methods ...
04:40Chousukenotsonerdysunny: The functions are java objects so yeah. The java side of Clojure isn't documented at all but if you read RT.java you should find a method you can use to look up a var from java.
04:40Chousukeand once you have the Var you want it's easy to get to the function and invoke it.
04:42Chousukejave: I just tested in the repl. the Var object gets reused when you redef something.
04:42notsonerdysunnyI guess ... since it is not documented .. it is probably going to change in non-portable way with different versions of clojure...
04:42javeChousuke: tnx
04:43Chousukejave: Also only the root binding changes so any dynamic binding in effect will not be affected
04:43Chousukeie. (binding [foo 5] (def foo 3) (println foo)) will print 5
04:44Chousukenotsonerdysunny: well, not until the java stuff gets completely rewritten
04:44Chousukenotsonerdysunny: It's probably best to wrap the code in some static methods so you can easily update it if/when something changes
04:45ChousukeClojureUtils.call("clojure.core/+", 1, 2) or something :)
04:45notsonerdysunny:) hmm...
04:46ChousukeUsing Java from Clojure is easy but the reverse is a bit painful :P
04:47ChousukeI think chouser once mentioned that he writes static methods for java consumers so that they don't have to figure out how to call clojure functions :P
04:52LauJensenmakes sense
05:10notsonerdysunnytypes defined with deftype and defrecord can be used as regular java classes right?
05:11notsonerdysunnyand protocols as java interfaces ...
05:19hiredman,(use 'clojure.lang.RT)
05:19clojurebotjava.io.FileNotFoundException: Could not locate clojure/lang/RT__init.class or clojure/lang/RT.clj on classpath:
05:19hiredman,(import 'clojure.lang.RT)
05:19clojurebotclojure.lang.RT
05:19hiredman,(RT/var "clojure.core" "+")
05:19clojurebot#'clojure.core/+
05:20hiredman,(-> (RT/var "clojure.core" "+") deref (.invoke 1 2))
05:20clojurebot3
05:23LauJensen,(-> (RT/var "clojure.core" "+") (.invoke 1 2))
05:23clojurebot3
05:25LauJensenhiredman: Why did you deref it?
05:26yayitsweido you know how to disable host name checking for SSL connections? I'm using clojure-http and getting a java.security.cert.CertificateException
05:44AWizzArdLauJensen: RT/var returned a clojure.lang.Var instance.
05:44AWizzArdIt is just that invoke is nice and can deref implicitly.
05:44AWizzArdhiredmans deref went from Var => fn
05:44LauJensenAWizzArd: Why deref when invoke does it?
05:46Chousukeavoids one level of indirection I suppose :P
05:46notsonerdysunnyprotocols are neat .. but can I somehow implement a protocol corresponding to addition of two vals for say a coordinate (x,y,z) and be able to do things like (apply + <vector of coordinates>)
05:47Chousukenotsonerdysunny: + doesn't use a protocol, so no.
05:47octewhen i write clojure programs i usually embed a swank server in it.. and when connecting with slime you usually want to access the main object of the program, say for example the connection object for an irc bot
05:47octeso i've made that a global, set by the the -main function
05:47octebut it feels wrong to do that just so i can access it via slime
05:47notsonerdysunnycan I get a list of inbuilt protocols which I can implement?
06:20_na_ka_na_anybody know how do i read json an http request body ?
06:23_na_ka_na_(clojure.contrib,json/read-json (:body request)) is throwing exception
06:23_na_ka_na_No implementation of method: :read-json-from of protocol: #'clojure.contrib.json/Read-JSON-From found for class: org.mortbay.jetty.HttpParser$Input
06:23LauJensenI expect that you first read the body as a string, then call read-json
06:24_na_ka_na_hmm, in case of xml I was just doing (clojure.xml/parse (:body request))
06:24LauJensen(->> (repeatedly (.read (:body request))) (take-while pos?) (map char) (apply str) read-json)
06:24LauJensentry that
06:28_na_ka_na_java.lang.Integer cannot be cast to clojure.lang.IFn
06:29_na_ka_na_shoudl have #(.read ..)
06:29_na_ka_na_its working!
06:29LauJensenHooray! :) Sorry about the typo
06:31_na_ka_na_I slight problem
06:32_na_ka_na_I sent \"I am the superman\" as application/json .. but the reading the body as above gives me : #<core$_GT_ clojure.core$_GT_@739e3169> "I am the superman"
06:36bartjwhy does lazy-xml take such a long time to finish parsing ?
06:36bartjI load the xml, print the first node and exit
06:37bartjbut there is noticeable time-lag (4-8 seconds) after printing the first node and exiting the application
06:40_na_ka_na_My bad I had a > symbol lying around by mistake ..
06:41_na_ka_na_LauJensen: just (slurp (:body request)) also works! .. See http://groups.google.com/group/compojure/browse_thread/thread/fece02bf92408b76?pli=1
06:41LauJensen_na_ka_na_: slurp*, not slurp
06:41_na_ka_na_but slurp is working for me in 1.2
06:44LauJensenreally? cool
06:45LauJensenah right, slurp actually does exactly what I did above, just in a loop
06:46LauJensen...and using a StringBuilder
06:59bartj, (flatten '('(1 2) '(3 4) '(5 6)))
06:59clojurebot(quote 1 2 quote 3 4 quote 5 6)
07:00bartjI thought the quote wasn't supposed to be there (:
08:02LauJensenrhickey: It seems odd to me, that as advanced as Clojure is now, the stacktraces still leave you searching high and low for the line number which is causing the problem. Isn't this something fixable? Ideally I just want the line causing the breakage to light up in a bright red color
08:05cemerickLauJensen: something like clj-stacktrace will probably be integrated into the REPL sooner rather than later.
08:05LauJensencemerick: remember the full feature list for clj-stacktrace? Ive never used it
08:06cemerickLauJensen: no, look at its github page
08:07@rhickeyLauJensen: this is a generic complaint. Are you talking about at the repl, with slime/swank, error in loaded code or just eval'ed from editor etc?
08:08LauJensenrhickey: I'm mostly bothered in the slime repl
08:08LauJensenclj-stacktrace doesn't address this, it looks like its just applying some formatting to the regular stacktrace
08:09@rhickeyLauJensen: they should dig for cause and put it first
08:09LauJensenrhickey: But even the root cause more often than not says (NOSOURCE:1) or something similar.
08:10@rhickeyLauJensen: please put together a test example
08:10LauJensenOk I will. It'll take a little time so I'll post on the ML
08:10@rhickey"I don't like the stack traces" is never going to get fixed
08:11LauJensenBecause its not possible always to pinpoint the broken line?
08:14cemerickLauJensen: I've *never* seen "NOSOURCE" -- is SLIME not loading code with source file information?
08:15LauJensenslime-eval-buffer does, slime-eval-defun doesn't
08:16cemerickThe latter being evaluating a selected top-level or something?
08:16LauJensenyea, typically you call eval-buffer first time you open a file, then afterwards you have a series of eval-defun, which only evals the fn your cursor in on
08:17cemerick...which is where the source-less classes come from, presumably.
08:17cemerickThere's nothing clojure can do about that.
08:17cemerickHow open to suggestion are the SLIME devs, anyway?
08:20LauJensencemerick: No clue - But yea I usually run a full slime-eval-buffer when debugging something
08:28LauJensenthis is easily the most annoying java tip I ever received: http://java2everyone.blogspot.com/2009/01/set-word-wrap-in-jtextarea.html
08:34bartj,(#{"a" "b" "c"} 0)
08:34clojurebotnil
08:35bartjI was expecting the output to be "a"
08:35bartjaren't sorted sets functions ?
08:36cemerick,(#{"a" "b"} "a")
08:36clojurebot"a"
08:36cemerick#{} is not a sorted set, though
08:38Raynesbartj: sets are functions that look up their argument inside themselves and return it.
08:38Raynes-> (["a" "b" "c"] 0)
08:38sexpbot=> "a"
08:39RaynesVectors do what you were trying to do.
08:39cemerickRaynes: have you figured out a way to Durham?
08:39LauJensenRaynes: I can tell, that if you want to get some use out of your bot, you need something simpler than '-> '
08:39bartjgah, that was for vectors, sorry
08:40RaynesLauJensen: I've already changed it three times. I'd rather people not use it than have to change it again. People most definitely wont use it if they have no clue what it even is. :p
08:41LauJensennp, its your bot
08:41Raynescemerick: I wont even be able to afford the registration fee.
08:42sleepynate-> 8ball
08:42sexpbotjava.lang.NumberFormatException: Invalid number: 8ball
08:42RaynesLauJensen: Nobody will ever be satisfied with the prefix I choose for evaluation. Thus is the nature of a noisy bot. I purposely avoided using a single character prefix for the evaluation in case somebody used the bot and decided they wanted to use the same prefix for normal commands.
08:42Raynes$8ball
08:42sexpbotRaynes: My sources say no.
08:42sleepynateya that
08:43RaynesThe arrow is to sexpbot as the comma is to clojurebot.
08:43sleepynatei dunno... i read the source months ago after i saw you on SO :)
08:43sleepynateforgive me :D
08:44Raynes:p
08:51bartjer, what is the diff b/w clojurebot and sexpbot ?
08:51Raynesbartj: They're completely different bots.
08:51LauJensenbartj: clojurebot is just a more userfriendly version of sexpbot
08:52Raynessexpbot is meant to be a more general purpose bot.
08:53RaynesI've not done a side by side comparison of them.
08:55LauJensen,(println "-> (println \",(println \"hello, world!\"))")
08:55clojurebot-> (println ",(println "hello, world!"))
08:55sexpbotjava.lang.Exception: EOF while reading string
08:55RaynesAlmost.
08:56Raynessexpbot doesn't like chains though.
08:56LauJensenthats a shame
08:57@rhickeyanyone got a regex for identifying and pulling apart these "clojure.main$repl$read_eval_print__5710.invoke" ?
09:00LauJensenrhickey: like a .split on $ ?
09:00RaynesLauJensen: I'll make eval prefixes a configuration thing and allow them to be different per-channel with a default.
09:01RaynesThat will let me keep -> for most channels and change it to a simpler one for #clojure.
09:01chouserI wrote something that sorta de-munged strings like that, but I'm having trouble finding it.
09:03chouserah, here it is.
09:03LauJensenRaynes: cool
09:04chouser,(apply str (map (fn [[_ pre _ qmk bng _ dlr und]] (str pre (cond qmk "?" bng "!" dlr "/" und "-"))) (re-seq #"(.*?)((_QMARK_)|(_BANG_)|(__\d+)|(\$)|(_)|$)" "clojure.main$repl$read_eval_print__5710.invoke")))
09:04clojurebot"clojure.main/repl/read-eval-print.invoke"
09:04notsonerdysunnyis there a function to push an element to the end of the list?
09:04notsonerdysunnynot beginning
09:05chouserrhickey: that's probably not quite what you wanted.
09:05chousernotsonerdysunny: lists aren't good at that, but vectors are. (conj [1 2 3] 4)
09:06notsonerdysunny,(conj [1 2 3] 4)
09:06clojurebotnotsonerdysunny: excusez-moi
09:06notsonerdysunnyI actually tried that ..
09:07notsonerdysunnychouser: *
09:07LauJensennotsonerdysunny: Then you must be using Scala, because in Clojure it does what chouser showed :)
09:08notsonerdysunnyLauJensen: did you notice what clojurebot gave me when I tried it in the irc itself?
09:08LauJensen,(conj [1 2 3] 4)
09:08clojurebot[1 2 3 4]
09:08LauJensenhmm, you must have done something really bad in your life
09:09cgrand,(conj [1 2 3] 4)
09:09clojurebot[1 2 3 4]
09:09LauJensenTo deserve that kind of discrimination from a bot
09:09cgrand(^^ tried to copy paste the faulty one in case a subtle non-printable character was in the way)
09:10notsonerdysunnyhmm... you must be right .. :(
09:11notsonerdysunny,( conj [1 2 3] 4)
09:11clojurebotnotsonerdysunny: excusez-moi
09:11notsonerdysunny,(conj [1 2 3] 4)
09:11clojurebotnotsonerdysunny: Excuse me?
09:11LauJensenhiredman: When did you implement discrimination in Clojurebot? And thanks for not putting me on the list :)
09:11LauJensennotsonerdysunny: try -> (conj [1 2 3] 4)
09:11notsonerdysunny->(conj [1 2 3] 4)
09:11sexpbot=> [1 2 3 4]
09:12notsonerdysunny:)
09:13notsonerdysunnyfinally a bot that does not discriminate... :)
09:13RaynesThat's kind of odd.
09:13LauJensenRaynes: not really. I've also wondered why hiredman smiles on his github avatar, it seemed so out of character for him.. now I know :)
09:13LauJensens/also/always/
09:13sexpbot<LauJensen> Raynes: not really. I've always wondered why hiredman smiles on his github avatar, it seemed so out of character for him.. now I know :)
09:17notsonerdysunny,(conj [1 2 3] 4)
09:17clojurebotnotsonerdysunny: I don't understand.
09:17notsonerdysunny,(conj [1 2 3] 4)
09:17clojurebotnotsonerdysunny: Excuse me?
09:18notsonerdysunny,(conj [1 2 3] 4)
09:18clojurebotnotsonerdysunny: Gabh mo leithscéal?
09:18notsonerdysunnyits kind of funny .. :)
09:18notsonerdysunny,(conj [1 2 3] 4)
09:18clojurebotnotsonerdysunny: Huh?
09:18notsonerdysunny,(conj [1 2 3 4] 5)
09:18clojurebotnotsonerdysunny: Gabh mo leithscéal?
09:18notsonerdysunny,(conj [1 2 4 8] 5)
09:18clojurebotnotsonerdysunny: I don't understand.
09:19notsonerdysunny,(conj [ 1 2 3 4 5 6 7] 8)
09:19clojurebotnotsonerdysunny: Huh?
09:19RaynesIt's less funny the 8th time.
09:19notsonerdysunny,(conj [ 1 2 3 4 5 ] 55)
09:19clojurebotnotsonerdysunny: No entiendo
09:19raekI just realized how to simplify (if x (if-let [y (re-find z x)] y w) w) ; assuming w is not a very small expression
09:19notsonerdysunnysorry Raynes ..
09:19Raynes:p
09:20raek(if-let [y (and x (re-find z x))] y w)
09:20Raynesraek: You're a genius. You must blog about your findings immediately.
09:21raekwas that sarcasm? I don't claim I realized something revolutionary...
09:22raekthis has been bugging me before
09:22Raynesraek: Not quite.
09:23cgrandraek: (or (and x (re-find z x)) w)
09:24raekyes, but in my case I actually did something more with y (which I omitted here)
09:25@rhickeychouser: one of the problems with regexes is I can never tell what they do, so can't determine if it's what I want :)
09:25raekregexen are indeed write-only...
09:25RaynesThey aren't meant for reading.
09:26raekthat's the reason I have 70 lines of tests for 2 lines of regexen
09:26@rhickeythe regex would need to distinguish clojure fn names from other class names
09:27chouserrhickey: you want two separate stringss back? demunged namespace, demunged fn name?
09:27@rhickeycould be as simple as contains $ and methodname contains "nvoke"
09:28@rhickeyclojure.core$let.doInvoke => clojure.core/let
09:29@rhickeychouser: yes, two strings would be fine
09:29chouserbut if not a clojure fn, leaves it untouched?
09:31chousermmcgrana has some related code here: http://github.com/mmcgrana/clj-stacktrace/blob/master/src/clj_stacktrace/core.clj
09:32@rhickeychouser: maybe should return full ns/name in first case, then yes, untouched otherwise
09:32@rhickeychouser: it would be lovely if that was in contrib, might even make it into the repl
09:34@rhickeybut the munging stuff is already in core, and the rest is pretty simple
09:35@rhickeyhe's not looking at structure of name, but for .clj source file
09:36chouseryeah
09:37chouserbefore I saw his, I wrote some of my own code to colorize, demunge etc. also more than what you want I suspect. http://gist.github.com/571861
09:49chouserrhickey: can I use clojure.string, or is that not available yet when this needs to work?
09:57@rhickeychouser: best not
09:58@rhickeyI think I can use .clj file detection, so the fn doesn't need to do validations, will be passed a clojure fn class + invoke-isn method variant
09:58@rhickeyinvoke-ish
09:59chouservalidation shouldn't be hard, so if it's a pain on your end don't bother.
09:59@rhickeyeither way
10:00chouserright now trying to do demunging based on the table Compiler already has
10:00chouserCHAR_MAP
10:08@rhickeychouser: right
10:30chouserrhickey: ok, I think I have something that'll work as a starting point anyway. want it via email?
10:31chouser30 lines, unfortunately.
10:31chousernot all regex. :-)
10:39chouserrhickey: sent
10:40@chouserrhickey: sent
10:42@rhickeychouser: looking at it now - thanks!
10:45@chousernp. hope it helps.
10:49@chousernote inner fns get funny names
10:49@chouser(fn-name (str (.getName (class (.dispatchFn print-method))) ".invoke")) ;=> "clojure.core/fn--3962/fn"
10:49@chousernot sure what you wanted there.
10:50@chouser(fn-name (str (.getName (class (fn a>b<c))) ".invoke")) ;=> "user/eval813/a>b<c"
10:52LauJensenchouser: would be great if it said anon-fn-which- and then an english description of the body :)
10:52@chouserheh
11:17AWizzArdrhickey: would it be possible to add a compiler flag which, when set, will try to make every defn ^:static?
11:18@rhickeyAWizzArd: anything is possible, not sure about doing that
11:20AWizzArdThis could be set somewhere in Ant, when one builds a .jar file.
11:22AWizzArdrhickey: btw, what is the intended way for "normal people" to submit bugs? They can create an account in Assembla, but are then blocked from creating tickets until someone activates this feature for that specific account.
11:22AWizzArdSo, google group?
11:24@rhickeyAWizzArd: that's not true, anyone can use Support tab, but checking in ggroup still first step
11:25AWizzArdA friend tried it and reported he didn't see a button to create a ticket. This is some weeks ago. I don't know if it was for Clojure or Contrib.
11:26@rhickeySupport tab still probably requires an Assembla account, and maybe watching the project
11:26@rhickeybut no special privileges
11:28AWizzArdok, maybe he was not a watcher!
12:27duncanmif i have a text file with some numbers in the form of (x1,y1)(x2,y2) and I call clojure.core/read, what would i get back?
12:32Chousukeduncanm: (x1 y1)
12:32duncanmChousuke: the list?
12:32Chousukeyeah
12:32duncanmso i'd get back.... a list of lists?
12:32Chousukeread reads just one form at a time
12:33Chousukeso if your stream is just that, you'd just get the first list
12:33Chousukeand then the second the next time you read
12:33Chousukeetc.
12:48@chouserwe should have read-seq
12:54@rhickeyok, improved repl errors and stack traces are up - try the new repl utility: pst
12:54@rhickeythanks to chouser for the help
13:01@chouserprinting only the root cause obscures file name and line number of compile-time exceptions
13:04@rhickeychouser: you mean in pst?
13:04@chouseryeah. and various other stack trace prettifiers floating around.
13:04@rhickeypst can take an exception arg, (pst *e)
13:05@chouserfor runtime exceptions, the root cause is often the most important one. For compile-time exceptions, it seems to me the outermost is often most helpful.
13:05@rhickeybut the conditional in clojure.repl considered almost all repl exceptions to be compiler exceptions
13:05@rhickeyer, clojure.main
13:06duncanmrhickey: i'm thinking of coming to clojure-conj, and i can stay with a friend in Raleigh - but I don't drive at all, do you know if there'll be carpooling to go from Raleigh to Durham?
13:06@rhickeyduncanm: I don't know who would be in Raleigh
13:06duncanmrhickey: is there a mailing list where i can ask this question?
13:09@rhickeyduncanm: I'll see
13:09duncanmrhickey: thanks so much, sorry for interrupting
13:09@rhickeychouser: so, what's an example?
13:09@chouser(defn evil [x] (eval x)) (evil '(Foo/bar))
13:10@chouserthe one-line summary doesn't include the filename/line number of the actual error
13:10@chouserneither does (pst)
13:11@chouser(pst *e) does, but that's at the top of a very long trace
13:11@rhickeychouser: well, I'm happy to have another heuristic, but the old one (is it a CompierException) seemed always true
13:11@chouserok
13:17@rhickeymaybe if compiler exception and source not NO_SOURCE_FILE
13:19apgwozwho do i have to talk to get my messages "auto approved" for the list?
13:19apgwoz... talk to to get
13:20@chouserapgwoz: I think google groups does that automatically over time.
13:20apgwozchouser: interesting. ok
13:20apgwozsort of hard to contribute to a conversation when your responses show up hours later :)
13:20apgwozbut, i guess in the long run it's better
13:31@chouserduncanm: (defn read-seq [reader & [recursive?]] (let [eof (Object.)] (take-while #(not (identical? eof %)) (repeatedly #(read reader false eof (boolean recursive?))))))
13:32@chouserthen something like (vec (read-seq (clojure.lang.LineNumberingPushbackReader. (clojure.java.io/reader "core.clj"))))
13:32duncanmchouser: wow, thanks so much
13:32RaynesLineNumberingPushbackReader IsAReallyLongClassName.
13:33duncanmit's better than PushbackReaderWithLineNumbers
13:34@chouseror DescriptorProtos$DescriptorProto$ExtensionRange$Builder
13:38@chouserhttp://tinyurl.com/2ca3nhb (in case you think I'm kidding)
13:40mefestoto type hint a String[] in clojure is ^"[Ljava.lang.String;" the way to go?
13:42@chouserduncanm: gah, I forgot to close the stream. Should be (with-open [r (clojure.lang.LineNumberingPushbackReader...)] (vec (read-seq r)))
13:48@chouser(defn array-type [c] (.getName (class (into-array (resolve c) []))))
13:48@chouserthen ^#=(user/array-type String) seems to work.
13:48@chouser:-P
13:48Raynesoo
13:48@chouserprobably better off with what you had.
13:48Rayneso.o*
13:48Raynes-> (type (make-array String 10))
13:48sexpbot=> [Ljava.lang.String;
13:48RaynesLovely.
13:48mefestoheh thanks. wasn't sure if there was something setup like how there is for primitives
13:49@chousermefesto: I don't know of any. ...but that proves nothing :-P
13:50@chouserRaynes: ah, (make-array (resolve c) 0) would be slightly better
13:51LauJensenIs there an explanation somewhere, for why they chose the name "[Ljava.lang.String" ? (and the other weird looking names)
13:53@chouser[ looks like an array lookup
13:54@chouserthe following char is usually the first letter of the type name, B for bytes, I for ints, etc.
13:56@chouserexcept longs is J and Objects is L. I have no idea what that's about.
13:57LauJensenSo in other words... no? :)
13:59technomancyLauJensen: basically they really didn't put much thought into it since they don't understand repls
13:59@chouserhm. I doubt that was it. they know how to print themselves somewhat prettier
14:00LauJensenWell... I think Phil is right in so far that they probably didn't put a lot of thought into it
14:00LauJensenI think many of the bad things people say about the inconsistencies in PHP can be said about Java as well. Especially Swing... Man Swing drains me... :)
14:00@chouseryeah -- those are internal bytecode things
14:02cemerickduncanm: regarding carpooling, I'd try to give a shout on twitter?
14:06duncanmcemerick: okay
14:06duncanmcemerick: good idea
14:06duncanmthe lesson here for me really is: i really need to learn how to drive
14:07raek(function for parsing jvm type descriptors: http://github.com/raek/impojure/blob/master/src/impojure/class/constant_pool.clj#L114 )
14:07cm9Hi,
14:08cm9I'm running lein.bat to install leiningen, but it tells me the lein jar file can't be found.
14:08duncanmis there something like interleave, but gives me alists instead of plists?
14:08raek"[Ljava.lang.Object;" --> [:array [:reference "java.lang.Object"] 1]
14:09cm9It says I can try lein self-install, but the readme doesn't mention this and it doesn't help anyway.
14:09@chouserduncanm: heh "alists" and "plists" aren't clojure words, but maybe you want 'zipmap'?
14:09raek"[[[I" --> [:array [:primitive :int] 3], etc
14:09cm9It says the jar already exists (and it doesn't). I also can't find the leiningen jar file online at the place specified in the script. Any ideas?
14:10raekmaybe you could try removing the maven local repository directory
14:10raekI don't know where it is in Windows
14:10raekmaybe somewhere in Application Data or something
14:10cm9I have never used maven though, there shouldn't be one..
14:10raekleiningen uses maven
14:11cm9I've never used leiningen, I'm trying to install it for the first time here,.
14:11raekok, no previous failed installs or anything? then there shouldn't be any maven stuff around...
14:12cm9nope. Nothing like that,
14:12cm9it's odd!
14:12LauJensencm9: If you're on Windows, try Cake instead of lein, it does the same as lein and then some
14:12LauJensenhttp://github.com/ninjudd/cake/wiki/Cake-on-Windows
14:12cm9LauJensen: Okay, I'll give that a shot
14:12cm9Thanks
14:12raekcan you post what you get from "lein self-install" on pastebin or something?
14:12LauJensennp - Ive tried it, it works great
14:12cm9raek: Will do
14:13raekwhat are the notable features cake? (I've heard about the persistent JVM)
14:13cm9raek: http://pastebin.com/vz2iutXe
14:14LauJensenraek: 1) Its totally cross-platform, via gems. Big win. 2) Has a fantastic task dependency system, 3) Persistent JVM (which I dont care about personally)
14:14raekI'm currently very happy with leiningen, but it's always good to know about other tools and what they do best
14:15LauJensenCake is a drop in replacement for lein, but does more than lein if you need it to
14:15LauJensenand these guys that are working on it, are beyond fast. They put in a lot of work
14:16cm9Lau: Cake doesn't have any problem with x64 version of the JDK, does it?
14:16LauJensencm9: No, I reported a bug a couple of weeks ago, was fixed in about 6 minutes IIRC
14:17cm9Lau: wow - that is commitment. You think they were staring at a blank email client waiting for bugs to come in? :)
14:17LauJensencm9: I dont know, I reported to ninjudd, so Im guessing he's a ninja of sorts, didn't really asked, just sat back and was impressed
14:18raekhrm... is the lein.bat link pointing to the master version? that doesn't seem right...
14:18Licensergreetings my lispy friends
14:18cm9Lau: Perhaps a ninja with udders
14:18LauJensenThey also had a Windows specific bug in the way they were reading files. I reported it, and after 1 or 2 hours (basically once he woke up) a new gem was released which fixed it, so I hit "gem install cake" in Windows again, and compiled
14:18LauJensencm9: quite possibly
14:18raekcm9: try this lein.bat instead: http://github.com/technomancy/leiningen/raw/stable/bin/lein.bat
14:18cm9raek: This won't clash with having cake installed, will it?
14:18raeknope
14:20AWizzArdApple seems to be more permissive in the future about the programming languages that may be used for their iOS (iPhone, iPad, etc). So, it could well be that Java and Clojure may be allowed soon.
14:20cm9raek: Now I just get "http://github.com/technomancy/leiningen/raw/stable/bin/lein.bat&quot;
14:20cm9raek: Oops. I meant now I just get...
14:20cm9raek: ..."The syntax of the command is incorrect."
14:20LauJensenAWizzArd: Im just not sure Clojure makes sense in that setting
14:20raekhrm, does it mention which command?
14:21LauJensencm9: Why waste time on lein when cake works?
14:21cm9that's the entire output when I type "lein self-install".
14:21cm9lau: Still downloading jdk!
14:21LauJensenk
14:22raekah, you don't have java installed yet? that might explain it...
14:25hiredmansome people have stricter definitions of "works" than cake adheres to
14:25raekcm9: if you open a command terminal and run "java -version", do you get "The syntax of the command is incorrect."?
14:25LauJensenhiredman: speaking from any recent experience?
14:26lancepantzwhats up with that hiredman?
14:27cm9raek: similar to that yes
14:27cm9raek: java must not be on my path
14:28raekfrom the source of lein.bat, it looks like it uses the java executable
14:29raekso I guess it has to be on the path
14:29LauJensenit does
14:30LauJensenhiredman: Its poor style to throw out a line like that and not substantiate it. My recent experiences with cake are quite to the contrary, it works very well
14:30lancepantzhiredman: it's frustrating to spend so much time working on something, that alot of people clearly like and use, only to have people on this channel make snide unsubstantiated comments
14:31lancepantznot calling you out specifically, but this isn't the first time
14:31cm9raek: Java is now on the path (and java -version works as I'd expect), however, lein self-install gives the same error: "The syntax of the command is incorrect."
14:31lancepantzit doesn't even matter if it "works" anyways, it's clearly stated as a work in progress all over the documentation
14:31LauJensenlancepantz: I hear you - You've received a poor reception, primarily because some people get a little militant about lein, probably because it was here first, and because its solves the problem it set out to solve
14:31cm9raek: Anyway - jdk is downloaded now, so I'm going to try and go ahead with that.
14:32cm9(and cake)
14:38cm9Lua: Okay - cake is installed. Any pointers to tutorials for using it to learn clojure - i.e. run *.clj scripts, and anything else I may need?
14:39cm9s/Lua/Lau/
14:39sexpbot<cm9> Lau: Okay - cake is installed. Any pointers to tutorials for using it to learn clojure - i.e. run *.clj scripts, and anything else I may need?
14:39LauJensencm9: you should ask lancepantz, he's one of the devs working on it. First I would recommend that you consume their github page, wiki and all. Its not a big read but it'll get you started
14:40cm9Lau: great, thanks for all your help
14:40lancepantzcm9: if you want a repl, just do cake repl
14:40lancepantzcake help will tell you all of the commands
14:40LauJensenhttp://github.com/ninjudd/cake
14:40cm9Thanks, I will surely be back later with more questions!
14:40LauJensencm9: np. There's a good intro on that page
14:40lancepantzyou can start a new project by using cake new 'project-name'
14:40LauJensenlancepantz: you forgot to put 'new' on the github page
14:41cm9lancepantz: Not at that level yet, need to learn a bit about clojure itself before making multi-file projects..
14:41lancepantzand if you have any cake specific questions, we use the #cake.clj channel
14:41cm9lancepantz: Just interested in getting the contents of a file to "run", like I'd do with python: "python foo.py"
14:42cm9(for now)
14:43LauJensencake repl => (load-file "myfile.clj"), would work I think
14:43lancepantzcm9: in most cases its not that simple, as java needs to have the class path set up if you're using any jars
14:44cm9lancepants: you're referring to the clojure jar, I suppose?
14:44lancepantzno, that one will get included
14:44cm9lancepantz: I don't plan to make my own jars for a while if I don't have to.
14:45ssiderisso cake is a lein alternative?
14:45cm9I'd just like to get started with clojure as simply as possible!
14:45lancepantzbut if you want to start simple, open a new file anywhere on your system, and add (println "hi")
14:45cm9brb
14:45lancepantzthen do 'cake run filename'
14:45lancepantzssideris: cake is another clojure build tool, yes
14:47briancarperAnd for yet another build tool question... could anyone tell me why ths is failing to install clojure-contrib? http://gist.github.com/572306
14:48briancarperI can see the JARs sitting right here: http://build.clojure.org/snapshots/org/clojure/contrib/complete/1.3.0-SNAPSHOT/
14:48slyruscomplete vs. complete:jar:
14:49ssiderislancepantz: do you know if/what advantages it offers over leininingen?
14:49cm9lancepants: That cake run is just what I need, thanks.
14:50lancepantzssideris: i'd look over the readme http://github.com/ninjudd/cake
14:50LauJensencm9: Next up, you might want to install ERC, you get free nick completion :)
14:50cm9sorry :-S I will look into it
14:51lancepantzssideris: the main difference is the persistent jvm and the task model, they both are just different philosophically than lein, tons of people hate it though, so i'm not saying its better :)
14:51briancarperslyrus: What does complete:jar: mean?
14:52anonymouse89I'm having trouble including clojure as a lein dep
14:52hiredmanbriancarper: you have the version names reversed for contrib and clojure
14:52anonymouse89is it not hosted on clojars? If I search for org.clojure I get no relevant results
14:52slyrusbriancarper: who knows. but it's looking for org.clojure.contrib:complete:jar:1.3.0-SNAPSHOT
14:52hiredmancontrib has a "master" and clojure doesn't
14:53ssiderislancepantz: I did read the readme and the faq, but I only used leiningen 10 days ago for the first time, so I wasn't in a position to make the comparison myself
14:53kencauseyanonymouse89: Look at the clojure.org download page, it lists the lein info
14:54kencauseyanonymouse89: and no, it is not on clojars
14:54anonymouse89kencausey: sorry for the silly question, but that's exactly what I needed
14:54kencauseyactually, I might be wrong about clojars... I'm not sure but anyway, you're welcome
14:55lancepantzssideris: ah, well cake does some trickery to eliminate jvm startup time after the first command, alot of people like that
14:55briancarperhiredman: Are you sure? It's successfully finding clojure with "master". It fails to find contrib even if I add "master".
14:56briancarperClojure has "master" in the URL: http://build.clojure.org/snapshots/org/clojure/clojure/1.3.0-master-SNAPSHOT/
14:56lancepantzssideris: it also is easier to add new tasks to your project, and to chain tasks together
14:57hiredmanbriancarper: not 100%, but that is how it's been for sometime now
15:00ssiderislancepantz: sounds useful
15:00ssiderisI wonder why people hate it
15:00ssiderissince it seems compatible with leiningen anyway
15:01lancepantzme too
15:02briancarperSo I guess I'm back to building contrib by hand. Maven is a disaster. Thanks for the help anyways.
15:03Raynesbriancarper: Don't let cemerick here you. ;o
15:04hiredman~works on my machine
15:04clojurebothttp://haacked.com/images/haacked_com/WindowsLiveWriter/IConfigMapPathIsInaccessibleDueToItsProt_1446B/works-on-my-machine-starburst.png
15:06cemerickI hear all. Most things I let just drift by, though. :-)
15:07LauJensencemerick: yea right :)
15:09ninjuddbriancarper: it looks like the contrib problem is on http://build.clojure.org/
15:10ninjuddthe jar should exist at http://build.clojure.org/snapshots/org/clojure/contrib/complete/1.3.0-SNAPSHOT/complete-1.3.0-20100909.170549-24.jar
15:10ninjuddbut it is missing. there is only http://build.clojure.org/snapshots/org/clojure/contrib/complete/1.3.0-SNAPSHOT/complete-1.3.0-20100909.170549-24-bin.jar
15:12briancarperninjudd: I see. Good catch. So how do I tell Maven to install this file instead?
15:12ninjuddlooks like all the contrib complete jars started having -bin in the file name starting on August 22. not sure how to make it work with maven
15:16briancarperninjudd: OK then. Thanks.
15:17ninjuddcemerick: do you have any idea why the -bin is added to those jars?
15:18ranjit_ci'm not sure if this message came through already, but:
15:18ranjit_cdoes anybody have any experience with using jtransforms in incanter? i'm having some trouble getting the 2d transforms to work
15:23cemerickninjudd: it's recent, so likely the result of a pom change
15:26cemerickninjudd: here's the commit that introduced the change http://github.com/clojure/clojure-contrib/commit/b0f2e778a81916fbdb5cf59bdf364307ba1ec965
15:26cemericknotice the <id>bin</id> in the assembly descriptor
15:27LauJensencemerick: Do you know why that was done?
15:27ninjuddcemerick: yep. do you have to do something special in maven to get that jar? specify id=bin i suppose
15:27cemerickLauJensen: No, someone would have to ask Stuart.
15:28cemerickninjudd: it's actually ends up being a classifier, I think.
15:28cemerickIt's hardly unusual, at least in Java-land. It's possible that the assembly plugin cannot produce a classifier-less jar, but I'd be surprised if it didn't.
15:31ninjuddok. just checked in a fix to cake to support classifiers
15:32briancarper[org.clojure.contrib/complete "1.3.0-SNAPSHOT" :classifier "bin"] works for lein.
15:32cemerickbriancarper: glad things are on the right track :-)
15:33ninjuddbriancarper: yeah, just added the same syntax to cake. thanks
15:33LauJensenI told you these guys work fast!
15:33cemericknow ninjudd just needs to put me on the payroll :-P
15:34RaynesLauJensen: You might want to consider purchasing some pom poms.
15:34cemericklol
15:34LauJensenRaynes: I need more than one set?
15:34cemerickLauJensen: different colors, chief!
15:34RaynesIt's all about the rainbow.
15:34ninjuddcemerick: you want a job? we'll hire you. you just have to move to Los Angeles
15:35cemerickninjudd: I have too many jobs. I probably wouldn't be able to hack LA, anyways. :-)
15:35cemerickSanta Barbara, now that's another story.
15:36briancarperI appreciate everyone's help. Sorry for whining, but it's very frustrating having so much trouble with a simple install. I can't even remember what program I was working on.
15:37cemerickbriancarper: I understand the pain.
15:37ninjuddcemerick: 1 hour 38 minutes drive
15:37cemerick*way* too much :-)
15:38ninjuddyeah. i drive 30 minutes, and that's *way* too much
15:38cemerickThe solution is education of course. Imagine someone chucking the JVM because they didn't grok the classpath. *shrug*
15:38cemerickI had to drive 2 hours, each way, every day for three months. To a miserable, poorly-paying job. Worst period in my life.
15:40@chousercemerick: I had a similar experience, though perhaps a bit less extreme.
15:40@chousercemerick: focusses the mind
15:40lancepantzi move alot
15:41cemerickchouser: I'd say the opposite. I was numb after a month. :-(
15:41cemerickThat was a looong time ago.
15:41cemerickStories to last a lifetime though. I've a bucket-full.
15:41lancepantzhowever, i like 2.8 miles from the office here in la, it's taken me over an hour to get home on a few occasions
15:41cemericklancepantz: jog?
15:41LauJensenlancepantz: helicopter broken?
15:41@chouserI mean -- motivates to escape a life of such employment
15:42cemerickoh, right
15:42lancepantzin a car :)
15:42cemerickyeah, I'm saying...jog instead
15:42lancepantzEXERCISE?!?!
15:42LauJensenI think its nice how a conversation about (yet another) maven buggy config, instantly leads us to dicuss long tedious commutes to work, and cemerick is reminded of the worst period in his life........
15:42lancepantzdear lord man
15:43@chousermet guys there who'd been doing roughly the same job of 20+ years. made my heart ache.
15:43cemericklancepantz: Just got back from playing 1.5 hrs of handball. It's good for the mind.
15:43briancarpercemerick: True, education is a solution. But imagine if Emacs was a requirement to use Clojure. I could use the same argument. There's only so much time in a day.
15:43cemerickI figured out a bug in the process that I'd been stuck on for 2 days.
15:43lancepantzi've actually become quite a fan of surfing since the move to la
15:44lancepantznow thats about my favorite thing to do, that wears me out enough
15:44cemerickbriancarper: I fundamentally agree.
15:44cemerickartifact coordinates have (almost) nothing to do with maven at this point though
15:44cemerickeveryone should know about group, project, version, classifier
15:45@chouser:-(
15:45drewris there something like :validator for a ref that will retry the commit upon failure instead of throwing an exception?
15:46cemerickchouser: here's the URL for you: http://maven.apache.org/pom.html#Maven_Coordinates
15:46hiredmanLauJensen: how is that buggy maven behavior?
15:46@chousercemerick: thanks. will read it right now.
15:46briancarpercemerick: Point taken, thanks. I'll read up.
15:48hiredmanjust because you are unaware of something that does not make it a bug
15:50@chouserread a post from a debian guy about how langauge-specific dep management solutions are all so weak compared to debian's
15:50@chouserI believed him.
15:50LauJensenchouser: All I know, is that apt-get can spend a 1 minute doing what pacman does in 1 sec
15:51cemerickAn interesting side of this is that this education/discovery problem doesn't really exist for Java devs, even when they're new to maven. When you're writing an XML pom, the editor you're using will (usually) show all of the possible children (i.e. coordinate parts) in a <dependency> element, so greenhorns see the whole landscape pretty quickly.
15:51chouserLauJensen: not sure that's a good amount to know.
15:51LauJensenhehe, agreed :)
15:51cemerickOf course, there's no completion in string-based coordinates in a project.clj
15:56mrBlissdegustibus: another belgian!
16:08chouserdoes a maven version have a specified format, or is it just a string?
16:08anonymouse89is there a fn to replace the nth element of a seq?
16:09degustibushi
16:09mrBlisshi degustibus
16:09chouserassoc replaces the nth element of a vector
16:09cemerickchouser: maven coordinates can be represented as a string
16:09degustibusis this the right place to ask about slime/swank-clojure problems?
16:09@rhickeyman, I hate tests that check for particular exception types
16:09chousercemerick: that's not what I mean. if I want may version to be "gamma" or "yoink" is that ok?
16:10chousermy
16:10mrBlissdegustibus: you can always try ;-)
16:10cemerickoh, I see
16:10anonymouse89chouser: cool, didn't realize that assoc was not only for maps
16:10chouseranonymouse89: it's for associative things which include vectors and maps, but not seqs
16:11degustibusi just installed aquamacs with slime plugin and then swank-clojure 1.2.1 and it seems that after 1 eval in slime, it locks up
16:11cemerickchouser: Yes, you can have arbitrary version strings, but then version ranges won't work.
16:12mrBlissdegustibus: which version of the slime plugin (via elpa?)
16:12cemericke.g. you won't get 1.1-FOOEY if you specify a dependency with a version of [1.0,2.0)
16:12degustibusdoing c-x c-e on a second expression will not do anything, and typing an expression in slime buffer will work, but it will never evaluate
16:12cemerickand -SNAPSHOT version strings have special semantics
16:12degustibus(i'm new to emacs, so i have to clue how to go around troubleshooting it)
16:12chousercemerick: makes sense. can projects at the top (root?) of a dep tree override deps of its various intermediate nodes?
16:13chouseroh. will have to read about -SNAPSHOT then.
16:13mrBlissdegustibus: how did you install swank-clojure?
16:13cemerickchouser: If I understand the question, yes. That's what the <dependencyManagement> element is for, to override deps defined in "child" projects.
16:13cemerickI don't think lein/cake have any corollary to that yet.
16:13@rhickeyimproved pst is up: http://github.com/clojure/clojure/commits/master
16:14chousercemerick: ok, thanks.
16:14mrBlissdegustibus: just a dev-dependency in project.clj right?
16:14scottjrhickey: do you prefer that format to clj-stacktrace?
16:14degustibusi cloned the repository and did "lein jar" and then I copied the jar + clojure and clojure-contrib to ~/.swank-clojure
16:14@rhickeynow with depth control, better reporting for compilation errors
16:14@rhickeyscottj: never used clj-stacktrace
16:14degustibusi also tried "lein swank" in incanter and the result is pretty much the same
16:15mrBlissdegustibus: that's more interesting
16:15mrBlissdegustibus: can you make a new leiningen project
16:16mrBlissdegustibus: with :dev-dependency [[swank-clojure "1.2.1"]] ?
16:16degustibuslet me try that
16:17scottjrhickey: there's an example on http://github.com/mmcgrana/clj-stacktrace . It has the advantage of filenames all being aligned. I noticed that pst doesn't show the exception class (though the error does)
16:19chouserrhickey: (pst) seems to break when printing a NullPointerException
16:19hiredmancemerick: is that like excluding dependencies of a subproject?
16:19chouser(.foo nil) (pst) ;=> java.lang.NullPointerException java.io.PrintWriter.write (PrintWriter.java:399)
16:20hiredman(cause lein does that)
16:21cemerickhiredman: it allows you to change versions of or exclude dependencies for the project it's defined for, and all dependencies of that project.
16:22degustibusmrBliss: same thing...
16:22degustibusalso compilation doesn't work either
16:22degustibusit says "Compiling..." and locks up
16:22mrBlissdegustibus: which version of slime do you have?
16:22degustibus2010-09-03
16:23mrBlisstry installing slime and slime-repl 20100404 with ELPA
16:23hiredmanrhickey: re clj-stacktrace http://osdir.com/ml/clojure/2010-08/msg01110.html
16:24@rhickeyhiredman: yes, I looked at the link above
16:25degustibusi will try that
16:25hiredmanthe link above is clj-stacktrace, my link is someone saying "hey, clj-stacktrace is neat, we should have it in clojure"
16:25@rhickeychouser: NPE has null message
16:26@rhickeyI'll add the class and that will take care of that
16:36rainerschustersome clojure-clr folks on the chan today?
16:39@rhickeypst prints classnames
16:47emhis there an idiomatic way of catching exceptions that are wrapped in RuntimeException or do I just catch RuntimeException and check instance? with .getCause?
16:49@rhickeyemh: the latest clojure.repl has a root-cause which will walk down nested causes (other than CompilerExceptions)
16:50emhrhickey: thx
16:51lancepantzalexyk: ping
16:51alexyklancepantz: pong
16:52lancepantzalexyk: when you were doing your serialization benchmarks, did you compare json jackson to c.c.json and clojure-json?
16:53Anniepoo_I'm trying to debug, I'd like to test the arity of a function I'm being passed. Is there a way to do that?
16:53alexyklancepantz: I did mmcgrana's clj-json, based on jackson, only
16:53alexykand it was damn slow
16:53lancepantzyeah, thats what i was interested in
16:53alexykso kinda no sense with the rest
16:53lancepantzreally? slower than the pure clojure variants?
16:54alexyklancepantz: no, the others are even slower
16:54alexykjackson rocks, but dynamic nature of clojure is such that apparently you can't get fast serialization unless you declare what and how
16:54alexykocaml kicks ass so bad here
16:55lancepantzinteresting
16:55lancepantzyou should publish those numbers, i think alot would find them useful
16:55LauJensenalexyk: yea, blog!
16:55lancepantzseems to come up regularlly
16:57alexykI have a domain even clojure.pro, for this, but no time :(
16:57alexykeventually
16:57lancepantzi keep coming up with these elaborate plans to write my own blogging software, which just creates too much resistance
16:57LauJensenlancepantz: yea, silly, considering Ive already done it for you :)
16:58alexyklancepantz: no sense in that, I setup tumblr on my own domain, and it understands markdown, and you post github gists with code
17:00lancepantzLauJensen: did you write a blogging platform?
17:00LauJensenlancepantz: Well, micro-platform. bestinclass.dk. You can watch my latest screencast to see the blogging backend
17:00@rhickeyLauJensen: so, does pst do it for you?
17:01lancepantzi'll check it out
17:01LauJensenrhickey: It certainly looks like it
17:02LauJensenrhickey: Did you spend all this time on stacktraces today because I whined in here?
17:02AWizzArdrhickey: thanks for pst.
17:03@rhickeyLauJensen: the whining made me look at it. I spent time on it because the base behavior seemed worse than in the past - everything treated as a compiler exception
17:04LauJensenOh ok - Well thanks a bunch!
17:05@rhickeyLauJensen, AWizzArd : chouser helped with some demunge code
17:05LauJensenYea I saw - rhickey you yourself must be impressed by this community that has spawned around clojure. Impressive to see how things get done
17:07lancepantzit's interesting how quickly it happened
17:09@rhickeylancepantz: there's not much to it, I wonder if it really will make a difference for people.
17:12ssideriswooohooo, just parallelized my program trivially (from map to pmap)
17:12ssideris:-)
17:13ssiderissorry, i know i didn't do anything impressive, but I've never written anything that uses all my processors at the same time in the past
17:13Chousukepst looks neat
17:14ChousukeWith old clojure stacktraces it was pretty difficult to see which part was java and which Clojure
17:14ssiderisare you referring to this? http://github.com/mmcgrana/clj-stacktrace
17:15Raynesssideris: http://github.com/clojure/clojure/commit/9c7566a42dc029b17cb1819ff00a8e802e4a1767
17:26technomancyI wonder why clj-stacktrace wasn't considered for Clojure itself; the response on the mailing list seemed very positive.
17:27@rhickeytechnomancy: the author never attempted to put it in contrib afaik
17:28technomancyI'm not sure that would have helped much; for it to be really useful it would have to be used by clojure.test and clojure.main.
17:29technomancyor do you mean for copyright assignment purposes?
17:29@rhickeytechnomancy: if it started in contrib it could have been moved in with the other repl stuff
17:30scottjwill this change have any effect on how backtraces are displayed in slime (break them?) or how compojure prints them to terminal?
17:31technomancyscottj: slime has its own hand-rolled, not-very-good backtrace printer.
17:32technomancybut perhaps it could be improved to build on this
17:33cemerickSurely reimplementing widely-used libs just because they're not in contrib already isn't the best path?</rhetoricalComment>
17:33@rhickeycemerick: what is the expectation then? If people want to improve Clojure they should contribute to it
17:33@rhickeymeanwhile you have people advising others not to participate in contrib
17:34rainerschusterbtw. interessted in clr contrib?
17:34cemerickrhickey: I don't know any of the specifics, but if clj-stacktrace is/was of high quality and met the requirements, some dialogue with Mark probably would have produced whatever assignments were necessary. *shrug*
17:35@rhickeycemerick: am I supposed to do that?
17:35hiredmanrhickey: contrib as a giant ball of stuff some of which works and some of which doesn't even load without throwing exceptions seems like a bad idea
17:35@rhickeyhiredman: well, it's complain or fix it. Stuart Sierra has spent a bunch of time recently modularizing it. Anyone else could have at any time
17:36cemerickrhickey: the non-modular nature of contrib and the disconnection between original maintainers and "progress" in individual libraries were big problems. We'll see how the reorganization pans out in that regard.
17:36hiredmanrhickey: I don't see that modularizing really changes the big ball of stuff nature
17:36hiredmanthe big ball stuff has more to do with a big ball of stuff in source control
17:37alexykhow do we print clojure version in the repl?
17:37dnolen,*clojure-version*
17:37clojurebot{:interim true, :major 1, :minor 2, :incremental 0, :qualifier "master"}
17:37@rhickeyhiredman: any aspect of that could be improved upon. But things are either in the project or not
17:37alexykthx
17:38chouser,(clojure-version)
17:38clojurebot"1.2.0-master-SNAPSHOT"
17:38technomancyI think the only reason Mark didn't make an effort to get clj-stacktrace integrated himself was that I only gave him the idea in the middle of the 1.2 feature freeze.
17:38hiredmanrhickey: I think it would be better to just call certain projects "blessed" vs. everything has to be pulled into contrib
17:39@rhickeytechnomancy: nothing that was done today is any big deal. If clj-stacktrace does something wonderful it can be submitted as patches.
17:39technomancyright or wrong I can sympathize with him for not wanting to get his code into contrib due to the bucket-o-stuff reputation it has
17:39@rhickeyhiredman: you can think that, but you can;t put together a project with clean provenance that way
17:39chouserhmph. I'm really proud to have code in contrib. when did it get a bad rep?
17:39RaynesWhat he said.
17:39cemerickhiredman: the fact that contrib is under the clojure "group" has significance legally.
17:40technomancyrhickey: good to hear; I was just wondering aloud because of the lack of an official response on the mailing list thread
17:40alexykchouser: thx
17:40@rhickeydo you think apache projects build on random stuff from people's github repos? or postgresql?
17:40cemerickchouser: As am I, but until recently, it was impossible for authors to advance their contributions independently of the clojure release schedule.
17:41@rhickeytechnomancy: I'm sorry I missed that thread
17:41technomancyrhickey: np; in retrospect clojure-dev would have been a better place for it
17:42rainerschusteruups, i'm sorry, posted the same answer in the groups two times
17:42chousercemerick: oh, this is a release version numbers thing again, isn't it.
17:42danlarkinwhat's the difference where the the code lives, if they assign copyright, or usage rights to Clojure, then that's that
17:42technomancyI have them both filtered into the same location, so I forget that there are separate mailing list sometimes.
17:42hiredmanrhickey: I suppose I can understand that, but it doesn't make my think any better of contrib
17:42cemerickchouser: Roughly, yes. Apparently, now contrib authors can commit breaking changes (if they so choose), which aren't automatically pulled into contrib/master.
17:43@rhickeyhiredman: have you ever submitted patches to improve contrib?
17:43cemerickI've almost stopped following the main list entirely. It's impossible to track consistently.
17:43hiredmannot that I recall
17:44hiredmandefintely nothing related to project structure
17:44@rhickeythe fundamental idea behind contrib was it was an area where the community could contribute. It has never been and will never be any more or better than the sum of the efforts of the community. Anyone who thinks it is broken can fix it
17:46@rhickeyyes, it is easier to work off in your own corner, but you can't then look up and be disappointed your stuff isn't part of the project
17:47alexykdnolen: with all those trailing spaces now red in TextMate, is there a command to trim them all?
17:48dnolenalexy: trailing spaces in the textmate bundle? yeah I haven't had a chance to cleanup the white space.
17:48alexykdnolen: clojure bundle highlights them in red, which is useful to kill them. I just wonder if there's a TextMate snippet to do that already
17:50dnolenalexyk: probably, I'm planning on doing a bit of cleanup, also have a bunch of updates from franks42
17:51alexykdnolen: cool, I'll have git pull at the ready :)
17:51dnolenalexyk: have you been using it? how's it working out for you?
17:52alexykdnolen: restarted today, we'll see
17:52cemerickrhickey: There will almost certainly be times in the future where a well-tested, non-contrib lib will save you gallons of sweat and blood. I don't have any good answers re: who should go looking for such libs. Just something to think about. :-)
17:54@rhickeycemerick: I have thought about it, thus the CAs and everything else. It's the authors of those libs who haven't thought about it, i.e. if they had similar CAs they'd have the ability to contribute it to Clojure (or anyone else, like Apache) cleanly. If they take patches from random people on github then they are screwed
17:54rainerschusterhow can i run clojure-clr on a STA thread (for WPF usage)
17:54rainerschuster?
17:55technomancydnolen: same here, except now that now that we have clojure.java.io I don't need contrib
17:55@rhickeyrainerschuster: you might try contacting David Miller directly about specifics like that
17:55rainerschusterthx
17:56dnolentechnomancy: what about prioritymap ? what about fingertrees when they're ready. I still wanna see a good datalog tutorial, etc.
17:56rainerschuster(rhickey): is it part of the CA?
17:56@rhickeyrainerschuster: ?
17:57rainerschusterContributor Agreement
17:57@rhickeyrainerschuster: is what part of the CA?
17:57rainerschusterclojure-clr
17:57@rhickeyrainerschuster: yes, fully
17:57rainerschusterso i should send in a signed one
17:58@rhickeyrainerschuster: yes, must do before contributing to clojure-clr
17:58chouserI've been developing finger-trees outside of contrib because of how speculative it was when it started. Will a git repo with all commits attributed to me be clean enough to hand over to clojure or contrib later?
17:59@rhickeychouser: yes, you can always submit something that is completely your own work, and in fact you assert that it is so in your CA
17:59cemerickrhickey: such situations can't be remedied after the fact, assuming all the participants are on board?
17:59ninjuddrhickey: so are you suggesting that everyone who has a clojure project on github require contributors submit a CA?
17:59rainerschuster(rhickey): seems like you got a new contributor (i'm neither fast nor have enough time, but i'll try helping porting) no promises as allways. I'm bloody new to clojure
18:00@rhickeycemerick: going after that later is a huge hassle
18:01chousera lot of stuff on github has no aspirations to be integrated into anything larger
18:01technomancyit was very easy to relicense swank-clojure despite having 30+ contributors
18:01chousertechnomancy: I think it gets harder as email address start becoming invalid
18:01@rhickeyninjudd: I think anyone that has a library that takes patches from someone else without some sort of agreement is naive and foolish. At best, they are permanently locking themselves into a particular license, and at worse, precluding widespread use of their work.
18:03ninjuddrhickey: so is there any way for clojure github authors to reuse the work you've done in collecting CA's? or does every project have to maintain a separate set of CA's?
18:04hiredmanninjudd: cas are for a particular project
18:05shooverrainerschuster: when I ran a WPF app, I had to create my own thread and call SetApartmentState on it
18:06@rhickeyit would be useful if github would set up a universal CA, every user granting the CA rights to every project owner whose projects they contributed, but with only a single agreement. Until then it's one per project
18:06rainerschuster(shoover): thx, so there is a ned for a run-in-sta func?
18:06ninjuddwould it be possible to collect CAs online to reduce the friction for this kind of thing?
18:06ninjuddrhickey: hehe. just what i was thinking
18:06shooverrainerschuster: that would be one way to do it
18:07@rhickeyninjudd: I haven't looked into how to make that legally sound
18:08shooverrainerschuster: and you have to use the gen-delegate macro to create your ThreadStart to launch the thread
18:08cemerickninjudd: http://twitter.com/cemerick/status/24046944800 ;-)
18:08rainerschuster(rhickey): is there a way to email it, or do i have to send it the long road (from germany)
18:08ninjuddrhickey: i guess i had always assumed that there was an implicit CA for patches you submit to someone else's project on github.. i suppose that's what you meant by naive
18:08cemerickSigned PDFs are fully legit, legally.
18:09mcavcemerick: signed as in pen-scribbled PDF, or signed as in type-name-in-box PDF?
18:09cemerickmcav: signed as in, using Acrobat's document-signing tools.
18:09cemerickopen source folk probably don't have Acrobat Pro laying around, though
18:10@rhickeycemerick: who has those (besides you)?
18:10cemerickrhickey: They're baked into Acrobat Pro. Foxit may actually support it as well.
18:10ninjuddwhat about sending a high res photo of the signed agreement? it works for cashing checks...
18:11cemerickAdobe has its own central authority for such things, which the feds, IRS, state gov'ts etc. have all accepted.
18:11arohneris there a fix for slime eating parts of exception messages?
18:11@rhickeycemerick: I meant who as in people, not tools
18:11arohnerthat is, slime not printing 100% of the text that you'd see at the repl
18:11cemerickrhickey: If Acrobat Pro is the only avenue, then very few, and likely no developers.
18:12@rhickeycemerick: right
18:12dakronerhickey: only the person who creates the original document needs Pro, anyone with Adobe Reader can CA-sign a document
18:12@rhickeyfar more people have submitted CAs than have tangibly contributed, so I don't think the CA is the impediment
18:13@rhickeydakrone: that's interesting
18:13shoovercemerick: I have it, but I only know about one feature that I needed at the time
18:13shoovercemerick: and I don't have a lot of shame about that :)
18:13@rhickeycemerick: I would love something like that (Adobe signing), not trying to shoot it down
18:14rainerschusteri'm chossing the oldfashioned way. 6€ will be affordable
18:14@rhickeydakrone: I wonder why I don't see more documents set up for signing like that then
18:14cemerickshoover: no shame to it at all :-)
18:15hiredmanI usually use latex to overlay a svg of my signature on a pdf
18:15ninjuddrhickey: not for clojure, but i think it would more of an impediment for library patches. people are used to finding a bug, fixing it, and submitting a pull request. if they get an email back from the author asking them to sign and mail in a document, there will be a not insignificant drop off...
18:15shoovercemerick: and if you have Acrobat Pro you probably have Illustrator and Photoshop and no programmer should plumb all those depths
18:16rainerschuster(rhickey): why do you have to use this kind of agreement. aren't there any such licenses out there?
18:16dakrone rhickey: google uses it for people signing their NDAs
18:16@rhickeyhrm "† For ad hoc form distribution and data collection for up to 500 people."
18:17cemerickshoover: I only have the first, but then I'm in a special situation :-)
18:18lancepantzcemerick: maybe you should implement online document signing in your pdf startup :)
18:18technomancyaccepting scanned signed papers would be a step up from requiring actual postal mail IMO
18:19cemericklancepantz: We don't touch the signing stuff at all, probably never will. You need Adobe's keys to do so (which we could get, but would then be fried by the DMCA).
18:19cemerickBut, Snowtide's been around since 2001, not quite a startup.
18:19lancepantzi was referring to docuharvest
18:19cemerickah
18:19cemericksame thing applies, unfortunately :-)
18:20mcavagreed with technomancy -- even if you don't mess with acrobat, scanning the sheet in would be much better
18:20cemericktechnomancy: Only faxed materials have force of law IIRC.
18:20lancepantzdamn proprietary software :)
18:20rainerschuster(shoover): thx for sharing https://gist.github.com/193876/aa65c14f21159ac339b8980ec803c218b88e6b87
18:20cemerickyes, damn that proprietary software! Uh, wait...
18:20cemerick:-D
18:21technomancycemerick: wow, quite silly... but par for the course when it comes to US tech law I guess.
18:21ninjuddcemerick: but i can send a fax from my scanner to your email without ever using a fax machine
18:21lancepantzhahaha
18:22arohnercemerick: I don't believe that's correct. The law was updated to allow for digital signatures, and checkboxes
18:22cemericktechnomancy: FWIW, we do scanned contracts all the time, and so do a lot of others. There's case law supporting that, so most people feel safe enough with it. Only faxes have any statutory position.
18:22cemerickThat's all IIRC.
18:22arohnercemerick: so MegaCorp's EULA has legal force
18:22cemerickarohner: True, though that doesn't do much for something like a CA.
18:23cemerickCase law has been pretty tough on EULAs over the years, though, especially where there are onerous terms.
18:23arohnercemerick: yes, but that's about the EULA itself, rather than the enforceability of a checkbox
18:26arohnercemerick: aha, I see what you're saying. This was helpful for me: http://en.wikipedia.org/wiki/Electronic_signature
18:27arohnerapparently, there are legally binding signatures that don't hold up in court if contested
18:29cemerickOf course, most contracts are *never* tested. Everyone behaves themselves pretty well, fundamentally. One of the things that gives me hope for the human race. :-)
18:48mabesanyone know if it is possible to have leiningen exclude a source file from jar/uberjar? We have a user.clj in source for dev purposes..
18:58technomancymabes: put it in test-resources rather than src/
18:59mabestechnomancy: oh, nice. I'm assuming that is on the classpath then. good to know about. thanks!
18:59technomancynp
18:59technomancyI knew I accepted that patch for a reason.
19:27joshua-choiIn your experience, does the apply function ever become a performance bottleneck?
19:28joshua-choi(Which is tantamount to if dispatching a function by its arity is ever a limiting factor.)
19:31joshua-choiI'm wondering about this in relation to memoize, which wraps a function in a (fn [& args] ... (apply f args) ...).
19:35wtetzneri've never noticed a performance problem with apply
19:36joshua-choiWhat about packing arguments, like with [& args]? memoize does that too.
19:37joshua-choiI'm worried about wrapping functions in multiple "general" functions (not just memoize) that do different things but all are similar to: (fn [& args] ... (apply f args) ...).
19:37joshua-choiAh well, perhaps I'm prematurely optimizing
19:37wtetzneri wouldn't worry about it too much
19:37wtetznerapply should be fine
19:37joshua-choiWhat about [& args], which seems to create a new vector every time?
19:38wtetznernah, it uses javas variadic argument system
19:38wtetzneri believe
19:38joshua-choiOh, really? & args doesn't create a new object for args? How does that work?
19:38wtetznerand creating a new vector is cheap
19:39joshua-choiWell, yeah, that's true
19:39joshua-choiThankfully
19:39joshua-choiIt's just that this is going to happen a *lot*.
19:40wtetznerstill, i use & args all the time and haven't noticed any performance problems
19:40wtetznerthe only time i've noticed function call overhead to be a performance problem is in cases where you're calling java methods
19:41wtetznerand the reflective calls are too expensive
19:41wtetznerbut type tags solves that
19:41joshua-choiYeah. Reflection isn't related to this. But it's very impressive on Rich Hickey's part if [& args] and apply don't make bottlenecks.
19:42tomojjoshua-choi: ey! cat or hound for jbo, you think? playing around trying to make sense of fnparse.
19:42joshua-choiLojban?
19:42tomojguessing cat since terminators etc are weird
19:42joshua-choiYeah, Cat.
19:43joshua-choiThe existing parsers use packrat parsers too.
19:43joshua-choiBut mine will be able to do left recursion directly!
19:43joshua-choiAnd there's a lot of left recursion in that language.
19:43tomojwill be pretty exciting
19:43joshua-choiBut I'm not working on that right now; I'm fixing a bug in FnParse proper. But I've got to go now
19:43joshua-choiSee you all
19:43hiredman[& args] certainly does not use java's varadic args stuff
19:43tomojyeah, just toying around myself trying to do morphology
19:45wtetzneroh right, AFn has methods taking up to 20 args before using java's variadic args
19:46wtetznerso [& args] just creates a seq over those args?
19:50joshua-choiThat's amazing
19:51joshua-choiI vaguely recall Clojure functions having some high limit on their parameters
19:51hiredmanno
19:51joshua-choiOkay then
19:51hiredman[& args] has nothing to do with java varadic args
19:51joshua-choitomoj: I've already written a parser for morphology. It's done. It's unfinished on sentence structure now
19:51joshua-choihiredman: How does [& args] work then? Does it simply construct an actual vector?
19:52tomoj:O
19:52hiredmanthe invoke overloads you see in IFn with varadic args are used for twenty args passed to a clojure function
19:52wtetznerright, but the fact that AFn has the methods going up to 20 args means it can't be using java's variadic args
19:52hiredmanno
19:52hiredmanthose aren't used for [& args] either
19:53hiredmanthose are used for [a b c d e f g h i j k l m n]
19:55wtetznerah, i see
19:55wtetznerRestFn
19:56wtetznerso it uses a switch to find the right arity (the stuff before &), and then creates an ArraySeq on the remaining args
19:57hiredmanit can't be an arrayseq, since [& args] supports passing infinite seqs
19:59wtetznerit does?
19:59hiredmanyes
20:00hiredman,(apply (fn [& args] (first args)) (iterate inc 0))
20:00clojurebot0
20:03wtetzner,(ancestors (fn [x & xs] (first x)))
20:03clojurebotnil
20:03hiredmanancestors takes a class or something that is part of a hierarchy
20:03wtetzner,(ancestors (class (fn [x & xs] (first x))))
20:03clojurebot#{clojure.lang.Fn java.util.concurrent.Callable clojure.lang.IMeta java.lang.Runnable java.io.Serializable java.util.Comparator java.lang.Object clojure.lang.IObj clojure.lang.RestFn clojure.lang.AFunction :clojure.contrib.generic/any clojure.lang.AFn clojure.lang.IFn}
20:06wtetznerwell, if a finite number of args are passed in, an ArraySeq is created
20:07wtetznerat least, if the invoke methods in RestFn aren't overridden
20:22chouserI[& xs]
20:23joshua-choiDoes this error mean anything to you all? "java.lang.RuntimeException: Can't embed object in code, maybe print-dup not defined: clojure.lang.Delay@4631c43f"
20:23chouserI've never noticed a performance issue with [& xs], but I have gotten some gains in some code bases by getting rid of apply calls
20:23chouserjoshua-choi: that sounds like a macro is returning something unusal.
20:24joshua-choiHmm
20:24chouseroh, a delay
20:24joshua-choiYeah, delays are involved
20:25joshua-choiMmm, can I paste a short stacktrace here?
20:25joshua-choiMay I, I mean
20:25chouser(defmacro foo [] (delay 5)) (defn bar [] (foo)) ; generates an error
20:25chouserjoshua-choi: best to use lisppaste or gist for stack traces
20:26chouserbut by all means -- they're often helpful.
20:26kencauseypaste.lisp.org
20:26joshua-choiHeh, I'm not familiar with either of those, unfortunately; I'll try, though
20:26kencauseyyou will have to paste in the link yourself, the lisppaste bot is away at the moment.
20:27joshua-choihttp://gist.github.com/572824
20:30chouserdo you get the same error with my foo/bar post above?
20:31chouserwhat's at hound.clj line 427?
20:31joshua-choiYes. I'll go see if my system contains something like that.
20:31joshua-choiYes, a macro call is at 427, but what puzzles me is that that macro does not contain a direct delay call.
20:31joshua-choiThe macro does contain a function call that contains a delay call.
20:31yayitsweiquestion: what's the idiomatic way to count all non-nil values in a list?
20:31chouserwell, if expands to anything that includes a delay, it won't work.
20:32joshua-choiHmm, perhaps a delay is getting into the macro-time
20:32joshua-choiYes
20:32joshua-choiWell, I'll check for that; thanks for the tip
20:32joshua-choiHowever, a puzzling thing is...
20:32joshua-choithe macro called at 427 is already called earlier in the file, with no error.
20:33joshua-choiThat's really puzzling me.
20:34yayitsweior rather, count all non-nil atoms
20:34yayitsweiI have this so far, but I think it can be shortened:
20:34yayitswei(count (filter (complement #(nil? %)) (flatten alist)))
20:36chouserfor filter/complement see remove
20:36tomojalso note that #(nil? %) is the same as nil?
20:36chouser,(count (remove nil? [1 2 nil 4 5]))
20:36clojurebot4
20:37yayitsweioh, perfect
20:37yayitsweithanks, chouser!
20:38tomojshould I be worried yet about getting clojure-conj tickets?
20:40chousertomoj: dunno, but I bet they'll sell out
20:40chouserplane ticket prices are starting to go up already. apparently the unprecedented demand for flights to Durham.
20:42hiredmanuh oh
22:43lancepantz,(defmulti foo (partial (comp type first)))
22:43clojurebotDENIED
22:43lancepantz-> (defmulti foo (partial (comp type first)))
22:43sexpbotjava.lang.SecurityException: Code did not pass sandbox guidelines: ()
22:43lancepantz:(
22:45wwmorganlancepantz: why is the partial there?
22:46lancepantzlooks like i don't need it
22:47slyrusargghhh! the tabs! they're killing my eyes!
22:47lancepantz#(type (first %)) is equivalent to (comp type first)?
22:48wwmorgan,((comp type first) ["foo" :bar]) ; Looks good to me
22:48clojurebotjava.lang.String
22:50lancepantzweirdness, C-x C-e doesn't update defmulti's?
22:51wwmorganlancepantz: a lot of people are running into that. It's new behavior in 1.2. defmulti now has defonce semantics
22:51lancepantzah!
22:51lancepantzthat's what threw me
22:51wwmorganIf you do (def foo nil) then you can evaluate the defmulti to do what you want
22:53lancepantzstrange, that clears it, but i still have to paste the defmulti sexp to my slime repl
22:55wwmorganwhoops, yep. You have to ns-unmap the symbol. (ns-unmap *ns* 'foo)
22:55cemerickwwmorgan: are you using *emacs* of all things?!? :-O
22:55cemerick;-)
22:57wwmorgancemerick: just guessing. I met my environment halfway and learned vimclojure
22:57cemerickwwmorgan: that sounds more believable