#clojure log - Nov 08 2011

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

0:03 amalloy: technomancy: i (despite my general stance against :private meta) used refer-clojure in my namespace so i could (defn- meta ...). doesn't bother consumers if it's private, of course

0:03 tensorpudding: ugh, i can't get anything done while swank-clojure isn't working

0:05 well, lein swank works

0:47 so many hours, and i only have 350 lines of code

0:47 well at least it does stuff

1:18 tashafa: hello

1:18 is this thing working?

1:19 ?

1:21 brehaut: yes

1:22 cemerick: tashafa: Tunde?

1:24 tashafa: cemerick:

1:24 whats up

1:24 cemerick: Not much.

1:24 I should be sleeping.

1:24 tashafa: same here

1:25 I was actually looking for the clojurescript channel

1:25 cemerick: How have you never gotten settled with irc in general, anyway? ;-)

1:25 tashafa: I did at one point

1:25 cemerick: tashafa: there isn't one, really

1:26 tashafa: just fell off after that job search debacale

1:26 :-/

1:26 cemerick: ah

1:27 The Clojure jobs are coming along pretty decently these days, actually.

1:27 tashafa: yeah i see them everywhere

1:28 tensorpudding: does clojure have a newsgroup

1:28 cemerick: ~google group

1:28 clojurebot: First, out of 416000000 results is:

1:28 Ministry Resources | Group

1:28 http://group.com/

1:28 cemerick: ugh

1:28 clojurebot: google group

1:28 clojurebot: First, out of 416000000 results is:

1:28 Ministry Resources | Group

1:28 http://group.com/

1:28 tensorpudding: google groups aren't the same

1:28 * cemerick sucks at bots

1:28 cemerick: tensorpudding: I don't think so, no

1:28 tashafa: hmm... how do you set flags in regexes again?

1:29 that's how much I have fallen off

1:29 amalloy: tashafa: i think you have to use j.u.regex.Pattern/compile

1:30 tashafa: not #"(?:i)[a-z]" ?

1:30 cemerick: tashafa: (?i)

1:30 tashafa: thanks for the response btw amalloy

1:30 amalloy: tashafa: (?i) works, but isn't exactly the same as setting a flag for a whole regex

1:30 $javadoc java.util.regex.Pattern compile

1:30 lazybot: http://download.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#compile(java.lang.String)

1:31 cemerick: amalloy: how does it differ?

1:31 amalloy: cemerick: http://download.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#CANON_EQ

1:31 ie, it doesn't differ for the specific case of ?i

1:31 but for flags in general it may

1:32 tashafa: I'm actually trying this out in clojureScript

1:32 cemerick: ah

1:33 tashafa: You're probably SOL in that case.

1:33 brehaut: if it passes them through to javascript regexps, then i dont think those flags would work

1:33 does clojurescript let you access the RegExp constructor?

1:33 tashafa: it does recognize #"..." regex literal

1:33 amalloy: brehaut: i think the js regexes are about as perl-compliant as java's, so (?i) ought to work

1:34 cemerick: Yeah, that's just dropping the regex in /regex/

1:34 tashafa: looking at source it does account for flags

1:34 https://github.com/clojure/clojurescript/commit/a201e9d8dec84ac0bca5b51c714b3179ed7444c8

1:34 brehaut: amalloy: i doubt it

1:34 tashafa: but this is a while ago

1:35 cemerick: amalloy: flags are appended to the // literal

1:35 brehaut: but if you can do the equivalent of new RegExp("[a-z]", "i") then you're ok

1:35 cemerick: e.g. /foo/i

1:35 amalloy: cemerick: well, those are pattern-global

1:36 ie, if you can't do /TeST(?i)ing/, that's not so nice

1:36 but apparently you can't. stupid javascript

1:37 brehaut: most likely javascripts regexps are equivalent to the perl regexps supported by java back in 1995

1:37 (just like the Date class)

1:38 amalloy: tashafa: http://www.regular-expressions.info/javascript.html has a good list of what's missing from js regexes

1:39 tashafa: http://www.regular-expressions.info/javascript.html

1:39 sorry

1:39 right click on terminal

1:39 cemerick: I'd trust this more: https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Regular_Expressions

1:39 (just from a reference perspective)

1:40 amalloy: cemerick: no doubt yours is more authoritative, but over the years that site has served me well and is easier to absorb

1:40 tashafa: but I'm erroring on the clojure compiler

1:41 amalloy: nooo, the compiler hates errors!

1:41 tashafa: error is "java.util.regex.Pattern.error (Pattern.java:1713)"

1:43 compiler.clj says...

