#clojure log - Jan 10 2010

The Joy of Clojure
Main Clojure site
Google Group
List of all logged dates

0:10 optimizer: does anyone know of an implementation of stackoverflow in clojure?

0:10 that'd be so cool

0:11 gregh: stackoverflow the web site?

0:13 optimizer: yeah,

0:13 like i wnat to run a private stackoverflow

0:13 and perferably it'd be in clojure

0:13 gregh: afaik there isn't any other implementation of stackoverflow, so it's unlikely that any of those implementations would be in clojure. :)

0:14 optimizer: i wonder what people in caompanies use

0:14 mitchellh1: Typically "clones" of stackoverflow lack on a lot of features. The basic question/answer/upvoting is easy to do, but stackoverflow is comprised of a lot of really neat features.

0:14 optimizer: Stack overflow licenses out its software to 3rd parties

0:14 optimizer: enlighten me please

0:14 what neat features?

0:15 mitchellh1: optimizer: Let me find something, one sec

0:16 optimizer: http://stackexchange.com/

0:16 There is the actually software which runs stack overflow

0:17 And the features I'm talking about are searching, badges, wiki functionality, spam filters, statistics, etc. which are all not totally trivial to implement QUICKLY (though trivial to implement, sans spam filters)

0:20 optimizer: alot of these features, badges, spam, etc ...

0:20 seems useful when you have to motivate a bunch of people you're not paying

0:20 but within a company,where you can hire/fire people at will, spam does not seem like a problem

0:55 technomancy: anyone with edit permissions on clojure.org around?

0:56 the "getting started" page links to a really old version of clojure-mode

0:56 tolstoy: And the contrib.sql links to SVN for examples.

1:21 Licenser: hmm, when I do have a map and change something via assoc the GC will clean up the unused copies right?

1:21 ´

1:23 tolstoy: Licenser: I'd assume so.

1:23 Licenser: okay, I'd hope so

3:56 hmm I'm confused why is this: (defn a [] 1) (defn a [] (+ (a) 1)) (a) I'd kind of expect 2

3:59 okay I'm wrong and a tad confused

4:04 (let [a a] (def a (fn [] (+ (a) 1)))) works as I epxect thank you :D

4:18 LauJensen: Hehe - Fun last night when I logged off defn was having a discussion with himself as well :)

4:48 Licenser: LauJensen: sometimes it helps just to phrase your thoughts to find the solution ;) als I don't contradict myself as often as others do so I'm a good person to talk to for me :P

4:49 LauJensen: Yea that sounds like a plan :)

4:49 Licenser: ^^

4:52 (= LauJensen "The lau with the webcasts about cloujure web development") ?

4:52 LauJensen: true

4:53 Licenser: ah cool then good work with them! I liked them

4:55 LauJensen: Great, glad to hear it

5:00 Licenser: helped me getting started with emacs ^^

5:04 LauJensen: Yea you can't dig into that too soon

5:05 Licenser: Heh

5:07 I don't like it too much, but it slowly gets better - seem so that my incompetence is part of the problem :P

5:28 LauJensen: You read the Tolstoy quote right? :)

7:48 Is there a spit variant which appends if the file exists+

7:50 oh.. seems append-spit might do just that :)

8:28 * the-kenny waits for the day someone will implement the emacs-indenting for clojure in a pretty-printing lib for clojure

8:33 somnium: ~def get

9:07 BrianB04: Morning all.

10:08 bagucode: Is there a way to programmatically check how many arguments a function takes

10:08 ?

10:08 Given the function object

10:08 Chousuke: bagucode: yes, but it's not trivial and relies on implementation details and reflection

