2009-06-22
| 01:10 | arohner | danlarkin: ping |
| 02:44 | vika23 | Is there a function to convert string to numbers in clojure ? |
| 02:45 | grrrt | vika23: you could do (Integer. "123") |
| 02:45 | grrrt | (java equivalent of new Integer("123") ) |
| 02:47 | vika23 | grrrt: Thanks a lot :) |
| 02:47 | hoeck | vika23: or (Integer/valueOf "123") |
| 02:48 | hiredman | ,(Integer/parseInt "123") |
| 02:48 | clojurebot | 123 |
| 03:08 | frodef | how do I write a macro that expands to something like (let [foo bar] ~@body (zot foo)) ? I get "Can't let qualified name foo" error.. |
| 03:09 | hiredman | yeah |
| 03:09 | hiredman | clojure's macro system doesn't like non gensymed names because they make for unhygenic macros |
| 03:09 | hiredman | so you need to replace foo with foo# |
| 03:10 | hiredman | inside a syntax quote (`) foo# expands into a gensymed symbol |
| 03:10 | hiredman | ,`foo# |
| 03:10 | clojurebot | foo__3466__auto__ |
| 03:10 | hiredman | ,`foo# |
| 03:10 | clojurebot | foo__3470__auto__ |
| 03:10 | frodef | but the same one each time? |
| 03:10 | frodef | ,`(foo# foo#) |
| 03:10 | clojurebot | (foo__3474__auto__ foo__3474__auto__) |
| 03:10 | frodef | aparently :) |
| 03:11 | hiredman | frodef: in the same syntax quote it will be the same |
| 03:11 | frodef | ok, thanks. |
| 03:11 | hiredman | `(foo# ~`foo#) |
| 03:11 | hiredman | ,`(foo# ~`foo#) |
| 03:11 | clojurebot | (foo__3479__auto__ foo__3478__auto__) |
| 03:37 | grrrt | hm. I'm trying to create a function that generates a string consisting of a character c repeated n times. |
| 03:37 | grrrt | I have ,(take 10 (cycle ["-"])) |
| 03:37 | grrrt | but I'm not sure how to make a string from that |
| 03:38 | hiredman | apply str |
| 03:38 | grrrt | ah of course! thanks! |
| 03:38 | hiredman | you might use repeat instead of cycle |
| 03:38 | hiredman | ,(doc repeat) |
| 03:38 | clojurebot | "([x] [n x]); Returns a lazy (infinite!, or length n if supplied) sequence of xs." |
| 03:38 | grrrt | yes much better |
| 03:39 | hiredman | ,(take 10 (repeat \c)) |
| 03:39 | clojurebot | (\c \c \c \c \c \c \c \c \c \c) |
| 03:39 | grrrt | I thought cycle was a bit strange in this case. cheers |
| 03:40 | grrrt | ,(apply str (repeat 10 "-")) |
| 03:40 | clojurebot | "----------" |
| 07:18 | Lau_of_DK | Is there a demo up somewhere of a small compojure app which uses the new session middle-ware stuff? |
| 07:37 | emacsen | Chouser, you around? |
| 07:39 | opqdonut | can for iterate over two lists at the same rate? |
| 07:39 | opqdonut | like cl loop does |
| 07:40 | emacsen | usually if you're iterating you're doing something wrong |
| 07:40 | emacsen | (not always but so many times) |
| 07:40 | Lau_of_DK | emacsen: by what logic ? |
| 07:40 | emacsen | Lau_of_DK, you can usually accomplish the same thing with a filter of one or another sort |
| 07:40 | emacsen | operating on a data structure rather than iterating through results |
| 07:41 | Lau_of_DK | (filter even? (iterate inc 1)) ? :) |
| 07:41 | Lau_of_DK | Sometimes it exactly what you want |
| 07:41 | emacsen | and I'm late for work so I'm gonna shower and go |
| 07:41 | Lau_of_DK | And it beats recursion |
| 07:41 | emacsen | I said usually :) |
| 07:41 | Lau_of_DK | looping is not really iterating though, and if we make that distinction I agree, usually when I loop its for some sideeffect :( |
| 07:44 | opqdonut | emacsen: iterating? wrong? |
| 07:45 | opqdonut | i'd just like to be able to write stuff like (map f data (range 1)) using a for |
| 07:46 | opqdonut | err, by (range 1) i really meant (iterate inc 0) |
| 08:04 | Lau_of_DK | Couldnt you just use apply ? |
| 08:05 | emacsen | Lau_of_DK, that was kinda my point. Oftentimes people want to use iterate but they could easily use a different style, as you said, he could probably use apply |
| 08:05 | emacsen | hey pjb3 |
| 08:06 | pjb3 | emacsen: hey |
| 08:06 | Lau_of_DK | emacs, I kinda got your point, eventually :) |
| 08:06 | emacsen | So, since Chouser isn't here, anyone familiar with the Java "exec", as used in the shell-out contrib? |
| 08:06 | emacsen | I just want to pass the program some arguments, and that causes it to fail, eg "find /home/foo" |
| 08:06 | emacsen | it looks for a program named "find /home/foo" |
| 08:07 | Lau_of_DK | emacsen, check out Gitdoc on Github, its not updated, but I use that functionality |
| 08:07 | emacsen | Gitdoc? |
| 08:07 | Lau_of_DK | http://github.com/Lau-of-DK/gitdoc/tree/master |
| 08:08 | emacsen | heh, love the last commit "removed shell-out" :) |
| 08:08 | Lau_of_DK | hehe :) |
| 08:09 | Lau_of_DK | it should be in engine.clj |
| 08:09 | emacsen | which file.. thank you :) |
| 08:10 | emacsen | the Runtime/getRunTime part with your exec? |
| 08:10 | Lau_of_DK | http://github.com/Lau-of-DK/gitdoc/blob/26b219792b14c3535850047d3e2c2c7072e56855/src/dk/bestinclass/gitdoc/engine.clj#L137 |
| 08:10 | Lau_of_DK | Yea, thats what youre looking for I hope |
| 08:11 | emacsen | possibly. I'm so java ignorant I have to look up each of those :) |
| 08:11 | Lau_of_DK | I dont use a buffer at all though, like I said its outdated, but you'll get the picture, compare that to shell_out and you can make the perfect func |
| 08:11 | Lau_of_DK | I gotta jet, l8r |
| 08:11 | emacsen | okay thanks |
| 08:15 | frodef | is sort and sort-by a stable sort? |
| 08:15 | maacl | Newbie question: Why does the following blow the heap: (map (fn [s](apply str s)) (selections (map char (range 97 123)) 4)) |
| 08:18 | maacl | selections is the selections function from clojure.contrib.combinatorics btw |
| 08:24 | Chouser | maacl: works fine here. |
| 08:25 | Chouser | It's going to print a lot if you run it at the repl, but wrapping either first or last around it works fine. |
| 08:27 | maacl | Chouser I run out of Java heap space if I run the whole thing ie java.lang.OutOfMemoryError: Java heap space |
| 08:32 | maacl | Chouser: Also if I try to do a "last" |
| 08:32 | Chouser | I don't think there's anything inherently wrong with your expression. It produces 456976 strings which isn't nothing. |
| 08:33 | jao | hi. sorry if this a FAQ, but what's the way of writing bindings to a C library in clojure? (asked by someone who knows very little java) |
| 08:33 | Chouser | but with 'last' or 'first' it should be throwing them away as fast as they're created. |
| 08:33 | Chouser | jao: If you're not overly concerned with speed, I'd recomment JNA: http://github.com/Chouser/clojure-jna |
| 08:34 | jao | Chouser: aha, thanks! and if i were concerned? ;) |
| 08:34 | Chouser | jao: otherwise you'll have to use JNI, the Java Native Interface. |
| 08:34 | maacl | Chouser: I thought so, but "last" just hangs and just running it runs out of heap space |
| 08:34 | eevar2 | jao: http://java.sun.com/docs/books/jni/ |
| 08:35 | jao | Chouser, eevar2: i see, thanks again |
| 08:36 | Chouser | maacl: very odd. works fine here. What versions of Java and Clojure are you using? |
| 08:36 | eevar2 | jao: if you're concenred with speed, you're probably better off finding a Java library which does what you want, tho |
| 08:36 | maacl | Chouser: java 1.6.0_13 |
| 08:38 | maacl | Chouser: clojure 1.1 alpha |
| 08:39 | maacl | Chouser: oh, "last" actually completes - just took 4-5 mins |
| 08:41 | Chouser | maacl: 3 seconds here, on the same jvm and recent clojure |
| 08:43 | maacl | Chouser: I will update clojure and try again |
| 08:43 | maacl | Chouser: The CPU runs beserk, and no extra memory is used |
| 08:44 | Chouser | that sounds right. perhaps that's just how long it takes to compute everything you're asking for on that CPU? |
| 08:46 | maacl | Chouser: A Athlon 64 3400+? now brand new, but still? |
| 08:46 | Chouser | hmph. that's probably faster than what I'm using. weird. |
| 08:48 | rhickey | what's the code? |
| 08:48 | maacl | rhickey: (map (fn [s](apply str s)) (selections (map char (range 97 123)) 4)) |
| 08:49 | rhickey | selections? |
| 08:50 | Chouser | (use '[clojure.contrib.combinatorics :only [selections]]) |
| 08:50 | maacl | rhickey: from clojure.contrib.combinatorics |
| 08:50 | durka42 | (doc selections) |
| 08:50 | clojurebot | "clojure.contrib.combinatorics/selections;[[items n]]; All the ways of taking n (possibly the same) elements from the sequence of items" |
| 08:51 | rhickey | maacl: how much memory are you giving the JVM? |
| 08:52 | maacl | rhickey: I haven't set any options? should I ? |
| 08:53 | maacl | rhickey Chouser: Just tried on my MacBook too - same thing |
| 08:54 | Chouser | maacl: are you loading anything else first? using an IDE? |
| 08:54 | rhickey | maacl: usually, yes, the default heap is puny use: -Xmx512m where 512 is however many mbs you want to give it |
| 08:54 | Chouser | huh. I never set a heap option. |
| 08:55 | rhickey | didn't contrib's build used to have a nice message when trying to compile saying it wasn't really without a path to clojure.jar? |
| 08:55 | Chouser | yeah |
| 08:55 | maacl | rhickey Chouser: I user emacs/slime |
| 08:55 | achim | i can reproduce with SLIME, but not in the terminal,with otherwise identical (= default) settings |
| 08:55 | Chouser | oooh, we have a culprit |
| 08:55 | rhickey | what happened to it? |
| 08:56 | maacl | Chouser: sounds like it |
| 08:56 | clojurebot | Who?? |
| 08:57 | Chouser | rhickey: with the latest contrib, I get a WARNING if I don't suppot -Dclojure.jar=... on the ant command-line |
| 08:58 | rhickey | .9 secs on my machine |
| 08:59 | maacl | rhickey: from slime? |
| 08:59 | rhickey | (calling last on that map return) |
| 09:03 | rhickey | my bad, old contrib |
| 09:06 | maacl | rhickey: did you get .9 from slime? |
| 09:07 | maacl | ah |
| 09:08 | achim | i'm getting a strage exception when trying to build clojure & contrib using ant ... has anybody seen something like this before? |
| 09:09 | lisppaste8 | achim pasted "exception when building via ant" at http://paste.lisp.org/display/82282 |
| 09:09 | Chouser | achim: yeah |
| 09:10 | Chouser | achim: http://www.assembla.com/spaces/clojure/tickets/124 |
| 09:10 | Chouser | compiling with Java 5, I assume? |
| 09:13 | achim | Chouser: don't think so, unless ant overrides the system default. java -version is "1.6.0_13" |
| 09:14 | rhickey | when tests burn in broken behavior: |
| 09:14 | rhickey | [java] FAIL in (test-range) (sequences.clj:840) |
| 09:14 | rhickey | [java] expected: (= (range 2.5) (quote (0 1))) |
| 09:14 | rhickey | [java] actual: (not (= (0 1 2) (0 1))) |
| 09:14 | rhickey | [java] |
| 09:14 | rhickey | [java] FAIL in (test-range) (sequences.clj:840) |
| 09:14 | rhickey | [java] expected: (= (range 7/3) (quote (0 1))) |
| 09:14 | rhickey | [java] actual: (not (= (0 1 2) (0 1))) |
| 09:14 | clojurebot | ☕ |
| 09:14 | Chouser | oh, I guess Steve reported Java 6 failing on Leopard as well. |
| 09:15 | maacl | Chouser: confirm I got it to work from the REPL. Who should I report the error to? |
| 09:16 | Chouser | I guess that agent shutdown patch should be backed out. It was only meant to solve an annoyance -- current behavior sure seems more annoying for the poeple it affects. |
| 09:16 | Chouser | maacl: for a slime bug? I don't really know, sorry. |
| 09:17 | maacl | Chouser: ok, also hard to know if it is a slime or swank-clojure bug really |
| 09:19 | achim | Chouser: ah, thanks for the pointer! |
| 09:42 | frodef | what does this mean? java.lang.NoClassDefFoundError: clojure/lang/IteratorSeq |
| 09:42 | frodef | Do I need to import some iterator-seq library? |
| 09:46 | frodef | It seems to happen when I try to access an ArrayList I get from java. |
| 09:47 | frodef | ,(seq (new java.util.ArrayList)) |
| 09:47 | clojurebot | nil |
| 09:47 | frodef | I get that error..? |
| 09:57 | Chousuke | frodef: classpath problems probably :P |
| 09:58 | frodef | yes, I had messed up my jars, it seems. fixed it. |
| 09:58 | frodef | thanks. |
| 10:11 | achim | re: http://www.assembla.com/spaces/clojure/tickets/124 - if i have ant fork the JVM for compilation, it seems to work fine |
| 10:13 | achim | granting a modifyThead permission as outlined here doesn't seem to work:http://ant.apache.org/manual/CoreTypes/permissions.html - all other permissions seem to get revoked when doing that |
| 10:13 | achim | does anybody have a deeper understanding of the ant/java permissions scheme? |
| 10:13 | Chouser | achim: thanks a lot for looking at that. I spent 2 minutes googling and gave up. |
| 10:29 | Chouser | achim: you could attach a patch to that ticket |
| 10:29 | achim | Chouser: seems to work for java 1.5/osx, 1.6/osx and 1.6/ubuntu - i'll see if i get git to make me a patch |
| 10:30 | achim | it's a patch to a patch - how to go about this? should my patch include the other change? is there a way to do this and preserve authorship info? |
| 10:30 | Chouser | achim: there are instructions at http://clojure.org/patches |
| 10:31 | Chouser | since the other patch is already committed, I think you should go ahead and patch again master |
| 10:32 | achim | Chouser: ok |
| 10:56 | dhaza | how does clojurebot prevent people from evaling evil things? |
| 10:57 | stuartsierra | ,(eval '(System/exit 0)) |
| 10:57 | clojurebot | DENIED |
| 10:57 | Chouser | dhaza: a combination of a java sandbox and special form blacklisting |
| 10:57 | Chouser | that was the blacklist |
| 10:58 | Chouser | ,(System/exit 0) |
| 10:58 | clojurebot | java.security.AccessControlException: access denied (java.lang.RuntimePermission exitVM.0) |
| 10:58 | Chouser | there's the sandbox |
| 10:58 | Jonathan-Smith | (eval '(+ 2 3)) |
| 10:59 | Jonathan-Smith | ,(eval '(+ 2 3)) |
| 10:59 | clojurebot | DENIED |
| 11:00 | Jonathan-Smith | eval is denied |
| 11:00 | Chouser | indee |
| 11:00 | Chouser | indeed |
| 11:00 | achim | clojure-contrib has the same compilation issue. is it okay to file contrib tickets? |
| 11:03 | Chouser | achim: I think so, but I guess file it in the contrib project. |
| 11:07 | danlarkin | arohner: sorry we keep missing eachother. Short answer (if you haven't found it already) is that keys in json objects must be strings |
| 11:08 | achim | Chouser: of course. i wasn't sure because of missing GC tickets |
| 11:08 | Chouser | achim: oh, I see. yeah, go ahead. |
| 11:09 | Chouser | I'm not sure if anyone's going to bother bringing over all the closed tickets or not. |
| 11:10 | arohner | danlarkin: and that's a restriction imposed by JSON? |
| 11:11 | Chousuke | Chouser: We did that with Clojure, but I suppose it's not really needed. |
| 11:11 | Chouser | Chousuke: yes, and I'm sure it's appreciated. Clojure's history is a bit more critical than contrib's, I think. |
| 11:11 | Chouser | And contrib's tickets may be brought over yet. |
| 11:12 | danlarkin | arohner: correct, to be valid json the keys must be strings. Of course, nothing stopping you from producing invalid json, but yeah that's why clojure-json prints them as strings |
| 11:12 | Chouser | But having the closed tickets a bit out of order hardly seems critical. |
| 11:12 | Chousuke | yeah. |
| 11:13 | arohner | danlarkin: is that json different from a map literal in a javascript call? |
| 11:14 | arohner | or do the JS libraries violate the spec? |
| 11:14 | danlarkin | arohner: an object literal in javascript has non-string keys |
| 11:14 | arohner | sigh. ok. I thought they were the same thing |
| 11:15 | Chouser | danlarkin: really? |
| 11:15 | danlarkin | Chouser: yep :-/ it's dumb |
| 11:15 | Chouser | what kind of object literal? |
| 11:15 | dhaza | many json libraries dont implement json correctly |
| 11:15 | dhaza | which is funny, because it has one of the sparsest syntax i've seen |
| 11:15 | danlarkin | Chouser: {foo:1, bar:2} |
| 11:16 | dhaza | and the pretty graphs on json.org make it even easier |
| 11:16 | Chouser | ({foo:1, bar:2})["foo"] returns 1 for me in firefox |
| 11:16 | dhaza | Chouser, keep in mind that many implementations will try to accept malformed json if it can |
| 11:17 | Chousuke | Chouser: I think JS will allow you to access attributes using strings. |
| 11:17 | Chousuke | it's quite dynamic :P |
| 11:17 | danlarkin | Chouser: oh.. yes... attribute access uses strings, defining the literal object, though, uses non-strings |
| 11:17 | arohner | danlarkin: thanks for your help |
| 11:18 | dhaza | Chousuke, yes - obj["foo"] <=> obj.foo |
| 11:18 | Chouser | but if I can get and set object literals using string keys, what's the difference? |
| 11:18 | dhaza | in js |
| 11:18 | dhaza | http://stackoverflow.com/questions/61088/hidden-features-of-javascript |
| 11:19 | danlarkin | Chouser: just that when you're defining the object literal in JS, you can't use string keys, you have to use symbols... {foo:1} instead of {"foo":1} like most languages |
| 11:20 | Chouser | oh, as in {"foo":1} is legal json but not legal js? |
| 11:21 | danlarkin | Chouser: correct... and the opposite is also true: {foo:1} is legal js but not json |
| 11:22 | Chouser | beautiful. |
| 11:23 | Chouser | so all this time I thought I was using json so I could eval in the brower, I was only doing json-ish. |
| 11:24 | Chousuke | hm |
| 11:24 | danlarkin | eval() is a really bad javascript json parser, which is ironic of course... most javascript libraries like jquery et al. package their own json parser |
| 11:25 | Chousuke | firefox doesn't complain about {"foo":1}.foo |
| 11:25 | Chousuke | it gives 1 |
| 11:26 | Chousuke | but I thought the whole point of json is that it's valid javascript. |
| 11:26 | Chouser | danlarkin: in what way is it bad? I mean, I wouldn't eval js from untrusted sources, but other than that it runs very fast and has worked fine for me. |
| 11:26 | danlarkin | Chousuke: yeah it's just trying to do the right thing IMO, other engines are less forgiving |
| 11:27 | dhaza | Chousuke, it would be nice, but it would uglify things |
| 11:27 | dhaza | for example |
| 11:27 | dhaza | is {false:true} a bool or a string key? |
| 11:27 | dhaza | well, i guess you cant have bool keys |
| 11:27 | dhaza | :( |
| 11:28 | dhaza | i meant a bool or string value |
| 11:28 | danlarkin | Chouser: yeah, eval just has security implications... it's true that it's very fast |
| 11:28 | dhaza | danlarkin, i don't think that should be a concern with modern javascript engines coming to the forefront |
| 11:28 | dhaza | v8/squirrelfish/etc |
| 11:29 | dhaza | they compile js down to native code |
| 11:30 | dhaza | ps: why are we talking about json? |
| 11:32 | Chouser | string keys appear to be allowed for object initializers, according to the ecmascript spec |
| 11:32 | Chouser | http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf page 41 and 42 |
| 11:33 | Chouser | propertyname can be an Identifier, StringLiteral, or NumericLiteral |
| 11:33 | Chouser | identifiers and numbers are converted to strings for use as the property name |
| 11:35 | danlarkin | Hmmmmm |
| 11:42 | danlarkin | Chouser: welp, looks like you're right! |
| 11:42 | Chouser | danlarkin: don't worry, I won't let it go to my head |
| 13:24 | tsdh | Hi. Are hyphens in namespaces somehow forbidden? I have de.tsdh.utils.tgraph-inspector but the ant job fails because it cannot find de/tsdh/utils/tgraph_inspector__init.class or de/tsdh/utils/tgraph_inspector.clj. |
| 13:25 | kotarak | tsdh: - translates to _ in the filename |
| 13:25 | Chouser | (and the class name) |
| 13:25 | tsdh | So the file should be tgraph_inspector.clj, right? |
| 13:25 | kotarak | yup |
| 13:26 | tsdh | kotarak: Works! Thanks a lot. |
| 13:26 | kotarak | np |
| 13:56 | kotarak | Offtopic, but.. : why do I get different git checksums for commits I pulled via githubs ForkQueue? |
| 13:57 | dysinger | ask on #github or #git ? |
| 13:58 | kotarak | k, just thought, there might be a simple answer one of the git fans could give. |
| 14:04 | dysinger | kotarak I only notice different checksums when I cherry pick |
| 14:05 | dysinger | I haven't used github fork queue but about 3 times so not sure what's going on there - it should be just a merge |
| 14:07 | danlarkin | github's fork queue does a cherry pick |
| 14:07 | dysinger | there you go |
| 14:07 | kotarak | -.- That means, I get double commits, when I pull now from the master repo? |
| 14:17 | dysinger | Even if you get double commits the second commit will not add anything strange |
| 14:20 | danlarkin | right, they are idempotent! |
| 14:20 | danlarkin | right? I think |
| 14:24 | kotarak | I'll try and see what happens... |
| 14:33 | dhaza | the diff should fail |
| 14:33 | dhaza | you can just ignore it |
| 15:06 | eliantor | hi |
| 15:07 | dhaza | howdy |
| 15:08 | eliantor | how can i change a global variable defined in another namespace? |
| 15:08 | eliantor | for example *print-pretty* or *load-tests* from clojure contrib? |
| 15:09 | technomancy | ~binding |
| 15:09 | clojurebot | No entiendo |
| 15:09 | technomancy | eliantor: use binding |
| 15:09 | kotarak | (doc binding) |
| 15:09 | clojurebot | "([bindings & body]); binding => var-symbol init-expr Creates new bindings for the (already-existing) vars, with the supplied initial values, executes the exprs in an implicit do, then re-establishes the bindings that existed before." |
| 15:09 | eliantor | so i've to wrap everithing in the binding form? |
| 15:10 | kotarak | yes |
| 15:10 | eliantor | ok thanks |
| 15:10 | kotarak | beware of thread boundaries |
| 15:10 | kotarak | and lazy seqs (read map and friends) |
| 15:11 | eliantor | i knew of binding but i thought there was another way |
| 15:11 | technomancy | you can use set! and with-ns, but that's shaky |
| 15:12 | ataggart | if you def a function from inside a binding, will invokgin that function from outside the binding use the original value or the bound value? |
| 15:12 | ataggart | I guess I should just try it |
| 15:12 | kotarak | ataggart: I think, the value in effect during the call. |
| 15:13 | ataggart | bindings being threadlocal, that would be my assumption as well |
| 15:13 | weissj | sorry this has probably been asked a million times, but i have searched and can't find anything: where is the equivalent of caar or cddr in clojure? there's no ffirst or rrest. |
| 15:14 | kotarak | (doc nnext) |
| 15:14 | clojurebot | "([x]); Same as (next (next x))" |
| 15:14 | Chousuke | weissj: ffirst is there :/ |
| 15:15 | ataggart | so is fnext |
| 15:15 | kotarak | (doc ffirst) |
| 15:15 | clojurebot | "([x]); Same as (first (first x))" |
| 15:15 | Hun | somehow i like c[ad]{1,5}r better... |
| 15:15 | weissj | ok, sorry i was looking for rrest - so, next and rest are the same? |
| 15:15 | Chousuke | not quite. |
| 15:16 | weissj | Hun: me too. car and cdr are meaningless but you can make better complex forms out of them :) |
| 15:16 | ataggart | also, it's not arbitrary like c[a|d]r |
| 15:16 | ataggart | in terms of how deep you go |
| 15:16 | Chousuke | next is equivalent to (seq (rest ..)) |
| 15:17 | Chousuke | so it returns nil if rest returns an empty seq |
| 15:17 | Hun | weissj: and they're faster than first and rest. you know, they are hardware ;) |
| 15:18 | weissj | so, nnext is not the same as rrest. there is no rrest. so it's just missing then? |
| 15:18 | Chousuke | I'm not much of a fan of combining car and cdr though. |
| 15:18 | Chousuke | I find them difficult to read :/ |
| 15:18 | ataggart | Hun: when does one typically use the deep c[ad]r stuff? |
| 15:18 | weissj | Hun: the hardware is so old I'm not so sure :) |
| 15:19 | Chousuke | if you're nesting a lot then you should have a more meaningful function to extract the parts you want. even if it's just an alias for caddr or something :P |
| 15:20 | Chouser | weissj: right, rest is used when you're explicitly avoiding realizing the next step of the seq. Thus rrest would almost never be used. |
| 15:20 | Hun | ataggart: i haven't used anything deeper than 3 - in this case it was an optimization for a tree i knew to be at max 3 levels deep |
| 15:21 | weissj | Chouser: i have a data type that is a name, desc, and then a seq of nested data. isn't rrest exactly what i want to get the list of nested data? |
| 15:22 | Chouser | nnext |
| 15:22 | vika23 | I am trying java-gnome with clojure . There is a Window class and it has a nested interface DeleteEvent , i want to implement it. How do i use with proxy, (proxy [???] ...). |
| 15:22 | duncanm | vika23: did you check out the API docs online? |
| 15:22 | Chousuke | Window$DeleteEvent |
| 15:22 | kotarak | weissj: {:name .. :desc ... :data seq-here} is probably what you want instead of nnext... |
| 15:23 | ataggart | then (:data mymap) |
| 15:24 | vika23 | Chousuke: thanks |
| 15:25 | eliantor | i'm following the example of using binding on clojure.org, but it doesn't work |
| 15:25 | eliantor | it always use the bindings estabilished by def |
| 15:26 | hiredman | eliantor: pastebin |
| 15:26 | eliantor | http://clojure.org/vars what's wrong? |
| 15:26 | hiredman | lisppaste8: url? |
| 15:26 | lisppaste8 | To use the lisppaste bot, visit http://paste.lisp.org/new/clojure and enter your paste. |
| 15:28 | hiredman | eliantor: are you doing exactly what it shows there? |
| 15:29 | lisppaste8 | eliantor pasted "untitled" at http://paste.lisp.org/display/82294 |
| 15:30 | eliantor | hiredman: yes |
| 15:30 | hiredman | eliantor: are you using clojure 1.0? |
| 15:30 | eliantor | hiredman: 1.1, is there a bug? |
| 15:31 | hiredman | eliantor: nope |
| 15:32 | hiredman | dunno what to tell you, works perfectly with my pre-1.0 clojure and my 1.1-alpha clojure |
| 15:32 | eliantor | ... |
| 15:32 | hiredman | eliantor: restart your repl and try again |
| 15:34 | eliantor | hiredman: always the same behaviour, i'll try to update and recompile |
| 15:36 | ataggart | eliantor: are you using the 1.0.0 jar? |
| 15:37 | weissj | what's the equivalent in clojure to '# |
| 15:37 | weissj | to pass a function by name without evaluating it |
| 15:38 | kotarak | ?? You mean the Var? |
| 15:38 | kotarak | #'foo |
| 15:38 | eliantor | i've updated clojure and the problem is solved, thanks |
| 15:38 | Chouser | weissj: you can just refer to a function by name |
| 15:39 | Chouser | ,map |
| 15:39 | clojurebot | #<core$map__4435 clojure.core$map__4435@6f2a75> |
| 15:39 | hoeck | weissj: clojure is a lisp-1, so vars have no function and value slots |
| 15:42 | weissj | in the REPL, if my code throws an exception how can i tell where the exception was thrown from? the error message just has (repl-1:110) as the line number |
| 15:43 | weissj | the error is definitely NOT on that line: (all-subtasks-complete? x) |
| 15:43 | Chouser | (.printStackTrace *e) |
| 15:49 | weissj | Chouser: perfect thanks |
| 15:50 | weissj | ok, and if i want the exception that i throw to have a message and concat the string representation of a list, how to convert? |
| 15:51 | weissj | i want the string that print prints, but print doesn't return this string |
| 15:51 | stuartsierra | pr-str |
| 15:52 | Chouser | ,(throw (Exception. (str "This is a bad list: " (pr-str '(bad wrong icky nasty))))) |
| 15:52 | clojurebot | java.lang.Exception: This is a bad list: (bad wrong icky nasty) |
| 15:53 | Chousuke | hmm |
| 15:53 | Chousuke | ,(str '(foo bar)) |
| 15:53 | clojurebot | "(foo bar)" |
| 15:54 | emacsen | Chouser, you still here? |
| 15:54 | Chouser | emacsen: yes |
| 15:55 | kotarak | ,(str '("foo" "bar")) |
| 15:55 | Chouser | ,(str '(foo "foo" :foo)) |
| 15:55 | clojurebot | "(\"foo\" \"bar\")" |
| 15:55 | clojurebot | "(foo \"foo\" :foo)" |
| 15:55 | Chouser | hmm. |
| 15:55 | emacsen | Chouser, in your shell-out "sh" function, how do you pass the command arguments? |
| 15:56 | Chouser | emacsen: there are examples at the end of the file |
| 15:56 | emacsen | oh, okay, I'm just an idiot :) |
| 15:56 | Chouser | (sh "ls" "-l") |
| 15:56 | emacsen | I coulda sworn I tried that but apparently not :) |
| 15:57 | Chouser | emacsen: not at all! someday all the documentation will be full of examples, easily searchable, and cross-linked. |
| 15:57 | Chouser | for now, asking here is fine. :-) |
| 15:57 | emacsen | ah. I see. I tried passing it a list |
| 15:57 | emacsen | I did (sh '("ls" "-l")) |
| 15:57 | emacsen | your way is better :) |
| 15:58 | Chousuke | Chouser: You dream big. |
| 15:58 | Chouser | well, maybe. if you're constructing a list of args and also want to use keyword args, you have to do something like (apply sh :out :bytes "ls" args-list) ...not sure that's ideal |
| 15:58 | bpattison | Chouser what namespace is printStackTrace in? |
| 15:59 | Chouser | Chousuke: heh. :-) |
| 15:59 | kotarak | bpattison: it's a method of the exception. (.printStackTrace *e) (note the leading dot) |
| 15:59 | Chouser | bpattison: it's not! It's a method of the Java Excpetion class. |
| 16:00 | kotarak | Is there now a Core team? |
| 16:00 | Chouser | kotarak: I don't think so. |
| 16:01 | kotarak | Chouser: I saw some committers besides Rich, no? |
| 16:01 | Chouser | the git commits give primary credit to the original patch author, so it looks like there are lots of committers now. |
| 16:01 | kotarak | Oh. |
| 16:01 | Chouser | but anyone who's signed a CA can get a patch in. |
| 16:02 | Chouser | instructions here: http://clojure.org/patches |
| 16:06 | Chouser | I'm not sure I said that quite right. rhickey has always taken patches from contributors, but he manually gave credit in the commit message, so his name was still the most prominent. |
| 16:06 | Chouser | so other than some process techincallities the only real change is that git automatically gives primary credit to the original patch author. |
| 16:07 | vika23 | how old is clojure ? |
| 16:08 | ataggart | just a couple of years |
| 16:08 | kotarak | 3.5 years, 1.5 years in the public |
| 16:08 | hiredman | ~git e54a1ff1ac0d02560e80aad460e77ac353efad49 |
| 16:08 | clojurebot | created IDEA project |
| 16:08 | hiredman | bah |
| 16:09 | hiredman | clojurebot: why don't you show the date? |
| 16:09 | clojurebot | why not? |
| 16:09 | kotarak | Chouser: I just thought, that there is now a team, because there are some signed-off-by things, if I saw this correctly. So I thought there is now a team of Leutnants doing some filtering for rhickey. |
| 16:11 | Chouser | kotarak: I'm doing some of the grunt work pushing patches in for him, but no patch gets in without rhickey's explicit approval. |
| 16:11 | kotarak | Yes. I wouldn't expect that there is some change w/o rhickey's approval. |
| 16:12 | ataggart | is it possible to do a no-arg defmethod ? |
| 16:12 | Chouser | ataggart: what would it dispatch on? |
| 16:13 | ataggart | well, it wouldnt need to |
| 16:13 | ataggart | ince there could only be one |
| 16:13 | Chouser | ataggart: why make it a defmethod instead of just a defn? |
| 16:13 | ataggart | heh |
| 16:14 | ataggart | I was thinking of a no-arg that called an arg'd method using a default value |
| 16:14 | Chouser | oh, I see. |
| 16:14 | Chousuke | you could use rest args for the dispatch? |
| 16:15 | ataggart | then I'd need a more funky dispatch function |
| 16:15 | ataggart | right? |
| 16:15 | kotarak | One could use (fn [& args] (if (> 0 (count args)) (dispatch-somehow) :default)) as dispatch function, no? and (defmethod bla :default ([] (bla :xxx)) ...)) |
| 16:15 | ataggart | somehow (my-fn) needss to get routed to the right method |
| 16:16 | ataggart | ahh I see |
| 16:16 | ataggart | didn't realize you could return :default from the dispatch function |
| 16:16 | ataggart | though it makes perfect sense that it should work |
| 16:17 | kotarak | Haven't tried, though. |
| 16:28 | ataggart | what's the most straightforward way to dispatch on the types of more than one arg? |
| 16:29 | kotarak | ataggart: a vector (fn [&args] (vec (map type args))) (defmethod bla [Integer String] ...) |
| 16:29 | ataggart | ah excellent thx |
| 16:31 | kotarak | ataggart: note that there is no [Integer :default]. For that one needs a ::Bottom type, which one derives everything from.... (derive Object ::Bottom) (defmethod bla [Object ::Bottom] ...) |
| 16:31 | ataggart | what's the double-colon notation mean? |
| 16:31 | kotarak | namespace-qualified keyword |
| 16:31 | ataggart | ah k |
| 16:31 | kotarak | ,::foo |
| 16:31 | clojurebot | :sandbox/foo |
| 16:32 | kotarak | Keywords need to be qualified to be allowed in a derive. |
| 16:35 | stuartsierra | Things you never knew about Java: http://stackoverflow.com/questions/15496 |
| 16:43 | Chouser | that's a great thread |
| 16:47 | bpattison | is there a string construct in clojure similar to python's triple quote where line break don't need to be escaped? |
| 16:48 | Chouser | line breaks in regular double-quotes don't need to be escaped. |
| 16:48 | bpattison | so I don't need "\n\n" ? |
| 16:48 | Chouser | right, you can just continue on the next line. |
| 16:48 | bpattison | ah -- okay -- great |
| 16:49 | bpattison | ah. sweet |
| 16:51 | Chouser | of course python's triple-quote allows unescaped double quotes as well -- there's no way to do that in Clojure code currently. |
| 16:52 | bpattison | line-breaks is a big plus -- especially with test data |
| 16:56 | dhaza | reader macros ftw |
| 17:00 | Drakeson | is there anyone using mac? git clone git://github.com/richhickey/clojure.git and then cd clojure, and run ant. it fails. |
| 17:01 | Chouser | Drakeson: hang on a sec. |
| 17:01 | Drakeson | master~2 does not fail. apparently the commit before last is at fault. |
| 17:01 | Chouser | yes |
| 17:03 | ataggart | is there a more sensible way to do default values than: (let arg (if arg arg default-value) ...) ? |
| 17:03 | Chouser | Drakeson: http://www.assembla.com/spaces/clojure/tickets/124 |
| 17:09 | Drakeson | There is a patch that allegedly resolves it. Is it a workaround until a real fixed is developed? |
| 17:09 | Chouser | Drakeson: I don't know. try a fresh pull now. |
| 17:09 | Drakeson | s/allegedly// (I tried and it works) |
| 17:10 | Chouser | I don't know enough about the issue to know if the ant fork solution is a good permanent solution or not. |
| 17:10 | Drakeson | thanks. |
| 17:11 | Chouser | For now the change that broke Compile is removed until the right way forward is decided. |
| 17:28 | lazy1 | .. |
| 17:28 | Jetien | hi kotarak! sorry to bother you but i'm having problems with vimclojure again. I try to run this example http://java.ociweb.com/mark/clojure/article.html#DesktopApps and again no side-effects (no windows open, etc.) occur when this is evaluated from within vimclojure. same problem as the snake example from yesterday. do you have any hints? |
| 17:33 | kotarak | Jetien: I'm not sure, I understand, what's going on. |
| 17:33 | kotarak | (doto (JFrame.) (.setVisible true)) opens a new window. |
| 17:35 | Jetien | yep, i can confirm that |
| 17:36 | Jetien | i was afraid that wasn't going to work at all |
| 17:37 | kotarak | I don't know, why it sometimes doesn't work. I'm not really a Java guy... |
| 17:38 | Jetien | is there a way to debug? |
| 17:38 | kotarak | The Repl does nothing return, right? Not even nil or something. |
| 17:40 | Jetien | correct |
| 17:40 | Jetien | but it should at least return something, right? |
| 17:40 | kotarak | Yeah. |
| 17:42 | kotarak | Something cheesy is going here... |
| 17:42 | Jetien | is there a way to circumvent the nailgun server and use clojure directly? |
| 17:42 | kotarak | you can start a normal repl and the nailgun server from there. |
| 17:42 | kotarak | So you can work directly in the clojure.main repl, but still can send forms from inside vim. |
| 17:43 | Jetien | i wonder if this solves the problem |
| 17:44 | kotarak | if so, it's a VC problem, otherwise it's maybe a deeper thing in Clojure itself. |
| 17:45 | Jetien | how do you start the ng server? (ng ?) |
| 17:47 | kotarak | com.martiansoftware.nailgun.NGServer/main |
| 17:47 | Jetien | thanks |
| 17:47 | kotarak | You probably want to do this in a separate thread. Haven't tried that manually actually. |
| 17:48 | kotarak | But it should work... in theory... ;) |
| 18:27 | hircus | anyone here using Netbeans? |
| 18:28 | ataggart | I tried. Gave up. |
| 18:28 | hircus | my problem is not really with Netbeans+Enclojure, but with trying to use the generated classes from a Java project |
| 18:29 | hircus | I use Enclojure to generate a class (:gen-class) that implements an interface, yet the Java project that uses it claims that that class does not exist |
| 18:29 | hircus | (building using Ant works, though, so obviously the class does exist) |
| 18:30 | ataggart | is the dir where the classes are dumped to in the classpath for netbeans? |
| 18:30 | ataggart | for the project, I mean |
| 18:31 | hircus | Enclojure creates a JAR, and the other project referenced that JAR, so yes |
| 18:31 | hircus | (Netbeans can actually build the project just fine, since that just triggers an Ant task -- but when editing the code, the part that imported the clojure class is always marked as an error |
| 18:31 | hircus | i.e. the "import com.example.myclojureclass" part |
| 18:32 | ataggart | k, my knowledge has been exhausted. sry |
| 18:32 | hircus | no prob. it's really rather bizarre |
| 19:37 | dreish | chunked branch slows down (reduce + (range 1000000)) by roughly a factor of 10. |
| 19:46 | hiredman | dreish: what about apply? |
| 19:46 | dreish | I think that was worse. |
| 21:11 | Jonathan-Smith | are there any good articles on getting data out of xml/parsed stuff using clojure? |
| 21:12 | combasa | it seems that sometimes Slime gets disconnected from the current frame with my clojure file, how can stop slime and then restart from that frame? |
| 21:12 | combasa | hmm thats probably more of an emacs question I guess |
| 21:12 | hiredman | Jonathan-Smith: you've seen clojure.xml/parse ? |
| 21:13 | hiredman | oh |
| 21:13 | hiredman | xml/parsed is the past tense of clojure.xml/parse then? |
| 21:13 | Jonathan-Smith | yes i've got it turned into a structure of what looks like vectors and maps |
| 21:14 | Jonathan-Smith | just wondering if there is a simple rule for how to traverse it |
| 21:15 | hiredman | there is xml-zip |
| 21:15 | hiredman | clojure.zip/xml-zip |
| 21:15 | Jonathan-Smith | oh really? |
| 21:15 | hiredman | yeah |
| 21:15 | Jonathan-Smith | does that let you treat it like a tree or something? |
| 21:16 | hiredman | yeah |
| 21:16 | hiredman | a zipper |
| 21:16 | hiredman | there is also some stuff in contrib, and enlive |
| 21:16 | hiredman | (doc xml1->) |
| 21:16 | clojurebot | "clojure.contrib.zip-filter.xml/xml1->;[[loc & preds]]; Returns the first item from loc based on the query predicates given. See xml->" |
| 21:17 | Chouser | dreish: Intersting -- I'm seeing more like x7 slowdown, but chunked is definitely slower than master for that expression. |
| 21:17 | hiredman | ~def xml1-> |
| 21:18 | dreish | I'd believe x7. I didn't do a very careful analysis. |
| 21:18 | Jonathan-Smith | i think this filter is what i want as i want to extract a set of nodes from the xml |
| 21:22 | Chouser | I really really need to try enlive so that I can authoritatively direct people away from zip-filter. |
| 21:42 | Jonathan-Smith | i get this error: |
| 21:42 | Jonathan-Smith | java.lang.ClassNotFoundException: clojure.contrib.zip-filter.xml (repl-1:8) |
| 21:42 | Jonathan-Smith | when trying to use clojure.contrib.zip-filter.xml |
| 21:43 | Jonathan-Smith | i'm using clojure-dev and have looked in my sources and it is there |
| 21:45 | holmak__ | You are using Eclipse? |
| 21:46 | Jonathan-Smith | yes |
| 21:46 | Jonathan-Smith | should i build a new clojure-contrib? |
| 21:46 | holmak__ | Hm. You have to make sure clojure-contrib.jar is on the classpath, but I'm not familiar with Eclipse. |
| 21:47 | holmak__ | I thought clojure-dev provided clojure.jar and clojure-contrib.jar for you prebuilt, but I may be wrong. |
| 21:48 | Jonathan-Smith | it does, i can see them in the refrenced libraries section |
| 21:50 | holmak__ | I can type "(use 'clojure.contrib.zip-filter.xml)" fine at the REPL on the command line, so it's definitely a legitimate library. I don't know what's going wrong in Eclipse. |
| 21:51 | Jonathan-Smith | hmm |
| 21:51 | Jonathan-Smith | i can do that too |
| 21:52 | Jonathan-Smith | hmm |
| 21:53 | Jonathan-Smith | it seems that if i 'use' it it works but if I 'require' it it does not work |
| 21:53 | Jonathan-Smith | note to self... |
| 21:54 | holmak__ | require behaves strangely, I always had weird problems with it |
| 21:54 | holmak__ | I think the general recommendation is to stick to :use and :import, or so I've read. |
| 21:55 | grrrt | hm I tend to use require so I don't pollute my namespaces |
| 21:55 | Chouser | I've never had an issue with 'require' |
| 21:56 | Chouser | I very much dislike naked use -- it makes it harder to read code because you can see names being used and not know where they're coming from. |
| 21:56 | Jonathan-Smith | is interesting because :require has been working fine with all of the Java libraries i've been been calling |
| 21:57 | holmak__ | I just always have awful luck getting Java namespace stuff to work right. |
| 21:57 | Chouser | but (use '[clojure.contrib.zip-filter.xml :only [xml1->]]) or something is fine. |
| 21:57 | Chouser | Jonathan-Smith: :require does do Java libraries -- it's only for Clojure namespaces. |
| 21:57 | Chouser | :import is for Java classes. |
| 21:57 | Jonathan-Smith | ooh |
| 21:58 | Jonathan-Smith | i was trying to import clojure.contrib |
| 22:00 | Chouser | gah. :require does NOT do Java libraries. sheesh. |
| 22:00 | Chouser | I only forget the word "NOT" when it's really critical |
| 22:19 | jwinter_ | Does this logo look familiar to anyone else? http://en.wikipedia.org/wiki/Super_Fresh |
| 22:20 | MononcQc | jwinter, how about http://blog.plover.com/prog/haskell/logo.html |
| 22:21 | jwinter_ | heh |
| 22:25 | emacsen | Chouser: any idea why w/ sh "find" seems to fail miserably? |
| 22:26 | Chouser | (sh "find" "/tmp") worked fine for me just now. |
| 22:26 | clojurebot | for is a loop...in Java |
| 22:27 | grrrt | ,(doc sh) |
| 22:27 | clojurebot | "clojure.contrib.shell-out/sh;[[& args]]; Passes the given strings to Runtime.exec() to launch a sub-process. Options are :in may be given followed by a String specifying text to be fed to the sub-process's stdin. :out option may be given followed by :bytes or a String. If a String is given, it will be used as a character encoding name (for example \"UTF-8\" or \"ISO-8859-1\") to convert the sub-process's stdout to a Stri |
| 22:27 | Chouser | clojurebot! What's a "Stri"!? |
| 22:28 | emacsen | lol... it just started working... I swear I just used the up arrow in my buffer and now it works |
| 22:29 | Chouser | hm. lovely. |
| 22:29 | emacsen | and now it fails again... maybe it's my inferior lisp |
| 22:32 | emacsen | ah... the problem is my side... stupid symlinks... nevermind :) |
| 22:36 | Chouser | whew |