#clojure logs

2012-06-25

00:09SrPxhttps://github.com/technomancy/swank-clojure From an Emacs buffer inside a project, invoke M-x clojure-jack-in <---- what??
00:09lazybotSrPx: Definitely not.
00:09SrPxwhat??
00:09lazybotSrPx: Uh, no. Why would you even ask?
00:09SrPxwhat?
00:09clojurebotwhat is wrong with you
00:09SrPxwhat
00:09SrPxwhat??
00:09lazybotSrPx: Uh, no. Why would you even ask?
00:09SrPxwhat?
00:09clojurebotwhat is meta
00:09SrPxwhat???
00:09lazybotSrPx: Yes, 100% for sure.
00:09SrPxso lazybot handles >2 '?'s
00:10SrPxtest??
00:10lazybotSrPx: What are you, crazy? Of course not!
00:10clojurebot42
00:10SrPxo.o
00:10SrPx????
00:10SrPx???
00:10lazybotSrPx: How could that be wrong?
00:10SrPxare you a good bot??
00:10lazybotSrPx: What are you, crazy? Of course not!
00:11SrPx( :
00:11bbloomlol, this is an entertaining exchange
00:11SrPxso, anyone? please how do I open emacs buffer inside a project? I already have the project.
00:12SrPxoh wait, clojurebot is a person?
00:13SrPxtest?
00:13clojurebot,(let [testar (fn [x y] (cond (= (reduce + (filter odd? (range 0 x))) y) (str y " is an square perfect")) )] (testar 11 25))
00:13SrPxoh, not.
00:13SrPxnobody? )=
00:14zerokarmaleftSrPx: just open a file inside the project directory, e.g. project.clj
00:15mmarczykSrPx: you need to open one of the project's files
00:15antares_SrPx: if you are talking about clojure-jack-in, just open any file under your project's directory
00:15mmarczykSrPx: then you should be able to clojure-jack-in from the buffer into which that file will be loaded
00:18mmarczykalternatively you can run `lein swank` in the project's directory (assuming you've got swank-clojure installed as a lein plugin or in the project's deps -- the latter approach is currently discouraged) and M-x slime-connect, which is my preferred method of diving into slime
00:19michaelr525diving into slime..
00:19michaelr525:)
00:20brainproxyanyone played/ing with NetKernel? just heard about it, sounds interesting, oreilly just published a book, looks like some folks were working on clojure integration some time ago...
00:20michaelr525what's netkernel?
00:21mmarczykyes... I've also got a proper setup for M-x slime for when I just want to splash around :-)
00:23cmajor7what is the way of tying an atom to a dom element?
00:23cmajor7(clojurescrupt)
00:23cmajor7*clojurescript
00:23bbloomcmajor7: what do you mean by "tying" ?
00:24cmajor7whenever a dom element's value changes, atom gets changed..
00:24brainproxymichaelr525: the idea seems to be to apply the REST architectural concepts to the level of an OS
00:24bbloomyou don't need an atom for that, you can just hold a reference to the dom element directly
00:26cmajor7bbloom: right, but I still need to listen for an event.. right? the way I am doing it right now is through a "(delegate $body elem :event.. )" but I need to keep the state of several dom elements (e.g. in a form) in order to do validation / recalculation of the result etc…
00:26cmajor7so I was thinking of using atoms for that
00:26SrPxmichaelr525: thank you but
00:27SrPxwell. http://i.imgur.com/l39Ha.png
00:27cmajor7tie an atom to a dom element. whenever a dom (e.g. text input) value changes, the atom would get changed,..
00:27cmajor7and then the atom's watcher/validator can be used
00:27bbloomcmajor7: oh, you want the atom to contain the VALUE of the element?
00:28cmajor7bbloom: right, and watch that value
00:28bbloomcmajor7: there is no built in library to help with that, so the simplest thing to do is to just bind event handlers and call swap! or reset! on the atom
00:28brainproxycmajor7: you could use addEventListener and bind a callback (lambda) which then updates the atoms value
00:29SrPxany idea why this is happening?
00:29xeqiSrPx: :plugins should be a vector of vectors, ie [[lein-swank "1.4.4"]]
00:30cmajor7brainproxy, bbloom: thx guys. so I would still need an "addEventListener", which (using jayq) is what I have in "(delegate $body elem :event.. )", right?
00:30SrPxxeqi: thanks. I cant believe I finally got this working
00:31bbloomcmajor7: i'm not familiar with jayq
00:31brainproxycmajor7: also, the flapjax library implements a generalized approach to doing that kind of thing, with "eventstreams" and "behaviors"
00:31brainproxycmajor7: however, I haven't tried mixing flapjax and clojurescript
00:31bbloombrainproxy: don't confuse the poor guy!
00:32bbloomFRP and friends is still a pretty open research problem. this guy's trying to get a simple form working :-)
00:32brainproxybbloom: true, true ... I repent!
00:32cmajor7reading about flapjax.. yea, I would rather stick to clojurescript..
00:33bbloomi assume jayq is a wrapper of jquery. no? i'm not really sure if jquery is an appropriate match for the type of apps you'd build clojurescript
00:33cmajor7bbloom: thx for looking out, but I am no poor :)
00:33brainproxycmajor7: .delegate has been superseded by .on
00:33brainproxyaccording to the jquery docs, that is
00:33brainproxyhttp://api.jquery.com/on/
00:34cmajor7brainproxy: yea, I saw that.. I got delegate working from an "overtone" example..
00:35cmajor7ok, just to summarize what I'll do. for each element of the form I am going to have a separate on/delegate handler that will change the state of a corresponding atom
00:35cmajor7does it sound reasonable?
00:35bbloomcmajor7: why one atom per item? why not one atom containing a map?
00:36brainproxybbloom: btw, jquery/jayq and clojurescript can be good friends, at least in my experience so far
00:36bbloomcmajor7: clojure isn't anti-state, it's pro-carefully-considered-and-contained-state
00:36cmajor7bbloom: yea, I guess I could do that, it makes more sense to have a single atom per form
00:36brainproxyi.e. at some point you need to work w/ the DOM, and clojurescript doesnt' provide any inherent sugar for doing so
00:37cmajor7brainproxy: how do you guys approach a form validation?
00:37brainproxycmajor7: server-side or client-side?
00:37cmajor7client side
00:37bbloombrainproxy: i just read the jayq README… i'm not convinced… but that's b/c i dont have the same arguments against it as those he combats. in particular, i'm using jquery for a large backbone.js app at my startup and i regret it. jquery is great for adding a little bit of magic to an otherwise static page. you need a less cut-point/aspect style of programming to work on larger rich client apps
00:39cmajor7bbloom: I am no front end expert, as you can see :) but I found jayq (simple defn wrappers over a subset of jquery) quite nicely complimenting clojurescript
00:39brainproxybbloom: fair enough.. it will be be intersting to see if something grows up from the cljs community that offers a broad solution along the lines of extjs/sencha, ember, backbone, etc.
00:40bbloombrainproxy: yeah, that's something i want to work towards… a few things are missing… in particular, i think i'm going to need delimited continuations and a full "reactive extensions" type library
00:41cmajor7brainproxy, bbloom: I just find it rather very verbose to have an event handler that drills down to a "this-as" value resolution for _each_ element of the form to validate it correctly on the client side. do you guys have a magically simple way that you stick to to validate forms?
00:41bbloombrainproxy: async & reactive is something i'd like to see find it's way into clojure proper too, so it's gonna be a while before cljs gets there
00:42brainproxybbloom: sure, we're on the same page with all that, as I think we've discussed previously :)
00:42bbloombrainproxy: ah right, that was you :-)
00:42brainproxycmajor7: if you just want to get something working, maybe just drop in a jquery plugin for validation
00:42brainproxycmajor7: e.g. http://docs.jquery.com/Plugins/Validation
00:43ibdknoxjust like in JVM clojure, we should take advantage of the things already built for us in JS
00:43bbloomcmajor7: it really depends on a few things. are you doing live validation or just on submit? do you need to validate between fields? like comparing password fields? etc
00:44brainproxycmajor7: the plugin is still actively maintained, https://github.com/jzaefferer/jquery-validation/
00:44bbloomcmajor7: if i were doing a one off form validation, i'd probably do the simplest thing and bind several event handlers to a single callback function which polls the entire form and creates a map of the form, validates it all at once, and updates any validation ui
00:45bbloomcmajor7: hell, assuming your form is only a few fields you could simply do that in a setTimeout loop and it would be fine :-P
00:46brainproxycmajor7: there may well be some piece/s you could pull in from goog that would provide form validation facilities
00:46brainproxyI'm not sure... haven't become a master of what all is available from goog
00:47bbloombrainproxy: presumably anything having to do with validation in goog would require you use the controls lib, which has a robust dispose model that doesn't play nice with external dom manipulation
00:48brainproxybbloom: ah, gotcha
00:48cmajor7e.g. for each element an event handler that also retrieves a value of the element it is as verbose as: refheap.com/paste/3309 (from overtone example).
00:48cmajor7brainproxy: I already have "something" working follow the "delegate" example. I am looking for a simple "field is numeric" / "minimum criteria is met" validation to happen directly on the client side on e.g. "off focus / select / click" events (no submit button)
00:48cmajor7bbloom: thx for an idea. the function that I have right now is indeed a single defn, its the event handlers in my example above that look rather verbose.. but maybe that is how it is in JS lang..
00:49cmajor7*land
00:51brainproxycmajor7: i think that plugin covers the things you just indicated
00:52brainproxybut if you're not wanting to use a plugin for it, it seems like you're on the right track w/ what you posted on reheap
00:53cmajor7brainproxy: thx. that is for a validation logic (I used this plugin in pure JS some time ago, it is good, but I can just use a couple of "defn" instead to validate), I was looking to find a "guru blessed" approach..
00:55cmajor7bbloom, brainproxy: yep, ok. I'll change "delegate" to "on", and will use an atom map for the form. it's great to bounce ideas around, even if they are simple.. love it. thx guys.
00:55bbloomcmajor7: even if they are simple? what do you mean "even? simple is clearly better! :-)
00:55cmajor7I meant "too easy" for front end mastas
00:56bbloomheh
01:00brainproxymichaelr525: I use tmux also, but I haven't gotten very deep with it
01:05lynaghk`bbloom: are you going to be attending OSCON?
01:17bbloomlynaghk`: i'm not a big conference guy…
01:18lynaghk`bbloom: okay, just wondering if you'd make it easy for me to get you a beer by coming down to PDX
01:18lynaghk`bbloom: but it looks like I will have to take THE TRAIN.
01:19bbloomlynaghk`: do you owe me a beer debt? i've got some many positive and negative beer debts that i can't keep track any more
01:19lynaghk`bbloom: not that I know of---it'd just be a good excuse to talk with you about cljs reactive stuff
01:19michaelr525brainproxy: what do you use for prefix-key?
01:21bbloomlynaghk`: sounds good
01:21brainproxymichaelr525: the default... C-b
01:22lynaghk`bbloom: do you have any projects/code cooking in that space?
01:22bbloomlynaghk`: they are near the top of my queue. i keep getting distracted playing with the compiler though. every time i find a bug or dark corner, i just seem to lose hours of time there :-P
01:24bbloomlynaghk`: i'd like to build the full stack of cps/delimc/async/parallel/reactive/gui but each one of those steps is a massive project in it's own right
01:24lynaghk`bbloom: it's by no means "reactive", but I'm probably going to release some "computed-observables" stuff that I've been sitting on this week. I feel kind of shameful that I don't have anything better than "autodetect my atom-dependencies and add watchers for me", but that is already a lot more useful than what seems to be out there.
01:24lynaghk`bbloom: no kidding.
01:25bbloomlynaghk`: the dream is clearly something WPF-like
01:25bbloomminus the OOP and XML pattern explosion
01:25lynaghk`bbloom: I keep hearing about that. Sounds like I really should take a week off, find a windows VM, and figure out what's up.
01:25bbloomWPF is brilliant and awful all at the same time
01:26michaelr525brainproxy: i use c-b to move the cursor back in the repl, so i've changed it to c-x
01:27bbloomlynaghk`: i have various half finished compiler projects that are preventing me from really digging deep into it though
01:28lynaghk`bbloom: what are you working on with the compiler? I recall a while back you were fixing up some var handling stuff
01:29bbloomlynaghk`: i have an army of half finished branches in my local repo
01:29bbloombasically, every time i try to work towards that holy grail gui stack, i find a bug or inconsistency compared to clj on JVM
01:30bbloomso i go to fix that & wind up falling in a rabbit hole, get stuck, start two other things
01:30bbloomand before you know it, i've forgotten the first issue was all together and lost my place in the other project
01:30bbloomluckily, i'm allowed to do that, since these are hobby projects
01:30lynaghk`bbloom: do you have a particular application that's motivating this GUI stack?
01:30bbloomwhen i do real work, i actually focus :-P
01:31bbloomlynaghk`: not one for which my thoughts are baked enough to articulate yet :-)
01:32michaelr525,(into {} (map (fn [[key val]] {(name key) val}) {:a 1 :b 2}))
01:32brainproxybbloom: lynaghk` the SCION guy is wrapping up his thesis on SCXML, should be finished soon... i look forward to reading it as i think scxml shows an interesting way to approach reactive programming
01:32clojurebot{"a" 1, "b" 2}
01:32michaelr525should i do the above or use a reduce?
01:32lynaghk`I've been having some trouble finding functional ways to model some GUI stuff. Lately I've resorted to just attaching atoms to shared DOM elements. That feels gross, but I haven't been able to think of more clojurey ways of doing stuff.
01:32michaelr525it's meant to stringify the keys of a map
01:32brainproxyi.e. a declarative approach
01:32bbloombrainproxy: that anything like storyboards in cocoa or the state machine thinggies in blend?
01:33bbloomlynaghk`: yeah, i think the main problem is that you can't just half ass the functional approach to a gui
01:33bbloomlynaghk`: it doesn't compose well with the dom, so you have to abstract the dom away
01:33bbloomlynaghk`: it's really hard. hence no one has done it well yet
01:33brainproxybbloom: the README gives a good overview
01:33brainproxyhttps://github.com/jbeard4/SCION
01:33bbloomlynaghk`: but i think cljs is the major opportunity to do it
01:34lynaghk`bbloom: actually, my problem is not so much with DOM manipulation as it is with just having multiple things that I want to associate together
01:34brainproxybut like i said, he's wrapping up his thesis on the same subject matter, in which SCION features prominently
01:34bbloomlynaghk`: ?
01:34lynaghk`bbloom: but I don't want to end up with a record that implements a few dozen protocols.
01:35bbloombrainproxy: i know that i shouldn't, but i want to immediately reject any proposal that involves XML in any way
01:35brainproxybbloom: well, there's not any reason that the same ideas couldn't be represented in another hypermedia base type
01:35bbloombrainproxy: hence, i'm still reading lol
01:36brainproxye.g. might be interesting to try to translate SCXML over to JSON-LD
01:36bbloom<state id="idle"><onentry><script> …. CODE HERE --- that just makes me sick :-P
01:36michaelr525json-ld?
01:37lynaghk`bbloom: I can't really come up with a tidy example of the issue I'm having (it's in the context of a big project--which will eventually be open sourced, so you'll be able to see the mess I've made and maybe have suggestions then =P)
01:37bbloombrainproxy: yeah, this reminds me of the visual state manager in wpf
01:37bbloombrainproxy: http://blogs.msdn.com/b/wpfsdk/archive/2009/02/27/the-visualstatemanager-and-triggers.aspx
01:38bbloomi think that states & transitions are a critical part of a strong frp gui toolkit
01:39bbloomin particular, the trick is to view your app as a quasi-immutable composition of functions (only mutates during development) and then view the app state as a single atom
01:39bbloombasically, you're app is a giant render function glued to a deeply nested state machine
01:39brainproxybbloom: i agree, but I think there's more to it than just straight up FRP
01:40brainproxywe want a rich, composable way to create bidirectional ties from/to network addressable resources and the DOM
01:40brainproxywhich brings in the whole discipline of "lenses"
01:40brainproxywhich I don't claim to really understand
01:40bbloomyeah, i don't expect the common development model to be working with frp primitives.
01:41bbloomi think lenses would be valuable, but i'm not sure they are appropriate for most types of GUIS… basically anything with a submit button doesn't like lenses
01:41brainproxymy gut instinct says the "path ahead" lies in generalizing and extending what the Flapjax guys started, and blending it together with an SCXML-like approach
01:41lynaghk`bbloom: that's exactly how I've structured some dashboard apps; used a custom state machine framework to model different screens as states and show/hiding appropriate DOM containers on enter/exit.
01:42bbloomlynaghk`: yeah, it's very video-game like :-)
01:42brainproxybbloom: i don't see the why lenses can't be friends with submit buttons
01:42bbloombrainproxy: it's just that you have a discrete submit action, rather than two way binding
01:43bbloombrainproxy: two way binding is actually extremely uncommon in most UIs
01:43brainproxya lens is just a way to express the rules to go back and forth between two representations
01:43lynaghk`bbloom: no experience doing game programming, but yeah--basically everything gets easier if you think of DATA ---fns---> VIEW.
01:44bbloombrainproxy: right, but 9/10 times, you only want one way or if you do want back-and-forth, both ways are identity
01:45bbloomit's pretty rare for functions to have true inverses when it comes to business logic
01:45brainproxylenses don't need to be symmetric
01:46bbloomright, but if they aren't symmetric, then there are generally more than one possible asymmetric inverse
01:46bbloomand if there is more than one, you need to specify
01:46brainproxyi dunno, maybe you're right, I've got a handful of papers and whatnot to digest before I want to take another big stab at this stuff
01:46bbloomso at that point, you might as well just define [to from] as a 2-vector of functions and be done with it :-P
01:48brainproxythat being said, I see declarative two-way reactive bindings that can be applied to documents like unto stylesheets...
01:48brainproxyas being really killer :)
01:48bbloom:-)
01:48bbloomi thought you said spreadsheets, which would *also* be cool
01:48bbloomheh
01:49brainproxyno, what I mean is that I want something like <link ...> in my <head>...</head>
01:49brainproxywhich automatically setups up two-way bindings between DOM stuff and resources on the server
01:49bbloombrainproxy: i dunno, i see this is as a popular trend now
01:50bbloomwhat with meteor
01:50bbloomand firebase and all that stuff
01:50brainproxyyeah but meteor is like the total opposite of hateoas
01:50bbloombut really, i've NEVER written an app that way
01:50bbloomtwo-way binding pretty much only ever applies to settings pages
01:50brainproxyi think the meteor approach, while interesting, is a big mistake
01:51brainproxyI want to build hypermedia apis, not RPC mashups
01:51bbloomeh, i'm not a big rest guy either
01:51bbloom:-P
01:51brainproxythen I hate you
01:51brainproxy:p
01:51bbloomhaha
01:51brainproxyj/k :D
01:51bbloommy current startup's app is all RESTful and what not
01:52bbloombut really, i wish i had a socket :-P
01:52brainproxysockets are cool!
01:52brainproxybut I think they should be limited mostly to telling clients that a resource on the server has changed
01:52brainproxyand the client should re-GET the representation
01:52bbloombrainproxy: eh. just b/c http forces that model on you doesn't mean you need to use it :-P
01:53brainproxywell i guess I buy into the hateoas stuff
01:53bbloomhateoas is that whole never need to construct a url thing right?
01:54brainproxybbloom: well, i'm not sure one sentence can cover all the bases
01:54brainproxybut the idea is to build apis from the pov of the client
01:54bbloombrainproxy: heh, i'm not gonna repeat myself on REST, etc. i wrote a blog post to cover all this :-P http://blog.brandonbloom.name/2012/02/rest-one-thousand-inconsequential.html
01:54brainproxyand the client drives the state changes in the application, by way of the affordances in the hypermedia
01:55brainproxybbloom: okay, will take a look, thanks
01:56brainproxybbloom: for what it's worth, I think a lot of folks on both sides of the REST debate tend to miss the point
01:56brainproxyI like Amundsen't stuff
01:56brainproxyand I'm biased, I'll admit it
02:01brainproxybbloom: let's talk about REST/HATEOAS sometime, maybe in another venue so as not to get too offtopic in #clojure
02:02brainproxyfor now, I need to go to bed, need to get up early tomorrow and starting writing more clojure :)
02:02bbloom*shrug* i view the topic as a bit of a black hole. i'm interested in solving problems and all the REST/HATEOAS conversations are about fuzzy emotional FEELINGS about apis
02:02brainproxywell, I think in some ways you're batting at strawmen in what you wrote
02:03brainproxyI'm using hateoas principles to precisely to solve real world problems
02:04brainproxynamely, my coworker and I are working to wrap a "hypermedia api" (i.e. hateoas to the core) around a bear of an SOA/XML/SOAP specification
02:05brainproxyour being very deliberate about the hateoas-ness of it has nothing to do with feelings or ideals
02:06bbloomsounds like a good topic for a blog post ;-)
02:06brainproxyMike Amundsen's book "Hypermedia APIs" had a big influence on us
02:07brainproxyhe implements his examples with NodeJS and Couch, no clojure in sight, but he really nails the ideas and helped me to think differently about all this stuff
02:08brainproxythe book could have been edited somewhat better :/ that is my only hesitation in recommending it.. you need to be prepared to deal with problems in the example code, some sloppy editing here and there
02:09brainproxybbloom: oh wait, just a sec, i have a link to major presentation he did recently, only slides available so far, but vid recording is supposed to be available sometime
02:20brainproxybbloom: here you go, http://amundsen.com/talks/files/2012-06-21-qcon-amundsen-cost-benefits-hypermedia.zip
02:20brainproxythere's a PDF inside the zip file
02:21bbloombrainproxy: i'll read it a little later
02:21RaynesPDF in zip?
02:21RaynesEw.
02:21bbloomRaynes: heh, yeah, probably doesn't provide much compression :-P
02:22RaynesEven if it did, I'd rather Chrome be able to render it in the browser than save a megabyte.
02:22brainproxyyeah, I don't get the pdf in zip thing, lol
02:23bbloomRaynes: eh, i turned that off after the 100th time chrome misrendered some characters
02:23RaynesNever seen anything like that.
02:24bbloom*shrug* it happens on both my macs, but none of my coworker's… no idea why. anyway, i prefer the experience of Preview anyway
02:24RaynesI'd like preview if it didn't take 2 years to start up.
02:24bbloomRaynes: upgrade to solid state :-)
02:59muhoohas anyone solved the problem in hiccup/ring of html checkboxes?
03:00muhoolike, how you uncheck them. because, unchecked checkboxes don't show up in the POST at all in html. i'd forgotten about that since so many frameworks have hacks to work around it automatically
03:03bbloommuhoo: so if i recall correctly, the trick is to use a hidden
03:04bbloommuhoo: <hidden name="foo" value="unchecked"/> <input type="checkbox" name="foo" checked="checked" value="checked"/>
03:04bbloomor something like that
03:04muhoothat sounds right, but i was hoping someone had already abstracted that machinery out into a function somewhere
03:06bbloommuhoo: just looked at rails… *cringe* soo many classes
03:06bbloomactionpack/lib/action_view/helpers/tags/check_box.rb
03:07bbloommuhoo: yeah, looks like it does exactly what i suggested :-)
03:08muhooyep, that's what i remember seeing in rails and yii.
03:08muhoothanks
05:38michaelr525when I (def a (.SomeClass))
05:38michaelr525a is shared among all threads, right?
05:40llasramYep -- var root values are global across threads, as are namespaces
05:41fantomexshould i learn clojure over javascript?
05:42borkdudecan't wait for this book to come out =) http://shop.oreilly.com/product/0636920025139.do
05:42llasramOooh, nice
05:42borkdudehmm, only 80 pages?
05:43lucianfantomex: for what?
05:43michaelr525i have some weird shit happening with a clojure app running under tomcat
05:43llasramborkdude: That's version compiled with optimizations. The human-readable version is longer
05:43antares_fantomex: they are typically used for different problems, so you should probably learn both.
05:43borkdudellasram hehe
05:44fantomexyeah that is a better idea lol
05:44fantomexthank you sir
05:45lucianeven if you use clojurescript, javascript knowledge is necessary
05:46fantomexyeah i had wondered that.
05:50michaelr525after changing the (def a (.SomeClass)) to (defn a [] (.SomeClass)) the problems seems to disapear but i still got this printed once: ((ddoo ((-->> ((ddoottoo tteemmppllaattee ((..aadddd \"\"ddaattaa\"\" ddaattaa)))) ((..wwrriittee ww)))) ((..ttooSSttrriinngg ssww)))):: 89..952008410981 mmsseeccss
05:50michaelr525why could it happen?
05:51michaelr525it was printed instead of something like: (do (-> (doto template (.add \"data\" data)) (.write w)) (.toString sw)): 0.974985 msecs
05:53llasrammichaelr525: Well def -> defn changes the var from holding an instance of SomeClass to a function returning a new instance each time it gets called...
05:53michaelr525yup
05:53michaelr525i know
05:53llasramOk :-)
05:53michaelr525i don't understand where the giebriesh comes from?
05:54llasramYeah, odd error is odd. Same code running in two different threads?
05:55michaelr525i use a macro to time the execution of a given code and and print it with the timing result, before changing def to defn i've got even more giebriesh printouts
05:55michaelr525llasram: i guess so, it's running under tomcat
05:56michaelr525so I guess tomcat spins multiple threads for multiple simultanous connections
05:58michaelr525giebriesh like this: (.g"e(t.IgnesttIannscteaOnfc e(Otfe m(ptleamtpelsa)t es\")P r\"oPdruocdtuPcatgPe\"a)g:e \"2)8:3 .201412.389796 0m9s emcsse"c
05:59llasramI'm going to have to go with demons
06:01michaelr525hrr
06:15SrPxis it possible to make rich clojure apps? images, drawing, 3d, event handling, and such?
06:17_nmmnwhy not?
06:47borkdudewhy does add-watch use a key?
06:48borkdudefor example: (def a (atom 3)) -- (add-watch a :foo (fn [key ref old new] (println key ref old "new!" new)))
06:48borkdudewhy is the key needed?
06:57mduerksenborkdude: from the doc: "Keys must be unique per reference, and can be used to remove the watch with remove-watch, but are otherwise considered opaque by the watch mechanism."
06:57borkdudeaaah
06:57borkdudeof course, tnx
06:58borkdudeto remove
06:58mduerksenjep
06:58borkdudebut then why does the function gets the key as an arg
06:59borkdudeso you can remove yourself after one call for example?
06:59borkdudebut then it doesn't even need it as an arg
06:59mduerksenborkdude: so that the fn can discern from which watch it has been called, e.g. if the fn is used for several watches
07:00borkdudemduerksen ah right
07:00samratwhat's the difference between using Math/sqrt and importing sqrt using (:use [clojure.math.numeric-tower :only (sqrt)]) ?
07:01borkdudesamrat probably the source if the answer here
07:01borkdudeis
07:02samratborkdude: (source Math/sqrt) gives No source found
07:03borkdudehttps://github.com/clojure/math.numeric-tower/blob/master/src/main/clojure/clojure/math/numeric_tower.clj
07:04borkdudesamrat the difference is obviously that Math/sqrt always works with floats/doubles, and the numeric tower makes a version for several types
07:15francisI'
07:15francisI'
07:15francis*facepalm*
07:18francisI'm attempting to display an image in seesaw using a then :icon property on a jlabel. If I use a URI (label :icon http://stuff/myimage.jpg) no problems, however I cannot get it to display anything from my local file system.
07:18francisAccording to this thread https://groups.google.com/forum/?fromgroups#!searchin/seesaw-clj/images/seesaw-clj/hPZ8ziAzItI/R0Xzh_MSHGYJ
07:20francisIt's as easy as (label :icon (clojure.java.io/resource "dir/in/my/proj/image.jpg")) However I cannot get this to work. Has anyone else had issues with this?
07:22francisAlso, I have tried using absolute paths, and whatever this ./ is called (relative path?)
07:23francisAnd got it working.
07:34alfborgeAnyone know if enlive can select elements based on the elements children?
07:36alfborgeI have a table with rows that are not identified by anything other than the contents, I want ta do stuff with the rows that has certain contents, but I can only find ways to get the child elements instead of the row I'm interested in.
07:46gfredericksalfborge: I believe it can
08:25gfredericks,`if
08:25clojurebotif
08:25gfredericks,`(foo if bar)
08:25clojurebot(sandbox/foo if sandbox/bar)
08:46Chiron_well, I know this is Clojure IRC but any body using hector-clj lib?
09:07michaelr`wtf dropbox?!
09:08michaelr`the biggest problem with the cloud is when it isn't working
09:26edoloughlinAnyone know if there are any screencasts of Emacs/Clojure workflow? I've attempted a few times to move to Emacs but couldn't see past the (lengthy) keyboard shortcuts and didn't get a sense of how it could make me more productive.
09:27edoloughlinI'm just looking for an overview of what's possible.
09:28ro_stcemerick: loved your 'what sucks about clojure talk'
09:29ro_stedoloughlin: i'd be happy to answer questions. i've just been through that process
09:30ro_sti'm not looking at cheatsheets any more, and i'm not swearing aloud either
09:30cemerickro_st: thanks :-)
09:31edoloughlinro_st: Thanks, but my problem is I don't know what questions to ask. I'd just like to see someone's workflow so I can see what I need to learn.
09:31antares_edoloughlin: maybe http://technomancy.us/149 will help
09:31ro_stcemerick: i'd love to read up on opinions about the 'right' way to tackle the (ns) form. right now, my ns's are a shamble
09:32ro_stand it's painful because i constantly have to feed it, which interrupts my primary train of thought all the time
09:32antares_edoloughlin: also, searching youtube for "emacs swank clojure" yields a bunch of tutorials and one google code jam session in emacs with clojure
09:33cemerickro_st: Sticking with all :require forms with convenient aliases, and using the :refer option to require that's new in 1.4.0 is a good baseline.
09:34ro_stso prefer :require over :use?
09:34ro_stcan i pass :only to :require?
09:34ro_sti've been using :only with :use and :as with :require
09:35antares_ro_st: :only makes no sense for :require but in 1.4 you can use :refer and it will do the same thing as use with :only
09:35xumingmingvcan i call a super class's method in clojure?
09:35ro_stcool. i'll read up on refer
09:35xumingmingvlike super.hello()
09:37edoloughlinantares_: Thanks.
09:38antares_xumingmingv: yes, it is possible, although I cannot immediately say where besides books you can find an example
09:41xumingmingvantares_, thanks
09:42xumingmingvI found a link here: http://stackoverflow.com/questions/9060127/how-to-invoke-superclass-method-in-a-clojure-gen-class-method
09:45baoistHas anyone had an issue with vimclojure in macvim freezing when "vimclojure#WantNailgun" is enabled?
09:54michaelr525i get compilation error but but the stacktrace ends with at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3382)
09:54michaelr525 ... 48 more
09:54michaelr525
09:54michaelr525how to get the rest of the stacktrace to see the source of the failure?
09:58pjstadigmichaelr525: the "... 48 more" indicates that the "48 more" frames were the same as the frames above
09:58pjstadighttp://java.sun.com/j2se/1.5.0/docs/api/java/lang/Throwable.html#printStackTrace()
10:22alfborgeI'd like something like the following that will return yes: (or "" "yes")
10:22alfborgeI'm used to python where the empty string is considered false. Would be convenient here.
10:24borkdudealfborge everything nil or false is "logically false" in Clojure
10:24borkdudealfborge everything else is considered "logically true"
10:25borkdudealfborge you can however use the function blank? from clojure.string for something like this
10:25alfborgeYes, I get that. Was wondering what would be the idiomatic solution for this in clojure.
10:25michaelr525I get a long stacktrace which ends with this: at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3382)
10:25michaelr525 ... 48 more
10:25michaelr525Compilation failed.
10:26FrozenlockI think ,,(emtpy? "") might also usefull
10:26michaelr525How to get the rest of it?
10:26alfborgeborkdude: Using blank? means I need to use a let. Any way around that?
10:28alfborgeAs far as I can see, using blank? implies something like: (let x (fn1) (if (blank? x (fn2) x)))
10:28borkdudealfborge maybe something like this? &&(first (remove clojure.string/blank? ["" "yes"]))
10:28borkdudealfborge maybe something like this? ##(first (remove clojure.string/blank? ["" "yes"]))
10:28lazybot⇒ "yes"
10:28alfborgeborkdude: makes sense
10:29borkdudeI always forge this middle in the sentence notation…. why!
10:29borkdudeforget
10:30foxdonutborkdude: because you need more coffee ;)
10:30borkdudefoxdonut fh… I need more and more coffee… I think I need a vacation instead
10:31Frozenlockborkdude: Meaning you don't code in your vacactions? :P
10:31borkdudeFrozenlock not when I'm on a trip, forced afk
10:33borkdudeand a nice trip is coming up
10:34borkdudeI guess the best approach to read through a (clojure/code) book is not to spend hours on details I don't understand (or maybe due to lack of coffee/brainpower) but to continue
10:34borkdudeand revisit again when reborn by caffeine
10:38cemerickborkdude: sorry I wasn't clear enough re: the coordinate system. You got it in the end. :-)
10:39alfborgeIs there a reverse function of fnil?
10:39alfborgeIe I want to take a function f and make it return nil if the result is x
10:39alfborgeAs opposed to fnil that take a function f and make it return x if the result is nil
10:39borkdudecemerick :)
10:41alfborgeI'm still on the (or fn1 fn2) where I want the result of fn2 if fn1 returns "".
10:41TimMcalfborge: 'or
10:41TimMcHowever, 'or will also short-circuit on false.
10:42alfborgeTimMc: I'm looking for short-circuiting on "" instead of false/nil.
10:42TimMc(Err, "short-circuit" might be the term for truthish results, but you get my meaning.)
10:42TimMcalfborge: if-let is the closest I can think of.
10:45borkdudealfborge (defn foo [f x] (fn [& args] (let [res (apply f args)] (if (= x res) nil res)))) ?
10:45borkdudealfborge ((foo + 2) 1 1) => nil
10:45borkdudealfborge ((foo + 2) 1 2) => 3
10:45TimMcalfborge: SOrry, that was a bad recommendation. I think I'm still asleep.
10:45semperostrying to use cgrand's parsley, trying out the new views functionality shown here: https://github.com/cgrand/parsley/blob/master/test/net/cgrand/parsley/test.clj#L85
10:46alfborgeTimMc: Indeed, couldn't find a way to make if-let work since it suffers from the same issue as using or. :)
10:46semperosperhaps I'm misunderstanding, but it looks like the output of (my-parser my-input) is the input for something like net.cgrand.parsley.views/length as one example of a view function
10:47semperosbut I get a "net.cgrand.parsley.Node cannot be cast to clojure.lang.IFn" error
10:47alfborgeborkdude: Yes, but is there an ideomatic way to do this?
10:47semperosif anyone can examine this and see what I'm not seeing, would be appreciated
10:47TimMcalfborge: If it really irks you to use (let [...] (if ...)) inline, you could define a macro or fn to do the work.
10:48alfborgeTimMc: If using a let is the recommended solution then that's ok. However it feels clumsy and that's usually a sign that there is something I've overlooked. :)
10:48borkdudealfborge idiomatic? I take that as an insult
10:49TimMcheh
10:49alfborgeborkdude: If you want. That wasn't my intention.
10:49borkdudealfborge kidding ;)
10:49alfborge:)
10:51alfborgeGot to run. Thanks for the help guys.
10:55gtrakmboeh: saw your blog post re: mass downloader, what was the issue with agents?
11:02kerataconIs this the proper place to ask about errors setting up swank-clojure?
11:03borkdudekeratacon yes, but you could also try #leiningen
11:05kerataconOK, I'll try here first. I installed swank-clojure 1.4.2 and it installed without error, but Aquamacs (which does have clojure-mode installed) gives errors with clojure-jack-in and when I attempt to run swank-clojure in my lein bin folder, I get Java runtime exceptions
11:05borkdudekeratacon post the exceptions in a gist
11:06borkdudekeratacon and what leiningen version ar eyou using
11:06kerataconhttps://gist.github.com/2989169
11:07keratacon1.7.1
11:07antares_I think it needs arguments like a port to bind to
11:07antares_typically swank-clojure is used via clojure-mode in lein
11:07antares_which starts it for you and picks a port automatically
11:08borkdudekeratacon I usually start it with "lein swank"
11:08borkdudekeratacon but using clojure-jack-in, you shouldn't have to start it yourself anyway,
11:08semperosanswer to my question above: fnode and fleaf
11:08keratacon"lein swank" says swank is not a task
11:09borkdudekeratacon then the plugin is not properly installed
11:09borkdudelein plugin install swank-clojure 1.4.2
11:11kerataconreinstalling worked
11:11kerataconthanks for your time
11:12borkdudewelcome
11:12borkdudegtg
11:56ibdknoxMonrning everyone!
11:56ibdknoxhttp://www.chris-granger.com/2012/06/24/its-playtime/
11:56ibdknoxenjoy :)
11:57FrozenlockPlaytime? Time to get my trains!
11:57mhansonibdknox: Sweet!
11:57samratcould someone explain what's going on in line 9 here: https://www.refheap.com/paste/3310 ?
11:57foxdonutibdknox: superawesome
11:58foxdonutsamrat: if candidates is not empty, return its first element, else return n
11:58RickInGA'(seq [1 2 3])
11:58RickInGA,(seq [1 2 3])
11:58clojurebot(1 2 3)
11:58RickInGA,(seq [])
11:58clojurebotnil
11:58oskarthnice one ibdknox
11:58treehugin clojurescript w/ cljsbuild, can my user code safely require closure-library r2005 (the current head, for example), while cljs itself is on an older version? ie. is the compiler runtime isolated from the code its compiling?
11:58foxdonut,(let [candidates [] n 42] (if (seq candidates) (first candidates) n)
11:58clojurebot#<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: EOF while reading>
11:59foxdonut,(let [candidates [] n 42] (if (seq candidates) (first candidates) n))
11:59clojurebot42
11:59foxdonut,(let [candidates [1 2 3] n 42] (if (seq candidates) (first candidates) n))
11:59clojurebot1
11:59foxdonut,(let [candidates nil n 42] (if (seq candidates) (first candidates) n))
11:59clojurebot42
11:59dnolenibdknox: yowza
11:59mhansonibdknox: Looking awesome so far.
12:00Frozenlockibdknox must be eating awesome cherios in the morning. Would you mind sharing the brand? :)
12:02ibdknoxhaha :)
12:02bork|awayibdknox on my mac I get a white screen with nothing to do in it
12:03ibdknoxbork|away: what OS X?
12:03bork|away10.7.4
12:04gtrakibdknox: already the superior one-step repl
12:04Frozenlockibdknox: Does it close the server if I close my browser?
12:05bork|awayibdknox http://twitpic.com/a0fykz
12:05ibdknoxFrozenlock: no, so as to be a quick on
12:05ibdknox./light server stop will kill it
12:06ibdknoxbork|away: can you check what's in ~/.lighttable/logs/server.log
12:06FrozenlockThanks!
12:06foxdonutFrozenlock: also, ibdknox is on Uberman's sleep schedule (20-minute nap every 4 hours. That’s a total of 2 hours of sleep every 24-hour period.)
12:06bork|awayibdknox Server started.
12:06bork|awayCONNECTING: clj
12:06ibdknoxinteresting
12:06ibdknoxclose that window and call ./light table again?
12:06ibdknoxor actually
12:06ibdknoxjust do cmd+n
12:07bork|awayibdknox it might be just me, I tend to get things b0rked ;)
12:07Frozenlockfoxdonut: Wasn't Uberman' schedule debunked years ago?
12:07tmciveribdknox: works for me on Ubuntu. Thanks, keep up the great work!
12:07bork|awayibdknox cmd+n just opens a new white screen
12:07bork|awayibdknox I'll try restart it
12:08dnolenibdknox: I'm assuming your 1.5 issue got resolved?
12:08foxdonutFrozenlock: probably, but so was Lisp, and look where we are now :D
12:08bork|awayibdknox hey that worked… suddenly things appear
12:08samratcan anyone explain what's going on in line 9 here? https://www.refheap.com/paste/3310
12:08ibdknoxdnolen: switched gears on that, this version worked before any of those changes haha
12:08bork|awayibdknox I think I did something wrong while pasting the command, didn't see that it was all just a long line.. sorry!
12:08ibdknoxbork|away: I have no idea lol
12:09ibdknoxfun real-time facts
12:09ibdknoxI'm tracking events, active minutes spent and lines of code executed (rate-limited to one eval per minute per person, otherwise that would be cheating)
12:10ibdknox2010 active minutes spent, 38129 lines of code eval'd :)
12:10bork|awayibdknox cool! :) :)
12:10gtraksamrat: i think you meant seq?
12:10samratgtrak: yeah, i couldn't understand that part
12:11ibdknoxlol people are funny
12:11ibdknoxthis guy complained that after removing everything it installed it no longer worked :p
12:12bork|awayibdknox I'm amazed already, can't wait to play with this some more… away again
12:12zerokarmaleftibdknox: this is fantastic
12:12ibdknoxI released it to a really small group last weds
12:12ibdknoxI was surprised how much people were using it :)
12:14Bronsaibdknox: http://i.imgur.com/PKwSL.png
12:14ibdknoxlol
12:14bork|awayibdknox I know this will be a huge win in the classroom
12:15ibdknoxBronsa: yeah, there are likely a few things like that where I'm not correctly getting line/column metadata
12:15Bronsaibdknox: yeah, just letting you know, keep up the awesome work :)
12:15zerokarmaleftibdknox: is there a way to resume execution after cancelling with C-d?
12:15sr71-blackbirdibdknox, just curious, is there a demo/really-beta version of light table around?
12:16ibdknoxzerokarmaleft: should be able to just start typing again
12:16ibdknoxsr71-blackbird: what do you mean?
12:17sr71-blackbirdibdknox, i'm just wondering if a version of light table was around to use -- I just joined the channel, might be off-topic .. if so, I'm sorry
12:18ibdknoxsr71-blackbird: http://www.chris-granger.com/ :)
12:19sr71-blackbirdibdknox, ahhh, awesome!
12:20uvtcgiven a project name, how can I ask clojars.org to tell me (A) the :url and (B) the :description for the given project?
12:20technomancyuvtc: you'd have to fetch the pom I think
12:20technomancythere's no API
12:20technomancyeven if there were, the pom might be a good place to look anyway
12:21uvtctechnomancy, I'm not familiar with pom files. Are they basically the mvn-equivalent of the project.clj?
12:21technomancyuvtc: yeah, project.clj complies to a pom
12:21ibdknoxthat went up fast. Over 64k lines now :)
12:21technomancyuvtc: just do `lein pom` to check it out; should be easy to parse with clojure.xml
12:21uvtctechnomancy, Oh, I see. The next question I was going to ask was, "can I ask clojars for a given project's project.clj file?".
12:22technomancyuvtc: curl http://clojars.org/repo/robert/hooke/1.1.2/hooke-1.1.2.pom
12:23uvtcOh, I need to include version number info. Ok.
12:23uvtctechnomancy, thanks.
12:24technomancyno problem
12:26technomancyuvtc: I'd like to allow arbitrary pieces of metadata (like documentation url) to be specified in project.clj but I don't know of a way to make it propagate out to the pom
12:27uvtcIt's fine. Like you pointed out, I can just parse the pom with clojure.xml.
12:27technomancyuvtc: yeah, but I'd like clojars to be able to take advantage of more metadata than just url and description
12:29uvtcI'm thinking that as long as every project includes a valid :url and :description, then that's a good start. Last time I checked, a number of projects at clojars did not have urls specified. I'm thinking it might be good to try and do something about that.
12:30uvtcThat might be more useful than the Alcove (re. last-night's ML post I made).
12:32uvtctechnomancy, this has come up here before. I'm not sure how much of the process could be automated.
12:33technomancyuvtc: lein yells at you now if you try to deploy url-less or description-less projects
12:33uvtc(inc technomancy)
12:33lazybot⇒ 26
12:33technomancyplus they won't be promoted to the new releases repo
12:34uvtcWhat's the "new releases repo"?
12:35technomancyclojurebot: next-gen clojars is http://groups.google.com/group/clojars-maintainers/browse_thread/thread/77c1cd77e478bb0f
12:35clojurebotIk begrijp
12:35technomancybot oughtta know that
12:35technomancyuvtc: it's the main thing blocking leiningen from declaring 2.0.0 final
12:36uvtcclojurebot: next-gen clojars
12:36clojurebotnext-gen clojars is http://groups.google.com/group/clojars-maintainers/browse_thread/thread/77c1cd77e478bb0f
12:36technomancya repo that enforces some minimal requirements for usage; lein 2.0.0 will default to only checking that and central
12:36uvtcHa. Was just reading that discussion.
12:36technomancyso the existing clojars repo will have to be opt-in
12:37uvtcOh, you mean "pom/jar" repo, not github repo.
12:37technomancyaye
12:37uvtcAye laddie!
12:41uvtc.oO( seems odd to me that they're named inc and dec, rather than incr and decr ... inc looks like "include" and dec looks like "decimal"...)
12:41technomancyincf and decf are the state-mashing CL equivalents
12:44uvtcWhat's the "f" for?
12:45technomancyprobably the same as the f in setf
12:45technomancymaybe form?
12:45uvtc"Oh *fiddlesticks* you've gone and mashed the state!"
12:45technomancyreally I'd expect a lot more "enemy of the state" jokes from this channel
12:45uvtchahaha
12:47gtrakimmutability is really just an indirection of state, though, managed state-change
12:51gtrakoops, 'x is really just y', I mean that's one way to look at it
12:51technomancyyeah, CL's notion of "places" really feels like just a half-baked reference type
12:53gtrakhmm, how do I search for common lisp 'place'
12:54technomancyC-h f setf maybe? =)
12:54y3diim new to clojure and im testing out recursion in lighttable playground with this func: https://gist.github.com/2989839
12:54y3dibut I get a wrong number of args error, i can't seem to figure out why
12:56uvtcDo you see a need for a "CPAN for Clojure", given that Clojure has Clojars + clojure-toolbox (et al) + github?
12:56mhansony3di: When you're calling your function, don't put the arguments in a vector.
12:56gtrakah, an ELISP thing
12:56y3dioooo
12:56technomancygtrak: inherited from MACLISP I'd wager
12:57technomancyuvtc: I don't think the separate hand-curated approach of clojure-toolbox is a good bet in the long run
12:58technomancyuvtc: but I would love to see some of the clojuresphere data integrated into clojars
12:58bhenry1has anyone had problems with lein2 uberjars?
12:58mboehgtrak: I couldn't figure out how to dispatch a lot of agents in one go and then wait for them all to finish. But I'm still fuzzy on agents in general
12:59gfredericksemployer just got a safair books account, so now I can read all the clojure books :)
12:59technomancyclojurebot: anyone?
12:59clojurebotJust a heads up, you're more likely to get some help if you ask the question you really want the answer to, instead of "does anyone ..."
12:59gtrakmboeh: ah, I think that's the wrong approach for agents. I read that in your previous post. You probably only want one agent? then use send or send-off on it.
13:00gtrakthough I'm not sure what the 'state' would be. futures are probably what you want
13:01uvtctechnomancy, re. clojure-toolbox, it seems useful to have links to projects by-category ... (I wonder how much people actually *use* that feature.)
13:01technomancyuvtc: yeah, but something like that needs to be curated by project maintainers themselves
13:02mboehgtrak: How do I do more than one job, then? Do agents represent a thread pool or just a single job?
13:02clojurebotwhose job is<reply>that is gsavs job
13:02SrPxCan I save my current REPL state ? Using swank + clojure + slime. Like, in a text form, maybe?
13:02gtrakmboeh: futures actually use the send-off pool, check out https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Agent.java
13:02technomancyuvtc: 2/3rds of the entries under JSON on that page are deprecated
13:02uvtcPython's cheeseshop (module repository (ugh, don't like overloading that term like that)) does it that way; project maintainers specify tags for their project, and you can browse the project repository by tag...
13:03technomancyuvtc: that's the way to go
13:03technomancywe should standardize on a deprecation flag too =)
13:03gtrakmboeh: and https://github.com/clojure/clojure/blob/d0c380d9809fd242bec688c7134e900f0bbedcac/src/clj/clojure/core.clj#L6143
13:03technomancylots of 404s on that page =\
13:03uvtctechnomancy, I emailed weavejester about a few broken links there.
13:03technomancywell, mostly getwoven projects I guess
13:04uvtccrane, work, sexpbot, fjord
13:04technomancymanual curation doesn't scale
13:04uvtcIt's got to be difficult for one person to maintain that list by-hand.
13:04gtrakmboeh: the cachedThreadPool keeps growing, so it's meant for IO stuff like what you're doing
13:05mboehI suppose I'd take my existing seq of task functions and map them to futures, and then... deref them all in sequence, I guess?
13:05mboehOnce they've all deref'd, it means the jobs are all done, I guess
13:05gtrakmboeh: derefing will block actually
13:05mboehWhich is what I want to do -- block until they've all finished
13:06gtrakyea.. that'll work then
13:06bhenry1technomancy: i don't really have a question yet. my lein2 uberjar doesn't work, and i wondered if there was a problem before i try to figure out what i did wrong. incidentally, it works with lein1 uberjar even though my project is all lein2-ified.
13:06gtrakmboeh: you'll have a seq of blockings :-)
13:07uvtctechnomancy, Ah. Here. Python's Cheeseshop calls them "trove classifiers". Here's a list: http://pypi.python.org/pypi?%3Aaction=list_classifiers
13:07gtrakmboeh: also consider promise/deliver
13:08technomancyuvtc: that looks familiar; I bet they got that list from sourceforge
13:09llasramI haven't had a chance to track it down yet, but has anyone else experienced that Clojure (1.4) doesn't like being in an uberjar where something else has provided a data_readers.clj ?
13:09mboehgtrak: Thanks! I'll try that out. This stuff is all quite new to me so I appreciate the help.
13:10xeqibhenry: what does "doesn't work" mean?
13:10llasramAnd now that I'm thinking about it, I think maybe lein needs special support for uberjaring deps with data_readers.clj
13:10gtrakmboeh: I enjoy thinking about it, np
13:12llasramtechnomancy: Any thoughts on data_readers.clj and `lein uberjar`?
13:13bhenryxeqi: technomancy: my bad. old preview. all good
13:13technomancyllasram: you could do that with a :filespecs entry in project.clj; check out `lein help sample`
13:15llasramHmm, interesting
13:16technomancyhm; actually looking at that now that's a horrible API
13:16technomancyit should be a map instead of a seq of maps
13:16SrPxcan you save your REPL state?
13:17llasramtechnomancy: That might make it more clear, esp if the intent was for later entries to override earlier
13:17uvtctechnomancy, now that you mention it, I'm surprised to not see a :deprecated-versions key in lein's sample.project.clj.
13:17technomancyuvtc: I think a general :deprecated key would be more useful
13:18llasramAs it is... Oh, ok. I think that's the effect, by overwriting the same path in the jar file if the same path appears in the assembled filespecs more than once?
13:18technomancy:superceded-by [cheshire "4.0.0"]
13:18technomancyllasram: I think the jar->uberjar copying is actually first-one-wins
13:19technomancyuvtc: for instance, clj-json and clojure-json would point to cheshire
13:19llasramOh, right -- :filespecs only affects jars, not uberjars, where uberjars are what seems to have the issue
13:19uvtctechnomancy, do you mean that example be in the cheshire project.clj?
13:20uvtctechnomancy, right. Nice, yes, useful for when the author wants to recommend that the user upgrade/switch to another project that does the same thing but better.
13:20technomancyuvtc: only going to be more common as time goes on
13:21uvtctechnomancy, I agree. Would be great for lein to be able to tell the user about it.
13:21technomancyprobably clojars job rather than lein
13:22technomancyusers of superceded libs are more likely to be on an old version that doesn't yet know it has been superceded
13:23uvtcI was thinking: a user adds the coords of an older lib to their project.clj and uses it without even checking clojars.
13:24uvtctechnomancy, maybe then it would be nice if they could explicitly *ask* lein: "am I using any deprecated projects?" "Have any of the projects I'm using been superceded?"
13:25technomancyhm; maybe
13:25uvtcGah. Always misspell that: superseded
13:28gtraksuperceed
13:28dnolenSrPx: not really.
13:29dnolenSrPx: kovasb has some ideas, but not really about saving entire app state, more workbook like.
13:29gtrakuvtc: who gets to decide if something has been superseded?
13:30gtrakwe need a 'lein consensus'
13:30uvtcgtrak, the author of a given project would decide if their project has been superseded by some other project.
13:30technomancyyeah, it would be for cases where a maintainer has explicitly abandoned a project
13:30uvtcThey're the one writing their project.clj file. :)
13:32gtrak'lein consensus (> clojure.data.xml lazyxml)'
13:32uvtctechnomancy, so far, to me it seems easy to forget to check/update version numbers in project.clj files. Especially if you populate them by grabbing links from other projects you've worked on recently. That's why I think it would be important to be able to ask lein explicitly about if any of those have been deprecated/superseded.
13:33SrPxdnolen: okay, thank you!
13:33technomancyuvtc: there's a plugin for that; lein-outdated IIRC
13:37kaoDhi
13:42uvtcWhat is the clojars policy on keeping old releases? Does it keep all old releases forever?
13:42technomancyuvtc: yeah
13:42technomancyuvtc: there's no guarantee about keeping old snapshots though
13:43technomancybut releases are forever
13:55scriptordoes anyone have a link handy to the clojurescript todomvc submission?
13:56FrozenlockQuestion for the congomongo users: Is there a way to do (merge {:a 100} {:a 200} {:a 300})--> {:a 300} but on the server side? (directly on the mongodb?
13:59gtrakhey, how would I add a custom clojure file, classpath entries and such into lein 1.x so I have some utilities in all my project repls?
14:00gtrakcannot upgrade to 2 yet unfortunately
14:00S11001001gtrak: make other lein project with common utils, use checkouts
14:00technomancygtrak: might be doable with a plugin, but it's going to be ugly compared to 2.x
14:00technomancygtrak: what's blocking the upgrade?
14:01gtrakother plugins and things, not just me involved
14:01technomancyok, just curious
14:02gtrakour current build config is touchy even with 1.x versions
14:02technomancyhaven't heard many cases of people not being able to upgrade so it always makes me wonder what's up
14:02gtrakyea, I'm not sure of the details, but I think it involves some custom stuff :-)
14:03gtrakso I could make a plugin? I was looking into doing that anyway
14:03gtrakfor a different reason
14:04technomancysure, in 1.x plugins just get put in ~/.lein/plugins as an uberjar and included in every project's classpath
14:04technomancywhich is really gross but might get you what you need
14:04gtrakgotcha, that might be simplest
14:06zach_Is there anything other than clj-oauth that people would recommend for supporting github oauth?
14:06technomancyzach_: github oauth is super-simple to consume with clj-http
14:07zach_technomancy: Okay, that's where I was kind of headed. Thanks!
14:07technomancyzach_: https://github.com/technomancy/buildkits/commit/027d7da416972892f2340bcfc0fafc18f33b68db#L5R22
14:08zach_technomancy: Awesome!
14:13uvtcIs there any mechanism for indicating which repo for a given project is the canonical one? That is, besides adding a note to the top of the readme.
14:14technomancyuvtc: no, and it drives me nuts
14:14uvtcFor example, https://github.com/medSage/clj-http vs. https://github.com/dakrone/clj-http vs. https://github.com/mmcgrana/clj-http .
14:14uvtcHm.
14:14technomancy"delete everything but a readme pointing to the new one" is really the only reasonable thing to do
14:15uvtcHow about on clojars?
14:15technomancyjust :description
14:15uvtcI mean, if there are multiple like-named projects, differing only by group-id.
14:15technomancyoh, well the solution there is don't do that because it's terrible
14:15uvtcSo, same story there then.
14:16technomancyorg.clojars.* excepted
14:16uvtc"org.clojars.* excepted"?
14:16kaoDis there any good way to debug clojure in emacs?
14:17uvtctechnomancy: Gah, sorry --- need to go read more of the docs at https://github.com/ato/clojars-web/wiki.
14:20kaoDnot println, of course
14:21lynaghkscriptor: https://github.com/lynaghk/c2-demos/tree/master/todoMVC
14:21scriptorah, thanks
14:22lynaghkscriptor: that's mine, anyway. I don't think there's an "official submission" or anything
14:22lynaghkscriptor: also, I haven't submitted it yet. Need to cut C2 0.2.0 and get some feedback on this one (please let me know if you have any questions or think things should be done differently)
14:24scriptorlynaghk: one thing, it doesn't seem very...mvc-ish
14:24lynaghkscriptor: = )
14:24scriptorwhich probably doesn't fit so well with clojure's functional sytle
14:24lynaghkscriptor: yeah. I'm not exactly sure how I'd make it more MVC. Maybe represent the TODO-list as a record with a ton of interfaces for "add item" and "get completed count" and stuff like that
14:24lynaghkscriptor: but that doesn't seem very Clojurey to me at all.
14:25scriptorlynaghk: yep
14:25scriptorit'd basically be forcing oop onto it
14:26scriptoron the other hand, the current one's organization is a bit all over the place, with a bunch of functions in core
14:26scriptorwhile list.clj seems to contain the templates and events
14:26Chousukefunctional UIs are hard :/
14:26lynaghkyep. That would be the organization. I'm thinking of list.cljs as the view, and core.cljs as the model.
14:27lynaghker, "data/logic" bits.
14:27lynaghkif there were more than one logical grouping of data fns, I'd split them out into different namespaces
14:27lynaghkChousuke: they're not as hard as OO-UIs sometimes = )
14:28ChousukeI've read lots about various technologies used to build interactive applications using functional tools but I've yet to find a software project that uses those for real things :P
14:31edwHey guys, I'm running into this problem with lein as I'm trying to get Incanter up and running. Hoping someone could provide some insight: https://gist.github.com/2990375
14:31foxdonutChousuke: interesting, anything in particular that looked good to you?
14:32baoistHas anyone had an issue with vimclojure in macvim freezing when "vimclojure#WantNailgun" is enabled perchance?
14:32Chousukenah, just random things. mostly haskell :P
14:32foxdonutChousuke: I hear ya. And the reactive stuff and so on too?
14:33Chousukeyeah
14:33Chousukebut they all have very simple examples :/
14:33foxdonutguess you reached the same conclusion as I did :)
14:33technomancyedw: ugh; why is incanter pulling in mongo?
14:33technomancyedw: I'd recommend :exclusions
14:33mattmossOkay, maybe my brain isn't working at the moment, but... If I have an agent with a simple value, e.g. (def x (agent 3)), how can I send a new arbitrary value?
14:33Chousukeit's really cool but it's not obvious to me how it would scale to real applications.
14:33mattmoss(send x 5) obviously doesn't work.
14:34edwAh. OK.
14:34edwIt also pulls in the kitchen sink.
14:35edwI looked in the project file and saw that I can just comment out the mongo support in toto.
14:36scriptorlynaghk: I'd say start abstracting the code out so it's more frameworky
14:37technomancyyet another "big pile of stuff" adherent
14:37scriptorfor example...
14:37uvtctechnomancy: how long do you guess until remaining details are hashed out and the new clojars is ready?
14:38scriptorlynaghk: (model todos []) might set up the atom and generate the add/edit/delete code for you
14:39lynaghkscriptor: trying to make it more frameworky seems pretty antiethical to Clojure philosophy
14:39lynaghke.g., "treat data as data"
14:39technomancyuvtc: it needs two things mostly: 0) support for deploying signatures from Leiningen and 1) a process to promote existing artifacts to the S3 releases repo
14:39scriptorlynaghk: yes, but it'd get annoying pretty quickly to have to manually write all the getters and setters every time, right?
14:39technomancyuvtc: 0 is implemented on a branch waiting for a pomegranate release. not sure how long 1 will take
14:40technomancyuvtc: we may still need to hash out some policy details too
14:40uvtctechnomancy, thanks.
14:40lynaghkscriptor: We haven't been annoyed by it enough to abstract it out, and we've been making cljs apps for about 6 months full time now. That said, I can see what you're after, and it seems reasonable
14:40lynaghkscriptor: it just needs to be balanced with the fact that data isn't always going to be as simple as a vector of flat maps.
14:41mattmossThis may sound stupid but... any idea how to reduce #(second [% 5]) for use in send to an agent?
14:41lynaghkscriptor: it's easy to abstract that stuff out, but then how do you deal with the edge cases that'll start to crop up? Sometimes use the framework-generated accessors, sometimes write custom fns?
14:42scriptorlynaghk: right, but a large amount of data could be modeled with just vectors and hashmaps
14:42lynaghkscriptor: definitely. It could also be just that we don't really build standard "CRUD"-type apps, so we haven't felt what might be a very obvious/typical pressure.
14:45scriptorlynaghk: yea, it's just that if you have several different, but similar models, you wouldn't want to have the same edit-* clear-* add-* functions every time
14:45gtrakmattmoss: do you want (identity 5)?
14:45scriptorit doesn't really have to be a framework
14:46lynaghkscriptor: do you have any cljs UIs? I'd be interested to see your take on some of the problems.
14:46lynaghk(that has definitely been one of the most frustrating things about cljs---it's hard to find more-than-hello-world code to see how people approach problems in a functional way)
14:47scriptorlynaghk: not really, current job is to evaluate backbone for an upcoming project
14:47scriptorI think the basic model structure is that we have images, which are contained in galleries, and then we have collections that can contain both galleries or other collections, so a basic tree structure
14:48mattmossgtrak: Sending that to an agent fails the agent.
14:48gtrakoh? huh?
14:49uvtcAt clojars, if you see a project there with a group-id of "org.clojars.<somebody>", that indicates that the project in question is *not* the canonical one, correct?
14:49mattmossIf I have (def x (agent 3))... I need something like (send x 5) , but that actually works.
14:49xeqimattmoss: (constantly 5) ?
14:50gtrakmattmoss: ah, my bad, one level meta-er
14:50mattmossxeqi: Ya, that seems to work.
14:50mattmossI find the hardest part of learning a new computer language isn't the language itself... it's the libraries.
14:52gfredericksmattmoss: (constantly 5) is the same as (fn [_] 5); you just ignore the input state and return 5
14:52gfrederickswell it's the same in this context
14:52technomancyuvtc: that's the idea
14:53uvtctechnomancy, then what do you do when project maintainership changes? How does the new maintainer push to the canonical group-id?
14:54dnolen_scriptor: I'm still hoping that someone will do the CLJS work necessary to have something significantly better than JS MVCs.
14:54dnolen_scriptor: JSC MVCs are the new ORM.
14:54tmcivergfredericks: slight correction: (constantly 5) same as (fn [& more] 5)
14:54xeqiuvtc: you can add people to the group
14:54uvtcxeqi, oh! Thanks. :)
14:55scriptordnolen_: right, I definitely don't want to see MVC bolted onto clojurescript, but the current method seems a bit too close to how it was done previously
14:55dnolen_scriptor: what "current method" ?
14:55scriptordnolen_: er, the one that lynaghk pasted above
14:55xeqiuvtc: see https://clojars.org/groups/ring which has both people that have ran it
14:56shawnlewisdnolen_: do you have design ideas for such a thing?
14:56uvtcxeqi, nice.
14:56dnolen_scriptor: yeah there is no "current method", just a lot of different experiments about possible approach.
14:56scriptorright
14:57mattmossgfredericks: thanks
14:58dnolen_shawnlewis: only sketches - someone needs to design a performant, easy to use FRP-like layer. for data I'd like to see something built over core.logic DB facilities. then you could have queries over raw (indexed) data - you don't need collections or models.
15:03shawnlewisdnolen_: to me it seems that contrib.datalog was probably at the right level for FRP
15:03scriptorlynaghk: so, in short, framework is probably the wrong word, just something that prevents too much code duplication
15:04dnolen_shawnlewis: it was/is incredibly slow.
15:04shawnlewisdnolen_: ah… i mean the api though
15:06shawnlewisdnolen_: maybe i'm wrong about this, but it seems with core.logic facts are best specified as pairs
15:06dnolen_shawnlewis: yes though it probably wouldn't be too hard I think to build out something datalog like over core.logic either.
15:06shawnlewisdnolen_: right that's what I was thinking you meant by "built over core.logic DB facilities"
15:06dnolen_shawnlewis: no they can be tuples of any size really, though current implementation is better if < 20
15:07dnolen_shawnlewis: 2 things I haven't had time to get to, multi column keys & incremental indexing.
15:10gfrederickstmciver: thus my "in this context" ammendment
15:11shawnlewisdnolen_: i haven't gone very far down the core.logic road, but when I played with it I made everything pairs, because it wasn't clear how to do a partial fact check. For example if I have a (defrel book id reader-id writer-id), how can I state in a query that I want books where the writer id is 5? I could do (fresh [a] (book q a 5)) and leave a as a free variable?
15:11dnolen_shawnlewis: yes free variables
15:13shawnlewisdnolen_: ok, so the layer that brings it up to a datalog like interface would do that for you, because if you have a 20-sized relation you don't want to have to make 18 of those free if you're only doing a query on a pair
15:13dnolen_shawnlewis: yep
15:13shawnlewisdnolen_: or the layer could split all relations into pairs
15:15shawnlewisdnolen_: are there performance implications for reducing all relations to relations between pairs, versus adding lots of free variables to queries?
15:16cmajor7not entirely a clojure question, but a JVM one… is there any way to find out whether a certain JVM supports GetDirectBufferAddress (e.g. JNI access to direct buffers)? e.g. is there a proof/documentation that Oracle/Sun JVM supports it? (e.g. per docs it says "Every implementation of the Java virtual machine must support these functions, but not every implementation is required to support JNI access to direct buffers")
15:16dnolen_shawnlewis: yes, more lookups.
15:16tmcivergfredericks: Ah, yes.
15:23etoschon calling java from clojure: i need to call a java program's main from clojure and would like to do so from the clojure repl. when the function that i'm calling finishes, it kills my current instance of the jvm. is there a neat way to call the clojure expression and either (a) block any calls the kill the java process or (b) run on another jvm? i dont necessarily need to get the data back. also, i've tried using clojure.java.shell and am having all sor
15:23etoschthis would be general call for advice, btw :)
15:26technomancyetosch: it's impossible to disable the System/exit call from the main method?
15:27ibdknoxWhat would be a good metric to track interest in Clojure?
15:27skise-mouvote for the best muscle man (from powermen,muscle hunks and muscle gallery) please vote to all groups and pages thanks
15:27skise-mouhttp://bestmusclepowermen.blogspot.com/
15:27gtrakibdknox: google trends
15:27amalloyetosch: look for a program that's not so awful that it includes a call to System.exit
15:29etoschtechnomancy: I'm in a weird position - I'm trying to write a clojure interface to some java software. It's meant to be augmented in some ways, but I don't want to mess with it in other ways. Let's say for now that I can't go into the java code and call System/exit. What are my options?
15:30technomancyyou'll have to launch a subprocess
15:30dnolen_ibdknox: I rely on Twitter (hard to really follow anymore) / GitHub mostly. Are you looking for something more specific?
15:30thesaskwatchhi, I'm totally new to clojure. I'd like to setup a maven project using noir, make the build portable - to create war files running without dependencies, and use jetty plugin to develop - anyone here know how to do it?
15:31ibdknoxdnolen_: just curious to see how much things track with Light Table
15:31xeqietosch: subprocess, or perhaps a java.policy could stop exit calls
15:31technomancyhttps://groups.google.com/group/clojure/about <- there's always mailing list signups
15:31technomancyxeqi: oh yeah, I bet you could plunder clojail for that
15:32technomancygetting pretty close to 10x of what it was when I joined
15:32dnolen_ibdknox: I'm sure it helps quite a bit. Though it does seem to me the interest in Light Table is far broader than any interest in Clojure.
15:33technomancyof course back then close to 100% of clojure users were on the mailing list; I'm sure it's much lower now
15:33ibdknoxtechnomancy: :)
15:33thesaskwatchwow, compojure looks nice
15:33ibdknoxdnolen_: yeah, mostly just curious. A lot of people got their first taste of Clojure today I think
15:33dnolen_ibdknox: that said, a good Noir + CLJS mode could do for Clojure what TextMate did for Rails. I see a lot of excitement about being able to see values flow through the code immediately.
15:34foxdonut"I have no idea what this language is but I want that IDE!"
15:34ibdknoxdnolen_: I wouldn't be surprised if such a thing came into existence in the not too distant future
15:34ibdknox;)
15:35technomancyinteresting that mailing list traffic levels seem to have dropped a bit
15:35dnolen_ibdknox: haha, I suspected as much. Light Table is looking like an ideal for teaching folks about Clojure.
15:35mhansonExciting day.
15:35technomancyhopefully at least partly due to fewer people getting confused about how to install slime
15:36dnolen_technomancy: because there are some really good books out there now?
15:36ibdknoxtechnomancy: dnolen_: combination of both probably lol
15:36technomancydnolen_: yeah, plus things aren't breaking much
15:36newshamhi. I would like to use a clojure REPL from the shell in android, or alternately over a socket remotely.
15:37etoschxeqi: hrm, do you know of a clojure library for this? I'm reading up on it now.
15:37newshamare there any premade apps that will let you do that?
15:37zerokarmalefttechnomancy: thank god for quicklisp
15:37dnolen_ibdknox: so how long before plugin APIs? Will the right side be hookable?
15:38zerokarmaleftso many headaches trying to get a mutual SLIME setup with CL and Clojure...i don't think i was alone
15:38dnolen_ibdknox: would be awesome to get custom analyzers in there ...
15:38ibdknoxdnolen_: the instarepl is mostly an experiment, the actual thing won't have two clearly defined sides most of the time - so anything will be possible
15:38xeqietosch: theres clojail, but its overkill, and delegates to the java.policy for just restricting System/exit
15:38ibdknoxdnolen_: the "when" for plugins is still a ways out
15:39dnolen_ibdknox: yeah, I suspected.
15:39ibdknoxdnolen_: but yeah, custom analyzers and such - definitely something that can be added
15:39dnolen_ibdknox: cool.
15:39ibdknoxdnolen_: I was going over some ideas with folks the other day and I think I made some heads explode. Some really neat things are coming up I think :)
15:40ibdknoxwohoo! 400k lines eval'd :)
15:40ibdknoxnormalized to 1 entry per min per person
15:41ibdknoxamalloy: I've been sending people to 4Clojure for source material :)
15:41amalloyhah
15:42newshamhmm looks like the "ClojureRepl" app for android supports something called "vimclojure server"
15:42bbloomibdknox: oh, i didn't realize: is lightable sending stuff to your servers for evaluation?
15:42newshamthat will let me access a repl remotely?
15:42ibdknoxbbloom: no just some metrics, no code is sent just num lines
15:42bbloomibdknox: ah ok
15:43bbloomthat makes more sense :-)
15:43amalloyibdknox: i'm not finding the light-table demo that useful yet. i'm doing transformations on small-to-medium maps, and the whole thing prints out every time i refer to it or give it a name in a let-binding; there's so much clutter i can't see any of what's going on
15:43ibdknoxamalloy: it's likely not useful to you regardless
15:44ibdknoxamalloy: not in its current state anyways
15:44ibdknoxamalloy: as it stands its primarily helpful for understanding how Clojure works, less how your project works
15:44amalloyfair enough
15:44ibdknoxbasically just a scratch pad at this point
15:45xeqinewsham: I've seen sattvik do a code push to an android device with it
15:45ibdknoxamalloy: that will be changing soon :)
15:45amalloydo you have a clever plan to illustrate recursion yet, or is that still an unsolved problem?
15:45newshami just want a REPL from a real terminal from my computer (ie. over "adb shell" or over the net)
15:45freiksenetI dunno what's the point of having instant repl if people seldom write stuff taht evaluates to values on top-level
15:46amalloyfreiksenet: at the repl, you do that all the time
15:46freiksenetamalloy: yeah, at the repl
15:46freiksenetnot inside the code.
15:46ibdknoxit's a repl
15:46bbloomfreiksenet: it's a new kind of repl
15:46amalloy(defn foo [x] (...)) (foo 32) ;; did i get the value i wanted?
15:46freiksenetalso eye candy started annoying me from first second
15:46ibdknoxlol
15:46ibdknoxfreiksenet: you're not in my target demographic I think :)
15:47amalloyi told you including lens flare was a mistake, ibdknox
15:47ibdknoxamalloy: yeah a few ideas, though our focus is on letting people edit real things now and less on making the instarepl some crazy
15:47ibdknoxamalloy: hahaha
15:47freiksenetwell I am a seasoned lisp developer, how am I not a target demographic :)
15:47bbloomamalloy: yeah man, lens flair is out. now eye aperture blue shift is in
15:47ibdknoxjust to fuck with people I should release an update that makes everything bright pink. That will win me supporters ;)
15:47ibdknoxfreiksenet: not all Lisp developers are the same
15:47amalloygotta get dat anisotropic filtering
15:48freiksenetmaybe. I currently see the problem with this as with slime repl substitute cause it occupies too much horizontal space, so you can't have code and repl open at the same time
15:49ibdknoxthat's a cosmetic issue, not a fundamental one
15:49freiksenetthough if this is _repl_ not code editing mode then I start to see the appeal
15:49ibdknoxyeah, it's meant to be a repl at this point
15:49gtrakfreiksenet: have you been keeping track of the development? it's more of a framework I think?
15:49freiksenetalso not paredit hurts.
15:50freiksenetno*
15:50ibdknoxyeah, I'll convince someone to fix that at some point :)
15:50freiksenetmaybe I should write such repl for slime %)
15:51ibdknoxI have no doubt it could be done
15:51Raynesfreiksenet: I think the target demographic is not people who think eyecandy is for them damn kids and their dog.
15:51freiksenetRaynes: i've never said that.
15:52ibdknoxRaynes: damn those kids... damn them to hell.
15:52freiksenetI just said eyecandy just annoys me personally. I hope it will be optional.
15:52Raynesibdknox: I think you're the first developer who will need to add an ugly-mode to their application in order to please the masses.
15:52Raynes:p
15:52amalloyi don't konw what eye candy you mean, freiksenet
15:52freiksenetI am definetely not going to use it, if editor takes my valuable milliseconds to do some animation
15:53freiksenetamalloy: the fading in/out animation
15:53wkellyhaha
15:53amalloyRaynes: emacs, bro. it's just on by default
15:53ibdknoxthe thing that happens exactly once?
15:53ibdknoxlol
15:53RaynesYou are like every person on hacker news ever.
15:53wkellyhe did say valuable milliseconds
15:53gtrakI love me some eye candy
15:53Raynes:>
15:53ibdknoxhaha
15:53Raynesamalloy: You got me there.
15:54freiksenetwell I don't think you will earn hacker news love if you dismiss 'those stupid hackers' ;)
15:56amalloymaybe chris granger could intercede on ibdknox's behalf. i'm pretty sure that guy has HN wrapped around his finger
15:57ibdknoxlol
15:58Raynesibdknox beat HN like a video game on easy mode.
15:58ibdknoxfreiksenet: the original light table post was the 12th highest in HN history. Those HNer's seem to like eye candy too :) It's not for everyone though, that's true with all things. If you're happy with an editor, as I suspect many will be, then be happy with it
15:59freiksenetibdknox: I am not happy with an editor, it's just hte best there currenlty is
15:59freiksenetI'd love to have slime-like stuff for every language, not just Common Lisp and (much less) clojure
15:59wkellyPeople are only happy with editors when members of the opposing editor faction are around.
16:00ibdknoxlol
16:00Rayneswkelly: Except for ST2 users. They just want more gloss.
16:00RaynesIf ST2 gets any more glossy, you'll be able to swim in its surface.
16:01gtrakI'm really looking forward for LT so I don't have to learn elisp... I want a full-clojure dev experience
16:01RaynesYou have to learn elisp for that?
16:01RaynesI must have a half-clojure dev experience.
16:01gtrakRaynes: well, I don't really feel like investing in emacs for tools and things?
16:02ibdknoxswank users, if you run swank on one computer, can you access it from another computer on the network and run arbitrary code? (I assume yes)
16:02Raynesibdknox: I'm pretty sure you can.
16:02hyPiRionibdknox: It's on a port, so yes.
16:02freiksenetibdknox: for CL you can if you hack one dynamic variable
16:02freiksenetotherwise it listens on localhost only
16:02ibdknoxsomeone brought that up about LT and I hadn't considered that
16:02freiksenetnot sure about clojure
16:02pcavsIs it possible to destructure (deftype …) ? This doesn't work, but is there another way? (deftype Wrapper [a] Monad (bind [(Wrapper. x) g] (Wrapper. (g x)))) ?
16:02benkard@ibdknox Yes, but by default, Swank only listens on localhost.
16:02amalloyibdknox: yes, though it's a bit more squirrely than doing locally
16:03ibdknoxI see
16:04JulioBarrosDoes anyone know of a simple form based authentication app using cemerick's friend. There is something I'm missing but can't figure out what.
16:05cemerickJulioBarros: There's a fairly simple mock app in friend's repo that demonstrates most of its features and the included workflows, including forms.
16:06cemerickThere's no UI, but that's irrelevant anyway.
16:06benkardI wonder whether using something like a named pipe would be preferable to a TCP socket. Can you tunnel named pipes through ssh somehow?
16:06raekpcavs: no, but you don't need to for the instance argument. the fields are accessible from the methods implicitly: (deftype Wrapper [a] Monad (bind [_ g] (Wrapper. (g a))))
16:07wkellybenkard: that is craziness!
16:07benkard:)
16:07JulioBarroscemerick thanks ... i was hoping for something even simpler (without the api-users and open id workflow) ... I'll keep working with it.
16:08xeqiJulioBarros: clojars uses friend's form based auth for the website portion
16:09cemerickxeqi: oh, sweet! I guess it went in smoothly for you?
16:10newshamhmm what is "<LocalLeader>"?
16:10dnolen_pcavs: regular destructuring works fine on deftype as long as you implement some interfaces (ILookup etc)
16:10xeqicemerick: I skipped over friend doing authorization, and handle that in app, but the authentication part made adding https deploys easy
16:10cemericknice
16:10xeqicemerick: it also uses pomegranate for the ssh deploys btw
16:11cemerickxeqi: I remember you thinking around the authorization bits a while back. What would have made friend easier in that area?
16:12xeqicemerick: I was hoping for a way to query roles at authentication time, instead of once at authorization time
16:12xeqicemerick: ack, I have those backwards
16:12cemericki.e. touch the db, etc?
16:13xeqiyeah, basically in clojars you can be added to a group by someone else
16:13nDuffwoo!
16:13xeqiif you get roles at authentication time, as currently, then anyone logged in doesn't have the new access
16:15xeqithere are ways around it, like duplicating the group/role system as a heirarchy in memory
16:15cemerickxeqi: understood. There is a way to do that now, but it's a bit hacky. I need the same thing shortly, so hopefully something sane will come out of that.
16:15xeqibut it was easier just to make my own authenticate that hit the db
16:15foxdonutfreiksenet: so was it really the fade-in when light table first loads, that you were complaining about?
16:15cemericknDuff: well done :-)
16:15freiksenetfoxdonut: also reloads
16:16freiksenetthat was trolling :)
16:16foxdonutah ok :)
16:16xeqialso there was some funnyness around :unauthenticated-handler, where I had to make my own that saved the current-uri for redirection after login
16:16xeqibut I forget what that was offhand
16:16xeqi* :unauthorized-handler
16:17cemericksaved, as in, persisted somewhere?
16:17xeqicemerick: https://github.com/ato/clojars-web/blob/master/src/clojars/web.clj#L172
16:17xeqiI can try and figure out why I had to do that later
16:18cemerickOh. That should Just Work™.
16:18foxdonutfreiksenet: I'm on the other side of the spectrum, I want as many fade effects as possible and I want the color scheme to change automatically throughout the time of day!
16:18xeqiI thought so.. I'll explore sometime
16:18cemerickYeah, if you're in the neighborhood and it seems wonky, do file a bug.
16:18freiksenetfoxdonut: latter is not eye candy ;)
16:18cemerickThanks for the feedback. :-)
16:19foxdonutheh
16:20akhudekcemerick: I've also used friend on an internal admin panel
16:20akhudektook a while for me to understand the workflows, but it worked well enough
16:21cemerickakhudek: Cool, glad it worked out. I'm going to be back at it in a little while, so the docs should get some love.
16:21cemerickHopefully I'll also squeeze out a friendly demo site, etc.
16:21akhudekcemerick: any more thoughts on validation? I noticed a post of yours where you mentioned trammel
16:22akhudekour main webapp has a security system that combines authentication and validation
16:22cemerickakhudek: You mean generalized web submission validation?
16:23akhudekyes, in a way authorization and validation have the same goal. Sometimes you have a resource that you need secured: "does this user own object with id x?"
16:24akhudekso our home grown security framework works by checking a series of policy functions for each route, one of which is "is the user authenticated?"
16:24JulioBarroscemerick I needed to set the login-uri or it would not work. Does that make any sense? Looks like it should be optional and default to "/login".
16:25cemerickJulioBarros: Interesting; yeah, that should default sensibly. Maybe open an issue with your usage of authenticate?
16:25alfborgeI'm using enlive-html to scrape some html, but it seems it barfs on my input. Are there any other libraries out there that might work?
16:25cemerickakhudek: Interesting. I'll have to ponder that for a bit.
16:25JulioBarroscemerick ... could be one of dozens of things I'm doing wrong.
16:25cemerickNothing new off hand, though. :-)
16:25JulioBarros:)
16:25xeqiJulioBarros, cemerick: I also remember having to add that
16:26cemerickJulioBarros: in that case, definitely open an issue :-)
16:26alfborgeThe offending html is <table><tr><td>..</td><input ...><td>..</td></tr></table>, causing enlive-html to split the row instead of wrapping the input in a td.
16:26xeqiI'll go through clojars's auth sometime this week and make issues for anything wierd like that
16:26JulioBarrosxeqi Thanks! ... glad I'm not totally off base.
16:27cemerickalfborge: enlive uses tagsoup for sanitizing HTML; not sure if you're going to get much better than that. There might be some knobs to it that would help?
16:28cemericke.g. some breadcrumbs might be here that'll be useful: https://github.com/cgrand/enlive/blob/master/src/net/cgrand/enlive_html.clj#L36
16:28foxdonutibdknox: something funny happens if you load a fresh the light-table playground page and just add an extra 'd' (or whatever letter) next to 'my-add'
16:29foxdonutibdknox: on the right, '(defn my-add [3 45]' becomes '(defn my-addd 3a45b]'
16:32ibdknoxfoxdonut: lol interesting. something gets out of sync with that.
16:35foxdonutibdknox: impressive though. I'm lovin' it! Keep up the great work.
16:36adeelkhwhat happened to clojure.core.condition, is it still in 1.3.0?
16:36adeelkhclojure.contrib.condition i mean
16:37Bronsaadeelkh: see https://github.com/scgilardi/slingshot
16:37adeelkhah, thanks
16:45alfborge cemerick: Can't see any knobs that seem likely to affect how it wraps my input-element. :(
16:45RaynesTurn all your knobs just to be sure.
16:45alfborgeSo, anyone know of alternatives to tagsoup that does a better job of parsing the way browsers parse?
16:46Rayneshttps://github.com/weavejester/crouton
16:46RaynesDon't know if it does a better job or not, but hey, it's Clojure and isn't tagsoup.
16:46RaynesTagsoup gives me the willies.
16:46RaynesIt uses jsoup./
16:47RaynesI like vegetable myself, but this is good too.
16:50ChironHi, kindly check "Composite Columns" section of https://github.com/Netflix/astyanax/wiki/Getting-Started
16:50Chironwhat is the idiomatic Clojure way to implement something like SessionEvent?
16:56Frozenlo`Is there a way to change the default "page not found" in noir?
17:02dsrguruif using loop/recur gives me a reversed list, will I get better space and/or time performance in clojure by using non-tail recursion or loop/recur but reverse the result?
17:02raekdsrguru: there is a third option. instead of consing into a list you could conj onto a vector
17:03dsrgururaek: right, this is clojure we're talking about. Thanks :)
17:03amalloyor use a lazy seq instead of loop/recur
17:03raek,(loop [n 5, v []] (if (zero? n) (seq v) (recur (dec n) (conj v n))))
17:03clojurebot(5 4 3 2 1)
17:03raekamalloy: good point
17:04amalloy&((fn step [n] (when (pos? n) (cons n (step (dec n))))) 5)
17:04lazybot⇒ (5 4 3 2 1)
17:04arrdem,(doc conj)
17:04clojurebot"([coll x] [coll x & xs]); conj[oin]. Returns a new collection with the xs 'added'. (conj nil item) returns (item). The 'addition' may happen at different 'places' depending on the concrete type."
17:04dsrguruamalloy: in a short sequence of 1000 or fewer elements, would a lazy sequence have overhead that makes it slower?
17:05amalloyin a short sequence of 1000 or fewer elements, it's pretty unlikely you would notice
17:05dsrguruamalloy: well, if the operation were performed many times on that short sequence
17:06amalloydsrguru: you're optimizing too soon. just write it the way that makes the most sense, and if it's untenable try some profiling
17:07dsrgurukk I just want to get used to writing idiomatic clojure code from the get-go
17:07gtrakdsrguru: if you don't care about laziness try mapv
17:07RaynesIn that case, you might as well just have amalloy write all your code and avoid the suffering.
17:08dsrguruhaha
17:08dsrgurugtrak: thanks I'm looking it up now
17:08ChironSorry, any one noticed my question? appreciate your time
17:09cldwalkerif anyone has a moment, i'd appreciate any feedback on my first clojar, table - https://github.com/cldwalker/table
17:09dsrgurugtrak: mapv doesn't show up in my repl
17:09dsrguru,(doc mapv)
17:09clojurebot"([f coll] [f c1 c2] [f c1 c2 c3] [f c1 c2 c3 & ...]); Returns a vector consisting of the result of applying f to the set of first items of each coll, followed by applying f to the set of second items in each coll, until any one of the colls is exhausted. Any remaining items in other colls are ignored. Function f should accept number-of-colls arguments."
17:09gtrak1.4
17:09dsrguruah
17:09gtrak,(source mapv)
17:09clojurebotSource not found
17:10dsrgurugtrak: wait I'm running 1.4
17:10yediwhat are "unrolled" arguments
17:10gtrak&(source mapv)
17:10lazybotjava.lang.RuntimeException: Unable to resolve symbol: source in this context
17:10gtrakdsrguru: well it should be there then :-)
17:10brehaut&(use 'clojure.repl)
17:10lazybot⇒ nil
17:10brehaut&(source mapv)
17:10lazybot⇒ Source not found nil
17:11gtrakhttps://github.com/clojure/clojure/blob/master/src/clj/clojure/core.clj#L6110
17:12dsrgurugtrak: so it turns out when I run the clojure repl directly, I have mapv, but when I run the repl through leiningen, I don't have it =O
17:13technomancydsrguru: you're not running 1.4
17:13dsrgurutechnomancy: I'm running 1.4 in my regular clojure repl, but not when I run `lein repl' for some reason
17:13dsrgurumaybe leiningen uses its own version of clojure, and mine is out of date
17:13gtrakyup
17:14gtrakdsrguru: for lein 1.x I keep around a test project for stuff like that
17:15technomancydsrguru: you're running `lein repl` in a project that declares a dependency on Clojure 1.4?
17:16dsrgurutechnomancy: no I was just running `lein repl' as my inferior-lisp program in emacs, not for a specific project
17:16dsrgurugtrak: all right everything's working now, thanks
17:16dnolen_ibdknox: you've probably set some kind of Lisp record.
17:16bhenry1what is the version of java best for clojure on ubuntu?
17:16dsrguruso I don't even need my distro's clojure package if lein duplicates it
17:16ibdknoxdnolen_: oh?
17:17gtrakbhenry: oracle jdk7 64-bit works fine
17:17ibdknoxI wonder how many lines of Clojure are publicly available...
17:17dnolen_ibdknox: half a million lines of Lisp evaulated in 5 hours?
17:17technomancydsrguru: right; installing clojure is widely seen as an antipattern
17:17ibdknoxdnolen_: yeah probably
17:17ibdknoxlol
17:18gtrakbhenry: try this ppa: https://launchpad.net/~webupd8team/+archive/java
17:18raekdsrguru: running `lein repl` outside a project means "I don't care what clojure version I get, just give me a repl"
17:18technomancybhenry: `sudo apt-get install leiningen` should be all you need
17:18technomancyit'll pull in openjdk by default I think
17:18bhenrytechnomancy: that's perfect. thanks. is that lein1 still?
17:19technomancybhenry: yeah, still a bit of a ways away from packaging 2.x
17:19dsrgurub
17:19dsrguruwoops wrong buffer
17:20ystaelIt seems like midje-mode sends my facts to be evaluated in my currently open swank-clojure repl, which means they get the namespace-declaration context of the repl rather than the test file in which they live. Is this intentional?
17:21raekystael: I don't think it does that for me...
17:21ystael(i.e., no test will work until i (use 'midje.sweet) in the swank-clojure repl)
17:21iwohey, i'm seeing an error when trying to use the .. form:
17:21raekystael: how do you run the tests? C-c ,?
17:21iwo"No matching method found: .prepare for class de.flapdoodle.embedmongo.MongoDBRuntime"
17:22ystaelraek: C-c . actually, but both are midje-check-fact
17:22iwobut 'prepare' IS A METHOD on this class
17:23raek,(macroexpand '(.. MongoDBRuntime prepare))
17:23clojurebot(. MongoDBRuntime prepare)
17:24Frozenlockibdknox: Is there a way to change the default "page not found" in noir?
17:24RaynesYup.
17:24Raynesset-page!
17:24hiredmaniwo: is it a public method? are you passing the right arguments? is a public method inherited from a private class?
17:24RaynesOne moment, I'll get you an example.
17:24raekystael: ok, C-c . fails for me too when the namespace hasn't been loaded
17:24FrozenlockRaynes: thanks, let me see the doc for this one
17:24iwohiredman: here's the class:
17:24iwohttps://github.com/flapdoodle-oss/embedmongo.flapdoodle.de/blob/master/src/main/java/de/flapdoodle/embedmongo/MongoDBRuntime.java
17:24hiredmaniwo: I am not readding that
17:25hiredmanbut you should
17:25raekystael: but after I have C-c C-k'ed the namespace C-c . works regardless of what namespace the repl is in
17:25RaynesFrozenlock: https://github.com/Raynes/refheap/blob/develop/src/refheap/views/home.clj#L10
17:25raek(so I think C-c . behaves the same as M-C-x)
17:26ystaelraek: hm. i haven't been C-c C-k to compile and load the entire test file, that's probably the problem
17:26iwohiredman: the method is public, it takes one argument and i am supplying an argument of the correct type, it is not inherited from a superclass
17:26ystael(i.e., it's entirely reasonable for my repl to object that no one told it to load midje.sweet)
17:26ystaellet me try that
17:26FrozenlockOh this is good for every html error code! Thank you very much :)
17:27hiredmaniwo: are you sure the source you are reading matches the version of the jar you are using?
17:27raekit could be convenient if M-C-x and C-c . would require the namespace if it hasn't been loaded
17:27ystaelraek: yep, that did it, thank you very much
17:27raeknp :)
17:28ystael(alter ystael-pebkac inc) ; :)
17:28iworaek: thanks, i had forgotten macroexpand, i'll try there
17:29iwohiredman: yes, very sure. when i rearrange to not use .. the call works (maybe i'm misunderstanding ..)
17:29raekiwo: what does your call look like?
17:30mmarczykibdknox: wow 8-O
17:30raek(. Class staticMethod ...) and (Class/staticMethod ...) should work for static methods
17:30raekbut not (.staticMethod Class ...)
17:30iworaek: http://pastebin.com/c69VBd1Q
17:31raekiwo: you don't need the dots with ..
17:32raek(.. MongoDBRuntime (getDefaultInstance) (prepare ...) (start))
17:32raekor
17:32iworaek: thank you!!
17:32raek(-> MongoDBRuntime (.getDefaultInstance) (.prepare ...) (.start))
17:33raeksorry, the -> line won't work if any of the methods are static
17:33Raynesiwo: Also, https://github.com/seancorfield/congomongo
17:33RaynesNot sure if you knew about that.
17:34iwoRaynes: yes, cheers!
17:35iwoi believe my colleagues have decided to go with Monger instead (http://clojuremongodb.info/)
17:35mmarczykibdknox: that's sooooo fun :-D -- https://www.refheap.com/paste/3316
17:35RaynesYeah, it certain has pretty going for it.
17:36ibdknox:)
17:36Raynesmmarczyk: BTW, sorry you did all the work on the jython stuff just to end up not being able to use it.
17:37mmarczykibdknox: also fun is how (java.util.UUID/randomUUID) gets reevaluated (do you plan a "freeze this form" feature? -- erm, sorry to bug you already :-D)
17:37mmarczykRaynes: not at all, that was fun
17:38yehohanan7hey, I am new to clojure and i am trying midje for testing. I just want to know how do you do complex assertions using midge like check for not null, check for size of the returned value from a function etc?
17:39ibdknoxmmarczyk: huh, hadn't thought about that, maybe! In the near term we're focusing on being able to actually edit real things :)
17:40mmarczykibdknox: :-)
17:41mmarczykibdknox: sure... I still can't keep myself from mentioning that it would be nice for *1 ... *3 (and on?) to refer to previous forms' values... um, perhaps only once it's possible to edit real things though :-)
17:45treehugin clojurescript, is there a short cut for this kind of form? (set! (.-prop1 (.-prop2 (.-prop3 foo))))
17:46bbloomdnolen_: now you see why i had some extra time to work on cljs -- http://techcrunch.com/2012/06/25/salesforce-acquires-techstars-and-techcrunch-disrupt-alum-thinkfuse/ :-)
17:47dnolen_treehug: (set! (.. foo .-prop3 .-prop2 .-prop1) ...)
17:47Bronsa..? not ->?
17:47dnolen_treehug: (set! (.. foo -prop3 -prop2 -prop1) ...)
17:48treehugah thanks
17:48dnolen_treehug: is what I meant.
17:49alfborgeRaynes: thanks, I'll look into crouton. :)
17:49dnolen_bbloom: nice, so you're going to be taking a bit of a break? :)
17:50xmux_Is there some way to make the clojure compiler print something other than the whole compiler backtrace when compilation fails?
17:50dnolen_xmux_: >= 1.3 has pretty stacktraces. tools don't use it tho far as I know.
17:51gfredericksshould the "clojure.core//" exception in the clojure reader be considered a bug since it prevents referring to cljs.core// ?
17:51technomancyfsvo "pretty"
17:51xmux_I don't want a prettier stack trace, I'm thinking something more like a list of error messages
17:51gfredericks(i.e., should it be generalized?)
17:52dnolen_xmux_: unmunged & mostly Clojure errors.
17:52bbloomdnolen_: not a big break -- i'd get too bored :-)
17:54xmux_Is that something I can enable in a lein project file? I'm already compiling with 1.3
17:54technomancyxmux_: the nicest stack traces come from clj-stacktrace, which has lein integration
17:54thesaskwatchis there a way to remove the "resources" prefix from compojure lookup location for resources?
17:55weavejesterthesaskwatch: What prefix?
17:55thesaskwatchwhen I do (route/resources "/" ) it will lookup resource files in "resources/public" directory as far as I understand
17:56amalloythesaskwatch: only because resources is on the classpath
17:56thesaskwatchI can change the public part with :root option
17:56amalloy(and the project root isn't, thank god)
17:56RaynesActually, (route/resources "/") serves from resources/* doesn't it?
17:56thesaskwatchbut I'd like to remove the resources part as well
17:56weavejesterthesaskwatch: What amalloy said :) - Leiningen by default adds the resources directory to the classpath. You can change which directory via the project.clj file.
17:56thesaskwatchI'm using only maven, no leiningen
17:57weavejesterRaynes: It serves from resources/public by default, otherwise it would expose your source code.
17:57amalloythesaskwatch: i doubt you really want to do that. that exposes, for example, your source
17:57thesaskwatchnope, I'm having source code in WEB-INF dir
17:57Raynesweavejester: Ah, I see.
17:57thesaskwatchit will not be in the war
17:57weavejesterthesaskwatch: When you create a war, the resources directory will go away
17:57Raynesweavejester: What do you think of lib-noir btw? Well rounded?
17:58weavejesterthesaskwatch: It puts the resources in the war classpath directory (WEB-INF I think)
17:58thesaskwatchif it goes away then how do I distribute the resources?
17:58dracmanKann das sein das Mori fett geworden ist?
17:58thesaskwatchah ok
17:58dracman(sorry wrong channel)
17:58xmux_Why would I want to see the full stack trace of the compiler when compiling my program fails? Am I doing something wrong? Doesn't this bother anybody else?
17:58thesaskwatchok, so is the "resources" part hardcoded in compojure?
17:59weavejesterthesaskwatch: No, Compojure just picks up resources from the classpath. Leiningen happens to put the resources subdirectory on the classpath.
17:59technomancyxmux_: there's a branch of clj-stacktrace that trims all that crap out
18:00weavejesterRaynes: I'd be tempted to split lib-noir up further, but I like small, focused libraries.
18:00gfredericksoh cljs.reader generalizes it; that's interesting
18:00technomancyweavejester: thank goodness you do =)
18:00Raynesweavejester: That was actually my first inclination (therapy), but ibdknox wanted to keep things a little more contained.
18:00weavejesterbrb
18:00thesaskwatchthen why putting the html file in root war directory and using (route/resources "/" { :root "/" } ) doesn't work?
18:00xmux_technomancy: Ok, thanks, I'll try that
18:01Raynesweavejester: In general, all of these things are very lightweight and as long as noir as around, they will all be maintained in tandem.
18:01thesaskwatchok, maybe I'll try with public directory as a starting point
18:01weavejesterthesaskwatch: The resources function serves resource - i.e. things on the classpath.
18:01ibdknoxmy point was mainly that if you wanted stateful sessions, what's the probability you don't want stateful cookies too?
18:02ibdknoxthere's little else in there
18:02weavejesterthesaskwatch: The root of a war isn't on the classpath
18:02thesaskwatchweavejester: are you sure? I remember using it in spring mvc projects
18:04weavejesterthesaskwatch: As far as I know. Java tends to confuse matters, however, and for web projects has a different type of resource.
18:04weavejesterthesaskwatch: Ring/Compojure just use the normal type of resource
18:05thesaskwatchweavejester: ok, then I'll just add it to /src/main/resources, so it should get to /WEB-INF/classess and thus effectively root
18:06weavejesterthesaskwatch: src/main/resources should be the same as resource/main/resources, as both src and resources are on the classpath.
18:06thesaskwatchresource will be not on classpath, as it is standard maven setup
18:07weavejesterthesaskwatch: Ah, you're using Maven. I try to avoid that :)
18:08thesaskwatchI want to make the build standard java env compatible - so no leiningen for me
18:09thesaskwatchok, the src/main/resources with :root "/" does work
18:11thesaskwatchanyone else thinks adding .exe extension for web services is mindfuck?
18:11weavejesterthesaskwatch: exe extension?
18:12talioseuu
18:12weavejesterthesaskwatch: I don't think you want to set your root to "/" - that'll expose *all* your classpath
18:12weavejesterthesaskwatch: i.e. people will be able to read your Clojure source code.
18:13thesaskwatchweavejester: ok, I'm trying to check it now .. but anyway .. this is an internal app
18:16thesaskwatchok, so now I left the defaul root (public) and moved index.html into /src/main/resources/public
18:16thesaskwatchseems like the right solution to me
18:16thesaskwatchand it works too
18:18mmarczykRaynes: is the current state of RefHeap's develop supposed to be unrunnable in lein?
18:19Raynesmmarczyk: It should run fine in lein 2.
18:19mmarczykRaynes: it doesn't for me :-(
18:19Raynesmmarczyk: What happens?
18:20mmarczykoh wait
18:21mmarczykRaynes: https://www.refheap.com/paste/3317
18:24Raynesmmarczyk: I am unable to reproduce.
18:26mmarczyk:-(
18:29thesaskwatchthank you weavejester
18:34KirinDaveDon't you hate when libraries are everything you need except the last 1%?
18:35KirinDavemilieu, for example, is great. Except that for some crazy reason it only ever uses clojure.java.io/resource to load resource files. You can't specify arbitrary locations for config files.
18:35technomancycould be worse; could be a framework that's everything you need except the last 1% =)
18:35KirinDaveIn general, the obsession with resources seems crazy to me. Operationally flawed for config
18:35KirinDaveYou have to _cut a build_ to apply configuration changes?
18:35KirinDaveInsane.
18:35KirinDaveUtterly insane.
18:36nDuffYou _can_ have a classloader that looks somewhere other than within a jar for a resource.
18:37gtrakerg... why not use an inputstream like a normal person?
18:37technomancyKirinDave: most deployment schemes place a dir on the classpath in front of the jars
18:37technomancycutting new jars to change a config val *is* crazy
18:38gtrakor just call slurp?
18:38KirinDaveYeah
18:39KirinDavetechnomancy: Man that is not an inexplicable deploy nightmare waiting to happen. :\
18:39technomancywe used it without any trouble for 2 years at my last job
18:40technomancywell, it's possible there was trouble we just couldn't see because it was masked by huge piles of chef craziness
18:40technomancymaslow's hierarchy of deployments, etc
18:40KirinDaveI've never done it this way
18:41KirinDaveis it sensible then to say java -cp /var/conf/alexandr -jar alexandr-BLAH.jar argz?
18:41lynaghkKirinDave: I liked your CLJS:JS analogy. I take it the next conj we'll all be wearing tophats and smoking cigars
18:41KirinDavelynaghk: Monocles are also key
18:41technomancyKirinDave: we had lein-tar spit out a wrapper shell script
18:42KirinDavetechnomancy: Our deployment process cannot tolerate that.
18:42technomancyKirinDave: you use uberjars?
18:42KirinDaveWe do, but the way we get them
18:42KirinDaveAnd the way things are set up
18:42KirinDave(chef craziness, you see)
18:43technomancywell according to my employer everyone should use env vars
18:43technomancybut screw that; I'm not restarting my JVM just to change a single setting
18:43KirinDaveEnv vars are brittle anyways
18:44KirinDaveWay too easy to change and tough to standardize.
18:44KirinDaveConfig files are superior because their scope is so limited. If you want cascading semantics your conf file tool can build it and ostensibly do so responsibly.
18:45lynaghk^ whoa, that is my "sleeping" macbook air. dying to be on teh internetz.
18:51cemericklynaghk: it heeds the call of the mothership :-P
18:52lynaghkcemerick: I'm still not used to this always-on computer stuff.
18:56mmarczykRaynes: technomancy: so when lein / lein2 pulls in the deps for refheap, it only gets ring-1.1.1.jar and never gets the jars for ring-core etc. :-(
18:57mmarczykI may be going crazy, though... I'll probably just sleep on it.
19:03jlewisanyone know ballpark the size of the average entry in PersistentHashMap?
19:10mmarczykjlewis: the bookkeeping around a key/val pair is exactly two pointers per "regular" node involved in storing it, with the number of such nodes dependent on how long a suffix of the hash is required to pick a unique spot; hash collisions are handled by association lists (well, actually arrays are used)
19:11mmarczykif that's what you mean
19:11mmarczyk(by "regular" node I mean not-a-HashCollisionNode)
19:13KirinDaveOh I forgot this fun part
19:13KirinDaveWhen you include a library that has much older dependencies than yours
19:13KirinDaveand the URLClassLoader just flips out.
19:13KirinDavetechnomancy: Has a more elegant solution to this problem come up, or is the answer still "exclusions, exclusions everywhere?"
19:17nDuffKirinDave: ...well... better management of transitive dependencies is something OSGi tries to add to the Java ecosystem, but I'm not sure I'd describe it as elegant.
19:21fentonwhere would i find the documentation to describe (ns ^{:docs "" :author ""} my-ns). I.e. I want to know what are the possible options to this thing ^{. Is that a metadata symbol or something?
19:27technomancyfenton: the docstring is the only thing that's used; you don't need to use metadata syntax for that
19:28technomancyjust (ns my.ns "It does a thing with another thing" [...])
19:28fentonok, but wouldn't you get a nicely formatted ?javadoc? or something with those extra bits?, and where would that type of thing be documented if anywhere?
19:28fentonhard too good ^{ symbols...
19:29fenton*google
19:31tmciverfenton: that's metadata. metadata is just a clojure map and it starts with ^
19:31technomancythe docstring shows up in doc and (I believe) apropos
19:31technomancyhaving it in html documentation would depend on the tool you use to generate your docs
19:31technomancyfenton: but authorship info doesn't belong in metadata anyway, it belongs in git
19:31fentonthanks guys...really appreciate the hand holding while i get started in this great stuff!
19:34fentonwhats the normal way to create docs for clojure code?
19:34technomancyfenton: doc/intro.md
19:34technomancyat least, that should be the normal way
19:34technomancyyou can autogenerate API reference docs too with stuff like marginalia, but that's no replacement for writing real prose
19:34fentongot it. real prose being pure clojure code without comments, i take it? :)
19:35technomancyno, prose is just like ... english text
19:35technomancylike https://github.com/technomancy/leiningen/tree/master/doc
19:35fentonok...understand
19:40brehaut technomancy: i think marginalia is almost more useful as a way to read the program rather than learn the api
19:40Raynesbrehaut: It is. I've given up on it for API documentation.
19:40RaynesI still think it could be extended to do both well, but I don't have the interface skills and time to make it happen.
20:06fentonI'm trying to use clojure to represent a tree, where each node has a human readable string, (the label), and an id. I'll need to insert sub-trees, search for the children of a provided id, etc... any thoughts?
20:06technomancy,(doc update-in)
20:06clojurebot"([m [k & ks] f & args]); 'Updates' a value in a nested associative structure, where ks is a sequence of keys and f is a function that will take the old value and any supplied args and return the new value, and returns a new nested structure. If any levels do not exist, hash-maps will be created."
20:07fentonzippers seem to be just a right/left/down type of data structure...but I'd need to be able to say: give me the first level of child nodes under node XYZ...etc..
20:07fentonI'm not sure if I should just use a list.
20:08ohpauleezfenton: Yeah, I'd just use standard clojure maps. You can use get-in, update-in, and the threading macro (->)
20:08technomancyclojurebot: what's the best way to represent x?
20:08clojurebotmaxine is http://research.sun.com/projects/maxine/
20:08technomancy=(
20:08ohpauleeztechnomancy: but maxine is a great project
20:09technomancyclojurebot: what's the best way to represent x is <reply>the best way to represent X is as a regular clojure map. (for most values of x)
20:09clojurebotIn Ordnung
20:09technomancyohpauleez: true
20:09ohpauleezfenton: If you need to do raw tree traversal, zippers work fine for that sort of thing.
20:10ohpauleezfenton: Since clojure maps are functions of their keys, and keywords are functions of maps, most of the navigating you want to do will look like:
20:10mebaran151anybody know if ring guarantees parameters with the same name will appear in the vector in the same order they appear in on the form?
20:11ohpauleez(-> tree-map :parent :child :child2 :child3)
20:11ohpauleezor (get-in tree-map [:parent :child :child2 :child3])
20:12ohpauleezfenton: knowledgeable
20:12ohpauleezoops
20:12ohpauleezfenton: http://clojuredocs.org/clojure_core/clojure.core/get-in
20:14ohpauleezmebaran151: if they're in the vector, yes they should be in the same order as they were transmitted. If they're converted to a map, no the ordering can differ
20:14ohpauleezI don't know the details, but that's my best guess
20:25mebaran151ohpauleez: ring claims to put them in a vector, but is this a behavior I can rely upon, that the browser will include it in the same order?
20:25tyre77hey irc://chat.freenode.net:6667/#clojure, I'm getting some nasty Java stack traces when running most lein commands, anyone available to assist?
20:25weavejestermebaran151: They do appear in the same order.
20:26mebaran151ah thanks
20:26weavejestermebaran151: Assuming the browser transmits in the right order, which I believe they do.
20:37mebaran151along these lines, is there a function that will take a map of vectors {:a [1 2 3], :b [3 4 5]} and transform it to a vector of maps [{:a 1 :b 3} {:a 2 :b 4} ...]?
20:39yedidoes mostly lazy still exist
20:42xeqi~anyone
20:42clojurebotJust a heads up, you're more likely to get some help if you ask the question you really want the answer to, instead of "does anyone ..."
20:43amalloy&(let [keys [:a :b], m {:a [1 2 3], :b [3 4 5]}] (apply map (fn [& vals] (apply hash-map (interleave keys vals))) (map m keys)))
20:43lazybot⇒ ({:a 1, :b 3} {:a 2, :b 4} {:a 3, :b 5})
20:43amalloy&(let [keys [:a :b], m {:a [1 2 3], :b [3 4 5]}] (apply map (fn [& vals] (zipmap keys vals)) (map m keys)))
20:43lazybot⇒ ({:b 3, :a 1} {:b 4, :a 2} {:b 5, :a 3})
20:43amalloyi always forget about zipmap
20:44mebaran151I figure I could make zipmap do it
20:45tyre77I'm getting this (https://gist.github.com/2992360) java.lang.reflect.InvocationTargetException when I run lein help or lein new.
20:46tyre77Tried self-install after deleting standalone, updating to no avail
20:47xeqiare you in a project?
20:48xeqiwell, not if you're doing lein new ..
20:48tyre77no, I'm trying to create one
20:48tyre77yeah
20:50amalloyprobably some bad stuff in ~/.m2 or ~/.lein
20:50xeqiyou could try to rm ~/.lein and try again, or clear ~/.m2
20:51xeqithat exception could be better.. wonder if lein2 also throws one that bad
20:52xeqiI don't htink its ~/.lein stuff since the leiningen namespace works
20:52tyre77I can lein repl
20:53tyre77what is in ~/.m2?
20:53xeqithats where lein/maven downloads dependencies to
20:54xeqifor caching, so it doesn't d/l them everytime
20:54tyre77okay
20:54yedihow can I find out which version of clojure I'm running
20:54tyre77should I just nuke it and try again?
20:54xeqithat would be my first step
20:54tyre77 I know that's not an interesting solution haha
20:54tyre77okay
20:54xeqi&*clojure-version*
20:54lazybot⇒ {:major 1, :minor 4, :incremental 0, :qualifier nil}
20:57tyre77success!
20:58tyre77thanks for the help :)
21:09yediso i just set up lein/swank-clojure on my computer and it uses 1.3.0
21:09yediis 1.4.0 not supported yet? or did i just fuck something up
21:18gfredericksif I want to do SVG in clojurescript, is raphael the best option?
21:19xeqiyedi: what version of lein?
21:20ohpauleezgfredericks: Take a look at some of Chouser's code - I know his two CLJS presentation libs are built on top of SVG graphics
21:20yedihm
21:20xeqiand what version of clojure is in your project.clj?
21:20ohpauleezWorst case is using raphael - which is a pretty good worst case
21:21yedi1.7.1
21:21yedi1.3.0
21:21yediis in the project.clj
21:21xeqichange that to 1.4.0
21:21yedibut that was created by lein
21:21yediok
21:21xeqiyeah, when 1.7.1 was released, 1.3.0 was latest
21:22xeqiso it used that by default for new projects
21:22yedidoes that mean the repl swank-clojure uses will be 1.3.0
21:22yedior does changing it in lein fix thaat
21:23xeqiswank-clojure will use whatever is defined in the project
21:23yediok cool
21:23yedione final question, is there an emacs equivalent to holding down shift and moving left/right
21:23yedito select words
21:23gfredericksWAT? there are two other cljs presentation libs?
21:24muhooone can never have enough cljs presentation libs.
21:27gfredericksokay raphael it is
21:51jlewismmarczyk: thanks!
21:51jlewisthat's very helpful
21:53jlewismmarczyk: what would really be nice is a document that shows some analysis on the data structures, like in Guava: http://code.google.com/p/memory-measurer/wiki/ElementCostInDataStructures
21:55mmarczykjlewis: wow, that's a nice page! thanks for the link!
21:56mmarczykhm, might think of making sth similar for Clojure(Script) PDSs
21:58jlewisisn't it great? a very handy reference
21:58jlewisfor when YourTooLazy to break out YourKit..
21:59mmarczyk:-)
21:59mmarczykalso, going by the name, memory-measurer might be just the project I've been looking for lately
22:05wingyhave you checked out: http://vimeo.com/40281991
22:09wingyis it possible to use clojurescript for ExtJS?
22:09wingyor another MVC framework
22:15eggsbywingy: have you looked at domina or pinot?
22:18wingyim brand new here
22:18wingyhave been using javascript all along
22:19wingypivot seems outdated
22:19dnolenwingy: did you try out the Light Table playground that came out today?
22:20wingydnolen: no i did not
22:20wingyi will!
22:20dnolenwingy: it's possible to use an MVC framework - CLJS supports decent JS interop, but that's probably going against the grain. Hoping a more idiomatic GUI oriented framework will appear sometime in the future.
22:20wingydnolen: yeah i hope so
22:20wingyin case im switching to clojure/script i would just make the frontend work with ExtJS
22:20dnolenwingy: http://www.chris-granger.com/2012/06/24/its-playtime/
22:21wingythen hoping to use some more idiomatic framework when it comes out
22:21wingycant believe here raised so much money from kickstarter
22:21wingyits incredible
22:21wingylike the new c9
22:21dnolenwingy: people are already happily using CLJS so I wouldn't let that stop you from experimenting on your own.
22:21wingywhat lang is he using to develop?
22:21dnolenwingy: Clojure & ClojureScript
22:22wingyso cool!
22:22wingyi look at clojure and it is soo beautiful
22:22dnolenwingy: it is! :D
22:24dnolenwingy: I'm a JS programmer myself, I think there's a lot to like if you like JS. CLJS is great, if rough around the edges (though I'm biased, I work on it)
22:27wingyi dont quite enjoy coding in js as much anylonger .. that's why i moved to langs like coffeescript and now livescript
22:28wingylivescript does a very decent job in providing FP concepts and I have learned a lot by using it
22:28wingybut i don't think it will ever be as popular as clojure/script
22:30wingyi wonder if clojurescript is suited for web development?
22:30wingyseems pretty early for it?
22:30wingywill it gain popularity you think?
22:30dnolenwingy: heh, that's mostly what it's for.
22:30dnolenwingy: people are already using it for that in production.
22:31dnolenwingy: popularity - only time will tell. Light Table is good advertising that's for sure. I think we need source maps to make debugging sensible for newcomers.
22:31wingyyeah
22:31dnolenwingy: experienced JS devs who like Clojure won't have many problems - that's mostly the folks using it.
22:32wingyi like how serious clojure/script is .. i can count on the maintenance
22:32wingydnolen: so its no problems to use clojurescript with ExtJS/Dojo etc?
22:32wingyeven if the code will look OOPish
22:32wingymy entire project is based on ExtJS frontend
22:33dnolenwingy: can't say since I've never used those. I think it could work, but I think there will likely be an impedence mismatch. It might be possible to work around - but I haven't heard any involved dev stories about CLJS ExtJS integration.
22:34dnolenwingy: FWIW the same issues occur with GClosure which CLJS ships with. People are slowly figuring out what works best. So still a bit wild west at the moment.
22:34wingyok ill do my research
22:34wingyCLJS is ClojureScript?
22:34dnolenwingy: yes
22:37wingyis it true that clojure programmers tend to know more about programming than javascript developers?
22:37wingysince it requires a lot to get FP
22:39dnolenwingy: rhickey is a programming language geek and is pretty vocal about his influences so - Clojure community has a bit of that.
22:40wingywhat about using libs like: https://www.braintreepayments.com/docs/java
22:40dnolenwingy: yes Clojure pushes FP the hardest of any dynamically typed language I'm aware of. So lots to learn.
22:40wingyhttps://www.braintreepayments.com/docs/node
22:40wingyusing clojure/script means that i can either use their java or node.js api library right?
22:41wingy(java is pretty much everywhere)
22:41wingyand node.js is gaining popularity
22:41dnolenwingy: brainproxy works a bit on Node support. Yes using Java libs from CLojure is pretty straightforward.
22:41gfredericksCLojure: because you kind of miss common lisp.
22:42wingyis clojure promoting XML over JSON?
22:42dnolenwingy: no, it promotes Clojure expressions over both.
22:42wingydo i have to configure a lot of things in XML when using clojure?
22:42dnolenwingy: no
22:42gfredericksnope
22:42wingythank god
22:43dnolenwingy: yes, thanks to technomancy's hard work we're spared that. Wasn't so clear in the early days.
22:43wingy(im a pretty crazy guy, 2 weeks ago i moved over all my code from JavaScript to CoffeeScript, then 3 days ago to LiveScript, now I wanna move over to Clojure/ClojureScript)
22:44wingythus ditching nodejs/expressjs and all tools i have used :)
22:44wingylets see if im going to do that
22:44dnolenwingy: CoffeeScript is nice, but learning curve is shallow since it's not significantly differnt from patterns in popular languages.
22:44wingyyeah i start to love FP .. saves me a lot of time
22:45wingyOOP seems to just take time from me
22:45wingywhat to extend what .. methods .. bla ..
22:46wingyhow come that there is not many in clojurescript channel
22:46dnolenwingy: ClojureScript is an implementation of Clojure. So questions here are relevant.
22:47cgagi didn't realize there was one
22:48wingyjoin!
22:49wingyis clojurescript imitating clojure exactly (without some features not possible in js of course) without having different syntax/features etc?
22:51gfredericksimitating as much as makes sense, modulo the amount of effort put in so far
22:51dnolenwingy: CLJS is missing quite a few things you'll find on the JVM. concurrency stuff (which might change in the future), runtime manipulatable namespaces / vars, no inline macros, etc.
22:51wingyyeah but everything else is exactly the same?
22:51wingyits not another version of clojure
22:51dnolenwingy: no we try to change as little as possible.
22:52wingyawesome
22:52wingyfeels cool to be able to drop down to Java/Clojure and know everything is the same
22:52wingyand you have extended features
22:54dnolenwingy: yes, and I imagine the gap between the two will shrink over time as we figure out good ways to implement things.
22:54wingyi have a lot to read about clojure/script
23:01dnolenfirst working constraint run in core.logic cKanren ...
23:04wingyis it recommended to use clojure/java or clojurescript/node on server?
23:05xeqi&((fn [{:keys {a b} :as c :or {:a 1 :b 2}}] [a b c]) {})
23:05lazybot⇒ [nil nil {}]
23:06dnolenwingy: way more libraries, users, resources etc. for clojure/java
23:06xeqiis there a way to get that :or to work in the destructoring?
23:06wingyi see .. then clojure on java it is
23:06mmarczyk&((fn [{:keys {a b} :as c :or {a 1 b 2}}] [a b c]) {})
23:06lazybot⇒ [nil nil {}]
23:06mmarczykhm
23:07mmarczykoh
23:07mmarczyk&((fn [{:keys [a b] :as c :or {a 1 b 2}}] [a b c]) {})
23:07lazybot⇒ [1 2 {}]
23:07xeqibah
23:07xeqithanks
23:07xeqiactually..
23:07mmarczykI believe :or keys can't be keywords
23:07mmarczyk&((fn [{:keys [a b] :as c :or {:a 1 :b 2}}] [a b c]) {})
23:07lazybot⇒ [nil nil {}]
23:07mmarczykyup
23:08mmarczyktripped me up more than once
23:09mmarczykthough either approach makes sense really.
23:11xeqi&((fn [{:keys {a b} :as c :or {a 1 b 2}}] [a b c]) {:a 1})
23:11lazybot⇒ [nil nil {:a 1}]
23:11xeqi&((fn [{:keys {a b} :as c :or {a 1 b 2}}] [a b c]) {'a 1})
23:11lazybot⇒ [nil nil {a 1}]
23:11xeqi&((fn [{:keys {a b} :as c :or {a 1 b 2}}] [a b c]) {a 1})
23:11lazybotjava.lang.RuntimeException: Unable to resolve symbol: a in this context
23:12xeqiheh, apparently I copied something wrong there
23:13xeqilooks like it works like I want.. must be a problem elsewhere
23:13xeqimmarczyk: thanks
23:13mmarczyknp
23:14cgag_I was messing with aleph last night and was running this: https://www.refheap.com/paste/3307
23:14cgag_i opened 3 tabs and sent 3 request really quickly
23:14cgag_they should have finished around the same time shouldn't they?
23:15cgag_but it seemed like the requests were being handled synchronously
23:16xeqifuture uses a thread pool right?
23:16mmarczykright
23:17mmarczykthe send-off agent pool
23:24meiji11hello, fellow clojureville-ians.
23:24cgag_hi
23:26uvtcmeiji11, hi clojurionado.
23:26gfredericksclots
23:27gfredericksclarks?
23:27gfredericksclocks.
23:28uvtcThe seats here are upholstered with rich Clojurian leather.
23:28gfredericksclerks...
23:32wingywhat is the best test suite for clojure?
23:33cgag_i'm curious about that as well, clojure.test vs midje vs ??
23:33lazybotcgag_: Definitely not.
23:33gfredericksclojure.test or midge or test.generative or assert
23:33gfredericksmidje?
23:33gfredericksmidje is more likely it has a 'j'
23:33gfredericksor clj-unit
23:33uvtcWhich is the simplest and easiest?
23:34gfredericksclojure.test
23:34gfredericksprobably
23:34uvtcThat's probably my first stop then. (thanks gfredericks)
23:34gfrederickswhat is the best test sweet for clojure?
23:38brainproxywingy: I've got a project I started about 2 months ago to allow clojurescript and node to be used together in the same way you can use coffeescript and node together, i.e. w/o having to jump through extra hoops
23:39brainproxyhowever, I hit a point where I realized that to make it work really well, I needed to actually learn clojure :D instead of just messing around
23:39brainproxyso then I read the OReilly book and have since been happy tooling around in clojure land ... haven't quite made it back yet to the pastures of NodeJS
23:40brainproxybut I plan to do so, and finish what I started
23:42gfrederickswhy is (route/resources "/") not doing what I want? :(
23:43xeqibecause you want something else?
23:44gfredericksI want it to serve the file "resources/foo.txt" when I request "/foo.txt"
23:44gfredericksit gives me 404s
23:45wingybrainproxy: what are the benefits of running clojurescript on node.js than using clojure?
23:45wingywhy would i do that
23:45wingyand miss all the concurrency benefits etc
23:45wingygfredericks: are you using noir? is that the best web server for clojure?
23:45cgag_maybe memory consumption
23:46brainproxywingy: that's a good point, and is a reason to favor working with clojure/jvm on the server-side, rather than cljs/node
23:46gfrederickswingy: using compojure; have never used noir, but a lotta folk do
23:46xeqigfredericks: can you move it to resources/public/foo.txt ?
23:46gfredericksxeqi: ah that's it I bet
23:46brainproxywingy: however, some folks really like the single-threaded, event-driven programming style
23:46gfredericksthis is why I ask questions in #clojure. because sometimes somebody knows the answer.
23:47brainproxyand node has a nice modules system and active developer community around it
23:50wingyfeel that you are missing a lot of the power of clojure server side if you don't use java
23:51wingyi think im going to use clojure if im converting
23:51cgag_i think that's the way to go
23:51wingydo i have to have a lot of Java knowledge?
23:52brainproxywingy: i think it just depends on the use case, but having spent about a month in clojure/jvm, i'm definitely favoring it over nodejs for many things
23:52wingydoes it help me in any way to know Java?
23:52wingyeg. do i ever have to debug in java or read java
23:52cgag_for doing java interop
23:52wingybrainproxy: could you give examples
23:52cgag_if you want to use a java library
23:52wingycgag_: yeah
23:53wingyi think i have to .. services usually have java libs but not clojure
23:53wingya pity .. or i could just use HTTP i guess :)
23:53cgag_it's not really hard though
23:53brainproxywingy: well, i already find I prefer working w/ ring+compojure+enlive+hiccup+clutch over the various stacks I built with expressjs, cradle, etc.
23:54cgag_for basic stuff at least
23:54brainproxywingy: however, I have yet to see the clojure equivalent of SockJS
23:55brainproxysock (and socket.io for that matter) are really nice and super easy to develop with
23:55xeqicgag_: did you figure your aleph question out?
23:55cgag_i did not
23:55cgag_but i haven't really tried, i was just hoping someone would know something
23:56brehautbrainproxy: that sort of websockety stuff is probably more aleph than just ring
23:57brainproxybrehaut: sure, that makes sense
23:57xeqiI was thinking the futures end up in the same thread in the threadpool, might be able to see by sending (.getName (Thread/currentThread)) back
23:57xeqi*might end up
23:58cgag_i'll give that a shot