2010-09-09
| 00:11 | Bahman | Hi all! |
| 00:12 | bmh | Hi Bahman! |
| 00:12 | Bahman | Hello bmh! |
| 00:12 | bmh | You're rather exclamatory! |
| 00:20 | Bahman | bmh: Just trrying to follow the punctuation guides :-) |
| 00:32 | bartj | ,(partition-by #(= 3 %) [1 2 3 4 5 6 7 8 9 10]) |
| 00:32 | clojurebot | ((1 2) (3) (4 5 6 7 8 9 10)) |
| 00:36 | pdk | (doc partition-by) |
| 00:36 | clojurebot | "([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:38 | bartj | I am not able to understand why the elements 4,5,... are in one set! |
| 00:39 | bartj | is it that the equality sign changes only when it is 3? |
| 00:39 | bartj | ok got it! |
| 00:40 | _ato | ,[(= 3 1) (= 3 2) (= 3 3) (= 3 4) (= 3 5)] |
| 00:40 | clojurebot | [false false true false false] |
| 00:41 | pdk | it makes me picture playing 20 questions with clojurebot |
| 00:41 | pdk | bartj in the first partition the two items don't = 3 |
| 00:41 | pdk | so they all get lumped together |
| 00:42 | pdk | 3 = 3 and that changes the return value of #(= 3 %) from when it was evaluating 1 and 2 so it gets split |
| 00:42 | pdk | then the return value changes again when you hit 4 and stays the same from there since nothing after that = 3 |
| 00:43 | bartj | pdk, yes, I peered at it harder and was able to understand...thanks very much for your explanation |
| 00:48 | bartj | also, is it possible to partition based on groups of elements |
| 00:49 | bartj | for eg: partition if the sum of consecutive elements is 6 |
| 00:51 | pdk | hmm that i havent looked into |
| 00:51 | pdk | might need to roll your own but doesnt sound complicated |
| 00:52 | pdk | since when you feed a function to partition it just looks at each value handed to it individually as far as i know |
| 02:43 | LauJensen | Morning gang |
| 02:54 | Bahman | Morning LauJensen! |
| 03:06 | jave | hello |
| 03:12 | bartj | good morning |
| 03:15 | bartj | my attempt to split a vector so that the sum of the elements is not greater than maximum-sum |
| 03:15 | bartj | is here: http://pastie.org/1147543 |
| 03:15 | bartj | any comments greatly appreciated |
| 03:16 | bartj | because, it looks too ugly (non-clojurish) |
| 03:21 | _ato | hmm |
| 03:33 | _mst | here's a shot at it: http://pastie.org/1147559 |
| 03:34 | LauJensen | _mst: Thats how I would have done it |
| 03:41 | LauJensen | _ato: You're working on moving Clojars to a different maintainer now? |
| 03:46 | harto | is there an inverse of select-keys? |
| 03:47 | AWizzArd | harto: what would the inverse function do? |
| 03:47 | harto | copy a map while excluding a given set of keys |
| 03:48 | AWizzArd | dissoc sounds good |
| 03:48 | harto | eep - of course :) |
| 03:48 | AWizzArd | ,(dissoc {:a 10, :b 20, :c 30, :d 40} :b :c) |
| 03:48 | clojurebot | {:a 10, :d 40} |
| 03:49 | harto | forgot it could take multiple keys |
| 03:49 | AWizzArd | harto: but good that you asked, because as you forgot about dissoc I forgot about select-keys (: |
| 03:49 | jave | I'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:51 | LauJensen | jave: isn't (defn handler [r] (redirect "/somewhere")) working? |
| 03:52 | jave | LauJensen: thanks, I did it some other bad way |
| 03:52 | LauJensen | k |
| 04:00 | jave | clojure should have been invented 10 years ago |
| 04:00 | bartj | _mst, that seems much much cleaner...thank you |
| 04:01 | AWizzArd | Ah, Java 7 was delayed. Earliest point of publishing it will be mid 2011. |
| 04:01 | bartj | jave, people don't appreciate the light if they don't know darkness (: |
| 04:01 | LauJensen | jave: naah, computers were too slow back then :) |
| 04:01 | jave | bartj: ah, point taken |
| 04:01 | jave | but imagine all the suffering that would have been avoided |
| 04:03 | _mst | bartj: no worries! It was a bit of a rushed job (written 2 minutes before I left work) so it may be completely wrong :) |
| 04:09 | bartj | _mst, it's right and faster too |
| 04:35 | jave | I 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:36 | Chousuke | jave: the root value in the var just gets replaced I think. |
| 04:37 | notsonerdysunny | can one access the clojure functions in a namespace from java? if so how? |
| 04:37 | notsonerdysunny | not methods ... |
| 04:40 | Chousuke | notsonerdysunny: 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:40 | Chousuke | and once you have the Var you want it's easy to get to the function and invoke it. |
| 04:42 | Chousuke | jave: I just tested in the repl. the Var object gets reused when you redef something. |
| 04:42 | notsonerdysunny | I guess ... since it is not documented .. it is probably going to change in non-portable way with different versions of clojure... |
| 04:42 | jave | Chousuke: tnx |
| 04:43 | Chousuke | jave: Also only the root binding changes so any dynamic binding in effect will not be affected |
| 04:43 | Chousuke | ie. (binding [foo 5] (def foo 3) (println foo)) will print 5 |
| 04:44 | Chousuke | notsonerdysunny: well, not until the java stuff gets completely rewritten |
| 04:44 | Chousuke | notsonerdysunny: It's probably best to wrap the code in some static methods so you can easily update it if/when something changes |
| 04:45 | Chousuke | ClojureUtils.call("clojure.core/+", 1, 2) or something :) |
| 04:45 | notsonerdysunny | :) hmm... |
| 04:46 | Chousuke | Using Java from Clojure is easy but the reverse is a bit painful :P |
| 04:47 | Chousuke | I 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:52 | LauJensen | makes sense |
| 05:10 | notsonerdysunny | types defined with deftype and defrecord can be used as regular java classes right? |
| 05:11 | notsonerdysunny | and protocols as java interfaces ... |
| 05:19 | hiredman | ,(use 'clojure.lang.RT) |
| 05:19 | clojurebot | java.io.FileNotFoundException: Could not locate clojure/lang/RT__init.class or clojure/lang/RT.clj on classpath: |
| 05:19 | hiredman | ,(import 'clojure.lang.RT) |
| 05:19 | clojurebot | clojure.lang.RT |
| 05:19 | hiredman | ,(RT/var "clojure.core" "+") |
| 05:19 | clojurebot | #'clojure.core/+ |
| 05:20 | hiredman | ,(-> (RT/var "clojure.core" "+") deref (.invoke 1 2)) |
| 05:20 | clojurebot | 3 |
| 05:23 | LauJensen | ,(-> (RT/var "clojure.core" "+") (.invoke 1 2)) |
| 05:23 | clojurebot | 3 |
| 05:25 | LauJensen | hiredman: Why did you deref it? |
| 05:26 | yayitswei | do you know how to disable host name checking for SSL connections? I'm using clojure-http and getting a java.security.cert.CertificateException |
| 05:44 | AWizzArd | LauJensen: RT/var returned a clojure.lang.Var instance. |
| 05:44 | AWizzArd | It is just that invoke is nice and can deref implicitly. |
| 05:44 | AWizzArd | hiredmans deref went from Var => fn |
| 05:44 | LauJensen | AWizzArd: Why deref when invoke does it? |
| 05:46 | Chousuke | avoids one level of indirection I suppose :P |
| 05:46 | notsonerdysunny | protocols 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:47 | Chousuke | notsonerdysunny: + doesn't use a protocol, so no. |
| 05:47 | octe | when 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:47 | octe | so i've made that a global, set by the the -main function |
| 05:47 | octe | but it feels wrong to do that just so i can access it via slime |
| 05:47 | notsonerdysunny | can 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:23 | LauJensen | I 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:24 | LauJensen | (->> (repeatedly (.read (:body request))) (take-while pos?) (map char) (apply str) read-json) |
| 06:24 | LauJensen | try 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:29 | LauJensen | Hooray! :) 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:36 | bartj | why does lazy-xml take such a long time to finish parsing ? |
| 06:36 | bartj | I load the xml, print the first node and exit |
| 06:37 | bartj | but 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:41 | LauJensen | _na_ka_na_: slurp*, not slurp |
| 06:41 | _na_ka_na_ | but slurp is working for me in 1.2 |
| 06:44 | LauJensen | really? cool |
| 06:45 | LauJensen | ah right, slurp actually does exactly what I did above, just in a loop |
| 06:46 | LauJensen | ...and using a StringBuilder |
| 06:59 | bartj | , (flatten '('(1 2) '(3 4) '(5 6))) |
| 06:59 | clojurebot | (quote 1 2 quote 3 4 quote 5 6) |
| 07:00 | bartj | I thought the quote wasn't supposed to be there (: |
| 08:02 | LauJensen | rhickey: 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:05 | cemerick | LauJensen: something like clj-stacktrace will probably be integrated into the REPL sooner rather than later. |
| 08:05 | LauJensen | cemerick: remember the full feature list for clj-stacktrace? Ive never used it |
| 08:06 | cemerick | LauJensen: no, look at its github page |
| 08:07 | @rhickey | LauJensen: 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:08 | LauJensen | rhickey: I'm mostly bothered in the slime repl |
| 08:08 | LauJensen | clj-stacktrace doesn't address this, it looks like its just applying some formatting to the regular stacktrace |
| 08:09 | @rhickey | LauJensen: they should dig for cause and put it first |
| 08:09 | LauJensen | rhickey: But even the root cause more often than not says (NOSOURCE:1) or something similar. |
| 08:10 | @rhickey | LauJensen: please put together a test example |
| 08:10 | LauJensen | Ok 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:11 | LauJensen | Because its not possible always to pinpoint the broken line? |
| 08:14 | cemerick | LauJensen: I've *never* seen "NOSOURCE" -- is SLIME not loading code with source file information? |
| 08:15 | LauJensen | slime-eval-buffer does, slime-eval-defun doesn't |
| 08:16 | cemerick | The latter being evaluating a selected top-level or something? |
| 08:16 | LauJensen | yea, 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:17 | cemerick | ...which is where the source-less classes come from, presumably. |
| 08:17 | cemerick | There's nothing clojure can do about that. |
| 08:17 | cemerick | How open to suggestion are the SLIME devs, anyway? |
| 08:20 | LauJensen | cemerick: No clue - But yea I usually run a full slime-eval-buffer when debugging something |
| 08:28 | LauJensen | this is easily the most annoying java tip I ever received: http://java2everyone.blogspot.com/2009/01/set-word-wrap-in-jtextarea.html |
| 08:34 | bartj | ,(#{"a" "b" "c"} 0) |
| 08:34 | clojurebot | nil |
| 08:35 | bartj | I was expecting the output to be "a" |
| 08:35 | bartj | aren't sorted sets functions ? |
| 08:36 | cemerick | ,(#{"a" "b"} "a") |
| 08:36 | clojurebot | "a" |
| 08:36 | cemerick | #{} is not a sorted set, though |
| 08:38 | Raynes | bartj: sets are functions that look up their argument inside themselves and return it. |
| 08:38 | Raynes | -> (["a" "b" "c"] 0) |
| 08:38 | sexpbot | => "a" |
| 08:39 | Raynes | Vectors do what you were trying to do. |
| 08:39 | cemerick | Raynes: have you figured out a way to Durham? |
| 08:39 | LauJensen | Raynes: I can tell, that if you want to get some use out of your bot, you need something simpler than '-> ' |
| 08:39 | bartj | gah, that was for vectors, sorry |
| 08:40 | Raynes | LauJensen: 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:41 | LauJensen | np, its your bot |
| 08:41 | Raynes | cemerick: I wont even be able to afford the registration fee. |
| 08:42 | sleepynate | -> 8ball |
| 08:42 | sexpbot | java.lang.NumberFormatException: Invalid number: 8ball |
| 08:42 | Raynes | LauJensen: 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:42 | Raynes | $8ball |
| 08:42 | sexpbot | Raynes: My sources say no. |
| 08:42 | sleepynate | ya that |
| 08:43 | Raynes | The arrow is to sexpbot as the comma is to clojurebot. |
| 08:43 | sleepynate | i dunno... i read the source months ago after i saw you on SO :) |
| 08:43 | sleepynate | forgive me :D |
| 08:44 | Raynes | :p |
| 08:51 | bartj | er, what is the diff b/w clojurebot and sexpbot ? |
| 08:51 | Raynes | bartj: They're completely different bots. |
| 08:51 | LauJensen | bartj: clojurebot is just a more userfriendly version of sexpbot |
| 08:52 | Raynes | sexpbot is meant to be a more general purpose bot. |
| 08:53 | Raynes | I've not done a side by side comparison of them. |
| 08:55 | LauJensen | ,(println "-> (println \",(println \"hello, world!\"))") |
| 08:55 | clojurebot | -> (println ",(println "hello, world!")) |
| 08:55 | sexpbot | java.lang.Exception: EOF while reading string |
| 08:55 | Raynes | Almost. |
| 08:56 | Raynes | sexpbot doesn't like chains though. |
| 08:56 | LauJensen | thats a shame |
| 08:57 | @rhickey | anyone got a regex for identifying and pulling apart these "clojure.main$repl$read_eval_print__5710.invoke" ? |
| 09:00 | LauJensen | rhickey: like a .split on $ ? |
| 09:00 | Raynes | LauJensen: I'll make eval prefixes a configuration thing and allow them to be different per-channel with a default. |
| 09:01 | Raynes | That will let me keep -> for most channels and change it to a simpler one for #clojure. |
| 09:01 | chouser | I wrote something that sorta de-munged strings like that, but I'm having trouble finding it. |
| 09:03 | chouser | ah, here it is. |
| 09:03 | LauJensen | Raynes: cool |
| 09:04 | chouser | ,(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:04 | clojurebot | "clojure.main/repl/read-eval-print.invoke" |
| 09:04 | notsonerdysunny | is there a function to push an element to the end of the list? |
| 09:04 | notsonerdysunny | not beginning |
| 09:05 | chouser | rhickey: that's probably not quite what you wanted. |
| 09:05 | chouser | notsonerdysunny: lists aren't good at that, but vectors are. (conj [1 2 3] 4) |
| 09:06 | notsonerdysunny | ,(conj [1 2 3] 4) |
| 09:06 | clojurebot | notsonerdysunny: excusez-moi |
| 09:06 | notsonerdysunny | I actually tried that .. |
| 09:07 | notsonerdysunny | chouser: * |
| 09:07 | LauJensen | notsonerdysunny: Then you must be using Scala, because in Clojure it does what chouser showed :) |
| 09:08 | notsonerdysunny | LauJensen: did you notice what clojurebot gave me when I tried it in the irc itself? |
| 09:08 | LauJensen | ,(conj [1 2 3] 4) |
| 09:08 | clojurebot | [1 2 3 4] |
| 09:08 | LauJensen | hmm, you must have done something really bad in your life |
| 09:09 | cgrand | ,(conj [1 2 3] 4) |
| 09:09 | clojurebot | [1 2 3 4] |
| 09:09 | LauJensen | To deserve that kind of discrimination from a bot |
| 09:09 | cgrand | (^^ tried to copy paste the faulty one in case a subtle non-printable character was in the way) |
| 09:10 | notsonerdysunny | hmm... you must be right .. :( |
| 09:11 | notsonerdysunny | ,( conj [1 2 3] 4) |
| 09:11 | clojurebot | notsonerdysunny: excusez-moi |
| 09:11 | notsonerdysunny | ,(conj [1 2 3] 4) |
| 09:11 | clojurebot | notsonerdysunny: Excuse me? |
| 09:11 | LauJensen | hiredman: When did you implement discrimination in Clojurebot? And thanks for not putting me on the list :) |
| 09:11 | LauJensen | notsonerdysunny: try -> (conj [1 2 3] 4) |
| 09:11 | notsonerdysunny | ->(conj [1 2 3] 4) |
| 09:11 | sexpbot | => [1 2 3 4] |
| 09:12 | notsonerdysunny | :) |
| 09:13 | notsonerdysunny | finally a bot that does not discriminate... :) |
| 09:13 | Raynes | That's kind of odd. |
| 09:13 | LauJensen | Raynes: 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:13 | LauJensen | s/also/always/ |
| 09:13 | sexpbot | <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:17 | notsonerdysunny | ,(conj [1 2 3] 4) |
| 09:17 | clojurebot | notsonerdysunny: I don't understand. |
| 09:17 | notsonerdysunny | ,(conj [1 2 3] 4) |
| 09:17 | clojurebot | notsonerdysunny: Excuse me? |
| 09:18 | notsonerdysunny | ,(conj [1 2 3] 4) |
| 09:18 | clojurebot | notsonerdysunny: Gabh mo leithscéal? |
| 09:18 | notsonerdysunny | its kind of funny .. :) |
| 09:18 | notsonerdysunny | ,(conj [1 2 3] 4) |
| 09:18 | clojurebot | notsonerdysunny: Huh? |
| 09:18 | notsonerdysunny | ,(conj [1 2 3 4] 5) |
| 09:18 | clojurebot | notsonerdysunny: Gabh mo leithscéal? |
| 09:18 | notsonerdysunny | ,(conj [1 2 4 8] 5) |
| 09:18 | clojurebot | notsonerdysunny: I don't understand. |
| 09:19 | notsonerdysunny | ,(conj [ 1 2 3 4 5 6 7] 8) |
| 09:19 | clojurebot | notsonerdysunny: Huh? |
| 09:19 | Raynes | It's less funny the 8th time. |
| 09:19 | notsonerdysunny | ,(conj [ 1 2 3 4 5 ] 55) |
| 09:19 | clojurebot | notsonerdysunny: No entiendo |
| 09:19 | raek | I 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:19 | notsonerdysunny | sorry Raynes .. |
| 09:19 | Raynes | :p |
| 09:20 | raek | (if-let [y (and x (re-find z x))] y w) |
| 09:20 | Raynes | raek: You're a genius. You must blog about your findings immediately. |
| 09:21 | raek | was that sarcasm? I don't claim I realized something revolutionary... |
| 09:22 | raek | this has been bugging me before |
| 09:22 | Raynes | raek: Not quite. |
| 09:23 | cgrand | raek: (or (and x (re-find z x)) w) |
| 09:24 | raek | yes, but in my case I actually did something more with y (which I omitted here) |
| 09:25 | @rhickey | chouser: 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:25 | raek | regexen are indeed write-only... |
| 09:25 | Raynes | They aren't meant for reading. |
| 09:26 | raek | that's the reason I have 70 lines of tests for 2 lines of regexen |
| 09:26 | @rhickey | the regex would need to distinguish clojure fn names from other class names |
| 09:27 | chouser | rhickey: you want two separate stringss back? demunged namespace, demunged fn name? |
| 09:27 | @rhickey | could be as simple as contains $ and methodname contains "nvoke" |
| 09:28 | @rhickey | clojure.core$let.doInvoke => clojure.core/let |
| 09:29 | @rhickey | chouser: yes, two strings would be fine |
| 09:29 | chouser | but if not a clojure fn, leaves it untouched? |
| 09:31 | chouser | mmcgrana has some related code here: http://github.com/mmcgrana/clj-stacktrace/blob/master/src/clj_stacktrace/core.clj |
| 09:32 | @rhickey | chouser: maybe should return full ns/name in first case, then yes, untouched otherwise |
| 09:32 | @rhickey | chouser: it would be lovely if that was in contrib, might even make it into the repl |
| 09:34 | @rhickey | but the munging stuff is already in core, and the rest is pretty simple |
| 09:35 | @rhickey | he's not looking at structure of name, but for .clj source file |
| 09:36 | chouser | yeah |
| 09:37 | chouser | before 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:49 | chouser | rhickey: can I use clojure.string, or is that not available yet when this needs to work? |
| 09:57 | @rhickey | chouser: best not |
| 09:58 | @rhickey | I 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 | @rhickey | invoke-ish |
| 09:59 | chouser | validation shouldn't be hard, so if it's a pain on your end don't bother. |
| 09:59 | @rhickey | either way |
| 10:00 | chouser | right now trying to do demunging based on the table Compiler already has |
| 10:00 | chouser | CHAR_MAP |
| 10:08 | @rhickey | chouser: right |
| 10:30 | chouser | rhickey: ok, I think I have something that'll work as a starting point anyway. want it via email? |
| 10:31 | chouser | 30 lines, unfortunately. |
| 10:31 | chouser | not all regex. :-) |
| 10:39 | chouser | rhickey: sent |
| 10:40 | @chouser | rhickey: sent |
| 10:42 | @rhickey | chouser: looking at it now - thanks! |
| 10:45 | @chouser | np. hope it helps. |
| 10:49 | @chouser | note inner fns get funny names |
| 10:49 | @chouser | (fn-name (str (.getName (class (.dispatchFn print-method))) ".invoke")) ;=> "clojure.core/fn--3962/fn" |
| 10:49 | @chouser | not sure what you wanted there. |
| 10:50 | @chouser | (fn-name (str (.getName (class (fn a>b<c))) ".invoke")) ;=> "user/eval813/a>b<c" |
| 10:52 | LauJensen | chouser: would be great if it said anon-fn-which- and then an english description of the body :) |
| 10:52 | @chouser | heh |
| 11:17 | AWizzArd | rhickey: would it be possible to add a compiler flag which, when set, will try to make every defn ^:static? |
| 11:18 | @rhickey | AWizzArd: anything is possible, not sure about doing that |
| 11:20 | AWizzArd | This could be set somewhere in Ant, when one builds a .jar file. |
| 11:22 | AWizzArd | rhickey: 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:22 | AWizzArd | So, google group? |
| 11:24 | @rhickey | AWizzArd: that's not true, anyone can use Support tab, but checking in ggroup still first step |
| 11:25 | AWizzArd | A 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 | @rhickey | Support tab still probably requires an Assembla account, and maybe watching the project |
| 11:26 | @rhickey | but no special privileges |
| 11:28 | AWizzArd | ok, maybe he was not a watcher! |
| 12:27 | duncanm | if 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:32 | Chousuke | duncanm: (x1 y1) |
| 12:32 | duncanm | Chousuke: the list? |
| 12:32 | Chousuke | yeah |
| 12:32 | duncanm | so i'd get back.... a list of lists? |
| 12:32 | Chousuke | read reads just one form at a time |
| 12:33 | Chousuke | so if your stream is just that, you'd just get the first list |
| 12:33 | Chousuke | and then the second the next time you read |
| 12:33 | Chousuke | etc. |
| 12:48 | @chouser | we should have read-seq |
| 12:54 | @rhickey | ok, improved repl errors and stack traces are up - try the new repl utility: pst |
| 12:54 | @rhickey | thanks to chouser for the help |
| 13:01 | @chouser | printing only the root cause obscures file name and line number of compile-time exceptions |
| 13:04 | @rhickey | chouser: you mean in pst? |
| 13:04 | @chouser | yeah. and various other stack trace prettifiers floating around. |
| 13:04 | @rhickey | pst can take an exception arg, (pst *e) |
| 13:05 | @chouser | for 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 | @rhickey | but the conditional in clojure.repl considered almost all repl exceptions to be compiler exceptions |
| 13:05 | @rhickey | er, clojure.main |
| 13:06 | duncanm | rhickey: 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 | @rhickey | duncanm: I don't know who would be in Raleigh |
| 13:06 | duncanm | rhickey: is there a mailing list where i can ask this question? |
| 13:09 | @rhickey | duncanm: I'll see |
| 13:09 | duncanm | rhickey: thanks so much, sorry for interrupting |
| 13:09 | @rhickey | chouser: so, what's an example? |
| 13:09 | @chouser | (defn evil [x] (eval x)) (evil '(Foo/bar)) |
| 13:10 | @chouser | the one-line summary doesn't include the filename/line number of the actual error |
| 13:10 | @chouser | neither does (pst) |
| 13:11 | @chouser | (pst *e) does, but that's at the top of a very long trace |
| 13:11 | @rhickey | chouser: well, I'm happy to have another heuristic, but the old one (is it a CompierException) seemed always true |
| 13:11 | @chouser | ok |
| 13:17 | @rhickey | maybe if compiler exception and source not NO_SOURCE_FILE |
| 13:19 | apgwoz | who do i have to talk to get my messages "auto approved" for the list? |
| 13:19 | apgwoz | ... talk to to get |
| 13:20 | @chouser | apgwoz: I think google groups does that automatically over time. |
| 13:20 | apgwoz | chouser: interesting. ok |
| 13:20 | apgwoz | sort of hard to contribute to a conversation when your responses show up hours later :) |
| 13:20 | apgwoz | but, i guess in the long run it's better |
| 13:31 | @chouser | duncanm: (defn read-seq [reader & [recursive?]] (let [eof (Object.)] (take-while #(not (identical? eof %)) (repeatedly #(read reader false eof (boolean recursive?)))))) |
| 13:32 | @chouser | then something like (vec (read-seq (clojure.lang.LineNumberingPushbackReader. (clojure.java.io/reader "core.clj")))) |
| 13:32 | duncanm | chouser: wow, thanks so much |
| 13:32 | Raynes | LineNumberingPushbackReader IsAReallyLongClassName. |
| 13:33 | duncanm | it's better than PushbackReaderWithLineNumbers |
| 13:34 | @chouser | or DescriptorProtos$DescriptorProto$ExtensionRange$Builder |
| 13:38 | @chouser | http://tinyurl.com/2ca3nhb (in case you think I'm kidding) |
| 13:40 | mefesto | to type hint a String[] in clojure is ^"[Ljava.lang.String;" the way to go? |
| 13:42 | @chouser | duncanm: 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 | @chouser | then ^#=(user/array-type String) seems to work. |
| 13:48 | @chouser | :-P |
| 13:48 | Raynes | oo |
| 13:48 | @chouser | probably better off with what you had. |
| 13:48 | Raynes | o.o* |
| 13:48 | Raynes | -> (type (make-array String 10)) |
| 13:48 | sexpbot | => [Ljava.lang.String; |
| 13:48 | Raynes | Lovely. |
| 13:48 | mefesto | heh thanks. wasn't sure if there was something setup like how there is for primitives |
| 13:49 | @chouser | mefesto: I don't know of any. ...but that proves nothing :-P |
| 13:50 | @chouser | Raynes: ah, (make-array (resolve c) 0) would be slightly better |
| 13:51 | LauJensen | Is 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 | @chouser | the following char is usually the first letter of the type name, B for bytes, I for ints, etc. |
| 13:56 | @chouser | except longs is J and Objects is L. I have no idea what that's about. |
| 13:57 | LauJensen | So in other words... no? :) |
| 13:59 | technomancy | LauJensen: basically they really didn't put much thought into it since they don't understand repls |
| 13:59 | @chouser | hm. I doubt that was it. they know how to print themselves somewhat prettier |
| 14:00 | LauJensen | Well... I think Phil is right in so far that they probably didn't put a lot of thought into it |
| 14:00 | LauJensen | I 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 | @chouser | yeah -- those are internal bytecode things |
| 14:02 | cemerick | duncanm: regarding carpooling, I'd try to give a shout on twitter? |
| 14:06 | duncanm | cemerick: okay |
| 14:06 | duncanm | cemerick: good idea |
| 14:06 | duncanm | the lesson here for me really is: i really need to learn how to drive |
| 14:07 | raek | (function for parsing jvm type descriptors: http://github.com/raek/impojure/blob/master/src/impojure/class/constant_pool.clj#L114 ) |
| 14:07 | cm9 | Hi, |
| 14:08 | cm9 | I'm running lein.bat to install leiningen, but it tells me the lein jar file can't be found. |
| 14:08 | duncanm | is there something like interleave, but gives me alists instead of plists? |
| 14:08 | raek | "[Ljava.lang.Object;" --> [:array [:reference "java.lang.Object"] 1] |
| 14:09 | cm9 | It says I can try lein self-install, but the readme doesn't mention this and it doesn't help anyway. |
| 14:09 | @chouser | duncanm: heh "alists" and "plists" aren't clojure words, but maybe you want 'zipmap'? |
| 14:09 | raek | "[[[I" --> [:array [:primitive :int] 3], etc |
| 14:09 | cm9 | It 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:10 | raek | maybe you could try removing the maven local repository directory |
| 14:10 | raek | I don't know where it is in Windows |
| 14:10 | raek | maybe somewhere in Application Data or something |
| 14:10 | cm9 | I have never used maven though, there shouldn't be one.. |
| 14:10 | raek | leiningen uses maven |
| 14:11 | cm9 | I've never used leiningen, I'm trying to install it for the first time here,. |
| 14:11 | raek | ok, no previous failed installs or anything? then there shouldn't be any maven stuff around... |
| 14:12 | cm9 | nope. Nothing like that, |
| 14:12 | cm9 | it's odd! |
| 14:12 | LauJensen | cm9: If you're on Windows, try Cake instead of lein, it does the same as lein and then some |
| 14:12 | LauJensen | http://github.com/ninjudd/cake/wiki/Cake-on-Windows |
| 14:12 | cm9 | LauJensen: Okay, I'll give that a shot |
| 14:12 | cm9 | Thanks |
| 14:12 | raek | can you post what you get from "lein self-install" on pastebin or something? |
| 14:12 | LauJensen | np - Ive tried it, it works great |
| 14:12 | cm9 | raek: Will do |
| 14:13 | raek | what are the notable features cake? (I've heard about the persistent JVM) |
| 14:13 | cm9 | raek: http://pastebin.com/vz2iutXe |
| 14:14 | LauJensen | raek: 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:14 | raek | I'm currently very happy with leiningen, but it's always good to know about other tools and what they do best |
| 14:15 | LauJensen | Cake is a drop in replacement for lein, but does more than lein if you need it to |
| 14:15 | LauJensen | and these guys that are working on it, are beyond fast. They put in a lot of work |
| 14:16 | cm9 | Lau: Cake doesn't have any problem with x64 version of the JDK, does it? |
| 14:16 | LauJensen | cm9: No, I reported a bug a couple of weeks ago, was fixed in about 6 minutes IIRC |
| 14:17 | cm9 | Lau: wow - that is commitment. You think they were staring at a blank email client waiting for bugs to come in? :) |
| 14:17 | LauJensen | cm9: 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:18 | raek | hrm... is the lein.bat link pointing to the master version? that doesn't seem right... |
| 14:18 | Licenser | greetings my lispy friends |
| 14:18 | cm9 | Lau: Perhaps a ninja with udders |
| 14:18 | LauJensen | They 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:18 | LauJensen | cm9: quite possibly |
| 14:18 | raek | cm9: try this lein.bat instead: http://github.com/technomancy/leiningen/raw/stable/bin/lein.bat |
| 14:18 | cm9 | raek: This won't clash with having cake installed, will it? |
| 14:18 | raek | nope |
| 14:20 | AWizzArd | Apple 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:20 | cm9 | raek: Now I just get "http://github.com/technomancy/leiningen/raw/stable/bin/lein.bat" |
| 14:20 | cm9 | raek: Oops. I meant now I just get... |
| 14:20 | cm9 | raek: ..."The syntax of the command is incorrect." |
| 14:20 | LauJensen | AWizzArd: Im just not sure Clojure makes sense in that setting |
| 14:20 | raek | hrm, does it mention which command? |
| 14:21 | LauJensen | cm9: Why waste time on lein when cake works? |
| 14:21 | cm9 | that's the entire output when I type "lein self-install". |
| 14:21 | cm9 | lau: Still downloading jdk! |
| 14:21 | LauJensen | k |
| 14:22 | raek | ah, you don't have java installed yet? that might explain it... |
| 14:25 | hiredman | some people have stricter definitions of "works" than cake adheres to |
| 14:25 | raek | cm9: if you open a command terminal and run "java -version", do you get "The syntax of the command is incorrect."? |
| 14:25 | LauJensen | hiredman: speaking from any recent experience? |
| 14:26 | lancepantz | whats up with that hiredman? |
| 14:27 | cm9 | raek: similar to that yes |
| 14:27 | cm9 | raek: java must not be on my path |
| 14:28 | raek | from the source of lein.bat, it looks like it uses the java executable |
| 14:29 | raek | so I guess it has to be on the path |
| 14:29 | LauJensen | it does |
| 14:30 | LauJensen | hiredman: 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:30 | lancepantz | hiredman: 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:31 | lancepantz | not calling you out specifically, but this isn't the first time |
| 14:31 | cm9 | raek: 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:31 | lancepantz | it doesn't even matter if it "works" anyways, it's clearly stated as a work in progress all over the documentation |
| 14:31 | LauJensen | lancepantz: 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:31 | cm9 | raek: Anyway - jdk is downloaded now, so I'm going to try and go ahead with that. |
| 14:32 | cm9 | (and cake) |
| 14:38 | cm9 | Lua: 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:39 | cm9 | s/Lua/Lau/ |
| 14:39 | sexpbot | <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:39 | LauJensen | cm9: 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:40 | cm9 | Lau: great, thanks for all your help |
| 14:40 | lancepantz | cm9: if you want a repl, just do cake repl |
| 14:40 | lancepantz | cake help will tell you all of the commands |
| 14:40 | LauJensen | http://github.com/ninjudd/cake |
| 14:40 | cm9 | Thanks, I will surely be back later with more questions! |
| 14:40 | LauJensen | cm9: np. There's a good intro on that page |
| 14:40 | lancepantz | you can start a new project by using cake new 'project-name' |
| 14:40 | LauJensen | lancepantz: you forgot to put 'new' on the github page |
| 14:41 | cm9 | lancepantz: Not at that level yet, need to learn a bit about clojure itself before making multi-file projects.. |
| 14:41 | lancepantz | and if you have any cake specific questions, we use the #cake.clj channel |
| 14:41 | cm9 | lancepantz: Just interested in getting the contents of a file to "run", like I'd do with python: "python foo.py" |
| 14:42 | cm9 | (for now) |
| 14:43 | LauJensen | cake repl => (load-file "myfile.clj"), would work I think |
| 14:43 | lancepantz | cm9: in most cases its not that simple, as java needs to have the class path set up if you're using any jars |
| 14:44 | cm9 | lancepants: you're referring to the clojure jar, I suppose? |
| 14:44 | lancepantz | no, that one will get included |
| 14:44 | cm9 | lancepantz: I don't plan to make my own jars for a while if I don't have to. |
| 14:45 | ssideris | so cake is a lein alternative? |
| 14:45 | cm9 | I'd just like to get started with clojure as simply as possible! |
| 14:45 | lancepantz | but if you want to start simple, open a new file anywhere on your system, and add (println "hi") |
| 14:45 | cm9 | brb |
| 14:45 | lancepantz | then do 'cake run filename' |
| 14:45 | lancepantz | ssideris: cake is another clojure build tool, yes |
| 14:47 | briancarper | And for yet another build tool question... could anyone tell me why ths is failing to install clojure-contrib? http://gist.github.com/572306 |
| 14:48 | briancarper | I can see the JARs sitting right here: http://build.clojure.org/snapshots/org/clojure/contrib/complete/1.3.0-SNAPSHOT/ |
| 14:48 | slyrus | complete vs. complete:jar: |
| 14:49 | ssideris | lancepantz: do you know if/what advantages it offers over leininingen? |
| 14:49 | cm9 | lancepants: That cake run is just what I need, thanks. |
| 14:50 | lancepantz | ssideris: i'd look over the readme http://github.com/ninjudd/cake |
| 14:50 | LauJensen | cm9: Next up, you might want to install ERC, you get free nick completion :) |
| 14:50 | cm9 | sorry :-S I will look into it |
| 14:51 | lancepantz | ssideris: 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:51 | briancarper | slyrus: What does complete:jar: mean? |
| 14:52 | anonymouse89 | I'm having trouble including clojure as a lein dep |
| 14:52 | hiredman | briancarper: you have the version names reversed for contrib and clojure |
| 14:52 | anonymouse89 | is it not hosted on clojars? If I search for org.clojure I get no relevant results |
| 14:52 | slyrus | briancarper: who knows. but it's looking for org.clojure.contrib:complete:jar:1.3.0-SNAPSHOT |
| 14:52 | hiredman | contrib has a "master" and clojure doesn't |
| 14:53 | ssideris | lancepantz: 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:53 | kencausey | anonymouse89: Look at the clojure.org download page, it lists the lein info |
| 14:54 | kencausey | anonymouse89: and no, it is not on clojars |
| 14:54 | anonymouse89 | kencausey: sorry for the silly question, but that's exactly what I needed |
| 14:54 | kencausey | actually, I might be wrong about clojars... I'm not sure but anyway, you're welcome |
| 14:55 | lancepantz | ssideris: ah, well cake does some trickery to eliminate jvm startup time after the first command, alot of people like that |
| 14:55 | briancarper | hiredman: Are you sure? It's successfully finding clojure with "master". It fails to find contrib even if I add "master". |
| 14:56 | briancarper | Clojure has "master" in the URL: http://build.clojure.org/snapshots/org/clojure/clojure/1.3.0-master-SNAPSHOT/ |
| 14:56 | lancepantz | ssideris: it also is easier to add new tasks to your project, and to chain tasks together |
| 14:57 | hiredman | briancarper: not 100%, but that is how it's been for sometime now |
| 15:00 | ssideris | lancepantz: sounds useful |
| 15:00 | ssideris | I wonder why people hate it |
| 15:00 | ssideris | since it seems compatible with leiningen anyway |
| 15:01 | lancepantz | me too |
| 15:02 | briancarper | So I guess I'm back to building contrib by hand. Maven is a disaster. Thanks for the help anyways. |
| 15:03 | Raynes | briancarper: Don't let cemerick here you. ;o |
| 15:04 | hiredman | ~works on my machine |
| 15:04 | clojurebot | http://haacked.com/images/haacked_com/WindowsLiveWriter/IConfigMapPathIsInaccessibleDueToItsProt_1446B/works-on-my-machine-starburst.png |
| 15:06 | cemerick | I hear all. Most things I let just drift by, though. :-) |
| 15:07 | LauJensen | cemerick: yea right :) |
| 15:09 | ninjudd | briancarper: it looks like the contrib problem is on http://build.clojure.org/ |
| 15:10 | ninjudd | the 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:10 | ninjudd | but 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:12 | briancarper | ninjudd: I see. Good catch. So how do I tell Maven to install this file instead? |
| 15:12 | ninjudd | looks 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:16 | briancarper | ninjudd: OK then. Thanks. |
| 15:17 | ninjudd | cemerick: do you have any idea why the -bin is added to those jars? |
| 15:18 | ranjit_c | i'm not sure if this message came through already, but: |
| 15:18 | ranjit_c | does anybody have any experience with using jtransforms in incanter? i'm having some trouble getting the 2d transforms to work |
| 15:23 | cemerick | ninjudd: it's recent, so likely the result of a pom change |
| 15:26 | cemerick | ninjudd: here's the commit that introduced the change http://github.com/clojure/clojure-contrib/commit/b0f2e778a81916fbdb5cf59bdf364307ba1ec965 |
| 15:26 | cemerick | notice the <id>bin</id> in the assembly descriptor |
| 15:27 | LauJensen | cemerick: Do you know why that was done? |
| 15:27 | ninjudd | cemerick: yep. do you have to do something special in maven to get that jar? specify id=bin i suppose |
| 15:27 | cemerick | LauJensen: No, someone would have to ask Stuart. |
| 15:28 | cemerick | ninjudd: it's actually ends up being a classifier, I think. |
| 15:28 | cemerick | It'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:31 | ninjudd | ok. just checked in a fix to cake to support classifiers |
| 15:32 | briancarper | [org.clojure.contrib/complete "1.3.0-SNAPSHOT" :classifier "bin"] works for lein. |
| 15:32 | cemerick | briancarper: glad things are on the right track :-) |
| 15:33 | ninjudd | briancarper: yeah, just added the same syntax to cake. thanks |
| 15:33 | LauJensen | I told you these guys work fast! |
| 15:33 | cemerick | now ninjudd just needs to put me on the payroll :-P |
| 15:34 | Raynes | LauJensen: You might want to consider purchasing some pom poms. |
| 15:34 | cemerick | lol |
| 15:34 | LauJensen | Raynes: I need more than one set? |
| 15:34 | cemerick | LauJensen: different colors, chief! |
| 15:34 | Raynes | It's all about the rainbow. |
| 15:34 | ninjudd | cemerick: you want a job? we'll hire you. you just have to move to Los Angeles |
| 15:35 | cemerick | ninjudd: I have too many jobs. I probably wouldn't be able to hack LA, anyways. :-) |
| 15:35 | cemerick | Santa Barbara, now that's another story. |
| 15:36 | briancarper | I 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:37 | cemerick | briancarper: I understand the pain. |
| 15:37 | ninjudd | cemerick: 1 hour 38 minutes drive |
| 15:37 | cemerick | *way* too much :-) |
| 15:38 | ninjudd | yeah. i drive 30 minutes, and that's *way* too much |
| 15:38 | cemerick | The solution is education of course. Imagine someone chucking the JVM because they didn't grok the classpath. *shrug* |
| 15:38 | cemerick | I 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 | @chouser | cemerick: I had a similar experience, though perhaps a bit less extreme. |
| 15:40 | @chouser | cemerick: focusses the mind |
| 15:40 | lancepantz | i move alot |
| 15:41 | cemerick | chouser: I'd say the opposite. I was numb after a month. :-( |
| 15:41 | cemerick | That was a looong time ago. |
| 15:41 | cemerick | Stories to last a lifetime though. I've a bucket-full. |
| 15:41 | lancepantz | however, 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:41 | cemerick | lancepantz: jog? |
| 15:41 | LauJensen | lancepantz: helicopter broken? |
| 15:41 | @chouser | I mean -- motivates to escape a life of such employment |
| 15:42 | cemerick | oh, right |
| 15:42 | lancepantz | in a car :) |
| 15:42 | cemerick | yeah, I'm saying...jog instead |
| 15:42 | lancepantz | EXERCISE?!?! |
| 15:42 | LauJensen | I 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:42 | lancepantz | dear lord man |
| 15:43 | @chouser | met guys there who'd been doing roughly the same job of 20+ years. made my heart ache. |
| 15:43 | cemerick | lancepantz: Just got back from playing 1.5 hrs of handball. It's good for the mind. |
| 15:43 | briancarper | cemerick: 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:43 | cemerick | I figured out a bug in the process that I'd been stuck on for 2 days. |
| 15:43 | lancepantz | i've actually become quite a fan of surfing since the move to la |
| 15:44 | lancepantz | now thats about my favorite thing to do, that wears me out enough |
| 15:44 | cemerick | briancarper: I fundamentally agree. |
| 15:44 | cemerick | artifact coordinates have (almost) nothing to do with maven at this point though |
| 15:44 | cemerick | everyone should know about group, project, version, classifier |
| 15:45 | @chouser | :-( |
| 15:45 | drewr | is there something like :validator for a ref that will retry the commit upon failure instead of throwing an exception? |
| 15:46 | cemerick | chouser: here's the URL for you: http://maven.apache.org/pom.html#Maven_Coordinates |
| 15:46 | hiredman | LauJensen: how is that buggy maven behavior? |
| 15:46 | @chouser | cemerick: thanks. will read it right now. |
| 15:46 | briancarper | cemerick: Point taken, thanks. I'll read up. |
| 15:48 | hiredman | just because you are unaware of something that does not make it a bug |
| 15:50 | @chouser | read a post from a debian guy about how langauge-specific dep management solutions are all so weak compared to debian's |
| 15:50 | @chouser | I believed him. |
| 15:50 | LauJensen | chouser: All I know, is that apt-get can spend a 1 minute doing what pacman does in 1 sec |
| 15:51 | cemerick | An 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:51 | chouser | LauJensen: not sure that's a good amount to know. |
| 15:51 | LauJensen | hehe, agreed :) |
| 15:51 | cemerick | Of course, there's no completion in string-based coordinates in a project.clj |
| 15:56 | mrBliss | degustibus: another belgian! |
| 16:08 | chouser | does a maven version have a specified format, or is it just a string? |
| 16:08 | anonymouse89 | is there a fn to replace the nth element of a seq? |
| 16:09 | degustibus | hi |
| 16:09 | mrBliss | hi degustibus |
| 16:09 | chouser | assoc replaces the nth element of a vector |
| 16:09 | cemerick | chouser: maven coordinates can be represented as a string |
| 16:09 | degustibus | is this the right place to ask about slime/swank-clojure problems? |
| 16:09 | @rhickey | man, I hate tests that check for particular exception types |
| 16:09 | chouser | cemerick: that's not what I mean. if I want may version to be "gamma" or "yoink" is that ok? |
| 16:10 | chouser | my |
| 16:10 | mrBliss | degustibus: you can always try ;-) |
| 16:10 | cemerick | oh, I see |
| 16:10 | anonymouse89 | chouser: cool, didn't realize that assoc was not only for maps |
| 16:10 | chouser | anonymouse89: it's for associative things which include vectors and maps, but not seqs |
| 16:11 | degustibus | i 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:11 | cemerick | chouser: Yes, you can have arbitrary version strings, but then version ranges won't work. |
| 16:12 | mrBliss | degustibus: which version of the slime plugin (via elpa?) |
| 16:12 | cemerick | e.g. you won't get 1.1-FOOEY if you specify a dependency with a version of [1.0,2.0) |
| 16:12 | degustibus | doing 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:12 | cemerick | and -SNAPSHOT version strings have special semantics |
| 16:12 | degustibus | (i'm new to emacs, so i have to clue how to go around troubleshooting it) |
| 16:12 | chouser | cemerick: makes sense. can projects at the top (root?) of a dep tree override deps of its various intermediate nodes? |
| 16:13 | chouser | oh. will have to read about -SNAPSHOT then. |
| 16:13 | mrBliss | degustibus: how did you install swank-clojure? |
| 16:13 | cemerick | chouser: If I understand the question, yes. That's what the <dependencyManagement> element is for, to override deps defined in "child" projects. |
| 16:13 | cemerick | I don't think lein/cake have any corollary to that yet. |
| 16:13 | @rhickey | improved pst is up: http://github.com/clojure/clojure/commits/master |
| 16:14 | chouser | cemerick: ok, thanks. |
| 16:14 | mrBliss | degustibus: just a dev-dependency in project.clj right? |
| 16:14 | scottj | rhickey: do you prefer that format to clj-stacktrace? |
| 16:14 | degustibus | i cloned the repository and did "lein jar" and then I copied the jar + clojure and clojure-contrib to ~/.swank-clojure |
| 16:14 | @rhickey | now with depth control, better reporting for compilation errors |
| 16:14 | @rhickey | scottj: never used clj-stacktrace |
| 16:14 | degustibus | i also tried "lein swank" in incanter and the result is pretty much the same |
| 16:15 | mrBliss | degustibus: that's more interesting |
| 16:15 | mrBliss | degustibus: can you make a new leiningen project |
| 16:16 | mrBliss | degustibus: with :dev-dependency [[swank-clojure "1.2.1"]] ? |
| 16:16 | degustibus | let me try that |
| 16:17 | scottj | rhickey: 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:19 | chouser | rhickey: (pst) seems to break when printing a NullPointerException |
| 16:19 | hiredman | cemerick: is that like excluding dependencies of a subproject? |
| 16:19 | chouser | (.foo nil) (pst) ;=> java.lang.NullPointerException java.io.PrintWriter.write (PrintWriter.java:399) |
| 16:20 | hiredman | (cause lein does that) |
| 16:21 | cemerick | hiredman: it allows you to change versions of or exclude dependencies for the project it's defined for, and all dependencies of that project. |
| 16:22 | degustibus | mrBliss: same thing... |
| 16:22 | degustibus | also compilation doesn't work either |
| 16:22 | degustibus | it says "Compiling..." and locks up |
| 16:22 | mrBliss | degustibus: which version of slime do you have? |
| 16:22 | degustibus | 2010-09-03 |
| 16:23 | mrBliss | try installing slime and slime-repl 20100404 with ELPA |
| 16:23 | hiredman | rhickey: re clj-stacktrace http://osdir.com/ml/clojure/2010-08/msg01110.html |
| 16:24 | @rhickey | hiredman: yes, I looked at the link above |
| 16:25 | degustibus | i will try that |
| 16:25 | hiredman | the link above is clj-stacktrace, my link is someone saying "hey, clj-stacktrace is neat, we should have it in clojure" |
| 16:25 | @rhickey | chouser: NPE has null message |
| 16:26 | @rhickey | I'll add the class and that will take care of that |
| 16:36 | rainerschuster | some clojure-clr folks on the chan today? |
| 16:39 | @rhickey | pst prints classnames |
| 16:47 | emh | is 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 | @rhickey | emh: the latest clojure.repl has a root-cause which will walk down nested causes (other than CompilerExceptions) |
| 16:50 | emh | rhickey: thx |
| 16:51 | lancepantz | alexyk: ping |
| 16:51 | alexyk | lancepantz: pong |
| 16:52 | lancepantz | alexyk: when you were doing your serialization benchmarks, did you compare json jackson to c.c.json and clojure-json? |
| 16:53 | Anniepoo_ | 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:53 | alexyk | lancepantz: I did mmcgrana's clj-json, based on jackson, only |
| 16:53 | alexyk | and it was damn slow |
| 16:53 | lancepantz | yeah, thats what i was interested in |
| 16:53 | alexyk | so kinda no sense with the rest |
| 16:53 | lancepantz | really? slower than the pure clojure variants? |
| 16:54 | alexyk | lancepantz: no, the others are even slower |
| 16:54 | alexyk | jackson rocks, but dynamic nature of clojure is such that apparently you can't get fast serialization unless you declare what and how |
| 16:54 | alexyk | ocaml kicks ass so bad here |
| 16:55 | lancepantz | interesting |
| 16:55 | lancepantz | you should publish those numbers, i think alot would find them useful |
| 16:55 | LauJensen | alexyk: yea, blog! |
| 16:55 | lancepantz | seems to come up regularlly |
| 16:57 | alexyk | I have a domain even clojure.pro, for this, but no time :( |
| 16:57 | alexyk | eventually |
| 16:57 | lancepantz | i keep coming up with these elaborate plans to write my own blogging software, which just creates too much resistance |
| 16:57 | LauJensen | lancepantz: yea, silly, considering Ive already done it for you :) |
| 16:58 | alexyk | lancepantz: no sense in that, I setup tumblr on my own domain, and it understands markdown, and you post github gists with code |
| 17:00 | lancepantz | LauJensen: did you write a blogging platform? |
| 17:00 | LauJensen | lancepantz: Well, micro-platform. bestinclass.dk. You can watch my latest screencast to see the blogging backend |
| 17:00 | @rhickey | LauJensen: so, does pst do it for you? |
| 17:01 | lancepantz | i'll check it out |
| 17:01 | LauJensen | rhickey: It certainly looks like it |
| 17:02 | LauJensen | rhickey: Did you spend all this time on stacktraces today because I whined in here? |
| 17:02 | AWizzArd | rhickey: thanks for pst. |
| 17:03 | @rhickey | LauJensen: 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:04 | LauJensen | Oh ok - Well thanks a bunch! |
| 17:05 | @rhickey | LauJensen, AWizzArd : chouser helped with some demunge code |
| 17:05 | LauJensen | Yea I saw - rhickey you yourself must be impressed by this community that has spawned around clojure. Impressive to see how things get done |
| 17:07 | lancepantz | it's interesting how quickly it happened |
| 17:09 | @rhickey | lancepantz: there's not much to it, I wonder if it really will make a difference for people. |
| 17:12 | ssideris | wooohooo, just parallelized my program trivially (from map to pmap) |
| 17:12 | ssideris | :-) |
| 17:13 | ssideris | sorry, 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:13 | Chousuke | pst looks neat |
| 17:14 | Chousuke | With old clojure stacktraces it was pretty difficult to see which part was java and which Clojure |
| 17:14 | ssideris | are you referring to this? http://github.com/mmcgrana/clj-stacktrace |
| 17:15 | Raynes | ssideris: http://github.com/clojure/clojure/commit/9c7566a42dc029b17cb1819ff00a8e802e4a1767 |
| 17:26 | technomancy | I wonder why clj-stacktrace wasn't considered for Clojure itself; the response on the mailing list seemed very positive. |
| 17:27 | @rhickey | technomancy: the author never attempted to put it in contrib afaik |
| 17:28 | technomancy | I'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:29 | technomancy | or do you mean for copyright assignment purposes? |
| 17:29 | @rhickey | technomancy: if it started in contrib it could have been moved in with the other repl stuff |
| 17:30 | scottj | will this change have any effect on how backtraces are displayed in slime (break them?) or how compojure prints them to terminal? |
| 17:31 | technomancy | scottj: slime has its own hand-rolled, not-very-good backtrace printer. |
| 17:32 | technomancy | but perhaps it could be improved to build on this |
| 17:33 | cemerick | Surely reimplementing widely-used libs just because they're not in contrib already isn't the best path?</rhetoricalComment> |
| 17:33 | @rhickey | cemerick: what is the expectation then? If people want to improve Clojure they should contribute to it |
| 17:33 | @rhickey | meanwhile you have people advising others not to participate in contrib |
| 17:34 | rainerschuster | btw. interessted in clr contrib? |
| 17:34 | cemerick | rhickey: 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 | @rhickey | cemerick: am I supposed to do that? |
| 17:35 | hiredman | rhickey: 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 | @rhickey | hiredman: 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:36 | cemerick | rhickey: 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:36 | hiredman | rhickey: I don't see that modularizing really changes the big ball of stuff nature |
| 17:36 | hiredman | the big ball stuff has more to do with a big ball of stuff in source control |
| 17:37 | alexyk | how do we print clojure version in the repl? |
| 17:37 | dnolen | ,*clojure-version* |
| 17:37 | clojurebot | {:interim true, :major 1, :minor 2, :incremental 0, :qualifier "master"} |
| 17:37 | @rhickey | hiredman: any aspect of that could be improved upon. But things are either in the project or not |
| 17:37 | alexyk | thx |
| 17:38 | chouser | ,(clojure-version) |
| 17:38 | clojurebot | "1.2.0-master-SNAPSHOT" |
| 17:38 | technomancy | I 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:38 | hiredman | rhickey: I think it would be better to just call certain projects "blessed" vs. everything has to be pulled into contrib |
| 17:39 | @rhickey | technomancy: nothing that was done today is any big deal. If clj-stacktrace does something wonderful it can be submitted as patches. |
| 17:39 | technomancy | right 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 | @rhickey | hiredman: you can think that, but you can;t put together a project with clean provenance that way |
| 17:39 | chouser | hmph. I'm really proud to have code in contrib. when did it get a bad rep? |
| 17:39 | Raynes | What he said. |
| 17:39 | cemerick | hiredman: the fact that contrib is under the clojure "group" has significance legally. |
| 17:40 | technomancy | rhickey: good to hear; I was just wondering aloud because of the lack of an official response on the mailing list thread |
| 17:40 | alexyk | chouser: thx |
| 17:40 | @rhickey | do you think apache projects build on random stuff from people's github repos? or postgresql? |
| 17:40 | cemerick | chouser: As am I, but until recently, it was impossible for authors to advance their contributions independently of the clojure release schedule. |
| 17:41 | @rhickey | technomancy: I'm sorry I missed that thread |
| 17:41 | technomancy | rhickey: np; in retrospect clojure-dev would have been a better place for it |
| 17:42 | rainerschuster | uups, i'm sorry, posted the same answer in the groups two times |
| 17:42 | chouser | cemerick: oh, this is a release version numbers thing again, isn't it. |
| 17:42 | danlarkin | what's the difference where the the code lives, if they assign copyright, or usage rights to Clojure, then that's that |
| 17:42 | technomancy | I have them both filtered into the same location, so I forget that there are separate mailing list sometimes. |
| 17:42 | hiredman | rhickey: I suppose I can understand that, but it doesn't make my think any better of contrib |
| 17:42 | cemerick | chouser: Roughly, yes. Apparently, now contrib authors can commit breaking changes (if they so choose), which aren't automatically pulled into contrib/master. |
| 17:43 | @rhickey | hiredman: have you ever submitted patches to improve contrib? |
| 17:43 | cemerick | I've almost stopped following the main list entirely. It's impossible to track consistently. |
| 17:43 | hiredman | not that I recall |
| 17:44 | hiredman | defintely nothing related to project structure |
| 17:44 | @rhickey | the 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 | @rhickey | yes, 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:47 | alexyk | dnolen: with all those trailing spaces now red in TextMate, is there a command to trim them all? |
| 17:48 | dnolen | alexy: trailing spaces in the textmate bundle? yeah I haven't had a chance to cleanup the white space. |
| 17:48 | alexyk | dnolen: 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:50 | dnolen | alexyk: probably, I'm planning on doing a bit of cleanup, also have a bunch of updates from franks42 |
| 17:51 | alexyk | dnolen: cool, I'll have git pull at the ready :) |
| 17:51 | dnolen | alexyk: have you been using it? how's it working out for you? |
| 17:52 | alexyk | dnolen: restarted today, we'll see |
| 17:52 | cemerick | rhickey: 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 | @rhickey | cemerick: 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:54 | rainerschuster | how can i run clojure-clr on a STA thread (for WPF usage) |
| 17:54 | rainerschuster | ? |
| 17:55 | technomancy | dnolen: same here, except now that now that we have clojure.java.io I don't need contrib |
| 17:55 | @rhickey | rainerschuster: you might try contacting David Miller directly about specifics like that |
| 17:55 | rainerschuster | thx |
| 17:56 | dnolen | technomancy: what about prioritymap ? what about fingertrees when they're ready. I still wanna see a good datalog tutorial, etc. |
| 17:56 | rainerschuster | (rhickey): is it part of the CA? |
| 17:56 | @rhickey | rainerschuster: ? |
| 17:57 | rainerschuster | Contributor Agreement |
| 17:57 | @rhickey | rainerschuster: is what part of the CA? |
| 17:57 | rainerschuster | clojure-clr |
| 17:57 | @rhickey | rainerschuster: yes, fully |
| 17:57 | rainerschuster | so i should send in a signed one |
| 17:58 | @rhickey | rainerschuster: yes, must do before contributing to clojure-clr |
| 17:58 | chouser | I'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 | @rhickey | chouser: 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:59 | cemerick | rhickey: such situations can't be remedied after the fact, assuming all the participants are on board? |
| 17:59 | ninjudd | rhickey: so are you suggesting that everyone who has a clojure project on github require contributors submit a CA? |
| 17:59 | rainerschuster | (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 | @rhickey | cemerick: going after that later is a huge hassle |
| 18:01 | chouser | a lot of stuff on github has no aspirations to be integrated into anything larger |
| 18:01 | technomancy | it was very easy to relicense swank-clojure despite having 30+ contributors |
| 18:01 | chouser | technomancy: I think it gets harder as email address start becoming invalid |
| 18:01 | @rhickey | ninjudd: 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:03 | ninjudd | rhickey: 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:04 | hiredman | ninjudd: cas are for a particular project |
| 18:05 | shoover | rainerschuster: when I ran a WPF app, I had to create my own thread and call SetApartmentState on it |
| 18:06 | @rhickey | it 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:06 | rainerschuster | (shoover): thx, so there is a ned for a run-in-sta func? |
| 18:06 | ninjudd | would it be possible to collect CAs online to reduce the friction for this kind of thing? |
| 18:06 | ninjudd | rhickey: hehe. just what i was thinking |
| 18:06 | shoover | rainerschuster: that would be one way to do it |
| 18:07 | @rhickey | ninjudd: I haven't looked into how to make that legally sound |
| 18:08 | shoover | rainerschuster: and you have to use the gen-delegate macro to create your ThreadStart to launch the thread |
| 18:08 | cemerick | ninjudd: http://twitter.com/cemerick/status/24046944800 ;-) |
| 18:08 | rainerschuster | (rhickey): is there a way to email it, or do i have to send it the long road (from germany) |
| 18:08 | ninjudd | rhickey: 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:08 | cemerick | Signed PDFs are fully legit, legally. |
| 18:09 | mcav | cemerick: signed as in pen-scribbled PDF, or signed as in type-name-in-box PDF? |
| 18:09 | cemerick | mcav: signed as in, using Acrobat's document-signing tools. |
| 18:09 | cemerick | open source folk probably don't have Acrobat Pro laying around, though |
| 18:10 | @rhickey | cemerick: who has those (besides you)? |
| 18:10 | cemerick | rhickey: They're baked into Acrobat Pro. Foxit may actually support it as well. |
| 18:10 | ninjudd | what about sending a high res photo of the signed agreement? it works for cashing checks... |
| 18:11 | cemerick | Adobe has its own central authority for such things, which the feds, IRS, state gov'ts etc. have all accepted. |
| 18:11 | arohner | is there a fix for slime eating parts of exception messages? |
| 18:11 | @rhickey | cemerick: I meant who as in people, not tools |
| 18:11 | arohner | that is, slime not printing 100% of the text that you'd see at the repl |
| 18:11 | cemerick | rhickey: If Acrobat Pro is the only avenue, then very few, and likely no developers. |
| 18:12 | @rhickey | cemerick: right |
| 18:12 | dakrone | rhickey: only the person who creates the original document needs Pro, anyone with Adobe Reader can CA-sign a document |
| 18:12 | @rhickey | far more people have submitted CAs than have tangibly contributed, so I don't think the CA is the impediment |
| 18:13 | @rhickey | dakrone: that's interesting |
| 18:13 | shoover | cemerick: I have it, but I only know about one feature that I needed at the time |
| 18:13 | shoover | cemerick: and I don't have a lot of shame about that :) |
| 18:13 | @rhickey | cemerick: I would love something like that (Adobe signing), not trying to shoot it down |
| 18:14 | rainerschuster | i'm chossing the oldfashioned way. 6€ will be affordable |
| 18:14 | @rhickey | dakrone: I wonder why I don't see more documents set up for signing like that then |
| 18:14 | cemerick | shoover: no shame to it at all :-) |
| 18:15 | hiredman | I usually use latex to overlay a svg of my signature on a pdf |
| 18:15 | ninjudd | rhickey: 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:15 | shoover | cemerick: and if you have Acrobat Pro you probably have Illustrator and Photoshop and no programmer should plumb all those depths |
| 18:16 | rainerschuster | (rhickey): why do you have to use this kind of agreement. aren't there any such licenses out there? |
| 18:16 | dakrone | rhickey: google uses it for people signing their NDAs |
| 18:16 | @rhickey | hrm "† For ad hoc form distribution and data collection for up to 500 people." |
| 18:17 | cemerick | shoover: I only have the first, but then I'm in a special situation :-) |
| 18:18 | lancepantz | cemerick: maybe you should implement online document signing in your pdf startup :) |
| 18:18 | technomancy | accepting scanned signed papers would be a step up from requiring actual postal mail IMO |
| 18:19 | cemerick | lancepantz: 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:19 | cemerick | But, Snowtide's been around since 2001, not quite a startup. |
| 18:19 | lancepantz | i was referring to docuharvest |
| 18:19 | cemerick | ah |
| 18:19 | cemerick | same thing applies, unfortunately :-) |
| 18:20 | mcav | agreed with technomancy -- even if you don't mess with acrobat, scanning the sheet in would be much better |
| 18:20 | cemerick | technomancy: Only faxed materials have force of law IIRC. |
| 18:20 | lancepantz | damn proprietary software :) |
| 18:20 | rainerschuster | (shoover): thx for sharing https://gist.github.com/193876/aa65c14f21159ac339b8980ec803c218b88e6b87 |
| 18:20 | cemerick | yes, damn that proprietary software! Uh, wait... |
| 18:20 | cemerick | :-D |
| 18:21 | technomancy | cemerick: wow, quite silly... but par for the course when it comes to US tech law I guess. |
| 18:21 | ninjudd | cemerick: but i can send a fax from my scanner to your email without ever using a fax machine |
| 18:21 | lancepantz | hahaha |
| 18:22 | arohner | cemerick: I don't believe that's correct. The law was updated to allow for digital signatures, and checkboxes |
| 18:22 | cemerick | technomancy: 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:22 | cemerick | That's all IIRC. |
| 18:22 | arohner | cemerick: so MegaCorp's EULA has legal force |
| 18:22 | cemerick | arohner: True, though that doesn't do much for something like a CA. |
| 18:23 | cemerick | Case law has been pretty tough on EULAs over the years, though, especially where there are onerous terms. |
| 18:23 | arohner | cemerick: yes, but that's about the EULA itself, rather than the enforceability of a checkbox |
| 18:26 | arohner | cemerick: aha, I see what you're saying. This was helpful for me: http://en.wikipedia.org/wiki/Electronic_signature |
| 18:27 | arohner | apparently, there are legally binding signatures that don't hold up in court if contested |
| 18:29 | cemerick | Of 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:48 | mabes | anyone 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:58 | technomancy | mabes: put it in test-resources rather than src/ |
| 18:59 | mabes | technomancy: oh, nice. I'm assuming that is on the classpath then. good to know about. thanks! |
| 18:59 | technomancy | np |
| 18:59 | technomancy | I knew I accepted that patch for a reason. |
| 19:27 | joshua-choi | In your experience, does the apply function ever become a performance bottleneck? |
| 19:28 | joshua-choi | (Which is tantamount to if dispatching a function by its arity is ever a limiting factor.) |
| 19:31 | joshua-choi | I'm wondering about this in relation to memoize, which wraps a function in a (fn [& args] ... (apply f args) ...). |
| 19:35 | wtetzner | i've never noticed a performance problem with apply |
| 19:36 | joshua-choi | What about packing arguments, like with [& args]? memoize does that too. |
| 19:37 | joshua-choi | I'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:37 | joshua-choi | Ah well, perhaps I'm prematurely optimizing |
| 19:37 | wtetzner | i wouldn't worry about it too much |
| 19:37 | wtetzner | apply should be fine |
| 19:37 | joshua-choi | What about [& args], which seems to create a new vector every time? |
| 19:38 | wtetzner | nah, it uses javas variadic argument system |
| 19:38 | wtetzner | i believe |
| 19:38 | joshua-choi | Oh, really? & args doesn't create a new object for args? How does that work? |
| 19:38 | wtetzner | and creating a new vector is cheap |
| 19:39 | joshua-choi | Well, yeah, that's true |
| 19:39 | joshua-choi | Thankfully |
| 19:39 | joshua-choi | It's just that this is going to happen a *lot*. |
| 19:40 | wtetzner | still, i use & args all the time and haven't noticed any performance problems |
| 19:40 | wtetzner | the only time i've noticed function call overhead to be a performance problem is in cases where you're calling java methods |
| 19:41 | wtetzner | and the reflective calls are too expensive |
| 19:41 | wtetzner | but type tags solves that |
| 19:41 | joshua-choi | Yeah. 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:42 | tomoj | joshua-choi: ey! cat or hound for jbo, you think? playing around trying to make sense of fnparse. |
| 19:42 | joshua-choi | Lojban? |
| 19:42 | tomoj | guessing cat since terminators etc are weird |
| 19:42 | joshua-choi | Yeah, Cat. |
| 19:43 | joshua-choi | The existing parsers use packrat parsers too. |
| 19:43 | joshua-choi | But mine will be able to do left recursion directly! |
| 19:43 | joshua-choi | And there's a lot of left recursion in that language. |
| 19:43 | tomoj | will be pretty exciting |
| 19:43 | joshua-choi | But I'm not working on that right now; I'm fixing a bug in FnParse proper. But I've got to go now |
| 19:43 | joshua-choi | See you all |
| 19:43 | hiredman | [& args] certainly does not use java's varadic args stuff |
| 19:43 | tomoj | yeah, just toying around myself trying to do morphology |
| 19:45 | wtetzner | oh right, AFn has methods taking up to 20 args before using java's variadic args |
| 19:46 | wtetzner | so [& args] just creates a seq over those args? |
| 19:50 | joshua-choi | That's amazing |
| 19:51 | joshua-choi | I vaguely recall Clojure functions having some high limit on their parameters |
| 19:51 | hiredman | no |
| 19:51 | joshua-choi | Okay then |
| 19:51 | hiredman | [& args] has nothing to do with java varadic args |
| 19:51 | joshua-choi | tomoj: I've already written a parser for morphology. It's done. It's unfinished on sentence structure now |
| 19:51 | joshua-choi | hiredman: How does [& args] work then? Does it simply construct an actual vector? |
| 19:52 | tomoj | :O |
| 19:52 | hiredman | the invoke overloads you see in IFn with varadic args are used for twenty args passed to a clojure function |
| 19:52 | wtetzner | right, but the fact that AFn has the methods going up to 20 args means it can't be using java's variadic args |
| 19:52 | hiredman | no |
| 19:52 | hiredman | those aren't used for [& args] either |
| 19:53 | hiredman | those are used for [a b c d e f g h i j k l m n] |
| 19:55 | wtetzner | ah, i see |
| 19:55 | wtetzner | RestFn |
| 19:56 | wtetzner | so it uses a switch to find the right arity (the stuff before &), and then creates an ArraySeq on the remaining args |
| 19:57 | hiredman | it can't be an arrayseq, since [& args] supports passing infinite seqs |
| 19:59 | wtetzner | it does? |
| 19:59 | hiredman | yes |
| 20:00 | hiredman | ,(apply (fn [& args] (first args)) (iterate inc 0)) |
| 20:00 | clojurebot | 0 |
| 20:03 | wtetzner | ,(ancestors (fn [x & xs] (first x))) |
| 20:03 | clojurebot | nil |
| 20:03 | hiredman | ancestors takes a class or something that is part of a hierarchy |
| 20:03 | wtetzner | ,(ancestors (class (fn [x & xs] (first x)))) |
| 20:03 | clojurebot | #{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:06 | wtetzner | well, if a finite number of args are passed in, an ArraySeq is created |
| 20:07 | wtetzner | at least, if the invoke methods in RestFn aren't overridden |
| 20:22 | chouser | I[& xs] |
| 20:23 | joshua-choi | Does 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:23 | chouser | I'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:23 | chouser | joshua-choi: that sounds like a macro is returning something unusal. |
| 20:24 | joshua-choi | Hmm |
| 20:24 | chouser | oh, a delay |
| 20:24 | joshua-choi | Yeah, delays are involved |
| 20:25 | joshua-choi | Mmm, can I paste a short stacktrace here? |
| 20:25 | joshua-choi | May I, I mean |
| 20:25 | chouser | (defmacro foo [] (delay 5)) (defn bar [] (foo)) ; generates an error |
| 20:25 | chouser | joshua-choi: best to use lisppaste or gist for stack traces |
| 20:26 | chouser | but by all means -- they're often helpful. |
| 20:26 | kencausey | paste.lisp.org |
| 20:26 | joshua-choi | Heh, I'm not familiar with either of those, unfortunately; I'll try, though |
| 20:26 | kencausey | you will have to paste in the link yourself, the lisppaste bot is away at the moment. |
| 20:27 | joshua-choi | http://gist.github.com/572824 |
| 20:30 | chouser | do you get the same error with my foo/bar post above? |
| 20:31 | chouser | what's at hound.clj line 427? |
| 20:31 | joshua-choi | Yes. I'll go see if my system contains something like that. |
| 20:31 | joshua-choi | Yes, a macro call is at 427, but what puzzles me is that that macro does not contain a direct delay call. |
| 20:31 | joshua-choi | The macro does contain a function call that contains a delay call. |
| 20:31 | yayitswei | question: what's the idiomatic way to count all non-nil values in a list? |
| 20:31 | chouser | well, if expands to anything that includes a delay, it won't work. |
| 20:32 | joshua-choi | Hmm, perhaps a delay is getting into the macro-time |
| 20:32 | joshua-choi | Yes |
| 20:32 | joshua-choi | Well, I'll check for that; thanks for the tip |
| 20:32 | joshua-choi | However, a puzzling thing is... |
| 20:32 | joshua-choi | the macro called at 427 is already called earlier in the file, with no error. |
| 20:33 | joshua-choi | That's really puzzling me. |
| 20:34 | yayitswei | or rather, count all non-nil atoms |
| 20:34 | yayitswei | I have this so far, but I think it can be shortened: |
| 20:34 | yayitswei | (count (filter (complement #(nil? %)) (flatten alist))) |
| 20:36 | chouser | for filter/complement see remove |
| 20:36 | tomoj | also note that #(nil? %) is the same as nil? |
| 20:36 | chouser | ,(count (remove nil? [1 2 nil 4 5])) |
| 20:36 | clojurebot | 4 |
| 20:37 | yayitswei | oh, perfect |
| 20:37 | yayitswei | thanks, chouser! |
| 20:38 | tomoj | should I be worried yet about getting clojure-conj tickets? |
| 20:40 | chouser | tomoj: dunno, but I bet they'll sell out |
| 20:40 | chouser | plane ticket prices are starting to go up already. apparently the unprecedented demand for flights to Durham. |
| 20:42 | hiredman | uh oh |
| 22:43 | lancepantz | ,(defmulti foo (partial (comp type first))) |
| 22:43 | clojurebot | DENIED |
| 22:43 | lancepantz | -> (defmulti foo (partial (comp type first))) |
| 22:43 | sexpbot | java.lang.SecurityException: Code did not pass sandbox guidelines: () |
| 22:43 | lancepantz | :( |
| 22:45 | wwmorgan | lancepantz: why is the partial there? |
| 22:46 | lancepantz | looks like i don't need it |
| 22:47 | slyrus | argghhh! the tabs! they're killing my eyes! |
| 22:47 | lancepantz | #(type (first %)) is equivalent to (comp type first)? |
| 22:48 | wwmorgan | ,((comp type first) ["foo" :bar]) ; Looks good to me |
| 22:48 | clojurebot | java.lang.String |
| 22:50 | lancepantz | weirdness, C-x C-e doesn't update defmulti's? |
| 22:51 | wwmorgan | lancepantz: a lot of people are running into that. It's new behavior in 1.2. defmulti now has defonce semantics |
| 22:51 | lancepantz | ah! |
| 22:51 | lancepantz | that's what threw me |
| 22:51 | wwmorgan | If you do (def foo nil) then you can evaluate the defmulti to do what you want |
| 22:53 | lancepantz | strange, that clears it, but i still have to paste the defmulti sexp to my slime repl |
| 22:55 | wwmorgan | whoops, yep. You have to ns-unmap the symbol. (ns-unmap *ns* 'foo) |
| 22:55 | cemerick | wwmorgan: are you using *emacs* of all things?!? :-O |
| 22:55 | cemerick | ;-) |
| 22:57 | wwmorgan | cemerick: just guessing. I met my environment halfway and learned vimclojure |
| 22:57 | cemerick | wwmorgan: that sounds more believable |