10:08 bagucode: :(

10:12 Chousuke: I'm implementing callbacks in my C interop lib and I'm suspecting very bad things (like a jvm crash) will happen if the jvm throws an exception instead of returning normally to a native function. So I wanted to check that the number of arguments match for the callback specification when registering a clojure function for callbacks.

10:13 Chousuke: bagucode: you can always wrap the function in something that does the checking for you and returns a sane failure value if there is an argument mismatch.

10:15 bagucode: Chousuke: you mean catch the exception on the jvm side and return a sane value to the native function? Yeah that would be a good plan if I knew the details of the native function. But this is not for a particular library, I'm writing a clojure library for interfacing with C in general.

10:16 So for that to work, the user would have to input valid error codes to use in case of an exception when she specifies the callback interface :/ I don't like that

10:18 I guess I will just see what happens and if it's a disaster when an exception happens then I don't mind relying on implementation details.

10:20 Actually, never mind. I would have to check the return type as well, which is impossible since it's always Object so I have to trust the users to get it right :)

11:14 edbond: how to convert lazyseq to string?

11:16 the-kenny: (apple str seq)

11:16 arohner: (apply str lazyseq)

11:16 the-kenny: s/apple/apply/

11:17 ,(apply str (take 10 (iterate inc 0)))

11:17 clojurebot: "0123456789"

11:18 edbond: thanks

11:53 LauJensen: I'm taking lein out for a spin and lein compile runs fine, but lein jar fails with .../haddit/src/.#haddit.clj File Not Found - What does it get the notion that src should contain a .#haddit.clj file?

11:58 somnium: LauJensen: .# is an emacs file lock

11:59 LauJensen: save/close all the buffers in your project and theyll likely go away

12:01 LauJensen: 1) the file doesn't exist (which is the problem according to lein), 2) Why would lein care?

12:03 hmmm, correction, there was a broken symlink in there - wonder who made it

12:04 somnium: LauJensen: emacs puts hidden .#foo files in the dir where the original file exists, and lein stumbles on them when it traverses ./src I guess

12:05 in my experience at least this has been the case

12:05 LauJensen: Ok - First time I've seen that. Emacs knows that all tmp files go in a certain directory

12:45 durka42: this seems weird to me

12:45 but my program seems to have a bottleneck in java.lang.Integer.intValue

12:55 crazzyford: Is there an easy way to convert a seq into a set?

12:59 schlammpudding: (into #{} <your seq here>)

13:15 defn: durka42: could you explain more

13:16 durka42: defn: i profiled my program with YourKit, and it's spending a lot of time in clojure's Divide, specifically isZero, which calls intValue because it needs a primitive

13:17 defn: did you try saying (int blah)

13:18 or type hinting?

13:24 the-kenny: durka42: There's uncheckedDivide, which doesn't check for division-through-zero.. you have to be careful, that's clear

13:25 durka42: hmm, i will look at that

13:27 no unchecked-divide for floats?

13:34 chouser: durka42: you shouldn't need unchecked. just using '/' on primitives instead of moxed number should give you a good boost.

13:34 boxed

13:36 durka42: chouser: fair enough

13:37 edbond: how to convert string from one encoding to other?

13:40 Kjellski: Hi there =)

13:41 chouser: edbond: strings are already "decoded", so you may be wanting a way to convert from bytes (array? on disk?) to strings, or from strings to bytes.

13:41 or both.

13:44 Kjellski: Anyone with a better solution than this to do a "curl" - http://paste.lisp.org/+1ZX7 ?

13:45 LauJensen: I've added a dependency in defproject both as a regular dep and a dev-dep, but when compiling it says that its not on the classpath - why? Its downloaded correctly to lib/

13:46 Kjellski: omfg... forget it... just did the read-lines solo and said something homer like...

