#clojure log - May 19 2010

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

0:12 slyrus: evening folks

0:18 * slyrus boggles again as mvn downloads a whole bunch of stuff he doesn't understand

0:19 lancepantz: hi slyrus

0:20 better than downloading them manually :)

0:20 slyrus: not downloading so many things i didn't ask for would be my preference :)

0:34 johnmn3: ,(read-string "(hi) (hi) (def hi (hello?))")

0:34 clojurebot: (hi)

0:35 johnmn3: how would you go about making a function that instead returns all the objects?

0:36 seems like you'd have to implement some reader logic

0:39 unless read-string returned an index of the last OEF

0:54 defn: testing

0:54 johnmn3: you could just parse the string for sexps, extract them as strings and read-string them

0:55 johnmn3: found an easier way: (clojure.inspector/inspect-tree (read-string (str "(" (slurp "some.core.clj") ")")))

0:55 That way it takes it in as one big "object"

1:22 durka42: has anyone tried to use penumbra and cantor together?

2:11 slyrus: d'oh! looks like slime HEAD and swank-clojure still don't play nice with each other.

2:19 well, at least the Oct 31 swank still works... still, it would be nice if someone were to bring swank-clojure into 2010.

2:33 G0SUB: vIkSiT

2:33 vIkSiT: G0SUB

2:34 G0SUB: vIkSiT, how are you doing?

2:34 vIkSiT: not bad at all, thanks! how've you been? ltns

2:34 G0SUB: yeah, don't hang around on IRC that much these days.

2:34 vIkSiT, can I PM?

2:35 vIkSiT: sure

3:41 LauJensen: Morning all

3:47 spariev: morning

3:49 esj: Morning All

3:50 spariev: LauJensen: any updates on clojureql 2.0 status ?

3:55 LauJensen: spariev: Yes, we are transitioning to target Clojure 1.2 and that will hopefully enable to faster finish the new frontend. Some attempts were made yesterday to leverage protocols, but it didn't work out. Once thats finished we'll modify the backend to work with the new frontend and hopefully we'll be all set

4:01 spariev: LauJensen: cool, thanks for the insights. I want to replace some of sql-s in my code with clojureql, but it can wait for the new shiny version :)

4:02 LauJensen: I definitely recommend waiting :) 1.0 will be rock solid, which is why we're taking our time with the details

4:19 AWizzArd: ~seen hoeck

4:19 clojurebot: hoeck was last seen quiting IRC, 95 minutes ago

4:31 AWizzArd: ,*clojure-version*

4:31 clojurebot: {:interim true, :major 1, :minor 2, :incremental 0, :qualifier "master"}

4:38 defn: congrats to Raynes && Licenser on getting on HN for try-clojure.org

5:17 mmarczyk: LauJensen: morning

5:17 LauJensen: you've got some missing imgs on pages 14 & 15 :-)

5:17 LauJensen: Good Morning :)

5:18 mmarczyk: Not so much missing, as just they never earned an avatar

5:18 They were my very firsts posts, before I found that plugin

5:18 mmarczyk: dispite this *glaring omission* on your part, if at some point I decide to start blogging, I'll be stealing loads of code+ideas from you :-)

5:18 despite, ouch

5:19 LauJensen: hehe, start blogging? Ive been blogging since september I think

5:20 But Im telling you guys, its the best living w/o a database. Everything can be poked and prodded from the command-line :]

5:20 mmarczyk: doin' well so far :-)

5:20 and moving on to advanced thermal processing techniques already

5:20 impressive

5:20 "its the best living w/o a database" <- says the ClojureQL guy

5:20 does this affect the credibility of the project, I wonder

5:21 LauJensen: Databases really have their place in the world, no doubt about it - But I question wether blogs are a correct place to use them

5:22 mmarczyk: that sounds altogether reasonable to me :-)

5:23 btw, I was meaning to ask

5:23 you guys still use Clojuresque, right?

5:23 LauJensen: Yes sir

5:23 mmarczyk: um

5:23 any chance of you converting to more civilised ways? :-P

5:24 LauJensen: mmarczyk: For the 1.0 release we are weighing all options, so whatever we decide to realease on will be optimal

5:26 mmarczyk: net fail, got my last line?

5:26 mmarczyk: yup, thanks

5:27 it's just that that would be my one and only reason to touch Groovy

5:27 I'd rather avoid that...

5:28 LauJensen: I understand, though I wouldn't fear learning new things, just question wether or not the pay-off is big enough

5:29 mmarczyk: ...and since it's supposed to be a most-definitely-Clojure-only lib, of potentially large significance to any Clojurian likely to do any db work, I submit to you that it makes sense for it to use something like ant/mvn (JVM-wide standard) or lein (super-Clojure-friendly), whereas pulling in another JVM language -- not quite so much

5:30 LauJensen: I see what you're saying

5:30 mmarczyk: plus I don't mind learning new things at all, so I'll gladly get around to Groovy once I'm done with my Erlang, Scala, Haskell (some type classes I can't say I grok yet), Common Lisp (PAIP) etc. ideas ;-)

5:31 but that's the personal part, the previous sentence was what I consider to be a reasonable argument

5:31 LauJensen: I'll throw it into the mix when we have our next build talk, which should be later today

5:31 mmarczyk: cool, thanks :-)

8:29 chouser: what's the right mime type for clojure code?

8:29 text/x-clojure? application/x-clojure?

8:38 neotyk: chouser: isn't it IANA that needs to approve registration, to have definitive answer ?

8:46 chouser: you can use an x-clojure subtype. the x- is for unregistered types.

8:47 I guess I'm mainly asking about text/ vs application/

8:49 zakwilson: chouser: running file -i on source files in several languages I have lying around suggests that text is preferable for source code.

8:51 wthidden: I have an issue with using await within an agent action. I get a Can't await in agent action.

8:51 Why is this not possible?

8:52 AWizzArd: wthidden: why can't you do that?

8:52 What good would await be if it were only for agents that currently have no jobs in their queue?

8:53 wthidden: hmm I think I'm confused then.

8:53 AWizzArd: await will stop your current thread until the agent finished its work

8:54 wthidden: Yes that is what I want

