2010-06-22
| 00:38 | riddochc | A point of trivia: a google search for java logging over-engineered gives me "About 125,000 results" |
| 00:39 | mae | lol |
| 00:47 | riddochc | Anybody tried buildr for clojure projects? |
| 00:51 | riddochc | (not implying that it's either a good or bad idea, I've not used it.) |
| 04:02 | alexyk | how do we cutely sum a seq ([x y] [x' y'] ...) into [(sum x x'..) (sum y y' ...)]? |
| 04:03 | Chousuke | alexyk: (apply map + seqs) |
| 04:04 | Chousuke | with a vec in front to convert to a vector if you really need to |
| 04:05 | alexyk | Chousuke: why does this work? :) |
| 04:05 | Chousuke | alexyk: well |
| 04:05 | alexyk | ,(apply map + [[1 2][3 4]]) |
| 04:05 | clojurebot | (4 6) |
| 04:05 | Chousuke | ,(map + [1 2] [1 2] [1 2]) |
| 04:05 | clojurebot | (3 6) |
| 04:05 | Chousuke | so just use apply to get the args from the seq |
| 04:06 | alexyk | right; it's late and I don't click with + getting into each positional sum |
| 04:06 | TheBusby | it's a cool feature of map |
| 04:06 | TheBusby | not exactly intuitive though |
| 04:07 | alexyk | TheBusby: so how do you intuit it? |
| 04:07 | alexyk | it's reduce in fact |
| 04:07 | Chousuke | it's as intuitive as mapping over more than one seq can be :) |
| 04:07 | alexyk | arrgh! |
| 04:08 | alexyk | ah ok got it |
| 04:08 | TheBusby | Chousuke: very true |
| 04:08 | Chousuke | it's very useful though so even if it's not obvious it's good that it's there :P |
| 04:08 | alexyk | brrr... I leaned Haskell in the last two weeks and translated my Clojure project into it and also OCaml. A grandiose shootout will come. |
| 04:08 | alexyk | teh amazing result is, Clojure holds its own |
| 04:09 | TheBusby | when I discovered that property of map I instantly loved it |
| 04:09 | Chousuke | did you also try to make the haskell code idiomatic? |
| 04:09 | alexyk | Chousuke: it was helped by other folks and killed Haskell's runtime. |
| 04:09 | Chousuke | using currying and composition is much more common in haskell than in clojure. |
| 04:09 | Chousuke | heh |
| 04:10 | alexyk | JVM is a pretty valuable thing, it turns out, when GC is involved |
| 04:10 | Chousuke | I like haskell, though I haven't invested much effort into it |
| 04:10 | alexyk | OCaml is usually much faster, but not quite here |
| 04:10 | Chousuke | haskell's just good for the concepts |
| 04:11 | Chousuke | and the type system is just awesome |
| 04:11 | TheBusby | hehe, haskell makes you a better clojure developer |
| 04:11 | Chousuke | certainly. |
| 04:11 | Chousuke | (and probably the reverse applies too) |
| 04:11 | alexyk | Chousuke: you're saying that Scala makes one a better Clojure developer then :) |
| 04:11 | alexyk | since Scala is ML on JVM in a way |
| 04:12 | eevar2 | scala is too large and bloated ;) |
| 04:12 | Chousuke | alexyk: I dunno, does scala have type classes and currying and monads? :P |
| 04:12 | alexyk | eevar2: can something be bloated but not too large? :) |
| 04:12 | alexyk | Chousuke: like, yeah? :) |
| 04:13 | alexyk | eevar2: or, too large but not bloated? (well a healthy elephant can be) |
| 04:13 | Chousuke | I know next to nothing about scala |
| 04:13 | alexyk | and a small frog can be bloated but not too large |
| 04:13 | eevar2 | alexyk: how about lazyness and purity? |
| 04:13 | Chousuke | except that every code example I've seen has scared me :P |
| 04:13 | eevar2 | like harrop? |
| 04:13 | alexyk | eevar2: lazy you can be, and pure too! |
| 04:14 | alexyk | lazy is explicit keyword, Stream's a seq, and all containers are either imperative or pure, you pick |
| 04:15 | alexyk | eevar2: you'd kill jdh with that analogy :) |
| 04:15 | alexyk | in any case clojure's an amazing little mouse |
| 04:15 | alexyk | once I'm done checking, I'll post the code so you guys can speedify it even more |
| 04:15 | alexyk | haskell, ocaml and clojure to start with; only for FP langs |
| 04:16 | alexyk | scala will come later when I get time |
| 04:16 | TheBusby | not doing factorial are you? |
| 04:16 | alexyk | TheBusby: Twitter graph mining mind you |
| 04:16 | TheBusby | Ooooooh |
| 04:16 | alexyk | you'd need a 64 GB box to compete |
| 04:16 | alexyk | 32 GB min |
| 04:17 | TheBusby | I'll definitely be interested in this then |
| 04:17 | alexyk | TheBusby: I'll post to the clojure group soonish :) |
| 04:17 | alexyk | later... |
| 04:17 | TheBusby | thank you, I'll be looking forward toit |
| 04:55 | serp_ | .commadns |
| 07:47 | spariev | hi, is it possible to change log level per thread with log4j ? |
| 07:47 | Licenser | greetings spariev and I'm sorry I don't know |
| 07:47 | spariev | not really clojure-related question, sorry |
| 07:47 | spariev | hi Licenser |
| 07:48 | Licenser | no reason to be sorry, people here are usually more friendly and more helpful then in #java :( |
| 07:51 | cemerick | spariev: you can bind a log4j logger, and set whatever level you want on it. That's not a per-thread log level, but achieves the same result. |
| 07:52 | cemerick | Just make sure the logger's prefix is such that it finds the parent logger you'd like to have its messages flow through |
| 07:53 | cemerick | something like (Logger/getLogger (str (.getName *ns*) \- (.getName (Thread/currentThread))) |
| 07:53 | Licenser | it seems 95% of the clojure proects are either wrapper libraries (making java stuff clojury) or in she rare cases that are not java interfaces they are data heavey (as in list vecs maps) or string heavy |
| 07:54 | spariev | cemerick: very cool, thanks, I'll try it |
| 07:54 | cemerick | Licenser: trying to find some testcases for the numerics changes? |
| 07:54 | spariev | java logging frameworks never cease to amaze me |
| 07:54 | Licenser | cemerick: yes, mostly I want to get my hands one some code that would be actually benefit from the changes and that is really hard |
| 07:54 | cemerick | spariev: indeed, they're quite flexible ;-) |
| 07:54 | Licenser | I don't have any and about every |
| 07:54 | Licenser | # |
| 07:55 | Licenser | named clojuran seems not to have any either - at least not on github |
| 07:55 | cemerick | we've got a fairly large body of math-heavy code, but I'm nowhere near it at the moment |
| 07:55 | Licenser | cemerick: what I want to do is to actually see how the changes (either direction) would impact people |
| 07:55 | Licenser | cemerick: how much have you optimized it? because if it is already optimized then there'll be hardly any changes I fear |
| 07:56 | cemerick | I didn't write it, so I can't say. :-) |
| 07:56 | Licenser | but if you get near it and it is open enough that I could get a copy for playing with it I'd be very grateful |
| 07:56 | Licenser | heh |
| 07:57 | Licenser | what I'd love for some tests is code that A) does some math but isn't purely math B) is benchmarkable C) isn't optimized too much |
| 07:57 | Licenser | I know that is much to ask for but oddly enough I have problems to find anything that at least satisfies A |
| 07:58 | Licenser | I slowly get the feeling that noone will actually notice the changes, whatever they are since it is not what clojure is used for |
| 07:59 | Licenser | I see a lot of working with seqs, transforming data, sometimes string manipulations, tons of java interop but in many projects you've a hard time to find a + at all o.O |
| 07:59 | cemerick | People that do math-heavy things are unlikely to be releasing it as open-source, unless they're just tinkering. |
| 07:59 | Licenser | and if you do it is so rare and in so unimportant places that it does not seem so irrelevant that the impact is minor |
| 07:59 | karmazilla | cemerick: be careful about get'ting log4j loggers with generated names |
| 08:00 | Licenser | cemerick: might be, then again I don't look for math heavy I am already hapy with math at all |
| 08:00 | cemerick | karmazilla: hrm, do they hang around in perpetuity? |
| 08:00 | karmazilla | yes |
| 08:00 | Licenser | I think about our every day work not the few special cases |
| 08:01 | cemerick | Good to know. If the generated names are namespace + thread name, that's not a very large set of generated names. *shrug* |
| 08:02 | cemerick | Licenser: I think it's pretty safe to say that there's a lot of math going on, given the survey results. Math is often close to where real money is made though, so people are far less likely to share from that department. |
| 08:02 | Licenser | *nods* |
| 08:02 | Licenser | but it's hard to reason about if people don't share |
| 08:03 | Licenser | I've seen claims that things are 10% faster, but I didn't found any examples for it. The one incanter example I found that actually took some time even got 10% slower with the equal branch |
| 08:05 | cemerick | As you said, stuff that's already in a loop body and hinted properly isn't going to get any boost -- that stuff was already essentially running at Java speeds. |
| 08:06 | Licenser | *nods* |
| 08:06 | cemerick | it's the cross-fn stuff that'll benefit most, and presumably there'll be less cognitive overhead in order to get optimized behaviour across the board. |
| 08:06 | Licenser | well the cross fn stuff will be boxed anways as I understood unless you hint the fn's too in which case you don't see a change since it would be fast already right? |
| 08:06 | lpetit | hello there |
| 08:06 | Licenser | hi lpetit |
| 08:07 | cemerick | Licenser: no, if the fns are :static and hinted, then boxing should be avoided, which was never the case before. |
| 08:07 | lpetit | you guys seem ready to push google groups to its limits regarding the number of posts for the same thread :) |
| 08:07 | Licenser | ah okay |
| 08:07 | Licenser | lpetit: working on it |
| 08:08 | lpetit | I see :) |
| 08:08 | Licenser | cemerick: ah I see true, but this isn't affected by things like primitive literals or not boxing math ops then |
| 08:08 | cemerick | right, those are orthogonal issues |
| 08:08 | Licenser | what I'm looking for is the 'out of the box (aka w.o. optimisation)' speedup |
| 08:09 | Licenser | I know I tried to say that :P |
| 08:09 | cemerick | well, whether that happens depends on which defaults rhickey chooses |
| 08:09 | Licenser | but that is what the whole argument in the goroup is about |
| 08:09 | Licenser | cemerick: *nods* and what I would like to do is to measure the changes in real cases since I think it is somthing that is missing yet in the entire discussion |
| 08:10 | Licenser | we have claims from both sides which is better in the end but I've not seen any real measurements that are based on reality :P |
| 08:10 | Licenser | the thing they call science I think. |
| 08:11 | cemerick | You're never going to get a good enough sample size to do real science on this. |
| 08:11 | cemerick | Besides which, there's taste and personal preferences mixed up in it. |
| 08:11 | rhickey | Licenser: there are huge classes of things that don't yet exist in Clojure because these optimizations aren't there. For instance, you'll find no helper methods that take primitives, no competitive versions of the alioth shootout stuff etc. Essentially, there are things for which Clojure wasn't suitable (maybe possible but too hard) for which it now is |
| 08:12 | Licenser | heh |
| 08:13 | Licenser | rhickey, cemerick what I wanted to try is to bring some hard (at least harder then most of them in the discussion now) facts into the discussion. |
| 08:13 | rhickey | cemerick: yes, not useful in and of itself, but not being there leave the 'Scala is faster than Clojure' meme wide oper |
| 08:14 | cemerick | rhickey: yeah, I know -- good numbers there are good PR. I guess I'm just not in the mood this morning. :-) |
| 08:16 | rhickey | Licenser: count the number of (int some-literal)'s in gvec.clj. Missing any one of them, performance would suck terribly versus the vector written in Java. Every time I wrote one, I thought 'this is stupid', and whle I was willing and able to fo that correctly, most people won't be |
| 08:18 | rhickey | Anyone who is consuming Clojure and simultaneously saying primitives aren't important is blind, or just conceding writing things like Clojure to other languages |
| 08:18 | rhickey | I wrote Clojure to replace Java in my work, not Ruby |
| 08:18 | cemerick | heh |
| 08:19 | rhickey | Ruby was never a contender for the kind of work I do, nor for the work of people like me |
| 08:19 | cemerick | rhickey: you're always good for a quotable |
| 08:20 | Licenser | rhickey: I'd have to shamefully admit I don't know what work you do aside from writing clojure :P |
| 08:20 | clojurebot | clojureql is http://gitorious.org/clojureql |
| 08:21 | cemerick | Now I just need to get over primed operator fns and such. |
| 08:21 | Licenser | I tried today how bad it would be to have non boxing + catch the overflow and 'greacefully' go down to boxing +. Sadly this seems not an option :( |
| 08:21 | rhickey | cemerick: well, there's still the BigInteger contagion option I first produced |
| 08:22 | rhickey | cemerick: with that, there's substantially less need for primed ops |
| 08:22 | Licenser | I think if it would be possible to do this fast it'd be great |
| 08:22 | cemerick | rhickey: and it's still contagious even with the current fast ops, no? |
| 08:22 | rhickey | cemerick: no, right now everything is fully reduced |
| 08:23 | cemerick | I wonder if both could be present -- primed ops as well as contagious bigs. |
| 08:23 | rhickey | which means yo ucan't drive the result size through the input type |
| 08:23 | rhickey | cemerick: yes, they would, but as I said, you'd rarely need the primes since you could say (foo 1N) |
| 08:24 | rhickey | as it stands now, people need to make a choice to use primed ops inside, with contagion use of normal ops would work well with bigint input |
| 08:24 | cemerick | It seems a lot of people like the primed ops, just for clarity, but I suspect those that don't do a lot of math would get confused by primed ops and would be far happier with general advice of "append an N on your literals to get 'correct' math". |
| 08:25 | rhickey | cemerick: agreed, the tradeoff is on the equality issue, as with contagion it would be more likely to have 42 and 42N in the same program |
| 08:26 | rhickey | you really need to go back to equiv = in order to not have that be maddening |
| 08:26 | cemerick | rhickey: I thought you were favoring dropping equiv in general? |
| 08:26 | rhickey | OTOH, equiv = allows you to box all non-bigints as Longs, which I think will be more escape-analysis friendly than the smallest-box method |
| 08:27 | rhickey | cemerick: I just put all of the things that interact on the table, switching back and forth is easy |
| 08:28 | rhickey | But while everyone has an opinion, there are real engineering tradeoffs here. My sensibilities don't like equiv =, but I might take it to make all of the other pieces fit |
| 09:16 | fyuryu | dnolen: I saw you forked clj-processing on github. Planning to make work with prim branch? |
| 09:18 | dnolen | fyuryu: heh I thought there was a bug so I forked it, but I saw that I was just out of date. I haven't seen issues with the prim branch I don't think, have you ? |
| 10:03 | fyuryu | dnolen: I tried a couple examples and everything worked fine. But I was thinking about adding ^:static to some (most?) fns and benchmark a bit |
| 10:19 | AWizzArd | ,(class (byte-array 1)) |
| 10:19 | clojurebot | [B |
| 10:20 | AWizzArd | Is ^[B the type hint for byte-arrays then? |
| 10:25 | chouser | ^"[B" |
| 10:26 | chouser | I think ^bytes works in a lot of cases too |
| 11:14 | chouser | hehe. But I want my gazelles to be *slow* so I can eat them more easily. |
| 11:20 | lpetit | chouser: :) |
| 11:36 | mattrepl | hrmm, I'm seeing an IllegalStateException with a message stating that a var is unbound when used within a deftest |
| 11:38 | cemerick | Man, peanut galleries are rough. |
| 11:39 | mattrepl | (something else going on, nm) |
| 11:49 | Licenser | there is something I'm not sure about with the non auto promoting math will (+ 1 (num 1)) be a long or a Number? |
| 12:11 | dnolen | Licenser: + doesn't return primitives if it can't return primitives |
| 12:25 | Licenser | dnolen: but it could return primitives :P |
| 12:58 | dnolen | hmm |
| 12:58 | dnolen | so clojure.contrib.json still converts the strings keys to Clojure keywords |
| 13:05 | cemerick | dnolen: which was made the default recently |
| 13:07 | joshua-choi | ,(class (seq "aa")) |
| 13:07 | clojurebot | clojure.lang.StringSeq |
| 13:07 | joshua-choi | ,(class (next (seq "aa"))) |
| 13:07 | clojurebot | clojure.lang.StringSeq |
| 13:08 | joshua-choi | Question. Does a StringSeq hold its entire source string in memory? |
| 13:08 | dnolen | cemerick: huh, seems odd since "foo bar" is a valid JSON key, but read-json will produce bad output from that. |
| 13:08 | joshua-choi | If it's next-ed, etc. |
| 13:09 | cemerick | dnolen: the attractiveness of keywords-as-keys is hard to resist for most :-) |
| 13:10 | cemerick | (read-json content false) will avoid the keywordization. |
| 13:10 | dnolen | cemerick: oh! nice |
| 13:10 | cemerick | dnolen: yeah, an option was always there, the default was just flipped for 1.2 |
| 13:11 | dnolen | cemerick: sweet, thx! |
| 13:11 | cemerick | my problem is that I now tend to produce maps with keywords containing dashes, which you can't get with obj.slot notation in js :-/ |
| 14:27 | bigwavejake | what does the -> operater do? |
| 14:27 | bigwavejake | it's hard to google for "clojure ->" |
| 14:28 | Hun | evaluate forth style |
| 14:28 | Hun | ,(-> 5 (+ 3) (* 4)) |
| 14:28 | clojurebot | 32 |
| 14:28 | bigwavejake | where can I find the doc for it? |
| 14:28 | qbg | ,(doc ->) |
| 14:28 | clojurebot | "([x] [x form] [x form & more]); Threads the expr through the forms. Inserts x as the second item in the first form, making a list of it if it is not a list already. If there are more forms, inserts the first form as the second item in second form, etc." |
| 14:29 | chouser | also here: http://richhickey.github.com/clojure/clojure.core-api.html#clojure.core/-> |
| 14:29 | bigwavejake | ok... thanks! |
| 15:06 | systay | what does this mean? "java.lang.IllegalStateException: Var src.www.controller/post is unbound. (NO_SOURCE_FILE:0)" |
| 15:06 | chouser | it means the var was declared but never given a root value, and then you tried to use it |
| 15:07 | chouser | like: (def foo) foo |
| 15:09 | systay | hmm... that makes sense. it's just that I did give a value... |
| 15:09 | systay | well, obviously I didn't... :) |
| 15:11 | chouser | :-) |
| 15:11 | chouser | how do you think you gave it a value? |
| 15:11 | chouser | with def, binding, or what? |
| 15:14 | systay | git://gist.github.com/448916.git |
| 15:14 | systay | sorry, http://gist.github.com/448916 |
| 15:17 | chouser | hm. you have two things named post -- a var holding a fn and a local holding whatever new-node returns |
| 15:17 | systay | ouch |
| 15:18 | systay | that must confuse clojure, yes... |
| 15:18 | chouser | well, it's more likely to confuse you. :-) |
| 15:18 | chouser | is 'relate' a macro? |
| 15:18 | systay | I thought that the inner post, since it was defined in the "let"m wouldn't show up outside |
| 15:19 | systay | relate is from neo4j |
| 15:20 | chouser | I don't see a with-tx in neo4j |
| 15:20 | dnolen | systay: are you using clojure-neo4j for creating a blog? |
| 15:21 | chouser | I see a with-neo and a tx macro |
| 15:21 | systay | dnolen: well, I need a real project to try things out on |
| 15:22 | systay | chouse: I'm using bobby's fork of neo4j |
| 15:22 | systay | chouse: of the neo4j bindings, that is |
| 15:22 | chouser | anyway, if that's not the problem, I'm not seeing it. relate should be getting the new-node result, and I don't know what else would be using the name 'post' |
| 15:24 | Licenser | I for once don't care how fast the gazelle is I eat, as long as it is tasty, I when it comes to that by all means I take the turtle gazelles they are easier to catch! |
| 15:26 | chouser | systay: what line is the exception pointing to? |
| 15:27 | systay | chouser: solved it... |
| 15:28 | systay | I hadn't closed the def above post... |
| 15:28 | systay | damn you parenthesis! |
| 15:28 | chouser | heh |
| 15:29 | dnolen | it would be cool if someone made something like Gremlin for clojure-neo4j |
| 15:50 | systay | is there any way to expand exceptions? I'd love to see the stacktrace of some of the exceptions I see |
| 15:51 | TimMc | No you wouldn't. :-( |
| 15:51 | chouser | (.printStackTrace *e) |
| 15:52 | systay | nope, I wouldn't :( |
| 15:53 | chouser | They're chock full of useful details! |
| 15:55 | TimMc | I don't know *what* I'd do without the clojure.lang.Compiler.eval lines! |
| 15:55 | TimMc | But more importantly, all the "invoke"s. |
| 15:56 | Chousuke | clojure.stacktrace has a pretty-printer |
| 16:01 | cemerick | It seems like stacktrace (or something similar) should really get bolted into the REPL. Yesterday wouldn't have been too soon. |
| 16:04 | chouser | always showing only the root-cause isn't acceptible. |
| 16:05 | chouser | that sounded harsher than I meant |
| 16:05 | cemerick | I know I was offended. |
| 16:05 | cemerick | ;-) |
| 16:05 | chouser | always showing only the root cause will sometimes obscure the most important information. |
| 16:06 | chouser | cemerick: I knew you would be |
| 16:06 | cemerick | I think, as a first pass, filtering out all clojure.* frames in intermediate causes would help a lot. |
| 16:07 | cemerick | 35 LazySeq.seq calls aren't fun, etc. |
| 16:07 | cemerick | But regardless of the right tradeoffs, error reporting is probably the #1 gripe at the moment. |
| 16:08 | chouser | it'd be worth experimenting with some filtering/reporting options and see what seems to work well over time |
| 16:08 | TimMc | Maybe a Bayesian spam filter for stacktraces. :-P |
| 16:08 | chouser | heh |
| 16:08 | chouser | with a rhickey profile and a cemerick profile available by default |
| 16:09 | cemerick | ha! |
| 16:11 | chouser | huh. clojure.main already treats compiler exceptions differently from others. |
| 16:15 | KirinDave | silent consumption still? |
| 16:16 | dnolen | My least favorite exception is "No message" |
| 16:17 | KirinDave | Aka, "We're sorry Programmario, but your macro is in another castle." |
| 16:17 | chouser | eh |
| 16:17 | chouser | er, heh |
| 16:17 | KirinDave | Seriously, that is the worst part of clojure macros. |
| 16:17 | KirinDave | I really miss plt-scheme's system. |
| 16:18 | dnolen | KirinDave: think it could be ported to Clojure? |
| 16:19 | chouser | cljure.main/root-cause is the same (but slightly tighter code) as clojure.stacktrace/root-cause |
| 16:19 | KirinDave | dnolen: It'd be tough to do it properly. You could do an MBE system, but the symbol scoping stuff requires a lot of work. |
| 16:41 | alexyk | hey guys: I plan a shootout between clojure, haskell, and ocaml processing huge twitter graph. I have all code already. Each lang gets its own repo. Haskell's called husky and ocaml's called clams. I need a short anumal name for clojure. Any idea? |
| 16:41 | alexyk | I leaned towards mouse as clojure is really small. Anything better? |
| 16:41 | alexyk | or moujure |
| 16:41 | alexyk | (kidding) |
| 16:41 | alexyk | any animal with clo- or -jure will be considered. |
| 16:43 | chouser | hedjhog |
| 16:43 | rfg | badjure |
| 16:43 | jkkramer | cockatoo |
| 16:43 | chouser | badger is cool |
| 16:43 | alexyk | chouser: rfg: awesomer and awesomester! |
| 16:43 | alexyk | badger is good |
| 16:43 | alexyk | jkkramer: cockortoo? |
| 16:44 | alexyk | jkkramer: that's for coq projects |
| 16:44 | alexyk | rfg: badjure is a Grisham novel. Runaway badjure. |
| 16:45 | alexyk | Goodjear tires... |
| 16:45 | jkkramer | i was thinking of the bird angle, for twitter |
| 16:45 | alexyk | jkkramer: ah! deep |
| 16:47 | lancepantz | ooo |
| 16:47 | lancepantz | Subject: [Clojure] Milestone "Release 1.2" updated |
| 16:51 | Chousuke | badger is a good name, because http://www.youtube.com/watch?v=c81bcjyfn6U |
| 16:52 | miner49r | alexyk: a conure is kind of parrot |
| 16:52 | rfg | or http://www.youtube.com/watch?v=bzHlDxyO8SI |
| 16:53 | rfg | :) |
| 16:54 | qbg | We're here tracking the Clojure in its native habitat. As you can see, hiding beneath its small exterior is a powerful beast... |
| 16:57 | Licenser | there is an odd problem with all things using threads - it does not quit :( how does this come? |
| 16:58 | Licenser | the moment I use future or pmap my program won't stop any more |
| 16:58 | alexyk | beneath its small leiningen we see a seething maven... |
| 16:58 | chouser | once the agent pools are used, the repl will not quit automatically unless you shutdown-agents |
| 16:58 | rfg | Licenser: I had an issue the other day where I failed to cancel a future. |
| 16:58 | alexyk | its repl is sharp and forked |
| 16:58 | Licenser | ah thanks |
| 16:58 | alexyk | and its swank's plumage is colorful |
| 16:59 | qbg | It's full of slime! |
| 17:06 | StartsWithK | hi |
| 17:07 | StartsWithK | found a small problem with clojure.walk, http://paste.pocoo.org/show/228702/ |
| 17:07 | TimMc | Watch as it parens its feathers! |
| 17:07 | StartsWithK | it removes all the metadata while walking |
| 17:12 | TimMc | alexyk: Lungfish, because it is a Lisp that lives in Java land? |
| 17:12 | qbg | No, Clojure is the Borg |
| 17:14 | StartsWithK | where do i report the bug? i don't see a link on assembla to open a new ticket |
| 17:15 | mmarczyk | StartsWithK: you'd better post to the mailing list first, but for the record, there's a link to open a new ticket on this page: http://www.assembla.com/spaces/clojure/support/tickets |
| 17:17 | StartsWithK | mmarczyk, it says i have to be a watcher.. i don't want to pay for assembla just for one bug |
| 17:17 | StartsWithK | but yes.. i'll post on ml |
| 17:18 | StartsWithK | oh.. they have a free plan :) |
| 17:18 | mmarczyk | StartsWithK: you don't have to pay to register, or indeed to use it for foss projects, you'd only need to pay if you needed stuff like private repos etc. |
| 17:18 | Licenser | ,(byte \a) |
| 17:18 | Licenser | $(byte \a) |
| 17:18 | sexpbot | java.lang.ClassCastException: java.lang.Character cannot be cast to java.lang.Number |
| 17:18 | Licenser | $(int \a) |
| 17:18 | sexpbot | => 97 |
| 17:18 | Licenser | ^- odd behaviour |
| 17:20 | Licenser | is there a difference between (count "abc") and (.length abc)? |
| 17:20 | mmarczyk | isn't a byte too narrow for a char? |
| 17:21 | TimMc | $(int \✩) |
| 17:21 | sexpbot | => 10025 |
| 17:21 | mmarczyk | oh, cool star character! need to learn to type those! |
| 17:22 | Licenser | mmarczyk: I'm not sure |
| 17:22 | qbg | Licenser: Yes, the first one works ;) |
| 17:23 | Licenser | qbg: I ment under the assumption that I didn't forget the "" |
| 17:23 | mmarczyk | Licenser: um, see above; JVM chars are 2 bytes long (UTF-16) |
| 17:23 | Licenser | and the second one could work to if I def'ed abc as "abc" :P |
| 17:23 | Lajla | mmarczyk, have you missed me? |
| 17:23 | Lajla | After all, together we are the second and fifth best programmers in the world. |
| 17:24 | Licenser | hmm me bing the best? |
| 17:24 | mmarczyk | Licenser: note that I'm not claiming that this explains why the exception message you quoted makes sense ;-) |
| 17:24 | Lajla | licenser, no the microsoft chief software architect |
| 17:24 | Licenser | mmarczyk: Agreed |
| 17:24 | Licenser | Lajla: ah okay |
| 17:24 | qbg | Licenser: |
| 17:24 | Licenser | can't beat that guy, after all he manages to keep is job despite of windows |
| 17:25 | qbg | Using count is less hosty |
| 17:25 | Licenser | heh |
| 17:25 | Licenser | I figured that but will count convert it into a seq first and then actually count stufF? |
| 17:26 | mmarczyk | Licenser: nope, it's backed by a static method of clojure.lang.RT which does the sensible thing for all arguments |
| 17:26 | qbg | And if the compiler doesn't know it is going to be a string, there is reflection overhead |
| 17:27 | mmarczyk | actually the reflection overhead is there for .length too |
| 17:27 | Lajla | mmarczyk: http://codepad.org/2NUYHYWp |
| 17:27 | Licenser | ah okay |
| 17:27 | qbg | (I was talking about .length) |
| 17:27 | Licenser | smart rhickey! |
| 17:27 | Lajla | It is possible for an algorithm to detect tail-recursion lexically and then rewrite code, right? |
| 17:27 | Lajla | I still don't understand why it is not possible, I mean, there should be a reason, but I don't see it. |
| 17:27 | mmarczyk | Lajla: um, we've been through this already :-P |
| 17:27 | Licenser | the reflection is there only for lenght isn't it? |
| 17:27 | Lajla | mmarczyk, and we haven't answered me! |
| 17:28 | mmarczyk | Lajla: I must say I enjoyed that conversation in many ways, if that answers your previous question :-) |
| 17:28 | Lajla | mmarczyk, but tail-recursion is lexically _decidable_! |
| 17:28 | mmarczyk | what does not at all follow is that I want to reiterate the same stuff again |
| 17:28 | Lajla | Surely it can be algorithmically re-written to a form using loop/recur by a praeprocessor? |
| 17:28 | mmarczyk | look, nobody's claiming that you can't decide tail-recursion |
| 17:28 | mmarczyk | well of course not |
| 17:29 | Lajla | mmarczyk, why not? |
| 17:29 | Lajla | I don't get it. |
| 17:29 | Licenser | Lajla: I think tail recursion can be the case even if it is not lexically decidable |
| 17:29 | Lajla | I wish for you to explain it. |
| 17:29 | mmarczyk | you could rewrite *local* tail calls, say within a single function, by inlining any locally declared "subfunctions" |
| 17:29 | mmarczyk | etc. |
| 17:29 | Licenser | as in you can decide a sub case of the problem but not all |
| 17:29 | Lajla | licenser, then it is not deciding of course. |
| 17:29 | mmarczyk | which is something I mentioned last time round |
| 17:29 | mmarczyk | *but* for general tail recursion to work |
| 17:30 | Lajla | But I believe that Steele and Sussman proved that tail recursion is lexically decidable with lexical scope. |
| 17:30 | mmarczyk | you need to be able to handle a tail call to an arbitrary function |
| 17:30 | Lajla | After all, how else could they require it in Scheme? |
| 17:30 | mmarczyk | Scheme controls its own stack discipline |
| 17:30 | Licenser | Lajla: I think the point is, rhickey does not want to say 'we have tail recursion' when the truth is 'in some cases we have tail recursion' |
| 17:30 | mmarczyk | Clojure doesn't |
| 17:30 | Lajla | Hmm, maybe that's it. |
| 17:30 | qbg | TCO is easy to implement (for simple cases at least) if you are doing everything yourself |
| 17:30 | Lajla | But tail-recursion is only a special case of tail-call optimization anyway. |
| 17:30 | mmarczyk | Licenser: that's not accurate, he really *can't*, for fundamental reasons, have tail recursion *and* have Clojure functions be called through the JVM calling convention |
| 17:31 | TimMc | Lajla: What happens here? (defn foo [bar] (bar)) |
| 17:31 | mmarczyk | Lajla: well with this terminology, Clojure does give you tail recursion with recur |
| 17:31 | Lajla | I shall not praetend to understandthese JVM calling conventions. |
| 17:31 | Licenser | mmarczyk: I realize that, what I ment is clojure could have a automatic TCO for the simple cases but doing this would give the false impression clojure would do TCO for all cases |
| 17:31 | mmarczyk | Lajla: I can see multi-level recur -- "nested loops" -- as possible, though I'm hardly expert enough to want to claim this as a certainty |
| 17:31 | cemerick | Lajla: relevant to this discussion, each method call consumes stack, full stop. |
| 17:31 | TimMc | Lajla: The call to bar is in a tail position, but I don't think the compiler can do much about it. |
| 17:32 | Lajla | TimMc, I see your point. |
| 17:32 | mmarczyk | Licenser: ah, as in "we could have TCO'd self calls" -- true, I misunderstood you |
| 17:32 | Lajla | You mean calling (foo foo) right? |
| 17:32 | TimMc | Sure, that's one possibility. |
| 17:32 | mmarczyk | Lajla: Clojure function calls are ultimately Java method calls |
| 17:32 | Licenser | *nods* and I think the decision made was: Either we have automated TCO or not, we don't go half way just to have a buzz word |
| 17:32 | Lajla | Well then I see your point. |
| 17:33 | Licenser | and I actually like it since it forces you to realize when you have TC's and when not |
| 17:33 | mmarczyk | Lajla: there's nothing you can do about TCO-ing Java method calls |
| 17:33 | Lajla | mmarczyk, I guess. |
| 17:33 | mmarczyk | Lajla: and I said all that last time round! :-P |
| 17:33 | Lajla | I would have implemented it via a CPS though |
| 17:33 | Lajla | You didn't |
| 17:33 | Lajla | You said you loved me and wanted to stroke my hair. |
| 17:33 | mmarczyk | Lajla: we have quite significantly different recollection of that conversation :-P |
| 17:34 | Lajla | mmarczyk, the nihilists have won, sorry. |
| 17:34 | Lajla | Reality is not objective. |
| 17:34 | cemerick | Lajla: I think kawa uses CPS, and gives you full TCO. It's brutally inefficient though. |
| 17:34 | Licenser | I double Lajla, that was actually what mmarczyk said |
| 17:34 | Lajla | To say that one person is insane is saying that same as that all other people are safe that person. |
| 17:35 | Licenser | sclala code looks so ugly to me :( |
| 17:35 | Raynes | Is there another MongoDB library (a la http://github.com/somnium/congomongo) that isn't ancient? |
| 17:35 | Lajla | cemerick, kawa targets the JVM? |
| 17:35 | cemerick | yes |
| 17:35 | Raynes | I'm considering forking the FleetDB client library and updating it to make it 1.2 compatible tonight. Don't have many options. |
| 17:35 | Lajla | The only reaosn I can think for Scheme compilers not targeting C-- is that they are ignorant of its existence. |
| 17:35 | Licenser | Raynes: do you want to cheat on me! |
| 17:35 | Raynes | Licenser: Too many StupidDB instances!!! Too many!!! |
| 17:35 | Raynes | :p |
| 17:35 | mmarczyk | Lajla: see http://clojure-log.n01se.net/date/2010-06-09.html#01:21d and around |
| 17:36 | TimMc | $(int \丏) |
| 17:36 | sexpbot | => 19983 |
| 17:36 | Licenser | Raynes: there should only be one! or at least one per file |
| 17:36 | Raynes | Plus I'm bored, and have never used a db that isn't Stupid. |
| 17:36 | Raynes | :p |
| 17:36 | Lajla | I am on the internet, I am famous. |
| 17:36 | Raynes | There is one per file. |
| 17:36 | Licenser | which is fine! |
| 17:36 | Raynes | Which is a *lot*. |
| 17:36 | TimMc | Curious. When I ran (int \丏) in `lein repl`, I got 15. |
| 17:36 | Raynes | When about 5 sexpbot plugins run a db. |
| 17:36 | Raynes | :p |
| 17:36 | Licenser | so? |
| 17:37 | Licenser | they are working aren't they? |
| 17:37 | mmarczyk | TimMc: using a funny terminal encoding? |
| 17:37 | TimMc | Probably. |
| 17:37 | Raynes | I mostly just need to try out different things though. I'm almost a db virgin. |
| 17:37 | Raynes | Indeed, they work. I need to see how much of an effect they have on memory consumption. |
| 17:37 | Licenser | Raynes: try couchdb |
| 17:37 | Licenser | mongodb sucks |
| 17:37 | mmarczyk | Licenser: why'd you say that? :-) |
| 17:38 | Licenser | mmarczyk: because they refuse to support SPARC hosts |
| 17:38 | Raynes | Good idea. |
| 17:38 | Licenser | I whine to them once a month and they keep refusing |
| 17:38 | Licenser | which reminds me |
| 17:38 | mmarczyk | Licenser: oh... that's really awful :-( ;-) |
| 17:38 | Licenser | no it actually is really awful |
| 17:38 | Licenser | since I loved mongodb but I can't use it |
| 17:39 | Licenser | since I run on sparc |
| 17:39 | mmarczyk | um, wait |
| 17:39 | Raynes | Oh boy. |
| 17:39 | mmarczyk | do you, right now, chat with us from a sparc machine? |
| 17:39 | Raynes | http://github.com/danlarkin/clojure-couchdb DB people just hate being up-to-date, don't they? |
| 17:39 | Licenser | no, I chat with you from a intel, but my server runs on sparc |
| 17:39 | danlarkin | Hmm, I thought I deleted that :) |
| 17:40 | Licenser | I could chat from the spark too if I'd install irssi, but I kind of like the clicky stuff from my mac |
| 17:40 | mmarczyk | Licenser: ah... well, still, that's cool :-) |
| 17:40 | Licenser | so I've two more sparc systems next door |
| 17:40 | Licenser | mmarczyk: it is, ask Raynes they aren't even that bad :P |
| 17:40 | TeXnomancy | danlarkin: github needs a "this repo is deprecated; please see $FOO" marker |
| 17:40 | Raynes | Sparc's cool. It runs sexpbot. :D |
| 17:40 | Licenser | is stupiddb the only db that runs well with 1.2? :P |
| 17:41 | Licenser | actually clojure runs darn well on sparc |
| 17:41 | danlarkin | gaha, now it's really deleted |
| 17:41 | Raynes | Licenser: It's the only one I can find that's purposely compatible with 1.2 |
| 17:41 | Licenser | that is terrible in a funny way |
| 17:41 | mmarczyk | Licenser: and does CouchDB currently offer a reasonable way of running non-system-wide instances? |
| 17:41 | mmarczyk | Licenser: ...should have said "private instances" actually... |
| 17:42 | mmarczyk | sth like desktop-couch, I guess |
| 17:42 | Licenser | hmm good question, but since there are solaris zones which are darn cheep I don't realy care :P |
| 17:42 | Licenser | I can spawn one for every person who is on the system if I'm boored |
| 17:43 | mmarczyk | dnolen: same question then...? |
| 17:43 | dnolen | mmarczyk: what do you mean by system-wide? |
| 17:44 | Licenser | also couchdb runs on erlang, that alone is cool |
| 17:45 | mmarczyk | dnolen: well, the standard story for running CouchDB seems to be as a service started, say, with an /etc/init.d script |
| 17:45 | mmarczyk | it binds to a port ~5.9k, I think? then if you can cram however many dbs you like in there |
| 17:46 | dnolen | mmarczyk: you can start it directly, though you'll probably have to do some tweaking to specify which port to run the new instance. |
| 17:46 | dnolen | mmarcyzk: but one running instance of CouchDB can have multiple DBs |
| 17:46 | dnolen | from what I've heard it can handle many concurrent connection just fine, that's it's strong point |
| 17:46 | mmarczyk | dnolen: which I'm liable to do something unpleasant to with my "fooling around" code |
| 17:47 | mmarczyk | or maybe not, but anyway, makes me feel uneasy to work alongside "production" data, even on my own box |
| 17:47 | dnolen | the most powerful aspect of CouchDB is replication, you can do fun stuff with that. |
| 17:47 | dnolen | CouchDB won't corrupt your data it uses MVCC |
| 17:48 | dnolen | differents versions of a document preserved |
| 17:48 | Lajla | mmarczyk, the JVM, does it allow jumps? |
| 17:48 | mmarczyk | the Canonical people seem to believe it necessary to have a separate desktop-couch project for spawning per-user instances for config data |
| 17:48 | mmarczyk | Lajla: nope |
| 17:48 | Lajla | I find it abstract that a virtual machine has 'method calls' |
| 17:48 | Lajla | AH |
| 17:48 | Lajla | That explains it. |
| 17:48 | mmarczyk | dnolen: yeah, I know about their storage model |
| 17:48 | Lajla | You told me this JVM was as simple as the average CPU instruction set. =( |
| 17:49 | Lajla | You lied to me. |
| 17:49 | mmarczyk | (about CouchDB) that's why I think Couch is super-cool |
| 17:49 | mmarczyk | just haven't got 'round to understand how I'm actually supposed to use it :-P |
| 17:50 | mmarczyk | Lajla: yet another case of differing perspectives on "simple" ;-) |
| 17:50 | mmarczyk | but I have told you explicitly that there are no jumps :-P |
| 17:51 | Lajla | This is an outrage! |
| 17:51 | mmarczyk | except through return, break/continue (multi-level) and throwables |
| 17:52 | mmarczyk | ouch, you're a vicious person :-P |
| 17:52 | TeXnomancy | no jumps unless you're using John Rose's crazy experimental JDK branches: http://blogs.sun.com/jrose/entry/tailcalls_meet_invokedynamic |
| 17:53 | qbg | I think you have goto |
| 17:53 | mmarczyk | TeXnomancy: wow, that's crazy :-) |
| 17:53 | Lajla | mmarczyk, well, you are quite tasty-legged. |
| 17:54 | Lajla | mmarczyk, anyhow, you must have some respect for the fact that I ask such theoretical quaestions before I even decide whether or not to learn a language. |
| 17:54 | mmarczyk | Lajla: pleasure to be of use |
| 17:54 | Lajla | I like people that like to be used, it's my masculine side. |
| 17:55 | KirinDave | Some joke. |
| 17:55 | mmarczyk | qbg: in Java? nope |
| 17:55 | qbg | I'm talking at bytecode level |
| 17:56 | KirinDave | Lajla: You don't mind if I take that out of context and put it up on my website, do you? |
| 17:56 | TimMc | Yes, the bytecode supports goto. |
| 17:56 | KirinDave | How could it not? |
| 17:57 | mmarczyk | qbg: ah, well, that's true then |
| 17:57 | Lajla | 'Like most virtual machines, the Java Virtual Machine has a stack-based architecture akin to a microcontroller/microprocessor. However, the JVM also has low-level support for Java-like classes and methods, which amounts to a highly idiosyncratic memory model and capability-based architecture.' |
| 17:57 | Lajla | KirinDave, not at all. |
| 17:57 | Lajla | No idea of which you speak, but information is free as far as I'm concerned. |
| 17:57 | KirinDave | Lajla: I'm sort of sad that you said you don't mind. But it won't deter me. |
| 17:57 | mmarczyk | qbg: but you can't use it funky ways -- even if you write your bytecode by hand -- because it won't get past the bytecode verifier when you try to load it |
| 17:57 | Licenser | if I don't have lein and want to build one single clojure file w/o anything else what would be the command for it? |
| 17:58 | Lajla | KirinDave, of what are you speaking anyway? |
| 17:59 | Lajla | What are you putting on which site of yours? |
| 17:59 | KirinDave | Lajla: http://idisk.me.com/dfayram/Public/Pictures/Skitch/clojure_%28irc.freenode.net%29-20100622-145517.jpg |
| 17:59 | Lajla | Ahaha |
| 17:59 | Lajla | What client is that? |
| 18:00 | Chousuke | looks like colloquy |
| 18:00 | Licenser | yap looks like it |
| 18:00 | Chousuke | eh :P |
| 18:01 | mmarczyk | Licenser: you mean compile? |
| 18:01 | Licenser | yes |
| 18:01 | mmarczyk | Licenser: there's a compile function in clojure.core |
| 18:01 | mmarczyk | see docstring for details |
| 18:02 | Licenser | I know but starting a repl isn't really fun :P I'd enjoy a lot if I could just call something like clojure.compile <file> |
| 18:02 | mmarczyk | NB. you'll need to have your output directory for .class files on your classpath |
| 18:02 | mmarczyk | well you can use clojure.main -e "(compile ...)" |
| 18:02 | mmarczyk | or maybe wrap it in binding to set the output path |
| 18:03 | mmarczyk | hm, I think the syntax was -e "...", I hardly ever use that though |
| 18:04 | Licenser | I tried that but didn't really work - I think |
| 18:04 | Licenser | actually did |
| 18:09 | mmarczyk | hm |
| 18:12 | dnolen | anybody else messin with clj-apache-http ? |
| 18:13 | stuartthecol | hi guys - I think I'm having some classpath trouble with leiningen. I made a new project with lein new foo, run lein swank, but then when I connect with slime and run the auto built core.clj file, it gives me No such namespace: foo.core. any ideas? |
| 18:14 | mmarczyk | Licenser: strangely enough, with 1.1 at least, -e "(compile ...)" throws an exception for me, but *after* producing a .class file |
| 18:14 | Licenser | mmarczyk: it seems to work |
| 18:14 | mmarczyk | Licenser: ah, good |
| 18:14 | mmarczyk | Licenser: I was rather hoping there was something funny with the one-off "project" I'm using for this :-P |
| 18:14 | Licenser | rhickey's comment this morning about 'with the new changes clojure at least stands a change in the benchmark shootouts' got me thinking and I figured I'll write a few of the shootouts :P |
| 18:15 | cemerick | looks like the hinting available to definterface isn't there for protocols yet? |
| 18:19 | rhickey | cemerick: protocols are ordinary fns, and don't take specific types (yet) |
| 18:19 | rhickey | the prim work is the path to that |
| 18:19 | cemerick | rhickey: OK, so definterface + extend-type is idiomatic for now |
| 18:20 | rhickey | cemerick: this to get an interface for Java? |
| 18:20 | cemerick | yeah |
| 18:20 | cemerick | I figured I'd just reuse the protocol-generated one, but alas :-) |
| 18:20 | rhickey | but you want the interface to reach a Java type you don't own? |
| 18:20 | cemerick | nope, I own the whole stack |
| 18:21 | cemerick | (trying to be 100% clojure these days, as much as I can anyway) |
| 18:21 | rhickey | so definterface + deftype/defrecord |
| 18:21 | cemerick | right -- well, almost -- the implementing class *is* in Java. Probably the 2nd-gnarliest thing I've got, 7 years old now. :-/ |
| 18:22 | cemerick | so, extend-type :-) |
| 18:30 | rhickey | cemerick: no, extend-type can;t be used to make an interface reach a non-derived type |
| 18:31 | Licenser | hmm is unchecked-inc gone? |
| 18:32 | rhickey | now unchecked-inc-int/long specific |
| 18:32 | Licenser | ah thanks! |
| 18:34 | rhickey | bbl |
| 18:35 | Licenser | take care rhickey |
| 18:42 | Licenser | bed time for me see you tomorrow poeple |
| 19:09 | quidnunc | I keep getting "let: File exists: /home/me/.emacs.d/elpa/clojure-mode-1.7.1/clojure-mode.el" when trying to install clojure-test-mode from elpa in emacs. Anyone have a similar problem? |
| 19:14 | lancepantz | when i do a C-c C-d C-d, can i close the description buffer inline when i'm done, without having to switch to it? |
| 19:16 | jkkramer | quidnunc: http://groups.google.com/group/clojure/msg/4d2814711fa732a8 |
| 19:25 | quidnunc | jkkramer: Thanks (not quite working yet, I think I have to restart emacs). |
| 20:10 | rntz | what does it mean for a symbol in a parameter list to begin with &, as eg &form, &env do in: (fn [&form &env name & args] ...)? |
| 20:11 | cat26 | hi... |
| 20:11 | cat26 | someone has a clue how to call a method from a class generated on clojure from coldfusion? |
| 20:11 | lancepantz | rntz: it's optional and anything past the & will be rolled up |
| 20:11 | lancepantz | rntz: oh, i'm sorry, i misread |
| 20:11 | lancepantz | ignore me |
| 20:12 | lancepantz | never noticed it at the beginning of a symbol |
| 20:15 | cat26 | instead of coldfusion, more generic, from java itself |
| 20:17 | mmarczyk | rntz: the & has no special meaning |
| 20:17 | mmarczyk | rntz: &form and &env are implicit arguments received by all macros |
| 20:18 | qbg | cat26: Like any other java method |
| 20:18 | mmarczyk | rntz: &form holds the entire form which triggered the macro transformation and &env contains the compilation-time local environment in the context of which the macro is being expanded |
| 20:19 | cat26 | well, the problem is that cf loads the object, but apparently has no methods |
| 20:19 | qbg | cat26: How are you generating the class? |
| 20:20 | cat26 | when -main should return a string, cf prints only the name of the class plus a id |
| 20:20 | cat26 | with gen-class |
| 20:23 | stuartthecol | does anyone know why paredit would work correctly with () and []'s, but not {}'s? it won't auto close them, but it also won't let me delete unmatched ones |
| 20:23 | tomoj | which version of paredit |
| 20:24 | stuartthecol | 20 |
| 20:24 | tomoj | get 22 |
| 20:24 | tomoj | http://mumble.net/~campbell/emacs/paredit-beta.el |
| 20:25 | stuartthecol | cool, thanks |
| 20:25 | tomoj | clojure-mode will fix {} if it sees that you're using 22 |
| 21:12 | ttmrichter | http://kirindave.tumblr.com/post/726735921/special-kind-of-asshole |
| 21:12 | ttmrichter | Please tell me that was faked. |
| 21:13 | lancepantz | nope |
| 21:14 | lancepantz | its odd, that's actually not the first time he's brought up beating women |
| 21:15 | ttmrichter | I see. |
| 21:15 | ttmrichter | Every time I question my decision to leave the industry, I stumble over reminders of why I did. |
| 21:19 | defn | ugh, don't get mstarted on that guy |
| 21:19 | defn | me* |
| 21:19 | Raynes | You guys realize he is here, right? |
| 21:19 | defn | yes... |
| 21:19 | Raynes | Last thing #clojure needs is a IRugment. |
| 21:19 | Raynes | :p |
| 21:20 | defn | he'll likely bring one of those whether we say any of this or not |
| 21:20 | defn | that's his MO |
| 21:22 | defn | I think it just might be an epic informed troll... |
| 21:22 | lancepantz | worse, a scheme troll |
| 21:22 | defn | D: |
| 21:23 | Raynes | D: |
| 21:23 | defn | Anyways, moving on... I had an interview today and as usual the "people" side of the interview went sort of meh |
| 21:23 | nDuff | good coworkers are hard to find |
| 21:23 | defn | but the technical side was epic. reason? this guy writes clojure. |
| 21:23 | nDuff | heh :) |
| 21:23 | defn | i almost leaped over the table to hug him |
| 21:24 | lancepantz | haha, thats awesome |
| 21:24 | defn | i was like: you? wait... you said... are you? you write clojure! |
| 21:25 | nDuff | ...just as an aside, last time I interviewed with a small, profitable startup with a bunch of brilliant people (and accepted their offer over a potentially more lucerative alternate), it got announced the day after I accepted that they were getting bought by Dell. |
| 21:25 | defn | oh...shit... |
| 21:26 | nDuff | ...that said, a fair number of the brilliant people stuck around, so it wasn't entirely a fiasco |
| 21:28 | nDuff | upside: great health plan, hands-off immediate management (yes, we use Clojure) |
| 21:28 | defn | until they transformed the culture into a nice filthy sewer water id imagine |
| 21:28 | nDuff | downside: evil corner-cutting facilities department (they took away our espresso machine, those bastards!) |
| 21:29 | defn | we used to have free soda |
| 21:29 | nDuff | ...at one point they took away our trash cans and made us walk our own trash to the hall |
| 21:29 | defn | now it's a quarter |
| 21:29 | lancepantz | nDuff: i would imagine you would lost some upside though, as your stock hadn't been granted? |
| 21:29 | defn | we used to have really awesome vacuum packed coffee, now we have cheap flavored crap |
| 21:29 | lancepantz | options imean |
| 21:29 | nDuff | lancepantz, ehh, most of the equity was owned by VCs anyhow |
| 21:29 | nDuff | lancepantz, ...I wasn't really in this one for the options |
| 21:30 | defn | background: we got bought out by a fortune 500, which then was bought out by an even larger company |
| 21:30 | lancepantz | fair enough |
| 21:30 | defn | so basically, my highest level manager, is one of the lowest in the company |
| 21:30 | defn | and we dont get anything we want |
| 21:30 | defn | *facepalm* |
| 21:31 | nDuff | ugh. |
| 21:31 | defn | c'est la vie -- they're going to lose me in a few weeks along with everyone other smart person here eventually |
| 21:31 | defn | s/everyone/every |
| 21:31 | defn | kind of a wasted investment on their part :\ |
| 21:32 | nDuff | we're finally losing some good people, but they managed to keep things reasonable and sane for over 2 years; that's longer than I expected |
| 21:32 | defn | now that people arent buying gold bullion in anticipation of the apocalypse a lot of people have been jumping around |
| 21:32 | defn | from what ive read |
| 21:33 | lancepantz | defn: are you tied to wisconsin? |
| 21:33 | defn | lancepantz: hell no. |
| 21:33 | defn | er, well, wait -- how do you mean? |
| 21:33 | nDuff | frankly, I'm a bit conflicted; despite the Dell name we have lots of fun and interesting projects to work on, and the pay is much better than I can get from most of the folks I know running startups right now (unless I'm willing to take my chances on equity, and I've been down that road a time or two already) |
| 21:33 | lancepantz | you should move |
| 21:33 | defn | oh yeah... i was surprised you knew i was in WI |
| 21:34 | lancepantz | i think there are alot more clojure jobs on the coast |
| 21:34 | lancepantz | i think its in your host or something |
| 21:34 | defn | yeah i really wanna move to SF, but i need to let my girlfriend get through college (one more year) |
| 21:34 | lancepantz | nope. must have been a blog or something |
| 21:35 | lancepantz | the perks are alot better out here :) |
| 21:35 | lancepantz | i'm in la now though |
| 21:35 | nDuff | okay, not unfriendly compared to LA |
| 21:35 | defn | :D |
| 21:35 | lancepantz | i like austin |
| 21:35 | lancepantz | traffic here though is nuts |
| 21:35 | defn | ive heard nothing but awesome stuff about austin |
| 21:35 | nDuff | also the cost of living difference |
| 21:35 | lancepantz | i work weird hours though, so its tolerable |
| 21:35 | defn | but man...id feel weird calling TX home |
| 21:35 | nDuff | defn, it's not Texas, it's *Austin*! |
| 21:36 | nDuff | defn, ...nothing in common but the weather :) |
| 21:36 | defn | :D -- yeah yeah, just not ready to move to the south pole of North America |
| 21:36 | defn | i need to go in between before i can settle down that low |
| 21:36 | defn | hence SF |
| 21:36 | defn | i would kill for the music in austin though |
| 21:37 | defn | lancepantz: i probably wouldnt have a car, probably would sell it to pay my rent! ;) |
| 21:37 | nDuff | heh; there's a lot going on, but I just never get downtown to enjoy it. Cousin-in-law runs a bar downtown right next to La Zona Rosa (one of the local music venues), and I've rarely ever been. |
| 21:37 | lancepantz | i haven't bought one since i moved down from sf |
| 21:37 | lancepantz | probably will next month or so, been putting it off |
| 21:38 | defn | if i move to texas there's the temptation to be a coyote, which i dont need |
| 21:38 | defn | i wonder if i could use clojure to improve the ratio of immigrants i could get across the border |
| 21:38 | nDuff | <plug type="shameless">re: transport in high-density living areas where garaging is expensive, the folks over in #bikefriday make some damn fine folding bicycles</plug> |
| 21:39 | defn | i ride a fixed gear, mainly because im 25 and a hipster |
| 21:39 | nDuff | pah |
| 21:40 | defn | like the old schwinns? |
| 21:40 | lancepantz | oh jesus |
| 21:40 | defn | those things are a bear to put together... |
| 21:40 | lancepantz | if i had admin i would kick you on principle defn |
| 21:40 | nDuff | a Rohloff on the big bike, a SRAM i-Motion 9 on the Tikit (the folder), a Nexus on the old shaft-drive commuter |
| 21:40 | rntz | there are a lot of swank-clojure repos on github. which one should I be using? |
| 21:40 | defn | lancepantz: :D |
| 21:40 | defn | lancepantz: track stands are cool! |
| 21:40 | defn | rntz: use technomancy's |
| 21:41 | nDuff | defn, "those things" meaning internally geared hubs? I'm too much of a wuss to overhaul them myself; that's what professional bike shops are for. :) |
| 21:42 | defn | nDuff: yeah those things are crazy hard to put together |
| 21:42 | defn | i couldnt even begin to know where to start |
| 21:42 | defn | i tried once...just one. |
| 21:42 | defn | once* |
| 21:43 | defn | Madison, WI has some really nice bike paths. It's note exactly startup mecca, but there's starting to be some more VCs around town, more biotech, etc. |
| 21:44 | rntz | is there some way to run a swank-clojure instance /not/ associated with a "project"? |
| 21:44 | arohner | lancepantz, nDuff: you two are in Austin? |
| 21:44 | lancepantz | arohner: i'm in los angeles |
| 21:44 | lancepantz | i just like it |
| 21:45 | defn | man, I hear nothing but bad things about LA |
| 21:45 | arohner | sounds like it might be time to start an Austin Clojure users group |
| 21:45 | defn | all the fake palm trees |
| 21:45 | defn | i started one in madison, we're at a grand total of 2 members! huzzah! |
| 21:46 | arohner | I think with nDuff and my cofounder, we're at 3! |
| 21:46 | nDuff | we've got two people who make production commercial use of clojure here in the office, and me (playing around, but nothing in production yet) |
| 21:46 | lancepantz | defn: i was miserable at first, but i've came around, you just have to figure it out |
| 21:46 | arohner | nDuff: where do you work? |
| 21:47 | Raynes | I know several Alabama people in #Haskell. We started a usergroup back on early '09, and are still just-a-plannin' to meet. |
| 21:47 | nDuff | arohner, Dell |
| 21:47 | Raynes | About 4 or 5 of us. |
| 21:47 | arohner | nDuff: I'm sorry. I know a bunch of people there, none of them happy |
| 21:47 | defn | Raynes: I'm from the north. I don't understand this "just-a-plannin'" lingo. |
| 21:48 | nDuff | arohner, well -- I'm in a little startup that got acquired a few years back, and the digestion process has actually been pretty slow. |
| 21:48 | Raynes | Since the group was formed, we've talked about meeting, but never actually did so. |
| 21:48 | arohner | nDuff: ah. The ones I know are in sales, the belly of the beast. What did the startup do? |
| 21:48 | defn | Raynes: oh i know I was just givin you trouble, spergy |
| 21:49 | nDuff | arohner, software-as-a-service |
| 21:49 | defn | Startup: SaaS. Investor: $ |
| 21:50 | arohner | defn: if only it were that easy |
| 21:50 | defn | yeah..i have no startup experience |
| 21:50 | arohner | defn: they want customers, and revenue, and a plan and pretty soon you never get to code |
| 21:51 | defn | i just hear all sorts of stuff about SaaS + Getting paid |
| 21:51 | defn | arohner: yuh :( |
| 21:51 | defn | Have you guys played with Quora at all? |
| 21:51 | defn | I'm sort of...well...obsessed with it ATM. |
| 21:51 | arohner | defn: a little. just poked around, no serious use |
| 21:52 | defn | As the user base grows I really hope they are able to keep up (admins and tech-wise) |
| 21:53 | defn | there is a problem with new users' questions and the topics they assign to a question. some people dont understand how to tag things. sad, but true. |
| 21:53 | defn | like a miley cyrus question somehow gets "Facebook", because the person saw it on facebook, for instance |
| 21:54 | qbg | A random 5 minute hack: http://gist.github.com/449372 |
| 21:54 | defn | I guess Facebook is making a Q/A thingamajig to compete with Quora, and there are some questions wherein a lot of anonymous users, who are in my estimation Quora employees venting some insane rage in the direction of Mr. Zuckerberg |
| 21:55 | defn | sorry so O/T. qbg i don't really get it, but I'm not "smaert". |
| 21:56 | qbg | Just a random hack. Scoped destructors might be useful for some. |
| 22:06 | pdk | is quora basically formspring |
| 22:16 | defn | pdk: hmmmmmmm not sure |
| 22:17 | defn | i bet there's a question like that on quora though! :) |
| 22:29 | defn | unfortunately no...there wasn't |
| 22:29 | tomoj | programming challenge: fix http://www.quora.com/challenges |
| 22:29 | cemerick | I'm starting to think that type-hinted interop should throw a compiler exception if nothing with the named field/method exists at all. |
| 22:30 | defn | ive been working on that actually in clojure tomoj |
| 22:30 | defn | it's a hamiltonian path problem |
| 22:30 | tomoj | it's a 500 error |
| 22:30 | defn | tomoj: they're down for maintenance |
| 22:30 | tomoj | ah |
| 22:30 | defn | "double secret maintenance" apparently :\ |
| 22:30 | defn | it just happened a few minutes ago |
| 22:31 | hugod | cemerick: would that work if you were dynamically importing classes? |
| 22:31 | defn | tomoj: it's a neat challenge though |
| 22:31 | cemerick | hugod: you mean using an import in a fn body? |
| 22:32 | hugod | well, using it somewhere after compilation |
| 22:32 | defn | basically given [[2 0 0 0] [0 0 0 0] [0 0 3 1]] you need to find all of the longest paths which start at 2, end at 3, and dont touch any 1s |
| 22:33 | cemerick | hugod: you'd have to have the class loaded before you use the type hint naming it in any case |
| 22:34 | hugod | cemerick: you're right |
| 22:34 | cemerick | rhickey: am I just nuts w.r.t. to the above? |
| 22:36 | hugod | I've been thinking too much about dynamic classloaders - I would like to be able to run multiple versions of jars (in different threads) |
| 22:37 | defn | tomoj: it's back up |
| 22:38 | tomoj | woohoo |
| 22:38 | cemerick | hugod: hahaha. Sorry. :-D |
| 22:39 | cemerick | I tried doing that once a long time ago by mangling classnames based on what thread was loading the class. It didn't go well. |
| 22:40 | chouser | cemerick: I wonder if that strays too far from hinting and toward enforcement. |
| 22:40 | hugod | cemerick : I'm slowly thinking it would be a bad idea - but that means lots of vm spawning for me |
| 22:41 | chouser | I don't see why interop calls couldn't use call-site caching like keywords and protocol fns do now. Then you'd never need hinting at all for best performance. |
| 22:41 | cemerick | chouser: I'm not married to whatever baggage the "hint" term carries. If I try to compile (.foo ^ClassName bar), and there's *nothing* in ClassName called foo, then throwing an exception has nothing but upside IMO. |
| 22:41 | danlarkin | technomancy: I emailed you a clojure-mode present |
| 22:42 | cemerick | chouser: call-side caching is fast, but still just a hair slower than direct invocation, no? |
| 22:42 | cemerick | call-site* |
| 22:44 | chouser | hm, not sure. |
| 22:45 | chouser | I thought for keywords rich was claiming parity. |
| 22:45 | dnolen | cemerick: same speed in every test I could come up with. |
| 22:45 | chouser | but last time I measured, protocol methods implemented via extend were a bit slower than those in deftype/defrecord bodies. |
| 22:45 | cemerick | I thought there was still a map lookup involved? |
| 22:46 | chouser | no, call-site caching doesn't have any map lookup on cache hit |
| 22:46 | cemerick | chouser: that makes sense, there's definitely a lookup there |
| 22:46 | cemerick | I sit corrected, then. |
| 22:46 | chouser | I should check those measurements again. |
| 22:46 | chouser | but before that, I should go to bed. |
| 22:46 | chouser | g'night folks. |
| 22:47 | cemerick | In any case, I'd be happy with some hinted enforcement. It certainly doesn't impact dynamicism. |
| 22:47 | cemerick | sleep well :-) |
| 23:02 | redalastor | I noticed a mistake in the cheatsheet on the main site. It says that creating an empty list is '() which works but () is more idiomatic. |
| 23:23 | defn | ,() |
| 23:23 | defn | $() |
| 23:23 | sexpbot | => () |
| 23:23 | defn | $'() |
| 23:23 | sexpbot | Command not found. No entiendo lo que estás diciendo. |