13:47 chouser: Kjellski: I think you can just (slurp* "http://whatever/&quot;)

13:49 robwolfe: LauJensen: "export DEBUG=1", try compile again and see what is on your classpath

13:50 LauJensen: robwolfe: thanks

13:50 Kjellski: chouser : yes, that works too, thanks... but is there a better way to handle html than just parse that output?

13:51 chouser: Kjellski: I'm not sure what you mean.

13:51 Kjellski: chouser : like find input fields and links ....

13:51 chouser: Are you asking, when your goal is parsed HTML, if there's a better way to fetch it than to slurp into a string?

13:51 or something else?

13:54 edbond: chouser: I get html page in wrong encoding, want to convert it to utf8

13:55 chouser: edbond: might be best to try to set the encoding when you read the bytes

14:09 Kjellski: chouser: that´s exacptly what would be nice...

14:25 chouser: Kjellski: clojure.xml/parse can take a url string

14:25 and then you could use clojure.contrib.zip-filter to certain tags.

14:25 or you could use enlive which has similar features.

14:26 LauJensen: Who is in charge of Clojars? And who do I get in touch with that person, the contact email on the site bounces

14:27 the-kenny: LauJensen: _ato. The source is on Github

14:27 LauJensen: the-kenny: Ok, what do I need the source for?

14:27 the-kenny: LauJensen: Don't know :) Maybe you're interested in it

14:28 LauJensen: I'm often tripping over broken jars from that site, thats my interest

14:29 the-kenny: ah ok

14:29 Kjellski: chouser thanks!

14:31 chouser : the problem is, nearly no page is really well formatted, so I´m getting only errors... =(

14:32 chouser: Kjellski: right, you want tagsoup

14:32 Kjellski: enlive uses that by default I think, but clojure.xml can be made to use it as well.

14:33 Kjellski: see zip-soup here: http://github.com/hiredman/odds-and-ends/blob/master/newegg.clj

14:35 Kjellski: Thanks a lot... I´ll try to install that!

14:59 chouser: could you give me a hint on what I´m missing? http://paste.lisp.org/display/93215 thought there should be something in there, no?

15:00 chouser: Kjellski: do you have your *print-level* set low, to something like 4 or 5?

15:01 Kjellski: chouser: that´s it... how can I inc that?

15:01 chouser: I use (set! *print-level* 15)

15:02 Kjellski: chouser : thanks again...

15:05 chouser: np

15:08 mebaran151: LauJensen, is there anyway to use clojureql to insert a blog (like an x.509 cert)

15:08 *blob

15:08 in clojureQL that is

15:09 LauJensen: mebaran151: Not now, but look in the backend at set-env and extend it to Blob - Should take about 5 minz if all goes well

15:10 mebaran151: I think it requires some custom jdbc calls

15:15 LauJensen: I wouldn't think so, but I encourage you to find out :)

15:19 mebaran151: yeah, we're internally using a patched ClojureQL that has support for returning auto-genned keys and now we'll add blobs

15:21 I think one of my team sent some patches to you a week ago actually

15:48 arohner: grr. Google, when I search for "ref?" I mean "ref?" not "ref"

15:48 similarly with ref\?

15:51 crazzyford: is there a good guide to when you should be testing in clojure? I've been struggling with working out when to use the repl, and when to write tests

15:51 arohner: crazzyford: that's really a question of personal taste, and the riskiness of your project

15:52 chouser: best is if you can pick out a process that makes it easy to move snippets from the repl to a test suite

15:52 * chouser isn't there yet

15:52 crazzyford: so I've been writing a simple webapp

15:52 and loadsa stuff I would have previously written tests for I now just do at the repl

15:53 apart from authentication things

15:53 which are all tested out pretty heavily

15:54 everywhere else it seems kinda pointless to test things, in that the code is so simple there's really not much to test

15:54 chouser: crazzyford: you're aware of how many tests rhickey has written for clojure itself, right?

15:55 crazzyford: none iirc

15:55 chouser: exactly

15:55 so there's one opinion for ya. :-)

15:55 crazzyford: aye

15:59 technomancy: crazzyford: if you keep as much of your code in pure functions as possible, it's easy to write simple tests for it

15:59 then for the messy stateful UI stuff you could punt on automated testing and do it by hand

15:59 crazzyford: which is what I've been doing

15:59 it just annoys me

15:59 technomancy: automated testing for web apps that use nontrivial JS is usually more trouble than it's worth in my experience

16:00 crazzyford: guess I could go look at selenium or summat

16:00 aye

16:00 * technomancy has attempted selenium a number of times; never actually went anywhere with it

16:00 technomancy: so freakng complicated

16:00 crazzyford: the other thing that bothers me about testing is that `lein test` takes freaking ages

16:01 arohner: webdriver is somewhat simpler than selenium, but it's still a mess

16:01 crazzyford: and I'm used to running tests after every save (or thereabouts)

16:01 technomancy: crazzyford: oh yeah... lein test is for that one final sanity check before you commit

16:01 it's not for TDD

16:01 for TDD you want something like clojure-test-mode

16:01 something you don't need to spin up a new JVM for

16:02 tknudsen: has BDD found popularity with clojure developers?

16:02 crazzyford: there's circumspec

16:02 technomancy: crazzyford: if you're not using slime I think there's a nailgun plugin for lein test

16:02 crazzyford: but the api is still under heavy development

16:02 I'm using slime

16:02 tknudsen: crazzyford, thanks

16:02 technomancy: crazzyford: definitely try clojure-test-mode then

16:03 it highlights failures inside the Emacs buffer, so you don't have to manually match up line numbers

16:03 super-handy

16:03 crazzyford: is there a guide to clojure-test-mode somewhere

16:03 heh

16:03 like augment.el?

16:04 technomancy: exactly!

16:04 except not generalized

16:04 crazzyford: just install it with package.el, open your test file, and hit C-c C-, to run the tests

16:04 nuthin to it

16:05 oh damn... there's actually a bug in package.el that may prevent it from getting installed right.

16:05 I have the bugfix, but it hasn't been applied yet

16:05 crazzyford: seems to be installed right

16:05 I never managed to make it work before now though

16:05 technomancy: oh?

16:06 crazzyford: can't remember the exact error

16:06 technomancy: you weren't using contrib test-is, were you?

16:06 crazzyford: nah installing it from package.el wasn't working

16:07 and I'm using clojure.test

16:07 technomancy: oh, right. to work around the bug just rm ~/.emacs.d/elpa/swank-clojure* before you install, and it will get re-installed.

16:07 crazzyford: it works fine now, so eh

16:07 don't think I have swank-clojure installed, using lein slime and slime-connect

16:07 technomancy: strange, I just fixed that bug last night; no way the fix has made it to you yet. =)

16:08 oh, that makes sense

16:08 crazzyford: aye

16:08 yeah that's pretty awesome

16:08 at least it would be if clojure had nicer stack traces :/

16:08 hiredman: clojure.stacktrace

16:09 * tknudsen wonders if compojure would be ready for production use given some kind dev consideration

16:09 chouser: clojure stack traces are so rish with information.

16:09 rich

16:09 :-)

