2009-04-11
| 00:00 | hiredman | ,(uncurry +) |
| 00:00 | clojurebot | #<sandbox$uncurry__1858$uc__1860 sandbox$uncurry__1858$uc__1860@127d5a0> |
| 00:00 | hiredman | ,(((uncurry +) 2) 3) |
| 00:00 | clojurebot | #<sandbox$uncurry__1858$uc__1860 sandbox$uncurry__1858$uc__1860@fae256> |
| 00:00 | Raynes | Man, why do people like Groovy. How could anyone like something with such a horrible name. :| |
| 00:01 | hiredman | ,((((uncurry +) 2) 3)) |
| 00:01 | clojurebot | 5 |
| 00:01 | Cark | hum i see |
| 00:01 | Cark | ,(((((uncurry +) 2) 3) 4)) |
| 00:01 | clojurebot | 9 |
| 00:02 | Cark | ,(-> (uncurry +) (apply 3) apply) |
| 00:02 | clojurebot | java.lang.IllegalArgumentException: Don't know how to create ISeq from: Integer |
| 00:02 | Cark | ,(-> (uncurry +) (apply [3]) (apply [])) |
| 00:02 | clojurebot | 3 |
| 00:02 | hiredman | ,(doc call) |
| 00:02 | clojurebot | "([x & y]); (apply x y)" |
| 00:03 | Cark | ,(-> (uncurry +) (call 3) (call)) |
| 00:03 | clojurebot | 3 |
| 00:03 | Cark | ,(-> (uncurry +) (call 3) call) |
| 00:03 | clojurebot | 3 |
| 00:03 | Cark | all right so what's a real world use of uncurry ? |
| 00:05 | Cark | man your pl macro is some hairy stuff |
| 00:05 | hiredman | ,(((((uncurry (flip map)) (range 3)) (range 3)) +)) |
| 00:05 | clojurebot | (0 2 4) |
| 00:10 | Cark | nice library |
| 00:10 | hiredman | :) |
| 00:11 | hiredman | it was fun |
| 00:31 | nzkoz | I feel like I'm missing something, but why does (rest []) return a not-a-vector (list?) |
| 00:32 | hiredman | most of the sequence handling functions call seq first |
| 00:32 | nzkoz | meant that my fancy ref to a vector turned into something else where conj put things on the front and my app stopped behaving. I'm clearly doing something wrong headed |
| 00:33 | hiredman | filter, map, etc |
| 00:33 | durka42 | don't use rest anymore, use next |
| 00:33 | durka42 | might do the same thing |
| 00:33 | durka42 | ,(next []) |
| 00:33 | clojurebot | nil |
| 00:33 | durka42 | ,(next [1]) |
| 00:33 | clojurebot | nil |
| 00:33 | durka42 | ,(next [1 2]) |
| 00:33 | clojurebot | (2) |
| 00:33 | hiredman | ,(next []) |
| 00:33 | clojurebot | nil |
| 00:33 | hiredman | ,(rest []) |
| 00:33 | clojurebot | () |
| 00:34 | nzkoz | cheers |
| 00:35 | hiredman | maybe contrib should have a vector map, filter, etc |
| 00:36 | hiredman | ,(assoc [] 10 :a) |
| 00:36 | clojurebot | java.lang.IndexOutOfBoundsException |
| 00:37 | hiredman | ,(assoc [] 0 :a) |
| 00:37 | clojurebot | [:a] |
| 00:37 | hiredman | ,(assoc [:b] 1 :b) |
| 00:37 | clojurebot | [:b :b] |
| 00:37 | hiredman | ,(assoc [:a] 1 :b) |
| 00:37 | clojurebot | [:a :b] |
| 00:37 | hiredman | interesting |
| 00:37 | nzkoz | yeah, I basically just want to atomically pop and push from *something* |
| 00:37 | nzkoz | my java / ruby brain wants an array / queue with locks |
| 00:38 | durka42 | use transactions instead |
| 00:38 | hiredman | or you can use your java brain and use a blocking queue |
| 00:38 | nzkoz | durka42: right, that's what I'm trying to do 'right' |
| 00:39 | nzkoz | http://gist.github.com/93459 |
| 00:39 | nzkoz | I have that so far |
| 00:39 | nzkoz | works, but feels questionable |
| 00:40 | hiredman | blocking queues are threadsafe, so no locks anyway |
| 00:40 | durka42 | ,(conj [1 2 3] 4) |
| 00:40 | clojurebot | [1 2 3 4] |
| 00:40 | durka42 | ,(pop [1 2 3 4]) |
| 00:40 | clojurebot | [1 2 3] |
| 00:40 | hiredman | well, BlockingQueue |
| 00:41 | durka42 | ,(peek [1 2 3 4]) |
| 00:41 | clojurebot | 4 |
| 00:41 | nzkoz | so pop + peek should work too |
| 00:41 | durka42 | just be careful they act different with different collection types |
| 00:41 | durka42 | like conj |
| 00:42 | nzkoz | yeah, a little confusing I have to say |
| 00:42 | hiredman | do you really need indexed access? |
| 00:43 | nzkoz | not at all, just want to do add-foo and get-foo |
| 00:44 | nzkoz | with fifo |
| 00:44 | hiredman | you might use subvec instead of rest |
| 00:44 | hiredman | ,(doc subvec) |
| 00:44 | clojurebot | "([v start] [v start end]); Returns a persistent vector of the items in vector from start (inclusive) to end (exclusive). If end is not supplied, defaults to (count vector). This operation is O(1) and very fast, as the resulting vector shares structure with the original and no trimming is done." |
| 00:47 | nzkoz | raises for start > size, so would need a special case to handle empty |
| 00:47 | nzkoz | but that feels a little more natural |
| 00:49 | dakrone_hb | 7/clear |
| 00:49 | dakrone_hb | bah |
| 00:50 | dakrone_hb | ,(show-doc "xml") |
| 00:50 | clojurebot | [ 0] clojure.core/xml-seq [ 1] clojure.zip/xml-zip [ 2] clojure.xml/parse [ 3] hiredman.clojurebot.svn/summary |
| 00:51 | dakrone_hb | ,(show-doc "xml" 0) |
| 00:51 | clojurebot | ------------------------- clojure.core/xml-seq ([root]) A tree seq on the xml elements as per xml/parse |
| 00:51 | dakrone_hb | ,(show-doc "xml" 1) |
| 00:51 | clojurebot | ------------------------- clojure.zip/xml-zip ([root]) Returns a zipper for xml elements (as from xml/parse), given a root element |
| 00:56 | durka42 | (doc show-doc) |
| 00:56 | clojurebot | excusez-moi |
| 00:57 | durka42 | ,(doc show-doc) |
| 00:57 | clojurebot | "([re-string-or-pattern] [re-string-or-pattern index]); Based on find-doc and clojure.contrib.repl-utils/show. With one argument, prints a list of all vars whose documentation or name contains a match for re-string-or-pattern. Each var is listed with a number of it's index which can be used to print the documentation for that var." |
| 01:08 | dakrone_hb | I have been reading, and I still can't find where it's mentioned what the '^' in front of a hash-map does |
| 01:08 | dakrone_hb | ,^{:a 1} |
| 01:08 | clojurebot | nil |
| 01:08 | dakrone_hb | ,{:a 1} |
| 01:08 | clojurebot | {:a 1} |
| 01:09 | dakrone_hb | can someone explain what the ^ is used for? |
| 01:09 | hiredman | it is a reader macro |
| 01:09 | hiredman | ,^{:a 1} 'a |
| 01:09 | clojurebot | nil |
| 01:09 | hiredman | ,#^{:a 1} 'a |
| 01:09 | clojurebot | a |
| 01:10 | hiredman | ,(meta #^{:a 1} 'a) |
| 01:10 | clojurebot | nil |
| 01:10 | hiredman | bah |
| 01:10 | dakrone_hb | err... |
| 01:10 | dakrone_hb | for reading metadata? |
| 01:10 | hiredman | for attaching metadata |
| 01:11 | hiredman | oh |
| 01:11 | hiredman | yeah |
| 01:11 | dakrone_hb | so is it for reading or attaching metadata? |
| 01:11 | dakrone_hb | or both? |
| 01:11 | hiredman | ^ is for reading |
| 01:11 | hiredman | #^ is for attaching |
| 01:12 | hiredman | ,^#^{:a 1} 'a) |
| 01:12 | clojurebot | nil |
| 01:12 | hiredman | ,(let [#^{:a 1} a 3] ^a) |
| 01:12 | clojurebot | nil |
| 01:12 | hiredman | ,^(with-meta 'a {:a 1}) |
| 01:12 | clojurebot | {:a 1} |
| 01:13 | durka42 | (doc with-meta) |
| 01:13 | clojurebot | Returns an object of the same type and value as obj, with map m as its metadata.; arglists ([obj m]) |
| 01:14 | dakrone_hb | so you're associating metadata {:a 1} with the 'a' object, then reading it all out |
| 01:14 | dakrone_hb | ? |
| 01:14 | hiredman | yeah |
| 01:14 | dakrone_hb | does ^ read all the metadata, or just specific fields? |
| 01:14 | hiredman | all |
| 01:14 | hiredman | the metadata is a single map |
| 01:15 | dakrone_hb | okay, so you could do (:a ^(with-meta 'b {:a 1})) |
| 01:15 | dakrone_hb | ,(:a ^(with-meta 'b {:a 1})) |
| 01:15 | clojurebot | 1 |
| 01:15 | hiredman | I would use ^ |
| 01:15 | dakrone_hb | neat |
| 01:15 | hiredman | er |
| 01:15 | hiredman | wouldn't |
| 01:15 | dakrone_hb | oh, okay |
| 01:15 | hiredman | but I guess it is personal choice |
| 01:15 | hiredman | I use (meta ) |
| 01:15 | hiredman | ,(macroexpand '^a) |
| 01:15 | clojurebot | (clojure.core/meta a) |
| 01:15 | hiredman | :P |
| 01:16 | dakrone_hb | okay, but it definitely helps for reading other people's code |
| 01:16 | dakrone_hb | ,(macroexpand '#^a) |
| 01:16 | clojurebot | Unmatched delimiter: ) |
| 01:16 | hiredman | and I use vary-meta more then with-meta |
| 01:16 | hiredman | ,(meta (vary-meta 'a assoc :a 1)) |
| 01:16 | clojurebot | {:a 1} |
| 01:16 | dakrone_hb | is there a good reference for "shortcut operators" for Clojure anywhere? |
| 01:17 | dakrone_hb | since the clojure site won't let me search for '^', and it's not very google-friendly |
| 01:17 | hiredman | maybe the reader page on the website |
| 01:17 | durka42 | "reader macro" is the googlable term you're looking for |
| 01:17 | dakrone_hb | there we go, there's the list |
| 01:18 | dakrone_hb | hiredman, thanks for the explaination, very helpful |
| 02:41 | msingh | why does having clojure written in clojure make it easier to port? |
| 02:43 | hiredman | it makes the part that needs to be ported smaller |
| 02:44 | hiredman | if the data structures are written in clojure, then they don't need to be written for a non-java platform |
| 02:44 | msingh | oh i see |
| 02:44 | hiredman | etc |
| 02:44 | msingh | cool thanks that makes seense |
| 02:44 | lepassive | anyone using enclojure netbeans plugin with NetBeans 6.7 M3 ? |
| 02:47 | msingh | hiredman: so it there a well understood core of clojure that would need to be implemented in the native environment to host the rest of the portable clojure code? |
| 02:48 | hiredman | it depends |
| 02:49 | hiredman | the self hosting aspect can be pushed pretty far |
| 06:34 | something | good morning. |
| 06:35 | something | I'm having trouble adding clojure-contrib to my .emacs. I did the following (setq swank-clojure-extra-classpaths (list "my-path-to-contrib-jar")) |
| 06:36 | something | am I missing something? |
| 06:38 | something | :w |
| 11:32 | digash | swank-clojure only read that variable once on the slime startup |
| 11:34 | digash | try (setq slime-lisp-implementations (delete-if '(lambda (i) (eq (car i) 'clojure)) slime-lisp-implementations) |
| 11:34 | digash | (add-to-list 'slime-lisp-implementations `(clojure ,(swank-clojure-cmd) :init swank-clojure-init) t) |
| 11:34 | digash | or just restart emacs |
| 16:42 | blbrown_win | " kjsldjfsd ; kljsfksljdf" what is the split character in clojure to seperate based on a particular character |
| 16:44 | blbrown_win | ,(.split "abc ; 123") |
| 16:44 | clojurebot | java.lang.IllegalArgumentException: No matching field found: split for class java.lang.String |
| 16:44 | durka42 | ,(.split "abc ; 123" ";") |
| 16:44 | clojurebot | #<String[] [Ljava.lang.String;@12c61fe> |
| 16:44 | durka42 | ,(dorun (map prn (.split "abc ; 123" ";"))) |
| 16:45 | clojurebot | "abc " " 123" |
| 16:45 | blbrown_win | (map trim (.split "abc ; 123" ";")) |
| 16:45 | blbrown_win | ,(map trim (.split "abc ; 123" ";")) |
| 16:45 | clojurebot | java.lang.Exception: Unable to resolve symbol: trim in this context |
| 16:45 | blbrown_win | ,(map .trim (.split "abc ; 123" ";")) |
| 16:45 | clojurebot | java.lang.Exception: Unable to resolve symbol: .trim in this context |
| 16:46 | durka42 | (.trim " abc") |
| 16:46 | durka42 | ,(.trim " abc") |
| 16:46 | clojurebot | "abc" |
| 16:46 | blbrown_win | ,(map (fn [a] (.trim a) (.split "abc ; 123" ";")) |
| 16:46 | clojurebot | EOF while reading |
| 16:46 | durka42 | ,(map #(.trim %) (.split "abc ; 1 2 3" ";")) |
| 16:46 | clojurebot | ("abc" "1 2 3") |
| 16:46 | blbrown_win | ,(map (fn [a] (.trim a)) (.split "abc ; 123" ";")) |
| 16:46 | clojurebot | ("abc" "123") |
| 16:46 | blbrown_win | what is the '%' in your last example |
| 16:47 | durka42 | my example is exactly equivalent to what you wrote right after it |
| 16:47 | durka42 | % is the parameter in anonymous functions |
| 16:47 | durka42 | ,(macroexpand #(.trim %)) |
| 16:47 | clojurebot | #<sandbox$eval__2693$fn__2695 sandbox$eval__2693$fn__2695@ac087b> |
| 16:47 | durka42 | er |
| 16:47 | durka42 | ,(macroexpand '#(.trim %)) |
| 16:47 | clojurebot | (fn* [p1__2699] (.trim p1__2699)) |
| 16:47 | durka42 | ,(macroexpand '#(+ %1 %2)) |
| 16:47 | clojurebot | (fn* [p1__2703 p2__2704] (+ p1__2703 p2__2704)) |
| 16:47 | blbrown_win | ah |
| 16:48 | blbrown_win | nice |
| 16:49 | blbrown_win | ,(map #(.trim %) (.split "abc ; 1 2 3 ;" ";")) |
| 16:49 | clojurebot | ("abc" "1 2 3") |
| 16:49 | dreish | For that matter, ,'#(+ %1 %2) |
| 16:49 | dreish | ,'#(+ %1 %2) |
| 16:49 | clojurebot | (fn* [p1__2715 p2__2716] (+ p1__2715 p2__2716)) |
| 16:49 | blbrown_win | ,(map #(.trim %) (.split "abc ; 1 2 3 ; ;" ";")) |
| 16:49 | clojurebot | ("abc" "1 2 3" "") |
| 16:49 | dreish | #() is expanded by the reader; it isn't a macro per se. |
| 16:49 | blbrown_win | ,(remove nil? (map #(.trim %) (.split "abc ; 1 2 3 ; ;" ";"))) |
| 16:49 | clojurebot | ("abc" "1 2 3" "") |
| 16:49 | blbrown_win | ,(remove empty? (map #(.trim %) (.split "abc ; 1 2 3 ; ;" ";"))) |
| 16:49 | clojurebot | ("abc" "1 2 3") |
| 16:49 | blbrown_win | nice little one liner |
| 16:50 | blbrown_win | ,(remove empty? (map #(.trim %) (.split "" ";"))) |
| 16:50 | clojurebot | () |
| 16:50 | blbrown_win | ,(remove empty? (map #(.trim %) (.split ";;;;;;" ";"))) |
| 16:50 | clojurebot | () |
| 16:50 | blbrown_win | I am unit testing with the bot |
| 16:58 | d2dchat | Do clj files have to be compiled before you can read them from other clj files? |
| 16:58 | d2dchat | I'm trying to namespace one of my libraries |
| 16:58 | d2dchat | and read from another clj file |
| 16:58 | d2dchat | and I'm having problems |
| 17:30 | blbrown_win | no they do not have to be compiled, can you post your code to the pastebin including the error |
| 18:09 | d2dchat | blbrown_win: sure hold on a sec |
| 18:10 | d2dchat | blbrown_win: http://pastie.org/443938 |
| 18:10 | d2dchat | The weird thing is, I did the same thing independent of those two files in the same directory |
| 18:10 | d2dchat | and it seemed to work |
| 18:14 | durka42 | d2dchat: what is $PWD then |
| 18:15 | d2dchat | echo $PWD is /Users/lancelotcarlson/Projects/clojure/redwine |
| 18:15 | d2dchat | durka42: ^ |
| 18:16 | durka42 | oh, i see, but it finds src/redwine/server.clj anyway so it should really find request.clj... |
| 18:16 | durka42 | i'm not sure |
| 18:16 | d2dchat | it should find both |
| 18:16 | durka42 | maybe if you put $PWD/src on the classpath? |
| 18:16 | d2dchat | well if finds server.clj because I specify in the run.sh file |
| 18:16 | d2dchat | BUT |
| 18:16 | d2dchat | it doesn't find request.clj |
| 18:17 | d2dchat | durka42: didn't work :( |
| 18:18 | d2dchat | I tried this: |
| 18:18 | d2dchat | java -DDEBUG -cp $PWD/src -Djava.ext.dirs=jars clojure.main src/redwine/server.clj -- $* |
| 18:18 | d2dchat | (ns redwine.server |
| 18:18 | d2dchat | (:use redwine.request) |
| 18:18 | d2dchat | (ns redwine.request) |
| 18:18 | durka42 | meh |
| 18:18 | d2dchat | in the different files respectively^ |
| 18:18 | durka42 | i am stumped :( |
| 18:18 | durka42 | and i have to run |
| 18:18 | durka42 | sorry |
| 18:18 | d2dchat | haha |
| 18:18 | d2dchat | durka durka |
| 18:18 | d2dchat | :( |
| 19:19 | dmiles_afk | seem all languages on the JVM are plagued with a fixnums not being a primitive type.. some at least (does clojure?) at least try to use/reuse java's nullable version Integer? |
| 19:20 | gnuvince_ | dmiles_afk: unless explicitly coerced, Clojure's ints are Java's Integers |
| 19:21 | dmiles_afk | which i guess is the best case anyways |
| 19:21 | gnuvince_ | Almost; the really best case would be that you'd never need to know or care. |
| 19:22 | dmiles_afk | indeed |
| 19:25 | dmiles_afk | i am trying to figure out if it is going to be required in the long run to have primitive taking method signatures besides the nullable method singatures |
| 19:26 | dmiles_afk | it'd be such a pain to do.. in any compiler.. wondering if clojure has had to consider do this to speed up use of numbers |
| 19:30 | dmiles_afk | one jvm language started doing this, scala, they secretly add the same methods to things but that take primitives as well as their numberic datatypes |
| 19:30 | dmiles_afk | so that way there is never box/unbox/rebox/unbox etc |
| 19:31 | rhickey | dmiles_afk: something like this is on the drawing board |
| 19:31 | dmiles_afk | so it actualyl seemed worth it.. thats what i was wondering |
| 19:35 | dmiles_afk | one methodology that almost can make the path to doing this simplier.. is to go ahead and do what your already doing with java.lang.Integer.. then looking for the numberi operations from the bytecode level and replacing it with the same forms using primtives.. GJIT.. is an exmaple of such an aniomal that takes Groovy post compiled code.. then rewrites the bytecode to not use the expensive boxed versions of the operations |
| 19:37 | dmiles_afk | but its too easy to create barriers that GJIT wouldnt be able to do its smart stuff on.. so doing it in the intial phase when you can is always going to be the best |
| 19:39 | dmiles_afk | i am glad it's one the drawing board though |
| 19:39 | dmiles_afk | one/on |
| 19:40 | blbrown_win | what is the benefit of lazy sequences |
| 19:41 | blbrown_win | clojurebot: do you ? what is the benefit of lazy sequences |
| 19:41 | clojurebot | c'est bon! |
| 19:41 | dmiles_afk | the same benefits as lazy lists |
| 19:43 | blbrown_win | what are the benefists of lazy lists |
| 19:43 | d2dchat | anyone know about require and use in clojure? I'm having all kinds of problems with use and getting files to load |
| 19:43 | d2dchat | http://pastie.org/443938 |
| 19:44 | dmiles_afk | rhickey: my project is finally moving to useing Clojure on IKVM instead of DotLisp ;P |
| 19:45 | d2dchat | grr I've tried so many combinations with the java command and nothing seems to be working |
| 19:47 | dnolen | d2dchat: are you trying to load your own clj files? |
| 19:47 | d2dchat | dnolen: yes |
| 19:47 | dmiles_afk | the project hasnt had a lot of DotLisp code written by users so it's not going to be difficult changeover, but what was impressive was how many cloure features DotLisp had at the get go |
| 19:47 | rlb | blbrown_win: that's a pretty general question... |
| 19:48 | hiredman | d2dchat: I would not use ext.dirs |
| 19:48 | hiredman | and it's the only one he hasble |
| 19:48 | d2dchat | hiredman: what should I use? |
| 19:48 | hiredman | ~jar directory |
| 19:48 | clojurebot | with java6(jdk1.6) CLASSPATH can contain a "*" so /jar/dir/* will suck in all the jars in the /jar/dir directory, this also works with swank-clojure-extra-classpaths in emacs, alternatively you can use this shell snippet: find .jars/ -type f -name \*.jar -print0|xargs -0|sed "s/ /:/g" |
| 19:49 | d2dchat | hiredman: so I should use classpath exclusively? |
| 19:49 | hiredman | I think it is the most reliable option |
| 19:49 | hiredman | also what directory are you running java in? |
| 19:50 | d2dchat | the path of the project |
| 19:50 | hiredman | is the directory containing the "src/" directory on the classpath? |
| 19:50 | d2dchat | I think si |
| 19:50 | d2dchat | so |
| 19:51 | hiredman | think? |
| 19:51 | rlb | blbrown_win: ...but in general, the laziness allows you to delay evaluation (computation, allocation, etc.) until it's actually required. |
| 19:51 | d2dchat | I'm changing stuff around right now |
| 19:51 | d2dchat | :) |
| 19:51 | dmiles_afk | blbrown_win: the benefits of lazy lists usually are that if the list contains evaluation to generate the full values of the list.. you are not penalized for head use operations |
| 19:51 | d2dchat | directories are split out with the colon character rght? |
| 19:52 | hiredman | on unix systems |
| 19:52 | hiredman | on windows, semi-colon |
| 19:52 | rlb | ...also allows for infinite sequences, etc. |
| 19:54 | d2dchat | hiredman: ok this is what I'm running: |
| 19:54 | d2dchat | ./System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/bin/java -cp /Users/lancelotcarlson/Projects/clojure/redwine/jars:/Users/lancelotcarlson/Projects/clojure/redwine/src -DDEBUG clojure.main src/redwine/server.clj |
| 19:54 | d2dchat | and it's saying: |
| 19:54 | d2dchat | java.io.FileNotFoundException: Could not locate clj_html/core__init.class or clj_html/core.clj on classpath: (backtrace.clj:0) |
| 19:55 | hiredman | several things |
| 19:55 | hiredman | /Users/lancelotcarlson/Projects/clojure/redwine/jars should be something like /Users/lancelotcarlson/Projects/clojure/redwine/jars/\* |
| 19:55 | hiredman | /Users/lancelotcarlson/Projects/clojure/redwine/src should be /Users/lancelotcarlson/Projects/clojure/redwine/ |
| 19:56 | hiredman | just two things then |
| 19:56 | d2dchat | ah, separated by colons though |
| 19:56 | d2dchat | how do I do that? |
| 19:56 | d2dchat | right now it's running |
| 19:57 | d2dchat | ./System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/bin/java -cp /Users/lancelotcarlson/Projects/clojure/redwine/jars/clj-backtrace.jar /Users/lancelotcarlson/Projects/clojure/redwine/jars/clj-html-helpers.jar /Users/lancelotcarlson/Projects/clojure/redwine/jars/clj-html.jar /Users/lancelotcarlson/Projects/clojure/redwine/jars/clj-unit.jar /Users/lancelotcarlson/Projects/clojure/redwine/jars/clojure-contrib.jar /Users/lancelotcarlson/Projects/c |
| 19:57 | d2dchat | lol |
| 19:57 | st3fan | is there someting like CLOS for Clojure? |
| 19:57 | d2dchat | after I added /\* |
| 19:57 | d2dchat | jars/\* |
| 19:57 | hiredman | d2dchat: pardon? |
| 19:58 | d2dchat | hiredman: http://pastie.org/443998 |
| 19:58 | d2dchat | that is spitting out what is above |
| 19:59 | blbrown_win | dmiles_afk, aren't there timing issues with lazy operations. For example, if I need a set of sequences to be called in a set order and but the lazy operation is called whenever it is required, wouldn't that cause issues with your code |
| 19:59 | hiredman | ignore the run script |
| 20:00 | blbrown_win | dmiles_afk, but then again, if you are careful where you use lazy lists then I guess you are OK |
| 20:00 | hiredman | type in "java -cp $PWD/jars/\*:$PWD clojure.main src/redwine/server.clj" |
| 20:00 | rlb | st3fan: you mean something exactly like CLOS? Clojure has multimethods, etc., but they're a bit different. |
| 20:01 | dnolen | st3fan: no, however much of what you might want is available with multimethods and hierarchies. The main missing bit is inheritance of fields, though this isn't too difficult to implement. |
| 20:01 | st3fan | i'm not sure what i mean :-) |
| 20:01 | dmiles_afk | blbrown_win: right .. just have to decide when they are apropriate |
| 20:01 | blbrown_win | dmiles_afk, cool |
| 20:02 | st3fan | i would like to write some OO code with clojure, or is that the wrong approach? |
| 20:02 | dnolen | stefan: do you need field inheritance? |
| 20:02 | st3fan | dunno, i can probably do without |
| 20:02 | hiredman | what is OO to you? |
| 20:03 | dnolen | then just use multimethods, and ad hoc types |
| 20:03 | dmiles_afk | blbrown_win: but in the first case you cited.. you can always copy it into a new list evaled element by evaled element with the new list/seq not lazy |
| 20:03 | blbrown_win | dmiles_afk, but personally, I wish that the api would explicty tag lazy operations. For example, I think 'for' uses lazy lists now with the 200903 release. Wish it were called lazy-for or something |
| 20:03 | rlb | st3fan: I would take a look at what clojure already has -- it's very powerful, and if you know CLOS, less surprising that if you only knew Java/C++/... |
| 20:03 | st3fan | hiredman: class hierarchy ctually |
| 20:03 | dnolen | stefan: http://clojure.org/multimethods |
| 20:03 | rlb | s/that if/than if/ |
| 20:03 | hiredman | st3fan: well, clojure has heirachies |
| 20:04 | blbrown_win | dmiles_afk, yea, I use 'for' a lot and I have to get used to the new lazy approach to i |
| 20:04 | st3fan | i have a lot to read i guess |
| 20:04 | blbrown_win | it |
| 20:04 | rlb | blbrown_win: I would suspect that if the order is critical, then you should be forcing the order anyway. |
| 20:05 | dnolen | st3fan: unfortunately there are a few undocumented things, Rich recently added a handy feature where you can get the specific method for a particular dispatch type. but yeah, there's a little bit to read, but it's not a big topic. |
| 20:05 | dmiles_afk | rlb, blbrown_win: the 'for' would enforce some order already right? |
| 20:05 | rlb | (i.e. doall) |
| 20:06 | blbrown_win | dmiles_afk, it enforces order, but I believe the list that you build won't get built until you need it. And I am guessing it didn't work this way with the older clojure release |
| 20:06 | rlb | I suppose I shouldn't have said order -- I really meant "timing". |
| 20:06 | d2dchat | hiredman: /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/bin/java -cp /Users/lancelotcarlson/Projects/clojure/redwine/jars/*:/Users/lancelotcarlson/Projects/clojure/redwine -DDEBUG clojure.main src/redwine/server.clj |
| 20:06 | d2dchat | java.lang.Exception: Unable to resolve symbol: lazy-seq in this context (str_utils.clj:38) |
| 20:06 | clojurebot | ? |
| 20:06 | hiredman | ah |
| 20:06 | hiredman | now we are getting somewhere |
| 20:07 | blbrown_win | rlb, dmiles_afk I am not concerned or anything or have any issues. I think it is a cool feature. For me though, I have to get used to lazy operations in a language, especially as it relates to debugging |
| 20:07 | hiredman | d2dchat: do you have the latest versions of everything? |
| 20:08 | d2dchat | hiredman: yea, when I had the ext.lib thing pointing to the jars path.. everything was working EXCEPT for my extra .clj file I was trying to include |
| 20:08 | blbrown_win | dmiles_afk, I could be wrong, but I couldn't want to use lazy lists and database operations together |
| 20:08 | hiredman | d2dchat: well, if you want to go back to that, the problem was the "src" at the end of your classpath |
| 20:09 | dmiles_afk | i am new to clojure myself but i assume there was something you can wrap a list in. a memoizer that on first use walks the list on first use |
| 20:09 | hiredman | your namespaces all start with src.* so src needs to be in soemthing on the classpath, but not on the classpath |
| 20:09 | d2dchat | hiredman: if we can get this classpath method to work, then I'm all for it |
| 20:09 | blbrown_win | dmiles_afk, I don't know. I was using 'for' as my example. Maybe somone else knows |
| 20:09 | hiredman | dmiles_afk: lazy-seqs cache their results |
| 20:10 | blbrown_win | ,(doc lazy-seqs) |
| 20:10 | clojurebot | java.lang.Exception: Unable to resolve var: lazy-seqs in this context |
| 20:10 | hiredman | each part computation for an element in a lazy-seq is done once |
| 20:10 | clojurebot | for is a loop...in Java |
| 20:10 | hiredman | ,(doc lazy-seq) |
| 20:10 | clojurebot | "([& body]); Takes a body of expressions that returns an ISeq or nil, and yields a Seqable object that will invoke the body only the first time seq is called, and will cache the result and return it on all subsequent seq calls. Any closed over locals will be cleared prior to the tail call of body." |
| 20:10 | hiredman | all the clojure functions that deal with seqs that can be lazy are |
| 20:11 | d2dchat | hiredman: I'm not so sure that the jars/* is working as it should |
| 20:11 | dmiles_afk | that is a good default |
| 20:11 | hiredman | d2dchat: I am sure it is, that str_utils exception is something I have seen before, but I forget exactly the circumstances |
| 20:12 | hiredman | I think it was something to do with clj-html |
| 20:12 | blbrown_win | dmiles_afk, do you work with haskell? is that the approach the haskell uses |
| 20:12 | d2dchat | hiredman: well I imported all of the deps for the ring project |
| 20:12 | d2dchat | all of the jars that it uses is on the repo |
| 20:12 | d2dchat | and stuck them inside of the jars folder |
| 20:13 | hiredman | I think clj-html has it's own git repo, which may be newer then whatever ships with ring |
| 20:13 | dmiles_afk | blbrown_win: i am a lzay list prolog programmer.. dont know haskell yet.. but i thought haskell assumes the evaluation is not cachabel ussually.. so if you broke into a debugger.. every inspection might trigger the call again? |
| 20:13 | d2dchat | hiredman: I don't necessarily want new.. just whatever works with ring |
| 20:14 | dmiles_afk | cachabel/cachable |
| 20:14 | hiredman | d2dchat: that is the thing, I think the clj-html that comes with ring doesn't work |
| 20:14 | d2dchat | haha gotcha |
| 20:14 | d2dchat | :( |
| 20:14 | d2dchat | although it wasn't complaining before.. |
| 20:15 | hiredman | I forget exactly because it was something like a month ago when I ran into this |
| 20:16 | d2dchat | hiredman: I'm not even using html in my code :( |
| 20:16 | hiredman | d2dchat: if you want to go back to ext, go ahead, the problem with you classpath is the "src" at the end |
| 20:16 | dmiles_afk | blbrown_win: my assumptionm to haskell not caching it is that good haskell code .. knows how to 'undo side effects' .. so caching would be only an optimization.. not for cleanliness |
| 20:16 | blbrown_win | dmiles_afk, shrug, I remember there might issues with the haskell approach as lazy by defult for most sequence operations and can cause memory problems. But this is coming froma a person that doesn't understand it all |
| 20:16 | hiredman | ~lazy |
| 20:16 | clojurebot | lazy is hard |
| 20:18 | dmiles_afk | clojure would be caching the evaluations for cleanliness .. so side effects only trigger when they should (is that one reason?) |
| 20:18 | blbrown_win | ask rhickey_ |
| 20:18 | hiredman | dmiles_afk: the operations that generate you lazy-seq are not free |
| 20:18 | hiredman | better to just do it once, instead of everytime you walk a seq |
| 20:19 | blbrown_win | dmiles_afk, at least with the jvm, there are better tools to monitor memory/heap usage and other tools for tracing operations...compared to haskell. So it would be an interesting expirement |
| 20:20 | hiredman | there is a branch in svn of work on "streams" which are like non-caching lazy-seqs |
| 20:22 | dmiles_afk | someone wrote a JVM in prolog.. it had the ability to run bytecode forward and backward |
| 20:22 | hiredman | nice |
| 20:22 | blbrown_win | do you mean a VM? |
| 20:22 | hiredman | maybe someone shoudl write a jvm in clojure |
| 20:23 | dmiles_afk | a java bytecode interpreter |
| 20:23 | hiredman | I heard you like clojure so I wrote your jvm in clojure so you can run clojure in clojure while you run clojure |
| 20:24 | durka42 | what happens when you run bytecode backwards? |
| 20:24 | hiredman | you gain memory |
| 20:24 | hiredman | :P |
| 20:24 | dreish | Sun's stock goes up. |
| 20:24 | dmiles_afk | that was true |
| 20:24 | hiredman | ha ha |
| 20:24 | hiredman | ~ticker JAVA |
| 20:24 | clojurebot | JAVA; +0.02 |
| 20:25 | blbrown_win | I guess it is kind of like call with current with continuations, only a relic of scheme apparently |
| 20:29 | d2dchat | hiredman: btw I think this is better: |
| 20:29 | d2dchat | EXT="$(find $PWD/jars -mindepth 1 -maxdepth 1 -print0 | tr \\0 \:)" |
| 20:29 | d2dchat | hiredman: still having problems, but same error |
| 20:33 | blbrown_win | I guess I work for a big company and use clojure, maybe I should market my clojure use...naah |
| 20:35 | dmiles_afk | i am working on a secondlife bot that is programable in clojure |
| 20:36 | blbrown_win | nice |
| 20:37 | blbrown_win | http://code.google.com/p/lighttexteditor/ I have written and rewritten this for the last 6-7 months |
| 20:37 | hiredman | dmiles_afk: oooo |
| 20:38 | blbrown_win | I am starting to use George Bush terminology. But at least I am drinking right now |
| 20:38 | dmiles_afk | hiredman: http://code.google.com/p/opensim4opencog/source/browse/trunk/bin/cogbot.lisp (we naming them lisp becasue it it's Cojure's anccestor DotLisp) |
| 20:38 | dmiles_afk | *Clojure's |
| 20:39 | blbrown_win | dmiles_afk, do you like second life |
| 20:39 | d2dchat | arg this dependency hell is frustrating |
| 20:39 | hiredman | clojurebot should totally hang out is second life |
| 20:39 | hiredman | in |
| 20:40 | blbrown_win | d2dchat, no offense, but it isn't that hard. I have found the clojure namespace system to be pretty good |
| 20:40 | dmiles_afk | nope, but SL provides a place to runs bots with real people |
| 20:40 | d2dchat | blbrown_win: IT IS easy.. if it worked... |
| 20:40 | hiredman | d2dchat: are you still getting that str-utils exception? |
| 20:40 | d2dchat | hiredman: yes |
| 20:41 | hiredman | I would pull the latest clj-html from github and try it |
| 20:41 | d2dchat | hiredman: and I copied over the clj-html jars I generated from the git repo |
| 20:41 | hiredman | ~google clj-html |
| 20:41 | clojurebot | First, out of 58700 results is: |
| 20:41 | clojurebot | mmcgrana's clj-html at master - GitHub |
| 20:41 | clojurebot | http://github.com/mmcgrana/clj-html/tree/master |
| 20:41 | d2dchat | hiredman: tried that already |
| 20:41 | hiredman | hmmm |
| 20:42 | dmiles_afk | LTEC looks pretty good |
| 20:42 | blbrown_win | dmiles_afk, ahh?? C# ...just kidding |
| 20:42 | pjstadig | ,(type (into-array [1 2 3])) |
| 20:42 | clojurebot | [Ljava.lang.Integer; |
| 20:42 | dmiles_afk | blbrown_win: clojure runes very well on IKVM recently |
| 20:43 | dmiles_afk | runs |
| 20:43 | hiredman | clojurebot: would you like to hang out in second life? |
| 20:43 | clojurebot | Pardon? |
| 20:43 | pjstadig | how would i find the type of an array's elements? |
| 20:43 | hiredman | class? |
| 20:43 | hiredman | or type I guess |
| 20:43 | pjstadig | ,(class (into-array [1 2 3])) |
| 20:43 | clojurebot | [Ljava.lang.Integer; |
| 20:43 | pjstadig | no i want it to return Integer |
| 20:43 | hiredman | on the first element |
| 20:44 | dmiles_afk | IKVM = .NET JVM.. you get to write implmentations in C#,J#,Java,VB,etc |
| 20:44 | pjstadig | oh |
| 20:44 | pjstadig | hmm |
| 20:44 | hiredman | ~javadoc java.utils.Array |
| 20:44 | d2dchat | blbrown_win: it's not as if dependencies in clojure or any language aren't a problem.. I'm not only relying on my stuff to work.. but other's :-P |
| 20:44 | hiredman | bah |
| 20:44 | hiredman | ~javadoc java.util.Array |
| 20:44 | blbrown_win | dmiles_afk, would be another interesting project to port clojure to llm |
| 20:45 | blbrown_win | llvm |
| 20:45 | hiredman | where is the array utility stuff? |
| 20:45 | durka42 | ~javadoc java.util.Arrays |
| 20:46 | blbrown_win | d2dchat, I was just kidding, I wasn't really look at the problem, all I know I have always used ns, :use, :import without any problems for multiple files, projects and dependencies |
| 20:47 | hiredman | ~google clojure ring |
| 20:47 | clojurebot | http://lmgtfy.com/?q=clojure+ring |
| 20:47 | hiredman | Thanks |
| 20:48 | hiredman | ~google clojure ring |
| 20:48 | clojurebot | First, out of 3110 results is: |
| 20:48 | clojurebot | Ring: A Web application library for Clojure. - Clojure | Google Groups |
| 20:48 | clojurebot | http://groups.google.com/group/clojure/browse_thread/thread/bbc9fd453667d953/0214afdf2da814cd?show_docid=0214afdf2da814cd |
| 20:54 | hiredman | fresh ring checkout works fine here |
| 20:55 | hiredman | java -cp $PWD/jars/\* clojure.main src/ring/examples/wrapping.clj |
| 21:04 | d2dchat | blbrown_win: it does work.. the problem are the jars I'm pulling now :( |
| 21:04 | something | (setq swank-clojure-extra-classpaths (list "path/to/my/clojure-contrib.jar") is what I need to do to setup clojure contrib in my.emacs? |
| 21:05 | something | because it's not working for me. |
| 21:05 | hiredman | ~jar directory |
| 21:05 | clojurebot | with java6(jdk1.6) CLASSPATH can contain a "*" so /jar/dir/* will suck in all the jars in the /jar/dir directory, this also works with swank-clojure-extra-classpaths in emacs, alternatively you can use this shell snippet: find .jars/ -type f -name \*.jar -print0|xargs -0|sed "s/ /:/g" |
| 21:05 | d2dchat | I think.. but all of the jars *were* working when I used -Djava.ext.lib= |
| 21:05 | d2dchat | which is weird.. |
| 21:06 | durka42 | yes, extdirs and classpath act differently |
| 21:06 | d2dchat | durka42: bah! Now I have to go |
| 21:07 | durka42 | such is life |
| 21:07 | durka42 | ~life |
| 21:07 | clojurebot | meaning of life is to become one with Lisp |
| 21:07 | d2dchat | durka42: pastie before I leave: |
| 21:07 | d2dchat | http://pastie.org/444046 |
| 21:07 | durka42 | old clojure version |
| 21:07 | d2dchat | durka42: bah.. really? |
| 21:07 | d2dchat | lol |
| 21:07 | durka42 | do you have the one from before lazy was introduced? |
| 21:08 | durka42 | old clojure and latest contrib generally do not play nice |
| 21:08 | d2dchat | durka42: I'm using the version that was included with ring |
| 21:08 | durka42 | hmm, could be the issue |
| 21:09 | hiredman | ring works fine with the jars it comes with here |
| 21:09 | d2dchat | hiredman: it works fine when I use ext.lib |
| 21:09 | d2dchat | ext.dir |
| 21:09 | d2dchat | or whatever |
| 21:09 | d2dchat | never remember what it was |
| 21:10 | hiredman | then use that |
| 21:10 | d2dchat | lol |
| 22:01 | aCogCorroded | Hey, guys. I am trying to install clojure. I am not much of a java programmer, and not much of a programmer at all at the moment. So this is probably a simple mistake on my part. So I put the jline jar file in my clojure directory, then run "java -cp jline-0.9.94.jar:clojure.jar jline.ConsoleRunner clojure.lang.Repl" and get "Could not find the main class: jline.ConsoleRunner." What am I doing wrong? |
| 22:03 | hiredman | my guess is an extra "." after jline.ConsoleRunner |
| 22:03 | cconstantine | aCogCorroded: not sure |
| 22:04 | hiredman | I recommend rlwrap instead of jline |
| 22:04 | aCogCorroded | Okay, I will look up rlwrap. |
| 22:04 | hiredman | jline has some mangling issues with unicode |
| 22:05 | hiredman | aCogCorroded: does clojure.lang.Repl work without jline? |
| 22:06 | aCogCorroded | hiredman, I'll check |
| 22:06 | aCogCorroded | it works with "java -cp clojure.jar clojure.lang.Repl" |
| 22:07 | aCogCorroded | I am actually slowly moving over to vim from IDEs, could I just start with that? |
| 22:08 | hiredman | it works, but you don't get history, and up arrow and stuff |
| 22:09 | aCogCorroded | Ah. I will continue to explore. Thanks for the help. |
| 22:11 | hiredman | crazy |
| 22:12 | aCogCorroded | ? |
| 22:14 | hiredman | I built a desk today, and just borrowed a level, and it is almost dead level |
| 22:14 | dreish | aCogCorroded: He was not calling you crazy. |
| 22:16 | aCogCorroded | Wait. I'm not sure I understand exactly what these programs do. A readline wrapper. I am a windows user. I don't know if that makes a difference, but the concept is new to me. |
| 22:17 | aCogCorroded | dreish, ah. Now I get it. And hiredman, that is crazy. |
| 22:18 | dreish | aCogCorroded: If you're on Windows, and don't want to spend hours ramming your head into one wall after another, my recommendation (without having tried it since I'm not on Windows) is Clojure Box: http://clojure.bighugh.com/ |
| 22:20 | aCogCorroded | Thanks. I will have a look. |
| 22:21 | aCogCorroded | That looks perfect. Thanks. |
| 22:42 | aCogCorroded | Wow, Clojure Box looks pretty awesome, though I know nothing of emacs, but using it for clojure seems simple enough. |
| 23:03 | gnuvince_ | I just wrote a super simple recursive dirtree with indentation in C, Clojure, Python and Haskell. The Clojure version is the shortest one. Funnily enough, I had more difficulties with the Haskell one than the the C one; all that monadic IO is nice in theory, but is really a pain in the ass otherwise |
| 23:05 | dakrone_hb | gnuvince_, how's the performance of the 4? |
| 23:07 | gnuvince_ | Pretty much the same, Clojure takes the most time to start. |
| 23:07 | gnuvince_ | It's REALLY simple |
| 23:07 | gnuvince_ | dirtree /path/to/dir |
| 23:07 | gnuvince_ | and it outputs the directory structure |
| 23:07 | dakrone_hb | as a hash-map? array? |
| 23:08 | gnuvince_ | array |
| 23:08 | gnuvince_ | (.listFiles path) |
| 23:08 | gnuvince_ | Then a doseq over that |
| 23:08 | gnuvince_ | check if .isDirectory |
| 23:08 | gnuvince_ | really, really simple |
| 23:08 | gnuvince_ | Anyway, just thought it was nice that Clojure was even a little more concise than Python |
| 23:09 | dakrone_hb | neat |
| 23:09 | gnuvince_ | And that Haskell wasn't so nice, unfortunately. |
| 23:09 | ice_four | Is there an equivalent to return in clojure? |
| 23:20 | cp2 | gnuvince_: can you paste the source? i would like to see how you implemented it |
| 23:22 | lisppaste8 | gnuvince pasted "dirtree" at http://paste.lisp.org/display/78433 |