2014-05-19
| 00:26 | cespare|home | ,(#(%-1)) |
| 00:26 | clojurebot | #<NullPointerException java.lang.NullPointerException> |
| 00:27 | cespare|home | writing a clojure parser; discovering fun edge cases. |
| 00:28 | numberten | is that treating the %-1 as the -1 indexed argument to the function? |
| 00:29 | cespare|home | maybe? |
| 00:29 | cespare|home | ,#(%0) |
| 00:29 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: p0__52# in this context, compiling:(NO_SOURCE_PATH:0:0)> |
| 00:29 | numberten | seems like it |
| 00:29 | cespare|home | don't understand that one either. |
| 00:29 | numberten | the first is 1 |
| 00:30 | numberten | argument indexing for #() sugar begins at 1 iirc |
| 00:30 | cespare|home | right |
| 00:30 | cespare|home | i'm seeing how bad code is parsed |
| 00:30 | numberten | yeah it's interesting |
| 02:11 | amalloy | amusingly, the reader will let you use funny numbers for #() args, iirc |
| 02:11 | amalloy | ,'#(foo %1.3) |
| 02:11 | clojurebot | (fn* [p1__25#] (foo p1__25#)) |
| 02:11 | amalloy | ,'#(foo %3N) |
| 02:11 | clojurebot | (fn* [p1__51# p2__52# p3__50#] (foo p3__50#)) |
| 02:25 | numberten | when running tests |
| 02:25 | numberten | is there a way to automatically run the tests x number of times |
| 02:41 | amalloy | if your tests fail one time out of n, they're not very good tests, are they? |
| 02:44 | mercwithamouth | i'm trying to test my compojure routes from the repl. shouldn't this be sufficient? https://gist.github.com/anonymous/0b72f45a3a1ca4376ee7 |
| 02:45 | mercwithamouth | i'm used to calling (start-server) but apparently for what i want to do run-server is what i'm supposed to use? |
| 02:46 | beamso | what do you want to test about your routes? |
| 02:46 | mercwithamouth | beamso i'd just like the data that it would post to show up via repl |
| 02:47 | mercwithamouth | i suppose i COULD just use curl...but i'm being..difficult |
| 02:47 | mercwithamouth | ahh i believe i misunderstood the conversation i'm reading now in the google group |
| 02:48 | beamso | you could test the method that the route is calling for the data |
| 02:49 | beamso | i imagine, but have no idea, that you're also able to test that url go to your intended function |
| 02:49 | beamso | i should have said function and not method for the first line, too. |
| 02:51 | mercwithamouth | ok so lets say i have a route that leads to a page with three fields how could i work with that strictly server side(not building a page for it) to see if it works |
| 02:51 | mercwithamouth | i'm focusing on writing my api and i want to do client side work later |
| 02:53 | whodidthis | maybe something like https://github.com/xeqi/peridot |
| 03:01 | SegFaultAX | /join #python |
| 03:01 | SegFaultAX | Whoops, sorry. |
| 03:01 | mercwithamouth | hehheh |
| 03:01 | mercwithamouth | traitor! |
| 03:01 | mercwithamouth | =P |
| 03:02 | SegFaultAX | mercwithamouth: I've been doing Python a /lot/ longer than I've been doing Clojure. Maybe 5x or so. ;) |
| 03:04 | mercwithamouth | SegFaultAX: fair enouugh, lol |
| 03:44 | ddellacosta | is there a way to run a function via lein before whatever you're executing gets run? I want to do something like: lein <plugin> -x (my-namespace/my-fn) |
| 04:13 | mercwithamouth | are there any lists or articles on the most useful clojure functions to get started with? |
| 04:14 | dbasch | probably everything in core is important and that’s why it’s there, but here’s the first google result http://stackoverflow.com/questions/12011821/in-clojure-what-are-the-other-most-important-functions-in-clojure-core-one-must |
| 04:15 | mercwithamouth | dbasch: *thumbs up* |
| 04:16 | mercwithamouth | hmmm 4clojure should be my friend |
| 05:34 | mercwithamouth | unimportant question...i know but can someone tell me what color theme this is? https://github.com/clojure-emacs/company-cider |
| 05:36 | ddellacosta | mercwithamouth: you mean the screenshot on that github page? Dunno but I bet the emacs folks would know...although it may just be the wrong time of day to find someone in here who can nail an emacs color scheme from memory like that. |
| 05:38 | mercwithamouth | ddellacosta: agreed... |
| 05:41 | ddellacosta | heh |
| 05:41 | ddellacosta | mercwithamouth: where are you, btw? |
| 05:41 | mercwithamouth | east coast/us |
| 05:41 | ddellacosta | I don't see a lot of folks around this time of day |
| 05:41 | ddellacosta | wat |
| 05:41 | ddellacosta | mercwithamouth: do you like getting up early or not going to bed? |
| 05:41 | mercwithamouth | i don't go to sleep =) |
| 05:42 | ddellacosta | mercwithamouth: well, I'm not one to judge, don't get me wrong |
| 05:42 | mercwithamouth | actually i work nights and this is considered my weekend. crazy sleep schedule |
| 05:42 | ddellacosta | just surprised |
| 05:42 | ddellacosta | ah |
| 05:42 | ddellacosta | are you doing development at nights? |
| 05:42 | ddellacosta | or sysadmin kind of stuff? |
| 05:42 | mercwithamouth | nope..hobbyist |
| 05:42 | ddellacosta | oh, cool |
| 05:42 | mercwithamouth | non computer related |
| 05:43 | ddellacosta | wow, don't meet a ton of folks in here that aren't doing it professionally. Although that may just be because I never asked |
| 05:43 | mercwithamouth | lol i may be a special case |
| 05:43 | ddellacosta | heh |
| 05:43 | ddellacosta | yeah, also, most hobbyists aren't jumping into clojure...is my impression. |
| 05:43 | ddellacosta | again, could be wrong about that |
| 05:44 | ddellacosta | on the flip side, I think there are a *ton* of developers who use some other language professionally but use Clojure for side projects, so it kind of makes sense that it would be appealing to hobbyists in general |
| 05:45 | magopian | i've been (organizing) a conference last week in south of france, on an island, for Django (python web framework) |
| 05:45 | magopian | and we've had one of the guys talk about "taming the complexity" |
| 05:46 | magopian | taking advice from Rich Hickey's talk on "simple made easy" |
| 05:46 | magopian | and applying some of it to using react.js and stuff |
| 05:46 | mercwithamouth | ddellacosta: yeah, i'm just seeing what fits. i've 'played' with everything from ruby to scala...now lisp. Lisp has been interesting...though very hard. |
| 05:46 | locks | err'body talking about react |
| 05:46 | magopian | then during the meal we had a talk, and we both want to switch to clojure, but there's this kind of invisible glass wall that we can't put a name on |
| 05:46 | ddellacosta | mercwithamouth: yeah, it gets a lot easier I think |
| 05:47 | ddellacosta | magopian: what do you mean, like cultural, or just something individually stopping you guys? |
| 05:47 | magopian | ddellacosta: mercwithamouth: talking about that, yeah, we felt it was hard... harder than learning OOP for beginners |
| 05:47 | magopian | ddellacosta: dunno, it's very difficult to articulate and explain, some kind of feeling that it is the way to go (FP), but at the end of the day |
| 05:48 | magopian | even though I could really get used to read FP, and understand it (which is not the case: it takes a lot of thought/concentration to understand some code, but then, i'm just a beginner) |
| 05:48 | magopian | and I could imagine _understanding_ code becomming easy with practice |
| 05:48 | magopian | it feels like _writing_ code in FP is just plain hard |
| 05:49 | magopian | like, you have to think a lot about it, and in a way that is not "normal" (simple? easy?) for a human brain |
| 05:49 | locks | immutability is tricky :P |
| 05:49 | ddellacosta | magopian: I think it's just a learning curve, and I think it may be harder for "old" developers because they've had so much practice with the C-family of languages, that learning new ones within that realm is just not a huge deal |
| 05:49 | xsyn1 | and rewarding |
| 05:49 | magopian | we do think in terms of objects in our everyday life, everything is objects |
| 05:49 | magopian | not everything is data, and reasoning/thinking about data doesn't feel like easy to my brain |
| 05:49 | xsyn1 | is time an object? |
| 05:50 | ddellacosta | magopian: but I think it just takes time |
| 05:50 | locks | magopian: I've been an "oop programmer" for all my life but functional programming actually makes more sense to me |
| 05:50 | locks | so I guess it also depends on the person |
| 05:50 | magopian | ddellacosta: i have no problem with learning and learning curve (i'm a late vim adopter after all ;) |
| 05:50 | mercwithamouth | hmm do i want to stick with light table or go back to emacs...decisions |
| 05:50 | xsyn1 | :) |
| 05:50 | locks | mercwithamouth: LT <3 |
| 05:51 | mercwithamouth | locks: decision made. =) |
| 05:51 | ddellacosta | magopian: but I really don't think there is anything inherent in FP that is difficult. In fact, it is easier in many ways, I believe |
| 05:51 | magopian | i'm not in a hurry, I have a highly rewardning job (i'm a django freelancer, i contract for mozilla and a french christian association) |
| 05:51 | magopian | so i have no problem with "it takes time" |
| 05:51 | Glenjamin | i'm a tad concerned that chris and co are shifting focus away from LT |
| 05:51 | xsyn1 | magopian: I've been dealing with the Clojure learning curve for about 2 years, and I still feel like a white belt |
| 05:51 | xsyn1 | bet there's a lot of beauty underneath |
| 05:51 | Glenjamin | but the latest reelease is pretty damn good |
| 05:51 | magopian | i'm just feeling like "it's gonna need more than time... maybe some kind of declic" |
| 05:51 | xsyn1 | that's changed the way I see the universe |
| 05:51 | ddellacosta | xsyn1: ditto |
| 05:51 | ddellacosta | magopian: what's declic mean |
| 05:51 | ddellacosta | ? |
| 05:51 | xsyn1 | nick xsyn |
| 05:52 | magopian | ddellacosta: sorry, french word |
| 05:52 | magopian | some kind of... sudden change of viewpoint |
| 05:52 | magopian | when it 'tics' |
| 05:52 | locks | when it clicks |
| 05:52 | locks | or an epiphany |
| 05:52 | locks | :) |
| 05:52 | magopian | locks: that's the one |
| 05:52 | magopian | thanks |
| 05:52 | ddellacosta | magopian: no worries, I figured--I have a French friend who does that all the time, he'll use a French word 'cause he's gambling it means the same thing in English. ;-) |
| 05:52 | magopian | when it clicks |
| 05:52 | magopian | and it hasn't for me (yet) |
| 05:52 | ddellacosta | locks, magopian: ah, gotcha |
| 05:52 | magopian | ddellacosta: yeah ;) |
| 05:52 | xsyn | it's probably a pretty good gamble ;) |
| 05:53 | ddellacosta | xsyn: yeah, exactly |
| 05:53 | mercwithamouth | i need to do a lot more coding...i'm pretending to toy with compojure...though only 1-2x a week and the decision to completely separate my view code from the server side code(unlike what most compojure tutorials teach) has added more complexity to my plate |
| 05:53 | magopian | anyway: i've worked through most of the 4clojure exercices |
| 05:53 | mercwithamouth | ...which is fine. i'm in no rush nor do i have any...immediate goals |
| 05:53 | magopian | and I do get some pretty good answers on my own much more than I thought beforehand |
| 05:53 | xsyn | I honestly believe you need to make something though |
| 05:54 | xsyn | excercises are cool |
| 05:54 | magopian | xsyn: yeah, that's the thing: i need to do some kind of real project |
| 05:54 | xsyn | but they're like drill work |
| 05:54 | ddellacosta | magopian: for me the big one was understanding time and immutability, at least in context with Clojure. But I still struggle with some concepts...I think one thing is that I used to think OO solved a lot of problems, and now I look at it as being imprecise and hard to reason about. |
| 05:54 | mercwithamouth | xsyn: i agree. my project ideas are usually too big....though i'd be fine with breaking it up into components and stages |
| 05:54 | xsyn | you need to get into the cage to really get to grips with it |
| 05:54 | locks | +1 on the project |
| 05:54 | locks | the only problem is finding a suitable one xD |
| 05:54 | ddellacosta | but its' made me realize how little I do know |
| 05:54 | ddellacosta | *it's |
| 05:54 | xsyn | man, me too |
| 05:55 | mercwithamouth | like right now i'm still hung up on testing routes... i create problems that really aren't there...procrastination most likely |
| 05:55 | mercwithamouth | not 'testing' routes but i'd like to write my api without even opening a browser... |
| 05:56 | ddellacosta | mercwithamouth: it's totally possible, I've done that. |
| 05:56 | mercwithamouth | ddellacosta: do tell... |
| 05:56 | thegeez | mercwithamouth, the emacs theme looks like this one: https://github.com/steckerhalter/grandshell-theme |
| 05:57 | mercwithamouth | thegeez: i believe you're right! =) |
| 05:57 | ddellacosta | mercwithamouth: I've gotta go soon but if you have a specific gist/refheap or something I'm happy to look at it. But I've definitely written and tested routes via clojure.test and through the repl without opening a browser. ring mock (https://github.com/weavejester/ring-mock) helps. |
| 05:58 | mercwithamouth | ddellacosta: hmm i'm going to start something from scratch and i'll set up a repository...going to be on...tonight/tomorrow morning? |
| 05:59 | ddellacosta | mercwithamouth: er, your late night/early morning definitely--I'm 13 hours ahead of you I think |
| 06:00 | thegeez | mercwithamouth, and kerodon for testing ring routes/api: https://github.com/xeqi/kerodon (or peridot for more low level https://github.com/xeqi/peridot ) |
| 06:00 | xsyn | where are you? |
| 06:00 | mercwithamouth | ok...i'll be on |
| 06:00 | ddellacosta | thegeez: have you used that much? Looks super handy |
| 06:00 | ddellacosta | xsyn: assuming you were asking me, I'm in Japan. mercwithamouth is on the East Coast of the U.S. I believe? |
| 06:01 | mercwithamouth | thegeez: well...by testing i mean calling a given method/route from either the repl or curl <-- i really need to get comfortable with using curl |
| 06:01 | mercwithamouth | ddellacosta: yup |
| 06:01 | xsyn | Got to love IRC! |
| 06:01 | ddellacosta | xsyn: :-) |
| 06:02 | ddellacosta | gotta go folks, take care |
| 06:02 | magopian | locks: yeah, need to find a suitable toy project to work on |
| 06:02 | mercwithamouth | ttyl |
| 06:03 | magopian | i've known for a very long time now that writing _simple_ code is very difficult |
| 06:03 | thegeez | ddellacosta, kerodon is indeed super handy. I've used it here: https://github.com/thegeez/clj-crud/blob/master/test/clj_crud/accounts_test.clj |
| 06:03 | locks | writing simple anything is pretty hard |
| 06:03 | magopian | locks: exactly |
| 06:03 | locks | or there'd be more hemingways out there ;P |
| 06:04 | mercwithamouth | ahhh and i see...kerodon WOULD be very helpful |
| 06:04 | locks | I started an engine for a card game that's played in portugal |
| 06:05 | mercwithamouth | most of my experience comes from rails so...i'm familiar with capybara =P |
| 06:06 | mercwithamouth | now how awesome is working through SICP going to make me? |
| 06:08 | xsyn | (if (= 'confused' 'awesome) (inc mercwithamouth)) |
| 06:09 | xsyn | pretty awesome though |
| 06:09 | xsyn | I still haven't gotten through chapter 2 |
| 06:09 | xsyn | but that's my bad ahbits |
| 06:09 | xsyn | habits* |
| 06:09 | magopian | xsyn: you reckon it's really worth the read? |
| 06:10 | mercwithamouth | hehheh...i think it's going to be my 'summer read'. though i have all of the clojure books as well |
| 06:11 | locks | I have joy of clojure |
| 06:12 | xsyn | magopian: I'm only two chapters in, and it's been hard work because I don't have a maths background |
| 06:12 | xsyn | but it helped me understand functional programming |
| 06:12 | xsyn | and composition |
| 06:12 | xsyn | like, I 'got it' |
| 06:13 | mercwithamouth | xsyn: hmm that much within jus two chapters? |
| 06:13 | mercwithamouth | <- no math background either...which i'm hoping this books helps give me a guideline for what to learn as far as thats concerned as well |
| 06:13 | xsyn | dude, it goes at a pretty fast pace |
| 06:13 | locks | there's always the videos |
| 06:14 | magopian | videos? |
| 06:14 | locks | http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/ |
| 06:15 | magopian | there's worth the view? |
| 06:15 | magopian | (it's so "fun" to see that they still apply even though they're so old) |
| 06:16 | locks | yes |
| 06:16 | locks | they're really good |
| 06:16 | locks | and frightening |
| 06:17 | locks | he teaches lisp in about 5mins and then trudges on |
| 06:17 | magopian | Oo |
| 06:17 | xsyn | wizards...heh |
| 06:18 | magopian | do you know if it's possible to download those videos? I hate the flash player |
| 06:18 | magopian | ah, there's a "download this video" link ;) |
| 06:19 | mercwithamouth | https://www.youtube.com/results?search_query=structure+and+interpretation+of+computer+programs |
| 06:19 | mercwithamouth | or that... |
| 07:22 | mpenet | gfredericks: ping |
| 07:35 | ssideris | me tis ekloges ti egine? |
| 07:36 | mpenet | (inc gfredericks) |
| 07:36 | lazybot | ⇒ 57 |
| 07:44 | gfredericks | amalloy_: aw man sorries |
| 07:49 | szymanowski | hi, how can i rename a file from clojure? |
| 07:52 | mpenet | 2 horrible ways: 1 use java File, 2 use clojure.java.shell/sh |
| 07:53 | szymanowski | you mean that I should not use clojure for that? |
| 07:53 | mpenet | it's clojure |
| 07:53 | mpenet | use java File, it's the clean way to do it I guess |
| 07:54 | szymanowski | ok I will look at this |
| 07:54 | szymanowski | a snippet maybe? ;) |
| 07:54 | broquaint | szymanowski: Alternatively use fs - http://raynes.github.io/fs/me.raynes.fs.html#var-rename |
| 07:55 | broquaint | Which provides some simple abstractions on top of the java APIs. |
| 07:55 | clgv | synfinatic: http://stackoverflow.com/questions/1158777/renaming-a-file-using-java => (doto (File. "old.txt") (.renameTo (File. "new.txt"))) |
| 07:55 | szymanowski | yes looks great |
| 07:56 | clgv | szymanowski: ^^ |
| 07:57 | clgv | hmm maybe you want to return the new file, though |
| 07:57 | szymanowski | :) thank you mpenet, broquaint and clgv |
| 08:02 | magopian | just started watching the very first video on SICP and in the very first few minutes it's already mind blowing;) |
| 08:19 | scape_ | video? |
| 08:19 | scape_ | only known of the book |
| 08:19 | beamso | http://www.youtube.com/watch?v=2Op3QLzMgSY |
| 08:20 | scape_ | wow, nice |
| 08:20 | scape_ | thanks |
| 08:20 | scape_ | old school :) |
| 08:20 | beamso | not a problem |
| 08:20 | beamso | i liked it being old skool, actually. |
| 08:20 | scape_ | yea, i think i will too |
| 08:20 | beamso | dude with boards and chalk |
| 08:44 | scape_ | \away idle |
| 10:15 | szymanowski | what is the simplest way to get a seq of File given a directory path? |
| 10:15 | szymanowski | please :) |
| 10:16 | ohpauleez | file-seq |
| 10:17 | ohpauleez | Or of the lines, with line-seq |
| 10:18 | ohpauleez | szymanowski: ^ |
| 10:18 | zerokarmaleft | a seq of files? like a directory listing? |
| 10:18 | szymanowski | yes a seq of all files within a dir |
| 10:18 | ohpauleez | Yeah, if you File object is a directory, file-seq will give you the files |
| 10:19 | ohpauleez | http://clojuredocs.org/clojure_core/clojure.core/file-seq |
| 10:19 | szymanowski | ho great |
| 10:19 | szymanowski | doesn't know that File obj can represent a dir |
| 10:19 | szymanowski | thank you |
| 10:19 | ohpauleez | You're very welcome - happy to help |
| 10:21 | arrdem | happy gsoc day 0.... |
| 10:22 | TimMc_ | zero-day? |
| 10:23 | hyPiRion | oh wat, gsoc already started today? |
| 10:23 | hyPiRion | That's early. Or perhaps uni is ending late over here. |
| 10:24 | arrdem | I've had a week and a bit off from uni, but I have friends who are still in |
| 10:24 | zerokarmaleft | y |
| 10:32 | Bronsa | here in Italy uni ends in a month |
| 10:34 | hyPiRion | 3 weeks here |
| 10:34 | hyPiRion | roughly |
| 11:22 | berdario | Hi, I don't know if it's foolish... but I'm trying to parse a clojure file (which is hopefully valid edn, but I'll make sure about it later) with clojure.edn |
| 11:22 | berdario | since "There is no enclosing element at the top level. Thus edn is suitable for streaming and interactive applications." I expected to get back a seq of clojure forms |
| 11:22 | berdario | instead, I just get back the first form (ns ...) |
| 11:25 | cbp | wrap your file in a vector |
| 11:25 | gfredericks | or call read repeatedly |
| 11:25 | arrdem | calling read until it returns nil is better |
| 11:25 | arrdem | imo |
| 11:25 | berdario | I agree |
| 11:25 | berdario | this works inside clojure |
| 11:25 | berdario | but apparently I don't have a read fn in the edn implementation I was planning to use :/ |
| 11:26 | cbp | berdario: what do you mean? clojure.edn/read |
| 11:26 | gfredericks | ,(doc read) |
| 11:26 | clojurebot | "([] [stream] [stream eof-error? eof-value] [stream eof-error? eof-value recursive?]); Reads the next object from stream, which must be an instance of java.io.PushbackReader or some derivee. stream defaults to the current value of *in*. Note that read can execute code (controlled by *read-eval*), and as such should be used only with trusted sources. For data structure interop use clojure.edn/read" |
| 11:26 | gfredericks | arrdem: nil might be one of the things read :) |
| 11:26 | arrdem | gfredericks: that's core/read |
| 11:26 | gfredericks | yeah but edn/read is just copypasta |
| 11:26 | arrdem | gfredericks: har har. end of file error then. |
| 11:27 | gfredericks | (let [sentinel (Object.)] (loop ... using sentinel as eof-value ...)) |
| 11:27 | arrdem | that edn doesn't have a *read-eval* free reader is silly. |
| 11:27 | berdario | cbp: I'm trying to read clojure code from python :) |
| 11:27 | arrdem | berdario: clojure code != edn |
| 11:28 | arrdem | berdario: some important grammar and token differences. |
| 11:28 | berdario | arrdem: I know, but if the clojure code will turn out not to be edn I will just split out the part that is valid edn |
| 11:28 | gfredericks | I want to make an edn writer |
| 11:28 | cbp | edn/read is copy pasta? i thought it had |
| 11:28 | arrdem | gfredericks: please do... |
| 11:28 | cbp | *puts on sunglasses* security |
| 11:29 | Bronsa | arrdem: what do you mean with "no *read-eval* free reader" ? |
| 11:29 | gfredericks | arrdem: I wonder how tricky it would be to write a generic version that can do both edn and json |
| 11:30 | arrdem | Bronsa: your reader :P |
| 11:31 | arrdem | gfredericks: build a what? a multireader? |
| 11:31 | Bronsa | arrdem: I still don't understand :/ clojure.edn doesn't need/use *read-eval* |
| 11:32 | gfredericks | arrdem: no a multiwriter |
| 11:32 | arrdem | gfredericks: an EDN writer would be nice but we already have plenty of good json writers so... why? |
| 11:32 | gfredericks | arrdem: afaik none of these are locally extensible |
| 11:33 | gfredericks | which has caused me pain at least twice |
| 11:33 | arrdem | Bronsa: right. but if you call clojure.core/read-string on some nominally edn string and forget to falsify read-eval then you're enabling malicious EDN to run code through read-eval on your machine. |
| 11:33 | gfredericks | arrdem: why would you call clojure.core/read-string instead of clojure.edn/read-string? |
| 11:34 | arrdem | ,(require '[clojure.edn :as edn]) |
| 11:34 | clojurebot | nil |
| 11:34 | arrdem | ,(source edn/read-string) |
| 11:34 | clojurebot | Source not found\n |
| 11:34 | arrdem | YOU LIE |
| 11:35 | cbp | $source clojure.edn/read-string |
| 11:35 | lazybot | Source not found. |
| 11:35 | cbp | welp |
| 11:35 | arrdem | oh good we have clojure.lang.EdnReader.java which isn't silly. |
| 11:37 | gfredericks | that was the main outcome of the reader-security brouhaha |
| 11:38 | gfredericks | "the reader is not a serialization tool, here use this instead" |
| 11:38 | arrdem | I'm totally cool with that. |
| 11:38 | gfredericks | ^ paraphrasing three days' worth of people yelling at each other |
| 11:39 | brunov | Hey guys. I'm struggling with passing around "opts map" between functions with signatures like: (defn foo [& {:as opts}]). If I have two of these with identical signatures, foo and bar, and foo calls bar, is there an easy(™) way to do the call to bar? |
| 11:40 | gfredericks | mapply |
| 11:40 | arrdem | brunov: the easy way is to rework your functions to take a leading single configuration map argument that you can just pass through. |
| 11:41 | gfredericks | https://github.com/Prismatic/plumbing/blob/master/src/plumbing/core.clj#L345 |
| 11:41 | gfredericks | ^ where I use mapply from |
| 11:41 | arrdem | gfredericks: nice one! |
| 11:41 | gfredericks | I'm not sure they released that yet but I pushed up a "fork" that has it |
| 11:42 | brunov | gfredericks: this looks promising, thanks! |
| 11:43 | gfredericks | np |
| 11:43 | brunov | how do you karmabump someone around here? |
| 11:43 | gfredericks | (inc someone) |
| 11:43 | lazybot | ⇒ 1 |
| 11:43 | arrdem | (inc <username>) |
| 11:43 | lazybot | ⇒ 1 |
| 11:43 | brunov | (inc gfrederick) |
| 11:43 | lazybot | ⇒ 1 |
| 11:43 | gfredericks | my first karma! |
| 11:43 | brunov | cool. I thought you needed some funky prefix |
| 11:43 | brunov | haha |
| 11:43 | arrdem | (inc gfredericks) |
| 11:43 | lazybot | ⇒ 58 |
| 11:43 | arrdem | (dec gfrederick) |
| 11:43 | lazybot | ⇒ 0 |
| 11:43 | bbloom | $karma <username> |
| 11:43 | lazybot | <username> has karma 1. |
| 11:43 | brunov | oops |
| 11:43 | TimMc | gfredericks: Not yours, that's your evil twin gfrederick. |
| 11:43 | cbp | $karma so |
| 11:43 | lazybot | so has karma -9. |
| 11:44 | brunov | (inc arrdem) |
| 11:44 | lazybot | ⇒ 27 |
| 11:44 | arrdem | (dec so) |
| 11:44 | lazybot | ⇒ -10 |
| 11:45 | ohpauleez | I think we did that one day way back in the early days of two bots |
| 11:45 | arrdem | I may yet add my own bot to the mix just so that I can build a state machine out of bot replies... |
| 11:46 | cbp | only if it has a tip function |
| 11:46 | arrdem | cbp: it'll come with dogetip :P |
| 11:46 | arrdem | technomancy: your css is horked |
| 11:47 | hyPiRion | arrdem: he knows |
| 11:47 | arrdem | hyPiRion: I don't blame him for not fixing it, just thought I'd make sure |
| 11:48 | arrdem | ,`(~@nil) |
| 11:48 | clojurebot | nil |
| 11:49 | arrdem | ,`[:foo :bar ~@(:foo nil)] |
| 11:49 | clojurebot | [:foo :bar] |
| 11:51 | TimMc | arrdem: hyPiRion got them to do a cycle-2 quine, and that's why lazybot now ignores clojurebot. |
| 11:52 | hyPiRion | arrdem: http://clojure-log.n01se.net/date/2012-12-17.html#22:30 |
| 11:53 | arrdem | hyPiRion: haha nicely done |
| 11:55 | hyPiRion | ty |
| 11:56 | hyPiRion | TimMc: Did I tell you about my new, probably impossible, challenge? Making a Piet quine. |
| 11:56 | hyPiRion | I wonder how you go forward with that. |
| 11:56 | TimMc | Printing out some encoding of a Piet program? |
| 11:57 | hyPiRion | yeah, you can simplify it to some extent |
| 11:57 | hyPiRion | say, print ints representing the colours |
| 11:57 | TimMc | Bonus points to print out in GIF format. |
| 11:57 | hyPiRion | yeah |
| 11:58 | hyPiRion | or compressed png. Just need to encode zlib in the picture somehow |
| 11:58 | TimMc | There *is* a Piet compiler now, you know. |
| 11:59 | hyPiRion | yeah, some guy made an LLVM-based optimiser for it |
| 11:59 | hyPiRion | http://allanwirth.com/piet/llvm-piet.html - there we go |
| 12:01 | TimMc | hyPiRion: No, I mean the other direction: Piet as target. |
| 12:03 | hyPiRion | TimMc: oh what, link please |
| 12:03 | TimMc | I'm still waiting on self-modifying Piet (using Logo commands, obviously.) |
| 12:03 | arrdem | turtle graphics fwt |
| 12:03 | TimMc | An assembler: http://www.toothycat.net/wiki/wiki.pl?MoonShadow/Piet |
| 12:04 | hyPiRion | I'll just wait on webyrd to make a quine generator for it |
| 12:04 | TimMc | :-) |
| 12:04 | ystael | TimMc: for a better challenge: The only available self modification is to place a colored cel filter over part of the code or shine a colored light onto it. The minimum filter radius is 4px. The minimum spotlight radius is 8px. |
| 12:05 | TimMc | :-D |
| 12:06 | hyPiRion | hah |
| 12:06 | hyPiRion | This is quickly getting out of hand |
| 12:07 | TimMc | I eagerly await the first self-modifying LogoPiet virus. |
| 12:08 | TimMc | (Those malware analysis folks need something fun to do, right?) |
| 12:09 | TimMc | "And in recent news, Brian Krebs has quit the security field and taken up carpentry." |
| 12:09 | hyPiRion | heh |
| 12:25 | mr-foobar | copyright help, I am lifting example code from eplv1 codebase. what is the best way to refer to it in my repo ? |
| 12:27 | adsisco | https://www.irccloud.com/pastebin/WsnKQpFk |
| 12:27 | adsisco | how to get the function to resolve i and j? |
| 12:30 | gfredericks | adsisco: i and j should work fine there |
| 12:30 | gfredericks | what's the exact error msg? |
| 12:31 | hyPiRion | yeah, would be surprised if that doesn't work. |
| 12:33 | adsisco | just figured it out, the parse-float function ain't working |
| 12:33 | adsisco | https://www.irccloud.com/pastebin/Nuvr3msy |
| 12:33 | adsisco | whats the equivalent of Integer. for float? |
| 12:34 | adsisco | parse-int works perfectly for me |
| 12:34 | adsisco | but not the other |
| 12:34 | arrdem | Double/parseDouble? |
| 12:34 | gfredericks | check what re-find returns when you call it with your arg |
| 12:34 | arrdem | floats are a sad datatype |
| 12:34 | hyPiRion | adsisco: Double. or Double/parseDouble |
| 12:34 | adsisco | lol, double is an overkill for something with 2 decimal place max |
| 12:35 | gfredericks | it's standard |
| 12:35 | hyPiRion | Prefer parseDouble for performance |
| 12:35 | adsisco | alright letme switch |
| 12:35 | gfredericks | clojure will prollably turn your float into a double anyhow |
| 12:35 | arrdem | yeah. clojure defaults to using doubles, ratios and longs. |
| 12:35 | gfredericks | ,(def f (float 3.14)) |
| 12:35 | clojurebot | #'sandbox/f |
| 12:35 | gfredericks | ,(type f) |
| 12:35 | clojurebot | java.lang.Float |
| 12:35 | gfredericks | ,(type (* 2 f)) |
| 12:35 | clojurebot | java.lang.Double |
| 12:36 | arrdem | gfredericks: some of that is the clojure.lang.Number.multiply() signature tho.. |
| 12:36 | gfredericks | arrdem: okay? |
| 12:36 | gfredericks | ,(type (* f f)) |
| 12:36 | clojurebot | java.lang.Double |
| 12:37 | arrdem | nevermind, I thought that java.lang.Number.multiply was λ Number → Number → Double for some reason not \ |
| 12:37 | kzar | gfredericks: I got the heap space to increase in the end by setting an environment variable. No idea why profiles.clj stuff wasn't working |
| 12:37 | arrdem | but it's λ Number → Number → Number |
| 12:38 | gfredericks | kzar: a leiningen variable? |
| 12:38 | kzar | I think _JAVA_OPTIONS did it in the end |
| 12:38 | kzar | the lein ones didn't work |
| 12:39 | gfredericks | yeah I think they apply to leiningen's jvm rather than the project jvm |
| 12:40 | kzar | Does anyone know how you do a bredth first tree traversal (I'm recording the path to a solution) when you have an infinite tree and therefore can't put successive child nodes into a queue? (I've tried just allocating a heap space of like 14 gig but still no dice) |
| 12:42 | hyPiRion | kzar: you can use iterative deepening DFS instead |
| 12:42 | hyPiRion | http://en.wikipedia.org/wiki/Iterative_deepening_depth-first_search |
| 12:42 | kzar | oo thanks |
| 12:43 | arrdem | Bronsa: have you tried replacing clojure.core/load with t.[ae].jvm? |
| 12:44 | Bronsa | arrdem: yep |
| 12:45 | arrdem | Bronsa: how'd it go? I haven't tried myself yet, just finished digging through lein and clojure core to verify that changing load is all that needs to happen to switch compilers. |
| 12:46 | Bronsa | arrdem: i loaded clojure.core with that, and I believe I tried it on core.match and core.rrb-vector aswell |
| 12:47 | mr-foobar | about to push to npm, basically runs lein commands from npm .. https://github.com/harsha-mudi/lein-node is the Copyright Notices sufficient ? |
| 12:48 | Bronsa | arrdem: right now te only issue I'm aware of with t.e.j is the one related to TANAL-24 |
| 12:50 | mdrogalis | bbloom: Learned a new phrase from you. Second system effect. I didn't know there was a term for that :) |
| 12:51 | bbloom | mdrogalis: i'm sure you've experienced though, right? :-) |
| 12:51 | mdrogalis | bbloom: Yes :) |
| 12:54 | arrdem | ah The Mythical Man Month... |
| 12:55 | arrdem | Bronsa: sweet! next on the list is reading in to t.e.jvm, I'll let you know if I find anything. |
| 13:34 | ambrosebs | bbloom: sheesh, any other haskellers on twitter that I should pre-emptively block? |
| 13:36 | arrdem | +1 "angry haskellers list" |
| 13:36 | cbp | the whole bytemyapp following list :-P |
| 13:36 | arrdem | cbp: hehe |
| 13:37 | technomancy | cbp: except bitemyapi |
| 13:38 | arrdem | technomancy: I still owe you a bot for that.. |
| 13:42 | sdegutis | Is there a cleaner way to say "give me the value of the first argument" than this? (fn [% & _] %) |
| 13:42 | technomancy | (comp first list) maybe |
| 13:43 | technomancy | more chars, fewer tokens |
| 13:43 | sdegutis | Hmm for some reason I thought that wouldn't work as a variadic function, but sure enough it does. |
| 13:44 | forzajuve | !LIST |
| 13:44 | forzajuve | CIAO |
| 13:44 | forzajuve | !LIST |
| 13:44 | forzajuve | !list |
| 13:45 | sdegutis | I should probably be using polymorphism a little more fully. |
| 13:52 | sdegutis | Or maybe I should ditch defmulti and just use case statements. |
| 13:57 | bbloom | ambrosebs: that guy was crazy, right? |
| 13:58 | bbloom | i should publish my block list somewhere :-P |
| 13:58 | bbloom | at one point i had considered a "startup" that was just a crowd sourced block list |
| 13:58 | bbloom | so i could autoblock people across all services, even those i hadn't signed up for yet... forever |
| 13:59 | ambrosebs | bbloom: really strange way to wake up reading that thread |
| 13:59 | ambrosebs | not sure what happened |
| 13:59 | ambrosebs | :) |
| 13:59 | bbloom | :shrug: |
| 14:01 | adsisco | how do i turn "hi there test" to "hi+there+test"? i would first (split string #"\s+"), how do i concat them neatly? i think i can do something like a fold? |
| 14:02 | brunov | adsisco: string/join may be helpful |
| 14:02 | brunov | or just replace on the string |
| 14:02 | adsisco | oh yea, replace would be easy! |
| 14:02 | adsisco | thanks |
| 14:03 | brunov | np |
| 14:22 | Guest33471 | im currently going through the amazonica docs and trying to generate a key-pair for client side s3 encryption, i can't seem to find KeyPairGenerator |
| 14:22 | daniel___ | is this a java class that should be generally available? |
| 14:22 | daniel___ | or am i missing an import? |
| 14:24 | dbasch | it’s java.security.KeyPairGenerator |
| 14:24 | amalloy | daniel___: http://docs.oracle.com/javase/7/docs/api/java/security/KeyPairGenerator.html |
| 14:24 | amalloy | specifically, you probably want http://docs.oracle.com/javase/7/docs/api/java/security/KeyPairGenerator.html#getInstance(java.lang.String) or something |
| 14:25 | daniel___ | amalloy, yes i do |
| 14:25 | dbasch | ,(java.security.KeyPairGenerator/getInstance "RSA") |
| 14:25 | clojurebot | #<ExceptionInInitializerError java.lang.ExceptionInInitializerError> |
| 14:25 | amalloy | &(java.security.KeyPairGenerator/getInstance "RSA") |
| 14:25 | lazybot | java.lang.SecurityException: You tripped the alarm! clojail.testers.ClojailWrapper@17b15f3 is bad! |
| 14:26 | amalloy | huh |
| 14:27 | amalloy | ah. lazybot won't let you touch java.security.* |
| 14:27 | dbasch | reasonable |
| 14:27 | amalloy | yeah, indeed so; i just don't remember doing that |
| 14:28 | daniel___ | anyway, thanks for the pointers |
| 14:40 | devn | Can you do this in a for? (for [x xs :let [[ys _] x] y ys :let [[q r] y] ...)? |
| 14:42 | arrdem | devn: yup |
| 14:42 | devn | yeah i just tested it |
| 14:42 | devn | color me surprised |
| 14:43 | arrdem | well you're erc-color'd orange for what it's worth |
| 14:44 | devn | you're yellow in my irssi |
| 14:44 | llasram | arrdem: and you're bluuuue |
| 14:44 | amalloy | devn: why would you not be able to? |
| 14:44 | devn | ...coward |
| 14:44 | devn | amalloy: i just haven't ever done it. |
| 14:44 | devn | haven't seen it done |
| 14:50 | martinklepsch | I found it delightfully simple when deploying my first uberjar. now I want to store it in S3 but putting the uberjar there is not something that seems very common. how do other people hand that scenario? should deploy the regular jar instead and do some stuff in the server? |
| 14:52 | hiredman | uberjar and then use s3cmd to upload it to s3 |
| 14:52 | llasram | martinklepsch: Are you trying to deploy the uberjar just for arbitrary retrieval, or as in an S3-hosted Maven artifact repository? |
| 14:53 | martinklepsch | arbitrary retrieval |
| 14:53 | martinklepsch | hiredman, thought that maybe something outside of leiningen might be the easiest way |
| 14:53 | llasram | Yeah, then ditto hiredman |
| 14:58 | someben42 | Hi Clojure peeps. Is there are verbose mode for lein to debug how it is failing to find tests when I do "$ lein clean; lein test"? |
| 14:59 | hiredman | someben42: are your tests in test/ ? |
| 14:59 | someben42 | Yup, in test/project-name/core_test.clj |
| 14:59 | llasram | someben42: And if the are, do their namespaces match their file paths? |
| 15:00 | llasram | e.g. project-name.core-test <-> test/project_name/core_test.clj |
| 15:01 | someben42 | Yup, "(ns skream.core-test [:require..." is at the top of "test/skream/core_test.clj" |
| 15:01 | someben42 | (Project is called "skream", abbreviation for "sketching & streaming lib") |
| 15:02 | llasram | someben42: And you don't have any files which accidentally duplicate the test namespace? |
| 15:02 | someben42 | Hmm. |
| 15:02 | llasram | someben42: Oh, neat -- like HLL, count-min, etc? |
| 15:05 | someben42 | Yup, exactly like HLL, count-min, etc. :) |
| 15:05 | someben42 | https://github.com/someben/skream |
| 15:06 | someben42 | Project hierarchy is a mess for now, that is why I am trying to get "lein test" to play nice. |
| 15:07 | radix | can anyone point me at some clojure code that talks to e.g. an HTTP REST API but still maintains a largely pure-FP design? |
| 15:07 | someben42 | radix -- talks TO a REST, or IS a REST? |
| 15:08 | radix | someben42: client, talking TO a REST |
| 15:08 | someben42 | I'm no help. The other side I do FPishly. |
| 15:08 | radix | I am trying to figure out a good way to separate my IO from everything else in a nice way, to help with testing, or to allow users to replace the IO with their own strategies |
| 15:09 | arrdem | is it ring with the request standard format? |
| 15:09 | radix | and so I'm thinking of stuff like (get-twitter-followers "radix") should return an introspectable value that describes the HTTP request to be performed, but doesn't perform it itself |
| 15:09 | arrdem | radix: right. there are existing clients that allow for this. I think. |
| 15:09 | radix | but then I need to figure out how to do *post*-request processing, and how/if to bind the description of what to do with a response to the request |
| 15:10 | radix | like, say you want to parse the JSON response and convert it to something a bit more nice |
| 15:10 | radix | I could just do (process-twitter-followers-response (do-io (get-twitter-followers "radix"))), but that's a bit verbose |
| 15:11 | radix | "do-io!", of course ;-) |
| 15:11 | radix | so maybe get-twitter-followers could encode the work to be done with the response in its return value, and do-io! could invoke that for you automatically to make it a bit nicer |
| 15:12 | radix | just some thoughts I'm juggling |
| 15:12 | radix | arrdem: do you have an idea of which? |
| 15:14 | arrdem | radix: I think that http-kit and clj-http both have internal request formats that are well structured and documented, but neither allows you to say anything about how to process the results of a query. |
| 15:14 | someben42 | llasram -- just grep for the word "test" in the whole hierarchy, and no surprises. So I do not think the namespace is getting stomped. |
| 15:16 | radix | arrdem: ok. something I'll continue to consider. |
| 15:16 | lemonodor | radix: i would write get-twitter-followers so that it calls build-http-request, do-io and process-twitter-folllowers-response. then it’s a convenient function for users, and most of the utility functions can be tested in isolation, but if someone really wants to do something different, they can write their own code that calls build-http-request, do-my-weird-io, process-twitter-followers-response. |
| 15:17 | radix | hmm. |
| 15:17 | radix | yeah, could be |
| 15:17 | lemonodor | that is, i think there’s a point of diminishing returns in accepting higher order functions and achieving pure FP. |
| 15:17 | lemonodor | i mean, we all use defn. |
| 15:17 | radix | lemonodor: well, I agree |
| 15:18 | someben42 | My entire app is just lambdas. A stack of lambdas all the way down. |
| 15:18 | radix | lemonodor: but I will point out the qualitative difference with defn is that it basically builds "startup" state, instead of runtime state |
| 15:18 | lemonodor | radix: true |
| 15:18 | arrdem | I'm with lemonodor here. I've got a couple libraries that just wrap REST interfaces and I don't (as a user) really care about what requests have to happen, I just want to be able to pull data out which is best served by doing the requests and processing in the API. |
| 15:19 | radix | so, yeah, my most immediate concern is one of internal factoring to enable ease of unit testing |
| 15:19 | radix | I do have kind of an eye on a larger ecosystem concern, though |
| 15:20 | radix | right now the vast majority of clojure libraries that do this kind of stuff are inflexible about replacing the way IO is done |
| 15:22 | arrdem | I mean... you could write a request generator API, it's just not useful without some way to nicely wrap in doing requests however the user wants to do them. we don't really have a parametric module/instance system so this is an open problem. |
| 15:22 | arrdem | just don't "solve" it with a dynamic var please :D |
| 15:22 | radix | heh heh |
| 15:22 | sdegutis | I just made two. |
| 15:23 | radix | arrdem: so, yeah, I don't think just parameterizing the do-io is even good enough |
| 15:23 | radix | if you want to either use synchronous or asynchronous IO, you can't just call (do-io) and expect a meaningful result, for example |
| 15:23 | radix | and yes you will never find me using dynamic vars ;P |
| 15:25 | arrdem | my gut says that what this really comes down to is that we don't have a way to express monad-bind :P 'cause all this processing is really just composing (binding) functions over an input which happens to be a request and executing/resolving code. |
| 15:34 | radix | yeah, haskell is really tickling the back of my brain while I think of this stuff, but I don't really know much about it |
| 15:35 | cbp | radix: maybe get-twitter-followers can attach a queue of operations to do next as metadata? |
| 15:36 | arrdem | yeah having a way to bind "callbacks" on the request before it's sent to a request resolver is probably the only way to pull this off. |
| 15:41 | radix | yeah, kinda like Deferreds |
| 15:41 | radix | but a little bit inside-out |
| 15:42 | stuartsierra | core.async channels? |
| 15:42 | radix | anyway, this has been quite helpful, thanks for the ping-pong :) |
| 15:42 | ohpauleez | Yeah, why not just put a channel on a channel? |
| 15:43 | ohpauleez | and then your "bind" is just putting a value on the inner value channel |
| 15:43 | radix | I should learn more about those :) |
| 15:43 | kzar | Another dumb question, how could I do something like this except with a dynamic number of ranges instead of just two? |
| 15:44 | kzar | ,(for [a (range 3) b (range 3)] [a b]) |
| 15:44 | clojurebot | ([0 0] [0 1] [0 2] [1 0] [1 1] ...) |
| 15:44 | ohpauleez | Or, better yet, just write all your ops as functions, and in a small and tight go-block, do your interactions, where the last statement is the value you want |
| 15:44 | ohpauleez | the go will return a channel, and you can optionally block on it |
| 15:45 | joegallo | kzar: you could (apply map vector ...) i think |
| 15:45 | joegallo | ,(apply map vector [(range 1 3) (range 3 5) (range 5 7)]) |
| 15:45 | clojurebot | ([1 3 5] [2 4 6]) |
| 15:46 | ohpauleez | that will only give him the first of all, the second of all, the third of all |
| 15:46 | ohpauleez | not the iterations |
| 15:46 | ohpauleez | I thought the same thing initially |
| 15:46 | joegallo | ah yes, quite right! |
| 15:49 | kzar | hmm |
| 15:50 | kzar | OH and another thing, I need it to be a lazy sequence |
| 15:51 | amalloy | kzar: i mean, that's in clojure.math.combinatorics, probably called cartesian-product |
| 15:52 | amalloy | you can also write it yourself; it's not too bad as a recursive function |
| 15:52 | {blake} | Running "lein midje :autotest", midje notices when I change my source file, but then says "No facts were checked. Is that what you wanted?" (a seriously irritating error message). How fix? |
| 15:52 | kzar | amalloy: Oh looks like you wrote about it on stack overflow http://stackoverflow.com/questions/18246549/cartesian-product-in-clojure |
| 15:53 | amalloy | oh, that's good. i was just about to rewrite it |
| 15:53 | amalloy | but my answer there is more thorough |
| 16:04 | ff0066 | any users of schema here? |
| 16:05 | kenrestivo | {blake}: um, add some facts? (i'm guessing you're using midje) |
| 16:07 | rasmusto | I remember writing a macro that expanded to (for [a__blah a, b__blah b ...] [a b]), I think combinatorics is better though |
| 16:07 | {blake} | kenrestivo: Yep. I'm trying think of some relevant facts. I've forked the iloveponies project but haven't touched the code yet...well, that's probably the clue right there. Something in the configuration. |
| 16:08 | someben42 | Fixed my "lein test" problem. Some combination of idiomatic test/ hierarchy naming and "lein clean" did it, wish I knew what it was but hey. |
| 16:08 | sdegutis | Ho there! |
| 16:08 | sdegutis | I have a curious finding. |
| 16:10 | sdegutis | Observe: |
| 16:10 | sdegutis | ,(do (def ^:dynamic lang) (let [f (constantly lang)] (binding [lang :english] (f)))) |
| 16:10 | clojurebot | #<Unbound Unbound: #'sandbox/lang> |
| 16:11 | sdegutis | Is this because (constantly) captures the current value of lang, as opposed to the var itself, though it be unbound? |
| 16:12 | magopian | ustunozgur: hey ;) I'm Mathieu, we talked about clojure (and are supposed to switch to clojure right?) at djangocon, during an evening meal ;) |
| 16:12 | magopian | ustunozgur: not sure how/when to switch for the moment though ;) (I'm going through the SICP videos, they rock) |
| 16:17 | amalloy | sdegutis: constantly necessarily does evaluate its input right away, and save that |
| 16:17 | amalloy | ie, (constantly x) is different from (fn [] x) if x is something that can be mutated |
| 16:17 | sdegutis | In which case, if I want it to evaluate a re-bound dynamic var, must I capture it via (fn [] x)? |
| 16:18 | sdegutis | I like the property of (constantly) where it takes any number of args. This cannot be emulated as cleanly with a plain closure. |
| 16:19 | amalloy | well, of course it can |
| 16:19 | amalloy | (fn [& args] x) |
| 16:19 | amalloy | #(do %& x) |
| 16:20 | sdegutis | The second one "evaluates" the items though. |
| 16:20 | sdegutis | Anyway thanks. I'll do that. |
| 16:24 | amalloy | sdegutis: huh? what about evaluating? |
| 16:24 | amalloy | (fn [& args] x) and #(do %& x) are identical in every way |
| 16:24 | sdegutis | amalloy: #(do %& x) expands to (fn [& args] (do args x)) |
| 16:25 | amalloy | yes, which is identical to (fn [& args] x) |
| 16:25 | amalloy | "evaluating" a seq for side effects doesn't do anything |
| 16:25 | amalloy | it was already evaluated when you passed it to the function |
| 16:26 | sdegutis | Okay. |
| 16:28 | hyPiRion | ,(apply (fn [& args] 10) (map #(println %) (range 5))) |
| 16:28 | clojurebot | 0\n1\n2\n3\n4\n10 |
| 16:28 | hyPiRion | In that case though, apply does the evaluation, not the function |
| 16:32 | amalloy | gtrak: you around? no.disassemble just started failing for me, after working for many months and no change i'm aware of making. i have [lein-nodisassemble "0.1.3"], and typing (use 'no-disassemble) produced https://www.refheap.com/40adc6d31fdaf6d1e6ea62a9c |
| 16:32 | gtrak | hrm... |
| 16:32 | gtrak | whoa.. |
| 16:32 | gtrak | I'm suspecting some maven artifact shenanigans. |
| 16:34 | amalloy | seems plausible. should i nuke (some part of) my .m2 or something? |
| 16:34 | gtrak | I think so. I downloaded clean artifacts just now, and it worked fine. |
| 16:34 | gtrak | just kill org/eclipse |
| 16:35 | gtrak | they've done this before and ztellman patched it. |
| 16:35 | gtrak | different error, though. |
| 16:36 | gtrak | if that doesn't work, I might have to update to a newer version of eclipse-jdt |
| 16:37 | kzar | Is there a way to check if a number is divisible by another number and get the result at the same time? |
| 16:38 | amalloy | kzar: use / and check if the result is an integer or a ratio? |
| 16:39 | gtrak | 0.00000000000004 |
| 16:39 | sdegutis | I am seriously running into dependency circles right now. |
| 16:40 | kzar | amalloy: Would it be better to map (mod % X) on a bunch of numbers, then for the one that's zero divide the number by X or would it be better to map (\ % X) on them all and filter by integer type? |
| 16:40 | dbasch | you could also do (juxt quot rem) |
| 16:40 | kzar | (By better I mean faster / idiomatic I guess) |
| 16:40 | gtrak | sdegutis=[r*cos(theta) rsin(theta)] |
| 16:40 | gtrak | err wait, that's a line. |
| 16:40 | amalloy | kzar: as so often is the case, faster/idiomatic are opposing forces. you can't ask for both of them |
| 16:41 | gtrak | try that |
| 16:41 | gtrak | take the cosine.. :-) |
| 16:41 | sdegutis | gtrak: doesn't work |
| 16:41 | kzar | amalloy: Heh shucks. Well how do I check if something's an integer / ratio? |
| 16:42 | amalloy | &(doc integer?) |
| 16:42 | lazybot | ⇒ "([n]); Returns true if n is an integer" |
| 16:42 | amalloy | &(doc ratio?) |
| 16:42 | lazybot | ⇒ "([n]); Returns true if n is a Ratio" |
| 16:42 | kzar | lol whoops |
| 16:42 | gtrak | kzar: well, that will tell you the type, that won't tell you if 0.0 is an integer. |
| 16:42 | hyPiRion | ,(ratio? 1/1) |
| 16:42 | clojurebot | false |
| 16:42 | hyPiRion | =( |
| 16:42 | amalloy | it's okay, i was just guessing |
| 16:42 | gtrak | ,(integer? 1.) |
| 16:42 | clojurebot | false |
| 16:42 | amalloy | hyPiRion: well, 1/1 reads as 1, i think |
| 16:43 | gtrak | you said 'number' before, so you need to be more specific. |
| 16:43 | kzar | I think just filtering by integer? is going to be fine in my case |
| 16:43 | kzar | sorry for ambiguous question |
| 16:43 | amalloy | gtrak: floats are never divisible by anything. they're awful |
| 16:43 | hyPiRion | amalloy: all ratios are reduced, yes. |
| 16:44 | amalloy | gtrak: after destroying .m2/org/eclipse, and running `lein clean` on my AOTed project, i still have the same issue |
| 16:44 | amalloy | let me try it in some other project |
| 16:44 | hyPiRion | oh nevermind, we have `rational?`. |
| 16:44 | sdegutis | gtrak: https://www.dropbox.com/s/w4307mnwzgxpwmg/Screen%20Shot%202014-05-19%20at%203.36.36%20PM.png |
| 16:44 | gtrak | sdegutis: what is that? |
| 16:44 | amalloy | oh interesting. it works in another project. i wonder what's wrong with this one |
| 16:44 | sdegutis | gtrak: your equation |
| 16:44 | sdegutis | it dosn't work |
| 16:45 | hyPiRion | although I really really hate that denominator and numerator doesn't work on integers/longs |
| 16:45 | gtrak | amalloy: perhaps you have multiple classes with the same name in your classpath. |
| 16:45 | gtrak | at least, that's greppable. |
| 16:45 | amalloy | how would i find that out? |
| 16:46 | gtrak | if lein-pprint won't tell you enough, you could use uberjar. |
| 16:47 | technomancy | there's a getResources or something method you can call on classloaders for that |
| 16:49 | pbostrom | is there any consensus on top-level def vs. a top-level let? i.e. 1 vs 2 here: https://gist.github.com/pbostrom/3dec3394add6b3500e47 or should I just strive for case 3, even for small stuff |
| 16:50 | amalloy | i think strive for 3, and if it's so trivial that it's not worth doing that then the difference between 1 and 2 doesn't matter |
| 16:50 | gtrak | technomancy: yea, that's how data_readers works. |
| 16:50 | amalloy | i guess i'd pick 2 so that it's easier to inspect the state at the repl |
| 16:51 | hyPiRion | pbostrom: If state really is needed, I'd do (def ^:private state (atom 0)) |
| 16:51 | hyPiRion | still available at repl |
| 16:51 | arrdem | pbostrom: 1 is usually considered an antipattern, 2 and 3 are both ok, but I'd propose a 4 where the atom is an optional argument defaulting to your (def state .. ) |
| 16:52 | amalloy | arrdem: i disagree re: (1). it's just as fine as (2) |
| 16:52 | arrdem | amalloy: I'd disagree with that because the atom is stowed away somewhere that isn't transparent, you've just bought yourself state that can't be introspected reasonably. |
| 16:52 | hiredman | 1 is terrible |
| 16:53 | arrdem | amalloy: at least with 2 you can recover that state explicitly. |
| 16:53 | Frozenlock | I'd like to keep sensitive data out of my code. Is there a way to access it and use it in a 'safe' manner at runtime? |
| 16:53 | arrdem | Frozenlock: (read-string (slurp "seekret.edn")) |
| 16:54 | pbostrom | thanks for the feedback, for some reason "1" has gotten a lot of traction on a project I'm working on |
| 16:54 | hiredman | 1 makes it difficult to inspect and manipulate the atom from the repl, why do that to your self? |
| 16:54 | amalloy | gtrak: when i uberjar it up, i don't even see one class named org.eclipse.jdt.core.util.IStackMapTableAttribute, let alone two with the same name |
| 16:54 | arrdem | Frozenlock: I actually have several projects where I do that :P |
| 16:54 | Frozenlock | arrdem: that seems too simple :-p |
| 16:54 | amalloy | okay, i'll back-pedal on (1). closing over an atom is a lot less pleasant than closing over something pure |
| 16:55 | gtrak | amalloy: very odd. Do you use a private maven-repo? |
| 16:56 | amalloy | well, there's a thought. yes, factual has a private repo for hosting our own stuff, which i believe also proxies to the usual suspects like clojars and central |
| 16:56 | gtrak | seems like that wouldn't explain why it works in the other project. |
| 16:57 | pbostrom | I think the motivation for "1" is that it prevents you from trying to get at it from another namespace |
| 16:58 | gtrak | unless that project uses central, and broken doesn't. |
| 16:58 | lemonodor | amalloy: oh, you’re at factual? are you in LA? |
| 17:00 | sdegutis | What is the best practice to avoid this error? No method in multimethod 'foobar' for dispatch value: "test" |
| 17:00 | sdegutis | Must I manually specify an empty require for every file which uses defmethod? |
| 17:00 | sdegutis | If so, where is generally the acceptable place to do so? |
| 17:01 | sdegutis | Is it common to have a "load" namespace whose purpose is to just load other namespaces? |
| 17:01 | sdegutis | These are my questions. Thank you. |
| 17:03 | amalloy | lemonodor: yes i am |
| 17:03 | arrdem | Bronsa: Digging into your emitter at present. How do you think I/we should structure the optimized JVM emitter I'm signed on to build? part of me thinks that it belongs as part of t.e.jvm but I'm loath to build a separate emitter when really what I'm building should ultimately be visible to a user only as an emitter tuning rather than an emitter selection which would complect emission and optimization. may be worth asking tb & the dev list. |
| 17:03 | lemonodor | ah, cool. me too. i used to work with myron ahn, though now i see he doesn’t seem to be at factual anymore. |
| 17:03 | amalloy | yeah, he and i did not overlap |
| 17:04 | amalloy | i have found and cursed some of his code, though |
| 17:05 | sdegutis | I am starting to remember why I tore every defmethod and defmulti out of the codebase a year ago. |
| 17:05 | amalloy | gtrak: i think debugging this is beyond me. i don't really need no.disassemble in this project anyway, it just happened to be the one i was in when i wanted to disassemble #(do %& 1) |
| 17:05 | gtrak | oh, ok :-) |
| 17:06 | gtrak | hopefully it's just an isolated thing. |
| 17:06 | bbloom | sdegutis: use (:require [whatever :refer (themultimethod)]) |
| 17:06 | bbloom | rather then (defmethod whatever/themultimethod ...) |
| 17:06 | arrdem | bbloom: I believe that sdegutis is referring to loading namespaces defining multimethod implementations, not the multimethod itself. |
| 17:07 | bbloom | arrdem: oh |
| 17:07 | arrdem | but I may be misreading. |
| 17:07 | bbloom | yeah, that's a bit of a pain |
| 17:07 | bbloom | namespaces != modules and the mutability of namespaces is a mixed blessing |
| 17:08 | arrdem | sdegutis: I think that the real answer is that to the greatest extent that you can you want to centralize your defmethods |
| 17:08 | bbloom | sdegutis: arrdem: i've considered what a better approach would be... whatever it is, you could probably build it with my dispatch-map library |
| 17:08 | bbloom | dispatch-maps are mergable |
| 17:09 | sdegutis | Ah, now I understand why this is so hard. |
| 17:09 | sdegutis | I'm using multi-methods all wrong. |
| 17:10 | sdegutis | defmulti and defmethod were never meant to be used in different files. Every defmethod for a given defmulti should always be in the same file as the defmulti. This is how Clojure intended it. |
| 17:10 | arrdem | I wouldn't go that far... see clojure.algo.generic |
| 17:11 | arrdem | meajure is based entirely on extending algo.generic multimethods. |
| 17:11 | technomancy | sdegutis: lein tasks aren't exactly like defmethods, but the idea of keeping extensible functionality under a certain namespace prefix and loading whatever nses are on the classpath has worked well for us |
| 17:11 | sdegutis | arrdem: That looks unrelated. |
| 17:11 | technomancy | you could use bultitude to scan for everything under my.multimethod.* and require it |
| 17:12 | sdegutis | Okay I may do this. |
| 17:12 | arrdem | sdegutis: how so? the point is that meajure is a user supplied extension to a multimethod and thus a counterexample to your claim that multimethods were somehow meant to be sealed and fixed dispatch rather than user extended. |
| 17:13 | sdegutis | But it sounds so hacky for just wanting to have a switch-case split out into two different files. |
| 17:13 | arrdem | (dec so) |
| 17:13 | lazybot | ⇒ -11 |
| 17:13 | technomancy | (dec so) |
| 17:13 | lazybot | ⇒ -12 |
| 17:13 | sdegutis | arrdem: I have no idea what you're talking about. |
| 17:13 | arrdem | technomancy: I'm just downvoting him whenever I use his name |
| 17:13 | arrdem | s/him/*indeterminate-gender*/g |
| 17:14 | sdegutis | I basically just have two implementations (live.clj and test.clj) and an interface (api.clj), and I want everyone to be able to invoke the interface, but have the implementations do the work. |
| 17:14 | sdegutis | Surely it can't be this difficult or involved of a task? |
| 17:14 | technomancy | sdegutis: just use a function |
| 17:14 | arrdem | sdegutis: go look at the jvm code backing a multimethod and then say that again. |
| 17:14 | technomancy | if the dispatch doesn't actually change at runtime then multimethods make no sense |
| 17:15 | sdegutis | Okay. I'll investigation pure functions then. |
| 17:15 | arrdem | which means you have to load _all the code_ defining dispatch values. |
| 17:15 | technomancy | sdegutis: with-redefs in a fixture |
| 17:15 | technomancy | is the way to go |
| 17:16 | sdegutis | Yeah, I've been trying to avoid that because it'll have a lot of boilerplate. |
| 17:16 | sdegutis | When the server starts up, it has to initialize them all to the "live" functions, since they default to test (so that the test suite never accidentally invokes the live version). |
| 17:17 | technomancy | that doesn't sound like use-fixtures |
| 17:17 | technomancy | oh, you're doing the opposite |
| 17:17 | gtrak | sdegutis: defmulti and defmethod probably shouldn't be used in different files *in the same project* |
| 17:17 | technomancy | yeah, that sounds tedious. just replace the production version with the test version in a fixture. |
| 17:18 | sdegutis | And leave the production version "default"? |
| 17:18 | gtrak | unless just for normal code organization reasons. It needs to work for 'open extension' to be a thing. |
| 17:18 | technomancy | sdegutis: yeah, the tests shouldn't have enough config to do anything "dangerous" anyway |
| 17:18 | sdegutis | That's true. |
| 17:19 | sdegutis | The only difficulty now will be adding global around-each functionality to Speclj, so I don't have to modify every single test file. |
| 17:25 | arrdem | ,(doc box) |
| 17:25 | clojurebot | excusez-moi |
| 17:26 | arrdem | ,(doc condp) |
| 17:26 | clojurebot | "([pred expr & clauses]); Takes a binary predicate, an expression, and a set of clauses. Each clause can take the form of either: test-expr result-expr test-expr :>> result-fn Note :>> is an ordinary keyword. For each clause, (pred test-expr expr) is evaluated. If it returns logical true, the clause is a match. If a binary clause matches, the result-expr is returned, if a ternary clause matches, i... |
| 17:27 | blr | does anyone use clojuredocs.org? find the documentation versions capped at 1.3 a little disconcerting |
| 17:27 | bbloom | ~clojuredocs |
| 17:27 | clojurebot | Excuse me? |
| 17:28 | bbloom | clojurebot: clojuredocs is out of date & seems to be abandoned by the maintainer |
| 17:28 | clojurebot | 'Sea, mhuise. |
| 17:28 | bbloom | blr: ^^ |
| 17:28 | blr | bbloom: ah thank you, that's a pity, looked promising |
| 17:28 | technomancy | blr: it's not as useful as it is in most languages since all the docs are available at any time in the repl |
| 17:29 | blr | technomancy: I continuouly forget this, need to make more use of (doc) |
| 17:29 | Bronsa | arrdem: re: tej, I don't have a good answer for that, I consider tej's internal interface still experimental & I'm certainly open to changing how it works if you need it |
| 17:29 | noonian | what sort of forms are readable by clojure.core/read-string but not clojure.edn/read-string (trying to understand the differences between clojail's safe-read and just using the edn reader) |
| 17:29 | arrdem | blr: just tweak your lein profile to inject a (use 'clojure.repl) into user on boot |
| 17:30 | arrdem | blr: it's been life changing :P |
| 17:30 | Bronsa | arrdem: right now I guess you could use the frame that's passed to every -emit call to store emit options and use that, but it's not a very open approach |
| 17:30 | blr | arrdem: cool thank you, I'll give that a go :) |
| 17:31 | arrdem | Bronsa: agreed. I'll ponder and do a straw poll on clj-dev. |
| 17:45 | sdegutis | All I need to do is write a bouncing function that creates a function which bounces to another function. |
| 17:45 | sdegutis | I'll call it "pogo-stick". |
| 17:45 | gfredericks | sdegutis: that's different from trampoline? |
| 17:45 | arrdem | (inc gfredericks) |
| 17:45 | lazybot | ⇒ 59 |
| 17:45 | sdegutis | gfredericks: what's trampoline? |
| 17:45 | gfredericks | it's pogo-stick |
| 17:46 | bbloom | (doc trampoline) |
| 17:46 | clojurebot | "([f] [f & args]); trampoline can be used to convert algorithms requiring mutual recursion without stack consumption. Calls f with supplied args, if any. If f returns a fn, calls that fn with no arguments, and continues to repeat, until the return value is not a fn, then returns that non-fn value. Note that if you want to return a fn as a final value, you must wrap it in some data structure and unpack it after trampol |
| 17:46 | sdegutis | After reading those docs, I have absolutely no idea how to use that. |
| 17:46 | gfredericks | I did something trampoline-like in a patch for an issue with reduce; no idea if it'll get accepted |
| 17:46 | gfredericks | or even recognized as a problem |
| 17:47 | sdegutis | No, trampoline is completely unrelated. |
| 17:47 | sdegutis | So completely unrelated. |
| 17:47 | sdegutis | This is the worst suggestion ever. |
| 17:47 | amalloy | gfredericks: eh? |
| 17:48 | gfredericks | amalloy: I'll dig it up |
| 17:48 | gfredericks | amalloy: http://dev.clojure.org/jira/browse/CLJ-1237 |
| 17:48 | amalloy | oh yeah, that's a fun one |
| 17:49 | amalloy | pretty cool that you found a fix |
| 17:49 | Bronsa | (inc gfredericks) |
| 17:49 | lazybot | ⇒ 60 |
| 17:49 | bbloom | ,(letfn [(even? [x] (or (zero? x) (odd? (dec x)))) (odd? [x] (not (even? x)))] (even? 12)) |
| 17:49 | clojurebot | true |
| 17:49 | bbloom | ,(letfn [(even? [x] (or (zero? x) (odd? (dec x)))) (odd? [x] (not (even? x)))] (even? 12000000)) |
| 17:49 | clojurebot | #<StackOverflowError java.lang.StackOverflowError> |
| 17:49 | bbloom | ,(letfn [(even? [x] (or (zero? x) #(odd? (dec x)))) (odd? [x] #(not (even? x)))] (trampoline (even? 12))) |
| 17:49 | clojurebot | false |
| 17:49 | bbloom | ,(letfn [(even? [x] (or (zero? x) #(odd? (dec x)))) (odd? [x] #(not (even? x)))] (trampoline (even? 1200000))) |
| 17:49 | clojurebot | false |
| 17:49 | bbloom | ,(letfn [(even? [x] (or (zero? x) #(odd? (dec x)))) (odd? [x] #(not (even? x)))] (trampoline (even? 120000000))) |
| 17:50 | clojurebot | false |
| 17:50 | gfredericks | bbloom: that's a cool example |
| 17:50 | amalloy | bbloom: (trampoline (even? x)) is a bit weird. it's fine, but i'd have written (trampoline even? x) |
| 17:50 | bbloom | gfredericks: it's the quintessential mutual recursion example |
| 17:50 | amalloy | actually, it's not fine, since then it fails for 0 |
| 17:50 | bbloom | amalloy: ah, i forgot that trampoline does that |
| 17:50 | gfredericks | bbloom: I must not be up on the mutual recursion examples |
| 17:51 | amalloy | ,(letfn [(even? [x] (or (zero? x) #(odd? (dec x)))) (odd? [x] #(not (even? x)))] (trampoline (even? 0))) |
| 17:51 | clojurebot | #<ClassCastException java.lang.ClassCastException: java.lang.Boolean cannot be cast to clojure.lang.IFn> |
| 17:51 | bbloom | ,(letfn [(even? [x] (or (zero? x) #(odd? (dec x)))) (odd? [x] #(not (even? x)))] (trampoline even? 120000000)) |
| 17:51 | clojurebot | false |
| 17:51 | bbloom | ,(letfn [(even? [x] (or (zero? x) #(odd? (dec x)))) (odd? [x] #(not (even? x)))] (trampoline even? 0)) |
| 17:51 | clojurebot | true |
| 17:51 | bbloom | amalloy: fixed. thanks for bug report / code golf |
| 17:51 | sdegutis | This is what I'm trying to avoid: |
| 17:51 | sdegutis | https://gist.github.com/sdegutis/b33022da80005fbe7914 |
| 17:52 | amalloy | bbloom: why is (trampoline even? 1200000000) false? |
| 17:52 | bbloom | haha no idea |
| 17:52 | bbloom | whoops |
| 17:52 | gfredericks | sdegutis: I think you want component & protocols |
| 17:52 | bbloom | amalloy: the not |
| 17:52 | bbloom | amalloy: duh. |
| 17:52 | bbloom | eh, don't really need that # anyway: |
| 17:52 | bbloom | ,(letfn [(even? [x] (or (zero? x) #(odd? (dec x)))) (odd? [x] (not (even? x)))] (trampoline even? 0)) |
| 17:52 | clojurebot | true |
| 17:53 | bbloom | better |
| 17:53 | bbloom | ,(letfn [(even? [x] (or (zero? x) #(odd? (dec x)))) (odd? [x] (not (even? x)))] (trampoline even? 12000000)) |
| 17:53 | clojurebot | false |
| 17:53 | bbloom | or not |
| 17:53 | bbloom | wow. trampoline is hard |
| 17:53 | zerokarmaleft | heh |
| 17:53 | bbloom | i hand rolled a trampoline for a variety of reasons when doing eclj & it was the source of many headaches... when you *need* TCO, there really is no substitute |
| 17:53 | amalloy | bbloom: ah. because (even? x) returns a function, and (not (even? x)) is always false |
| 17:54 | bbloom | amalloy: yeah, that's the annoying bit. i had to create a propegate helper function |
| 17:54 | bbloom | something like: |
| 17:54 | bbloom | (propegate (event? x) not) |
| 17:55 | bbloom | (defn propegate [x f & args] (if (fn? x) #(apply f (x) args) (apply f x args))) |
| 17:55 | bbloom | ,(defn propegate [x f & args] (if (fn? x) #(apply f (x) args) (apply f x args))) |
| 17:55 | clojurebot | #'sandbox/propegate |
| 17:55 | bbloom | ,(letfn [(even? [x] (or (zero? x) #(odd? (dec x)))) (odd? [x] (propegate (even? x) not))] (trampoline even? 12000000)) |
| 17:55 | clojurebot | false |
| 17:55 | bbloom | sheesh, i give up at programming |
| 17:56 | amalloy | bbloom: i let it go the first three times, but seeing propagate persistently spelled wrong is killing me |
| 17:56 | bbloom | hahaha you corrected me on this one other time |
| 17:56 | bbloom | i suck at that word |
| 17:56 | bbloom | apparently i also suck at programming |
| 17:56 | bbloom | anyway, *this* is the sort of case where i actually want a type system |
| 17:56 | amalloy | oh my gosh. now you've got me grepping the irc logs for propegate |
| 17:57 | bbloom | when i have some stupid type error b/c i need to jump hoops to please the solution domain |
| 17:57 | bbloom | amalloy: it's just me sucking at this word, nobody else |
| 17:58 | amalloy | oh yeah, https://gist.github.com/brandonbloom/6416765 - didn't even show up in the logs |
| 17:59 | amalloy | good times |
| 18:00 | bbloom | haha |
| 18:00 | bbloom | that's exactly the example i was talking about |
| 18:00 | bbloom | amalloy: oh now i remmeber the issue |
| 18:00 | bbloom | (x) may itself return an fn |
| 18:00 | bbloom | so you need like a subtrampoline |
| 18:00 | bbloom | but you don't want that b/c that can grow stack too |
| 18:01 | bbloom | eh, trampolines are shit to work with |
| 18:01 | fortruce | is it possible to ask lein if any of your dependencies have a newer version? |
| 18:01 | amalloy | bbloom: trampoline is a clean solution only if your original mutually-recursive solution is tail-recursive |
| 18:01 | blr | fortruce: yeah, there's lein-ancient |
| 18:01 | amalloy | fortruce: i think uh...lein-ancient? |
| 18:01 | arrdem | fortruce: there's lein-ancient, but you have to install it |
| 18:01 | fortruce | thanks |
| 18:04 | blr | anyone aware of a good alternative to ac-nrepl? would like autocomplete for doc, but ac-nrepl seem very slow on reasonably good hardware for some reason |
| 18:05 | technomancy | company is supposed to be better than auto-complete but I haven't used it |
| 18:05 | blr | ok, I'll give that a shot thanks technomancy |
| 18:06 | blr | autocomplete is just handy for api discovery.. keep me out of the evil browser :) |
| 18:06 | technomancy | regular completion should work without auto-complete.el |
| 18:09 | blr | technomancy: on a totally unrelated note, have you seen this? http://webcache.googleusercontent.com/search?q=cache:http://littlebits.cc/kits/synth-kit (site is down or my dns is playing up, hence the cache) |
| 18:10 | blr | I've ordered one for my son |
| 18:10 | bbloom | amalloy: even / odd can be made tail recursive... shoulda done that :-P |
| 18:10 | amalloy | bbloom: yes, but if you do that it's not the classic example of mutual recursion |
| 18:11 | amalloy | which i presumed was the point |
| 18:12 | cbp | blr: company works well with cider but afaik doesnt fetch docstrings |
| 18:13 | blr | cbp: ok, I'll have a play at any rate |
| 18:13 | technomancy | blr: cool. the early littlebits stuff was crazy expensive for what you got so I hadn't been paying much attention, but that looks more fun. |
| 18:14 | cbp | company also works with clojurescript if you use austin while ac doesn't |
| 18:14 | blr | yeah, my son (9 yrs) is into electronics and music so it seemed like a no-brainer. Considerably cheaper than a real modular synth heh :) |
| 18:14 | bbloom | amalloy: sure i can still can be... you just need to encode the base case in to both functions |
| 18:15 | blr | haven't got around to setting up austin yet, but brehaut was telling me it's rather good |
| 18:15 | bbloom | ,(letfn [(even? [x] (or (zero? x) #(odd? (dec x)))) (odd? [x] (if (zero? x) false #(even? (dec x))))] (trampoline odd? 3000000)) |
| 18:15 | clojurebot | false |
| 18:16 | bbloom | ,(letfn [(even? [x] (or (zero? x) #(odd? (dec x)))) (odd? [x] (if (zero? x) false #(even? (dec x))))] (trampoline odd? 3000001)) |
| 18:16 | clojurebot | true |
| 18:16 | bbloom | amalloy: ^^ |
| 18:16 | fortruce | anyone know of a resource that might help me understand dependencies and the use of :exclusions, I had a dependency problem bite me and I'm trying to understand :pedantic? and using :exclusions correctly |
| 18:16 | amalloy | indeed, that works fine |
| 18:16 | amalloy | although (if (zero? x) false foo) is (and (pos? x) foo) |
| 18:17 | bbloom | amalloy: sure, i was just looking at https://en.wikipedia.org/wiki/Mutual_recursion |
| 18:17 | bbloom | to make sure i was staying true to the quintessential-ness of my example |
| 18:18 | bbloom | anyway we all failed to help sdegutis |
| 18:18 | sdegutis | No no, it's fine, I'm concocting some function to do this trampolining for me. |
| 18:18 | bbloom | sdegutis: with redefs works, but there's also the OOP-approach w/ a protocol |
| 18:19 | blr | fortruce: did you find the usage example in https://github.com/technomancy/leiningen/blob/master/sample.project.clj? |
| 18:19 | bbloom | or the less OO-ish-OO approach: an explicit map of functions |
| 18:19 | bbloom | sdegutis: i've felt the need for modules like this several times, tho |
| 18:20 | bbloom | but honestly, OOP techniques are probably most clojure-ish, despite being unclojurey :-P |
| 18:20 | sdegutis | I started with a map of functions actually. |
| 18:20 | sdegutis | And I'll probably end there. |
| 18:20 | bbloom | lots of boiler plate tho to create the interface namespace with a dynamic var & that has shortcomings too |
| 18:21 | sdegutis | Yeah, there's just no real good solution to this. |
| 18:21 | sdegutis | In another language maybe, but not Clojure. |
| 18:21 | bbloom | i mean... ML Modules are pretty good :-P |
| 18:21 | fortruce | blr: yes, I am mostly confused about which dependency collisions reported by lein deps :tree I can ignore, adding exclusions for org.clojure/clojure seems weird |
| 18:21 | bbloom | but yeah, this is a major short coming of clojure IMO |
| 18:22 | bbloom | 9 times out of 10, i do the very java-y thing and make a service protocol |
| 18:22 | sdegutis | Clojure just assumes you'll be using the simplistic defmulti, or Java polymorphism. |
| 18:22 | technomancy | bbloom: really? replacing a function for testing is a major shortcoming? |
| 18:23 | fortruce | as well as: (compojure -> org.clojre/tools.macro "0.1.0") overrides (midge -> org.clojure/tools.macro "0.1.5")...doesn't this say that a lower version of tools.macro is overriding a newer one? midje might depend on newer functionality right? |
| 18:23 | bbloom | technomancy: no, the issue is that there is no mechanism for stable/lexical implicit passing mechanism |
| 18:24 | bbloom | with-redefs works fine for a few functions for testing or whatever |
| 18:25 | bbloom | i've mentioned this several times: dynamic vs lexical and explicit vs implicit are orthogonal... luckily, extensible maps covers most of the use important cases |
| 18:26 | bbloom | you can just do explicit map, which is as good as implicit after you've gotten over that first explicit map :-) |
| 18:39 | arrdem | clojurebot: 1d6 |
| 18:43 | arrdem | Bronsa: something tells me this shouldn't NPE... https://www.refheap.com/85650 |
| 18:52 | Bronsa | arrdem: check https://github.com/clojure/tools.emitter.jvm/blob/master/src/main/clojure/clojure/tools/emitter/jvm.clj#L33-L35 |
| 18:53 | arrdem | Bronsa: I see it, can I trouble you for an explanation of the ^:once fn*? |
| 18:53 | Bronsa | arrdem: also you're not gonna get much out of that unfortunately |
| 18:54 | arrdem | Bronsa: it's a wrapper around inc. how much do you think I wanted? :P |
| 18:56 | Bronsa | arrdem: no I mean, you're not gonna get the bytecode that you want, you're only gonna get the bytecode to return the fn object |
| 18:59 | Bronsa | arrdem: wrt the ^:once fn*: the way tej works, it needs a wrapping fn to compile things, since other than deftype/reify it's the only special form that produces a class |
| 18:59 | Bronsa | arrdem: that justifies, the wrapping fn*, ^:once is there for locals clearing purposes |
| 19:00 | arrdem | Bronsa: Ah. Okay. Yeah I tweaked that so it worked and the bytecode I got was indeed fn as a value code. |
| 19:00 | gfredericks | core.logic has an inc doesn't it? I feel like I remember that standing for something unexpected |
| 19:01 | arrdem | gfredericks: I think there's an inc⁰ definition in the Reasoned Schemer... |
| 19:01 | gfredericks | I had to stare at that code for a long time once upon a time |
| 19:03 | gfredericks | every time I see it I think of 'increment' but I swear it meant something different |
| 19:03 | amalloy | inconclusive-o |
| 19:03 | gfredericks | man there's a lot of words that start with inc |
| 19:03 | gfredericks | incognito |
| 19:04 | gfredericks | just glanced at all of them and I give up. |
| 19:06 | amalloy | you just have to go through them incrementally |
| 19:07 | amalloy | you don't want to be regarded as an incorrigible quitter, do you? |
| 19:07 | Bronsa | (inc amalloy) |
| 19:07 | lazybot | ⇒ 109 |
| 19:07 | amalloy | lazybot: ????? |
| 19:07 | Bronsa | wow. |
| 19:07 | amalloy | ah, there he is |
| 19:07 | rasmusto | (inc redible) |
| 19:07 | lazybot | ⇒ 1 |
| 19:08 | amalloy | Bronsa: best not to encourage me. if i think i can get karma from wordplay #clojure will never hear anything else from me |
| 19:08 | rasmusto | amalloy: 1 pun per day is fine |
| 19:10 | amalloy | i don't think that counts as a pun, though |
| 19:10 | rasmusto | I guess that's true |
| 19:11 | rasmusto | (run* [q] (puno q)) |
| 19:11 | amalloy | though wikipedia seems to claim it isn't wordplay either. just a weird fixation with the prefix "inc" |
| 19:11 | amalloy | s/weird/incomprehensible |
| 19:12 | rasmusto | amalloy: :) |
| 19:12 | rasmusto | on a more serious note, what's the quick answer as to why kanren things end with e/o ? |
| 19:12 | amalloy | oh my god. the wikipedia aarticle on wordplay: "We'll have to rehearse that," said the undertaker as the coffin fell out of the car. |
| 19:12 | locks | you lot are incorrigible |
| 19:13 | arrdem | locks: on the contrary, they are very encourageable. |
| 19:13 | amalloy | locks: i already did that one. you'll have to find a new word |
| 19:13 | rasmusto | amalloy: "Let's see" said the blind carpenter, as he picked up his ax and saw. |
| 19:13 | locks | oh :( I'm inconsolable now |
| 19:13 | amalloy | nice |
| 19:13 | arrdem | I refuse to upvote any of this on principle, funny as it is. |
| 19:13 | rasmusto | pr inc iple |
| 19:14 | pcn | Where's the up arrow? |
| 19:14 | amalloy | good on you. don't inculcate a habit like this, arrdem |
| 19:14 | locks | something something nil punning |
| 19:17 | amalloy | rasmusto: i forget what e and o come from. i recall that -o is supposed to mean "relational" |
| 19:18 | TravisD | This is off topic, but why is sdegutis booting everyone from #clojure-social? |
| 19:18 | amalloy | maybe they're being antisocial |
| 19:18 | locks | rasmusto: they explain it at the start of one of the videos |
| 19:18 | gtrak | huh, turns out #clojure-offtopic was registered in 2010 by Raynes. |
| 19:18 | arrdem | TravisD: he's on a mood today and isn't taking it well |
| 19:19 | gtrak | TravisD: I suggest we stop depending on him. |
| 19:19 | arrdem | gtrak: good, lets take the party over there |
| 19:19 | gtrak | but I liked the idea of the channel at any rate. |
| 19:19 | TravisD | Yeah, it should exist. |
| 19:19 | arrdem | Raynes: pls can have ops? |
| 19:19 | TravisD | anyways, I was just wondering if there was some administrative reason. I'll check back on it tomorrow |
| 19:19 | TravisD | thanks |
| 19:21 | turbofail | perhaps he's feeling incontinent |
| 19:22 | locks | inconspicuous to say the least |
| 19:22 | amalloy | this whole discussion is getting incoherent |
| 19:23 | locks | does anyone know what happened to pedestal's site? |
| 19:24 | ohpauleez | locks: There was a message on the mailing list |
| 19:24 | ohpauleez | the docs are now being maintained in the repo |
| 19:24 | ohpauleez | alongside the code, to keep them more in sync |
| 19:24 | TravisD | For anyone wondering, #clojure-offtopic has a few of us in it |
| 19:24 | locks | ohpauleez: oh |
| 19:24 | locks | ohpauleez: do you happen to know of any video/tutorial thingies? |
| 19:24 | ohpauleez | at a later release (like 0.3.2 maybe), we'll restore the site with some new stuff |
| 19:25 | ohpauleez | locks: I do, You should see Ryan's screencast, let me fetch you a link |
| 19:25 | {blake} | TravisD: Is it inclusive? |
| 19:25 | sdegutis | Solved the multi-method problem. All I had to do was create a "load" namespace that required all the implementations. Now I can keep them separate. |
| 19:25 | arrdem | {blake}: even of those with irritating characters in their names! |
| 19:25 | TravisD | {blake}: Seems pretty inclusive |
| 19:26 | sdegutis | I liked the idea of with-redefs or alter-var-root, but it would be more boilerplate that way. |
| 19:26 | ohpauleez | locks: Try this - http://www.oreilly.com/pub/e/3039 |
| 19:26 | arrdem | \nick λ |
| 19:26 | {blake} | arrdem, TravisD: Seems sorta inchoate... |
| 19:26 | locks | ohpauleez: much obliged :) |
| 19:26 | ohpauleez | happy to help! |
| 19:27 | ohpauleez | Pedestal has gotten some pretty exciting changes recently, with some interesting ones in the pipeline |
| 19:28 | TravisD | {blake}: Pfft, it's 4 years old. Registered in 2010 |
| 19:28 | locks | the ideas seem pretty exciting, but as a noobie it's hard to wrap my head around them |
| 19:29 | sdegutis | TravisD: #clojure-social is closed for repairs |
| 19:29 | locks | ohpauleez: the webcast covers said changes? |
| 19:29 | cmwelsh | is lein-figwheel a good plugin for interactive clojurescript development? |
| 19:29 | sdegutis | also the residents of #clojure-social can't afford the repairs, so it will never be repaired |
| 19:29 | TravisD | sdegutis: Ah, so it's gone forever? :( |
| 19:30 | sdegutis | sure why not |
| 19:30 | ohpauleez | Here's the short list: You write your functions that handle request (just like you would with Ring). You write literal data for routes (or generate it, or read it in from a file). If your endpoint is a core async.channel, you get Server Sent Events for free |
| 19:30 | gtrak | TravisD: isn't offtopic social enough for you? |
| 19:30 | ohpauleez | Pedestal also ships with some serious performance improvements in the Clojure web stack (and in general, like printing) |
| 19:30 | TravisD | gtrak: I just don't like change! |
| 19:31 | ohpauleez | and the ability to drop in pieces of the Java web space - for example, You can drop ServletFilters right into your Pedestal App. Gzip, DDoS protection, QoS, SpringSecurity, any of it |
| 19:31 | gtrak | yea, it's ok, I think we had enough intertia at any rate. I was off IRC for like 2 days and I come back on and this happens.. |
| 19:31 | ohpauleez | locks: Some of it - it certainly take the approach that Pedestal is FAR simpler than people think |
| 19:33 | locks | ohpauleez: I remember a while back I was thinking about an architecture for a web service I had to develop |
| 19:33 | locks | and some of the pedestral copy registered with my brain |
| 19:33 | locks | felt validated :P |
| 19:33 | ohpauleez | totally :) |
| 19:34 | gtrak | Raynes: you're op in #clojure-offtopic :-) |
| 19:34 | locks | reading the "So what's happening with Pedestal 0.3.0?" blog post |
| 19:35 | locks | man, react took the web by storm |
| 19:35 | amalloy | gtrak: he's in mexico today, getting smashed on some kind of company outing |
| 19:35 | amalloy | i don't think he'll be giving anyone ops |
| 19:36 | gtrak | haha, good for him. |
| 19:36 | gtrak | underage drinking for the win |
| 19:36 | technomancy | protip: it's not underage if you're in a country that doesn't have insane age limits |
| 19:36 | amalloy | i don't think it's underage in mexico? |
| 19:37 | arrdem | technomancy: glad I'm not the only person who thinks it's silly that I can enlist and serve a tour before I can drink.. |
| 19:37 | gtrak | locks: everyone's been doing it wrong for a really long time. |
| 19:37 | ohpauleez | Pedestal 0.3.0 - core.async at the core, and Channels drive SSE now. Better SSE heartbeating. Performance tweaks. Updated deps and optimizations for platforms including Jetty 9, Tomcat 8, and (in-progress) Immutant2. Some interesting new handler and param pattern matching. The abiility to drop ServeltFilters in and configure them right in Pedestal. |
| 19:37 | amalloy | arrdem: i'm amazed you thought that was the case before hearing from technomancy |
| 19:37 | ohpauleez | CSRF protection bundled, secure headers bundled |
| 19:37 | locks | gtrak: haha :P |
| 19:38 | ohpauleez | Some small tweaks to make the logging even faster |
| 19:38 | arrdem | amalloy: I realized that some time back in high school long before I started lurking here :P |
| 19:38 | ohpauleez | and some improvements on the async handling core |
| 19:38 | ohpauleez | That's the Paul deGrandis unofficial changelog so far |
| 19:39 | locks | ohpauleez: I remember seeing a talk about web security in clojure |
| 19:39 | locks | and it painted a dark picture |
| 19:39 | technomancy | ohpauleez: hey, are you still interested in my touchstream? |
| 19:39 | ohpauleez | technomancy: Hey man, not at the moment, my keyboard budget is all dried up |
| 19:39 | ohpauleez | locks: Not so for Pedestal |
| 19:40 | technomancy | ohpauleez: no worries; I'll try ebay or something |
| 19:40 | ohpauleez | Out of the box, it fixes nearly all of those things by default (now, before, they were there - just like they were in Ring - you just had to turn them on) |
| 19:40 | locks | good to know |
| 19:40 | ohpauleez | You can use the built in stuff, or bring your own (ala SpringSecurity or anything else you want) |
| 19:43 | ohpauleez | Everyone should fee free to ping me here (when I'm in here) or on Twitter with Pedestal questions :) |
| 19:43 | blr | ohpauleez: boring I know, but have there been any changes to accomodate typical line of business crud style apps? (would love to give django the boot) |
| 19:44 | ohpauleez | blr: Interestingly enough, we have a prototype of a system for that use case, but it's unclear if we're going to clean it up and release it |
| 19:44 | ohpauleez | Since routes are just data in Pedestal, it's easy to generate them. We just made some reader literals and generated the entire application |
| 19:45 | blr | yeah I think ryan mentioned last year that something was in the works, but haven't been tracking the project's progress |
| 19:45 | ohpauleez | blr: I'd give Ryan's presentation (linked above) a quick watch, I think you might find what you're looking for |
| 19:45 | blr | great, will check it out |
| 19:48 | Frozenlock | ohpauleez: IRC and twitter. What? No email? :-p |
| 19:49 | locks | people should stop inventing stuff for me to learn |
| 19:50 | locks | ugh, so inconsiderate |
| 19:57 | Frozenlock | locks: There's worse: inventing stuff that requires you to know the underlying stuff. (Like cljs and JS) |
| 19:57 | locks | Frozenlock: I was trying to learn Om |
| 19:58 | locks | talk about towers of abstraction |
| 19:58 | Frozenlock | oh, so you need to know JS, cljs, react and om. No big deal :-p |
| 19:58 | gfredericks | and html and css? |
| 19:58 | Frozenlock | Ah right, you can hardly use Om with only JS |
| 19:58 | locks | cljs also include google closure don't forget |
| 19:59 | blr | unfortunately that's just the nature of programming for the web |
| 19:59 | Frozenlock | And clojure, of course |
| 19:59 | locks | which means the jvm |
| 19:59 | locks | and leiningen |
| 19:59 | locks | which… |
| 19:59 | Frozenlock | Oh wow. I forget how much stuff I needed to learn just to make a hello world in cljs |
| 20:00 | Frozenlock | It's so sad. |
| 20:00 | gfredericks | lein & lein-cljsbuild |
| 20:00 | gfredericks | & maven |
| 20:00 | lazybot | java.lang.RuntimeException: Unable to resolve symbol: maven in this context |
| 20:00 | Frozenlock | gfredericks: Actually I still don't know anything about maven. |
| 20:00 | locks | it's literally scary if you stop to find about it |
| 20:00 | locks | *think |
| 20:00 | gfredericks | Frozenlock: the coordinate system at least |
| 20:01 | technomancy | it gets worse |
| 20:01 | Frozenlock | No, stooooop |
| 20:01 | locks | I actually my saturday messing with react |
| 20:01 | technomancy | the jvm runs on this thing called "x86_64" |
| 20:01 | locks | ported some widgets I had |
| 20:01 | technomancy | which is pretty bonkers |
| 20:01 | gfredericks | technomancy can't get anything done without learning about ocaml |
| 20:01 | technomancy | and that's all made out of these things called logic gates, which let me tell you; they are pretty nuts |
| 20:01 | locks | so that bit is shallowly gone over |
| 20:02 | Frozenlock | eh, you're pushing it a little too much. You CAN make a cljs app without knowing about x86_64 |
| 20:02 | blr | turtles all the way down |
| 20:02 | locks | can you though |
| 20:02 | locks | can you? |
| 20:02 | technomancy | don't get me started on the whole "electrons flowing through a conductor" thing |
| 20:03 | locks | but seriously |
| 20:03 | locks | at least as far down as java it's pretty leaky |
| 20:05 | blr | locks: the alternative sadly is to capitulate to world of walled gardens, which is easier as a developer, but worse for everyone ultimately |
| 20:06 | Frozenlock | locks: I was so excited when I learned about cljs. "Yay, no need to learn JS!" |
| 20:06 | Frozenlock | How wrong I was. |
| 20:06 | technomancy | it's weird considering how easy it is to not learn java |
| 20:06 | blr | have you read fogus's book Frozenlock? That's a nice perspective on javascript |
| 20:07 | locks | functional javascript? |
| 20:07 | locks | it's pretty neat |
| 20:07 | Frozenlock | blr: I dont' think so. Any one-liner summary? I don't really have time these days :-p |
| 20:07 | amalloy | really, technomancy? i haven't written any real cljs, but i would expect the amount of js needed to be about the same as the amount of java needed |
| 20:07 | Frozenlock | cljs is more leaky than clj in this regard |
| 20:07 | blr | Functional JavaScript yeah |
| 20:07 | technomancy | amalloy: I haven't written any either, but just gathering from ambient chatter that's the impression I get. |
| 20:08 | beamso | javascript allongé is another good javascript book |
| 20:08 | beamso | is it best to separate my namespaces between clj and cljs in the same project? |
| 20:09 | locks | Frozenlock: tl;dr: use underscore.js and underscore-contrib.js, program JS like it were cljs |
| 20:09 | nullptr | usually you have src/clj and src/cljs separated entirely, no harm in duplicating the namespaces |
| 20:10 | Frozenlock | beamso: You might want to use cljx for some namespaces too. |
| 20:10 | thearthur | is anyone else having trouble installing paredit package from marmalade today? |
| 20:10 | thearthur | i'm getting: Wrong type argument: listp, No commentary. |
| 20:11 | locks | I guess cljs is more leaky because DOM |
| 20:12 | locks | if you write GUI apps, clj will probably start leaking like a sieve |
| 20:14 | cmwelsh | does that mean clojure is a bad first programming language? |
| 20:15 | Frozenlock | It prepares you for the real world I guess. :-p |
| 20:15 | locks | that's a loaded question |
| 20:15 | blr | cmwelsh: scheme is probably a better language for education, given all the resources around it, particularly racket |
| 20:16 | epichero | the tooling for clojure is more complicated and the documentation is poor. I like clojure more, but i agree scheme would be much better |
| 20:16 | blr | there are some good learning resources for kids in particular in scheme |
| 20:16 | cmwelsh | what about something like codecademy that runs in a browser, will clojurescript ever have something like that? |
| 20:16 | gtrak | cmwelsh: how far down the rabbit hole are you willing to go? |
| 20:16 | locks | cmwelsh: it _has_ stuff like that |
| 20:16 | locks | cmwelsh: 4clojure, clojure koans |
| 20:17 | gtrak | cmwelsh: IE, do you want kids reading java stacktraces? |
| 20:17 | technomancy | cmwelsh: it wouldn't be my first choice |
| 20:17 | Frozenlock | http://clojurescript.net/ |
| 20:17 | locks | http://clojurescriptkoans.com/ |
| 20:17 | tuft | underscorejs with knockout is pretty tolerable |
| 20:17 | gtrak | and having to learn the compiler to explain why they messed up? |
| 20:17 | locks | https://www.4clojure.com/ |
| 20:17 | cmwelsh | I'll check those out. I want to make a site like codecademy but JavaScript can be such a difficult first language as well |
| 20:18 | cmwelsh | I don't know clojure very well but I like what I have seen |
| 20:18 | epichero | i'm still lost with java stacktraces… i can handle GDB |
| 20:18 | gtrak | I think javascript's a good choice, because browsers are everywhere. In 1995 it was qbasic. |
| 20:18 | locks | I like JavaScript actually |
| 20:18 | technomancy | "your first language can be anything, as long as your second language makes you wonder what the hell was wrong with your first" |
| 20:18 | locks | for all it's faults |
| 20:19 | locks | what was the saying |
| 20:19 | locks | can be anything except X because it'll rot your brain forever? |
| 20:19 | martinklepsch | I'm trying to start an uberjar in docker with java -verbose -jar xy-standalone.jar |
| 20:19 | epichero | if you want to ease yourself in slowly i think python is the simplest to teach someone |
| 20:19 | martinklepsch | and the only line that comes out of it is: [Opened /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar] |
| 20:19 | Frozenlock | technomancy: I like that. Who said it? |
| 20:20 | technomancy | Frozenlock: I wish I could remember |
| 20:21 | martinklepsch | anyone an idea what could be going on there? |
| 20:23 | Frozenlock | I like elisp, because you are inside your evaluating environment. Also, single threaded and no namespaces. Less stuff to learn before doing actual work. |
| 20:24 | locks | factor's environment is so cool |
| 20:24 | martinklepsch | Frozenlock, if you just jump straight into lighttable you can also do clojure w/o namespaces... |
| 20:25 | gtrak | Processing. |
| 20:25 | technomancy | processing has good learning material, but the language itself is meh |
| 20:26 | Frozenlock | martinklepsch: Can you? Can you uberjar it, or do you need to always run into LT? |
| 20:26 | blr | for kids, Scratch has an immediacy that seems to really work for kids, for adults it doesn't matter so much |
| 20:26 | locks | I saw a |
| 20:27 | locks | smalltalk presentation the other day, I kinda wish I could work like that |
| 20:27 | martinklepsch | technomancy, I've recently seen people get quite far with quil on their first tries |
| 20:27 | locks | I wonder what LT has up its sleeve |
| 20:27 | Frozenlock | Teach them math with parens... (1 + 2), (1 + (3 - 2))... and then slowly swap the position of the functions. :-p |
| 20:27 | martinklepsch | Frozenlock, you'd always need to run it in LT |
| 20:27 | blr | locks: have you tried pharo? I think it has an active, if small community |
| 20:27 | locks | blr: downloaded the other day |
| 20:30 | locks | blr: I'll give "deep into pharo" another go |
| 20:30 | locks | and try to find videos, since that seems what my brain prefers |
| 20:30 | blr | I don't know anything about it personally, just hear people speak favourably about it |
| 20:31 | martinklepsch | anyone an idea why java -verbose -jar xy-standalone.jar could print nothing but "[Opened /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar]" once? |
| 20:31 | locks | blr: problem with image-based envs is interop |
| 20:31 | locks | but, one problem at a time |
| 20:31 | technomancy | martinklepsch: sometimes the oracle jdk makes you click yes in the licensing agreement |
| 20:32 | technomancy | maybe it can't display the window or something |
| 20:32 | blr | I remember looking at Seaside a few years back and thinking it had some novel ideas, for a web framework |
| 20:32 | technomancy | usually that happens at install time though |
| 20:32 | martinklepsch | technomancy, I'm starting in a docker container so most likely that could be an issue |
| 20:32 | technomancy | but oracle is gross anyway; i recommend getting rid of it |
| 20:33 | blr | openjdk has near parity with oraclejdk now from what I understand.. potentially minor performance differences? |
| 20:33 | dbasch | what happened to clojure-social btw? |
| 20:33 | gtrak | dbasch: me moved to clojure-offtopic |
| 20:33 | blr | certainly easier to apt-get the openjdk :) |
| 20:33 | gtrak | we* |
| 20:34 | arrdem | technomancy: you're invited to the new clubhouse ofc.. |
| 20:34 | technomancy | oh yeah |
| 20:41 | locks | does anyone have some destructuring katas/exercises other than the koans? |
| 20:41 | locks | because they really stump me |
| 20:42 | martinklepsch | locks, good q |
| 20:42 | bbloom | ~destructuring |
| 20:42 | clojurebot | destructuring is http://clojure.org/special_forms#binding-forms |
| 20:43 | bbloom | locks: reading the "spec" / docs may give you enough of a hint to solve the koans |
| 20:43 | locks | bbloom: but I want more "homework" |
| 20:43 | martinklepsch | I'm getting the very same: "[Opened /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/rt.jar]" line when using openjdk |
| 20:43 | bbloom | locks: oh, you finished the koans & need MORE koans? :-) |
| 20:44 | locks | yeah :P |
| 20:44 | locks | or a set of kata style exercises to keep me sharp |
| 20:44 | beamso | martinklepsch: i thought there was a means of specifing that you'd accepted the jdk licence as part of the install of the deb or somewhere in /etc |
| 20:44 | bbloom | locks: http://www.4clojure.com/problems use search filter in top right corner |
| 20:45 | bbloom | there are 3 destructuring problem groups |
| 20:45 | locks | oh nice |
| 20:46 | locks | I solved some problems already, but hadn't come across the destructuring ones yet |
| 20:46 | beamso | https://wiki.debian.org/JavaFAQ mentions some things about accepting the licence programmatically |
| 20:47 | amalloy | http://www.4clojure.com/problem/173 is so weird |
| 20:48 | blr | martinklepsch: have you checked the process list? are you sure it isn't running? |
| 20:49 | martinklepsch | blr, the uberjar works fine locally |
| 20:49 | mercwithamouth | o_O; |
| 20:49 | martinklepsch | just in a docker container it hangs |
| 20:50 | blr | martinklepsch: are you using openjdk-7-jre-headless? |
| 20:51 | blr | might be worth giving that a go |
| 20:51 | martinklepsch | yeah, just trying with default-jre-headless |
| 20:51 | martinklepsch | blr, if that works I'll swith to 7. |
| 20:55 | martinklepsch | blr, no luck... -.- |
| 20:56 | blr | bugger |
| 20:57 | blr | I'm afraid we're still using kvm, but someone on here must have experience deploying to lxc/docker |
| 20:57 | beamso | i have no concept of what can or can't be done with docker, but can you ssh into the instance and run java from the command line? |
| 20:59 | martinklepsch | beamso I don't think so |
| 21:00 | martinklepsch | riemann works just fine on docker |
| 21:00 | martinklepsch | and uses default-jre-headless |
| 21:00 | martinklepsch | https://github.com/patrickod/riemann-docker/blob/master/Dockerfile |
| 21:03 | blr | martinklepsch: apparently the command 'attach' will give you a shell on the container, similar to a kvm console http://docs.docker.io.s3-website-us-west-2.amazonaws.com/reference/commandline/cli/#attach |
| 21:04 | martinklepsch | blr, not really. it just foregrounds it, which will show me the aforementioned line |
| 21:04 | martinklepsch | I'll talk to some more ppl in the #docker channel |
| 21:04 | blr | you probably want the -i flag for interactive |
| 21:04 | blr | might help clarify what's going on |
| 21:05 | blr | ok, gl :) |
| 21:07 | beamso | i don't see anything with accepting the java licence, so it wasn't that |
| 21:14 | amalloy | guys, the internet is amazing. anytime you want, you can wander into a room where dozens or hundreds of experts in any topic you like are hanging out, and ask them your dumb newbie question. imagine how incredible that would have seemed, say, thirty years ago |
| 21:15 | dbasch | amalloy: I don’t need to imagine, I was there :P |
| 21:15 | Frozenlock | amalloy: I have the opportunity of feeling like a noob 24h/24h. :-p |
| 21:15 | dbasch | I learned to code in 1983 with a shitty TI99 and a photocopied BASIC manual |
| 21:16 | sjy | irc is coming up on 30 years old though! |
| 21:16 | amalloy | dbasch: i think it's still "imagine..." rather than "remember...", because you probably weren't thinking back then about how nice it would be to have all this stuff at your fingertips all the time |
| 21:17 | locks | I still haven't learnt to code |
| 21:17 | locks | #hipster |
| 21:17 | locks | I apologize for my use of hashtags |
| 21:18 | dbasch | amalloy: modems and BBSs already existed, they just were not available to most of us |
| 21:18 | dbasch | I wanted to buy a 300 baud modem but it was too expensive |
| 21:18 | kenrestivo | we had usenet back then, which was pretty cool, but nothing like the sheer volume of people on the internet today |
| 21:18 | amalloy | yes, i know. i just mean like, having it all commonplace |
| 21:18 | amalloy | and instantaneous |
| 21:18 | amalloy | locks: you can justify it by saying you were /join'ing #hipster |
| 21:18 | amalloy | hashtags work almost as well in irc |
| 21:19 | kenrestivo | i was remarking with some old-timers how bar arguments just can't happen anymore. anytime someone says "that movie was 1989, it had willem defoe..." someone can bust out their phone and end the debate in like 5 seconds |
| 21:19 | locks | kenrestivo: that's a bit of a strawman |
| 21:19 | locks | someone can |
| 21:19 | locks | doesn't mean they will |
| 21:19 | kenrestivo | it's a total strawman :-) |
| 21:20 | locks | then light it on fi'a |
| 21:20 | locks | that STRAWMAN'S ON FI~RE~ |
| 21:21 | kenrestivo | oh, people can always find something to argue about. it's just that having the sum total of the human race's knowledge within several seconds of search during every waking hour has qualitatively changed things. |
| 21:22 | locks | you're american, aren't you |
| 21:22 | kenrestivo | you can tell by the misplaced adverb, no doubt |
| 21:23 | locks | I can tell by implicitly saying everyone has the sum total etc within several seconds of search |
| 21:23 | locks | on their phone |
| 21:23 | locks | ;P |
| 21:25 | dbasch | I like living in a world in which I can carry money in my brain |
| 21:25 | Frozenlock | dbasch: bitcoin? |
| 21:25 | kenrestivo | correct horse battery staple + bitcoin |
| 21:25 | dbasch | Frozenlock: diegobasch.com/brainwallet |
| 21:25 | dbasch | http://diegobasch.com/brainwallet |
| 21:26 | kenrestivo | yay bip32 |
| 21:26 | dbasch | I tried writing that in cljs but it was really annoying using all the bitcoin / crypto libraries |
| 21:26 | kenrestivo | as for internet connectivity, i'm told that the usa lags behind many other countries |
| 21:27 | kenrestivo | dbasch: there are a few javascript wallets last i checked. |
| 21:27 | Frozenlock | While I've always been a strong bitcoin advocate, the "we don't need to care about the blockchain's size" behavior is scaring me. |
| 21:27 | amalloy | kenrestivo: i'm not sure about connectivity, but certainly connection quality |
| 21:27 | dbasch | kenrestivo: yes, but the original brainwallet lets you choose your passphase (which is really terrible) |
| 21:28 | dbasch | passphrase |
| 21:28 | amalloy | the other day i was chatting with someone from the netherlands who has 93Mbps up |
| 21:28 | amalloy | and i'm sure it's much cheaper than the crummy 1Mbps i pay for at home |
| 21:28 | blr | we have full duplex fibre in NZ now amalloy, but we're connected to the rest of the world by a bit of string, which makes the fibre somewhat less exciting |
| 21:30 | kenrestivo | Frozenlock: the two biggest problems i've had with BTC is that one (it can't scale to visa-level volumes), and that it's deflationary. |
| 21:30 | kenrestivo | there were some people working on that first problem. the second problem is just a problem, and people have hacked around it by for example forking (dogecoin), but i think it's deeper and may not ever get fixed |
| 21:31 | dbasch | kenrestivo: #1 is not a problem, it’s like saying computers will never take off because 16k of ram won’t be enough |
| 21:31 | beamso | blr: you have fttp? |
| 21:31 | Frozenlock | Well, there's weirdos like me that don't think deflation is a problem. |
| 21:31 | blr | beamso: a lot of NZ does, I missed out this year by one block, we get it next year |
| 21:31 | beamso | ouch at missing out, but lucky you in general |
| 21:32 | dbasch | to me the main problem with bitcoin is that most development is in C++, Rails and js :P |
| 21:32 | blr | well yeah, it's good to see, but as I said offset by our problems with international bandwidth, we only have 1 trunk out of new zealand |
| 21:32 | Frozenlock | dbasch: we need clojurecoin |
| 21:32 | kenrestivo | i played aroudn with bitcoinj and went "bleah", and stopped |
| 21:32 | kenrestivo | there's a clojure wrapper around it now that looks pretty solid |
| 21:32 | arrdem | kenrestivo: I will happily debate #1 with you all night long, and #2 is arbitrary and patched in dogecoin. may the best alt win. |
| 21:33 | dbasch | Frozenlock: let’s be more inclusive, e.g. lispcoin or functionalcoin |
| 21:33 | dbasch | kenrestivo: I didn’t think bitcoinj was that bad |
| 21:33 | kenrestivo | arrdem: i have no interest in debating it because my issue with #2 is not technical, it's philosophical/moral and i expect not many people to agree with me |
| 21:33 | arrdem | dbasch: just hack clj-doge |
| 21:33 | danielcompton | Can you compare two byte-buffers based on their hashcode? |
| 21:33 | arrdem | kenrestivo: I happen to agree with you on #2, but not for the reasons you hold that view. |
| 21:34 | arrdem | dbasch: I was looking at the json-rpc APIs for the coins... a good clj-btc will port trivially to almost any alt. |
| 21:34 | blr | I'm just enjoying the absurdity of it all, the doge nascar thing is hilarious. |
| 21:34 | kenrestivo | it'd be fun to have dogecoin tips in lazybot |
| 21:34 | arrdem | blr: I KNOW RIGHT |
| 21:34 | dbasch | arrdem: there is a clj-btc but it’s not great |
| 21:35 | dbasch | arrdem: I actually use it for cointipping |
| 21:35 | arrdem | dbasch: eh I/we could fix that. |
| 21:35 | blr | arrdem: the world is getting exponentially weirder, and I'm ok with that |
| 21:35 | arrdem | blr: I ordered my doge shirt, did you? |
| 21:35 | dbasch | arrdem: it’s pretty trivial actually |
| 21:35 | blr | hahah no |
| 21:35 | arrdem | s/doge/dogecar/g |
| 21:35 | blr | I should do |
| 21:35 | arrdem | http://dogecrew.com/ |
| 21:36 | arrdem | dbasch: I'm sure. the clojure APIs for exchanges I was working on for a while were the same, trivially fixable but blegh |
| 21:36 | arrdem | 624 DOGE shirts to go! |
| 21:38 | fooozbazz | is there a balanced binary tree implementation available as a clojure library, or do people just implement their own all the time for fun.. |
| 21:38 | fooozbazz | google is giving me nothing but tutorials and half baked examples.. |
| 21:38 | fooozbazz | "don't reinvent the wheel" |
| 21:39 | locks | if anyone knows about trees is bbloom |
| 21:39 | fooozbazz | :( |
| 21:39 | dbasch | danielcompton: I don’t think so, but why would you want to? |
| 21:39 | Frozenlock | "or do people just implement their own all the time for fun.." pfff, that's not fun. |
| 21:39 | danielcompton | dbasch I want to compare a blob from cassandra with a blob from a java file |
| 21:40 | fooozbazz | Frozenlock: that' why i'm asking.. |
| 21:40 | arrdem | well there's a red-black tree implementation I'm finding in some blog posts.. |
| 21:40 | danielcompton | dbasch it seems like Clojure's = compares equality even for java mutable objects. Or am I way off base on that? |
| 21:40 | arrdem | someone so inclined could probably pull it out and librarify it... |
| 21:40 | arrdem | (dec so) |
| 21:40 | lazybot | ⇒ -13 |
| 21:40 | danielcompton | (dec so) |
| 21:40 | lazybot | ⇒ -14 |
| 21:40 | dbasch | ,(= (byte-array (map byte (range 9))) (byte-array (map byte (range 9)))) |
| 21:40 | clojurebot | false |
| 21:41 | arrdem | fooozbazz: https://github.com/clojure-cookbook/clojure-cookbook/blob/master/02_composite-data/2-27_and_2-28_custom-data-structures/rbt.clj |
| 21:41 | dbasch | danielcompton: they are different objects |
| 21:42 | Frozenlock | Do I need a licence to prevent people from distributing code, or can I just write: "Licence: Do not distribute" ? (I've only ever dealt with open source or in-house stuff) |
| 21:43 | dbasch | Frozenlock: it’s best to use a proper license http://choosealicense.com/ |
| 21:43 | arrdem | Frozenlock: just sole copyright it to $COMPANY |
| 21:43 | arrdem | or get a real license... |
| 21:44 | Frozenlock | Looking now, thanks |
| 21:44 | dbasch | Frozenlock: if you put it on github, copyright alone doesn’t stop people from forking the code |
| 21:45 | fooozbazz | arrdem: thanks. i guess it's just not been done yet. |
| 21:45 | devn | anyone seen this? http://crossclj.info/ |
| 21:45 | arrdem | devn: that's slick |
| 21:45 | devn | arrdem: yeah, i feel like all of this stuff is slowly coming together |
| 21:46 | devn | imagine clojuresphere + clojars + crossclj + getclojure + clojuredocs |
| 21:46 | devn | + clojureatlas |
| 21:47 | devn | im guessing that crossclj is a giant datomic db of codeq-parsed repos |
| 21:48 | arrdem | the volume of clj- prefixed libraries is irritating. |
| 21:48 | arrdem | -jure is only marginally better. |
| 21:49 | dbasch | I crtl-F’ed for bitcoin and found only one thing |
| 21:49 | dbasch | and it was mine :( |
| 21:49 | danielcompton | dbasch how can you compare two different mutable java objects? What's the fastest way? |
| 21:49 | arrdem | there is a search... |
| 21:49 | arrdem | also it looks like this DB is old. I have other projects that don't show up when I search my handle. |
| 21:49 | dbasch | danielcompton: for byte arrays you have to go byte for byte |
| 21:50 | danielcompton | that would still be faster than converting to a vector? |
| 21:50 | arrdem | oh damn. I should port imprecise to algo.generic.... |
| 21:50 | arrdem | forgot about that project. |
| 21:50 | dbasch | danielcompton: if you want speed, do a plain old comparison by array index, or lazy |
| 21:50 | danielcompton | dbasch got it |
| 23:10 | fortruce | does binding not actually take place until after the let form?, want to use one binding in the next binding |
| 23:11 | fortruce | ,(binding [x 1, y (+ 1 x)] (+ x y)) |
| 23:11 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve var: x in this context, compiling:(NO_SOURCE_PATH:0:0)> |
| 23:11 | fortruce | ,(def ^:dynamic x) |
| 23:11 | clojurebot | #'sandbox/x |
| 23:11 | fortruce | ,(def ^:dynamic y) |
| 23:11 | clojurebot | #'sandbox/y |
| 23:12 | fortruce | ,(binding [x 1, y (+ 1 x)] (+ x y)) |
| 23:12 | clojurebot | #<ClassCastException java.lang.ClassCastException: clojure.lang.Var$Unbound cannot be cast to java.lang.Number> |
| 23:12 | dbasch | ,(let [a 1 b (+ 2 a) c (* 4 b)] c) ;; you mean this? |
| 23:12 | clojurebot | 12 |
| 23:12 | fortruce | yea, but in binding, not let |
| 23:12 | dbasch | there is no guarantee of order in binding |
| 23:13 | fortruce | ahh, alright, is there in with-redefs? |
| 23:13 | dbasch | The new bindings |
| 23:13 | dbasch | are made in parallel (unlike let); all init-exprs are evaluated |
| 23:13 | dbasch | before the vars are bound to their new values. |
| 23:13 | dbasch | (doc binding) |
| 23:13 | clojurebot | "([bindings & body]); binding => var-symbol init-expr Creates new bindings for the (already-existing) vars, with the supplied initial values, executes the exprs in an implicit do, then re-establishes the bindings that existed before. The new bindings are made in parallel (unlike let); all init-exprs are evaluated before the vars are bound to their new values." |
| 23:13 | fortruce | ahh, somehow missed the last sentence :/ |
| 23:14 | fortruce | nested bindings seems weird, i think i'm doing something wrong |
| 23:15 | blr | danielcompton: in Dunedin today? |
| 23:15 | danielcompton | blr still in Auckland, working out of Otago Uni's Auckland office |
| 23:15 | danielcompton | blr does my channel join show up in IRC? |
| 23:16 | blr | oh right, I forget we have offices in other cities sometimes |
| 23:16 | danielcompton | blr haha, I don't think you're the only one |
| 23:17 | danielcompton | blr does my channel joining show up in IRC? |
| 23:18 | blr | yeah, that's normal, what irc client do you use? |
| 23:18 | danielcompton | blr textual, I just wasn't sure if that was spamming everyone |
| 23:18 | blr | I wouldn't worry about it, think people on irc are used to join/part spam :) |
| 23:27 | yeoj___ | hi, i'm writting a korma app, and I am repeating some basic crud operations and struggling with a macro... can someone help me with the correct way to thing about this: https://www.refheap.com/85669 |
| 23:27 | yeoj___ | *think |
| 23:56 | munderwo | Hi all. im using compojure and want to basically pass the whole request map through to a handler. Im making a really basic proxy. How in the routing would I just pass the whole request through? |
| 23:56 | munderwo | i've tried this (ANY "/*" [] (proxy-handler request)) .. |
| 23:57 | tolstoy | (AND "/*" [:as req] (proxy-handler req))? |
| 23:57 | tolstoy | Er, ANY. |
| 23:57 | munderwo | just trying now. |
| 23:57 | tolstoy | Or even (routes/not-found (fn [r] (proxy r))). Something like that? |
| 23:57 | munderwo | I can see how that would work. |
| 23:58 | munderwo | The first that is. The second I dont think I quite want to do that. As I would like eventually for the routes to be configurable |
| 23:59 | tolstoy | Heh. I was going to suggest not even bothering with compojure if that wasn't the case. ;) |
| 23:59 | munderwo | yeah. Thanks that worked! |