2009-01-05
| 01:37 | darkdescendant | Is there a lookup function for maps similar to what assoc-in does (i.e. traverses a nested map given a list of keys)? |
| 01:37 | dhaya | darkdescendant: get-in |
| 01:38 | darkdescendant | thanks. |
| 04:21 | Lau_of_DK | Ola kotarak :) |
| 05:30 | AWizzArd | clojurebot: max people |
| 05:30 | clojurebot | max people is 116 |
| 05:44 | nibbs | http://java.sun.com/j2se/1.4.2/docs/api/java/sql/DatabaseMetaData.html#getTables(java.lang.String,%20java.lang.String,%20java.lang.String,%20java.lang.String[]) |
| 05:45 | nibbs | im trying to figure out how to get the metadata from an sql db |
| 05:45 | nibbs | http://paste.pocoo.org/show/98052/ |
| 05:46 | nibbs | so it shouldnt be 4 nils |
| 05:46 | nibbs | but... |
| 05:46 | nibbs | ? |
| 05:47 | nibbs | when using resultset-seq |
| 05:47 | nibbs | ava.sql.SQLException: No current connection. |
| 05:47 | nibbs | user=> #<EmbedResultSet40 org.apache.derby.impl.jdbc.EmbedResultSet40@22fe09> |
| 05:47 | nibbs | u |
| 05:47 | nibbs | get shtat befoe though |
| 06:02 | nibbs | what loginname and password does clojure.contrib.sql use or connectin to databasea? |
| 06:04 | AWizzArd | I would think that you have to provide l/p for the db. |
| 06:05 | nibbs | l/p? |
| 06:05 | nibbs | ah lol |
| 06:05 | nibbs | but when(def db {:classname "org.apache.derby.jdbc.EmbeddedDriver" |
| 06:05 | nibbs | :subprotocol "derby" |
| 06:05 | nibbs | :subname "C:/clojure/progs/netflix/moviereviews.db" |
| 06:05 | nibbs | :create true}) |
| 06:05 | nibbs | that is what is provided |
| 06:14 | AWizzArd | put :user "nibbs", :password "secret" into that map |
| 06:14 | nibbs | ok |
| 06:14 | nibbs | but since it is created already how can i access it, what pw does it already use? none? |
| 06:16 | AWizzArd | No idea. db was just set to this hash map. |
| 06:16 | nibbs | and should :create always be true? now the db is created... |
| 06:17 | nibbs | 40 user=> |
| 06:18 | nibbs | java.sql.SQLException: No current connection. |
| 06:18 | nibbs | (user=> |
| 06:18 | nibbs | still |
| 06:18 | nibbs | well maybe it should |
| 06:18 | nibbs | problem is i dont understand what parameters to proive |
| 06:18 | nibbs | provide |
| 06:20 | nibbs | http://paste.pocoo.org/show/98055/ |
| 06:20 | nibbs | works htough |
| 06:25 | nibbs | http://paste.pocoo.org/show/98056/ |
| 06:25 | nibbs | weird |
| 06:25 | nibbs | sometimes it returns the correct answer and fo other operations i get sql-exception |
| 06:25 | nibbs | no connection |
| 06:44 | knapr | is i only me? im trying to learn Java (know python and C since before) along with Clojure. every text I read about Java, every design-ebook etc, they just strike me as bullshit and pseudo-science. it's like they couldnt solve a real problem so they created Java instead, in a lot of ways worse than was already. then all these shortcomings somehow got accedpted and there is a whole religion built around how to work with it and noone is aqski |
| 08:23 | knapr | how can I set foreign key and primary key with contrib.sql? |
| 09:53 | StartsWithK | how do i implement overloaded methods with genclass? |
| 09:54 | StartsWithK | like (defn -method [#^String a] ...) (defn -method [#^String a #^String b] ...) |
| 09:54 | StartsWithK | or (defn -method ([#^String a] ..) ([#^String a #^String b] ...)) |
| 09:54 | StartsWithK | what if they have same arity but different signatures? |
| 09:55 | hiredman | (doc defmulti) |
| 09:55 | clojurebot | Creates a new multimethod with the associated dispatch function. If default-dispatch-val is supplied it becomes the default dispatch value of the multimethod, otherwise the default dispatch value is :default.; arglists ([name dispatch-fn] [name dispatch-fn default-val]) |
| 09:55 | StartsWithK | (i know 'this' has to be a first argument) |
| 09:55 | hiredman | actually |
| 09:56 | hiredman | I've never tried defmulti with genclass |
| 09:56 | RSchulz | Aren't they for entirely different purposes? |
| 09:56 | StartsWithK | yes |
| 09:56 | StartsWithK | multimethod don't have anything to do with genclass |
| 09:56 | cgrand | StartsWithK: -method-String and -method-String-String (at least that was working like this before AOT) |
| 09:56 | RSchulz | I mean, there's no real interaction between Clojure multimethods and Java overloaded methods, is there? |
| 09:57 | hiredman | RSchulz: it would look more or less the same from java |
| 09:57 | Chouser | cgrand: I believe that still works. |
| 09:57 | RSchulz | But the multimethod mechanisms are unrelated to Java dispatch. |
| 09:57 | StartsWithK | none, multimethods (last time i looked) are implemented using hash-map |
| 09:58 | StartsWithK | more or less.. |
| 09:58 | StartsWithK | will try this -method-String-String |
| 09:58 | StartsWithK | then i don't have to prvide type hints at all? |
| 09:58 | StartsWithK | like (def -method [this #^String a] ..) |
| 09:58 | Chouser | StartsWithK: I think you also have the option of accepting the appropriate arity and then doing a runtime check on the arg type to determine what to do. |
| 09:58 | StartsWithK | just 'a'? |
| 09:59 | Chouser | StartsWithK: I don't think the arg type hints are used by gen-class at all. ...though now that you mention it, I wonder why not. |
| 09:59 | hiredman | RSchulz: but multimethod dispatch can behave the same way java dispatch does |
| 09:59 | StartsWithK | while im at genclass |
| 09:59 | rhickey | Chouser: right, that's the default - all methods of same arity route to same fn |
| 09:59 | RSchulz | But how does that help you with gen-class? |
| 09:59 | Chouser | oh, they are hints and wouldn't be sufficient to differentiate the fn names. |
| 09:59 | StartsWithK | how do i put annotations? |
| 09:59 | rhickey | StartsWithK: no annotation supprt at present |
| 09:59 | RSchulz | It's conceptually a more general mechanism, but it just doesn't intersect with or interoperate with Java method dispatch or class generation, does it? |
| 09:59 | StartsWithK | is it in metadata? like {#^annotation}? |
| 09:59 | StartsWithK | i see |
| 10:00 | StartsWithK | could i add them somehow manually? |
| 10:00 | StartsWithK | with introspection or something |
| 10:00 | StartsWithK | just asking, not needing it for now |
| 10:00 | RSchulz | rhickey: Does genclass create all methods with Object arguments only? |
| 10:00 | rhickey | RSchulz: you can implement a Java method using a Clojure multimethod with the right name |
| 10:01 | RSchulz | Really? I didn't realize that. |
| 10:01 | Chouser | rhickey: good morning! If there are threads on the g.group with errors and/or patches (that haven't been shot down by the community), but which you've never commented on, would it be appropriate to post them on the issues page? |
| 10:01 | rhickey | gen-class generates stubs that map Java methods to Clojure fns |
| 10:01 | RSchulz | But the methods have to have specific argument signatures in their bytecode. That's what I'm asking about. Are they all Object? |
| 10:02 | rhickey | Chouser: yes please, all patches in issues from now on. I sometimes only get to read the group in chunks when I don't have time to do triage, so having issues is the key to things not getting lost |
| 10:02 | StartsWithK | there will be (ns foo.bas "doc string"), will it also be posible to add something like (ns foo.bas "docstring" {:author "blah" :license ".."}) ? |
| 10:02 | rhickey | RSchulz: no, the methods have the specific types, the translation to/from Object happens in the stub |
| 10:03 | rhickey | StartsWithK: I'd prefer (:meta {:author "blah" ...}) |
| 10:03 | StartsWithK | that would be cool too |
| 10:03 | StartsWithK | and also, there is (comment) in clojure.core |
| 10:04 | StartsWithK | maybe it should inserti itself in :comment metadata |
| 10:04 | StartsWithK | for namespace, for doc generation or something |
| 10:04 | Chouser | that sounds kinda icky |
| 10:05 | rhickey | comment != doc |
| 10:05 | Chouser | I'd be pretty surprised to find all my comments loaded up as strings in the runtime |
| 10:05 | RSchulz | Happily surprised?? |
| 10:05 | Chouser | RSchulz: heh. no. :-_) |
| 10:06 | Chouser | :-) |
| 10:06 | StartsWithK | not comments, i mean (comment) macro only, many libs put examples there |
| 10:06 | Chouser | StartsWithK: with the ns/:doc support, perhaps those should be moved there. |
| 10:07 | Chouser | Or perhaps they should be put in :test or :example metadata (perhaps compiled into a fn?) on the ns. |
| 10:08 | RSchulz | I think Clojure has arrived. The list has a thread on how to pronounce it... |
| 10:09 | StartsWithK | and maybe (:use ns :hint [fn1 fn2 ..]) so you can see from where function is imported? |
| 10:10 | StartsWithK | ignored by (ns) macro, and used only for humans |
| 10:10 | hiredman | use require then |
| 10:10 | Chouser | StartsWithK: why not (:use [that-ns :only (fn1 fn2)]), and have it be checked by the computer? |
| 10:10 | hiredman | so when you call the function, you can see where it is from |
| 10:10 | hiredman | or do what Chouser said |
| 10:11 | StartsWithK | sometimes i use all function from namespace |
| 10:11 | StartsWithK | like in my 'core' |
| 10:11 | StartsWithK | it would be only optional hint |
| 10:12 | drewr | RSchulz: In the old days we watched rhickey's screencasts and found out implicitly how to pronounce it. It's unfortunate that people are apparently passing them up now. |
| 10:13 | RSchulz | Too bad. I'm about to give them (some of them, anyway) a second viewing. |
| 10:17 | Chouser | I think it's important for proposed changes that have been rejected to be documented as such. Does everyone think its sufficient to make sure the conclusion is included in the g.group thread? |
| 10:21 | rhickey | Chouser: good question |
| 10:21 | rhickey | g.group had 2001 messages in December! |
| 10:21 | RSchulz | Yeah, it's really ramping up. I'm going to need monthly archive folders from here on. |
| 10:22 | RSchulz | Are you ready for fame and fortune? |
| 10:22 | Chouser | its usefulness as a source of documentation (which was never *particularly* strong) is dwindeling. |
| 10:22 | StartsWithK | wiki page with descriptive title and irc paste of why something was rejected? |
| 10:23 | rhickey | Chouser: I wonder, with a small amount of editorial, it could still be really useful, given the linkability. For instance a wiki/faq entry could point to a discussion |
| 10:23 | RSchulz | But its utility as the community forum is more important. The tone and quality of answers to the kinds of questions that will continually show up there will provide the first impression to newcomers. |
| 10:23 | Chouser | rhickey: true |
| 10:24 | rhickey | but yes, raw searching could be tough |
| 10:24 | rhickey | I'm still trying to get a feel for how the issue threads will connect to the group discussions |
| 10:26 | RSchulz | Many other large projects (Grails and Groovy, each, Scala) have multiple lists, one for its developers, one for casual questions, one for debating new directions, etc. |
| 10:26 | Chouser | I've got a list of group threads from the last week or two that I want to make sure aren't lost. Some are candidates for becoming issues, but I feel like I'd need to link both directsion (from issue to source discussion, and from group discussion to the new issue) |
| 10:28 | rhickey | Chouser: I've dropped issue links in the discussion threads, but haven't done the other, and probably should |
| 10:30 | Chouser | it seems like an "escalation" to take a disucssion to the issues page. I'd hate to see any further discussion split -- I wonder if it'd be worth encouraging any further discussion to happen in the issue thread. |
| 10:34 | drewr | rhickey: I started looking at two or three of the issues to submit patches and they were already completed in recent commits. Do you need some assistance moderating the issue queue? |
| 10:34 | rhickey | Chouser: it's so hard to define policy before practice... - I've added prompts to the issue entry forms to supply links to the group discussions |
| 10:34 | Chouser | rhickey: ok |
| 10:34 | rhickey | drewr: things I did? |
| 10:34 | drewr | rhickey: Yes, unless I'm mistaken. |
| 10:35 | rhickey | Chouser: I'd like to think that by the time it's an issue, discussion moves to implementation details of any patches |
| 10:36 | rhickey | drewr: I think it was just :validator for refs/agents, I marked as fixed today |
| 10:36 | drewr | rhickey: Like, :validator and :meta. It looks like you've since closed it. |
| 10:36 | drewr | Er, yeah. :-) |
| 10:36 | drewr | I guess I just happened to catch it in flux. |
| 10:37 | rhickey | my bad, I should have marked on commit |
| 10:38 | Chousuke | rhickey: has my CA arrived yet? I sent one before christmas (forgot to put my name on the envelope, though.) |
| 10:39 | rhickey | anyone made progress on android apps? |
| 10:39 | rhickey | Chousuke: checking PO box on today's todo list... |
| 10:39 | Chousuke | okay. |
| 10:40 | Chouser | I saw a screenshot of a clojure hello-world on the android emulator |
| 10:40 | rhickey | I got that running myself - was wondering if anyone went any further |
| 10:40 | rhickey | esp, any other issues |
| 10:41 | Chouser | someone said they ran it on an actual device, but that's the most I've heard. |
| 10:41 | rhickey | me too |
| 10:44 | rhickey | everyone doing ok with the clojure.main stuff? |
| 10:47 | rhickey | Chouser: did some thinking on your notify-when-done scenario. I'm not sure it's a job for watchers. You could just send a second action which updates your counter, leaving first action purely functional. |
| 10:49 | drewr | What became of the listener/reactor/interested-third-party discussion? |
| 10:49 | Chouser | drewr: they're called watchers |
| 10:49 | rhickey | still experimental, name too :) |
| 10:50 | drewr | :-0 |
| 10:50 | drewr | ) |
| 10:51 | rhickey | Chouser: the problem with notify on all actions is that it would be impossible to have terminating loops, as it is now, loops terminate when state stabilizes |
| 10:52 | rhickey | of course there could be another flag for notify-when |
| 10:52 | Chouser | now when my watcher sends actions to its neighbors, the action it sends includes a call to the functional fn, plus code to update counters |
| 10:52 | rhickey | Chouser: right, I'm advocating sending 2 actions |
| 10:53 | rhickey | first a pure fn of state, second an identity fn of state with side-effect of notification |
| 10:54 | rhickey | i.e. the agent queue already provides a serialization mechanism capable of expressing - done |
| 10:54 | Chouser | ok, I understand. |
| 10:55 | Chouser | so still use a watcher |
| 10:56 | rhickey | no |
| 10:56 | Chouser | hm, maybe I don't understand. :-) |
| 10:56 | rhickey | or maybe I don't :) |
| 10:56 | Chouser | well, let me try it. that always helps me. |
| 10:56 | rhickey | you were sending action, and using watcher which updated some counter |
| 10:57 | rhickey | but when action is no-op on state, watcher (now) doesn't run |
| 10:57 | Chouser | my watcher both updated a counter and on changed state sent actions to other agents |
| 10:57 | rhickey | so replace watcher with second action which updates counter |
| 10:58 | rhickey | ok, so I'm only talking about the counter-decrement-on-done part |
| 11:04 | knapr | java.lang.Exception: transaction rolled back: Syntax error: Encountered ")" at line 1, column 30. (parsing.clj:0) |
| 11:04 | knapr | this eeror message makes no sense |
| 11:04 | knapr | line 0 in my file? |
| 11:04 | knapr | is it in the database or in my program tha the error is? |
| 11:05 | Chouser | if I have two actions i and j queued on an agent, and i triggers a watcher, there's no way to force that watcher's action to complete before j is started, right? |
| 11:06 | rhickey | Chouser: right' |
| 11:06 | Chouser | knapr: try looking at the rest of the stack trace, it's likely to help you figure out what's going on. |
| 11:06 | rhickey | biab |
| 11:07 | Chouser | ok, I was relying on that ability in the old watch impl. in order to succinctly avoid a race condition. |
| 11:08 | knapr | how do I turn on full stacktraces? |
| 11:08 | Chouser | knapr: you can print the more recent exception's stack using (.printStackTrace *e) |
| 11:09 | Chouser | or a new stack pretty-printer in contrib that I haven't tried yet. |
| 11:11 | knapr | Caused by: ERROR 42X01: Syntax error: Encountered ")" at line 1, column 30. |
| 11:11 | knapr | at org.apache.derby.iapi.error.StandardException.newException(Unknown Source) |
| 11:11 | knapr | but it seems it is an error in the sql |
| 11:11 | knapr | but i odnt see how |
| 11:11 | knapr | i checked all the vectrs and they dont contain a parenthseis |
| 11:35 | durka | is there anywhere java looks for classes other than System/getProperty java.class.path, java.ext.dirs, java.endorsed.dirs? |
| 11:40 | duck1123 | Can anyone think of a situation where you would want to add a url to your classpath that doesn't actually exist? |
| 11:41 | duck1123 | I've been thinking of adding a version of add-classpath that verifies the url's existence and returns that url or nil |
| 11:45 | Chouser | duck1123: sounds like a good idea, if you're into the habit of using add-classpath |
| 11:46 | duck1123 | I only very infrequently use it, but whenever I do, it bothers me that it only returns nil |
| 11:52 | leafw | is there any built-in fn to check if a symbol exists? |
| 11:52 | leafw | i.e. (exists? 'clojure.core/defn) |
| 11:52 | leafw | or similar |
| 11:52 | drewr | ,(find-var 'clojure.core/defn) |
| 11:52 | clojurebot | #'clojure.core/defn |
| 11:52 | drewr | ,(find-var 'clojure.core/defn-does-not-exist) |
| 11:52 | RSchulz | leafw: Symbols exist if you use them. In other words, symbols are not to be equated with variables or functions or anything else. |
| 11:53 | RSchulz | Probably you're asking if there is a definintion for a symbol. |
| 11:53 | drewr | clojurebot: Why didn't you give me nil? |
| 11:53 | clojurebot | why not? |
| 11:53 | leafw | RSchulz: right, a def. |
| 11:54 | Chousuke | hmm... |
| 11:55 | Chousuke | ,(clojure.core/require 'hiredman.clojurebot-core) |
| 11:55 | clojurebot | I don't understand. |
| 11:55 | hiredman | ,(str nil) |
| 11:55 | Chousuke | I guess it ignores empty output. :/ |
| 11:55 | hiredman | it does |
| 12:06 | RSchulz | hiredman: Did you get the suggestion from StartsWithK about making Clojurebot "respond with NOTICE" He posted it on the 3rd: http://clojure-log.n01se.net/date/2009-01-03.html |
| 12:09 | leafw | if I have a variable #'my.space/that, how can one resolve to what it points to, without evaluating it? ns-resolve needs a symbol, and a symbol can't be constructed from #'... alone. |
| 12:09 | hiredman | *shrug* I have seen many bots use NOTICE for particular things, but most just use normal messages, e.g. lambdabot and javabot |
| 12:09 | Chouser | (.get '#foo), but there may be a better way. |
| 12:10 | leafw | Chouser: I hope so |
| 12:10 | Chouser | @'#foo |
| 12:10 | Chouser | is that better? |
| 12:10 | leafw | interesting |
| 12:10 | leafw | yes, at least that is not java -- and thus not liable to change soon |
| 12:11 | leafw | thanks |
| 12:11 | durka | now that does look like perl |
| 12:11 | durka | also, i would argue that at present clojure is more volatile than java |
| 12:11 | durka | and less afraid of breaking backwards compatibility |
| 12:11 | leafw | durka: I was referring to the java implementation of clojure. |
| 12:12 | duck1123 | I tend to think that clojure has more in common with Ruby than Perl, IMO |
| 12:13 | duck1123 | Ruby stole a lot of stuff from perl. At least as far as the funny syntax is concerned |
| 12:14 | RSchulz | hiredman: I don't know what it's all about, just that it was suggested and you weren't around at the time. |
| 12:14 | Chousuke | '#foo? |
| 12:14 | Chousuke | isn't that #'foo? |
| 12:15 | Chousuke | hm |
| 12:20 | rhickey | (deref (var foo)) |
| 12:24 | triddell | what paste bin are people currently using? paste.lisp.org doesn't seem to be working. |
| 12:26 | RSchulz | What is Clojure trying to tell me here (the code in question hasn't been changed since the last time I worked on it, but this didn't happen then): |
| 12:26 | RSchulz | user=> (use 'tau.run.tle) |
| 12:26 | RSchulz | java.lang.RuntimeException: Can't embed object in code, maybe print-dup not defined: clojure.lang.LispReader$UnquoteSplicing@1f48262 (cli_helpers.clj:64) |
| 12:27 | RSchulz | Line 64 of cli_helpers.clj is a short macro definition |
| 12:27 | RSchulz | I'm running the latest SVN of Clojure Core and Contrib |
| 12:28 | triddell | I've got an issue that I'd appreciate a quick look at. I just pasted some sample working code that generates valid html here: |
| 12:28 | triddell | http://paste.pocoo.org/show/98096/ |
| 12:29 | triddell | But if I copy out the vector above the second for like this: |
| 12:29 | triddell | http://paste.pocoo.org/show/98097/ |
| 12:30 | triddell | I don't get valid html. I'm missing something basic here about what is getting returned from these functions and the nested vector syntax of the compojure html function. |
| 12:31 | triddell | I don't want an element at the "thing" level but I can't figure out how to not have a vector at that level. |
| 12:31 | rhickey | RSchulz: you have ~@ outside of syntax-quote |
| 12:31 | triddell | I meant "comment out above" |
| 12:31 | RSchulz | That's definintely not the case. Let me put up a paste. |
| 12:31 | RSchulz | What's the preferred paste site? |
| 12:32 | RSchulz | Or a decent one, anyway? |
| 12:32 | triddell | I just used pocoo.org |
| 12:32 | triddell | which formats for clojure even |
| 12:32 | triddell | but doesn't post to the irc |
| 12:32 | rhickey | Rschulz: paste.lisp.org |
| 12:32 | RSchulz | Thanks. |
| 12:33 | triddell | RSchultz: paste.lisp.org wasn't working for me a few minutes ago |
| 12:34 | rhickey | when the lisppaste bot isn't logged in here, then just paste without a channel |
| 12:34 | triddell | ok, I was getting a blank page after the paste so I thought there may have been a bigger issue |
| 12:35 | rhickey | triddell: maybe so, I know the channel is a problem when no bot here |
| 12:35 | duck1123 | ahh... so that's what the issue was. I got that the other day and concluded the same thing |
| 12:35 | RSchulz | Is there a paste site that's more reliable than paste.lisp.org? 'Cause it tends to eat my pastes and then do nothing. |
| 12:35 | hiredman | gist is way cool |
| 12:36 | duck1123 | gist.github.com has clojure highlighting |
| 12:36 | Chousuke | is there any way to "group" gists? |
| 12:36 | RSchulz | It's kind of sluggish, but if it works well, I'll be patient. |
| 12:36 | Chousuke | so we could have some clojure group |
| 12:36 | hiredman | gist even has stuffs for emacs and vim to post buffers or selected text |
| 12:37 | triddell | If I paste there will someone look at my last paste above :-) This maybe basic issue has been killing me. |
| 12:37 | RSchulz | OK. This is the defmacro that elicits the "Can't embed object in code" exception: http://gist.github.com/43468 |
| 12:39 | RSchulz | The diagnostic refences line 64, which is the line with "(defmacro sh" (the first line in the paste). |
| 12:39 | Chouser | RSchulz: what args do you pass it to get the error? |
| 12:39 | RSchulz | I get the error when I (use ...) a file that uses the one containing this macro, not when I invoke it. |
| 12:40 | rhickey | RSchulz: please paste complete things people can try |
| 12:40 | rhickey | that reproduce your problem |
| 12:40 | RSchulz | That's not really feasible, I don't think. |
| 12:40 | RSchulz | There's too much stuff. |
| 12:40 | rhickey | So we should figure out a small test case instead of you? |
| 12:41 | leafw | RSchulz: the "can't embed object in code" I have come across many times ... every time is a different error, so far. |
| 12:41 | rhickey | Is this what you intend the macr oto expand into? |
| 12:41 | rhickey | user=> (macroexpand '(sh 42)) |
| 12:41 | rhickey | (user/shf (quote (42))) |
| 12:41 | RSchulz | What changed recently that could point me in the direction? As I said, without me changing any code, this broke in the past few days. |
| 12:42 | abrooks | RSchulz: If you use the git Clojure mirror, you can use git bisect to find the version pretty quickly. |
| 12:43 | RSchulz | I know nothing of Git other than it's yet another VC system. |
| 12:43 | triddell | It sounds like most of you are deep into another issue but here is an example of my issue at paste.lisp.org: http://paste.lisp.org/display/73126 |
| 12:43 | RSchulz | If I evaluate that defmacro directly in the REPL, there's no complaint. |
| 12:43 | hiredman | triddell: (apply vectory :root {:version 1.0} |
| 12:43 | hiredman | (for ... |
| 12:43 | abrooks | RSchulz: The git Clojure mirror is here: http://github.com/kevinoneill/clojure/tree/master |
| 12:43 | RSchulz | Has anything changed w.r.t. to the :use clause of an (ns ...) form? |
| 12:43 | hiredman | vector not vectory |
| 12:44 | RSchulz | That's how I'm pulling in the file for which the diagnostic is produced. |
| 12:44 | hiredman | will put every thing in the same level vector |
| 12:44 | abrooks | RSchulz: Or you can manually bisect the revision history in Subversion... |
| 12:44 | RSchulz | I don't know what you're talking about, actually. |
| 12:45 | hiredman | ,(apply vector :root {:version 1.0} '(:a :b)) |
| 12:45 | clojurebot | [:root {:version 1.0} :a :b] |
| 12:45 | RSchulz | Gack. That's _not_ the macro on line 64. Sheesh... |
| 12:46 | cmvkk | heh |
| 12:46 | RSchulz | You're right. I commented out the syntax quote (for reasons I no longer remember). |
| 12:46 | RSchulz | Apologies. |
| 12:46 | triddell | hiredman: Thank you! That seems to do it. |
| 12:48 | Chouser | rhickey: I don't see how I can use a pair of sends in my case. http://paste.lisp.org/display/73127 |
| 12:56 | rhickey | Chouser: when you send work action to fred, follow up with decrement action to fred |
| 12:56 | rhickey | e.g. ethel sends out 5 units of work, 5 decrements |
| 12:57 | Chouser | but I can't allow fred's decrement to happen before fred's watcher does its increment |
| 12:58 | rhickey | I don't fully understand what your code is doing, but it seems like ethel's watcher is creating new work for others, and increments remaining by the count of those others |
| 12:58 | rhickey | then decrements remaining by same amount? |
| 12:59 | rhickey | (old code I'm talking about here) |
| 13:00 | technomancy | I think I now understand the reason why the CLI launcher for clojure is so lousy; slime is so good that nobody launches it from the shell. =) |
| 13:00 | duck1123 | you can launch clojure from the shell? |
| 13:00 | rhickey | what's a shell? |
| 13:01 | rhickey | :) |
| 13:01 | duck1123 | M-x eshell |
| 13:01 | technomancy | duck1123: heh; you beat me to it. |
| 13:01 | Chouser | remaining starts at 1. fred sees he has one neighber ethel, incs remaining by 1 (to 2), decs remaining for himself (to 1), and is done. |
| 13:01 | hiredman | I launch it from the shell all the time |
| 13:01 | leafw | same here: ./fiji --main-class jline.ConsoleRunner clojure.lang.Repl |
| 13:02 | hiredman | but ^R Repl brings up the whole long command and I just hit enter |
| 13:02 | Chouser | watcher on ethel fires, checks min-sum, sees no change, decs remaining for herself (to 0), see the zero and signals done |
| 13:18 | rhickey | Chouser: so basically it would work fine if you didn't need to know when you were done? :) |
| 13:19 | Chouser | exactly! |
| 13:19 | rhickey | can't you just wait patiently? |
| 13:20 | Chouser | hm, the answer hasn't changed in a few seconds -- maybe it's close enough? |
| 13:20 | Chouser | I just added an example of the race condition: http://paste.lisp.org/display/73127#1 |
| 13:20 | rhickey | Chouser: I understand the race |
| 13:21 | Chouser | good. I barely do. |
| 13:21 | Chouser | this is definitely stretching me. |
| 13:21 | mchurch | Curious question: What version of Clojure do you use, the Sept. 2008 release, or the SVN version? |
| 13:21 | rhickey | but it seems like this is a general problem of work-generation |
| 13:21 | Chouser | rhickey: yes, it seems likely to me. |
| 13:21 | rhickey | imagine it was distributed, that remaining counter would be bad |
| 13:21 | Chousuke | mchurch: the september release is ancient. there is a newer release. (I use SVN though) |
| 13:22 | Chouser | mchurch: is that a poll, or are you asking someone in particular? SVN here. |
| 13:22 | mchurch | It's a general poll. |
| 13:22 | rhickey | pre-svn here |
| 13:22 | vogelrn | svn |
| 13:22 | leafw | is there anything like a def-, or one has to set the flag manually in the meta? |
| 13:22 | mchurch | Chouser: you use SVN? I was using 09/08 but I am planning on moving over to the SVN version. |
| 13:22 | mchurch | rhickey: for what reason? |
| 13:23 | Chouser | rhickey: but agents are not actors partially because they aren't meant for distributed, right? |
| 13:23 | rhickey | mchurch: first I write it, then it goes in svn |
| 13:23 | technomancy | mchurch: it's pretty safe to use SVN; I haven't seen any breakage |
| 13:23 | Chousuke | mchurch: at least move to the newer release |
| 13:23 | rhickey | Chouser: sure, but the counter is still an icky part of what you're having to do |
| 13:23 | mchurch | rhickey: Oh. I get it. I'm slow today. :) |
| 13:23 | rhickey | trying to think of a more general solution |
| 13:24 | Chouser | rhickey: I agree! You have a better solution? |
| 13:24 | mchurch | drewr: is 'svn head' the newest SVN? |
| 13:24 | rhickey | since everyone doing something similar (generative work) will have the same issues |
| 13:24 | mchurch | drewr: I don't know anything about SVN. I'm emerging it right now (on a gentoo system). |
| 13:24 | mchurch | drewr: Halloway's book recommends 1146, but I think I'll go with the newest. |
| 13:24 | Chouser | mchurch: oh, might I recommend git-svn? Hm, maybe it's not worth it. |
| 13:25 | Chousuke | mchurch: HEAD refers to the latest commit in a branch |
| 13:25 | mchurch | Chousuke: What's git-svn? I'm slightly familiar with Git, though definitely not an expert. |
| 13:25 | Chousuke | git-svn is a way to use git as an SVN client. |
| 13:25 | Chouser | mchurch: git comes with an svn commend that works great for fetching from an SVN server. |
| 13:25 | Chouser | command |
| 13:25 | Chousuke | It's better than svn at it :P |
| 13:26 | Chouser | (modulo initial checkout workload) |
| 13:26 | mchurch | Chouser: Oh, cool. |
| 13:26 | technomancy | yeah, git-svn is definitely the best way to use svn |
| 13:26 | rhickey | Chouser: I imagine most solutions are like fork-join and the original non-pure version - the action creates the next action(s) |
| 13:27 | mchurch | Chouser: I was just going to use Halloway's SVN commands in his Clojure book, but if git-svn is better, then I'll use that. |
| 13:27 | technomancy | mchurch: or you could grab it straight from the github clone, which gets synced with SVN automatically |
| 13:27 | technomancy | clojurebot: github? |
| 13:27 | clojurebot | It's greek to me. |
| 13:27 | technomancy | clojurebot: git? |
| 13:27 | clojurebot | git is http://www.github.com |
| 13:27 | technomancy | heh. |
| 13:27 | Chouser | rhickey: are you thinking some new mechanism? perhaps an agent pool that triggers something when its workload hits zero? |
| 13:27 | mchurch | technomancy: Is the general consensus that Git is the pwn sauce compared to other VC systems? |
| 13:27 | technomancy | clojurebot: github is git://github.com/kevinoneill/clojure.git |
| 13:27 | clojurebot | Alles klar |
| 13:28 | Chouser | mchurch: I wouldn't assume everyone has that opinion. |
| 13:28 | Nafai | I'm pretty happy with git myself |
| 13:28 | rhickey | Chouser: that will have a similar problem, but at least could timeout with an answer |
| 13:28 | technomancy | mchurch: compared to centralized systems, no question. compared to other distributed systems, git has more momentum and a slightly more powerful internal model, but it's not head and shoulders better. |
| 13:29 | ehird | ooh, vcs wars |
| 13:29 | rhickey | Chouser: you may have to be willing to have some sort of (short) timeout with unknown work |
| 13:29 | ehird | so, uh, emacs or vi? |
| 13:29 | technomancy | ehird: lisp or vimscript? =) |
| 13:29 | ehird | :-) |
| 13:29 | rhickey | Chouser: waiting for quiescence |
| 13:30 | Chouser | technomancy: elisp or vimscript. fairer fight. |
| 13:31 | Chousuke | I don't know vimscript, but elisp wins :p |
| 13:31 | technomancy | Chouser: fair enough. still... =) |
| 13:31 | hiredman | vimscript is pretty horrid |
| 13:32 | gnuvince_ | vimscript sucks ass |
| 13:32 | shoover | wow, search for clojure on github. there are pages of interesting projects |
| 13:32 | shoover | (2 pages) |
| 13:33 | leafw | how one does set doc string to defmulti? |
| 13:34 | leafw | i.e. any sugar way like defn or defmacro have? |
| 13:35 | technomancy | shoover: it's only the 24th-most-popular language though... we've got some work to do. |
| 13:35 | mchurch | technomancy: Where do you get the 24. from? |
| 13:36 | technomancy | mchurch: http://github.com/languages/Clojure |
| 13:36 | mchurch | technomancy: Being 24. within a year is awesome, IMO. |
| 13:36 | technomancy | definitely |
| 13:36 | Chouser | slightly over a year |
| 13:36 | technomancy | scheme and CL are 19th and 20th... just wait till we beat them. =) |
| 13:37 | mchurch | Ocaml is 23d, Haskell is 17., Java is 8. |
| 13:38 | technomancy | wouldn't have expected haskell to beat scheme |
| 13:38 | Nafai | technomancy: Why not? |
| 13:39 | mchurch | I wonder if the Ruby / Python bias signifies that version control systems (in general) are a bit intimidating to people without strong Sysadmit backgrounds (although I find Git pretty easy to use, much easier than previous VC systems). |
| 13:39 | technomancy | Nafai: I just only hear about haskell in the context of learning rather than actually building things. |
| 13:39 | Nafai | technomancy: I admit I don't hear much about Scheme at all |
| 13:39 | technomancy | well I've written a scheme; so maybe I'm biased |
| 13:39 | Nafai | technomancy: Perhaps because I pay attention to the Haskell community, but I would say the opposite |
| 13:40 | sh10151 | I don't think Ruby and Python programmers are more likely to be systems administrators |
| 13:40 | sh10151 | Perl programmers, yes |
| 13:40 | mchurch | (Ruby is 1st with 37% share, JavaScript is 2d with 25% share, and Python's 3d with 6% share) |
| 13:40 | Chousuke | ruby's rather big :/ |
| 13:40 | Nafai | We use Python for nearly all of our system administration tasks here |
| 13:40 | technomancy | mchurch: I think it has more to do with the fact that github is built on rails and is the official host of rails. |
| 13:40 | Chousuke | I would have expected it to be about equal with python. |
| 13:40 | mchurch | technocracy: A friend of mine is building something pretty big (a statically-typed, ML/Haskell-inspired concurrency language) in Haskell |
| 13:41 | Nafai | Chousuke: I think that's merely a consequence of the Rails people jumping on the git wagon |
| 13:41 | Chousuke | Nafai: might be. |
| 13:41 | Nafai | Chousuke: The ruby community seems to follow rails |
| 13:41 | Chousuke | heh. |
| 13:41 | sh10151 | Python has two DVCS systems -- Mercurial and Bazaar -- that would take away from someone using Git |
| 13:41 | mfredrickson | Rails developers cargo-cult?! I never! (says a former Rails dev) |
| 13:41 | Nafai | mfredrickson: :) |
| 13:41 | sh10151 | They're implemented in Python so Python programmers will be more inclined to use them |
| 13:42 | Chousuke | cargo... rails... too many opportunities to make puns. |
| 13:42 | Nafai | sh10151: Unfortunately, it's not enough for me (being a programmer that uses Python). I find git more compelling |
| 13:42 | mchurch | sh10151: What's Git implemented in? |
| 13:42 | Nafai | mchurch: Primarily C |
| 13:42 | gnuvince_ | C |
| 13:42 | mchurch | Chousuke: I prefer pwns, myself. |
| 13:42 | mfredrickson | I should joint "cp -r"hub. |
| 13:42 | technomancy | mchurch: a bit of perl |
| 13:42 | technomancy | mfredrickson: http://svnhub.com |
| 13:43 | technomancy | sh10151: that makes lots of sense |
| 13:43 | sh10151 | I like Mercurial myself |
| 13:43 | mfredrickson | technomancy: lol |
| 13:43 | sh10151 | but at work it's subversion |
| 13:43 | gnuvince_ | I like Mercurial, but Git just has too much momentum to ignore it. |
| 13:44 | sh10151 | Bazaar isn't bad either |
| 13:44 | sh10151 | I don't really care about momentum, they all work more or less the same way |
| 13:44 | sh10151 | it's like worrying about bash vs. tcsh vs |
| 13:44 | sh10151 | ksh93 or whatever |
| 13:45 | technomancy | sh10151: yeah, but if you use bash and your collaborators use tcsh, you can still work together easily. |
| 13:45 | ehird | not really |
| 13:45 | ehird | you don't share your shell with other people. |
| 13:45 | technomancy | that's what I mean |
| 13:46 | technomancy | bzr looks nice, but the only project I've tried to use it on is Emacs, which is so big that it's basically unusable. |
| 13:46 | Chousuke | git has few weaknesses, and it's very famous. |
| 13:46 | Chousuke | technomancy: "big"? repo size? |
| 13:47 | technomancy | Chousuke: I don't have a bzr checkout here, but the .git directory is 204 MB |
| 13:47 | sh10151 | it's the history that kills the Emacs bzr repo, I think |
| 13:47 | Chousuke | technomancy: mine is a bit larger. |
| 13:47 | technomancy | sh10151: definitely... but that's non-negotiable |
| 13:49 | technomancy | but for most projects I don't imagine it would be an issue |
| 13:49 | Chousuke | emacs' history goes back to time before my birth |
| 13:49 | Chousuke | and the git repo holds it all very nicely :P |
| 13:49 | mchurch | Chousuke: How old is emacs? |
| 13:49 | duck1123 | still only 195 MB |
| 13:49 | mchurch | Chousuke: VC history wise, that is. |
| 13:49 | Chousuke | mchurch: Date: Thu Apr 18 00:48:29 1985 +0000 |
| 13:49 | sh10151 | but bazaar is GNU software so Bazaar will eventually replace CVS |
| 13:49 | sh10151 | so let it be written |
| 13:49 | sh10151 | so let it be done |
| 13:50 | sh10151 | Chousuke: you're a young whippersnapper ain't ya |
| 13:50 | mchurch | Chousuke: Nice! Yeah, I was 1 then. I didn't think they had version control back in '85. |
| 13:50 | Chousuke | CVS getting replaced is only a good thing. |
| 13:50 | hiredman | clojurebot: rms? |
| 13:50 | clojurebot | Pardon? |
| 13:50 | sh10151 | mchurch: They've had SCCS and RCS for a good long while |
| 13:50 | Chousuke | mchurch: well, there was RCS. |
| 13:50 | sh10151 | also arch |
| 13:51 | mchurch | I've heard of CVS but not the others. |
| 13:51 | sh10151 | I think arch is younger now that I think of it |
| 13:51 | danlarkin | we used RCS in college :-o |
| 13:51 | Chouser | CVS is built on RCS |
| 13:51 | Chouser | actually uses it internally |
| 13:51 | Chousuke | I did use RCS a bit at school too. |
| 13:51 | Chousuke | they taught it to us. |
| 13:52 | danlarkin | Chousuke: same |
| 13:52 | sh10151 | I still use RCS for my own projects since it's generally already installed everywhere and Emacs plays nicely with it |
| 13:52 | Chousuke | later, with bigger school projects, they actually offered SVN access. |
| 13:52 | sh10151 | "my own projects" being .emacs files and the like |
| 13:52 | Chousuke | I use git for those :) |
| 13:52 | technomancy | sh10151: emacs' VC interface is uniform no matter what backend you use with it. |
| 13:53 | Chousuke | since I have git installed in most places and setting up a git repo is easy and fast |
| 13:53 | grosours | hell |
| 13:53 | grosours | o |
| 13:53 | grosours | :D |
| 13:53 | technomancy | sh10151: that said, if you're used to commiting a single file at a time, it might be more effort to rework your habits. |
| 13:53 | sh10151 | technomancy: yes but unless you use emacs 23 you have the wonderful choices of rcs, cvs, and sccs out of the box |
| 13:53 | danlarkin | grosours: greetings! |
| 13:54 | danlarkin | C-c v v |
| 13:54 | sh10151 | danlarkin: C-x v v |
| 13:54 | danlarkin | burned into my muscle memory |
| 13:54 | technomancy | sh10151: oh? I didn't realize that; I thought 22 supported at least SVN. |
| 13:54 | danlarkin | sh10151: whoops! |
| 13:54 | technomancy | been running 23 too long, I guess. =) |
| 13:54 | sh10151 | technomancy: there's some addon I think |
| 13:54 | sh10151 | technomancy: psvn.el |
| 13:54 | sh10151 | I just now installed 23 |
| 13:54 | sh10151 | haven't configured it the way I like it |
| 13:55 | technomancy | I've yet to see any UI nicer than magit. |
| 13:55 | duck1123 | I try to build emacs from git every few days or so. |
| 13:56 | duck1123 | mr update is great when you have a lot of projects you are tracking |
| 13:56 | sh10151 | duck1123: I like a little more stability |
| 13:57 | duck1123 | I only had one day when something broke on me from doing that. It's only been a couple of months though |
| 13:58 | technomancy | but there are internal changes, sure |
| 13:58 | sh10151 | I run emacs with a crapton of add-ons |
| 13:58 | sh10151 | slime, cedet, jde |
| 13:58 | sh10151 | sometimes changes to emacs breaks those |
| 13:59 | duck1123 | sh10151: have you gotten jde working with clojure? |
| 14:00 | sh10151 | duck1123: You mean for documentation or something? I haven't bothered yet |
| 14:00 | duck1123 | I installed it with the intention of trying that out, but never got around to it |
| 14:00 | sh10151 | I use JDE for Java |
| 14:00 | sh10151 | every time I try Eclipse I get burned |
| 14:00 | sh10151 | or end up using Emacs anyway for shell scripts and SQL |
| 14:01 | sh10151 | I think that adding Java stuff to slime contribs is a better way to go for Clojure |
| 14:02 | sh10151 | a lot of what JDE does is based on syntactic analysis of Java |
| 14:02 | sh10151 | and swank seems to have a much more principled design as far as using a subprocess is concerned |
| 14:03 | duck1123 | I was hoping to use it only for the debugger integration, but don't know how well that'll work |
| 14:04 | sh10151 | I think it might be superfluous |
| 14:06 | sh10151 | not to be down on JDE but it is a complex beast of a program |
| 14:08 | Nafai | It just seemed too much effort to get JDE working, and there was too much advantage to the Java IDEs |
| 14:09 | sh10151 | Nafai: I thought that too until Eclipse crashed on me |
| 14:09 | sh10151 | Nafai: for the tenth time |
| 14:09 | sh10151 | I actually only have five or six lines in my .emacs for JDE |
| 14:10 | sh10151 | the main thing is making sure the dependencies are there, and I guess Emacs 23 might include both CEDET and elib |
| 14:10 | sh10151 | of course the downside there is that they change names and APIs to include it in the emacs distribution |
| 14:10 | sh10151 | thanks Richard. :) |
| 14:29 | mchurch | It appears the dotimes syntax has changed. What's the new syntax, and why was it changed? |
| 14:30 | mchurch | Edit: never mind. I can see why it was changed. |
| 14:30 | Chouser | mchurch: http://groups.google.com/group/clojure/browse_thread/thread/55213f2eb203ca39/9261c58c381f89b2 |
| 14:50 | mchurch | How do I convert a var (as returned by resolve) to the value it contains? |
| 14:51 | Chouser | deref |
| 14:51 | Chouser | or the @ reader macro |
| 14:52 | mchurch | Chouser: Works beautifully. Thanks. |
| 14:52 | mchurch | Chouser: So are Vars similar to Refs, then? I guess this makes a lot of sense. |
| 14:52 | Chouser | Vars and Refs are two of the 4 reference types Clojure supports. |
| 14:52 | Chouser | The others are Agents and Atoms. |
| 14:54 | mchurch | Chouser: Ok, so what does (def x 5) do under the hood? Place #'user/x on an intern table somewhere, mapping to 5, right? |
| 14:55 | Chouser | mchurch: creates var with a root binding of 5, puts that in the 'user namespace under 'x |
| 14:56 | Chouser | documented here: http://clojure.org/vars |
| 14:57 | Chouser | 'def' also attaches a bunch of metadata to the var |
| 15:05 | kotarak | Is there some interest in being able to use custom hierarchies in a multimethod? Currently the multimethods can only use the global hierarchy. I submitted a patch, which turns the default dispatch value in a :keyword arg. (defmulti name dispatch-fn :default dispatch-value). Similar one could now easily add a custom hierarchy: (defmulti name dispatch-fn :default dispatch-value :hierarchy my-hierarchy). |
| 15:07 | Chouser | kotarak: you saw http://code.google.com/p/clojure/issues/detail?id=8 ? |
| 15:08 | Chouser | kotarak: that item is on the todo, bottom of "hot": http://richhickey.backpackit.com/pub/1597914 |
| 15:08 | kotarak | Chouser: That's where I attached the patch for the default dispatch value. |
| 15:09 | technomancy | oh wow; only 2 things left on the list for a 1.0 release. |
| 15:09 | Chouser | ah, couldn't tell if that was you. |
| 15:09 | technomancy | they don't seem like tons of work either |
| 15:10 | kotarak | Ah. Ok. the per-defmulti hierarchies. |
| 15:10 | kotarak | That's something I'd really like to have. |
| 15:11 | technomancy | I thought Eclipse was the one that needed warming up. =) |
| 15:11 | kotarak | hehe |
| 15:12 | Chouser | kotarak: so though I've never felt the need for a non-default heirarchy, you've got a decent chance of getting it in. |
| 15:13 | technomancy | what's "ClojureScript" on the TODO? Clojure that compiles to JS? |
| 15:13 | Chouser | technomancy: yes |
| 15:14 | technomancy | that would be great. |
| 15:14 | hiredman | clojurebot: clojurescript? |
| 15:14 | clojurebot | clojurescript is Chouser's baby |
| 15:14 | kotarak | Chouser: I found it sometimes practical. And it's also some hygienic thing. I have somehow a bad feeling about messing around in the global hierarchy, although the keywords and symbols are qualified. |
| 15:15 | duck1123 | Chouser: have you written any tutorials yet on how to use clojurescript? |
| 15:15 | technomancy | Chouser: I'm assuming you have taken a look at parenscript? |
| 15:15 | kotarak | Chouser: And I had some contorted use case where I would like one thing to derive from another in one defmulti but not in the other. |
| 15:15 | Chouser | duck1123: no, I'm stalling a bit on any kind of grand announcement or docs. It still requires a patch to Clojure to work properly. |
| 15:15 | Chouser | kotarak: ah, ok. |
| 15:16 | Chouser | technomancy: I have, though not recently. |
| 15:17 | technomancy | Chouser: it sounds like the goals are similar... I guess the main difference would just be immutability? |
| 15:18 | Chouser | yes, plus clojure-style host-language integration, and possibly the ability to port code between browser and server platforms more easily. |
| 15:18 | Chouser | not sure how often that last one would come up in reality, though. |
| 15:18 | technomancy | are you porting the STM then? that sounds like tons of work. |
| 15:18 | Chouser | no, JS is single-threaded, so no need or ability, really. |
| 15:18 | technomancy | oh, right. |
| 15:19 | Chouser | Vars work enough for normal def and binding usage |
| 15:19 | Chouser | but no agents, atoms, or refs currently. |
| 15:19 | technomancy | sure. that's pretty slick. |
| 15:19 | Chousuke | do you have defmacro working yet? |
| 15:20 | Chouser | it might need a stub implementation of ref and dosync for compatibility, not sure yet. |
| 15:20 | technomancy | what kinds of changes did you need to make to clojure? |
| 15:20 | Chouser | Chousuke: yeah, all of clojure.core just loads right up (not counting bits related to unsupported features) |
| 15:21 | Chouser | technomancy: mostly moving assumptions about running on Java out of core.clj and into RT.js |
| 15:21 | Chouser | sorry, into RT.java |
| 15:21 | technomancy | RT being runtime? |
| 15:22 | Chouser | so that I can put similar assumptions into rt.js |
| 15:22 | technomancy | you could build a really great "learn clojure" web site with a clojure that could run in-browser. |
| 15:22 | Chouser | technomancy: I assume so. src/jvm/clojure/lang/RT.java |
| 15:22 | kotarak | What would be better: capturing a hierarchy directly or capturing the Var of the hierarchy? The former wouldn't need a Var but would be closed. The latter would require a Var but would allow to add further derivations.... |
| 15:23 | Chouser | kotarak: latter, I would think. The default heirarchy is a Var, right? |
| 15:23 | kotarak | Yes. |
| 15:23 | kotarak | That would be may preference as well. |
| 15:23 | kotarak | s/may/my |
| 15:24 | Chouser | technomancy: clojurescript depends on the .java implementation of the clojure reader and half the compiler. |
| 15:24 | Chouser | technomancy: so clojure code on the server can be translated to JS, but in order to get a repl in the browser it has to send strings to a JVM somewhere and get JS back. |
| 15:25 | kotarak | So maybe hierarchies could be required to be a Var? That would also simplify the use of derive. Currently non-standard hierarchies are returned by derive and one has to take care where to put them. |
| 15:25 | technomancy | Chouser: ah; I see. |
| 15:27 | technomancy | I don't feel like I have a very good grasp of the best way to organize code into namespaces. The way they work is pretty clear, but the why and how is eluding my grasp... is there any good reading material on this? |
| 15:28 | Chouser | I suppose once we can do clojure applets it could all be done client-side. Use JS to eval stuff (because it lets us load new JS code without special permission) and use Java for the compiling to JS. |
| 15:28 | mchurch | I believe I may have found a Clojure bug. Is this familiar to anyone? (= (symbol "/") "/") => false . |
| 15:29 | mchurch | Sorry. I mean (= (symbol "/") '/) => false |
| 15:29 | mchurch | Even though (symbol "/") seems to be '/ . |
| 15:29 | kotarak | I think / is special, no? |
| 15:29 | hiredman | ,(= (symbol "/") /) |
| 15:29 | clojurebot | false |
| 15:29 | mchurch | It is. Unfortuantely, it's also a function (division). |
| 15:30 | mchurch | ,(= (symbol "+") '+) |
| 15:30 | clojurebot | true |
| 15:30 | mchurch | ,(= (symbol "/") |
| 15:30 | clojurebot | Eval-in-box threw an exception:EOF while reading |
| 15:30 | Chouser | mchurch: http://code.google.com/p/clojure/issues/detail?id=13 |
| 15:31 | hiredman | ugh, that error message is way to friendly |
| 15:31 | technomancy | what's wrong with this? (.encode (java.net.URLEncoder.) "hey there") |
| 15:32 | technomancy | it says no matching ctor found |
| 15:32 | technomancy | clojurebot: ctor? |
| 15:32 | clojurebot | jar directory is -Djava.ext.dirs=$LIBS |
| 15:32 | mchurch | So I take it that '/ is not a valid symbol? |
| 15:32 | mchurch | ,/ |
| 15:32 | mchurch | ,(apply / '(1 2)) |
| 15:32 | clojurebot | 1/2 |
| 15:32 | Chouser | mchurch: sure it is, it's used for division |
| 15:33 | Chouser | ,(= '/ (symbol nil "/")) |
| 15:33 | clojurebot | true |
| 15:33 | hiredman | technomancy: uh, static method? |
| 15:33 | hiredman | maybe |
| 15:33 | mchurch | Chouser: Ah. I guess it sees the '/' and tries to turn it into a package-qualified symbol? |
| 15:33 | technomancy | hiredman: oh, so it's a class-level thing rather than instance-level? |
| 15:34 | Chouser | technomancy: (java.net.URLEncoder/encode "hey there") |
| 15:34 | hiredman | ,(java.net.URLEncoder/encode "Hey there") |
| 15:34 | clojurebot | Hey+there |
| 15:34 | technomancy | aha |
| 15:34 | Chouser | mchurch: I think that's right |
| 15:34 | technomancy | why doesn't (.encode java.net.URLEncoder "hey there") work? |
| 15:34 | hiredman | that is no longer accepted syntax |
| 15:35 | technomancy | oh... because classes aren't really objects in Java, are they... |
| 15:35 | Chouser | .foo is only for instance members, ClassName/foo is only for static members |
| 15:36 | ehird | why the separation? |
| 15:36 | technomancy | I keep expecting Java to be object-oriented... silly me. =) |
| 15:36 | Chouser | clojurebot: FAQ #1 |
| 15:36 | clojurebot | FAQ #1 is http://groups.google.com/group/clojure/msg/8fc6f0e9a5800e4b |
| 15:36 | technomancy | ehird: because the designers of Java never heard of Smalltalk? |
| 15:36 | ehird | i mean, in clojure syntax |
| 15:37 | Chouser | ehird, technomancy: see FAQ #1 :-) |
| 15:37 | ehird | technomancy: perhaps they just have a weird sense of humour |
| 15:38 | hiredman | svn rev 1158; |
| 15:38 | technomancy | ehird: like deciding that "static" for some reason means "class-level"? |
| 15:38 | technomancy | "you keep using that word... I do not think it means what you think it means." |
| 15:38 | ehird | technomancy: :D |
| 15:39 | drewr | technomancy: ctor is constructor. |
| 15:39 | ehird | technomancy: maybe it's an analogy to electricity |
| 15:39 | technomancy | drewr: ah; thanks. |
| 15:39 | ehird | like... like... classes are parts of programs |
| 15:39 | ehird | which run on computers, which use electricity |
| 15:41 | hiredman | my jvm is a series of interconnected water wheels |
| 15:41 | danlarkin | ditto |
| 15:41 | danlarkin | omish 4 lyfe |
| 15:41 | hiredman | amish |
| 15:41 | danlarkin | sorry, perhaps that was mean |
| 15:42 | danlarkin | *doh* |
| 15:42 | technomancy | ok... I read that faq three times and it's not sinking in. I'll just let it slide for now and come back to it when I've done more with clojure. |
| 15:42 | hiredman | damn bucket overflow errors |
| 15:44 | Chousuke | hiredman: is clojurebot at github in sync with your local changes? |
| 15:45 | hiredman | Chousuke: it was until I stuck my finger in it a minute ago |
| 15:45 | hiredman | svn rev 1158 |
| 15:45 | clojurebot | svn rev 1158; force instance member interpretation of (.method ClassName), e.g. (.getMethods String) works |
| 15:45 | hiredman | ah |
| 15:46 | hiredman | weird |
| 15:46 | technomancy | hiredman: is there any clojurebot shorthand for "what is %" (shorter than "clojurebot: %") |
| 15:46 | Chousuke | the code could use some cleanup I think |
| 15:46 | hiredman | very much so |
| 15:46 | Chousuke | there are some arguments name "strang" and _string and whatnot |
| 15:47 | technomancy | doc add-classpath |
| 15:47 | hiredman | technomancy: no |
| 15:47 | Chousuke | string is perfectly valid, isn't it? it doesn't collide with anything. |
| 15:47 | technomancy | hiredman: might be nice to come up with another prefix for lookups like you're using , for eval |
| 15:47 | Chouser | I sometimes use the word 'text' to get something succinct that is not 'str' |
| 15:48 | hiredman | Chousuke: I think I typed string, but vim highlighted it different? |
| 15:49 | Chousuke | that would be a bug in the vim clojure mode, right? |
| 15:49 | Chousuke | String is reserved, string is not. |
| 15:49 | hiredman | I am not sure if that was it or not |
| 15:49 | hiredman | but it seems like a likely reason why I would go with strang |
| 15:54 | kotarak | What was highlighted incorrectly? |
| 15:55 | hiredman | I dunno |
| 15:55 | hiredman | I am not saying it was |
| 15:55 | Chousuke | it's just fine in my vim though. |
| 15:55 | hiredman | fine it wasn't that |
| 15:55 | Chousuke | However I have an ancient version of vim-clojure |
| 15:55 | Chousuke | so it might have changed. |
| 15:56 | hiredman | clojurebot: apologize for me is <reply>mea culpa! |
| 15:56 | clojurebot | Ok. |
| 15:56 | kotarak | It should not have changed, but I might introduce random typos... So it might happen... |
| 15:56 | hiredman | clojurebot: apologize for me! |
| 15:56 | clojurebot | mea culpa! |
| 15:57 | mchurch | Does the clojurebot have Eliza-esque AI enabled? |
| 15:57 | mchurch | clojurebot: What is your name? |
| 15:57 | clojurebot | Pardon? |
| 15:58 | mchurch | clojurebot: What is the difference between a symbol and a keyword? |
| 15:58 | clojurebot | excusez-moi |
| 15:58 | mchurch | (I actually know it, of course. Just wanted to see if the bot did.) |
| 16:00 | hiredman | clojurebot: what is the difference between java and clojure? |
| 16:00 | clojurebot | ? |
| 16:01 | mchurch | clojurebot: Does P = NP? |
| 16:01 | clojurebot | Pardon? |
| 16:01 | mchurch | ,(= p np) |
| 16:01 | clojurebot | java.lang.Exception: Unable to resolve symbol: p in this context (NO_SOURCE_FILE:0) |
| 16:01 | mchurch | ,(= 'p 'np) |
| 16:01 | clojurebot | false |
| 16:01 | mchurch | We have a verdict! |
| 16:02 | technomancy | good to know |
| 16:03 | mchurch | ,(let [p (rand-int 2) np (rand-int 2)] (= p np)) |
| 16:03 | clojurebot | true |
| 16:03 | mchurch | A more rigorous approach... |
| 16:03 | kotarak | So much fuzz about P = NP, and then all you have to do is to ask Deep Thought - eh - clojurebot to get the answer. (Which is false btw, and not 42!) |
| 16:03 | mchurch | ,(* 6 9) |
| 16:03 | clojurebot | 54 |
| 16:04 | mchurch | clojurebot: You're doing it wrong! |
| 16:04 | clojurebot | Gabh mo leithsc�al? |
| 16:29 | duck1123 | nobody writes jokes in base 13 |
| 16:30 | kotarak | or binary for that matter. :) |
| 16:32 | gnuvince_ | duck1123: it's be hard; "There are 10 types of people in the world: those who understand base 13, those who don't, those who don't are either way, people who don't believe in numbers, the Poles, ..." |
| 16:32 | gnuvince_ | it'd* |
| 16:32 | gnuvince_ | don't care* |
| 16:49 | triddell | What does this data structure mean? (([:title Foo] [:title bar]) ([:title Fiz] [:title buz])) .. a list containing two lists which each contain two vectors? |
| 16:50 | Chousuke | yeah. |
| 16:51 | Chouser | though it's likey it's a seq of 2 seqs, each containing two MapEntry's |
| 16:51 | triddell | I need to add another vector to this but to do so I also need to put it in list (like the other vectors.) I'm not sure how to do this... |
| 16:52 | Chousuke | that depends where you need to add it to. |
| 16:53 | triddell | these nested vectors get turned into html by compojure, but if I put in a vector which is not in a list the nested vectors get returned in their lists |
| 16:54 | triddell | I think at the top level like this: (([:title Foo] [:title bar]) ([:title Fiz] [:title buz]) ([:new vector)) |
| 16:54 | Chousuke | I don't know how compojure works and I have no clue what you're trinyg to accomplish :/ |
| 16:54 | Chousuke | ... trying* |
| 16:55 | triddell | I tried conj but I can't seem to get it in a list as well |
| 16:55 | Chouser | lists and seqs grow on the left side, not the right. you're sure you need it added on the right side? |
| 16:56 | Chousuke | it looks like you should be looking at some other way to generate that structure than simply conj'ing :/ |
| 16:56 | Chousuke | looking for* |
| 16:58 | triddell | yes, I think that is part of my issue... it works if I put it on the left... but these vectors create the xml... [:title "Foo"] creates <title>Foo</title>... and I'm generated j2ee xml deployment descriptors (which are picky :-) |
| 17:10 | kotarak | What happens if I don't hold on to an SQL Statement, while processing the result set? Might the Statement be gc'd closing the result set under my fingers? |
| 17:10 | hiredman | uh |
| 17:15 | Chouser | kotarak: generally if you've got a seq going over an underlying collection, the seq will keep a reference to the collection, thus preventing GC |
| 17:20 | kotarak | Chouser: I'm thinking about the following flow: (-> (.prepareStatement conn sql) set-parameters .executeQuery resultset-seq) The seq holds on to the result set, but not the Statement. When the Statement is .close'd it also closes the ResulSet. |
| 17:20 | kotarak | Hmm... But it's seems that the latter also holds a reference to the Statement. |
| 17:28 | triddell | Chousuke and Chouser: I was able to use (first) on the initial collection along with an appropriate conj. thanks for the help |
| 17:32 | danlarkin | I understand why I can't use a sorted-map with keys of different types, but can I count on hash-map behaving like sorted-map in that case? |
| 17:33 | danlarkin | I am assuming I can't |
| 17:35 | triddell | Do we have a pretty print library for formatting xml? I remember it coming up but I just search the irc log and the board but didn't find anything conclusive. |
| 17:35 | danlarkin | and if I do want the properties of a sorted-map but have keys of different types what are my options? (loop) with (apply hash-map (take 2 lst))? |
| 17:40 | RSchulz | danlarkin: You can supply the comparator when you create the sorted map. Then it's up to you to define a total ordering on the key values. |
| 17:41 | RSchulz | (doc sorted-map-by) |
| 17:41 | clojurebot | keyval => key val Returns a new sorted map with supplied mappings, using the supplied comparator.; arglists ([comparator & keyvals]) |
| 17:42 | danlarkin | RSchulz: d'oh! |
| 17:42 | danlarkin | RSchulz: thanks :) |
| 17:43 | RSchulz | No problem. |
| 17:43 | RSchulz | I'm trying to find the pretty-printer I use. That is, find where I got it from (I didn't write it). |
| 17:48 | RSchulz | Looks like it came from here: http://groups.google.com/group/clojure/browse_thread/thread/79d07b898b2a0fde/ |
| 17:48 | RSchulz | The second post in that thread has an attachment, pprint.clj |
| 17:49 | RSchulz | Yeah. That's the one I'm using. |
| 17:52 | rapido | what's clojure's conflict resolution with transactions?: how does it decide which transaction to roll-back when there is a conflict? |
| 17:53 | rhickey | rapido: older transaction wins |
| 17:53 | rhickey | that's just a simple first-cut heuristic |
| 17:54 | rapido | older <- using a logical clock? |
| 17:54 | triddell | RSchultz: thanks, that one looks like it's for clojure code though... I'm looking for one for xml... Looks like I might be able to do it using the jdk (http://faq.javaranch.com/java/HowToPrettyPrintXmlWithJava) but I was hoping simple library function was available from contrib or something |
| 17:55 | rhickey | rapido: yes, logical timestamps drive the transaction system |
| 17:55 | rapido | is it possible to allow user code to decide which transactions wins? allowing more sophisticated consensus algorithms? |
| 17:55 | RSchulz | triddell: If you misspell my nick, I don't get chimed when it appears... Does your IRC client have tab-completion of nicks? |
| 17:55 | rhickey | rapido: not right now. And probably not until I see a demonstrated need |
| 17:55 | RSchulz | Ah. Sorry. First of all, sorty for confusing your request with dan larkin's |
| 17:56 | RSchulz | Secondly, sorry for not reading carefully enough to see the actual question! |
| 17:59 | rapido | rhickey: *the* use case for a sophisticated consensus algorithms is managing source code |
| 17:59 | triddell | RSchulz: ah, it does... but I didn't know it... didn't do much irc before clojure gave me a reason... I'm using Pidgin and it probably does all kinds of cool things I'm oblivious of. |
| 17:59 | rhickey | rapido: I don't see how that relates to in-memory STM |
| 18:01 | rapido | rhickey: yeah, we don't need multi-core to edit our source code :) |
| 18:02 | rapido | rhickey: i've got a serious use case: what about smooth transaction 'degration'? |
| 18:02 | rapido | not all or nothing |
| 18:03 | rapido | but 'try to get all the resources' - but smoothly degrade when there are less |
| 18:04 | rapido | change 10000's of items in one transaction |
| 18:04 | rapido | if the transaction manager says: 'i can do that for 9000 items' - go for that. |
| 18:05 | rhickey | rapido: I don't see that as viable |
| 18:05 | rhickey | if it truly doesn't matter to the app, they can put a knob on the number of items |
| 18:05 | rhickey | an admin setting |
| 18:06 | rhickey | at the application level |
| 18:06 | rapido | rhickey: but what about runtime interactions - you can't know everything statically |
| 18:07 | rhickey | it will be just like any other tunable thing - you try it with your workload |
| 18:07 | rhickey | but dropping some items from a transaction destroys the meaning of transaction |
| 18:08 | technomancy | clojurebot: classpath |
| 18:08 | clojurebot | classpath is (get (System/getProperties) "java.class.path") |
| 18:08 | rhickey | there's no way a TM can understand what is important and what not |
| 18:08 | rapido | rhickey: there is a chance then that your long running transaction will rollback indefinitely (starvation) |
| 18:08 | technomancy | ,(doc add-classpath) |
| 18:09 | rapido | i've seen that happen in production environments |
| 18:09 | clojurebot | ------------------------- clojure.core/add-classpath ([url]) Adds the url (String or URL object) to the classpath per URLClassLoader.addURL |
| 18:09 | rhickey | (System/getProperty "java.class.path") is simpler |
| 18:09 | technomancy | clojurebot: classpath is (System/getProperty "java.class.path") |
| 18:09 | clojurebot | Alles klar |
| 18:09 | Chousuke | technomancy: use just (doc foo), not ,(doc foo) |
| 18:09 | technomancy | why would add-classpath be a no-op in slime when it works from clojure.lang.Script? |
| 18:09 | Chousuke | better formatting that way |
| 18:10 | technomancy | Chousuke: ah; nice |
| 18:11 | rapido | rhickey: what if the STM throws an exception with the exact conflicts - giving you a chance to retry? |
| 18:12 | rhickey | rapido: these are just theoretical situations, I don't see a real need for this |
| 18:13 | rapido | rhickey: i believe highly concurrent systems will surface the need - but we have to wait for +10000 cores probably :) |
| 18:13 | technomancy | shouldn't add-classpath throw an exception or something if it's unable to add something to the classpath? |
| 18:15 | rapido | i have had too many encounters with 'strange' sybase runtime performance |
| 18:15 | rapido | i want more control |
| 18:15 | rapido | or at least |
| 18:16 | rhickey | rapido: why don't you wait until you have a real problem to solve? |
| 18:16 | rapido | deterministic transaction behaviour |
| 18:17 | rhickey | deterministic transaction behavior sounds impossible |
| 18:18 | rapido | rhickey: sure it sound impossible - but the current databases api's should give me more control than they are giving me now |
| 18:19 | rapido | i guess i'm more fanatic than you are :) |
| 18:19 | hiredman | technomancy: I am pretty sure stuff you add with add-classpath does not get added to the class path system property |
| 18:20 | technomancy | hiredman: does that mean there's more than one classpath? |
| 18:20 | hiredman | so if you are using that to judge if the add fails or not, that is not conclusive |
| 18:20 | rhickey | rapido: people can always manage memory/records/locks themselves, and there will always be a tradeoff choosing a general-purpose GC/DB/STM |
| 18:20 | technomancy | hiredman: I'm also using java.lang.NoClassDefFoundError to determine if it failed. =) |
| 18:20 | technomancy | that is, I see that error when I require something that I know I've added to the classpath |
| 18:21 | hiredman | ok, carry on then |
| 18:21 | technomancy | hiredman: but that's good to know. I'm finding a lot of stuff about the classpath confusing; can your recommend somewhere I can read up about it? |
| 18:21 | Chouser | technomancy: the javadoc for classloader is a good start |
| 18:22 | technomancy | so anyway, the System/getProperty method of determining the classpath is incorrect? |
| 18:22 | rapido | rhickey: i've got a different idea of how to do transactions more deterministic |
| 18:22 | technomancy | or correct in a way that's useless? |
| 18:22 | rhickey | rapido: go for it! |
| 18:22 | technomancy | how do you find the real classpath? |
| 18:22 | hiredman | I know nothing about classpath |
| 18:22 | rapido | rhickey: i've already done it :) |
| 18:22 | rapido | not in clojure, yet.. :( |
| 18:23 | rapido | of course - the concept of 'deterministic transactions' is language agnostic |
| 18:25 | rapido | however, i've created my own dsl that targeted to allow it. |
| 18:25 | rapido | that <- that is |
| 18:26 | Nafai | rapido: New language? :) |
| 18:28 | rapido | Nafai: you wouldn't say from looking at enchilada at first sight, but it is especially *crafted* to allow for distributed deterministic mvcc |
| 18:29 | Nafai | rapido: *nods* Makes sense |
| 18:29 | Nafai | rapido: I meant new language for implementation :) |
| 18:29 | technomancy | so do you have to use swank-clojure-extra-classpaths rather than add-classpath when you're using slime? |
| 18:30 | rapido | Nafia: i have to confess, i would have probably have chosen clojure as enchilada's backend, if i would knew about it 1.5 years ago |
| 18:30 | Nafai | clojure is pretty nice, the big I've been exposed to it |
| 18:30 | rapido | still, the scala implementation is pretty satisfactory |
| 18:30 | Nafai | scala seems too complicated :) |
| 18:31 | rapido | Nafai: it is- but i got spoiled by haskell's typing ;) |
| 18:32 | Chouser | I think it's interesting to condier that transactions aren't built very deeply into clojure. provide your own ref, agent, and dosync, and you have have native-quality api for you own semantics. |
| 18:32 | rapido | i do believe typing should be a macro |
| 18:33 | rapido | of course, code should be a first-class object |
| 18:33 | Nafai | Yes |
| 18:35 | rapido | Chouser: immutability helps *a lot* |
| 18:37 | rapido | Chouser: i do think that it is sheer genius that rhickey has married STM with immutability - STM is orthogonal to immutability |
| 18:39 | rapido | got to go - it's late here in the netherlands |
| 18:39 | Nafai | rapido: Good to see you again |
| 18:40 | Chousuke | technomancy: add-classpath works |
| 18:41 | technomancy | Chousuke: I haven't been able to isolate when it works and when it breaks. |
| 18:41 | Chousuke | it has always worked for me though :/ |
| 18:42 | technomancy | how do you check it if you can't trust System/getProperty? |
| 18:42 | technomancy | just require something and see if it blows up? |
| 18:43 | Chousuke | probably. |
| 18:43 | hiredman | the answer is: stop using add-classpath |
| 18:43 | technomancy | hiredman: and? |
| 18:43 | hiredman | clojurebot: ext? |
| 18:43 | clojurebot | context is the essence of humor |
| 18:43 | Chousuke | hiredman: it's fine in the repl. |
| 18:43 | hiredman | clojurebot: ext dir? |
| 18:43 | clojurebot | Huh? |
| 18:44 | hiredman | clojurebot: jar directory? |
| 18:44 | clojurebot | jar directory is -Djava.ext.dirs=$LIBS |
| 18:45 | technomancy | hiredman: so adding to the classpath at runtime is verboten? |
| 18:45 | Chousuke | nah. just not good for anything but experimentation, really. |
| 18:45 | technomancy | I want to be able to specify my classpath in one place. |
| 18:45 | technomancy | if I can't do it at runtime, then I have to maintain two separate lists, one for launching my server from the command-line, and one for slime. |
| 18:47 | hiredman | technomancy: I believe slime auto adds jars from ~/.clojure to the class path |
| 18:47 | Chousuke | I wonder if there is some way to globally set properties for JVMs |
| 18:47 | hiredman | so just add ~/.clojure to java.ext.dirs |
| 18:47 | technomancy | hiredman: yeah, but I have to keep the jars bundled with my source repo, or that's one more thing that I have to manually synchronize |
| 18:48 | hiredman | ln -s sourcerepo/some.jar ~/.clojure/ |
| 18:48 | technomancy | I guess I could just make slime a prerequisite to running my code, but that's kind of sad. |
| 18:48 | hiredman | oh |
| 18:48 | hiredman | I see |
| 18:51 | hiredman | you are a programmer, there are N+1 ways to solve this, pick one |
| 18:51 | technomancy | hiredman: it seems like launching things from the shell is just not worth the trouble. |
| 18:51 | technomancy | I really don't understand why add-classpath is so bad/unreliable though. |
| 18:52 | technomancy | is it just a limitation of the JVM? |
| 18:52 | technomancy | I guess I could provide a shell script that just launches Emacs. =) |
| 18:52 | technomancy | bundle a copy of slime with the checkout... |
| 19:29 | technomancy | wow, nice graph of the mailing list traffic: http://hughw.blogspot.com/2009/01/clojure-uptick.html |
| 19:31 | vogelrn | I think that standard keeps moving forward as it gets more popular :P |
| 19:32 | technomancy | probably true. |
| 19:32 | technomancy | "before the book comes out" is probably good enough for me. |
| 19:41 | sulo | hi, is there a tutorial vor clojure around? on the webpage i couldn't find one |
| 19:41 | sulo | s/vor/for/ |
| 19:41 | achim_p | hi all! |
| 19:42 | achim_p | is there an easy way to automatically namespace-qualify a data structure that's read? |
| 19:42 | achim_p | i'd like to do some source code processing and read clojure code like "(ns foo) bar ::baz myspace/bar (in-ns 'foo2) bar ..." and i'd like to have "(ns foo) foo/bar :foo/baz myspace/bar (in-ns 'foo2) foo2/bar" in the end |
| 19:44 | danlarkin | sulo: rich has produced some great videos |
| 19:44 | achim_p | sulo: there are some people posting tutorials to their blogs |
| 19:44 | achim_p | http://blog.thinkrelevance.com/2008/9/16/pcl-clojure |
| 19:44 | achim_p | http://blog.thinkrelevance.com/2008/12/12/on-lisp-clojure |
| 19:44 | danlarkin | sulo: blip.tv |
| 19:44 | danlarkin | sulo: errr clojure.bliip.tv I mean |
| 19:44 | aking | sulo: There's the book (in beta): http://www.pragprog.com/titles/shcloj/programming-clojure and wikibooks: http://en.wikibooks.org/wiki/Clojure_Programming |
| 19:45 | danlarkin | well apparently I can't type tonight, but you get the idea |
| 19:48 | duck1123 | does anyone know if clojureql is usable yet? I'd ask Lau if he were around |
| 19:48 | technomancy | is that the one that gives lazy seqs from SQL? |
| 19:49 | duck1123 | I'm getting sick of hacking together queries with format |
| 19:49 | duck1123 | it's the one that constructs queries in clojure, don't know what else it does |
| 19:56 | duck1123 | I think I'm going to hold off for a bit longer |
| 20:42 | danlarkin | ok so I'm a bit confused, this code: http://dpaste.com/105800/ fails, but if I change resolved-pats on line 14 to initialize to a vector then it works fine |
| 20:44 | hiredman | urm |
| 20:44 | hiredman | try '(#"^list/$" "list") |
| 20:45 | hiredman | or (list #"^list/$" "list") |
| 20:45 | hiredman | hmmm |
| 20:45 | hiredman | no its a macro |
| 20:46 | hiredman | what does "fails" mean? |
| 20:46 | Chouser | nobody ever answers all the questions on the macro-help form. |
| 20:48 | danlarkin | java.lang.IllegalArgumentException: Wrong number of args passed to: LazilyPersistentVector |
| 20:49 | hiredman | ,([0] 1 1) |
| 20:49 | clojurebot | java.lang.IllegalArgumentException: Wrong number of args passed to: LazilyPersistentVector (NO_SOURCE_FILE:0) |
| 20:50 | hiredman | ,([0] 1) |
| 20:50 | clojurebot | java.lang.ArrayIndexOutOfBoundsException: 1 (NO_SOURCE_FILE:0) |
| 20:51 | danlarkin | Hmm |
| 20:52 | danlarkin | so somewhere it's getting evaluated |
| 20:52 | hiredman | must be the ordered map function |
| 20:53 | danlarkin | changing it to hash-map gives the same error |
| 20:53 | hiredman | I would sprinkle around some debuginging prinlns |
| 21:00 | danlarkin | well if I the patterns macro to a function and then call it with vectors instead of lists then it all works out |
| 21:01 | danlarkin | I suppose I should just do that, anyway, since it's idiomatic to use literal vectors for this type of thing in clojure? |
| 21:01 | hiredman | *shrug* |
| 21:03 | danlarkin | thanks for helping though |
| 21:17 | wwmorgan | I want to call a function that blocks, waits for a message from another thread, and then returns that message in the calling thread. What's the best way to do that? |
| 21:40 | Chouser | I'd look at java.util.concurrent -- perhaps a semaphore |
| 21:47 | danlarkin | got another puzzle! http://paste.lisp.org/display/73155 |
| 21:48 | duck1123 | can it be assumed that any code that works with map should work with filter? (aside from having vastly different results) |
| 21:52 | cmvkk | there's not a quick and easy way to spin off some looping function into its own thread, is there? |
| 21:52 | cmvkk | besides, for example, send-offing the function to an agent? |
| 21:54 | hiredman | there are |
| 21:55 | lambda | cmvkk: functions implement runnable so you can create your own thread, set timers with functions |
| 21:55 | hiredman | etc |
| 21:56 | cmvkk | i was hoping for something that didn't involve messing with java interop but oh well :) |
| 21:56 | hiredman | java interop is very simple and natural with clojure |
| 21:57 | cmvkk | oh i know, and i could do this |
| 21:57 | duck1123 | java api's, however, are not |
| 21:57 | cmvkk | actually i don't know much java so that's a problem |
| 21:57 | cmvkk | "wait, i need to make a what object? is this an interface i have to implement?" |
| 21:57 | danlarkin | So is this a bug, or am I doing something wrong: (:name (sorted-map-by (comparator <) :name "Dan")) throws java.lang.ClassCastException: clojure.lang.Keyword |
| 21:58 | hiredman | danlarkin: < expects numbers |
| 21:59 | hiredman | clojure.lang.Keyword cannot be cast to java.lang.Number |
| 21:59 | hiredman | ^- |
| 21:59 | vogelrn | probably use like |
| 21:59 | danlarkin | *gasp* |
| 21:59 | danlarkin | ok how about this: (:name (sorted-map-by (comparator =) :name 5)) returns nil |
| 21:59 | vogelrn | whatever java string compare is on the name function that acts on keywords |
| 22:02 | lambda | has anyone here used terracotta with clojure? |
| 22:03 | vogelrn | actually danlarkin: shouldn't you just be able to use regular sorted-map for that? |
| 22:03 | danlarkin | vogelrn: yes, it was just a simplified example though |
| 22:04 | danlarkin | ok, well ((sorted-map-by (comparator <) 4 5) 4) returns 5 so it's probably user error |
| 22:05 | hiredman | woa |
| 22:05 | hiredman | here is a trip |
| 22:06 | hiredman | ,(::name (sorted-map-by (comparator =) :name 5)) |
| 22:06 | clojurebot | 5 |
| 22:06 | hiredman | ,(:name (sorted-map-by (comparator =) :name 5)) |
| 22:06 | hiredman | ^- nil, which clojurebot doesn't send |
| 22:10 | danlarkin | yeahhhh ...what? |
| 22:12 | hiredman | danlarkin: it works with ::name but not :name |
| 22:13 | danlarkin | hiredman: yeah that's what I'm whatting about |
| 22:13 | hiredman | I did not see the "it works with ::name" bit |
| 22:13 | Chouser | ,((comparator =) :name :name) |
| 22:13 | clojurebot | -1 |
| 22:14 | duck1123 | it must be the night for odd clojure behavior. I have a fn that was throwing an error, but if I pull part of it out into it's own fn, the error goes away |
| 22:15 | hiredman | ,((comparator =) ::name :name) |
| 22:15 | clojurebot | 0 |
| 22:15 | cmvkk | ,((comparator =) ::name ::name) |
| 22:15 | clojurebot | -1 |
| 22:15 | danlarkin | *mind is boggled* |
| 22:16 | hiredman | Chouser: explain! |
| 22:16 | cmvkk | what does comparator do anyway? the api doc is less than helpful |
| 22:20 | vogelrn | from what I understand, |
| 22:20 | Chouser | comparator wants predicate that defines order, like < or > |
| 22:20 | vogelrn | comparator takes a function that returns true/false and returns a java comparator |
| 22:20 | Chouser | vogelrn: jinx |
| 22:20 | Chouser | :- |
| 22:20 | Chouser | :-) |
| 22:21 | cmvkk | so is this backwards from what it's supposed to be or what? |
| 22:21 | cmvkk | (comparator =) returns -1 where = returns true, and 0 where = returns false. |
| 22:22 | Chouser | = isn't defining order. it's silly to use with comparator |
| 22:22 | vogelrn | yeah |
| 22:22 | cmvkk | heh, well there's that too |
| 22:22 | vogelrn | like this |
| 22:22 | hiredman | ,((comparator (fn [& _] true)) 1 1) |
| 22:22 | clojurebot | -1 |
| 22:22 | hiredman | ,((comparator (fn [& _] true)) 1 0) |
| 22:22 | clojurebot | -1 |
| 22:23 | hiredman | ,(::name (sorted-map-by (comparator (fn [& _] true)) :name 5)) |
| 22:23 | cmvkk | I see what's going on. if you use it with > or < you want instances of true to represent inequality. |
| 22:23 | vogelrn | this might be backwards |
| 22:23 | vogelrn | ,(. (comparator #(pos? (. %1 compareTo %2))) compare "blah" "abah") |
| 22:23 | clojurebot | -1 |
| 22:23 | hiredman | ,(:name (sorted-map-by (comparator (fn [& _] true)) :name 5)) |
| 22:24 | danlarkin | ,(:name (sorted-map-by (fn [& _] true) :name 5)) |
| 22:29 | vogelrn | yeah, to sort, say, strings you would use |
| 22:29 | vogelrn | ,(sort (comparator #(neg? (. %1 compareTo %2))) '("blah" "abah" "aasdf" "fasdgs")) |
| 22:29 | clojurebot | ("aasdf" "abah" "blah" "fasdgs") |
| 22:31 | danlarkin | So I wonder, is it possible to write a comparator that will just preserve insertion order, but also allow (get)ing on the map |
| 22:32 | vogelrn | hmmm |
| 22:32 | Chouser | by the way, all functions support Comparator directly now, so you can just say: (sort #(neg? (. %1 compareTo %2)) '("blah" "abah" "aasdf" "fasdgs")) |
| 22:32 | Chouser | ,(sort #(neg? (. %1 compareTo %2)) '("blah" "abah" "aasdf" "fasdgs")) |
| 22:32 | clojurebot | ("aasdf" "abah" "blah" "fasdgs") |
| 22:32 | vogelrn | ah, cool |
| 22:33 | Chouser | which I think means 'comparator' is completely useless. :-) |
| 22:33 | duck1123 | if dissoc returns a new copy, why would I get the error: Can't remove struct key |
| 22:33 | vogelrn | well, you might want the comparator for your own uses |
| 22:34 | vogelrn | for java interop, since I doubt that would work with java methods :P |
| 22:34 | Chouser | ,(instance? java.util.Comparator (fn [a b])) |
| 22:34 | clojurebot | true |
| 22:35 | hiredman | ,(identity nil) |
| 22:35 | clojurebot | nil |
| 22:35 | hiredman | excellent |
| 22:36 | vogelrn | hmmm, so it assumes all functions are comparators then? |
| 22:36 | Chouser | all Clojure functions *are* Comparators. |
| 22:37 | vogelrn | yeah, because of nil/non-nil |
| 22:38 | danlarkin | vogelrn: because java.util.Comparator is a java Interface, and clojure functions implement that interface |
| 22:38 | vogelrn | yeah I know but I was saying why it's right to do that |
| 22:39 | danlarkin | oh, sorry :-o |
| 22:39 | vogelrn | I think... |
| 22:39 | hiredman | man, git is freaky |
| 23:43 | danlarkin | aw java.util.regex doesn't support named groups? :'( |
| 23:47 | durka | apparently not http://softwaredevscott.spaces.live.com/blog/cns!1A9E939F7373F3B7!543.entry |
| 23:48 | arohner | slightly offtopic, but does anyone know how to make git produce an svn-compatible diff? |
| 23:48 | arohner | it's on topic because I want to submit a patch for clojure :-) |
| 23:49 | danlarkin | arohner: I think there's a git-svn diff or something, isn't there? |
| 23:49 | arohner | yes, but I'm using the git mirror on github.com |
| 23:49 | danlarkin | Ohhh :-/ |
| 23:50 | hiredman | svn rev 1195 |
| 23:50 | clojurebot | svn rev 1195; fixed typo in add-watcher docs, explained var watchers |