#clojure logs

2010-05-19

00:12slyrusevening folks
00:19lancepantzhi slyrus
00:20lancepantzbetter than downloading them manually :)
00:20slyrusnot downloading so many things i didn't ask for would be my preference :)
00:34johnmn3,(read-string "(hi) (hi) (def hi (hello?))")
00:34clojurebot(hi)
00:35johnmn3how would you go about making a function that instead returns all the objects?
00:36johnmn3seems like you'd have to implement some reader logic
00:39johnmn3unless read-string returned an index of the last OEF
00:54defntesting
00:54defnjohnmn3: you could just parse the string for sexps, extract them as strings and read-string them
00:55johnmn3found an easier way: (clojure.inspector/inspect-tree (read-string (str "(" (slurp "some.core.clj") ")")))
00:55johnmn3That way it takes it in as one big "object"
01:22durka42has anyone tried to use penumbra and cantor together?
02:11slyrusd'oh! looks like slime HEAD and swank-clojure still don't play nice with each other.
02:19slyruswell, at least the Oct 31 swank still works... still, it would be nice if someone were to bring swank-clojure into 2010.
02:33G0SUBvIkSiT
02:33vIkSiTG0SUB
02:34G0SUBvIkSiT, how are you doing?
02:34vIkSiTnot bad at all, thanks! how've you been? ltns
02:34G0SUByeah, don't hang around on IRC that much these days.
02:34G0SUBvIkSiT, can I PM?
02:35vIkSiTsure
03:41LauJensenMorning all
03:47sparievmorning
03:49esjMorning All
03:50sparievLauJensen: any updates on clojureql 2.0 status ?
03:55LauJensenspariev: 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:01sparievLauJensen: 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:02LauJensenI definitely recommend waiting :) 1.0 will be rock solid, which is why we're taking our time with the details
04:19AWizzArd~seen hoeck
04:19clojurebothoeck was last seen quiting IRC, 95 minutes ago
04:31AWizzArd,*clojure-version*
04:31clojurebot{:interim true, :major 1, :minor 2, :incremental 0, :qualifier "master"}
04:38defncongrats to Raynes && Licenser on getting on HN for try-clojure.org
05:17mmarczykLauJensen: morning
05:17mmarczykLauJensen: you've got some missing imgs on pages 14 & 15 :-)
05:17LauJensenGood Morning :)
05:18LauJensenmmarczyk: Not so much missing, as just they never earned an avatar
05:18LauJensenThey were my very firsts posts, before I found that plugin
05:18mmarczykdispite 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:18mmarczykdespite, ouch
05:19LauJensenhehe, start blogging? Ive been blogging since september I think
05:20LauJensenBut Im telling you guys, its the best living w/o a database. Everything can be poked and prodded from the command-line :]
05:20mmarczykdoin' well so far :-)
05:20mmarczykand moving on to advanced thermal processing techniques already
05:20mmarczykimpressive
05:20mmarczyk"its the best living w/o a database" <- says the ClojureQL guy
05:20mmarczykdoes this affect the credibility of the project, I wonder
05:21LauJensenDatabases really have their place in the world, no doubt about it - But I question wether blogs are a correct place to use them
05:22mmarczykthat sounds altogether reasonable to me :-)
05:23mmarczykbtw, I was meaning to ask
05:23mmarczykyou guys still use Clojuresque, right?
05:23LauJensenYes sir
05:23mmarczykum
05:23mmarczykany chance of you converting to more civilised ways? :-P
05:24LauJensenmmarczyk: For the 1.0 release we are weighing all options, so whatever we decide to realease on will be optimal
05:26LauJensenmmarczyk: net fail, got my last line?
05:26mmarczykyup, thanks
05:27mmarczykit's just that that would be my one and only reason to touch Groovy
05:27mmarczykI'd rather avoid that...
05:28LauJensenI understand, though I wouldn't fear learning new things, just question wether or not the pay-off is big enough
05:29mmarczyk...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:30LauJensenI see what you're saying
05:30mmarczykplus 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:31mmarczykbut that's the personal part, the previous sentence was what I consider to be a reasonable argument
05:31LauJensenI'll throw it into the mix when we have our next build talk, which should be later today
05:31mmarczykcool, thanks :-)
08:29chouserwhat's the right mime type for clojure code?
08:29chousertext/x-clojure? application/x-clojure?
08:38neotykchouser: isn't it IANA that needs to approve registration, to have definitive answer ?
08:46chouseryou can use an x-clojure subtype. the x- is for unregistered types.
08:47chouserI guess I'm mainly asking about text/ vs application/
08:49zakwilsonchouser: running file -i on source files in several languages I have lying around suggests that text is preferable for source code.
08:51wthiddenI have an issue with using await within an agent action. I get a Can't await in agent action.
08:51wthiddenWhy is this not possible?
08:52AWizzArdwthidden: why can't you do that?
08:52AWizzArdWhat good would await be if it were only for agents that currently have no jobs in their queue?
08:53wthiddenhmm I think I'm confused then.
08:53AWizzArdawait will stop your current thread until the agent finished its work
08:54wthiddenYes that is what I want
08:54AWizzArdThen await is your friend (:
08:54wthiddenbut its not being very friendly to me right now.
08:55AWizzArdPlease specify it further.
08:55wthiddenso I have fn1 that create 2 or 3 agents that run fn2.
08:55wthiddenthen I await for the agents to complete.
08:55wthiddenwhen I hit the await i get the Can't await in agent action.
08:55AWizzArdchouser: it should be application/clojure imo
08:56wthiddenNote also that fn1 is also an agent action.
08:57chouserawait is not allowed in agents actions because if it were there would be a very real possibility for deadlock
08:58AWizzArdwthidden: inside an agent action you try to await which... what chouser said
08:58AWizzArdwthidden: could you maybe run fn2 in a future?
08:58chouserwthidden: perhaps 'future' would fit better than agents?
08:58AWizzArdderefing futures will block your code too
08:58chouserjust like 'await' does
08:59wthiddenwill all my futures run in parallel?
08:59chouserwthidden: yes
08:59wthiddenso if i did:
08:59wthidden(map #(future %) list-of-fns)
09:00AWizzArd,(time (let [a (future (do (Thread/sleep 1000) 1)), b (future (do (Thread/sleep 1000) 2))] [@a @b]))
09:00clojurebot[1 2]
09:00clojurebot"Elapsed time: 1002.653 msecs"
09:00wthiddenthat would kick off as many threads as there are items in list-of-fns?
09:01chouserwthidden: well, map is lazy and 'future' takes a block of code not a fn. But other than that, yes. :-)
09:01chouser(doall (map future-call list-of-no-arg-fns)) would run them all in parallel
09:01chouserthough for something like that you might consider pmap
09:02AWizzArdor (doseq [job jobs] (future-call job))
09:02wthiddenright..
09:02chouserAWizzArd: why "application" instead of "text"? It is human readable text, after all, with an encoding and everything.
09:02wthiddenok... let me try that then...
09:03wthiddenhmm then where would I be blocking?
09:03chouserwhen you deref those futures.
09:05chouser,(time (vec (map deref (doall (map future-call (repeat 5 #(do (Thread/sleep 1000) (rand-int 100))))))))
09:05clojurebot[93 20 45 29 97]
09:05clojurebot"Elapsed time: 1003.494 msecs"
09:06wthiddenchouser: I see... thanks
09:06woobychouser, i'd go with text, if you're interested in browsers displaying it
09:07chouserwooby: hm, good point.
09:07woobywith something like text/clojure people could get their browser to open it in emacs or whatever, if desired
09:08zakwilsonAWizzArd: that doesn't seem to hold true when the number of futures exceeds the size of the thread pool.
09:08zakwilsonAt a trivial example: (pmap #(do (Thread/sleep 1000) %) (take 100 (iterate inc 1)))
09:08chouserfutures use the 'send-off' pool which isn't bounded.
09:08chouserpmap uses the bounded 'send' pool
09:09zakwilsonI thought pmap worked by creating futures
09:10chouserzakwilson: hm... you're right. but pmap imposes its own limit, only doing availableProcessors+2 items at a time
09:11AWizzArdchouser: it also is application/json
09:11AWizzArdzakwilson: right
09:11AWizzArdand I think futures now use the same pool that agents use
09:12AWizzArdor, the send-off pool that is
09:12AWizzArdAnyway, we have some cores already, and the high hundreds are coming.
09:13AWizzArdIn the 2030ies one cpu will hold billions of cores. So, nothing we need to be careful with :)
09:13HodappI'd prefer something more like GPUs because I've found that contains more power that actually can be leveraged.
09:14AWizzArdthough they are not really general enough today
09:14zakwilsonI'm really wishing for more cores now. I'm running code that's very CPU-intensive and fully parallel.
09:14AWizzArdcpu and gpu will melt
09:14AWizzArdzakwilson: a quad-slot board + 4x AMD Magny Cours ==> 48 cores.
09:15Hodappzakwilson: There are multiple types of parallel.
09:15zakwilsonAnd costs several thousand dollars more than I have lying around.
09:15zakwilsonBut yes, such a machine would be perfect for what I'm doing.
09:15AWizzArdzakwilson: sure, but soon they will become mainstream
09:15Hodapp"soon they will become mainstream"... where have I heard that before?
09:16AWizzArdHodapp: 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:16AWizzArdfor 1000$ I forgot
09:16zakwilsonI 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:17zakwilsons/he/AWizzArd
09:17AWizzArdA 15 million dollar supercomputer from 1990 could do a few gigaflops
09:17AWizzArdtoday a common amd/intel cpu can do 2-5 times more, and will cost 100-1000
09:18AWizzArdthe factor of 1000 per decade is very conservative (Ray Kurzweil). See also http://en.wikipedia.org/wiki/Flops#Hardware_costs
09:18sexpbot"FLOPS - Wikipedia, the free encyclopedia"
09:21AWizzArdHodapp: 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&amp;fmt=22
09:21sexpbot"YouTube - Self-Improving Artificial Intelligence"
09:21vu3rddAWizzArd: heard of Tilera?
09:22HodappAWizzArd: Claims such as that almost always have to be taken with a grain of salt.
09:22HodappAWizzArd: Every year, some new exciting technology is demonstrated that will supposedly revolutionize everything.
09:22AWizzArdvu3rdd: no
09:23Hodappvu3rdd: That's the CPU name I was trying to remember...
09:23vu3rddhttp://www.tilera.com/
09:23sexpbot"Tilera Corporation"
09:23Hodappkept thinking "Tileron" or something
09:23vu3rddhave a look. I think this is definitely the future.
09:23vu3rddIt is a mesh-like architecture, instead of the traditional intel like approach which is doomed to fail
09:23AWizzArdHodapp: 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:24AWizzArdvu3rdd: okay thanks, I will have a look at this
09:24vu3rddand this is real. There are products working with this processors right now
09:24HodappAWizzArd: What you're saying fails to distinguish this from anything else.
09:24AWizzArdHodapp: not really, because we don't have such a successful track record for anything else.
09:25HodappAWizzArd: Yeah, we do. I've read the articles.
09:25zakwilsonWhat ISA are the Tilera chips?
09:25vu3rddpropreitary
09:25vu3rddBut they have gcc/linux-SMP working
09:26Hodappfork or mainline kernel?
09:26Hodappzakwilson: x86 is almost always a step in the wrong direction, and strictly speaking, not a whole lot less proprietary
09:27zakwilsonDid I say x86?
09:28Hodappzakwilson: No, but I did. Most things are an improvement over it.
09:28AWizzArdvu3rdd: yes, that looks nice, 100 cores à 1.5 GHz on 55 watts during full load sounds impressive.
09:29AWizzArdHodapp: 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:30AWizzArdbut sure, they can be wrong
09:31zakwilsonHaving more ISAs around has been a bad thing for software diversity in general. Maybe the LLVM will fix that.
09:31HodappAWizzArd: 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:32AWizzArdok
09:33Hodappzakwilson: If it moves us away from x86 to something cleaner, I'm in favor of it.
09:33zakwilsonHodapp: I expect ARM to take over from x86 for general-purpose computing.
09:33AWizzArdzakwilson: because their efficiency, calculations per energy?
09:34Hodappzakwilson: It's possible.
09:34AWizzArd+of
09:34Hodappzakwilson: They already have the mobile and embedded market pretty strongly.
09:34zakwilsonMostly because of market forces, not anything technical. Anything more energy-efficient could win that fight in theory.
09:35Hodappzakwilson: Market forces are also what create such massive inertia that keeps the winner "in theory" from being the winner in practice.
09:35zakwilsonBig 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:36HodappARM-based laptops and netbooks have been promised for a couple years now, but few have actually been delivered
09:36Hodappthough I've been looking for affordable ones
09:36AWizzArdInteresting will be how/if they can break through the memory wall
09:38zakwilsonLenovo and HP are introducing ARM laptops in the netbook range that are thinner and lighter than most x86 offerings.
09:38Hodappzakwilson: And the price?
09:38zakwilsonAlso in the netbook range
09:38HodappI thought Dell had some too but they were more expensive
09:38zakwilsonso... $300-600 or so
09:38HodappDo they have any actually for sale yet?
09:39rsynnottthere are challenges to making x86 as efficient per watt as ARM, of course
09:40Hodapprsynnott: Like the fact that 75% of the transistors are being used for decoding that clusterfuck of an instruction set.
09:40zakwilsonI don't think the major vendors have them for sale yet.
09:40Hodappzakwilson: I am pretty sure Dell has one, or at least had one at one point
09:40rsynnottHodapp: yep; that tends to be the issue for low-energy intel stuff
09:41rsynnottthey could, presumably, make a chip which had the same core but a more sensible instruction set
09:41rsynnottbut then they'd have to wait on the compiler vendors and so on
09:41Hodapprsynnott: I don't see Intel trying that, especially after Itanium.
09:42HodappItanium was quite a decent design, but perhaps put too big a burden on compilers that weren't up to the task.
09:43chouserI worked on an OS that ran on Alpha. We mocked the Itanium design. :-)
09:43Hodappwell, it was quite a decent design compared to most x86.
09:46Hodappmy friend found an Alpha in a hallway and got it running again
09:46Hodappthing is a tank
09:47AWizzArdI 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:47Hodappwouldn't surprise me
09:47zakwilsonI think it was also the first to hit 1000 mhz
09:47Hodappalso still killed Intel in floating-point performance
09:47rsynnottthey tended to have a clock frequency advantage over any other general purpose processors at the time
09:47rsynnott*at any given time
09:48Rayneschouser: You have a confusing twitter. I did @chouser before realizing that it was @chrishouser. -.-
09:48Hodappwasn't it still routed by hand which let them fine-tune some things better and get higher clocks?
09:48chouserRaynes: yeah, someone had @chouser before it had ever occured to me I'd have any use for twitter.
09:48rsynnottHodapp: so I heard
09:49RaynesSad.
09:49RaynesIt appears that people already have nearly every possible permutation of the word "Rayne" imaginable.
09:49eevar2time to change your nick then :p
09:50Rayneseevar: I've considered it, but nobody would know who I am. :(
09:50RaynesMy nick has absolutely no association with my real name at all.
09:50rsynnott('sinnott' is more common; my version was probably a spelling mistake on a birth cert)
09:51Raynesrsynnott: Your nick sounds a little like "astronaut".
09:51AWizzArdAnyone here on Linux who can tell me please: (str (java.io.File. "C:\\abc.txt"))
09:51chouser"C:\\abc.txt"
09:51AWizzArdok
09:53powr-tocdoes anyone know if its possible to pass properties or arguments from the command line into a script, run via a maven-clojure-plugin?
09:56cemerickpowr-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:58powr-toccemerick: 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:58cemerickpowr-toc: yes; the system properties you pass to maven impact its process, but aren't automatically passed on to child processes
09:59powr-tocCheers mate, I'll give it a try :-)
09:59cemerickeach clojure:run or java:exec, etc. is a separate forked process, not an intra-maven invocation
10:12remleduffGood 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:12remleduff,(let [*print-length* 1] (str '(1 2 3 4 5 6)))
10:12clojurebot"(1 2 3 4 5 6)"
10:12remleduffHmm, that didn't
10:13chouserbinding
10:13remleduff,(binding [*print-length* 1] (str '(1 2 3 4 5 6)))
10:13clojurebot"(1 ...)"
10:13chousernever noticed that. hm.
10:14remleduffAt first I thought it was correct, but I"m not sure anymore
10:14remleduff,(binding [*print-length* 1] (str (map inc '(1 2 3 4 5 6))))
10:14clojurebot"clojure.lang.LazySeq@387c1804"
10:14arkahnand point #2, why isn't it documented ; )
10:17remleduffWe 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:18remleduffIs 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:21chouserremleduff: that's a good question
10:21jowagClojurescript or Scriptjure? Conjure or Compojure? So many choices ...
10:22AWizzArdjowag: and there is also compojure-rest
10:23jowagOh
10:23AWizzArdA port from the Erlang Webmachine: http://webmachine.basho.com/
10:23sexpbot"Webmachine - software shaped like the Web"
10:24jowagI 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:24chouserremleduff: I don't think sufficient information is currently captured to do that
10:24AWizzArdjowag: when this gets more complicated you want sane behaviour of your server
10:25AWizzArdIf 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:25chousernow 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:26chouserjowag: you can rule out clojurescript for now
10:29jowagthank 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:30chouserscriptjure might be a reasonable choice -- clojure-like syntax with javascript semantics
10:31chousersome day clojurescript will live again, and it might then be a good choice esp. for apps with significant browser-side code.
10:33remleduff,(.getMethod print-method ((.dispatchFn print-method) '(1 2 3) nil))
10:33clojurebot#<core$fn__5681 clojure.core$fn__5681@d3d0d4>
10:33remleduffBut there's no metadata on that :(
10:33chouserright
10:33alexykis 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:34chouserremleduff: there could be with a tweak of the defmethod macro. I assume such a change isn't welcome before 1.2
10:34alexykchouser: you'd risk the ire of the fundamentalists, looks too much like scripture, and last time I checked you were somewhere in Midwest? :)
10:34remleduffalexyk: clojure.main/repl is super-configurable
10:35alexykremleduff: so just hack it?
10:35chouserjust don't claim clojure or javascript is the Word of God and you'll be fine.
10:35alexykchouser: now that you mention it, rhickey should be deified and then we're in business
10:36alexykclojure surely feels like the voice of some higher power
10:36alexykor an enlightened one at least
10:36alexykremleduff: I mean, should I just hack it? :)
10:37remleduffWell, I don't consider it a hack unless you change the source code ;)
10:39AWizzArdwell, those words share a lot of letters
10:39alexykAWizzArd: it's hard to object to that
10:40AWizzArdbut compare: donkey and monkey
10:40AWizzArd"dunn key" "monn key"
10:40AWizzArdno, the other way around
10:40AWizzArddon key and munn key
10:40remleduffalexyk: If all you're needing is a quick hack, maybe you could also do it by rebinding eval
10:41alexykAWizzArd: the question is, is the distance between reification and deification greater than that between donkey and monkey
10:41alexykremleduff: I'm interested in a solid way. Is rebinding eval cool?
10:41remleduffNot sure I'd trust my judgement on that one ;) For what it's worth, I'd say probably not ;)
10:42chouseryou probably can't rebind eval because of direct binding.
10:43alexykbbl
11:51slyruswell, 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:11arkahnthe 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:11arkahnhttp://gist.github.com/406473
12:12arkahnedit - 'only outputs the first line'
12:13qbg,(doc line-seq)
12:13clojurebot"([rdr]); Returns the lines of text from rdr as a lazy sequence of strings. rdr must implement java.io.BufferedReader."
12:13qbgUse that
12:14arkahnqbg: thank you
12:15qbgAlso, it is not idiomatic to have all of those parentheses on their own lines
12:16arkahnthey should be on the last line of a group of code?
12:16SynrGi wouldn't call a matter of coding style like that idiomatic (though it may be conventional)
12:17qbgYes, conventional, not idiomatic
12:17qbgarkahn: Take a look at http://mumble.net/~campbell/scheme/style.txt
12:17arkahnstyle is important to me - cool, thanks for the link
12:37LicenserA question, sadly somewhat javaish
12:38LicenserI want a string scanner that does NOT use this silly delimiter java.util.Scanner has.
12:54fogusLicenser: The Scanner class can use an arbitrary delimiter
12:54Licenseryou can't get rid of it
12:54Licensersetting it to nil causes NPE setting it to "" causes it to match everything and only give 1 char tokens
12:55ataggartthen set it to the dlimiter you actually want
12:55Licenserataggart: none
12:55LicenserI don't want any delimiter
12:55ataggartwong class than
12:55Licenseryea but java does not seem to give any options to do what I want
12:55fogusIt has a reset method. Also, the withDelimiter returns a new instance using your chosen
12:55LicenserI am now sing stubstr and re-find
12:56remleduffDoesn't "no delimiter" just mean, "give me the entire input as 1 string"?
12:56fogusLicenser: If you do not want a delimiter, then how is it a Scanner?
12:56ataggart"A Scanner breaks its input into tokens using a delimiter pattern"
12:56Licenserremleduff: notif you use next(pattern)
12:57LicenserI want a scanner that scanns tokens not delimiters
12:58ataggartthe tokens are formed by breaking up a string on delimiters
12:58Licenserataggart: that is why I saied I want a string scanner that works different
12:58ataggartjava.util.Matcher
12:58ataggartroll your own
12:59ataggarterm
12:59ataggartjava.util.regex.Matcher
12:59Licenserataggart: that does not work since it only matches the start of a string, I can't chain them
12:59ataggartthen I clearly don't understand what you're trying to accomplish
13:00Licenserataggart: tokenize code into it's elements for example: 123+123 should become 123, +, 123
13:00Licensergiven the right regexps of cause
13:00Licenser(token-seq "123abc123" [[#"^\d+" :number] [#"^[a-z]+" :ident]]) -> ([:number "123"] [:ident "abc"] [:number "123"])
13:00Licenserthis to be precise
13:06ataggartMatcher does (mostly) what you want. The problem is you seem to want different interleaving patterns.
13:07ataggart,(def m (re-matcher #"\d+" "+123+456+"))
13:07clojurebotDENIED
13:07ataggartbah
13:07ataggartanyway, run the above, then
13:07ataggart(.find m)
13:07ataggartthen
13:07ataggart(.group m)
13:07ataggartthe first result will be "123"
13:07remleduffLicenser: Can you use matcher.find repeatedly instead?
13:07ataggartyes
13:08ataggartyou call find, then group
13:08ataggartrepeatedly
13:08ataggartuntil find returns false
13:38stilkovI'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:39technomancystilkov: what lein version?
13:40stilkovmbp13:cljblog st$ lein -v
13:40stilkovLeiningen 1.1.0 on Java 1.6.0_20 Java HotSpot(TM) 64-Bit Server VM
13:40Raynesfogus: Thanks for the changes -- did you see the message I sent you on github by any chance?
13:40technomancystilkov: paste your project.clj; must be something funky in there
13:41stilkovhttp://gist.github.com/406587
13:42stilkovInterestingly, one of the Google hits was this old gist: http://gist.github.com/398271
13:42stilkovNot from me
13:42technomancystilkov: weird; looks good to me. the only thing I'd change is replace lein-swank with swank-clojure 1.2.1.
13:43technomancylein-swank is now bundled with swank-clojure
13:43technomancythen run clean/deps again
13:43stilkovno, no change
13:44technomancystilkov: I tried it here and it works fine
13:45stilkovI wanted to start from scratch, but somehow the README.md at http://github.com/technomancy/leiningen seems to be broken?
13:45technomancyactually the markdownj dep doesn't work
13:45technomancyuh, brb; sorry
13:47mmarczykum, how come
13:47mmarczykLeiningen's readme now reads
13:47mmarczyk"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:49stilkovmaybe a Github problem
13:50mmarczykyeah, apparently
13:50mmarczykI think I'll sue them for the ill effect the shock had on my health :-P
14:04mmarczykstilkov: are you seeing this ClassCastException when running "lein help" outside of any project's directory?
14:05stilkovI've now git-cloned the most current version and use that
14:05stilkovlein help works
14:05stilkovunfortunately, this version refuses to find my source files
14:05stilkovnot a happy lein day for me
14:06mmarczykhow do you mean, refuses to find your source files?
14:06mmarczykalso, does 1.1 not work for you?
14:07technomancystilkov: any luck?
14:08stilkovnot really no. are you aware leiningen's readme is somehow the wrong one?
14:09stilkovI mean the one displayed here
14:09stilkovhttp://github.com/technomancy/leiningen
14:09technomancystilkov: that's actually a github bug
14:09technomancyveeeeeery interesting!
14:09stilkovprobably related to this: http://github.com/technomancy/leiningen/blob/master/README.md
14:09stilkov(github error)
14:10technomancystilkov: here's another copy for while they are getting their issues sorted out: http://p.hagelb.org/lein-readme.html
14:10sexpbot"README.md"
14:11RaynesThank you sexpbot, for I never would have guessed.
14:11stilkovthanks, 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:11tridd3llok, 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:12tomojtridd3ll: is your .clj buffer in Slime mode?
14:12technomancytridd3ll: no, you shouldn't need swank-clojure on the Emacs side at all
14:13technomancyC-c C-k should do the trick. are you getting any output?
14:14tridd3llwhen I first do slime-connect I get: error in process filter: Symbol's function definition is void: swank-clojure-slime-mode-hook
14:15technomancytridd3ll: you must still have some swank-clojure configuration left over somewhere
14:15tridd3lltechnomancy: it's a brand new config
14:16tridd3lltechnomancy: but C-c C-k is undefined
14:16technomancytridd3ll: grep your .emacs.d for swank; there must be something in there.
14:19tridd3lltechnomancy: 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:19technomancytridd3ll: you have clojure-mode 1.7.1?
14:20RaynesOh joy. elpa is borked.
14:20tridd3lltechnomancy: I have the latest and greatest... I must be missing something on the config side
14:21puredangerso is the only reason to use deftype over defrecord to get those yucky mutable fields?
14:21technomancypuredanger: basically. deftype is lower-level. if you can use defrecord, you should.
14:21technomancytridd3ll: there is no config side.
14:22puredangerwhen using defrecord, can you type-hint a field with a protocol?
14:22technomancytridd3ll: at least, I don't have any elisp config beyond just installing the packages
14:23tomojtridd3ll: try M-x slime-mode
14:24tomojoh, didn't see your error
14:24tomojdunno if manually turning on slime mode will help, then
14:24tridd3lltomoj: no, that was it!
14:24tridd3lltomoj: I think a previous config used to do that automatically
14:25tomojthat happens to me sometimes, and I don't understand why
14:25tomojthere's also M-x clojure-enable-slime-on-existing-buffers or something like that
14:26technomancytridd3ll: 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:27tridd3lltechnomancy: tomoj: thanks! I now have a clean setup on Arch linux with Emacs 23, clojure 1.2, lein, etc.
14:27technomancycools
14:28mmarczyktechnomancy: I notice that Lein's project.clj includes a :url entry -- does it actually do anything?
14:28technomancymmarczyk: it's just metadata for clojars to display
14:29mmarczyktechnomancy: I'm thinking of (finally) writing a patch to add this to pom.xml, plus licence & mailing list info, if provided
14:29mmarczyktechnomancy: not sure if I asked if you'd be interested
14:29technomancymmarczyk: sounds great.
14:29mmarczykoh good, I'm on to it then :-)
14:30technomancyalso: I asked someone if they'd be interested in prototyping hook functionality, but I don't remember who it was.
14:30technomancyanyone?
14:36tridd3lltechnomancy: 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:36technomancytridd3ll: interesting; I'll try creating a new user and seeing if I can repro
14:37ninjuddtechnomancy: hooks for leiningen?
14:37maxhodaki'm trying to take a list of lists that looks like (([:key1 0.98 1] [:key2 0.82 1] ...) ... )
14:37maxhodakand turn it into a map that looks like: {:key1 ([3.4 [231 12]] [3.5 [139 122]]) :key2 ([0.92 [21 11]] ...) ...}
14:38maxhodakby counting up the items
14:38maxhodakand i can't for the life of me see the bug in my counting fn
14:38maxhodakhttp://gist.github.com/406656
14:38maxhodak(safe-increment)
14:40puredangeranswering 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:40puredangerstill trying to figure out whether that's useful to me
14:42technomancyninjudd: extending built-in tasks by plugins
14:44mmarczyktechnomancy: incidentally, would you like to support global plugins / tasks in the future?
14:44remleduffmaxhodak: 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:44technomancymmarczyk: it's on the list
14:44ninjuddtechnomancy: i'm interested. i almost sent you a message on github yesterday asking what your plans are for hooks
14:45mmarczyktechnomancy: do you have a particular location to store them in your mind? or maybe an env var to pick it up from?
14:47mmarczyk(um, I now notice that I've formulated the above rather strangely... oh well)
14:49maxhodakremleduff: hmm thanks for that
14:50AWizzArdrhickey: 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:51technomancymmarczyk: yeah, probably in ~/.leiningen/plugins.clj to indicate which should be activated
14:51technomancyninjudd: 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:51AWizzArdThis 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:51maxhodaker, found it. the bug was in how i was mapping/reducing the lists; it was overwriting the 'aggregate' in the reduce each step
14:52AWizzArdrhickey: 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:53mmarczyktechnomancy: makes sense
14:53technomancymmarczyk: it also depends on a "lein install $FOO" task that works outside the context of a project
14:55remleduffmaxhodak: In map-bins, does (= 1.0 (:accepted user-profile)) really return 1 rather than true?
14:55mmarczyktechnomancy: and then you'd like it to pick up "lein install"ed plugins?
14:58maxhodakremleduff: no it returns true
15:01remleduffSince 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:07nathanmarzanyone know how to redirect all console output to repl in emacs when using lein swank?
15:11mmarczyknathanmarz: call (slime-redirect-inferior-output)
15:11nathanmarzmmarczyk: in the repl or via M-x?
15:11nathanmarzneither one works
15:13tridd3lltechnomancy: scratch the error I spoke of before... I was using jochu's clojure-mode... now everything works perfectly.
15:14mmarczyknathanmarz: M-:
15:15mmarczyknathanmarz: or M-x eval-expression
15:17nathanmarz(error "No inferior lisp process")
15:17mmarczykthen start one :-)
15:17nathanmarzi don't know what that means :(
15:17nathanmarzthe repl works otherwise
15:17mmarczykoh? hm
15:17nathanmarzthe console output is all going to the terminal where i started lein swank
15:18mmarczykyou should be able to do M-x eval-expression (slime-redirect-inferior-output) in your SLIME REPL buffer
15:18mmarczykI'll see which hook I put it into...
15:19mmarczykslime-connected-hook, apparently
15:19mmarczykso 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:21nathanmarzi execute (add-hook 'slime-connected-hook 'slime-redirect-inferior-output) via M-x eval-expression ?
15:21mmarczykright, or at the repl started by M-x ielm
15:22nathanmarzbefore the clojure repl starts up it prints "error in process filter: No inferior lisp process"
15:22mmarczykif it works, you might want to add it to ~/.emacs or whichever file you store your slime config in
15:23mmarczyknathanmarz: but then it starts up fine, right?
15:24nathanmarzyes, but it's not redirecting any output
15:26mmarczykhm, 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:26mmarczykotherwise, that's weird
15:26mmarczykwhere did you get your slime from?
15:27nathanmarzi followed technomancy's various instructions
15:27nathanmarzhttp://technomancy.us/126 http://github.com/technomancy/emacs-starter-kit http://github.com/technomancy/swank-clojure
15:28sexpbot"in which are found tricks of the trade concerning clojure authorship - Technomancy"
15:32mmarczykwell, to be honest, I don't know what could be wrong
15:33mmarczykI'm using a different setup -- no elpa -- so we're sure to have different versions of stuff
15:40nathanmarzyea, that must be it
15:40nathanmarzmmarczyk: thanks anyway
15:48mmarczykwhat I have in my config is actually (add-hook 'slime-connected-hook (lambda () (interactive) (slime-redirect-inferior-output)))
15:48mmarczykI'm not at all sure what's the (interactive) there for, so maybe try and see if it changes anything
15:49mmarczykoh, and test the changes in a fresh Emacs instance
15:53alexykany clojure bindings for kryo?
15:56charllsheyo
15:57alexyktreasure trove of jvm serializers: http://wiki.github.com/eishay/jvm-serializers/ -- and kryo apparently beats the pants off protobuffers and everything else
15:59ninjuddalexyk: that benchmark is what made me decide to write clojure-protobuf
15:59alexykninjudd: interesting choice given the place of protobufs there :)
16:00ninjuddalexyk: protobufs are still very fast, and they have other properties i wanted like support for merge-on-append
16:01alexykninjudd: yeah, I now like language portability
16:01alexykninjudd: but you have to compile things, which in many cases is annoying. Say serializing derivative graphs with a slightly different structure
16:01ninjuddalexyk: yep, that was another one. plus, i doubt kryo would actually be faster if you serialize persistent clojure data structures directly
16:02ninjuddalexyk: definitely would be less space efficient
16:02alexykninjudd: true, avoid hava cruft
16:02alexykjava
16:04ninjuddalexyk: 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:04ninjuddalexyk: the same would be true for clojure
16:05alexykninjudd: true, Scala pollutes the classes directory as much as Clojure :)
16:07alexykfolks probably saw it, but it's exciting still: http://googlecode.blogspot.com/2010/05/better-performance-in-app-engine-with.html
16:07sexpbot"Google Code Blog: Better performance in App Engine with new Lisp language Clojure"
16:11AWizzArdalexyk: thx for the link
16:14alexyk"lisp language clojure" sounds vaguely Japanese to me :)
16:15alexykninjudd: are you gonna add sorted-map to protobuf?
16:15hamzais it not possible to add metadata to a keyword?
16:16ninjuddalexyk: hmm... how would it work? would it be a map or a map_by?
16:17alexykninjudd: a map, it will simply load into a sorted-map
16:17tridd3llANN: just posted a tutorial on my website about a non-ELPA install for emacs, swank and leiningen: http://riddell.us/ClojureSwankLeiningenWithEmacsOnArch.html
16:17sexpbot"ClojureSwankLeiningenWithEmacsOnArch"
16:18quizmeIt's all about Counterclockwise in Eclipse :)
16:18tridd3lleverything's bleeding edge and it seems to work great... also, no swank-clojure in emacs
16:20ninjuddalexyk: i wonder if protobuf supports multiple options, i could just add a sorted option that works for set, map and map_by
16:20technomancytridd3ll: why do you have people building clojure/contrib instead of fetching from build.clojure.org?
16:21tridd3lltechnomancy: not sure... that's always the way I did it I guess... been busy and out of the clojure world for a while
16:22technomancyit'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:22mmarczykit might make sense to show all stuff of this sort in one place, though
16:22mmarczykmeaning how to go about running things from the sources
16:23ninjuddalexyk: 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:23technomancyI'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:23mmarczykthen 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:23jweissi found an interactive clojure tutoral recently, sorta ajaxy web app.. can't find it now, anyone know what it was
16:24ninjuddjweiss: http://www.try-clojure.org/ ?
16:24technomancymmarczyk: 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:24sexpbot"TryClojure"
16:24jweissninjudd: no, that's not a tutorial, but it's cool
16:25Raynesjweiss: It is, actually.
16:25ninjuddjweiss: click the tutorial button
16:25Raynesjweiss: The tutorial is brief and incomplete, but I'm working on it.
16:25RaynesI'm curious as to what web app you're talking about.
16:25RaynesI certainly don't remember anything of the sort.
16:25RaynesThey might put me out of business! ;)
16:26tridd3lltechnomancy: 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:26jweissRaynes: no that's wasn't what i had seen before
16:26mmarczyktechnomancy: hm, true
16:26jweissnice though
16:26ninjuddjweiss: you're not referring to labrepl, are you?
16:26RaynesThat's probably it.
16:26mmarczykmaybe links to snapshot solutions at each step would be useful
16:27RaynesOnly thing remotely similar to an "interactive" tutorial besides try-clojure that I can think of.
16:27jweissoh yeah that was it
16:27jweissforgot that it required a local install
16:27mmarczykthen it's obvious that what's presented is the straight-from-the-repo approach and then there's a link to something prepackaged...
16:27jweissthanks!
16:27mmarczykincidentally, Maven's handling of licences and mailing lists is horrible :-(
16:28mmarczykwell, maybe not mailing lists, but licences -- come on, no predefined licences anywhere :-(
16:30mmarczykwould it be useful for lein to accept :licence :epl10 (or :license) as shorthand for :licence {:name "Eclipse Public License" :distribution :repo :url "..."} ?
16:30mmarczyketc., or should I not bother
16:30mmarczyk(if I shouldn't, then it's done)
17:16technomancymmarczyk: what's :distribution mean in that context?
17:24mmarczyktechnomancy: "repo" (may be downloaded from the Maven repository) or "manual" (user must manually download and install the dependency)
17:26hamzais it not possible to attach metadata to a ref or a keywork? or is
17:26hamza there a work around this?
17:26technomancyso the central maven repositories actually serve up the text of certain licenses?
17:27mmarczyktechnomancy: I think this means that if licence is set to "manual", they're not meant to have those jars at all
17:28mmarczyktechnomancy: 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:28mmarczyktechnomancy: 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:29mmarczyktechnomancy: so I'm wondering if I should bloat pom.xml by including a couple of those
17:29mmarczykthat's pom.clj
17:34technomancyI'm not sure why you'd need more than just a name/url for the license
17:35technomancybut hey, it's maven.
17:35mmarczykyup
17:52technomancyhamza: you can add metadata to a ref, but not to a keyword
17:52technomancysince there is only ever one instance of a given keyword. it would be like adding metadata to a number
17:55mmarczyk,(with-meta (ref 0) {:foo 1})
17:55mmarczykhm, well, whatever, but it complains at my repl about (ref 0) not being an IObj
17:56mmarczykwhereas (.resetMeta (ref 0) {:foo 1}) works
18:00mmarczyk(nb. (ref 0 :meta {:foo 1}) works, but I thought it was surprising that with-meta doesn't)
18:00hamzatechnomancy: it says ref can't be cast to IObj
18:00hamza,(with-meta (ref 0) {:a :b})
18:01mmarczykhamza: see above, (ref 0 :meta {:a :b})
18:01technomancyick
18:02hamzatechnomancy: thanks..
18:02hamzathat worked..
18:19LajlaIt comes down to,
18:19Lajlaconvince me, a Schemer, to learn Clojure.
18:20LajlaExtra points for not using violence or a thread to murder my family for failure to comply but rather rely on sophisticated arguments.
18:20lancepantzit's on the jvm, you can use all the java libraries
18:20lancepantzdone.
18:20lancepantz:)
18:20LajlaMost Schemers are convinced by Java libraries these days?
18:20LajlaI have never used Java in my life.
18:21RaynesHow about this: "It actually has libraries."
18:21technomancyLajla: persistent data structures
18:21technomancywill change your life
18:21Lajlatechnomancy, explain.
18:21LajlaYour ghost is away.
18:22technomancyLajla: you can share data structures between threads without having to worry that they'll get modified out from under you
18:22technomancyvalues are guaranteed to be stable
18:22technomancyLajla: 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:22powr-tocLajla: 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:22Lajlatechnomancy, but can't you use that in Scheme by just not modifying them?
18:22technomancybut imagine that across all your data structures
18:23technomancyLajla: programs that use solely lists aren't performant
18:23Lajlatechnomancy, go on.
18:24technomancyLajla: 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:24technomancyLajla: but really nobody could do a better job than Rich of convincing: http://clojure.org/state
18:24powr-toctechnomancy: ahh good point... the sequence library rocks
18:25Lajlatechnomancy, Rich doesn't murder my family does he?
18:25powr-tocspecifically the polymorphic abstractions across lists, vectors, hashmaps and sets
18:28powr-tocLajla: do you actually use Scheme for anything real?
18:28ataggartI've never understood the point of "challenging" others to prove the utility of a language, nor of accepting such "challenges".
18:28ataggartuse it or don't.
18:30Lajlapowr-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:30technomancyLajla: if there have been any murders, they've been thorough enough to dispose of any witnesses
18:30LajlaBut actually I wanted to run my site on it in lieu of php, some people said I should dive in Clojure.
18:30technomancyhere'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:31sexpbot"in which new paradigms are explored, clojure is reached, and impressions are still cursory - Technomancy"
18:31Lajlaataggart, well, I like to see the best arguments, thus far some were reasonable enough
18:31technomancybut Rich's arguments are the best
18:31technomancyalso: http://blip.tv/file/1313398 (long-ish video, but worth it)
18:31sexpbot"Clojure for Lisp Programmers Part 1"
18:32powr-tocThis is my favourite clojure video: http://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey
18:32sexpbot"InfoQ: Are We There Yet?"
18:32ataggartpowr-toc: seconded
18:33LajlaHmm, 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:34ataggartyou're free to not watch them
18:34powr-tocataggart: 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:35powr-tocLajla: I have a transcript of it somewhere hold on...
18:35powr-tochttp://codepad.org/eN7SjIoz
18:35sexpbot"Plain Text code- 214 lines - codepad"
18:35Lajlapowr-toc, thank you.
18:36ataggartFor those of you that know them, is there much utility to learning haskell or erlang (beyond simply knowing the language)?
18:38technomancyataggart: for distributed systems it's probably worth learning erlang
18:38technomancyit has a great approach to fault-tolerance
18:38technomancybut I cringe at the thought of writing something in it
18:38hamzagents, 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:39ataggarttechnomancy: that was my understanding as well.
18:39powr-tocataggart: 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:39ataggarthamza: only if it turns out to be inherently flawed for some reason (unlikely)
18:39powr-tocI think Haskell, which I know next to nothing of, would be my next language to learn
18:40hamzaataggart: kk thanks...
18:40technomancythe type system sounds exhausting to learn
18:40technomancyI don't have the mental energy to tackle Haskell
18:40Lajlaataggart, Haskell is an 'industry language' I guess.
18:41technomancygoing to take a look at Factor next
18:41LajlaNot as much a 'tool that helps you automate tasks of solve problems' as lisps are.
18:41ataggartLajla: what does that mean?
18:41Lajlaataggart, it means it's primary domain is writing (commercial) software applications.
18:41powr-toctechnomancy: 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:42powr-toctechnomancy: Yeah, Factor is nice...
18:42technomancypowr-toc: not having strings is a huge strike against it, plus the syntax is nuts
18:42ataggarterlang doesn't have strings?!
18:42powr-tocI 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:43LajlaI would recommend haskell over erlang I guess, they both try to do the same thing, with Haskell being better at it.
18:44remleduffHaskell was originally a teaching language ;)
18:44powr-toctechnomancy: 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:44technomancyataggart: it calls byte arrays "strings"
18:44mmarczykLajla: you're calling Haskell an "industry language"?
18:44mmarczykI'm willing to bet that that would come as a surprise to most Haskellers
18:45Lajlammarczyk, haskell is more used to make commercial software applications than research tools.
18:45mmarczykit happens to be one of the more frequently used languages in publications on functional programming-related research
18:45LajlaIt's not used as much as C or Java I mean, but used for the same things.
18:45LajlaThat is quite correct.
18:45powr-tocLajla: 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:46mmarczykI wouldn't be terribly surprised if there was a tiny amount of INTERCAL out there in production
18:46mmarczykI wouldn't stretch that to say that it's an "industry language" though
18:47Lajlammarczyk, well: http://en.wikipedia.org/wiki/Haskell_(programming_language)#Applications
18:47sexpbot"Haskell (programming language) - Wikipedia, the free encyclopedia"
18:47powr-tocLajla: 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:47mmarczykincidentally, 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:47mmarczykLajla: not sure what point you're trying to make
18:47LajlaI 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:48powr-tocbut it was clear; he found Erlang a little bit dirty... :-)
18:48powr-tocI think Erlang is without a doubt; the most widely used functional programming language... by almost any measure
18:48mmarczykLajla: 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:49powr-tocat least industrially
18:49mmarczykLajla: without even mentioning people writing Autolisp
18:49Lajlammarczyk, well, could be that I'm wrong.
18:49LajlaBut 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:49powr-tocI'm sure I had a reference for that... but I think in LOC's; more have been written in Erlang than anything else
18:50powr-toc(functional that is)
18:50mmarczykLajla: anyway, you're the first person I encountered to call Haskell an "industry language"
18:51Lajlapowr-toc, what are LOC's?
18:51powr-toclines of code
18:51mmarczykLajla: the notion gives me quite a pleasant thrill, so thanks for that
18:51LajlaWell, maybe I have a nonstandard definition of the term I guess.
18:51alexykninjudd: 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:53powr-tocLajla: What scheme dialects do you use?
18:53ninjuddalexyk: they are implemented here: http://github.com/ninjudd/clojure-protobuf/blob/master/src/jvm/clojure/protobuf/PersistentProtocolBufferMap.java
18:53powr-tocsorry, I mean interpreters not dialects
18:53ninjuddalexyk: in fromProtoValue and toProtoValue
18:53mmarczykpowr-toc: actually "dialects" is probably the better world, if only because there's plenty of good compilers out there :-)
18:54powr-tocmmarczyk: LOL... as soon as I wrote interpreters, I regretted it... either way, the question still stands :-)
18:54alexykninjudd: aha, so I'd have to teach Scala to read those... I could reuse that Java right?
18:55Lajlapowr-toc, PLT and R5RS
18:55powr-tocmmarczyk: it's just that scheme is a standard, right... so in theory there should only be one "dialect", right? :-)
18:55ninjuddalexyk: sure, or you can just use the PersistentProtocolBufferMap in scala
18:55mmarczykpowr-toc: in theory, theory resembles practice ;-)
18:56ninjuddalexyk: though i will be rewriting it to use protocols in the near future
18:56powr-tocmmarczyk: ahh yogi bera... I love that quote
18:56mmarczyk(with an especially idealistic theory it might even be the other way around)
18:56mmarczykme too. :-)
18:58Lajlapowr-toc, well, we use 'dialect of scheme' to signify a set of extensions I guess.
18:58LajlaThat's what scheme ultimately was designed for, a framework to extend.
18:58LajlaI use numerous added syntaxes I added myself.
18:59powr-tocOn another topic... I love how Clojure "Just Works"... last week, I managed to get it, with compojure, working with GWT RPC! :-)
18:59hiredmanscheme was an experiment in message passing
19:00powr-tochiredman: it was?!
19:00hiredmanyes
19:00mmarczykScheme is a contract on continuation semantics!
19:00mmarczyk(khem)
19:01powr-tocahh of course
19:01hiredmanit used to have another operator besides lambda, called alpha that was for creating things you passed messages to
19:01powr-tochiredman: so what happened to it?
19:01hiredmanbut it turned out to have essentially the same code as for λ
19:01mmarczykincidentally, might anybody besides me be remotely interested in having lein accept all of :licence {...}, :license {...}, :licences [{...} ...] and :licenses [{:...} ...] to specify licences? :-P
19:03LajlaOh, does Clojure have continuations by the way?
19:03hiredmannope
19:03mmarczykhiredman: really? (that's about alpha)
19:03mmarczykhiredman: despite the established meaning of alpha in lambda calculus, I mean?
19:04Lajlammarczyk, I think Alan Kay says that (+ 1 2) is his vision of passing two messages to '+'
19:04hiredmanmmarczyk: I am pretty sure it was called alpha
19:04LajlaAnd object.method(); in javascript is not.
19:04mmarczykLajla: nor does it have general tail call elimination
19:04hiredmanclojurebot:?
19:04Lajlammarczyk, I read so, must use recur.
19:04LajlaBut I don't use proper tail recursion that often, I'm more a fan of map to be honest.
19:05LajlaIt works better assuming your code is side-effect free.
19:05mmarczykhiredman: interesting, thanks
19:06hiredmanclojurebot: ?
19:07hiredmanping?
19:07hiredmanping?
19:07clojurebotPONG!
19:07hiredmanclojurebot: history of lisp?
19:07clojurebotLisp isn't a language, it's a building material.
19:07hiredmanclojurebot: evolution of lisp?
19:07clojurebotlisp is the red pill
19:07hiredmanhmmm
19:15alexyk_ninjudd: hmm, so it creates a Clojure map class when loaded back from Java?
19:22ninjuddalexyk: the map or set is created when the field is accessed in clojure
19:31tcrayfordLajla: you can get continuations in clojure using the cont-m monad if you want
19:33alexykninjudd: 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:33mmarczykthat's not quite the same thing though :-(
19:33mmarczyk(that was about cont-m)
19:34alexyki.e. I'd have to implement a Scala-specific way to make PersistentProtocolBufferMap right?
19:34ninjuddalexyk: 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:35alexykninjudd: OK, interesting project :)
19:36mmarczyktechnomancy: I've sent you a pull request for the pom stuff for lein
19:37PloujI 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:39mmarczykLajla: re: your (?) SO question on Scheme for Web stuff, have you been dissatisfied with the PLT framework?
19:50alexykwhat's the absolutely blazingly fastest way to convert a clojure map to JSON?
19:53alexyklancepantz: how'd you compare using clj-json vs protobuf for TC values?
19:53lancepantzi think that clj-json took 2x longer than protobuf
19:54lancepantzlet me dig up the benchmark
19:54alexyklancepantz: I can live with that! is it your dog on github? :)
19:54lancepantzofcourse you lose appends
19:55Lajlammarczyk, 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:55alexyklancepantz: I'm thinking of a quick way to interop with Scala, and for Scala I'd have to write protobuf bindings.
19:56lancepantzactually closer than that http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking
19:56sexpbot"Benchmarking - thrift-protobuf-compare - Project Hosting on Google Code"
19:57alexyklancepantz: ah yes, that's what I've googled earlier :)
19:57alexykfunny that there's a Scala Avro binding similar to Protobufs. No Avro for Clojure nor protobuf for Scala.
19:58alexykgood ol' JSON is all what remains to talk
19:59ninjuddalexy: you don't have to write a scala wrapper for protobufs, you can just use the Java implementation directly, right?
19:59alexykninjudd: true, but I have to create a Map
19:59mmarczykLajla: perhaps the PLT docs could help you with that?
20:00alexykninjudd: and looks like it means understanding Def and etc.
20:00ninjuddalexyk: why exactly do you want to interop with scala?
20:00mmarczykLajla: if not, they might well be willing to provide guidance if you post to their list
20:00alexykninjudd: 'cause it'll walk my graph faster! :)
20:01ninjuddalexyk: what makes you think that?
20:01mmarczykLajla: 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:01alexykI 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:02alexykhave to try at least
20:02alexyknot to let my Scala rust too much
20:02alexykplus a recruiter found me on Github and said, ah! Scala! So many opportunities for you! :)
20:03alexykalthough I have more Clojure now
20:03alexykninjudd: I like both, gotta try both
20:03ninjuddwhat exactly do you like about scala?
20:03mmarczykLajla: 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:04Lajlammarczyk, well, I wouldn't use PLT then except for maybe some sxml->xml pretty printer I guess.
20:05LajlaBut I couldn't find it in the docs.
20:05alexykninjudd: gotta go for now, will tell you whan I'm back! :)
20:05LajlaThey just explained how to build a blog, not how to install it and run .scm files.
20:05ninjuddalexy: is it the lack of persistent data structures? or the awesome, java-like syntax?
20:05mmarczykLajla: that's why I think it could be useful to them if you pointed out the deficiencies in their docs
20:06alexykninjudd: the types and lack of the damn NPE :) later
20:09alexykninjudd: did I miss some awesome anti-Scala arguments? :)
20:10ninjuddno, i was just going to say that NullPointerExceptions aren't really the language's fault
20:10alexykninjudd: 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:11alexykmakes me curious to try and compare, my algorithm is just 200 lines of clojure anyway
20:12alexykninjudd: 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:12Lajlammarczyk, but I'm very selfish. =(
20:13HodappI thought about learning OCaml once, but then I went out drinking instead.
20:13alexykninjudd: 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:14ninjuddalexyk: what should (+ nil 10) return?
20:14alexykHodapp: that applies to Haskell rather than OCaml :)
20:14mmarczykLajla: collect what you deserve then ;-)
20:14HodappIt 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:14ninjuddHodapp: are you somehow listening the the conversation in our office right now?
20:14alexykninjudd: something nasty saying "it's not a number, you idiot!" :)
20:14Hodappninjudd: Yes.
20:14alexykbut not an NPE like anything else!
20:15ninjuddHodapp: we were just talking about writing an LLVM compiler for clojure in OCaml
20:15HodappAHHH
20:16alexykninjudd: that's Dr Harrop's domain!
20:16lancepantzwe were talking about it in our scrum
20:16LajlaHodapp, Ocaml can, or Haskell?
20:16Hodappninjudd: Ocaml does seem to be a choice for applications like that which have a certain formal strictness to them, like theorem provers.
20:16HodappLajla: Ocaml. Haskell, maybe.
20:17LajlaHodapp, isn't OCaml slower than Haskell?
20:17LajlaI mean, Haskell is lazy and all.
20:17HodappLajla: Compiled Ocaml, as I understand it, can match the performance of C due to how much can be optimized out in compilation.
20:17ninjuddalexyk: who's Dr. Harrop?
20:17mmarczykLajla: OCaml has to be one of the most performant languages out there, at least for single-threaded programmes
20:17alexykocaml is good
20:18mmarczykHodapp: make the "match" an "exceed"
20:18LajlaHodapp, I though OCaml went to 1/2 of C's performance.
20:18alexykninjudd: a language legend :)
20:18Hodappmmarczyk: Got a citation on that?
20:18HodappLajla: Ocaml, if I remember right, can be interpreted, bytecode-compiled, or compiled to machine language, so it really depends what you're doing.
20:19mmarczykoh bother, I'll look around
20:19LajlaHodapp, that is true, but any language can in theory.
20:19LajlaYou mean that OCaml as an implementation suports it?
20:19HodappLajla: I am not talking about "in theory".
20:19LajlaI'm still kind of partial to Brainfuck.NET though for my site.
20:20Hodappfuck all those things that have ".NET" in their name
20:20ninjuddalexyk: oh, i though maybe you misspelled Hodapp
20:21mmarczykHodapp: 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:21alexykninjudd: ho, Harrop is unique
20:21mmarczykHodapp: rather like Fortran, coming to think of it
20:21LajlaHodapp, but this is BRAINFUCK dot net
20:22LajlaF# seems to be a good example of EEE though.
20:22alexykocaml makes millions on Wall St, while Haskell makes millions go drinking instead of learning it :)
20:22mmarczykalexyk: :-D
20:22alexykF# is ocaml on .net + .net objects
20:23mmarczykwell, 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:23Hodappmmarczyk: 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:24Hodappmmarczyk: http://www.cs.indiana.edu/~jsobel/c455-c511.updated.txt
20:25mmarczykHodapp: if "permit" here means "makes theoretically possible", than that's different to an OCaml compiler actually being known to produce exceptionally good results
20:25mmarczykHodapp: but thanks for the link
20:25mmarczyk(incidentally, Chez Scheme is supposedly blazing fast... I'd really want to play with the compiler some day :-()
20:26islonsomeone call help me with this exception? I cant figure it out http://pastebin.com/nbxL5XGv
20:26Hodappmmarczyk: 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:28mmarczykHodapp: sounds like fun :-)
20:28Hodappmaybe.
20:29Lajlammarczyk, well, that is the EEE strategy.
20:29LajlaYou 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:29ataggartHodapp: I have no idea, but I'd advise against the way you're using refs on each stat
20:30mmarczykLajla: are you referring to Chez Scheme?
20:30Hodappataggart: what?
20:30ataggarterm
20:30ataggartlol, not you
20:30ataggartislon
20:30Lajlammarczyk, no, to F#, and well, most .NET things.
20:30Hodappscrew .NET
20:30LajlaHodapp, can I go first?
20:30mmarczykLajla: I'm not sure
20:30Hodappsure.
20:31islonataggart, yeap?
20:31mmarczykLajla: it makes sense for F# to be different from Haskell
20:31LajlaWhat 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:31Lajlammarczyk, well, F# is more OCaml than Haskel.
20:31LajlaBut brainfuck.NET is still awesome.
20:31mmarczykLajla: it probably also makes sense for F# to be different from OCaml
20:31LajlaNext Whitespace.NET and Malbolge.NET
20:32mmarczykbut anyway, F# seemed pretty open to me
20:32Lajlammarczyk, maybe, but not to be properietary.
20:32LajlaIs it?
20:32LajlaLet me look it up
20:32RaynesMeh, I like Haskell.
20:32Lajla"Microsoft Research Shared Source license agreement ("MSR-SSLA")"
20:32LajlaTHis sounds so cryptic it has got to be evil.
20:32mmarczykexcept Mono is probably not good enough to be a viable open platform for .NET apps in general
20:33RaynesI 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:33mmarczyk(yet? hopefully...)
20:33mmarczykRaynes: oh? which Haskellers do you have in mind?
20:33LajlaWhat I find really interesting is that over 60% of the .NET developers apparently use Basic as their _only_ language.
20:33Lajlammarczyk, twey.
20:34Raynesmmarczyk: No couple in particular. I've heard many a discussion about how much better Haskell is over Lisp in #haskell and -blah.
20:34LajlaHe's in Finnish, he thinks lisp is a toy and Haskell is a language, but he'sreally cute and British
20:34LajlaJust saying 'I saw a bracket' every time they used one.
20:34RaynesPeaker is one.
20:35mmarczykRaynes: well you have to feel for them, struggling with that terrible syntax all the time... *akhem*
20:35RaynesThat's the extent of my finger pointing *cough*Norman Ramsey*cough* though.
20:36Rayneshttp://stackoverflow.com/questions/355314/clojure-vs-haskell-for-web-applications/355511#355511
20:36sexpbot"Clojure vs Haskell for web applications? - Stack Overflow"
20:36Raynes"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:37LajlaHaskell is really not a good language for outputting large quantities of strings is my guess.
20:37LajlaSXML is pretty handy in the end.
20:37mmarczykRaynes: ah, I read that
20:37mmarczyknot a very nice comment, but the answer was fair enough I think
20:37mmarczyknot that I necessarily agree
20:37RaynesHe went very low in that comment.
20:38mmarczykI'm taking into account the date on that answer, too, I'd be more critical if he posted it today
20:40MadWombatany here worked with the appengine-clj library?
20:40MadWombat*anyone
20:41LajlaMadWombat, it's quite grammatical, in fact, poetic.
20:41MadWombatLajla: my typo or the appengine library?
20:41ataggartislon: you're overwriting the defstruct player with def player
20:42LajlaMadWombat, the any in lieu of anyone.
20:42mmarczykwell, 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:43islonataggart, and how I am supposed to create new players?
20:43ataggarthowever you want, just don't step on the same name
20:46islonataggart, damn! i got it... how stupid of me... thanks
20:46ataggartnp
20:48mmarczykHodapp: thanks a lot for that link, it's a really cool read :-)
20:53mmarczykhttp://scienceblogs.com/goodmath/2006/11/the_c_is_efficient_language_fa.php -- I find that pretty interesting
20:53sexpbot"The "C is Efficient" Language Fallacy : Good Math, Bad Math"
20:54mmarczykI'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:57bmasonanyone else had success parsing a multipart MIME body with Ring/Compojure?
20:58Hodappmmarczyk: Glad you like it :)
20:58Hodappooh, I am gonna have to read that
20:59mmarczykhttp://lambda-the-ultimate.org/node/2720#comment-40687 -- that's interesting too
20:59sexpbot"Languages best suited for scientific computing? | Lambda the Ultimate"
20:59mmarczykin that it shows how to do better in C++
21:52Lajlammarczyk, will you hold my hand if I mail the guys at PLT?
21:55mmarczyk:-)
21:55mmarczykLajla: sure
21:55Lajlammarczyk, just tell me how to start?
21:55mmarczykthough I can't say I know my way around their platform
21:56LajlaI take it they won't accept Finnish?
21:56LajlaHmm, 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:56mmarczykoh, I think they've got one in there which activates itself if you fail to submit an experience report
21:57mmarczykI'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:58mmarczykand then, well, you had a nice and reasonable list of wants on SO
21:59mmarczykhttp://groups.google.com/group/plt-scheme -- there's even a Google group interface
21:59sexpbot"PLT Scheme | Google Groups"
22:01mmarczykquite a lot of hits for "xml" plus a fair number for "unicode"
22:02mmarczykfrom a glance at the answers, plt defaults to utf-8 when doing stuff with strings...
22:05mmarczykapparently there's some useful stuff if you search for "script" too
22:05ober2Could not locate clojure/contrib/str_utils__init.class or clojure/contrib/str_utils.clj on classpath:
22:05ober2
22:05ober2unf
22:15Lajlammarczyk, 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:21technomancyninjudd: ping?
22:21ninjuddtechnomancy: yo
22:21technomancyninjudd: got some time to discuss hooks in the #leiningen channel?
22:22ninjuddtechnomancy: about 10 minutes, then i have to head to the airport
22:36mmarczykLajla: 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:43Lajlammarczyk,hmm, that is sufficiently less discipline than my loving mother provided.
22:46Lajlammarczyk, do you already consider me the greatest programming alive second only to Microsoft's chief software architect?
22:55TheBusbyHahaha, I'll have to remember that line "the greatest programming alive second only to Microsoft's chief software architect"
22:58LajlaTheBusby, http://upload.wikimedia.org/wikipedia/commons/2/2a/Bill_Gates_in_WEF_,2007.jpg he is quite cute though.
22:59LajlaTheBusby, are you the greatest programmer alive second only to Lajla and Microsoft's Chief Software cutie?
23:00TheBusbyI think "being the greatest programmer" would be like being the "fastest runner"
23:01TheBusbydo you mean for 100m, relay, marathon, etc?
23:01TheBusbyreminds me of old men in a barber shop arguing over who was the better boxer in their day
23:03LajlaTheBusby, what if I'm the best at all?
23:03LajlaSafe for the MCSC of course.
23:05TheBusbyI 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:10LajlaTheBusby, from studying physics and maths, I noted that almost all people that were smart enough to see the farce that it was quit.
23:10LajlaYeh seriously, infinitesimal, get real.
23:11LajlaI was basically trying to explain Rice's theorem to some IT diplomated people recently.
23:11LajlaI 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:11TheBusbyer, I didn't mean University degrees, but things like MCSE, Cisco Certs, A+ Computer certs, etc.
23:12LajlaTheBusby, ah, thatś even worse.
23:12LajlaIt just means that I'm one level above you.
23:12LajlaCisco providing certificates is a huge conflict of interest.
23:12LajlaThey want as many as possible of course.
23:13arohneris there a way to get the list of fields from a deftype / defrecord, without instantiating it?
23:14arohnerthe java introspection also returns a bunch of const__1 , const__2, const__3 crap in addition to the actual fields
23:15technomancyhttp://github.com/technomancy/leiningen/tree/hooks
23:16Lajlaarohner, they never told you to not interupt when some-one is gloating with narcissism?
23:16mmarczyktechnomancy: cool!
23:16mmarczykI mean, it's cool to see the correct readme again
23:17mmarczyklet's have a look at the hooks now
23:17technomancymmarczyk: the readme's still busted on the master branch
23:17technomancyso get your github trade secrets while they last1
23:17technomancy!
23:17mmarczykawww
23:18mmarczykI think they might be faster to get their act together if you ping them to reset their cache
23:18technomancyI did give em a push in #github
23:18mmarczykoh... oh well
23:34defnhmm, wonder why i cant use "cd" with (sh "cd")
23:35lancepantzdefn: dir is an argument if i remember right
23:36technomancydefn: you can't change the working dir of the JVM
23:36technomancysad but true
23:37defnweak.. i wonder how pallet handles this with the shell scripting capability it claims
23:38hugoddefn: shell scripts run in the shell..
23:39lancepantzare you in hawaii technomancy?
23:39technomancylancepantz: yeah
23:40defnhugod: *chuckle*
23:40lancepantzmust be nice :) i want to move there one day- actually never been
23:42scottjIf 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:42tomojif your project explicitly depends on some version, you will get that version
23:43tomojotherwise there's some algorithm maven does, I think it's something like the shortest path back to your project wins
23:45tomojscottj: "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:46scottjtomoj: ok, is the a that b uses accessible via namespaces?
23:46tomojhttp://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Transitive_Dependencies
23:46sexpbot"Maven - Introduction to the Dependency Mechanism"
23:46tomojyou will only have access to one version of a
23:46tomoj(..unless there's some weird way to get two versions)
23:47tomojanyway getting two versions of a clojure project would be Bad
23:59arohnertomoj: not running lein clean before lein deps downloads a new version can cause both jars to be on your classpath
23:59arohnertomoj: and yes, it's bad