8:54 AWizzArd: Then await is your friend (:

8:54 wthidden: but its not being very friendly to me right now.

8:55 AWizzArd: Please specify it further.

8:55 wthidden: so I have fn1 that create 2 or 3 agents that run fn2.

8:55 then I await for the agents to complete.

8:55 when I hit the await i get the Can't await in agent action.

8:55 AWizzArd: chouser: it should be application/clojure imo

8:56 wthidden: Note also that fn1 is also an agent action.

8:57 chouser: await is not allowed in agents actions because if it were there would be a very real possibility for deadlock

8:58 AWizzArd: wthidden: inside an agent action you try to await which... what chouser said

8:58 wthidden: could you maybe run fn2 in a future?

8:58 chouser: wthidden: perhaps 'future' would fit better than agents?

8:58 AWizzArd: derefing futures will block your code too

8:58 chouser: just like 'await' does

8:59 wthidden: will all my futures run in parallel?

8:59 chouser: wthidden: yes

8:59 wthidden: so if i did:

8:59 (map #(future %) list-of-fns)

9:00 AWizzArd: ,(time (let [a (future (do (Thread/sleep 1000) 1)), b (future (do (Thread/sleep 1000) 2))] [@a @b]))

9:00 clojurebot: [1 2]

9:00 "Elapsed time: 1002.653 msecs"

9:00 wthidden: that would kick off as many threads as there are items in list-of-fns?

9:01 chouser: wthidden: well, map is lazy and 'future' takes a block of code not a fn. But other than that, yes. :-)

9:01 (doall (map future-call list-of-no-arg-fns)) would run them all in parallel

9:01 though for something like that you might consider pmap

9:02 AWizzArd: or (doseq [job jobs] (future-call job))

9:02 wthidden: right..

9:02 chouser: AWizzArd: why "application" instead of "text"? It is human readable text, after all, with an encoding and everything.

9:02 wthidden: ok... let me try that then...

9:03 hmm then where would I be blocking?

9:03 chouser: when you deref those futures.

9:05 ,(time (vec (map deref (doall (map future-call (repeat 5 #(do (Thread/sleep 1000) (rand-int 100))))))))

9:05 clojurebot: [93 20 45 29 97]

9:05 "Elapsed time: 1003.494 msecs"

9:06 wthidden: chouser: I see... thanks

9:06 wooby: chouser, i'd go with text, if you're interested in browsers displaying it

9:07 chouser: wooby: hm, good point.

9:07 wooby: with something like text/clojure people could get their browser to open it in emacs or whatever, if desired

9:08 zakwilson: AWizzArd: that doesn't seem to hold true when the number of futures exceeds the size of the thread pool.

9:08 At a trivial example: (pmap #(do (Thread/sleep 1000) %) (take 100 (iterate inc 1)))

9:08 chouser: futures use the 'send-off' pool which isn't bounded.

9:08 pmap uses the bounded 'send' pool

9:09 zakwilson: I thought pmap worked by creating futures

9:10 chouser: zakwilson: hm... you're right. but pmap imposes its own limit, only doing availableProcessors+2 items at a time

9:11 AWizzArd: chouser: it also is application/json

9:11 zakwilson: right

9:11 and I think futures now use the same pool that agents use

9:12 or, the send-off pool that is

9:12 Anyway, we have some cores already, and the high hundreds are coming.

9:13 In the 2030ies one cpu will hold billions of cores. So, nothing we need to be careful with :)

9:13 Hodapp: I'd prefer something more like GPUs because I've found that contains more power that actually can be leveraged.

9:14 AWizzArd: though they are not really general enough today

9:14 zakwilson: I'm really wishing for more cores now. I'm running code that's very CPU-intensive and fully parallel.

9:14 AWizzArd: cpu and gpu will melt

9:14 zakwilson: a quad-slot board + 4x AMD Magny Cours ==> 48 cores.

9:15 Hodapp: zakwilson: There are multiple types of parallel.

9:15 zakwilson: And costs several thousand dollars more than I have lying around.

9:15 But yes, such a machine would be perfect for what I'm doing.

9:15 AWizzArd: zakwilson: sure, but soon they will become mainstream

9:15 Hodapp: "soon they will become mainstream"... where have I heard that before?

9:16 AWizzArd: Hodapp: ok ok, at least since 1900 it was true that the number of calculations that you can do gets multiplied by 1000 within 10 years.

9:16 for 1000$ I forgot

9:16 zakwilson: I think he's right on that. What we see in x86 server chips at any given time is usually in mid-priced desktop chips a couple years later.

9:17 s/he/AWizzArd

9:17 AWizzArd: A 15 million dollar supercomputer from 1990 could do a few gigaflops

9:17 today a common amd/intel cpu can do 2-5 times more, and will cost 100-1000

9:18 the factor of 1000 per decade is very conservative (Ray Kurzweil). See also http://en.wikipedia.org/wiki/Flops#Hardware_costs

9:18 sexpbot: "FLOPS - Wikipedia, the free encyclopedia"

9:21 AWizzArd: Hodapp: also check this video, i think between minute 20 and 35 or so. It is from Standford University. With molecular nanotechnology we can get a cpu with the size of the grain of sugar, for just a few cents, which has about the computational power of all computers that exist right now. http://www.youtube.com/watch?v=omsuTsOmvsc&fmt=22

9:21 sexpbot: "YouTube - Self-Improving Artificial Intelligence"

9:21 vu3rdd: AWizzArd: heard of Tilera?

9:22 Hodapp: AWizzArd: Claims such as that almost always have to be taken with a grain of salt.

9:22 AWizzArd: Every year, some new exciting technology is demonstrated that will supposedly revolutionize everything.

9:22 AWizzArd: vu3rdd: no

9:23 Hodapp: vu3rdd: That's the CPU name I was trying to remember...

9:23 vu3rdd: http://www.tilera.com/

9:23 sexpbot: "Tilera Corporation"

9:23 Hodapp: kept thinking "Tileron" or something

9:23 vu3rdd: have a look. I think this is definitely the future.

9:23 It is a mesh-like architecture, instead of the traditional intel like approach which is doomed to fail

9:23 AWizzArd: Hodapp: sure, but this is university stuff, and as said in the video it is already well understood, no exoctic parts missing. And then we can look back at 110 years of history which provide awesome evidence, plus see the plans of todays companies.

9:24 vu3rdd: okay thanks, I will have a look at this

9:24 vu3rdd: and this is real. There are products working with this processors right now

9:24 Hodapp: AWizzArd: What you're saying fails to distinguish this from anything else.

9:24 AWizzArd: Hodapp: not really, because we don't have such a successful track record for anything else.

9:25 Hodapp: AWizzArd: Yeah, we do. I've read the articles.

9:25 zakwilson: What ISA are the Tilera chips?

9:25 vu3rdd: propreitary

9:25 But they have gcc/linux-SMP working

9:26 Hodapp: fork or mainline kernel?

9:26 * zakwilson doesn't see a proprietary ISA as a step in the right direction.

9:26 Hodapp: zakwilson: x86 is almost always a step in the wrong direction, and strictly speaking, not a whole lot less proprietary

9:27 zakwilson: Did I say x86?

9:28 Hodapp: zakwilson: No, but I did. Most things are an improvement over it.

9:28 AWizzArd: vu3rdd: yes, that looks nice, 100 cores à 1.5 GHz on 55 watts during full load sounds impressive.

9:29 Hodapp: I don't want to go into a argument-by-authority discussion, but I honestly must say that I trust the scientists who studied this topic for a few decades a bit more right now, though this is nothing personal.

9:30 but sure, they can be wrong

9:31 zakwilson: Having more ISAs around has been a bad thing for software diversity in general. Maybe the LLVM will fix that.

9:31 Hodapp: AWizzArd: Take a look at popular science articles, particularly ones that make similar claims and are from a decade or more prior. It will not take you long to realize how much they are in the practice of overstating the value of something new.

9:32 AWizzArd: ok

9:33 Hodapp: zakwilson: If it moves us away from x86 to something cleaner, I'm in favor of it.

9:33 zakwilson: Hodapp: I expect ARM to take over from x86 for general-purpose computing.

9:33 AWizzArd: zakwilson: because their efficiency, calculations per energy?

9:34 Hodapp: zakwilson: It's possible.

9:34 AWizzArd: +of

9:34 Hodapp: zakwilson: They already have the mobile and embedded market pretty strongly.

9:34 zakwilson: Mostly because of market forces, not anything technical. Anything more energy-efficient could win that fight in theory.

9:35 Hodapp: zakwilson: Market forces are also what create such massive inertia that keeps the winner "in theory" from being the winner in practice.

9:35 zakwilson: Big manufacturers are coming out with ARM laptops this year. History has shown that in hardware, the low-end typically grows to displace the current mainstream/high-end.

9:36 Hodapp: ARM-based laptops and netbooks have been promised for a couple years now, but few have actually been delivered

9:36 though I've been looking for affordable ones

9:36 AWizzArd: Interesting will be how/if they can break through the memory wall

9:38 zakwilson: Lenovo and HP are introducing ARM laptops in the netbook range that are thinner and lighter than most x86 offerings.

9:38 Hodapp: zakwilson: And the price?

9:38 zakwilson: Also in the netbook range

9:38 Hodapp: I thought Dell had some too but they were more expensive

9:38 zakwilson: so... $300-600 or so

9:38 Hodapp: Do they have any actually for sale yet?

9:39 rsynnott: there are challenges to making x86 as efficient per watt as ARM, of course

9:40 Hodapp: rsynnott: Like the fact that 75% of the transistors are being used for decoding that clusterfuck of an instruction set.

9:40 zakwilson: I don't think the major vendors have them for sale yet.

9:40 Hodapp: zakwilson: I am pretty sure Dell has one, or at least had one at one point

9:40 rsynnott: Hodapp: yep; that tends to be the issue for low-energy intel stuff

9:41 they could, presumably, make a chip which had the same core but a more sensible instruction set

9:41 but then they'd have to wait on the compiler vendors and so on

9:41 Hodapp: rsynnott: I don't see Intel trying that, especially after Itanium.

9:42 Itanium was quite a decent design, but perhaps put too big a burden on compilers that weren't up to the task.

9:43 chouser: I worked on an OS that ran on Alpha. We mocked the Itanium design. :-)

9:43 Hodapp: well, it was quite a decent design compared to most x86.

9:46 my friend found an Alpha in a hallway and got it running again

9:46 thing is a tank

9:47 AWizzArd: I remember Alpha to be the first who hit the 100 MHz? Was it like that? While amd and intel were still playing with 60 MHz or so

9:47 Hodapp: wouldn't surprise me

9:47 zakwilson: I think it was also the first to hit 1000 mhz

9:47 Hodapp: also still killed Intel in floating-point performance

9:47 rsynnott: they tended to have a clock frequency advantage over any other general purpose processors at the time

9:47 *at any given time

9:48 Raynes: chouser: You have a confusing twitter. I did @chouser before realizing that it was @chrishouser. -.-

9:48 Hodapp: wasn't it still routed by hand which let them fine-tune some things better and get higher clocks?

9:48 chouser: Raynes: yeah, someone had @chouser before it had ever occured to me I'd have any use for twitter.

9:48 rsynnott: Hodapp: so I heard

9:49 Raynes: Sad.

9:49 It appears that people already have nearly every possible permutation of the word "Rayne" imaginable.

9:49 eevar2: time to change your nick then :p

9:50 * rsynnott is fortunate in having an extremely unusual second name

9:50 Raynes: eevar: I've considered it, but nobody would know who I am. :(

9:50 My nick has absolutely no association with my real name at all.

9:50 rsynnott: ('sinnott' is more common; my version was probably a spelling mistake on a birth cert)

9:51 Raynes: rsynnott: Your nick sounds a little like "astronaut".

9:51 AWizzArd: Anyone here on Linux who can tell me please: (str (java.io.File. "C:\\abc.txt"))

9:51 chouser: "C:\\abc.txt"

9:51 AWizzArd: ok

9:53 * Raynes yawns

9:53 powr-toc: does anyone know if its possible to pass properties or arguments from the command line into a script, run via a maven-clojure-plugin?

9:56 cemerick: powr-toc: set the system properties you want on your command line invocation, and then just pass those through as properties to the clojure process via <clojureOptions> or arguments via <args> (both configuration elements for clojure-maven-plugin)

9:58 powr-toc: cemerick: ahhh... I tried doing mvn clojure:run -Dfoo=bar, but the script didn't pick it up... Are you saying I'd need to add <clojureOptions>-Dfoo=${foo}</clojureOptions> for it to work?

9:58 cemerick: powr-toc: yes; the system properties you pass to maven impact its process, but aren't automatically passed on to child processes

9:59 powr-toc: Cheers mate, I'll give it a try :-)

9:59 cemerick: each clojure:run or java:exec, etc. is a separate forked process, not an intra-maven invocation

10:12 remleduff: Good morning everyone. Some people were wondering last night, is it intentional that "str" honors *print-length* when used on most of the collection types?

10:12 ,(let [*print-length* 1] (str '(1 2 3 4 5 6)))

10:12 clojurebot: "(1 2 3 4 5 6)"

10:12 remleduff: Hmm, that didn't

10:13 chouser: binding

10:13 remleduff: ,(binding [*print-length* 1] (str '(1 2 3 4 5 6)))

10:13 clojurebot: "(1 ...)"

10:13 chouser: never noticed that. hm.

10:14 remleduff: At first I thought it was correct, but I"m not sure anymore

10:14 ,(binding [*print-length* 1] (str (map inc '(1 2 3 4 5 6))))

10:14 clojurebot: "clojure.lang.LazySeq@387c1804"

10:14 arkahn: and point #2, why isn't it documented ; )

10:17 remleduff: We isolated it to: ASeq.toString calls RT.printString, which uses the print-method multimethod to print things. The multimethod for Seq printing honors *print-length*

10:18 Is there an easy way to ask at the repl or in slime, "What multimethod will be called for these arguments?" And have it either give you the source code for the multimethod or the metadata, or in slime navigate you to it?

10:21 chouser: remleduff: that's a good question

10:21 jowag: Clojurescript or Scriptjure? Conjure or Compojure? So many choices ...

10:22 AWizzArd: jowag: and there is also compojure-rest

10:23 jowag: Oh

10:23 AWizzArd: A port from the Erlang Webmachine: http://webmachine.basho.com/

10:23 sexpbot: "Webmachine - software shaped like the Web"

10:24 jowag: I just want to develop a "ajax" web application on GAE, seems like I'll spend half the time deciding which framework/libraries to use :)

10:24 chouser: remleduff: I don't think sufficient information is currently captured to do that

10:24 AWizzArd: jowag: when this gets more complicated you want sane behaviour of your server

10:25 If you are not an expert on http a simple framework will leave https complexities on you. Just see: http://webmachine.basho.com/diagram.html

10:25 chouser: now that fns can carry metadata, it would be possible for defmethod to put filename/linenumber info on the fn it creates, and then we could probably do something with it.

10:26 jowag: you can rule out clojurescript for now

10:29 jowag: thank you, I know html but not http :) very little eperience with js, so naturally, It would be perfect if everything could be generatet with clojure code

10:30 chouser: scriptjure might be a reasonable choice -- clojure-like syntax with javascript semantics

10:31 some day clojurescript will live again, and it might then be a good choice esp. for apps with significant browser-side code.

10:33 remleduff: ,(.getMethod print-method ((.dispatchFn print-method) '(1 2 3) nil))

10:33 clojurebot: #<core$fn__5681 clojure.core$fn__5681@d3d0d4>

10:33 remleduff: But there's no metadata on that :(

10:33 chouser: right

10:33 alexyk: is there a way to modify repl so it reports the time of each operation, like mysql, as if wrapping each in an implicit (time ...) ?

10:34 chouser: remleduff: there could be with a tweak of the defmethod macro. I assume such a change isn't welcome before 1.2

10:34 alexyk: chouser: you'd risk the ire of the fundamentalists, looks too much like scripture, and last time I checked you were somewhere in Midwest? :)

10:34 remleduff: alexyk: clojure.main/repl is super-configurable

10:35 alexyk: remleduff: so just hack it?

10:35 chouser: just don't claim clojure or javascript is the Word of God and you'll be fine.

10:35 alexyk: chouser: now that you mention it, rhickey should be deified and then we're in business

10:36 clojure surely feels like the voice of some higher power

10:36 or an enlightened one at least

10:36 remleduff: I mean, should I just hack it? :)

10:37 remleduff: Well, I don't consider it a hack unless you change the source code ;)

10:38 * alexyk wonders why reification sounds similar to deification

10:39 * alexyk observes that in Seattle, reification might mean a spree at the REI

10:39 AWizzArd: well, those words share a lot of letters

10:39 alexyk: AWizzArd: it's hard to object to that

10:40 AWizzArd: but compare: donkey and monkey

10:40 "dunn key" "monn key"

10:40 no, the other way around

10:40 don key and munn key

10:40 remleduff: alexyk: If all you're needing is a quick hack, maybe you could also do it by rebinding eval

10:41 alexyk: AWizzArd: the question is, is the distance between reification and deification greater than that between donkey and monkey

10:41 remleduff: I'm interested in a solid way. Is rebinding eval cool?

10:41 remleduff: Not sure I'd trust my judgement on that one ;) For what it's worth, I'd say probably not ;)

10:42 chouser: you probably can't rebind eval because of direct binding.

10:43 alexyk: bbl

11:51 slyrus: well, i'm sure those of you who use slime probably knew this, but slime HEAD does work, you just have to make sure slime-autodoc isn't enabled in your clojure slime buffers.

12:11 arkahn: the beginning of my first program in clojure; right now, it only outputs the first of the file I'm reading. How would I get it to print out all lines?

12:11 http://gist.github.com/406473

12:12 edit - 'only outputs the first line'

12:13 qbg: ,(doc line-seq)

12:13 clojurebot: "([rdr]); Returns the lines of text from rdr as a lazy sequence of strings. rdr must implement java.io.BufferedReader."

12:13 qbg: Use that

12:14 arkahn: qbg: thank you

12:15 qbg: Also, it is not idiomatic to have all of those parentheses on their own lines

12:16 arkahn: they should be on the last line of a group of code?

12:16 SynrG: i wouldn't call a matter of coding style like that idiomatic (though it may be conventional)

12:17 qbg: Yes, conventional, not idiomatic

12:17 arkahn: Take a look at http://mumble.net/~campbell/scheme/style.txt

12:17 arkahn: style is important to me - cool, thanks for the link

12:37 Licenser: A question, sadly somewhat javaish

12:38 I want a string scanner that does NOT use this silly delimiter java.util.Scanner has.

12:54 fogus: Licenser: The Scanner class can use an arbitrary delimiter

12:54 Licenser: you can't get rid of it

12:54 setting it to nil causes NPE setting it to "" causes it to match everything and only give 1 char tokens

12:55 ataggart: then set it to the dlimiter you actually want

12:55 Licenser: ataggart: none

12:55 I don't want any delimiter

12:55 ataggart: wong class than

12:55 Licenser: yea but java does not seem to give any options to do what I want

12:55 fogus: It has a reset method. Also, the withDelimiter returns a new instance using your chosen

12:55 Licenser: I am now sing stubstr and re-find

12:56 remleduff: Doesn't "no delimiter" just mean, "give me the entire input as 1 string"?

12:56 fogus: Licenser: If you do not want a delimiter, then how is it a Scanner?

12:56 ataggart: "A Scanner breaks its input into tokens using a delimiter pattern"

12:56 Licenser: remleduff: notif you use next(pattern)

12:57 I want a scanner that scanns tokens not delimiters

12:58 ataggart: the tokens are formed by breaking up a string on delimiters

12:58 Licenser: ataggart: that is why I saied I want a string scanner that works different

12:58 ataggart: java.util.Matcher

12:58 roll your own

12:59 erm

12:59 java.util.regex.Matcher

12:59 Licenser: ataggart: that does not work since it only matches the start of a string, I can't chain them

12:59 ataggart: then I clearly don't understand what you're trying to accomplish

13:00 Licenser: ataggart: tokenize code into it's elements for example: 123+123 should become 123, +, 123

13:00 given the right regexps of cause

13:00 (token-seq "123abc123" [[#"^\d+" :number] [#"^[a-z]+" :ident]]) -> ([:number "123"] [:ident "abc"] [:number "123"])

13:00 this to be precise

13:06 ataggart: Matcher does (mostly) what you want. The problem is you seem to want different interleaving patterns.

13:07 ,(def m (re-matcher #"\d+" "+123+456+"))

13:07 clojurebot: DENIED

13:07 ataggart: bah

13:07 anyway, run the above, then

13:07 (.find m)

13:07 then

13:07 (.group m)

13:07 the first result will be "123"

13:07 remleduff: Licenser: Can you use matcher.find repeatedly instead?

13:07 ataggart: yes

13:08 you call find, then group

13:08 repeatedly

13:08 until find returns false

13:38 stilkov: I'm pretty sure I ran into this a while ago, but I can't remember how I got out of it: I can no longer run "lein help", it gives me a java.lang.ClassCastException: clojure.lang.Cons cannot be cast to clojure.lang.Named

13:39 technomancy: stilkov: what lein version?

13:40 stilkov: mbp13:cljblog st$ lein -v

13:40 Leiningen 1.1.0 on Java 1.6.0_20 Java HotSpot(TM) 64-Bit Server VM

13:40 Raynes: fogus: Thanks for the changes -- did you see the message I sent you on github by any chance?

13:40 technomancy: stilkov: paste your project.clj; must be something funky in there

13:41 stilkov: http://gist.github.com/406587

13:42 Interestingly, one of the Google hits was this old gist: http://gist.github.com/398271

13:42 Not from me

13:42 technomancy: stilkov: weird; looks good to me. the only thing I'd change is replace lein-swank with swank-clojure 1.2.1.

13:43 lein-swank is now bundled with swank-clojure

13:43 then run clean/deps again

13:43 stilkov: no, no change

13:44 technomancy: stilkov: I tried it here and it works fine

13:45 stilkov: I wanted to start from scratch, but somehow the README.md at http://github.com/technomancy/leiningen seems to be broken?

13:45 technomancy: actually the markdownj dep doesn't work

13:45 uh, brb; sorry

13:47 mmarczyk: um, how come

13:47 Leiningen's readme now reads

13:47 "This is the GitHub web application accessible from most any modern web browser or API client. The codebase also includes Gist. And you can push to it from Subversion." etc.

13:49 stilkov: maybe a Github problem

13:50 mmarczyk: yeah, apparently

13:50 I think I'll sue them for the ill effect the shock had on my health :-P

14:04 stilkov: are you seeing this ClassCastException when running "lein help" outside of any project's directory?

14:05 stilkov: I've now git-cloned the most current version and use that

14:05 lein help works

14:05 unfortunately, this version refuses to find my source files

14:05 not a happy lein day for me

14:06 mmarczyk: how do you mean, refuses to find your source files?

14:06 also, does 1.1 not work for you?

14:07 technomancy: stilkov: any luck?

14:08 stilkov: not really no. are you aware leiningen's readme is somehow the wrong one?

14:09 I mean the one displayed here

14:09 http://github.com/technomancy/leiningen

14:09 technomancy: stilkov: that's actually a github bug

14:09 veeeeeery interesting!

14:09 stilkov: probably related to this: http://github.com/technomancy/leiningen/blob/master/README.md

14:09 (github error)

14:10 technomancy: stilkov: here's another copy for while they are getting their issues sorted out: http://p.hagelb.org/lein-readme.html

14:10 sexpbot: "README.md"

14:11 Raynes: Thank you sexpbot, for I never would have guessed.

14:11 stilkov: thanks, I can start from scratch with that. I'm happy to use the current git HEAD, too - but all it says during compile is No :namespaces listed for compilation in project.clj.

14:11 tridd3ll: ok, brace yourself for anohter slime, lein question... I have emacs, slime and leiningen configured... no swank-clojure configured on the emacs side. I create a project with lein and start with lein swank. I can connnect fine with slime-connect in emacs. Now, how can I edit/compile files in the project with emacs? C-c, C-k does nothing. Is this because swank-clojure is not part of emacs now? I did quite a bit of reading and thought this new

14:12 tomoj: tridd3ll: is your .clj buffer in Slime mode?

14:12 technomancy: tridd3ll: no, you shouldn't need swank-clojure on the Emacs side at all

14:13 C-c C-k should do the trick. are you getting any output?

14:14 tridd3ll: when I first do slime-connect I get: error in process filter: Symbol's function definition is void: swank-clojure-slime-mode-hook

14:15 technomancy: tridd3ll: you must still have some swank-clojure configuration left over somewhere

14:15 tridd3ll: technomancy: it's a brand new config

14:16 technomancy: but C-c C-k is undefined

14:16 technomancy: tridd3ll: grep your .emacs.d for swank; there must be something in there.

14:19 tridd3ll: technomancy: seems like there has to be... but absolutely nothing... now I don't think my clj buffer is in slime mode though... what would cause that?

14:19 technomancy: tridd3ll: you have clojure-mode 1.7.1?

14:20 Raynes: Oh joy. elpa is borked.

14:20 tridd3ll: technomancy: I have the latest and greatest... I must be missing something on the config side

14:21 puredanger: so is the only reason to use deftype over defrecord to get those yucky mutable fields?

14:21 technomancy: puredanger: basically. deftype is lower-level. if you can use defrecord, you should.

14:21 tridd3ll: there is no config side.

14:22 puredanger: when using defrecord, can you type-hint a field with a protocol?

14:22 technomancy: tridd3ll: at least, I don't have any elisp config beyond just installing the packages

14:23 tomoj: tridd3ll: try M-x slime-mode

14:24 oh, didn't see your error

14:24 dunno if manually turning on slime mode will help, then

14:24 tridd3ll: tomoj: no, that was it!

14:24 tomoj: I think a previous config used to do that automatically

14:25 tomoj: that happens to me sometimes, and I don't understand why

14:25 there's also M-x clojure-enable-slime-on-existing-buffers or something like that

14:26 technomancy: tridd3ll: if your previous config just called (slime-mode) without an argument, it could be toggling it back off now that it gets enabled automatically.

14:27 tridd3ll: technomancy: tomoj: thanks! I now have a clean setup on Arch linux with Emacs 23, clojure 1.2, lein, etc.

14:27 technomancy: cools

14:28 mmarczyk: technomancy: I notice that Lein's project.clj includes a :url entry -- does it actually do anything?

14:28 technomancy: mmarczyk: it's just metadata for clojars to display

14:29 mmarczyk: technomancy: I'm thinking of (finally) writing a patch to add this to pom.xml, plus licence & mailing list info, if provided

14:29 technomancy: not sure if I asked if you'd be interested

14:29 technomancy: mmarczyk: sounds great.

14:29 mmarczyk: oh good, I'm on to it then :-)

14:30 technomancy: also: I asked someone if they'd be interested in prototyping hook functionality, but I don't remember who it was.

14:30 anyone?

14:36 tridd3ll: technomancy: so it works fine even with the swank-clojure-slime-mode-hook message but I can almost guarantee that the only swank I have is from lein, just fyi... this is a brand new install of the OS

14:36 technomancy: tridd3ll: interesting; I'll try creating a new user and seeing if I can repro

14:37 ninjudd: technomancy: hooks for leiningen?

14:37 maxhodak: i'm trying to take a list of lists that looks like (([:key1 0.98 1] [:key2 0.82 1] ...) ... )

14:37 and turn it into a map that looks like: {:key1 ([3.4 [231 12]] [3.5 [139 122]]) :key2 ([0.92 [21 11]] ...) ...}

14:38 by counting up the items

14:38 and i can't for the life of me see the bug in my counting fn

14:38 http://gist.github.com/406656

14:38 (safe-increment)

14:40 puredanger: answering my own question, the answer is yes that you can type-hint a record's field as a protocol (since it's just an interface)

14:40 still trying to figure out whether that's useful to me

14:42 technomancy: ninjudd: extending built-in tasks by plugins

14:44 mmarczyk: technomancy: incidentally, would you like to support global plugins / tasks in the future?

14:44 remleduff: maxhodak: Not sure where your bug is, but "get" supports a default value, so you can replace your if cruft in safe-increment with (get m k {})

14:44 technomancy: mmarczyk: it's on the list

14:44 ninjudd: technomancy: i'm interested. i almost sent you a message on github yesterday asking what your plans are for hooks

14:45 mmarczyk: technomancy: do you have a particular location to store them in your mind? or maybe an env var to pick it up from?

14:47 (um, I now notice that I've formulated the above rather strangely... oh well)

14:49 maxhodak: remleduff: hmm thanks for that

14:50 AWizzArd: rhickey: about the permissions for the DynamicClassLoader - we found a way (a patch) to let it inherit all rights from its parent. The patch is a one liner, and a friend with an already accepted CA can post it.

14:51 technomancy: mmarczyk: yeah, probably in ~/.leiningen/plugins.clj to indicate which should be activated

14:51 ninjudd: cool. we should start a thread on the lein mailing list about it so we don't have to search ye olde irc logs to find the plans. =)

14:51 AWizzArd: This allowed us to have an applet running all Clojure code, with full permissions, that were requested by the applet (through the .jnlp file that I wrote).

14:51 maxhodak: er, found it. the bug was in how i was mapping/reducing the lists; it was overwriting the 'aggregate' in the reduce each step

14:52 AWizzArd: rhickey: may I add an issue, with the patch coming in a bit later, so that we can discuss security implications, and if we want that patch to go into the DynamicCL?

14:53 mmarczyk: technomancy: makes sense

14:53 technomancy: mmarczyk: it also depends on a "lein install $FOO" task that works outside the context of a project

14:55 remleduff: maxhodak: In map-bins, does (= 1.0 (:accepted user-profile)) really return 1 rather than true?

14:55 mmarczyk: technomancy: and then you'd like it to pick up "lein install"ed plugins?

14:58 maxhodak: remleduff: no it returns true

15:01 remleduff: Since you figured it out, I'll stop looking and nitpicking. I'm finding it difficult to wrap my head around though, so was reading it for practice. ;)

15:07 nathanmarz: anyone know how to redirect all console output to repl in emacs when using lein swank?

15:11 mmarczyk: nathanmarz: call (slime-redirect-inferior-output)

15:11 nathanmarz: mmarczyk: in the repl or via M-x?

15:11 neither one works

15:13 tridd3ll: technomancy: scratch the error I spoke of before... I was using jochu's clojure-mode... now everything works perfectly.

15:14 mmarczyk: nathanmarz: M-:

15:15 nathanmarz: or M-x eval-expression

15:17 nathanmarz: (error "No inferior lisp process")

15:17 mmarczyk: then start one :-)

15:17 nathanmarz: i don't know what that means :(

15:17 the repl works otherwise

15:17 mmarczyk: oh? hm

15:17 nathanmarz: the console output is all going to the terminal where i started lein swank

15:18 mmarczyk: you should be able to do M-x eval-expression (slime-redirect-inferior-output) in your SLIME REPL buffer

15:18 I'll see which hook I put it into...

15:19 slime-connected-hook, apparently

15:19 so you can do (add-hook 'slime-connected-hook 'slime-redirect-inferior-output) prior to starting the REPL, then start the REPL and see if it works

15:21 nathanmarz: i execute (add-hook 'slime-connected-hook 'slime-redirect-inferior-output) via M-x eval-expression ?

15:21 mmarczyk: right, or at the repl started by M-x ielm

15:22 nathanmarz: before the clojure repl starts up it prints "error in process filter: No inferior lisp process"

15:22 mmarczyk: if it works, you might want to add it to ~/.emacs or whichever file you store your slime config in

15:23 nathanmarz: but then it starts up fine, right?

15:24 nathanmarz: yes, but it's not redirecting any output

15:26 mmarczyk: hm, so maybe it should be (add-hook 'slime-connected-hook #'slime-redirect-inferior-output), though I thought it didn't matter (it probably doesn't)

15:26 otherwise, that's weird

15:26 where did you get your slime from?

15:27 nathanmarz: i followed technomancy's various instructions

15:27 http://technomancy.us/126 http://github.com/technomancy/emacs-starter-kit http://github.com/technomancy/swank-clojure

15:28 sexpbot: "in which are found tricks of the trade concerning clojure authorship - Technomancy"

15:32 mmarczyk: well, to be honest, I don't know what could be wrong

15:33 I'm using a different setup -- no elpa -- so we're sure to have different versions of stuff

15:40 nathanmarz: yea, that must be it

15:40 mmarczyk: thanks anyway

15:48 mmarczyk: what I have in my config is actually (add-hook 'slime-connected-hook (lambda () (interactive) (slime-redirect-inferior-output)))

15:48 I'm not at all sure what's the (interactive) there for, so maybe try and see if it changes anything

15:49 oh, and test the changes in a fresh Emacs instance

15:53 alexyk: any clojure bindings for kryo?

15:56 charlls: heyo

15:57 alexyk: treasure trove of jvm serializers: http://wiki.github.com/eishay/jvm-serializers/ -- and kryo apparently beats the pants off protobuffers and everything else

15:59 ninjudd: alexyk: that benchmark is what made me decide to write clojure-protobuf

15:59 alexyk: ninjudd: interesting choice given the place of protobufs there :)

16:00 ninjudd: alexyk: protobufs are still very fast, and they have other properties i wanted like support for merge-on-append

16:01 alexyk: ninjudd: yeah, I now like language portability

16:01 ninjudd: but you have to compile things, which in many cases is annoying. Say serializing derivative graphs with a slightly different structure

16:01 ninjudd: alexyk: yep, that was another one. plus, i doubt kryo would actually be faster if you serialize persistent clojure data structures directly

16:02 alexyk: definitely would be less space efficient

16:02 alexyk: ninjudd: true, avoid hava cruft

16:02 java

16:04 ninjudd: alexyk: note under the "Serialized Size" section: The ‘scala’ test, which uses Java’s built-in serialization, yields a larger serialized representation because it usually creates more Java classes under the hood.

16:04 alexyk: the same would be true for clojure

16:05 alexyk: ninjudd: true, Scala pollutes the classes directory as much as Clojure :)

16:07 folks probably saw it, but it's exciting still: http://googlecode.blogspot.com/2010/05/better-performance-in-app-engine-with.html

16:07 sexpbot: "Google Code Blog: Better performance in App Engine with new Lisp language Clojure"

16:11 AWizzArd: alexyk: thx for the link

16:14 alexyk: "lisp language clojure" sounds vaguely Japanese to me :)

16:15 ninjudd: are you gonna add sorted-map to protobuf?

16:15 hamza: is it not possible to add metadata to a keyword?

16:16 ninjudd: alexyk: hmm... how would it work? would it be a map or a map_by?

16:17 alexyk: ninjudd: a map, it will simply load into a sorted-map

16:17 tridd3ll: ANN: just posted a tutorial on my website about a non-ELPA install for emacs, swank and leiningen: http://riddell.us/ClojureSwankLeiningenWithEmacsOnArch.html

16:17 sexpbot: "ClojureSwankLeiningenWithEmacsOnArch"

16:18 quizme: It's all about Counterclockwise in Eclipse :)

16:18 tridd3ll: everything's bleeding edge and it seems to work great... also, no swank-clojure in emacs

16:20 ninjudd: alexyk: i wonder if protobuf supports multiple options, i could just add a sorted option that works for set, map and map_by

16:20 technomancy: tridd3ll: why do you have people building clojure/contrib instead of fetching from build.clojure.org?

16:21 tridd3ll: technomancy: not sure... that's always the way I did it I guess... been busy and out of the clojure world for a while

16:22 technomancy: it's fine if you're hacking clojure or contrib itself, but you can totally skip it if you just want to get your own project working

16:22 mmarczyk: it might make sense to show all stuff of this sort in one place, though

16:22 meaning how to go about running things from the sources

16:23 ninjudd: alexyk: add an issue on github and i'll get to it when i have some time. or if you're feeling adventurous, fork clojure-protobuf and add it yourself

16:23 technomancy: I'd put it in a separate tutorial if it were me, just to simplify things for people who want to get started quickly. but it works.

16:23 mmarczyk: then if someone wants to hack Clojure with a stable elpa setup, that's one thing to swap out, and likewise for Clojure snapshots with bleeding edge slime

16:23 jweiss: i found an interactive clojure tutoral recently, sorta ajaxy web app.. can't find it now, anyone know what it was

16:24 ninjudd: jweiss: http://www.try-clojure.org/ ?

16:24 technomancy: mmarczyk: the thing is the custom-built clojure/contrib jars have absolutely no effect on the final outcome of the tutorial the way it's currently written

16:24 sexpbot: "TryClojure"

16:24 jweiss: ninjudd: no, that's not a tutorial, but it's cool

16:25 Raynes: jweiss: It is, actually.

16:25 ninjudd: jweiss: click the tutorial button

16:25 Raynes: jweiss: The tutorial is brief and incomplete, but I'm working on it.

16:25 I'm curious as to what web app you're talking about.

16:25 I certainly don't remember anything of the sort.

16:25 They might put me out of business! ;)

16:26 tridd3ll: technomancy: I think I was mostly focused on the emacs part of the tutorial... this first part does allow for a bleeding edge clojure repl at a command line

16:26 jweiss: Raynes: no that's wasn't what i had seen before

16:26 mmarczyk: technomancy: hm, true

16:26 jweiss: nice though

16:26 ninjudd: jweiss: you're not referring to labrepl, are you?

16:26 Raynes: That's probably it.

16:26 mmarczyk: maybe links to snapshot solutions at each step would be useful

16:27 Raynes: Only thing remotely similar to an "interactive" tutorial besides try-clojure that I can think of.

16:27 jweiss: oh yeah that was it

16:27 forgot that it required a local install

16:27 mmarczyk: then it's obvious that what's presented is the straight-from-the-repo approach and then there's a link to something prepackaged...

16:27 jweiss: thanks!

16:27 mmarczyk: incidentally, Maven's handling of licences and mailing lists is horrible :-(

16:28 well, maybe not mailing lists, but licences -- come on, no predefined licences anywhere :-(

16:30 would it be useful for lein to accept :licence :epl10 (or :license) as shorthand for :licence {:name "Eclipse Public License" :distribution :repo :url "..."} ?

16:30 etc., or should I not bother

16:30 (if I shouldn't, then it's done)

17:16 technomancy: mmarczyk: what's :distribution mean in that context?

17:24 mmarczyk: technomancy: "repo" (may be downloaded from the Maven repository) or "manual" (user must manually download and install the dependency)

17:26 hamza: is it not possible to attach metadata to a ref or a keywork? or is

17:26 there a work around this?

17:26 technomancy: so the central maven repositories actually serve up the text of certain licenses?

17:27 mmarczyk: technomancy: I think this means that if licence is set to "manual", they're not meant to have those jars at all

17:28 technomancy: from the docs on .setDistribution: "Set the primary method by which this project may be distributed.", so apparently that's indeed what it is

17:28 technomancy: I think that "repo" would be a sane default, but I'm a bit wary of providing any sort of defaults for legal stuff... a documented shorthand for widely used licences would probably be ok, though

17:29 technomancy: so I'm wondering if I should bloat pom.xml by including a couple of those

17:29 that's pom.clj

17:34 technomancy: I'm not sure why you'd need more than just a name/url for the license

17:35 but hey, it's maven.

17:35 mmarczyk: yup

17:52 technomancy: hamza: you can add metadata to a ref, but not to a keyword

17:52 since there is only ever one instance of a given keyword. it would be like adding metadata to a number

17:55 mmarczyk: ,(with-meta (ref 0) {:foo 1})

17:55 hm, well, whatever, but it complains at my repl about (ref 0) not being an IObj

17:56 whereas (.resetMeta (ref 0) {:foo 1}) works

18:00 (nb. (ref 0 :meta {:foo 1}) works, but I thought it was surprising that with-meta doesn't)

18:00 hamza: technomancy: it says ref can't be cast to IObj

18:00 ,(with-meta (ref 0) {:a :b})

18:01 mmarczyk: hamza: see above, (ref 0 :meta {:a :b})

18:01 technomancy: ick

18:02 hamza: technomancy: thanks..

18:02 that worked..

18:19 Lajla: It comes down to,

18:19 convince me, a Schemer, to learn Clojure.

18:20 Extra points for not using violence or a thread to murder my family for failure to comply but rather rely on sophisticated arguments.

18:20 lancepantz: it's on the jvm, you can use all the java libraries

18:20 done.

18:20 :)

18:20 Lajla: Most Schemers are convinced by Java libraries these days?

18:20 I have never used Java in my life.

18:21 Raynes: How about this: "It actually has libraries."

18:21 technomancy: Lajla: persistent data structures

18:21 will change your life

18:21 Lajla: technomancy, explain.

18:21 Your ghost is away.

18:22 technomancy: Lajla: you can share data structures between threads without having to worry that they'll get modified out from under you

18:22 values are guaranteed to be stable

18:22 Lajla: it's like lists in Scheme without setcar!/setcdr!; once you have a list, you know it's not going to flip out on you

18:22 powr-toc: Lajla: It's got a sane approach to state, is fast, cross platform, with libraries for almost everything; and there's a chance you might be able to convince your boss to use it, in production, in the real world.

18:22 Lajla: technomancy, but can't you use that in Scheme by just not modifying them?

18:22 technomancy: but imagine that across all your data structures

18:23 Lajla: programs that use solely lists aren't performant

18:23 Lajla: technomancy, go on.

18:24 technomancy: Lajla: you can treat lists like hash tables with alists and plists, but it's cumbersome, and you know that once you have perf requirements you'll have to replace them all with a real hash-table anyway

18:24 Lajla: but really nobody could do a better job than Rich of convincing: http://clojure.org/state

18:24 powr-toc: technomancy: ahh good point... the sequence library rocks

18:25 Lajla: technomancy, Rich doesn't murder my family does he?

18:25 powr-toc: specifically the polymorphic abstractions across lists, vectors, hashmaps and sets

18:28 Lajla: do you actually use Scheme for anything real?

18:28 ataggart: I've never understood the point of "challenging" others to prove the utility of a language, nor of accepting such "challenges".

18:28 use it or don't.

18:30 Lajla: powr-toc, I automate some parts of my computer with it, let it write music and at the moment try to get it to replicate the writing style of Nietzsche to prove a point.

18:30 technomancy: Lajla: if there have been any murders, they've been thorough enough to dispose of any witnesses

18:30 Lajla: But actually I wanted to run my site on it in lieu of php, some people said I should dive in Clojure.

18:30 technomancy: here's my initial impression of why I was impressed with it after using it for a couple weeks (coming from ELisp and Ruby) http://technomancy.us/121

18:31 sexpbot: "in which new paradigms are explored, clojure is reached, and impressions are still cursory - Technomancy"

18:31 Lajla: ataggart, well, I like to see the best arguments, thus far some were reasonable enough

18:31 technomancy: but Rich's arguments are the best

18:31 * Lajla cliqz

18:31 technomancy: also: http://blip.tv/file/1313398 (long-ish video, but worth it)

18:31 sexpbot: "Clojure for Lisp Programmers Part 1"

18:32 powr-toc: This is my favourite clojure video: http://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey

18:32 sexpbot: "InfoQ: Are We There Yet?"

18:32 ataggart: powr-toc: seconded

18:33 Lajla: Hmm, I'mn kind of annoyed by watching videos to gain information though, the same can often be put into text and read in 1/100th of the time.

18:34 ataggart: you're free to not watch them

18:34 powr-toc: ataggart: It's just such a damn good talk; brilliantly pitched, presented and articulated... directly relevant to most of the problems we currently face regarding time/concurrency... and to do it without showing a line of code is brilliant

18:35 Lajla: I have a transcript of it somewhere hold on...

18:35 http://codepad.org/eN7SjIoz

18:35 sexpbot: "Plain Text code- 214 lines - codepad"

18:35 Lajla: powr-toc, thank you.

18:36 ataggart: For those of you that know them, is there much utility to learning haskell or erlang (beyond simply knowing the language)?

18:38 technomancy: ataggart: for distributed systems it's probably worth learning erlang

18:38 it has a great approach to fault-tolerance

18:38 but I cringe at the thought of writing something in it

18:38 hamza: gents, i will be using add-watch in a project, well it says subject to change on the docs, what i am wondering is, is there a chance of it dissappering all together?

18:39 ataggart: technomancy: that was my understanding as well.

18:39 powr-toc: ataggart: I "know" Erlang but am not proficient in it... for me I think I've learnt most of what I can from it... much of the fault tolerance comes from the VM... though the supervision structures and trees are very nice and practical, theoretically they don't seem to expand your mind that much

18:39 ataggart: hamza: only if it turns out to be inherently flawed for some reason (unlikely)

18:39 powr-toc: I think Haskell, which I know next to nothing of, would be my next language to learn

18:40 hamza: ataggart: kk thanks...

18:40 technomancy: the type system sounds exhausting to learn

18:40 I don't have the mental energy to tackle Haskell

18:40 Lajla: ataggart, Haskell is an 'industry language' I guess.

18:41 technomancy: going to take a look at Factor next

18:41 Lajla: Not as much a 'tool that helps you automate tasks of solve problems' as lisps are.

18:41 ataggart: Lajla: what does that mean?

18:41 Lajla: ataggart, it means it's primary domain is writing (commercial) software applications.

18:41 powr-toc: technomancy: Coding in Erlang's not too bad... but the REPL sucks, because of single assignment; and that records aren't first class language features

18:42 technomancy: Yeah, Factor is nice...

18:42 technomancy: powr-toc: not having strings is a huge strike against it, plus the syntax is nuts

18:42 ataggart: erlang doesn't have strings?!

18:42 powr-toc: I looked at it about two or three years ago... it was good then, I'd imagine its better now.... Slava Pestov is really only rivalled by Rich, in terms of productivity :-)

18:43 Lajla: I would recommend haskell over erlang I guess, they both try to do the same thing, with Haskell being better at it.

18:44 remleduff: Haskell was originally a teaching language ;)

18:44 powr-toc: technomancy: yeah, lack of strings is a bit crap; but the syntax is mostly pretty good; except for the semi-colon/period nonsense.... having said that though, I've done a fair bit of prolog, so I'm quite partial to the binding syntax behind erlangs pattern matching

18:44 technomancy: ataggart: it calls byte arrays "strings"

18:44 mmarczyk: Lajla: you're calling Haskell an "industry language"?

18:44 I'm willing to bet that that would come as a surprise to most Haskellers

18:45 Lajla: mmarczyk, haskell is more used to make commercial software applications than research tools.

18:45 mmarczyk: it happens to be one of the more frequently used languages in publications on functional programming-related research

18:45 Lajla: It's not used as much as C or Java I mean, but used for the same things.

18:45 That is quite correct.

18:45 powr-toc: Lajla: I was offered a job at erlang training and consultants; and was interviewed by simon thompson and francesco cessarini (the authors of the oreilly erlang book)...

18:46 mmarczyk: I wouldn't be terribly surprised if there was a tiny amount of INTERCAL out there in production

18:46 I wouldn't stretch that to say that it's an "industry language" though

18:47 Lajla: mmarczyk, well: http://en.wikipedia.org/wiki/Haskell_(programming_language)#Applications

18:47 sexpbot: "Haskell (programming language) - Wikipedia, the free encyclopedia"

18:47 powr-toc: Lajla: Anyway, Simon Thompson, is an academic computer scientist, who was involved in the design of Haskell and has written one or two books on it... he told me the thing he found refreshing about Erlang was it was more practical, less fractured, and more suited to industry

18:47 mmarczyk: incidentally, I wouldn't at all mind Haskell being used widely in the industry, that would make it (the industry) vastly more attractive in my eyes

18:47 Lajla: not sure what point you're trying to make

18:47 Lajla: I more meant that the difference with most lisps is that for instance lisp is more used by people to write their own tools to help them with little indent to release these as commercial software solutions for others.

18:48 powr-toc: but it was clear; he found Erlang a little bit dirty... :-)

18:48 I think Erlang is without a doubt; the most widely used functional programming language... by almost any measure

18:48 mmarczyk: Lajla: well, to the best of my understanding, several Common Lisp vendors, PLT guys in the Scheme world and we Clojurians might have a different view of Lisps place in life

18:49 powr-toc: at least industrially

18:49 mmarczyk: Lajla: without even mentioning people writing Autolisp

18:49 Lajla: mmarczyk, well, could be that I'm wrong.

18:49 But most examples of lisp I've heard of in commericial situations ended up for instance people using it as a scritping language behind Final Fantasy: The Spirits Within

18:49 powr-toc: I'm sure I had a reference for that... but I think in LOC's; more have been written in Erlang than anything else

18:50 (functional that is)

18:50 mmarczyk: Lajla: anyway, you're the first person I encountered to call Haskell an "industry language"

18:51 Lajla: powr-toc, what are LOC's?

18:51 powr-toc: lines of code

18:51 mmarczyk: Lajla: the notion gives me quite a pleasant thrill, so thanks for that

18:51 Lajla: Well, maybe I have a nonstandard definition of the term I guess.

18:51 alexyk: ninjudd: I want to try to read protobufs from Scala. How do the extensions work -- since you include collections.proto into a user proto, are they implemented by the protocol buffers themselves magically into right Java?

18:53 powr-toc: Lajla: What scheme dialects do you use?

18:53 ninjudd: alexyk: they are implemented here: http://github.com/ninjudd/clojure-protobuf/blob/master/src/jvm/clojure/protobuf/PersistentProtocolBufferMap.java

18:53 powr-toc: sorry, I mean interpreters not dialects

18:53 ninjudd: alexyk: in fromProtoValue and toProtoValue

18:53 mmarczyk: powr-toc: actually "dialects" is probably the better world, if only because there's plenty of good compilers out there :-)

18:54 powr-toc: mmarczyk: LOL... as soon as I wrote interpreters, I regretted it... either way, the question still stands :-)

18:54 alexyk: ninjudd: aha, so I'd have to teach Scala to read those... I could reuse that Java right?

18:55 Lajla: powr-toc, PLT and R5RS

18:55 powr-toc: mmarczyk: it's just that scheme is a standard, right... so in theory there should only be one "dialect", right? :-)

18:55 ninjudd: alexyk: sure, or you can just use the PersistentProtocolBufferMap in scala

18:55 mmarczyk: powr-toc: in theory, theory resembles practice ;-)

18:56 ninjudd: alexyk: though i will be rewriting it to use protocols in the near future

18:56 powr-toc: mmarczyk: ahh yogi bera... I love that quote

18:56 mmarczyk: (with an especially idealistic theory it might even be the other way around)

18:56 me too. :-)

18:58 Lajla: powr-toc, well, we use 'dialect of scheme' to signify a set of extensions I guess.

18:58 That's what scheme ultimately was designed for, a framework to extend.

18:58 I use numerous added syntaxes I added myself.

18:59 powr-toc: On another topic... I love how Clojure "Just Works"... last week, I managed to get it, with compojure, working with GWT RPC! :-)

18:59 hiredman: scheme was an experiment in message passing

19:00 powr-toc: hiredman: it was?!

19:00 hiredman: yes

19:00 mmarczyk: Scheme is a contract on continuation semantics!

19:00 (khem)

19:01 powr-toc: ahh of course

19:01 hiredman: it used to have another operator besides lambda, called alpha that was for creating things you passed messages to

19:01 powr-toc: hiredman: so what happened to it?

19:01 hiredman: but it turned out to have essentially the same code as for λ

19:01 mmarczyk: incidentally, might anybody besides me be remotely interested in having lein accept all of :licence {...}, :license {...}, :licences [{...} ...] and :licenses [{:...} ...] to specify licences? :-P

19:03 Lajla: Oh, does Clojure have continuations by the way?

19:03 hiredman: nope

19:03 mmarczyk: hiredman: really? (that's about alpha)

19:03 hiredman: despite the established meaning of alpha in lambda calculus, I mean?

19:04 Lajla: mmarczyk, I think Alan Kay says that (+ 1 2) is his vision of passing two messages to '+'

19:04 hiredman: mmarczyk: I am pretty sure it was called alpha

19:04 Lajla: And object.method(); in javascript is not.

19:04 mmarczyk: Lajla: nor does it have general tail call elimination

19:04 hiredman: clojurebot:?

19:04 Lajla: mmarczyk, I read so, must use recur.

19:04 But I don't use proper tail recursion that often, I'm more a fan of map to be honest.

19:05 It works better assuming your code is side-effect free.

19:05 mmarczyk: hiredman: interesting, thanks

19:06 hiredman: clojurebot: ?

19:07 ping?

19:07 ping?

19:07 clojurebot: PONG!

19:07 hiredman: clojurebot: history of lisp?

19:07 clojurebot: Lisp isn't a language, it's a building material.

19:07 hiredman: clojurebot: evolution of lisp?

19:07 clojurebot: lisp is the red pill

19:07 hiredman: hmmm

19:15 alexyk_: ninjudd: hmm, so it creates a Clojure map class when loaded back from Java?

19:22 ninjudd: alexyk: the map or set is created when the field is accessed in clojure

19:31 tcrayford: Lajla: you can get continuations in clojure using the cont-m monad if you want

19:33 alexyk: ninjudd: I wonder, if I were to implement it in Scala to read the map as a Scala Map type, would it make sense to use the Java above which imports clojure.lang.* and extends APersistentMap?

19:33 mmarczyk: that's not quite the same thing though :-(

19:33 (that was about cont-m)

19:34 alexyk: i.e. I'd have to implement a Scala-specific way to make PersistentProtocolBufferMap right?

19:34 ninjudd: alexyk: no, that wouldn't make sense, but you can look at the code to see how i read the options from the java message

19:35 alexyk: ninjudd: OK, interesting project :)

19:36 mmarczyk: technomancy: I've sent you a pull request for the pom stuff for lein

19:37 Plouj: I guess that a number of you uses emacs for Java as well as clojure programming. My question is what do you use for looking up method definitions other than *TAGS, which are a pain because you have to manually update them.

19:39 mmarczyk: Lajla: re: your (?) SO question on Scheme for Web stuff, have you been dissatisfied with the PLT framework?

19:50 alexyk: what's the absolutely blazingly fastest way to convert a clojure map to JSON?

19:53 lancepantz: how'd you compare using clj-json vs protobuf for TC values?

19:53 lancepantz: i think that clj-json took 2x longer than protobuf

19:54 let me dig up the benchmark

19:54 alexyk: lancepantz: I can live with that! is it your dog on github? :)

19:54 lancepantz: ofcourse you lose appends

19:55 Lajla: mmarczyk, what I in the end just want is not a framework, but some configuation on the server to run .scm files, the same way an instalation of php does.

19:55 alexyk: lancepantz: I'm thinking of a quick way to interop with Scala, and for Scala I'd have to write protobuf bindings.

19:56 * alexyk thinks that Siskind should apply Stalin compiler to Clojure to produce Stalinjure

19:56 lancepantz: actually closer than that http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking

19:56 sexpbot: "Benchmarking - thrift-protobuf-compare - Project Hosting on Google Code"

19:57 alexyk: lancepantz: ah yes, that's what I've googled earlier :)

19:57 funny that there's a Scala Avro binding similar to Protobufs. No Avro for Clojure nor protobuf for Scala.

19:58 good ol' JSON is all what remains to talk

19:59 ninjudd: alexy: you don't have to write a scala wrapper for protobufs, you can just use the Java implementation directly, right?

19:59 alexyk: ninjudd: true, but I have to create a Map

19:59 mmarczyk: Lajla: perhaps the PLT docs could help you with that?

20:00 alexyk: ninjudd: and looks like it means understanding Def and etc.

20:00 * alexyk thinks that one of and etc should go

20:00 ninjudd: alexyk: why exactly do you want to interop with scala?

20:00 mmarczyk: Lajla: if not, they might well be willing to provide guidance if you post to their list

20:00 alexyk: ninjudd: 'cause it'll walk my graph faster! :)

20:01 ninjudd: alexyk: what makes you think that?

20:01 mmarczyk: Lajla: there's Eli Barzilay on SO, of course, so maybe he'll answer at some point, but I'd still expect their own mailing list to be the place where you're likely to get the best answers

20:01 alexyk: I want to try to feed the same graph to Scala. The algorithm translates almost literally, as any clojure will to Map and Array. ninjudd: prior Scala experience.

20:02 have to try at least

20:02 not to let my Scala rust too much

20:02 plus a recruiter found me on Github and said, ah! Scala! So many opportunities for you! :)

20:03 * ninjudd is not a huge fan of scala.

20:03 alexyk: although I have more Clojure now

20:03 ninjudd: I like both, gotta try both

20:03 ninjudd: what exactly do you like about scala?

20:03 mmarczyk: Lajla: incidentally, I do think that both Clojure and Haskell can be eye-opening to a Schemer is some ways, they certainly were to me... but I gather that PLT can be very fun to work with in Web contexts (something I've never tried personally), so if you'd rather use Scheme, try and see if it works for you

20:04 Lajla: mmarczyk, well, I wouldn't use PLT then except for maybe some sxml->xml pretty printer I guess.

20:05 But I couldn't find it in the docs.

20:05 alexyk: ninjudd: gotta go for now, will tell you whan I'm back! :)

20:05 Lajla: They just explained how to build a blog, not how to install it and run .scm files.

20:05 ninjudd: alexy: is it the lack of persistent data structures? or the awesome, java-like syntax?

20:05 mmarczyk: Lajla: that's why I think it could be useful to them if you pointed out the deficiencies in their docs

20:06 alexyk: ninjudd: the types and lack of the damn NPE :) later

20:09 ninjudd: did I miss some awesome anti-Scala arguments? :)

20:10 ninjudd: no, i was just going to say that NullPointerExceptions aren't really the language's fault

20:10 alexyk: ninjudd: Scala is full of immutable structures and you can basically take any clojure without macros and replace vector with Array and map with Map and have a thing which is compiled the heck out of

20:11 makes me curious to try and compare, my algorithm is just 200 lines of clojure anyway

20:12 ninjudd: yeah, NPE is a fault of the author, but static things like OCaml/Scala will force you to use Option. I have an NPE if a number becomes nil for any reason in an arithmetic operation! (+ x y) => NPE. Gimme a break!

20:12 Lajla: mmarczyk, but I'm very selfish. =(

20:13 Hodapp: I thought about learning OCaml once, but then I went out drinking instead.

20:13 alexyk: ninjudd: I prefer clojure for my current work, clearly, but there's lots of libraries in Scala I want to use too so I kind of prefer to use both

20:14 ninjudd: alexyk: what should (+ nil 10) return?

20:14 alexyk: Hodapp: that applies to Haskell rather than OCaml :)

20:14 mmarczyk: Lajla: collect what you deserve then ;-)

