2010-08-20
| 00:00 | patrickdlogan | yeah, it doesn't complain to add the metadata to Foo but a java Class does not retain metadata. |
| 00:02 | spewn | I suppose that makes sense. Thanks. |
| 00:11 | spewn | Shame that I can't carry over the docstrings from my defstructs though. |
| 00:41 | technomancy | Leiningen 1.3.0: http://tinyurl.com/2duzupg |
| 00:41 | technomancy | I was thinking I'd be releasing Lein 1.2.0 on the same day as Clojure 1.2.0, but alas; didn't work out like that. =) |
| 00:56 | bortreb | what's the idiomatic way to filter a map by it's keys xor values, and return the whole map? |
| 00:56 | wwmorgan | bortreb: example input and output? |
| 00:57 | bmh | while where on the subject: is there a library function that will do [(filter f n) (remove f n)] in a single pass over n? |
| 00:58 | bortreb | (keys-filter even? {2 "two" 3 "three"}) would return {2 "two"}. |
| 00:58 | bortreb | (vals-filter even? {"two" 2 "three" 3}) would return {"two" 2} |
| 00:59 | bortreb | fight now I'm using zip-map akwardly but I was wondering if there was a better way? |
| 01:04 | bortreb | because, filter returns a lazy sequence.... |
| 01:05 | dnolen_ | technomancy: nice! I guess you can no longer start a REPL w/o a project.clj. Also lein repl puts you in clojure.core, shouldn't it put you in user ? |
| 01:07 | wwmorgan | bortreb: here are two filter-keys implementations. I don't know if they're better- or worse-looking than what you have already :-p http://paste.lisp.org/display/113690 |
| 01:13 | bortreb | wwmorgan: thanks for your help! of the two methods, the one that does not use threading seems to be slightly faster |
| 01:14 | bortreb | although, I figured there was some mega-hash-map library somewhere that already had this which I had overlooked |
| 01:21 | bortreb | wwmorgan: how about this one? http://paste.lisp.org/display/113690#1 |
| 01:23 | wwmorgan | bortreb: that looks pretty optimal to me |
| 01:27 | bortreb | and I guess filter-vals looks prettiest as (defn filter-vals [fun m] (into {} (filter (comp fun last) m))) ? or can it be even prettier? |
| 01:28 | wwmorgan | I'd use val instead of last to make it clearer |
| 01:28 | bortreb | wwmorgan: ooohhh that's a good one! |
| 01:46 | LauJensen | Good morning all |
| 01:46 | itistoday | LauJensen: Morning! and actually, good-night! I was just heading to sleep. :-) |
| 01:47 | LauJensen | ,UGT |
| 01:47 | clojurebot | java.lang.Exception: Unable to resolve symbol: UGT in this context |
| 01:47 | LauJensen | clojurebot: UGT |
| 01:47 | clojurebot | ugt is Universal Greeting Time: http://www.total-knowledge.com/~ilya/mips/ugt.html |
| 01:47 | LauJensen | itistoday: sleep tight :) |
| 01:47 | itistoday | :-) |
| 01:48 | Raynes | Morning. |
| 01:48 | LauJensen | Raynes: pulling an all-nighter? |
| 01:48 | Raynes | LauJensen: I just woke up. |
| 01:53 | LauJensen | What time have you got ? |
| 01:53 | LauJensen | @ Raynes |
| 01:54 | Raynes | $time -5 |
| 01:54 | sexpbot | Raynes: The time is now 2010-08-20T01:02:42Z |
| 01:54 | LauJensen | Nice |
| 02:09 | slyrus | technomancy: lein 1.2 or 1.3? |
| 02:09 | rdsr | I just noticed that there can be duplicate keys in literal maps |
| 02:10 | hiredman | ,{:a 1 :a 2} |
| 02:10 | clojurebot | Duplicate key: :a |
| 02:11 | rdsr | hiredman, which version of clojure u are using? |
| 02:12 | hiredman | ,*clojure-version* |
| 02:12 | clojurebot | {:interim true, :major 1, :minor 2, :incremental 0, :qualifier "master"} |
| 02:14 | rdsr | thks |
| 02:15 | hiredman | http://github.com/hiredman/Arkham/commit/f2dd23f554a676d2797da45929873a6a43068c73#L0L228 mmm |
| 04:11 | lenw | Hi |
| 04:11 | lenw | is the following code safe : http://gist.github.com/539866 |
| 04:12 | lenw | or would the stack build up |
| 04:12 | lenw | ? |
| 04:17 | AWizzArd | lenw: no stack problem |
| 04:18 | lenw | AWizzArd: is that cause i am not passing anything through the recur ? |
| 04:18 | lenw | AWizzArd: just curious :) |
| 04:19 | Bjering | Can I use java objects as keys in clojure maps? What are the rules if I do? |
| 04:19 | LauJensen | lenw: yes. For the stack to blow you need to build the memory beyond what it can take |
| 04:20 | LauJensen | ,{(make-array Integer/TYPE 5) "hi"} |
| 04:20 | clojurebot | {#<int[] [I@5f45f1> "hi"} |
| 04:22 | LauJensen | Bjering: That means yes |
| 04:24 | zmila | ,(clojure-version) |
| 04:24 | clojurebot | "1.2.0-master-SNAPSHOT" |
| 04:24 | spariev | Bjering: re rules - from clojure.org/data_structures - Hash maps require keys that correctly support hashCode and equals |
| 04:25 | LauJensen | spariev: And I think also a 3.rd interface in the next release of Clojure, Rich mentioned that in here a couple of weeks ago |
| 04:25 | LauJensen | MapEqual or some such |
| 04:27 | Bjering | LauJensen and spariev, thank you. What if the java object changes values (and thus changes hash-code/equals) ? |
| 04:28 | AWizzArd | lenw: loop/recur is the plain old goto. There is no stack that can blow up. |
| 04:29 | Bjering | Well, my use-case is netty-channels as keys, they are not value-objects, they dont overload hashCode/equals, they are like the integer arrays LauJensen showed me works, id is their memory reference and isnt changing, seems it should be ok. |
| 04:30 | lenw | AWizzArd: that makes sense - and the "references" are rebound each time through |
| 04:30 | AWizzArd | yes |
| 04:30 | lenw | thanks |
| 04:33 | spariev | Bjering: I think it will be ok, as long as keys' hashcodes won't change |
| 04:36 | spariev | LauJensen: interesting, I didn't know that. Do you have any links on this ? haven't managed to find anything relevant in irc logs ... |
| 04:36 | LauJensen | spariev: I'll grep my log, gimme 10 secs |
| 04:37 | Raynes | lenw: Also, you don't even need the loop there at all. Just plain ol' recur ought to do it. |
| 04:38 | Raynes | And I'm pretty sure you can't name something '1' ;) |
| 04:38 | Raynes | -> (def 1) |
| 04:38 | sexpbot | java.lang.Exception: First argument to def must be a Symbol |
| 04:39 | LauJensen | About 20:53 CET, August 4 2010 |
| 04:39 | LauJensen | <rhickey> got homemade IPersistentMaps? please try latest rev on github. Fixing |
| 04:39 | LauJensen | record equiality meant introducing a MapEquivalence marker class - you must |
| 04:39 | LauJensen | implement in order to be = to maps (APersistentMap does this) |
| 04:39 | LauJensen | |
| 04:40 | spariev | LauJensen: big thanks |
| 04:40 | lenw | Raynes: updated the gist - like that ? |
| 04:40 | LauJensen | np |
| 04:41 | Raynes | lenw: Yep. But like I said, you can't name it '1'. |
| 04:42 | Raynes | And, purely a style critique, you might consider setting tab width to 2 spaces. |
| 04:42 | Raynes | It's usually two unless lining up function arguments. |
| 04:42 | Raynes | s/function arguments/arguments/ |
| 04:43 | sexpbot | It's usually two unless lining up arguments. |
| 04:43 | LauJensen | Raynes: As far as I know, most people go with 4 |
| 04:44 | Raynes | LauJensen: Since when? ._. |
| 04:44 | LauJensen | Since last time I googled it :) |
| 04:44 | LauJensen | I grabbed it from a larger tabs/spaces discussion in an Emacs forum |
| 04:44 | Raynes | LauJensen: clojure-mode indents two. Everything I've ever heard was "two" for Lisp. |
| 04:45 | LauJensen | Really? Interesting |
| 04:46 | Raynes | Yup, that would be two. |
| 04:48 | LauJensen | Odd - My code does it as well, and Ive been staring a Clojure code for 3 years now and also remembered the number as '4' despite that fact thats its obviously 2 :) |
| 04:48 | LauJensen | (set! *memory-of-indentation* 2) |
| 04:49 | Raynes | :p |
| 04:51 | Raynes | Oh cool. Clojure can destructure based on index now. |
| 04:51 | LauJensen | link? |
| 04:51 | clojurebot | your link is dead |
| 04:52 | Raynes | -> (let [{first-thing 0, last-thing 3} '[a b c d]] [first-thing last-thing]) |
| 04:52 | sexpbot | => [a d] |
| 04:52 | Raynes | LauJensen: http://fogus.me/static/preso/clj1.2+/ Slide 9 |
| 04:52 | LauJensen | nice |
| 04:54 | Raynes | A new clojure.java.browse namespace. |
| 04:54 | Raynes | I've been totally kept out of the loop. |
| 04:54 | Raynes | I'm pissed. ;) |
| 04:55 | LauJensen | btw Raynes, there was a murder in your state the other day, did you hear about that, some 18 year old kid got shot in his own home? |
| 04:55 | Raynes | LauJensen: There are plenty of murders. |
| 04:55 | LauJensen | oh |
| 04:55 | LauJensen | I assumed there wasn't, since I actually heard about that one |
| 04:55 | Raynes | Go visit Detroit Michigan. ._. |
| 04:58 | LauJensen | Raynes: Michael Moore said that the US has 11.500 yearly homocides, vs 350 in Canada |
| 04:58 | Raynes | Indeed. |
| 05:01 | spariev | you guys scare me. My gf have to visit Chicago in a couple of months |
| 05:02 | Raynes | spariev: Teach her to handle a .40. |
| 05:02 | LauJensen | spariev: Sorry |
| 05:03 | spariev | nevermind |
| 05:04 | spariev | Raynes: it's illegal to have firearm in Russia |
| 05:04 | spariev | you can only buy gas pistols etc |
| 05:05 | spariev | but we went way offtopic :) |
| 05:43 | Ankou | hi, is there a reason why http://clojure.org/downloads doesn't list clojure 1.1 under older releases anymore? |
| 05:56 | LauJensen | Ankou: I remember rhickey talking about wanting to see some downloads stats, which he could only do if the download was available from google code - I dont know if thats relevant to your question, but I haven't heard anything else |
| 06:28 | __debaser | hey, what is the best way to start a Clojure Repl with contrib and jline? |
| 06:29 | __debaser | lein repl works but you have to create a project in order to use it |
| 06:29 | LauJensen | java -cp clojure.jar:jline.jar clojure.main ? |
| 06:30 | __debaser | that does not include Clojure-contrib |
| 06:31 | LauJensen | java -cp clojure.jar:jline.jar:contrib.jar clojure.main ? |
| 06:31 | LauJensen | Sorry, its fixed now :) |
| 06:32 | LauJensen | __debaser: but personally what I do if Im just experiment, I hit M-x slime in Emacs, and that sets up a repl with contrib, penumbra, citerion and a host of other libs that I play with somewhat frequently |
| 06:35 | __debaser | LauJensen: strange, your version works just fine |
| 06:35 | __debaser | tried the same yesterday and it didnt |
| 06:35 | __debaser | so thanks a lot |
| 06:36 | LauJensen | np |
| 06:41 | __debaser | I am just getting accustomed to Vim, so switsching to emacs is not an option |
| 06:42 | __debaser | and while the Clojure plugin for Vim is ver nice I find the repl in vim hard to use |
| 06:44 | LauJensen | __debaser: VimClojure? |
| 06:45 | __debaser | yes |
| 06:45 | LauJensen | You could talk to kotarak, the author, about it. He hangs out in here most nights (CET) |
| 06:53 | __debaser | nah, he did a good job on it, it's just not how I like to run it |
| 06:53 | LauJensen | ok |
| 06:53 | __debaser | java -cp ./clojure-1.2.0/clojure.jar:./jline-0.9.94/jline-0.9.94.jar:./clojure-contrib-1.2.0/target/clojure-contrib-1.2.0.jar jline.ConsoleRunner clojure.main works fine for me |
| 06:54 | LauJensen | __debaser: Thats crazy man, but different strokes for different folk I suppose |
| 06:55 | __debaser | hm, maybe i'll try it again, I never could figure out if I wanted to run the whole script or just the current line |
| 06:56 | LauJensen | Im just thinking, in Emacs you get tab completion, fuzzy completion, autodoc, code look up, object inspection, etc etc. With JLine you get zero. You're giving up 90% productivity to hang on to a fading editor. It just seems crazy to me |
| 06:57 | ordnungswidrig | you can user viper with emacs |
| 07:01 | Chousuke | You can, but it doesn't really work. |
| 07:01 | __debaser | well I disagree that Vim is inferior to Emacs and it is definitely not fading but I understand that Clojure support is better |
| 07:03 | Chousuke | __debaser: Don't take LauJensen too seriously when he says things like that. He has a tendency to say flamebaitish things :P |
| 07:04 | psykotic | on this point, though, he happens to be 100% right. :) |
| 07:04 | LauJensen | It wasn't a flamebait - I just felt bad for the guy sitting in a shell working with JLine, he's bound to have a tough time getting started |
| 07:05 | kensho | Hi. I'm looking for javadoc of the clojure API (on the java side, e.g. seqable interface etc.) but I can't find it? |
| 07:05 | Chousuke | kensho: It doesn't exist :Ö |
| 07:05 | Chousuke | :P even |
| 07:05 | kensho | oh :( |
| 07:05 | kensho | are there plans to make it available? |
| 07:06 | Chousuke | probably not, as many of the interfaces are going to be replaced eventually anyway |
| 07:06 | kensho | I see |
| 07:06 | kensho | Are there any examples where I can see how to implement them then? :) |
| 07:07 | Chousuke | in general though, if you need to implement the interfaces you should first see if you can extend any of the abstract base classes instead. |
| 07:07 | Chousuke | some of the interfaces (like IFn) are in fact generated code and implementing them fully manually is rather painful |
| 07:08 | Chousuke | so if you need to create a Clojure function from java, you should extend AFn instead |
| 07:09 | Chousuke | At least, as far as I know. I haven't had to worry about the Java side of Clojure much. |
| 07:09 | kensho | I see. Well I would like to make a w3c dom NodeList seqable, maybe something like that already exists? |
| 07:09 | kensho | it's a pain to work with in clojure otherwise |
| 07:10 | Chousuke | kensho: I think for now the easiest approach is to just make a function that returns a lazy seq made from the NodeList |
| 07:11 | Chousuke | not directly seqable but good enough most of the time. |
| 07:11 | kensho | Oh ok. I will try that then. Thanks |
| 07:11 | Chousuke | Of course you can go and look at ISeq and whatever other interfaces there are, but you'll pretty much need to figure them out the hard way :P |
| 07:11 | cemerick | there's plenty of precedent, especially if NodeList is mutable, e.g. enumeration-seq and iterator-seq |
| 07:12 | cemerick | kensho: ^ |
| 07:13 | kensho | Yeah well, maybe if performance is unacceptable I will look into it, I'll try the easy way for now :) thanks again |
| 07:17 | LauJensen | kensho: Dending on what you're doing with the w3m lib, you might want to check out Enlive |
| 07:17 | AWizzArd | this is a classic, but I enjoy to see this language comparison each and every time *lol* http://i.imgur.com/1gF1j.jpg |
| 07:23 | LauJensen | What the way to do a cross table filter select in mysql? "select * from x where y is not in (select * from z)"? basically, all items from x where some field isnt equal to a value from a field in z ? |
| 07:24 | bobo_ | dont think your allowed to do that? |
| 07:25 | bobo_ | you have to specify column in z |
| 07:26 | LauJensen | bobo_: which is fine |
| 07:26 | bobo_ | so select * from x where y not in (select w from z) |
| 07:26 | LauJensen | Yea Im quite sure Ive seen it done/done it before |
| 07:26 | bobo_ | i do way to much sql |
| 07:26 | LauJensen | yea something like that |
| 07:29 | LauJensen | nice, that actually worked just as you would expect |
| 07:32 | metagov | That notice about clonebots makes me think of replicants from Blade Runner. I wonder if they can even test for the Nexus 6 clonebots... |
| 07:32 | LauJensen | metagov: they just inspect the meta data, its all there |
| 07:37 | metagov | LauJensen: Well, so long as clonebots still have a 4 year life span, I guess I won't worry too much ;-) |
| 09:07 | adityo | nipra |
| 09:09 | don333 | Raynes: *clojure-version* gives "java.lang.SecurityException: Code did not pass sandbox guidelines", could you perhaps whitelist it? |
| 09:10 | don333 | I meant on try-clojure.org of course :) |
| 09:10 | Raynes | don333: Indeed. (clojure-version) might work though. |
| 09:10 | Raynes | don333: I'll do that in a little while. I need to update it to 1.2 and stuff anyway. |
| 09:12 | don333 | should have checked the fn before whining... |
| 09:12 | don333 | (clojure-version) works fine |
| 09:12 | Raynes | *clojure-version* should be whitelisted anyway. :p |
| 09:13 | Raynes | So I very much appreciate your whining. :> |
| 09:13 | LauJensen | hehe |
| 09:13 | don333 | heh |
| 09:13 | don333 | good luck on 1.2 update then |
| 09:16 | fbru02 | hey guys i have a question , before protocols when you wanted to emulate objects , there was only hashes right ? |
| 09:17 | chouser | or gen-class, but yeah hashes+metadata+(perhaps)multimethods |
| 09:24 | fbru02 | chouser: thanks !! |
| 09:25 | chouser | oh, so people like defstruct but those are really just somewhat optomized hashes |
| 09:25 | AWizzArd | Although Clojure 1.2 is now officially here, I must admit that I will be happily using what will be 1.3 one day (: |
| 09:26 | LauJensen | Statics? |
| 09:27 | AWizzArd | LauJensen: you mean me? |
| 09:27 | fbru02 | AWizzArd: is there a roadmap for 1.3? |
| 09:27 | LauJensen | yea |
| 09:27 | AWizzArd | LauJensen: for example! Maybe also Pods. |
| 09:27 | LauJensen | AWizzArd: How much info do you have on Pods ? |
| 09:27 | AWizzArd | And I am looking forward to marker interfaces for Records. |
| 09:27 | AWizzArd | LauJensen: mostly all info: Cells were renamed to Pods. |
| 09:28 | AWizzArd | I am probably the only user of Cells :) |
| 09:28 | LauJensen | k |
| 09:28 | LauJensen | What do you use them for ? |
| 09:28 | AWizzArd | LauJensen: for Transactions in my DB system |
| 09:28 | LauJensen | really, got that public somewhere? |
| 09:28 | AWizzArd | Unfortunately I still can only say "soon". |
| 09:29 | AWizzArd | But it will be available in source. |
| 09:29 | AWizzArd | And really soon I wish :) |
| 09:29 | AWizzArd | Currently I am at lightweight and efficient serialization/deserialization. And for that a marker interface for records would be great. |
| 09:30 | LauJensen | AWizzArd: Which limitations in Clojure drove you to Cells? |
| 09:31 | AWizzArd | LauJensen: not in Clojure, but in refs and agents. I won't call them limitations however. The challenge is to atomically update a collection multiple times *and* writing data to disk *within* the transaction. |
| 09:31 | AWizzArd | refs can't do that for the side effect "writing to disk" part. |
| 09:32 | LauJensen | so you wrote a ref which hands respins somehow? |
| 09:32 | AWizzArd | instead of a ref I used a cell. |
| 09:32 | AWizzArd | Now I can update it in the (with-cells [] ...) block, which is equivalent to dosync. |
| 09:32 | AWizzArd | And still in the with-cells block I do IO. |
| 09:32 | AWizzArd | This would not be allowed in refs. |
| 09:33 | AWizzArd | And agents would run in a different thread - it is awkward to learn about errors in transactions. |
| 09:33 | AWizzArd | I would have to pass in a promise into the agent and deref it outside. |
| 09:34 | LauJensen | Hmm, that sounds like a super subject for a blogpost |
| 09:35 | AWizzArd | Those posts will all come. |
| 09:35 | AWizzArd | Until now Cells were highly alpha. |
| 09:35 | AWizzArd | rhickey made a basic implementation and then concentrated on 1.2. But now he renamed them to Pods and will maybe change some aspects of them - we'll see. |
| 09:37 | LauJensen | Very interesting |
| 09:37 | LauJensen | What are your expectations for marker interfaces? |
| 09:37 | AWizzArd | This is https://www.assembla.com/spaces/clojure/tickets/394-add-marker-interfaces-for-defrecords-and-deftypes-plus-boolean-test-fns |
| 09:38 | AWizzArd | For any Object x I want to be able to ask (record? x) |
| 09:38 | LauJensen | As yes I remember now |
| 09:38 | LauJensen | I think that has a pretty good chance of being implemented quite quickly |
| 09:38 | AWizzArd | Those can be serialized with a better strategy than unknown objects in general. |
| 09:39 | AWizzArd | LauJensen: yes, in principle I could imagine that this is more or less an empty interface plus 2-3 LOC in defrecord / deftype |
| 09:40 | AWizzArd | Btw, does the JVM support something such as "private interfaces"? |
| 09:40 | AWizzArd | So that nobody could implement clojure.lang.Record in her classes, but only defrecord itself can do this? |
| 09:41 | LauJensen | It supports private interfaces if nested |
| 09:41 | AWizzArd | sounds good, thx |
| 09:45 | AWizzArd | Anyone of the Maven experts here: does Maven support incremental builds? I have 30 .clj files in my build, and the produced .jar looks fine with the exception of small warts coming from 2 files. I change 5 LOS in two files. Do I now need to compile all 30 NS again or can it be done this time within a second (+ time for creating the .jar), cause only those two files will be recompiled? |
| 09:46 | LauJensen | AWizzArd: Im not sure cemerick or stuartsierra highlight on 'Maven expert' yet :) |
| 09:47 | spariev | AFAIK maven can sure do so with java files |
| 09:47 | cemerick | AWizzArd: That's a function of one's compiler, not the build tool. |
| 09:47 | cemerick | in any case, for both java and clojure, if you don't clean first, running mvn compile and/or jar will only compile the files that have changed. |
| 09:48 | cemerick | Or, more precisely, will only compile the files whose moddate is later than the corresponding classfile(s). |
| 09:48 | rrc7cz | my Monte Carlo calc of Pi isn't working too well (keeps returning ~3.6...) and I'm hoping somebody could help me spot the error: http://gist.github.com/540352 |
| 09:49 | AWizzArd | cemerick: okay good, so this is implicitly present |
| 09:49 | AWizzArd | cemerick: I thought the build tool is doing that job of checking the timestamps. Thanks for that update. |
| 09:50 | AWizzArd | LauJensen: though those two may be some of the most experienced maven gurus in here (: |
| 09:50 | cemerick | AWizzArd: Neither ant nor maven handle that. I think make did? Totally not sure on that. |
| 09:50 | AWizzArd | k |
| 09:51 | cemerick | LauJensen: as long as you're johnny-on-the-spot with the mvn bat-signal, then I think myself or SS will be highlighted just fine ;-) |
| 09:52 | LauJensen | Yea I know - I usually go to people directly if I know somebody is likely to have the answer |
| 10:07 | slyrus | let's see if the old "go to sleep with a tricky problem and wake up and see the obvious easy solution" trick works again |
| 10:07 | Raynes | It works every time,. |
| 10:07 | Raynes | time.* |
| 10:12 | LauJensen | That and a rubber plant |
| 10:24 | Scala_ | Does clojure have any of those "get started" type packages that has a cli and an interpreter and everything you need to get going |
| 10:24 | nachtalp | rrc7cz: try (float (* 4 (/ in (+ in out)))) instead of (float (/ in out)) |
| 10:25 | cemerick | Scala_: java -jar clojure.jar will get you a quick-n-dirty REPL. |
| 10:25 | cemerick | Scala_: Note that clojure never interprets anything though -- everything is compiled. |
| 10:26 | rrc7cz | nachtalp: that did it |
| 10:26 | rrc7cz | nachtalp: thank you. I understand the * 4 since I am only sampling a single quadrant |
| 10:27 | nachtalp | rrc7cz: see here: http://math.fullerton.edu/mathews/n2003/MonteCarloPiMod.html |
| 10:28 | slyrus | ,(apply hash-map (map identity {1 2 3 4})) |
| 10:28 | clojurebot | {[1 2] [3 4]} |
| 10:28 | slyrus | how do I map over a map and get back a map? |
| 10:28 | cemerick | chouser: don't let the power go to your head, 'kay? ;-) |
| 10:28 | dnolen_ | Scala_: cljr, cake are nice if you want a decent REPL. I prefer cake for REPL'ing. Note that Clojure has no interpreter. The REPL compiles on the fly. |
| 10:29 | LauJensen | slyrus: Usually reduce is a better fit |
| 10:29 | Raynes | dnolen: I like how cake does multi-line stuff. |
| 10:29 | rrc7cz | nachtalp: that explains it, thanks |
| 10:30 | slyrus | LauJensen: yeah, I guess so... |
| 10:30 | LauJensen | ,(reduce (fn [a [k v]] (assoc a k (inc v))) {} {:a 1 :b 2 :c 3}) |
| 10:30 | clojurebot | {:c 4, :b 3, :a 2} |
| 10:30 | LauJensen | replace inc with what you would have mapped for instance |
| 10:31 | slyrus | thanks |
| 10:31 | slyrus | or the trivial example I was looking for: |
| 10:31 | slyrus | (reduce conj {} {1 2 3 4}) |
| 10:31 | slyrus | ,(reduce conj {} {1 2 3 4}) |
| 10:31 | clojurebot | {3 4, 1 2} |
| 10:32 | slyrus | I find myself wanting to conj map-entries into a map, instead of assoc'ing k/v pairs into a map. that's probably a mistake on my part. |
| 10:33 | LauJensen | Why do you want that? |
| 10:33 | slyrus | it's not that I particularly want that, it's just two ways of thinking about doing the same thing |
| 10:34 | slyrus | and I'm thinking of the way that's a bit ... unnatural for clojure it seems |
| 10:34 | slyrus | probably more CL-isms where cons is generally a lot easier to work with than make-hash-table, get-hash, etc... |
| 10:35 | slyrus | and most things in clojure seem to work as I expect them to. except of course when they don't, like my repeated unwarranted expectation that #[...] will be #(vector ...) |
| 10:36 | LauJensen | hehe |
| 10:37 | chouser | slyrus: also be aware of zipmap |
| 10:37 | arkh | LauJensen, could you provide a translation to a quote in JoC? : "Wer nicht von dreitausend Jahren. Sich wei Rechenschaft zu geben, bleib im |
| 10:37 | arkh | Dunkeln unerfahren, mag von Tag zu Tag leben." |
| 10:38 | chouser | ,(into {} {1 2 3 4}) |
| 10:38 | clojurebot | {1 2, 3 4} |
| 10:38 | chouser | ^^ more efficient than reduce |
| 10:38 | LauJensen | arkh: Sorry no, try AWizzArd :) |
| 10:38 | nachtalp | rrc7cz: np :) |
| 10:38 | slyrus | chouser: I want the three-arg function that takes a fn to call on the map entry before putting it in the map :) |
| 10:38 | arkh | k |
| 10:39 | chouser | slyrus: the whole entry? or each value? |
| 10:39 | arkh | AWizzArd: did you catch that? |
| 10:39 | slyrus | chouser: [k v] |
| 10:39 | chouser | (into {} (map f m)) |
| 10:39 | slyrus | but, all of this is much nicer than (loop for x being the hash-keys of ...) |
| 10:39 | slyrus | :) |
| 10:39 | LauJensen | arkh: according to Google |
| 10:39 | LauJensen | "Who does not of three thousand years. To give further accountability, stay in |
| 10:39 | LauJensen | Dark inexperienced, may live from day to day" |
| 10:40 | slyrus | or whatever the CL syntax for that is |
| 10:40 | Chousuke | slyrus: the CL loop macro is scary :P |
| 10:40 | LauJensen | arkh: And that matches how I read it (as a dane) |
| 10:40 | chouser | cemerick: the #clojure power? |
| 10:40 | cemerick | indeed |
| 10:40 | cemerick | 1. Gain op in #clojure. |
| 10:40 | cemerick | 2. ??? |
| 10:40 | cemerick | 3. Profit! |
| 10:40 | nachtalp | arkh: that's a strange sentence... |
| 10:41 | LauJensen | nachtalp: probably something chouser wrote, americans love to show off their 'german' :) |
| 10:41 | Chousuke | I bet you could (loop through ideas in my head and select the best option) |
| 10:41 | chouser | cemerick: ??? = fees to /join |
| 10:41 | arkh | LauJensen: I tried that too but was hoping for a better translation. Maybe there really isn't one |
| 10:41 | LauJensen | I think its quite accurate |
| 10:41 | cemerick | chouser: too draconian. Fees to get voice. Let the lurkers lurk. It's called "freemium"! |
| 10:41 | chouser | ha! |
| 10:41 | arkh | nachtalp: page 278, JoC, author Johann Wolfgang von Goethe |
| 10:42 | arkh | LauJensen: sorry to confuse your dutch vs. german background, btw! |
| 10:42 | LauJensen | arkh: Dont be - You should be more sorry about confusing my Danish background with a dutch one |
| 10:43 | mfex | I too failed to understand the german quote in joc |
| 10:43 | Chousuke | :P |
| 10:43 | nachtalp | arkh: ok, goethe, that explains why it sounds strange ;) |
| 10:43 | arkh | LauJensen: ... speaking to your language(s) background vs. your nationality :) |
| 10:43 | LauJensen | ... makes no difference :) |
| 10:44 | arkh | LauJensen: oh :( |
| 10:45 | arkh | LauJensen: can I claim typical american ignorance for foreign issues? :) |
| 10:45 | LauJensen | Sure |
| 10:45 | arkh | LauJensen: in all seriousness, I still with 'Danish' |
| 10:45 | arkh | s/still/stick |
| 10:46 | LauJensen | Danes are Danish and they speak Danish, People from Holland/Netherlands speak Dutch |
| 10:46 | LauJensen | And you guys owe us a lot of money. I think thats all you need to know about Europe |
| 10:46 | arkh | LauJensen: lol - thank you |
| 10:46 | Scala_ | cemerick: Huh, surprising they don't have something readily-accessable like python/ruby where you install one thing and immediately can create/run/repl projects |
| 10:47 | Scala_ | dnolen_: ^ |
| 10:47 | LauJensen | Scala_: Are you comfortable with Emacs and running a Linux system ? |
| 10:47 | Scala_ | LauJensen: Personally vim, and yes |
| 10:47 | cemerick | Scala_: not sure what you mean -- like scaffolding or something? |
| 10:47 | LauJensen | Scala_: Okay, I dont think VimClojure is very easy to install, but the Emacs package is doable :) |
| 10:48 | LauJensen | Also there is something called Clojure In A Box I think |
| 10:48 | Scala_ | LauJensen: Ah, similar to lisp in a box? |
| 10:48 | LauJensen | Yes |
| 10:48 | cemerick | Scala_: FYI: http://www.assembla.com/wiki/show/clojure/Getting_Started |
| 10:49 | Scala_ | cemerick: When you isntall python for example, you have access to an interpreter and a repl right off the bat, and you can essentially do everything you want to do (without outside packages) immediately |
| 10:49 | cemerick | Scala_: not sure that's better than needing a single file and 'java -jar'ing it. *shrug* |
| 10:50 | rrc7cz | Scala_, LauJensen: Clojure Box does that. It was my first env. You literally run the installer and you're up and running, though it is Emacs so you might need to check up on key bindings |
| 10:50 | LauJensen | Cool |
| 10:50 | Scala_ | rrc7cz: Nifty, though emacs :'( |
| 10:51 | Scala_ | cemerick: Maybe, but I've never used anything on the Java platform. I was hoping I could just "clojure helloworld.clj" and be ready to run |
| 10:51 | rrc7cz | Scala_: well, the easiest in the world would be: http://www.try-clojure.org/ |
| 10:51 | chouser | A human translation of that Goethe quote: "He who cannot be farsighted / Nor three thousand years assay, / Inexperienced stays benighted |
| 10:51 | chouser | /Let him live from day to day" |
| 10:52 | LauJensen | rrc7cz: yea, though thats a little restricted and lacking a tutorial |
| 10:52 | Scala_ | rrc7cz: That's neat, but you really can't do anything worthwhile there |
| 10:52 | cemerick | Scala_: It's really a difference of just a few characters, or a shell script. cljr looks very promising in terms of upping the bar in a command-line setting. *shrug* |
| 10:53 | cemerick | e.g. running a helloworld.clj file would be `java -cp clojure.jar helloworld.clj` |
| 10:53 | LauJensen | chouser: I dont think you can get a german speaking person to confirm that |
| 10:53 | Scala_ | cemerick: That's all and good if you know how java works already |
| 10:53 | dnolen_ | Scala_: this issue comes up again and again. It's known. Perhaps 1.3 will have a solution for every OS. But not today. Do you have Java installed? |
| 10:53 | Scala_ | dnolen_: Yes. |
| 10:54 | dnolen_ | Scala_: do you installing something via Ruby? |
| 10:54 | dnolen_ | do you mind I mean. |
| 10:54 | Scala_ | I should be clear though that I'm not having any issues getting clojure set up the 'normal' way, I was more just curious if there was strides being made (or made already) to getting all-in-one setups for people new to clojure |
| 10:54 | chouser | LauJensen: do you mean you think that transaltion I pasted is inaccurate? |
| 10:55 | cemerick | Scala_: Clojure is a hosted language, so you'll have to be/become familiar with the host in question, whether that's the jvm or the CLR (js in the future and who knows what else). |
| 10:55 | LauJensen | chouser: Yes, I dont read it as such, I dont see the first sentence of yours in the german version at all |
| 10:55 | dnolen_ | Scala_: cljr is pretty good. I 'sudo gem install cake', and I have a working setup immediately. |
| 10:55 | LauJensen | But Im not german, so Im just saying I think you should speak with someone who is |
| 10:55 | lightcatcher | i'm new to clojure and functional languages in general, having some problems with a simple function i'm trying to write |
| 10:55 | Scala_ | dnolen_: Nice. I'll give that a shot |
| 10:56 | lightcatcher | if someone could recommend a pastebin, i'll put it up, and it would be great if someone could help me |
| 10:56 | Scala_ | dnolen: Funny that you can install clojure through a gem of all things though, hah |
| 10:56 | Scala_ | I'd expect a deb or rpm :P |
| 10:56 | jkkramer | lightcatcher: a lot of people use gist.github.com |
| 10:57 | cemerick | java libs are unfortunately not handled well by system package managers in general |
| 10:57 | Chousuke | gist has good Clojure syntax highlighting |
| 10:57 | lightcatcher | thanks jkkramer, i didn't know of anywhere that has clojure hilighting |
| 10:57 | chouser | I'm not at all sure about "good", but it has some |
| 10:57 | Chousuke | chouser: better than paste.lisp.org :P |
| 10:57 | nachtalp | LauJensen: i don't see the 'farsighted' part either |
| 10:57 | chouser | :-) |
| 10:58 | lightcatcher | http://gist.github.com/540490 is my snippet |
| 10:58 | chouser | looks like that transaltion is trying hard to rhyme in English |
| 10:58 | lightcatcher | the goal is defined pretty well in the docstring imo |
| 10:59 | lightcatcher | the code is working to provide an int in proper range, but the if statement to prevent forbidden doesn't seem to be working |
| 10:59 | nachtalp | chouser: yeah :) |
| 10:59 | chouser | lightcatcher: looks like perhaps you've used or are learning from scheme |
| 10:59 | Chousuke | lightcatcher: don't use def in functions. :) |
| 10:59 | nachtalp | chouser: but i'd say that the gist is the same in both the german version and the translation |
| 10:59 | lightcatcher | how should i save the random value then? |
| 10:59 | nachtalp | chouser: at least as far as that's possible for poetry... |
| 10:59 | Chousuke | lightcatcher: lightcatcher you'll need to use let |
| 11:00 | Chousuke | oops |
| 11:00 | chouser | nachtalp: ok, thanks |
| 11:00 | lightcatcher | thanks Chousuke |
| 11:00 | jkkramer | lightcatcher: (let [rval ...] ...) |
| 11:00 | Chousuke | lightcatcher: also use recur instead of calling the function recursively |
| 11:00 | lightcatcher | is the rest of the structure correct though? |
| 11:00 | Chousuke | lightcatcher: so that it doesn't waste stack space |
| 11:00 | lightcatcher | Chousuke, i also wanted to ask about that, it wasn't working when i did (recur lower upper forbid) |
| 11:01 | Chousuke | it should work just fine |
| 11:01 | lightcatcher | but i need to look back at the docs for recur |
| 11:01 | Chousuke | you're indenting a bit too much there btw. |
| 11:01 | Chousuke | two spaces is the standard indentation :P |
| 11:02 | Chousuke | (except when aligning parameters) |
| 11:05 | mrBliss | http://gist.github.com/540504 |
| 11:05 | lightcatcher | thanks again Chousuke, i'm used to 4 with python |
| 11:06 | lightcatcher | I completely forgot about the let statement. Functional programming is a bit of a paradigm shift |
| 11:07 | Chousuke | lightcatcher: Lisp code tends to get deeply nested so two spaces is kind of necessary. |
| 11:07 | Chousuke | otherwise your code will be dominated by indentation :P |
| 11:07 | lightcatcher | I should probably read a style guide before i get into bad habits |
| 11:08 | Chousuke | lightcatcher: There's no real Clojure style guide that I know of but a big chunk of this is applicable: http://mumble.net/~campbell/scheme/style.txt |
| 11:09 | Chousuke | lightcatcher: http://www.assembla.com/wiki/show/clojure/Clojure_Library_Coding_Standards contains good advice too |
| 11:09 | lightcatcher | thanks |
| 11:09 | lightcatcher | i'm a notepad++ user (at least for just experimenting/learning), anyone know if there is a clojure plugin for that? |
| 11:10 | lightcatcher | google couldn't find me one :( |
| 11:13 | LauJensen | lightcatcher: never heard of one |
| 11:13 | LauJensen | lightcatcher: but fortunately, Emacs runs on Windows as well so you can use that |
| 11:14 | lightcatcher | i could, but i'd rather keep my editor |
| 11:14 | LauJensen | k |
| 11:15 | lightcatcher | thanks though. notepad++ will still hilight the pairs of parentheses, and that seems to be the only "must have" syntax highlighing i need at the moment |
| 11:15 | LauJensen | I suffered in notepad++ because I couldnt get the indenting to work right |
| 11:29 | _fogus_ | Anyone know what happened to Jeffrey Straszheim? Haven't heard a peep in quite a while |
| 11:32 | cemerick | _fogus_: he works @ akamai I think. Last seen posting job ads? |
| 11:32 | _fogus_ | So he's still involved with Clojure then? |
| 11:34 | AWizzArd | arkh: sorry no |
| 11:35 | AWizzArd | arkh: I will now scroll up and read what you wrote. |
| 11:35 | cemerick | _fogus_: AFAIK, yes |
| 11:35 | _fogus_ | ok. Hopefully a flood of datalog changes are forthcoming now that 1.2 is out. :-) |
| 11:38 | AWizzArd | arkh: Hmm, that is german but is not exactly correct. One could translate it this way, and yeah, it looks very strange: "Who not from three thousand years. Oneself how to give account, stay in the dark, unexperienced, may live from day to day." |
| 11:39 | chouser | AWizzArd: is the first sentence perhaps just the second half of a correct sentence? |
| 11:40 | AWizzArd | chouser: I am not sure. This IS however the translation and probably matches the effect that I had when I read the german version. One understands the words, but some context and grammar is missing. |
| 11:49 | dnolen | rhickey: I'm curious. I know protocols are the new cool, but is there any interest in improving the performance of multimethods? I find that they're fantastic for coarse grained tasks, but being an more than an order of magnitude slower makes them less than ideal for certain things (even tho I would prefer to use them) |
| 11:49 | dnolen | slower than regular fns I mean |
| 11:52 | Chousuke | Do you have an idea for an improvement? |
| 11:53 | dnolen | Chousuke: not immediately, but I was perusing the Chambers/Chen predicate dispatch stuff, and was curious if baking that in more directly could improve performance |
| 11:54 | dnolen | Chousuke: reading over those papers also seems like predicate dispatch gives some of the guarantees people like about type systems. |
| 11:55 | mattrepl | maybe squashing all methods defined at compile time into a single function with conditional branches for implementations |
| 11:56 | mattrepl | maybe that's already done, I'm not familiar with the current impl |
| 11:57 | dnolen | mattrepl: there's a dispatch table of values that are matched against |
| 11:58 | mattrepl | yes, so removing that lookup and have a sequence of conditional branches with the corresponding method implementation inlined in the branches |
| 11:58 | mattrepl | no map lookup, no extra function invocation |
| 11:59 | AWizzArd | Though I am sceptical that it can gain a significant amount of extra performance. |
| 12:00 | arkh | AWizzArd: I know very little german but it still seemed odd to me, too. |
| 12:00 | AWizzArd | arkh: then you already have a good feeling/pattern matching for german texts. |
| 12:01 | mfex | dnolen: what kind of usages do you have for multimethods? what do you dispatch on? |
| 12:01 | arkh | AWizzArd: well, the first sentence is obviously only a sentence fragment. But then the rest ... I don't know. I probably don't know enough to comment :) |
| 12:02 | mfex | arkh, AWizzArd: I think there should be no period after jahren so the first two sentences are combined and there is no sz-as-B in my JoC version |
| 12:03 | AWizzArd | Btw, some german users in here might be interested that there is also a #Clojure.de channel, and a german google group. |
| 12:04 | dnolen | mfex: multimethods let you dispatch on things other than just type. |
| 12:05 | dnolen | mfex: they are also "open" other people can easily provide new dispatch possibilities. |
| 12:05 | dnolen | mfex: one problem I find tho is that the dispatch function is hard coded, that isn't open. |
| 12:06 | mfex | dnolen: yes, I was wondering what kind of dispatch function, ie a vector of keywords as a result may perhaps allow for a quicker lookup scheme for the lookup table |
| 12:06 | AWizzArd | That seems to be more flexible that multimethods and will also typically be much more terse. |
| 12:08 | mfex | dnolen: when you need the openess of multimethods, a specialized lookup table will require the possibility of new lookup paths, a simple table allows for this but is not as optimized/quick as you would like? |
| 12:10 | dnolen | AWizzard: rhickey has said he doesn't like pattern matching because it is also closed and forces an ordering (?) |
| 12:10 | AWizzArd | Yes, I know. Though the defpattern form could install its patterns and their respective body globally. |
| 12:11 | AWizzArd | One could add pattern/body at runtime, or remove some. |
| 12:12 | dnolen | mfex: well I only have the current implementation to compare. To be honest it's plenty fast for things like modeling the usual DB record in a web application. But it would be nice if we could get you know with 2X of regular fns instead of >10X |
| 12:18 | mfex | dnolen: do you use multimethods with hierarchies/isa/derive? |
| 12:18 | dnolen | mfex: yes |
| 12:19 | dnolen | I suppose rchickey's interest in datalog could improve the perf of dispatching? avoid fn calls altogether and just using rules? |
| 12:20 | Licenser | I has the impression clojure 1.2 was supposed to be non breaking the old contrib libs did that change again? |
| 12:54 | slyrus | this feels ... wrong: (defn replace-val [m old new] (reduce (fn [m [k v]] (if (= v old) (assoc m k new) (assoc m k v))) m m)) |
| 12:55 | slyrus | well, I can get rid of the second assoc, but still.. |
| 12:57 | slyrus | and with that bit of hackery I can properly compute the tetrahedral orientations of the neighbors of a chiral atom with a ring opening. yay. |
| 12:59 | rhudson | slyrus: how is that different from (replace {old new} m) ? |
| 13:01 | slyrus | ,(replace {'foo 'bar} {1 'foo 2 'moose}) |
| 13:01 | clojurebot | ([1 foo] [2 moose]) |
| 13:01 | slyrus | I want {1 'bar 2 'moose} |
| 13:01 | rhudson | ah |
| 13:10 | mebaran151 | I'm having trouble getting deftype definitions to reload in the repl. I'm trying to use the swank.core/break debugger, which is pretty convenient, but I can't seem to change type definitions in the repl |
| 13:11 | tomoj | slyrus: what's wrong about it? |
| 13:11 | slyrus | tomoj: it just feels a little dirty that's all... but I think it's ok. |
| 13:11 | tomoj | is something like (defn replace-val [m old new] (into {} (for [[k v] m] (if (= v old) [k new] [k v])))) also dirty? |
| 13:11 | mebaran151 | the methods stay with their original forms |
| 13:11 | slyrus | more so :) |
| 13:12 | rhudson | or (defn replace-val [m old new] (let [[ks vs] ((juxt keys values) m)] (zipmap ks (replace {old new} vs))) |
| 13:13 | Bahman | Hi all! |
| 13:17 | mebaran151 | any links about classloading issues and deftype that might be able to shine some light on my situation |
| 13:19 | tomoj | I wish I better understood elegance |
| 13:32 | chouser | tomoj: what an interesting thing to say! |
| 13:34 | psykotic | the word doesn't mean anything objective. something so elusive cannot be understood. i once heard someone refer to axion (an rdbms written in java) as the most elegant program he'd seen. |
| 13:36 | tomoj | I don't wish I had a program that would accept a program as input and output its elegance |
| 13:36 | psykotic | hehe |
| 13:37 | tomoj | maybe s/understood/grok/ |
| 13:37 | tomoj | er, grokked |
| 13:39 | psykotic | one problem with common notions of elegance is that it is so constraining that no useful program can be elegantly written. |
| 13:39 | psykotic | so, if you make that your standard of excellence, you are making it harder for yourself to write useful programs. |
| 13:39 | psykotic | most useful programs solve messy problems, in other words. |
| 13:40 | technomancy | did slurp* get renamed in clojure.java.io? |
| 13:41 | technomancy | I hope it didn't get dropped just because it had a bad name; it's really useful |
| 13:48 | bpsm | stuartsierra: clojure contrib: 4e5d98a broke the repl-utils build. |
| 13:49 | bpsm | fixed here: http://github.com/bpsm/clojure-contrib/commit/11ab6908882684e980640cfde0eb47efe3a8bd33 |
| 13:49 | stuartsierra | bpsm: I reverted that, it broke too many things |
| 13:50 | bpsm | stuartsierra: ok. gotcha. |
| 13:54 | technomancy | stuartsierra: I've got a couple ideas for clojure.test in 1.3 |
| 13:55 | stuartsierra | clojure.test is dead, long live Lazytest |
| 13:55 | technomancy | 0) have the testing macro print the string it's given when the tests are run based on a var |
| 13:55 | technomancy | uh dude... |
| 13:55 | technomancy | it has hundreds of users, and these are trivial additions |
| 13:55 | stuartsierra | I know, I'm kidding |
| 13:55 | technomancy | gotcha |
| 13:56 | technomancy | I'm just a bit bummed out how long trivial additions can linger in the issue tracker =\ |
| 13:56 | stuartsierra | Stu H. has been working really hard on that |
| 13:56 | technomancy | adding more committers hasn't seemed to fix the problem, but I'm hoping that's just due to the feature freeze |
| 13:56 | technomancy | right-o |
| 13:56 | stuartsierra | there actually are still only 3 committers to Clojure |
| 13:57 | technomancy | oh, still? |
| 13:57 | technomancy | =\ |
| 13:57 | stuartsierra | contrib has more, but clojure.test isn't in contrib any more |
| 13:59 | stuartsierra | but there are improvements to be made in clojure.test for sure |
| 13:59 | technomancy | I also monkeypatched it to spit out dots for each passing "is", which is nice for longer suites so you can tell that progress is happening |
| 14:00 | technomancy | would be nice to be able to do that without monkeying |
| 14:00 | technomancy | I meant to ask you before implementing and submitting them as patches, but I guess you still don't have any control or say in what goes in. =\ |
| 14:01 | stuartsierra | I have a say, but no direct control |
| 14:01 | stuartsierra | patches have to go through the mailing list and Assembla, like everything else |
| 14:02 | technomancy | of course |
| 14:03 | technomancy | I'd like to think patches that the original author of the lib thinks are a good idea could be fast-tracked. |
| 14:04 | stuartsierra | somewhat |
| 14:07 | stuartsierra | problem is, so many people have monkeypatched 'report' for different purposes that it can't change without breaking them |
| 14:08 | technomancy | yeah, I need to find a better way to do that. |
| 14:09 | mebaran151 | is it possible to C-c C-k new method definitions with deftype |
| 14:09 | tomoj | yeah |
| 14:09 | mebaran151 | currently, I can't seem to edit my definitions, replace them etc. |
| 14:11 | tomoj | hmm |
| 14:11 | hiredman | chouser: how does most of syntax-quote live in clojure.core? |
| 14:11 | hiredman | last I checked it had a huge gnarly section in LispReader |
| 14:12 | mebaran151 | my deftypes can only reflect the first definition |
| 14:12 | mebaran151 | despite compiling and reloading |
| 14:12 | mebaran151 | if it helps, I just tried moving to Clojure 1.2.0 final |
| 14:14 | tomoj | mebaran151: are you AOT compiling? |
| 14:14 | KirinDave | Wow. |
| 14:14 | KirinDave | I learned something valuable today. |
| 14:14 | KirinDave | If you are a lisper, you cannot work in banking. QED. |
| 14:14 | KirinDave | Lisp, I'm told, treats negative numbers as s-expressions. |
| 14:14 | mebaran151 | tomoj, I'm just using swank server |
| 14:14 | tomoj | hmm.. I only see that behavior when AOT compiling |
| 14:15 | mfex | KirinDave: lol |
| 14:15 | KirinDave | You may require proof: http://news.ycombinator.com/item?id=1619516 |
| 14:15 | mebaran151 | wrote a new file, trying to ctrl-c ctrl-k it |
| 14:15 | KirinDave | This is gonna be another one of those high profile gigs. |
| 14:15 | stuartsierra | mebaran151: if you've AOT-compiled the file containing the deftype, the compiled version may take precedence |
| 14:16 | mebaran151 | how would I know that? |
| 14:16 | mebaran151 | should I try a lein clean I see if I avoid it? |
| 14:16 | tomoj | look in classes/ for YourType.class |
| 14:18 | mebaran151 | hmmm |
| 14:18 | mebaran151 | a lein clean seemed to fix it |
| 14:18 | _fogus_ | "Persistence ... completely breaks when you leave the machine you’re running on." |
| 14:18 | _fogus_ | Interesting perspective |
| 14:18 | _fogus_ | :p |
| 14:19 | mebaran151 | so everytime I kill swank, I have lein clean, or else deftype will just silently reuse the old class files, think they were statically compiled on purpose? |
| 14:20 | mebaran151 | hmmm, seems to be working now |
| 14:21 | mebaran151 | I should always clean before I go nuts |
| 14:21 | tomoj | weird |
| 14:21 | tomoj | I only get class files when aot compiling |
| 14:21 | mebaran151 | oh I don't have classes now |
| 14:21 | mebaran151 | maybe I ran a lein compile and forgot about it |
| 14:25 | mebaran151 | oh this is interesting |
| 14:25 | mebaran151 | I think deftype must make new class names under the hood on recompile or something, because the interface's changes are not propogated once I include my Java RPC library |
| 14:26 | mebaran151 | (it takes the instance as an argument) |
| 14:27 | mebaran151 | there must be some magic caching going on... |
| 14:27 | stuartsierra | only AOT-compiled deftypes give you stable class names for Java interop |
| 14:28 | mebaran151 | oh I see, that's good to know |
| 14:28 | mebaran151 | it's a nice design for an RPC library, but a bad fit for clojure |
| 14:29 | mebaran151 | essentially, you can pass the RPC Server an object, and it will use reflection to match up the methods |
| 14:29 | mebaran151 | would be very easy to use in Java, but it's a little trickier from clojure |
| 14:29 | chouser | stuartsierra: I don't think that's true anymore |
| 14:30 | chouser | I think clojure now uses classloader trickery to create new classes with the same name when you redefine a type or record |
| 14:31 | chouser | but it is actually a different class, so existing instances will remain instances of the old class |
| 14:31 | stuartsierra | oh ok |
| 14:36 | mebaran151 | classloader stuff always makes my head spin; it feels like it shouldn't be that hard |
| 14:38 | kensho | _fogus_: are you referring to http://beust.com/weblog/2010/08/19/clojure-concurrency-and-silver-bullets/#comment-8475? That guy's either mind-boggling stupid or a troll imo. The blog post is pretty dumb as well imo. I would've expected better from the TestNG developer. |
| 14:39 | _fogus_ | kensho: I'm sure there was something that the poster was trying to say, but I think he worded it poorly. The post itself is what it is -- Beust doesn't find locking difficult. That's great! |
| 14:40 | kensho | _fogus_: hehe. good for him |
| 14:40 | ryanf | I think I am misunderstanding reduce somehow. why doesn't this work? http://pastebin.com/sh9GFGVF |
| 14:40 | technomancy | "guys, it's not that hard. you just have to be awesome. like me." |
| 14:41 | _fogus_ | technomancy: Something to strive for |
| 14:42 | arkh | is the best way to have optional, named arguments in a function to provide them with default values (zero?) and then test the value in the body of the function or is there a better way? |
| 14:45 | tomoj | -> ((fn [x y & {:keys [a b c] :or {b 5}}] [x y a b c]) 1 2 :c 3) |
| 14:45 | sexpbot | => [1 2 nil 5 3] |
| 14:45 | tomoj | does that help? didn't really understand the question |
| 14:49 | ryanf | (#(+ (Character/getNumericValue %1) %2) \7 1) |
| 14:49 | ryanf | whoops wrong window |
| 14:50 | ryanf | for real though, does anyone know why (reduce #(+ (Character/getNumericValue %1) %2) 0 "1234") givse a cast error? |
| 14:50 | ryanf | isn't it supposed to start with 0 as the accumulator? |
| 14:50 | ryanf | *gives |
| 14:50 | mebaran151 | arkh, do you mean named as in key value style arguments, or named arguments by position? |
| 14:50 | chouser | ryanf: you just got your args swapped |
| 14:51 | chouser | ,(reduce #(+ (Character/getNumericValue %2) %1) 0 "1234") |
| 14:51 | clojurebot | 10 |
| 14:51 | ryanf | shiiiit |
| 14:51 | ryanf | I was thinking it could be that a minute ago, but I thought it said the second arg was the accumulator |
| 14:51 | ryanf | thanks |
| 14:52 | arkh | tomoj: that's a good example of default values when arguments are not supplied, but I think I found the answer to my own question with just writing different implementations based on arity ... or something |
| 14:53 | arkh | mebaran151: key value style arguments with some of the keys being optional |
| 14:56 | tomoj | I don't understand how your question is different |
| 14:57 | tomoj | kv args are optional using map destructuring |
| 14:57 | tomoj | you mean that some of the kv args should be required? |
| 14:59 | arkh | tomoj: for the function I want to write most arguments (keys, in this case) are required but a couple aren't. Any recommendations? Sorry if my phrasing has been unclear. |
| 15:01 | arkh | I guess I should be saying "function parameters"; I don't see "arguments" used in clojure function terminology so far |
| 15:03 | hiredman | argument and parameter have specific formal meanings which I always get reversed |
| 15:03 | tomoj | wikipedia seems to suggest that the parameter is the variable, the argument the value |
| 15:03 | hiredman | one is the value passed to a function and the other is more or less the name the value gets bound to |
| 15:03 | hiredman | "variable" |
| 15:03 | hiredman | pah |
| 15:04 | arkh | "symbol" ;) |
| 15:04 | arkh | er .. maybe not |
| 15:04 | technomancy | parameter has more to do with definition, argument has to do with the function actually running |
| 15:05 | technomancy | being/becoming, etc |
| 15:05 | tomoj | arkh: I can't think of any good way at all to require some kv args |
| 15:06 | arkh | tomoj: yeah, that's the thing - function dispatch can happen based on arity and multimethods can be dispatched based on type, but I can't see a way to require some key/value params and make others optional |
| 15:06 | tomoj | the way is to check in the function, I guess, but I didn't consider that "good" :) |
| 15:06 | technomancy | "bless me, it's all in Plato. what ever do they teach in schools these days?"</lewis> |
| 15:07 | mebaran151 | I've become addicted to use the slime feature where it shows the function arguments in the bottom (minor?) bar. Is there anyway to extend this to tell me the functions for a Java constructor? |
| 15:07 | tomoj | technomancy: heh, I assumed david lewis and was confused |
| 15:09 | arkh | tomoj: I don't think I'd normally need to write a function like that but it's for some java interop |
| 15:12 | mebaran151 | arkh: is there anything wrong with just mergining in a hash-map of defaults? |
| 15:15 | arkh | mebaran151: I can do that - I wanted to make sure there wasn't a better way, though. Having a default value be special (even if it's nil) seems more cumbersome than what clojure could (should?) offer |
| 15:16 | arkh | with clojure, when I find I'm writing something inelegant, I've usually been able to discover it's a lack of understanding on my part ;) |
| 15:27 | rhudson | Basically you want to check that the set of required keys is a subset of the set of supplied keys |
| 15:28 | kiemdoder | what is the difference between "if" and "cond"? |
| 15:30 | tomoj | oh, so maybe :as will help? |
| 15:31 | tomoj | yeah, with :as you could check the keys and not have any magic values |
| 15:32 | mefesto | kiemdoder: "if" has a form for the true condition and optional a form for the false. cond lets you perform any number of conditional tests |
| 15:32 | mefesto | "if" ... and an optional form for the false condition... is what i meant to say :) |
| 15:33 | tomoj | -> ((fn [x y & {:keys [a b c] :or {a 5} :as m}] (if (every? (set (keys m)) [:b :c]) [x y a b c m] "error")) 1 2 :c 3) |
| 15:33 | sexpbot | => "error" |
| 15:33 | tomoj | -> ((fn [x y & {:keys [a b c] :or {a 5} :as m}] (if (every? (set (keys m)) [:b :c]) [x y a b c m] "error")) 1 2 :c 3 :b 6) |
| 15:33 | sexpbot | => [1 2 5 6 3 {:c 3, :b 6}] |
| 15:34 | Raynes | sexpbot is so adorable when he doesn't break. <3 |
| 15:36 | arkh | rhudson: nice |
| 15:38 | arkh | that wants to be a macro |
| 15:39 | rhudson | yeah, I can't offhand think of a one-liner to do it |
| 15:43 | kiemdoder | mefesto: what do you mean by "any number of conditional tests" for cond? Is it like "if cond1 and cond2 and cond3:" in python for instance? |
| 15:43 | _fogus_ | ,((fn [x y & {:keys [a b c] :or {a 5} :as m}] {:pre [(:b m) (:c m)]} [x y a b c m]) 1 2 :c 3) |
| 15:43 | clojurebot | java.lang.AssertionError: Assert failed: (:b m) |
| 15:43 | _fogus_ | arkh: ^^^ |
| 15:43 | arkh | _fous_: is that a precondition? |
| 15:44 | _fogus_ | yes |
| 15:44 | Raynes | kiemdoder: It's like a series of ifs, where each else is a new if. |
| 15:44 | arkh | sweet |
| 15:44 | Raynes | (cond (= 1 2) false (= 2 2) true) is like (if (= 1 2) false (if (= 2 2) true)) |
| 15:47 | arkh | _fogus_: clojure elegance achieved. I love how a person knows they're going in the right direction with clojure if it's intuitively appealing |
| 15:47 | kiemdoder | thanks, Raynes |
| 15:48 | kiemdoder | and Mefesto |
| 15:49 | holoway | sometimes it seems like when I use for(), it winds up being executed in parallel - is that normal behavior? if it is, how can I get it to be in order? |
| 15:49 | hiredman | ~for |
| 15:49 | clojurebot | for is not used often enough. |
| 15:49 | hiredman | ~for |
| 15:49 | clojurebot | for is not a loop |
| 15:51 | BrianForester | ,(map #(map (memfn toUpperCase) %) '(("and" "than" "day") ("plan" "minus" "divide")))) |
| 15:51 | clojurebot | (("AND" "THAN" "DAY") ("PLAN" "MINUS" "DIVIDE")) |
| 15:52 | arkh | holoway: for's comprehension is serial, in order "from right to left" |
| 15:55 | BrianForester | raynes: what is the better option? looking for feedback here. |
| 15:55 | arkh | ,(for [third [5] second (range 2) first (range 3)] (str third \. second \. first)) |
| 15:55 | clojurebot | ("5.0.0" "5.0.1" "5.0.2" "5.1.0" "5.1.1" "5.1.2") |
| 15:58 | Raynes | -> (map (fn [x] (map #(.toUpperCase %) x)) '(("and" "than" "day") ("plan" "minus" "divide"))) |
| 15:58 | sexpbot | => (("AND" "THAN" "DAY") ("PLAN" "MINUS" "DIVIDE")) |
| 15:58 | Raynes | BrianForester: ^ |
| 15:58 | Raynes | Use an anonymous function instead. memfn was deprecated. |
| 15:59 | Raynes | BrianForester: Sorry about that. I didn't realize you were looking for feedback! :) |
| 15:59 | wwmorgan | since when has memfn been deprecated? |
| 16:00 | BrianForester | raynes: thanks. ...is there a clojure opt to warn about deprecated functions? |
| 16:01 | Raynes | wwmorgan: memfn was before #(). It's been deprecated for quite a while. |
| 16:02 | Raynes | BrianForester: You shouldn't have to worry about that much. There aren't many deprecated functions to step on. |
| 16:02 | Raynes | But I don't think there is an option for that in any case. |
| 16:02 | BrianForester | raynes: K |
| 16:02 | kiemdoder | if I have a map m with that contains a key :a, (:a m) and (m :a) both give the the value at :a |
| 16:02 | rhudson | right |
| 16:02 | Raynes | However, if something is deprecated, it'll have :deprecated true in it's metadata map. |
| 16:02 | kiemdoder | are these two forms equivalent? |
| 16:03 | rhudson | A map is also defined to be a function of its keys |
| 16:04 | Raynes | Keywords are functions that look themselves up in a map, and maps are functions that look up whatever you pass it as a key inside itself. |
| 16:04 | rhudson | You should probably prefer the (:a m) form, if it's at all likely that you want to eventually have a record type for the map |
| 16:04 | Raynes | You can't do ("a" m), for example, and expect the value at the key "a" in the map to be returned. |
| 16:04 | _fogus_ | ,(for [m '(("and" "than" "day") ("plan" "minus" "divide"))] (map #(.toUpperCase %) m)) |
| 16:04 | clojurebot | (("AND" "THAN" "DAY") ("PLAN" "MINUS" "DIVIDE")) |
| 16:14 | fusss | "bordeaux-threads-test is broken because it uses FiveAM which depends on Arnesi which is broken on ABCL because the long form of DEFINE-METHOD-COMBINATION is not implemented" :-D |
| 16:14 | fusss | that should be the easiest fix to bring ~5 packages to abcl |
| 16:14 | fusss | sorry, wrong channel |
| 16:14 | fusss | sheesh |
| 16:15 | fusss | hey _fogus_ ; my HN buddy |
| 16:16 | fusss | actually, i am here to pick people's brains over java SSL libs and their proximity to OpenSSL. is it straightforward to wrap javax.net.SSL to give it a trivial libssl like interface, or am I in for a lot of pain? |
| 16:17 | dmiles_afk | lol fusss, i kept trying to flip between #abcl and #lisp to find what you saird.. and it was in #clojure :) |
| 16:18 | fusss | yeah, painfully embarrassing there |
| 16:21 | fusss | dmiles_afk: i routinely find myself reading an Elisp manual by accident, thinking it was the hyperspec. GNU content is very google friendly, and often formatted in various ways, some resembling cltl |
| 16:23 | dmiles_afk | ineed |
| 16:23 | dmiles_afk | my Secondlife bots are scripted in DotLisp (aka Clojure) .. though i been creating smoothing libraries in ABCL.. using jcall/jstatic/jfield |
| 16:24 | dmiles_afk | becasue clojres syntax for calling java is more elgant than allegros (that ABCL copied) |
| 16:25 | fusss | dmiles_afk: Hickey wrote a nice CL wrapper for interacting with java |
| 16:25 | dmiles_afk | *nod* |
| 16:26 | dmiles_afk | oh i wonder.. does ClojureCLR call events> |
| 16:26 | dmiles_afk | oh i wonder.. can ClojureCLR call events? |
| 16:30 | dmiles_afk | ineed/indeed |
| 16:55 | edbond | any clutch users? |
| 16:56 | edbond | is it possible to emit several docs from :map function? clojure view server |
| 17:40 | scottj | Is there a builtin for renaming keys in a map? |
| 17:41 | puredanger | I need something that takes a function and a seq and returns N partitions of the seq based on the result of applying the function. does this exist? |
| 17:41 | raek | scottj: clojure.set/rename-keys |
| 17:42 | raek | oddly enough in clojure.set... |
| 17:43 | scottj | puredanger: group-by? |
| 17:43 | scottj | raek: thanks, that's the name I gave the version I wrote! :) |
| 17:43 | puredanger | that might work. returns a map but I can work with that probably |
| 17:44 | puredanger | scottj: many thanks... |
| 17:44 | puredanger | I'm hoping that the rate with which I learn the functions in core is greater than the rate at which they are being added :) |
| 17:44 | scottj | puredanger: there might be something closer in seq_utils |
| 17:46 | wwmorgan | puredanger: partition-by will do what you want, if all the elements you want grouped together are contiguous |
| 17:47 | puredanger | wwmorgan: yeah, that occurred to me, but they're not (and can't be without applying the function) |
| 17:48 | puredanger | scottj: I think group-by + map destructuring on the result works |
| 17:48 | wwmorgan | puredanger: what about calling vals on the output of group-by? |
| 17:49 | puredanger | wwmorgan: I need to know which group is which I think |
| 17:51 | wwmorgan | puredanger: I see. something like (my-partition #(mod % 3) [1 2 3 4 5]) returns ((3) (1 4) (2 5))? |
| 17:52 | puredanger | wwmorgan: I think group-by is what I want |
| 17:53 | wwmorgan | OK |
| 17:55 | scottj | Anyone using camelCase keys in their clojure and nosql just so they convert easily to javascript? I'm wondering if I should make that switch so the keys are all the same. |
| 17:56 | fusss | scottj: the lispy way is to use strings |
| 17:57 | fusss | symbols shouldn't be camel-cased, even if your lisp-reader allows it |
| 17:57 | hiredman | fusss: what would you know about it? |
| 17:58 | fusss | hiredman: just project cl/scheme experience unto clj. camel case symbols are hardly used; even in SOAP and XML |
| 17:59 | kensho | fusss: Is there another reason except that it's not "lispy"? I prefer camelCase and I don't care if it's lispy or not. |
| 17:59 | patrickdlogan | fusss: yeah, scheme is case-insensitive and common lisp is kind of on the fence - case-sensitive but the reader may convert case for you. |
| 17:59 | fusss | kensho: sniff around clojure-contrib and see how they do things |
| 18:00 | patrickdlogan | but I am not sure what is "lispy" about this. |
| 18:00 | patrickdlogan | that's the kind of cruft that (some) people have wanted to clean up. |
| 18:00 | kensho | fusss: that's no really a reason. If everyone jumps off a bridge you do it too? |
| 18:01 | arkh | convention and consistency help readability (for yourself and others), fwiw |
| 18:01 | fusss | no, avoiding camelCase also helps your development tools. what if SLIME is case agnostic? would you suffer? |
| 18:01 | patrickdlogan | having said that I would not recommend having a lot of symbols differing only by case, but I don't want the reader to convert the case I choose in any situation. |
| 18:02 | kensho | fusss: i don't use slime and don't plan to |
| 18:02 | dmiles_afk | i am using IKVM so i run into alot of case importance since my objects have both ToString() and toString() |
| 18:03 | patrickdlogan | dmiles_afk: oh dear. |
| 18:04 | kensho | I'm all for consistency but I think it goes too far if the language dictates arbitrary naming conventions |
| 18:06 | fusss | the language doesn't dictate anything, that's why we're talking about it :-) |
| 18:08 | kensho | I'm just saying, just because contrib uses a specific style doesn't mean I have to follow it does it? If I'm contributing to contrib I will certainly use that style but for my own code I want to use what I like best. |
| 18:10 | fusss | maverick |
| 18:11 | technomancy | facepalm |
| 18:14 | slyrus | "if we're gonna have uniforms, maybe we should all get something different!" |
| 18:44 | mebaran151 | is there a way to get all the function on a given type? |
| 18:47 | polypus | is the moderation lag on the google groups clojure mailing list really long? i've posted two messages today and they don't seem to have shown up. |
| 18:47 | scottj | mebaran151: how if it's dynamically typed? |
| 18:47 | hiredman | polypus: usually it's long for your first post |
| 18:47 | polypus | hiredman: k. ty |
| 18:48 | polypus | anybody using the new lein shell script feature yet? i can't get it to work properly |
| 18:50 | technomancy | polypus: custom script or default? |
| 18:50 | technomancy | polypus: for the default, look at swank-clojure for an example |
| 18:51 | polypus | custom |
| 18:51 | mebaran151 | scottj: I mean a given deftype |
| 18:51 | polypus | i have :shell-wrapper { :bin "resources/bin/caj" } in project, and it's being copied over to ~/.lein/bin, but %s is not being overwritten |
| 18:51 | polypus | on a lein install |
| 18:52 | technomancy | polypus: shouldn't need resources/; it should be classpath-relative |
| 18:52 | technomancy | %s-interpolation should be happening at jar-time actually |
| 18:52 | technomancy | polypus: little busy now; if you get stuck could you post an example to the lein mailing list? |
| 18:54 | polypus | technomancy: ok, ty. i posted to the clojure google group but i guess the moderators are taking their time. i'll look for the lein list |
| 18:58 | scottj | mebaran151: oh :) sorry I haven't used 1.2 features don't know |
| 19:31 | polypus | technomancy: ok, i did a few experiments with a new lein project and still no luck. either that or i'm just not getting something. i posted about it to the lein mailing list just now. |
| 20:21 | rlb | Does defn- even hide the def from code after an (in-ns ...)? |
| 20:30 | wooby | rlb: no |
| 20:58 | rlb | wooby: hmm, then I'm wondering what's happening -- with 1.2, (use 'clojure.java.shell) (in-ns 'clojure.java.shell) (prn as-env-string) fails, but at least in master, as-env-shell is in shell.clj. |
| 20:59 | wooby | strange |
| 21:00 | wooby | can you #'clojure.java.shell/as-env-string from some other ns and see it? |
| 21:01 | rlb | (Oh, and this is with the 1.2 zip.) |
| 21:02 | wooby | @#'clojure.java.shell/as-env-string rather |
| 21:02 | rlb | Fails -- can't find it. |
| 21:02 | rlb | But sh is fine. |
| 21:03 | rlb | Is there any chance the 1.2 version doesn't have it, but master does? |
| 21:03 | wooby | quite possible |
| 21:03 | rlb | I couldn't find a 1.2 branch or a 1.2 tag in the current repo. |
| 21:03 | wooby | rlb: http://github.com/clojure/clojure/tree/1.2.0 |
| 21:04 | wooby | rlb: http://github.com/clojure/clojure/blob/1.2.0/src/clj/clojure/java/shell.clj#L52 maybe? |
| 21:05 | incandenza | isn't it as-env-strings ? |
| 21:05 | rlb | Ahh, I had git://github.com/richhickey/clojure.git |
| 21:06 | rlb | incandenza: looks like it in 1.2, but not in (richhickey's) mater. |
| 21:06 | rlb | that was the problem |
| 21:06 | rlb | thanks |
| 22:02 | slyrus | hmm... a couple things I miss from CL-land: 1) arrays of, say, (unsigned-byte 2) and 2) flexichain |
| 22:02 | slyrus | I'm sure there must be a nice flexichain-like java package around. anything in clojure? |
| 22:02 | rlb | Is it possible to use apply with a method? |
| 22:02 | chouser | rlb: no |
| 22:02 | rlb | nm |
| 22:03 | rlb | OK -- just wanted to call Runtime exec with 1, 2, or 3 args, depending. I can always use cond. |
| 22:03 | pdk | java primitives are never unsigned |
| 22:03 | pdk | you can still do stuff like int-array byte-array etc for all the java primitive types |
| 22:26 | slyrus | even though they're mutable, I'd like to see more CL-style array support in clojure |
| 22:27 | rhudson | why? |
| 22:27 | clojurebot | why not? |
| 22:27 | chouser | clojure supports java arrays. what's missing? |
| 22:28 | slyrus | chouser: well, for one thing, not having to use the interop syntax and, for another, support for types besides ints and bytes |
| 22:29 | hiredman | uh |
| 22:29 | hiredman | ,(doc char-array) |
| 22:29 | clojurebot | "([size-or-seq] [size init-val-or-seq]); Creates an array of chars" |
| 22:30 | hiredman | ,(into-array [[1 2] [3 4]]) |
| 22:30 | clojurebot | #<PersistentVector[] [Lclojure.lang.PersistentVector;@1d66cb3> |
| 22:30 | chouser | ,(let [a (to-array [1 "foo" (Object.)])] (aset a 1 "bar") (seq a)) |
| 22:30 | clojurebot | (1 "bar" #<Object java.lang.Object@12f035c>) |
| 22:30 | hiredman | ,(aget (into-array [[1 2] [3 4]]) 0) |
| 22:30 | clojurebot | [1 2] |
| 22:30 | hiredman | you are obviously making things up |
| 22:30 | slyrus | or just wrong, but yeah |
| 22:33 | dcooper8 | Hi, is nobody doing a Clojure presentation or paper at ILC 2010 in Reno? |
| 23:02 | hiredman | dcooper8: clojure conj calls |
| 23:03 | dcooper8 | ok good. |
| 23:04 | hiredman | I mean clojure-conj is the 22nd and 23rd of october I believe, so most clojure people will be attending that |
| 23:11 | dcooper8 | ah, pity. |
| 23:11 | dcooper8 | the ILC is trying to get more inclusive for all Lisps, not just Common Lisp |
| 23:11 | dcooper8 | so they were hoping for at least one or two clojure papers |
| 23:12 | dcooper8 | but i guess the other lisps are not of much interest to clojure people |
| 23:12 | hiredman | this the first clojure-conj though |
| 23:13 | hiredman | I would be interested in going to ILC, but I am already going to clojure-conj for work |
| 23:14 | hiredman | (and, I can't lie, I want to go) |
| 23:14 | dcooper8 | well please spread the word around, if anyone can submit a Clojure paper for ILC, the deadline is coming up... |
| 23:15 | dcooper8 | i'm personally trying to urge the ALU/ILC to live more up to its name and truly include all Lisps instead of being a thinly-veiled Common Lisp old-boy club |
| 23:15 | ninjudd | is clojars down? |
| 23:15 | dcooper8 | in the meantime I think CL needs its own specific foundation and meetings |
| 23:15 | rhudson | dcooper8: you might want to post something to the mailing list |
| 23:16 | dcooper8 | the google group? |
| 23:16 | rhudson | that's what I meant |
| 23:16 | dcooper8 | i'll ask Daniel Herring to do it, he's the publicity manager for ILC, |
| 23:17 | dcooper8 | i'll be surprised if he hasn't already done it... |
| 23:17 | hiredman | the was at least one ilc email |
| 23:17 | rhudson | haven't noticed it, if he has |
| 23:35 | bortreb | How do I get a thread running off in it's own little world to print back to the main repl printWriter? I tried (let [temp *out*] (.start (Thread. (fn [] (do (set! *out* temp) (println "hi")))))) but that didn't work :( |
| 23:37 | pdk | (doc println) |
| 23:37 | clojurebot | "([& more]); Same as print followed by (newline)" |
| 23:37 | pdk | hmm |
| 23:39 | rhudson | bortreb: (.start (Thread. #(println "hi"))) works for me |
| 23:40 | bortreb | for me it prints to the terminal where I started swank |
| 23:40 | rhudson | mine was in a cljr repl |
| 23:43 | ninjudd | (let [temp *out*] (.start (Thread. (fn [] (binding [*out* temp] (println "hi")))))) |
| 23:43 | ninjudd | he's gone |
| 23:44 | ninjudd | rhudson: it works in cljr because there is only one repl thread |
| 23:44 | ihodes | does anyone know the reason why some function args in the clojure source start with & - eg &forms (not [& forms], [&forms]) |
| 23:45 | ninjudd | ihodes: it means all subsequent args |
| 23:45 | hiredman | &env and maybe &form are special things passed into macros |
| 23:45 | hiredman | ninjudd: he's not talking about vargs |
| 23:46 | ihodes | ah, i see. so when we're defining defmacro, those are args passed to the function defmacro is being assigned. what's going on there |
| 23:46 | hiredman | defmacro hides them, but before defmacro is def'ed in core.clj macros created manualing have to deal with the |
| 23:46 | hiredman | them |
| 23:47 | hiredman | http://github.com/Seajure/serializable-fn has an example usage |
| 23:47 | ninjudd | hiredman: right, i misread the question |
| 23:48 | ihodes | checking it out, thanks :) |
| 23:52 | phaer | How can i convert a record to a map? |