#clojure logs

2011-10-31

00:09spoon16technomancy: is :use in the NS declaration appropriate or should I use require? looking up the difference
00:09technomancyspoon16: I prefer :require for things like io
00:10spoon16why?
00:10clojurebothttp://clojure.org/rationale
00:10technomancyit's a matter of personal preference, but my general rule is to pick :use for things "internal" to a given module and :require for things from external libraries
00:10spoon16I see
00:10spoon16makes sense
00:11technomancywhere a module is loosely defined as a bunch of namespaces that present a unified external interface
00:25Rayneshttp://tryclj.com/ <-- New domain name for Try Clojure
00:26technomancyRaynes: is that heroku-hosted?
00:26RaynesNo.
00:26RaynesI don't trust Heroku nearly enough, given that I know next to nothing about it.
00:26RaynesI'm sure it'd probably die with two simultaneous users, given that I'm on the free account.
00:26technomancyheh
00:27RaynesI'm setting a subdomain up for the heroku instance.
00:27technomancyI thought Clojure was supposed to be good at concurrency?
00:27Raynes:)
00:27Rayneshttp://h.tryclj.com/ this one is running on Heroku.
00:27RaynesCan't promise that it'll always be there.
00:28ibdknoxI thought it was just pretty. It does concurrency too?
00:28ibdknoxI bet it can even read from disk...
00:28tolstoytechnomancy: Following your instructions on https://github.com/technomancy/swank-clojure, and can "jack-in" if I start Emacs from the shell inside my leon project.
00:29tolstoytechnomancy: How do you do it if you start Cocoa Emacs GUI style?
00:29technomancytolstoy: there are various tricks; I think the gist of it is that you need to set your exec-path variable
00:29technomancybut I don't have a Mac myself
00:30tolstoytechnomancy: Ah, okay.
00:30technomancyclojurebot: mac os x path?
00:30clojurebotexecution timeout is 10 seconds
00:30technomancyI see.
00:30tolstoyI suppose if I do it at least once, "slime" will be installed and I can just slime-connect.
00:30technomancytolstoy: well, you probably want to fix your path. having a properly-configured path is good for more than just slime. =)
00:31technomancythe official Apple instructions tell you to write a plist.xml file, but I tell you to do that with a clean conscience
00:32technomancytolstoy: the other hacky workaround would be to symlink lein to somewhere on the default path
00:32tolstoyHm. I'm not even sure what you mean by fixing my path. Emacs context, or shell?
00:32tolstoylein is already on my path.
00:32tolstoyI use it all the time! ;)
00:32technomancytolstoy: it's on your shell's path
00:32technomancywhich is ignored by Mac GUI applications
00:32tolstoyAh. Hm.
00:33tolstoyI see that emacs as exec-path as you mentioned. I guess I can set that to /usr/local.
00:33tolstoytechnomancy: Anyway, knowing that the clojure-jack-in command is failing because it can't find lein on a path is helpful in and of itself.
00:34technomancyyeah, that is probably the #1 most annoying thing about Mac OS X
00:34technomancyas far as bug reports I have to deal with anyway
00:34technomancyI'm sure I could find more annoying things if I used it myself =P
00:35tolstoyHeh. Well, I suppose you could add: (setq exec-path (append exec-path '("/path/to/lein")))) as an example somewhere.
00:36technomancyyeah, I think that is probably the simplest solution
00:36Raynestolstoy: https://gist.github.com/1326920
00:36tolstoyIf we could get Sublime Text 2 to connect to swank, I'd be happy. ;)
00:36RaynesThis is what I use to fix my path for everything -- not just leiningen
00:36technomancythere's a way you can actually get the $PATH from a running shell process; that would probably be a bit more accurate
00:37RaynesI tried my best to get Sublime Text to work with cake, but Python in Sublime Text 2 doesn't seem to work the same as Python outside of it.
00:37technomancybut that should do the trick
00:38tolstoyRaynes: Thanks!
00:39RaynesI don't actually know what it does or how it works, but hey, it does.
00:40tolstoyYep. Slime/swank have started, now.
00:41tolstoyI've no idea if it knows I'm in my project, though.
00:41tolstoyDocs: From inside a project, invoke M-x clojure-jack-in.
00:42tolstoyHowever, I don't know how to indicate that I'm "inside a project".
00:42RaynesIt should just know.
00:42RaynesIf you're in a file inside that project, then you're in the project.
00:42technomancytolstoy: any file that's within the project root will do
00:43technomancyor directory, if you invoke it from the shell
00:43tolstoyIf I start emacs via command line while inside a project dir, I'm fine. But if I start the Cocoa version, the "working" directory is my home directory, I think.
00:43Raynestechnomancy: I don't think it needs to be in the root.
00:43technomancyby "from the shell" I mean from a shell inside emacs
00:43tolstoySo, (in-ns my-app.core) gets me class not found.
00:44technomancytolstoy: that's expected
00:44technomancyyou need to require it first
00:45ibdknoxnot having really done the whole emacs thing yet, but being on here enough to see all the questions
00:45tolstoyOkay, way, so…. I open an ansi-shell from within emacs, cd to my project, then run clojure-jack-in?
00:45ibdknoxis there some piece of documentation that needs to be written?
00:45technomancyibdknox: not as much as there being documentation that needs to be unwritten.
00:45ibdknoxor is it just that this is so finicky that you have to work through it every time?
00:45ibdknoxtechnomancy: hah. fair enough
00:45technomancyibdknox: the path thing is a general Mac OS X issue though
00:45RaynesThe problem is that 9 thousand people have written their (wrong) way of getting things set up.
00:46technomancynothing to do with slime
00:46RaynesWhich may or may not be their fault, depending what the state of Clojure in Emacs was at the time of the writing.
00:46ibdknoxright
00:46tolstoyIn the olden days when I first played with clojure, I just did "lein swank" and installed slime via package.el and it worked great.
00:46RaynesIn general, people should contribute official documentation rather than generate unofficial documentation and slather it across the internet.
00:47technomancyibdknox: anyway pretty soon you will know all the answers so I can just pretend to be AFK when people have trouble with slime. =)
00:47spoon16is there a way in clojure.contrib.io to do a buffered read of a file? I want to in a loop process a buffered byte array being read from a file so that the entire file does not need to be loaded into memory… I'd really like this to work somehow using the Streams protocol defined by clojure.contrib.io
00:47ibdknoxhaha
00:48RaynesContrib is deprecated. You'll want to check out clojure.java.io.
00:48ibdknoxtechnomancy: I'll stick with my VIM for now... Until cemerick and I build a new clojure environment ;)
00:48spoon16technomancy probably mentioned that earlier and then I went to contrib instead of java
00:48RaynesWell, the old contrib anyway.
00:48RaynesIt was split out into multiple libraries.
00:48technomancyclojurebot: mac os x path is screwed up when using GUI applications. if your Emacs instance can't find an executable, you can try fixing its $PATH with https://gist.github.com/1326920
00:48clojurebot'Sea, mhuise.
00:49tolstoyAh, ansi-term did the trick. I can get to a namespace now.
00:49spoon16still… how in clojure do I process one portion of a stream at a time?
00:50ibdknox$google lamina
00:50lazybot[Anchor Lamina - Manufacturer of Die Sets, Die Components, Metal ...] http://www.anchorlamina.com/
00:50ibdknoxdarn
00:50ibdknox$google lamina clojure github
00:50lazybot[ztellman/lamina - GitHub] https://github.com/ztellman/lamina
00:50ibdknoxspoon16: I suspect that ^ might be useful
00:50technomancylamina is pretty complex for something like that
00:51ibdknoxfair enough
00:51technomancyyou could just doseq over a line-seq
00:51technomancypresuming it's line-oriented textual data
00:51Rayneshttp://clojure.github.com/clojure/clojure.java.io-api.html#clojure.java.io/input-stream
00:52cemerickibdknox: oh, the pressure :-P
00:52ibdknoxcemerick: damn, I thought I said it quiet enough that you wouldn't hear ;)
00:54cemerickibdknox: I hear everything, everywhere.
00:55ibdknoxcemerick: I totally take back all that stuff I said earlier then.
00:55cemerick:-D
00:55ibdknoxhehe
00:55cemericks'ok, since no one can zing me worse than I.
00:56tolstoyAh, lovely. clojure.tools.logging + slime/repl: not so working.
00:56ibdknoxtrue of us all, I suspect
00:57ibdknoxHah, I forgot to announce that the new Noir version of readyforzero.com launched this past thursday :)
00:58ibdknoxclickable link: https://www.readyforzero.com
00:58Raynesibdknox, cemerick: We should all get together and hack up a Clojure editor in my suite on the 9th. Though I guess it'd mostly be me and ibdknox arguing over whether or not it should be modal and cemerick would be arguing with both of us about where the buttons should go and why we shouldn't integrate Clojure-based build systems.
00:58ibdknoxhaha
00:59cemerickRaynes: you're behind the curve on your cemerick stereotypes ;-)
00:59Raynes:p
00:59cemerick"cemerick never met an XML tag he didn't like" is always a classic
00:59ibdknoxoh no
01:00ibdknoxXML is evil
01:00ibdknoxevuhl, even
01:01RaynesXML is eval.
01:01ibdknox~rimshot
01:01clojurebotBadum, *ching*
01:02cemerickinanimate tools are amoral
01:02cemerickhrm, not so catchy
01:02ibdknoxlol
01:03Raynesibdknox: Congrats on the new site.
01:03RaynesIt's lovely.
01:03ibdknoxRaynes: thanks :)
01:03ibdknoxbtw, I'd settle for no modality... at first ;)
01:04RaynesIf it can't play tetris, it isn't worth editing code in.
01:04ibdknoxlol
01:05cemerick"Technologists making regrettable decisions are often neither foolish nor evil, but rather inextricably bound by the prevailing technocultural mores of their time."
01:07cemerick:-)
01:10technomancy"Database choices are like girlfriends. You don't know all the intimate details, and you probably don't want to."
01:12ibdknoxhahaha
01:12ibdknox(inc technomancy)
01:12lazybot⇒ 18
01:45tolstoyHm. So, in slime, if you eval or compile a function which is repeatedly called by a thread, it doesn't seem to change. Different from common lisp?
01:46technomancytolstoy: depends how the function is referenced
01:46technomancyHOFs can hold on to older versions of a function
01:47tolstoyHm. The function is the actual runnable of the thread, so I can see it would hold on to it.
01:48tolstoyOkay, that make sense.
01:49tolstoyI tend to write apps as a collection of "services" one of which is a web service, the others being connections to (say) rabbitmq, or file watchers, or something.
01:49tolstoyIt's quite fun to be able to use slime/swank to start and stop them independently of each other.
01:53tolstoyWow! Made a runner to invoke another function, recompiled the other function, and now both old and new functions are being called by the thread.
01:53tolstoyOkay, shutting up.
01:53Raynes&(. System/out println "foo")
01:53lazybotjava.lang.SecurityException: You tripped the alarm! System/out is bad!
01:53Raynes$botsnack
01:53lazybotRaynes: Thanks! Om nom nom!!
01:58ibdknoxRaynes: what's scary about System/out?
01:59Raynesibdknox: The fact that some guy was using it to spam tryclojure's console earlier.
01:59ibdknoxI see
02:00RaynesNothing dangerous about it, just annoying.
02:26fmwI'm having a problem with converting a macro that works in Clojure to something that generates the right Javascript output when used in ClojureScript: https://gist.github.com/c1d38d2107ec75239d67
02:27fmwbasically, I'm not sure how to reference a variable I create (route-segments#) in my generated code (right now it thinks it is vix.core.route_segments_SHARP_)
02:28fmwI'm aware that this is not the best time to ask, because I'm sure most people will be asleep or heading to work in virtually every timezone, but your input would be much appreciated ;)
02:28fmwnote that some of the generated Javascript lines may be very wide with a horizontal scroll, btw
02:34ibdknoxfmw: fully qualify route-matches
02:34ibdknoxand don't quote it
02:35fmwibdknox: how do you mean fully qualify?
02:35fmwnot sure what that means
02:35ibdknoxmy.ns/route-matches
02:35fmwibdknox: ah, I see!
02:35fmwlet me try that
02:36fmwibdknox: awesome, that fixes it!
02:37ibdknoxfmw: working on moustache for cljs?
02:38fmwibdknox: maybe something similar, not sure. for now, I wanted a nicer routing function for my app (https://github.com/fmw/vix)
02:38ibdknoxcool :)
02:39fmwbut I'm hoping to polish that code and eventually distill a small framework out of it, similar to moustache/compojure
02:40fmwthe routing based on html5 history URI changes (with the particular function loading the right content via XHR) is pretty neat for backend-type applications, at least
02:41ibdknox:)
02:41ibdknoxindeed
02:42ibdknoxneed to finish my sql'ing so I can get back to my CLJS :)
02:43fmwibdknox: yes, there is lots of interesting new stuff to do for it still (e.g. an elegant testing solution; which is pretty high on my todo list)
02:49fmwibdknox: hmm, there seems to be a similar problem remaining: the params variable in the body is fully qualified as vix.core.params now (see e.g. the var temp__3698__auto____2393 declaration, where it defines the clauses)
02:50fmwthat one should be the ~'params from the if-let
02:51ibdknoxwhere is params coming from?
02:52fmwits supposed to be the result of teh (route-matches ...) fn
02:52fmwbasically, the point of the macro is to make the result of that function (a map with values for the uri) available to the body
02:53ibdknoxand params# doesn't work?
02:53fmwibdknox: let me try
02:53fmwthe params is called in the body, btw, the Cljs (routes) fn listed earlier)
02:54ibdknoxhm
02:55ibdknoxyou probably want to do this a different way
02:55ibdknoxmagic variables like that are scary
02:55fmwibdknox: adding # doesn't work, no
02:56fmwalso, the clauses vari
02:56fmws/vari/variable seems to be declared *before* the params in the javascript
02:57fmwwhich probably works in the Clojure code as data sense, but seems problematic in Javascript
02:58fmwibdknox: I agree with you on the magic variable thing, but it felt like an OK solution to do it like this at the time
02:59fmwat least, I didn't find a better alternative
03:01fmwmoustache uses native destructuring, which is nice, but I wanted something similar to a (cond) structure with a default case
03:01ibdknoxI see
03:17fmwok, the problem was that the double when-let wasn't correct: it should only happen at compile time
03:18Raynesibdknox: Man, deploying to Heroku is so much easier than it should be. It's almost dangerously easy.
03:19ibdknoxRaynes: haha, even more points for technomancy ;)
03:19RaynesDid I miss something? ;o
03:19ibdknoxRaynes: he works there now
03:20RaynesOh.
03:20RaynesOoooooh. That's why he said 'heh' when I said that I didn't trust heroku earlier.
03:20ibdknoxhaha
03:20ibdknoxyeah
03:20ibdknoxMakin' enemies :p
03:20fmwlast remaining problem is that (feed/display-edit-feed-form (:language params) (:feed-name params)) produces weird output: return vix.views.feed.display_edit_feed_form.call(null,"﷐'language".call(null,params__2395),"﷐'feed-name".call(null,params__2395));
03:20fmw
03:21fmwfor some reason its calling params on the keyword string
03:21RaynesThough, I'm not sure there is anything stopping me from hosting on Heroku full time.
03:21ibdknoxfmw: it's calling the keyword, which is a function with the parameter params
03:21RaynesI'm just not sure how much pounding it will withstand on the free account.
03:22ibdknoxRaynes: the problem for me was always cost
03:22fmwibdknox: yes, in Clojure, but not in Javascript
03:22ibdknoxRaynes: heroku has a beautiful workflow and I made sure Noir deployed to it out of the box
03:22ibdknoxfmw: that code you pasted did exactly that
03:23RaynesI'd never pay for Heroku. Not for open source hosting anyway.
03:23ibdknoxfmw: "﷐'language".call(null,params__2395)
03:23fmwibdknox: that works in Javascript?
03:25ibdknoxfmw: I haven't looked too deeply into how they implemented keywords, but someFn.call() is definitely valid JS
03:26fmwibdknox: ah, I was wrong, it implements keywords like that, yes
03:27ibdknoxlol
03:27RaynesIt's kind of odd that Heroku isn't clearer on what exactly you get with a free account. Or maybe I'm just not looking hard enough.
03:27ibdknoxhttps://github.com/clojure/clojurescript/blob/master/src/cljs/cljs/core.cljs#L1219
03:27fmwI was sure it generated javascript going the other way around, but just tested it with (:foo {:foo "bar"}) and that returns "﷐'foo".call(null,cljs.core.ObjMap.fromObject(["﷐'foo"],{"﷐'foo":"bar"})); indeed
03:28Rayneshttp://stackoverflow.com/questions/4536326/heroku-free-account-limited
03:28RaynesThis leads me to believe that this could almost certainly handle tryclojure unless suddenly everybody on the planet decided that they loved Clojure and wanted to pound a javascript repl.
03:29RaynesI mean, it isn't like any kittens will die if I host it there full-time for a while and see what happens. I can move it back to my VPS whenever.
03:29ibdknoxIt's never been clear to me what a dyno equals
03:29Raynestechnomancy: Hear our cries! Document!
03:29Rayneshttp://devcenter.heroku.com/articles/dynos Well, this is helpful.
03:30Raynes"A single dyno can process one request at a time. For a typical app, this translates to somewhere between 10 and 50 dynamic requests per second."
03:30RaynesIt looks like, for the most part, they limit performance, not overall usage.
03:31RaynesAnd tryclj is kind of slow anyways.
03:31RaynesBut not nearly as slow as tryruby
03:31RaynesYeah, I'm just going to switch it over for now. Give it a while.
03:31ibdknox:)
03:32zakwilsonI'm playing around with irclj. The bot doesn't seem to want to connect, and isn't spitting out any information about the attempt.
03:32Rayneszakwilson: Any exceptions or anything? Anything at all? :(
03:33zakwilsonRaynes: nothing. I can display the bot and see :connected? false.
03:33RaynesCan you show me your code?
03:33zakwilsonSure.
03:34zakwilsonhttps://gist.github.com/1327073 <-- it should join this channel and do nothing.
03:36RaynesLooking now.
03:40RaynesHow are you running the bot?
03:40RaynesI just ran it and it connected fine. However, it says that the nickname is already in use, so your bot is connected on freenode. It just isn't in here.
03:40RaynesEither that or somebody else has irclj_bot_test… somehow.
03:41Rayneszakwilson: ^
03:41zakwilsonI'm just evaluating the (def bot...)
03:41RaynesIn a repl?
03:41zakwilsonslime
03:41RaynesThat is almost certainly your problem.
03:41RaynesOutput is probably being directed elsewhere.
03:42zakwilsonWell... I can see how that could happen.That shouldn't cause it to not connect though, should it?
03:43Rayneszakwilson: No, but he was already connected a moment ago when I tried to connect. Just wasn't in here. No clue why.
03:43zakwilsonI got exactly the same behavior in a cake repl.
03:43RaynesHe is connecting for me fine, but he isn't joining the channel.
03:43RaynesTrying to figure out why.
03:44Rayneszakwilson: cake redirects output as well. check .cake/out.log
03:45Rayneszakwilson: I see your problem.
03:45Raynes:channels is something you pass to connect -- not create-irc. Why? I have no idea.
03:46RaynesBut that and sneaky output redirection are your problems, I think.
03:47Raynes:)!
03:47zakwilsonWell that looks like something different.
03:47zakwilsonmsgs => #<Agent@1d272e52: [":)!" "Well that looks like something different."]>
03:48RaynesHah
03:48zakwilsonWell, that's working. Thanks.
03:49RaynesNo problem. If you run into any issues, let me know. I'm going to do some serious work on it after the Conj.
03:50zakwilsonIt looks nice except the oddness with the channels arg. Why DID you do that?
03:52ibdknoxI called my little IRC experiment bizirc. A fitting name, I think. IRC is a ridiculous protocol
03:53zakwilsonNow, one more thing I need: something that lets me call a function periodically - say every 10 minutes.
03:55ibdknoxyay executors :p
03:55ibdknoxactually
03:55ibdknoxat-at might cover that
03:56ibdknoxzakwilson: https://github.com/overtone/at-at
03:56zakwilsonibdknox: thanks
03:56ibdknoxsam is awesome
03:57pyribdknox: i have something similar here: github.com/pyr/tron
03:57ibdknoxhaha
03:57ibdknoxnice name :)
03:58pyr:)
03:58ibdknoxI should stop rewriting that
03:58ibdknoxand just use one of these
03:58ibdknoxI think I've written executor code 3-4 times now
03:59Rayneszakwilson: I have no idea.
03:59RaynesBecause I'm a stupid teenager that does stupid teenager things, I guess.
03:59ibdknoxRaynes is mostly asleep when he writes libraries for other people to use ;)
03:59zakwilsonThat's a good reason, I suppose.
04:00RaynesI'm going to hate 2014. Turning 20 is going to take away my only good excuse for writing bad software
04:00ibdknoxoh no
04:00ibdknoxyou get to keep that until 25ish
04:01RaynesReally? Excellent.
04:01ibdknox"oh don't mind him, he just got out of college"
04:01ibdknox"they don't teach real programming there"
04:01ibdknoxlol
04:01ibdknoxSo you're safe for a bi
04:01ibdknoxt
04:02pyr75% of the programming crowd doesn't write good software ever
04:03pyrso you should be safe
04:03RaynesIt's a good thing we have you.
04:03Raynes:>
04:03pyri didn't mean it like that
04:03RaynesI know what you meant.
04:03RaynesI was just being cocky.
04:04pyrit sounded cocky the way i phrased it too
04:04pyrbut i'm french, being cocky is like second nature to me
04:04ibdknoxhaha
04:04ibdknox(inc pyr)
04:04lazybot⇒ 1
04:04ibdknoxbtw 75% is a bit low ;)
04:04pyri know
04:05pyrfunny thing though
04:05pyrin the near future
04:05ibdknoxthe distribution of talent is no different for programming than anything else, unfortunately
04:05pyrthe bad programmers won't only do java and php anymore
04:05ibdknox(and JS)
04:05pyri'm pretty sure there's gonna be a new kid on the block
04:05pyrnode.js looks like a strong contender
04:06pyrit's got all the php magic
04:06ibdknoxJS makes it so easy to write awful code
04:06ibdknoxand so incredibly hard to write even decent code
04:06pyrno structure, easy spaghetti, inline templates
04:06ibdknoxthe cruise control for awesome ;)
04:07ibdknoxI originally wrote typewire in node
04:07ibdknoxit was disgusting
04:07ibdknoxrewrote it in clojure at less than 30% of its original size
04:07pyri can see its relevancy for very small things
04:08Raynesibdknox: could you run host against tryclj.com for me?
04:09ibdknoxDNS caches suck
04:10ibdknoxespecially when you get something upstream caching the record
04:10ibdknoxthen you're stuck for a few hours
04:10RaynesIndeed.
04:11Rayneslicenser: You wouldn't happen to be around, would you?
04:12ibdknoxalright gentlemen, I've stared at the documentation I haven't been writing for long enough :p
04:12RaynesActually, never mind. I'll just make nginx redirect it.
04:13ibdknoxg'nite!
04:13RaynesNight
06:19Chousukehm
06:19ChousukeI don't understand how emacs starter kit works
06:20Chousukeisn't elpa supposed to add packages to my load path automatically. that doesn't seem to be happening for all of the packages :/
06:24Chousukelooks like it's loading files from my config before it adds elpa stuff to the load path
06:38AWizzArd|workWhat version of the ESK did you download?
06:40AWizzArd|workI am under the impression that this Elpa thing downloads files into ~/.emacs.d /elpa and just loads that stuff when starting Emacs.
06:43AWizzArd|workBut for example Paredit, I found, is not activated automatically. I had to actively load it in my user.el file.
06:50fhdCan anyone point me to a little Clojure code style guide? I'm confronted with some code that has >160 column long lines and puts closing parens on a separate line. I want to make them stop :)
06:57ChousukeAWizzArd|work: the issue seemed to be that esk loads its config files too early, when elpa hasn't finished loading all autoloads for installed packages
06:59ChousukeI added my configuration in init.el after (package-initialize) but I wonder if there's a better way.
06:59ChousukeI still can't make ipython work well with emacs though, it seems pretty broken
06:59Chousukeemacs hangs completely whenever I try to tabcomplete something :P
07:00AWizzArd|workChousuke: in the init.el file there should be just a few lines of code, shown under "Installation" at https://github.com/technomancy/emacs-starter-kit
07:01AWizzArd|workBut you should add in the same folder that contains the init.el also a file named chousuke.el or whatever your username is.
07:02AWizzArd|workIn that file one can put some configuration settings.
07:04ChousukeAWizzArd|work: yes but esk loads those too early it seems
07:04ChousukeAWizzArd|work: if I put code there I get errors about python-mode not being in load path
07:04Chousukewell, to be precise I put code in a file under .emacs.d/$USER/
07:05AWizzArd|workChousuke: you can rename your current .emacs.d folder, make sure that no file ~/.emacs exists and just unpack a fresh checkout of ESK and rename that to .emacs.d, add the 4 line init.el file and slowly add your configuration.
07:05ChousukeAWizzArd|work: my esk is installed from ELPA
07:05AWizzArd|workChousuke: mine is in ~/.emacs.d/at.el
07:05Chousukeon emacs 24
07:06AWizzArd|workYes, the current ESK from technomancy only delivers the absolute basics.
07:06AWizzArd|workYou have to add that init.el file yourself and from there on download the ESK via this Marmelade thing.
07:06AWizzArd|workI am on Emacs 24 too.
07:08ChousukeAWizzArd|work: that's what I did
07:08AWizzArd|workAnd directly after those few steps it already can not start?
07:09ChousukeAWizzArd|work: it does start, but if I install python-mode from elpa, then try to require it in .emacs.d/oranenj/python-programming.el, things do not work.
07:10AWizzArd|workI see.
07:11ChousukeI suspect this is because the package manager runs starter-kit before adding the python-mode package to load-path
07:12ChousukeI'm not quite sure what I can do to fix that :/
07:41AWizzArd|workSo the python load problem is not due to your own config, right?
07:55licenserRaynes: now I am
08:10Chousukehmmhmm
09:54todunhi all. I'm looking to see if I can find an example of using clojure to implement google's MapReduce algorithm using Software Transactional Memory. Any help is appreciated. Thanks.
09:54todun(something simple would be nice, still new to clojure)
10:02TimMctodun: Where does STM come in? (I'm not familiar with MapReduce, but I am familiar with map and reduce...)
10:03jolyI'm not sure why you'd use shared state for it
10:03todunTimMc: STM comes in when I want to solve some random problem that can be re-written concurrently.
10:03todunjoly: to get more experience with the topic.
10:15leo2007My linux distro comes with clojure 1.1. Should I install a newer one?
10:16babilenleo2007: Yes (which distro is this?)
10:16pyrleo2007: you might as well just install leiningen and let that handle your clojure versions
10:16babilen+1
10:17davidruppleo2007: You will want either 1.2.1 or 1.3.0.
10:17pyrleo2007: https://github.com/technomancy/leiningen
10:17babilenleo2007: Which distribution is this?
10:19leo2007ubuntu 11.10
10:22babilenleo2007: AFAIK Ubuntu messed up the packaging of leiningen. The version 1.6.1.1 in Debian works fine, so you might want to install leiningen from upstream for now. That being said: Clojure 1.2 has been packaged as clojure1.2 and clojure1.3 is in Debian but not Ubuntu.
10:25leo2007babilen: I have leiningen 1.6.1 in the repo of ubuntu
10:26leo2007but they don't have clojure 1.3. Is there any compatibility issue between 1.3 and 1.2.1?
10:26babilenleo2007: Yes, I know. Unfortunately Ubuntu messed up the sync and now has a version of leiningen in the repositories that does not work with the packages java ecosystem. I fixed this in Debian, but can't upload to Ubuntu. See https://bugs.launchpad.net/ubuntu/+source/leiningen for details.
10:27babilenleo2007: So just install leiningen directly from https://github.com/technomancy/leiningen for now as suggested by pyr.
10:28davidruppleo2007: Take a look at http://dev.clojure.org/display/doc/1.3, particularly section 1 (Deprecated and Removed Features)
10:30davidruppleo2007: Also https://github.com/clojure/clojure/blob/master/changes.md. There's a comment on the dev.clojure.org page that claims it's out of date.
10:30babilenleo2007: I would personally recommend to use/learn/target clojure1.3. The only downside is that you might find that some of the contrib libraries are not available due to the restructuring detailed on http://dev.clojure.org/display/design/Where+Did+Clojure.Contrib+Go
10:31davidruppleo2007: Or if you're going to use libraries that have not yet been upgraded to 1.3.
10:40lnostdali guess the wiki on http://dev.clojure.org/display/doc/1.3 hides the * characters around fred there
10:40lnostdalit says (def fred) but it should say (def *fred*)
10:41leo2007What would be a good book to buy? I am looking for something like K&R but for clojure.
10:42mdeboardleo2007: Joy of Clojure and Practical Clojure are both very good
10:44fdaoudleo2007: if you can wait a month or two, there are also two more books coming: Clojure Programming (O'Reilly) and Clojure in Action (Manning)
10:44fdaoudalso upcoming but later on, Programming Clojure, second edition (Pragmatic Programmers) and Meet Clojure (No Starch Press)
10:45leo2007so many books. which of the two languages are doing better, scala or clojure?
10:45fdaoudhehe
10:46fdaoudClojure. Did you ask that question on #scala too? :D
10:46leo2007fdaoud: no.
10:46llasram`leo2007: If you're just going to get one book, I double-plus recommend /Joy of Clojure/. It really gets the reasoning behind language features and why they work as they doo
10:46llasram`s,gets,explains,
10:48babilen+1 for Joy of Clojure -- Great book and a good introduction.
10:49leo2007llasram`: thanks for that.
10:51babilenleo2007: Scala and Clojure are quite different languages. I can, as probably most people in here, only recommend to learn Clojure in particular if you haven't learned a lispy language before. You *will* like it and the community is just marvellous. The decision also depends on the project you want to use it for, but I personally like the "feel" of Clojure much more than the feel of Scala. YMMV
10:54leo2007babilen: OK. I prefer language lispy than javay.
10:55fdaoud+1 babilen
10:59leo2007how to teach lein to use clojure 1.3 instead of 1.2.1?
11:00gfrederi1ksleo: change the version in the project.clj?
11:01babilenleo2007: Edit project.clj, use something like " :dependencies [[org.clojure/clojure "1.3.0"]]" in there and run "lein deps"
11:02babilenleo2007: fwiw, I just pinged the Ubuntu people and the issue should be solved soon
11:04babilenleo2007: Let us know if you need help with your Emacs/Vim/Clooj/Eclipse/... setup :)
11:05TimMctechnomancy: Why does lein default to 1.2.* for new projects?
11:06babilenTimMc: IIRC the change to 1.3 is planned for 2.0 -- I guess the template just uses the clojure version leiningen uses itself.
11:07babilenBut yeah, good question.
11:07TimMcah
11:08leo2007babilen: I setup the emacs+slime+clojure long ago. One of the nagging issue is bundling of an outdated slime.el which after loading interferes with my slime setup for Common Lisp.
11:08babilenleo2007: Ok, are you using https://github.com/technomancy/swank-clojure and https://github.com/technomancy/clojure-mode (both are on marmalade)
11:09babilen?
11:09babilen.oO( technomancy the toolbox )
11:25leo2007`clojure-mode.el references font-lock-beg and font-lock-end, where are those vars defined?
11:29llasram`Huh. That is interesting. I think they must be dynamically-scoped variable which are part of the font-lock "API"?
11:29llasram`leo2007`: Are you hacking on clojure-mode ?
11:30leo2007`I can hack on clojure-mode.
11:31leo2007`llasram`: See this many compiler warnings: http://paste.pound-python.org/show/14475
11:32llasram`Ahh, I see. Yes. If you pop open font-lock.el, you'll see `defvar's for font-lock-beg and font-lock end. Part of the API, so not much to do about it
11:34leo2007`llasram`: thanks. Could something like this be installed? http://paste.pound-python.org/show/14478
11:39llasram`I've never been a hard-core elisp programmer, but maybe? The documentation for elisp `defvar' suggests that multiple invocations for the same symbol should be safe
11:42leo2007`llasram`: yes. and maybe this too http://paste.pound-python.org/show/14479
12:22jcromartie"Paul Graham originally wrote reddit, in lisp, on the back of a napkin while he was waiting for a coffee. it was so powerful that it had to be rewritten in python just so that ordinary computers could understand it."
12:23hiredmanI heard he was waiting for tea
12:23jcromartieI'm drinking tea.
12:23Chousukedidn't he write it in arc, and it's called hacker news :P
12:23TimMcIt was definitely yerba maté, I have this from a very good source.
12:27kephale1has anyone here tried shen for anything practical?
12:28jcromartiekephale1: the weird closed-source Lisp?
12:28kephale1weird, maybe, but the sources seem to be available
12:28jcromartieoh, I thought it was not open
12:29kephale1it has peculiar licensing that you can only modify the source in a certain way, but it is freeware
12:33jcromartiehm that is peculiar
12:33simardyup, why even go for it then..
12:34jcromartieI think it would discourage me from using it in production, seeing as it looks like a one-man job, and there's no other backing as far as I can tell.
12:34jcromartieMost closed languages have massive corporate backing, and most open languages have massive community backing.
12:34jcromartieBut Shen just... doesn't.
12:34jcromartieEven then, I don't really know what it brings to the table that couldn't just be a library in other lisps.
12:35jcromartiewell, I guess it is implemented in CL...
12:35jcromartieso it basically is a library
12:35kephaleyeah
12:35jcromartiecould be ported to Clojure
12:36kephalei thought i heard that it had been
12:36jcromartiehm
12:37kephalethe reasoning for investigating it being that I want a nice C/C++ based lisp that i can plug in to some code that i have
12:37kephaleit only there was a port of clojure
12:46khaliG_jcromartie, pattern matching is pretty nice
13:06technomancyTimMc: lein uses 1.2 in new project skeletons because that's what existed at the time of the last leiningen release =)
13:08technomancyRaynes: so tryclj.com is all switched over?
13:09Raynestechnomancy: Yep.
13:09technomancysweet
13:09ibdknoxtechnomancy: question about dynos
13:09technomancysure
13:10ibdknoxtechnomancy: how do they ensure only one request is taken car of at a time, since jetty is going to spawn N threads for N concurrent requests?
13:10ibdknoxcare*
13:11technomancyibdknox: I believe that particular piece of info is outdated and only applies to the old ruby-only stack
13:11ibdknoxtechnomancy: k, I that's what I figured. Do you know what a dyno is at a practical level?
13:12ibdknoxugh typing fail
13:12technomancyit's basically just the abstraction over a process.
13:13technomancyeach dyno has a single process associated with it at a given time, but that process can die and get restarted or get migrated to a different host.
13:13RaynesAll I know is that this deploy workflow is just the bees knees.
13:13ibdknoxI see, is a process allocated a certain amount of resources?
13:14ibdknoxRaynes: yeah, it's beautiful :)
13:14RaynesI don't even have to ssh into my VPS and run a shell script anymore! I mean, I could have had automation before, but I was always too lazy to set anything up. Heroku does that for me automagically.
13:17technomancyheck yeah
13:18Fossihow can i generate a recursive function like this: (myfunc foo #(myfunc foo #(myfunc foo [...])))?
13:21simardRaynes: heroku vs amazon ec2 ?
13:21simardheroku seems to be a bit more expensive
13:22ibdknoxsimard: ec2 is cheaper and is more manual, which may or may not be necessary
13:22ibdknoxsimard: for most apps heroku is much easier to get along with
13:23Raynessimard: Never used the latter.
13:24fdaoudFossi: along the lines of (iterate myfunc foo) ?
13:25Fossifdaoud: ah, excellent, thanks
13:26Fossiah, not quite
13:26Fossibut i think repeatedly should somehow work
13:29llasram`Wouldn't a better comparison be heroku vs elastic beanstalk? I think elastic beanstalk is JVM-only, but otherwise...
13:30llasram`I haven't used either, but I keep meaning to :-)
13:30ibdknoxllasram`: yeah they're very different levels of abstraction
13:30ibdknoxec2 and heroku that is
13:31cemerickIt's really hard to make direct comparisons; most people choose one or the other because of some key feature they need that others lack, not because A is "better" than B.
13:31llasram`Right. In fact, I learned recently that heroku runs on EC2
13:31cemerickec2 != beanstalk, of course.
13:31ibdknoxyeah
13:54simardllasram`: heroku runs on ec2 ? cool.. it's a real economy out there, with resellers and all :)
14:10Raynestechnomancy: I heard that ec2 was just a cover and that, in reality, Heroku was hosted on God's very own servers. Is this true?
14:10Chousuketechnomancy: I hit a slight issue with emacs-starter-kit today. It seems esk loads the user config files at a point where not all elpa packages have been added to the load-path so I get errors about them. I solved it by moving the config loading into a function and adding that to after-init-hook, but is there a better way?
14:10technomancyRaynes: I can neither confirm nor deny said allegations.
14:10hiredmantechnomancy: I am seeing "let*: Not enough arguments for format string" when trying to run clojure-jack-in
14:11technomancyChousuke: in general user.el is used a lot less in v2 of the starter kit; can you just move everything to init.el?
14:11technomancyhiredman: from clo-mo git?
14:11hiredmanyes
14:11hiredmanmaybe a few days ol
14:11hiredmanold
14:11technomancyhmm... lemme see
14:12technomancyhiredman: what's clojure-swank-command?
14:12Chousuketechnomancy: I guess I could
14:13technomancyChousuke: I need to make that clearer; needing user.el is really an edge case in v2.
14:13technomancyit was necessary in v1 because esk monopolized init.el
14:14Chousukecustomize complains a lot about variables being set outside it too :P but I guess that's mostly a cosmetic issue
14:14hiredman"cd %s && lein jack-in %s &"
14:15ChousukeI've been trying to figure out how to get a good python repl but it seems to be a mess :/
14:15technomancyhiredman: ok, the cd part shouldn't be necessary
14:15Chousukethings change variables all over and I can't figure out where the issues are
14:15technomancyChousuke: customize is a mechanism designed to trick people into thinking they don't need to write elisp. =)
14:15Raynestechnomancy: http://technomancy.us/153 Your second code block has a line sticking out. The "starter-kit-eshell" part. In safari. Haven't checked elsewhere.
14:15technomancyChousuke: almost all the setq calls are in starter-kit-misc.el
14:15hiredmanso, uh, how do I get rid of it? it's not like I added it
14:15RaynesOnly two ls though, so it's forgivable.
14:16Chousuketechnomancy: yeah, but for the python stuff there's python-mode.el, ipython.el and anything-ipython.el at least :P
14:16technomancyhiredman: I dunno; that's not the default value.
14:16hiredmanthe only to references to clojure-swank-command in ~/.emacs.d are the defcustom and the use in the let
14:16hiredmanI have nothing setting it
14:17hiredmancan you just setq a defcustom?
14:17technomancymaybe an old version of clojure-mode is getting loaded somehow and adding the cd part?
14:18technomancyI vaguely recall an older revision using cd
14:19hiredmanalso, "lein jack-in %s" works fine for me, but the if statement there ends up picking "echo \"lein jack-in %s\" |sh"
14:19hiredman(which is dumb, because sh is not my shell and has no idea what my PATH is)
14:19technomancyhiredman: probably because it runs before your path has been fixed
14:20hiredmanno
14:20technomancyhiredman: you don't set your $PATH in ~/.profile?
14:20RaynesI've written about as much elisp as… well, the elisp I added to clojure-mode.
14:20hiredmanbecause I use the same dotfiles on many machines and have machine dependent .zshrc's that customize the PATH
14:20technomancy=\
14:20technomancyI do have an uncommitted revision here to use $SHELL
14:21technomancybecause lots of people are confused about .profile anyway.
14:21hiredman*shrug*
14:22hiredmaneither way, 'lein jack-in' works without that nonsense, but clojure-mode ignores it and picks the other one
14:22technomancyyeah, but I don't want people to have to think about the $PATH brokennes
14:23technomancy"echo \"lein jack-in %s\" | $SHELL -l" appears to work; going to go with that
15:06R4p70rIs there an existing function that returns the seq containing the most elements like (defn longest [x y] (if (> (count x) (count y)) x y))
15:08leafwhttp://clojure.org/java_interop#Java%20Interop-Type%20Hints seems out of date: no mention of primitive type hinting in functions and return types.
15:08leafwis that right, or am I looking at the wrong page?
15:09leafwand is ^static still valid for defining a function, or not
15:09leafw?
15:10RaynesPretty sure static is a dead idea.
15:11leafwRaynes: so it is a no-op
15:11TimMc,(count "\ud80c\udc00") ; could count count code points instead of chars, maybe?
15:11clojurebot2
15:12Raynesleafw: I'm not sure about that.
15:24TimMcOMG, j.l.String doesn't even have a simple way to get the number of Unicode characters in the string!
15:25llasram`leafw: A quick perusal through the Clojure compiler code shows all actual use of {:static true} metadata commented out
15:27leafwllasram`: thanks
15:50jcromartieTimMc: would it be useful to provide a unicode character reader/seq?
15:57jcromartie(defn unicount [s] (count (remove #(Character/isHighSurrogate %) s)))
15:57jcromartielame, yes
15:59R4p70rjcromartie, that's simple ;-)
16:01R4p70rjcromartie, What kind of problem makes you deal with the "astral" planes of Unicode?
16:02jcromartieR4p70r: not me... TimMc
16:02jcromartieI just deal with UTF-8 in and out... escaping the nasty characters where necessary
16:03jcromartiehey wait
16:03jcromartiebetter yet
16:04jcromartieString.codePointCount
16:04jcromartie"Returns the number of Unicode code points in the specified text range of this String."
16:04jcromartieanyway I come here and solve silly tangential problems when I don't feel like dealing with work
16:05jcromartieso
16:05jcromartieyeah
16:05TimMcjcromartie: I have a nasty feeling codePointCount actually walks the string each time.
16:06TimMcThere is no arg-less variation, so I don't think it is special-cased for whole-string counts.
16:06TimMcR4p70r: You might as well ask what kind of problem makes me deal with non-ASCII.
16:09jcromartieTimMc: I don't think there's any way to count code points without walking the string. The only way to avoid doing it more than once would be to memoize the result.
16:11jcromartieTimMc: of course they could fix j.l.String to store the code point count along with the length but that would require walking it at least once anyway
16:12jcromartieI think counting unicode characters is a rare use of String anyway
16:12mattmitchellis it possible to use apply on java method calls?
16:12jcromartiemattmitchell: you have to use memfn
16:12mattmitchell,(doc memfn)
16:12clojurebot"([name & args]); Expands into code that creates a fn that expects to be passed an object and any args and calls the named instance method on the object passing the args. Use when you want to treat a Java method as a first-class fn."
16:13mattmitchelljcromartie: ahh thanks!
16:13R4p70rTimMc, I agree with jcromartie. Java strings were originally designed as UCS-2 strings.
16:13jcromartieactually mattmitchell I think I'm wrong
16:14edwIs there a channel for ring, or should I just go ahead and try here?
16:14jcromartieedw: here is good
16:15jcromartiemattmitchell: actually yes, you want memfn, but you have to specify the arg names... it's weird
16:15mattmitchelljcromartie: ok cool, i'll have a look. thanks.
16:17edwCool. I'm using wrap-multipart-params and I'm getting an ItemSkippedException from inside ring's parse-multipart-params. Any idea what's up?
16:18jcromartieare you uploading files?
16:18edwYes.
16:19jcromartiesounds like you've got a lazy seq that's reading file data
16:19jcromartieright?
16:19clojurebotEqual Rights for Functional Objects is Baker's paper on equality and why it's impossible to define sensible equality in the presence of mutable data structures: http://home.pipeline.com/hbaker1/ObjectIdentity.html
16:19jcromartieand when the lazy seq is realized, it's reading from a stream that the file upload iterator has already moved on from
16:20jcromartieedw: paste your code (gist or pastebin)
16:20edwYou mean, am I actually uploading a file when I exercise the code? Or am I desiring to upload files, in a broader sense. I am submitting a multipart form.
16:20gfrederi1kswow -- I just discovered you can cause the reader to blow the stack with an 8-character string
16:20edwOK.
16:20jcromartiegfrederi1ks: what's the string? :)
16:21gfrederi1ks"```````x"
16:21ibdknoxhaha
16:21ibdknox:p
16:22gfrederi1kseven if it didn't blow the stack, the size of the return value grows exponentially with each backtick, so you could elsewise fill up memory
16:22edwHere you go: https://gist.github.com/1328776
16:22edw(Thanks for looking at this, btw.)
16:23ibdknoxedw: your form isn't multipart
16:23ibdknoxoh
16:23ibdknoxnm
16:23edwHow do you know that, ibdknox?
16:24ibdknoxedw: magic ;) Also I read too quickly
16:24edwI have 'enctype="multipart/form-data"' in my HTML...
16:25jcromartieedw: so your POST /toc handler just responds with the uploaded file contents?
16:27edwjcromartie: Eventually I'm going to save it, using SPIT, at least to start.
16:27jcromartieya
16:27ibdknoxedw: java.io.copy
16:28edwBut I get the same error even if I comment out that line and return something more mundane.
16:28ibdknoxedw: I don't see anything obvious with what you have here
16:28ibdknoxedw: what version of ring/compojure?
16:28edwring 1.0.0-RC
16:29ibdknoxedw: can you put the stacktrace in with your gist?
16:30edwSure.
16:30jcromartieah, yes, stacktraces help :)
16:30edwJust updated it.
16:33ibdknoxI really don't know :/
16:34edwYeah. Has me stumped too. Time to build the smallest reproducible example I can.
16:34ibdknoxI know I got noir to do an upload the other day, but I can't remember if it was ring RC or beta
16:35jweissso, i'm trying to get prxml working with clojure 1.3. it calls clojure.contrib.string/escape which says {:deprecated "1.2"} but no message as to what replaced it?
16:36jweissthat fn is throwing a rather odd error NoSuchMethodError clojure.lang.Numbers.lt(II)Z
16:36ibdknoxjweiss: clojure.string/escape
16:36ibdknoxwhere did contrib go?
16:36ibdknox$google where did contrib go?
16:36lazybot[Where Did Clojure.Contrib Go - Clojure Design - Clojure Development] http://dev.clojure.org/display/design/Where+Did+Clojure.Contrib+Go
16:36ibdknoxthat trigger must have been removed
16:37jweissibdknox: i know where contrib went, maybe i don't understand the word deprecated
16:37jweisswouldn't deprecated 1.2 mean, deprecated IN 1.2?
16:37jweissnot, "after" 1.2?
16:37ibdknoxjweiss: that's how I'd read it, yeah lol
16:38jweissi guess clojure.string is supported in 1.2 so it is right
16:38ibdknoxyep
16:38jweissbut i am used to java where javadoc usually tells you what to use instead :)
16:38ibdknoxthe would definitely be better
16:39jweisswell i guess i'm gonna package up my own prxml then, i haven't signed the contributor agreement yet
16:40jcromartieedw: what if you don't do (log/info (str file))
16:44jcromartieedw: I'm looking at this https://github.com/mmcgrana/ring/blob/master/ring-core/src/ring/middleware/multipart_params.clj
16:45jcromartieI think the implementation is wrong here, and it should not be using a lazy seq to build the param map
16:46ibdknoxhah
16:46ibdknoxI bet you're right
16:47jcromartieanyway, edw, the problem is that something is attempting to read the stream after the FileItemIterator has moved on
16:50jcromartielook for anything using :stream
16:51jcromartieI wonder if reduce is reading ahead in the seq?
16:52ibdknoxwell
16:52ibdknoxthe issue has to be something specific to his implementation. uploading works
16:53jcromartiein general?
16:53jcromartieI'd hope so :P
16:54jcromartiereduce doesn't seem to be eager with consuming the output of a lazy-seq
16:54jcromartieso yeah
16:56arohneris there a fn for determining whether a value can have metadata attached?
16:56arohnerlike (supports-meta? x)
16:58arohnersigh, (apropos meta) shows a "supports-meta?" fn, but doesn't tell me which ns it's in
16:58jcromartieonly symbols and collections
16:59ibdknoxand fn's I thought...
16:59jcromartieno, only their vars
16:59jcromartiebut it's really on the symbol of the var...
16:59jcromartieit's kind of, complicated
16:59jcromartieat least I think
16:59jcromartiebut it works
16:59arohnerI'm pretty sure I just need to check (instance? clojure.lang.IMeta)
17:00arohneractually, IObj
17:00jcromartieyeah I was going to say
17:00jcromartie,(source meta)
17:00clojurebotSource not found
17:00jcromartieoh
17:00jcromartiewell
17:00jcromartieIMeta is good
17:00ibdknox,(meta (fn []))
17:00clojurebotnil
17:01ibdknox,(with-meta (fn []) {:name "cool"})
17:01clojurebot#< clojure.lang.AFunction$1@1fcd9f9>
17:01ibdknox,(meta (with-meta (fn []) {:name "cool"}))
17:01clojurebot{:name "cool"}
17:01jcromartieso fns do have metadata
17:01ibdknoxjcromartie: fn's can have meta :p
17:02jcromartiefunctions, collections, symbols, vars
17:03jcromartiebut the metadata on the actual function value of a defn is different from the metadata on the var
17:32jweissughhh, clojure 1.3 totally ruins any attempts at tracing
17:33jweisswell, not totally, but the only way I can think of to do it, by rebinding
17:33jweisslike clojure.contrib.trace does
17:34technomancywith-redefs?
17:36jweisstechnomancy: that looks like it may work, thanks
17:38technomancycool
17:39jweisstechnomancy: seems to work surprisingly well, just replaced "binding" in the existing trace macro with "with-redefs".
17:41arohneris there a workaround to chunking when using 'for'?
17:42jweissah, except, i used to be able to send traces of different threads to different files, that won't be straightforward now without thread-local bindings
17:43jweissi guess the trace fn can check it's own thread
17:44jweissi wonder if i can just with-redefs to just apply ^dynamic and go from there
18:01TimMc,(let [cpcount #(.codePointCount % 0 (.length %)), a "\ud80c" b, "\udc00"] (map (juxt count cpcount) [a b (str a b)]))
18:01clojurebot([1 1] [1 1] [2 1])
18:01TimMc:-(
18:01RaynesYou'll get it eventually, pal.
18:05TimMcRaynes: Just noting that cpcount is not linear across j.l.String concatenation.
18:06Raynestechnomancy: I want a Heroku t-shirt. What can I do about this?
18:06technomancyRaynes: we'll have some at the conj to hand out for sure
18:07RaynesAwesome!
18:07RaynesYou'd do well to watch me. I'm apt to hoard them.
18:08RaynesI've got about 4 different Clojure shirts of various sizes from last year's conj. Though to be fair, there were waaaaaay too many of them.
18:08RaynesThe worst part is that I haven't worn one of those shirts even once.
18:08RaynesBut my mother has.
18:09technomancythe thing I always forget about conferences is that you don't need to pack as many shirts as you think you do
18:09technomancybecause you always get some there.
18:09sean-awayi didn't get to the conj but a friend got me one of those shirts - which i wear to other user group meetings to spread the clojure love!
18:09RaynesI just don't wear white.
18:09technomancyyeah, I have too many white conference shirts already =\
18:10FreidenkerNewbie question: When I open the RELP in a terminal I can't use the arrows, I'll get weird symbols (e.g.: "user=> ^[[D" for the <- arrow)
18:11ibdknoxFreidenker: how are you starting your repl?
18:11RaynesYou need to use rlwrap or something similar. lein and cake do this for you automatically.
18:11Freidenkeribdknow: I type "clojure" in a terminal (Linux)
18:11FreidenkerIt's ibdknox, sorry :P
18:12ibdknoxFreidenker: use leiningen, it'll make your life much easier
18:12Rayneshttp://blog.raynes.me/blog/2011/10/22/problems-with-clojure-plus-homebrew/
18:12Raynes^ This is a post I did on this topic. Be careful -- it's pretty heavy with snark.
18:12ibdknoxFreidenker: most OS distributions of Clojure are terribly broken
18:13sean-awayi wrote up a blog post on installing Emacs / Leiningen / Clojure for Windows - despite grumbles from the peanut gallery here that we have too many out of date blog posts about that...
18:13FreidenkerOK I'll try that, thank you very much.
18:13RaynesTo be fair, installing Leiningen with your package manager would probably be okay. If it is actually there. But I wouldn't bother, because it'll be a horrible pain to update it and stuff.
18:13technomancyI'm wondering if the term "build tool" confuses people about this.
18:14seancorfieldi had a few friends try it out, mostly on Windows 7 (i'm on windows xp) and they mostly got up and running with it
18:14technomancyI can see how people would see that and think "oh, I don't need that yet; I just want to get started"
18:14Raynestechnomancy: cake makes a few attempts to refer to itself as a 'development environment'.
18:14seancorfielda couple hit a road block with non-hex unicode characters in a file
18:14technomancyRaynes: yeah, I have switched to "lein is for automating clojure projects" in most of my docs.
18:14seancorfieldwhich seems to be due to (setq default-directory "C:\Users\person") in their init.el
18:15seancorfieldshould be \\ instead of \
18:15technomancymaybe even "a user interface for Clojure"?
18:15seancorfieldbut on XP, emacs did not put anything in my init.el...
18:15ibdknoxtechnomancy: build tool definitely threw some of my friends off... the equated it to msbuild/ant
18:15RaynesThat's the line of thinking I went with in that blog post.
18:15RaynesBut I did say 'build tool'.
18:15RaynesI'll edit that in a bit.
18:16technomancyibdknox: do you think "it's for automating Clojure projects" is better?
18:16ibdknoxtechnomancy: definitely better, I'm not sure that's the best we can do though
18:17mabesRaynes: not saying I disagree with you, but don't other packages just contain jar files?
18:17seancorfieldin one of my blog posts i said "Leiningen is an essential Clojure tool that can create projects, resolve library dependencies, compile your code, run your tests, fire up a REPL and a whole lot more."
18:17ibdknoxtechnomancy: hinting that its the easiest way to get started with Clojure would be useful
18:17Raynesmabes: Not sure what you're referring to.
18:17seancorfieldheh, from that same blog post: "The easiest starting point is to get Clojure up and running with Leiningen."
18:17technomancyibdknox: yeah, but when you read that in lein's own readme it sounds like just a marketing claim =)
18:18technomancyreading it in other contexts is different though
18:18mabesRaynes: I can't think of any exact examples now but I think I have installed packages which had subdepes which all it did was install jars files (this was in ubuntu).
18:18ibdknoxtechnomancy: yeah... I still maintain there should be giant "download lein" link on clojure.org with a heading "Get started"
18:18mabess/subdepes/subdeps/
18:19Raynesmabes: But the problem is the 'install' part. It is trying to install Clojure in a central location. Then, when users get to the actually create a project part, they're in here asking what they're supposed to do. The answer is always going to be Leiningen or cake, so it makes sense to just skip the crap and get to what you can use from now on.
18:19mabesanyways, like I said, I don't disagree with you, but I think there may be a precedent for package managers installing java libraries
18:19technomancyibdknox: I wouldn't mind =) but so far I've held back on stuff like that in my own wiki edits to avoid accusations of impartiality
18:19seancorfieldmaybe one day clojure/core will embrace leiningen as the easiest way to get started :)
18:20technomancymabes: it definitely makes sense to use an OS-level package manager to install libraries, but only in so far as they are dependencies for user-level applications.
18:20ibdknoxtechnomancy: well when I get a minute to breathe I'll push on the issue
18:20technomancyseancorfield: maybe it would help if I stopped making fun of them for not accepting pull requests and other contributions. =)
18:21seancorfieldmaybe :)
18:21seancorfieldbut we can all gang up on them at the conj! :)
18:21ibdknoxI'm for it
18:21ibdknoxit's absolutely what we should do
18:21Raynestechnomancy: If you decide to corner Rich and beat him until he says pull requests are the bomb, I'll help.
18:21ibdknoxit should be painfully obvious how to start
18:22ibdknoxand it's not :(
18:22seancorfieldit's a pity that on windows lein still needs either wget, curl or for users to d/l the leiningen jar :(
18:22mabestechnomancy: BTW, did the leiningen package make it into a main debian or ubuntu repo? or will it ever?
18:22technomancymabes: it's in debian, but it's broken in ubuntu
18:23technomancyit looks like they're working on syncing the fix from debian now at least though
18:23seancorfieldany windows users here want to review / critique my upcoming emacs / leiningen / clojure blog post for windows (xp & 7)?
18:23technomancyseancorfield: someone said powershell is capable of performing HTTP downloads
18:23mabesthats nice..
18:23ibdknoxtechnomancy: it is
18:23technomancyseancorfield: presumably at some point enough windows users will be using that to make it make sense as the default windows lein implementation?
18:24technomancylast time it was discussed people told me it didn't have wide enough penetration to really justify it
18:24brehauttechnomancy: you have access to the .net stdlib from powershell so even if you couldnt you could
18:24seancorfieldis there a powershell version of lein.bar?
18:24seancorfields/bar/bat/
18:24technomancyseancorfield: someone cooked up a proof-of-concept at one point
18:25devnseancorfield: i'll peek at it -- im doing a noob night on getting a working Clojure setup, and I have a feeling there will be a couple of windows users
18:26technomancyhuh; interesting: https://github.com/lispnik/powershell-leiningen
18:26technomancyI hadn't seen that implementation
18:32technomancydevn: oh, did you get a local user group going?
18:32seancorfield_devn: http://corfield.org/articles/emacs_win.html
18:33seancorfield_that's a temporary link that will go away once the blog post is up
18:33seancorfield_the main stumbling block several windows users have hit is "Non-hex digit used for Unicode escape" when trying to do clojure-jack-in
18:34seancorfield_i suspect this is due to \U in one of their .el files - based on google - but so far have not had success walking anyone thru it...
18:39technomancyseancorfield_: also I remember talking a bit about encouraging folks to download the lein jar by hand instead of by curl and I don't really remember if we came to a conclusion on that
18:40seancorfield_it wasn't clear where to put the JAR
18:40psylloThanks for the blog post Raynes. This brings up some good discussion.
18:40technomancyoh, because the place considered $HOME on windows shifts around a lot, that's right
18:40psylloDoes anybody install Java via a package manager?
18:40seancorfield_you'd need to figure out where each version of windows considers the "home" directory to be and then manually MD the .lein folder there
18:41seancorfield_and create a self-installs folder inside that (or is it self_installs?)
18:41psylloJava, is not in and of itself useful.
18:41technomancyseancorfield_: yeah, that's probably more trouble than it's worth
18:41psylloClojure being installed via a package manager makes perfect sense.
18:41seancorfield_self-installs
18:41technomancypsyllo: for me java is only installed via the package manager because lein pulls it in
18:41technomancyit's not something the end user interacts with
18:42psylloSo, you seeing where I'm going with this?
18:42psylloSysadmins and users all over the world install java, the VM, the Language or however they think of it.
18:43psylloClojure could be installed with the option of picking a "build tool"
18:43technomancypsyllo: if they are installing the java package directly, that's only because the actual thing they want to use is either not packaged or packaged incorrectly.
18:43technomancynobody wants Java for the sake of Java
18:44psylloFreeBSD packages would often have ncurses option windows that allowed you to select some build time options etc. Likewise Clojure could have a default 'lein' or an optional 'cake' etc.
18:44psylloJust a thought... but I do think it's something that could make sense within an OS's package manager.
18:45psyllotechnomancy: Exactly what I'm saying. But it's a package anyway.
18:45technomancysure
18:45technomancyI don't think anyone's saying it shouldn't be a package, just that you shouldn't install it directly.
18:45psylloAn exception to that is support for certain web pages... nobody installs web pages ;)
18:46psylloIf you're trying to close the gap and make this accessible to newcommers, having a Clojure package installed directly may be a good option.
18:47psylloAnd I don't think it would violate the users expectation of what can/should be installed via their package manager.
18:47psylloJust offering that up
18:47technomancypsyllo: it may be, but only if Clojure/core decides to make Clojure into an application targeted towards end users.
18:48technomancyotherwise each packager is going to have to code up their own half-assed shell script that the #clojure channel is going to end up debugging for poor confused users =\
18:49psylloI think there is definitely a gap to be closed here, and it will be closed one day if Clojure continues to grow.
18:50ibdknoxpsyllo: that's the wrong direction I think. In order for Clojure to continue to grow, these issues have to get sorted out
18:51psylloibdknox: Don't know the future, but it seems Clojure is currently doing just fine in spite of this. Or am I wrong in that assumption?
18:52ibdknoxpsyllo: not at all, but from what I can tell we're still pulling in early adopters
18:52ibdknoxthat pool runs out eventually :)
18:53psylloCool yeah :)
18:54pdk`,(Math/pow 16 3)
18:54clojurebot4096.0
18:54psylloClojure setup effect is according to expectations of its users it seems. A lot like SBCL or another non-commercial CL.
18:54psyllos/effect/effort/
18:58technomancypsyllo: do you mean it matches peoples' expectations?
18:58psyllotechnomancy: Yes
18:58devntechnomancy: yeah, I've had a user group going for about 8 months. It's been very mixed in terms of turnout, but slowly growing
18:58technomancydevn: wow, nice
18:58devnWe had 8 people last meeting
18:58devn(big for Madison, WI) :)
18:58technomancythat's more than some seajure meetings =)
18:59psylloI've barely ever used LispWorks, but when I was new to CL I saw it as something that would get me in the door and running right off the bat. For example: http://www.lispworks.com/images/lw-ide-gtk.png
18:59devngranted we have one person who just wants to tell everyone how awesome scala's type system is
18:59devnand a recovering haskellholic
19:00brehautdevn, thats not the same person?
19:00psylloBut, I ended up using SBCL most of the time anyway ;)
19:00devn:D -- He's a very smart guy, knows loads about Scala and is great at explaining things, but I've been sort of wrestling with "Do we make this a general FP group or keep it Clojure"
19:00devnI've decided to keep it Clojure.
19:01seancorfield_the bay area clojure group had about 40 attendees for chas emerick's talk on clojurescript and couchdb
19:01seancorfield_we usually get 20-30 people at meetings
19:01devnnice.
19:01psylloThat was the first Clojure meetup I've been to.
19:01psylloI was impressed by the turn out.
19:01seancorfield_we're doing a hands on emacs session this week and have 24 ppl signed up already
19:02devnbtw, I hate Merb. It makes me want to stab someone. (Pay no attention to this. Long day.)
19:02technomancyseancorfield_: yeah, we had an Emacs workshop at one of our earlier meetings for everyone to bring their questions. =)
19:02technomancydevn: isn't it deprecated?
19:02devntechnomancy: long story, but, yes, except people still have apps on it that need to be ported, maintained, etc.
19:03technomancy=\
19:04seancorfield_we've had a lot of clojurescript coverage at the bay area group ... but we're also going to do a workflow / build tool session early next year
19:04seancorfield_and we're now meeting every month in the same location which helps
19:04technomancyyeah, nothing like consistency
19:05gtrakanyone interested in having a baltimore meetup?
19:18edwjcromartie: Thanks for your thoughts. (I was *very* AFK.) I've downgraded to clj 1.2.1 and things are working. I'll try re-upgrading once I demo what I'm working on and have some time to experiment.
19:47vijaykiranHi all .. can anyone give me a hint on how to serve a static file using compojure (0.6.5) ?
20:23gfrederi1ksvijaykiran: I remember there being a way to specify a directory to serve static files from. It might have been a function from the ring library itself? not sure.
20:25vijaykirangfrederi1ks: there is indeed ring.utils.response/file-response but somehow I'm not able to figure out how to connect / to index.html
20:25vijaykiranI can get /index.html working though
20:26ibdknoxvijaykiran: that's not how compojure was designed
20:27ibdknoxvijaykiran: you would have to create routes for them
20:27ibdknoxand then serve the static files as your response
20:29vijaykiranI did add a route GET "/" to a function which calles ring/file-response - not sure if that's the right way (sorry noob here)
20:30vijaykiranhere's what I have https://gist.github.com/1329499
20:30ibdknoxit depends on what you want. The simplest thing to do is just slurp the file
20:30ibdknox(slurp (clojure.java.io "/path/to/index.html"))
20:32ibdknoxlonger term you probably want to read those on start and just serve the string of the content
20:34vijaykiranI just want to show the static index.html when there's a request to localhost:8000/
20:34vijaykiranA simple default static home page that is
20:35ibdknoxyeah
20:35ibdknoxthe slurping the file will do that
20:35brehautor serve static media with your gateway server rather than an embeded server / application logic
20:36ibdknoxyeah, you shouldn't be using ring to do that
20:36ibdknoxbuuuut
20:36ibdknoxjust to mess with things for now
20:36brehautcaveat: except for during dev
20:36ibdknoxdo the slurp thing :)
20:36vijaykiran:) okay .. thanks I'll try that
20:36brehautibdknox: ring accepts a file as the body of a response; why slurp?
20:37ibdknoxbrehaut: it's easier to cache a string, but in this case it doesn't matter
20:53vijaykiranthanks ibdknox - I finally got what I wanted with a redirect : (GET "/" [] (ring.util.response/redirect "/index.html"))
20:54ibdknoxfwiw, it might be worth looking into Noir, if for no other reason than the tutorials: http://www.webnoir.org
20:56vijaykiranyes . I'm looking it as well - wanted to try with something at lower level first :)
20:59technomancyI'm not going to get to use juxt here, am I? http://p.hagelb.org/memfn-fail.html
20:59technomancy=(
21:00timvisherhey all
21:00timvisheri'm trying to get lein-difftest working
21:00ibdknoxtechnomancy: nice try :p
21:00timvisherhow do i go about installing it's dependencies if I want it as a user level plugin?
21:01technomancytimvisher: there's a bug in 1.6.1; need to either go back to 1.5.2 or run from git. =(
21:01timvisherboo. :(
21:02timvisherah well, np
21:03timvishertechnomancy: thanks for that post though! My mouth hung wide open when I saw difftest. Someone demoed Spock at my employer and I just about shouted "want" at the top of my lungs. difftest gets me pretty much the whole way to what I wanted. :)
21:04ibdknoxtimvisher: spock?
21:04timvisheris there a bot that knows how to do ,spock testing framework?
21:04timvisherhttp://code.google.com/p/spock/
21:05timvishernvmnd, Quicksilver is faster. ^_^
21:09gtrak``ibdknox, vijaykiran, isn't it better to use the mmap'd files?
21:10gtrak``there's a resource-response function somewhere
21:11gtrak``https://github.com/mmcgrana/ring/blob/11a096e86bd2b9bc105b4dd032bd96265d17c317/ring-core/src/ring/util/response.clj#L65
21:12ibdknoxgtrak``: there's no real advantage to that over the slurp unless he's jaring it and deploying it
21:12ibdknoxwhich would be the wrong approach
21:12gtrak``let the os cache it?
21:12ibdknoxas brehaut said earlier, the Clojure server really shouldn't be serving statuc files
21:12gtrak``instead of hogging up memory
21:13aperiodicnginx is a beast at serving static content
21:13gtrak``ibdknox, i agree it shouldn't, but during development, it's much simpler to do everything in one place until you really need to scale, yes? are you talking like nginx?
21:15ibdknoxgtrak``: I completely agree, and that's my point it's just for dev so it doesn't really matter so much. But yeah, nginx will do this wonderfully
21:16brehautand for the dev version, surely the simplest piece of code is preferable?
21:16gtrak``really really you should be using a third-party like akamai
21:16ibdknoxyep!
21:17gtrak``brehaut, my static file-serving code is like 1 line
21:18brehautgtrak``: thats relatively simple ;)
21:18ibdknoxmines like 2 chars :D
21:18ibdknoxmine's*
21:18brehauti run my dev sites inside a full linux VM so i have no lines of code for my static file serving :P
21:18gtrak``define a route, calculate the path, wrap-file-info and you're good
21:22gtrak``man, are we really going to have all that time to do the unconference stuff at conj?
21:23gtrak``it looks like there won't be sleep
21:23ibdknoxsleep is for the weak ;)
21:32mattmitchellWOuld someone mind explaining how I can extend a java class, set a protected property in the "constructor", then instantiate it?
21:39jayunit100hi guys :
21:40jayunit100I want to simulate several random samples, by using an infinite list generator ....
21:40jayunit100(take 5 (shuffle [1 3 4 5 6 2 4 3 ]) )
21:41aperiodicmattmitchell: the first bit can be accomplished by specifying the class in gen-class
21:41aperiodic##(doc gen-class)
21:41lazybot⇒ "Macro ([& options]); When compiling, generates compiled bytecode for a class with the given package-qualified :name (which, as all names in these parameters, can be a string or symbol), and writes the .class file to the *compile-path* directory. When not compiling... https://gist.github.com/1329612
21:41jayunit100That will give me random list of size 5.... but what is the idiom to continually calculate a running "average" of each list of 5, for an arbitratily long time long time ?
21:41jayunit100gen-class?
21:41clojurebotNo, jayunit100, you want gen-interface + proxy
21:41jayunit100oh ok
21:42aperiodicjayunit100: no, you don't, i was talking to mattmitchell, sorry
21:42jayunit100oh ok
21:42jayunit100no prb
21:42mattmitchellaperiodic: ok i was messing around with proxy, but didn't know whether or not it should be gen-class or proxy
21:42mangejayunit100: What do you mean by average, sorry?
21:45aperiodicmattmitchell: i believe you can only extend classes using gen-class, and you cannot access protected members of a proxied class
21:45jayunit100##(take 5 (shuffle [1 3 4 5 6 2 4 3 ]) )
21:45lazybot⇒ (2 4 6 5 3)
21:45jayunit100##(take 5 (shuffle [1 3 4 5 6 2 4 3 ]) )
21:45lazybot⇒ (5 2 3 4 4)
21:45jayunit100notice how if we average those 2 lists, the val is different.
21:46jayunit100so [1 3 4 5 6 2 4 3 ] simulates a population ,
21:46mattmitchellaperiodic: ok good to know. So how do you set an instance member using gen-class?
21:46aperiodicmattmitchell: if you haven't already read it, the page from clojure.org on class-generation goes into a lot of detail about using gen-class
21:46jayunit100[1 3 4 5 6 2 4 3] is a population and [1 3 4] and is a "sample"....
21:46mangeYeah, but then the word running is confusing me. Do you just want a list of averages of each group of 5?
21:47aperiodicmattmitchell: http://clojure.org/compilation
21:47jayunit100no... i want to take the average of a random subset.
21:47jayunit100once, twice, three times, etc....
21:47mattmitchellaperiodic: excellent thanks. I'll dig into that.
21:47jayunit100and continually recalculate the "mean" of the "means"...
21:47jayunit100do you know what "standard error" is ?
21:48aperiodicmattmitchell: the API docs on gen-class are also handy
21:48aperiodicmattmitchell: http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/gen-class
21:48jayunit100Im trying to simulate population sampling ....
21:48mattmitchellaperiodic: looks like i have some reading to do :)
21:49mattmitchellaperiodic: so what I'm looking to do is possible though?
21:49mangeSo, the shuffle makes each group of 5 random, then you want to take groups of 5 and average their mean with a "global" mean?
21:49aperiodicmattmitchell: i think so. looks like you'll need to use set! to actually set the field, as described in http://clojure.org/java_interop
21:49jayunit100yeah... to see how many samples i need in order to get a good average mean.
21:50jayunit100as you can imagine, the more random samples, the closer to the "true" mean of the "whole" population we get.....
21:50jayunit100anyways--- ill be back gotta take the dog out...
21:51jcromartieedw: ah, I am using 1.2.1
21:51jcromartieI bet reduce is slightly greedier in 1.3 or something like that
21:52aperiodicmattmitchell: although it's possible that you can't set the field in the constructor, and will need to do that in a :post-init function
21:53mattmitchellaperiodic: interesting, so post-init gives access to the instance scope?
21:55aperiodicmattmitchell: sorry, what do you mean by "instance scope"?
21:55aperiodicdespite doing a lot of java interop, i don't actually know a lot about java :)
21:56jcromartieaperiodic: fortunately, there's not much to know about Java
21:56jcromartiethat's why it's a good host platform :P
21:56aperiodicmattmitchell: the reason I think you need to use a post-init fn is that to set! an instance field, you need a reference to the instance
21:57aperiodicmattmitchell: you don't have that in the constructor
21:57mattmitchellaperiodic: ahh well then yes, post-init sounds like the right thing then. Sorry, I
21:57mattmitchellm
21:57mattmitchelloops
21:57mattmitchellI'm no java ninja either :)
21:58brehautthere are java ninjas‽
21:59jcromartieedw: yes, I found your problem with the mutlipart form thing
21:59mattmitchellbrehaut: yeah, one of my old co-workers, and he was no fun to be around either.
21:59jcromartiein Clojure 1.3, reduce is greedier than 1.2.1
22:00jcromartieedw: so 1.3's reduce is consuming the lazy sequence of uploaded files... the middleware should be converted to use some other construct instead of reduce
22:01jcromartiebut it might just be a bad idea to use a lazy sequence where the order of generation and consumption matter
22:04mangejayunit100: This is what I went with: http://paste.pocoo.org/show/501125/
22:06mange... And now I see the function 'reductions' which would have saved me a lot of energy there.
22:08jcromartiemange: everybody goes through that :)
22:08mange"Hey, I have this great idea, I wonder why nobody's ever done that before! ... Oh..."
22:10mangejayunit100: Take 2! http://paste.pocoo.org/show/501126/
22:39romanandregquick question… do you know if this concept of "Streams" in clojure is still on development? => http://clojure.org/streams
22:39romanandregI'm trying to find some library code that has that via google, but no luck so far
22:41brehautromanandreg: it refers to the google code svn at the top of the page; that indicates that its pretty ancient. i think this might actually have been a precursor to the new lazy-seq stuff introduced in 1.0 or 1.1
22:42brehautromanandreg: i could be 100 miles off though
22:49romanandregbrehaut: what about the stream-utils API, is this dated as well? => http://richhickey.github.com/clojure-contrib/stream-utils-api.html
22:49lazybotNooooo, that's so out of date! Please see instead http://clojure.github.com/clojure-contrib/stream-utils-api.html and try to stop linking to rich's repo.
22:49romanandreghahahahaha
22:49brehautromanandreg: well, as a ballpark, everything in old contrib is dead code
22:50brehautexcept when its listed here as not being dead http://dev.clojure.org/display/design/Where+Did+Clojure.Contrib+Go
22:51brehautromanandreg: perhaps if you told us why you wanted streams, someone could give you more precise/useful information
22:51romanandregbrehaut: I have a Haskell background, I wanted to check something similar to Enumerators/Iteratees
22:52brehautolegs iteratees paper ate my brain. i was more confused after reading that than before ;)
22:54romanandregbrehaut: hehehe yes, it tends to be really complicated at the start
22:55romanandregafter internalizing the thing for 25 times, is how I get it
22:55romanandreggot*
22:55brehauthaha
22:55brehautbeing completely in the dark about how it works i cant make any useful comment sorry
22:55romanandregbrehaut: at least you try :-) thanks
23:00brehautromanandreg: jim duey and konrad hinsen are probably the most well known for haskelly ideas in clojure (in particular functors, monads and arrows). its possible one of them has written some stuff related to streams
23:01brehautromanandreg: http://intensivesystems.net/writings.html
23:01romanandregnice
23:02romanandregbrehaut: yes, I should send them an email just to check out if they have been up to doing something similar to Iteratees in Clojure
23:03romanandregbrehaut: thanks for the info, you have been really helpful \o/
23:03brehautthats why we are here right? :)
23:05romanandregyes! I would love to have more IRC channels like this pine
23:05romanandregone*