2009-04-28
| 00:01 | unlink1 | oh |
| 00:01 | unlink1 | My NPEs are from map or dorun then |
| 00:01 | hiredman | ... |
| 00:03 | unlink1 | er. |
| 00:05 | qmrw | sssdd~. |
| 02:39 | Lau_of_DK | Top of the morning gents |
| 05:44 | unlink1 | I'm using vimclojure tip, but my syntax highlighting isn't working right (e.g. "def" doesn't get highlighted, it doesn't consider "when-let" a single word, nor does it highlight "-let". |
| 05:44 | unlink1 | ) |
| 08:44 | rhickey | how are people holding up with new jar filenames? |
| 08:51 | cemerick | rhickey: eh, that's fine by me...but I'll bet that will mess a lot of people up, though, especially people that set up clojure as an svn:external or git submodule, and then point their IDE at projectname/ext/clojure/clojure.jar, etc. I'd suggest copying the jar files to their usual locations as well (clojure.jar, clojure-slim.jar, etc). |
| 08:52 | gnuvince | New jar names? |
| 08:53 | rhickey | cemerick: I expected that suggestion. I wonder though, once most people are on releases, if they should instead have clojure-1.0.0.jar as their IDE dependency. Trunk will be for devs/patchers |
| 08:54 | rhickey | most libs are now distributed with versions in their jar names, no? |
| 08:54 | cemerick | rhickey: setting up an svn:externals/git submodule tied to a particular rev/tag is *very* common, and I view referring to version-numbered jar files as a guarantee of future breakage/irritation. |
| 08:55 | cemerick | rhickey: mv foo-1.2.3.jar foo.jar is the first thing I do when I pull in a new dep. |
| 08:56 | cemerick | to be clear, this is irrelevant to me (as we keep the clojure/clojure-contrib we use in a separate internal git repo we pull in via a submodule, so it's trivial to rename when we update that repo). |
| 08:56 | rhickey | I'm not opposed, I just wonder if it will give people bad habits |
| 08:57 | cemerick | tangential Q: why does the compiled-clojure jar retain the .clj files? |
| 08:58 | rhickey | cemerick: for tools? |
| 08:59 | cemerick | isn't all of the metadata in the class files anyway? |
| 08:59 | rhickey | not the source |
| 09:00 | cemerick | huh -- if one wanted that, wouldn't one set the 'source' attribute on the clojure.jar entry in the classpath to the clojure-sources.jar file? |
| 09:00 | cemerick | (that's what I thought the sources jar was for) |
| 09:01 | rhickey | better to ask this on the group |
| 09:01 | rhickey | people complained when no source in the main jar |
| 09:01 | cemerick | that was mostly rhetorical :-) |
| 09:01 | rhickey | I don't care |
| 09:01 | cemerick | huh |
| 09:01 | rhickey | not a big space savings |
| 09:02 | rhickey | slim and sources were invented by others |
| 09:05 | cgray | hi, I'm having trouble with doseq: (doseq [x (list 1 2 3)] (doseq [y (list 1 2 3)] (print (str x) (str y)))) is printing some 1-digit numbers, which is not what I would expect... |
| 09:05 | cemerick | mmm, filenames in reflection warnings. That's tasty. |
| 09:07 | rhickey | cgray: print puts paces between its args, try: (doseq [x (list 1 2 3)] (doseq [y (list 1 2 3)] (print (str x y " ")))) |
| 09:08 | rhickey | also, doseq support multiple seqs: (doseq [x (list 1 2 3) y (list 1 2 3)] (print (str x y " "))) |
| 09:11 | cgray | rhickey: thanks, at least that isolates the bug to my program :) |
| 11:32 | cgray | what is the syntax to override a method in a proxy? |
| 11:33 | cgray | never mind, i made a mistake |
| 13:18 | technomancy | the JVM still supports green threads as an option, correct? |
| 13:24 | p_l | technomancy: afaik no |
| 13:27 | technomancy | it seems like there's still an advantage to green threads for i/o bound tasks, right? since they're so much cheaper to spin up? |
| 13:27 | technomancy | or does pooling threads make that cheap enough with native threads? |
| 13:30 | danlarkin_ | I think theoretically thread pools slim the gap |
| 13:39 | AWizzArd | Does Clojure offer the functionality to append data to a file on disk? If not, what jvm class is the right one for that job? |
| 13:39 | kotarak | AWizzArd: probably java.io.FileOutputStream with some option? |
| 13:40 | kotarak | maybe duck-streams with some option? |
| 14:55 | technomancy | slime's macroexpand makes me so happy |
| 14:57 | technomancy | heh: "If none of the macros in Clojure seems complex to you, my company is hiring." (from the book) |
| 14:58 | Chouser | 'for' is so easy to understand, would be so easy to write if I needed it, I don't see why it's even included in core. |
| 14:59 | Cark | hehe |
| 15:00 | cgrand | Chouser: how about destructure? :-) |
| 15:01 | Cark | ~def for |
| 15:02 | Chousuke | cgrand: luckily destructure is not a macro! |
| 15:04 | cgrand | Chousuke: that's true it doesn't say "If none of the macros (nor their helper fns) in Clojure seems complex to you, my company is hiring." |
| 15:06 | Chousuke | it's amusing how most logic in destructure is inside the let form :P |
| 15:06 | AWizzArd | Yes, I noticed the same. |
| 15:07 | AWizzArd | rhickey: when I have a (def x (ref { ... })) then @x is always a snapshot, that was valid at the time I read it, right? When I am printing a huuge @x into a file and transactions change the contents of this hashmap, it will not interfer with my printing right? |
| 15:08 | Chousuke | that's correct. |
| 15:08 | AWizzArd | ok |
| 15:11 | Chousuke | you need to take care not to do @foo too many times in your code, though |
| 15:12 | AWizzArd | why? |
| 15:12 | Chousuke | I mean, it's pretty easy to make the mistake of reading it too many times, and expecting the value to be the same each time. |
| 15:12 | kotarak | Because you might get different @x's. |
| 15:13 | AWizzArd | Ah ok, that. I thought it would cost too much memory or something like that. No no, I am aware that each @x could potentially be a different one. |
| 15:13 | AWizzArd | But when I pass it to some function F I need to be sure that inside of F it will not change. |
| 15:14 | hiredman | :( |
| 15:14 | Chousuke | it's evaluated when the function F is called |
| 15:14 | Chousuke | so you pass the value you get from the deref |
| 15:14 | AWizzArd | yes |
| 15:15 | hiredman | all I get from the latest smack when trying to login is NPE |
| 15:15 | kotarak | AWizzArd: that's the trick of alter.. |
| 15:15 | AWizzArd | What trick? |
| 15:16 | kotarak | alter passes a the current value of the ref to a function. So you don't need multiple @x's... |
| 15:18 | AWizzArd | yes |
| 15:35 | technomancy | is sorted-map the only way to get a map that guarantees order? |
| 15:36 | kotarak | array-map also does, I think. |
| 15:36 | technomancy | kotarak: thanks; that's what I needed. |
| 15:53 | cemerick | FYI but OT: my company and another in the area are sponsoring a presentation by Ben Fry (the Processing guy) in Northampton, MA. It's sure to be interesting. http://blog.snowtide.com/2009/04/28/snowtide-informatics-welcomes-ben-fry-of-processing-fame-to-northampton Northampton is about 2.5 hrs from Boston and NYC, so it might be worth the trip if you're interested in data visualization. |
| 16:03 | clojurebot | testing new-send-out |
| 16:03 | durka42 | hiredman: it works |
| 16:07 | hiredman | sorry I forgot to send that to #clojurebot |
| 16:11 | lisppaste8 | technomancy pasted "metadata on proxies" at http://paste.lisp.org/display/79367 |
| 16:11 | technomancy | any ideas why this fails? |
| 16:11 | technomancy | I get java.lang.UnsupportedOperationException |
| 16:12 | technomancy | but dnolen was saying yesterday that proxying fns allows you to put metadata on them |
| 16:12 | Chouser | yeah, you can't change metadata on an AFn |
| 16:13 | technomancy | I wonder what dnolen meant then. he seemed to imply that this would work; maybe I misunderstood him |
| 16:13 | Chouser | you can use proxy to give a fn metadata right when you create it. |
| 16:14 | technomancy | Chouser: you mean don't use with-meta; use the reader syntax instead? |
| 16:15 | Chouser | no, I mean use proxy as you do there. |
| 16:15 | Chouser | ^(make-funcallable (fn [])) |
| 16:15 | Chouser | normally a fn has no metadata at all |
| 16:16 | technomancy | oh, the new metadata needs to go inside the second param to proxy then? |
| 16:16 | technomancy | I see. |
| 16:16 | Chouser | yes |
| 16:16 | technomancy | thanks! |
| 16:17 | Chouser | sure, hope it helps... |
| 16:17 | technomancy | it's an unfortunate hack, but I feel better about using it knowing that metadata directly on fns is planned |
| 16:17 | technomancy | hopefully in the not-too-distant future |
| 16:18 | unlink | I'm using the exact same vim configuration with vimclojure tip on both machines. On one installation, Ubuntu 8.10 VIM 7.1, vimclojure works as expected. On the other, Ubuntu 9.04 VIM 7.2, I am experiencing problems such as keywords spanning hyphens not matching (like when-let) and regular ^N completion not obeying vimclojure's word redefinition (such as *command-line-args* not completing). |
| 16:18 | unlink | I suppose the configuration is not identical -- one runs on top of the 7.1 VIM runtime, and the other on top of the 7.2 runtime. |
| 16:19 | kotarak | unlink: did you install a previous version on the second machine before? |
| 16:20 | unlink | I don't think so. |
| 16:20 | kotarak | I would expect 7.2 to work more smooth than 7.1... |
| 16:21 | unlink | Yeah, it works just fine on 7.1. I'm not using ng or anything though. |
| 16:21 | kotarak | hmmm... |
| 16:22 | kotarak | Is something else different between the two machines? other plugins, settings, etc... |
| 16:23 | unlink | Let me try again with a minimal vimrc. |
| 16:30 | unlink | Oh, the problem is that I didn't RTFM. I had set filetype indent on, which apparently is synonymous with filetype indent plugin on, but only with VIM 7.1. |
| 16:32 | kotarak | unlink: k. Good that it works now. :) |
| 16:35 | unlink | kotarak: How do you set omnifunc? |
| 16:35 | kotarak | set omnifunc=theFunc() |
| 16:35 | kotarak | w/o checking the exact syntax. |
| 16:37 | unlink | I mean, it would be setl omnifunc=theFunc, but I mean, I'm asking the correct way to do it for clojure. Am I expected to do it in a filetype aucmd? |
| 16:37 | kotarak | unlink: you don't have to do it. VimClojure does it for you. |
| 16:37 | kotarak | Just use <C-x><C-o> in a Clojure file. Eg. r-s<C-x><C-o> => read-string, resultset-seq, ... |
| 16:38 | unlink | Ok. ^X^O says Option 'omnifunc' is not set. |
| 16:38 | kotarak | unlink: did you put "let clj_want_gorilla = 1" in your .vimrc? |
| 16:39 | unlink | yes. |
| 16:39 | kotarak | Hmm... |
| 16:40 | kotarak | Did you start the ng-server? |
| 16:42 | unlink | Thanks for your help, I have to go. |
| 16:42 | kotarak | k |
| 16:42 | Chousuke | gorilla seems to blow up quite spectacularly if the ng server is not running. |
| 16:43 | kotarak | Chousuke: not anymore |
| 16:43 | Chousuke | maybe I should upgrade then |
| 16:43 | kotarak | It just turns off interactivity. |
| 16:44 | kotarak | But it blows up with (namespaced) files not being in the classpath or containing syntax errors. |
| 16:45 | kotarak | Basic highlighting and <C-n> completion work also without the server. |
| 17:45 | kadaver | how do you say :string in clojure contrib sql? |
| 17:45 | kadaver | i mena isntead of :int |
| 17:52 | eevar__ | kadaver: "varchar(255)" |
| 17:52 | eevar__ | or text, or clob |
| 18:10 | technomancy | where does console output go when an agent performs it? |
| 18:10 | technomancy | ~(send (agent "hi") println) |
| 18:10 | clojurebot | No entiendo |
| 18:11 | technomancy | is there a separate *out* for agents? |
| 18:11 | technomancy | or are you just not supposed to have side-effects in functions you send them? |
| 18:14 | Chousuke | they can have side effects... dunno about the output though :) |
| 18:17 | drewr | ,(set [4 5 2 8 1]) |
| 18:17 | clojurebot | #{1 2 4 5 8} |
| 18:17 | drewr | ,(sorted-set [4 5 2 8 1]) |
| 18:17 | clojurebot | #{[4 5 2 8 1]} |
| 18:17 | technomancy | works but is lame: (let [my-out *out*] (send (agent "hi") #(binding [*out* my-out] (println %&)))) |
| 18:17 | drewr | ,(sorted-set 4 5 2 8 1) |
| 18:17 | clojurebot | #{1 2 4 5 8} |
| 18:17 | drewr | Why does set and sorted-set both sort their sets? |
| 18:18 | technomancy | drewr: I don't think order is guaranteed with set |
| 18:19 | technomancy | it's sorted for this instance, but you shouldn't rely on it. |
| 18:19 | drewr | I actually wanted it unsorted :-) |
| 18:20 | technomancy | ,(hash-set 4 5 2 8 1) |
| 18:20 | clojurebot | #{1 2 4 5 8} |
| 18:20 | technomancy | hrm; dunno. |
| 18:21 | technomancy | ,(array-map 4 4 5 5 2 2 8 8 1 1) |
| 18:21 | clojurebot | {4 4, 5 5, 2 2, 8 8, 1 1} |
| 18:21 | technomancy | works the same way, but is six kinds of hacky |
| 18:21 | technomancy | if you want insertion order, I mean |
| 18:23 | hiredman | ,(into #{} 8 93 2 1 3) |
| 18:23 | clojurebot | java.lang.IllegalArgumentException: Wrong number of args passed to: core$into |
| 18:23 | hiredman | ,(into #{} '(8 93 2 1 3)) |
| 18:23 | clojurebot | #{1 2 3 8 93} |
| 18:30 | technomancy | wow, the indentation in the Java implementation of Clojure is pretty weird. =) |
| 18:30 | ctdean | You might need to set your tabs |
| 18:31 | drewr | technomancy: :-) |
| 18:31 | duncanm | hmmm |
| 18:31 | duncanm | i can't have two overloads with the same arity? |
| 18:31 | duncanm | what if I distinguish them by a type hint? |
| 18:31 | technomancy | ctdean: maybe, but some nesting levels don't increase the level of indentation |
| 18:32 | ctdean | That is funny. |
| 18:32 | ctdean | What file? |
| 18:32 | technomancy | ctdean: Agent.java, but I've seen it other places too |
| 18:32 | technomancy | is it meant for 4-space tabs then? |
| 18:34 | ctdean | Yes, 4 space tabs |
| 18:34 | ctdean | Yea, I hate hard tabs myself. But some people like them. cest la vie |
| 18:35 | technomancy | well at 4 spaces it looks a bit more reasonable |
| 18:35 | hiredman | duncanm: if you want to distinguish beyond arity you need multimethods |
| 18:36 | hiredman | the (defn f ([])([])) form only distinguishes based on arity |
| 18:36 | hiredman | (dispatches) |
| 18:37 | technomancy | just the top-level class defintion of a file doesn't increase the indentation, which I guess is not too weird if you know every file is going to contain only a single class |
| 18:38 | technomancy | to each his own. it's not stuff I'm reading often. =) |
| 19:00 | kadaver | java.sql.SQLSyntaxErrorException: Syntax error: Encountered "LIMIT" at line 1, column 47. (NO_SOURCE_FILE:0) |
| 19:00 | kadaver | "select * from songs order by timesplayed desc limit 10" ; that gives syntax error on limit 10,why? |
| 19:02 | cp2 | try putting it before the order by maybe? |
| 19:02 | unlink | Does it work from your SQL shell? |
| 19:05 | kadaver | dont have a sql shell |
| 19:05 | kadaver | jdbc only |
| 19:05 | kadaver | before didnt work |
| 19:05 | kadaver | "select * from songs limit 10 order by timesplayed desc" |
| 19:05 | kadaver | java.sql.SQLSyntaxErrorException: Syntax error: Encountered "10" at line 1, column 27. (NO_SOURCE_FILE:0) |
| 19:08 | unlink | a HA! not= |
| 19:12 | kadaver | ? |
| 19:12 | clojurebot | namespaces are (more or less, Chouser) java packages. they look like foo.bar; and corresponde to a directory foo/ containg a file bar.clj in your classpath. the namespace declaration in bar.clj would like like (ns foo.bar). Do not try to use single segment namespaces. a single segment namespace is a namespace without a period in it |
| 19:13 | technomancy | what specifically is wrong with single-segment namespaces? |
| 19:13 | technomancy | is it just due to an arbitrary JVM bug? |
| 19:13 | technomancy | sorry, "decision". =) |
| 19:15 | Chousuke | the chance of collisions would be rather high if single-segment namespaces were common. :/ |
| 19:16 | technomancy | if your project has the same name as another project, the fact that your classes go in the same namespace is the least of your worries |
| 19:16 | Chousuke | and your source directory will be a mess :) |
| 19:17 | technomancy | picking a good name is hard |
| 19:18 | Chousuke | most of the time you'll want more than one segment in your namespaces anyway, because it doesn't make sense to put everything under one name even within one project. |
| 19:18 | Chousuke | unless it's a single file or something. |
| 19:19 | technomancy | well, for mire I had a "mire" namespace that launched the server, but the meat of the code was in "mire.commands", "mire.rooms" etc. |
| 19:20 | technomancy | then when I wanted to AOT it, I had to move "mire" to "mire.server" for no good reason. |
| 19:20 | technomancy | it's a nitpick for sure; just seems really arbitrary. |
| 19:21 | technomancy | and whenever it's arbitrary, I assume it's due to the JVM rather than a specific limitation of Clojure. =) |
| 19:22 | powr-toc | technomancy: Were you behind the peepcode screencast? |
| 19:22 | technomancy | powr-toc: yeah, I wrote the script. |
| 19:23 | technomancy | powr-toc: got some feedback? |
| 19:25 | powr-toc | technomancy: I got my boss to buy it for me today... I posted to the google group today... basically I thought the illustrative example was really good, but that it wasn't clear who it was pitched at |
| 19:25 | powr-toc | or rather the level it was pitched at |
| 19:25 | technomancy | powr-toc: yeah, I could see that. |
| 19:26 | technomancy | it's hard to be all things to everyone. wanted to cover a wide variety of topics, but it did feel rushed at parts. |
| 19:26 | powr-toc | technomancy: I totally understand the pressures though... I did a 20 minute talk on erlang once, and was desperate to get to the good stuff, but felt I had to give some intro/background |
| 19:27 | technomancy | I think for people who are really serious about learning Clojure, the screencast and the book complement each other. |
| 19:27 | technomancy | the screencast can get you excited and it will probably help cement a few of the trickier concepts that are hard to cover in just text, but it's a lousy reference, so the book is still important. |
| 19:27 | powr-toc | technomancy: I think so... as an indicator of clojure adoption do you know how well it's selling btw? |
| 19:28 | technomancy | powr-toc: well I did a screencast on Emacs earlier in December, and it's not quite selling as fast as that, but pretty close. |
| 19:28 | powr-toc | (not meaning to pry btw ;-) ) |
| 19:28 | technomancy | the thing is that everyone knows what Emacs is, so everyone who wanted to buy it got it in the first few days. |
| 19:29 | technomancy | with Clojure I expect the interest to build more over time, especially as 1.0 is released soon |
| 19:30 | powr-toc | good point... I was always curious about that Emacs screencast, maybe I'll have to get that too :-) |
| 19:31 | technomancy | it was kind of an experiment to begin with as most PeepCode screencasts have been targeted towards the Ruby community in the past. |
| 19:31 | technomancy | powr-toc: people seemed to like the Emacs one a lot. it was definitely more obvious who the audience was. =) |
| 19:33 | powr-toc | technomancy: well, the Ruby communities seems to be a good one for that kinda thing, as they tend to be early adopters etc... |
| 19:33 | technomancy | yeah, the git screencast was particularly popular |
| 19:33 | powr-toc | technomancy: I know a lot of ruby guys who rave about peepcode too |
| 19:33 | technomancy | there's always a risk involved in investing in cutting-edge topics, but I think this one paid off. |
| 19:34 | powr-toc | technomancy: definitely |
| 19:35 | powr-toc | I thought the http://www.youtube.com/user/briantwill presentations were very good too |
| 19:36 | kadaver | (loop [[x & xs] res |
| 19:36 | kadaver | acc []] |
| 19:36 | kadaver | (if (nil? x) |
| 19:36 | kadaver | acc |
| 19:36 | kadaver | (recur xs (conj acc x)))) |
| 19:36 | technomancy | yeah, _very_ different style though |
| 19:36 | kadaver | can you simplify that? |
| 19:36 | technomancy | his are more like lectures |
| 19:36 | danlarkin | kadaver: please don't paste multiple lines of code to the channel, use a pastebin like paste.lisp.org |
| 19:37 | powr-toc | technomancy: yeah, it's nice with yours to see a bit of the development cycle... it's new to just about everyone who isn't a lisper |
| 19:39 | kadaver | hmm its a fold |
| 19:39 | technomancy | does anyone have a slime macroexpand hack that pretty-prints the results? |
| 19:41 | powr-toc | technomancy: actually, elaborating on that... I find the (emacs) lisp style of development where you eval sexp's into the REPL to be a big improvement over just having a REPL, as is common in ruby circles... having more demonstrations around that would doubtless wow some people |
| 19:42 | technomancy | powr-toc: yeah, I wanted to use slime more in the video, but there were some problems getting it set up due to some instability at the time |
| 19:43 | technomancy | powr-toc: we decided covering slime would take too much time, so we're doing a separate (free) screencast on clojure editor support. |
| 19:43 | powr-toc | sweet! |
| 19:43 | technomancy | it already felt rushed; I'm sure you can imagine how it would feel if we spend some time getting slime set up and explaining its features; heh |
| 19:43 | powr-toc | technomancy: yeah, that wouldn't have pleased me ;-) |
| 19:44 | technomancy | the editors one was supposed to be a teaser, but it got delayed... oh well. |
| 19:44 | technomancy | hopefully it can still drive interest |
| 19:45 | powr-toc | I've not yet taken jumped to slime, mostly because of the apparant brittleness around versions... clojure-mode with paredit seems pretty good, until you get into using namespaces |
| 19:45 | technomancy | powr-toc: last week I would have told you not to worry about breakage, but a few days ago a change to test-is broke clojure-test-mode. =\ |
| 19:45 | technomancy | that's actually orthogonal to regular slime though. |
| 19:46 | technomancy | but you can just wait for the screencast if you want. =) |
| 19:46 | powr-toc | hehe... maybe I'll wait a little longer... what killer features does slime give? |
| 19:46 | powr-toc | (over clojure-mode/paredit) |
| 19:46 | technomancy | oh man... where to start. =) |
| 19:47 | powr-toc | hehe... I thought that'd be the answer |
| 19:48 | technomancy | the slime manual is pretty comprehensive too |
| 19:48 | technomancy | though some of it is CL-specific |
| 19:55 | technomancy | if you queue some actions to an agent using send and others to send-off, they're not guaranteed to run in the order you send them, are they? |
| 19:55 | technomancy | e |
| 19:56 | dreish | Looks like they get added to the same queue. |
| 19:56 | dreish | Aw, you drove rhickey away in exasperation. |
| 19:57 | technomancy | yeah, that's handy. |
| 19:57 | technomancy | heh |
| 19:58 | rhickey | http://clojure.org/todo |
| 20:00 | dnolen | cool! |
| 20:03 | technomancy | "regex literals as fns" <= yes. definitely. |
| 20:03 | dnolen | rhickey: what would || for arbitrary symbols be used for? |
| 20:04 | kadaver_ | how do I ask not emty? |
| 20:04 | kadaver_ | this isnt very good: |
| 20:04 | kadaver_ | (if [] 10 20) -> 10 |
| 20:04 | kadaver_ | very bad |
| 20:05 | technomancy | kadaver_: you could just say first |
| 20:05 | technomancy | though that will fail if its first element is false or nil. |
| 20:05 | technomancy | (not (empty? [])) is not too bad |
| 20:05 | dnolen | ,(seq []) |
| 20:05 | clojurebot | nil |
| 20:05 | dnolen | ,(seq #{}) |
| 20:05 | clojurebot | nil |
| 20:05 | dnolen | ,(seq '()) |
| 20:05 | clojurebot | nil |
| 20:05 | technomancy | dnolen wins |
| 20:06 | technomancy | dnolen: thanks for that metadata-on-fns hack from yesterday. was a little confused at first but it's working great now |
| 20:06 | rhickey | dnolen: for symbolic applications that want to use arbitrary symbols, but not really for program identifiers |
| 20:06 | dnolen | technomancy: great! glad to be of help. |
| 20:15 | kadaver | bah |
| 20:15 | kadaver | haskell >>>> clojure |
| 20:17 | unlink | Vimclojure seems to indent only one space more after an open [ on the next line (where I would want two spaces) -- is this desired behavior? |
| 20:17 | durka42 | i believe that operator is defined as |
| 20:17 | durka42 | (>>>>) = unsafeTakeOverTheWorld |
| 20:21 | kadaver | rather much,much,much, greater than |
| 20:23 | technomancy | and here I was taking it to be a military rank. |
| 20:23 | technomancy | Major-Sergeant? Fourth Lieutenant? |
| 20:30 | spaceman_stu | is there a library or standard way of performing validation on a map? |
| 20:33 | spaceman_stu | i'd like to verify that its structure its fields match some standard, and also taht the values are legal |
| 20:42 | kadaver | how do you make an sql statement ? |
| 20:42 | kadaver | liek delete |
| 20:43 | kadaver | DELETE FROM TABLE WHERE SOMECOLUMN = 'HELLO' |
| 20:43 | dnolen | kadaver: have you looked clojureql? or using the built in facilities? |
| 20:44 | kadaver | DELETE FROM TABLE WHERE SOMECOLUMN = 'HELLO' |
| 20:44 | kadaver | contrib/sql, ic ant find docs |
| 20:44 | kadaver | how do I make that statement? |
| 20:47 | dnolen | I would look at clojureql, it seems to present and interface that's much closer to sql syntax. |
| 20:47 | dnolen | http://github.com/Lau-of-DK/clojureql/blob/615527c7d61d0d93f3851079a5729cbaf35c1202/src/dk/bestinclass/clojureql/demo.clj |
| 20:56 | arohner | does anyone have a good link on java resources, i.e. the things in jar files |
| 20:56 | arohner | google is failing me |
| 20:58 | arohner | ah: http://java.sun.com/j2se/1.4.2/docs/guide/resources/resources.html |
| 21:22 | arohner | gah, classloaders are arcane beasts |
| 21:23 | arohner | for reasons I don't understand, (clojure.lang.RT/baseLoader) is not the same as the loader that loaded my first clojure class |
| 21:26 | kadaver | isnt there just a way to make a delete-statement? |
| 21:27 | kadaver | where is contrib? |
| 21:36 | arohner | clojurebot: contrib |
| 21:36 | clojurebot | contrib is http://code.google.com/p/clojure-contrib/ |
| 21:39 | kadaver | meh its a prett useless wrapper of you cant do delete |
| 22:29 | unlink1 | Is there a shorthand for (fn [] x)? (i.e. wrapping x in a fn that simply returns it) |
| 22:29 | stuhood | (constantly x) |
| 22:30 | unlink1 | Er, that's longer than fn [] |
| 22:31 | stuhood | heh. true. |
| 22:31 | stuhood | #(do x)? |
| 22:31 | stuhood | 7 chars instead of 9 =P |
| 22:34 | unlink1 | heh |
| 22:34 | unlink1 | lambda: x in python |
| 22:34 | unlink1 | Actually does clojure have continuations or anything like that? |
| 22:35 | unlink1 | I mean, besides exceptions. |
| 22:37 | stuhood | i guess you could imitation continuations with closures/lambdas |
| 22:38 | unlink1 | oh |
| 22:38 | unlink1 | :( |
| 22:38 | kadaver | how can you set primary keys from contrib-sql? |
| 22:38 | stuhood | unlink1: what languages have continuations built in? |
| 22:39 | unlink1 | scheme, haskell, ml |
| 22:40 | hiredman | I am going to build a clojure powered digital picture frame / internet dashboard widget |
| 22:40 | stuhood | interesting. yea... they aren't first class in clojure, but i think you could get pretty close by just trampolining functions |
| 22:40 | arohner | don't you have to capture the entire "state of the world" in a continuation? |
| 22:41 | chessguy | i don't thinkn continuations are built in to haskell |
| 22:41 | chessguy | there are libraries for it |
| 22:42 | kadaver | is there a jar of the latest clojure cntrib? |
| 22:42 | kadaver | so i cna jsut switch them out? |
| 22:42 | stuhood | arohner: probably just more like thread state... |
| 22:43 | unlink1 | python has something approaching the usefulness of continuations |
| 22:43 | chessguy | ,(doc read) |
| 22:43 | arohner | stuhood: oh right, or else you wouldn't be able to get things done when resuming an old continuation... |
| 22:43 | clojurebot | "([] [stream] [stream eof-error? eof-value] [stream eof-error? eof-value recursive?]); Reads the next object from stream, which must be an instance of java.io.PushbackReader or some derivee. stream defaults to the current value of *in* ." |
| 22:44 | stuhood | unlink1: generator functions? |
| 22:44 | unlink1 | yes |
| 22:45 | stuhood | yea... lazy sequences are definitely more difficult to wrap your head around |
| 22:46 | chessguy | ,(doc print) |
| 22:46 | clojurebot | "([& more]); Prints the object(s) to the output stream that is the current value of *out*. print and println produce output for human consumption." |
| 22:47 | unlink1 | My use case is generating HTML. I have a function responsible for generating the common skeleton elements of the page, and then other pages which interleave different regions of that function with custom HTML. |
| 22:47 | chessguy | why does my repl hang when i evaluate (read)? |
| 22:56 | kadaver | why do you use clojure? |
| 23:05 | hiredman | chessguy: it is trying to read something |
| 23:05 | chessguy | what terminates the input? |
| 23:07 | stuhood | it says it reads an object, which i assume would be any valid clojure literal? |
| 23:08 | stuhood | yea... execute something like: `(read) 1` at a repl, and the result is 1 |
| 23:10 | arohner | read turns strings into data structures |
| 23:10 | chessguy | "(read) 1" hangs for me too |
| 23:11 | arohner | press enter afterwards |
| 23:11 | kadaver | java.lang.Exception: Unable to resolve symbol: next in this context (def.clj:102) |
| 23:11 | kadaver | user=> |
| 23:11 | kadaver | def.clj is where? |
| 23:12 | chessguy | arohner: i did that |
| 23:12 | arohner | chessguy: how are you starting the repl? |
| 23:13 | chessguy | in slime |
| 23:14 | arohner | hmm. that works for me |
| 23:14 | arohner | user=> (read) 1 |
| 23:14 | arohner | (read) 1 |
| 23:14 | arohner | 1 |
| 23:14 | stuhood | works when running clojure.main from the command line |
| 23:14 | chessguy | user> (read) 1 |
| 23:14 | chessguy | user> (read) 1 |
| 23:14 | chessguy | bah |
| 23:15 | chessguy | that didn't paste right |
| 23:15 | stuhood | ,(read) (println 1) |
| 23:15 | clojurebot | Execution Timed Out |
| 23:15 | stuhood | hahaha |
| 23:16 | chessguy | so is my slime broken? |
| 23:16 | arohner | try it from the command line and see what happens |
| 23:17 | chessguy | try what? |
| 23:17 | chessguy | sorry, quite a newbie here |
| 23:17 | kadaver | user=> |
| 23:18 | arohner | chessguy: np. Start a repl from the command line, and see if read works there |
| 23:19 | arohner | java -cp clojure.jar clojure.main -r |
| 23:19 | arohner | (read) 1 |
| 23:19 | chessguy | oh, i need to have clojure.jar in the current directory to do that i guess? |
| 23:20 | arohner | you can replace clojure.jar with the path to clojure.jar |
| 23:20 | chessguy | assuming i know it :) |
| 23:20 | chessguy | hang on |
| 23:20 | cads | hey chessguy, are you in a *nix? |
| 23:21 | arohner | how'd you get it started then? :-) |
| 23:21 | chessguy | os x, yeah |
| 23:23 | chessguy | ok got the repl |
| 23:23 | cads | clojure.jar has to be in the classpath that you give to java, like : "java -cp $LIBS:$CLOJURE_JAR clojure.lang.Repl" , where LIBS points to clojure.contrib jar |
| 23:24 | chessguy | new-host:Clojure awagner$ java -cp core/clojure.jar clojure.main -r |
| 23:24 | chessguy | Clojure |
| 23:24 | chessguy | user=> (read 1) |
| 23:24 | chessguy | java.lang.ClassCastException: java.lang.Integer (NO_SOURCE_FILE:0) |
| 23:24 | arohner | try "(read) 1" |
| 23:24 | chessguy | in quotes? |
| 23:24 | cads | no |
| 23:24 | hiredman | try reading the docstring |
| 23:24 | chessguy | oh |
| 23:24 | chessguy | ok that works |
| 23:25 | chessguy | hiredman: the docstring doesn't say what terminates the input |
| 23:25 | hiredman | (doc read) |
| 23:25 | clojurebot | Reads the next object from stream, which must be an instance of java.io.PushbackReader or some derivee. stream defaults to the current value of *in* .; arglists ([] [stream] [stream eof-error? eof-value] [stream eof-error? eof-value recursive?]) |
| 23:25 | hiredman | "Reads the next object from stream, which must be an instance of java.io.PushbackReader" |
| 23:25 | cads | hey, do you guys know a better way of getting command completion than using rlwrap and a completion file? |
| 23:25 | hiredman | 1 is certainly not an instance of java.io.PushbackReader |
| 23:25 | chessguy | i guess i'm not understanding what that means |
| 23:25 | arohner | chessguy: it reads one whole valid "thing" |
| 23:26 | arohner | one whole valid express |
| 23:26 | chessguy | from stdin (by default) right? |
| 23:26 | arohner | *expression |
| 23:26 | arohner | chessguy: yes |
| 23:26 | chessguy | terminated by \n? |
| 23:27 | chessguy | that seems to be the case in the repl. it's just broken in slime for some reason |
| 23:27 | arohner | what version of clojure are you running? |
| 23:27 | kadaver | where is the latestclojure? |
| 23:27 | kadaver | is 1.0 out yet? |
| 23:27 | hiredman | chessguy: type some in parens with a newline in it |
| 23:27 | chessguy | for the repl, i just pulled the zip off of google code |
| 23:27 | hiredman | clojurebot: latest? |
| 23:27 | clojurebot | latest is 1359 |
| 23:28 | chessguy | hm |
| 23:28 | jmaness | chessguy: Take a look at clojure.lang.LispReader |
| 23:28 | chessguy | this repl also hangs if i just evaluate (read) |
| 23:29 | chessguy | s/hangs/seems to hang/ |
| 23:29 | hiredman | you need to type in something for it to read |
| 23:29 | chessguy | i did |
| 23:29 | hiredman | what? |
| 23:29 | chessguy | if i just type (read) |
| 23:29 | chessguy | and then hit enter a bunch of times |
| 23:30 | hiredman | ... |
| 23:30 | chessguy | it never stops |
| 23:30 | hiredman | read ignores whitespace |
| 23:30 | chessguy | oh |
| 23:30 | chessguy | well |
| 23:30 | hiredman | just like writing clojure code |
| 23:30 | chessguy | silly me |
| 23:30 | arohner | right, read reads an expression |
| 23:31 | chessguy | ok |
| 23:31 | chessguy | but that's still not what happens in my slime |
| 23:31 | chessguy | in slime, if i type (read) |
| 23:31 | chessguy | followed by 3\n |
| 23:31 | chessguy | followed by 3\n |
| 23:31 | chessguy | etc. |
| 23:31 | chessguy | it doesn't stop |
| 23:32 | arohner | chessguy: what version are you running? trunk or a release? |
| 23:32 | hiredman | slime I know nothing about |
| 23:32 | chessguy | what version of clojure you mean? |
| 23:32 | arohner | right |
| 23:33 | chessguy | hm, not sure off-hand what version is driving my slime |
| 23:34 | hiredman | I kind of doubt (read) ever behaved differently |
| 23:34 | chessguy | i concur |
| 23:34 | hiredman | given how central it is |
| 23:34 | arohner | right, but slime has changed significantly |
| 23:35 | chessguy | not that you need my opinion |
| 23:35 | arohner | and I know that my slime works, and I'm running a fairly recent version |
| 23:35 | hiredman | well, he should just upgrade his slime |
| 23:35 | arohner | right, but slime versions are somewhat tied to clojure versions |
| 23:37 | arohner | i.e. upgrading clojure from before the file layout change or the seq change would require upgrading slime |
| 23:37 | chessguy | bah |
| 23:37 | chessguy | it's not worth the pain |
| 23:37 | chessguy | i'll just live with it |
| 23:38 | arohner | my swank-clojure's last commit is from 2009/04/17 |
| 23:50 | kadaver | bah has namespaxces been chnaged since february? |
| 23:50 | kadaver | ava.lang.Exception: No such namespace: clojure (NO_SOURCE_FILE:2) |
| 23:51 | kadaver | clojure.contrib.sql not the contrib namespace? |
| 23:54 | hiredman | kadaver: best to have code and the exception it causes, not one or the other |
| 23:55 | hiredman | ~url |
| 23:55 | clojurebot | Titim gan �ir� ort. |
| 23:55 | hiredman | lisppaste8: url? |
| 23:55 | lisppaste8 | To use the lisppaste bot, visit http://paste.lisp.org/new/clojure and enter your paste. |
| 23:55 | kadaver | http://hpaste.org/fastcgi/hpaste.fcgi/view?id=4385#a4385 |
| 23:56 | kadaver | http://hpaste.org/fastcgi/hpaste.fcgi/view?id=4385#a4386 |
| 23:56 | hiredman | erm |
| 23:56 | hiredman | are you sure that is the exact exception? |
| 23:57 | hiredman | anyway, contrib in that code should be clojure.contrib |
| 23:57 | kadaver | yes |
| 23:57 | hiredman | but I don't see how that would get you an exception about the clojure namespace (which doesn't exist, it was moved to clojure.core) |
| 23:58 | hiredman | but nothing there references the clojure namespace |
| 23:58 | kadaver | thats the problem i guess? |
| 23:58 | hiredman | I suspect the code you pasted is not what is generating that exception |
| 23:59 | kadaver | it isnt |