2008-12-13
| 00:01 | gp | why is he callling max in his function though? seems liek a mistake |
| 00:02 | Chouser | good point. I'm sure it's a typo |
| 00:43 | gp | why arent tags and metadata between functionname and argslist? |
| 00:46 | Chouser | functions can take multiple arglists, but the metadata goes is for all of them and attached to the var. |
| 00:48 | Chouser | (defn #^Integer foo "returns int" ([x] (Integer. x)) ([x y] (+ x y))) |
| 00:53 | gp | user=> (= '(1 2) [1 2]) |
| 00:53 | gp | true |
| 00:53 | gp | does that really make sense? |
| 00:54 | gp | Chouser: but that doesnt change the fact that you cpuld put the meata data between f-name and argslist |
| 00:54 | gp | is there a program to run unittests on all functions ina file? |
| 00:55 | Chouser | hm, that is a bit surprising: (= '(1 2) [1 2] (first {1 2})) |
| 00:56 | Chouser | gp: I suppose you could, but between which fn-name and which arglist? |
| 00:58 | Chouser | gp: (clojure.contrib.test-is/test-ns 'my-ns) |
| 00:59 | Chouser | test-ns runs all tests in a namespace. |
| 01:11 | gp | hmm having tests inside a function is pretty ugly though, is there unittesting framework too? |
| 01:12 | Chouser | test-is provides deftest and some helpful functions. |
| 01:13 | Chouser | There are other frameworks as well, such as "fact": http://groups.google.com/group/clojure/browse_thread/thread/193023afbf87698d |
| 01:21 | danlarkin | I am liking just using deftest |
| 06:55 | ben1 | how can I output the current time in clojure? |
| 07:00 | StartsWithK | ben1: http://www.rgagnon.com/javadetails/java-0106.html |
| 09:54 | fanda | hello all! |
| 09:54 | fanda | could you help me please a little? |
| 09:54 | fanda | i am trying to write a function which transforms |
| 09:54 | fanda | (def data '("a" "b" 1 2 "c" 3 "d" "e" "f" 4 5)) |
| 09:54 | fanda | into |
| 09:54 | fanda | => [["a"] ["b" 1 2] ["c" 3] ["d"] ["e"] ["f" 4 5]] |
| 09:54 | fanda | it generally groups strings and numbers together |
| 09:55 | fanda | i tried loop/recur, but not there yet :-( |
| 09:57 | fanda | this goes well with iteration idioms: http://groups.google.com/group/clojure/browse_thread/thread/fa9859614535f634 |
| 09:57 | fanda | :-) |
| 10:06 | alphazero | hi all, need some help with newb questions. |
| 10:08 | rhickey | fanda: http://paste.lisp.org/display/72092 |
| 10:09 | RSchulz | Is there a built-in fn that simply returns true unconditionally? |
| 10:10 | rhickey | (doc constantly) |
| 10:10 | clojurebot | Returns a function that takes any number of arguments and returns x.; arglists ([x]) |
| 10:10 | rhickey | so, (constantly true) |
| 10:10 | fanda | rhickey: thanks for the help! |
| 10:11 | rhickey | fanda: sure |
| 10:11 | rhickey | no one's done partition-when yet? |
| 10:12 | alphazero | one is regarding import. Don't understand what is happening in REPL but why does it seem to need full java class name after an import? |
| 10:12 | RSchulz | rhickey: Thanks. |
| 10:12 | alphazero | (import '(import java.util.HashMap)) |
| 10:12 | alphazero | (new HashMap) => java.lang.IllegalArgumentException: Unable to resolve classname: HashMap (NO_SOURCE_FILE:9) |
| 10:12 | rhickey | (import '(java,util HashMap)) note space before HashMap |
| 10:13 | alphazero | rhichey: Oh! thanks. |
| 10:13 | pjb3 | I'm trying to learn how to use zippers |
| 10:13 | pjb3 | given this xml doc: http://paste.lisp.org/display/72095 |
| 10:13 | pjb3 | I can get the name of each bucket with the XPath query '/ListAllMyBucketsResult/Buckets/Bucket/Name' |
| 10:13 | pjb3 | With a zipper, how do you do something like that? |
| 10:14 | pjb3 | Seems to have only the direction methods, not ones for looking for children with certain names |
| 10:14 | alphazero | Next question is given: |
| 10:14 | alphazero | (def jmap (new HashMap)) |
| 10:14 | alphazero | (.put jmap :key :value) |
| 10:16 | alphazero | is there any way to specify the 'put' method reflectively? |
| 10:16 | rhickey | pjb3: did you look at Chouser's zip-filter? |
| 10:17 | pjb3 | no, is that in clojure-contrib? |
| 10:17 | rhickey | pjb3: zip is pretty much just nav, zip-filter adds search |
| 10:17 | rhickey | http://clojure-contrib.svn.sourceforge.net/viewvc/clojure-contrib/trunk/src/clojure/contrib/zip_filter.clj?revision=239&view=markup |
| 10:18 | rhickey | and: http://clojure-contrib.svn.sourceforge.net/viewvc/clojure-contrib/trunk/src/clojure/contrib/zip_filter/xml.clj?revision=256&view=markup |
| 10:20 | Zephtar | I saw that there was a discussion of Xronos yesterday, but I was away from my computer at the time. |
| 10:20 | Zephtar | I maintain the project and would be glad to answer any questions. |
| 10:47 | pjb3 | Nice, the answer to the aforementioned question of how do I do the Xpath Query: |
| 10:48 | pjb3 | /ListAllMyBucketsResult/Buckets/Bucket/Name |
| 10:48 | pjb3 | in clojure, is: |
| 10:48 | pjb3 | (xml-> ex :Buckets :Bucket :Name text) |
| 10:49 | pjb3 | where ex is the xml-zip |
| 12:05 | csf | Is there a problem in the Slime REPL when getting user input - specifially (read-line)? It never returns |
| 12:56 | arohner | has anyone tried running htmlunit from clojure? |
| 12:56 | arohner | I'm getting some kind of classloader issue |
| 13:22 | danlarkin | this is amusing, http://jonex.info/dump/yolisp.jpg |
| 13:24 | arohner | gah. Why is it that code can break when switching class loaders? |
| 13:42 | Chouser | Should .clj files in clojure-contrib be more explicit about being part of the Clojure project, such that the CAs are enforcable? |
| 14:14 | rhickey | Chouser: sure |
| 14:14 | Zephtar | I saw that there was a discussion of Xronos yesterday, but I was away from my computer at the time. |
| 14:15 | Zephtar | I maintain the project and would be glad to answer any questions. |
| 14:27 | drewr | What do you guys like for doing SOAP? |
| 14:33 | clojurebot | svn rev 1159; proxy perf tweaks Note breaking change if you are using the proxy interface other than the proxy macro itself - proxy maps are now maps of (preferably interned) strings to fns, not symbols to fns, and if you construct a proxy manually you must establish initial map with init-proxy |
| 14:57 | RSchulz | rhickey_: Possible trouble in SVN 1159: |
| 14:57 | RSchulz | Sorry. Here it is: |
| 14:57 | RSchulz | java.lang.AbstractMethodError: clojure.proxy.java.util.concurrent.atomic.AtomicReference$IRef.__initClojureFnMappings(Lclojure/lang/IPersistentMap;)V (repl_ln.clj:65) |
| 14:57 | RSchulz | Happens upon start-up |
| 14:59 | drewr | He warned that there might be a breaking change. |
| 14:59 | RSchulz | Caused by: java.lang.AbstractMethodError: clojure.proxy.java.util.concurrent.atomic.AtomicReference$IRef.__initClojureFnMappings(Lclojure/lang/IPersistentMap;)V |
| 14:59 | RSchulz | OK. Just reporting. |
| 15:00 | rhickey_ | RSchulz: startup of what? |
| 15:00 | RSchulz | Clojure REPL |
| 15:00 | rhickey_ | ant clean? |
| 15:00 | RSchulz | No. Just default build. Hang on... |
| 15:01 | RSchulz | OK. False alarm. Sorry. |
| 15:32 | Lau_of_DK | Evenings gents |
| 15:33 | danm_ | hello |
| 15:37 | Zephtar | lau: good evening |
| 15:37 | Zephtar | damn_: hello |
| 15:40 | danm_ | what's up? |
| 15:44 | mfredrickson | i seem to have consistent issues with doto |
| 15:44 | mfredrickson | I'm following along with http://clojure.org/jvm_hosted |
| 15:45 | RSchulz | Lau_of_DK: You seem confused. It's early afternoon. |
| 15:45 | Lau_of_DK | Oh, right... Im besides myself, sorry |
| 15:48 | mfredrickson | but I always get "java.lang.Exception: Unable to resolve symbol: setSize in this context (NO_SOURCE_FILE:50) |
| 15:48 | mfredrickson | Or whatever the first action in the (doto f ...) call is |
| 15:48 | RSchulz | mfredrickson: Odd. I was just seeing something similar with (new FileWriter ...) |
| 15:49 | RSchulz | I assumed it was my problem, but I haven't figured it out yet. |
| 15:49 | Lau_of_DK | Schulzy, you still use the new keyword? |
| 15:49 | RSchulz | I do have an import for (java.io FileWriter) |
| 15:49 | RSchulz | I was right now. |
| 15:50 | Lau_of_DK | Cute |
| 15:50 | RSchulz | Same thing if I do (FileWriter. file-name) |
| 15:50 | RSchulz | That's the new syntax, right? |
| 15:51 | Lau_of_DK | I wouldnt say 'new' anymore, but yea, its more recent |
| 15:51 | Zephtar | What is the official #clojure timezone? |
| 15:52 | RSchulz | Earth Standard Time |
| 15:52 | mfredrickson | RSchulz: For mine I needed (doto pojo (.method args)) |
| 15:52 | Zephtar | So GMT, which means it is evening :D |
| 15:52 | Lau_of_DK | clojurebot: rev 1121 |
| 15:52 | clojurebot | Titim gan �ir� ort. |
| 15:52 | Lau_of_DK | clojurebot: svn rev 1121 |
| 15:52 | clojurebot | svn is https://clojure.svn.sourceforge.net/svnroot/clojure/ |
| 15:55 | durka | it does work if you change all the setSize to .setSize |
| 15:55 | mfredrickson | durka: yup. just got that |
| 15:56 | RSchulz | How does Clojure choose the right overload when there are multiple methods of a given name and arity? |
| 15:56 | mfredrickson | to submit a bug report/patch for the code on website, should I diff clojure.markdown? |
| 15:57 | AWizzArd | RSchulz: first multimethod for which the dispatch fired the equal result |
| 15:57 | RSchulz | Multimethod? |
| 15:57 | RSchulz | I'm asking about calling methods of Java classes. Or, in this case, a constructor, if that matters. |
| 15:57 | AWizzArd | well, you said "multiple methods" |
| 15:57 | mfredrickson | hmm. it's not in there |
| 15:57 | RSchulz | Yes. I _didn't_ say multimethod... |
| 15:57 | AWizzArd | but multiple methods |
| 15:58 | AWizzArd | anyway, the constructors in Java dispatch on type |
| 15:58 | AWizzArd | and arity |
| 15:58 | RSchulz | So Clojure uses reflection to choose? |
| 15:58 | AWizzArd | in as few cases as possible |
| 15:59 | RSchulz | So take java.io.File. I have two cases in my code, (string?) and (isa? ... java.io.File), which correspond to two of hte constructors in java.io.FileWriter |
| 16:00 | RSchulz | (I should have said "...take java.io.FileWriter...") |
| 16:01 | rhickey_ | mfredrickson: the web site generally documents the release, with the exception of the API page - the body docs will get updated next release, hopefully soon |
| 16:02 | mfredrickson | rhickey_: good stuff. thanks. |
| 16:03 | AWizzArd | Chouser: did you have some successful runs with your applet tests yesterday? |
| 16:07 | RSchulz | rhickey_: What are possible causes for "Unable to resolve classname" when I know the class name is valid and imported? |
| 16:08 | rhickey_ | RSchulz: you know how? Did you check ns-imports? |
| 16:08 | RSchulz | (ns rrs.io-helpers |
| 16:08 | RSchulz | (:import (java.io |
| 16:08 | RSchulz | File |
| 16:08 | RSchulz | BufferedWriter |
| 16:08 | RSchulz | FileWriter)) |
| 16:08 | RSchulz | ) |
| 16:08 | RSchulz | java.lang.IllegalArgumentException: Unable to resolve classname: (new FileWriter file-spec) (io_helpers.clj:21) |
| 16:09 | RSchulz | I tried tagging file-spec with #^String, too, to no avail. |
| 16:10 | rhickey_ | What's on line 21? |
| 16:10 | RSchulz | Here's everything non-blank on 21: (-> (new FileWriter #^File file-spec) (new BufferedWriter)) |
| 16:11 | RSchulz | (That's the (isa? file-spec File) case) |
| 16:13 | rhickey_ | user=> (macroexpand-1 '(-> (new FileWriter #^File file-spec) (new BufferedWriter))) |
| 16:13 | rhickey_ | (new (new FileWriter file-spec) BufferedWriter) |
| 16:13 | AWizzArd | that makes it clear |
| 16:13 | RSchulz | Is the chaing / thread thing wrong? Or just a poor choice? |
| 16:13 | RSchulz | Do you recomment the explicit (new ...) syntax? |
| 16:14 | rhickey_ | RSchulz: it works better without new IMO, I use (Classname. ...) |
| 16:14 | RSchulz | OK. |
| 16:14 | kotarak | (-> file-spec FileWriter. BufferedWriter.) |
| 16:14 | rhickey_ | right |
| 16:15 | RSchulz | I had it all mangled is what you all are saying. Not a surprise... |
| 16:15 | RSchulz | Do the type tags matter? Do they help? (In a case like this?) |
| 16:16 | AWizzArd | I think they should never help for calling the right constructor, but instead they help to reduce runtime overhead in some cases. |
| 16:19 | RSchulz | Now I have this: ((#^File file-spec FileWriter.) BufferedWriter.) ... and it's producing: java.lang.ClassNotFoundException: FileWriter. (io_helpers.clj:21) |
| 16:19 | AWizzArd | shouldn't the list begin with a dot and a space? |
| 16:20 | RSchulz | It even does it if I fully qualify java.io.FileWriter! |
| 16:20 | kotarak | Shouldn't it be (reverse)d? (BufferedWriter. (FileWriter. file-spec))? |
| 16:20 | danlarkin | clojurebot: todo |
| 16:20 | clojurebot | todo is http://richhickey.backpackit.com/pub/1597914 |
| 16:21 | RSchulz | kotarak: I don't think so. I want to wrapp the BufferedWriter around the FileWriter. |
| 16:22 | kotarak | ??? So you pass the BufferedWriter into the FileWriter or the other way around? (I would suspect the "other way around") |
| 16:23 | RSchulz | No. In Java it would be new BufferedWriter(new FileWriter("file-name")); |
| 16:24 | kotarak | So in Clojure it's (BufferedWriter. (FileWriter. "file-name")) |
| 16:25 | RSchulz | Well, I have a lot of trouble getting things write, but one thing remains constant: java.lang.ClassNotFoundException: FileWriter. (io_helpers.clj:21) |
| 16:25 | RSchulz | Again, even if I fully qualify the name: java.io.FileWriter. |
| 16:25 | RSchulz | This has got to be something else really stupid I'm doing (wrong). |
| 16:25 | AWizzArd | Are you allowed to post the first 25 LOC in the lisp paste? |
| 16:26 | rhickey_ | RSchulz: this is how to say it manually: (new BufferedWriter (new FileWriter file-spec)) |
| 16:26 | RSchulz | Me? Sure. It's my code. And nothing sensitive or proprietary or anything like that. The whol method is exactly 25 lines long. Is that the past site's limit? |
| 16:27 | rhickey_ | both news can become Classname. : (BufferedWriter. (FileWriter. file-spec)) |
| 16:28 | RSchulz | That's what I've got, but it still fails. What's the URL for that (one of those) paste site(s)? |
| 16:28 | rhickey_ | -> can thread inside out |
| 16:29 | rhickey_ | http://paste.lisp.org/new/ |
| 16:30 | AWizzArd | RSchulz: the paste limit is much higher, but it makes sense to only show small parts of the code, so one could concentrate on the challenging part. |
| 16:31 | RSchulz | OK. I'm doing it now. |
| 16:31 | kotarak | RSchulz: choose the clojure channel. Then a link is posted by a bot. |
| 16:32 | RSchulz | I tried once, but something went wrong. It never showed up in the list. |
| 16:32 | rhickey_ | bot is not logged in, don't choose a channel, just enter the url is gives you here |
| 16:33 | RSchulz | I just get a blank page after I click Submit and it's not in the list. |
| 16:33 | AWizzArd | works for me |
| 16:33 | RSchulz | Is registration required? |
| 16:33 | kotarak | no |
| 16:33 | AWizzArd | well, maybe you can paste it here then http://pastebin.com/ |
| 16:34 | danlarkin | lisppaste wasn't working for me yesterday |
| 16:34 | rhickey_ | paste.lisp works, choose no channel |
| 16:34 | AWizzArd | Well, for me it does work (right now). |
| 16:36 | RSchulz | Oy. http://paste.lisp.org/display/72108 |
| 16:41 | RSchulz | I got that paste through, but paste.lisp.org seems to be having problems. |
| 16:46 | RSchulz | So does anybody see why that function causes an error when I (use 'rrs.io-helpers)? |
| 16:47 | rhickey_ | RSchulz: I get and error for @ (are you trying to write a macro?): |
| 16:47 | rhickey_ | java.lang.RuntimeException: Can't embed object in code, maybe print-dup not defined: clojure.lang.LispReader$UnquoteSplicing@1396ec |
| 16:48 | AWizzArd | RSchulz: what means (file-spec java.io.FileWriter.)? Is file-spec a function? |
| 16:48 | RSchulz | Oh. That's left over from a macro attempt, yes. But the error comes on the FileWriter constructor calls. |
| 16:48 | rhickey_ | (isa? file-spec File) should be (instance? File file-spec) |
| 16:48 | rhickey_ | No error there for me |
| 16:48 | RSchulz | It should be clear. It's either a String or a File |
| 16:48 | RSchulz | OK. So it may never take those paths, but I get the error when I (use ...) that file. |
| 16:50 | RSchulz | So the (new form works) when I fix the macro left-overs. But the commented lines still give the ClassNotFoundException |
| 16:50 | kotarak | RSchulz: (FileWriter. ...) expands to (new FileWriter ...), but only if FileWriter. is the first argument. Otherwise Clojure tries to resolve it as class name. Hence you get a FileWriter. not found error. |
| 16:51 | rhickey_ | kotarak: that's in comments now, RSchulz are you talking about the comments not working? |
| 16:51 | RSchulz | Yes. The lines that are commented fail. Rich's form works. The macro junk was causing a separate error and that was confusing me further. |
| 16:52 | RSchulz | I've probably been "diagnosing" several problems at once, which is my bad, of course. |
| 16:52 | kotarak | RSchulz: the correct form is (FileWriter. file-spec) |
| 16:52 | kotarak | And not (file-spec FileWriter.) |
| 16:52 | RSchulz | OK. I was sure someone suggested the form I had (and I thought I copied and pasted from IRC), but I'm not entirely sure any more. |
| 16:53 | danm_ | http://paste.lisp.org/display/72062#1 |
| 16:53 | danm_ | can anyone tell me if that's how alter is intended to be used? |
| 16:53 | rhickey_ | Might be worth rereading: http://clojure.org/java_interop |
| 16:54 | danm_ | I feel as though I've improved the function over my earlier paste, but now it won't work (haha) |
| 16:55 | RSchulz | rhickey_: I assume that's to me. I thought I had but ... |
| 16:55 | rhickey_ | danm: no - the idea behind alter/commute is that they manipulate the state, you wouldn't use the var in the altering fn |
| 16:55 | rhickey_ | danm_: what's in *quote-db* ? |
| 16:55 | danm_ | *quote-db* is intended to be a hash of sorted-maps |
| 16:55 | danm_ | so, financial quotes from yahoo |
| 16:56 | danm_ | where the key in the map is the symbol, and then it's a list of quotes sorted by their date |
| 16:56 | rhickey_ | danm_: we don't call maps hashes in Clojure as some of them are trees - so it's a map? |
| 16:56 | danm_ | sorry, yeah |
| 16:56 | AWizzArd | One thing that I really suggest to all the people who never did Lisp before is http://www.cs.umd.edu/~nau/cmsc421/norvig-lisp-style.pdf |
| 16:57 | AWizzArd | it also covers indentation |
| 16:57 | danm_ | I assumed hash-map was a has, and sorted-map was a tree |
| 16:57 | danm_ | but alas |
| 16:57 | AWizzArd | rhickey_: aren't they both tries under the hood? |
| 16:58 | rhickey_ | danm_: so your alter fn should take that map as it's first argument, and should return a new map |
| 16:59 | danm_ | ok |
| 16:59 | rhickey_ | (alter *quote-db* (fn [qmap] (assoc qmap sym sorted-map-from-dq))) |
| 16:59 | danm_ | thanks, that would explain the runtime error |
| 17:00 | rhickey_ | AWizzArd: no hash-maps are tries and sorted-maps are red/black trees |
| 17:02 | RSchulz | Is it possible to (binding *out* ...) in a macro expansion? |
| 17:03 | rhickey_ | RSchulz: you should put your with-open outside the binding, and don't use *out* in with-open |
| 17:04 | RSchulz | How do you get a contextual redirection of input or output? I'm working towards a kind of shell-like environment. |
| 17:06 | rhickey_ | RSchulz: binding *out* is the right way, (with-open [a-local (open file)] (binding [*out* a-local] ...)) |
| 17:06 | RSchulz | Ah. OK. |
| 17:06 | RSchulz | That's for bearing with my ineptitude. |
| 17:07 | RSchulz | Duh. _Thanks_ for ... |
| 17:07 | rhickey_ | RSchulz: np |
| 17:26 | arohner | If I set a var to contain a class, how do I create a new instance of it? |
| 17:26 | arohner | (def myvar java.util.map) |
| 17:26 | arohner | (new myvar) doesn't work |
| 17:27 | rhickey_ | arohner: ick - are you sure you want to do that? |
| 17:28 | arohner | not really, but I'm not sure how else to do it |
| 17:28 | AWizzArd | arohner: new is a special form, not a function |
| 17:28 | arohner | I guess I could create a factory function |
| 17:28 | AWizzArd | it treats it's arguments special and does not necessarily evaluate them |
| 17:29 | rhickey_ | with only the class you'll have to use reflection: |
| 17:29 | rhickey_ | (def myvar java.util.HashMap) |
| 17:29 | rhickey_ | (.newInstance myvar) |
| 17:30 | rhickey_ | but you could instead store a constructing fn: |
| 17:30 | rhickey_ | (def myvar #(java.util.HashMap.)) |
| 17:30 | rhickey_ | (myvar) |
| 17:30 | arohner | thanks |
| 17:31 | rhickey_ | the latter could be extended to take args, newInstance can't |
| 17:31 | rhickey_ | the latter will be much faster |
| 17:32 | arohner | I'm writing tests for a webapp. Webdriver (a java tool) has several different implementations, firefoxDriver, safariDriver, etc. I was hoping to store the desired implementation in a var so I could re-run the tests with the driver bound to a different implementation |
| 17:32 | arohner | a constructing fn is a good solution though |
| 17:32 | arohner | i can just (binding) that |
| 17:33 | arohner | thanks |
| 18:16 | AWizzArd | What is the easiest way to shuffle a list/vector? (sort-by rand col) does only rarely randomly enough. |
| 18:16 | RSchulz | I finally sorted out my >> macro (it's macro again, as it must be), but the imports seem not to work. Would someone look at http://paste.lisp.org/display/72108#1 an suggest why that might be? |
| 18:18 | RSchulz | AWizzArd: You could interleave the random numbers with the collection and then sort the pairs on the random integer element. |
| 18:18 | RSchulz | And project out the original collection elements of each pair. |
| 18:21 | Chouser | clojurebot: shuffle is http://groups.google.com/group/clojure/msg/a2816f1b51d99b79 |
| 18:21 | clojurebot | Alles klar |
| 18:22 | Chouser | ^^ AWizzArd |
| 18:23 | AWizzArd | thanks Chouser |
| 18:25 | RSchulz | Chouser: Did you have any ideas about the DOT problem I was seeing? |
| 18:36 | danm_ | Chouser: can you point me at a starting point for spit/slurp with objects the reader doesn't understand? |
| 18:36 | danm_ | for instance, I have a j.u.Date in a structmap that I'd like to read/write |
| 18:37 | danm_ | I'm not sure where to look in the docs :| |
| 18:39 | danlarkin | arbitrary java objects don't get reader support |
| 18:41 | danm_ | danlarkin: ok, thanks |
| 18:41 | kotarak | RSchulz: http://paste.lisp.org/display/72108#2, this works for me. |
| 18:42 | danlarkin | you'll have to use a serialization format, perhaps clojure-json :) |
| 18:42 | RSchulz | Well, that's good, but do you have any explanation why the imports don't seem to work and why I have to use fully qualified names there? |
| 18:42 | danm_ | danlarkin: is that a project you're responsible for? :) |
| 18:42 | rhickey_ | danm_: user=> (read-string "#=(java.util.Date. \"Sat Dec 13 18:38:53 EST 2008\")") |
| 18:42 | rhickey_ | #<Date Sat Dec 13 18:38:53 EST 2008> |
| 18:43 | danm_ | google tells me yes |
| 18:43 | danlarkin | d'oh there I got opening my big mouth too quickly |
| 18:43 | kotarak | RSchulz: as you may note, my annotation doesn't use qualified names and it works for me. |
| 18:43 | danm_ | rhickey_: neato |
| 18:43 | rhickey_ | you can define a print-dup method for any type and print with *print-dup* on to get print/read serialization of anything |
| 18:43 | RSchulz | Yes, I see that. But still... |
| 18:44 | kotarak | RSchulz: then I don't the your problem... |
| 18:44 | kotarak | I don't see |
| 18:44 | rhickey_ | danm_: http://groups.google.com/group/clojure/msg/e21bf475b45bd2d5 |
| 18:46 | RSchulz | Are you saying you can't replicate the "Unable to resolve classname" error in my code if you remove the java.io. qualification on FileWriter and BufferedWriter? |
| 18:47 | RSchulz | By the way, I see the not about multiple evaluations of file-spec, and I'll fix that, but all my testing has been with simple constants like "file-name" or (new File "file-name"). |
| 18:48 | kotarak | RSchulz: works fine for me |
| 18:48 | kotarak | RSchulz: also your version w/o qualified names. |
| 18:48 | RSchulz | So there's something idiosyncratic about my set-up... |
| 18:48 | RSchulz | I wonder what it could be. |
| 18:48 | RSchulz | I'm using Sun JDK 1.6.0_11 on x86 Linux. |
| 18:49 | danm_ | rhickey_: thanks, that's perfect. |
| 18:49 | kotarak | 1.5 on Mac |
| 18:50 | kotarak | RSchulz: about the multiple eval: this is just a general remark. |
| 18:50 | RSchulz | Sure. And I'm glad you pointed it out. |
| 18:51 | RSchulz | Even my generic Lisp is very (_very_) rusty, let alone Clojure's uniquenesses. |
| 18:51 | danlarkin | danm_: sorry about that :-o |
| 18:51 | danm_ | danlarkin: meh, no problem :) |
| 18:54 | RSchulz | What's available in the way of a pretty-printer for Clojure forms? |
| 18:56 | danlarkin | Chouser has a nice one in the mailing list |
| 18:56 | rhickey_ | RSchulz: emacs clojure-mode |
| 18:56 | rhickey_ | :) |
| 18:56 | RSchulz | Apart from Emacs! |
| 18:56 | kotarak | RSchulz: vimclojure |
| 18:56 | kotarak | ;) |
| 18:56 | RSchulz | Oh? |
| 18:56 | RSchulz | I didn't know vimclojure had pretty-printing. |
| 18:57 | RSchulz | Does that require the Ruby thing? |
| 18:57 | kotarak | Not really. You have to add the linebreaks and then just ggGV= for the indeting. |
| 18:57 | RSchulz | But apart from external dependencies or IDE (-like) tools, is there any Clojure code for pretty-printing Clojure forms? |
| 18:58 | kotarak | No Ruby. Pure VIm. |
| 18:58 | kotarak | ggVG= actually... |
| 18:58 | RSchulz | Ah. OK. I'll have to try that. |
| 18:58 | RSchulz | What's the V part? |
| 18:58 | RSchulz | (I'm pretty much stuck on the original Vi subset of Vim!) |
| 18:58 | kotarak | visual mode |
| 18:58 | RSchulz | ('Cause I'm so old...) |
| 18:59 | RSchulz | Still, when people need a "pure Clojure" solution to something other than "blob-mode" printing, what do they do? |
| 19:01 | danlarkin | RSchulz: there's a nice pretty printing thread on the group, with (at least) 2 implementations, once of which (Chouser's) I am using successfully |
| 19:02 | RSchulz | OK. I thought I saw something somewhere. |
| 19:02 | RSchulz | I'll search the archives. |
| 19:05 | hiredman | kotarak: as long as you are here, I have a vim theme I like, but it doesn't give any special color to :keywords , any idea how I could fix this? |
| 19:06 | RSchulz | Ah. That's nice. That will make comprehending (macroexpand ...) output _much_ easier! |
| 19:08 | kotarak | hiredman: just a sec |
| 19:11 | kotarak | hiredman: make sure it assigns a color to the Operator syntax group |
| 19:13 | hiredman | hah |
| 19:13 | hiredman | it assigns "white" |
| 19:13 | wipewindows | any good clojure benchmarks? |
| 19:13 | wipewindows | how much faster is clojure than Python? |
| 19:14 | hiredman | if I add a line like that to my ~/.vimrc will it override the theme? |
| 19:15 | zakwilson | How much faster at what calculation? With what optimizations? |
| 19:16 | hiredman | nm |
| 19:16 | hiredman | I figured it out |
| 19:16 | hiredman | thanks a bunch |
| 19:16 | kotarak | hiredman: depends on the quality of your color scheme developer |
| 19:16 | hiredman | oH. |
| 19:18 | kotarak | hiredman: if the colorscheme uses highlight default ...., it will work. |
| 19:18 | kotarak | w/o default it won't |
| 19:19 | hiredman | hmmm |
| 19:26 | csf | how is the clojure vim support....i'm no fan of emacs, but it's got slime. |
| 19:29 | hiredman | clojurebot: contrib? |
| 19:29 | clojurebot | I don't understand. |
| 19:30 | RSchulz | clojurebot: Be more generous! |
| 19:30 | clojurebot | No entiendo |
| 19:30 | danlarkin | clojurebot: you have no sense of humor |
| 19:30 | clojurebot | Gabh mo leithsc�al? |
| 19:30 | hiredman | clojurebot: clojure.contrib? |
| 19:30 | clojurebot | clojure is the bestest programming language available. |
| 19:31 | hiredman | useless |
| 19:31 | hiredman | clojurebot: contrib is http://sourceforge.net/projects/clojure-contrib/ |
| 19:31 | clojurebot | 'Sea, mhuise. |
| 19:32 | RSchulz | How many languages does ClojureBot speak? |
| 19:32 | hiredman | none, but it can type a few |
| 19:33 | RSchulz | Right... How many (which) languages are represented in its response database? |
| 19:34 | hiredman | 4? |
| 19:34 | hiredman | I think I had to delete the russian one because something somewhere was mangling it |
| 19:34 | RSchulz | Sure. Four. What language is "'Sea, mhuise."? |
| 19:35 | hiredman | irish |
| 19:43 | RSchulz | Is that so? |
| 20:17 | gp | how is clojure for imagemanipulation? anyone tried fjui or fiji ir what its name is? is it fast? does it take advantage of multiple cores? |
| 20:55 | francois_ | Hi all! |
| 20:56 | francois_ | I have an imperative question :) |
| 20:56 | francois_ | Regarding this code (it doesn't work at the moment): http://gist.github.com/35596 |
| 20:57 | francois_ | This is the main processing loop for receiving forms on stdin (a socket, but who cares :)) and building an RPN calculator |
| 20:57 | francois_ | So, anyway, the forms are received, and I can reliably process them |
| 20:57 | francois_ | Except, how do I recurse with the new stack sequence? |
| 20:59 | hiredman | (recur (conj stack new-thing)) |
| 20:59 | francois_ | But, can't I do that only from the end of the loop? |
| 20:59 | francois_ | I can't do it on line 8, where I detect that I found a number |
| 21:00 | francois_ | I thought of introducing a local that I'd modify, and I would then recurse on that |
| 21:00 | francois_ | I'm thinking that I should abstract the processing into a new function, and let the return value of that function be the new stack |
| 21:00 | francois_ | I would then detect quit and syntax errors using exceptions |
| 21:00 | francois_ | What do you think? |
| 21:01 | hiredman | I would move everything into the (cond ...) form |
| 21:01 | francois_ | Let me try that |
| 21:01 | hiredman | and if it is a number (recur ...) |
| 21:01 | hiredman | if not do other sutff |
| 21:03 | gnuvince_ | francois_: you from Montreal (or around)? |
| 21:03 | francois_ | @hiredman: it works! |
| 21:04 | francois_ | Here's the new version: http://gist.github.com/35596 |
| 21:04 | francois_ | @gnuvince_ I'm from Sherbrooke |
| 21:04 | francois_ | I visit Montreal pretty regularly |
| 21:04 | francois_ | gnuvince_: And you? |
| 21:04 | gnuvince_ | francois_: one hour west of Montreal; small village in Soulanges |
| 21:05 | francois_ | Can't say I ever heard of it :) |
| 21:05 | gnuvince_ | Highway 20W, exit 9. |
| 21:06 | francois_ | I'm 2 hours east of Montreal |
| 21:06 | gnuvince_ | Nice to see fellow Quebecers |
| 21:06 | francois_ | Yeah |
| 21:07 | francois_ | BTW, why do I often see messages like this? Exception in thread "main" java.lang.IllegalArgumentException: No matching method found: println for class java.io.PrintWriter (rpn.clj:0) |
| 21:07 | francois_ | I guess this is found at compile time, rather than execution time |
| 21:07 | francois_ | That's why the line number would be 0? |
| 21:08 | gnuvince_ | francois_: what do you do? |
| 21:09 | francois_ | I'm a Ruby on Rails developer by trade |
| 21:09 | francois_ | I work with GiraffeSoft, a Montreal-based company |
| 21:09 | gnuvince_ | Never heard of them... |
| 21:09 | francois_ | We consult, but we plan on building our own applications soon enough |
| 21:09 | francois_ | Sell products instead of consulting gigs |
| 21:09 | francois_ | I'm the lead developer on http://xlsuite.com/ |
| 21:10 | gnuvince_ | Cool; I do Django development |
| 21:10 | francois_ | Great! A Python developer! |
| 21:10 | gnuvince_ | Yeah :) |
| 21:10 | francois_ | Do you know about Montreal Python? |
| 21:10 | gnuvince_ | No; is that a user group? |
| 21:10 | francois_ | Yes |
| 21:11 | gnuvince_ | ok |
| 21:11 | francois_ | They meet in the same room the Montreal on Rails (now Montreal.rb) group meets in |
| 21:11 | francois_ | I'd have to ask when's the next meeting |
| 21:11 | gnuvince_ | I did some Ruby and Rails a few years ago. |
| 21:11 | gnuvince_ | Even wrote a tutorial for Rails 0.7 and 0.8 |
| 21:11 | francois_ | Wow! |
| 21:12 | francois_ | You started even earlier than I did |
| 21:12 | gnuvince_ | http://wiki.rubyonrails.org/rails/pages/TodoListTutorial |
| 21:12 | gnuvince_ | That was a long time ago though |
| 21:12 | francois_ | I deployed http://weputuplights.com/ (what eventually became XLsuite) on Rails 0.12 |
| 21:12 | francois_ | Last time I did Python was when I was active in the Subversion dev community |
| 21:13 | gnuvince_ | These days, I'm more into Haskell and Clojure. |
| 21:13 | francois_ | Just fell in the Clojure soup |
| 21:13 | gnuvince_ | (In my free times I mean) |
| 21:13 | francois_ | I rather like what I'm seeing |
| 21:13 | gnuvince_ | Clojure is awesome. |
| 21:13 | francois_ | I made an REPL through a socket in about 45 minutes |
| 21:14 | francois_ | I was pretty impressed |
| 21:14 | gnuvince_ | All the goodness of Lisp plus the immutability stuff of Haskell without all the restrictions with the gigantic library of Java. |
| 21:14 | francois_ | :) |
| 21:14 | francois_ | Yes, I like that |
| 21:14 | francois_ | I'm also discovering JRuby at the same time, so it looks like the JVM's winning me back |
| 21:15 | francois_ | I did a lot of Java coding a couple of years ago, before I met Ruby |
| 21:15 | gnuvince_ | I never did any Java |
| 21:15 | gnuvince_ | Thankfully :) |
| 21:15 | francois_ | Ah! |
| 21:15 | francois_ | Syntax is verbose, but the JVM itself is very good |
| 21:16 | bradbev | should there be any real difference between these functions? (defn spawn [f] |
| 21:16 | bradbev | (. (Thread. f) start)) |
| 21:16 | bradbev | (defn spawn [f] |
| 21:16 | bradbev | (send-off (agent nil) (fn[a] f))) |
| 21:16 | bradbev | (lisppaste still broken?) |
| 21:16 | gnuvince_ | francois_: that's pretty much the philosophy of Clojure; good platform, bad language |
| 21:18 | francois_ | K, gotta run |
| 21:18 | francois_ | @hiredman: thanks again for your help |
| 21:19 | bradbev | If it makes a difference, spawn is being called from an agent that was started with send-off. I expect no difference, but the function using send-off doesn't appear to actually get started properly |
| 21:23 | hiredman | uh |
| 21:24 | hiredman | you may want to (f) |
| 21:24 | hiredman | if f is a func |
| 21:25 | bradbev | no, it's not a syntax problem. I have an agent that listens on a socket for data, and it gets a lot of data. I want another thread to draw the gui periodically |
| 21:26 | bradbev | I use spawn for the gui-redraw - but the send-off version doesn't actually ever get a chance to run because the socket thread is practically a busy spin loop |
| 21:26 | hiredman | uh, if you are passing a function to that function it is a syntax problem |
| 21:27 | hiredman | it wi;; never run |
| 21:27 | bradbev | sorry, you're right |
| 21:27 | bradbev | but my problem remains - I'd just written that now to illustrate |
| 21:28 | bradbev | when socket data stops arriving the send-off version will actually update |
| 21:29 | bradbev | so is there some difference between creating a new thread & using one from a thread pool like send-off does? |
| 21:29 | hiredman | dunno |
| 21:29 | bradbev | me either :( |
| 21:29 | hiredman | is your socket thread also doing send-offs like that? |
| 21:31 | bradbev | no. There is a server socket that send-offs the socket handler. When the socket handler gets an "init" command it spawns the render loop. |
| 21:33 | hiredman | send-offs from within a running agent are held until the agent completes |
| 21:33 | hiredman | maybe that has something to do with it? |
| 21:39 | bradbev | oh |
| 21:39 | bradbev | that very well could be the problem |
| 21:39 | bradbev | I did not know that |
| 22:35 | gnuvince_ | Anyone knows how to have timeouts in Java for sockets? My comics script tries to access PBF Comics, but the site is down. I'm trying to figure out how to skip over a site after a certain amount of time. |
| 22:37 | gnuvince_ | Found it |
| 22:38 | gnuvince_ | (System/setProperty "sun.net.client.defaultConnectTimeout", "5000") |
| 22:42 | dmiles | (System/setProperty "sun.net.client.defaultConnectTimeout", "5000") == (.setProperty System "sun.net.client.defaultConnectTimeout", "5000") ? |
| 22:43 | Chouser | no, the latter won't work anymore. |
| 22:44 | hiredman | clojurebot: latest? |
| 22:44 | clojurebot | latest is 1159 |
| 22:44 | hiredman | clojurebot: svn rev 1159 |
| 22:44 | clojurebot | svn is https://clojure.svn.sourceforge.net/svnroot/clojure/ |
| 22:44 | Chouser | svn rev 1159 |
| 22:44 | hiredman | svn rev 1159 |
| 22:44 | clojurebot | svn rev 1159; proxy perf tweaks Note breaking change if you are using the proxy interface other than the proxy macro itself - proxy maps are now maps of (preferably interned) strings to fns, not symbols to fns, and if you construct a proxy manually you must establish initial map with init-proxy |
| 22:44 | clojurebot | svn rev 1159; proxy perf tweaks Note breaking change if you are using the proxy interface other than the proxy macro itself - proxy maps are now maps of (preferably interned) strings to fns, not symbols to fns, and if you construct a proxy manually you must establish initial map with init-proxy |
| 22:45 | hiredman | whoops |
| 22:45 | Chouser | :-) |
| 22:45 | dmiles | oops ;P .. i am trying to make a lisp dispatch reader macro that can convert Clojure forms to jcall/jstatic/jclass/jfield forms.. someone have one laying around? |
| 22:47 | dmiles | this is still suposed to work? (.. System (getProperties) (get "os.name")) |
| 22:47 | Chouser | not anymore |
| 22:47 | Chouser | svn rev 1158 |
| 22:47 | clojurebot | svn rev 1158; force instance member interpretation of (.method ClassName), e.g. (.getMethods String) works |
| 22:48 | Chouser | hm, anyway, you need Classname/staticMethod now |
| 22:49 | dmiles | and (Classname/instanceMethod instancevar arg1 arg2) ? |
| 22:49 | Chouser | no, (.instanceMethod instance arg1 arg2) |
| 22:49 | dmiles | oh so its just for statics.. right on.. i like that partial disabiguaty |
| 22:52 | dmiles | (. instance-expr member-symbol) for instance fields? |
| 22:52 | Chouser | I think that still works, but (.member instance) is still preferred. |
| 22:54 | mmcgrana | i have some NaN |
| 22:55 | mmcgrana | popping up in some numerical Clojure code I have, but I have no idea from where: are there any ops besides eg (Math/sqrt -2) that would return NaN? |
| 23:03 | durka | 0/0? |
| 23:04 | mmcgrana | raises ArithmeticException |
| 23:04 | mmcgrana | at least in repl |
| 23:04 | durka | with ints yes |
| 23:05 | durka | but apparently the behavior is different for floats |
| 23:05 | mmcgrana | user=> (/ (float 0) (float 0)) NaN |
| 23:05 | mmcgrana | hmmm |
| 23:08 | mmcgrana | as it happens i don't have any calls to / in my program (or (float x) for that matter); i guess i'll keep poking around |
| 23:11 | asbjxrn | Anyone using slime and jswat? |
| 23:12 | asbjxrn | I'd like to get exceptions trapped in jswat, but it looks like slime grabs them first. |
| 23:22 | rhickey | Chouser: (.. System (getProperties) (get "os.name")) still works, only (.instanceMethod classname ...) was changed to force class instance |
| 23:25 | dmiles | rhickey: ah. |
| 23:28 | dmiles | how do i change the search thru packages for System/getProperties Math/PI .. assuming it first search in java.lang.*; |
| 23:33 | dmiles | not (import '(java.util ) ) ? |
| 23:33 | hiredman | what? |
| 23:34 | hiredman | you have to import specific classes |
| 23:34 | hiredman | (import '(java.util someclass)) |
| 23:34 | dmiles | did i have to import java.lang.Math and java.lang.System .. or did those come for free? |
| 23:35 | hiredman | you have to import everything other then stuff in java.lang |
| 23:36 | hiredman | java.lang.Math and java.lang.System are sperate packages from javalang |
| 23:36 | dmiles | ok makes sense |
| 23:48 | Chouser | rhickey: I keep findind more opportunities to use PersistentQueue (legitimitely, I think) |
| 23:49 | Chouser | finding |
| 23:51 | gnuvince_ | Any idea why when I add a Java lib with add-classpath in SLIME and then I C-c C-c a source file, I get a message that the lib I just included isn't found? |
| 23:51 | hiredman | add-classpath is lame |
| 23:52 | gnuvince_ | What's the alternative? |
| 23:52 | hiredman | at start up slime adds all jars in ~/.clojure to the cp |
| 23:53 | gnuvince_ | There's no temporary way? |
| 23:54 | hiredman | not that I am aware of |
| 23:54 | gnuvince_ | So what does it look like the ~/.clojure? |
| 23:54 | hiredman | its a directory where you put jars |
| 23:54 | gnuvince_ | plain old /home/foo/baz.jar? |
| 23:55 | gnuvince_ | oh |
| 23:55 | gnuvince_ | it's a directory |
| 23:55 | gnuvince_ | fuck |