16:10 tknudsen: chouser, perfect. I was in need of more reading.

16:12 I see that compojure (off-topic?) has been sorted into more libraries. I have a website that would provide a good deal of traffic without commercial interference that may help with debugging.

16:13 sorted/simplified

16:13 crazzyford: technomancy thanks a bunch for that

16:14 huge help

16:14 now I just need to move my tests out of circumspec and into clojure.test

16:15 mebaran151: my partner is writing a set of macros that would take tests from the repl and automatically save them in a test suite

16:15 it's kind of cool

16:15 like an interactive test maker

16:17 chouser: I wrote a thing for our book -- goes through the text of each chapter and confirms that examples produce the output and return value shown in the text.

16:17 tknudsen: chouser, what's your book title?

16:17 chouser: "The Joy of Clojure"

16:18 mebaran151: I feel like cooking

16:18 chouser: I'm sure that bit of code would frustrate any confirmed literate programming advocate. If there are any of those left.

16:18 mebaran151: :-)

16:18 tknudsen: I was thinking of purchasing the beta of the aPress clojure book. Love their CL book.

16:18 chouser: tknudsen: nothing to buy quite yet. Any day now, so they say...

16:18 mebaran151: which bit of code?

16:18 chouser: mebaran151: the bit of code I wrote to extract examples and their output from our book text.

16:19 mebaran151: ah

16:21 chouser: but it behaves as a sort of test suite for the book itself. kinda interesting.

16:21 hiredman: neat

16:22 chouser: of course it also occasionally tries to use the Clojure compiler on bits of scheme or java code. :-P

16:24 hiredman: time to use some bayesian filtering for languages

16:24 chouser: heh

16:24 crazzyford: just search the text above the code snippet for "java" or "scheme"

16:25 hiredman: crazzyford: how boring is that

16:25 crazzyford: true

16:26 mebaran151: I should think there should be tagging in the markup

16:26 hiredman: https://ci-bayes.dev.java.net/

16:26 mebaran151: the book itself could be a giant ant script

16:27 hiredman: pffft

16:27 crazzyford: hell

16:27 write your book in clojure as well

16:27 hiredman: tagging is just shifting work from the computer to the author, which is shifting it in the wrong direction

16:27 crazzyford: feed #clojure logs through a markov chain generator

16:29 mebaran151: well I often whish my IDE and wordprocessor used a richer data structure than .... flat everything shows text

16:29 *wish

16:30 hiredman: ~hiredman

16:30 clojurebot: hiredman is slightly retarded

16:30 hiredman: :|

16:30 ~hiredman

16:30 clojurebot: hiredman is slightly retarded

16:30 Chousuke: :/

16:30 hiredman: clourebot never gives the factoid I want

16:31 clojurebot: latex?

16:31 clojurebot: No entiendo

16:31 hiredman: ~hiredman

16:31 clojurebot: hiredman is slightly retarded

16:31 mebaran151: ~soup

16:31 clojurebot: excusez-moi

16:31 hiredman: that is a random selection from four or five factiods about me

16:31 mebaran151: oh

16:31 ha

16:31 tknudsen: Programming Clojure by Holloway looks good. I see that the author also wrote circumspec.

16:32 hiredman: ~hiredman

