2010-05-24
| 00:02 | rdsr | rava: in my emacs/swank setup, if there's a compilation problem, my cursor is placed at the point where the problem is |
| 00:04 | rava | is that a config option? |
| 00:04 | rdsr | I don't doing any configs |
| 00:05 | rdsr | *remember* |
| 00:05 | rava | how are you compiling? C-c C-c ? or slime-compile-file? |
| 00:05 | rava | be back in a little while |
| 00:06 | DeusExPikachu | why does the builtin classloader change in the repl after each line? So for example, (.deref (clojure.lang.Compiler/LOADER)) is called during different lines in a repl and outputs different classloaders, but when repeated in a dotimes loop is refers to the same value? |
| 00:06 | DeusExPikachu | s/value?/object? |
| 00:08 | rdsr | C-c CK |
| 00:08 | rdsr | C-c C-k |
| 00:12 | rdsr | rava: It doesn't seem to place the cursor if the error is in a different file/ns |
| 00:13 | rdsr | rava: just prints the line number in the exception mesg |
| 00:36 | rava | bk, sorry |
| 00:38 | rava | yah, not seeing it run in repl from a yank |
| 00:45 | rava | its annoying because it's a wrong args exception, and by looking at doc strings everything seems good. |
| 00:49 | johnmn3 | I'm having such a hard time getting swing to swing |
| 01:12 | remleduff | What's the problem johnmnmn? |
| 01:56 | empt | help needed. failed to install labrepl in Netbeans/Eclipse since some error getting incanter, anyone else has encountered such a problem and any suggestions to overcome? |
| 02:02 | remleduff | empt: What error? Something about a var already being defined? |
| 02:04 | empt | I recall it as cant get incanter downloaded when building labrepl in netbeans |
| 02:04 | empt | now I try to do it again to copy the very error |
| 02:06 | empt | [ERROR]Transitive dependency resolution for scope: compile has failed for your project. |
| 02:06 | empt | [ERROR]Error message: Failed to resolve artifact, possibly due to a repository list that is not appropriately equipped for this artifact's metadata. |
| 02:06 | empt | [ERROR] org.incanter:incanter-full:jar:1.2.0-20100327.041516-10 |
| 02:06 | empt | [ERROR]from the specified remote repositories: |
| 02:06 | empt | [ERROR] central (http://repo1.maven.org/maven2), |
| 02:06 | empt | [ERROR] clojars (http://clojars.org/repo/), |
| 02:06 | empt | [ERROR] incanter (http://repo.incanter.org), |
| 02:06 | empt | [ERROR] clojure-snapshots (http://build.clojure.org/snapshots), |
| 02:06 | empt | [ERROR] clojure (http://build.clojure.org/releases), |
| 02:06 | empt | [ERROR] clojure-releases (http://build.clojure.org/releases) |
| 02:06 | empt | [ERROR]Path to dependency: |
| 02:06 | unfo- | >_> |
| 02:06 | empt | [ERROR] 1) labrepl:labrepl:jar:0.0.1 |
| 02:06 | empt | [ERROR] 2) org.incanter:incanter-full:jar:1.2.0-SNAPSHOT |
| 02:06 | empt | [ERROR]Group-Id: labrepl |
| 02:06 | empt | [ERROR]Artifact-Id: labrepl |
| 02:06 | empt | [ERROR]Version: 0.0.1 |
| 02:06 | unfo- | empt, please use paste services |
| 02:06 | empt | [ERROR]From file: /home/empt/NetBeansProjects/RelevanceLabRepl/pom.xml |
| 02:06 | empt | ------------------------------------------------------------------------ |
| 02:06 | remleduff | Please don't paste into the channel, put it in a gist or paste |
| 02:06 | empt | For more information, run with the -e flag |
| 02:06 | empt | sorry |
| 02:06 | empt | yes |
| 02:07 | remleduff | There's no such incanter version as 1.2.0-SNAPSHOT on clojars |
| 02:08 | remleduff | http://clojars.org/repo/incanter/incanter/ |
| 02:08 | empt | so? |
| 02:09 | empt | I am using the origin without modifying; and should I modify some where to get it work? |
| 02:10 | remleduff | Oh, incanter in labrepl is coming from repo.incanter.org |
| 02:11 | remleduff | Maybe there's something wrong with that server or labrepl is using a bad version |
| 02:13 | empt | ok, I'm too new to understand the process but it seems I would better wait for them to have the things fixed |
| 02:13 | remleduff | Actually, that seems to work fine for me |
| 02:14 | empt | bad luck of me :) |
| 02:14 | remleduff | Can you reach repo.incanter.org ? |
| 02:14 | empt | ok I will try it |
| 02:16 | empt | my god that's the issue. the mad ccp gfw seems to have blocked the site here in China |
| 02:17 | empt | now I'll try to enable the proxy and retry |
| 02:19 | empt | and it's available now from firefox after proxy turned on so I'll retry it |
| 02:20 | remleduff | You may need to delete your <HOME>/.m2/repository/org/incanter subdirectories to make sure maven actually retries. Sometimes it will cache a failure and stop trying |
| 02:21 | empt | thank you I was just about to ask this :) |
| 02:24 | empt | and a 'clean and build ' is sufficient after deleting? |
| 03:33 | sjuxax | Hey guys. I am new to Clojure and though I am somewhat familiar with Lisp, I haven't done much hard work in it, which will be apparent by the time I ask my question. I just want to be clear on this. The parentheses represent a block to evaluate, right? |
| 03:34 | sjuxax | So, like (filter odd? (nums)) happens because () means eval and first thing is function name, next things are arguments, and odd? doesn't need any extra eval, but I want the nums eval'd because I really want odd? to receive the sequence I had previously defined as "nums", right? |
| 03:34 | sjuxax | I just think things would be easier to grok if I understood the parentheses usage : ) |
| 03:36 | mmarczyk | parens cause the Lisp reader to construct a list, which is then passed on to eval (at a conceptual level, anyway) |
| 03:36 | mmarczyk | if the list is non-empty, eval takes a look at the first element of the list |
| 03:37 | mmarczyk | if it is a symbol naming a special form, the whole thing is handed off to a "handler" for that special form |
| 03:37 | mmarczyk | (e.g. if, fn) |
| 03:37 | mmarczyk | if it is some other symbol, it is resolved in the current context |
| 03:38 | mmarczyk | if it happens to name a macro, the macro function is invoked and whatever it returns is fed back to eval |
| 03:38 | mmarczyk | otherwise we either have a symbol naming a Var which holds a function or something which is not a symbol |
| 03:38 | mmarczyk | either way, the expression only makes sense if that thing evaluates to a function |
| 03:39 | mmarczyk | once eval has the function in hand, it proceeds to evaluate all arguments in turn, then passes them to the function |
| 03:39 | mmarczyk | so, in particular, the "odd?" in your example is evaluated -- the result happens to be a function and that function is passed to filter as its first argument |
| 03:42 | mmarczyk | also, functions need not be specified by name when in the operator position -- e.g. ((fn [x y] (* x (+ x y))) 3 5) is a perfectly valid expression; macros and special forms do |
| 04:07 | sjuxax | thanks mmarczyk |
| 04:31 | sjuxax | The difference between defn and fn is that fn is only used for anonymous functions, right? |
| 04:31 | sjuxax | Otherwise all the same syntax etc? |
| 04:32 | mmarczyk | well, fn forms actually evaluate to functions |
| 04:32 | mmarczyk | so they can be used in the operator position in expressions etc. |
| 04:32 | mmarczyk | defn = def + fn |
| 04:32 | mmarczyk | completely different purpose, evaluates to a Var |
| 04:32 | mmarczyk | but yeah, the syntax is mostly the same |
| 08:22 | angerman | Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: No matching field found: setFaceCountAndAttributes for class de.jreality.scene.IndexedFaceSet |
| 08:22 | angerman | does that make any sense for http://www3.math.tu-berlin.de/jreality/api/de/jreality/scene/IndexedFaceSet.html |
| 08:22 | angerman | ? |
| 08:24 | spariev_ | angerman: can you show code that invokes setFaceCountAndAttributes ? |
| 08:25 | hoeck | there is no such _field_ in that class |
| 08:25 | angerman | (.. cmp getGeometry setFaceCountAndAttributes Attribute/INDICES (DoubleArrayArray$Array. (swap-faces))) |
| 08:25 | angerman | hoeck: Ohh that's right. |
| 08:25 | angerman | Hmm :/ |
| 08:26 | angerman | yea. -> and -?-> are nice :D |
| 08:26 | hoeck | is .. the same as -> but only for method-invokation? |
| 08:26 | angerman | though I'm always getting confused with -> |
| 08:27 | angerman | hmm I should use baces |
| 08:27 | mmarczyk | hoeck: yup |
| 08:28 | hoeck | (-> cmp .getGeometry (.setFaceCountAndAttributes Attribute/INDICES) (DoubleArrayArray$Array. (swap-faces))) ? |
| 08:28 | mmarczyk | there's a syntactic difference in that with .. you don't prefix method names with dots |
| 08:28 | hoeck | ah, yes |
| 08:28 | hoeck | sorry, maybe you wanted this: (-> cmp .getGeometry (.setFaceCountAndAttributes Attribute/INDICES (DoubleArrayArray$Array. (swap-faces)))) |
| 08:29 | hoeck | angerman: because in your expression, setFaceCountAttrs is called without any args, this might have caused the "no such field" error |
| 08:30 | mmarczyk | apparently a lot of people have been calling .. non-idiomatic lately, with -> the preferred replacement... that's too bad, IMO, as I prefer the feel of .. for method chains |
| 08:31 | angerman | hoeck: yep, got confused in the .. syntax |
| 08:31 | chouser | mmarczyk: rhickey stands by .. last I knew |
| 08:31 | mmarczyk | chouser: really happy to hear that, thanks :-) |
| 08:31 | chouser | I tried to talk him out of it, but failed. :-) |
| 08:32 | mmarczyk | good. :-P |
| 08:32 | mmarczyk | ;-) |
| 08:34 | spariev_ | so, with .. it would be (.. cmp getGeometry |
| 08:34 | spariev_ | (setFaceCountAndAttributes Attribute/INDICES (DoubleArrayArray$Array. (swap-faces)))) |
| 08:36 | hoeck | spariev_: from what I've learned right now, right :) |
| 08:37 | angerman | Hm. This whole jreality project wished to have immutable datastructures |
| 08:37 | angerman | and bolted them onto java ... |
| 08:37 | angerman | Hmm.... |
| 08:44 | rsh | I want to call a string named some function as the function itself... how would you do it? |
| 08:46 | Chousuke | convert to a symbol, resolve the symbol to a var, and call that. |
| 08:47 | rsh | calling (var (symbol "+")) gives me error PersistentList can't be cast to Symbol |
| 08:47 | Chousuke | var is a special form |
| 08:47 | Chousuke | you want (resolve (symbol "+")) |
| 08:48 | Chousuke | which either returns nil, a Class instance, or a Var |
| 08:48 | rsh | works great, thanks |
| 08:50 | Licenser | mmarczyk: I looked at your function problem is it needs to match the beginning of the string, but I'll try to make it a two way test |
| 08:51 | rsenior | when creating a new instance of a defrecord, where the defrecord exists in another namespace, do you always have to fully qualify it? |
| 08:52 | rsenior | i.e. even when I'm already pulling in all the items from that namespace via a use |
| 08:53 | mmarczyk | Licenser: you mean clj-id? |
| 08:53 | mmarczyk | ? |
| 08:54 | mmarczyk | I thought it did match on bos |
| 08:54 | Licenser | yap |
| 08:55 | mmarczyk | hm :-) |
| 08:55 | mmarczyk | not sure I understand then |
| 08:57 | mmarczyk | ohhh, ok, I think I got it :-P |
| 08:57 | mmarczyk | sorry for the delay ;-) |
| 08:58 | mmarczyk | well |
| 08:58 | mmarczyk | there's the option of using the find method on the Matcher |
| 08:59 | hoeck | rsenior: yes, because you refer to the defrecord via its classname, you will have to import it if you do not want to fully qualify it |
| 09:00 | mmarczyk | and then use .start() to see if the match started at the given position |
| 09:00 | mmarczyk | then you could drop the ^ from the regex |
| 09:01 | mmarczyk | (find takes an int to indicate where it's supposed to start matching) |
| 09:01 | rsenior | hoeck: thanks, that's what I thought |
| 09:03 | Licenser | mmarczyk: it's not really faster |
| 09:04 | mmarczyk | Licenser: yeah, I guess the more complicated this becomes, the less likely it is to be of any benefit :-( |
| 09:05 | Licenser | *nods* |
| 09:05 | mmarczyk | back to optimising regexes then |
| 09:05 | mmarczyk | oh bother. |
| 09:10 | Licenser | hmm mmarczyk it seems it it takes more idents then the original regexp |
| 09:10 | mmarczyk | that's possible, I might not have been all that thourough with testing |
| 09:10 | mmarczyk | any examples? |
| 09:11 | Licenser | no just the output of scanning core.clj |
| 09:12 | Licenser | 83418 tokens with your code 40663 with mine |
| 09:13 | Licenser | ah there we go |
| 09:13 | Licenser | okay there wasa $ in the end which is wrong in my implementation |
| 09:13 | Licenser | sadly still slower :( |
| 09:14 | Licenser | http://gist.github.com/411839 is what I made out of it |
| 09:15 | Licenser | but I found out why it was 10 times slower :P |
| 09:16 | mmarczyk | oh? :-) |
| 09:17 | Licenser | yea bug infront of the compulter |
| 09:17 | mmarczyk | :-) |
| 09:17 | mmarczyk | I wonder if this would be faster with the let moved inside the function |
| 09:17 | Licenser | see when I read 250ms for 40k tokens |
| 09:17 | mmarczyk | hm :-) |
| 09:18 | Licenser | I thought okay so (/ 40000 2.5) |
| 09:18 | Licenser | ~ 17k tokens per second |
| 09:18 | clojurebot | Titim gan éirí ort. |
| 09:18 | mmarczyk | (.. valid-chars (matcher s) (find idx)) isn't faster? |
| 09:18 | Licenser | I'm not entirely sure what that does |
| 09:19 | Licenser | oh wait 1.2 has no re- prefixes any more right? |
| 09:20 | Licenser | but find can't take an idex |
| 09:20 | mmarczyk | find here is a method on java.util.regex.Matcher |
| 09:21 | mmarczyk | c.c.string has funny names in 1.2 (with -re at the end), but the names in clojure.core are the same |
| 09:22 | mmarczyk | so what the above does is (1) take the regex, (2) build a matcher for this regex on top of the given string, (3) find the first match of the regex in the string occurring no earlier than at index idx |
| 09:23 | mmarczyk | hm, actually you'd probably have to do something like |
| 09:23 | mmarczyk | (let [m (.. valid-chars (matcher s))] |
| 09:23 | mmarczyk | ouch... |
| 09:24 | mmarczyk | (let [m (.. valid-chars (matcher s))] (.find m idx) (== (.start m) idx)) |
| 09:24 | mmarczyk | that would tell you whether there's a match at the starting position you specified |
| 09:24 | mmarczyk | I think |
| 09:26 | mmarczyk | oh bother... title case not yet implemented |
| 09:26 | Licenser | ah I see |
| 09:26 | Licenser | I think the problem is if you use ^ and index it always returns false |
| 09:26 | Licenser | I tried that I think |
| 09:26 | Licenser | since ^ can't match with an index |
| 09:27 | mmarczyk | yes |
| 09:27 | mmarczyk | therefore you'd drop the ^ |
| 09:27 | mmarczyk | ....um |
| 09:27 | Licenser | but then it would match (((123 abc too |
| 09:27 | mmarczyk | and totally kill your performance I guess |
| 09:27 | Licenser | since abc is a ident |
| 09:27 | Licenser | and make it silly ;) |
| 09:28 | mmarczyk | well it would match, but the match would start some way past the index you specified |
| 09:28 | Licenser | ^ is needed since it must only match when it is exactly the same |
| 09:28 | Licenser | yes some where past |
| 09:28 | mmarczyk | so then you'd call .start, see that the match begins to far to the right |
| 09:28 | Licenser | but that would tell me 'in the remaining code there is an ident somewhere' which isn#t exactly what a highlighter needs to know ;) |
| 09:28 | mmarczyk | and decide that there's no match where you started (even though apparently there is one further on) |
| 09:28 | mmarczyk | yeah |
| 09:29 | mmarczyk | in fact, you're better of not trying to find out :-) |
| 09:29 | Licenser | I need to know 'is the next token an ident' |
| 09:29 | Licenser | ^^ |
| 09:29 | mmarczyk | then maybe it's best to use substring |
| 09:30 | Licenser | that is what I do |
| 09:30 | mmarczyk | somehow creating all those extra strings seems wasteful, though |
| 09:31 | mmarczyk | yeah, well then you could see how the regex with ^ with substrings and the .. thing fares |
| 09:31 | mmarczyk | but actually |
| 09:31 | mmarczyk | I guess what you really want to do |
| 09:31 | mmarczyk | is to tokenise the string first |
| 09:31 | mmarczyk | at a primitive level -- split at whitespace and brackets |
| 09:32 | mmarczyk | with some complications because of comments, I guess |
| 09:32 | mmarczyk | and then apply some regex magic to the individual fragments |
| 09:33 | mmarczyk | then it makes sense to have a function checking whether a particular string -- the whole of it -- is ok as an identifier |
| 09:35 | Licenser | mmarczyk: bt that would e wrong |
| 09:35 | Licenser | see (+ 1) split it by a space won't work |
| 09:36 | mmarczyk | well, literally splitting at whitespace won't work |
| 09:36 | Licenser | to split it you need to scan it sadly |
| 09:36 | mmarczyk | but doing a lazy lexing step would |
| 09:36 | Licenser | hmm can you explain that? |
| 09:37 | mmarczyk | go through the string keeping track of whether you're in a comment, a string / regex literal |
| 09:37 | mmarczyk | and a stack of open brackets |
| 09:37 | mmarczyk | (maybe) |
| 09:37 | Licenser | mmarczyk: yes that might work for clojure but univerally it likely will not |
| 09:37 | Licenser | a |
| 09:37 | mmarczyk | by "in a comment" I mean "inside a line comment" |
| 09:38 | mmarczyk | I don't think there's any programming language you can't split into tokens in a single traversal :-) |
| 09:39 | mmarczyk | parsing is another matter, of course, but initial splitting should always be possible |
| 09:40 | Licenser | I'm not sure if it wil be faster |
| 09:40 | mmarczyk | well, you can be lazy about it |
| 09:40 | mmarczyk | and then there's some room for optimisations |
| 09:41 | Licenser | since it does the string twice |
| 09:41 | mmarczyk | e.g. only try regexes which might succeed given the first char of a token |
| 09:41 | naeu | how would i create an infinite collection I can take from with a function that is continually applied to the previous result? |
| 09:41 | mmarczyk | the first pass does nothing interesting though |
| 09:41 | mmarczyk | so it won't really slow you down |
| 09:42 | mmarczyk | and once you do it, you no longer need to allocate huge strings over and over again |
| 09:42 | mmarczyk | (say, 250k chars for your source at the start, then 250k - the first 10 for the first token, then that - 5 for the second token etc.) |
| 09:42 | seths | naeu: have you tried iterate? |
| 09:42 | seths | ,doc iterate |
| 09:42 | clojurebot | java.lang.Exception: Can't take value of a macro: #'clojure.core/doc |
| 09:42 | seths | ,(doc iterate) |
| 09:42 | clojurebot | "([f x]); Returns a lazy sequence of x, (f x), (f (f x)) etc. f must be free of side-effects" |
| 09:43 | naeu | seths: looks perfect, thanks |
| 09:45 | Licenser | hmmm |
| 09:45 | Licenser | mmarczyk: subs doesnot allocate new strings AFAIK |
| 09:47 | seths | I think I am trying to misuse reify... should I not use it inside defmacro? |
| 09:47 | seths | ,(defprotocol IFoo (bar [_])) |
| 09:47 | clojurebot | DENIED |
| 09:47 | seths | ack |
| 09:47 | mmarczyk | Licenser: hm, can't say that I'm sure about this, but the javadoc would suggest that a new string is return |
| 09:48 | seths | anyways, this works: (bar (reify IFoo (bar [_]))) |
| 09:48 | seths | but this doesn't: (defmacro make-foo [] (reify IFoo (bar [_]))) (bar (make-foo)) |
| 09:48 | seths | new error to me: Can't embed object in code, maybe print-dup not defined |
| 09:49 | Licenser | mmarczyk: I am not 100% sure sadly but I heared this earlyer |
| 09:53 | _fogus_ | seths: I don't think there is anything inherently wrong with using reify in a defmacro |
| 09:54 | seths | actually, to self reply, this works: (defmacro make-foo [] `(reify IFoo (bar [_]))) |
| 09:55 | seths | now I have to puzzle through my real code which has other problems |
| 09:55 | mmarczyk | ,(.. #"asdf" (matcher (StringBuilder. "asdfasdf")) (find 0)) |
| 09:55 | clojurebot | true |
| 09:55 | _fogus_ | seths: Does the expansion of your snippet above look correct to you? |
| 09:56 | mmarczyk | Licenser: another option :-) -- remove a bit from the front later, trim periodically |
| 09:56 | mmarczyk | Licenser: but I hope you're right about the strings |
| 09:56 | Licenser | I hope too |
| 09:57 | Licenser | mmarczyk: yea I did that first but it didn't made a difference |
| 09:57 | mmarczyk | Licenser: nope |
| 09:57 | mmarczyk | try this: |
| 09:57 | mmarczyk | (def s "asdfasdf") |
| 09:58 | mmarczyk | (def w (java.lang.ref.WeakReference. s)) |
| 09:58 | mmarczyk | (def t (subs t 4)) |
| 09:58 | mmarczyk | (System/gc) |
| 09:58 | mmarczyk | (.get w) |
| 09:58 | seths | _fogus_: actually probably not: (clojure.core/reify euler.fu/IFoo (euler.fu/bar [euler.fu/_])) |
| 09:58 | seths | _fogus_: I haven't looked at the latest MEAP, does it have the chapter on macros? |
| 09:58 | _fogus_ | seths: That's what I was thinking. ;-) |
| 09:59 | _fogus_ | seths: It does. |
| 09:59 | Licenser | of case s is still there you defed it |
| 09:59 | seths | _fogus_: yay, 'scuse me then |
| 10:00 | mmarczyk | well, actually that doesn't prove all that much, does it... but at least now I really need to read about substring somewhere (the docs aren't explicit enough :-/) |
| 10:01 | _fogus_ | seths: I think in this case capture and/or autogensym might fix your expansion |
| 10:01 | mmarczyk | http://dmst.aueb.gr/dds/pubs/conf/2008-PCI-dtrace/html/GS08.html |
| 10:01 | mmarczyk | search for "methods that have allocated the most objects" |
| 10:02 | mmarczyk | but anyway, obviously substring needs to allocate a new String object, but whether there's any memory sharing is a different matter... wouldn't really expect it, but hey. |
| 10:02 | Licenser | mmarczyk: what I heared is that the substring is not copying the data but refering to it |
| 10:03 | Licenser | meaning also that unless you copy the data the original string won't be GC'ed |
| 10:04 | spariev_ | mmarczyk: http://fishbowl.pastiche.org/2005/04/27/the_string_memory_gotcha/ |
| 10:04 | spariev_ | If you call substring(), you will get back a new String object containing a pointer to the same char[] array as the original string, just with a new offset and length to match the chunk you were after |
| 10:06 | mmarczyk | spariev_: thanks for the link! |
| 10:06 | mmarczyk | my Google-fu failed me today :-) |
| 10:07 | mmarczyk | thanks for improving my Java-fu, Licenser & spariev_ |
| 10:07 | spariev_ | mmarczyk: np :) |
| 10:07 | Licenser | mmarczyk: I am sorry :P |
| 10:07 | mmarczyk | :-) |
| 10:07 | mmarczyk | hm? what for? |
| 10:08 | Licenser | for improving your java :P |
| 10:08 | spariev_ | lol |
| 10:08 | mmarczyk | oohhhh. |
| 10:08 | mmarczyk | :-D |
| 10:09 | seths | _fogus_: thanks! |
| 10:09 | chouser | Is there an object that does similar sharing but on byte arrays instead of chars? |
| 10:10 | _fogus_ | seths: any time |
| 10:16 | spariev_ | chouser: here's what i found http://stackoverflow.com/questions/618396/in-java-is-where-a-way-to-create-a-subarray-that-will-point-to-a-portion-of-a-bi |
| 10:19 | chouser | spariev_: excellent, thanks. |
| 10:20 | spariev_ | chouser: glad I helped :) |
| 10:22 | angerman | does anyone use os x and a wireless bt keyboard? |
| 10:23 | angerman | since I got my US layout one, when ever I push M-s I get ß ... which is very not helpful when using emacs with paredit. Well using emacs at all without a meta key is kinda annoying. |
| 10:25 | Chousuke | I think alt is not meta on OS X. |
| 10:26 | Chousuke | you probably need to set the mac-command/option/whatever-modifier variables to other values to make it work. |
| 10:26 | angerman | Chousuke: ah, well it's in Aquamacs at least. |
| 10:27 | cemerick | AFAIK, most everyone maps command to meta? |
| 10:27 | angerman | (e.g. I've been using that key-combo all along, just since the new keyboard it's scewed up... ) |
| 10:27 | Chousuke | Probably configured differently from the emacs default |
| 10:27 | Licenser | angerman: in aquaemacs there is a setting for meta with german keyboard and such things |
| 10:27 | Licenser | s |
| 10:27 | Licenser | so your alt and stuff work propperly on the keys where you need it |
| 10:27 | Chousuke | cemerick: I have caps lock as meta and cmd as control |
| 10:28 | angerman | well. the weird thing is, (using the same software, using the same aquamacs, using a US layout macbook) it did work. |
| 10:28 | angerman | (after installing the BT US layout keyboard) ... it stopped and gave me these special chars. |
| 10:28 | Chousuke | maybe the bt keyboard sends a different key code :/ |
| 10:29 | angerman | to me it looks like os x is somehow grabbing the alt key before any app can. |
| 10:29 | angerman | Chousuke: no. Best part: _now_ the keyboard on the macbook does the same strange behaviour |
| 10:29 | Chousuke | http://www.emacswiki.org/emacs/MetaKeyProblems |
| 10:32 | mmarczyk | Licenser: btw, are you using ":" + basic-identifier for non-namespaced-keywords? |
| 10:32 | Licenser | yes I think so |
| 10:32 | mmarczyk | apparently :123 also creates a keyword |
| 10:33 | mmarczyk | (not sure why'd anyone want to do that, but...) |
| 10:33 | Licenser | o.O |
| 10:33 | Licenser | narf |
| 10:33 | mmarczyk | today was the first time I made that typo ;-) |
| 10:34 | Licenser | I think you even can create random string keywords |
| 10:34 | Licenser | ,(keyword "I want cookies!!!" |
| 10:34 | clojurebot | EOF while reading |
| 10:34 | Licenser | ,(keyword "I want cookies!!!") |
| 10:34 | clojurebot | :I want cookies!!! |
| 10:34 | Licenser | o.O |
| 10:34 | Licenser | that isn't readable :P |
| 10:34 | mmarczyk | well, if you call keyboard or symbol, you can make keywords and symbols out of any string |
| 10:34 | mmarczyk | including empty |
| 10:34 | Licenser | ,(pr-str (keyword "I want cookies!!!")) |
| 10:34 | clojurebot | ":I want cookies!!!" |
| 10:34 | mmarczyk | but :123 is a readable literal |
| 10:34 | spariev_ | ,(keyword ";-)") |
| 10:34 | clojurebot | :;-) |
| 10:34 | mmarczyk | not sure if it's documented to be a no-no, possibly it is |
| 10:35 | mmarczyk | ,(str :;-)) |
| 10:35 | clojurebot | Invalid token: : |
| 10:35 | Licenser | I like my <3 function |
| 10:35 | mmarczyk | ,(str :123) |
| 10:35 | clojurebot | ":123" |
| 10:35 | mmarczyk | :-) |
| 10:35 | Licenser | which is entirely valid but rhicky didn't wanted it in c.c :( |
| 10:35 | angerman | haha. |
| 10:35 | angerman | Ok, found it. This was _really_ stupid of me :/ |
| 10:36 | angerman | Aquamacs now features swapping alt as option key using C-; |
| 10:36 | angerman | sorry guys |
| 10:37 | Licenser | hmm hmm |
| 10:50 | jfields | if you have an interface with two methods |
| 10:50 | jfields | void write(ByteArray msg); |
| 10:50 | jfields | void write(ByteArray msg, int startPosition, int bytesToSend); |
| 10:50 | jfields | how do you proxy that? |
| 10:51 | jfields | I tried to define it twice in proxy with different arity, but I get Caused by: java.lang.IllegalArgumentException: Method 'write' redefined |
| 10:52 | angerman | did you try to define it using multiple arity? |
| 10:52 | Chousuke | you need to use the fn syntax for multiple arities |
| 10:52 | angerman | (write ([msg pos send] bleh) ([msg] blah)) |
| 10:53 | jfields | cool thanks |
| 11:29 | seths | _fogus_: I went with a function-making function (using reduce and update-in): https://gist.github.com/dff8b0becc9d2c8b1bc8 |
| 11:42 | _fogus_ | seths: Yay! No macros needed. That's the best way to write a macro... don't ;-) |
| 11:51 | alpheus | Since I'm new to clojure, what was the thinking behind this deprecation?"WARNING: reader macro ^ is deprecated; use meta instead" |
| 11:54 | _fogus_ | alpheus: The intention is to use ^ for type hints |
| 11:55 | alpheus | thanks |
| 12:01 | replaca | _fogus_, chouser: congrats on your draft! |
| 12:01 | chouser | replaca: thanks! |
| 12:02 | _fogus_ | replaca: Thank you! |
| 12:02 | chouser | still plenty to do of course. illustrations, for example. :-) |
| 12:02 | _fogus_ | oh yeah... those. :p |
| 12:02 | replaca | chouser: of course, but we need to celebrate our progress |
| 12:10 | chouser | replaca: indeed. Hooray! |
| 12:11 | chouser | that's one step closer to not writing a book! |
| 12:11 | chouser | funny how goals change |
| 12:11 | _fogus_ | I miss the days when I was not writing a book |
| 12:12 | chouser | I keep running into situations that want an 'invoke' function these days. |
| 12:13 | _fogus_ | chouser: You mean making something invokeable.. via some protocol? |
| 12:13 | chouser | no, just (defn invoke [f & args] (apply f args)) |
| 12:13 | joshua-choi | Same here. |
| 12:14 | chouser | An Invokable protocol would be good too, but that's something else. :-) |
| 12:14 | _fogus_ | You want funcall? Why not throw in #'f while you're at it? (just kidding) |
| 12:16 | chouser | huh. it is funcall isn't it. |
| 12:16 | _fogus_ | yes. I was just being snarky |
| 12:17 | chouser | but it's a good point. |
| 12:21 | replaca | heh: (defmacro invoke [f & args] `(apply ~f ~@args [])) :-) |
| 12:35 | iwillig | hey does anyone know how to do 1e-9 in clojure ? |
| 12:36 | iwillig | i need to use a double literal |
| 12:36 | _fogus_ | ,1e-9 |
| 12:36 | clojurebot | 1.0E-9 |
| 12:37 | _fogus_ | ?? |
| 12:37 | iwillig | http://java.comsci.us/etymology/literal/double.html |
| 12:38 | iwillig | mmm that does not work for me |
| 12:38 | iwillig | oh |
| 12:38 | iwillig | never mind |
| 12:39 | iwillig | tanks _fogus_ |
| 12:39 | iwillig | thanks |
| 12:39 | _fogus_ | iwillig: I hope I was helpful. |
| 12:40 | iwillig | well you made me realize how silly i was being... so yes :) |
| 13:35 | riddochc | I could use some help with a macro I'm writing... |
| 13:36 | seths | ,3r20 |
| 13:36 | clojurebot | 6 |
| 13:36 | slyphon | how do you refer to state within an instance method? |
| 13:36 | slyphon | (this :state) ? |
| 13:36 | chouser | slyphon: for gen-class? |
| 13:36 | chouser | (.state this) |
| 13:36 | slyphon | yeah |
| 13:36 | slyphon | ahh |
| 13:36 | slyphon | and "this" is implicit, right? |
| 13:37 | chouser | no |
| 13:37 | slyphon | no? |
| 13:37 | chouser | first arg of the defn |
| 13:37 | slyphon | ah |
| 13:37 | slyphon | ty |
| 13:38 | chouser | riddochc: http://clojure-log.n01se.net/macro.html |
| 13:38 | chouser | riddochc: actually, I'm not sure that form still works, but those are the questions to answer so we can help. |
| 13:41 | riddochc | chouser: Very convenient, thanks. Though I see 'clojure' isn't an option in the colorize menu. |
| 13:41 | chouser | riddochc: yeah. lisppaste doesn't have a colorizer. |
| 13:41 | chouser | if someone wants to write one, I think they'd accept it. ...but it has to be written in Common Lisp. |
| 13:49 | riddochc | Hm. I think half my problem is that I'm trying to write a macro so I can call another macro, because the second macro basically amounts to `(with-sh-dir "/path/workdir" (sh "/path/bin/program" ~@rest)) |
| 13:52 | chouser | you can just (apply sh :dir "workdir" "program" rest) |
| 13:52 | riddochc | Now that I'm looking at how with-sh-dir works, yeah, that solves my entire problem. |
| 13:52 | chouser | yay! :-) |
| 13:53 | riddochc | And makes a lot of the rest of my code simpler. |
| 13:54 | chouser | riddochc: cool. That actually makes me quite happy. To me, that's a sign of a good API. |
| 13:54 | OForero | hello |
| 13:54 | defn | shell-out hsa a with-sh-dir? |
| 13:54 | defn | cool |
| 13:54 | OForero | I remember seeing a video where someone started a local server? with the documentation used for a project |
| 13:55 | defn | autodoc |
| 13:55 | OForero | probably using lein .... does anyone knows how to do that_ |
| 13:55 | riddochc | defn: Yeah, and it seemed like the right thing to use, until I realized that the whole dynamic binding thing wasn't what I needed. |
| 13:55 | defn | OForero: yeah, that's autodoc |
| 13:55 | OForero | ok ... googling |
| 13:55 | defn | you need to add autodoc to your dev dependencies |
| 13:55 | defn | then run lein deps |
| 13:55 | defn | then lein autodoc |
| 13:56 | defn | you can get autodoc from clojars.org |
| 14:03 | joshua-choi | Has anyone been able to get a Leiningen project that uses Clojure 1.2 to work with Autodoc? |
| 14:04 | OForero | just did |
| 14:04 | OForero | 1.2.0-master-SNAPSHOT |
| 14:04 | joshua-choi | Do you encounter any errors when you do "lein autodoc" or "lein help"? |
| 14:05 | OForero | lein help crash |
| 14:05 | OForero | a warning about the reader macro and a ClassCastException |
| 14:05 | OForero | but I can do autodoc |
| 14:05 | joshua-choi | Yes. Do you get the same with "lein autodoc"? |
| 14:05 | joshua-choi | Oh, really? |
| 14:05 | joshua-choi | I cannot; I get the same error |
| 14:06 | OForero | and Swank which is the one why I got lein in the first place |
| 14:06 | OForero | compile also fails |
| 14:06 | joshua-choi | Actually, it's a different error, but it's still an error. |
| 14:06 | joshua-choi | Do those errors happen only with your projects that use Clojure 1.2? |
| 14:06 | OForero | nope ... autodoc works |
| 14:07 | OForero | I am not sure |
| 14:07 | joshua-choi | When I run "lein autodoc", I get, "java.io.FileNotFoundException: Could not locate clojure/contrib/string__init.class or clojure/contrib/string.clj on classpath". |
| 14:07 | OForero | that is because it can not compile |
| 14:07 | rdsr | OFreoro: can u try running lein help from inside the lib folder |
| 14:07 | rdsr | I do get the same exception under the project root folder |
| 14:07 | OForero | I was having a ton of problems related to those not found Ex |
| 14:07 | rdsr | but not under the lib folder |
| 14:08 | joshua-choi | OForero: Did you have to do anything to make "lein autodoc" work? |
| 14:08 | OForero | until I move my clj files to reflect the namespace names |
| 14:08 | OForero | with the name of the file being the last part of the name space |
| 14:08 | OForero | I also used |
| 14:08 | OForero | :source-path "src/main/clojure" |
| 14:09 | joshua-choi | Ah, perhaps that's it. |
| 14:09 | redalastor | I want to use berkeleydb 4.0.103 (the latest) and know nothing about maven. I added [com.sleepycat/je "4.0.103"] to my leiningen config but it isn't working. Oracle's page about maven for bdb is here: http://www.oracle.com/technology/software/products/berkeley-db/je/maven.html |
| 14:09 | OForero | yep lein help works inside the lib dir |
| 14:10 | joshua-choi | Same for me. |
| 14:10 | OForero | joshua-choi: not really ... jut add the dep to project.clj, did a lein deps and autodoc |
| 14:10 | OForero | and inside the source directory |
| 14:11 | OForero | I have a/b/c/d.clj |
| 14:11 | joshua-choi | OForero: Hmm. I wonder what could be the problem. Okay, what version of org.clojure/clojure-contrib are you using? I'm using 1.2.0-master-SNAPSHOT. |
| 14:11 | OForero | for a ns named a.b.c.d |
| 14:11 | OForero | yes that one |
| 14:12 | OForero | contrib is plain SNAPSHOT without master |
| 14:13 | OForero | is there anyway to tell autodoc to create docs for the included libraries? |
| 14:14 | joshua-choi | OForero: Are you using the new contrib libraries such as clojure.contrib.string? |
| 14:14 | joshua-choi | If not, that would explain some things... |
| 14:14 | OForero | lein compile also works but does nothing ... probably because I am not using any >gen-class |
| 14:14 | OForero | right now contrib is just there looking pretty |
| 14:15 | OForero | I am just starting with this |
| 14:15 | joshua-choi | I mean, are you using the old libraries (Like clojure.contrib.str-utils) or the new libraries (like clojure.contrib.string)? |
| 14:16 | OForero | that is what I mean ... right now my file has no (use ) clause |
| 14:16 | OForero | it is just 57 lines |
| 14:17 | OForero | doing some structs and map operations ... and using refs |
| 14:17 | OForero | that is it ... |
| 14:17 | joshua-choi | I see. Could you temporarily add "(require clojure.contrib.string)" to your (ns ...) form at the top of your program and see if it fails? |
| 14:18 | OForero | :require? |
| 14:19 | joshua-choi | Yeah, sorry. :require. |
| 14:20 | OForero | nope ... it works |
| 14:20 | OForero | I mean lein autodoc |
| 14:20 | joshua-choi | Oh, I meant if your program itself fails to compile. |
| 14:20 | OForero | could you pastie the error? |
| 14:21 | OForero | do you need me to add :gen-class also_ |
| 14:21 | joshua-choi | I pasted the bottom of it above. |
| 14:21 | joshua-choi | No, that's not necessary. |
| 14:21 | joshua-choi | Actually, I'm going to try something myself. |
| 14:21 | joshua-choi | I'm going to check if changing my [org.clojure/clojure-contrib "1.2.0-master-SNAPSHOT"] to [org.clojure/clojure-contrib "1.2.0-SNAPSHOT"] will fix it. |
| 14:22 | OForero | ah ok |
| 14:22 | OForero | I do not have master in contrib |
| 14:22 | OForero | that gave me problems |
| 14:22 | OForero | master is only for clojure |
| 14:22 | OForero | [org.clojure/clojure-contrib "1.2.0-SNAPSHOT"] |
| 14:22 | joshua-choi | Autodoc itself now works! |
| 14:23 | joshua-choi | Yes, thanks for your help. |
| 14:23 | OForero | one question more |
| 14:23 | joshua-choi | It looks like the latest master snapshot isn't up-to-date. |
| 14:23 | OForero | can autodoc generate docs for the libraries_ |
| 14:24 | _na_ka_na_ | hey guys .. anyone knows how I can get a FIFO queue ds in clojure? |
| 14:24 | joshua-choi | OForero: Could you elaborate? |
| 14:24 | OForero | like if ones want the documentation relevant only to what you are using in one place? |
| 14:24 | chouser | _na_ka_na_: persistent or blocking? |
| 14:24 | OForero | well, lets say I use clojure, contrib and another one |
| 14:25 | _na_ka_na_ | chouser: persistent, is it easy to implement that using existing vector or list? |
| 14:25 | OForero | instead of going and searching the doc for each one individually ... generate a local doc directory containing the doc for all of my used libraries |
| 14:26 | joshua-choi | OForero: I don't think so, but I'm not sure I understand your question. |
| 14:26 | _na_ka_na_ | chouser: both vector and list work only from one side efficiently .. whereas a queue should needs both sides .. |
| 14:27 | joshua-choi | _na_ka_na_: I think there's a PersistentQueue built into Clojure, but it's kind of hidden because it's not ready for primetime. |
| 14:27 | chouser | clojure.lang.PersistentQueue |
| 14:27 | _na_ka_na_ | joshua-choi: thx, but will it be made available in 1.2? |
| 14:28 | chouser | it's perfectly usable and reliable |
| 14:28 | joshua-choi | chouser: My mistake. But why are there no functions specifically related to it in the core API? Like a "queue" function. |
| 14:28 | _na_ka_na_ | hmm .. any ideas why don't we have in native Clojure? |
| 14:29 | chouser | only the constructor function is missing. peek, pop, and conj all work |
| 14:29 | _na_ka_na_ | or it is planned .. but low priority? |
| 14:30 | chouser | well, many cases where you want a queue, you actually want a blocking queue for workflow management, and using PersistentQueue for that would be an abuse |
| 14:30 | chouser | java.util.concurrent.BlockingQueue should be used instead |
| 14:31 | OForero | well another way of putting it ...can autodoc generate docs from a jar? given that many clojure jars are just packaged code? |
| 14:31 | chouser | I'm not sure what has to happen before rhickey would privide a queue constructor. |
| 14:32 | chouser | ,(-> clojure.lang.PersistentQueue/EMPTY (conj 1) (conj 2) (conj 3) peek) |
| 14:32 | clojurebot | 1 |
| 14:33 | chouser | it's been around since before 1.0, and hasn't changed substantially in that time. |
| 14:33 | chouser | hasn't needed to. works great. |
| 14:34 | joshua-choi | I was suspicious of it because there's no constructor function. But if it works fine, that's fine. |
| 14:34 | chouser | just don't use it for work flow. don't poll it. don't use it to communicate work tasks to threads. |
| 14:34 | chouser | ...or Rich will yell at me. |
| 14:35 | cemerick | I presume it's waiting for a generalized queue abstraction. |
| 14:35 | joshua-choi | cemerick: All this time? |
| 14:35 | _na_ka_na_ | hmm thanks! .. conj, peek, pop all work? what else is needed for a queue? .. how do i check if its empty? (nil? (seq q)) |
| 14:35 | joshua-choi | No, there was a reason at the time of Clojure 1.0. |
| 14:35 | cemerick | joshua-choi: well, bigger fish have needed frying. |
| 14:35 | joshua-choi | Perhaps. |
| 14:35 | joshua-choi | _na_ka_na_: Just use (empty? q). |
| 14:35 | chouser | _na_ka_na_: right, it's seqable, so (seq q) or (empty? q) |
| 14:36 | cemerick | That, and it's not exactly clear what a generalized queue abstraction should look like. It'd be a corollary to seqs, which took, what, 2 years to be massaged into their current form? |
| 14:37 | joshua-choi | cemerick: In any case, I am very excited at the prospect of Clojure's Java interfaces becoming Clojure protocols. |
| 14:37 | joshua-choi | Well, I got the impression that that was going to happen. |
| 14:37 | chouser | yeah, I'm excited too. PFn |
| 14:37 | _na_ka_na_ | the doc for empty? says - Please use the idiom (seq x) rather than (not (empty? x)) .. why is that? |
| 14:38 | Chousuke | I wonder about the fn protocol |
| 14:38 | joshua-choi | _na_ka_na_: Yeah, I wondered that too. It's just shorter; that's why. |
| 14:38 | Chousuke | how would you actually implement that? :/ |
| 14:38 | chouser | _na_ka_na_: shorter and less confusing -- no negations. |
| 14:38 | _na_ka_na_ | hmm :) ok |
| 14:38 | chouser | you don't want to not stop saying a thing isn't empty. |
| 14:38 | joshua-choi | chouser: Oh, are protocols being named with P prefixes nowadays? |
| 14:39 | chouser | joshua-choi: dunno. :-) |
| 14:39 | joshua-choi | Heh. |
| 14:40 | Chousuke | _na_ka_na_: (not (empty? ...)) is actually equivalent to (not (not (seq ...))) :P |
| 14:40 | mabes | _na_ka_na_: right, do a (source empty?) |
| 14:40 | _na_ka_na_ | Chousuke: Yup I figured that .. just wanted to confirm if there was some gottcha corner cases .. |
| 14:41 | _na_ka_na_ | mabes: thanks got it! |
| 14:41 | joshua-choi | I wish there was a way to attach metadata to functions within (fn ...) forms. Otherwise, it's not possible to give any of the functions in a (letfn ...) metadata. |
| 14:41 | OForero | do you guys are all Emacs hardcores? |
| 14:41 | joshua-choi | I myself don't use Emacs. |
| 14:41 | chouser | nope |
| 14:41 | OForero | what do you ude? |
| 14:41 | remleduff | dmiller2718: I just wanted to point out RE: your protocols-in-CLR proposal that Protocols aren't allowed to have zero-arg functions. Not sure if that would make a difference in your thinking about how to make properties fit. |
| 14:41 | OForero | use? |
| 14:41 | clojurebot | chouser is ruthless about breaking other people's code |
| 14:42 | Chousuke | I use emacs but I'm not hardcore at all :P |
| 14:42 | joshua-choi | clojurebot: Shut up |
| 14:42 | clojurebot | I don't understand. |
| 14:42 | cemerick | enclojure now -- keeping a close eye on CCW for eclipse |
| 14:42 | _na_ka_na_ | Hmm .. interesting question .. what % people are using emacs/slime/swank ? guesstimates ? |
| 14:43 | OForero | I had to change the ket map ... cause trying to code in emacs with a Swiss mac keyboard is not a pleasant exp ... |
| 14:43 | _na_ka_na_ | I used vimclojure in the beginning .. but now ccw coz of Java goodies |
| 14:43 | joshua-choi | I use TextWrangler, a Mac OS X editor. It's not very good for Clojure, but its Command-B shortcut highlights the current parenthesized phrase, which is very useful |
| 14:43 | joshua-choi | I am considering using Enclojure, but Netbeans takes a lot of my computer's energy. |
| 14:45 | OForero | ok ... I use IntelliJ also... but did not like the REPL |
| 14:45 | _na_ka_na_ | chouser: what editor do you use? |
| 14:45 | _na_ka_na_ | any idea what Rich uses? |
| 14:45 | _na_ka_na_ | :P |
| 14:45 | joshua-choi | _na_ka_na_: Rich I know often uses a Mac OS X Emacs editor called Aquamacs or something. |
| 14:46 | chouser | Rich has mocked me for my use of vim. He uses emacs and some commercial IDE -- JetBrains or something. |
| 14:46 | OForero | yep ... that is why I got that one ... with paredit ... |
| 14:46 | joshua-choi | I found Vim a lot easier than Emacs |
| 14:46 | chouser | it's all about the keybindings for me. |
| 14:47 | joshua-choi | Both are very hard though |
| 14:47 | chouser | these days. |
| 14:47 | Dawgmatix | 30 mins with the tutorial built into emacs and youre all set |
| 14:47 | Raynes | Emacs isn't that hard. |
| 14:47 | chouser | really not. But I shouldn't engage in editor discussions. |
| 14:47 | _na_ka_na_ | i am also so used to vim .. i tried to emacs .. but found it tough .. |
| 14:47 | chouser | This is me trying to stop... |
| 14:48 | wdouglas | try harder... =) |
| 14:48 | joshua-choi | On a different topic, functions now have metadata. |
| 14:48 | chouser | yay! |
| 14:48 | Raynes | The hardest part about Emacs and Vim is ignoring the people who exaggerate how hard they are to learn. |
| 14:48 | joshua-choi | Would it be possible at all to add a metadata parameter to the fn form? And letfn, while we're at it? |
| 14:48 | somnium | the emacs default keybindings are just there to keep the user base from growing too rapidly |
| 14:48 | OForero | does anyone knows exactly how metadata work_ |
| 14:48 | OForero | ? |
| 14:48 | joshua-choi | Raynes: I don't think I'm exaggerating. :( |
| 14:48 | Raynes | joshua-choi: I beg to differ. ;) |
| 14:48 | zakwilson | OForero: Yes, I'm sure someone does. |
| 14:48 | chouser | joshua-choi: can't you just stick reader metadata on the fn name? |
| 14:48 | joshua-choi | I really tried both for two months each. |
| 14:49 | joshua-choi | chouser: Can I?! |
| 14:49 | joshua-choi | Wait, no |
| 14:49 | chouser | hm. |
| 14:49 | joshua-choi | Are you talking about the name in (fn name ...)? |
| 14:49 | joshua-choi | If fn uses that name's metadata, that's awesome |
| 14:49 | Raynes | I managed to be able to use both editors in a matter of hours. Some people have different experiences, but I've seen people claim stuff like "it takes years to be able to use these editors" and other garbage. |
| 14:49 | cemerick | There was a recent thread somewhere that discussed how multimethods now need to be ns-unmap'd in order to be able to redefine the dispatch fn. Can't find it now -- anyone have a link handy? |
| 14:49 | Raynes | I suppose it depends on how you approach it. |
| 14:50 | somnium | I like vim's syntax highlighting for .el files |
| 14:50 | chouser | joshua-choi: no, I guess it doesn't. looks like you may have to use with-meta |
| 14:50 | OForero | I better say it like: does anyone here knows in which file is metadata implemented? |
| 14:51 | joshua-choi | chouser: Unfortunately, you can't do that in letfn. |
| 14:51 | _na_ka_na_ | Raynes: I guess once you are comfortable with one of those .. you really don't like to shift .. it just feels slowwwww .. |
| 14:51 | joshua-choi | That actually does matter to me. |
| 14:51 | chouser | joshua-choi: what would you do with such metadata? |
| 14:51 | joshua-choi | FnParse, a parsing library I'm making, uses function metadata for various things |
| 14:52 | _na_ka_na_ | I have a general question .. how are people using metadata in actual code? .. I haven't thought of any use till now. |
| 14:52 | joshua-choi | letfn is useful for making mutually recursive parsing "rules", which are implemented as functions. |
| 14:52 | redalastor | How do I ask leningen to look into other maven repositories? Or do I add that to maven directly? |
| 14:52 | joshua-choi | Otherwise, def is required. |
| 14:52 | chouser | joshua-choi: I see. putting it on the name gets it passed through to the compiler, but apparently it isn't picked up there. |
| 14:53 | joshua-choi | _na_ka_na_: In my experience, metadata isn't useful when you are using maps or records. But it is useful for other things like functions or vectors. |
| 14:53 | OForero | :repositories {"clojure-releases" "http://build.clojure.org/releases"} |
| 14:53 | chouser | wouldn't be hard to fix, I'd guess. |
| 14:53 | remleduff | redalastor: :repositories in your defproject form |
| 14:53 | joshua-choi | chouser: It would be *great* if this enhancement was done. |
| 14:53 | angerman | how much will I hate obj-c 2 when I'm used to clojure? |
| 14:54 | joshua-choi | chouser: The only point of that name parameter, by the way, is otherwise to name the class that that function spawns, right? |
| 14:54 | remleduff | Any time you look at the clojure api docs, you're using metadata indirectly that autodoc used to generate the web pages ;) |
| 14:54 | _na_ka_na_ | joshua-choi: An example for metadata+vectors? |
| 14:54 | chouser | joshua-choi: no, it can be used in the body of the function to refer to itself |
| 14:54 | joshua-choi | _na_ka_na_: Um, I don't have any. Ha ha. But for functions, I use them to validate them, label them, and so on. |
| 14:54 | joshua-choi | chouser: Ah. That's right. |
| 14:55 | _na_ka_na_ | remleduff: I meant usage in your code.. |
| 14:55 | redalastor | It's working, thanks. |
| 14:55 | joshua-choi | _na_ka_na: Anyways, can I file an enhancement request? I don't know how it works or if I'm allowed to. |
| 14:56 | joshua-choi | Oops, that was to chouser. |
| 14:56 | _na_ka_na_ | joshua-choi: you meant to ask me? :) |
| 14:57 | Raynes | angerman: Stick your hand in a blender and hit "Liquefy" -- That much. |
| 14:57 | chouser | joshua-choi: you can bring it up on the clojure or clojure-dev groups |
| 14:57 | angerman | Raynes: _that_ bad? |
| 14:57 | joshua-choi | chouser: clojure-dev is only for people who signed those contributor forms, though, right? |
| 14:57 | chouser | um, probably, yeah. |
| 14:58 | Raynes | angerman: Well, maybe not quite that bad. ;) |
| 14:58 | joshua-choi | chouser: Yeah, I'll ask on the clojure group then. Hopefully it won't get ignored. :| |
| 14:58 | chouser | Last I knew, Rich said he read every message on the clojure group, so presumably no response means he's not interested. |
| 14:58 | angerman | Raynes: well, gotta dive in some day :D |
| 14:58 | chouser | this is our process. *shrug* |
| 14:59 | joshua-choi | angerman: I heard that Clojure is to be eventually implemented in Objective-C, once the compiler is boot-strapped or something. |
| 14:59 | joshua-choi | chouser: All right. Thanks a lot for your help. |
| 14:59 | chouser | I can bring it up on clojure-dev, but my posts there generally don't seem to get very far either. |
| 14:59 | angerman | Raynes: wanted to learn Haskell as well ... |
| 14:59 | angerman | joshua-choi: seriously? |
| 14:59 | joshua-choi | angerman: Yeah, definitely. Same for .NET. |
| 15:00 | Raynes | angerman: Haskell is cool. |
| 15:00 | joshua-choi | It won't be good for the iPhone or iPad though, since neither have garbage collection. |
| 15:00 | chouser | the hawaiian's have arrived |
| 15:00 | Raynes | If you're into beating your brain with a stick and then setting your skull on fire for a while. |
| 15:00 | angerman | Raynes: I do know ocaml though. |
| 15:00 | joshua-choi | Raynes: Haskell is easier than Emacs or Vim. Hyuk hyuk |
| 15:00 | somnium | haskell has a great emacs mode |
| 15:00 | angerman | joshua-choi: hmm. yea, that wouldn't work anyway I guess... |
| 15:01 | angerman | isn't there that haskell emacs equivalent? |
| 15:01 | Raynes | angerman: Still applies. |
| 15:01 | Raynes | joshua-choi: Heh. |
| 15:01 | somnium | ymacs? its kinda 30% complete |
| 15:01 | angerman | Raynes: Hmm. Will have fun then :D |
| 15:01 | Raynes | There is Yi. |
| 15:01 | somnium | yi, thats what I meant |
| 15:02 | angerman | yes |
| 15:02 | _na_ka_na_ | joshua-choi: where did u hear about abt .. Obj C ? |
| 15:02 | angerman | okay another fancy langauge question, what makes python better then clojure? |
| 15:02 | Raynes | technomancy: I thought you were going to factor in Factor this year? When does that parade start? |
| 15:02 | joshua-choi | _na_ka_na_: A month (?) ago in this IRC room. You can probably find info if you search the archives. |
| 15:03 | joshua-choi | angerman: Python is great. But immutability is very, very, very, very good. |
| 15:03 | joshua-choi | Separating immutable structures from mutable reference objects is *wonderful*. |
| 15:04 | joshua-choi | It's amazing if doing this is actually performance-practical. |
| 15:04 | joshua-choi | And it is. |
| 15:04 | Raynes | angerman: http://www.bestinclass.dk/index.php/2009/10/python-vs-clojure-evolving/ |
| 15:05 | _na_ka_na_ | I dunno python at all .. so a noobish question .. why is it soo popular? |
| 15:05 | angerman | _na_ka_na_: well. it's not php, pretty easy to get into and quite pleasant |
| 15:06 | _na_ka_na_ | Lots of people who I meet .. say .. oh we're moving to Python .. is it because Google uses it? |
| 15:06 | angerman | at least to me it always feels like python is also a little less syntax noisy than ruby. |
| 15:06 | OForero | I couldn't do python ... that white space will bring bad memories (cobol) |
| 15:06 | angerman | Hm. I did learn python to get going with django. |
| 15:06 | joshua-choi | _na_ka_na_: It's because Python is a good and useful language. And yes, Google (and quite a few other companies) are using it. |
| 15:06 | chouser | if you limit yourself to languages people have heard of, there aren't actually that many choices |
| 15:07 | angerman | chouser: [VBA,VB,C,Java,C++,Python?,Ruby?] |
| 15:07 | chouser | among those, python's dynamic behavior gives it fairly little competition. |
| 15:08 | chouser | angerman: something like that, yeah. :-) |
| 15:08 | angerman | oh. I missed PHP :D... and PERL maybe. Though only if you meet peeple with beards |
| 15:08 | chouser | probably perl and ... exactly. |
| 15:08 | joshua-choi | angerman: I am very fond of Perl. PHP isn't so welcome, but I'm a tad irrational. |
| 15:08 | angerman | ok. since the advert of .NET probably C# as well. |
| 15:09 | chouser | maybe lua |
| 15:09 | angerman | Perl? gives me very bad memories. |
| 15:09 | chouser | javascript |
| 15:09 | angerman | chouser: only by those who played WoW :D |
| 15:09 | joshua-choi | angerman: Lua is actually used in a lot of games. I recall that a ton of games in the Apple App Store use it. |
| 15:10 | somnium | anyone checked out scheme2js? |
| 15:10 | angerman | I had to use Perl at one of my part time jobs. At a semi large system-on-chip design house. ... |
| 15:11 | _na_ka_na_ | http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html |
| 15:11 | somnium | it seems like quite a high quality compiler (from INRIA of ocaml fame), but I had to about trip over it to find it |
| 15:11 | angerman | It's been the worst time I had ... so maybe my view is biased by the setting I got to know Perl. |
| 15:12 | _na_ka_na_ | lol that tiobe site .. has Lisp/Scheme/Clojure grouped into one .. haha |
| 15:12 | _na_ka_na_ | but nice to see Clojure ! |
| 15:12 | angerman | joshua-choi: well. use it as in use it to develop the game or use it as in allow the user to extend the game? |
| 15:13 | _na_ka_na_ | any ideas how C is getting more and more popular? |
| 15:13 | angerman | since only the letter would make it creep into the users recognition. |
| 15:13 | joshua-choi | angerman: In the game itself, in its core logic. I don't think there are any programmable iPhone/iPod games now. |
| 15:13 | angerman | joshua-choi: probably |
| 15:13 | somnium | _na_ka_na_: curly braces and segfaults have a certain rustic appeal |
| 15:14 | angerman | _na_ka_na_: well. what's weird is that obj-c got such a boost. |
| 15:14 | _na_ka_na_ | somnium: :P then why did it go down few years back .. see the graph |
| 15:14 | joshua-choi | angerman: That's because the iPhone and its sister products are doing so well, so companies want in |
| 15:15 | _na_ka_na_ | well people are crazy about iP* |
| 15:16 | _na_ka_na_ | well Java seems to heading downnnnn |
| 15:16 | angerman | joshua-choi: that's probably right. I only had very little exposure to obj-c, mostly due to fixing some bugs here and there. And some to obj-j |
| 15:16 | angerman | _na_ka_na_: interesting metric would be. Java and Java+(JVM hosted languages) |
| 15:17 | _na_ka_na_ | Hmm right |
| 15:17 | joshua-choi | _na_ka_na_: Java is still widely used in enterprise server programs. On the mobile and desktop application side, not so much, though JavaFX is interesting |
| 15:17 | angerman | I'm wondering whether java has lost to the other languages or if the JVM as a whole is on a decline |
| 15:17 | joshua-choi | Java itself is not going away anytime soon any more than C or C++ are |
| 15:17 | angerman | joshua-choi: android? |
| 15:17 | _na_ka_na_ | joshua-choi: Yup Oracle are putting in lots of $$ into JavaFX |
| 15:17 | joshua-choi | Android, I guess |
| 15:18 | joshua-choi | No, I wouldn't count on it, though |
| 15:18 | angerman | I'm actually playing with the thought of putting Droid on my iPhone |
| 15:19 | joshua-choi | It'd be Snoracle, wouldn't it? |
| 15:19 | angerman | well as close as it can get to snorkel :D |
| 15:20 | joshua-choi | Do you have an reason why the merger matters to you? The JVM? |
| 15:22 | _na_ka_na_ | As long as they let James Gosling make the decisions.. it'd be fine I guess |
| 15:22 | OForero | Gosling left Oracle already |
| 15:22 | angerman | Well I'm probably not young... and langauges will come and go. But I somehow grew up with java and java's been sun. |
| 15:23 | OForero | I remember some jokes about the option of he going to the EPFL |
| 15:23 | OForero | joshua-cho: the main brain behind java and the JVM |
| 15:23 | angerman | so I'd just like some perspective stability from oracle. |
| 15:23 | _na_ka_na_ | OForero: When did he leave?? I attended a sun (ya still sun!) tech days few months back .. and he was still there |
| 15:24 | OForero | I remember seeing that news around april ... |
| 15:24 | OForero | http://www.reuters.com/article/idUSTRE63B4HV20100412 |
| 15:26 | OForero | is there any way to do types in Clojure? ... or I am just having dirty thoughts? |
| 15:26 | joshua-choi | OForero: There are now new ways, but they may be strange to you. |
| 15:26 | OForero | you mean the protocols? |
| 15:27 | joshua-choi | Take a look at http://clojure.org/datatypes and http://clojure.org/protocols |
| 15:27 | joshua-choi | Yeah |
| 15:27 | joshua-choi | Or are you talking about type hierarchies? |
| 15:28 | joshua-choi | I've got to go. Have a nice day, everyone. |
| 15:28 | OForero | I think I do not what I am talking about :-) |
| 15:29 | OForero | just experimenting |
| 15:29 | OForero | bye thanks for the links |
| 15:30 | chouser | I'm working on a staticly typed dsl on top of clojure. It's the least-clojurey thing I've ever expanded into clojure code. |
| 15:30 | chouser | different rules for resolution of locals, for example. |
| 15:30 | chouser | it's a bit amazing what I'll do for money. :-) |
| 15:31 | Dawgmatix | write code in perl ? |
| 15:31 | Dawgmatix | :D |
| 15:31 | OForero | statically typed clojure? any chance I can take a look at it without having to die afterwards? |
| 15:31 | angerman | Hmm... so what's so amazing about jMonkeyEngine? |
| 15:31 | chouser | OForero: no |
| 15:31 | chouser | they're not java types |
| 15:32 | chouser | shouldn't have said anything. I guess my point was you can make clojure be what you want to a large extent. |
| 15:32 | OForero | I do not want java types ... I just want safer functions ... like for example working with only a given struct |
| 15:33 | remleduff | You can get pretty far with preconditions |
| 15:33 | OForero | is that a commercial project? or the secret version of Clojure.Next :D |
| 15:35 | OForero | structs are maps ... which means ... no concrete type is created, right? |
| 15:36 | chouser | structs are dead. use defrecord |
| 15:38 | OForero | oh no, I have zombies in my code :D |
| 15:38 | OForero | I am reading about them right now |
| 15:40 | OForero | all that explanations on the terms of host make me think about SciFi B movies |
| 15:41 | remleduff | It's kind of a shame that all the struct stuff was in core, it would be nice if they were safely in their own, easily ignored namespace |
| 15:58 | angerman | I never had a problem with the clojure core. |
| 15:59 | angerman | but incanter is just huge. esp. if you want to use only a tiny part :( |
| 16:25 | ihodes | Would anyone be so kind as to help me with this little problem;having trouble calling .getAbsolutePath on my seq of Files: (map .getAbsolutePath (file-seq (java.io.File. *post-dir*))) |
| 16:26 | angerman | ihodes: does (map #(.getAbsolutePath %) (file-seq (java.io.File. *post-dir*))) work? |
| 16:26 | ihodes | ah that will work! let me try |
| 16:27 | ihodes | absolutely does |
| 16:27 | ihodes | thanks so much. so Java functions are second-class huh? |
| 16:27 | Chousuke | java methods are not functions at all :) |
| 16:27 | angerman | well. I don't think it really is a _function_ |
| 16:27 | ihodes | oh truth. |
| 16:27 | Chousuke | they're not first-class even in Java |
| 16:27 | Dawgmatix | any pointers to papers on persistent data structures (like the ones clojure implements) |
| 16:27 | ihodes | haha absolutely right. man it's been a while since I've thought about Java. makes total sense! thank you so much |
| 16:29 | hoeck | ~google chris okasaki |
| 16:29 | clojurebot | First, out of 1950 results is: |
| 16:29 | clojurebot | Chris Okasaki |
| 16:29 | clojurebot | http://www.eecs.usma.edu/webs/people/okasaki/ |
| 16:29 | hoeck | Dawgmatix: ^^ |
| 16:30 | Dawgmatix | thanks hoeck, do you mean the book on functional data structures by okasaki ? |
| 16:30 | Chousuke | There are also useful blog posts like http://blog.higher-order.net/2009/09/08/understanding-clojures-persistenthashmap-deftwice/ |
| 16:31 | hoeck | haven't read that, only looked over the paper which describes the idea behind the clojure ds |
| 16:31 | Dawgmatix | thanks chousuke |
| 16:32 | Dawgmatix | do you mean "Simple Confluently Persistent Catenable Lists" hoeck ? |
| 16:34 | Borkdude | ,(clojure-version) |
| 16:34 | clojurebot | "1.2.0-master-SNAPSHOT" |
| 16:34 | Borkdude | ,(map #(apply str %) (partition-by identity "1011011000")) |
| 16:34 | clojurebot | ("1" "0" "11" "0" "11" "000") |
| 16:35 | chouser | neat |
| 16:35 | hoeck | Dawgmatix: sorry, don't know which one exactly |
| 16:35 | Dawgmatix | np hoeck |
| 16:36 | hoeck | Dawgmatix: the clojure source also mentions kahrs and larsen |
| 16:42 | Dawgmatix | tarjan shows up in almost all data structures papers :) |
| 16:44 | Fossi | the okasaki is quite good |
| 16:44 | Fossi | and rich (obv) built on a lot of stuff in there |
| 16:45 | Dawgmatix | okay |
| 16:47 | Fossi | it's a good read :) |
| 16:48 | Dawgmatix | :) |
| 17:06 | wires | clojure rules!! :D |
| 17:10 | Borkdude | wires: yeah :) |
| 17:10 | Licenser | hmm why is the code run in repl a good bist faster then in a jar? |
| 17:12 | chouser | coincidence |
| 17:13 | Licenser | sure? Because it is mostly reproducable |
| 17:14 | Licenser | perhaps my self written time is off but I don't see how |
| 17:40 | arkahn | can anyone tell me why this bombs? (take 1 (map process (line-seq rdr)) |
| 17:40 | arkahn | I get the following: Exception in thread "main" java.lang.IllegalArgumentException: Wrong number of args passed to: core$take (core2.clj:0) |
| 17:41 | arkahn | core2.clj is the file I'm running against clojure |
| 17:42 | arkahn | (map process (line-seq rdr)) works, but returns nothing because it's a lazy seq of a lazy seq |
| 17:44 | arkahn | sorry, last thing - full 'program' can be found here: http://gist.github.com/412458 |
| 17:54 | Licenser | arkahn: how about using first? |
| 17:54 | arkahn | then I get a nearly identical exception: Exception in thread "main" java.lang.IllegalArgumentException: Wrong number of args passed to: core$first (core2.clj:0) |
| 17:56 | Licenser | arkahn: you forgot a ) |
| 17:56 | arkahn | oh noes... |
| 17:57 | Licenser | =) |
| 17:57 | arkahn | Licenser: thank you |
| 17:58 | Licenser | you're welcome |
| 17:58 | AWizzArd | :-) |
| 17:58 | Borkdude | ,(-: |
| 17:58 | clojurebot | Invalid token: -: |
| 17:59 | Borkdude | ,:- ) |
| 17:59 | clojurebot | :- |
| 18:01 | arkahn | currently, is there a dominant editor/ide/combo for writing clojure code? |
| 18:01 | arkahn | er ... that people predominantly use? |
| 18:02 | arkahn | emacs+slime seems to be a fav |
| 18:02 | lancepantz_ | yep |
| 18:07 | Borkdude | I use it too, most people do I think |
| 18:12 | arkahn | man, clojure changes everything: how I think and now which editor to use ; ) |
| 18:16 | lancepantz_ | i switched from vim to emacs, it was a really good decision |
| 18:18 | Borkdude | arkahn: yes, Clojure made me into an Emacs user as well |
| 18:18 | Borkdude | arkahn: I even use it now to talk in IRC... |
| 18:21 | Borkdude | gtg, bye |
| 18:21 | arkahn | see you |
| 18:41 | wires | is there a library that does 'pattern matching' or 'type checking' of clojure values? |
| 18:41 | leafw | these are different things |
| 18:41 | wires | yes |
| 18:41 | leafw | I know of "matchure", for pattern matching |
| 18:42 | wires | i want to match types and values, e.g. I want to restrict input to a function to "a map with a key :cheese witch has a value a vector with 3 elements", etc. |
| 18:42 | wires | leafw: let met chack matchure, thanks |
| 18:44 | wires | leafw: thanks, that looks decent enough for now. |
| 20:23 | technomancy | Raynes: nah, Factor is for 2011. this year it's Duby. |
| 20:24 | technomancy | low-level JVM stuffs |
| 20:59 | tcrayford | does clojure.java.io/writer fail sometimes to create writers out of sockets? |
| 21:00 | tcrayford | (those are java.net.Sockets) |
| 21:03 | tcrayford | I can get it working using reader, but not writer |
| 21:20 | krumholt_ | can i look up the functions for an interface like sequential? |
| 21:43 | technomancy | krumholt_: functions or methods? |
| 21:46 | krumholt_ | technomancy, both preferably |
| 21:49 | technomancy | krumholt_: in slime you can do C-c S-i to show all methods on an interface/class |
| 21:49 | technomancy | there's something like that in c.c.repl-utils too, but I only use the slime one |
| 21:49 | krumholt_ | technomancy, i'll try that thanks |
| 21:49 | tcrayford | clojure.contrib.repl-utils/show to be exact |
| 21:50 | Raynes | technomancy: Why Duby? |
| 21:51 | technomancy | Raynes: for android dev; you need the perf of a low-level language. |
| 21:51 | technomancy | Raynes: persistent data structures suuuuuuuuuck if you don't have a good GC |
| 21:52 | Raynes | technomancy: I see. :) |
| 21:52 | joshua-choi | I don't we'll be seeing practical Clojure apps in phones for a long time |
| 21:53 | emacsen | what are people's favorite sax-like XML parser for clojure? |
| 21:59 | AntonyBlakey | Do you specifically want a push-model parser or just something that doesn't create a DOM. I generally prefer using pull parsers. |
| 22:00 | emacsen | AntonyBlakey, something that doesn't create a dom, as my input XML ranges from 1 meg to 300gb |
| 22:00 | AntonyBlakey | http://www.extreme.indiana.edu/xgws/xsoap/xpp/ |
| 22:01 | emacsen | this appears to be pure Java |
| 22:01 | AntonyBlakey | Pull parsing is so much easier to code for because you effectively build a recursive descent processor using the pull parser as a token source. |
| 22:02 | AntonyBlakey | Sure, but why is that a problem - the interface is *very* narrow and it's just a token source. |
| 22:02 | emacsen | AntonyBlakey, I don't know Java well, just barely enough to interface it with Clojure |
| 22:03 | AntonyBlakey | XML parsing is a commodity technology, so using a Java lib is going to be your best shot. |
| 22:03 | AntonyBlakey | And this is just a jar, so you only need to know the interop to use it. |
| 22:04 | emacsen | I don't even see any docs |
| 22:05 | AntonyBlakey | http://www.xmlpull.org/ |
| 22:05 | emacsen | thx |
| 23:17 | Raynes | mmarczyk: Holy hell! I Just realized it was you that wrote my accepted answer here: http://stackoverflow.com/questions/1931875/when-is-it-ok-to-use-an-ioref |
| 23:18 | Raynes | Thanks for that again, by the way. <3 |
| 23:29 | technomancy | so @(promise) is my new favourite way to test timeout behaviour. |
| 23:29 | technomancy | down with Thread/sleep! |
| 23:39 | danlarkin | @(promise) rocks |
| 23:40 | remleduff | How does it help you with timeouts? |
| 23:41 | technomancy | remleduff: it just helps you cause them |
| 23:41 | technomancy | since derefing a promise that's not in scope anywhere else is guaranteed to block. |
| 23:42 | technomancy | forevah |
| 23:42 | remleduff | ah |
| 23:42 | danlarkin | I think there could be some clever tests written that involve promise and empty? |
| 23:48 | vIkSiT | hi all |
| 23:48 | vIkSiT | whats the best method to split an integer into a sequence |
| 23:48 | vIkSiT | ? |
| 23:52 | dnolen | vIkSiT: what do you mean? |
| 23:53 | vIkSiT | dnolen, well - converting 1234 to [1 2 3 4] |
| 23:58 | dnolen | ,(map #(Integer/parseInt %) (map str (seq (str 1234)))) |
| 23:58 | clojurebot | (1 2 3 4) |
| 23:59 | vIkSiT | hmm, yes I thought of that.. |
| 23:59 | vIkSiT | I was trying to do it another way - divide by 10 and return rem as a sequence element |