20:14 Hodapp: It looks like an interesting language, and apparently can get compiled code as fast as C/C++, but I dunno if I want to learn it.

20:14 ninjudd: Hodapp: are you somehow listening the the conversation in our office right now?

20:14 alexyk: ninjudd: something nasty saying "it's not a number, you idiot!" :)

20:14 Hodapp: ninjudd: Yes.

20:14 alexyk: but not an NPE like anything else!

20:15 ninjudd: Hodapp: we were just talking about writing an LLVM compiler for clojure in OCaml

20:15 Hodapp: AHHH

20:15 * Hodapp sweeps up the buzzwords

20:16 alexyk: ninjudd: that's Dr Harrop's domain!

20:16 lancepantz: we were talking about it in our scrum

20:16 Lajla: Hodapp, Ocaml can, or Haskell?

20:16 Hodapp: ninjudd: Ocaml does seem to be a choice for applications like that which have a certain formal strictness to them, like theorem provers.

20:16 Lajla: Ocaml. Haskell, maybe.

20:17 Lajla: Hodapp, isn't OCaml slower than Haskell?

20:17 I mean, Haskell is lazy and all.

20:17 Hodapp: Lajla: Compiled Ocaml, as I understand it, can match the performance of C due to how much can be optimized out in compilation.

20:17 ninjudd: alexyk: who's Dr. Harrop?

