2009-12-15
| 00:05 | hamza | guys, what is the best way to add 1 to a list contaning (2 3) so that i get (1 2 3), tried (concat 1 '(2 3)) but does not work? |
| 00:06 | _ato | ,(cons 1 '(2 3)) |
| 00:06 | hamza | _ato: thanks.. that worked.. |
| 00:07 | hiredman_ | ,(cons 1 '(2 3)) |
| 00:07 | clojurebot | (1 2 3) |
| 00:07 | hiredman_ | _! |
| 00:07 | hiredman_ | good lord freenode |
| 00:32 | hiredman | clojurebot: ping? |
| 00:32 | clojurebot | PONG! |
| 00:33 | Raynes | hiredman: ping? |
| 00:38 | KirinDave1 | Hmm |
| 00:38 | KirinDave1 | Compojure+enlive's performance is damn impressive if you don't run the template every time. |
| 00:39 | KirinDave1 | I wonder if I could genericize this into a macro. |
| 01:20 | hamza | guys i am kinda at lost, how would you turn a list such as ((1) (2 3 4)) into (1 (2 (3 4))) or reverse ((1 2 3) (4)) into (((1 2) 3) 4) ? |
| 01:23 | arbscht | ,(reduce #(list %1 %2) (clojure.contrib.seq-utils/flatten '((1 2 3) (4)))) |
| 01:23 | clojurebot | (((1 2) 3) 4) |
| 01:23 | hiredman | :| |
| 01:23 | hiredman | list |
| 01:24 | hiredman | the anonymous function is not needed |
| 01:25 | arbscht | hm yes |
| 03:27 | LauJensen1 | Morning team |
| 03:55 | tomoj | I wonder what the probability is that I will someday find a clojure job |
| 03:56 | esj | morning all |
| 04:09 | hoeck | tomoj: not that low, I think |
| 04:10 | hoeck | tomoj: at least I am very confident :) |
| 05:26 | shantanu | did anybody encounter this error while compiling Clojure sources through Maven? |
| 05:26 | shantanu | org.apache.maven.lifecycle.LifecycleExecutionException: Clojure failed. |
| 06:00 | ordnungswidrig | hi |
| 06:01 | esj | yo |
| 06:03 | ordnungswidrig | that was hard work. irc over ejabberd. connecting as a osx newbie trouble |
| 07:35 | aldebrn | Hi, I'm trying to use git clojure, and "ant clean jar" gives me hundreds of warnings, plus some errors in clojure/src/jvm/clojure/lang/Numbers.java all complaining about methods on toBigDecimal(x). This is on OpenJDK java version "1.6.0_0", any hints? |
| 07:37 | hamza | just a guess, but maybe some methods on suns api not availible on openjdk.. |
| 07:41 | aldebrn | Thanks hamza. What's the difference between the clojure and the "clojure (new)" entities at build.clojure.org ? |
| 07:43 | the-kenny | aldebrn: new is based on the "new" branch on github. It has some new things like defprotocol/deftype |
| 07:43 | hamza | here is some more info if you are intrested, |
| 07:43 | hamza | http://stuartsierra.com/2009/12/14/objects-are-not-adts?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+StuartSierra+(Digital+Digressions+by+Stuart+Sierra) |
| 07:44 | hamza | talks about the new features in new branch |
| 07:44 | the-kenny | _ato: ping |
| 07:44 | aldebrn | Is new strictly a superset of non-new? |
| 07:44 | _ato | the-kenny: pong |
| 07:44 | the-kenny | _ato: Is that you compojure-jar on clojars? |
| 07:45 | the-kenny | *your |
| 07:45 | _ato | the one with ato in it? |
| 07:45 | _ato | yeah |
| 07:45 | the-kenny | Yes. |
| 07:46 | the-kenny | It looks like it's broken because clojure was renamed to "1.1.0-master-SNAPSHOT" |
| 07:46 | _ato | egh.. annoying. Yeah that pretty much broke everything, I wish they symlinked it |
| 07:48 | the-kenny | hm.. maybe someone will symlink it. |
| 07:49 | _ato | hrmm.. |
| 07:49 | _ato | I wonder if I can do it in Clojars actually |
| 07:50 | _ato | oh well, probably betters to just update all the jars, hopefully it won't get renamed again |
| 07:51 | liebke | the-kenny: I uploaded a version of Compojure to address that problem: [org.clojars.liebke/compojure "0.3.1-master"] |
| 07:52 | the-kenny | liebke: Ah, sounds good. That one wasn't listed in my search for "compojure" |
| 07:53 | liebke | yeah, the search doesn't seem exhaustive |
| 07:56 | _ato | search doesn't work if there's no description set. Damn have I still not pushed out the fix for that. I gotta stop tinkering with this widefinder stuff and give Clojars some more work |
| 07:57 | _ato | ugh... all the tutorials and such are going to be pointing at 1.1.0-alpha as well, aren't they? |
| 07:57 | _ato | perhaps I should upload the old snapshot |
| 07:58 | _ato | I guess it's better that people are out of date than can't get things to work at all |
| 08:00 | aldebrn | liebke, I'm about to send a message to incanter group asking about an error in compiling Incanter: it breaks with 'Exception in thread "main" java.lang.ClassFormatError: clojure.contrib.pprint.PrettyWriter (erroneous identifier) (io.clj:22)' and I wanted to apologize in advance for asking what must have a very simple answer... |
| 08:00 | Chousuke | aldebrn: you might want to try recompiling clojure-contrib |
| 08:01 | hamza` | i had this error, when i compiled clojure-contrib without pointing clojure.jar |
| 08:01 | hamza` | even if clojure.jar is in your classpath for some reason it won't pick it. |
| 08:01 | aldebrn | That's where I know it from too, but incanter build includes clojure |
| 08:01 | liebke | aldebrn: yes, Chousuke and hamaza' are right |
| 08:01 | liebke | which build script are you using? |
| 08:01 | liebke | ant or maven? |
| 08:10 | _ato | ok, I've just pushed the old-named clojure jar to clojars' repository: http://clojars.org/repo/org/clojure/clojure/ |
| 08:10 | liebke | aldebrn: if you're using maven, I wonder if you have a version of clojure-contrib in your repository that isn't pointing to the clojure jar. If you're using ant (and ant deps), then I don't know what's wrong :-( |
| 08:10 | _ato | that should at least serve as a temporary measure |
| 08:11 | _ato | come on 1.1 so we can all start pointing everything at stable version numbers |
| 08:11 | liebke | _ato: nice :-) |
| 08:17 | Chousuke | _ato: until everyone starts using defprotocol and deftype and then you need git master for everything again ;P |
| 08:18 | Chousuke | Hm, I wonder if it's right to call transient things "transient values" |
| 08:19 | Chousuke | I don't want to call them mutable because they're more than that. |
| 08:20 | ordnungswidrig | Chousuke: more than mutable? |
| 08:20 | cemerick | Chousuke: if they're mutable, it's hard to call them 'values' |
| 08:20 | cemerick | IMO |
| 08:20 | Chousuke | ordnungswidrig: yeah. they're really mutable only as an implementation detail .) |
| 08:21 | ordnungswidrig | Chousuke: I see. No third state after immutable and mutable |
| 08:22 | Chousuke | I just think it's important that people not think of them as mutable things. |
| 08:23 | Chousuke | because you can't use them to write imperative algorithms. |
| 08:23 | esj | is there simpler way to select a subset of values from a hash-set directly, or is (into [] (map #({:a 3 :b 3 :c 4} %) '(:c :a))) the way ? |
| 08:23 | Chousuke | esj: (into [] the-map [:c :a]) |
| 08:24 | Chousuke | hm |
| 08:24 | Chousuke | forgot map |
| 08:24 | Chousuke | oh well. |
| 08:24 | Chousuke | I think there's something in the clojure.set namespace too. maybe. |
| 08:24 | chouser | "transient collections"? |
| 08:25 | esj | ,(into [] {:a 3 :b 3 :c 4} [:a :c]) |
| 08:25 | clojurebot | java.lang.IllegalArgumentException: Wrong number of args passed to: core$into |
| 08:25 | Chousuke | chouser: yeah, but the intermediate things? :/ |
| 08:25 | chouser | esj: select-keys |
| 08:25 | Chousuke | esj: yeah, you need the map still. I was just too hasty :P |
| 08:25 | esj | :) |
| 08:26 | Chousuke | ,(into [] (map {:a 1 :b 2 :c 3} [:a :c])) |
| 08:26 | clojurebot | [1 3] |
| 08:26 | chouser | Chousuke: what intermediate things? |
| 08:26 | chouser | ,(select-keys {:a 1 :b 2 :c 3} :a :c) |
| 08:26 | clojurebot | java.lang.IllegalArgumentException: Wrong number of args passed to: core$select-keys |
| 08:26 | Chousuke | chouser: those values you get when you're actually building the data structure. |
| 08:26 | esj | ,(select-keys {:a 1 :b 2 3} [:a :c]) |
| 08:26 | clojurebot | 5 |
| 08:26 | chouser | those are transients, aren't they? transient collections. |
| 08:26 | esj | thanks guys, in business now. |
| 08:27 | Chousuke | collections is too long a name ;P |
| 08:27 | chouser | heh |
| 08:28 | Chousuke | I don't think "transient value" is too bad a name. it's immutable for the duration of its lifetime :) |
| 08:28 | Chousuke | which is exactly until you try to mutate it. |
| 08:29 | ordnungswidrig | Chousuke: ant then? |
| 08:31 | Chousuke | hm? |
| 08:32 | cemerick | 'value' has a very specific implication of immutability AFAIK. Consider, would "mutable integer" make sense? |
| 08:32 | rhickey | transient value is a contradiction |
| 08:32 | ordnungswidrig | Chousuke: argl, I meant, "and then?" after you try to mutate them |
| 08:33 | Chousuke | ordnungswidrig: the reference becomes invalid and using it again means undefined behaviour. |
| 08:33 | Chousuke | all the functions return new transient things that you should use. |
| 08:33 | ordnungswidrig | Chousuke: i see |
| 08:36 | chouser | just leave off the second word like we do with locals. They are transients. |
| 08:36 | chouser | "transient" is a noun in this case |
| 08:42 | chouser | asking for donations apparently gets you some money and *lots* of opinions. :-) |
| 08:43 | Chousuke | heh |
| 08:43 | rhickey | actually I'm glad it hasn't devolved into arguments about open source and free software in general |
| 08:44 | cemerick | rhickey: mostly ;-) |
| 08:44 | rhickey | right |
| 08:45 | praptak | A quick syntax question - does (fn [] 3) have a #() equivalent? |
| 08:45 | Chousuke | not really. |
| 08:46 | Chousuke | #(do 3) is the closest you can get :) |
| 08:46 | chouser | praptak: not really. You can say #(do 3) but that's rather ugly |
| 08:46 | praptak | Thanks, I was just curious. |
| 08:46 | chouser | praptak: (fn [] 3) is fine. Or (constantly 3) |
| 08:46 | cemerick | I usually use constantly -- code == docs. |
| 08:47 | rhickey | yes |
| 08:47 | praptak | @chouser: Thanks, I didn't know about constantly. |
| 08:47 | ordnungswidrig | i like constantly |
| 08:50 | praptak | Ah, it even works for any number of arguments |
| 08:51 | chouser | right, so not exactly the same as (fn [] 3) |
| 08:53 | cemerick | rhickey: have you bothered to look at any of the jdk7 closure stuff since devoxx? |
| 08:53 | ordnungswidrig | Chouser: taken any number of args is not bad in this case |
| 08:54 | cemerick | Seems like everything's going to be in flux for an extended period of time from what I've read. |
| 08:54 | rhickey | cemerick: I've read the blog posts - there's a long road ahead |
| 08:55 | cemerick | that's what I figured you'd say |
| 08:56 | cemerick | There's going to be a lot of jdk7-esque forks come next year, I'll wager. |
| 08:56 | rhickey | http://mail.openjdk.java.net/pipermail/lambda-dev/2009-December/000023.html |
| 08:59 | cemerick | yeah, i saw that |
| 08:59 | cemerick | I don't grok it all fully, of course. The process seems right broken though. |
| 09:00 | rhickey | it's a difficult thing to retrofit |
| 09:01 | rhickey | although, now that Java is behind C#, maybe the borrowing could go the other way |
| 09:02 | ordnungswidrig | Anything to whatch out for regarding aquamacs and clojure? |
| 09:02 | rhickey | will always be more verbose than in a language built around it |
| 09:02 | rhickey | ordnungswidrig: that's my combo, though I don't use Slime |
| 09:04 | cemerick | it seems like this is Java's last hurrah w.r.t. attempting big changes. The gridlock seems intense, and I can't imagine it getting any better. |
| 09:05 | rhickey | checked exceptions are proven a terrible idea by closures |
| 09:08 | ordnungswidrig | rhickey: clojure-mode with elpa works fine? What do you use if not slime? *wonder* |
| 09:09 | rhickey | ordnungswidrig: brute force |
| 09:09 | ordnungswidrig | rhickey: never considered this. you mean, just a repl |
| 09:10 | rhickey | ordnungswidrig: yes, just clojure-mode + repl |
| 09:10 | cemerick | rhickey: how's the intellij clojure stuff these days? |
| 09:11 | ordnungswidrig | rhickey: then, you can be sure to receive a donation from me :-) I'll declare it as solatium |
| 09:11 | rhickey | cemerick: I just got IDEA 9 installed - haven't done much Clojure editing but debug seems much smoother |
| 09:11 | rhickey | ordnungswidrig: thanks :) |
| 09:17 | fliebel | Is there any Markdown thing for Clojure? The only thing I found was Javascript ran through Rhino. |
| 09:18 | karmazilla | fliebel: there's markdownj for Java |
| 09:19 | fliebel | karmazilla: I read it has serious issues, but I might try it… |
| 09:20 | chouser | fliebel: we're using markdownj for the book. Hasn't been a problem yet, afaik. |
| 09:20 | fliebel | "the book"? |
| 09:21 | hamza` | i use markdownj from clojure, the only problem i had is if i put a list just before a code block it messes up. |
| 09:22 | chouser | fliebel: the book about Clojure that Fogus and I are writing. |
| 09:22 | chouser | markdown as a spec is creaking a bit under our ever-growing requirements, but markdownj as an implementation hasn't cause us any problems I'm aware of. |
| 09:22 | fliebel | chouser; ah, that book, cool! |
| 09:23 | chouser | yeah, no link for the book yet. hopefully this week... |
| 09:25 | fliebel | I think the Showdown+Rhino is a very creative solution… I'm not sure how MarkdownJ compares with that… |
| 09:31 | fliebel | hmmm, showdown+rhino looks good! |
| 09:48 | devlinsf | (doc future-canceled) |
| 09:48 | clojurebot | I don't understand. |
| 09:48 | devlinsf | (doc future-cancelled) |
| 09:48 | clojurebot | Gabh mo leithscéal? |
| 09:48 | devlinsf | (doc future-cancelled?) |
| 09:48 | clojurebot | "([f]); Returns true if future f is cancelled" |
| 09:49 | devlinsf | rhichey: cancelled is spelled w/ 1 l |
| 09:49 | devlinsf | err... rhickey |
| 09:49 | devlinsf | oops |
| 09:50 | cypher23 | devlinsf, both are correct. 2 l is british, one l is american spelling |
| 09:50 | djork | what's up with clojure.contrib.http.agent |
| 09:50 | devlinsf | Oh... |
| 09:50 | djork | "java.lang.IllegalStateException: bytes already refers to: #'clojure.core/bytes in namespace: user (NO_SOURCE_FILE:0)" |
| 09:50 | djork | trying to use it |
| 09:50 | devlinsf | Firefox is yelling at me. Nevermind |
| 09:50 | the-kenny | djork: I think that's fixed in a newer version of clojure-contrib |
| 09:50 | esj | djork: it crashes with an existing symbol |
| 09:51 | cypher23 | devlinsf, you probably have an american-english dictionary :) |
| 09:51 | esj | djork: I'm excluding it on require |
| 09:51 | esj | (:use compojure |
| 09:51 | esj | clojure.contrib.json.write |
| 09:51 | esj | [clojure.contrib.http.agent :exclude (bytes)])) |
| 09:51 | djork | huh |
| 09:51 | djork | seems like it might be better to fix http.agent :) |
| 09:51 | devlinsf | cypher23: Well, seeing how I live in the US :) |
| 09:52 | esj | I mailed Stuart at the time, I think. |
| 09:52 | the-kenny | djork: It's fixed: http://github.com/richhickey/clojure-contrib/blob/master/src/clojure/contrib/http/agent.clj#L66 |
| 09:52 | djork | hmm |
| 09:53 | rhickey | devlinsf: that's one spelling where I agree with the brits |
| 09:53 | fliebel | cypher23: I'd love to have java.awt.colour :D |
| 09:53 | devlinsf | rhickey: Okay, cool. It'll be fun to watch this issue pop up on the list occasionally :) |
| 09:54 | devlinsf | rhickey: Should I create an assembla ticket & immediately close it to document this non-issue? |
| 09:55 | djork | the-kenny: I still seem to be getting the error after pulling and rebuilding the jar |
| 09:55 | rhickey | devlinsf: probably not, I wonder if people really look for closed issues on things like that |
| 09:55 | the-kenny | djork: hm... strange |
| 09:55 | djork | it may be my own classpath problem |
| 09:56 | devlinsf | rhickey: Okay, no problem |
| 09:57 | djork | both clojure.jar and clojure-contrib.jar are up-to-date from master |
| 10:02 | djork | when I change the name of 'bytes' in http.agent, I can use it |
| 10:02 | djork | BTW I'm trying to use it in a REPL |
| 10:02 | djork | (use 'clojure.contrib.http.agent) |
| 10:03 | djork | do I need to use it :as something else? |
| 10:04 | fliebel | How would this convert to clojure code? Runtime.getRuntime().exec(Command) |
| 10:05 | angerman | (. Runtime/getRuntime exec Command) ? |
| 10:05 | chouser | (.exec (Runtime/getRuntime) Command) |
| 10:05 | angerman | right. should proably wrap the Runtime/getRuntime. |
| 10:06 | fliebel | ,(.exec (java.lang.Runtime/getRuntime) "ls") |
| 10:06 | clojurebot | java.security.AccessControlException: access denied (java.io.FilePermission <<ALL FILES>> execute) |
| 10:06 | scgilardi | The fix to contrib allows "require 'clojure.contrib.http.agent" to work, but by using "use" you're trying to bring bytes into the user namespace. |
| 10:06 | chouser | angerman: I don't really like using the naked . operator in regular code anymore. |
| 10:07 | scgilardi | you can either require it and use its full namespace to qualify its names, require it :as to use an alias to qualify its names, or use it and exclude bytes yourself. |
| 10:07 | fliebel | angerman & chouser: gives back #<UNIXProcess java.lang.UNIXProcess@1629ce8c> |
| 10:07 | angerman | chouser: guess that's personl preference. though I hardly do interop, so I don't really have an opinion on it. |
| 10:07 | chouser | fliebel: congrats! success! |
| 10:07 | angerman | fliebel: so? what did you expect?! |
| 10:07 | scgilardi | user=> (use '[clojure.contrib.http.agent :exclude [bytes]]) |
| 10:07 | scgilardi | nil |
| 10:08 | fliebel | I expected to see the output of the command… but it's java anyway, so I guess I should fetch some io reader somewhere... :S |
| 10:09 | chouser | fliebel: you might be interested in clojure.contrib.shell-out |
| 10:09 | fliebel | chouser: might be :D Thanks! |
| 10:11 | chouser | angerman: not a huge deal, but http://clojure.org/java_interop mentions the forms at the top of the page are "preferred" |
| 10:13 | djork | so I should require http.agent instead of use |
| 10:16 | scgilardi | require will work well and is generally preferable to use. require with an :as will make typing more convenient. |
| 10:17 | djork | so that's the best way to use a lib that may have namespace conflicts, then? |
| 10:17 | djork | I've always been using (use) |
| 10:17 | djork | but I guess use is kind of heavy-handed |
| 10:18 | chouser | yeah, unadorned 'use' is unfortunately very convenient at first but often causes trouble in the long run. |
| 10:19 | devlinsf | Depends on the lib |
| 10:19 | chouser | I'm now in the habit of always using 'use', but always with :only and/or :as |
| 10:19 | devlinsf | e.g. , I'll use clojure.test in test code |
| 10:19 | drewr | the only time I use require is when I'll use most of the publics in an ns |
| 10:19 | scgilardi | at the repl, I think it's fine to utilize whatever is convenient. When writing an "ns" form for a lib, it's nice for a (human) reader to be able to trace the origin of every non-core name used. That means either using require, require with :as, or :use with only. |
| 10:20 | chouser | scgilardi: yes, good point. naked 'use' at the repl is fine. |
| 10:22 | scgilardi | one thing I don't do enough is "enter" the namespace I'm working in at the repl using "in-ns". That makes all of its names available without namespace-qualifying. |
| 10:22 | fliebel | what is the preferred way in clojure to handle files? just plain java.io? |
| 10:23 | scgilardi | clojure.contrib.duck-streams makes lots of file and stream-related work very easy. |
| 10:23 | devlinsf | Hey, question about PersisentStructMap |
| 10:23 | scgilardi | clojure.contrib.java-utils has some helpful functions |
| 10:24 | aldebrn | liebke, I've made an "fft.clj" in the same vein as stats.clj and core.clj in the incanter/src/main/clojure/incanter directory, is there something else I need to do before clj will pick it up? |
| 10:24 | scgilardi | and java.io and java.nio are there to use as well. |
| 10:24 | fliebel | scgilardi: thanks |
| 10:24 | devlinsf | I have an instance of a struct map and I'm trying to get at the definition |
| 10:25 | devlinsf | Similar to how I'd get at a comparator w/ a PeristantSortedMap |
| 10:25 | chouser | devlinsf: yeah, you can't get anything useful there. |
| 10:25 | devlinsf | Well, looking at the class def it seems I should |
| 10:26 | devlinsf | (.def (my-instance)) should do the trick |
| 10:26 | devlinsf | Would patching in a simple getDef method do the trick? |
| 10:26 | chouser | it's not public |
| 10:27 | liebke | aldebrn: use load-file |
| 10:27 | chouser | devlinsf: yes, making it public would let you get at it. |
| 10:27 | chouser | if you just want a list of the keys, you can do (keys (empty a-struct)) |
| 10:46 | rhickey | devlinsf: I don't want to enhance structmaps, rather people move to deftype |
| 10:48 | devlinsf | rhichey: Okay. I'll review deftype, and let you know if I need to request an enhancement |
| 10:48 | devlinsf | Ah |
| 10:48 | devlinsf | rhickey |
| 10:49 | devlinsf | Hacker news calls you Rick... I call you Hichey.. k & h are confusing! |
| 10:50 | devlinsf | Anyone: How do I browse the new branch on github? |
| 10:50 | chouser | devlinsf: theres a 'brnaches' dropdown |
| 10:50 | devlinsf | Ah, got it |
| 10:51 | rhickey | devlinsf: there are definitely differences between defstruct and deftype, but defstruct has problems (AOT, serialization) that deftype solves, plus perf is better, can implement protocols etc |
| 10:53 | cypher23 | devlinsf, use the power of tab completion? :) |
| 10:53 | devlinsf | rhickey: Right now I'm intereted in the map-like abilities of defstruct. |
| 10:53 | devlinsf | cypher23: Using a brower right now :( |
| 10:54 | cypher23 | oh |
| 10:54 | devlinsf | rhickey: What did you decide about types supporting keyword lookup? |
| 10:55 | rhickey | devlinsf: they do |
| 10:56 | devlinsf | Okay. What class implements IDynamicType? Or is that compile time magic? |
| 10:56 | rhickey | devlinsf: you shouldn't need to fiddle with IDynamicType |
| 10:57 | devlinsf | rhickey: Okay, here's what I'm really looking for. defstruct had the associated PersistentStructMap class. What is the analog of PersistentStructMap for types? |
| 10:59 | devlinsf | Oh, wait.... do I need to look in clojure.asm? |
| 10:59 | rhickey | devlinsf: you should read through this: http://www.assembla.com/wiki/show/clojure/Datatypes and try them - they can implement IPersistentMap just by requesting it and not defining the methods |
| 11:00 | shantanu | hi all |
| 11:00 | chouser | deftypes don't have to share any common superclass except Object |
| 11:00 | devlinsf | Ah. |
| 11:00 | chouser | shantanu: hi |
| 11:01 | shantanu | am wondering if anybody encountered something like thjis: java.io.FileNotFoundException: Could not locate org/bitumenframework/jettify/clj__init.class or org/bitumenframework/jettify/clj.clj on classpath |
| 11:01 | devlinsf | Hmmm... so I think this answer my underlying question. |
| 11:01 | shantanu | this is while compiling clojure code with maven |
| 11:01 | chouser | shantanu: looks like something you want isn't in your classpath. |
| 11:01 | devlinsf | There probably is NOT the need to use a map operation over a type the same way there is in a hashmap |
| 11:02 | devlinsf | Thanks rhickey & chouser |
| 11:03 | chouser | devlinsf: if the type doesn't implement IPersistentMap, then probably not. |
| 11:03 | shantanu | the same code compiled fine with Ant....seems related to maven-clojure-plugin |
| 11:03 | devlinsf | chouser: Even if does, it's a completely different beast |
| 11:03 | devlinsf | chouser: That, and this discussion can wait until 1.2 is closer to release |
| 11:04 | devlinsf | Then let's finish documenting 1.1 :) |
| 11:05 | rhickey | we seem to be stuck on 1.1. In the old days I would just zip up the latest and ship it :) |
| 11:05 | rhickey | actually I always did a (painful) doc day |
| 11:05 | devlinsf | Ha! the old days |
| 11:05 | devlinsf | Shows how fast things have changed |
| 11:06 | rhickey | now I'm afraid of all the maven stuff - all the numbers have to align with I don't know what, artifacts etc |
| 11:06 | devlinsf | rhickey: Could you help use write the chuncked seqs section? |
| 11:06 | devlinsf | *us |
| 11:07 | chouser | it's probably unavoidable anyway, but I was hoping to not have to include structs in the book. |
| 11:07 | chouser | devlinsf: is the chunked seqs section started somewhere? |
| 11:08 | devlinsf | Yeah, follow SS' link |
| 11:08 | devlinsf | http://groups.google.com/group/clojure-dev/browse_thread/thread/5a5a9aa1352f12f4 |
| 11:08 | devlinsf | Well, it's outlined |
| 11:10 | rhickey | transients section should just refer to http://clojure.org/transients rather than paraphrase, I think |
| 11:11 | devlinsf | rhickey. Okay, could you add the last part, where how to properly use them is discussed |
| 11:11 | cemerick | rhickey: I'm sure you've seen the writing on the wall that maven is the one true way these days? ;-) |
| 11:12 | cemerick | we'll actually be 95% maven by the end of the week, which is a little crazy |
| 11:14 | cemerick | "We need something to manage all this incidental complexity!" :-P |
| 11:15 | rhickey | you mean, to introduce it? |
| 11:15 | cemerick | that was a joke, there, son! |
| 11:16 | rhickey | I'm too afraid of Maven to laugh |
| 11:16 | cemerick | I was too until about 12 days ago. Used ant for ~10 years. |
| 11:17 | devlinsf | cemerick: Wow. I just had netbeans do it for me |
| 11:17 | cemerick | devlinsf: builds, you mean? |
| 11:17 | chouser | ant scares me too though |
| 11:17 | devlinsf | Yeah |
| 11:17 | chouser | we use cmake at work. |
| 11:17 | chouser | cmake scares me |
| 11:18 | cemerick | IDEs beg for you to tie your build to a local environment. That's why I went with NB years ago, it didn't have its own build circus. |
| 11:18 | rhickey | devlinsf: I'm fearful of overdoing it as far as release notes etc. There are docs on the functions. Some things are best not said twice. But transients and chunks are topics. See prior release notes - they were just gussied up commit logs. Special notes only to highlight new features, or document breakage/deprecation. I think we need to KISS. Right now, not knowing what maven will need is the dark area for me |
| 11:18 | cemerick | chouser: you prefer to use butterflies? |
| 11:18 | cemerick | ;-) |
| 11:19 | chouser | cemerick: make. I like make. |
| 11:19 | rhickey | cemerick: clojure used to build with a javac one-liner |
| 11:19 | chouser | well, gnumake |
| 11:19 | cemerick | My only sustained exposure to make is via autoconf. The one time I had to actually screw with a makefile was not pleasant. At that point, I longed for XML. |
| 11:20 | chouser | the chunk functions don't seem to have docstrings |
| 11:22 | chouser | rhickey: I assume you'd take a ticket/patch for chunk fn docstrings? |
| 11:22 | hugod | is using extend the expected way to define a protocol method implementation on a deftype that calls the deftype's own factory function? |
| 11:33 | Kjellski | When will clojure turn 2.0? I mean, have you a better guess then "When it´s done" ? |
| 11:34 | danm_ | does anyone even know what 2.0 means for clojure yet? why would the timeline for 2.0 be important to you right now? |
| 11:34 | shantanu | chouser: it seems i found out why the maven build was breaking -- whenever the namespace contains an underscore, it barfs |
| 11:35 | Kjellski | danm_ : no not really... I´m just interested... ^^ |
| 11:35 | shantanu | chouser: i faced similar issue when compiling with Ant earlier |
| 11:35 | danm_ | Kjellski: fair enough, I was just sort of confused |
| 11:35 | chouser | shantanu: really? hm. |
| 11:36 | shantanu | chouser: i just removed the underscore from the namespace -- it now compiles fine |
| 11:36 | bjorkintosh | what happens if people don't start supporting clojure's daddy? |
| 11:36 | bjorkintosh | does it mean it dies and never turns 2.0? |
| 11:37 | shantanu | chouser: i suspect this may have to do with Clojure's compile module (the way it resolves namespaces) |
| 11:39 | Chousuke | bjorkintosh: probably development just won't be as rapid as it could be. |
| 11:40 | bjorkintosh | ah that's sad. |
| 11:40 | bjorkintosh | it seems the language has generated a lot of excitement and it's a shame the creator of it hasn't been banished to an ivory tower :P |
| 11:40 | bjorkintosh | okay okay that was mean. |
| 11:41 | bjorkintosh | lisp and ivory towers seem to go together though. |
| 11:41 | chouser | Clojure is not that kind of lisp. :-) |
| 11:41 | Chousuke | I suppose Rich just doesn't feel like spending 15 years slowly building up momentum. |
| 11:41 | danm_ | seems fair |
| 11:44 | cemerick | shantanu: what version of clojure-maven-plugin are you using? |
| 11:45 | shantanu | chouser: it is <groupId>com.theoryinpractise</groupId> <artifactId>clojure-maven-plugin</artifactId> <version>1.0</version> |
| 11:45 | shantanu | chouser: oops! bad copy-paste |
| 11:46 | shantanu | cemerick: another oops! hi cemerick |
| 11:47 | cemerick | well, clojure-maven-plugin is up to 1.1 in releases, so that's a good first thing to try |
| 11:47 | cemerick | Further, the 1.2 snapshots (not sure if they're around anywhere, I just have them deployed internally) have a lot of good improvements. |
| 11:48 | shantanu | cemerick: i just decided to learn Maven today, and gave this plugin a try :-) -- i will try 1.1 out |
| 11:48 | cemerick | it's worked well for me :-) |
| 11:48 | shantanu | and 1.2 as well |
| 11:49 | cemerick | (and I have plenty of libs with dashes in the ns, FWIW) |
| 11:49 | shantanu | dashes seem to cause problems when compiling with Ant, but underscores were fine with Ant |
| 11:50 | shantanu | so i fell back to underscores |
| 11:50 | shantanu | seems i should experiment a bit more |
| 11:51 | rhickey | chouser: I'm not sure I want people using chunk fns yet, maybe label experimental |
| 11:51 | rhickey | ditto transients - experimental (more on this in a sec) |
| 11:52 | rhickey | devlinsf: sorry, I got called away - anyway, your outline is good, but fn docs need to make it into fns and concept docs onto the clojure.org site - I don't want people searching for release notes for docs |
| 11:54 | devlinsf | rhickey: Okay, makes sense |
| 11:54 | devlinsf | rhickey: should there be a PSA in the mailing list when you release 1.1, though? |
| 11:55 | rhickey | devlinsf: sure |
| 11:56 | ericthorsen | I want to define a symbol called 'Class in a namespace. I put (:refer-clojure :exclude (Class)) in the ns decl and call (ns-unmap *ns* 'Class). Loads dynamically but won't AOT. Keep getting "Class already refers to: class java.lang.Class in namespace:" |
| 11:56 | ericthorsen | Is this possible to do? |
| 11:56 | rhickey | I'd also like to try release candidates this time around, so we know the zip and naming is all ok for downstream things |
| 11:57 | rhickey | ericthorsen: dunno |
| 11:57 | ericthorsen | rhickey: Doh! |
| 11:57 | rhickey | sounds scary remapping Class |
| 11:58 | Chousuke | at least making source tarballs is relatively easy. github does them for you :P |
| 11:58 | devlinsf | rhickey: Sounds cool. What else exactly needs to happen, besides fleshing out the docs? Is there a concrete to do list before RC1? |
| 11:58 | ericthorsen | rhickey: I know...I could "want something else" but it will make what I'm doing not uniform |
| 11:58 | shantanu | cemerick: the underscores still don't cut it with the 1.1 plugin, but it works with dashes |
| 11:59 | Chousuke | hm, right, docs. |
| 11:59 | devlinsf | ericthorsen: Steal a trick from Ruby. name your fn klass |
| 11:59 | cemerick | shantanu: wait, namespaces with underscores fail, but ns' with dashes are OK? |
| 11:59 | Chousuke | IIRC I saw some reference in clojure.test docstrings to subversion and google code. Should probably fix that. |
| 11:59 | shantanu | yes |
| 12:00 | cemerick | huh. Well, I can't say I've ever made an ns with an underscore in it. |
| 12:00 | rhickey | devlinsf: http://groups.google.com/group/clojure-dev/browse_frm/thread/be3f0a7c26ee2fd6 |
| 12:00 | shantanu | i admit that's unusual...i did so because i ran into issues with Ant with dash-in-filenames |
| 12:01 | devlinsf | rhickey: Yeah, I remember that. Do these items have human names attached to them? |
| 12:01 | shantanu | i guess avoiding dashes and underscores is a good idea |
| 12:02 | rhickey | devlinsf: like code names? :) |
| 12:02 | devlinsf | Lol |
| 12:03 | devlinsf | That'd be fun. I was think of a much mor boring version, though |
| 12:03 | cemerick | dashes are right and proper, IMO. An ns with an underscore is a tad ugly, I'd say. *shrug* |
| 12:03 | aldebrn | To make sure I'm remembering correctly: one should try to use deftype instead of structmaps as of now |
| 12:03 | devlinsf | Like "Who is responsible for this"? |
| 12:03 | subhadeep | clojure rocks |
| 12:03 | rhickey | don't use underscores in ns names |
| 12:04 | replaca | Q (cause I'm too lazy to read right now): is = on a persistent data structure equivalent to lisp eq or lisp equal? (Seems like eq would be just as effective for persistent structures and a whole lot faster, but I just want to check my logic before I get too deep.) |
| 12:04 | rhickey | devlinsf: stuartsierra was supposed to be marshaling the process |
| 12:04 | devlinsf | Ah |
| 12:05 | devlinsf | rhickey: What about "A Plan for release candidates"? SS or you? |
| 12:06 | rhickey | replaca: there's no guarantee that 2 = data structures have a shared genesis and thus a shared root - can't be eq |
| 12:06 | rhickey | devlinsf: I've gotta run right now - my preference is for an absolute minimum of ceremony and fuss |
| 12:06 | devlinsf | k |
| 12:06 | devlinsf | tttyl |
| 12:07 | replaca | rhickey: ahh, yes I thought there was a hole in my thinking! I was thinking the other way around. Thanks. |
| 12:09 | aldebrn | To make sure I'm remembering correctly: one should try to use deftype instead of structmaps as of now |
| 12:10 | rhickey | very nice response so far: http://clojure.org/funders |
| 12:10 | fliebel | For those who suggested using markdownj: I got this issue as well: http://code.google.com/p/markdownj/issues/detail?id=6 and in my tests showdown+rhino runs nearly as fast. |
| 12:11 | fliebel | rhickey: maybe you should put up a donation button, or am I overlooking it? |
| 12:12 | cypher23 | fliebel, right on the front page? http://clojure.org/ |
| 12:12 | cemerick | fliebel: big honkin' image in the middle of clojure.org ;-) |
| 12:13 | fliebel | ok, mi fault, I was just looking on the funders page… my mind ignores buttons and adds for the rest of the time ;) |
| 12:14 | replaca | rhickey: Great to hear! I'll be there too, next time I'm sitting in front of my computer at home. Though I think Clojure actually *costs* me money :-) |
| 12:14 | Chousuke | rhickey: where do you think :pre and :post should be documented? defn? |
| 12:15 | drewr | rhickey: you might want to list the people that donated through sourceforge back in the day |
| 12:15 | drewr | I'll definitely be donating again though |
| 12:23 | qed | http://cr.openjdk.java.net/~mr/lambda/straw-man/ |
| 12:26 | qed | freenode has been absolutely unbearable the last couple of days |
| 12:30 | bjorkintosh | hide join/part messages :) |
| 12:30 | bjorkintosh | is it that freenode is b0rked or buggy? |
| 12:30 | nuba | and netsplits |
| 12:30 | bjorkintosh | can't the netsplits be done cleanly? |
| 12:31 | nuba | from [Global Notice] >we're still experiencing heavy ddos directed at a variety of locations where we have infrastructure hosted. |
| 12:31 | bjorkintosh | oh. |
| 12:31 | bjorkintosh | that's not nice. |
| 12:32 | nuba | nope |
| 12:32 | nuba | set yourself to +w if you want to receive these notices |
| 12:32 | nuba | /mode bjorkintosh +w |
| 12:34 | fliebel | Who made clojurebot? |
| 12:36 | chouser | clojurebot: who's your daddy? |
| 12:36 | clojurebot | who is x |
| 12:36 | chouser | fliebel: hiredman |
| 12:37 | fliebel | chouser: It's written in Clojure I guess? :D |
| 12:37 | chouser | fliebel: I believe so, yes. :-) |
| 12:37 | chouser | clojurebot: where are you? |
| 12:37 | clojurebot | http://github.com/hiredman/clojurebot/tree/master |
| 12:39 | fliebel | It would be cool if it had some voicemail functionality… |
| 12:41 | qed | why voicemail? |
| 12:41 | qed | are you calling irc channels or something? |
| 12:42 | qed | "hello, yes, this is fliebel, im looking to speak with chris houser" |
| 12:42 | Chousuke | hm. |
| 12:42 | fliebel | I mean that you can leave a message for someone who's not online |
| 12:42 | qed | "ahhh, he's away from his desk...very well then" |
| 12:42 | qed | fliebel: ahh :) |
| 12:42 | Chousuke | it might be useful to have "dummy vars" to document some features of Clojure that apply to multiple functions. |
| 12:43 | qed | Chousuke: clojurebot ! |
| 12:43 | qed | oops |
| 12:43 | qed | clojurebot: ! |
| 12:43 | clojurebot | CLABANGO! |
| 12:44 | qed | heh heh, whatever happened to Madison Square Clabango |
| 12:46 | qed | Chousuke: that makes sense to me |
| 12:48 | qed | clojurebot: outback steakhouse |
| 12:48 | clojurebot | I want to go to there |
| 12:59 | qed | clojurebot: whose job isthat |
| 12:59 | clojurebot | that's romanb's job |
| 12:59 | polypus | clojurebot: who are you? |
| 13:00 | clojurebot | You will not become skynet |
| 13:00 | the-kenny | clojurebot: skynet? |
| 13:00 | clojurebot | Gabh mo leithscéal? |
| 13:00 | the-kenny | clojurebot: skynet |
| 13:00 | clojurebot | I don't understand. |
| 13:00 | the-kenny | Hm... I thought I've told him he *will* become skynet |
| 13:00 | polypus | clojurebot: wanna come back to my pad for a drink? |
| 13:00 | clojurebot | for is not used enough |
| 13:01 | qed | heh |
| 13:01 | qed | clojurebot: e4 |
| 13:01 | clojurebot | I resign |
| 13:01 | polypus | lol |
| 13:02 | qed | clojurebot: curious |
| 13:02 | clojurebot | /nick other-clojure-bot |
| 13:02 | polypus | maybe he (she?) could do better: http://psycochess.sourceforge.net/ |
| 13:03 | qed | clojurebot: sex? |
| 13:03 | clojurebot | It's greek to me. |
| 13:04 | polypus | greek sex? |
| 13:04 | qed | kinky |
| 13:06 | qed | clojurebot: historical ninja robots |
| 13:06 | clojurebot | historical ninja robots are so 1999... |
| 13:06 | qed | clojurebot: futuristic ninja robots |
| 13:06 | clojurebot | sooo much better than any of the historical ninja robots |
| 13:06 | qed | agreed |
| 13:07 | StartsWithK | 3000 users on ml :) |
| 13:07 | qed | clojurebot: twitteronia |
| 13:07 | clojurebot | twitteronia is where shaq lives |
| 13:10 | bagucode | clojurebot: seen ztellman? |
| 13:10 | clojurebot | no, I have not seen ztellman |
| 13:10 | bagucode | clojurebot: thank you |
| 13:10 | clojurebot | You will not become skynet |
| 13:10 | qed | heh |
| 13:11 | qed | he's got an attitude today |
| 13:11 | bagucode | That's rude |
| 13:12 | cp2_ | hrm, im surprised this iphone didnt burn through my desk yet |
| 13:12 | cp2_ | Benchmarking: FreeBSD MD5 [32/32 X2]... DONE |
| 13:12 | cp2_ | Raw: 434 c/s real, 444 c/s virtual |
| 13:12 | cp2_ | er |
| 13:12 | cp2_ | http://pastie.org/private/rjhods0x4h9ocwr2mazq1g |
| 13:12 | the-kenny | clojurebot: I will become skynet |
| 13:12 | clojurebot | Titim gan éirí ort. |
| 13:12 | the-kenny | :( |
| 13:13 | qed | clojurebot: the-kenny is <reply>I heard he's becoming skynet. |
| 13:13 | clojurebot | c'est bon! |
| 13:13 | qed | clojurebot: the-kenny |
| 13:13 | clojurebot | I heard he's becoming skynet. |
| 13:13 | the-kenny | qed: No, I wanted to bring him to say he will become skynet |
| 13:13 | the-kenny | Not me ;) |
| 13:13 | qed | oh, hehe |
| 13:13 | the-kenny | qed: I told him "You will become skynet" and he got it wrong |
| 13:13 | qed | clojurebot: forget the-kenny |
| 13:13 | clojurebot | I forgot the-kenny |
| 13:15 | qed | i suppose i should quit playing with the bot now... |
| 13:16 | qed | clojurebot: leiningen is <reply>http://github.com/technomancy/leiningen |
| 13:16 | clojurebot | Ack. Ack. |
| 13:16 | KirinDave | So I was reading http://blog.higher-order.net/2009/11/23/clojure-circuit-breaker/ |
| 13:16 | KirinDave | Cool code |
| 13:17 | KirinDave | But is deftype going to become part of idiomatic clojure? |
| 13:17 | KirinDave | I thought the point of it was to allow folks to plumb clojure to java with maximum performance |
| 13:17 | devlinsf | kirindave: Yes, it is slated for 1.2 |
| 13:17 | KirinDave | devlinsf: I mean, culturally. |
| 13:17 | KirinDave | I worry that everyone will use it in preference to what exists now because it's more familiar to java programmers. |
| 13:18 | KirinDave | "I know this, this is an Object System" |
| 13:18 | KirinDave | Are there concerns about that? |
| 13:18 | qed | i wont use it because i don't like Java |
| 13:18 | qed | ;) |
| 13:18 | Raynes | 1.2? Not 1.1 :(. |
| 13:18 | Chousuke | deftype and protocols are not java things. |
| 13:18 | Chousuke | they're Clojure things. |
| 13:18 | KirinDave1 | yes, I know. |
| 13:18 | Chousuke | They're not really object-oriented either. |
| 13:19 | Raynes | I wish it would appear sooner. Feels kind of silly using structs when something that will replace them is right around the corner. |
| 13:19 | KirinDave1 | They're more similar than pure functional. |
| 13:19 | hiredman | protocols don't create an is-a relationship |
| 13:19 | KirinDave1 | Chousuke: See what Raynes just said? |
| 13:19 | Chousuke | objects couple methods with data, which neither deftype nor protocols do. |
| 13:19 | KirinDave1 | deftype, now replacing structs. |
| 13:19 | hiredman | KirinDave1: yes |
| 13:20 | KirinDave1 | Is that the intent of deftype tho? |
| 13:20 | hiredman | KirinDave1: in idiomatic clojure deftypes will be like better structs |
| 13:20 | hiredman | just holders for data |
| 13:20 | Chousuke | structmaps never were anything besides a size-optimised map |
| 13:20 | Chousuke | maps |
| 13:20 | hiredman | with a type |
| 13:21 | Raynes | And then we have reify. Isn't that going to replace proxy or something? |
| 13:21 | Chousuke | most of it. |
| 13:21 | polypus | http://stuartsierra.com/2009/12/14/objects-are-not-adts |
| 13:21 | hiredman | like datatypes in haskell or erlang |
| 13:21 | Chousuke | reify is a mostly java interop thing though I think |
| 13:22 | Raynes | I would just use the new branch of Clojure, but it still seems to break swank for me for some reason. Phil can't reproduce it. |
| 13:22 | polypus | http://www.cs.utexas.edu/~wcook/Drafts/2009/essay.pdf |
| 13:23 | Chousuke | I suppose deftype feels like object-orientation because it creates things that would be objects in Java and most OOP languages :/ |
| 13:23 | KirinDave | It just seems like what's going to happen is that idiomatic clojure is going to go from using a set of generic types to using a set of predeclared types. |
| 13:23 | chouser | structmaps don't really have a type |
| 13:23 | KirinDave | While I understand that sometimes that makes sense. |
| 13:24 | KirinDave | In general, it's unnecessary. |
| 13:24 | KirinDave | For example, in that circuit breaker example, it didn't seem necessary. |
| 13:25 | KirinDave | I'm as big a fan of Wittgenstein's ladder as the next guy, but I am concerned about how readable most clojure code will be if everyone thinks they need a ton of types for every program. |
| 13:25 | Chousuke | you'll still be using maps and vectors, don't worry. |
| 13:26 | KirinDave | I know _I_ will. |
| 13:26 | KirinDave | And 90% of the time that'll make sense |
| 13:26 | Chousuke | Well, at first everyone will be excited about the new playthings. |
| 13:26 | KirinDave | But I'd hate to start seeing other clojure code senselessly use deftype. |
| 13:26 | Chousuke | but I'm sure it'll settle down eventually. |
| 13:26 | chouser | most application-level deftypes will implement IPersistentMap |
| 13:26 | cemerick | ah, things are coming together now http://twitter.com/jvanzyl/statuses/6703401181 |
| 13:28 | KirinDave | Well, I admit to some trepidation. |
| 13:28 | KirinDave | After years of trying to get java developers to look at lisp and failing. |
| 13:29 | KirinDave | I suspect, so crassly, that if you give people a familiar construct they'll prefer it. :) |
| 13:32 | Chousuke | there are over 100 contributors already it seems. |
| 13:39 | dysinger | cemerick: we setup invoiced support with rich yesterday - did you beat me to it ? |
| 13:39 | dysinger | ;) |
| 13:40 | cemerick | dysinger: Yeah, I think we beat you, but ours isn't a monthly commitment -- we don't have all that shiny VC money ;-) |
| 13:40 | dysinger | I qualified my tweet with "first _invoiced_ monthly" just in case :P |
| 13:40 | cemerick | yeah, I saw that :-) |
| 13:40 | drewr | ugh, swank-clojure-find-package is the bane of my existence |
| 13:41 | cemerick | I'm hoping to make a monthly contribution, essentially backing into a regular royalty based on clojure-based app sales |
| 13:41 | polypus | ugh |
| 13:46 | dysinger | holy netsplit x2 |
| 13:47 | lghtng_away_away | it's DDOS |
| 13:47 | lghtng | freenode is under assault atm |
| 13:47 | hiredman | dysinger: are you guys still hiring? |
| 13:48 | dysinger | hiredman: on going yes |
| 13:49 | lghtng | maybe flks didnt hear the 'pikes to the boards' calls a few days back... |
| 13:50 | hiredman | dysinger: I sent my resume into the jobs@ address a week or two ago, and had't heard back, so I was just kind of curious |
| 13:50 | lghtng | i'd be checking me some updates on critical servers that get referenced alot in freenode traffic, there may be some flanking and spillover onto ircops and allies |
| 13:51 | dysinger | hiredman: ok thanks for the reminder |
| 13:51 | jasapp | dysinger: likewise |
| 13:51 | dysinger | hiredman: I'll go check it out - I may have missed it. |
| 13:51 | hiredman | jasapp: he'll snap a pool cue in half and make us fight for it |
| 13:52 | dysinger | jasapp: hiredman - real names ? |
| 13:52 | jasapp | I didn't write clojurebot, so I'm sure it won't be much of a fight :-) |
| 13:52 | dysinger | (so I can match up the emails) |
| 13:52 | hiredman | Kevin Downey |
| 13:52 | jasapp | Jeff Sapp |
| 13:52 | dysinger | ok - I'll setup calls with you today |
| 13:53 | hiredman | exciting |
| 13:54 | cemerick | heh, sonian is going to swallow the clojure jobs market whole ;-) |
| 13:55 | hiredman | pull a google |
| 13:56 | drewr | I'm sure dysinger wouldn't mind |
| 13:56 | jasapp | I always wondered about when google had to let go of their hiring curve philosophy |
| 13:56 | cemerick | We'll just have to grow a new batch when we're ready :-) |
| 13:56 | dysinger | We don't have endless slots but there is work |
| 13:57 | dysinger | :) I am just happy there is jobs |
| 13:57 | dysinger | These are just the beginning |
| 13:57 | cemerick | absolutely, it helps everyone |
| 13:57 | cemerick | I was a little surprised by Sonatype. They weren't on my radar at all. |
| 13:58 | dysinger | same here |
| 13:58 | dysinger | They do maven right ? |
| 13:58 | cemerick | right |
| 13:58 | dysinger | Nexus server & consulting |
| 13:58 | cemerick | I think @talios has done work there before, and he's behind clojure-maven-plugin, so I guess the conversations came easily enough. |
| 14:00 | devlinsf | cemerick, dysinger: where is this mythical clojure job market? |
| 14:00 | dysinger | devlinsf: @ home |
| 14:00 | devlinsf | Ah |
| 14:00 | cemerick | devlinsf: dysinger has ~415 devs, we've got two ;-) |
| 14:00 | devlinsf | :) |
| 14:00 | dysinger | hehehe |
| 14:00 | dysinger | We only have 5 |
| 14:01 | cemerick | yeah, but that's not nearly as wry |
| 14:01 | jasapp | are both of you at snowtide? |
| 14:01 | jasapp | cemerick, and devlinsf? |
| 14:01 | cemerick | no, dysinger is with Sonian |
| 14:01 | devlinsf | Ha, no I'm somewhere else |
| 14:02 | jasapp | ahh, ok |
| 14:02 | bagucode | dnolen: ping |
| 14:02 | dnolen | bagucode: hola |
| 14:03 | dnolen | bagucode: pong, rather |
| 14:03 | bagucode | dnolen: I just updated the default path mappings for :native-path in my leiningen fork. Turns out the "send a function from project.clj that gives back a path" was kinda tricky since everything in defproject is quoted. |
| 14:04 | dnolen | bagucode: yeah, I thought about it some more, and I think settling for a uniform lein native path standard is probably the best approach. Sorry haven't had a chance to follow up on the lein ML thread. |
| 14:04 | bagucode | But I threw in a fn? check anyway in eval-in-project so if someone manages to pass it a function it will work ;) |
| 14:06 | dnolen | bagucode: thx for working this stuff out, it's makes working with Penumbra so much simpler. So do you think supporting LWJGL will be a big project? Or mostly a swap? |
| 14:07 | bagucode | dnolen: Actually, ztellman contacted me to tell me that he was planning on switching to lwjgl! So I'm going to leave that to him obviously :) |
| 14:08 | bagucode | dnolen: This is a direct quote "Just FYI, since I noticed the comment in your project.clj file. I plan to begin work on it this weekend." |
| 14:08 | dnolen | bagucode: wow, cool. |
| 14:22 | cemerick | is DoSing freenode just an exercise in griefing, or is there a real objective? |
| 14:25 | dnolen | bagucode: i was thinking about taking a stab it, but if you are going to anyway, I'll just follow your progress ;) |
| 14:25 | technomancy | cemerick: sounds like it's targeting a host that's co-located with freenode servers |
| 14:26 | cemerick | oh, I see |
| 14:26 | mee_ | cemerick: I think it's usually just griefing, or perhaps it's the staging environment for botnet developers |
| 14:26 | mee_ | taking down freenode is one of the functional tests in their suite |
| 14:26 | mee_ | ;) |
| 14:28 | bagucode | dnolen: Alright, I'll just keep at it then. But I don't have much time (between actual work and some stupid contest I agreed to enter). But I'll tell you if I don't think I'll finish it so you can do something about it yourself if that is the case. |
| 14:29 | dnolen | bagucode: actually I'm totally up for collaboration, sorry, didn't know if you want to figure it out yourself. |
| 14:29 | dnolen | bagucode: I will definitely help. |
| 14:30 | bagucode | dnolen: I just want it to work :) I think we have the same goal here so I'll gladly take help |
| 14:30 | dnolen | bagucode: fetching your latest now ;) |
| 14:36 | alexyk | what's the idiomatic ways to do this: (merge-with (fn [vr v] (conj (if (seq? vr) vr [vr]) v)) {:a 1 :b 2} {:a 0.5 :c 4}) |
| 14:36 | alexyk | ,(merge-with (fn [vr v] (conj (if (seq? vr) vr [vr]) v)) {:a 1 :b 2} {:a 0.5 :c 4}) |
| 14:36 | clojurebot | {:c 4, :a [1 0.5], :b 2} |
| 14:37 | chouser | alexyk: the first map may have seqs as values, but the second may not? |
| 14:38 | polypus | it'd be nice if you could go: |
| 14:40 | polypus | (defmulti name fun (:thing-to-match [args] ...)) |
| 14:40 | polypus | i mean (defmulti name fun (:thing-to-match [args] ...) ...) |
| 14:40 | devlinsf | alexy: use group-by |
| 14:40 | devlinsf | alexyk: (Sorry) Check clojure.contrib.seq-utils |
| 14:40 | devlinsf | Something like (group-by key a-coll-of-maps) |
| 14:40 | polypus | w/o always having to rewrite the method names and defmethod |
| 14:41 | chouser | polypus: should be an easy enough macro to write. :-) |
| 14:42 | devlinsf | alexyk: Hmm... maybe... |
| 14:43 | devlinsf | alexyk: no, I like your version |
| 14:44 | devlinsf | I can't get group-by to work w/o a second mapping operation |
| 14:44 | mee_ | except re: chouser's comment, i think 'v' should be replaced with an if to handle v being a seq-providing-thing |
| 14:44 | devlinsf | Well... maybe a pivot.... |
| 14:45 | devlinsf | Yeah |
| 14:45 | devlinsf | Check this out: |
| 14:45 | devlinsf | My Pivot: http://groups.google.com/group/clojure-dev/browse_thread/thread/9a518c853bfbba8b# |
| 14:46 | devlinsf | Or Alex Osborne's Map reduce by |
| 14:46 | mee_ | oh, conj handles that, nm |
| 14:46 | devlinsf | Alexyk: http://groups.google.com/group/clojure/browse_thread/thread/7a17676521019237 |
| 14:47 | devlinsf | Alexyk: Yeah, use alex's version |
| 14:48 | polypus | chouser: yep, just thought it'd be good in core |
| 14:48 | polypus | irc = fail |
| 14:51 | stuartsierra | I feel like there was not a consensus on whether or not we were doing anything with contrib in conjunction with 1.1. |
| 14:51 | mefesto | hey everyone. is there some procedure i need to go through in order to be able to post to the clojure google group? I'm already registered as a member but my replies don't seem to go through. |
| 14:51 | stuartsierra | mefesto: new members are moderated |
| 14:52 | devlinsf | stuartsierra: I think we're supposed to bundle contrib as-is |
| 14:52 | devlinsf | stuartsierra: At least something is frozen |
| 14:52 | mefesto | stuartsierra: ok, thanks. |
| 14:52 | stuartsierra | devlinsf; Bundle, as in, put contrib in clojure.jar? |
| 14:52 | stuartsierra | That would mean big changes to the build/packaging process. |
| 14:52 | rhickey | stuartsierra: I think it got muddled between making a branch of contrib, bringing parts of contrib into core, and the original question (for me at least), bundling some parts of contrib in the release zip |
| 14:53 | stuartsierra | rhickey: Right. So what do you want to do? |
| 14:53 | stuartsierra | My inclination is to get Clojure 1.1 out the door, then deal with contrib. |
| 14:57 | devlinsf | Would freezing contrib "as-is", and calling contrib 1.1 be good enough? |
| 14:57 | devlinsf | 2 different jars |
| 14:58 | mattrepl | anyone been working on a queue protocol/interface for passing messages between threads and/or VMs? |
| 14:58 | stuartsierra | devlinsf: I'm not thrilled by that prospect, but it would help out with the dependency issues, at least. |
| 14:58 | chouser | Java comes with queues for passing between threads. BlockingQueues |
| 14:59 | chouser | mattrepl: agents have queues inside, too. |
| 14:59 | devlinsf | stuartsierra: That's my main concern. At least there would be a common jar to build applications against |
| 15:00 | stuartsierra | devlinsf; Yeah, probably the best we can achieve before the end of '09. |
| 15:00 | mattrepl | chouser: you mean in the sense that there's a pool of agents? |
| 15:00 | devlinsf | stuartsierra: I'd be very happy with that. |
| 15:00 | devlinsf | It's above my pay grade, though :) |
| 15:00 | chouser | agents queue up to use threads from the pool (when using 'send' not 'send-off'), but also actions queue up to be serviced by the agent they were sent to. |
| 15:01 | mattrepl | chouser: cool, didn't realize the latter |
| 15:01 | stuartsierra | devlinsf: It's above everyone's pay grade; we're hackers, not release managers. ;) |
| 15:02 | devlinsf | stuartsierra: Too true. |
| 15:02 | technomancy | it's unfortunate that it's impossible to build a project that uses both Clojure 1.0 and contrib using automated dependency mechanisms |
| 15:02 | chouser | well, except stuartsierra's been deputized. He's a release manager now. |
| 15:02 | technomancy | hopefully 1.1 can avoid that fate |
| 15:02 | stuartsierra | Oh, yeah. :| |
| 15:02 | devlinsf | technomancy: Would this plan help lien? |
| 15:03 | technomancy | devlinsf: it would help everyone using stable releases who doesn't want to build and copy their jars around by hand. |
| 15:03 | stuartsierra | We could even back-release "contrib 1.0", but I'll put that off 'till january. |
| 15:03 | technomancy | leiningen, clojure-maven-plugin, and ivy alike. |
| 15:04 | devlinsf | stuartsierra: Awesome. how did you feel about my proposal here: http://groups.google.com/group/clojure-dev/browse_thread/thread/c0b9b7857f19001c |
| 15:05 | devlinsf | stuartsierra: It's basically what we're saying |
| 15:05 | stuartsierra | devlinsf: need to test maven/ant/build stuff first, and finish the changes doc, but otherwise yes |
| 15:06 | devlinsf | Okay |
| 15:06 | devlinsf | stuartsierra: Rich was talking about removing the transients section, and linking to the clojure page directly |
| 15:07 | stuartsierra | devlinsf: I wondered about that myself. |
| 15:07 | devlinsf | stuartsierra; Hmmmm... at the very minimum we should provide a link |
| 15:10 | devlinsf | Link inserted |
| 15:12 | devlinsf | stuartsierra, rhickey: After thinking a bit, I like the idea of leaving the transients section in. Have more than one explanation in place would help people pick up the concept. Hearing it explained differently will help different people. |
| 15:14 | stuartsierra | "mvn install" doesn't work in current Clojure master; even after "ant" |
| 15:17 | cemerick | yeah, the poms are just wrong |
| 15:18 | stuartsierra | I'm tempted to rewrite as a Maven-based build, calling out to Ant for scripting. |
| 15:19 | ericthorsen | cemerick: Are you referring to the default source root in the pom files (or lack thereof) |
| 15:20 | albino | why not call out to clojure :) |
| 15:20 | cemerick | stuartsierra: I floated that last week, rhickey didn't sound receptive |
| 15:20 | stuartsierra | albino: because we're building Clojure! |
| 15:20 | cemerick | ericthorsen: to start, yes |
| 15:20 | stuartsierra | cemerick: ok, I can probably hack the POM so it works with the ant build |
| 15:21 | alexyk | hey guys, I know it's almost cast in stone, but contrib is really stdlib |
| 15:21 | albino | stuartsierra: so we can't call out to the previous version of clojure while building the newer version? |
| 15:21 | cemerick | stuartsierra: I think 1.2 is a reasonable goal for lobbying for a maven-driven build |
| 15:21 | alexyk | perhaps a similar mechanism can be deployed as for clojure-lang to rename it |
| 15:21 | alexyk | with an alias to c.c. until deprecated |
| 15:21 | stuartsierra | albino: theoretically we could, but the we'd need to include the old version in the build |
| 15:21 | cemerick | *parts* of contrib are a stdlib. Other parts, not so much. |
| 15:22 | albino | stuartsierra: okay, I'll stop harping, but I'd rather install a previous version of clojure over ant and maven :) |
| 15:22 | ericthorsen | cemerick: I was going to submit a patch until I saw that having more than one source root for a maven project was not supported out of the box (I know little about MAven) |
| 15:22 | alexyk | cemerick: exactly. So perhaps a smaller, fixed stdlib can be carved out of contrib. |
| 15:22 | stuartsierra | albino: you'll probably only need ant |
| 15:22 | cemerick | ericthorsen: multiple source roots aren't a problem, that's a simple fix |
| 15:22 | devlinsf | alexyk: See here: |
| 15:22 | stuartsierra | alexyk: that's a goal in my mind for 1.2 |
| 15:23 | cemerick | getting the compilation and install/deployment of the various artifacts will take a little bit of work |
| 15:23 | devlinsf | http://groups.google.com/group/clojure-dev/browse_thread/thread/e5083948af33939f# |
| 15:23 | cemerick | devlinsf: thank you |
| 15:24 | devlinsf | me 4.... |
| 15:24 | cemerick | I think that's a more productive path than promoting libs |
| 15:24 | devlinsf | Just don't know how to set status in irc... |
| 15:24 | stuartsierra | I've got a whole set of standard libs laid out in my head. |
| 15:24 | stuartsierra | devlinsf: type /me then your status |
| 15:24 | alexyk | ah ok, link covers it |
| 15:24 | devlinsf | stuartsierra: Thanks |
| 15:24 | stuartsierra | devlinsf: welcome |
| 15:25 | stuartsierra | But first, 1.1 or bust! |
| 15:25 | devlinsf | Yes, 1.1 |
| 15:25 | devlinsf | stuartseirra: Want to talk to you about str-utils for 1.2... but it can wait |
| 15:26 | cemerick | I'd actually rather see a real stdlib discussion hold off until 1.3 or whatever -- get the types, protocols, reify under our belt |
| 15:26 | chouser | also, parts of clojure.jar are stdlib |
| 15:26 | chouser | clojure.xml, clojure.zip |
| 15:26 | devlinsf | clojure.test |
| 15:27 | stuartsierra | rhickey: I'm going to make a ticket for Maven-related stuff in 1.1, ok? |
| 15:29 | stuartsierra | cemerick: good point re types/protocols/reify |
| 15:29 | stuartsierra | In the interim, numbered contrib releases might help some people out. |
| 15:30 | cemerick | If a transition to maven can be made, then that's *almost* not necessary. |
| 15:30 | stuartsierra | cemerick: almost |
| 15:30 | cemerick | ...or, so easy to do as to make it a non issue :-) |
| 15:30 | stuartsierra | Right. |
| 15:30 | Chousuke | hmm |
| 15:31 | stuartsierra | Here's an easy fix for a Java person: http://www.assembla.com/spaces/clojure/tickets/218-Deprecate-old-launch-Classes |
| 15:31 | alexyk | stuartsierra: will maven releases cover cases for different branches? in Scala, it's solved by suffixing the maven artifactId with a version, e.g. scala-json-2.7.7 vs scala-json-2.8-SNAPSHOT. Then the version field is a true version. This is the consensus for Maven-centric tools after a lot of trying. |
| 15:31 | Chousuke | I wrote some documentation for function pre- and postconditions but I still don't like that it all is in the fn docstrings |
| 15:32 | alexyk | E.g. I'd like to try protocols in an easy to build way, having clojure-new, contrib-new all properly stuffed into maven |
| 15:32 | stuartsierra | alexyk: We're close to that with build.clojure.org |
| 15:32 | Chousuke | ideally you should be able to do something like (doc preconditions) and (doc postconditions) :/ |
| 15:33 | stuartsierra | Chousuke: could you copy that into the Changes doc? |
| 15:33 | Chousuke | stuartsierra: Sure. |
| 15:33 | stuartsierra | Chousuke: thanks |
| 15:33 | alexyk | stuartsierra: how close? :) is the convention the same? I've seen clojars kinda tossig namespaces, suggesting same naming for groupId and artifactId. Doesn't help with language branches at all. |
| 15:34 | alexyk | i.e., where does the "new" branch suffix go? |
| 15:34 | alexyk | btw "new" is quite a terrible branch name |
| 15:34 | stuartsierra | alexyk: I don't have answers for you, I'm afraid. |
| 15:35 | alexyk | stuartsierra: you're the first person not spitting nails about maven but rather wanting something to do with it, hence my asking :) |
| 15:36 | stuartsierra | alexyk: I will continue to push for regular Maven-based releases, but there's a lot of organizing to do. |
| 15:36 | alexyk | stuartsierra: good |
| 15:37 | hiredman | alexyk: new refers to new new, the main feature the branch was originally for work on |
| 15:38 | alexyk | hiredman: right, but in maven, it better be called clojure-proto or something meaningful. There's also something new, and nothing's new under the Sun. |
| 15:39 | alexyk | always new, I mean |
| 15:39 | stuartsierra | ok, I'm off for a bit, I'll try to tackle the 1.1 POM this evening |
| 15:40 | hiredman | alexyk: the feature that the new branch was originally made to work was called "new" |
| 15:40 | alexyk | hiredman: ah, ok. Well it takes 3 iterations to penetrate a head. :) |
| 15:41 | alexyk | It's like a person called Andwhatsyourname. |
| 15:42 | alexyk | "-- My name is John. -- Andwhatsyourname! -- John, and yours? Andwhatsyourname! ..." |
| 15:48 | devlinsf | alexyk Who's on first? |
| 15:48 | alexyk | devlinsf: I don't get baseball, so that makes no sense to me :) |
| 15:49 | devlinsf | gasp! |
| 15:49 | devlinsf | It's a classic! |
| 15:50 | alexyk | devlinsf: I know, still makes no sense! :) |
| 15:54 | lghtng | baseball is a test of coolness under pressure |
| 15:55 | lghtng | unlike continuous action sports that arent quite as dependent on actual 'zero to 60' quickness |
| 16:01 | KirinDave | oh man |
| 16:01 | alexyk | lghtng: baseball is middle-aged men in tight pants leisurely walking around for 8 hours |
| 16:01 | KirinDave | This is not a good conversation to have in #clojure. |
| 16:01 | devlinsf | So it doesn't belong in this ball park? |
| 16:02 | alexyk | ok, back to basics. How do I merge a seq of tiny maplets, ({:a 1} {:b 2}) into one huge map, {:a 1 :b 2} most concisely & fast? My seq is long. |
| 16:02 | arohner | ,(doc merge) |
| 16:02 | clojurebot | "([& maps]); Returns a map that consists of the rest of the maps conj-ed onto the first. If a key occurs in more than one map, the mapping from the latter (left-to-right) will be the mapping in the result." |
| 16:03 | alexyk | ,(merge ({:a 1} {:b 2})) |
| 16:03 | clojurebot | nil |
| 16:03 | KirinDave | And also |
| 16:03 | chouser | ,(apply merge ({:a 1} {:b 2})) |
| 16:03 | clojurebot | nil |
| 16:03 | KirinDave | ,(doc merge-with) |
| 16:03 | clojurebot | "([f & maps]); Returns a map that consists of the rest of the maps conj-ed onto the first. If a key occurs in more than one map, the mapping(s) from the latter (left-to-right) will be combined with the mapping in the result by calling (f val-in-result val-in-latter)." |
| 16:03 | chouser | ,(apply merge [{:a 1} {:b 2}]) |
| 16:03 | clojurebot | {:b 2, :a 1} |
| 16:03 | alexyk | I don't need -with, I'm guaranteed to have distinct keys. |
| 16:04 | alexyk | ,(merge {:a 1} {:b 2}) |
| 16:04 | clojurebot | {:b 2, :a 1} |
| 16:04 | KirinDave | Lol |
| 16:04 | alexyk | works for literals, not for enclosing seq |
| 16:04 | danm_ | ,(reduce merge '({:a 1} {:b 2} {:c 3})) |
| 16:04 | clojurebot | {:c 3, :b 2, :a 1} |
| 16:05 | danm_ | yay? |
| 16:06 | the-kenny | ,(apply merge '({:a 1} {:b 2} {:c 3})) |
| 16:06 | clojurebot | {:c 3, :b 2, :a 1} |
| 16:06 | alexyk | danm_: leaves me with only the last element of real data, which I test with (take 5 bigseq)... |
| 16:07 | danm_ | hmm, worked for clojurebot though |
| 16:08 | hiredman | alexyk: are you sure you are using it correctly? |
| 16:09 | alexyk | hiredman: no :) |
| 16:09 | hiredman | … |
| 16:10 | alexyk | wtf: http://paste.pocoo.org/show/157258/ ? |
| 16:10 | alexyk | doh |
| 16:10 | alexyk | I need to invert keys... |
| 16:10 | hiredman | … |
| 16:11 | djork | reduce + merge? |
| 16:11 | djork | are you positive? |
| 16:11 | hiredman | djork: his keys are not unique |
| 16:11 | devlinsf | alexyk: clojure.set |
| 16:11 | alexyk | djork: works, my data was inverted |
| 16:11 | alexyk | I fetch from Mongo and just need to insert into the map differently |
| 16:12 | alexyk | btw that was justinbieber dominating twitter pagerank. How many of you know who that is? (instant poll) |
| 16:13 | alexyk | or, does *anybody* know who Justin Bieber is? |
| 16:14 | alexyk | ...there's nothing wrong in admitting you do! :) For the betterment of science. |
| 16:29 | alexyk | is there a filter-not predefined? |
| 16:30 | chouser | remove |
| 16:30 | alexyk | thx! |
| 16:35 | lghtbt | hrm |
| 16:36 | lghtng | the sparlq might be a little steep for me at this point |
| 16:36 | lghtng | i need something simpler |
| 16:36 | lghtng | as a learning project |
| 17:02 | mabes | ,(let [foo (transient {})] (doseq [i (range 15)] (assoc! foo i i)) (persistent! foo)) |
| 17:02 | clojurebot | {0 0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 6, 7 7} |
| 17:03 | mabes | does anyone know why I could only assoc! 8 times within a doseq? ^^ (I'm using transients to count stuff) |
| 17:03 | Chousuke | mabes: that's abuse of transients |
| 17:04 | Chousuke | mabes: you can't reuse the reference. |
| 17:05 | mabes | Chousuke: well, I have a version that is not using transients and just uses maps with persistent structures but the memory use is an issue |
| 17:05 | Chousuke | mabes: no, I mean |
| 17:05 | mabes | so, I found this post that suggested using transients for something similar: http://www.bestinclass.dk/index.php/2009/12/clojure-vs-ruby-scala-transient-newsgroups/ |
| 17:05 | Chousuke | mabes: you can't write imperative code with transients. |
| 17:05 | mabes | oh |
| 17:05 | mabes | hrm. |
| 17:05 | Chousuke | mabes: it's mutable, but it still needs to be functionally structured. |
| 17:06 | Chousuke | mabes: treat it as it were a regular immutable map and everything will be fine. |
| 17:06 | mabes | Chousuke: ok, so I would need to restructure the comprehension into maps or something? |
| 17:08 | alexyk | liebke: how do I plot 4 mllion [x y] pairs? |
| 17:08 | liebke | very carefully :-) |
| 17:08 | Chousuke | mabes: http://gist.github.com/257351 |
| 17:09 | alexyk | liebke: I mean, what's the fun for scatter plot? And will JFreeCharts take 4 mil? |
| 17:09 | Chousuke | mabes: build it just as if it were a functional map, just substituting assoc for assoc! and wrapping the final return value with (persistent! ..) |
| 17:10 | the-kenny | alexyk: Maybe just write them to a file and call gnuplot on it |
| 17:10 | alexyk | the-kenny: the whole point of using incanter is to dispense with files :) |
| 17:10 | liebke | the function is incanter.charts/scatter-plot. I would be (pleasantly) surprised if it handled 4 mil points |
| 17:10 | alexyk | liebke: need I sort them anyhow? |
| 17:11 | liebke | no |
| 17:11 | Chousuke | mabes: the whole point is that you don't need to change the way you write algorithms just to use transients :) |
| 17:11 | alexyk | liebke: well, histogram can handle millions; I wonder how can I bucket points to plot fewer... |
| 17:12 | mabes | Chousuke: right. Thanks for the info and gist. Reading up on transients now.. |
| 17:12 | liebke | alexyk: try it with the full set, see how it goes |
| 17:13 | alexyk | liebke: My data is a seq ([1 2][3 4]...), should I just call scatter-plot repeatedly with it? |
| 17:14 | liebke | scatter-plot takes two sequences, x and y -- you'll need to convert your data format a bit |
| 17:14 | alexyk | ah ok |
| 17:14 | technomancy | it seems like a lot of the confusion over transients stems from confusion between "persistent" and "immutable" data structures. |
| 17:15 | technomancy | I understand why they are often conflated, but if you focus on the fact that transients are simply not persistent then it's much clearer |
| 17:15 | Chousuke | that's why I like the naming. |
| 17:15 | rhickey_ | yes, the idea is that they are opposites |
| 17:16 | rhickey_ | in that dimension |
| 17:16 | technomancy | if people don't understand what persistence means, it's no wonder transients are confusing. |
| 17:17 | Chousuke | rhickey_: btw, how about extending the assert macro to accept an optional message argument? Could make error messages much clearer. |
| 17:17 | the-kenny | It's helpful to read the text about the falling tree :) |
| 17:17 | Chousuke | wouldn't be a breaking change either. |
| 17:20 | Chousuke | rhickey_: I have some documentation stuff in my git tree, and I think the pre/postcondition failure messages are a bit too generic. "assertion failure: (> x y)" is not very nice :/ |
| 17:22 | lghtng | 'creating identities out of things that should be values' |
| 17:22 | lghtng | man. that's deep. |
| 17:23 | polypus | is there something like finite? implemented for seqs and collections? |
| 17:25 | lghtng | you know, i sort of have a theory that object oriented paradigm creep has damaged the business model, which has given birth to the Cloud. a sort of mass retreat behind the firewalls. |
| 17:25 | technomancy | polypus: See http://en.wikipedia.org/wiki/Halting_problem =) |
| 17:26 | polypus | haha |
| 17:26 | hiredman | ~the halting problem? |
| 17:26 | clojurebot | "There is no problem in computer programming which cannot be solved by an added level of indirection." -- Dr Maurice Wilkes |
| 17:27 | drewr | technomancy: you noticed that swank-clojure-find-package doesn't work for namespaces with meta? |
| 17:27 | polypus | this could be done though if one knoew the origin of a seq. like (map f [1 2 3]). metadata could indicate that the seq is finite. |
| 17:27 | polypus | knew* |
| 17:27 | hiredman | ~halting problem? |
| 17:27 | clojurebot | not a problem, the average bid for it on getacoder is $821.00 |
| 17:27 | technomancy | drewr: I don't work with any namespaces that have metadata (other than docstrings), so I haven't noticed that myself. |
| 17:27 | technomancy | waiting for someone who does use them to submit a patch. =) |
| 17:28 | drewr | I don't work with them either until I try to patch code that does, e.g. clojure.core :-) |
| 17:28 | polypus | if it is unknown whether it is finite false could be returned from finite? |
| 17:29 | drewr | envisioning the regexp that mimics the clojure reader is giving me a headache |
| 17:29 | alexyk | liebke: can I first do (def myplot (scatter-plot xs ys)) and then (view ..) it? |
| 17:29 | liebke | yes |
| 17:29 | technomancy | drewr: boo; when did that get added to core.clj. =( |
| 17:29 | lpetit | polypus: in the case of a seq, how do you know it is unknown ? :-) |
| 17:29 | alexyk | well it's ingesting 4 mil points, let's see :) |
| 17:30 | polypus | (:finite (meta a-seq)) |
| 17:30 | technomancy | drewr: not supporting it was my subtle way of discouraging people from adding useless metadata, but I guess if it's made its way into core that battle is lost. =( |
| 17:32 | polypus | map could set the meta of a new seq from a finite collection to true. if it is mapping a seq onto a seq it could inherit the meta |
| 17:32 | polypus | cycle could return a seq with #^{:finite false} etc. |
| 17:33 | polypus | is there some reason this could not work? |
| 17:33 | liebke | alexyk: cool, I need to go now, let me know later if it works. |
| 17:33 | alexyk | liebke: yeah, still ingesting... |
| 17:34 | liebke | alexyk: I imagine it will take a while. talk to you later |
| 17:34 | alexyk | liebke: ttyl |
| 17:34 | tomoj | polypus: it bottoms out |
| 17:34 | lpetit | polypus: i don't know |
| 17:34 | tomoj | and where it bottoms out, I'm sometimes going to have to say for myself whether it's finite or infinite |
| 17:35 | arohner | tomoj: what do you mean by 'bottoms out'? |
| 17:35 | polypus | tomoj: in cases where it is unknown it just just return false |
| 17:36 | hiredman_ | polypus: if you want a finite seq, use a list |
| 17:36 | tomoj | polypus: ok, that could work |
| 17:36 | arohner | polypus: another way to think of this is seqs have two methods: give me the next, and give me the rest |
| 17:37 | arohner | "give me the rest" is a function that is almost arbitrary |
| 17:37 | tomoj | arohner: I mean that eventually the value for :finite has to come from somewhere, and there are places where there is no way for it to automatically be provided |
| 17:37 | lpetit | polypus: use case for this new "functionality" ? |
| 17:37 | tomoj | (unless you just are conservative and have it be false when you don't know) |
| 17:37 | polypus | tomoj: example of a place |
| 17:38 | arohner | polypus: I can construct a valid lazy seq that is infinite on Tuesdays, and finite the rest of the days of the week |
| 17:38 | tomoj | :) |
| 17:38 | polypus | lpetit: when designing an api where the user can supply a collection and you need to know whether it is finite w/o the user having to specify it explicitly. |
| 17:38 | arohner | so it does come down to the halting problem |
| 17:39 | tomoj | suppose we have a predicate that returns true if the number passed to it is the sum of two primes, false otherwise |
| 17:39 | technomancy | polypus: calling it "finite?" is misleading; the best you can do is "known-finite?" |
| 17:39 | polypus | sure the name is not set in stone |
| 17:39 | hiredman_ | if it is finite, use a list |
| 17:39 | tomoj | now (take-while goldbach? (iterate (partial + 2) 2)) |
| 17:39 | hiredman_ | ,(list? (iterate inc 0)) |
| 17:39 | clojurebot | false |
| 17:39 | tomoj | no one knows whether this seq is finite or infinite :( |
| 17:39 | hiredman_ | ,(seq? (iterate inc 0)) |
| 17:39 | clojurebot | true |
| 17:40 | hiredman_ | ,(apply list (take 5 (iterate inc 0)))) |
| 17:40 | clojurebot | (0 1 2 3 4) |
| 17:40 | arohner | that needs to die as an idiom |
| 17:41 | tomoj | yeah |
| 17:41 | Chousuke | hmm |
| 17:41 | Chousuke | ,(range) |
| 17:41 | clojurebot | java.lang.IllegalArgumentException: Wrong number of args passed to: core$range |
| 17:41 | technomancy | arohner: why a function? why not just a var? positive-integers |
| 17:41 | hiredman_ | technomancy: var would hold the head |
| 17:41 | Chousuke | technomancy: head holding |
| 17:41 | technomancy | doh |
| 17:42 | lpetit | polypus: as hiredman said, in your api, either expect your user to pass a real collection (finite), or a seq (possibly infinite) + the explicit flag saying if it's finite or unknown ? |
| 17:42 | tomoj | something for just generating arithmetic sequences would be cool |
| 17:43 | tomoj | [2,4,..] |
| 17:44 | lpetit | technomancy: can you explain to me the difference between "persistent" and "immutable", or more interestingly, where the difference is important ? |
| 17:45 | hiredman_ | tomoj: uh, what is iterate then? |
| 17:46 | technomancy | lpetit: in a nutshell, persistent means "old versions are still available for use without performance penalties", which means that persistent data structures are immutable, but not neccessarily vice versa |
| 17:46 | technomancy | it probably deserves a blog post. we'll see. =) |
| 17:46 | chouser | but transients are still their own thing. |
| 17:46 | technomancy | actually not 100% sure if the "without perf penalties" is part of a strict definition of persistent, but in the context of clojure it's true |
| 17:46 | chouser | not immutable and therefore not persistent. But also cannot be treated as mutable. |
| 17:47 | technomancy | chouser: but their mutability is an implementation detail that the user shouldn't be aware of. the user should just be aware of their non-persistence |
| 17:47 | technomancy | IIUC |
| 17:47 | rhickey_ | technomancy: yes, that's the better way to think about it. |
| 17:48 | rhickey_ | because mutability is a weak concept |
| 17:48 | tomoj | hiredman_: something I can use to make something which is for generating arithmetic sequences |
| 17:48 | aldebrn | Noob question about mutability. How should I think about Java numerical libs that operate on arrays in-place? Should my wrapper function somehow copy the input, send that to the Java lib, and return the processed copy to the caller? |
| 17:49 | rhickey_ | I didn't have time earlier, but I have some new ideas around transients |
| 17:49 | technomancy | it doesn't help that to many developers coming from OO, persistence means "saving to disk". (all the good words have been used) |
| 17:50 | rhickey_ | yeah |
| 17:51 | hiredman_ | ~latex \sum_{i=0}^{∞} i+1 |
| 17:52 | notallama | is there a conventional way to name types with deftype? Like-this, OrThis, or-this? |
| 17:53 | lpetit | technomancy: so "persistent", beyond conveying the meaning of immutability, also conveys the meaning that derivative objects can be made cheaply from the datastructure at hand ? |
| 17:55 | technomancy | lpetit: more or less. and that old versions persist for free. |
| 17:56 | rhickey_ | lpetit: the performance promises are those of the data structure. persistence really gets to the fact that 2 versions have independent lifetimes, both preserving those promises |
| 17:57 | rhickey_ | vs implementations that cheat and have perf degrade for older versions, or older versions are read-only etc |
| 17:58 | rhickey_ | for me, full persistence means older is as good as newer |
| 18:13 | KirinDave | Hm |
| 18:14 | KirinDave | I am trying to read that monad tutorial for clojure. |
| 18:14 | KirinDave | (at http://onclojure.com/2009/03/06/a-monad-tutorial-for-clojure-programmers-part-2/) |
| 18:14 | KirinDave | The "mystery" exercise is eluding me though |
| 18:15 | KirinDave | Does anyone know what the intent was there? |
| 18:18 | hiredman_ | man |
| 18:18 | hiredman_ | clojure cds! |
| 18:18 | hiredman_ | like a relase of clojure + contrib on a cd with a printed picture on it |
| 18:19 | hiredman_ | the swirly λ logo thing |
| 18:22 | technomancy | mwoichandising!</space-balls> |
| 19:02 | notallama | so i need to run some functions sequentially. order doesn't matter, but only 1 should run at a time. agents don't fit, because i need the value, not the side-effect. atoms don't work because it shouldn't retry. any suggestions? |
| 19:07 | arohner | notallama: do you need some kind of threading? Why not just a normal function? |
| 19:07 | arohner | [(funA) (funB) (funC)] |
| 19:09 | notallama | arohner: i'm trying to wrap a side-effectful, mutable-stateful library. so i'm calling the function from multiple threads, but i want it to block if another thread is doing so. |
| 19:10 | arohner | ,(doc promise) |
| 19:10 | clojurebot | "([]); Experimental. Returns a promise object that can be read with deref/@, and set, once only, with deliver. Calls to deref/@ prior to delivery will block. All subsequent derefs will return the same delivered value without blocking." |
| 19:10 | arohner | or maybe |
| 19:10 | arohner | ,(doc future) |
| 19:10 | clojurebot | "([& body]); Takes a body of expressions and yields a future object that will invoke the body in another thread, and will cache the result and return it on all subsequent calls to deref/@. If the computation has not yet finished, calls to deref/@ will block." |
| 19:14 | notallama | not quite what i need. i think i know what i need now, though. it just occured to me that this thing is basically an iterator, so a lazy-seq should work. |
| 19:15 | arohner | ah, that's interesting. you're right though, one instance of a lazy seq will evaluate each item once, in order |
| 19:16 | notallama | i think repeatedly will make this crap much easier to deal with. |
| 19:20 | mabes | I am trying to use pmap on some big chunks of data. It seems to work great and churns through everything but after it outputs the data the process just hangs for several seconds.. does that sound familiar to anyone? |
| 19:22 | _ato | mabes: add (shutdown-agents) to the end of your program |
| 19:22 | mabes | _ato: ahh, so pmap use agents under the hood that you have to shutdown explicitly... thanks for the tip |
| 19:26 | _ato | mabes: yeah, well I don't think it uses agents exactly but it uses the same thread pool. That's something that I trip over all the time. Not sure why it can't happen automatically. |
| 19:27 | mabes | _ato: ok. many thanks, that was very frustrating but we are now seeing major win with pmap :) |
| 19:28 | notallama | future uses the agent pool as well (the send-off pool) |
| 19:31 | arohner | _ato: AFAIK, java doesn't have a "it's time to shut down now" hook, so code can't clean itself up automatically |
| 19:31 | arohner | ah, nm. I has one, but has been deprecated since 1.2 |
| 19:31 | arohner | s/I has/it has/ |
| 19:31 | hipertracker | how tu run clojure script from the shell? What shebang I can use? |
| 19:35 | technomancy | hipertracker: there's a shell script in contrib, but there's really no single good way to do that unfortunately. everyone seems to end up rolling their own launchers. =( |
| 19:36 | hipertracker | technomancy: its is strange. even Scala has simple shebang |
| 19:37 | twbray | _ato: Waiting with bated breath for your WF writeup. |
| 19:42 | _ato | twbray: I'm on the final section. :-) Sorry, I'm a terribly slow writer |
| 19:42 | twbray | _ato: nag, nag nag |
| 19:45 | hipertracker | technomancy: I create simple bash file cljrun: java -cp /opt/local/share/java/clojure/lib/clojure.jar clojure.main $1. it work |
| 19:45 | hipertracker | er, it works |
| 20:03 | technomancy | hipertracker: there's no standard location for the jar(s) though. plus most programs at least use contrib. and then many use other third-party jars as well. |
| 20:04 | hipertracker | technomancy: I know. I use clojure from macport |
| 20:04 | hipertracker | macports |
| 20:06 | hiredman_ | technomancy: you can replace the system classloader with something you can add stuff to |
| 20:08 | hiredman_ | (I happen to have such a classloader am looking for feedback) |
| 20:20 | technomancy | hiredman_: O RLY? send 'er on over. |
| 20:20 | technomancy | sounds intriguing |
| 20:21 | hiredman_ | http://gist.github.com/255766 if you run that, it will create a cl.jar in the pwd, and print instructions for use |
| 20:21 | technomancy | will take a look later tonight; thanks |
| 20:22 | hiredman_ | let me know what you think |
| 20:29 | aldebrn | Any right way to do complex numbers in Clojure? (I'm using JTransform, it stores complex number arrays as [real1 imag1 real2 imag2 real3 imag3]) |
| 20:31 | defn | aldebrn: check out http://commons.apache.org/math/userguide/complex.html |
| 20:32 | defn | aldebrn: if you're going for speed, Java might not be the right direction |
| 20:34 | defn | aldebrn: also, just out of curiosity i found there is a clojure-contrib library in the works for |
| 20:35 | aldebrn | defn, thanks. I guess I'm looking for the same kind of speed Python and Matlab give, by farming out heavy math stuff to custom C/Fortran libraries |
| 20:35 | defn | ah |
| 20:35 | defn | for it* |
| 20:35 | aldebrn | I saw that too, and was discouraged by clojure-contrib's complex support as limited to arithmetic/compare |
| 20:36 | defn | *nod* -- as far as speed goes it looks like C, C++, etc. is probably the best route |
| 20:38 | aldebrn | I want to emphasize that scientific computing in Python/Matlab (this latter is heavily Java-based) is very fast computationally (thanks to external libraries) and very fast coding (thanks to high-level language) |
| 20:38 | aldebrn | Are you suggesting I find what C/C++/Fortran libraries are used and write wrappers for Clojure? |
| 20:39 | defn | aldebrn: i dont know enough to give you a definite answer |
| 20:39 | defn | but that seems like a possible route, no? |
| 20:41 | aldebrn | Anything is possible :). liebke is gathering a lot of functionality in Incanter, let's hope the complex-number work has been done |
| 20:41 | defn | aldebrn: sure, it's hard to imagine incanter wouldn't at some point have complex numbers |
| 20:42 | liebke | aldebrn: Parallel Colt has complex number support, I just haven't needed it, so I haven't wrapped it |
| 20:43 | aldebrn | liebke, that's great. I'll look into it |
| 20:43 | aldebrn | Hard to do FFTs without easy complex numbers |
| 20:46 | aldebrn | Parallel Colt todo item: 'Port PLASMA 2.0 and implement all the wrappers (include complex arithmetic in single and double precision).' |
| 20:46 | aldebrn | But the basic stuff is there :)! |
| 21:11 | dnolen | _ato: ping |
| 21:12 | dnolen | _ato: so there a 10mb limit on Clojars uploads? I'm trying to get jogl2 up there so I can hack on :native-dependencies support, can this be upped just a tad? |
| 21:12 | dnolen | _ato: my jogl2 jar is 11.8mb |
| 21:17 | _ato | dnolen: ah sure. I just set a conservative 10mb to start with. Just a sec |
| 21:18 | dnolen | _ato: thx! |
| 21:22 | _ato | dnolen: give it a try now |
| 21:22 | dnolen | _ato: working like a charm. |
| 21:23 | _ato | cool. :) |
| 21:25 | Raynes | I'm surprised people still use the whole "OMG but it's a better OS than it is a text editor." thing anymore. |
| 21:27 | dnolen | _ato: how do you delete something you've pushed? does pushing something again wipe out the old one? |
| 21:27 | _ato | dnolen: if it's the same version then yeah it'll overwrite it |
| 21:28 | _ato | a delete function is on my TODO list but I haven't gotten around to it yet. |
| 21:28 | dnolen | _ato: ok cool. |
| 21:36 | tomoj | is it safe to try leiningen again yet? |
| 21:42 | defn | error in process filter: Wrong number of arguments: called-interactively-p, 1 |
| 21:43 | defn | im getting that when i run swank-clojure-project |
| 21:56 | _ato | twbray: http://meshy.org/2009/12/13/widefinder-2-with-clojure.html |
| 22:01 | hiredman_ | _ato: #^"Ljava[.lang.String;" should be #^"[Ljava.lang.String;" |
| 22:04 | _ato | hiredman_: ah thanks |
| 22:08 | hiredman_ | _ato: excellent write up |
| 22:11 | rhickey_ | 3000 members on the google group!! |
| 22:12 | _ato | hiredman_: thanks. :-) |
| 22:12 | danlarkin | _ato: ya just finished reading, supergrats |
| 22:12 | _ato | rhickey_: woohoo!! I was watching the count down last night... 2994... 2995... |
| 22:14 | stuartsierra | rhickey_: I dropped my Maven ticket, instead added ZIP distribution target to the Ant build. |
| 22:15 | chouser | _ato: "We open first open" |
| 22:16 | alexyk | stuartsierra: why? maven is very useful! |
| 22:16 | _ato | chouser: ah, thanks |
| 22:16 | stuartsierra | alexyk: Current build supports maven via Maven Ant Tasks |
| 22:17 | stuartsierra | Not ideal, in my opinion, but good enough for 1.1. |
| 22:17 | alexyk | stuartsierra: oh well |
| 22:17 | Raynes | Haha. It's moved from hating on Emacs, to hating on Lisp and other dynamically typed languages. (in #haskell) |
| 22:18 | alexyk | Raynes: I found #haskell very disconcerting compared to #ocaml, #scala and #clojure. Probably size matters. |
| 22:18 | alexyk | ..wait until script kiddies arrive en masse |
| 22:19 | alexyk | we need a pack of strict disciplinarians ready |
| 22:19 | Raynes | Most of them are rather smart people. It just gets on my nerves when they pretend Haskell is the only viable language out there. |
| 22:19 | hiredman_ | clojurebot: whose job is it to keep them in line? |
| 22:19 | clojurebot | that's weihsiu's job |
| 22:20 | Raynes | It's sort of like the Java, C#, etc coders pretending that object orientation is the only way to do things. |
| 22:20 | rhickey_ | stuartsierra: my maven concerns had to do with artifact naming etc. I think there was some problem last time with the svn tag not matching or something. |
| 22:21 | rhickey_ | we should still build with ant definitely |
| 22:21 | stuartsierra | rhickey_: Ok, I submitted a patch to build a distribution ZIP with Ant. |
| 22:21 | rhickey_ | also ericthorsen has brought up an issue with our pom which was never resolved |
| 22:21 | rhickey_ | something about it messes up Netbeans |
| 22:22 | stuartsierra | ~seen ericthorsen |
| 22:22 | clojurebot | ericthorsen was last seen joining #clojure, 237 minutes ago |
| 22:22 | alexyk | funny, I was pondering using jruby in my JVM stable, and tried to see if I have all the standard map, filter, list routines in it. What OO briings there is . notation left to right and the do...end block, possibly as { } -- that's a good contribution to functional. The question is, can you translate most of the goodness between clojure and ruby. |
| 22:25 | stuartsierra | Found ericthorsen's msg: http://groups.google.com/group/clojure-dev/browse_thread/thread/c8cec4225fecd01d/3d39f207754cb263 |
| 22:25 | technomancy | _ato: looks like a stray "nnnn" snuck into your WF2 article |
| 22:25 | technomancy | (happens to me all the time) |
| 22:25 | stuartsierra | The problem appears to be that Netbeans sees a pom.xml and assumes that the project is Maven-based. |
| 22:26 | stuartsierra | Which it isn't, so Netbeans assumes a different directory structure than what's there. |
| 22:26 | rhickey_ | zip with ant a good idea |
| 22:27 | rhickey_ | stuartsierra: yes, I didn't know enough about either to help him, but no one ever chimed in |
| 22:27 | alexyk | how do you materialize a lazy seq in the same way as (count xs)? |
| 22:27 | _ato | technomancy: thanks. yeah.. I just recently disabled arrow keys to force myself to do navigate the proper way so I keep doing that all the time now :P |
| 22:27 | alexyk | _ato: Clojurnne beginners :) |
| 22:27 | stuartsierra | rhickey_: It should be better now that we have pom-template.xml instead of pom.xml |
| 22:28 | alexyk | _ato: nice writeup |
| 22:28 | rhickey_ | stuartsierra: ok |
| 22:29 | stuartsierra | rhickey_: sent ericthorsen an email about that |
| 22:29 | rhickey_ | the new zip file should nest the stuff in a clojure directory, got complaint about the old one |
| 22:30 | stuartsierra | Yes, I made sure to do that. |
| 22:30 | stuartsierra | It creates clojure-{VERSION}.zip, expanding to clojure-{VERSION}/... |
| 22:31 | rhickey_ | makes sense |
| 22:31 | stuartsierra | Changes doc is coming along nicely; Chousuke wrote up pre/post conditions. |
| 22:40 | defn | (defn merge-rows [a b] (map + (map #(apply max %) (partition 2 1 a)) b)) (map #(apply max %) (partition 2 1 (reverse [[1] [2 3 4] [5 6 7]]))) |
| 22:40 | defn | err (merge-rows (reverse [[1] [2 3] [4 5 6]])) |
| 22:40 | defn | why doesnt merge-rows blow up here? im only giving it one arg |
| 22:41 | hiredman_ | it should, if it doesn't then it is not defined or being called as you described |
| 22:41 | defn | oops nevermind |
| 22:42 | hiredman_ | :) |
| 22:42 | defn | what i was surprised about i guess is: |
| 22:42 | defn | ,(partition 2 1 [[4 5 6] [2 3] [1]]) |
| 22:42 | clojurebot | (([4 5 6] [2 3]) ([2 3] [1])) |
| 22:43 | defn | so merge-rows understands the first arg to be [4 5 6] and [2 3], yes? |
| 22:43 | defn | err the first and second args |
| 22:44 | hiredman_ | eh? |
| 22:45 | defn | (defn merge-rows[a b] |
| 22:45 | defn | (map + (map #(apply max %) (partition 2 1 a)) b)) |
| 22:45 | defn | |
| 22:45 | defn | (reduce merge-rows (reverse routes)) |
| 22:45 | defn | bleh sorry |
| 22:46 | defn | the only arg there, in my eyes, is the array of arrays, which is routes: [[4 5 6] [2 3] [1]] |
| 22:46 | hiredman_ | not arrays |
| 22:46 | hiredman_ | vectors |
| 22:46 | defn | blahhhh im sorry man my brain is mush |
| 22:46 | tomoj | reduce is not calling the function with (reverse routes) |
| 22:46 | hiredman_ | and partition being a seq function calls seq on it's argument |
| 22:46 | defn | oh right |
| 22:47 | defn | im going to quit on that note, i cant believe i missed that :\ |
| 22:47 | hiredman_ | so you get '([4 5 6] [2 3] [1]) and partition operates on a seq of values |
| 22:48 | defn | yeah, reduce is really what gives us the ability to apply that function across routes |
| 22:49 | defn | anyways, thanks for showing me the error of my ways |
| 22:52 | defn | http://meshy.org/2009/12/13/widefinder-2-with-clojure.html |
| 22:52 | defn | _ato: nice. |
| 22:53 | _ato | :) |
| 22:56 | defn | _ato: this is awesome. thanks for posting it. can i add an rss feed to your blog, or should i download this so i dont lose it :) |
| 22:57 | _ato | defn: there's an atom thingy here: http://meshy.org/atom.xml |
| 22:57 | _ato | which may or may not be valid |
| 22:57 | defn | yeah i found it after a bit of trial and error |
| 22:57 | defn | it looks valid to me |
| 22:58 | defn | i guess my main question was, do you plan to keep this blog up? |
| 22:59 | _ato | yeah probably. I don't expect to post that often, but there's some clojars stuff I'd like to write up |
| 22:59 | defn | *nod* -- what are you using for writing your post? it looks like... pygments + markdown maybe? |
| 23:00 | twbray | Hey _ato, is http://meshy.org/ your canonical URL? |
| 23:00 | _ato | twbray: yep |
| 23:01 | twbray | Yes, your feed is valid, http://feedvalidator.org/check.cgi?url=http%3A%2F%2Fmeshy.org%2Fatom.xml |
| 23:01 | _ato | defn: yeah, I tried jekyll after you were talking about it. I'm a big fan of markdown and pygments just works. Here's what the source looks like: http://meshy.org/~ato/tmp/2009-12-13-widefinder-2-with-clojure.markdown.txt |
| 23:03 | twbray | _ato: Was that 13 minutes really your *first* run? |
| 23:03 | technomancy | should that be mentioned in the docstring? |
| 23:04 | twbray | _ato: You want an affiliation if I mention you? "Alex Osborne, of XXX..." |
| 23:05 | hiredman_ | of #clojure :P |
| 23:05 | _ato | twbray: I think it was my first run that completed on the full dataset. That may not be the exact timing but it was around that. I'd done a fair bit of testing on the smaller version, and didn't give it enough RAM in my real first run so it just got stuck. |
| 23:05 | defn | _ato: cool, what this {% highlight clojure %} line? I've been using a verion of markdown in python where you specify code blocks with a #!clojure or :::clojure depending on if you want line nos |
| 23:06 | twbray | hiredman: I like that |
| 23:08 | _ato | twbray: you could say "National Library of Australia" as the affiliation |
| 23:08 | _ato | http://www.nla.gov.au/ |
| 23:08 | twbray | OK |
| 23:08 | twbray | Canberra is an unsuspected hotbed of functional programming I'm sure |
| 23:09 | _mst | our clojure user group has two members! |
| 23:09 | _mst | but we're marketing aggressively... |
| 23:09 | _ato | _mst: we should add Mark Reid to it |
| 23:09 | defn | heh, i cant find anyone around here interested in clojure |
| 23:09 | _mst | *three* members! |
| 23:09 | shoover | technomancy: It uses the cached (growable) thread pool used by send-off, so it shouldn't affect anything related to agents |
| 23:09 | _mst | (the third doesn't know he's in yet... the initiation may come as a shock) |
| 23:10 | defn | _mst: haha |
| 23:10 | defn | is this '_' business preceding your nicks a gang sign? |
| 23:10 | _mst | hm... isn't that just something erc does? |
| 23:10 | _mst | a gang of sorts... |
| 23:10 | tomoj | erc doesn't do it to me |
| 23:11 | _mst | I mean, since "mst" was already taken by someone more deserving :) |
| 23:11 | _ato | yeah.. same for me |
| 23:11 | technomancy | shoover: I just was noticing that _ato's code calls shutdown-agents after using pmap |
| 23:11 | tomoj | I get a backtick on the end if I try to connect when I'm still here |
| 23:12 | technomancy | if that's required it should be stated somewhere |
| 23:12 | shoover | technomancy: true, you would need to know that |
| 23:12 | twbray | There are a few things in _ato's code that you "need to know" :) |
| 23:12 | twbray | Now more people will. |
| 23:13 | shoover | I like how _ato put the appropriate emphasis on "don't rewrite split unless you have to!" |
| 23:13 | defn | yeah, kudos _ato for not just the great code, but an excellent explanation |
| 23:14 | _ato | yeah, I think pmap uses the same thread pool as agents. I guess it's called shutdown-agents just because agents existed before pmap |
| 23:14 | shoover | technomancy: my question is if we can get rid of shutdown-agents by using daemon threads and making the programmer call await to purposely block on running agent threads |
| 23:15 | shoover | in other words, use threads that don't intrinsically block System/exit |
| 23:15 | _mst | shoover: it's come up before: http://www.assembla.com/spaces/clojure/tickets/124 |
| 23:16 | shoover | _mst: thanks, I wasn't aware |
| 23:17 | technomancy | _ato: hey, I hope you haven't been waiting on me for that clojars browse functionality I said I was going to write. |
| 23:18 | technomancy | I'm going to have to retract my offer to implement it; too busy with lein and swank and holidays etc. |
| 23:18 | _ato | technomancy: nope, I've been distracted by this widefinder stuff. I've got 6 clojars emails sitting in my inbox that I need to deal with now that's out of the way |
| 23:18 | technomancy | or at least to implement it in a timely manner |
| 23:18 | _ato | technomancy: okay, no worries :) |
| 23:20 | technomancy | actually that's not fair; I'm glad there are a lot of people discussing/contributing to leiningen and swank |
| 23:20 | technomancy | I just can't keep up. =) |
| 23:22 | chouser | _ato: great writeup! |
| 23:24 | _ato | chouser: thanks. :-) |
| 23:32 | defn | _ato: will you be submitting this to the results page for WF? |
| 23:32 | defn | _ato: you mention you inched past single-threaded C, but you also beat one of the OCaml implementations |
| 23:34 | _ato | ah, I guess I should |
| 23:34 | _ato | hmm |
| 23:37 | defn | it looks like you're supposed to email tim.bray@sun.com with your results for a 100,000 line sample, but seeing as tim is in here, im not sure that's necessary |
| 23:38 | _ato | yeah, I think that's just to get an account on the box. probably I just need to create a sun account and I'll be able to edit the wiki |
| 23:38 | _ato | going for lunch though first, I'm starving, writing really takes a lot of energy |
| 23:38 | defn | _ato: again, great job, enjoy your lunch :) |
| 23:41 | tomoj | mabes: hey, are you a clojurian now? |
| 23:41 | devlinsf | Where is _ato's post? |
| 23:41 | mabes | tomoj: heh, getting there ;) I have some people on board at work so we've been doing some prototyping with it to get a feel for it |
| 23:42 | mabes | devlinsf: http://meshy.org/2009/12/13/widefinder-2-with-clojure.html |
| 23:42 | tomoj | cool |
| 23:42 | mabes | tomoj: what about you? |
| 23:42 | tomoj | seems to me that people here aren't as obsessed with testing |
| 23:42 | tomoj | I miss webrat :( |
| 23:43 | tomoj | mabes: also getting there, but much more slowly probably |
| 23:43 | mabes | tomoj: I think we are probably going to keep all of out webapps in ruby for the time being.. we are just using clojure for the backend heavy lifting stuff |
| 23:43 | tomoj | yeah, makes sense |
| 23:44 | defn | tomoj: im interested in testing more, but for now im focused on learning forms and playing with the pieces |
| 23:44 | tomoj | I hope someday for a clojure webapp ecosystem that makes me as happy as ruby's |
| 23:44 | mabes | there is a clojure webdriver adapter currently.. and you can use cucumber with clojure so that will get you pretty far |
| 23:44 | tomoj | wat |
| 23:44 | tomoj | shit, I've been working on a webdriver adapter, didn't know someone already did it |
| 23:45 | mabes | heh, yeah... lemme get the link... |
| 23:45 | devlinsf | _ato: Good stuff |
| 23:45 | defn | what is the biggest step between where clojure's web development tools are now and where ruby's are? |
| 23:45 | tomoj | mikitebeka's? |
| 23:45 | devlinsf | defn: I'd say front end |
| 23:45 | mabes | tomoj: http://github.com/mikitebeka/webdriver-clj yep |
| 23:46 | tomoj | thanks |
| 23:46 | devlinsf | defn: It's really easy to make Rails look great |
| 23:46 | devlinsf | defn: Of course, I'm a CSS + HTML nerd |
| 23:47 | tomoj | I started with an htmlunit adapter because there I could use enlive style selectors easily, which was awesome. with webdriver I don't think I can do that efficiently, but oh well :( |
| 23:47 | tomoj | frontend? you mean like sass/erb/haml stuff? |
| 23:47 | devlinsf | Yeah |
| 23:48 | devlinsf | The "What people see" stuff |
| 23:48 | devlinsf | I like erb |
| 23:48 | devlinsf | Of course, I'm no compojure expert |
| 23:49 | tomoj | I think I have been convinced of enlive's style of doing things over erb's |
| 23:49 | tomoj | defn: my personal concern currently is acceptance testing |
| 23:49 | hiredman_ | if I recall correctly webdriver uses htmlunit |
| 23:49 | hiredman_ | (htmlunit is nice) |
| 23:50 | tomoj | yeah but it abstracts over it so that it can also use firefox etc |
| 23:50 | technomancy | erb is horrible |
| 23:50 | mabes | hiredman_: thats correct- and you can have it switch to seleniun |
| 23:50 | tomoj | which means I can't do what I did when using htmlunit directlly |
| 23:50 | devlinsf | technomancy: It's what I know |
| 23:51 | technomancy | I mean it's obvious, but it's ugly and impossible to write good tool support for |
| 23:51 | mabes | erb is nice for designers... if you think your designer complained about writing haml just let them try the compojure html syntax :p |
| 23:51 | technomancy | since ruby's grammar is insane to begin with; embedding it inside HTML just pushes it over the edge |
| 23:51 | tomoj | mabes: let them try enlive :) |
| 23:52 | tomoj | there they just hand you the html mockup with fake data and everything |
| 23:52 | devlinsf | I haven't wrote HTML in 6 months |
| 23:52 | devlinsf | I DO like clojure's XML stuff way better |
| 23:52 | mabes | tomoj: yeah, it looked interesting but I haven't tried it.. are you working on a project that is available on github? |
| 23:53 | defn | devlinsf: yeah ive used rails a lot and ive enjoyed it, im trying to use compojure right now, but ive found it pretty kludgey |
| 23:53 | tomoj | nope, I am at the just-playing-around stage |
| 23:53 | mabes | yeah... |
| 23:53 | danm_ | wow, 8 minutes for WF2? |
| 23:53 | danm_ | great writeup |
| 23:53 | defn | definitely |
| 23:53 | defn | ato is a rockstar |
| 23:53 | danm_ | no kidding |
| 23:53 | defn | to use the parlance of our times |
| 23:54 | danm_ | that's pretty cool |
| 23:54 | technomancy | if his avatar is any reflection of reality, he's got the hair to match |