16:32 clojurebot: hiredman <3 XeLaTeX

16:32 hiredman: yay!

16:32 chouser: I dislike LaTeX as a source language.

16:33 tknudsen: chouser, you would write a book in sexp instead of latex?

16:34 err s-exp

16:51 Kjellski: Is the code for (ns ...) outdated at http://richhickey.github.com/clojure/clojure.core-api.html#clojure.core/ns ? Seems like it doesn´t work without vectors for me...

16:51 Or do I need the actual build?

17:11 Where can I get an actual clojure-contrib.jar?

17:12 technomancy: Kjellski: build.clojure.org should have one

17:12 Kjellski: technomancy : thanks!

17:13 crazzyford: so if I'm in src/foo.clj, can it run the tests from test/foo-test.clj

17:13 * crazzyford flails around with irc

17:14 Kjellski: technomancy : actually it would be pretty nice if that was mentioned somewhere on clojure.org... thanks again (pasting to favorites)

17:14 technomancy: crazzyford: I started on some functionality to do that, but our project at work is such a mess wrt directory layout that calculating the relationship between implementation files and test files was going to be a huge pain

17:14 Kjellski: agreed.

17:15 crazzyford: the problem is there's not really a widely-accepted mapping between the two that you can rely on

17:16 I guess if lein spit out an empty test file when it did "lein new" it would go a fair ways towards creating such a convention

17:16 crazzyford: true

17:16 also major thanks for lein

17:17 I barely got into clojure before it existed due to laziness with managing the classpath etc

17:17 technomancy: pain is your software's way of telling you to write some code to fix it. =)

17:17 DapperDan: technomancy: to back up a default file/directory convention, there could be a mechanism for explicitly linking source and test files from within the files themselves. what do you think?

17:18 seths: technomancy: seconded for a skeleton testfile from lein new

17:19 technomancy: DapperDan: namespace-level metadata would do it, but there's a bug in the compiler right now that deletes metadata for namespaces that are AOT'd

17:19 so I'm hesitant

17:19 clojurebot: #232

17:19 clojurebot: It's greek to me.

17:19 technomancy: clojurebot: ticket #232