1:43 (defmethod emit-constant java.util.regex.Pattern [x]

1:43 (let [[_ flags pattern] (re-find #"^(?:\(\?([idmsux]*)\))?(.*)" (str x))]

1:43 (print (str \/ (.replaceAll (re-matcher #"/" pattern) "\\\\/") \/ flags))))

1:43 brehaut: oh boy. 10 generations deep sierpinksi triangle is grinding emacs to a halt

1:43 tashafa: sorry im being stubborn

1:44 tensorpudding: creating automata in your emacs?

1:45 leo2007: what exactly is 'reflective invocation'?

1:46 brehaut: leo2007: if the compiler doesnt know what the type of something is, then it has to dig around in the objects metadata to find a matching method. that digging around is called reflection, and the invocation is invoking the method

1:46 amalloy: mostly it's slow, amirite?

1:47 brehaut: lol

1:47 leo2007: brehaut: thanks.

2:45 tsdh: Hi. After coming back from holidays, M-x clojure-jack-in errors with 'error in process filter: clojure-eval-bootstrap-region: Search failed: "(run-hooks 'slime-load-hook) ; on port"'. Indeed, there's no slime-load-hook. What's the matter?

2:45 clojurebot: ,(let [testar (fn [x y] (cond (= (reduce + (filter odd? (range 0 x))) y) (str y " is an square perfect")), :else("nao eh") )] (testar 10 25))

2:46 tsdh: I've updated clojure-mode from 1.11.1 to 1.11.3, so maybe that's part of the problem.

3:21 technomancy: Hm, with respect to the clojure-jack-in error: one thing is that this function searches for "(run-hooks 'slime-load-hook) ; on port", but in swank-clojure-1.4.0-SNAPSHOT.jar's slime.el, there's only "(run-hooks 'slime-load-hook)" without "; on port".

3:41 Blkt: good morning everyone

3:55 tsdh: Hi Blkt

4:00 ejackson: morning good people

6:08 kephale: raek: ping?

6:10 raek: kephale: pong

6:11 kephale: huzzah. i was looking into adjusting the size of the thead pool and ran into one of your posts

6:12 i have a piece of code that is parallelized with agents and pcalls. is there a way to define a global (newFixedThreadPool maybe) to get the code to run as single core?

6:13 without performing a lobotomy on the code

6:23 raek: kephale: have you looked at this? http://download.oracle.com/javase/6/docs/api/java/util/concurrent/Executors.html#newSingleThreadExecutor()

6:24 (def pool (Executors/newSingleThreadExecutor)) (.submit pool #(println "hello!"))

6:24 clgv: kephale: nope. I checked that. itÄs a pity you cant adjust that poolsize. maybe a patch for this is due. The Java ThreadPoolExecutor supports setting core- and maxpoolsize

6:25 kephale: raek: no, i have not.

6:25 clgv: raek: yeah, you have to do that manually. pmap, pcalls etc dont support it

6:25 raek: yes

6:26 .invokeAll is very similar to pcalls, though

6:26 kephale: clgv: arg.. i was worried about that. it looks like it could be done fairly easily on the java side of clojure

6:26 well, the agents are the bigger deal, there is just 1 pcalls call, so that could be handled manually if necessary

6:26 clgv: kephale: yeah it's pretty easy. thats why I wondered why nobody had done it yet

6:28 kephale: raek, clgv: ty, i might poke around at medusa

6:29 clgv: clgv: you would just have to store the ExecutorService in the Agent Implementation as ThreadPoolExecutor and write a function to be able to set both numbers

6:30 kephale: the agents are more of a hack to avoid some of the hangs that you get when pmapping with a large function

6:30 clgv: kephale: not really. pmap and the other p* just suck^^

6:31 agents are pretty good

6:31 kephale: clgv: how does medusa-pmap compare?

6:31 clgv: kephale: you have a link to it?

6:32 kephale: https://github.com/amitrathore/medusa/blob/master/src/org/rathore/amit/medusa/core.clj

6:32 it is based on futures, so it feels like it should be a bit smoother

6:33 well, medusa-futures

6:33 clgv: pmap is also based on future afair (in source)

6:33 the direct medusa-pmap looks fine: build all futures at once and returning a lazyseq that derefs them

6:34 thats how I would have liked pmap^^

6:34 kephale: ok, i might just bite the bullet and get my scalpel

6:35 clgv: I dont know why they add uuids - maybe for supervision and status reports

6:37 kephale: for the preempting maybe

6:41 clgv: ok. I like the medusa-pmap definition, but I dont know what to think about the environment of it ;)#

6:47 kephale: good point. i actually have no use for the supervision. maybe i'll just copy their style of pmap

6:48 clgv: kephale: you can just use a ThreadPool and submit your futures there like their pmap does

6:49 kephale: mmm… now if there was a simple way to override agent/send/await with a custom threadpool everything would be hunky-dory

6:50 the proper thing to do would be reverting back to pmap, but i'm kind of lazy

6:50 clgv: kephale: I dont think you need a custom one. the one that is used is fine, but you need access to setCorePoolSize and setMaxPoolSize

7:00 kephale: clgv: no luck with (.setCorePoolSize clojure.lang.Agent/pooledExecutor 1) (.setMaximumPoolSize clojure.lang.Agent/pooledExecutor 1)

7:24 clgv: kephale: yeah. it's private, isnt it?

7:27 kephale: public in ThreadPoolExecutor

7:36 clgv: I meant clojure.lang.Agent/pooledExecutor

7:37 oh no. it's final that is

7:39 what does it do when you change pool sizes?

7:40 kephale: no error or anything, but the cpu usage doesn't change (still using multiple cores)

7:41 clgv: kephale: I thought it will finish the already started jobs and then reduce the number of worker threads

7:43 kephale: see here http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html#setCorePoolSize%28int%29

7:43 kephale: well, just to be certain nothing weird was happening i am using lein run and putting those calls right before i call the function that uses agents

7:44 in fact, those calls are the first things to be evaluated

8:16 bhenry: easiest way to determine if a date is within two other dates?

8:19 ejackson: bhenry: the clj-time library has functions for this

8:41 kephale: clgv: fyi, the simplest work around (given that i only care about single core or not) is ((if use-single-core atom agent) …), ((if use-single-core swap! send) …) and that takes care of all the cases (aside from disabling await's)

8:42 clgv: kephale: nice^^

8:57 mdeboard: e/die

9:29 curious_xoxota: What was that function to generate [[1 2] [1 3] [10 2] [10 3]] from [1 10] and [2 3]?

9:35 clgv: curious_xoxota: cartesian-product?

9:35 mdeboard: curious_xoxota: What clgv said, you want http://richhickey.github.com/clojure-contrib/combinatorics-api.html afaik

9:35 lazybot: Nooooo, that's so out of date! Please see instead http://clojure.github.com/clojure-contrib/combinatorics-api.html and try to stop linking to rich's repo.

9:36 mdeboard: unless that's been rolled into--

9:36 Oh thanks lazybot

9:36 :)

9:36 (inc lazybot)

9:36 lazybot: ⇒ 2

9:36 curious_xoxota: thanks :)

9:36 mdeboard: $google

9:36 lazybot: No search term!

9:36 mdeboard: $google combinatorics api

9:37 lazybot: [combinatorics API reference (clojure-contrib)] http://richhickey.github.com/clojure-contrib/combinatorics-api.html

9:37 mdeboard: See :-|

9:37 lazybot you naughty monkey

9:37 (dec lazybot)

9:37 lazybot: You want me to leave karma the same? Fine, I will.

9:38 clgv: (- lazybot 10)

9:38 (dec lazybot 10)

9:38 lazybot: ⇒ -1

9:38 clgv: (dec lazybot 10)

9:38 lazybot: ⇒ -2

9:38 mdeboard: weird

9:38 $google lexicographic permutations

9:38 lazybot: [Permutation - Wikipedia, the free encyclopedia] http://en.wikipedia.org/wiki/Permutation

9:39 mdeboard: (inc cemerick)

9:39 lazybot: ⇒ 6

9:39 mdeboard: For dat podcast

9:39 cemerick: FYI: Mostly λazy Episode 0.0.1: Sean Corfield, Clojure Contrib, and "real world Clojure" http://wp.me/p1Y10D-c #podcast

9:39 mdeboard: http://mostlylazy.com/2011/11/08/episode-0-0-1-sean-corfield-clojure-contrib-and-real-world-clojure/

9:39 cemerick: (first and last promo of it here)

9:39 mdeboard: well, make sure you listen before praising me on it ;-)

9:39 But, thanks anyway. :-D

9:40 mdeboard: I was looking for it this a.m. so I could listen on the drive in to work

9:40 alas

9:41 cemerick: Downloading now. There's a dearth of in-depth technical podcasts; have been looking forward to this

9:41 cemerick: I can't say it's in-depth and technical

9:42 e.g. I almost certainly won't be going se-radio-style on the implementation details of hash array map tries

9:42 ejackson: thats a relief

9:42 mdeboard: cemerick: Oh I don't mean like that

9:42 More like devops cafe

9:42 cemerick: The conversation seancorfield and I had was actually more about libraries and community than anything else.

9:43 ejackson: are you guys on the ground yet?

9:43 ejackson: tomorrow

9:43 landing 3pm ish in Raleigh

9:44 cgrand and I, having not yet met, have an elaborate plan involving funny hats and orange sneakers....

9:45 clgv: ah clojure conj is this week. dont forget to put your slides online ;)

9:46 mdeboard: I'm curious if/how rhickey will top Simple Made Easy

9:47 Also hoping dnolen's pred matching talk goes up as well.

9:47 Are these going up on InfoQ or what

9:47 zerokarmaleft: sussman's talk also went up on infoq

9:48 don't know for sure if *everything* from strangeloop will be posted

9:48 mdeboard: I mean from ClojureConj

9:48 this weekend

9:48 dnolen is delivering a talk on predicate matching which I am assuming will be a more polished/updated version of the talk I saw on Vimeo on the same topic to the NYC Clojure user group

9:50 ejackson: I'm sure somebody will point a video camera at the stadium.

9:50 although they didn't last year

9:51 TimMc: Awkward timing for the Conj vis-à-vis the November 8 elections.

9:51 ejackson: sorry, they did, but not everything, I don't think

9:52 cemerick: ejackson: The video was unusable for some.

9:52 ejackson: like your good self....

9:53 cemerick: Yeah, me, Laurent, and S. Sierra got no video love.

9:53 Might have been another, but I don't remember.

9:53 ejackson: anyway, the precedent is good

9:54 TimMc: (dec lazybot I don't think it reads the rest of the line

9:54 (dec lazybot or perhaps it does)

9:54 lazybot: ⇒ -1

9:57 ejackson: cemerick: I think you should repay the favour to certain gentleman who nagged you into being Podcast-in-Chief..... Somebody should be Vlogger-in-Chief....

9:59 cemerick: ejackson: crap, who was that?

10:00 The blur of tweets dissipates rapidly.

10:00 ejackson: fogus, no ?

10:00 cemerick: Ech, anyway, I'm not anything-in-chief. :-)

10:01 Yeah, fogus was in there, as was Alex Miller and Aaron Bedra.

10:01 Couple others, too.

10:01 I'm not sure why that plurality suddenly popped up.

10:01 ejackson: yes, some parenthesis wielding mob

10:01 or other

10:02 curious_xoxota: I'm taking two sets, and for every element of one, mapping with an operation to the other set. In the end, I join the sets. I'm getting memory errors with this algorithm: do you think this implementation is too inefficient, or there might be a bugw

10:02 *bugw -> bug?

10:02 TimMc: curious_xoxota: Example input and output?

10:03 (I don't understand the first sentence.)

10:03 mdeboard: Ditto, can you post a snippet or summat

10:04 curious_xoxota: http://454a56951ea463a7.paste.se/

10:04 One of the sets has like 10000 pairs of numbers, like [1 2

10:04 (sorry, enter in an awkward position)

10:05 [1 2], and the other is smaller, with like 300 elements at most

10:05 redinger: TimMc: Vote early, vote often

10:06 mdeboard: curious_xoxota: Just out of curiosidad, why did you overwrite conj?

10:06 or rather, use conj as a temp var

10:07 Chousuke: there's nothing obvious about that code that leaks memory :/

10:07 TimMc: redinger: That's hard if you're out of state! If i had gone to the Conj, I wouldn't have been able to vote today.

10:07 redinger: TimMc: No absentee voting for you?

10:07 curious_xoxota: mdeboard: for 'conjunto', or set, in portuguese

10:08 mdeboard: poor choice, I agree :)

10:08 mdeboard: curious_xoxota: oic

10:08 Chousuke: feels sort of weird to see non-ascii characters in identifiers :P

10:08 TimMc: redinger: Is "traveling" a valid excuse? Some states are pretty restrictive on who they'll give an absentee ballot.

10:08 Chousuke: I'm too used to coding in English

10:09 if I try to use Finnish identifiers it just looks weird

10:09 curious_xoxota: I think it's pretty neat to be able to use them. You can define a function named ♥!

10:10 redinger: TimMc: Gotcha. In NC, we don't even need a reason for absentee voting.

10:11 mdeboard: redinger: So much military in NC, they have to be flexible that way (lived in NC for 8 years as a Marine).

10:11 not that you needed me to tell you that...

10:12 TimMc: aha

10:12 mdeboard: anyway curious_xoxota besides normal troubleshooting steps I can't give any help. What is the error you're getting?

10:13 curious_xoxota: mdeboard: out of memory. Lemme run the code to get the precise error

10:13 TimMc: Chousuke: Greek identifiers at the bottom: https://github.com/timmc/CS4300-HW4/blob/master/src/timmcHW4/tri.clj#L98

10:14 Why not use the same identifiers as in the original equations? :-)

10:23 Chousuke: TimMc: yeah, I guess that's useful. Most people who would understand Clojure code can probably read at least a couple greek letters :P

10:32 lambdanaut: I've got a function "recurseThis" that takes an x and does something to that x. I want another function "find" that takes that x and puts it back into "recurseThis" over and over until x satisfies some condition, like being equal to 1.

10:33 Can I do this in clojure? I'm basically just trying to avoid explicit recursion

10:34 raek: lambdanaut: sure. (defn find [f x done?] (loop [x x] (if (done? x) x (recur (f x))))

10:34 or you could use 'trampoline'

10:36 lambdanaut: Thanks raek!

11:05 mefesto: technomancy: ping

11:10 technomancy: fyi, i pushed wabbitmq 0.1.5 with your commits to clojars. thanks! :)

11:24 cark: is it possible to do a lein uberjar which would not include clj sources ?

11:34 dnolen: any opinions on fixing the behavior of instance? in CLJS, http://dev.clojure.org/jira/browse/CLJS-98

11:34 raek: I remember seeing an article about JVM garbage collector implementations (with pretty pictures) on hacker new a while ago. anyone happen to know which one I'm looking for?

11:36 cemerick: cark: :omit-source https://github.com/technomancy/leiningen/blob/stable/sample.project.clj#L159

11:37 cark: ah thanks cemerick !

11:38 looks like you gave me the way to find my own answers concerning leiningen too

11:38 thanks

11:38 raek: (found it: http://sdoulger.blogspot.com/2011/05/very-interesting-article-regarding-gc.html)

12:14 TimMc: raek: neat link

12:44 cemerick: raek: that's a weak reblog

12:44 http://blog.dynatrace.com/2011/05/11/how-garbage-collection-differs-in-the-three-big-jvms/ seems to be the authentic one

12:48 technomancy: mefesto: cool

12:48 j.io.Serializable is new in 1.3, right?

12:49 or rather, support thereof

13:00 TimMc: redinger: Wait, never mind -- I was confusing Tuesday with Thursday. >_<

13:05 technomancy: cemerick: heh; *con*trib?

13:06 so what's the weather like in Raleigh

13:13 kzar: Anyone know how to check if your app is running locally or on heroku progmatically? I wanted to set the mode flag to :prod when I see it's on heroku

13:14 technomancy: kzar: want to try the lein preview? then you can just check for LEIN_NO_DEV.

13:15 kzar: technomancy: how does that work?

13:16 technomancy: kzar: heroku config:add BUILDPACK_URL=http://github.com/heroku/heroku-buildpack-clojure.git

13:16 feel free to msg me if you have any issues

13:19 kzar: technomancy: What does the buildpack do? Also how do I use the preview version of lein? Is LEIN_NO_DEV an enviroment var?

13:20 cemerick: technomancy: ?

13:20 technomancy: kzar: when you do git push, it compiles a "slug"; basically a tarball of the project and all its deps. setting this config just puts you on the latest version of the part that builds the clojure slug, which uses lein

13:20 cemerick: just the pronunciation =)

13:20 licenser: geez why does emacs hate me?

13:21 technomancy: kzar: yeah, LEIN_NO_DEV is an environment var

13:21 cemerick: technomancy: I never noticed!

13:21 kzar: technomancy: Cool so I don't even have to mess with Lein on my laptop, just run that command to tell Heroku to use the new version

13:22 cemerick: I did notice that I can't maintain a consistent pronunciation of leiningen, nevermind a correct one. :-P

13:22 kotarak: licenser: Because it's not vi. ;)

13:22 technomancy: kzar: yep. currently it's using 1.5.2 by default, but we'll push the upgrade out to everyone soon.

13:22 cemerick: good to see you kotarak :-)

13:22 licenser: but how can emcas know I used VI today ? you think it's jalous?

13:23 kzar: technomancy: Cool beans, thanks for the tip. I have to run but I'm going to try that out tomorrow morning and I'll let you know how I get on

13:23 kotarak: cemerick: thanks. :) the pronunciation of leiningen is quite easy, btw. ;)

13:23 technomancy: sure, no problem

13:23 kotarak: licenser: might be. Those diva types are difficult.

13:23 licenser: :.(

13:24 kotarak: licenser: And this “foreign editing”… tstststs

13:24 cemerick: kotarak: I *can* pronounce it properly, it just often doesn't come out as intended.

13:24 It should come naturally, given part of my heritage, I suppose. All that Russian getting in the way, perhaps. :-P

13:25 kotarak: cemerick: hehe, globalization is difficult.

13:25 cemerick: kotarak: now that you're here, your prize is having me bug you about vimclojure (+ nrepl) ;-)

13:26 * kotarak ducks.

13:26 kotarak: cemerick: honestly I just thought about it this afternoon.

13:26 * cemerick runs a projectile-free shop :-)

13:27 kotarak: cemerick: vim allows to call into native libraries. That would allow a C(?) client library for nrepl to be used directly.

13:27 cemerick: so the scripting approach was a dead end, huh?

13:27 kotarak: cemerick: however I don't have the time, nor the (in particular Windows) experience to implement something like that. :|

13:27 cemerick: The jark guys have an ocaml nrepl client brewing that might suit your needs.

13:27 kotarak: cemerick: yeah, kind of. Never really worked.

13:28 technomancy: hm... now immutant has its own "lein new" command as well. need to keep people from reinventing the wheel.

13:29 * cemerick manages to contain cheeky comment to technomancy about reinventing wheels ;-) :-D

13:29 kotarak: cemerick: a native version would have the advantage of eliminating the “fork/spawn the client” step. I would expect this to be much faster.

13:29 technomancy: hah

13:29 touché

13:29 kotarak: Whether OCaml can do that? hmmm….

13:29 cemerick: kotarak: ocaml can compile down to a very small/fast native executable just about everywhere, so…

13:30 I don't actually know anything about it, short of it basically in a working state.

13:30 Windows may be problematic, but that's typical.

13:30 kotarak: cemerick: OCaml is quite nice, and yes, windows is a problem… as usual.

13:34 The jark site is down? Hmm...

13:34 Raynes: technomancy: ibdknox and I have been working on Spawn. Problem is, we want it to remain a library, and you don't like dependencies because of packaging issues.

13:34 cemerick: kotarak: yeah, I just msg'd Issac about it.

13:35 kotarak: here's the ocaml client: https://github.com/icylisper/jark-client

13:35 technomancy: Raynes: I think this is a case where wider sharing and standardization would justify it

13:36 also considering it's probably more than a page =)

13:38 ibdknox: what'd I miss?

13:38 technomancy: ibdknox: how are you finding spawn?

13:39 ibdknox: technomancy, Raynes basically rewrote it so that it makes a bit more sense :)

13:40 technomancy: heh; gotcha

13:40 cemerick: spawn?

13:40 ibdknox: cemerick, project templating as a library

13:40 cemerick, with both lein and cake plugins

13:40 Raynes: There are still a few bugs because resources are the bane of my existence, but… getting there.

13:40 cemerick: ah-ha

13:40 that's a swamp :-|

13:40 technomancy: cemerick: do tell

13:40 Raynes: A deep, dark swamp.

13:40 ibdknox: resources suck

13:41 technomancy: wait, what's wrong with resources?

13:41 Raynes: technomancy: Go list files under the same directory structure in 6 different jars.

13:42 technomancy: you don't want to just require a manifest?

13:42 cemerick: technomancy: defaults are hard to get right, defaults across contributors or types of projects are even harder to get right and keep halfway coherent, and discovery of these sets of defaults is really hard to get right, especially once more than 3 people are producing them.

13:42 Just remembering my encounters w/ archetypes — which surely had their own baggage, but there seems to be some hard problems in general.

13:43 ibdknox: cemerick, well, you can add your own templates very easily, so I suspect there will be packs of templates that people will build

13:43 technomancy: cemerick: yeah, I'm definitely interested in hearing about the issues

13:43 ibdknox: cemerick, and that is *separate* from spawn

13:43 which is important

13:43 cemerick: ibdknox: see, I'm already confused. :-P

13:43 ;-)

13:43 ibdknox: haha

13:43 basically lein plugin install spawn

13:44 lein plugin install noir-templates

13:44 lein spawn heroku-project my-cool-site

13:45 cemerick: fair enough — what happens when there's 200 different template plugins?

13:45 Raynes: There isn't really an issue with anything but template discovery. We already require that template (genome) definitions have a specific directory structure (spawn/genome/foo.clj and spawn/genome/foo/ for template files). Mostly, we want to be able to dynamically list and access all of the genomes whether or not they are in jars and we want to list them. I just haven't had time to work out how to do that yet.

13:45 ibdknox: eh, if there are, there are

13:45 cemerick, they tend to be specific to the problem you're solving

13:45 cemerick: ibdknox: absolutely

13:46 Raynes: We also want to repeat ourselves because we just woke up and want to repeat ourselves.

13:50 technomancy: Raynes: literally spawn/genome, or spawn/$GENOME ?

13:50 cemerick: you don't think distributing them as maven artifacts solves the namespacing issue?

13:50 actually the real problem with pulling in spawn is that it's a circular dependency =\

13:50 cemerick: (The short upshot is almost no one uses archetypes. It's impossible to find the one you want; but if you do (often going only by the name, e.g. there's a partial list here: http://docs.codehaus.org/display/MAVENUSER/Archetypes+List), chances are it's ill-maintained or helpfully adds bugs to your project from the start.)

13:51 well, that was helpful

13:51 (The short upshot is almost no one uses archetypes. It's impossible to find the one you want; but if you do (often going only by the name, e.g. there's a partial list here: http://docs.codehaus.org/display/MAVENUSER/Archetypes+List), chances are it's ill-maintained or helpfully adds bugs to your project from the start.)

13:51 technomancy: (though a 5-line shell script would probably suffice for packaging purposes in spawn)

13:52 cemerick: what makes them hard to find? is it just that the nice UI on search.maven.org is a relatively recent development?

13:53 cemerick: technomancy: it's that there are often multiple archetypes with minute (yet subtly important) differences, so an artifact id is a pretty narrow peephole through which to determine whether one is right v. another. Nevermind differences in terminology, etc.

13:54 technomancy: cemerick: so the standard clojars-mosh-pit issues apply, but apart from that would it be fair to say it's more of a social issue than a technical one?

13:54 cemerick: The only times I've used them, I ended up trying two or three, finally found the one I needed, and then discovered a week later I was suffering from a bug in the generated descriptor for something-or-other.

13:54 licenser: Can anyone tell me why clojue-jack-in dies with this: "error in process filter: progn: Symbol's value as variable is void: /Users/licenser/\.lein"

13:54 technomancy: licenser: what version of clojure-mode?

13:55 there's a bug we just fixed last week where unexpected junk on lein's stdout could interfere with the bootstrap

13:55 licenser: technomancy: your version from git (1.11.2)

13:55 ohh sneaky :)

13:55 that might be it

13:55 technomancy: licenser: that was sooooo last week. =)