20:17 mmarczyk: Lajla: OCaml has to be one of the most performant languages out there, at least for single-threaded programmes

20:17 alexyk: ocaml is good

20:18 mmarczyk: Hodapp: make the "match" an "exceed"

20:18 Lajla: Hodapp, I though OCaml went to 1/2 of C's performance.

20:18 alexyk: ninjudd: a language legend :)

20:18 Hodapp: mmarczyk: Got a citation on that?

20:18 Lajla: Ocaml, if I remember right, can be interpreted, bytecode-compiled, or compiled to machine language, so it really depends what you're doing.

20:19 mmarczyk: oh bother, I'll look around

20:19 Lajla: Hodapp, that is true, but any language can in theory.

20:19 You mean that OCaml as an implementation suports it?

20:19 Hodapp: Lajla: I am not talking about "in theory".

20:19 Lajla: I'm still kind of partial to Brainfuck.NET though for my site.

20:20 Hodapp: fuck all those things that have ".NET" in their name

20:20 ninjudd: alexyk: oh, i though maybe you misspelled Hodapp

20:21 mmarczyk: Hodapp: I'll rummage around my link list, but the most interesting thing I read was on the OCaml compiler being able to prove that no aliasing will occur and guarantee correctness of some transformations which a C(++) compiler wouldn't dare apply

