2008-08-08
| 04:41 | Chouser | Huh. My clojure entry made it to trial 6 of the lighting round: http://icfpcontest.org/results/lightning/results-by-score-Lightning-6.html |
| 04:42 | Chouser | It was completely blind. :-/ |
| 04:42 | rhickey | Chouser: neat! I didn't know if anyone found time to compete |
| 04:43 | Chouser | Yeah, I barely did. Lotsa chores to do that weekend too, so I never got to the obstacle avoidance stuff. |
| 04:44 | rhickey | yeah - competing means a lost weekend... |
| 04:44 | Chouser | and I submitted what may be the ugliest clojure code ever. |
| 04:44 | rhickey | ah |
| 05:45 | hoeck | wow, reflection + macros + clojure proxy rocks! |
| 05:46 | hoeck | just implemented a macro that implements to an interface using an existing object, this way i can implement a PersistentVector on-the-fly and change eg. its equal semanitcs |
| 05:47 | hoeck | semantics |
| 05:49 | rhickey | hoeck: hmm... the interface is one already supported by the object? |
| 05:50 | hoeck | yes, well, I'd like to overwrite a vectors equal method |
| 05:51 | rhickey | hoeck: to do what instead? |
| 05:53 | hoeck | to be able to define 'tuples' where, for example, only the first item is responsible for equality to other tuples |
| 06:44 | mattrepl | what's an efficient way to construct a 2d Java primitive array? specifically, I'm trying to construct Jama.Matrix objects from float[][] types |
| 06:45 | blackdog | to-array-2d ? |
| 06:46 | blackdog | actually make-array takes dimensions |
| 06:47 | rhickey | (make-array Float/TYPE 200 200) |
| 06:48 | Chouser | So for what it's worth, here's the code I submitted: http://n01se.net/paste/j4Cb |
| 06:48 | Chouser | Nobody should use any of that as an example of how to write Clojure! |
| 06:48 | Chouser | Specifically, I think I'm doing Bad Things with flying reads and dosync. |
| 06:48 | mattrepl | I was hoping for something closer to a literal, though I know that's explicitly not supported. to-array-2d only gives Objects, into-array-2d doesn't do primitives. ok, make-array and iterative fill it is |
| 06:50 | mattrepl | what I really could use is make-array to support primitives or float-array to support higher dimensions |
| 06:50 | rhickey | mattrepl: define (init-array [type init-fn & dims] ...) where init-fn is a function of the number of dims, should be pretty useful |
| 06:51 | rhickey | mattrepl: that make-array call makes a primitive float[][] array |
| 06:53 | mattrepl | oh, good. sorry, I missed the last sentence of the description |
| 07:16 | lisppaste8 | rhickey pasted "init-array macro" at http://paste.lisp.org/display/65023 |
| 07:44 | rhickey | mattrepl: you missed: "init-array macro" at http://paste.lisp.org/display/65023 |
| 07:44 | mattrepl | rhickey: thanks |
| 09:26 | cemerick | uytrewsfgtyrew2eryp[]iuytdfgp;['[hj]\\][]\\][' |
| 09:26 | cemerick | \\ |
| 10:04 | cemerick | rhickey: any reason why there's no ArraySeq_byte? |
| 11:21 | Chouser | rhickey: "Out of the Tar Pit" is very interesting. |
| 11:21 | drewr | I've been reading it too. |
| 11:22 | rhickey | Chouser: I thought so - it inspired me to 'go all the way' with FP in Clojure |
| 11:22 | Chouser | I'm curious about Clojure's "let" in light of "Complexity caused by Control" |
| 11:22 | rhickey | I took a different route with state, but share the philosophy of minimizing it |
| 11:23 | rhickey | Chouser: let being a multi-expression block? |
| 11:23 | Chouser | If let bound in parallel, there would be no implicity ordering. |
| 11:24 | Chouser | loop/recur are parallel |
| 11:24 | rhickey | Chouser: you'd just nest lets, then reinvent let* |
| 11:25 | Chouser | yes, but you'd only nest lets when you needed to (since it's annoying and a pain), which would be a hint to the (human) reader that there is actually a dependent expression. |
| 11:26 | rhickey | If you don't reuse names it's equally clear |
| 11:27 | Chouser | to use the paper's example, (let [a (+ b 3) c (+ d 2) e (* 4 f)]) currently implies an order, and you have to look carefully to see that e is arbitrarily at the end instead of somewhere else. |
| 11:28 | Chouser | however if let bound in parallel, e *couldn't* depend on a or c, and the order would be guaranteed arbitrary. |
| 11:28 | Chouser | A nested let would be a clue that there really is a dependency and that the order of the nesting matters. |
| 11:29 | rhickey | I don't think it's a big deal - the real deal is having some sort of declarative programming option, like an embedded prolog |
| 11:30 | Chouser | ok, fair enough. I'll be curious to see what you come up with there. :-) |
| 11:30 | rhickey | no one will tolerate nested lets when they need them, so you'll have to have let*, and then most people will use that by default |
| 11:30 | kotarak | to be honest: I also like more the compiler to figure out, whether something depends on something else or not. Like CPUs do with their pipelines. |
| 11:31 | Chouser | rhickey: yeah, you're probably right. let is very convenient as it is. |
| 11:32 | rhickey | It was more important to me to have only one let |
| 11:32 | Chouser | I'm not at all deeply invested in a parallel let, just thought I'd make an argument from the paper. Thanks for engaging me. :-) |
| 11:34 | rhickey | np, I think the paper is really good provocation, though I don't think they have all the answers |
| 11:42 | fanda_ | hello all! |
| 11:42 | rhickey | hi |
| 11:43 | fanda_ | could you please help me? I am trying to add metadata to some object |
| 11:43 | fanda_ | what's the syntax for it? |
| 11:43 | fanda_ | can I do: (def x 5) |
| 11:43 | fanda_ | and then add any metadata to 'x'? |
| 11:43 | Chouser | maybe a keyword to separate a single let into batches: (let [a 1 b 2 --batch-- c (+ a b)] ...) |
| 11:44 | Chouser | haha. nevermind. ;-) |
| 11:44 | kotarak | fanda_: you can do: (def #^{:some :metadata} x 5) |
| 11:45 | fanda_ | and how do I get this metadata back? |
| 11:45 | fanda_ | - meaning read it from 'x'? |
| 11:45 | Chouser | that's metadata on the symbol x by the way, not on the value 5 |
| 11:45 | Chouser | ^#'x |
| 11:45 | fanda_ | i see! |
| 11:46 | Chouser | which is short for (meta (var x)) |
| 11:46 | fanda_ | thanks! there was my error |
| 11:59 | fanda_ | i saw a note about prolog implementation |
| 11:59 | fanda_ | for inspiration, try: |
| 12:00 | fanda_ | http://en.wikipedia.org/wiki/Unification |
| 12:00 | fanda_ | and example: |
| 12:00 | fanda_ | http://www.newlisp.org/downloads/newlisp_manual.html#unify |
| 12:00 | fanda_ | :-) |
| 12:30 | kotarak | is there a vim user around, who volunteer as a beta tester? I currently work on "Chimp", (Clojure with Limp, but Cimp looked strange..) and I'd like to hear a second opinion before releasing it. |
| 12:31 | Chouser | I vim. |
| 12:31 | kotarak | you vim? :) Would you be interested? |
| 12:31 | Chouser | I dunno what Limp is, but I'll try whatever you've got. |
| 12:32 | kotarak | Put the cursor in a sexp in vim, \es et voila. sexp evaluated in Clojure running in a screen. |
| 12:33 | Chouser | sounds good to me. |
| 12:34 | kotarak | Ok. I'll put it together. Please let me know your impressions. |
| 12:35 | Chouser | I guess I do that now, but I use the mouse to grab and drop the expression into a rlwrap-ed repl. |
| 12:35 | Chouser | so a key sequence would be nice. :-) |
| 12:36 | kotarak | Up to now there are actually three: evalblock, eval-inner-sexp, eval-top-sexp |
| 12:37 | kotarak | The namespaces are automatically changed based on (in-ns) in the file. |
| 12:37 | Chouser | hm! interesting. |
| 12:37 | kotarak | Heuristic: in-ns there, use that one, no in-ns, use 'user |
| 12:37 | kotarak | So will be probably overrideable |
| 12:37 | Chouser | you built the whole thing, or are you using some existing framework? |
| 12:38 | kotarak | I used ideas from VILisp and Limp: run a screen and put some glue around it. It is basically independent from Clojure. It would equally work well with Python or Ruby.... |
| 12:39 | kotarak | VILisp uses some Perl magic, I like the screen solution more, and Limp is too complicated for my taste, too much mentions of SBCL |
| 12:41 | Chouser | screen means this probably won't work out of the box on Windows, right? |
| 12:42 | kotarak | oerks. Yeah. One would need Cygwin. I have no idea how to do this natively on Windows. Sorry. |
| 12:42 | Chouser | no worries, I don't use Windows. Just pondering aloud. |
| 12:43 | kotarak | I used it today at work. So with Cygwin it works. But a native version would be better. |
| 12:44 | kotarak | And it's one-way. No feedback to Vim. |
| 12:45 | Chouser | hm. well, sounds better than what I'm doing now, anyway. |
| 12:46 | Chouser | you launch screen from vim, or vice-versa? Or set up the communication some other way? |
| 12:46 | Chouser | sorry, if you're writing all this up somewhere I'll leave you alone and read it when you're done. |
| 12:47 | kotarak | Start vim and screen separately. Screen tells you the id. On first evaluation request you have to supply the id. This then saved for further calls. |
| 12:47 | kotarak | Communication works via temporary file. |
| 12:47 | kotarak | What you start in the screen is up to you: Clojure, Python, Ruby, whatever. |
| 12:47 | Chouser | sounds interesting. |
| 12:48 | kotarak | ftplugin in Vim can be adapted to different languages, eg. recognizing Sexp for Clojure etc. |
| 12:48 | Chouser | sure. |
| 12:49 | kotarak | And manual use in the screen is also possible in parallel. An advantage over pipe solutions |
| 12:49 | Chouser | I had thought about trying to do something like having vim post code via http to a tcp-port repl running in clojure which could run it and spit back the results. |
| 12:51 | kotarak | The problems I had with something like that is: a) the response you have to handle, b) you probably need Perled or Pythoned vim (is this possible with VimL) |
| 12:51 | Chouser | that, and I'm too lazy to try. ;-) |
| 12:52 | kotarak | :) |
| 12:52 | Chouser | I keep hoping to make the jump to netbeans + enclojure + jvi, but it just hasn't happened yet. |
| 12:52 | Chouser | I'd miss vim, but not viml. |
| 12:52 | kotarak | I already came back again. Netbeans and Eclipse and all these programs are the huuuge. :| |
| 12:53 | kotarak | I'd like to have a mixture between Emacs and Vim: Vim with emacs-style (but Scheme (or Clojure ;)) programming |
| 12:53 | Chouser | yes they are, but vim feels like such a hack. |
| 12:54 | blackdog | if anyone's interested i have done a little work on jedit to integrate clojure |
| 12:54 | Chouser | yes! that's what I want too. |
| 12:54 | blackdog | jedit runs at about 63mb for me, not too big |
| 12:54 | Chouser | you don't think enclojure + jvi == emacs + clojure? |
| 12:55 | Chouser | blackdog: any vi keybindings? :-) |
| 12:55 | blackdog | oh :/ |
| 12:56 | Chouser | sorry, that sounded more snarky than I meant it to be. |
| 12:56 | blackdog | no i didn't take it snarkylike :) |
| 12:56 | Chouser | I don't know anything about jedit. Can I customize key bindings easily? |
| 12:56 | blackdog | yes, it's a very full featured editor, |
| 12:57 | kotarak | Chouser: I don't know, I have some Vim specific stuff floating around. It's sooo hard to leave that behind. (I tried emacs again, this week, but emacs + viper just doesn't catch it) |
| 12:58 | blackdog | i have mostly got a repl running but it's buggy, and syntax hightlighting and i ripped out the browser from enclojure |
| 12:58 | blackdog | but it's only a partially done been meaning to get back to it |
| 13:00 | blackdog | the problem i have with netbeans is the enforced project structures, i like jedit cos it's an editor first, with plugins, but it doesn't dictate |
| 13:00 | Chouser | kotarak: last time I tried emacs (my 2nd or 3rd attempt) I nearly made it -- I had email set up, basic navigation learned, etc, but ended up defeated by emacs/xemacs incompatibilities and lack of support for a code search tool that was pretty much a requirement. |
| 13:01 | Chouser | blackdog: hm... |
| 13:03 | kotarak | chouser: the time I last used it (1998), it took hours to start-up. For programming that's not a problem. But I started to work as a sysadmin to finance my studies and had to edit little files all the day. emacs... baah. So I used vi. And shortly thereafter I always got confused <Esc> in emacs, <C-x><C-s> in vi.... So I totally switched to vim. And now, after 10years of hardwiring my finger nerves, it's hard to switch..... |
| 13:05 | Chouser | well, we could always write a new editor in clojure that feels like vim. |
| 13:06 | kotarak | o.O That's looooot of work. ... Ok. One could restrict the work to the 3% of Vim one actually uses... |
| 13:06 | Chouser | yeah, you're supposed to be laughing by now. |
| 13:07 | kotarak | hahahahahhahahahaha |
| 13:07 | Chouser | that's better, thanks. |
| 13:08 | Chouser | http://activestate.com/Products/komodo_ide/feature_showcase.mhtml |
| 13:08 | Chouser | *sigh* |
| 13:09 | Chouser | how can there be so many editors and yet none just right? |
| 13:09 | arj | ehm emacs is not right? :) |
| 13:09 | Chouser | I guess that's pretty much how I feel about languages too, although Clojure has improved my mood a bit. |
| 13:09 | Chouser | arj: elisp. enough said. ;-) |
| 13:11 | kotarak | That's what I don't like with such project like Eclipse or Netbeans: (from the above link) "interfaces with Perforce, SVN and something else", but eg. not hg. So to write a plugin you first have to grok a 100-pages manual, understand 65 classes and ... latest at that point I loose interest.... |
| 13:12 | Chouser | yeah. :-/ I was hoping that being able to write my editor extensions in Clojure (for NetBeans) would help reduce that pain. |
| 13:32 | kotarak | Chouser: ok. Email is out. I'd like to hear your feedback. But now I go to bed. It's approaching midnight. |
| 13:32 | Chouser | kotarak: thanks. sleep well! |
| 13:32 | kotarak | Chouser: thanks, bye |
| 14:27 | drewr | Dang, someone 1-starred my message today on the clojure group. |
| 14:28 | drewr | I was hoping for some kind of discussion. |
| 14:32 | drewr | (Hoping for list discussion, not IRC. :-)) |
| 14:36 | Chouser | I'm already implementing it for my files (that I've changed). |
| 14:36 | Chouser | But I feel I have that freedom because nobody's using my contrib contributions. |
| 14:36 | drewr | Do you think my message made sense? |
| 14:37 | Chouser | yep, although "lock step" isn't a real possibility. |
| 14:37 | drewr | Sure it is. |
| 14:38 | Chouser | not for both HEADs. |
| 14:38 | drewr | Maybe not with HEAD, but the latest working revision. |
| 14:38 | Chouser | gotta entertain the kids. back in a while. |