13:55 licenser: heh

13:56 weeh :D

13:56 now I just get the version mismatch thingy :(

13:57 cemerick: technomancy: I wouldn't say that.

13:58 licenser: technomancy: you are my hero!

13:58 thanks mate :)

13:58 technomancy: heh; np

13:58 cemerick: If the only interaction the user can provide is are coordinates, then yes. However, I can imagine spawn (or whatever appropriate bit) making it possible for template authors to provide interactive guidance to help find their templates when appropriate. It'd be a bit of a random walk, but a series of Y/N questions could make the selection process more of a conversation between the user and N different template authors about what mak

13:58 each option distinctive.

13:58 * cemerick is shooting the moon re: command-line tooling there

13:59 wastrel: my glasses are dirty

13:59 licenser: wastrel: ask technomancy he is great at helping people :P

13:59 perhaps he has fixed that in a patch last week too ^^

14:00 technomancy: have you tried increasing your font size?

14:02 cemerick: I almost want to hope that the smaller, more tightly-knit nature of the clojure community would help avoid overlap.

14:02 but there are like five rabbitmq clients, so I'm thinking no.

14:02 licenser: technomancy: I'd like to ask you on a thought of mine about lein if I am not disturbing you too much?

14:02 cemerick: hah :-)

14:02 technomancy: licenser: sure, what's up?

14:02 cemerick: also, +5 years, how small and tightly-knit is it, etc.

14:04 licenser: I found a strange idea in the erlang world about build tools: make the tools 'executable' part of the project. So allow leiningen to be shipped as part of the git repository, that way every project always has the 'right' version of leiningen

14:04 have you ever thought about that?

14:05 cemerick: we just have to scare away all potential newcomers - we can get a few CL'ers to help with that

14:05 technomancy: licenser: actually I think you could do that already

14:05 licenser: lein will automatically perform self-install now if it notices its uberjar is missing

14:05 licenser: technomancy: I did it just required a bit hackery

14:05 cemerick: that's just a submodule, no?

14:06 kotarak: licenser: gradle has something similar IIRC.

14:06 technomancy: cemerick: you should only need a submodule if you wanted a snapshot rather than a release

14:06 licenser: as making ./lein use $PWD/.lein instead of $HOME./lein as it's root

14:06 technomancy: licenser: what was needed?

14:06 licenser: mostly that

14:06 I think only that

14:07 technomancy: I don't understand

14:07 licenser: so if lein would like check of $PWD/.lein exists and take it istead of $HOME/.lein all would be for free

14:07 cemerick: technomancy: I think the benefit of a submodule would be zero install…

14:07 technomancy: licenser: oh, you want to make sure user-level plugins don't conflict?

14:08 cemerick: Not that I'm actually advocating submodules. :-P

14:08 technomancy: cemerick: right, the benefit of not using submodules is that you would get to not use submodules. =)

14:08 cemerick: Tantalizing syllogism, that is.

14:08 licenser: technomancy: yap that and also as cemerick pointed out - really zero install, plus the fact that different projects can use different versions of lein

14:08 technomancy: submodules praemium sum est

14:08 licenser: and with that entirely different versions of clojure too

14:08 technomancy: licenser: using ~/.lein will actually not conflict

14:09 because each version's self-install is its own uberjar in ~/.lein/self-installs

14:09 the only thing that's shared is ~/.lein/init.clj and user-level plugins, which I think in most cases you do want to share

14:09 licenser: yes but I'd have to edit the lein sh to switch between versions (i.e. clojure versions)(

14:10 had a lot of fun with different clojure versions :P

14:10 technomancy: oh, are you trying to run lein on clojure 1.3? that's probably not going to work.

14:10 licenser: it is working great

14:11 had to self upgrade a few libraries on the project side but it works

14:11 technomancy: oh, wow; interesting.

14:11 is this 1.6.2-SNAPSHOT?

14:11 licenser: there is a working lein uberjar on the github page for lein-clojurescript

14:12 technomancy: I guess if you did it on a per-project basis it wouldn't be a big deal since you'd be responsible for plugin breakage yourself

14:12 licenser: https://github.com/bartonj/lein-clojurescript

14:12 technomancy: exactly my point :)

14:12 that is why this semi lein lives in ./line and not global lein

14:12 technomancy: though honestly I think for clojurescript using eval-in-project with an in-memory clojure 1.3 project is cleaner

14:12 someone on the mailing list tried that and said it worked for him

14:13 licenser: then I figured, hey that is actually a nice thing, reminds me of rebar from erlang

14:13 * cemerick mumbles something about clojurescript releases

14:13 licenser: and then I figured that it is like only 3 lines in the lein sh to make lein work globally and locally

14:14 cemerick: aside of being confusing? :P

14:14 cemerick: licenser: Or, not existing.

14:14 licenser: yes which is quite confusing

14:14 cemerick: heh

14:14 yeah

14:14 licenser: so I still don't understood the entire concept of clojurescript

14:15 but what I got working works great :OP

14:15 so it was a darn hard thing to translate foo.bar() -.-

14:15 geez

14:24 tashafa: clojurescript is the future.

14:24 for me at least :)

14:25 licenser: tashafa: it is certnely darn nice but it has a lot of pitfalls

14:25 cemerick: I love the vision. I need some trains running on time though.

14:25 tensorpudding: i don't much understand the point either

14:25 tashafa: what pitfalls?

14:25 licenser: like foo.bar() for example

14:25 ibdknox: cemerick, what?

14:25 lol

14:26 tensorpudding: you still need to compile it to javascript for it to be useful

14:26 why not just write the javascript?

14:26 cemerick: ibdknox: hrm?

14:26 ibdknox: cemerick, you need some trains running on time?

14:26 licenser: tensorpudding: I like clojure better

14:26 cemerick: tensorpudding: that's like saying, why not write Java if you're going to run on the JVM.

14:26 tensorpudding: it's not like javascript devs are in short supply

14:26 ibdknox: tensorpudding, actually, they are

14:26 licenser: tensorpudding: neither are java devs :P

14:27 cemerick: In any case, just because you can sling more mess doesn't make the mess go away.

14:27 licenser: ibdknox: no they are not, good js devs are in short sypply

14:27 ibdknox: tensorpudding, try hiring a javascript person who doesn't suck right now

14:27 cemerick: ibdknox: basic infrastructure services. I'm a releases broken record. :-P

14:27 tashafa: I've been using it on theis project of mine. and the advantages over javascript is godsend

14:27 ibdknox: cemerick, I really want a cljs release too :(

14:27 tashafa: and I do a lot of javascript

14:28 ibdknox: I hate javascript so much

14:28 tensorpudding: who knows, maybe dart will kick javascript to the curb

14:28 tashafa: javascript is my first love

14:28 tensorpudding: okay, that's not going to happen

14:28 but it'd be funny to think about it

14:28 ibdknox: I spent 6 hours yesterday finding out that IE9 has broken Dom replacement

14:29 a very simply set of steps will cause a reference to a dom element to be destroyed, while in every other browser it's fine lol (including IE8 and 7)

14:29 cemerick: talk about a swamp

14:29 ibdknox: unfortunately, that's something cljs doesn't fix

14:29 * cemerick despises web development

14:29 tashafa: are you using jquery?

14:30 zodiak: tashafa, I prefer my first loves not to be abusive relationships ;)

14:30 tashafa: zodiak: hahaha

14:30 ibdknox: tashafa, I was, the repro I have to prove it's an IE9 bug doesn't

14:30 technomancy: the browser is giving ORMs a run for their money for the title of "the vietnam of computer science"

14:30 "the vietnam war of computer science" rather

14:30 licenser: ORMs?

14:30 clojurebot: special forms are http://clojure.org/special_forms

14:30 tensorpudding: i like web dev

14:31 technomancy: licenser: object-relational mappers

14:31 licenser: ah

14:31 cemerick: ORBs -> ORMs -> browsers, huh?

14:32 ibdknox: tensorpudding, I love the web. Web dev is terrible

14:32 tensorpudding: what's wrong with it?

14:32 ashafa: technomancy: I think browsers already have that title

14:32 tensorpudding: i mean, if you ignore noncompliant browsers

14:32 ibdknox: you can't ignore that

14:32 unless you don't care about users

14:33 technomancy: ashafa: was specifically referring to http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx

14:33 ashafa: the scene has to be the worst

14:33 zodiak: ibdknox, web dev is fun, if you ignore IE ;)

14:33 tensorpudding: it seems easier to me to make an acceptable cross-platform experience with web than with anything else

14:33 ibdknox: zodiak, and JS in general ;)

14:33 technomancy: "Designed for curl 7.20."

14:33 zodiak: ibdknox, touche sir, touche

14:34 licenser: technomancy: sure that your JS is curl compatible? :P

14:34 ibdknox: for example, there is no sensible date handling for JS

14:34 date.js does terrible things with timezones

14:34 technomancy: tensorpudding: well the nice thing about developing CLI applications is that windows users typically don't want to use your programs anyway.

14:34 * technomancy ducks

14:35 ibdknox: (inc technomancy )

14:35 lazybot: ⇒ 1

14:35 clojurebot: No entiendo

14:35 ibdknox: gr

14:35 (inc technomancy)

14:35 lazybot: ⇒ 19

14:35 licenser: (inc technomancy)

14:35 lazybot: ⇒ 20

14:35 ashafa: I've learned when it comes to dates in JS its bext to roll your own. keep it constrained to what exactly it needs to do

14:35 licenser: wait tachnomancy has state?!?!

14:35 ashafa: best*

14:35 licenser: EVIL!

14:35 you are mutating mate!

14:36 technomancy: it's ok; /me is an identity

14:36 ibdknox: I keep nearly talking to tech-otter

14:36 technomancy: at least, I think I am

14:36 but that should be good enough

14:36 tensorpudding: most people on mac don't want to use CLI apps either

14:36 technomancy: heh

14:36 licenser: (technomancy 1)

14:36 ibdknox: tensorpudding, not true, the vast majority of devs are on macs now ;)

14:36 licenser: tensorpudding: not true!

14:37 cemerick: I wonder if I'll have the brass to not support IE in my next app.

14:37 dnolen_: tensorpudding: ClojureScript is a much more expressive language than JS in IMO (fn [] ...) vs. function(){...}, as well cutting down ceremony for things which are tedious in plain JS (namespacing)

14:37 tensorpudding: i as a linux user don't necessarily want foo to be a CLI app

14:37 licenser: tensorpudding: are you thread safe?

14:37 Bronsa: CLI is faster

14:37 tensorpudding: CLI is more esoteric

14:37 less visual

14:37 cemerick: Sounds like CLI is web scale.

14:37 ibdknox: it is.

14:37 very web scale

14:37 licenser: the best reason for Cli is - it follows the unix principle - lets you chan programs

14:38 tensorpudding: a tool for devs, not users

14:38 licenser: try that with a GUI

14:38 ibdknox: I'm working on the web scale CLI framework for Clojure

14:38 ashafa: dnolen_: being able to do #(let [x ($ %2)]...)) is just pure ectasy

14:38 TimMc: licenser: s/chaining/clipboard/

14:38 tensorpudding: whats that $

14:38 is that from jquery or something

14:38 ibdknox: jquery

14:39 licenser: TimMc: wait you want to say chaining is the same as a clipboard?

14:39 dbushenko: hi all!

14:39 ashafa: (def $ (js* "$"))

14:39 tensorpudding: you can use jquery with clojurescript?

14:39 licenser: hi dbushenko

14:39 tensorpudding: that's pretty convenient

14:39 dbushenko: is there a way to override a method of a java class except using proxy?

14:39 TimMc: licenser: Clipboard is the GUI substitute for chaining. :-)

14:39 ibdknox: sort of

14:39 licenser: TimMc: but it is not nearly the same

14:39 dnolen_: tensorpudding: you can use any JS lib from ClojureScript. There's a couple of things that need fixing for it to be ideal tho.

14:39 TimMc: of course

14:40 ashafa: tensorpudding: yes you can

14:40 licenser: no of cause not :P chaining allows for scriptability and automation clip boarding allows for a tennis arm

14:42 tensorpudding: excluding web stuff, what user apps use clojure?

14:43 ibdknox: not many

14:43 there are a few swing apps out there

14:43 cemerick: looks like overtone's new tooling uses swing

14:43 technomancy: it's not very common to distribute JVM-hosted programs to the user in any language

14:43 ibdknox: Clojure lends itself more naturally to server/computational applications

14:44 overtone has new tooling? :D

14:44 tensorpudding: right, i forgot

14:44 the clojure gui choice is swing isn't it

14:44 cemerick: ibdknox: http://overtone.github.com/blog.html

14:44 tensorpudding: or swt

14:45 tensorpudding: which one looks less atrocious

14:45 dnolen_: cemerick: if Feb 2010 is considered new ;)

14:45 ibdknox: cemerick, those are old mockups

14:45 technomancy: pretty much all the JVM gui options end up deep in uncanny valley territory

14:45 cemerick: dnolen_, ibdknox hah, didn't notice the post dates :-(

14:46 technomancy: licenser: care to join #leiningen to discuss this pull request?

14:50 Raynes: tensorpudding: http://github.com/daveray/seesaw is a good library for working with Swing.

14:50 loomcore: tensorpudding: check out guiftw, can be used with both swing and swt

14:50 ibdknox: I need to look more into my embedded webkit idea

14:51 Raynes: loomcore: FIGHT! FIGHT! FIGHT!