20:21 alexyk: ninjudd: ho, Harrop is unique

20:21 mmarczyk: Hodapp: rather like Fortran, coming to think of it

20:21 Lajla: Hodapp, but this is BRAINFUCK dot net

20:22 F# seems to be a good example of EEE though.

20:22 alexyk: ocaml makes millions on Wall St, while Haskell makes millions go drinking instead of learning it :)

20:22 mmarczyk: alexyk: :-D

20:22 alexyk: F# is ocaml on .net + .net objects

20:23 mmarczyk: well, I'm not sure that's entirely fair, apparently F# has some sort of monadic comprehension syntax borrowing ideas from Haskell... um... but I better stop now, since I don't know what I'm talking about here

20:23 Hodapp: mmarczyk: Let me dig up an interesting article on Scheme that I found that pertains to its strictness permitting some optimizations that would never have flown in C/C++...

20:24 mmarczyk: http://www.cs.indiana.edu/~jsobel/c455-c511.updated.txt

20:25 mmarczyk: Hodapp: if "permit" here means "makes theoretically possible", than that's different to an OCaml compiler actually being known to produce exceptionally good results

20:25 Hodapp: but thanks for the link

20:25 (incidentally, Chez Scheme is supposedly blazing fast... I'd really want to play with the compiler some day :-()

20:26 islon: someone call help me with this exception? I cant figure it out http://pastebin.com/nbxL5XGv

20:26 Hodapp: mmarczyk: I noted down a couple links... things like Gambit-C maybe... which basically just took Scheme/Lisp code and beat the living hell out of it for several hours before emerging with a ridiculously fast implementation.

20:28 mmarczyk: Hodapp: sounds like fun :-)

