2010-05-19
| 00:12 | slyrus | evening folks |
| 00:19 | lancepantz | hi slyrus |
| 00:20 | lancepantz | better than downloading them manually :) |
| 00:20 | slyrus | not downloading so many things i didn't ask for would be my preference :) |
| 00:34 | johnmn3 | ,(read-string "(hi) (hi) (def hi (hello?))") |
| 00:34 | clojurebot | (hi) |
| 00:35 | johnmn3 | how would you go about making a function that instead returns all the objects? |
| 00:36 | johnmn3 | seems like you'd have to implement some reader logic |
| 00:39 | johnmn3 | unless read-string returned an index of the last OEF |
| 00:54 | defn | testing |
| 00:54 | defn | johnmn3: you could just parse the string for sexps, extract them as strings and read-string them |
| 00:55 | johnmn3 | found an easier way: (clojure.inspector/inspect-tree (read-string (str "(" (slurp "some.core.clj") ")"))) |
| 00:55 | johnmn3 | That way it takes it in as one big "object" |
| 01:22 | durka42 | has anyone tried to use penumbra and cantor together? |
| 02:11 | slyrus | d'oh! looks like slime HEAD and swank-clojure still don't play nice with each other. |
| 02:19 | slyrus | well, at least the Oct 31 swank still works... still, it would be nice if someone were to bring swank-clojure into 2010. |
| 02:33 | G0SUB | vIkSiT |
| 02:33 | vIkSiT | G0SUB |
| 02:34 | G0SUB | vIkSiT, how are you doing? |
| 02:34 | vIkSiT | not bad at all, thanks! how've you been? ltns |
| 02:34 | G0SUB | yeah, don't hang around on IRC that much these days. |
| 02:34 | G0SUB | vIkSiT, can I PM? |
| 02:35 | vIkSiT | sure |
| 03:41 | LauJensen | Morning all |
| 03:47 | spariev | morning |
| 03:49 | esj | Morning All |
| 03:50 | spariev | LauJensen: any updates on clojureql 2.0 status ? |
| 03: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 |
| 04: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 :) |
| 04:02 | LauJensen | I definitely recommend waiting :) 1.0 will be rock solid, which is why we're taking our time with the details |
| 04:19 | AWizzArd | ~seen hoeck |
| 04:19 | clojurebot | hoeck was last seen quiting IRC, 95 minutes ago |
| 04:31 | AWizzArd | ,*clojure-version* |
| 04:31 | clojurebot | {:interim true, :major 1, :minor 2, :incremental 0, :qualifier "master"} |
| 04:38 | defn | congrats to Raynes && Licenser on getting on HN for try-clojure.org |
| 05:17 | mmarczyk | LauJensen: morning |
| 05:17 | mmarczyk | LauJensen: you've got some missing imgs on pages 14 & 15 :-) |
| 05:17 | LauJensen | Good Morning :) |
| 05:18 | LauJensen | mmarczyk: Not so much missing, as just they never earned an avatar |
| 05:18 | LauJensen | They were my very firsts posts, before I found that plugin |
| 05: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 :-) |
| 05:18 | mmarczyk | despite, ouch |
| 05:19 | LauJensen | hehe, start blogging? Ive been blogging since september I think |
| 05:20 | LauJensen | But Im telling you guys, its the best living w/o a database. Everything can be poked and prodded from the command-line :] |
| 05:20 | mmarczyk | doin' well so far :-) |
| 05:20 | mmarczyk | and moving on to advanced thermal processing techniques already |
| 05:20 | mmarczyk | impressive |
| 05:20 | mmarczyk | "its the best living w/o a database" <- says the ClojureQL guy |
| 05:20 | mmarczyk | does this affect the credibility of the project, I wonder |
| 05: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 |
| 05:22 | mmarczyk | that sounds altogether reasonable to me :-) |
| 05:23 | mmarczyk | btw, I was meaning to ask |
| 05:23 | mmarczyk | you guys still use Clojuresque, right? |
| 05:23 | LauJensen | Yes sir |
| 05:23 | mmarczyk | um |
| 05:23 | mmarczyk | any chance of you converting to more civilised ways? :-P |
| 05:24 | LauJensen | mmarczyk: For the 1.0 release we are weighing all options, so whatever we decide to realease on will be optimal |
| 05:26 | LauJensen | mmarczyk: net fail, got my last line? |
| 05:26 | mmarczyk | yup, thanks |
| 05:27 | mmarczyk | it's just that that would be my one and only reason to touch Groovy |
| 05:27 | mmarczyk | I'd rather avoid that... |
| 05:28 | LauJensen | I understand, though I wouldn't fear learning new things, just question wether or not the pay-off is big enough |
| 05: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 |
| 05:30 | LauJensen | I see what you're saying |
| 05: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 ;-) |
| 05:31 | mmarczyk | but that's the personal part, the previous sentence was what I consider to be a reasonable argument |
| 05:31 | LauJensen | I'll throw it into the mix when we have our next build talk, which should be later today |
| 05:31 | mmarczyk | cool, thanks :-) |
| 08:29 | chouser | what's the right mime type for clojure code? |
| 08:29 | chouser | text/x-clojure? application/x-clojure? |
| 08:38 | neotyk | chouser: isn't it IANA that needs to approve registration, to have definitive answer ? |
| 08:46 | chouser | you can use an x-clojure subtype. the x- is for unregistered types. |
| 08:47 | chouser | I guess I'm mainly asking about text/ vs application/ |
| 08:49 | zakwilson | chouser: running file -i on source files in several languages I have lying around suggests that text is preferable for source code. |
| 08:51 | wthidden | I have an issue with using await within an agent action. I get a Can't await in agent action. |
| 08:51 | wthidden | Why is this not possible? |
| 08:52 | AWizzArd | wthidden: why can't you do that? |
| 08:52 | AWizzArd | What good would await be if it were only for agents that currently have no jobs in their queue? |
| 08:53 | wthidden | hmm I think I'm confused then. |
| 08:53 | AWizzArd | await will stop your current thread until the agent finished its work |
| 08:54 | wthidden | Yes that is what I want |
| 08:54 | AWizzArd | Then await is your friend (: |
| 08:54 | wthidden | but its not being very friendly to me right now. |
| 08:55 | AWizzArd | Please specify it further. |
| 08:55 | wthidden | so I have fn1 that create 2 or 3 agents that run fn2. |
| 08:55 | wthidden | then I await for the agents to complete. |
| 08:55 | wthidden | when I hit the await i get the Can't await in agent action. |
| 08:55 | AWizzArd | chouser: it should be application/clojure imo |
| 08:56 | wthidden | Note also that fn1 is also an agent action. |
| 08:57 | chouser | await is not allowed in agents actions because if it were there would be a very real possibility for deadlock |
| 08:58 | AWizzArd | wthidden: inside an agent action you try to await which... what chouser said |
| 08:58 | AWizzArd | wthidden: could you maybe run fn2 in a future? |
| 08:58 | chouser | wthidden: perhaps 'future' would fit better than agents? |
| 08:58 | AWizzArd | derefing futures will block your code too |
| 08:58 | chouser | just like 'await' does |
| 08:59 | wthidden | will all my futures run in parallel? |
| 08:59 | chouser | wthidden: yes |
| 08:59 | wthidden | so if i did: |
| 08:59 | wthidden | (map #(future %) list-of-fns) |
| 09:00 | AWizzArd | ,(time (let [a (future (do (Thread/sleep 1000) 1)), b (future (do (Thread/sleep 1000) 2))] [@a @b])) |
| 09:00 | clojurebot | [1 2] |
| 09:00 | clojurebot | "Elapsed time: 1002.653 msecs" |
| 09:00 | wthidden | that would kick off as many threads as there are items in list-of-fns? |
| 09:01 | chouser | wthidden: well, map is lazy and 'future' takes a block of code not a fn. But other than that, yes. :-) |
| 09:01 | chouser | (doall (map future-call list-of-no-arg-fns)) would run them all in parallel |
| 09:01 | chouser | though for something like that you might consider pmap |
| 09:02 | AWizzArd | or (doseq [job jobs] (future-call job)) |
| 09:02 | wthidden | right.. |
| 09:02 | chouser | AWizzArd: why "application" instead of "text"? It is human readable text, after all, with an encoding and everything. |
| 09:02 | wthidden | ok... let me try that then... |
| 09:03 | wthidden | hmm then where would I be blocking? |
| 09:03 | chouser | when you deref those futures. |
| 09:05 | chouser | ,(time (vec (map deref (doall (map future-call (repeat 5 #(do (Thread/sleep 1000) (rand-int 100)))))))) |
| 09:05 | clojurebot | [93 20 45 29 97] |
| 09:05 | clojurebot | "Elapsed time: 1003.494 msecs" |
| 09:06 | wthidden | chouser: I see... thanks |
| 09:06 | wooby | chouser, i'd go with text, if you're interested in browsers displaying it |
| 09:07 | chouser | wooby: hm, good point. |
| 09:07 | wooby | with something like text/clojure people could get their browser to open it in emacs or whatever, if desired |
| 09:08 | zakwilson | AWizzArd: that doesn't seem to hold true when the number of futures exceeds the size of the thread pool. |
| 09:08 | zakwilson | At a trivial example: (pmap #(do (Thread/sleep 1000) %) (take 100 (iterate inc 1))) |
| 09:08 | chouser | futures use the 'send-off' pool which isn't bounded. |
| 09:08 | chouser | pmap uses the bounded 'send' pool |
| 09:09 | zakwilson | I thought pmap worked by creating futures |
| 09:10 | chouser | zakwilson: hm... you're right. but pmap imposes its own limit, only doing availableProcessors+2 items at a time |
| 09:11 | AWizzArd | chouser: it also is application/json |
| 09:11 | AWizzArd | zakwilson: right |
| 09:11 | AWizzArd | and I think futures now use the same pool that agents use |
| 09:12 | AWizzArd | or, the send-off pool that is |
| 09:12 | AWizzArd | Anyway, we have some cores already, and the high hundreds are coming. |
| 09:13 | AWizzArd | In the 2030ies one cpu will hold billions of cores. So, nothing we need to be careful with :) |
| 09:13 | Hodapp | I'd prefer something more like GPUs because I've found that contains more power that actually can be leveraged. |
| 09:14 | AWizzArd | though they are not really general enough today |
| 09:14 | zakwilson | I'm really wishing for more cores now. I'm running code that's very CPU-intensive and fully parallel. |
| 09:14 | AWizzArd | cpu and gpu will melt |
| 09:14 | AWizzArd | zakwilson: a quad-slot board + 4x AMD Magny Cours ==> 48 cores. |
| 09:15 | Hodapp | zakwilson: There are multiple types of parallel. |
| 09:15 | zakwilson | And costs several thousand dollars more than I have lying around. |
| 09:15 | zakwilson | But yes, such a machine would be perfect for what I'm doing. |
| 09:15 | AWizzArd | zakwilson: sure, but soon they will become mainstream |
| 09:15 | Hodapp | "soon they will become mainstream"... where have I heard that before? |
| 09: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. |
| 09:16 | AWizzArd | for 1000$ I forgot |
| 09: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. |
| 09:17 | zakwilson | s/he/AWizzArd |
| 09:17 | AWizzArd | A 15 million dollar supercomputer from 1990 could do a few gigaflops |
| 09:17 | AWizzArd | today a common amd/intel cpu can do 2-5 times more, and will cost 100-1000 |
| 09:18 | AWizzArd | the factor of 1000 per decade is very conservative (Ray Kurzweil). See also http://en.wikipedia.org/wiki/Flops#Hardware_costs |
| 09:18 | sexpbot | "FLOPS - Wikipedia, the free encyclopedia" |
| 09: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 |
| 09:21 | sexpbot | "YouTube - Self-Improving Artificial Intelligence" |
| 09:21 | vu3rdd | AWizzArd: heard of Tilera? |
| 09:22 | Hodapp | AWizzArd: Claims such as that almost always have to be taken with a grain of salt. |
| 09:22 | Hodapp | AWizzArd: Every year, some new exciting technology is demonstrated that will supposedly revolutionize everything. |
| 09:22 | AWizzArd | vu3rdd: no |
| 09:23 | Hodapp | vu3rdd: That's the CPU name I was trying to remember... |
| 09:23 | vu3rdd | http://www.tilera.com/ |
| 09:23 | sexpbot | "Tilera Corporation" |
| 09:23 | Hodapp | kept thinking "Tileron" or something |
| 09:23 | vu3rdd | have a look. I think this is definitely the future. |
| 09:23 | vu3rdd | It is a mesh-like architecture, instead of the traditional intel like approach which is doomed to fail |
| 09: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. |
| 09:24 | AWizzArd | vu3rdd: okay thanks, I will have a look at this |
| 09:24 | vu3rdd | and this is real. There are products working with this processors right now |
| 09:24 | Hodapp | AWizzArd: What you're saying fails to distinguish this from anything else. |
| 09:24 | AWizzArd | Hodapp: not really, because we don't have such a successful track record for anything else. |
| 09:25 | Hodapp | AWizzArd: Yeah, we do. I've read the articles. |
| 09:25 | zakwilson | What ISA are the Tilera chips? |
| 09:25 | vu3rdd | propreitary |
| 09:25 | vu3rdd | But they have gcc/linux-SMP working |
| 09:26 | Hodapp | fork or mainline kernel? |
| 09:26 | Hodapp | zakwilson: x86 is almost always a step in the wrong direction, and strictly speaking, not a whole lot less proprietary |
| 09:27 | zakwilson | Did I say x86? |
| 09:28 | Hodapp | zakwilson: No, but I did. Most things are an improvement over it. |
| 09:28 | AWizzArd | vu3rdd: yes, that looks nice, 100 cores à 1.5 GHz on 55 watts during full load sounds impressive. |
| 09:29 | AWizzArd | 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. |
| 09:30 | AWizzArd | but sure, they can be wrong |
| 09:31 | zakwilson | Having more ISAs around has been a bad thing for software diversity in general. Maybe the LLVM will fix that. |
| 09: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. |
| 09:32 | AWizzArd | ok |
| 09:33 | Hodapp | zakwilson: If it moves us away from x86 to something cleaner, I'm in favor of it. |
| 09:33 | zakwilson | Hodapp: I expect ARM to take over from x86 for general-purpose computing. |
| 09:33 | AWizzArd | zakwilson: because their efficiency, calculations per energy? |
| 09:34 | Hodapp | zakwilson: It's possible. |
| 09:34 | AWizzArd | +of |
| 09:34 | Hodapp | zakwilson: They already have the mobile and embedded market pretty strongly. |
| 09:34 | zakwilson | Mostly because of market forces, not anything technical. Anything more energy-efficient could win that fight in theory. |
| 09:35 | Hodapp | zakwilson: Market forces are also what create such massive inertia that keeps the winner "in theory" from being the winner in practice. |
| 09: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. |
| 09:36 | Hodapp | ARM-based laptops and netbooks have been promised for a couple years now, but few have actually been delivered |
| 09:36 | Hodapp | though I've been looking for affordable ones |
| 09:36 | AWizzArd | Interesting will be how/if they can break through the memory wall |
| 09:38 | zakwilson | Lenovo and HP are introducing ARM laptops in the netbook range that are thinner and lighter than most x86 offerings. |
| 09:38 | Hodapp | zakwilson: And the price? |
| 09:38 | zakwilson | Also in the netbook range |
| 09:38 | Hodapp | I thought Dell had some too but they were more expensive |
| 09:38 | zakwilson | so... $300-600 or so |
| 09:38 | Hodapp | Do they have any actually for sale yet? |
| 09:39 | rsynnott | there are challenges to making x86 as efficient per watt as ARM, of course |
| 09:40 | Hodapp | rsynnott: Like the fact that 75% of the transistors are being used for decoding that clusterfuck of an instruction set. |
| 09:40 | zakwilson | I don't think the major vendors have them for sale yet. |
| 09:40 | Hodapp | zakwilson: I am pretty sure Dell has one, or at least had one at one point |
| 09:40 | rsynnott | Hodapp: yep; that tends to be the issue for low-energy intel stuff |
| 09:41 | rsynnott | they could, presumably, make a chip which had the same core but a more sensible instruction set |
| 09:41 | rsynnott | but then they'd have to wait on the compiler vendors and so on |
| 09:41 | Hodapp | rsynnott: I don't see Intel trying that, especially after Itanium. |
| 09:42 | Hodapp | Itanium was quite a decent design, but perhaps put too big a burden on compilers that weren't up to the task. |
| 09:43 | chouser | I worked on an OS that ran on Alpha. We mocked the Itanium design. :-) |
| 09:43 | Hodapp | well, it was quite a decent design compared to most x86. |
| 09:46 | Hodapp | my friend found an Alpha in a hallway and got it running again |
| 09:46 | Hodapp | thing is a tank |
| 09: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 |
| 09:47 | Hodapp | wouldn't surprise me |
| 09:47 | zakwilson | I think it was also the first to hit 1000 mhz |
| 09:47 | Hodapp | also still killed Intel in floating-point performance |
| 09:47 | rsynnott | they tended to have a clock frequency advantage over any other general purpose processors at the time |
| 09:47 | rsynnott | *at any given time |
| 09:48 | Raynes | chouser: You have a confusing twitter. I did @chouser before realizing that it was @chrishouser. -.- |
| 09:48 | Hodapp | wasn't it still routed by hand which let them fine-tune some things better and get higher clocks? |
| 09:48 | chouser | Raynes: yeah, someone had @chouser before it had ever occured to me I'd have any use for twitter. |
| 09:48 | rsynnott | Hodapp: so I heard |
| 09:49 | Raynes | Sad. |
| 09:49 | Raynes | It appears that people already have nearly every possible permutation of the word "Rayne" imaginable. |
| 09:49 | eevar2 | time to change your nick then :p |
| 09:50 | Raynes | eevar: I've considered it, but nobody would know who I am. :( |
| 09:50 | Raynes | My nick has absolutely no association with my real name at all. |
| 09:50 | rsynnott | ('sinnott' is more common; my version was probably a spelling mistake on a birth cert) |
| 09:51 | Raynes | rsynnott: Your nick sounds a little like "astronaut". |
| 09:51 | AWizzArd | Anyone here on Linux who can tell me please: (str (java.io.File. "C:\\abc.txt")) |
| 09:51 | chouser | "C:\\abc.txt" |
| 09:51 | AWizzArd | ok |
| 09: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? |
| 09: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) |
| 09: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? |
| 09:58 | cemerick | powr-toc: yes; the system properties you pass to maven impact its process, but aren't automatically passed on to child processes |
| 09:59 | powr-toc | Cheers mate, I'll give it a try :-) |
| 09: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 | remleduff | ,(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 | remleduff | ,(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 | remleduff | 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 | AWizzArd | 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 | chouser | 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 | chouser | 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 | alexyk | clojure surely feels like the voice of some higher power |
| 10:36 | alexyk | or an enlightened one at least |
| 10:36 | alexyk | 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: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 | AWizzArd | "dunn key" "monn key" |
| 10:40 | AWizzArd | no, the other way around |
| 10:40 | AWizzArd | 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 | alexyk | 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 | arkahn | http://gist.github.com/406473 |
| 12:12 | arkahn | 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 | qbg | 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 | Licenser | 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 | Licenser | 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 | Licenser | 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 | Licenser | 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 | ataggart | roll your own |
| 12:59 | ataggart | erm |
| 12:59 | ataggart | 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 | Licenser | given the right regexps of cause |
| 13:00 | Licenser | (token-seq "123abc123" [[#"^\d+" :number] [#"^[a-z]+" :ident]]) -> ([:number "123"] [:ident "abc"] [:number "123"]) |
| 13:00 | Licenser | 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 | ataggart | ,(def m (re-matcher #"\d+" "+123+456+")) |
| 13:07 | clojurebot | DENIED |
| 13:07 | ataggart | bah |
| 13:07 | ataggart | anyway, run the above, then |
| 13:07 | ataggart | (.find m) |
| 13:07 | ataggart | then |
| 13:07 | ataggart | (.group m) |
| 13:07 | ataggart | the first result will be "123" |
| 13:07 | remleduff | Licenser: Can you use matcher.find repeatedly instead? |
| 13:07 | ataggart | yes |
| 13:08 | ataggart | you call find, then group |
| 13:08 | ataggart | repeatedly |
| 13:08 | ataggart | 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 | stilkov | 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 | stilkov | Interestingly, one of the Google hits was this old gist: http://gist.github.com/398271 |
| 13:42 | stilkov | 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 | technomancy | lein-swank is now bundled with swank-clojure |
| 13:43 | technomancy | 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 | technomancy | uh, brb; sorry |
| 13:47 | mmarczyk | um, how come |
| 13:47 | mmarczyk | Leiningen's readme now reads |
| 13:47 | mmarczyk | "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 | mmarczyk | I think I'll sue them for the ill effect the shock had on my health :-P |
| 14:04 | mmarczyk | 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 | stilkov | lein help works |
| 14:05 | stilkov | unfortunately, this version refuses to find my source files |
| 14:05 | stilkov | not a happy lein day for me |
| 14:06 | mmarczyk | how do you mean, refuses to find your source files? |
| 14:06 | mmarczyk | 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 | stilkov | I mean the one displayed here |
| 14:09 | stilkov | http://github.com/technomancy/leiningen |
| 14:09 | technomancy | stilkov: that's actually a github bug |
| 14:09 | technomancy | veeeeeery interesting! |
| 14:09 | stilkov | probably related to this: http://github.com/technomancy/leiningen/blob/master/README.md |
| 14:09 | stilkov | (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 | technomancy | 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 | tridd3ll | 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 | technomancy | 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 | tomoj | oh, didn't see your error |
| 14:24 | tomoj | dunno if manually turning on slime mode will help, then |
| 14:24 | tridd3ll | tomoj: no, that was it! |
| 14:24 | tridd3ll | 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 | tomoj | 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 | mmarczyk | 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 | technomancy | 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 | maxhodak | 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 | maxhodak | by counting up the items |
| 14:38 | maxhodak | and i can't for the life of me see the bug in my counting fn |
| 14:38 | maxhodak | http://gist.github.com/406656 |
| 14:38 | maxhodak | (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 | puredanger | 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 | mmarczyk | (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 | technomancy | 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 | nathanmarz | 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 | mmarczyk | 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 | nathanmarz | 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 | mmarczyk | I'll see which hook I put it into... |
| 15:19 | mmarczyk | slime-connected-hook, apparently |
| 15:19 | mmarczyk | 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 | mmarczyk | 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 | mmarczyk | otherwise, that's weird |
| 15:26 | mmarczyk | where did you get your slime from? |
| 15:27 | nathanmarz | i followed technomancy's various instructions |
| 15:27 | nathanmarz | 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 | mmarczyk | 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 | nathanmarz | 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 | mmarczyk | I'm not at all sure what's the (interactive) there for, so maybe try and see if it changes anything |
| 15:49 | mmarczyk | 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 | alexyk | 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 | ninjudd | alexyk: definitely would be less space efficient |
| 16:02 | alexyk | ninjudd: true, avoid hava cruft |
| 16:02 | alexyk | 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 | ninjudd | alexyk: the same would be true for clojure |
| 16:05 | alexyk | ninjudd: true, Scala pollutes the classes directory as much as Clojure :) |
| 16:07 | alexyk | 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 | alexyk | 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 | mmarczyk | 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 | Raynes | I'm curious as to what web app you're talking about. |
| 16:25 | Raynes | I certainly don't remember anything of the sort. |
| 16:25 | Raynes | 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 | jweiss | 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 | mmarczyk | well, maybe not mailing lists, but licences -- come on, no predefined licences anywhere :-( |
| 16:30 | mmarczyk | 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 | mmarczyk | etc., or should I not bother |
| 16:30 | mmarczyk | (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 | hamza | 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 | mmarczyk | 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 | mmarczyk | 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 | mmarczyk | technomancy: so I'm wondering if I should bloat pom.xml by including a couple of those |
| 17:29 | mmarczyk | 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 | technomancy | 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 | technomancy | 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 | mmarczyk | hm, well, whatever, but it complains at my repl about (ref 0) not being an IObj |
| 17:56 | mmarczyk | whereas (.resetMeta (ref 0) {:foo 1}) works |
| 18:00 | mmarczyk | (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 | hamza | ,(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 | hamza | that worked.. |
| 18:19 | Lajla | It comes down to, |
| 18:19 | Lajla | convince me, a Schemer, to learn Clojure. |
| 18:20 | Lajla | 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 | lancepantz | done. |
| 18:20 | lancepantz | :) |
| 18:20 | Lajla | Most Schemers are convinced by Java libraries these days? |
| 18:20 | Lajla | 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 | technomancy | will change your life |
| 18:21 | Lajla | technomancy, explain. |
| 18:21 | Lajla | 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 | technomancy | values are guaranteed to be stable |
| 18:22 | technomancy | 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 | technomancy | 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 | technomancy | 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 | powr-toc | 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 | ataggart | 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 | 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 | powr-toc | Lajla: I have a transcript of it somewhere hold on... |
| 18:35 | powr-toc | 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 | technomancy | it has a great approach to fault-tolerance |
| 18:38 | technomancy | 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 | technomancy | 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 | powr-toc | 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 | mmarczyk | 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 | Lajla | 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 | mmarczyk | 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 | mmarczyk | 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 | powr-toc | 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 | Lajla | 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 | powr-toc | (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 | mmarczyk | me too. :-) |
| 18:58 | Lajla | powr-toc, well, we use 'dialect of scheme' to signify a set of extensions I guess. |
| 18:58 | Lajla | That's what scheme ultimately was designed for, a framework to extend. |
| 18:58 | Lajla | 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 | mmarczyk | (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 | mmarczyk | 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 | Lajla | But I don't use proper tail recursion that often, I'm more a fan of map to be honest. |
| 19:05 | Lajla | It works better assuming your code is side-effect free. |
| 19:05 | mmarczyk | hiredman: interesting, thanks |
| 19:06 | hiredman | clojurebot: ? |
| 19:07 | hiredman | ping? |
| 19:07 | hiredman | 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 | mmarczyk | (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 | alexyk | 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 | lancepantz | 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 | 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 | alexyk | funny that there's a Scala Avro binding similar to Protobufs. No Avro for Clojure nor protobuf for Scala. |
| 19:58 | alexyk | 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 | 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 | alexyk | have to try at least |
| 20:02 | alexyk | not to let my Scala rust too much |
| 20:02 | alexyk | plus a recruiter found me on Github and said, ah! Scala! So many opportunities for you! :) |
| 20:03 | alexyk | although I have more Clojure now |
| 20:03 | alexyk | 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 | Lajla | 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 | alexyk | 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 | alexyk | makes me curious to try and compare, my algorithm is just 200 lines of clojure anyway |
| 20:12 | alexyk | 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: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 | Hodapp | Lajla: Ocaml. Haskell, maybe. |
| 20:17 | Lajla | Hodapp, isn't OCaml slower than Haskell? |
| 20:17 | Lajla | 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 | Hodapp | 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 | Lajla | 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 | Lajla | 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 | Hodapp | 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 | mmarczyk | Hodapp: but thanks for the link |
| 20:25 | mmarczyk | (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 | Lajla | 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 | mmarczyk | Lajla: are you referring to Chez Scheme? |
| 20:30 | Hodapp | ataggart: what? |
| 20:30 | ataggart | erm |
| 20:30 | ataggart | lol, not you |
| 20:30 | ataggart | 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 | Lajla | mmarczyk, well, F# is more OCaml than Haskel. |
| 20:31 | Lajla | 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 | Lajla | Is it? |
| 20:32 | Lajla | 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 | Lajla | 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 | mmarczyk | 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 | Lajla | 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 | 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 | Raynes | 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 | Lajla | SXML is pretty handy in the end. |
| 20:37 | mmarczyk | Raynes: ah, I read that |
| 20:37 | mmarczyk | not a very nice comment, but the answer was fair enough I think |
| 20:37 | mmarczyk | 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 | MadWombat | *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 | mmarczyk | 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 | Hodapp | 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 | mmarczyk | 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 | Lajla | 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 | mmarczyk | 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 | mmarczyk | and then, well, you had a nice and reasonable list of wants on SO |
| 21:59 | mmarczyk | 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 | mmarczyk | from a glance at the answers, plt defaults to utf-8 when doing stuff with strings... |
| 22:05 | mmarczyk | 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 | ober2 | |
| 22:05 | ober2 | 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 | Lajla | 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 | Lajla | 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 | TheBusby | do you mean for 100m, relay, marathon, etc? |
| 23:01 | TheBusby | 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 | Lajla | 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 | Lajla | Yeh seriously, infinitesimal, get real. |
| 23:11 | Lajla | I was basically trying to explain Rice's theorem to some IT diplomated people recently. |
| 23:11 | Lajla | 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 | Lajla | It just means that I'm one level above you. |
| 23:12 | Lajla | Cisco providing certificates is a huge conflict of interest. |
| 23:12 | Lajla | 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 | arohner | 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 | mmarczyk | I mean, it's cool to see the correct readme again |
| 23:17 | mmarczyk | let's have a look at the hooks now |
| 23:17 | technomancy | mmarczyk: the readme's still busted on the master branch |
| 23:17 | technomancy | so get your github trade secrets while they last1 |
| 23:17 | technomancy | ! |
| 23:17 | mmarczyk | awww |
| 23:18 | mmarczyk | 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 | technomancy | 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 | tomoj | otherwise there's some algorithm maven does, I think it's something like the shortest path back to your project wins |
| 23:45 | tomoj | 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 | tomoj | (..unless there's some weird way to get two versions) |
| 23:47 | tomoj | 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 | arohner | tomoj: and yes, it's bad |