14:51 cark: how about making a web server with embedded jetty, then run it inside xulrunner ?

14:51 while we wait for webkit inside the jvm

14:52 tensorpudding: it was a metaphorical question, i have no desire to add to the list of java gui apps

14:52 cemerick: cark: that's what I've done via swt most recently

14:52 brehaut: jvm is getting webkit?

14:52 tensorpudding: what would jvm do with webkit?

14:52 cemerick: javafx has a webkit view, no?

14:52 cark: brehaut: it was supposed to, for 1.7 .... but no webkit =(

14:53 tensorpudding: which java?

14:53 cark: cemerick: swt has a webkit ?

14:53 ibdknox: cark, you can already embed webkit using swt

14:53 yes

14:53 cark: mhh and how portable is it ?

14:53 ibdknox: it requires webkit to already be on the machine

14:53 dbushenko: tensorpudding, I've found clojure as a really good tool for scientific applications

14:53 cemerick: cark: it uses the native browser: webkit on mac, IE vN on windows

14:54 ibdknox: cemerick, you can force it to use just webkit

14:54 cark: nice i need to investigate that

14:54 ibdknox: which of course fails if it can't find it

14:54 cemerick: ibdknox: oh, I didn't know that

14:54 cark: because swing is so annoying to work with

14:54 cemerick: good to know.

14:54 dbushenko: tensorpudding, it allows me to really, really fast check some hypothesis, try new functionality or investigate a java library

14:54 tensorpudding: it makes sense if your libraries are java i guess

14:54 dbushenko: yep

14:54 usually they are

14:55 tensorpudding: i'd be worried about introducing a java dependencies if they weren't

14:55 tolstoy: Folks, when I test the first example in: http://clojure.org/concurrent_programming, it seems that all the "tasks" run in the same thread!

14:55 tensorpudding: dependency, even

14:55 tolstoy: Does't Executors/newThreadPool actually create a pool of threads?

14:55 dbushenko: well, that's your choice. Either clojure+java libs, either whatever which won't let you get results as fast

14:56 tolstoy: newFixedThreadPool

14:57 ibdknox: cemerick, have you ever used the webview? I'm curious how you interop

14:58 Raynes: tensorpudding: I wrote a purty swing app once.

14:58 dbushenko: Raynes, btw, that's what I'm doing right now: a swing app :-)

14:58 Raynes: https://github.com/Raynes/tallyho

14:58 It actually didn't look terrible.

14:59 cemerick: ibdknox: sure. Run jetty, have the web view connect to the auto-negotitated port, and you're good to go. IIRC, I didn't do anything fancy for interop aside from having a particular handler that would open up a file browser and such.

14:59 drguildo: how do i add a jar file to the clojure classpath?

14:59 ibdknox: aw

14:59 tensorpudding: there's no way that a swing app could look pretty

14:59 brehaut: drguildo: use leiningen

14:59 dbushenko: drguildo, just copy it to your libs/ directory

14:59 cemerick: SWT allows you to install additional protocol handlers, so you could do clj://(+ 1 2) to do evaluation or something.

14:59 Raynes: tensorpudding: They're really only as ugly as the look and feel.

14:59 fdaoud: Raynes: no screen shots?

14:59 dbushenko: if u are using leiningen

14:59 ibdknox: cemerick, so I'm still going to have to write a noir app to drive it

14:59 Raynes: fdaoud: I'm looking for it.

14:59 ibdknox: cemerick, oooh cool

14:59 drguildo: i'm not using leiningen

14:59 tensorpudding: okay

14:59 drguildo: i want to mess with the classes in the repl

14:59 cemerick: ibdknox: that's speculative, never bothered with it.

14:59 tensorpudding: so it's the look&feel that's ugly

15:00 drguildo: i tried -cp but it doesn't work

15:00 cemerick: But yeah, it's a ring app in the background in any case.

15:00 I *think* my thick client days are over though.

15:00 dbushenko: drguildo, but that's the way it should work

15:00 cemerick: Can't imagine needing to build one again.

15:00 dbushenko: drguildo, a year ago I did that manually

15:00 ibdknox: cemerick, well for a dev env...

15:01 cemerick: ah

15:01 Raynes: fdaoud: http://raynes.me/hfiles/tallyho1.png The menubar was removed right after that was taken when daveray pointed out that I could throw a native! call in and it would put the menubar where it's supposed to go on OS X.

15:01 drguildo: i think i know what i might be doing wrong

15:01 fdaoud: tensorpudding: also, on linux, swing fonts are ugly no matter what the look and feel

15:01 tensorpudding: didn't think about fonts

15:02 ibdknox: cemerick, otherwise, I pretty much agree.. that's why I focused on Noir first :) And soon Pinot again

15:02 cemerick: ibdknox: Ironically, you may end up finding that using Eclipse RCP will be the best prototyping sandbox for your purposes. SWT + executable and packaging settled for all platforms, reasonable utilities, etc.

15:02 drguildo: yeah, it was my fault

15:02 cemerick: (that is, the RCP, *not* the IDE)

15:02 drguildo: i was running it from some batch file i'd created

15:03 ibdknox: cemerick, yeah, I'll have to look at what the editor in eclipse can support

15:03 fdaoud: Raynes: no offense, but when you said "purty", I was expecting..something..a little more..elaborate..

15:03 drguildo: so i just called java directly and added the jar to the -cp as well as the clojure jar

15:03 Raynes: fdaoud: I never complained it wasn't simplistic. ;)

15:03 Er...

15:04 I never claimed.

15:04 * Raynes sighs and drinks more coffee.

15:04 drguildo: goodbye computer friends

15:05 ibdknox: cemerick, do you know if it will support drawing non-text objects?

15:05 danlarkin: you're too young for coffee!

15:06 fdaoud: Raynes: fair enough :)

15:06 danlarkin: it'll stunt your growth

15:06 ibdknox: cemerick, the code editor that is

15:06 Raynes: danlarkin: Man. This Conj stuff. I haven't slept longer than 5 hours in like 3 weeks. That's what I'm too young for.

15:06 cemerick: ibdknox: I don't know yet. That's of prime interest to me given my desire to provide the option to get e.g. images from REPL evaluations displayed inline.

15:06 * fdaoud drinks more coffee and plans for a flex ui to front his clojure json-driven webapp.

15:07 ibdknox: cemerick, indeed.

15:07 Raynes: Too young for so many responsibilities that I have to sacrifice sleep in favor of them.

15:07 danlarkin: Raynes: staying up is a young man's game

15:07 fdaoud: s/3 weeks/4.5 years/

15:07 cemerick: I almost always want them outside of the IDE, but it's too obvious of a desire elsewhere.

15:07 fdaoud: s/Conj stuff/having kids stuff/

15:08 Raynes: I like to pretend that I have more to do than everybody else.

15:08 ibdknox: cemerick, I'd want them in, just because I rarely need to do anything fancy with them, I just want to see it real quick

15:08 Raynes: It makes me feel better about whining about it

15:08 fdaoud: don't you have a book to write?

15:08 ;)

15:08 Raynes: Yep.

15:09 cemerick: ibdknox: stuff that's 5000px wide isn't friendly in a REPL interaction panel. ;-)

15:09 fdaoud: so more ammo for you to say you've got more to do than the next guy.

15:09 ibdknox: cemerick, fiiiiine, I make simple 500px things ;)

15:09 cemerick: :-P

15:09 brehaut: cemerick: you need a bigger repl panel :P

15:10 cemerick: brehaut: was looking at the new thunderbolt LCDs the other day. It just might happen.

15:10 brehaut: cemerick: awesome :) i need to get one of the non-thunderbolt LCDs before they disappear

15:11 fdaoud: brehaut: thanks for the articles you posted on your blog. I particularly appreciated the clojure web stack one.

15:11 brehaut: fdaoud: thanks :)

15:12 fdaoud: it needs to be updated for ring 1.0.0 and clj 1.3

15:12 ibdknox: and Noir ;)

15:12 brehaut: ibdknox: fine

15:12 whats another thousand words

15:12 ibdknox: lol

15:13 fdaoud: brehaut: I didn't know ring had a 1.0 release

15:13 ibdknox: it nearly does

15:13 brehaut: fdaoud: it doesnt yet; its got 1.0.0RC1 out

15:13 ibdknox: I think it's still RC

15:13 TimMc: licenser: Bah, with enough mouse jockeys in India, you can have effective scriptability. :-P

15:13 licenser: TimMc: teehee

15:14 then again they might miscopy and paste, they are sloppy like that

15:14 fdaoud: ok so I'm not behind in the news

15:14 ibdknox: is using hiccup required with noir?

15:14 ibdknox: fdaoud, not at all

15:14 licenser: any in canter users around?

15:14 fdaoud: writing html in clojure code just is not for me.

15:14 brehaut: fdaoud: you can use enlive with noir

15:15 ibdknox: you can use anything

15:15 brehaut: ibdknox: but why would you when there is enlive ;)

15:15 TimMc: s/India/Georgia/ apparently these days

15:15 licenser: you can use indian mouse jokes that copy and paste your html from frontpage express

15:15 ibdknox: lol

15:15 brehaut, I want to make enlive simpler

15:16 brehaut: ibdknox: i want to remove deftemplate and create a wrap-enlive-render middleware

15:16 fdaoud: I don't want to use enlive either

15:16 ibdknox: fdaoud, you can use anything that generates a string

15:17 fdaoud: I just want to respond in json. ibdknox: I'm sure that's not a problem with noir, right?

15:17 brehaut: ibdknox: or seq of strings?

15:17 ibdknox: fdaoud, yeah, no problem (noir.response/json) will even do the work for you

15:17 arohner: is there a clojure fn for (.isBound (var foo))?

15:17 fdaoud: ibdknox: great, thanks!

15:18 tensorpudding: i felt pretty proud of myself when i finally "got" enlive

15:19 gfredericks: $findfn (var +) true

15:19 lazybot: [clojure.core/== clojure.core/distinct? clojure.core/boolean clojure.core/var? clojure.core/< clojure.core/= clojure.core/> clojure.core/>= clojure.core/<= clojure.core/bound? clojure.core/ifn?]

15:20 gfredericks: arohner: clojure.core/bound? looks like a good candidate

15:20 ibdknox: I don't understand what findfn is doing there?

15:20 gfredericks: ibdknox: it passes (var +) to a bunch of functions and reports the ones that return true

15:20 ibdknox: that's awesome

15:20 gfredericks: ibdknox: yes.

15:21 Raynes: ibdknox: You tell it what the input will be and what the output should be and it tries every single function until it gets the output you want.

15:21 arohner: is that in a library anywhere?

15:21 Raynes: arohner: findfn? No, but I'm moving it to one. Already working on it.

15:21 gfredericks: it all runs on a VM in Raynes's head

15:21 Raynes: Unfortunately, amalloy sucks at writing code, so it's a little more difficult than I originally thought.

15:21 ibdknox: is that a bot only thing?

15:22 Raynes: But it'll happen.

15:22 ibdknox: whoops

15:22 answered

15:22 Raynes, I want that :D

15:22 let me know when it's in a lib

15:22 gfredericks: $findfn 3 6

15:22 lazybot: []

15:22 Raynes: Kay

15:22 $findfn 3 3 6