20:28 Hodapp: maybe.

20:29 Lajla: mmarczyk, well, that is the EEE strategy.

20:29 You basically extend an open standard with some proprietary elements so that people have no reason to use the open standard as the properietary standard has all that, plus more.

20:29 ataggart: Hodapp: I have no idea, but I'd advise against the way you're using refs on each stat

20:30 * Hodapp looks at ataggart

20:30 mmarczyk: Lajla: are you referring to Chez Scheme?

20:30 Hodapp: ataggart: what?

20:30 ataggart: erm

20:30 lol, not you

20:30 islon

20:30 Lajla: mmarczyk, no, to F#, and well, most .NET things.

20:30 Hodapp: screw .NET

20:30 Lajla: Hodapp, can I go first?

20:30 mmarczyk: Lajla: I'm not sure

20:30 Hodapp: sure.

20:31 islon: ataggart, yeap?

20:31 mmarczyk: Lajla: it makes sense for F# to be different from Haskell

20:31 Lajla: What I've always found intereting is that censors do not allow 'fsck' but do allow 'screw' even though they mean the exact same thing, and the latter from the word implies a more bestial approach to same.

20:31 mmarczyk, well, F# is more OCaml than Haskel.

20:31 But brainfuck.NET is still awesome.

20:31 mmarczyk: Lajla: it probably also makes sense for F# to be different from OCaml