17:19 clojurebot: {:url http://tinyurl.com/yhlzzjc, :summary "Locals cleared too aggressively on delay", :status :new, :priority :normal, :created-on "2009-12-31T01:27:06+00:00"}

17:20 technomancy: clojurebot: ticket #130

17:20 clojurebot: {:url http://tinyurl.com/ndkovn, :summary "Namespace metadata lost in AOT compile", :status :new, :priority :normal, :created-on "2009-06-19T04:47:33+00:00"}

17:20 technomancy: that's the one

17:21 with c-in-c "right around the corner" there's not a lot of motivation to fix compiler bugs like that

17:22 DapperDan: Does c-in-c have a milestone? (By another name, perhaps?)

17:22 technomancy: I don't think so

17:23 DapperDan: while i have your attention, thanks a lot for your work with lein and swank. do you get any of the Clojure donation money, or do you have a donation link of your own?

17:25 technomancy: thanks! I don't have any donation stuff set up, but if you want to help the best thing you could do is buy the Clojure PeepCode and recommend it to others since I get royalties from that.

17:27 DapperDan: noted. i think a boilerplate note on your blog to the effect of "if you liked this, buy X" would be appropriate.

17:27 seths: DapperDan: I heartily recommend the Clojure PeepCode

17:29 it doesn

17:29 t even scare people with Emacs

17:29 technomancy: DapperDan: yeah, good idea.

17:32 DapperDan: technomancy: on your github repos as well. with a deep link to the peepcode screencast page, for pagerank. i still think you should have e.g. a paypal donate page, because i could see myself donating once for lein and once for swank.

17:33 technomancy: DapperDan: I can't say I've done enough with swank to take donations for it. =)

17:33 I've only taken over from the original author and made it easier to install and done a few bugfixes.

17:57 Kjellski: Anyone with a bigger example on parsing xml with zip-filter?

18:10 hiredman: http://blogs.azulsystems.com/cliff/2010/01/biased-locking.html <-- this makes biased locking sound bad for stm

18:16 seths: has anyone tried the Azul JVM with Clojure?

18:17 hiredman: rhickey's ant colony sim has been run on an azul box

18:17 chouser: that was traveling salesman using an ant algorithm, right? Not the food-gathering one.

18:18 hiredman: I don't know

18:42 clojurebot: #clojure?

18:42 clojurebot: this is not IRC, this is #clojure. We aspire to better than that.

18:48 chouser: rhickey: you're not around, itching to answer a question about agent error handling race conditions, are you?

19:08 seths: wow, the funding is going pretty well!

19:08 that is great

19:12 * the-kenny will donate something when he starts working this month

19:16 chouser: 7 corps -- very cool.

19:20 mebaran151: does Clojure have a non-profit governing board to handle donations?

19:20 chouser: nope. Donations go to Rich.

19:24 DapperDan: Are there other open-source projects which handle this well? Maybe there is a webapp idea behind making it easy for any developer to solicit/receive donations.

19:24 danlarkin: it's called paypal :)

19:26 DapperDan: I'm looking at Paypal as 'just' a payment mechanism, I'm talking about bounties/auctions for milestones or bugs, graphs so people can see how close a goal is to being met, etc. Like elance on a micro-scale.

19:27 seths: btw, pls consider s/paypal/google checkout/

19:27 DapperDan: One could still use paypal or Amazon wishlists for the actual donation.

19:27 seths: or at least +=

19:27 DapperDan: sure

19:28 seths: DapperDan: what is elance?

19:28 the-kenny: seths: No, Google Checkout only accepts Credit Cards. That's endlessly annoying

19:30 DapperDan: http://www.elance.com/

19:34 mebaran151: I've often considered writing an app that would let an opensource project embed a donator

19:34 where a user could set some sort of rate based on usage, with some sort of cap involved

19:35 maybe distributed between lots and lots of projects that all signed up

19:35 chouser: mebaran151: based on ratios I could set.

19:35 mebaran151: yeah exactly

19:35 or ratios that you derive from some other function

19:36 like open time

19:36 chouser: mebaran151: that can be initialized by a tool that looks at what packages I have installed

19:36 right

19:36 mebaran151: yeah

19:36 does this already exist?

19:36 I was thinking it could be embedded in license files

19:36 chouser: and only takes 5% of my donation. :-P

19:36 mebaran151: that would automatically get parsed

19:36 heh, or maybe nothing

19:36 like open source style

19:36 DapperDan: it could be linked to a run-time profiler, and weight fund allocations based on who commited the code.

19:37 chouser: the most money going to the authors of the least efficient code?

19:37 mebaran151: the reason it would have to take 5 percent is that, working with authorize.net, you already give 5 percent to the credit card companies and paypal for moving the money

19:37 chouser: I don't thinnk anything automatic would be very good, but something that seeds your ratios with something sane that you can then tweak.

19:37 mebaran151: yeah

19:37 exactly

19:38 my company is actually developing something similar for media companies

19:38 DapperDan: chouser: profiler could be for what functions are called, not how long they took to run.

19:38 mebaran151: but it seems really easy to move it into open source

19:39 DapperDan: mebaran151: it does sound like a similar problem to royalties for AV usage.

19:39 mebaran151: yeah

19:39 very similar

19:39 the biggest problem in open source though is what you're buying

19:39 we all give money to Rich with the implicit promise he'll keep working on the code

19:40 with a company, the terms are explicit

19:40 so it would be nice to link open source payments with a kind of escrow

19:40 chouser: nah, I'd be happy to pay for the work already done.

19:41 mebaran151: that's a fair point

19:41 chouser: if they stop developing, they're likely to be overtaken by another project. when I start using that, I'll stop paying for the old one.

19:41 DapperDan: mebaran151: there are lots of models, e.g. "i want [this bug] fixed, and will pay X". or "here's $$ to pay for milestone Clojure-in-Clojure"

19:41 mebaran151: yeah, settable by the user

19:41 or even for libraries: I want a great library for Amazon S3 or what not

19:41 DapperDan: or documentation

19:42 mebaran151: haha documentation!

19:42 DapperDan: screencasts

19:42 mebaran151: this is UNIX

19:42 read the source ...

19:42 but yeah

19:42 I think it would be a great tool for open source if it were seamless and integrated over a lot of projects

19:42 like I gave money to Clojure, but I really should give money to Ubuntu too, because they made my dev environment livable

19:42 and to Netbeans

19:43 DapperDan: integration with github, assembla, lighthouse, etc.

19:43 mebaran151: and to even the nice guy who wrote XChat

19:43 well if the app had postbacks, we'd be set

19:43 DapperDan: agreed

19:43 mebaran151: but I don't have 2 grand a month

19:43 I do have like 100, and I'd like it to be fairly distributed to projects that need it

19:44 DapperDan: yep

19:45 hiredman: what does "give money to ubuntu" mean? give money to canonical?

19:45 (or whatever it's called)

19:46 mebaran151: well support ubuntu development

19:46 chouser: you can "buy" ubuntu, can't you?

19:46 mebaran151: it was meant to illustrate that there are a lot of good projects

19:46 chouser: yes

19:46 mebaran151: and it would be nice if donation were automated

19:46 and setup in some fair way

19:47 hiredman: I find calling it a "donation" kind of odd

19:47 mebaran151: well Ubuntu isn't as good an example, because it has a company

19:47 just like github

19:47 but I used to use ArchLinxu

19:47 ArchLinxu

19:47 * mebaran151 has stupid fingers

19:48 hiredman: mebaran151: ok, so if you want to give money to archlinux, that means what? you give money to some foundation? to a single developer?

19:48 mebaran151: and they definitely don't have a rich Mark Shuttleworth to help support them

19:48 that's the other issue in open source

19:48 usually the governance is unclear

19:49 hiredman: this kind of market organization is a difficult problem

19:49 DapperDan: hiredman: I was talking about funding a very specific unit of work, e.g. a bug or milestone, not a whole project.

19:49 mebaran151: but let's assume there existed an entity that could accept donations

19:49 and disperse them properly

19:49 hiredman: DapperDan: so whatever entity does the work gets the funds

19:49 mebaran151: say by bug fixed, or unit of work

19:49 DapperDan: hiredman: yes

19:49 hiredman: mebaran151: that's just it

19:50 mebaran151: or they could prioritize bugs per se

19:50 hiredman: you can't waive your hands and assume perfect distribution

19:50 mebaran151: say bug x is worth more than bug y

19:50 not quite, but I think if the payment system existed

19:50 open sourcers wouldhave a huge incentive to have better organization

19:50 DapperDan: put auctions on the bugs "I'll fix it for $X" or bounties "whoever fixes gets $Y", that will prioritise them

19:50 hiredman: what DapperDan (dig the reference) is proposing is an actual market

19:51 mebaran151: the problem with that is that unsexy bugs are less likely to get bounties

19:51 or good architectural changes

19:51 hiredman: less work since the market assumes the work of distribution as well

19:51 chouser: but that's a lot of market overhead for each little piece of work

19:51 mebaran151: exactly

19:51 hiredman: sure

19:51 DapperDan: hiredman: I haven't studied economics but OK

19:51 mebaran151: but both these systems can work together

19:51 chouser: and puts a disinsentive on fixing bugs quickly before they get bid up

19:51 DapperDan: mebaran151: architectural changes would come under milestones?

19:52 mebaran151: maybe

19:52 but who decides milestones

19:52 you need an organization to do this

19:52 hiredman: isn't there some bug database where you can file bugs against anything?

19:53 mebaran151: but these are two separate problem

19:53 hiredman: essentially you want rent-a-coder without the feeling of being in the ghetto

19:53 mebaran151: one is getting money to open source projects

19:53 the other is internal distribution

19:53 they're related, but can be solved independently

19:53 hiredman: mebaran151: one won't work without the other

19:53 mebaran151: well you need tools for both

19:54 but a donation to an opensource project can be as simple as supporting a single developer, like for Clojure

19:54 hiredman: you cannot give money to "clojure" there is no entity "clojure" to recieve the money, you can just give money to rhickey

19:54 mebaran151: or building something more complex, like if I were to donate to the Apache project

19:54 chouser: single-person projects already have the "internal distribution" problem solved.

19:54 mebaran151: which has governance etc

19:54 chouser: right

19:54 mebaran151: a projects that have more than a single person, really probably need to get a governance board etc

19:55 like I know GNOME has a foundation

19:55 hiredman: mebaran151: yes, but at that point you are handing over the control of the distribution of funds to the apache project

19:55 mebaran151: when I donate to charity, I do that anyway

19:55 hiredman: I'd rather just give money to a developer

19:56 mebaran151: and you see stories of outrage over the small percentage of money that doesn't go to 'overhead' for charitys

19:56 mebaran151: well I mean both schemes could be developed

19:57 they're not mutually exclusive

19:57 developers could register to have their worked sponsored

19:57 bugs could register to have their work sponsored

19:57 projects could register

19:57 if I trusted the Apache Foundation to make good decisions, I'd probably be amenable to letting them figure out what needs to get done

20:00 if I wanted to micromanage, that option should be available too

20:01 DapperDan: mebaran151: ideas from kivo.org would probably apply

20:02 mebaran151: I thnk that's actually a little too active

20:02 it's gotta be like a set it and forget it sorta thing, that can be tweaked as necessary

20:07 bug bounties only make sense for very well qualified, very informed customers

20:16 technomancy: rich gets 10% of the peepcode monies

20:23 mebaran151: heh, I was looking for evening project, maybe I'll throw something together in compojure

20:24 DapperDan: will you send me an email if you get something working?

20:24 mebaran151: oh yeah sure

20:29 technomancy: mebaran151: you should think about contributing to clojars

20:29 that's a useful compojure project

20:29 mebaran151: you mean donation or code wise?

20:29 technomancy: just as a project to work on

20:30 mebaran151: oh yeah sure

20:30 technomancy: it's helpful to be able to take a look at a working project to see how it's structured, etc

20:30 mebaran151: actually my colleague and me were talking about that just today

20:30 over lunch

20:30 we were thinking of cooler ways to search clojure projects

20:31 like by docstring or by function, or being able to cherrypick individual functiosn with dependencies between them

20:31 and get a custom namespace with exactly what you needed

20:31 (he's a computational linguist, so these problems are candy for him)

20:32 quizme: is Lau here ?

20:33 mebaran151: I was thinking of download all the clojars to get a dataset, but I'm worried about your bandwidth bill :)

20:51 technomancy, what would be the best way to get all the clojars for you?

20:55 technomancy: mebaran151: I was talking with _ato about enabling couchdb replication to do that, but I don't know if it got anywhere. =\

20:56 mebaran151: is your fts powered by couchdb?

20:56 technomancy: I told him I would help with the browse functionality, but I got distracted by leiningen, swank, and package.el

20:56 mebaran151: it's couch-lucene IIRC

20:56 http://github.com/rnewson/couchdb-lucene

20:57 mebaran151: did you ever look at hypersonicsql

20:57 technomancy: mebaran151: I don't run clojars; it's _ato

20:57 (Alex Osborne)

20:57 I just wrote leiningen

20:57 mebaran151: oh

20:58 technomancy: I hacked the codebase a little right after lein was released, but that's all

20:58 mebaran151: well, actually we wanted to do some source investigation (like unzip all the clojars and actually do some semantic indexing)

20:58 technomancy: there aren't enough jars for bandwidth to be a big issue yet

20:59 once there are, hopefully we can use couchdb replication to make it easy for folks to host mirrors

20:59 couch replication is badass

20:59 mebaran151: aren't the jars files though?

20:59 technomancy: yeah, but you can attach files to couchdb documents

21:00 mebaran151: do you actually stuff them into couchdb as blobs?

21:00 *does he?

21:00 I played with CouchDB about version 0.6 and got annoyed that they kept breaking it

21:00 technomancy: I don't know if he does yet, but I think that's the way it'll be done in the future to support replication

21:00 it's come a looooong way since 0.6

21:00 mebaran151: I can buy it

21:01 but I left for h2 which was based on hsql with integrated lucene

21:01 that was a surprisingly well integrated, nice experience

21:01 and sql replication is usually pretty simple to setup

21:02 couch does master to master replication though right?

21:03 technomancy: it does

21:03 but for clojars only the main site would perform writes

21:07 mebaran151: yeah, I never trusted master to master replication

21:08 it feels like something that should be application specific to be done right

21:10 technomancy: I can't say I've used it in action

21:13 mebaran151: what makes couchdb master slave replication better than sql replication

21:14 just easier to setup?

21:14 technomancy: yeah, you just point it at an HTTP URL and click go; nothing to it

21:14 mebaran151: heh, that is kinda neat

21:15 technomancy: can be initaited via curl, or whatever

21:33 mebaran151: I'd be more than happy to contribute to clojars though

23:41 chouser: haha. My Java is so bad.

23:42 hiredman: :(

23:42 chouser: I'm null-punning everywhere. When the compiler calls me on it I try to compare to NULL

23:42 hiredman: hah

23:42 just rewrite clojure on it :P

23:43 chouser: I'm a Clojure programmer, trapped in C++ and trying to use javac...

23:47 johnmn3: Hello

23:52 defn: chouser: i bet my java is worse :)

23:57 mebaran151: whenever I write Java, I feel like I'm in the Soviet Union

23:57 with all the factories, and interfaces, and hierarchies, and five year plans

Logging service provided by n01se.net