2011-07-31
| 00:36 | jhickner | getting a strange encoding issue with clojurescript. compiling this cljs expression: (name :foo) results in an extended character in the compiled js: cljs.core.name.call(null,"'foo") |
| 00:37 | grant__ | slime/swank seem to die on a null pointer exception, and the only way around it is to restart. any way to fix this, and hopefully see better errors? :) |
| 00:37 | jhickner | anyone else running into this? my source cljs file is utf-8 encoded |
| 00:38 | ohpauleez | jhickner: That seems odd. I'll try to recreate it tonight, but I suggest you hit the mailing list with that, and if confirmed by someone else, open up a bug report |
| 00:38 | jhickner | ok will do |
| 00:38 | jhickner | thanks |
| 00:38 | ohpauleez | np |
| 00:39 | Blackfoot | jhickner: you need to make sure your charset is utf8 |
| 00:40 | jhickner | my source file is utf-8. is there something else I need to do during compilation? |
| 00:40 | clojurebot | amespaces are (more or less, Chouser) java packages. they look like foo.bar; and corresponde to a directory foo/ containg a file bar.clj in your classpath. the namespace declaration in bar.clj would like like (ns foo.bar). Do not try to use single segment namespaces. a single segment namespace is a namespace without a period in it |
| 00:40 | Blackfoot | in the html <meta content=”charset=utf-8″ /> |
| 00:41 | lucca | those are not normal quotes. |
| 00:42 | grant__ | actually, i'm using swank-clojure |
| 00:42 | jhickner | no change when including that in my html (with fixed quotes) |
| 00:43 | jhickner | the actual generated .js file has non-utf8 characters in it, even though my source file is utf-8 |
| 00:43 | Blackfoot | hrm, you may also want to try setting the encoding in your browser |
| 00:44 | Blackfoot | eg in chrome: wrench->tools->encoding->Unicode |
| 00:45 | ohpauleez | Blackfoot: I think it's the output of the compiler that has non-utf8 characters in it, which shouldn't be happening |
| 00:45 | Blackfoot | just to be sure: the symptom i was seeing was (keyword? :keyword) returning false. |
| 00:45 | Blackfoot | ohpauleez: ahh, yea, that sounds like it may be different |
| 00:45 | jhickner | wrench -> tools -> encoding reads UTF-8 |
| 00:48 | Blackfoot | jhickner: can you look at the string representing the keyword in chrome's inspector? is the first character correct? |
| 00:49 | jhickner | in chrome's inspector, it looks like this: "ï·'container" |
| 00:49 | jhickner | that's the output of (name :container) |
| 00:51 | Blackfoot | OK, so that looks like an incorrect encoding. when you open the generated JS in an editor, is the first character correct? |
| 00:51 | jhickner | no, it's incorrect there too |
| 00:52 | Blackfoot | huh, that is odd. can you pastbin the code somewhere? i can try compiling it here |
| 00:53 | jhickner | ok sure |
| 00:57 | jhickner | ok, here's a gist with a short sample and the resulting compiled js: https://gist.github.com/1116419 |
| 01:00 | Blackfoot | ok, i can reproduce without charset |
| 01:02 | ohpauleez | jhickner: yeah, hit the mailing list and I'd even make the bug report since this is surprising behavior, I'm sure other peopl |
| 01:02 | ohpauleez | people will hit it as well |
| 01:02 | jhickner | ok |
| 01:03 | Blackfoot | and it is fixed with the meta |
| 01:03 | Blackfoot | is this in your HTML file: <head> <meta charset="utf-8"> </head> |
| 01:05 | jhickner | you're right, that fixes it. I had tried it with <meta content="charset=utf-8"> before |
| 01:06 | Blackfoot | shoot, sorry about that. i pasted in someone else's "fix" |
| 01:07 | ohpauleez | Right, but the compiler still should be preventing that |
| 01:08 | ohpauleez | that was my point |
| 01:10 | Blackfoot | ohpauleez: yea, it sounds like the problem is coming up a lot. not sure how the compiler can prevent it unless there's a way to specify charset in the javascript file |
| 01:11 | ohpauleez | I think it's safe that the compiler should always generate utf-8, being that it's the default across most web systems |
| 01:11 | ohpauleez | and most web frameworks generate, handle, and expect utf-8 |
| 01:12 | Blackfoot | I think that is what it's doing now. browsers are reading it as iso-8859-1 by default |
| 01:13 | ohpauleez | hmm, that is weird |
| 01:13 | Blackfoot | in jhickner's gist, the character is correct |
| 01:14 | jhickner | if it was correct, wouldn't it display correctly in an editor set for utf-8? |
| 01:14 | ohpauleez | Blackfoot: That's totally insane, thanks for telling me about that |
| 01:15 | Blackfoot | jhickner: it should |
| 01:16 | Blackfoot | jhickner: the character in question is Hex fdd0, so i'm not sure if there's a canonical way to display it |
| 01:17 | Blackfoot | in fact, http://www.fileformat.info/info/unicode/char/fdd0/index.htm . maybe that's why it was chosen as the keyword prefix, it shouldn't be used otherwise |
| 01:19 | jhickner | hmm, interesting. so it might be intentional then? |
| 01:20 | Blackfoot | the use of that character is intentional. the interaction with browsers with the wrong encoding is probably not |
| 02:35 | tnks | anyone around? |
| 02:35 | tnks | I'm in Java, but need fast(ish) persistent data structures. |
| 02:36 | tnks | There's only a handful of Java libraries with persistent collections. |
| 02:37 | tnks | So I started playing around with calling Clojure directly from Java. |
| 02:37 | tnks | which was easy to do with the HashMap. |
| 02:37 | tnks | but I was curious how to call PersistentTreeMap. |
| 02:37 | tnks | I couldn't figure out the right idiom. |
| 02:37 | tnks | kept getting a null-pointer exception. |
| 02:38 | Blackfoot | sorry, haven't trying calling in that direction |
| 02:38 | tnks | yeah, it's not the common use case, I'm sure. |
| 02:38 | tnks | calling Scala from Java sucks hard-core. |
| 02:39 | tnks | I'm not sure how to get at Scala objects. |
| 02:39 | tnks | and method names have awful names for symbols. |
| 02:39 | tnks | I think Clojure is probably easier to call. . . but more casting. |
| 02:40 | tnks | Just calling PersistentTreeMap.EMPTY throws the exception for me. |
| 02:40 | tnks | which strikes me as odd. |
| 02:40 | Blackfoot | I'd try to find examples in the clojure source code |
| 03:36 | rado_ | hello, is there a clojure REPL that supports bash like shortcuts |
| 03:36 | hiredman | "bash like shortcuts"? |
| 03:36 | rado_ | like up arrow |
| 03:36 | rado_ | for history |
| 03:36 | hiredman | ~google rlwrap |
| 03:36 | clojurebot | First, out of 6900 results is: |
| 03:36 | rado_ | Ctrl+a for beginning of line |
| 03:36 | clojurebot | Rlwrap - utopia.ision.nl |
| 03:37 | clojurebot | http://utopia.knoware.nl/~hlub/rlwrap/ |
| 03:37 | ohwow_ | I thought jline supported that? |
| 03:37 | hiredman | jline, depending on what version you use, has unicode issues |
| 03:38 | ohwow_ | oh |
| 03:38 | rado_ | ahaha |
| 03:38 | rado_ | i have to run though another program |
| 03:38 | rado_ | been spoiled by python and ruby repls |
| 03:41 | rado_ | rlwrap works, thanks! |
| 04:16 | ohwow| | Hello |
| 04:29 | _leonid | hello |
| 07:06 | Vinzent | can anybody give me an advice on developing desktop apps on clojurescript? |
| 07:50 | lobotomy | so, is it possible to get utf-8 working with the emacs-slime-swank-clojure combo somehow? |
| 07:51 | lobotomy | in emacs, when i say M-x slime-connect, that works without any problems etc (well, the versions differ); but entering e.g. "ö" into the repl closes the slime connection: "Lisp connection closed unexpectedly: connection broken by remote peer" |
| 07:51 | Vinzent | I have slime-net-coding-system (or something similar) setted to utf-8 |
| 07:51 | lobotomy | i have that too, doesn't help |
| 07:51 | lobotomy | could it be on the swank side? not sure where to start debugging this |
| 07:52 | Vinzent | hm, there were something in swank, but i thought iy was fixed... |
| 07:52 | lobotomy | using cake and hmm |
| 07:52 | lobotomy | not sure how "cake swank" sets things up... does it need a utf8 setting or something |
| 07:53 | Vinzent | slime-net-coding-system 'utf-8-unix and [swank-clojure "1.3.2"] all works: user> "привет" => "привет" |
| 07:53 | Vinzent | so it's a candidate for cake's issue list, i think |
| 07:56 | hiredman | Vinzent: you need to set the jvm to use utf8 as well, not sure if the latest swank-clojure defaults to utf8 or not |
| 07:56 | lobotomy | used slime earlier, it didn't work then either |
| 07:57 | lobotomy | which would point to the jvm yeah |
| 07:57 | hiredman | ~google jvm default encoding |
| 07:57 | clojurebot | First, out of 37500 results is: |
| 07:57 | clojurebot | utf 8 - Setting the default Java character encoding? - Stack Overflow |
| 07:57 | clojurebot | http://stackoverflow.com/questions/361975/setting-the-default-java-character-encoding |
| 07:59 | lobotomy | hmm, in ~/.cake/project.clj i have :jvm-opts ["-Dfile.encoding=utf8"] but that doesn't help |
| 08:00 | lobotomy | changed that to UTF8 but that didn't help either :) |
| 08:01 | Vinzent | UTF-8, no? |
| 08:01 | hiredman | https://gist.github.com/1070768 |
| 08:01 | lobotomy | hmm... ps aux|grep -i cake reports that the cake thing doesn't include the -Dfile.encoding on the command line |
| 08:02 | hiredman | (what I have in emacs for utf8) |
| 08:02 | hiredman | lobotomy: cake runs a persistent jvm, you'll need to restart it to run it with new flags |
| 08:02 | lobotomy | yeah, i have |
| 08:03 | hiredman | I recommed leiningen |
| 08:03 | lobotomy | the x-select-request-type doesn't help either |
| 08:03 | lobotomy | the other stuff i already had in .emacs |
| 08:04 | lobotomy | looking like it's cake's fault, it doesn't seem to give that file.encoding= option to the jvm |
| 08:04 | lobotomy | (also i'm on os x, not sure which things that breaks...) |
| 08:05 | hiredman | dunno, I use lein on osx and everything is fine |
| 08:05 | hiredman | is there a reason you are using cake? |
| 08:05 | lobotomy | apparently it's better than lein :) |
| 08:05 | hiredman | ah |
| 08:05 | hiredman | no |
| 08:06 | lobotomy | i used lein for a while a year ago, it worked fine, except it also had this exact same problem |
| 08:06 | hiredman | lein is clearly superior to cake |
| 08:06 | hiredman | ~cake |
| 08:06 | clojurebot | cake is http://hackage.haskell.org/package/cake-0.0.1 |
| 08:06 | hiredman | ~lein |
| 08:06 | clojurebot | lein is http://github.com/technomancy/leiningen |
| 08:07 | ohwow_ | cake has no docs ? |
| 08:07 | lobotomy | can you elaborate? i read that cake has that persistent jvm thing, which lein doesn't |
| 08:07 | hiredman | lobotomy: the persistent jvm is an anti-feature |
| 08:08 | Vinzent | I've heard main cake feature is ability to write tasks easily |
| 08:08 | hiredman | ah, yet another anti-feature of cake is the task macro |
| 08:08 | Vinzent | why? |
| 08:08 | clojurebot | why not? |
| 08:09 | hiredman | where lein's tasks are just clojure functions, cake tasks are not |
| 08:09 | lobotomy | why is the persistent jvm an anti-feature? |
| 08:09 | hiredman | lobotomy: because if you are running slime, how often do you start a new jvm? |
| 08:10 | lobotomy | dunno, haven't gotten that far yet ;) |
| 08:10 | hiredman | basically it makes things more complex without solving anything |
| 08:10 | hiredman | Vinzent: how many tasks have you written? |
| 08:10 | Vinzent | hiredman, I'm using lein :) |
| 08:10 | hiredman | good |
| 08:11 | Vinzent | but persistent jvm was handful for running 'cake test' etc |
| 08:12 | hiredman | *shrug* |
| 08:12 | hiredman | lein does have an interactive mode if you want to run tasks like that |
| 08:14 | Vinzent | now it does; but cake was here for a long time |
| 08:14 | hiredman | a long time? |
| 08:16 | Vinzent | yeah (before lein interactive was written) |
| 08:24 | lobotomy | ooh, i installed leiningen instead, and with that it works |
| 08:25 | lobotomy | leiningen seems to obey the :jvm-opts ["-Dfile.encoding=UTF8"] in the project.clj |
| 08:25 | lobotomy | it adds that to the command line and afaict that makes the difference |
| 08:26 | lobotomy | now, how to do a bug report for cake... :) |
| 08:42 | lobotomy | heh, #cake.clj seems to be not that active. i found a way to get the file.encoding option to the cake command line but it still doesn't work. oh well |
| 10:37 | foodoo | There's (cons) which prepends a value to a list. Is there also a function that appends to the end of a list? I couldn't find any so far |
| 10:39 | Scriptor | foodoo: conj, but only for vectors |
| 10:40 | Scriptor | conj's behavior is dependent on the datastructure it's used for |
| 10:40 | Scriptor | ,(doc conj) |
| 10:40 | clojurebot | "([coll x] [coll x & xs]); conj[oin]. Returns a new collection with the xs 'added'. (conj nil item) returns (item). The 'addition' may happen at different 'places' depending on the concrete type." |
| 10:41 | foodoo | I see. (conj) behaves exactly like (cons) for lists. For vectors it has the desired behaviour |
| 10:42 | Scriptor | yep |
| 10:42 | Scriptor | it's because lists aren't well-suited for adding to the end, it's O(n) time |
| 10:43 | pdk | conj always adds at the point where it's most efficient |
| 10:43 | foodoo | But adding to the front is O(1) I suppose? |
| 10:43 | pdk | for lists/vectors this means it adds to opposite ends |
| 10:43 | pdk | pretty much yeah |
| 10:43 | pdk | visualize it as being a singly linked list |
| 10:44 | pdk | (doc append) |
| 10:44 | clojurebot | Cool story bro. |
| 10:44 | pdk | naturally |
| 10:44 | foodoo | (doc append) gives me an unresolved var. Do I need a specific package for this? |
| 10:44 | pdk | could try concat instead |
| 10:44 | clojurebot | Cool story bro. |
| 10:45 | pdk | ,(concat '(1 2 3) '(4 5 6) [7 8 9]) |
| 10:45 | clojurebot | (1 2 3 4 5 ...) |
| 10:45 | pdk | ,(concat '(1 2 3) '(4 5 6)) |
| 10:45 | clojurebot | (1 2 3 4 5 ...) |
| 10:45 | pdk | this is a bot of few words |
| 10:45 | ohwow| | http://www.4clojure.com/problem/27 could somebody please tell me how to solve this with one-liner? |
| 10:45 | ohwow| | Using nth? |
| 10:45 | ohwow| | I am not sure what's the idiomatic solution |
| 10:46 | pdk | i'd try nth and every? with a lambda, let me think |
| 10:46 | foodoo | ohwow: Something like #(= (reverse %) %) maybe? |
| 10:46 | pdk | or hell like that too |
| 10:46 | ohwow| | foodoo: hm, i see |
| 10:47 | ohwow| | but what if the sequence is really big |
| 10:47 | pdk | it'd be an issue with ram usage |
| 10:47 | pdk | but iterating over it is gonna be at least O(n) anyway |
| 10:48 | foodoo | You probably can't solve it in one line, if you need to worry about RAM or other technical limitations |
| 10:51 | foodoo | But thanks for showing me that website. I'll probably learn with that instead project euler for a while |
| 10:52 | ohwow| | :) |
| 10:53 | ohwow| | How can I do let-rec in clojure? |
| 11:01 | ohwow| | Oh, nevermind, sorry |
| 11:03 | foodoo | By the way: Is there something like an unlist macro? For example if I want to add all numbers of a list, I can't just say (+ mylist) but need to use (reduce) |
| 11:03 | ohwow| | (apply + mylist) |
| 11:04 | ohwow| | ,(apply + '(1 2 3)) |
| 11:04 | clojurebot | 6 |
| 11:05 | pdk | apply, reduce, map etc foodoo |
| 11:06 | pdk | also inside a ` you can use ~@ to splice in the contents of a list |
| 11:06 | pdk | ,`(1 ~@(2 3 4) 5) |
| 11:06 | clojurebot | #<ClassCastException java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IFn> |
| 11:06 | pdk | welp |
| 11:06 | pdk | ,`'(1 ~@(2 3 4) 5) |
| 11:06 | clojurebot | #<ClassCastException java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IFn> |
| 11:06 | pdk | yeah i'm an expert |
| 11:07 | ohwow| | ,`(1 ~@(list 2 3 4) 5) |
| 11:07 | clojurebot | (1 2 3 4 5) |
| 11:07 | ohwow| | :3 |
| 11:07 | pdk | ~@'(2 3 4) works too |
| 11:07 | clojurebot | @ , {a b c] |
| 11:07 | pdk | k didnt know that would produce output |
| 11:08 | Chousuke | I wonder why it did :P |
| 11:08 | Chousuke | ~@ |
| 11:08 | clojurebot | @ , {a b c] |
| 11:08 | Chousuke | huh |
| 11:08 | Chousuke | :P |
| 11:08 | ohwow| | ~@hello |
| 11:08 | clojurebot | Cool story bro. |
| 11:08 | foodoo | ah, thanks. But don't worry, this notation is so ugly, that I rather resort to reduce/map/etc. when possible ;) |
| 11:08 | ohwow| | foodoo: the notation is rather powerful |
| 11:08 | ohwow| | and apply is good too |
| 11:09 | pdk | ` is mostly used within macro definitions so i'd stick with apply etc where you can |
| 11:14 | ohwow| | Is there a way to determine if the data structure could be turned into a sequence? |
| 11:29 | ohwow| | ,(str (filter (fn [x] (re-matches #"[A-Z]" (str x))) (seq "HeLLo"))) |
| 11:29 | clojurebot | "clojure.lang.LazySeq@18c27" |
| 11:29 | ohwow| | How to actually evaluate a sequence? |
| 11:29 | peteriserins | ,seq? |
| 11:29 | clojurebot | #<core$seq_QMARK_ clojure.core$seq_QMARK_@18e0f79> |
| 11:30 | peteriserins | ,(seq [1 2 3]) |
| 11:30 | clojurebot | (1 2 3) |
| 11:30 | peteriserins | ,(seq? [1 2 3]) |
| 11:30 | clojurebot | false |
| 11:31 | kumarshantanu | ohwow|: (apply str lazy-seq-here) |
| 11:31 | ohwow| | (apply str (filter (fn [x] (re-matches #"[A-Z]" (str x))) (seq "HeLLo"))) |
| 11:31 | ohwow| | oops |
| 11:32 | ohwow| | Thanks |
| 11:32 | ohwow| | (fn [st] |
| 11:32 | ohwow| | (apply str |
| 11:32 | ohwow| | (filter (fn [x] (re-matches #"[A-Z]" (str x))) (seq st)))) |
| 11:32 | ohwow| | Is this a good solution for this problem: http://www.4clojure.com/problem/29#prob-title ? |
| 12:05 | kumarshantanu | How can I find out if my send-off work is finished or not? |
| 12:05 | kumarshantanu | I want to poll |
| 12:41 | foodoo | how can I recur in an anonymous function, when I don't have a tail recursion? |
| 12:46 | Scriptor | foodoo: recur seems to work in anonymous functions fine, what do you mean by you don't have tail recursion? |
| 12:48 | ohpauleez | foodoo: If you have such unralentless recursion happening in the function, it's probably better to spin it out into a dedicated function |
| 12:50 | foodoo | I'm playing around on 4clojure.com and I need to define a function for which the unit tests pass. To my knowledge I can't assign a name to the provided function for "explicit" recursion. Or am I mistaken? |
| 12:50 | Scriptor | foodoo: (fn func-name [args] ...) |
| 12:51 | foodoo | oh, thought defn was for named functions and fn was for anonymous functions. Thank you very much :) |
| 12:51 | Scriptor | that's true, fn is for anonymous functions, but you can add an explicit name to them for convenience's sake |
| 12:52 | Scriptor | whereas defn actually stores that function in a var |
| 12:53 | foodoo | The funny thing is: I also tried (fn [l] (let [myInnerFunction ... ] (myInnerfunction l)) which worked fine on my machine, but the web form didn't like it |
| 12:53 | foodoo | It couldn't resolve the symbol myInnerfunction |
| 12:54 | foodoo | huray! Problem solved :) |
| 13:09 | triyo | I'm looking through the devnotes in ClojureScript repo and I can't seem to find notes on what Atom actually is (compiled to) in Cljs. Anyone have an idea. |
| 13:09 | triyo | ? |
| 13:16 | Blackfoot | triyo: the source code is pretty readable, src/cljs/cljs/core.cljs |
| 13:16 | Blackfoot | it looks like it compiles into an Atom object |
| 13:18 | triyo | Blackfoot: thanks, it does look pretty straightforward. |
| 13:22 | triyo | Today I made an epic fail with cljs. The line has been so well blurred between clj and cljs at dev time that when I introduced an atom in my cljs part, I thought it will live across each HTTP as its running in the JVM process. Opps its a cljs Atom, so client side, not the same at all. |
| 13:25 | triyo | One has to be conscious what clojure-like code runs where as same constructs may mean very different things. |
| 13:25 | triyo | Ver interesting |
| 13:25 | triyo | *very |
| 13:31 | ohpauleez | triyo: but you could send the atom's current value over the wire and set! the atom on the server side, no? |
| 13:34 | triyo | Yup you could, you are absolutely right. I am just stating that one needs to be conscious what is front-end and whats back-end and its not easy as one may thing since the line has been really well blurred. |
| 13:37 | wastrel | hi clojureelles |
| 13:41 | ejackson | triyo: ooh, that's interesting, the atoms are cleared between http calls, makes sense. |
| 13:42 | triyo | thats obvious when you think of it. But since the clojure/core team has done an amazing job to blur the line between clj and cljs, you get caught out every now and then. |
| 13:45 | triyo | For instance, because my front-end and backend code now look the same, I get a feeling that both are running in the same runtime space and thats far from the truth of course. (Front-end = JS VM and Backend = Java VM) |
| 13:45 | Saturnation | silly question, but how can I recursively create a list without including the nil as the last item added? Used to nil in Lisp not showing up in the list... |
| 13:46 | triyo | edge case that checks on nil |
| 13:47 | Saturnation | triyo, not sure what you mean? |
| 13:48 | raek | Saturnation: (1 2 3 nil) and (1 2 3 . nil) are not the same thing[using classical lisp syntax here, not clojure] |
| 13:48 | Blackfoot | Saturnation: your base case should be the empty list, () |
| 13:49 | Saturnation | Blackfoot, Ah, that's what I'm looking for, thanks |
| 13:49 | Saturnation | nil is not () :) |
| 13:50 | triyo | oops I meant *base-case* |
| 13:50 | triyo | *blush* |
| 13:50 | Blackfoot | we're all learning from each other :) |
| 13:50 | Saturnation | actually, the escape from the loop is () not nil |
| 13:51 | dnolen | ,(empty? ()) |
| 13:51 | clojurebot | true |
| 13:51 | dnolen | Saturnation: ? |
| 13:51 | Saturnation | the culture and learning |
| 13:52 | Saturnation | not the semantics :) |
| 13:53 | triyo | We just have to insure it never becomes main stream and it will be the best language ever ;) |
| 13:55 | Saturnation | recur keeps slapping me about |
| 13:56 | triyo | why? UnsupportedOperationException? :) |
| 13:56 | Saturnation | shame it never praises me when I finally get the tail position correct |
| 13:56 | triyo | Hehe thought you'd say that |
| 13:57 | Saturnation | yells ever time I get it wrong, but no thanks for getting it right. |
| 13:58 | triyo | hehe, when you get it right, then you have to worry about the base case else you'll drive you're vm to a grinding halt. :) |
| 13:58 | Saturnation | I'm pretty good about the base case, hence the questions about nil and () :) |
| 14:02 | triyo | Anyone know if ClojureScript supports try/catch at the moment? |
| 14:03 | triyo | I see "try" form is identical to clojure "try" however what about catch. |
| 14:03 | triyo | One can't catch Exception of course |
| 14:08 | ejackson | triyo - yeah, easy to forget its in a different VM |
| 14:09 | dnolen | triyo: catch Error I would htink. |
| 14:09 | triyo | dnolen: I'll try that, thanks |
| 14:15 | triyo | ejackson: yup, however, I think this requires nothing more than an initial conscious thought as to which space you're working in. Its interesting as this doesn't come in to play in traditional thought: javascript for frontend and clojure for backend. |
| 14:34 | triyo | Another cljs gotcha for me. I have a configuration clj file that holds the config settings for my web application. So I thought, great, I have a (def DEBUG true), I'll just do a quick :require in my cljs. Fail. |
| 14:35 | triyo | On that thought, is there a neat way to do this? |
| 14:38 | triyo | Reason this is useful is, say for instance I have a bunch of ajax calls to public services such as twitter, and google apps. In dev mode, I don't want those calls to be made on each http request. So it would be cool if at the web app level, in my config.clj, I can set my DEBUG to true and have the cljs code automatically switch to using the mock maps as data instead of making real call to those services. |
| 14:43 | MasseR | What does the "#'foo" syntax mean? |
| 14:44 | mjreed | Ok, really dumb question. Trying to use the string API in 1.2 (JRE 1.6.0). According to the doc at http://clojure.github.com/clojure/clojure.string-api.html, I should do that with "(ns your.namespace.here (:require '[clojure.string :as str]))", but that gives me a "java.lang.Exception: lib names inside prefix lists must not contain periods". |
| 14:45 | raek | mjreed: remove the qupte |
| 14:45 | raek | *quote |
| 14:45 | raek | is the quote there in the docs? if so, it's a typo |
| 14:45 | mjreed | yes, it's there in the docs. |
| 14:46 | raek | MasseR: it is a short form for (var foo), which is a special form that returns the variable object for the global "foo" |
| 14:46 | raek | (the thing whose content changes when you use 'def' or 'binding') |
| 14:46 | MasseR | Ah mutable? |
| 14:47 | raek | for fixing bugs, yes |
| 14:47 | raek | with binding you get a temprarily mutable version, which is local to the thread |
| 14:47 | raek | you should never call def at runtime other than when you fix bugs |
| 14:48 | mjreed | yup, much better. thought I'd tried it quoteless, but apparently not. Thanks! |
| 14:48 | MasseR | So I suppose jetty requires it for some reason. (Still getting used to documentation) |
| 14:49 | raek | ah, there you use it to get a layer of indirection |
| 14:49 | raek | if you change the web app handler function, you don't need to restart the server |
| 14:50 | raek | if you started the server and gave it foo instead of #'foo, you get the current value of foo (a function) |
| 14:50 | raek | and when you reevaluate the def form for the handler, ther server won't get the new version |
| 14:50 | raek | #'foo solves this problem |
| 14:51 | MasseR | Hmm... By intuition, a "deeper" value? |
| 14:51 | raek | (also calling a var as a function results in the function that the var points to being called) |
| 14:57 | wall | hello |
| 14:58 | leonid_ | hi |
| 14:58 | wall | i need help on drawing primitive circle in clojure using swt library |
| 14:59 | wall | can help me? |
| 14:59 | leonid_ | sorry I'm a novoce |
| 14:59 | leonid_ | novice* |
| 15:00 | wall | or send link to project what do it |
| 15:00 | wall | i'm novice so :) |
| 15:05 | Pupeno | At work we have hackdays, when we can work in whatever we want for a day… even contributing to an open source project. I'd like to do something Clojure related, to learn and contribute back… any recommendations? |
| 15:38 | imade | hello, can't I use (filter Character/isUpperCase "Hello World") to get \H and \W ? |
| 15:39 | lobotomy | try (filter #(Character/isUpperCase %) "Hello World") |
| 15:39 | imade | yeah that works |
| 15:39 | lobotomy | for some reason static methods don't work directly, don't know details though |
| 15:41 | imade | k so I get (\H \W) and one way to conwert it bact to str would be to use (apply str (..chars...)), but is there any more idiomatic way or how you usually do it |
| 15:46 | Scriptor | imade: I think apply is the idiomatic way |
| 15:47 | imade | the problem with apply is that 4clojure doesn't allow it, I get a privileged exception |
| 15:47 | Scriptor | ah, which problem is this? |
| 15:48 | imade | http://www.4clojure.com/problem/29 |
| 15:48 | imade | (apply str #(filter (fn [c] (Character/isUpperCase c)) %)) |
| 15:49 | imade | oh might be my bad |
| 15:49 | imade | yup |
| 15:49 | imade | works now |
| 15:49 | imade | #(apply ...) |
| 15:50 | imade | didn't notice it until pasted here |
| 15:51 | grant__ | so when i'm using clojure with slime/swank, making a gui like thing, i can't get the REPL to work unless i wrap the entire program in a (future), but i can't get error output unless i DONT wrap it in a future. |
| 15:51 | grant__ | i want the best of both worlds - is that possible? |
| 15:52 | imade | are you using windows? I remember there was something similar with windows, repl, and swin |
| 15:52 | grant__ | nah, im on ubuntu :/ |
| 15:54 | imade | yeah I have only written little bit swing gui with clojure and repl so that every time I change smth I relaunch it, but probably that's not how you want to do it |
| 15:54 | grant__ | nope :) |
| 15:54 | grant__ | the future is an almost perfect solution, but it's kinda aggravating to have silent errors |
| 15:54 | imade | maybe a simple logger file? |
| 15:55 | grant__ | how would i go about getting the error logs? |
| 15:56 | imade | I think simple logging solution like log4j would produce nice stack traces also |
| 15:56 | grant__ | i mean, when i do future, the errors seem to completely disappear |
| 15:56 | grant__ | i have no idea where they go |
| 16:00 | grant__ | oh, i figured it out! i dont need a future after all |
| 16:00 | imade | actually, I haven't tried it myself, but there's this thing called SwingUtilities.invokeLater when developing with repl |
| 16:00 | imade | oh, so how you gonna do_ |
| 16:01 | imade | stuart sierra has many blog posts about swing and clojure |
| 16:55 | manutter | Hey all, I'm having a problem with agents |
| 16:55 | manutter | https://gist.github.com/1117190 |
| 16:55 | manutter | Basically, it looks like neither "send" nor "send-off" ever actually does anything. |
| 16:56 | manutter | Am I missing a step somewhere? |
| 16:58 | Blackfoot | manutter: are you using any other agents? |
| 16:58 | manutter | No, started a fresh repl and did the bare-bones stuff in the gist |
| 16:58 | gfrlog | when I do that in my repl it is 200 immediately |
| 16:58 | gfrlog | manutter: have you checked your repl for demons? |
| 16:58 | manutter | Ok, I've got something hosed locally then. |
| 16:58 | gfrlog | ghosts? |
| 16:58 | Blackfoot | yea, same here. perhaps tere's a problem starting the agent thread pool |
| 16:59 | hiredman | you need to upgrade lein and swank-clojure |
| 16:59 | manutter | Yeah, it's weird, I'm not getting errors or anything, it's just not happening |
| 16:59 | manutter | hiredman: hmm, I think I did that recently, let me try again |
| 17:10 | manutter | Ok, still kinda weird: did lein upgrade, did lein plugin install swank-clojure "1.3.1", did lein new agent-test, ran emacs, did clojure-jack-in, |
| 17:10 | manutter | result is "agents don't work" |
| 17:10 | manutter | lein repl gives me agents that do work. |
| 17:10 | hiredman | you need 1.3.2 |
| 17:11 | manutter | Ah, there's been an upgrade to that too? Cool, let me try that |
| 17:11 | manutter | Do I need to uninstall 1.3.1? |
| 17:11 | hiredman | yes |
| 17:11 | manutter | thanks for the info |
| 17:12 | manutter | Oh, lookee lookee, I seem to have swank-clojure-1.4.0-SNAPSHOT.jar in there too. |
| 17:13 | hiredman | if it is a recent snapshot then that is fine |
| 17:13 | manutter | Ok, I'll try cleaning it out anyway just to reduce the number of variables. |
| 17:15 | manutter | I'll be danged, still the same thing |
| 17:16 | manutter | Is it strange that there's a swank-clojure executable in ~/lein/bin? |
| 17:16 | hiredman | does your project pull in an old swank-clojure? |
| 17:16 | manutter | It shouldn't, I just made a brand new project just for testing this. |
| 17:18 | manutter | That swank-clojure executable has a create date of a couple minutes ago, like when I installed the plugin. |
| 17:18 | lucca | which versions of slime and what package works? I've tried... a few, and they seem to die with protocol errors mostly |
| 17:19 | manutter | well, I gotta go afk, but I'll leave my window open in case anybody has any ideas. |
| 17:51 | amalloy | lobotomy: Character/isUpperCase isn't a function, so you can't use it as a function. it's a java method, so you have to wrap it in a function |
| 17:51 | lobotomy | how reasonable :) |
| 17:57 | Blackfoot | is there a maven package for cljs? ie a lein dependency? |
| 18:07 | amalloy | Blackfoot: i think cljs is still in the hunter-gatherer phase |
| 18:10 | Blackfoot | looks like it uses clojure 1.3 beta. what's the state of that version with other libraries? on scale of completely broken to mostly working? |
| 18:45 | Frozenlock | Greetings gentlemen, is there any java introduction for someone with lisp experience? I've already found http://copperthoughts.com/p/clojurists-guide-to-java/ , unfortunatly it isn't enough for my lack of knowledge. :( |
| 18:48 | tauntaun | I can't defrecord, strangely. Is a special require necessary? |
| 18:54 | amalloy | tauntaun: no |
| 18:54 | amalloy | but "i can't defrecord" isn't easily debuggable. gist up some code, what you think should happen, and what actually happens |
| 18:56 | tauntaun | Here's something from my REPL (and please bear in mind I'm new to Clojure): |
| 18:56 | tauntaun | user=> (doc defrecord) |
| 18:56 | tauntaun | java.lang.Exception: Unable to resolve var: defrecord in this context (NO_SOURCE_FILE:5) |
| 18:56 | leonid_ | ,(doc defrecord) |
| 18:56 | clojurebot | "([name [& fields] & opts+specs]); Alpha - subject to change (defrecord name [fields*] options* specs*) Currently there are no options. Each spec consists of a protocol or interface name followed by zero or more method bodies: protocol-or-interface-or-Object (methodName [args*] body)* Dynamically generates compiled bytecode for class with the given name, in a package with the same name as the curr... |
| 18:56 | tauntaun | That's nice. |
| 18:57 | hiredman | tauntaun: what version of clojure? |
| 18:57 | tauntaun | Now, am I forgetting to require a namespace? Include a classpath? |
| 18:57 | amalloy | tauntaun: did you install clojure through your system package manager or something? 1.1 doesn't have defrecord |
| 18:57 | leonid_ | !help clojurebot |
| 18:57 | raek | tauntaun: sounds like you are running a version of clojure 1.1 or older |
| 18:57 | leonid_ | !help |
| 18:57 | leonid_ | would like to read a manual for the bot |
| 18:57 | hiredman | ~help |
| 18:57 | clojurebot | http://www.khanacademy.org/ |
| 18:58 | tauntaun | Yikes, 1.0.0. |
| 18:58 | tauntaun | Yes, it was through aptitude. |
| 18:58 | amalloy | murder it |
| 18:58 | raek | tauntaun: specify [org.clojure/clojure 1.2.1] in your project.clj |
| 18:59 | amalloy | raek: i doubt he's using lein yet |
| 18:59 | raek | eh, "1.2.1" instead of 1.2.1 |
| 18:59 | raek | amalloy: yeah, I'm waiting for the "where is that file" question :-) |
| 18:59 | raek | ~lein |
| 18:59 | clojurebot | lein is http://github.com/technomancy/leiningen |
| 19:00 | raek | tauntaun: use Leiningen or Cake |
| 19:00 | amalloy | $google technomancy package leiningen debian |
| 19:00 | lazybot | [technomancy/leiningen - GitHub] https://github.com/technomancy/leiningen |
| 19:00 | amalloy | feh |
| 19:00 | amalloy | he wrote a thing recently about how package managers are great for users but not really for developers |
| 19:01 | technomancy | fwiw the next ubuntu will have 1.2.1 |
| 19:01 | technomancy | but yeah, still really not much fun |
| 19:01 | hiredman | which will be outdated |
| 19:02 | technomancy | hiredman: you really think clojure 1.3 will be released before the next ubuntu? |
| 19:02 | hiredman | when is the next ubuntu? |
| 19:02 | amalloy | october, right? |
| 19:03 | hiredman | 1.3 has been in "beta" for at least a month now, yes? |
| 19:23 | ibdknox_ | any thoughts on how we should setup managing clojurescript dependencies? |
| 19:23 | ibdknox_ | a plugin to lein maybe? |
| 21:00 | scottj | anyone have a really short solution to http://www.4clojure.com/problem/53 ? my solution was one of the longer ones and I'm curious to see how this could be done better |
| 21:27 | sritchie | amalloy, I'm on chrome, and for some reason can't enter spaces on any of the 4clojure problems |
| 21:27 | sritchie | any idea what's going on? |
| 21:28 | amalloy | sritchie: maybe ace (the code-editor box javascipr library we use) is incompatible with your version of something? |
| 21:29 | sritchie | probably that's it, I'm on 14.0.835.8 on the dev channel |
| 21:30 | amalloy | sritchie: we use a plain <input> box if you have javascript disabled, but i don't think we have a way for you to say "use <input> anyway" |
| 21:34 | ibdknox_ | scottj: my naive first attempt https://gist.github.com/1117436 |
| 21:37 | scottj | ibdknox_: yeah that's what I did with style diffs, if you submitted yours what score did it get? |
| 21:37 | leonid_ | i hope 4clojure has some sort of cheat-proof system |
| 21:39 | ibdknox_ | how does one see your score? |
| 21:39 | leonid_ | for example, I hold the shortest solution for Last Element ( http://4clojure.com/problem/19 ) with rand-nth |
| 21:39 | scottj | leonid_: ha, how many times did you submit that? |
| 21:39 | leonid_ | a lot of itmes |
| 21:40 | ibdknox_ | scottj: 290 |
| 21:40 | leonid_ | who is in charge of main 4clojure dev? |
| 21:40 | leonid_ | i can suggest something |
| 21:40 | amalloy | haha rand-nth. i love that function |
| 21:41 | scottj | ibdknox_: mine's 331, see the graph how there's one at 50, some at 100,150 |
| 21:41 | ibdknox_ | hm |
| 21:42 | ibdknox_ | there must be some magical function that does most of the work for you |
| 21:42 | amalloy | probably not |
| 21:42 | amalloy | someone just submitted {[7 6 5 4] [] ...} as their solution |
| 21:43 | hiredman | thats what you get for showing the tests |
| 21:43 | leonid_ | amalloy: could you filter rand-related functions? |
| 21:43 | amalloy | hiredman: indeed. but if we don't show the tests, we get hella confused complaints from lots of users |
| 21:43 | hiredman | do the tests actually check if the first sequence of N is returned |
| 21:43 | amalloy | so we decided to show them all. if people want to "cheat", they're only cheating themselves |
| 21:43 | clojurebot | max people is 317 |
| 21:44 | leonid_ | amalloy: my opinion is a little different. a good problem is where cheat solutions are non-optimum |
| 21:44 | leonid_ | suboptimal* |
| 21:45 | amalloy | leonid_: feel free to write four times as many test cases for each problem |
| 21:45 | technomancy | unless cheating is considered a hack in and of itself |
| 21:45 | leonid_ | also, problems like this should be revised: http://4clojure.com/problem/86 |
| 21:45 | hiredman | amalloy: have you seen https://github.com/clojure/test.generative ? |
| 21:45 | leonid_ | instead of actually calculating happy numbers, one can just write < 4 |
| 21:46 | amalloy | hiredman: i haven't. something like haskell's lazytest? |
| 21:46 | amalloy | er |
| 21:46 | amalloy | whatever it's called |
| 21:46 | amalloy | i don't actually use any haskell but they have this cool thing |
| 21:46 | hiredman | right |
| 21:46 | technomancy | quickcheck? |
| 21:46 | hiredman | so maybe some combination of "pass shown tests + pass generated tests" |
| 21:46 | amalloy | leonid_: writing page upon page of test code is boring, and we're not here to give out grades; we're here to help people learn clojure |
| 21:46 | Hodapp | Sometimes, people who cheat aren't only cheating themselves; that's just something they like to tell third graders |
| 21:47 | Hodapp | Then again, I'm in the US, where we ostensibly value honesty but often idolize dishonesty... |
| 21:48 | hiredman | Hodapp: how so? |
| 21:48 | Hodapp | hiredman: How so to which? |
| 21:49 | hiredman | Hodapp: pick |
| 21:50 | leonid_ | amalloy: it never hurts to keep the system cheat-proof.. I would help after I'm more experienced with clojure |
| 21:51 | amalloy | great. we certainly accept patches |
| 21:51 | Hodapp | hiredman: Examine the news and look at the shining praise that is lumped upon companies, businessmen, and sometimes politicians who have been substantially less than honest and fair in their conduct. |
| 21:52 | leonid_ | filtering rand functions, having a form of test cases like (= (map ___ [<a list of inputs>]) [<a list of expected outputs>]) would discourage cheating also |
| 21:52 | Hodapp | hiredman: They'll crucify the same sometimes, but just as often they'll paint them as heroes of capitalism and self-reliance. |
| 21:53 | hiredman | Hodapp: as you are discussing america, lets put this on an american footing and saying the burden of proof rests on the prosecution, so please point out specific examples |
| 21:53 | hiredman | say |
| 21:54 | Hodapp | hiredman: Prosecution is irrelevant. Law does not define honesty and fairness. |
| 21:55 | scottj | I think it's most common that they're praised despite being dishonest, not because of their dishonesty. so not sure the dishonesty is being idolized. |
| 21:56 | hiredman | Hodapp: please forgive me, I did not mean to imply this is a court of law, just suggesting that if you make accusations that you should be able to cite evidence instead of wave your hands at someone and say "go read the news" |
| 21:56 | Hodapp | scottj: I was speaking a little figuratively there. I didn't mean it was the dishonesty itself, but rather the person in possession of it. |
| 21:56 | scottj | (my response may be a distinction without a difference) |
| 21:56 | Hodapp | scottj: It was plenty relevant. |
| 21:57 | leonid_ | amalloy: just curious, if test cases of a problem are revised, what happens if one's code that used to work before no longer does? |
| 21:59 | amalloy | leonid_: you still have credit, but if you submit again the tests fail. just like if you submit something right and then something wrong |
| 21:59 | amalloy | so there are a few people whose "recorded" solutions fail |
| 21:59 | technomancy | if you think idolizing dishonest politicians is an American thing, you probably haven't seen much of the rest of the world. |
| 22:01 | leonid_ | amalloy: that doesn't seem right, but I can see how fixing that is difficult |
| 22:01 | scottj | Hodapp: Zuckerberg is the first example that comes to my mind, but it's not clear to me that his reception in America is different than elsewhere, or that he's not disdained commensurate to his original sin. |
| 22:02 | leonid_ | amalloy: to be clear, I'm not try to diss 4clojure or anything.. just throwing some ideas that might help |
| 22:02 | leonid_ | trying* |
| 22:02 | Hodapp | technomancy: I wasn't implying that it wasn't elsewhere, just that it is here. |
| 22:02 | scottj | Hodapp: if you think this has changed over time I'd be curious if you have a hypothesis why |
| 22:03 | Hodapp | scottj: That'd require a deeper examination of journalism over time than I care to take the time to do. |
| 22:03 | Hodapp | I'd rather drink beer and learn Clojure. |
| 22:07 | amalloy | i'm really not interested in writing strict anti-"cheating" code for 4clojure. if a magic fairy (thanks, hiredman) gave us a patch that made "lame" solutions never pass the tests and didn't confuse people trying to learn, i'd accept it. but i'm not going to write it myself, and i'd rather my magic fairies spent their time adding some cool new feature that makes users enjoy it more or learn more |
| 22:07 | scottj | I rarely find a person who holds a kantian position on honesty, so to me it's no surprise that people are praised despite being dishonest. |
| 22:08 | hiredman | I really should read emails outloud before I send them |
| 22:08 | Hodapp | scottj: It's not so much praise despite being dishonest that I'm talking about, but having achieved some status with the help of dishonesty. |
| 22:09 | technomancy | clojurebot: who's the magic fairy? |
| 22:09 | clojurebot | Gabh mo leithscéal? |
| 22:09 | amalloy | he only speaks fae |
| 22:11 | Scriptor | the language of leprechauns |
| 22:14 | leonid_ | alright just got a legit solution for Last Element with 9 letters |
| 22:17 | aamar | 9! I'm still at 20. |
| 22:19 | amalloy | 9 is pretty incredible |
| 22:19 | Scriptor | are we counting whitespace? |
| 22:19 | leonid_ | no, only non-whitespaces |
| 22:20 | aamar | then I'm at 14. Hm... |
| 22:28 | leonid_ | now at 8 |
| 22:30 | jdoliner | hi, could anyone help me with an installation problem I'm having? |
| 22:31 | Scriptor | hmm, shortest I'm getting is 13 |
| 22:31 | Scriptor | jdoliner: ask, don't ask to ask :) |
| 22:33 | jdoliner | I'm getting the following error: https://gist.github.com/1117481 |
| 22:33 | jdoliner | on ubuntu 11.04 |
| 22:33 | jdoliner | with clojure 1.2 |
| 22:33 | hiredman | what jdk? |
| 22:33 | jdoliner | I've found some other people with the same problem online |
| 22:34 | hiredman | what jdk? |
| 22:34 | jdoliner | gcj-4.4 |
| 22:35 | hiredman | thats not java |
| 22:35 | hiredman | install a real java and try again |
| 22:35 | jdoliner | is sun-java6-jdk a real one? |
| 22:35 | hiredman | yes |
| 22:36 | jdoliner | k |
| 22:36 | hiredman | mostly anything besides gcj is real |
| 22:36 | hiredman | gcj is (well intentioned) junk |
| 22:36 | jdoliner | I see |
| 22:39 | technomancy | it sounds like gcj might be dropped for non-mips arches |
| 22:40 | hiredman | and mips may be better served with something like jamvm and jikes |
| 22:43 | hiredman | huh, I didn't know clojure had a printf |
| 22:44 | jdoliner | hiredman: thanks that fixed it |
| 22:44 | amalloy | hiredman: it inherited the one that java got in 1.5 |
| 22:45 | hiredman | amalloy: no, it's (print (apply format ...)) |
| 22:47 | amalloy | hiredman: well, yes, but format just shells out to String/format, which was added in 1.5 |
| 22:48 | hiredman | amalloy: I have been aware of format for a long time, I didn't realize that was a fn that did printing and formating in one |
| 22:49 | amalloy | fair enough. i'm not sure what point i was trying to make anyway |
| 23:02 | jlf | hmm, dabbrev-expand (M-/) is broken when trying to complete a symbol that begins at the start of a line at the repl. is that a known issue? e.g. doing (def foo 123) and M-/ at user> fo results in `dabbrev-expand: No dynamic expansion for `user> fo' found' |
| 23:09 | scottj | jlf: hippie-expand works for me |
| 23:15 | jlf | yeah, here too. i'm guessing there's a missing word boundary text property or somesuch that is confusing dabbrev-expand. |
| 23:34 | phenom_ | any idea why defrecords don't have to impement all functions if implenting a protocol? |
| 23:37 | leonid_ | ,(take 5 (range)) |
| 23:37 | clojurebot | (0 1 2 3 4) |