20:31 Lajla: Next Whitespace.NET and Malbolge.NET

20:32 mmarczyk: but anyway, F# seemed pretty open to me

20:32 Lajla: mmarczyk, maybe, but not to be properietary.

20:32 Is it?

20:32 Let me look it up

20:32 Raynes: Meh, I like Haskell.

20:32 Lajla: "Microsoft Research Shared Source license agreement ("MSR-SSLA")"

20:32 THis sounds so cryptic it has got to be evil.

20:32 mmarczyk: except Mono is probably not good enough to be a viable open platform for .NET apps in general

20:33 Raynes: I take great pride in the fact that Clojurers aren't as vocal about how they think Clojure is better than Haskell as some Haskellers appear to be the other way around.

20:33 mmarczyk: (yet? hopefully...)

20:33 Raynes: oh? which Haskellers do you have in mind?

20:33 Lajla: What I find really interesting is that over 60% of the .NET developers apparently use Basic as their _only_ language.

20:33 mmarczyk, twey.

20:34 Raynes: mmarczyk: No couple in particular. I've heard many a discussion about how much better Haskell is over Lisp in #haskell and -blah.

20:34 Lajla: He's in Finnish, he thinks lisp is a toy and Haskell is a language, but he'sreally cute and British

20:34 * Lajla is in #haskell, usually.

