2010-03-26
| 00:18 | phren0logy | can anyone give me a hand with the most recent checkout of labrepl? It seems to have broken the swank server script. |
| 03:08 | underdev | is there an idiom for declaring that a function has side effects? |
| 03:09 | underdev | i have a whole set of functions that use the Robot class, and i would like to refactor them, and convey the fact that they are not pure |
| 03:11 | Chousuke | well, you can add a ! to the name |
| 03:11 | noidi | I think that's quite common |
| 03:11 | noidi | that's what I do, too |
| 03:12 | noidi | I think that comes from scheme http://www.rscheme.org/rs/b/0.7.3.3/21/doc/x162.html |
| 03:12 | Chousuke | it's not always done, though |
| 03:12 | underdev | okay, that will work fine |
| 03:13 | Chousuke | often, documenting the side-effects is good enough |
| 03:14 | underdev | i'm trying to work my way up several layers of abstraction, and at some point i will no longer remember that foo contains side effects |
| 03:14 | underdev | i know me, and trust me, i won't keep track :) |
| 03:15 | underdev | won't/can't... |
| 03:24 | zmila | underdev - you may use -se postfix or prefix for side-effect functions |
| 03:24 | slyphon | i thought the convention was to postfix w/ ! |
| 03:48 | talios | evening everyone |
| 04:04 | LauJensen | Morning all |
| 04:12 | talios | 'lo |
| 04:58 | gko | hello |
| 05:02 | talios | 'lo |
| 05:13 | talios | grr - (json-str) is escaping /'s when it outputs "http://xxx" - annoying. |
| 05:16 | talios | altho it looks like thats valid behaviour. |
| 06:43 | zmila | so quiet for friday ... |
| 06:47 | unfo- | zmila, YOU LIEK THIS BETTAR THEN? ^^ |
| 06:51 | npoektop | sorry. echo check |
| 06:55 | manniche | Hi Lau, thanks for your inspiring talk @DKUUG on clojure. Fortunately I'll have the entire Easter holiday to dive (more) into clojure. |
| 06:55 | LauJensen | manniche: Hey - My pleasure, I'm glad you decided to try it out :) |
| 07:13 | noidi | damn, Enclojure crashes with a NullPointerException when I try to create a new Clojure project |
| 07:14 | noidi | even upgrading to Netbeans 6.8 didn't help |
| 07:14 | LauJensen | noidi: check out my blog |
| 07:14 | LauJensen | ~google Clojure IDEs the grand tour |
| 07:14 | clojurebot | First, out of 457 results is: |
| 07:14 | clojurebot | Clojure IDEs — The Grand Tour | BEST IN CLASS |
| 07:14 | clojurebot | http://www.bestinclass.dk/index.php/2010/03/clojure-ides-the-grand-tour-getting-started/ |
| 07:15 | LauJensen | In the very bottom you see 2 updates to the post explaining how to fix that |
| 07:15 | noidi | LauJensen, ah, you got that fixed |
| 07:15 | LauJensen | Yes ma'am |
| 07:15 | noidi | thanks |
| 07:16 | noidi | I decided to give a "real" IDE a try after years of Vim and Emacs, but the first impression wasn't too good :) |
| 07:17 | LauJensen | Trust me, it gets better than that NPE :) |
| 07:17 | noidi | hehe |
| 07:28 | noidi | yay, updating the plugins seemed to fix the NPE for me |
| 07:38 | noidi | after 10 minutes it's back to Emacs for me... too many widgets, too little source code -- I can't think in an environment like that! :) |
| 07:39 | noidi | the problem with being able to discover everything by looking at the app, is that you have to stare at everything all the time :P |
| 07:44 | LauJensen | 10 minutes...hmm. I think you did good :) |
| 09:26 | LauJensen | It constantly surprises me that Chrome doesn't accept C-x o to switch tabs |
| 09:29 | SynrG | LauJensen: C-PgUp, C-PgDn :) |
| 09:29 | LauJensen | SynrG: fine, but how do I get C-a C-k working in the adress line? |
| 09:29 | SynrG | the whole world has not yet embraced emacs, and you're surprised? |
| 09:30 | SynrG | i don't even know what that does :p |
| 09:30 | LauJensen | Move to start of the line then kill line :) |
| 09:31 | SynrG | C-a C-x i guess. but now you've trashed your paste buffer. hmmm |
| 09:32 | SynrG | but yeah, it's annoying when your "finger memory" of things doesn't transfer well from app to app |
| 09:33 | SynrG | hmm, C-a Backspace |
| 09:42 | _2x2l | noidi: netbeans is crap. intellij is the only way to go for java. i duno about clojure since i use emacs, but don't let netbeans taint your idea of what a good ide does. |
| 09:42 | _2x2l | i'd imagine intellij might be half decent for clojure, and eclipse is probably halfway decent too (though i bet has a huge memory footprint). |
| 09:44 | fogus | _2x21: "imagine"? "probably"? "bet"? Are you not familiar with those IDEs? |
| 09:45 | callen | fogus: it's the internet. uninformed conjecture based on gut feeling told around a campfire all the while Alan Kay is rolling in his grave. Questions? |
| 09:45 | callen | too bad Alan Kay isn't dead :D |
| 09:45 | callen | maybe he sleeps in a coffin. |
| 09:45 | callen | yeah, that's it. he rolls in his nightly coffin. |
| 09:46 | fogus | callen: Only one... where are my marshmallows? http://www.campo-ongo.org/pics/campfire.jpeg |
| 09:46 | callen | fogus: http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=the+hated+campfire |
| 09:48 | zmila | ,(let [ [f & r] #{2 3 4}] [f r]) |
| 09:48 | clojurebot | java.lang.UnsupportedOperationException: nth not supported on this type: PersistentHashSet |
| 09:49 | fogus | ,(let [ [f & r] (seq #{2 3 4})] [f r]) ; don't count on order |
| 09:49 | clojurebot | [2 (3 4)] |
| 09:52 | zmila | tĥ fogus! i see |
| 09:52 | zmila | thx |
| 09:53 | bsteuber | fogus: so why doesn't destructuring call seq for you? too inefficient? |
| 09:53 | fogus | zmila: np |
| 09:54 | fogus | ,[(seq [1]) (seq [])] |
| 09:54 | clojurebot | [(1) nil] |
| 09:56 | noidi | cemerick, thanks for the interesting blog post and screencast! You convinced me to start reading the maven book :) |
| 10:01 | fogus | bsteuber: That's a good question |
| 10:05 | fogus | bsteuber: I suppose because that defeats the specificities of access per collection type |
| 10:06 | fogus | ,(let [{x 1, y 2} #{1 2 3 4}] [x y]) |
| 10:06 | clojurebot | [1 2] |
| 10:07 | fogus | ,(let [{x 1, y 2} {1 2 3 4}] [x y]) |
| 10:07 | clojurebot | [2 nil] |
| 10:07 | fogus | ,(let [{x 1, y 2} [1 2 3 4]] [x y]) |
| 10:07 | clojurebot | [2 3] |
| 10:08 | fogus | ,(let [{x 1, y 2} (seq [1 2 3 4])] [x y]) |
| 10:08 | clojurebot | [nil nil] |
| 10:08 | zmila | 8-) |
| 10:14 | cemerick | noidi: good to hear :-) Feel free to ping me if you have any questions. Definitely check out the clojure-maven-plugin list http://groups.google.com/group/clojure-maven-plugin, and the #maven channel is also helpful. |
| 10:20 | bsteuber | fogus: ic, so map destructuring only works on IFn? |
| 10:21 | bsteuber | but when I think it over, it makes sense for array destructuring to only work on sequential? stuff |
| 10:21 | bsteuber | as you can't rely on the order otherwise |
| 10:36 | wthidden | does doseq hold on its head? |
| 10:36 | wthidden | *to its head |
| 10:36 | chouser | hm, shouldn't. |
| 10:37 | wthidden | if have a (doseq [k (range 0 100000000000000)] (func 'a 'b)) |
| 10:37 | wthidden | that seems to run out of memory after 24 hours or so. |
| 10:39 | wthidden | what about leakage with java udp sockets? Anything special other than closing them when I'm done? |
| 10:41 | phren0logy | has anyone been using stuart halloway's LabREPL from github? |
| 10:42 | gfodor | what exactly is it? the readme wasn't clear and I didn't pull it |
| 10:43 | phren0logy | gfodor: It's a "lab" for learning clojure. But the more recent updates seem to have jacked up the slime server interaction. |
| 10:43 | phren0logy | gfodor: It runs a web server with tutorials, and is supposed to set up a repl to try the exercises that have some libraries available |
| 10:44 | gfodor | i see |
| 10:44 | gfodor | thx |
| 10:44 | phren0logy | sure |
| 10:44 | phren0logy | do you use emacs? |
| 10:44 | gfodor | vimclojure for me |
| 10:44 | lpetit | ,(let [{x 1, y 2} (seq [1 2 3 4])] [x y]) ; why couldn't it result in [2 nil] ? |
| 10:44 | clojurebot | [nil nil] |
| 10:45 | phren0logy | ah. well I'm trying to trouble shoot why I can't get it to work, but I'm not having much luck. Check it out, you may have better luck. |
| 10:50 | bsteuber | ,('(1 2 3 4) 1) |
| 10:50 | clojurebot | java.lang.ClassCastException: clojure.lang.PersistentList cannot be cast to clojure.lang.IFn |
| 10:50 | bsteuber | lpetit: so seqs are not callable |
| 10:51 | bsteuber | phren0logy: I didn't get it to work with swank, be the shell repl and website were okay |
| 10:51 | bsteuber | lein deps did the job for me |
| 10:51 | phren0logy | bsteuber |
| 10:52 | phren0logy | Thanks. I had it working 2 days ago, but the recent updates seem to have broken it |
| 10:52 | phren0logy | good to know it's not just me, I wasn't sure if I broke something |
| 10:53 | hiredman | lpetit: seqs are not indexed |
| 10:53 | bsteuber | ,(let [[x y] (seq [1 2 3 4])] [x y]) ; but they are ordered |
| 10:53 | clojurebot | [1 2] |
| 10:56 | lpetit | hiredman: yes, I understand that. |
| 10:57 | lpetit | ,(*clojure-version*) |
| 10:57 | clojurebot | java.lang.IllegalArgumentException: Wrong number of args passed to: PersistentArrayMap |
| 10:57 | lpetit | ,(clojure-version) |
| 10:57 | clojurebot | "1.1.0-master-SNAPSHOT" |
| 11:18 | licoresse | There is assoc-in, get-in and update-in, is there a dissoc-in or a similar workaround? |
| 11:20 | raek | dissoc-in exists in clojure.contrib.core |
| 11:20 | licoresse | raek: thanks! |
| 11:26 | stuartsierra | What exactly does the &env special macro argument do? |
| 11:27 | Chousuke | stuartsierra: it contains the locals expansion environment I think |
| 11:27 | Chousuke | locals of the* |
| 11:28 | chouser | stuartsierra: gives you a map where the keys are the symbols of all the locals at the point where the macro is being expanded. |
| 11:28 | stuartsierra | But not their values, it seems. |
| 11:28 | chouser | their values aren't known at compile time. :-) |
| 11:28 | chouser | er, at macro-expand time. |
| 11:28 | stuartsierra | Well, they could be in the case of (let [x 1] ...) but I see the point. |
| 11:28 | chouser | the values in the map are Compiler$Something objects, which I expect will change |
| 11:28 | stuartsierra | ok |
| 11:29 | stuartsierra | So basically &env lets a macro inspect its lexical context. |
| 11:30 | chouser | yes |
| 11:30 | stuartsierra | ok, thanks |
| 11:32 | chouser | the value is a Compiler$LocalBinding, which has fields like .isArg (true if it's a fn arg instead of a let-local), .init (a Compiler expression of the analyzed init value, like perhaps a Compiler$ConstantExpr, .tag, etc.) |
| 11:32 | stuartsierra | hm, ok |
| 11:32 | chouser | but like I said, I think that will change to something a bit more transparent with ccinc |
| 11:32 | stuartsierra | right |
| 11:32 | stuartsierra | ccinc needs a better name |
| 11:32 | chouser | for now all I've been able to use &env for is to collect metadata from the local symbol itself. |
| 11:32 | stuartsierra | Like "nirvana" |
| 11:33 | chouser | (let [#^{:my :meta} i 5] ... (foo i ...)) |
| 11:33 | stuartsierra | chouser: yes, that makes sense |
| 11:34 | chouser | where foo is a macro that at macro-expand time looks up its arg i in &env to find the let's i and from there gets at :my :meta |
| 11:34 | drewr | o_O |
| 11:36 | chouser | (defmacro foo [local etc] (let [[orig-local _] (find &env local), my-meta (meta orig-local)] ...)) |
| 11:36 | licoresse | one problem with dissoc-in is that it removes the whole branch, and not only the last leaf |
| 11:39 | licoresse | I have a {:upper {5 #{:d}, 15 #{:d} :lower {20 #{:x}} when dissoc -in [:lower 20] I end up with {:upper {5 #{:d}, 15 #{:d}} what I would like is {:upper {5 #{:d}, 15 #{:d} :lower {}} |
| 11:39 | licoresse | I don't know if this makes any sense to you guys |
| 11:40 | licoresse | everything here is in a (dosync (alter ...) |
| 11:41 | drewr | licoresse: I'm following you, and I think I agree |
| 11:41 | licoresse | drewr: :) guess a private rewrite of dissoc-in should solve it (?) |
| 11:42 | drewr | where is dissoc-in defined? |
| 11:42 | Chousuke | ,(dissoc {:a 5} :a) |
| 11:42 | clojurebot | {} |
| 11:42 | licoresse | contrib.core |
| 11:43 | licoresse | my brain is kind of blasted after 5 days of clojure fun |
| 11:44 | Chousuke | I suppose you can do (update-in [:lower] dissoc 20) as a workaround |
| 11:45 | licoresse | Chousuke: I'll give it a try... |
| 11:46 | Chousuke | but I think the asymmetry of dissoc-in with dissoc can be considered a bug |
| 11:46 | licoresse | Chousuke: great, that works! |
| 11:47 | licoresse | wondering why dissoc-in is in contrib and not in core? |
| 11:48 | Chousuke | Probably because Rich never needed it, and no-one has proposed adding it to core :) |
| 11:48 | licoresse | ah, the benevolent dictator |
| 11:48 | chouser | I'm not sure how often removing the whole branch is desirable |
| 11:49 | licoresse | just kidding |
| 11:56 | drewr | fwiw, I've only ever needed update-in |
| 11:57 | drewr | and get-in occasionally |
| 11:57 | chouser | I tend to use -> instead of get-in |
| 11:57 | drewr | chouser++ |
| 11:58 | AWizzArd | ,(doc get-in) |
| 11:58 | clojurebot | "([m ks]); returns the value in a nested associative structure, where ks is a sequence of keys" |
| 12:00 | AWizzArd | Hmm yes, I also used -> instead of get-in, but on the other hand get-in better documents the code. |
| 12:00 | drewr | wouldn't -?> be better than ->? (wow, that's confusing) |
| 12:01 | AWizzArd | ,(doc -?>) |
| 12:01 | clojurebot | No entiendo |
| 12:01 | drewr | no, drewr, get-in handles nil just fine |
| 12:02 | chouser | so does -> when all you're using are keywords |
| 12:02 | drewr | ah, true |
| 12:11 | lithpr | begun the tweet wars about learning java has! |
| 12:12 | noss | what happens on twitter stays on twitter |
| 12:12 | AWizzArd | chouser: yes, it is clear what -> does, but get-in can be grepped for, and it is more specific. I find that more specific functions document the code better. |
| 12:41 | rrc7cz-hm | are there any tricks which allow keywords to have metadata? |
| 12:44 | drewr | rrc7cz-hm: what would you like to accomplish? |
| 12:44 | drewr | a keyword is a named constant; metadata seems orthogonal |
| 12:45 | rrc7cz-hm | drewr: I have nested map structures where they keys are keywords. Since they are nested, there is a sort of coordinate system based on keys. For example [:foo :bar] identifies 3 in {:foo {:bar 3}}, much like the zipper fns |
| 12:46 | rrc7cz-hm | drewr: these maps represent product configurations. I'd like to add metadata to certain coordinates so that the system can identify whether it's visible or not |
| 12:46 | rrc7cz-hm | for example |
| 12:47 | stuartsierra | ,(identical? :foo :foo) |
| 12:47 | clojurebot | true |
| 12:47 | rrc7cz-hm | I could, of course, simply add a :visible true entry to the relevant coordinate, but visibility really has nothing to do with a product configuration; it's metadata the system would use |
| 12:47 | stuartsierra | Keywords are singletons. |
| 12:47 | raek | two keywords with the same name are always the same instance |
| 12:48 | rrc7cz-hm | stuartsierra: what about namespaced keywords |
| 12:48 | drewr | rrc7cz-hm: why not add meta to the coordinate map? |
| 12:48 | drewr | e.g., (with-meta {:foo {:bar 3}} {[:foo :bar] :visible}) |
| 12:48 | rrc7cz-hm | ,(identical? ::foo ::foo) |
| 12:48 | clojurebot | true |
| 12:48 | rrc7cz-hm | well, in the same ns |
| 12:48 | raek | rrc7cz-hm: you could use [:foo :bar] as a key and add metadata to that |
| 12:49 | rrc7cz-hm | drewr: that's my backup plan, but it's not as nice. I'd basically have a map's metadata shadowing the entire structure of the map itself |
| 12:50 | drewr | it seems better to me because now you have an attribute tied to an exact coordinate instead of on :foo or :bar (but maybe that's what you want) |
| 12:50 | drewr | those vector keys are really useful too with update-in/get-in |
| 12:51 | drewr | the other option is to not bother with the nested map and just use the meta |
| 12:51 | drewr | {[:foo :bar] {:visible true :val 3}} or some such |
| 12:51 | rrc7cz-hm | raek: I would, but I'm loading directly from couchdb, which only supports assoc arrays (no complex types as keys). I could make the translation, it would just be more work |
| 12:52 | rrc7cz-hm | the vec as key is a pretty nice option. I'll just have to do a bit more translating |
| 12:54 | rrc7cz-hm | I'm also wondering if somebody can explain how fn equality is done |
| 12:54 | rrc7cz-hm | ,(= range range) |
| 12:54 | clojurebot | true |
| 12:55 | hiredman | rrc7cz-hm: I think it's just reference equality |
| 12:55 | rrc7cz-hm | ,(= #(range %) #(range %)) |
| 12:55 | clojurebot | false |
| 12:55 | rrc7cz-hm | okay |
| 12:55 | hiredman | ,(identical? range range) |
| 12:55 | clojurebot | true |
| 12:55 | hiredman | ,(identical? #(range %) #(range %)) |
| 12:55 | clojurebot | false |
| 12:59 | drewr | ,#(range %) |
| 12:59 | clojurebot | #<sandbox$eval__4265$fn__4267 sandbox$eval__4265$fn__4267@8690e3> |
| 12:59 | drewr | ,#(range %) |
| 12:59 | clojurebot | #<sandbox$eval__4272$fn__4274 sandbox$eval__4272$fn__4274@11aed03> |
| 12:59 | drewr | ,range |
| 12:59 | clojurebot | #<core$range__5186 clojure.core$range__5186@8634b6> |
| 12:59 | drewr | ,range |
| 12:59 | clojurebot | #<core$range__5186 clojure.core$range__5186@8634b6> |
| 13:00 | drewr | rrc7cz-hm: #(..) creates a new, separate lambda each time |
| 13:00 | rrc7cz-hm | Just out of curiosity, what kind of issues might you run in to trying to build a logical equality operator for fns? |
| 13:00 | drewr | whereas range is a Var that points to the range function |
| 13:00 | rrc7cz-hm | I mean, since they're just lists, wouldn't it be fairly straightforward? |
| 13:02 | TalkingHead | I have a function that populates a struct, but I'm having trouble getting the struct as my return value... |
| 13:03 | TalkingHead | from-s (geo-code from "AFRICA") |
| 13:03 | TalkingHead | (defstruct map-point :name :country :latitude :longitude) |
| 13:03 | TalkingHead | and then geo-code populates something like this: |
| 13:03 | TalkingHead | (struct map-point n m lat lon )]) |
| 13:05 | thelatemrb | quit |
| 13:05 | drewr | TalkingHead: paste the code |
| 13:05 | drewr | (not in here) |
| 13:10 | TalkingHead | drewr: http://gist.github.com/345121 |
| 13:12 | slyphon | technomancy: hey, i'm having a problem with AOT compilation, it seems fairly difficult to compile a bunch of custom exceptions defined with gen-class for use in other parts of my app |
| 13:13 | slyphon | it barfs telling me that those classes couldn't be found while i'm trying to compile those classes |
| 13:13 | slyphon | oh, ffs |
| 13:14 | slyphon | nvm, it was my "user.clj" file, i thought that only got sourced when running the REPL |
| 13:15 | ipostelnik | TalkingHead, (prn s) returns nil |
| 13:16 | ipostelnik | TalkingHead, you can do (let [s ....] (prn s) s) |
| 13:16 | drewr | TalkingHead: you're returning the value of doseq from geo-code, which is always nil |
| 13:16 | TalkingHead | aha, thx |
| 13:43 | alexyk | ,(map (fn [a b] [a b]) [1 2 3] (iterate inc 0)) |
| 13:43 | clojurebot | ([1 0] [2 1] [3 2]) |
| 13:43 | alexyk | is there a shorter way to write the fn? |
| 13:44 | Chousuke | map vector |
| 13:45 | alexyk | ha |
| 13:45 | alexyk | cool |
| 13:49 | jcromartie | OK so this is pretty much awesome |
| 13:49 | jcromartie | (Thread. #(loop [chars (cycle "|/-\\")] (print "\r" (first chars)) (.flush *out*) (Thread/sleep 100) (recur (rest chars)))) |
| 13:50 | jcromartie | if you find yourself in need of an ASCII-art spinner |
| 14:56 | licoresse | What is the difference between :require and :use in ns? |
| 14:58 | licoresse | never mind: http://stackoverflow.com/questions/871997/use-vs-require-in-clojure |
| 15:04 | licoresse | argh |
| 15:04 | licoresse | No such var: sel/composite-selection |
| 15:04 | licoresse | [Thrown class java.lang.Exception] |
| 15:06 | licoresse | I am (ns ... (:use [something.whatever :as sel])) in the module, but it responds with this ^ |
| 15:06 | licoresse | Everything worked a couple of minutes ago |
| 15:06 | licoresse | now, everywhere where I am using sel/composite-selection the compiler complains |
| 15:07 | licoresse | (def composite-selection ....) |
| 15:16 | slyphon | technomancy: hey, i'm having a real hard time with AOT compilation and running swank |
| 15:18 | licoresse | I needed to (use '....) at the repl, then it worked again |
| 15:18 | licoresse | thats hogwash |
| 15:19 | licoresse | trying to restart emacs to see if I can reproduce |
| 15:23 | slyphon | ARRGH |
| 15:24 | licoresse | hehe |
| 15:24 | licoresse | I know the feeling |
| 15:25 | licoresse | running swank-clojure-project solves everything, only problems with lein swank |
| 15:25 | licoresse | or better; my lack of understanding |
| 16:24 | slyphon | doh! you can't attach metadata to java objects? |
| 16:24 | slyphon | lame! |
| 16:24 | chouser | heh. where would just metadata be stored? |
| 16:24 | slyphon | that's someone else's problem! |
| 16:24 | slyphon | :D |
| 16:25 | chouser | :-) |
| 16:25 | slyphon | chouser: i'm looking at error-kit |
| 16:25 | chouser | has to derive from IObj or IMeta to support metadata |
| 16:25 | chouser | slyphon: oh yeah? and what are you thinking? |
| 16:25 | chouser | are you thinking "what was he thinking!?" |
| 16:25 | slyphon | the reason i was thinking the above because i was like "Oh, i'll just attach some metadata to a RuntimeException instance..." |
| 16:25 | slyphon | no, i understand what you were thinking |
| 16:26 | chouser | because I think that's what I think when I think about error-kit |
| 16:26 | slyphon | hahahahahah |
| 16:26 | slyphon | it's a little convoluted |
| 16:26 | chouser | yes |
| 16:26 | chouser | too convoluted |
| 16:26 | slyphon | very CL-ey |
| 16:26 | slyphon | but |
| 16:26 | chouser | in a lot of cases contrib's condition is all you need |
| 16:26 | clojurebot | CL conditions is http://www.gigamonkeys.com/book/beyond-exception-handling-conditions-and-restarts.html |
| 16:26 | chouser | perfect for attaching a little extra data to an exception |
| 16:27 | slyphon | the problem i've been having is that i can't seem to get clojure to "see" the AOT compiled Exception subclasses i make |
| 16:27 | slyphon | hmm |
| 16:27 | slyphon | yeah, i looked at that as well, and was similarly baffled |
| 16:29 | chouser | rhickey has said error-kit confuses him so that's, you know, a bad sign. |
| 16:29 | slyphon | hahahahah |
| 16:29 | slyphon | well, it seems like you're implementing custom stack-unwinding or something |
| 16:29 | chouser | yes, in error-kit |
| 16:30 | slyphon | ok, i just wanted to make sure i kind of grokked what was goin' on |
| 16:30 | chouser | but that's only half the problem. It has a little object system in there that is ill-conceived. |
| 16:30 | slyphon | heh |
| 16:31 | chouser | basically, error-kit is a fairly thoughtless attempt to support CL conditions in Clojure, plus an extra feature or two just because they were easy to add. |
| 16:31 | slyphon | :) |
| 16:32 | slyphon | hrm |
| 16:33 | slyphon | ahhh |
| 16:33 | slyphon | ok, so Condition is a Throwable that implements IMeta |
| 16:35 | slyphon | hmm |
| 16:36 | slyphon | chouser: who would i submit a doc-string patch to? |
| 16:36 | slyphon | i think some of the condition docs could be a little more clear |
| 16:40 | technomancy | slyphon: in general I'd suggest sticking with Exceptions if you're having AOT trouble with custom classes |
| 16:40 | slyphon | yeah, i think i was just doing it wrong |
| 16:40 | technomancy | then go back and replace them with your custom exceptions once you've got a better handle on things |
| 16:41 | technomancy | unnecessary AOT can be a huge time sink |
| 16:41 | slyphon | i wasn't 100% aware that you had to make a foo/MyException.clj for (ns foo.MyException {:gen-class :extends Throwable}) |
| 16:41 | slyphon | i was trying to put multiple (ns) forms in a single file |
| 16:42 | technomancy | aha |
| 16:42 | clojurebot | Paul Graham is the creator of the other new lisp |
| 16:42 | slyphon | which is fail |
| 16:42 | technomancy | gen-class for reasons other than -main and java interop is pretty suspect |
| 16:42 | slyphon | but, i'm thinkin' ill just give clojure.contrib.condition a shot |
| 16:45 | hiredman | slyphon: the problem there is the ns form, not gen-class |
| 16:45 | hiredman | I would look at using gen-class directly |
| 16:46 | slyphon | ah |
| 16:46 | slyphon | ok, that makes sense |
| 16:47 | hiredman | http://gist.github.com/34229 from the dawn of time |
| 16:47 | slyphon | oooh |
| 16:47 | slyphon | interesting |
| 16:47 | hiredman | you still have to aot compile |
| 16:58 | slyphon | it'd be nice if there were some variant of (ns (:require [foo.bar [baz :as baz]])) to get rid of the repetition |
| 16:58 | slyphon | unless there is one that i just don't know about |
| 17:01 | LauJensen | Whats the fn to check if what Im holding is a primitive? |
| 17:05 | technomancy | slyphon: there's talk of adding that; someone has started prototyping it |
| 17:05 | slyphon | ah, cool |
| 17:05 | slyphon | yeah, i find myself doing that *a lot* |
| 17:05 | technomancy | see the "ns overhaul" thread on the clojure-dev list |
| 17:05 | slyphon | ah, cool |
| 17:06 | chouser | LauJensen: repl-utils expression-info |
| 17:07 | slyphon | do people generally just use clojure.test ? |
| 17:07 | technomancy | slyphon: unless you're the author of one of the competing frameworks, you're probably using clojure.test |
| 17:07 | slyphon | :) |
| 17:08 | slyphon | are any of the other competinf frameworks any good/worth checking out? |
| 17:08 | slyphon | competing* even |
| 17:08 | LauJensen | chouser: thanks |
| 17:08 | technomancy | slyphon: not yet, unless you're interested in contributing |
| 17:09 | slyphon | ah |
| 17:09 | chouser | LauJensen: not it operates on forms (like macroexpand) not on return values |
| 17:09 | slyphon | thanks, i have enough of my own shitty code to contend with :) |
| 17:09 | LauJensen | chouser: Would be easier if I could check returns, any way to do that? |
| 17:10 | alexyk | ,(map (fn [x] [x 1]) [1 2 3]) ; this works |
| 17:10 | clojurebot | ([1 1] [2 1] [3 1]) |
| 17:10 | alexyk | ,(map (fn #([% ]) [1 2 3]) ; this doesn't -- why? |
| 17:10 | clojurebot | EOF while reading |
| 17:10 | alexyk | ,(map (fn #([% ]) [1 2 3])) |
| 17:10 | clojurebot | java.lang.RuntimeException: java.lang.RuntimeException: java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.lang.Symbol |
| 17:10 | slyphon | um |
| 17:11 | alexyk | i.e., hod do we do #([% 1]) right with %? |
| 17:11 | alexyk | how |
| 17:11 | slyphon | (vec %) ? |
| 17:13 | alexyk | I need to return new vectors of two elements, first from the original, second fixed -- here it's 1 |
| 17:13 | alexyk | same behavior as (map (fn [x] [x 1]) [1 2 3]) |
| 17:13 | alexyk | i.e. the question is to rewrite (fn [x] [x 1]) with #(...%...) |
| 17:14 | slyphon | ,(map #(vec (list % 1)) [1 2 3]) |
| 17:14 | clojurebot | ([1 1] [2 1] [3 1]) |
| 17:15 | alexyk | ah, |
| 17:15 | alexyk | ,(map #(vector % 1) [1 2 3]) |
| 17:15 | clojurebot | ([1 1] [2 1] [3 1]) |
| 17:15 | slyphon | that too :) |
| 17:17 | chouser | LauJensen: well, that's a problem since functions only return boxed things. |
| 17:18 | LauJensen | chouser: You mean rich has to provide a special form... *hint* *hint* |
| 17:32 | licoresse | ,(map vector '1 [1 2 3]) |
| 17:32 | clojurebot | java.lang.IllegalArgumentException: Don't know how to create ISeq from: java.lang.Integer |
| 17:32 | licoresse | ,(map vector [1] [1 2 3]) |
| 17:32 | clojurebot | ([1 1]) |
| 17:32 | hiredman | you have to use repeat |
| 17:32 | licoresse | ,(map vector (repeat 1) [1 2 3]) |
| 17:32 | clojurebot | ([1 1] [1 2] [1 3]) |
| 17:32 | licoresse | right |
| 17:33 | chouser | LauJensen: you should be able to use a debugger to see what the type of a local is -- primitive or otherwise |
| 17:33 | alexyk | good good |
| 17:33 | LauJensen | chouser: Yea, but this is really an area where I hope Clojure improves rapidly. The lack of reflection warnings and insight into boxing is making optimizing a very tough job |
| 17:36 | Raynes | Licenser: ping |
| 17:36 | Licenser | Raynes: pong |
| 17:36 | Raynes | Licenser: Was there a particular reason that 'def' was whitelisted? |
| 17:36 | Raynes | Seems like something one should whitelist themselves if they need it. |
| 17:36 | Raynes | Because it can pollute the namespace. |
| 17:38 | Licenser | Raynes: It was in the lists, not in the whitelist, I guess it slipped in when we went from multiple vars to a map |
| 17:38 | Raynes | Ah. It was in variable-fns. I removed it last night. |
| 17:38 | slyphon | technomancy: if i want leiningen to compile clojure.contrib.condition.Condition, do i put :namespaces [c.c.c.C] or [c.c.c] ? |
| 17:39 | Raynes | As a matter of fact, it is all that was in variable-fns. :p |
| 17:39 | Licenser | heh |
| 17:39 | Raynes | When I get some time, I'll go through the entire Clojure API and add stuff. I've been busy over the last couple of days. |
| 17:41 | slyphon | technomancy: i have :namespaces [clojure.contrib.condition.Condition], but lein compile says "all :namespaces already compiled", but i look in classes/ and the Condition.class file isn't there |
| 17:44 | technomancy | slyphon: contrib should be AOT'd for you; no need to do it yourself |
| 17:44 | slyphon | oh |
| 17:44 | slyphon | duh |
| 17:44 | slyphon | technomancy: i'm sorry, i'm not normally this retarded |
| 17:45 | licoresse | how was that :keys destructuring again? |
| 17:47 | technomancy | slyphon: happens to everyone at some point |
| 17:47 | slyphon | yeah, must be early-onset stupidity |
| 18:02 | Raynes | ,(doc "blah") |
| 18:02 | clojurebot | java.lang.ClassCastException: java.lang.String cannot be cast to clojure.lang.Symbol |
| 18:02 | Raynes | Is there a way to turn a string into what doc can take? |
| 18:02 | Raynes | ,(doc (symbol "blah")) ; obviously doesn't work. |
| 18:02 | clojurebot | java.lang.ClassCastException: clojure.lang.PersistentList cannot be cast to clojure.lang.Symbol |
| 18:06 | Licenser | Raynes: find-doc |
| 18:06 | Licenser | ,(find-doc "bla") |
| 18:06 | clojurebot | ------------------------- hiredman.clojurebot.core/inits ([[f & r :as c]]) again I blame Chouser ------------------------- hiredman.clojurebot.factoids/inits ([[f & r :as c]]) again I blame Chouser |
| 18:07 | Licenser | what? |
| 18:07 | clojurebot | what is short for ,(doc ...) |
| 18:07 | defn | hi all |
| 18:07 | Raynes | find-doc wont work in this situation. |
| 18:07 | Raynes | Because it can return more than one result. |
| 18:09 | Licenser | kk |
| 18:09 | slyphon | it would be nice if there were a way of having some "standard" group of things that you want to use in all your namespaces |
| 18:10 | Raynes | Hrm. |
| 18:10 | slyphon | like clojure.contrib.logging |
| 18:11 | technomancy | slyphon: http://onclojure.com/2010/02/17/managing-namespaces/ |
| 18:11 | slyphon | ooh |
| 18:11 | slyphon | technomancy: ty |
| 18:11 | technomancy | it's a little rough, but looks promising |
| 18:11 | technomancy | I've wanted something like that too |
| 18:12 | slyphon | yah, i was thinking of setting up a macro i can just call by default in each namespace |
| 18:12 | slyphon | that would live in one location |
| 18:17 | Raynes | Eh, looks like hiredman write a cryptic macro to work around this little issue. |
| 18:18 | slyphon | Raynes: link? |
| 18:19 | Raynes | http://github.com/hiredman/clojurebot/blob/master/src/hiredman/sandbox.clj#L93 |
| 18:20 | Raynes | Yeah. I miss the old doc that took a string. |
| 18:20 | Raynes | It should have been moved to doc-string or something. |
| 18:20 | slyphon | you could probalby use (eval) for that no? |
| 18:20 | slyphon | or write a macro? |
| 18:21 | Licenser | Raynes: thanks for adding the additional functions :) |
| 18:21 | slyphon | nah, you'd need eval i think |
| 18:21 | Raynes | Licenser: Why isn't doc whitelistable again? |
| 18:22 | Licenser | hmm most likely because I forgot it |
| 18:22 | Raynes | It doesn't seem to work even if you whitelist it. |
| 18:23 | Raynes | Licenser: Nope, just confirmed. It doesn't allow it even if it's whitelisted. |
| 18:24 | Licenser | Raynes: ah because it is an macro then |
| 18:24 | Licenser | ,(macroexpand '(doc "doc")) |
| 18:24 | clojurebot | (let* [m__1734__auto__ (clojure.core/meta (clojure.core/resolve (quote "doc"))) al__1735__auto__ (:arglists m__1734__auto__) docstring__1736__auto__ (:doc m__1734__auto__)] (if m__1734__auto__ (.replaceAll (clojure.core/str al__1735__auto__ "; " docstring__1736__auto__) "\\s+" " ") (clojure.core/-> hiredman.clojurebot.code-lookup/contrib :vars ((clojure.core/partial clojure.core/filter (clojure.core/fn [a__1737__auto__] (c |
| 18:24 | Licenser | oi I'm not sure if whitelisting resolve is good, |
| 18:24 | Raynes | Licenser: That's hiredman's special doc. Doesn't count. |
| 18:24 | Licenser | or meta |
| 18:24 | Licenser | ah okay |
| 18:24 | Raynes | Licenser: Try doing it in your own REPL. |
| 18:25 | Licenser | because the function si called print-doc? |
| 18:25 | Raynes | Apparently so. :o |
| 18:25 | Licenser | heh |
| 18:26 | Raynes | Kay. |
| 18:26 | defn | any fun ideas for obfuscated clojure? |
| 18:26 | Raynes | Lot's of commas. |
| 18:26 | defn | :) |
| 18:27 | Raynes | Licenser: I'll add print-doc to the whitelist later. |
| 18:28 | defn | ,`@#'f |
| 18:28 | clojurebot | (clojure.core/deref (var sandbox/f)) |
| 18:30 | defn | ,`~* |
| 18:30 | clojurebot | #<core$_STAR___4526 clojure.core$_STAR___4526@1ab5fd5> |
| 18:31 | defn | ,`~'@* |
| 18:31 | clojurebot | (clojure.core/deref *) |
| 18:31 | defn | that could be ugly |
| 18:35 | licoresse | How can I create an array of floats in Clojure? Tried (into-array Float [10.0 20.0]) |
| 18:36 | licoresse | Yes, I'm a java noob |
| 18:36 | defn | ,(doc float-array) |
| 18:36 | clojurebot | "([size-or-seq] [size init-val-or-seq]); Creates an array of floats" |
| 18:37 | licoresse | thanks defn |
| 18:37 | hiredman | hiredman.clojurebot.code-lookup/contrib is broken |
| 18:37 | hiredman | :/ |
| 18:37 | defn | licoresse: I think there's a way to use into-array like you're doing above, but it needs to be Float/something for the type IIRC |
| 18:37 | hiredman | replaca_: the vars stuff in the json is empty |
| 18:39 | defn | licoresse: you could do this: |
| 18:39 | defn | ,(into-array (map float [1.0 2.0 3.0])) |
| 18:39 | clojurebot | #<Float[] [Ljava.lang.Float;@129f6e7> |
| 18:42 | licoresse | defn: that won't do it for BasicStroke |
| 18:42 | licoresse | the float-array works swell |
| 18:44 | defn | (floats (float-array [1 2 3])) |
| 18:44 | defn | ,(floats (float-array [1 2 3])) |
| 18:44 | clojurebot | #<float[] [F@8e4ea6> |
| 18:44 | defn | licoresse: i was curious -- that's from chouser awhile back |
| 18:45 | licoresse | why cast it to floats first? |
| 18:46 | licoresse | (float-array [1 2 3]) |
| 18:46 | licoresse | ,(float-array [1 2 3]) |
| 18:46 | clojurebot | #<float[] [F@fb241d> |
| 18:49 | hiredman | floats is for if you are using let in an inner loop and want to avoid array reflection |
| 18:53 | licoresse | I see |
| 19:01 | Raynes | ,(let [x 3] (let [x (+ x 5)] (println x))) |
| 19:01 | clojurebot | 8 |
| 19:02 | Raynes | That isn't cute. |
| 19:06 | alexyk | Raynes: did you expect 2010? |
| 19:07 | alexyk | Raynes: btw, rename clojure-casual to clojure-cajual |
| 19:07 | alexyk | ...snd serve some cajun food |
| 19:07 | alexyk | there |
| 19:07 | Raynes | alexyk: No, I expected it to be like Haskell and not allow me to do that. :p |
| 19:07 | Raynes | And, psykotic didn't like the idea of cajual. |
| 19:09 | hiredman | ,(let [x 3 x (+ x 5)] x) |
| 19:09 | clojurebot | 8 |
| 19:09 | alexyk | so, nested x is not rebinding the outer, it's shadowing it, so all is cool, no? |
| 19:09 | alexyk | and hiredman actually redefines it |
| 19:09 | alexyk | so what, it's expected |
| 19:10 | alexyk | if Haskell doesn't like it, -- deal with it, Haskell! |
| 19:10 | Raynes | I didn't expect it. Haskell assumptions. |
| 19:10 | slyphon | has 1.2 been released yet? |
| 19:10 | alexyk | "Clojure: rebinding Haskell's mama" |
| 19:10 | joshua-choi | slyphon: I don't think so |
| 19:10 | slyphon | bummer |
| 19:11 | alexyk | how do you slurp now? |
| 19:12 | joshua-choi | I mean, like (fn [first-arg & rest-args] ...) |
| 19:12 | alexyk | ah ok |
| 19:12 | joshua-choi | http://github.com/richhickey/clojure/commit/29389970bcd41998359681d9a4a20ee391a1e07c |
| 19:14 | alexyk | nice |
| 19:14 | joshua-choi | Question: how can you check if an object can turn into a sequence, i.e. if (seq x) will not throw an Exception? |
| 19:15 | joshua-choi | alexyk: Yeah, that will have ramifications. It seems to me that proper named arguments are now possible in the vector arg itself |
| 19:15 | chouser | there's not a particularly good way I guess because it's considered an inappropriate question. |
| 19:16 | joshua-choi | Well, there's ifn?. |
| 19:16 | joshua-choi | I want something like ifn? for sequences for a precondition. |
| 19:17 | chouser | a precondition will throw if it fails anyway, right? so why not just use 'seq'? |
| 19:17 | joshua-choi | Oh, right |
| 19:17 | joshua-choi | Of course |
| 19:22 | joshua-choi | Well, actually, I don't want that |
| 19:23 | joshua-choi | I'd like specifically an assertion error thrown, like any other precondition. If I just use {:pre #{(seq x)}}, then it won't give as useful of a message |
| 19:24 | joshua-choi | But is there really no other way than to do (isa? (type x) clojure.lang.Seqable)? |
| 19:27 | chouser | well, seq works on Strings but String is final and doesn't implement Seqable |
| 19:28 | chouser | there's a 'seqable?' in contrib somewhere, but it has always struck me as a bit fragile. |
| 19:30 | slyphon | wow |
| 19:30 | slyphon | the namespace stuff is hairy |
| 19:31 | slyphon | i'd love to use something like http://code.google.com/p/clj-nstools/ but my project is using clojure-1.1 |
| 19:32 | joshua-choi | chouser: I didn't know that String didn't implement Seqable. Although in retrospect that's obvious. clojure.contrib.core/seqable? would be what I want, although its source code does seem to be fragile. I wish there was a better way. |
| 19:54 | joshua-choi | Is there a core/contrib function that tests if one integer divides another? Yeah, I know I can just do (zero? (mod x y))... |
| 19:55 | programble | (defn divisible [x y] (zero? (mod x y))) |
| 19:56 | joshua-choi | programble: Sorry, I meant, "Is there a standard function in clojure.core or .contrib?" |
| 19:57 | programble | ... |
| 19:57 | programble | (defn divisible [x y] (zero? (mod x y))) |
| 20:02 | _ato | I doubt it |
| 20:02 | ag90 | (mod x 0) will kill that one. Need a check for that too. |
| 20:11 | alexyk | liebke: is there any clustering in incanter, like k-means? |
| 20:14 | defn | liebke: I'm having some issues getting charts to display on Ubuntu 9.10 |
| 20:14 | liebke | alexyk: not yet |
| 20:14 | liebke | defn: what's the error? |
| 20:15 | alexyk | kk |
| 20:18 | defn | liebke: the window comes up, but it's just empty -- the same code works on OSX |
| 20:20 | liebke | defn: hmm, no idea |
| 20:20 | defn | very weird |
| 20:21 | liebke | true |
| 20:21 | defn | sun-awt-x11-XFramePeer is the classname of the window |
| 20:21 | defn | I could give you the #<ChartFrame...> in a PM if you'd like |
| 20:28 | robink | Do I need to call Java's sin function to caluclate a sine in clojure? |
| 20:48 | joshua-choi | I'm wondering: is there a particular reason why there are no def-, defmacro-, defmulti-, or deftype- macros in clojure.core? Is hiding vars looked down upon? |
| 20:59 | defn | I'm trying to sort a vector of maps by a key in each map |
| 20:59 | slyphon | sort-by ? |
| 21:00 | defn | [{:foo 4 :bar 8} {:foo 7 :bar 5}] => (when sorting on :bar) => [{:foo 7 :bar 5}...] |
| 21:01 | defn | slyphon: how would i use sort-by there? |
| 21:01 | slyphon | (sort-by :bar [{:foo 1 :bar 7} {:foo 2 :bar 3}]) |
| 21:01 | defn | hmm, i dont think that works on the vector |
| 21:01 | slyphon | ,(sort-by :bar [{:foo 1 :bar 7} {:foo 2 :bar 3}]) |
| 21:01 | clojurebot | ({:foo 2, :bar 3} {:foo 1, :bar 7}) |
| 21:01 | defn | huh, nevermind |
| 21:06 | defn | thanks slyphon |
| 21:06 | slyphon | sure |
| 21:10 | robink | OK, so it's in clojure-contrib |
| 21:10 | robink | How do I force clojure to include Clojure-contrib's set of functions? |
| 21:10 | robink | It's installed in /opt/local/share/clojure/lib, but clojure isn't loading it upon startup. |
| 21:11 | robink | /opt/local/share/clojure/lib/clojure.jar is present in that location, but it won't touch other .jars in the same directory. |
| 21:11 | slyphon | you have to add them to your classpath? |
| 21:12 | robink | slyphon: Tried that. |
| 21:12 | slyphon | you have to explicitly require those libraries |
| 21:12 | slyphon | import names from them into your namespace |
| 21:12 | robink | (ns user (:require [clojure.contrib.generic.math-functions :as generic))? |
| 21:12 | lithpr | robink: to answer this, and all subsequent similar questions, you'll need to learn about namespaces (use require refer import) |
| 21:13 | lithpr | as you apparently have :) |
| 21:13 | robink | Says it can't find clojure/contrib/generic/math_functions__init.class or clojure/contrib/generic/math_functions.clj |
| 21:13 | robink | lithpr: I'll learn more about namespaces. |
| 21:15 | robink | lithpr: What's a good reference? |
| 21:17 | lithpr | uhm, the most concise summary i've found was in labrepl |
| 21:17 | robink | lithpr: Thanks |
| 21:18 | robink | lithpr: In the labrepl source? |
| 21:19 | lithpr | when you start labrepl it uses jetty to serve the lessons from localhost |
| 21:19 | robink | lithpr: Ah, OK |
| 21:19 | lithpr | so that's a lot of work to get the info |
| 21:19 | robink | Indeed |
| 21:20 | lithpr | (ns user (:use clojure.contrib.generic.math-functions)) returns without objection in my set up |
| 21:21 | robink | lithpr: Doesn't work for me, something's wrong with my setup. |
| 21:21 | robink | lithpr: Clojure was very recently added to MacPorts, they may not have everything set up the way it should be. |
| 21:21 | lithpr | oic |
| 21:22 | robink | Lemme try from Gentoo |
| 21:22 | robink | Returns in Gentoo :( |
| 21:23 | robink | and the library location is less sane in Gentoo |
| 21:23 | lithpr | ubuntu here, so i'm no help with the mac |
| 21:24 | robink | I explicitly set CLASSPATH to point to the clojure-contrib.jar and it fails |
| 21:24 | lithpr | never realized macs used ports... its bsd though... |
| 21:24 | robink | Yeah, essentially |
| 21:25 | robink | MacPorts is a "distro" for OSX, it's not really part of the OS. |
| 21:25 | robink | I could install Gentoo Prefix (which I may do, if I can't hammer this one out) |
| 21:25 | robink | Advantage of MacPorts is that it relies on the system libc so there's less memory usage etc |
| 21:25 | robink | Gentoo Prefix pulls the whole userland in |
| 21:26 | lithpr | neat |
| 21:26 | robink | I s'pose |
| 21:27 | lithpr | every single other member of the Pittsburgh clojure meetup had a mac... |
| 21:27 | robink | Hah |
| 21:27 | robink | I was the only person at the Seajure meeting with a Mac. |
| 21:27 | robink | Well, Brian had one, but he didn't take it out IIRC. |
| 21:29 | robink | I should've attended the first Seajure meeting. |
| 21:30 | robink | There had to have been someone with a mac there. |
| 21:31 | lithpr | have you tried using a lein based install? |
| 21:31 | defn | woo hoo! pretty graphs in incanter. this is starting to get really fun now :) |
| 21:32 | lithpr | defn: yeah, made one yesterday going through the labrepl labs. never played with it before. pretty slick... |
| 21:33 | lithpr | also never realized that the letter p is second only to s as the first letter of words in english :) |
| 21:33 | defn | hehe |
| 21:34 | sattvik | robink: Are you still having the problem with Clojure-contrib? |
| 21:41 | lithpr | robink: you might consider using lein & swank clojure. If sets up a clojure and clojure contrib (and whatever) on a per project basis, and handles the classpath issues. never really appreciated the fact that i haven't experienced classpath hell since moving to clojure... |
| 21:47 | phren0logy | is anybody else having problems connecting to the swank server that's supposed to be started by LabREPL? |
| 21:47 | lithpr | i didn't have a problem with it |
| 21:48 | lithpr | are you in the right pwd when you start it? |
| 21:50 | lithpr | fyi, in emacs, once you are in the right dir and M-x inferior-lisp, you can subsequently M-x slime-connect, and use it from slime |
| 21:50 | lithpr | i know nothing of inferior-lisp mode, but i'm loving the slime-mode buffer/slime-repl clojure combo |
| 21:50 | phren0logy | yeah, I start it from the labrepl directory with script/swank (on ox X) |
| 21:50 | phren0logy | er, os x |
| 21:51 | lithpr | are you getting an error? |
| 21:51 | phren0logy | it fires up the web server, but I get an error when I M-x slime-connect |
| 21:51 | phren0logy | saying there's nothing on socket 4005 |
| 21:51 | phren0logy | and I can connect when I fire up swank from incanter |
| 21:52 | phren0logy | so I'm not sure what's up |
| 21:53 | lithpr | huh. 127.0.0.1/4005 is happy here. |
| 21:53 | phren0logy | is there any way to force lein to re-download all the dependencies? |
| 21:54 | phren0logy | It starts, and I get the web server and I repl prompt in the terminal, just no swank server |
| 21:54 | phren0logy | what platform are you on, and are you using the most recent version of labrepl? One of the updates seems to have broken mine, unless that was just coincidence. |
| 21:55 | lithpr | ubuntu 9.10, labrepl as of two days ago. |
| 21:56 | lithpr | not sure where i'd find a version number |
| 21:56 | phren0logy | Well, I don't want you to break yours, but if you try git pull let me know if it screws up. |
| 21:56 | phren0logy | I get: Debugger entered--Lisp error: (file-error "make client process failed" "Connection refused" :name "SLIME Lisp" :buffer nil :host "127.0.0.1" :service 4005) |
| 21:57 | phren0logy | To get a version, try "git log" from the labrepl directory |
| 21:57 | phren0logy | (if you cloned the git repo) |
| 21:58 | lithpr | yeah, i cheated. i just downloaded it as a tar.gz. kinda a hg man... |
| 21:58 | phren0logy | the most recent commit's SHA1 starts with db97156, with the commit message "reorg README" |
| 21:58 | phren0logy | Ah. Ok, cool. Thanks anyway. |
| 22:00 | lithpr | "relevance-labrepl-e978d2e" |
| 22:02 | phren0logy | lithpr: OK, cool, that seems to be before a change to the startup script |
| 22:02 | phren0logy | I'll roll mine back |
| 22:06 | phren0logy | lithpr: That fixed it, thanks. |
| 22:07 | phren0logy | I'm sure hg does pretty much the same thing, but "git checkout e978d2e" took me right to it. DVCS is awesome. |
| 22:13 | lithpr | no git hatred here, just ignorance. |
| 22:13 | lithpr | seems like clojure, like ruby, prefers git, so i'm going to have to improve that situation |
| 22:14 | lithpr | the guys on FLOSS weekly seem to be enthusiastic about it too |
| 22:17 | phren0logy | lithpr: I really haven't picked a side, it's just that all the cools stuff is on github. At a glance, hg actually seems much more humane and sensible. |
| 22:20 | lithpr | phren0logy: is it working for you now? |
| 22:22 | phren0logy | lithpr: yes, it's working great |
| 22:23 | lithpr | cool |
| 22:24 | robink | lithpr: How can I examine the contents of the Java CLASSPATH to see if Java can get at clojure-contrib? |
| 22:24 | robink | lithpr: I don't know if this is a problem with Java, MacPorts or somehow my build of Clojure. |
| 22:25 | somnium | (System/getProperty "java.class.path") |
| 22:26 | robink | somnium: Thanks |
| 22:26 | robink | somnium: Can I examine Clojure jars with Java? |
| 22:26 | somnium | robink: not sure what you mean |
| 22:27 | robink | somnium: Maybe I don't either |
| 22:27 | robink | somnium: OK, so the only thing in the CLASSPATH is clojure.jar |
| 22:27 | robink | That's a start |
| 22:27 | phren0logy | robink: I have been using homebrew, and I installed leiningen with it. It has been working very well for me. Just something to consider if MacPorts is giving you trouble. |
| 22:27 | robink | phren0logy: OK, I will |
| 22:28 | lithpr | phren0logy: seconded |
| 22:28 | robink | phren0logy: Yeah, even when I mention clojure-contrib in the CLASSPATH environment variable, it doesn't show in Java's runtime classpath. |
| 22:29 | phren0logy | With leiningen, I haven't had to worry about classpaths nearly as much. Which is great, becuase that always seems to be a headache. |
| 22:29 | bb_oz | robink: you could start clojure with -cp |
| 22:31 | bb_oz | java -cp $JLINE_JAR:$CLOJURE_JAR:$CLOJURE_CONTRIB_JAR:$MORE_CLASSES jline.ConsoleRunner clojure.main |
| 22:32 | Mec | Has anyone by chance made a JTree out of nested maps? |
| 22:34 | lithpr | Mec, i hope someone gives you a magic link, because i can only think of about a 1000 nifty things to do with that off hand... |
| 22:34 | Mec | I know right, I'll deffinitly have to publish it if I dont kill myself first |
| 22:34 | lithpr | that would be worth the effort |
| 22:46 | Mec | Assuming every key is a node in the tree, how would you represent the leaf key values (if at all) |
| 22:49 | lithpr | you'ld essentially need to decide whether the key value only serves to host the structure, or have it do double duty as a label |
| 22:50 | lithpr | is my knee-jerk response |
| 22:50 | Mec | I was going to have it be label as well, else where would you put the key-label links |
| 22:52 | robink | bb_oz: Thanks |
| 22:54 | lithpr | well, {:foo [[:label "bar" :other-stuff "baz"] {:biz ... |
| 22:55 | lithpr | again, i'm not really thinking deeply here, and it's thought-worthy... |
| 22:56 | robink | OK, fixed it, but I have to call clojure from Java per bb_oz' suggestion. |
| 22:56 | lithpr | robink: excellent. glad to hear it |
| 22:56 | robink | lithpr: I'd still like to just be able to fire up clojure. |
| 22:56 | Mec | can you assosciate metadata with just a key inside a map |
| 22:56 | robink | Oh, clj is a script |
| 22:56 | lithpr | Mec.. ooh, that's nice |
| 22:57 | lithpr | keeps it generic |
| 22:57 | lithpr | the structure you're modeling with the JTree i mean |
| 22:57 | Mec | like {(with-meta :foo {:label "bar" :other-stuff "baz"}) {next-level-of-tree}} |
| 22:58 | robink | Is it a bad thing to pull in clojure-contrib every time? |
| 22:58 | robink | clj looks in ~/.clojure and adds anything there to the classpath. |
| 22:59 | Mec | is it possible to do what i typed? |
| 22:59 | lithpr | robink: there are two kinds of people- those that mess with classpaths and those that tool them. I was of the former, and it gave me a lot of advantagesrelative to my peers. I am now the later, and probably worse for it :) |
| 23:00 | robink | lithpr: Heh, it seems to me to be better to tool your classpath, but I don't know jack about Java or handling deps in OO languages. |
| 23:01 | lithpr | mec, i have not ever actually used metadata, but the usecase for it that rich talked about is exactly the one you have here |
| 23:01 | lithpr | like exactly, that is metadata to the structure |
| 23:01 | Mec | ya |
| 23:02 | Mec | and that why you can even embed your own listeners |
| 23:02 | Mec | but can you add meta to a keyword |
| 23:02 | lithpr | so i don't know if your code is syntacticly perfect, but conceptually it is definitely spot on |
| 23:02 | Mec | and the answer is nope |
| 23:02 | Mec | which really sucks |
| 23:03 | lithpr | you can add it to a symbol |
| 23:03 | lithpr | but not a keyword? |
| 23:03 | Mec | can you add it to a symbol or just the value the symbol is representing |
| 23:04 | Mec | ,(with-meta 'test {:test true}) |
| 23:04 | clojurebot | test |
| 23:04 | Mec | ,(meta (with-meta 'test {:test true})) |
| 23:04 | clojurebot | {:test true} |
| 23:04 | Mec | \ |
| 23:04 | Mec | ,(with-meta :test {:test true}) |
| 23:04 | clojurebot | java.lang.ClassCastException: clojure.lang.Keyword cannot be cast to clojure.lang.IObj |
| 23:05 | brweber2 | does anyone know if there is an akka bridge or equivalent erlang style actor library for clojure? |
| 23:06 | Mec | so maybe instead of maps, the structure can be vectors with metadata |
| 23:08 | robink | Clojure docs have you getting pi via (. Math PI). Is this optimal? |
| 23:08 | robink | It seems to be relying on Java. I still haven't figured out Java calls. |
| 23:08 | Mec | ,Math/PI |
| 23:08 | clojurebot | 3.141592653589793 |
| 23:09 | Mec | shorthand for static members |
| 23:09 | robink | Mec: Thanks. |
| 23:14 | Mec | ,#^{:label "Root"} [#^{:label "brach1"} 'leaf?] |
| 23:14 | clojurebot | [leaf?] |
| 23:14 | Mec | That doesn't look too bad, but what should be used to represent leaf nodes |
| 23:17 | slyphon | jeez |
| 23:17 | slyphon | the fact that 'defmacro' is a fn just blows my mind |
| 23:18 | Mec | a macro is just a function with a macro flag in its metadata |
| 23:21 | slyphon | yeah, i mean, it has to be a function, but at some level, that's just more meta than i can easily comprehend |
| 23:22 | Mec | most simply a macro is just a function that doesnt evaluate its args |
| 23:32 | Mec | I guess it doesnt matter what the leaf node actually is since all we want is it's metadata |
| 23:43 | Mec | bah meta cant be applied to string either :x |
| 23:47 | Mec | which representation looks better, or is there another I havnt considered? http://gist.github.com/345693 |
| 23:49 | Mec | ,(meta (with-meta (keyword "test") {:test true})) |
| 23:49 | clojurebot | java.lang.ClassCastException: clojure.lang.Keyword cannot be cast to clojure.lang.IObj |
| 23:51 | somnium | yeah keywords are interned singletons :/, Ive settled on using a wrapper type for strings/numbers for the same problem, though its not very satisfying |
| 23:52 | Mec | symbols will work right? |
| 23:52 | _ato | yes |
| 23:53 | Mec | ,(meta (with-meta (symbol "test") {:test true})) |
| 23:53 | clojurebot | {:test true} |
| 23:53 | Mec | symbols it is |
| 23:54 | Mec | http://gist.github.com/345693 |