15:22 lazybot: [clojure.core/+ clojure.core/unchecked-add clojure.core/+' clojure.core/unchecked-add-int]

15:23 TimMc: Raynes: Let me guess, it is written entirely in juxts?

15:23 Raynes: Totally.

15:23 TimMc: $findfn 1

15:23 lazybot: [clojure.core/* clojure.core/*']

15:23 brehaut: TimMc: im sure theres a handful of to-fix in there too

15:23 TimMc: hmm

15:23 gfredericks: $findfn 2

15:23 TimMc: $findfn 1

15:23 lazybot: []

15:23 [clojure.core/* clojure.core/*']

15:23 TimMc: $findfn 0

15:23 lazybot: [clojure.core/+ clojure.core/+' clojure.core/release-pending-sends]

15:23 ibdknox: lol

15:23 TimMc: $findfn ""

15:23 lazybot: [clojure.core/with-out-str clojure.core/print-str clojure.core/pr-str clojure.core/str]

15:24 gfredericks: $findfn false

15:24 lazybot: []

15:24 gfredericks: $findfn true

15:24 lazybot: [clojure.core/thread-bound? clojure.core/bound? clojure.core/and]

15:24 * Raynes points out that lazybot can be PM'd.

15:24 TimMc: aw

15:24 gfredericks: ,(or)

15:24 clojurebot: nil

15:24 gfredericks: ah

15:24 TimMc: aha

15:24 OK, one more.

15:24 gfredericks: $findfn nil

15:24 lazybot: [clojure.core/dosync clojure.core/import clojure.core/prn clojure.core/refer-clojure clojure.core/print clojure.core/with-loading-context clojure.core/newline clojure.core/comment clojure.core/or clojure.core/load clojure.core/shutdown-agents clojure.core/await clo... https://gist.github.com/1349043

15:24 TimMc: there we go

15:24 gfredericks: Raynes: thanks for letting us come over and play with your toys

15:24 Raynes: :p

15:42 jcromartie: OT: does anybody here use Adium for IRC?

15:43 amalloy: brehaut: findfn predates my induction into the cult of Useful

15:44 so no to-fix

15:44 brehaut: so purely juxt then

15:44 amalloy: &(nth #(iterate juxt identity) 1000) ;; this is the whole source

15:44 lazybot: java.lang.UnsupportedOperationException: nth not supported on this type: sandbox6471$eval11065$fn__11066

15:44 amalloy: &(nth (iterate juxt identity) 1000)

15:44 lazybot: ⇒ #<core$juxt$fn__3775 clojure.core$juxt$fn__3775@bbe161>

15:45 brehaut: lol

15:45 &((nth (iterate juxt identity) 1000) 1)

15:45 lazybot: java.lang.StackOverflowError

15:45 di-csuehs: jcromartie: yes.

15:45 brehaut: lazybot has a small stack

15:46 &((nth (iterate juxt identity) 10) 1)

15:46 lazybot: ⇒ [[[[[[[[[[1]]]]]]]]]]

15:46 amalloy: $findarg map % [1 2 3] [2 3 4]

15:46 lazybot: [clojure.core/unchecked-inc-int clojure.core/unchecked-inc clojure.core/inc clojure.core/inc']

15:48 jcromartie: what sorcery is this!?

15:48 reminds me of Smalltalk's method finder

15:50 TimMc: amalloy: findarg! That's what I was asking you about a while ago.

15:51 amalloy: TimMc: well, it exists but i always forget the syntax and/or that it exists

15:51 so now you know

15:52 jcromartie: i wrote it when i heard someone bragging about the smalltalk method finder

15:52 jcromartie: amalloy: nice

15:52 amalloy: source?

15:52 fdaoud: ibdknox: quick yes/no question, does noir have anything to facilitate i18n?

15:53 ibdknox: fdaoud, not explicitly. seancorfield has post about how he handled it though

15:53 a post*

15:53 amalloy: jcromartie: don't judge too harshly. i wrote it only like four months into learning clojure

15:53 ibdknox: fdaoud, http://corfield.org/blog/post.cfm/real-world-clojure-i18n-resources

15:53 amalloy: and it's kinda tangled up with the rest of lazybot's clojure plugin (Raynes is working on factoring it out, i think): https://github.com/flatland/lazybot/blob/develop/src/lazybot/plugins/clojure.clj#L147

15:53 Raynes: I'll have it pushed to Github and released in like 15 minutes.

15:54 amalloy: nice

15:54 fdaoud: ibdknox: thanks!

15:54 jcromartie: amalloy: I'll be gentle

15:59 Raynes: ibdknox, TimMc, amalloy, etc: https://github.com/Raynes/findfn

16:00 TimMc: sweeeeet

16:00 gonna add that to my REPL's default bindings

16:00 Raynes: I've used a couple of 1.3-only things, fyi.

16:01 Like the new inline def docstrings and ^:dynamic.

16:11 arohner: what was the name of the library that's all about retrying functions?

16:11 named after a person, I think

16:11 Raynes: walton?

16:11 scgilardi: robert bruce

16:12 arohner: scgilardi: thanks

16:12 gfredericks: what're "inline def docstrings"?

16:13 Raynes: (def foo "I like bar" 0)

16:13 gfredericks: well it's about time.

16:13 Raynes: ;)

16:14 gfredericks: #^{:doc "why did I have to type four punctuation marks in a row to wah wah wah"}

16:14 and so instead I leave my defs undocumented :)

16:16 gabemc: Hey, question about java interop: I have the libvirt jar bindings for java,

16:16 but when I try to import one of the main classes via (import '(org.libvirt Connect)), I get a class not found exception.

16:16 fdaoud: ok here's a dumbass question: where is clojure 1.3.0 for maven? http://build.clojure.org/releases/org/clojure/clojure/ only has 1.3.0-alpha4

16:17 Raynes: fdaoud: http://search.maven.org/#search%7Cga%7C1%7Cclojure

16:17 gabemc: fdaoud: It's on apache's main repo site.

16:17 fdaoud: ohh, geez

16:17 sorry

16:18 Raynes: fdaoud: I hope it didn't seem condescending to point you at a search page.

16:18 gabemc: fdaoud: I actually just had the same question myself, not 20 minutes ago. I just knew where to look first.

16:18 Raynes: I just didn't feel like clicking the top search result and linking you to that instead.

16:19 fdaoud: so if I was using org.clojure/clojure-contrib/1.2.0 before, now it should be..?

16:19 gabemc: Does anybody know why the URLClassLoader wouldn't load a particular java class from clojure?

16:19 brehaut: fdaoud: http://dev.clojure.org/display/design/Where+Did+Clojure.Contrib+Go

16:19 fdaoud: Raynes: not at all, I'm just grateful for people offering to help

16:19 gabemc: It does have JNI bindings inside the class, if that matters (never done JNI before, so I don't know).

16:20 Raynes: fdaoud: clojure 1.3.0 and whatever specific libraries you need from contrib that are still around (but migrated to their own libraries individually, per the link above).

16:20 fdaoud: gabemc: thanks

16:20 Raynes, brehaut: thank you, much appreciated

16:21 Raynes: No problem. We get off on your happiness.

16:21 fdaoud: awesome, makes me want to pay it forward.

16:22 brehaut: fdaoud: tangentally related: http://mostlylazy.com/2011/11/08/episode-0-0-1-sean-corfield-clojure-contrib-and-real-world-clojure/

16:22 duck1123: quick, run up to a stranger and tell them where they can find the 1.3.0 release of clojure

16:23 fdaoud: brehaut: good stuff

16:24 duck1123: I would but I'm still stuck on trying to convince strangers (ok friends) to even try clojure

16:24 brehaut: fdaoud: they are pretty strange if they dont want to try clojure

16:24 fdaoud: not easy when they just can't seem to get past the !@&*?! parens thing

16:25 duck1123: fdaoud: if they won't learn clojure for you, then they're not real friends

16:25 Raynes: Did somebody say… TRY CLOJURE!?!?!?! http://tryclj.com

16:25 jkkramer: ]\

16:25 ]

16:25 brehaut: fdaoud: the parens are one lexeme to the left! the world is ending!

16:25 jkkramer: sorry, cat

16:25 fdaoud: there was the inversion of the sequence of function calls, but that got resolved with -> and ->>

16:25 so there is some hope

16:27 brehaut: fdaoud: it takes time, no need to rush them

16:28 fdaoud: brehaut: yeah. they're just not as excited about fp as I am.

16:29 gfredericks: Raynes: yes, somebody did.

16:30 brehaut: fdaoud: then dont go at the FP angle ;)

16:31 fdaoud: what about clojures more flexible approach to objects and polymorphism?

16:31 amalloy: brehaut: c'mon, like three lexemes

16:31 foo . bar ( vs ( .bar foo

16:32 brehaut: amalloy: fine. if they are die in the wool java programemrs

16:32 arohner: what's the best way to figure out why a clojure process isn't exiting?

16:32 amalloy: heh. die in the wool. i can just see someone suffocating, covered with sheep

16:33 brehaut: amalloy: the dangers of keggers in shearing season

16:33 amalloy: arohner: kill -9. you won't find out anything valuable, but you'll have vengeance

16:33 arohner: amalloy: :-)

16:33 gfredericks: fdaoud: I'm personally a fan of the data structures and seq abstraction

16:33 manutter: arohner: hmm, profiler? If you let it sit and spin for a while, I'd think there'd be a noticeable spike wherever it's getting stuck.

16:34 jkkramer: arohner: tried (shutdown-agents)?

16:34 assuming you're using agents or futures

16:34 manutter: well, try shutdown-agents first, of course :)

16:34 then the profiler

16:34 amalloy: yeah, it's probably the agents

16:35 brehaut: secret agents skulking in the background

16:35 arohner: I have the profiler running, but what should I be looking for? live, non-daemon threads?

16:35 fdaoud: brehaut: true, but you know, when they can't get past the parens thing.. I don't insist

16:35 gfredericks: +1

16:35 duck1123: I'm getting an odd error trying to use langohr. https://gist.github.com/1349315 anyone know what's going on here?

16:36 brehaut: fdaoud: if they dont have a reason to want to get past them, they likely never will

16:36 manutter: arohner: I'm just thinking that if you've got something stuck in a loop, the longer you let it hang, the more time it will spend being stuck

16:36 so look for code that gets a bigger chunk of the profile the longer you leave it hung up.

16:36 arohner: manutter: my cpu usage is essentially 0%

16:37 callen: technomancy: http://www.readwriteweb.com/hack/2011/11/groveio-hosted-searchable-irc.php mother. fuck.

16:37 duck1123: calling .getBody outside of the defn works, but not inside

16:37 amalloy: manutter: seems like blocking is more common than spinning

16:37 manutter: hrm, well, I'm not a guru debugger, maybe my idea is just not helpful

16:37 fdaoud: brehaut: probably. after a while I just stop trying. I don't have anything to gain anyway, it's just the urge to share the joy.

16:37 brehaut: fdaoud: totally familiar with that :)

16:37 manutter: if the profiler isn't helping then try something else

16:38 jcromartie: fdaoud: I have a friend who resents it when I post clojure code at him, just because it's clojure

16:39 fdaoud: gfredericks: along the same lines, I am happy about not having dumb model objects or a !?>#*! orm to mirror every last table in the database.

16:39 jcromartie: yikes. why the hate?

16:39 gabemc: so, no thoughts on the loader issue?

16:40 jcromartie: fdaoud: dunno, he thinks I'm evangelizing when it's really just what I'm writing code in. but I have tried to sell him on persistent data types, concurrency, etc.

16:41 fdaoud: jcromartie: sounds like he reached the point where you say clojure and he just plugs his ears and says "la la la la la"

16:42 (like me with scala)

16:43 jcromartie: fdaoud: hah, I guess so

16:46 technomancy: callen: huh; interesting

16:46 callen: I was kinda surprised nobody offered that as a hosted service

16:47 jhixton: clojure noob here.. is there a better way to do this? https://gist.github.com/1349340

16:49 amalloy: jhixton: that looks reasonable

16:49 i hate the names args and args-, though

16:49 gfredericks: fdaoud: yeah I definitely don't miss all the background-oop-magic that the rubyists are fond of.

16:49 amalloy: something like names and values would be clearer

16:49 technomancy_: ,((partial zipmap :thread :posts) [1 2])

16:50 clojurebot: #<ArityException clojure.lang.ArityException: Wrong number of args (3) passed to: core$zipmap>

16:50 technomancy_: ,((partial zipmap [:thread :posts]) [1 2])

16:50 clojurebot: {:posts 2, :thread 1}

16:50 jhixton: cool

16:50 technomancy_: works too

16:50 jhixton: amalloy: good point on the names

16:50 tensorpudding: hooray for partial functions

16:50 amalloy: &((comp (partial zipmap [:thread :posts]) list) 1 2)

16:50 lazybot: ⇒ {:posts 2, :thread 1}

16:51 fdaoud: gfredericks: like Uncle Bob said re Rich Hickey's talk: "Rails is easy, it is not simple."

16:51 gfredericks: indeed

16:58 fdaoud: later all, thanks for being such an awesome community

17:00 gfredericks: (inc us)

17:00 ibdknox: lol

17:00 gfredericks: dangit lazybot

17:01 brehaut: gfredericks: i think its confused because 'us' isn't a known symbol; perhaps you should try a keyword if you are jsut going to make stuff up

17:01 gfredericks: brehaut: it's always let you make stuff up

17:02 goodieboy: i'm having a hard time getting noir to run in tomcat

17:02 ibdknox: goodieboy, include your views explicitly at the top of server.clj

17:02 goodieboy: i cloned this project (https://github.com/rathwell/noir-tomcat-test), created the uberwar, put the warfile in tomcat's webapps dir... and get this:

17:02 ibdknox: ok let me check on that...

17:02 callen: technomancy: it'll be paid and proprietary

17:02 technomancy: should I eat their lunch?

17:03 technomancy: I could make a fully integrated service that did what they purport to offer.

17:03 technomancy: callen: dooooo iiiiit =)

17:03 callen: technomancy: trivially.

17:03 technomancy: callen: did you see the hubot installer?

17:03 goodieboy: ibdknox: here's the error: java.io.FileNotFoundException: /var/lib/tomcat6/webapps/tomcat-test-0.1.0-SNAPSHOT-standalone/WEB-INF/classes/public (Is a directory)

17:03 ibdknox: goodieboy, that happens when there are no routes defined

17:03 callen: technomancy: I've been poking around hubot's source, not specifically familiar with what you're talking about though.

17:03 goodieboy: hmm

17:03 ibdknox: goodieboy, war's are much more complicated than jars

17:04 goodieboy, at the top just do (:require [my.view.ns1] [my.view.ns2])

17:04 goodieboy, and it'll be good to go

17:04 goodieboy: ibdknox: ok i'll try that

17:04 callen: technomancy: I'll be honest, I don't like it when people try so hard to "profit" off of what is scarcely a service.

17:04 clojurebot: Ok.

17:04 callen: technomancy: and likely doing so by reusing a piped chain of OSS

17:04 ibdknox: why?

17:04 clojurebot: http://clojure.org/rationale

17:04 callen: technomancy: it's most UI :\

17:05 technomancy: callen: there's a site where you can click a couple buttons and it'll install hubot on a free heroku dyno

17:05 ibdknox: I think you dramatically underestimate the difficulty of running a business

17:05 callen: ibdknox: I work for a startup, try me.

17:05 ibdknox: lol

17:05 callen: ibdknox: climbing Mt. Everest is hard, but it doesn't feed anybody.

17:05 ibdknox: difficulty doesn't define utility. Don't conflate the two.

17:05 technomancy: not sure why I can't find the link now

17:05 ibdknox: callen, when did I ever say it did?

17:06 callen: technomancy: http://visuallounge.techsmith.com/2011/11/dev_corner_-_installing_hubot.html

17:06 ibdknox: that was the implication. Why would I care otherwise how difficult it is to run a business after what I expressed?

17:06 ibdknox: callen, you said you could replicate their company trivially

17:06 callen, you're a designer then?

17:06 technomancy: callen: no, there's a site where it's all "what would you like to call it, and what's account info" and bam; push-button bot service

17:07 callen: technomancy: that's pretty impressive.

17:09 ibdknox: the problem I have, is that they're going to charge for it as if it's some sort of novel business collab application

17:09 ibdknox: when the only value they've introduced is made a new web IRC client.

17:09 ibdknox: callen, they're going to charge for it because they did work.

17:09 technomancy: https://hubot-factory.herokuapp.com/

17:09 callen: ibdknox: hosting an ircd has been a commodity service for decades.

17:10 ibdknox: callen, there's absolutely nothing wrong with that.

17:10 callen: ibdknox: I repeat, difficulty doesn't translate to utility.

17:10 ibdknox: ?

17:10 callen: ibdknox: some people would rather praise every daisy as if it were unique and special. I'd rather cull the useless.

17:10 ibdknox: callen, repeating a statement that is not related to our current argument is not actually a valid debate tactic.

17:10 callen: it's pertinent to what you said.

17:11 your inability to recognize it as such has no bearing on that.

17:11 ibdknox: rofl

17:11 callen: labor doesn't mean value.

17:11 ibdknox: callen, alright man.

17:11 callen: do you comprehend that?

17:11 that was the core fault of marxism.

17:11 technomancy: ~gentlemen

17:11 clojurebot: You can't fight in here. This is the war room.

17:11 ibdknox: you're a genius. I'll leave you be. :)

17:11 * cemerick gets back

17:11 cemerick: How did we get on the topic of Marxism? :-P

17:11 technomancy: I don't think I've gotten a chance to use that one here yet

17:11 ~botsnack

17:11 clojurebot: thanks; that was delicious. (nom nom nom)

17:11 ibdknox: cemerick, I'd love to know myself.

17:12 callen: it shares a fallacy that he was expressing.

17:13 ibdknox: callen, The only statement I made is that replicating their work is non-trivial, because you underestimated the fact that creating a business of any kind if significant work.

17:13 callen, you argued an entirely different point

17:13 this reminds me very much of the NS fiasco the other night.

17:13 callen: I don't care about the business side

17:13 I care about product.

17:14 I don't want to replicate their sales funnel or CRM database or their support infrastructure

17:14 I want to make them irrelevant and unnecessary to people that know what they're doing./

17:14 there's a very simple, easy to understand distinction that I just made

17:14 if that's too hard grasp, I don't think textual forms of communication are your cup of tea.

17:14 cemerick: ibdknox: There's a fiasco every night these days. :-/

17:15 ibdknox: callen, woah now.

17:15 callen: ibdknox: in future, if you don't have anything positive to say, don't speak to them.

17:15 ibdknox: wow

17:15 callen: ibdknox: I wasn't talking to you originally.

17:15 brehaut: there was a fiasco about namespaces?

17:15 ibdknox: you're talking in IRC dude

17:15 callen: ibdknox: then don't expect me not to react.

17:15 ibdknox: ...

17:15 jesus christ man

17:15 seancorfield: too many negatives :)

17:16 ibdknox: I'm sorry I hurt your feelings.

17:16 I'll try to be nicer next time.

17:16 callen: it's not about feelings, I just find people being intentionally obtuse frustrating.

17:16 ibdknox: you just completely belittled someone else's work

17:16 callen: you can't serious suggest you didn't understand the concept of "difficulty/effort != utility", right?

17:16 ibdknox: ...

17:16 haha

17:16 ok

17:16 cemerick: I've always preferred being acute, myself.

17:16 ibdknox: I'm done :)

17:17 callen: I don't care how difficult it was for them to make.

17:17 * brehaut goes and gets a coffee

17:17 ibdknox: I apologize to the rest of the channel for this nonsense

17:17 callen: I'm slicing off one aspect of the utility they're providing it and reimplementing that.

17:17 * gfredericks just walked in and apparently has some backlog to read

17:17 Raynes: gfredericks: I wouldn't bother.

17:17 It isn't a very interesting argument.

17:17 ibdknox: gfredericks, it really isn't

17:17 callen: not at all.

17:18 gfredericks: aw, but it looks like conflict!

17:18 okay. I'll try to stay positive...

17:18 ibdknox: hahaha

17:18 aperiodic: it's not even really a flameway

17:18 * gfredericks goes back to work and tries to forget he saw anything

17:18 aperiodic: s/flameway/flamewar/

17:19 technomancy: Raynes: so the problem with spawn is really about getting a full listing of known genomes?

17:19 not about figuring out the content of any specific genome?

17:19 gfredericks: man why svn gotta be so slow.

17:20 amalloy: gfredericks: git-svn, commendations for everyone?

17:20 gfredericks: amalloy: I don't trust eclipse to know what's going on

17:20 amalloy: and I'm not sure git-svn is any faster for the checkout-update stuff

17:21 amalloy: "I don't trust eclipse to know what's going on" - popular sentiment

17:21 gfredericks: amalloy: I also don't trust eclipse to tell me when it can't figure something out :)

17:23 Raynes: technomancy: Yes, everything else works fine right now.

17:23 technomancy: gotcha. yeah, I had to reimplement that for lein help; it was kind of a pain

17:24 Raynes: It's just listing all of the genomes that is the problem because they can be spread out in a number of jars/not in jars, etc.

17:24 technomancy: can't you delegate that to the build tool though? does it need to be part of spawn itself?

17:24 Raynes: I'd like it to be in spawn itself, because it'd mean duplicating code in every build tool that uses it.

17:24 Plus, spawn can be a standalone tool without any build tool intervention.

17:25 Like marginalia and the like.

17:25 technomancy: oh, didn't realize that

17:25 does tools.namespace still have that annoying warn-on-reflection bug?

17:25 Raynes: I haven't seen them spew.

17:27 amalloy: technomancy: so it looks like lein supports some kind of :debug option in project.clj, but i don't immediately see what it does or what its value is supposed to be

17:27 technomancy: amalloy: stuarthalloway asked me to add it

17:28 he said the compiler may look for that system property at some point

17:28 amalloy: so you take it and set it as a system property or something?

17:29 technomancy: yup

17:29 amalloy: cake recently added a :debug flag (true/false), and i'm findnig that lein blows up if it sees that

17:29 which is reasonable, and i think i argued for cake using a less-global-sounding flag

17:29 technomancy: o_O

17:31 amalloy: but whatever value i give for :debug, lein swank fails with https://gist.github.com/1349493

17:31 and lein repl times out on connecting to the socket, presumably because creating the socket failed with a similar error

17:32 technomancy: oh bugger, it's looking for a string

17:32 thanks for the heads up

17:32 * TimMc goes over and pokes the shiny landmine

17:33 amalloy: technomancy: incorrect. even with a string i get the same error

17:33 TimMc: callen: I think they're selling a *pretty* web interface, as well as support.

17:33 amalloy: it's not the true in :debug true that fails; it's some other boolean

17:33 technomancy: amalloy: right, I mean the property-setting function is expecting a string, and get-jvm-args is forcing it to a boolean

17:33 ibdknox: TimMc, oh god... why?? why would you do that?

17:34 callen: TimMc: quite right.

17:34 ibdknox: ....

17:34 amalloy: k

17:34 ibdknox: hahahaha

17:34 callen: TimMc: I'm cherry picking the database access, API, indexing, essential non-necessity of an IRC client per se while maintaining compatibility with the multitude of IRC bots out there, etc.

17:34 technomancy: nice to catch that kind of thing before people actually start using it =)

17:34 callen: TimMc: I started with an IRC bouncer that had a database API, it is growing.

17:35 technomancy: isn't most of what you're paying for with a hosted service like that just someone to blame when it goes down?

17:35 callen: well, I'm starting with the bouncer.

17:35 and trying to keep it modular.

17:35 TimMc: technomancy: Yup.

17:35 callen: technomancy: you can accomplish the same thing for less money

17:35 technomancy: by making a re-deployable heroku application

17:35 TimMc: callen: Make sure to put in some drop-shadows, otherwise you are neglecting a core feature. :-P

17:35 callen: technomancy: let them blame heroku is if it breaks.

17:36 Raynes: callen: He works for Heroku. :p

17:36 callen: Raynes: why do you think I said that?

17:36 * technomancy wonders what he just set himself up for; oops =)

17:36 Raynes: I wasn't entirely sure you knew.

17:36 callen: TimMc: the web client would come last after the core functionality is there, but sure. Hypothetically my conceptualization of it would allow for your own ircd if you desired.

17:36 amalloy: technomancy: cool beans. in the mean time cake will use a different name so we can support this :debug thing

17:37 technomancy: amalloy: yeah, presumably you would want :debug to flip this property if it ever gets used.

17:43 Raynes: is defgenome actually necessary?

17:43 it looks like the kind of thing that should either be a defn or just a def map

17:43 Raynes: technomancy: Not at all.

17:43 callen: defuniverse

17:43 [:deities]

17:43 Raynes: technomancy: We added it because it cut back on a bit of code duplication. It's just a wrapper around the other stuff.

17:46 technomancy: can't it just be reduced to a defn that calls build-filesystem?

17:46 also, it's not really a filesystem. =\

17:46 ibdknox: technomancy, I wanted to start over, but we tried to build into what was already there

17:46 technomancy, we left most of the names

17:47 technomancy: understandable

17:47 Raynes: technomancy: Keep in mind that I didn't write this.

17:47 I just tried to make it usable.

17:49 technomancy: sure, it's not diplomatic to just rip everything out

17:50 amalloy: man, filesystem? i don't think i can ever use spawn, now

17:51 ibdknox: lol

17:56 aperiodic: technomancy: is there a reason why compilation happens before fetching deps when running `lein uberjar`?

17:59 technomancy: it'd be convenient if it were the other way around, since then i wouldn't have to run `lein deps` beforehand if there are changes in the dependencies that are needed to get the project to compile

18:26 technomancy: Raynes: so the main changes have been around using clostache instead of a custom templater?

18:28 aperiodic: for me it always does deps before AOT, can you give a simple repro case?

18:31 callen: anyone here use a triple-monitor setup with Linux? I have one and I'm trying to put something together that is a little nicer.

18:31 I ask here because the people here are smarter. :\

18:31 technomancy: xmonad?

18:31 callen: ooh, good call.

18:31 they're pretty dead though.

18:32 at least whenever I check in.

18:32 technomancy: no, I meant to ask if that is what you're using

18:32 aperiodic: technomancy: will do this evening

18:32 callen: technomancy: yes.

18:33 technomancy: the fact that I'm using xmonad isn't totally material to the GPU/driver related problems I'm having, but all the same. The nvidia driver on Ubuntu 11.10 appears to be totally boned for multi-monitor.

18:35 Raynes: technomancy: It was using stringtemplate before. I switched it over because I didn't want to clone and work on an hg repo to update the library to 1.3

18:36 jweiss: is it possible for pr to operate on an object to print something (in my case, i've stored the original form in the meta, which i want to print), without actually evaluating it? i'm thinking a delay object

18:39 bah, clojure.lang.Delay cannot be cast to clojure.lang.IObj

18:45 dmi3y: Hi, guys! I recently started learning Clojure. Can somebody help me to understand why my 'Hello World' program behaves weird?

18:45 brehaut: dmi3y: put your code up on a gist or similar

18:45 dmi3y: sure

18:46 http://pastebin.com/LBG36Ct6

18:46 The question is, why the printed string contains space characters after it got trimmed?

18:46 amalloy: whenever someone asks for help with hello world, the answer is "you didn't mean to use ((foo"

18:47 though it looks like not in this case

18:47 $javadoc String trim

18:47 lazybot: http://download.oracle.com/javase/6/docs/api/java/lang/String.html#trim()

18:48 amalloy: &(.trim "\t\nfoo\t\n")

18:48 lazybot: ⇒ "foo"

18:48 brehaut: dmi3y: just to be pedantic, it contains _white_space characters, but no space characters (it contains new lines and tabs)

18:49 amalloy: dmi3y: if it's printing \n, that's because the text contains the two-character sequence \ followed by n, not the single newline character

18:49 &(.trim "\\t\\nfoo\\t\\n")

18:49 lazybot: ⇒ "\\t\\nfoo\\t\\n"

18:49 amalloy: &(println (.trim "\\t\\nfoo\\t\\n"))

18:49 lazybot: ⇒ \t\nfoo\t\n nil

18:49 dmi3y: ah, ... I see now

18:50 not clear why it has doubled backslashes though

18:50 technomancy: callen: oh, gotcha. yeah I learned to stick with Intel graphics long ago

18:50 amalloy: dmi3y: that's not what's happening. it has a single backslash and an n

18:51 to write that in a string literal you would have to type two backslashes, because \n is an escape meaning "replace this with a newline character", but input string has actual backslashes and ns, so what would happen in string literals is not relevant

18:52 dmi3y: ok, that's clear

18:54 according to javadoc for String the trim() method should return a copy of the string, with leading and trailing whitespace omitted.

18:54 callen: technomancy: intel graphics works great if you only want one or two monitorsd.

18:54 technomancy: they don't have anything that supports three.

18:54 technomancy: callen: I actually use synergy for extra displays these days

18:55 callen: not...quite what I had in mind.

18:55 xmonad handles the problem of expanding my workspace

18:55 it's unified and quite nice

18:55 I just want to have three "views" into that.

19:01 naeu: anyone in here at the Sheraton Raleigh Hotel tonight?

19:01 callen: naeu: yes but I'm busy stashing the body.

19:02 naeu: I can catch you later for a drink if you want.

19:02 naeu: callen: do you plan on eating the body?

19:02 callen: naeu: only if I can find some worcestershire.

19:02 naeu: good luck with that

19:02 Raynes: A1. It's that important.

19:03 naeu: I might head out for some food in a bit

19:03 the #clojure_conj twitter stream seems earily quiet

19:03 callen: Raynes: hahahaha

19:04 Raynes: naeu: Give it a day or so.

19:04 alexbaranosky: naeu: I wish!

19:04 naeu: Raynes: naturally :-)

19:04 alexbaranosky: naeu: I'm leaving after work tomorrow night

19:04 naeu: perhaps it's a lull before the storm

19:04 but there must be a few stragglers about

19:04 alexbaranosky: flight's in around 8:33 roughly

19:05 naeu: alexbaranosky: nice - how many hours is your flight?

19:05 alexbaranosky: I saw Ambrose tweeting about looking for folks earlier today

19:05 maybe DM him on twitter?

19:05 flight is realy quick... like 1.5 hours or something

19:05 naeu: alexbaranosky: already one step ahead of you there :-)

19:05 alexbaranosky: from Boston

19:05 naeu: alexbaranosky: ah, you're lucky

19:05 i was 8 and a bit from London

19:05 alexbaranosky: flight back is longer

19:06 that'll do it

19:06 do you work in London?

19:06 naeu: Cambridge

19:06 alexbaranosky: company I work for is based out of London

19:06 naeu: (which isn't far from London)

19:06 oh nic

19:06 e

19:06 alexbaranosky: (Thanks I had no idea)

19:06 callen: Cambridge is sorta close to London

19:07 not exactly an enjoyable bus-ride

19:07 it's half-way to Bath anyway.

19:07 technomancy: http://achewood.com/index.php?date=08052004

19:08 naeu: ok, Aaron is hacking in the hotel bar

19:08 i'll go find him :-)

19:08 alexbaranosky: take it easy

19:08 naeu: catch you later

19:08 have a good flight everyone

19:09 callen: technomancy: apropos.

19:10 technomancy: callen: it's my super power

19:10 ability to find apropos comics

19:11 callen: ,apropos-comic London

19:11 hrm.

19:11 amalloy: technomancy: mine too, but there are so few comics about apropos. really it's just $ man apropos

19:11 callen: ~apropos-comic London

19:11 aw come on.

19:11 technomancy: callen: it's there ^ what more do you want?

19:11 callen: the bot needs this functionality.

19:11 technomancy: heh

19:11 callen: I'm serious.

19:11 I know how you could make it too.

19:12 amalloy: clojurebot: apropos-comic is <reply> technomancy, come quick! someone wants a comic!

19:12 i think clojurebot may have passed out

19:12 callen: that's cheating!

19:12 amalloy: ~ping

19:12 technomancy: outsourcing affects everyone these days

19:12 brehaut: amalloy: perhaps its currently aboard a flight to the conj and has lost wireless?

19:17 clojurebot: #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: apropos-comic in this context, compiling:(NO_SOURCE_PATH:0)>

19:17 tolstoy: Anybody here have experience with CongoMongo? Seems that (destroy! :collection {:key "value" …. }) doesn't delete. No docs. Not sure I understand the code.

19:28 Phew! User error! $gte is apparently more meaningful than gte$.

19:29 callen: clojurebot: that was slow.

19:29 clojurebot: were you GC'ing or what? yeesh.

19:54 jcrossley3: technomancy: we needed some immutant-specific files included in a new project. how should we have created them with lein without reinventing a wheel?

19:55 technomancy: jcrossley3: was just looking at that earlier today

19:55 https://github.com/ibdknox/lein-spawn is the best bet so far

19:56 jcrossley3: is there an example of its use somewhere? it's not clear how we would integrate with it.

19:57 i guess i should start with "what is spawn?" :)

19:57 * jcrossley3 reads

19:57 technomancy: yeah, zero docs and more macro magic than I would like right now unfortunately

20:00 wow, found a crazy bug.

20:00 apparently the reader will happily read spawn genomes with their crazy {{whatevs}} syntax

20:01 and it won't throw an exception until you try to print it (!)

20:02 ,(do (read-string "{{whatevs}}") nil)

20:02 Raynes: technomancy: Man, there isn't any macro magic. You don't even have to use that macro if you don't want it.

20:02 It's just there because it seemed like an easier way to write quick genomes.

20:02 brehaut: Raynes, technomancy: what is this project?

20:03 technomancy: Raynes: sure, but all the examples use it

20:03 Raynes: Well, why not?

20:03 technomancy: it just could be more obvious, that's all.

20:04 Raynes: It definitely needs documentation. And a lot of things. But that's why it hasn't seen a release yet. :p

20:04 technomancy: brehaut: spawn, for templated project output

20:04 Raynes: I'll have more time to work on it after the conj.

20:04 brehaut: ah right

20:05 Raynes: technomancy: Anyways, I'll iterate through the API and see what I can improve when I get a chance.

20:06 I'll consult with you when I do, because we can probably come up with better ideas together.

20:06 I'm off. Got packing and stuff to do.

20:06 technomancy: ok, sounds good

20:06 so why is it that the reader happily accepts "{foo}" ?

20:07 brehaut: ,(read-string "{:foo}")

20:07 wrong bot clearly

20:07 jcrossley3: Raynes: where's the source for spawn?

20:07 technomancy: brehaut: it explodes when you try to print it, but not when read

20:07 brehaut: technomancy: thats real curious

20:08 amalloy: &(= (read-string "{x}"))

20:08 lazybot: java.lang.RuntimeException: Map literal must contain an even number of forms

20:08 amalloy: technomancy: fixed in 1.3 i think

20:09 cuz lazybot had such an error in his config file, in a setting nobody ever used, and it went unnoticed until Raynes ported to 1.3

20:09 technomancy: ah, so it's not my fault then

20:09 whew

20:09 aperiodic: jcrossley3: looks like https://github.com/levand/spawn

20:10 jcrossley3: aperiodic: thx

20:10 amalloy: i reserve the right to discover you wrote the map-parsing code in 1.2, though, so don't relax just yet

20:11 technomancy: clojurebot: who is to blame?

20:15 amalloy: uhoh. i bet you've taught him a meaning for "who" now, technomancy

20:15 technomancy: amalloy: a while ago he had a feature where he would select a nick at random from the channel residents

20:42 brehaut: moogatronic: http://brehaut.net/blog/2011/l_systems

20:43 moogatronic: brehaut: awesome!

20:43 brehaut: moogatronic: if you have a url you want me to link to, i can update it

20:43 moogatronic: a url?

20:44 brehaut: i mentioned you in the first para or something; but i had no url to reference

20:44 (twitter, github etc)

20:44 moogatronic: ah

20:44 @damionjunk

20:44 i see you didn't use comp and partial in this version.

20:45 technomancy: brehaut: how about some syntax highlighting?

20:45 brehaut: technomancy: working on it

20:45 moogatronic: I spent a lot of time reading about those. pretty cool.

20:45 technomancy: brehaut: squeaky wheel, I know

20:45 brehaut: technomancy: heh :) i looked into some of the suggestions you made; the js one looks good, but currently breaks all my archives.

20:48 moogatronic: I appreciate seeing your turtle. I was about to msg you to ask what you'd suggest, regarding state / etc.

20:49 brehaut: my turtle is pretty poor; im not super sharp on java2d

20:49 but it should provide a starting point

22:02 eyeris: The clojure-mode README says I can install from the marmalade package repository and provides some emacs lisp to evaluate in order to do so

22:02 I have elpa installed but when I evaluate the clojure-mode installation code I get the error Symbol's value as variable is void: package-archives

22:08 Nevermind -- I have emacs 23. I just pulled package.el from emacs 24 and now it works

22:11 callen: eyeris: o rerry?

22:12 eyeris: that would be the first time I've heard of package.el fixing something rather than breaking.

22:13 eyeris: Well it satisfied that clojure-mode install code

22:14 However the clojure-jack-in command is still not available, despite being in clojure mode

22:14 callen: eyeris: sounds like an old clojure-mode.

22:14 eyeris: get an up-to-date one.

22:15 eyeris: Yeah, for some reason the last time I started emacs it didn't recompile the newly installed clojure-mode

22:16 I think that's probably because I had the traditional slime package installed too

22:16 callen: hrm.

22:22 qizwiz: trying to play with some of the web frameworks in clojure. my first exposure to both clj/lein.

22:22 callen: qizwiz: use Noir.

22:22 tensorpudding: qizwiz, which ones?

22:22 qizwiz: noir

22:22 callen: tensorpudding: it doesn't matter, he should use Noir.

22:22 See?

22:23 tensorpudding: noir is pretty good

22:23 qizwiz: but I'm having a problem getting past the lein plugin install...bit

22:23 tensorpudding: plugin?

22:23 qizwiz: per the "Getting Started" in the page

22:24 lein plugin install lein-noir 1.2.1

22:24 tensorpudding: oh

22:24 i didn't do that

22:24 what does lein-noir do?

22:24 qizwiz: getting this error: Exception in thread "main" java.io.FileNotFoundException: /Users/jhill/.lein/plugins/lein-noir-1.2.1.jar (No such file or directory)

22:25 which seems like its something obvious, but given these are the first few minutes I've ever looked at any of it, has me a bit stumped

22:25 tensorpudding: well, it isn't fetching it first, which is what you probably need

22:25 did you run lein deps?

22:25 qizwiz: no sir. I just installed using homebrew on my mac

22:26 tensorpudding: oh

22:26 what version of lein is that?

22:26 qizwiz: 1.6.0

22:27 here's the complete line: Leiningen 1.6.0 on Java 1.6.0_26 Java HotSpot(TM) 64-Bit Server VM

22:27 lein deps says "couldn't find project.clj..."

22:27 so clearly I have some more reading to do :-)

22:28 brehaut: qizwiz: just to check, you are running the lein deps command in a directly that has a project.clj with read perms right?

22:29 duck1123: qizwiz: you might need to do lein new <projectname>

22:30 qizwiz: ok, just did that

22:30 duck1123: now cd into that project and do everything from there

22:30 you'll want to edit that project.clj file to specify your deps

22:31 tensorpudding: oh

22:31 you need to generate a new project to run lein deps

22:31 sorry

22:31 i'm somewhat new to this

22:31 lein plugin install is supposed to fetch from somewhere

22:31 maybe somehow there was a bug that made it think that it had fetched when it hadn't?

22:31 oh lag

22:32 duck1123: plugin install puts it in a special directory outside of any project, for everything else, you want to have a project to work out of

22:32 tensorpudding: yes, lein plugin doesn't require you to have done anything

22:32 which means that your behavior is a bug

22:33 i haven't used lein-noir but you don't need it to use noir in your project

22:33 all you need to do is create the project with lein new, then edit the project.clj to include noir as a dep

22:33 then run lein deps, and it'll fetch noir for you and put it in your project

22:33 qizwiz`: I'm not afraid to go spelunking through the code. what exactly is lein? where can I look at its innards?

22:34 tensorpudding: https://github.com/technomancy/leiningen

22:34 i had some issues with using lein from packages too

22:34 qizwiz`: well, yeah...but its on my machine now, so...

22:34 tensorpudding: people here told me to just copy the lein script and run it

22:35 uh

22:35 i guess it could be stored somewhere by homebrew?

22:35 the script itself is surely on your path somewhere

22:35 qizwiz`: well, lein in /usr/local/bin is just a shell script

22:36 duck1123: I'd trust homebrew over apt, but still it's easy enough to wget and chmod

22:36 tensorpudding: but it's just a shell script that calls java with the right arguments on ~/.lein/self-installs/

22:36 where there's a standalone .jar file

22:36 qizwiz`: would it have mattered that I actually installed lein BEFORE I installed clojure?

22:36 tensorpudding: installing clojure is not really necessary

22:37 qizwiz`: really?

22:37 tensorpudding: when you run lein deps it installs a new .jar of clojure for you

22:37 and it allows you to keep disparate versions

22:37 brehaut: qizwiz`: installing lein _is_ installing clojure; it manages its dependancy on the compiler service itself

22:37 duck1123: lein deps == installing clojure

22:37 tensorpudding: the "system" clojure is totally ignored when you use lein

22:37 qizwiz`: interesting. so it's just using java behind the scenes?

22:38 tensorpudding: clojure is written in java

22:38 it's just a big .jar

22:38 and clojure libraries are just .jars

22:38 qizwiz`: right

22:38 tensorpudding: and if you want you can use lein to create an uberjar, which containes clojure and all the libraries and your program, and give it to anyone with /usr/bin/java and they can run it

22:39 one of the upsides of write-once-run-anywhere

22:39 brehaut: qizwiz`: leiningen manages your classpath for you; the classpath is where the jvm goes looking for code. in particular, the classpath for a given lein project only inclludes things in the project.clj's dependancies (and dev dependancies)

22:40 tensorpudding: lein allows you to be blissfully unaware of java

22:40 on the package front, that is

22:40 qizwiz: the hair and the fire bit :-)

22:41 duck1123: what's this... java that you speak of?

22:41 tensorpudding: good luck getting by without ever directly using java classes

22:41 brehaut: duck1123: its the dark brown liquid used as fuel for converting specs in to clojure code

22:42 tensorpudding: lein is actually an uberjar apparently

22:42 duck1123: bah! I don't think I've ever naturally called it that. that's coffee

22:42 qizwiz: just on a whim, I did "lein install noir 1.2.1" and it started downloading a bunch of stuff

22:42 tensorpudding: java is an island

22:42 it's in indonesia

22:42 brehaut: duck1123: well its coffee of a particular origin; im partial to el salvador myself

22:43 duck1123: My coffee comes from Kroger. (or occasionally Meijer)

22:44 tensorpudding: i'm sure that they get their beans on the same markets that everyone else does

22:44 qizwiz, aren't you lucky that lein handles deps for you

22:45 moogatronic: i've been making espresso lately with Indian Mysore beans. =)

22:45 qizwiz: well, that was cool and all, but I still don't know where to begin. (apologies for my absolute n00bishness)

22:45 brehaut: moogatronic: thats quite an uncommon origin

22:45 amalloy: qizwiz: fwiw, lein install noir isn't going to do anything interesting. it just "pre-fetches" the same stuff lein deps would have

22:46 qizwiz: where does it put it?

22:46 moogatronic: brehaut: I was roasting for a while, but in my town now, we have about 5 roasters, one of them a clear notch above the rest. He always has great varietals.

22:46 amalloy: ~/.m2

22:46 moogatronic: I usually just ask him for what's new.

22:46 duck1123: qizwiz: using emacs? try lein swank, else lein repl

22:47 qizwiz: of course I'm using emacs :-)

22:47 amalloy: i think getting swank configured can wait until he's figured out how to fetch dependencies :P

22:47 brehaut: moogatronic: i think theres about three main roasters in my town; i live about 100m from the best, and they have a great range of Cup of Excellence single origin roasts :)

22:48 moogatronic: having access to good coffee is an essential aspect of living!

22:48 duck1123: amalloy: I thought he had the dependencies and was looking for the next step

22:49 tensorpudding: well, once you have your deps installed, you can start writing code, and then building it

22:49 but it might be more instructive learning clojure by starting a repl and playing around

22:49 repl being short for read-eval-print-loop

22:49 what people like calling interpreters nowadays, though clojure isn't interpreted

22:49 lein repl gives you one

22:49 qizwiz, then you want swank-clojure

22:49 qizwiz: I'm here now: https://github.com/technomancy/swank-clojure#readme

22:50 tensorpudding: yes, you just install the plugin, then run M-x clojure-jack-in from inside a clojure-mode buffer

22:50 qizwiz: bah! same error with "...plugin install"

22:51 tensorpudding: that's weird

22:51 but lein deps works fine?

22:51 qizwiz: Copying 1 file to /Users/jhill/tmp/myproject/lib

22:52 that's all it says

22:52 tensorpudding: yes, that means it's working

22:52 but plugin not working is weird

22:52 duck1123: remove the homebrew version, and installit as per the readme

22:53 amalloy: (inc duck1123)

22:53 qizwiz: yeah, that was my thinking

22:54 tensorpudding: really a shame though

22:57 amalloy: the shame is that...to use a program you should install it the way it asks to be installed, instead of by a recipe cooked up by some crazy guy on the internet?

22:58 callen: I've never understood why people would use homebrew for things that are updated frequently.

22:58 * callen mutters something about mac users inventing another package manager

22:58 tensorpudding: package maintainers aren't crazy guys on the internet

22:59 maybe you've only used the janky ones that osx has

22:59 brehaut: evidence points to the contrary

22:59 callen: tensorpudding: are you aware of how homebrew works?

22:59 tensorpudding: no

22:59 not particularly

23:00 callen: tensorpudding: if you send a pull request for a new package, they'll accept it, no questions asked.

23:00 qizwiz: do I need to blow away my .lein and .m2 directories?

23:00 tensorpudding: that's crazy

23:00 callen: tensorpudding: so the lein package is likely literally, "some crazy guy on the internet"

23:00 amalloy: can't hurt, qizwiz

23:00 callen: tensorpudding: well it's called HOMEBREW

23:00 tensorpudding: sorry

23:00 package maintainers aren't *all* crazy guys on the internet, just the ones for mac

23:00 callen: tensorpudding: there we go.

23:00 duck1123: qizwiz: probably not needed, but it's not like you've customized it. kill it and start anw

23:00 qizwiz: yep, that was the issue

23:01 tensorpudding: with respect to the persistance of macports and homebrew, it's just not very good

23:01 callen: tensorpudding: persistence*

23:01 amalloy: doesn't homebrew make /usr/local/bin writable w/o privs? gives me the willies

23:02 tensorpudding: how is that possible?

23:02 unless osx itself lets just anyone with admin rights write to /usr/local/bin

23:02 brehaut: every package management system that does system wide installs freaks me out

23:02 amalloy: sudo chmod

23:02 tensorpudding: my god

23:02 are you serious

23:02 why hasn't this thing been targetted with malware yet

23:02 amalloy: or actually i think sudo chown

23:02 which is slightly less crazy

23:03 callen: amalloy: Mac users aren't usually aware of unix conventions.

23:03 duck1123: amalloy: Are you sure about that, I thought it put it somewhere user-local

23:03 qizwiz: and now lein plugin install "just works" :-)

23:03 callen: duck1123: it can do either way, but the /usr/local/bin install will do what they described.

23:04 duck1123: of course, it didn't work for me and I had to install it with sudo

23:04 callen: the /usr/local/bin is the default last I checked.

23:04 qizwiz: without even being in a directory with project.clj

23:04 amalloy: duck1123: https://gist.github.com/323731 line 112ish

23:05 chgrps it to admin (so anyone who *could* sudo is in the group), and gives it g+rwx

23:05 tensorpudding: it'd be saner if they had some curated free database, with a fancy gui selector which builds and installs for your system, or something

23:07 duck1123: The only development I do on my mac is in my ubuntu vm or over ssh

23:07 tensorpudding: running a vm just to do dev, i tried that

23:07 for like a month on my windows laptop

23:08 very frustrating

23:08 brehaut: Some people, when confronted with a problem, think "I know, I'll use a global package manager." Now they have at least two problems

23:08 tensorpudding: more frustrating than getting windows as a usable dev platform

23:08 global package managers are imperfect

23:08 but it's better than installing everything by hand, from source

23:09 qizwiz: alright, alright. I get it. I shouldn't have trusted homebrew

23:09 brehaut: its system wide installation that is the antipattern, not source or binary distribution

23:10 qizwiz: holy crap, that's really cool. finally got noir up and running

23:10 brehaut: qizwiz: congrats :D

23:10 tensorpudding: i think ideally you'd have the ability to choose

23:10 qizwiz: is it difficult to hook it up to say mysql?

23:10 tensorpudding: qizwiz, check out korma

23:11 it's by the same guy

23:11 isn't it?

23:11 amalloy: brehaut: a global package manager isn't bad for end-user programs; it's mostly just dreadful for development tools

23:11 brehaut: qizwiz: its not. you have three main options. clojure.java.jdbc, korma (which is built on top) and clojureql

23:11 duck1123: I just started porting my application that uses clj-record over to korma today

23:12 I think I'm going to like it, but I'm not very far yet

23:12 amalloy: eg, i'm quite happy to have apt managing the stuff i don't want to care about, like my window manager

23:12 brehaut: qizwiz: korma is promising but new, its got some pretty major omissions atm and some cracker bugs

23:12 qizwiz: I have this project that's literally thousands of tiny microsites done in php that I wanted to refactor and since I have a bit of freedom to play with different technologies, I thought I"d try something in clojure

23:12 callen: cracker...bugs?

23:12 amalloy: brehaut: $tr nz en cracker?

23:12 brehaut: serious

23:12 callen: brehaut: I second that tr.

23:13 tensorpudding: what exactly do you mean by cracker bugs

23:13 brehaut: i dont want to scare anyone off korma because i think it has a lot of potential, but it is very young

23:13 tensorpudding: as in, it's vulnerable to some kind of exploit?

23:13 amalloy: tensorpudding: given the huge latency you seem to have tonight, you might want to just wait for someone else to ask the questions you come up with

23:13 brehaut: no i mean that the straight forward operation according to the documentation contains show stopper bugs that will impede your development process.

23:14 callen: it will not impede

23:14 it will centipede.

23:14 tensorpudding: the documentation being the tutorial?

23:14 qizwiz: hrmm...doesn't compojure promise to be rails-ish in it's ability to server database-backed sites?

23:14 brehaut: the documentation being the page labled 'docs' on the site

23:15 https://github.com/ibdknox/Korma/issues?sort=created&direction=desc&state=open

23:15 tensorpudding: which covers a small portion of the actual stuff

23:15 brehaut: qizwiz: compojure is analogous to sinatra, not rails

23:16 tensorpudding: i tried using compojure, it was a bit more complex than noir

23:16 brehaut: qizwiz: perhaps you want to read http://brehaut.net/blog/2011/ring_introduction; it doesn't cover noir but you'll get a good understanding of noir from webnoir.org

23:16 callen: Compojure tried too hard to lispify everything

23:16 duck1123: The problem with clojure web development is it's built up of so many tiny little projects that it's impossible to cite any sing one as what makes clojure web dev awesome

23:16 callen: the S-EXP => HTML templating system made my eyeballs explode

23:16 brehaut: (if you can excuse me blowing my own trumpet)

23:16 callen: duck1123: Noir?

23:16 tensorpudding: compoure has templating?

23:17 callen: tensorpudding: go look again. You'll see.

23:17 brehaut: tensorpudding: your comment about compojure vs noir is absurd; noir is built on compojure. its at a different level of abstraction, not complexity

23:17 callen: duck1123: web dev isn't necessarily supposed to be a strength for Clojure. It's capable of being great at it, but I don't think the community is trying to cater to people who can't spin their own solution.

23:17 tensorpudding: brehaut, that sounds better

23:18 it was cruder

23:18 callen: duck1123: impressively facile libraries are for Ruby coders.

23:18 brehaut: callen: compojure seperated out its templating over a year ago; that is now hiccup and its not tied to compojure

23:18 callen: brehaut: I'm old, so sue me.

23:18 duck1123: I don't use noir because I have my own framework that acomplishes the same function for me

23:19 callen: brehaut: my initial exposure to it was enough to scare me off.

23:19 brehaut: callen: medicine used to be drilling holes in peoples heads; i hear thats gotten better too.

23:19 qizwiz: incidentally, I just realized the irony of criticizing a package manager while being very greatly helped (thank you) to install another

23:20 callen: brehaut: after that trepanation, I'm staying at home.

23:20 brehaut: good to know though.

23:21 cgray: are rationals planned for clojurescript at any point?

23:21 tensorpudding: what is clojure's strength?

23:22 duck1123: concurrency was the original goal

23:22 tensorpudding: i was watching a video about that, to try and figure out how it works in clojure

23:23 but i really don't like videos for learning, and i discovered too late that the video was kinda old

23:23 callen: tensorpudding: sophisticated backend data processing and machine learning is a common theme, but of course people use it for all sorts of things.

23:23 tensorpudding: the aforementioned is the primary business-case I see IRL

23:24 amalloy: duck1123: i would have guessed "minimization and management of state". concurrency falls naturally out of this, but you also get great benefits in single-threaded code

23:24 callen: tensorpudding: cascalog would be a good canonical example.

23:24 either way, it's not trying to compete with PHP/Python/Ruby at being a facile way to make yet another CMS>

23:24 I think that much should be obvious.

23:25 duck1123: callen: those will come in time

23:25 tensorpudding: why do you say facile?

23:25 callen: tensorpudding: cucumber.

23:25 tensorpudding: what do you consider a non-facile way to make a web application?

23:25 callen: I think the whole question is boring.

23:26 your question is malformed anyway.

23:26 so the answer to your question is 'mu'

23:26 cucumber was a serious answer to your question.

23:26 duck1123: you think the web is boring?

23:26 qizwiz: feh. I'm still at the office and want to go home, but I don't want to lose the thread. I've never though of persisting an irc session, but it seems I want to now

23:26 tensorpudding: cucumber is what?

23:27 duck1123: cucumber is a BDD framework for writing "test" in english

23:27 I use cucumber to test my site

23:27 callen: duck1123: let him use Google next time.

23:27 tensorpudding: wait, that ruby framework cucumber?

23:27 callen: it's not English.

23:27 qizwiz: tensorpudding: yeah, that ruby framework cucumber

23:27 callen: duck1123: I've done web dev long enough that it's pretty boring/easy. Only scaling is all that interesting and that's a different problem/question.

23:29 duck1123: porting bad libraries to Clojure from Ruby is the devil's work. Don't.

23:30 duck1123: I didn't port it, it was already done. I just used what was there as an easy way to do full integration tests

23:30 callen: clearly I need to finish building that flamethrower then.

23:31 and find the servers holding that repo.

23:31 amalloy: qizwiz: get a bouncer

23:31 callen: qizwiz: I'm writing an IRC bouncer. I have a better idea: remote server + GNU Screen + irssi

23:31 amalloy: or, just leave now while the conversation isn't about anything useful

23:31 callen: qizwiz: failing that, what amalloy said.

23:31 qizwiz: :-)

23:32 I'm sure erc has some way to interact with a bouncer. searching furiously now

23:34 amalloy: qizwiz: you don't need to "interact with" a bouncer. you just connect to it like any other irc server

23:35 the design is that you start your bouncer as a persistent irc client on some other server, and then you connect to it as a server; it does the forwarding and message-saving

23:36 jlf: hmm, it'd be nice to populate the backlog upon connection to the bouncer though

23:36 callen: jlf: my bouncer will do that.

23:36 jlf: if you want it to.

23:36 jlf: o rly?

23:36 callen: jlf: yessir.

23:36 jlf: link?

23:37 callen: jlf: in progress ;_;

23:37 jlf: :)

23:37 callen: jlf: writing it in Clojure, have logging and connectivity working

23:37 jlf: working on database backend, indexing/searching, and client-side right now.

23:37 jlf: nice

23:37 callen: jlf: started last week, haven't had a lot of time to work on it.

23:39 jlf: I'm actually having trouble with the client-side because I'm not familiar with what is traditional for IRC Bouncer <=> Client interaction.

23:39 * jlf either

23:39 callen: what would seem simple to me, might not seem simple to others.

23:39 but it is functionality I want

23:40 duck1123: Is there anything I can do (aside from liberal use of printlns) to trace what namespaces are loaded and when?

23:40 callen: I don't think namespaces are a good subject here.

23:40 jlf: callen: does erc expose an interface for "put this in your backlog"?

23:41 callen: jlf: I don't know anything about that, but it doesn't matter, the bouncer acts as an intercept between the server and the client

23:41 jlf: I can fake it and add timestamps or whatever else and "replay" the backlog into the client.

23:41 jlf: and let the user set how much backlog they want.

23:41 duck1123: On one of my machines, requiring one of my nses doesn't complete, and I'm trying to find out why

23:41 jlf: oh, the timestamps are specified by the server?

23:41 callen: jlf: I'll have an "admin" console for business use too.

23:41 jlf: no, I record local time for the bouncer.

23:41 jlf: again, optional, but it's there for a reason.

23:41 jlf: technically, I actually record epoch, it just outputs local.

23:42 jlf: yeah i meant server from erc's perspective -- iow, do the timestamps come from the bouncer or does erc apply them?

23:42 callen: jlf: No damn clue, but my understanding of what server output looks like leads me to believe "erc"

23:43 jlf: if you want a "historical" view of the full logs, you would hypothetically use the bouncer's database API I provide

23:43 jlf: the backlog is just that, it's not supposed to be a canonical representation.

23:43 jlf: some people actually hate inline timestamps that double on top of the client's timestamp.

23:43 jlf: that's why I'm making bouncer provided timestamps optional.

23:43 hiredman: duck1123: there is a :verbose flag (might not be hwat it is actually called) you can pass to :use and :require

23:44 qizwiz: znc appears to work well enough

23:44 I'll be back shortly

23:44 hiredman: it is :verbose

23:44 callen: my bouncer is really just one piece of a whole toolchain.

23:44 I'm not trying to replace ZNC

23:44 hiredman: (require '[foo :as bar :verbose])

23:44 callen: I'm trying to replace Hipchat.

23:44 duck1123: hiredman: do you know if it's recursive?

23:44 jlf: callen: *nod* will your bouncer be able to be deployed on heroku as a free app?

23:45 callen: jlf: yeah, I'm sure technomancy could help me to that end.

23:45 hiredman: duck1123: yes

23:45 it sets a binding

23:45 callen: jlf: the end-game for this is something a lot better than just a bouncer though. :)

23:45 jlf: that'd be sweet for those of us with flaky dsl

23:45 qizwiz: well, I just did this: http://www.emacswiki.org/emacs/ErcZNC

23:45 hiredman: *loading-verbosely*

23:45 callen: jlf: once I have something useable, I might be tapping you for feedback :P

23:46 in the meantime, I'm off to worship the Iron God

Logging service provided by n01se.net