20:34 Lajla: Just saying 'I saw a bracket' every time they used one.

20:34 Raynes: Peaker is one.

20:35 mmarczyk: Raynes: well you have to feel for them, struggling with that terrible syntax all the time... *akhem*

20:35 Raynes: That's the extent of my finger pointing *cough*Norman Ramsey*cough* though.

20:36 http://stackoverflow.com/questions/355314/clojure-vs-haskell-for-web-applications/355511#355511

20:36 sexpbot: "Clojure vs Haskell for web applications? - Stack Overflow"

20:36 Raynes: "Compared with Paul Hudak, John Hughes, Simon Peyton Jones, and Phil Wadler, Rich Hickey is chopped liver :-) – Norman Ramsey Mar 24 '09 at 23:00"

20:37 Lajla: Haskell is really not a good language for outputting large quantities of strings is my guess.

20:37 SXML is pretty handy in the end.

20:37 mmarczyk: Raynes: ah, I read that

20:37 not a very nice comment, but the answer was fair enough I think

20:37 not that I necessarily agree

20:37 Raynes: He went very low in that comment.

20:38 mmarczyk: I'm taking into account the date on that answer, too, I'd be more critical if he posted it today

20:40 MadWombat: any here worked with the appengine-clj library?

20:40 *anyone

20:41 Lajla: MadWombat, it's quite grammatical, in fact, poetic.

20:41 MadWombat: Lajla: my typo or the appengine library?

20:41 ataggart: islon: you're overwriting the defstruct player with def player

20:42 Lajla: MadWombat, the any in lieu of anyone.

20:42 mmarczyk: well, agreed on the comment, anyway, which is all the more unfortunate given the fact that the people he mentions really are great language researchers, very interesting to read...

20:43 islon: ataggart, and how I am supposed to create new players?

20:43 ataggart: however you want, just don't step on the same name

20:46 islon: ataggart, damn! i got it... how stupid of me... thanks

20:46 ataggart: np

20:48 mmarczyk: Hodapp: thanks a lot for that link, it's a really cool read :-)

20:53 http://scienceblogs.com/goodmath/2006/11/the_c_is_efficient_language_fa.php -- I find that pretty interesting

20:53 sexpbot: "The "C is Efficient" Language Fallacy : Good Math, Bad Math"

20:54 mmarczyk: I'm prepared to believe that some hand-guidance to the C compiler could have saved the day, but it's so much better to not have to do it...

20:57 bmason: anyone else had success parsing a multipart MIME body with Ring/Compojure?

20:58 Hodapp: mmarczyk: Glad you like it :)

20:58 ooh, I am gonna have to read that

20:59 mmarczyk: http://lambda-the-ultimate.org/node/2720#comment-40687 -- that's interesting too

20:59 sexpbot: "Languages best suited for scientific computing? | Lambda the Ultimate"

20:59 mmarczyk: in that it shows how to do better in C++

21:52 Lajla: mmarczyk, will you hold my hand if I mail the guys at PLT?

21:55 mmarczyk: :-)

21:55 Lajla: sure

21:55 Lajla: mmarczyk, just tell me how to start?

21:55 mmarczyk: though I can't say I know my way around their platform

21:56 Lajla: I take it they won't accept Finnish?

21:56 Hmm, what if they have a policy of activating a worm in your PLT installation if your mail displeases them or they find it stupid?

21:56 mmarczyk: oh, I think they've got one in there which activates itself if you fail to submit an experience report

21:57 I'd go and look for plt mailing list archives first, maybe you'll be able to find some answers before even writing anything that way

21:58 and then, well, you had a nice and reasonable list of wants on SO

21:59 http://groups.google.com/group/plt-scheme -- there's even a Google group interface

21:59 sexpbot: "PLT Scheme | Google Groups"

22:01 mmarczyk: quite a lot of hits for "xml" plus a fair number for "unicode"

22:02 from a glance at the answers, plt defaults to utf-8 when doing stuff with strings...

22:05 apparently there's some useful stuff if you search for "script" too

22:05 ober2: Could not locate clojure/contrib/str_utils__init.class or clojure/contrib/str_utils.clj on classpath:


22:05 unf

22:15 Lajla: mmarczyk, yeah, that's what I'm afraid of, that I misread their site and they'll go kill my family to convince me of their righteousness.

22:21 technomancy: ninjudd: ping?

22:21 ninjudd: technomancy: yo

22:21 technomancy: ninjudd: got some time to discuss hooks in the #leiningen channel?

22:22 ninjudd: technomancy: about 10 minutes, then i have to head to the airport

22:36 mmarczyk: Lajla: oh, I think they'll settle for a week of having elephants trample on you, then they'll be happy to provide pointers for the future

22:43 Lajla: mmarczyk,hmm, that is sufficiently less discipline than my loving mother provided.

22:46 mmarczyk, do you already consider me the greatest programming alive second only to Microsoft's chief software architect?

22:55 TheBusby: Hahaha, I'll have to remember that line "the greatest programming alive second only to Microsoft's chief software architect"

22:58 Lajla: TheBusby, http://upload.wikimedia.org/wikipedia/commons/2/2a/Bill_Gates_in_WEF_,2007.jpg he is quite cute though.

22:59 TheBusby, are you the greatest programmer alive second only to Lajla and Microsoft's Chief Software cutie?

23:00 TheBusby: I think "being the greatest programmer" would be like being the "fastest runner"

23:01 do you mean for 100m, relay, marathon, etc?

23:01 reminds me of old men in a barber shop arguing over who was the better boxer in their day

23:03 Lajla: TheBusby, what if I'm the best at all?

23:03 Safe for the MCSC of course.

23:05 TheBusby: I don't have any hard evidence, but in my personal experience I've noted that people with MCSE (or various IT certifications) are usually more likely not to know what they're doing. At least in the Silicon Valley, people with the skills and the experience rarely have certs to back them up.

23:10 Lajla: TheBusby, from studying physics and maths, I noted that almost all people that were smart enough to see the farce that it was quit.

23:10 Yeh seriously, infinitesimal, get real.

23:11 I was basically trying to explain Rice's theorem to some IT diplomated people recently.

23:11 I had troubles explaining to them that floats are really just natural numbers and 'float addition' is in fact no addition at all but just a bizarre function.

23:11 TheBusby: er, I didn't mean University degrees, but things like MCSE, Cisco Certs, A+ Computer certs, etc.

23:12 Lajla: TheBusby, ah, thatś even worse.

23:12 It just means that I'm one level above you.

23:12 Cisco providing certificates is a huge conflict of interest.

23:12 They want as many as possible of course.

23:13 arohner: is there a way to get the list of fields from a deftype / defrecord, without instantiating it?

23:14 the java introspection also returns a bunch of const__1 , const__2, const__3 crap in addition to the actual fields

23:15 technomancy: http://github.com/technomancy/leiningen/tree/hooks

23:16 Lajla: arohner, they never told you to not interupt when some-one is gloating with narcissism?

23:16 mmarczyk: technomancy: cool!

23:16 I mean, it's cool to see the correct readme again

23:17 let's have a look at the hooks now

23:17 technomancy: mmarczyk: the readme's still busted on the master branch

23:17 so get your github trade secrets while they last1

23:17 !

23:17 mmarczyk: awww

23:18 I think they might be faster to get their act together if you ping them to reset their cache

23:18 technomancy: I did give em a push in #github

23:18 mmarczyk: oh... oh well

23:34 defn: hmm, wonder why i cant use "cd" with (sh "cd")

23:35 lancepantz: defn: dir is an argument if i remember right

23:36 technomancy: defn: you can't change the working dir of the JVM

23:36 sad but true

23:37 defn: weak.. i wonder how pallet handles this with the shell scripting capability it claims

23:38 hugod: defn: shell scripts run in the shell..

23:39 lancepantz: are you in hawaii technomancy?

23:39 technomancy: lancepantz: yeah

23:40 defn: hugod: *chuckle*

23:40 lancepantz: must be nice :) i want to move there one day- actually never been

23:42 scottj: If a lein project depends on a and b and b depends on an older version of a, when you use a how do you know what version you'll get (and insure you'll get the one you depend on not the one b does)

23:42 tomoj: if your project explicitly depends on some version, you will get that version

23:43 otherwise there's some algorithm maven does, I think it's something like the shortest path back to your project wins

23:45 scottj: "the version used will be the closest one to your project in the tree of dependencies, eg. if dependencies for A, B, and C are defined as A -> B -> C -> D 2.0 and A -> E -> D 1.0, then D 1.0 will be used when building A because the path from A to D through E is shorter. You could explicitly add a dependency to D 2.0 in A to force the use of D 2.0"

23:46 scottj: tomoj: ok, is the a that b uses accessible via namespaces?

23:46 tomoj: http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Transitive_Dependencies

23:46 sexpbot: "Maven - Introduction to the Dependency Mechanism"

23:46 tomoj: you will only have access to one version of a

23:46 (..unless there's some weird way to get two versions)

23:47 anyway getting two versions of a clojure project would be Bad

23:59 arohner: tomoj: not running lein clean before lein deps downloads a new version can cause both jars to be on your classpath

23:59 tomoj: and yes, it's bad

Logging service provided by n01se.net