2012-03-09
| 00:00 | uvtc | technomancy, Ah. Will read the docs for gen-class. Thanks! |
| 00:00 | uvtc | technomancy, Is clojars a "maven repository"? |
| 00:02 | technomancy | yeah |
| 00:02 | uvtc | I think I read on the lein site that it uses the maven java lib under the hood. |
| 00:02 | uvtc | Is that changing in lein 2? |
| 00:05 | uvtc | s/lein site/lein github page/ |
| 00:08 | jodaro | huh |
| 00:08 | jodaro | http://elixir-lang.org/ |
| 00:08 | jodaro | cool |
| 00:11 | uvtc | Perhaps I'm missing something obvious ... is there a way to get the source code for a given lib at Clojars? |
| 00:12 | dnolen | huh how do you install swank-clojure w/ lein2? |
| 00:12 | devn | uvtc: you already have it |
| 00:13 | devn | open the jar and take a look |
| 00:14 | devn | yo bro im using clojure to emit clojurescript that emits elixir |
| 00:17 | jodaro | heh |
| 00:17 | devn | that's cool though |
| 00:17 | devn | thanks for sharing that |
| 00:17 | jodaro | does the elixir emit erlang? |
| 00:17 | jodaro | and the erlang, like, C? |
| 00:18 | romanandreg | is there a way to obtain the IJavaScript results from the cljs.closure/build function? |
| 00:18 | romanandreg | I tried calling directly cljs.closure/-compile but that causes some issues |
| 00:18 | uvtc | devn, huh. Hadn't seen that before. I'd checked one or two jars, but IIRC they contained only class files... |
| 00:18 | uvtc | devn, thanks. |
| 00:18 | dnolen | romanandreg: like grabbing the generated JS? |
| 00:18 | devn | uvtc: glad i could help :) |
| 00:19 | uvtc | devn, maybe the jars I'd looked at were generated from Java, rather than from Clojure source... |
| 00:19 | devn | uvtc: totally plausible |
| 00:19 | romanandreg | dnolen: yeah |
| 00:19 | devn | it doesn't always work, but for most libs i am able to just open them up |
| 00:20 | romanandreg | dnolen: the one that has the info with provides, requires etc |
| 00:21 | devn | romanandreg: are you talking about file output? |
| 00:21 | devn | (cljsc/build "foo.cljs" {:optimizations :advanced :output-to "foo.js"}) |
| 00:21 | devn | (read-generated-js *1) |
| 00:23 | romanandreg | devn: I'm talking about the actual compiled files... |
| 00:23 | romanandreg | https://github.com/clojure/clojurescript/blob/master/src/clj/cljs/closure.clj#L860 |
| 00:23 | romanandreg | this guys |
| 00:23 | yoklov | is there a shorter way to represent (keyword "`") |
| 00:23 | yoklov | without it being a syntax error |
| 00:24 | romanandreg | I'm compiling and after that, I want to get all the different namespaces that are provided to generate a google.require with each of them |
| 00:24 | romanandreg | iterating over the compiled types calling :provides on each of them |
| 00:24 | romanandreg | however, when calling build and then -compile, the compiler gets all fucked up |
| 00:24 | romanandreg | :-) |
| 00:24 | technomancy | dnolen: it's [lein-swank "1.4.3"]; gotta get that readme updated |
| 00:30 | dnolen | romanandreg: what are you trying to do that requires this? |
| 00:31 | romanandreg | dnolen: :-)… Having a server handler that every times that receives a request, compiles the cljs, and then tries to get all the provided modules and add them in a script tag after compilation… |
| 00:31 | romanandreg | dnolen: don't know if that is a good or a bad idea yet |
| 00:34 | ibdknox | romanandreg: you probably don't want to try and require things dynamically |
| 00:34 | ibdknox | that will just make you sad in the long run |
| 00:35 | ibdknox | romanandreg: noir-cljs might be of some interest as an example, though it explicitly doesn't beam new dependencies up |
| 00:36 | romanandreg | ibdknox: well is getting me to drink with the compiler barfing back at me with "Can't recur here" exceptions |
| 00:36 | romanandreg | ibdknox: going to check that out |
| 00:36 | ibdknox | romanandreg: ah, you've AOT'd the compiler |
| 00:36 | ibdknox | romanandreg: rm -rf classes/cljs/ |
| 00:40 | romanandreg | ibdknox: like noir-cljs so far |
| 00:40 | romanandreg | ibdknox: checking out watchtower… are you using inotify for that one? :o |
| 00:54 | romanandreg | dnolen, ibdknox: thanks for the help/feedback |
| 01:11 | muhoo | #noir is quiet, so maybe i'll ask here instead: |
| 01:11 | muhoo | http://francesco-cek.com/uploading-a-file-to-amazon-s3-using-clojure-and-noir-2/ |
| 01:11 | clojurebot | c'est bon! |
| 01:12 | muhoo | is that still current or is there better tutorial on using the s3 api in noir? |
| 01:12 | muhoo | i just need a simple example that works, then i can take it from there. |
| 01:19 | muhoo | Raynes: i'll tell you one of the features i wish that refheap had. |
| 01:20 | muhoo | the greatest thing about mailing lists is that you can google say an error message, and find a mailing list discussion or forum that has the answer to what the problem was. |
| 01:20 | muhoo | but when i google say a kernel error message, and i get a fucking pastebin, that's worse than useless. because, that's not an answer. it's just a log with the error. |
| 01:21 | muhoo | whereas if the question was asked on a ml, there'd be an answer already there. |
| 01:21 | muhoo | it'd be nice if refheap could somehow keep track of discussions in channels that reference the refheap paste. like a trackback/pingback |
| 01:22 | tomoj | hmm |
| 01:22 | tomoj | how do you signal a resolution? |
| 01:23 | Raynes | muhoo: So, tags? |
| 01:23 | Raynes | muhoo: The problem with what you suggest is getting people to use it and use it reliably. |
| 01:24 | Raynes | If I were to add a channel thing like hpaste, would anybody use it? If I set it to a default channel, will they change it if it is incorrect? If I add tags, will anyone take the time to tag it? |
| 01:24 | muhoo | that's the problem, yes. |
| 01:24 | Raynes | There are a lot of problems with it. |
| 01:24 | tomoj | it would be an interesting project to try to do this with no participation |
| 01:25 | Raynes | Oh, wait, discussions. |
| 01:25 | Raynes | I read that wrong. |
| 01:25 | muhoo | yeah, it's like, you'd have to scrape logs of channels, looking for mentions of the refheap paste |
| 01:25 | Raynes | That's pretty insane. |
| 01:25 | Raynes | :p |
| 01:25 | muhoo | and then archiving the discussion around it. |
| 01:25 | muhoo | well, maybe datomic could do it :-P |
| 01:25 | tomoj | but if you just take the next/prev N lines.. |
| 01:26 | Raynes | Yeah, but actually finding them. |
| 01:26 | Raynes | Where are the logs for a Haskell paste? |
| 01:26 | Raynes | There are 4 or more Haskell channels. |
| 01:26 | Raynes | And when do I scrape the logs? If I do it immediately, the user wont have time to link his paste. |
| 01:26 | tomoj | guess people have to ask the bot to join their channel if they want it |
| 01:26 | muhoo | it causes a lot of problems, yes. but internet archive has been around for over a decade now, and everybody thought they were insane when they started that too. |
| 01:27 | Raynes | Heh |
| 01:27 | Raynes | It's a decent idea, but it sounds like a lot of work for not a lot of payoff. |
| 01:27 | muhoo | yep. and i solved my noir/s3 problem by googling the error. |
| 01:27 | muhoo | and got a mailing list discussion that told me, basically " don't use noir/s3" :-) |
| 01:27 | Raynes | Heh |
| 01:28 | muhoo | looks like it's unmaintained. |
| 01:31 | ibdknox | you should use weavejester's |
| 01:31 | ibdknox | I'm going to remove noir.util.s3 in 1.3 |
| 01:31 | ibdknox | muhoo: https://github.com/weavejester/clj-aws-s3 |
| 01:33 | muhoo | yep, found it |
| 01:37 | muhoo | it works! |
| 01:46 | devn | muhoo: mario, is that you? |
| 01:48 | devn | http://www.youtube.com/watch?v=TBx-8jqiGfA |
| 01:49 | gfredericks | I think this is the first time I have seen #clojure at 1AM, so by induction it must always be mario-themed at this time. |
| 01:55 | devn | gfredericks: i like where your head is at |
| 01:57 | Lajla | Such drastic meassurements |
| 01:57 | Lajla | not at all necessary |
| 01:57 | devn | Lajla: it was at one point |
| 01:57 | devn | trust me. |
| 01:57 | Lajla | Jesus once said 'Vote republican' |
| 01:57 | Lajla | True story. |
| 01:57 | Lajla | Why, what did I do? |
| 01:58 | devn | Just being generally disagreeable for what could only be seen as doing so for the sake of it. |
| 01:58 | devn | "let me steamroll you for the next hour..." |
| 01:58 | Lajla | I'm just misunderstood |
| 01:59 | devn | Lajla: or you're completely understood |
| 01:59 | devn | take your pick |
| 01:59 | Lajla | Like Hitler, Stalin, Mao Zedong and Ché Guevarra |
| 01:59 | dreen | lol |
| 01:59 | gfredericks | a surprisingly frank place as well; at least with a 2 year lag |
| 01:59 | devn | your mother's name is frank. |
| 01:59 | Lajla | Besides |
| 01:59 | Lajla | Sonic > Mario |
| 01:59 | Lajla | No doubt about that. |
| 02:00 | Lajla | Sonic was in every way superior to the mario games of its generation, the Genesis had superior hardware anyway and sonic took full advangtage of it. |
| 02:00 | devn | totally bro |
| 02:00 | Lajla | Right on |
| 02:00 | devn | Left off |
| 02:00 | dreen | rofl, u guys arguing about sonic and mario? |
| 02:00 | devn | nope. |
| 02:00 | Lajla | programmed by the finest programmers on the world, save for myself and the Microsoft Chief Software Architect |
| 02:00 | Lajla | No |
| 02:00 | Lajla | we agree that sonic was better |
| 02:00 | Lajla | I don't see how you can call Mario better. |
| 02:01 | devn | THIS IS AN OUTRAGE |
| 02:01 | devn | IT IS CLEAR THAT MARIO WAS BETTER |
| 02:01 | devn | HOW DARE YOU |
| 02:01 | Lajla | Sonic was just better, the levels were more extensive, it was actually 2D, mario was basically 1D, you couldn't really go up and down like you could in sonic. |
| 02:01 | ibdknox | (╯°□°)╯︵ ┻━┻ |
| 02:01 | Lajla | In mario, if you fell down you were dead, in sonic, you landed on an 'unoptimal route' but at the same time it was much harder to not fall. |
| 02:02 | Lajla | THereby raising the skill ceiling of the game's time runs. |
| 02:02 | devn | Lajla: this is why you're "misundertood" |
| 02:02 | dreen | in depth knowledge |
| 02:02 | devn | these are the rantings of a mad man |
| 02:02 | Lajla | In sonic, you had to make platforming combinations to say stay on the best route, in mario you could just pause and take your time to do anything. |
| 02:02 | Lajla | No, this all true. |
| 02:02 | Lajla | You cannot deny this. |
| 02:02 | devn | write this in your memoirs |
| 02:02 | devn | and i absolutely can |
| 02:02 | devn | and i have |
| 02:02 | Lajla | Not famous enough |
| 02:03 | Lajla | The Microsoft Chief Software architect is though |
| 02:03 | devn | Is that a subtle 1984 reference or something? |
| 02:03 | Lajla | No, that's bill gates. |
| 02:03 | devn | What are you talking about? |
| 02:03 | Lajla | I don't know, one of the first things I ever said here was 'I'm the best programmer in the world save only the Microsoft Chief Software Architect' |
| 02:03 | devn | It's like slashdot circa 1995 polluted you and left you for dead. |
| 02:04 | Lajla | Ehh, Bill Gates, that's his position at Microsoft. |
| 02:04 | Lajla | Chief Software Architect |
| 02:04 | ibdknox | no |
| 02:04 | Lajla | Not Chief Exectutive Officer |
| 02:04 | ibdknox | that *was* his position |
| 02:04 | Lajla | Nowai |
| 02:04 | Lajla | He left us. |
| 02:04 | ibdknox | he hasn't held that for a long time |
| 02:04 | devn | ibdknox: don't feed the... |
| 02:04 | ibdknox | devn: ;) |
| 02:04 | Lajla | Who will give us the new version of DirectX now |
| 02:04 | Lajla | What's he doing now then? |
| 02:04 | devn | he's drinking apricot tee with his mum |
| 02:05 | ibdknox | chilling. You know how it is |
| 02:05 | devn | tea* |
| 02:05 | devn | tee would be interesting though |
| 02:05 | Lajla | devn, I'm not that mad am I? |
| 02:05 | Lajla | I mean, I am diagnosed with paranoid schizophrenia |
| 02:05 | dreen | tea from tees' |
| 02:05 | devn | Lajla: you're pretty mad, all things considered |
| 02:05 | Lajla | but honestly, psychiatrists are just out to get me. |
| 02:05 | devn | yeah...totally |
| 02:06 | Lajla | To discredit my reputation driven by their alien overlords. |
| 02:06 | devn | it must be nice to have a leg up on everyone you ever interact with |
| 02:06 | muhoo | omg, what happened here? |
| 02:06 | Lajla | muhoo, sonic or mario? |
| 02:06 | devn | muhoo: i engaged Lajla -- the worst mistake ever |
| 02:06 | Lajla | Picard Engages warp speed |
| 02:06 | muhoo | o noes. |
| 02:07 | Lajla | Well, he tells LaForge to engage it. |
| 02:07 | Lajla | And then LaForge does it. |
| 02:07 | devn | Lajla: good job on the fine detail there |
| 02:07 | Lajla | So he engages it by proxy. |
| 02:07 | Lajla | Honestly, I never was a fan of TNG. |
| 02:07 | devn | really important to get star trek references completely accurate |
| 02:07 | Lajla | I don't know, the characters all feel a little bit too 'perfect' |
| 02:07 | Lajla | I was more a Niner. |
| 02:07 | devn | Lajla: have you ever written a show?> |
| 02:08 | devn | scripts i mean |
| 02:08 | devn | have you ever done that? |
| 02:08 | Lajla | Nahhh, I once had to for an art project write a praemise |
| 02:08 | muhoo | my roomate was a freak for those star treks. i was anti. i'd call it the "captain!" show |
| 02:08 | devn | i'd love to read your immaculate work. i bet it's fantastic |
| 02:08 | dreen | perhaps people enjoy tng cos they desire to be more perfect, perhaps u enjoy niner cos you already are perfect... |
| 02:08 | Lajla | Got a pretty good grade for it, it was kind of original and weird though. |
| 02:08 | devn | yeah kind of shitty |
| 02:08 | devn | erm, original and weird |
| 02:08 | muhoo | because, i knew it was on, because there was always someone intoning "but, captain!" in a worried, concerned tone |
| 02:08 | Lajla | dreen, TNG probably got popular because it told people what they wanted to hear to some extend |
| 02:08 | Lajla | humans, morally infallible beings crusading the galaxy against all evil. |
| 02:09 | Lajla | Whereas DS9 was more like 'Humans, fallible creatures in a universe where right and wrong are complicated and very opague' |
| 02:09 | devn | opague... |
| 02:09 | devn | totally. |
| 02:09 | Lajla | Is that opaque? |
| 02:09 | Lajla | It's opaque isn't it? |
| 02:09 | dreen | yes, humans bar any real progress excepting that of technology |
| 02:09 | Lajla | I wirte opague because I pronounce it with a g for some reason |
| 02:10 | Lajla | I did like the addition of Section 31. |
| 02:10 | devn | so anyway, topic |
| 02:10 | devn | clojure |
| 02:10 | Lajla | Clojure is poison to the mind. |
| 02:10 | devn | Lajla: so what is the right thing |
| 02:10 | Lajla | Someone in #schem called it 'a degenerate liso', but those guys are soooo fucking elitist. |
| 02:10 | devn | please...everyone needs to know what you're thinkin |
| 02:10 | devn | you set the bar for all of us |
| 02:10 | Lajla | Like, some guy comes there asking for help and lets it slip through that though he likes scheme, he fears it has no industry potential |
| 02:11 | Lajla | and they start raging at him |
| 02:11 | Lajla | And completely scare him away |
| 02:11 | Lajla | What is that |
| 02:11 | devn | par |
| 02:11 | devn | unfortunately...par. |
| 02:11 | dreen | perhaps its a fear of theirs |
| 02:11 | devn | lispers are ancient neck-bearded hipsters |
| 02:11 | Lajla | THey just justify every stereotype of scheme programmers being out of touch people with their Ph.D. up their arse who can't accept that their pet language isn't popular. |
| 02:12 | Lajla | But then again, here people's minds are already poisoned from no TCO. |
| 02:12 | devn | Lajla: that's just angry, stupid grad students |
| 02:12 | Lajla | devn, will you dance with me? |
| 02:12 | devn | Lajla: why not? |
| 02:12 | Lajla | On the Mondscheinsonata? |
| 02:12 | Lajla | Nahhh |
| 02:13 | devn | IM A GRAD STUDENT AND I KNOW JAVA SO THIS WHOLE SCHEME THING IS NOT UP MY ALLEY |
| 02:13 | Lajla | Do the Große Fuge |
| 02:13 | Lajla | It suits my mind more. |
| 02:13 | dreen | sometimes i wish i were a grad student |
| 02:13 | devn | kids in school, man. smart guys, but often a very limited perspective |
| 02:13 | devn | dreen: i wished that. then i did it. |
| 02:14 | devn | then i didn't ever want to do that again. |
| 02:14 | dreen | yes, power to u! |
| 02:14 | Lajla | devn, so it's the Große Fuge? |
| 02:14 | devn | Fugue? |
| 02:14 | Lajla | From Beethoven |
| 02:14 | devn | Fugue. |
| 02:14 | Lajla | Only good piece he ever wrote honestly. |
| 02:14 | Lajla | No, Fuge |
| 02:14 | Lajla | German |
| 02:14 | Lajla | Fuge is German for Fugue |
| 02:14 | devn | Why mix languages. You're typing english. |
| 02:14 | devn | Keep your colors within the lines. |
| 02:14 | Lajla | You know it? |
| 02:15 | Lajla | Well, I will call it the Great Fugue then |
| 02:15 | devn | fair play. yeah, I've heard it. You're telling me to "do it"? |
| 02:15 | devn | What the hell does that mean? |
| 02:17 | Lajla | No |
| 02:17 | Lajla | dance on me with that. |
| 02:17 | dreen | i wish to interact with good programmers, so that i may pick up some info here and there |
| 02:17 | Lajla | How could you ever ignore me, we are having so much love between us already. |
| 02:18 | Lajla | I am the best in the business save for the microsoft CSA |
| 02:18 | Lajla | Interact with me. |
| 02:18 | dreen | yes, i realise that now |
| 02:18 | Lajla | I am like Eliza, I respond. |
| 02:18 | Lajla | realize* |
| 02:18 | Lajla | realise is an abomination |
| 02:18 | Lajla | THe OED condemns it and for good reason |
| 02:18 | dreen | i am not American..! |
| 02:18 | Lajla | It's a 60-year old or so misspelling. |
| 02:18 | Lajla | Doesn't matter. |
| 02:18 | Lajla | It's silly |
| 02:18 | dreen | its zilly! |
| 02:19 | Lajla | it derives from a mistaken idea that since 'analyse' et cetera is British (and etymologically correct) then 'realise' should also be British |
| 02:19 | devn | Lajla: I want to help you, man. |
| 02:19 | devn | You are like: "Gotta watch Wapner" |
| 02:19 | Lajla | that's where it's wrong, because it's only half a century old and there is no etymological reason for the s there whatsoever. |
| 02:19 | Lajla | It is pronounced with a /z/ and etymologically it derives from the Greak zeta in the form. |
| 02:19 | devn | You need to settle down. |
| 02:19 | Lajla | devn, what's that? |
| 02:19 | devn | You're hyper. |
| 02:19 | dreen | ah, well in that case i will be sure to inform my fellow countrymen |
| 02:20 | devn | Manic even. |
| 02:20 | Lajla | No I'm not |
| 02:20 | Lajla | I'm quite stoic emotionally |
| 02:20 | Lajla | it comes with the paranoid schizophrenia |
| 02:20 | devn | Emotional stoicism does not make a stoic. |
| 02:20 | devn | Quite the opposite. |
| 02:20 | dreen | i was stoic once, in Ultima Online |
| 02:21 | devn | oh god...bringin' up UO |
| 02:21 | devn | there goes the party |
| 02:21 | devn | I played UO like a fiend for 3 years |
| 02:21 | devn | until I got banned for duping gold |
| 02:21 | dreen | lol |
| 02:21 | Lajla | dreen, good |
| 02:21 | Lajla | You carry on the torch for etymological perfection |
| 02:21 | Lajla | Or should I say |
| 02:21 | Lajla | oetymological perfection |
| 02:22 | Lajla | YEEES |
| 02:22 | Lajla | I should. |
| 02:22 | devn | Lajla: it's awkward to congratulate yourself. |
| 02:22 | Lajla | Oh wait, I shouldn't |
| 02:22 | Lajla | I wonder where I got that from. |
| 02:22 | devn | im not trying to be a jerk, but you should know that's weird |
| 02:22 | Lajla | I am going to spell it like oeconomy henceforth |
| 02:22 | Lajla | aeternal |
| 02:22 | Lajla | aequality |
| 02:22 | Lajla | YES |
| 02:22 | Lajla | Perfection |
| 02:22 | Lajla | paedantic |
| 02:22 | devn | => false |
| 02:23 | devn | you are ego stroking |
| 02:23 | devn | it's onanistic ridiculosity |
| 02:23 | Lajla | aequal relates to similarity, equal relates to horses. |
| 02:23 | Lajla | I like it. |
| 02:23 | Lajla | YES |
| 02:23 | Lajla | Perfection |
| 02:23 | dreen | how does one know if ones code is crappy when one does not have anyone else to review it? |
| 02:23 | Lajla | Sweet sweet etymological perfection |
| 02:23 | Lajla | dreen, gimme. |
| 02:24 | devn | Lajla: I'm glad we had this talk, but you have to go back to ignore. Your self-absorption is without equal. You ruin conversations by "enhancing" then, and worst of all you think it comes from a good place. |
| 02:24 | devn | Lajla: See you in the future maybe |
| 02:24 | Lajla | aequal* |
| 02:24 | Lajla | Join me in my quaeste |
| 02:24 | Lajla | for etymological perfection |
| 02:25 | Lajla | unrivalled paedentry shall be hours. |
| 02:25 | Lajla | ours* |
| 02:25 | devn | quiet. |
| 02:25 | Lajla | I should spell dwarf like dwargh |
| 02:25 | Lajla | YES |
| 02:25 | devn | nice. |
| 02:25 | devn | dreen: by shipping it |
| 02:25 | dreen | hmm, i'm afraid it's not Clojure... |
| 02:26 | devn | i'm afraid this is the clojure channel |
| 02:27 | dreen | indeed it is, which is why i made the previous statement |
| 02:27 | devn | drewr: if you want a review post a gist |
| 02:27 | devn | eerrr dreen* |
| 02:28 | dreen | mmh, yes good idea |
| 02:33 | dreen | you guys do Clojure for a living? |
| 02:37 | muhoo | this is probably the ugliest code around, but it makes me so happy https://refheap.com/paste/988 |
| 02:38 | dreen | I wish i could rewrite my current in Clojure immediately |
| 02:38 | dreen | *project |
| 02:40 | raek | muhoo: you can have :when clauses in the for to eliminate the call to filter |
| 02:41 | muhoo | ah, of course, thanks! |
| 02:41 | raek | (for [o [(:objects (s3/list-objects cred "yeah-uhhuh"))] :let [f (:key o)] :when (= "m4v" (last (.split #"\." %))] ...) |
| 02:42 | raek | sorry, remove the square sparens around (:objects ...) |
| 02:46 | muhoo | interesting, the :let. |
| 02:46 | muhoo | i ended up with (for [f (map :key (:objects (s3/list-objects cred "yeah-uhhuh"))) :when (= "m4v" (last (.split #"\." f)))] f) |
| 03:02 | devn | dreen: do rewrite it in clojure, and then show people how nice it is. |
| 03:03 | dreen | yes, i would love to, but i dont think my skills would allow me to do it in a decent amount of time |
| 03:04 | dreen | i have had to struggle for a long time just to create my current version |
| 03:49 | muhoo | hmm, there doesn't appear to be a way in clj-aws-s3 to make the thing i put be public ACL |
| 03:49 | muhoo | or to set its mime type |
| 04:01 | muhoo | and i'm sure this has already been done https://refheap.com/paste/989 |
| 04:03 | muhoo | i decided i do not like (-> ) anymore |
| 04:03 | muhoo | makes it too hard to debug stuff. |
| 04:04 | muhoo | i'd rather have (stuff (like (this instead))) |
| 04:06 | dreen | -> makes my ears bleed |
| 04:06 | muhoo | it's nice in dealing with java, i found |
| 04:06 | muhoo | because of all the (-> Foo. .bar Baz. .doh) crap |
| 04:07 | dreen | i c |
| 04:07 | muhoo | but for clj, i'd rather have parens, thankyouverymuc |
| 04:08 | muhoo | in the repl, if i build stuff like (foo (bar baz)), it makes it easier to copy out just (bar baz) and see what that does, then try (foo (bar baz)) and find where it breaks |
| 04:11 | muhoo | my single, sad, pathetic, but still wildly successful (to me) first useful clojure program: https://refheap.com/paste/990 |
| 04:12 | dreen | ah to make a useful program@ |
| 04:13 | muhoo | it only took me 4 hours :-) |
| 04:13 | vijaykiran | muhoo: instead of two br use CSS :P |
| 04:13 | muhoo | oh gawd, you're making me deal with css too? :-) |
| 04:13 | vijaykiran | sooner or later - you need to :) |
| 05:12 | y3di | wow reading clojure code is not hard at all, as long as its indented properly |
| 05:14 | lucian | y3di: that's part of why i'm torn between my hatred for reader macros and my love for python's beautiful syntax |
| 05:22 | y3di | is there a place where I can see the reason of why vectors were used instead of lists in certain language/syntatical constructs? |
| 05:23 | y3di | such as with let and def |
| 05:23 | y3di | or fn args |
| 05:24 | lucian | for things that aren't function calls, generally |
| 05:24 | lucian | in clojure you can be pretty confident that in (foo 1 2), foo is a function-like thing (function, macro, etc.) called with 1 and 2 as arguments |
| 05:24 | llasram | y3di: or things which aren't "function call like," although the convention is arguably not entirely consistent |
| 05:25 | lucian | so in (let [a 1]) it's clear that a isn't being called with 1 as an argument |
| 05:25 | lucian | some use [ ] in scheme for the same effect, but there it's just synonymous with ( ) |
| 05:26 | llasram | And in `ns' forms most people use lists for the (:require) etc components, because although it isn't actually function call itself, it evokes the effect of calling the analogous (require) etc functions |
| 05:27 | y3di | interesting, so essentially its just to emphasize that the first element of a [] is not a function-like entity |
| 05:28 | lucian | basically, yeah |
| 05:28 | lucian | and also, the language has a bunch of literals, why not use them? |
| 05:28 | lucian | just like { } is used for metadata, etc |
| 05:28 | y3di | thats fair, now that i understand the reasoning, it makes sense |
| 05:29 | y3di | i think it increases readability too |
| 05:29 | lucian | it does |
| 05:29 | lucian | at least for me, i'm not coming from lisp |
| 05:34 | kenneth | hey there, having some trouble |
| 05:35 | kenneth | i'm translating a ruby ML algo to clojure, for practice, and it's spitting out funky values… but i can't figure out where i fucked up. https://gist.github.com/599518c1ca241ddfbafe … ideas? |
| 05:36 | kenneth | output is -1655912.1029067077, expected 2.4 |
| 05:36 | kenneth | problem seems to be in the gradient-descent function |
| 05:37 | kenneth | all other functions when tested with the same args in ruby and clj seem to return correct values, but gradient descent spits out random thetas |
| 05:37 | ejackson | kenneth: try to factorise it and test small sections |
| 05:40 | kenneth | okay, will try that tomorrow morning. think i'm gonna head to bed now |
| 05:41 | kenneth | gotta wake up hella early tomorrow, shouldn't be awake atm |
| 05:44 | y3di | so as i try to wrap my head around how clojure (and in extension lisp) works I come across some questions. such as: |
| 05:46 | y3di | when you bind a function with let, inside another function, wouldnt that be slower than say, defining the function outside the other function and then just calling it in the function |
| 05:46 | y3di | that way youre not constantly creating the first fn everytime you call the outer function. or am i misunderstanding how lisp works |
| 05:49 | raek | y3di: the cost of creating a function value is quite low |
| 05:49 | raek | should be in the same order of magnutide as boxing a number |
| 05:49 | raek | the function is only compiled once, so you don't end up analyzing the code each time you evaluate a (fn ...) expression |
| 05:51 | raek | if the function does not use any free variables, then only one instance of it is needed. I don't know wheter the clojure compiler performs that optimization |
| 05:52 | llasram | In the JVM implementation there's a class defined at compile time for each lexical location your code defines a function. At runtime to create a particular instance of that function, it just instantiates the class. So it has the same performance implications of using any other objects |
| 05:55 | y3di | word, thanks guys |
| 06:03 | y3di | is there/how do you do block level commenting? i.e. /* */ |
| 06:04 | TEttinger | y3di, I use (comment .......) |
| 06:04 | TEttinger | but there is probably a better way |
| 06:05 | llasram | The `comment' form isn't really ideal, because what's inside the form still does need to parse (parens balance, etc) |
| 06:06 | llasram | So you can comment out code with it, provide code examples, etc, but can't really make *comments* with it |
| 06:06 | llasram | For "block comments," you just comment every line in your comment |
| 06:07 | llasram | Same situation as in Python, Ruby, etc |
| 06:15 | y3di | python has the """ """ hack tho |
| 06:17 | llasram | Yeah, but you typically only use it for docstrings in practice. In Clojure you just use the regular string syntax for docstrings, with the minor annoyance of needing to escape '"' characters |
| 06:18 | zamaterian | Does anyone know when Clojure Programming Rough cuts version get updated to the final version = |
| 06:18 | zamaterian | s/=/? |
| 06:46 | zamaterian | y3di, (comment ... ) returns nil, another way is to use the #_ then the reader ignores the following for ex: (prn "test" #_(str 3434 dfdf)) |
| 07:11 | tscheibl | cool.. now I can remove some more Java interop from my projects :) |
| 07:42 | dfgdfgdfg | is there a image manipulation library in clojure or any interface for imagemagick? |
| 07:43 | dan_b | '"... I knowm, I'll use imagemagick". Now they have two problems' |
| 07:43 | dan_b | (sorry) |
| 07:43 | nachtalp | :) |
| 07:45 | dan_b | (no, I can't actually answer your question. but my Ruby experience with imagemagick has left me reluctant to go anywhere near it) |
| 08:00 | NoICE | bindy: hi |
| 08:01 | llasram | dfgdfgdfg: Java has a bunch of basic image-manipulation stuff in the standard library. Depending on what you're doing, might be enough |
| 08:15 | dfgdfgdfg | llasram: yup, I am using Jmagick for java..just wanted to check if there is something specifically in clojure for that |
| 08:15 | llasram | Ah, gotcha |
| 08:18 | tscheibl | It's always nice when you don't have to use Java interop :) |
| 08:21 | llasram | Beats doing Java interop in Java :-) |
| 08:26 | TEttinger | can anyone recommend a nice-looking GUI framework for Clojure (preferably written in Clojure, not Java, but I'm not picky)? HTML as markup would be OK too |
| 08:26 | TEttinger | There's Substance/Insubstantial LaF for Swing |
| 08:29 | TEttinger | honestly I would be OK with just an easy-to-use rich-text-display widget in some GUI framework... |
| 08:29 | lucian | TEttinger: there's seesaw |
| 08:30 | lucian | alternatively, you could use a webview |
| 08:30 | TEttinger | lucian, I saw seesaw, it looks good but I don't know how stable it is |
| 08:30 | TEttinger | lucian, webview? |
| 08:30 | lucian | TEttinger: the component browsers use for rendering web pages |
| 08:30 | lucian | you could even just use a browser |
| 08:31 | lucian | and seesaw looks actively developed |
| 08:31 | TEttinger | lucian, I don't have access to a good server, so browser seems sub-optimal |
| 08:31 | lucian | fucking xchat |
| 08:31 | TEttinger | I use Floe IRC on windows :-) |
| 08:32 | lucian | xchat is the least crappy i've found that isn't LimeChat. and limechat is osx-only |
| 08:32 | TEttinger | but yeah if seesaw is decent I can use Substance (maybe Insubstantial now), which makes Swing look pretty excellent |
| 08:33 | nachtalp | lucian: i've used xchat for years without problems... |
| 08:34 | lucian | nachtalp: that doesn't make it not crap :) |
| 08:35 | nachtalp | lucian: if it doesn't cause problems the crap can't be that bad imho :) |
| 08:36 | lucian | the UI is terrible, it forgets things, doesn't automatically remember joined channels ... |
| 08:36 | lucian | i've started writing my own, but it's not usable yet |
| 08:36 | nachtalp | lucian: ic, i just use it as a frontend for dircproxy... |
| 08:37 | lucian | i've considered using it as a frontend for znc, but it wouldn't solve the many UI issues |
| 08:37 | zamaterian | lucian, is it on github ? |
| 08:38 | lucian | zamaterian: bitbucket, but it's really useless atm |
| 08:38 | TEttinger | http://insubstantial.posterous.com/insubstantial-71-release so can lein pull in these maven jars without much trouble? |
| 08:38 | lucian | i had to take a detour in fixing gtk3/twisted bugs |
| 08:38 | nachtalp | lucian: there's always ircII to fall back on ;) |
| 08:39 | TEttinger | I am not really sure how to use lein in an eclipse project with CCW |
| 08:39 | lucian | zamaterian: if you wish to check it out later when it at least does something, https://bitbucket.org/lucian1900/irk |
| 08:40 | zamaterian | thx |
| 08:46 | TEttinger | hmm, does the netbeans clojure plugin have integration with lein? |
| 08:49 | raek | TEttinger: I think CCW got support for lein projects in a very recent version (or in a version that will be released after some days from now) |
| 08:50 | TEttinger | raek, great |
| 08:50 | raek | before that I think people used to create a lein project, run lein deps, create a ccw project and include the jars in lib/ |
| 08:55 | ejackson | blame the French ! |
| 08:55 | ejackson | :P |
| 09:43 | dnolen | does lein-cljsbuild work with lein2 yet? |
| 10:00 | `fogus | pjstadig: Thanks for hitting 1.4 hard lately. It's helping a ton |
| 10:06 | pjstadig | `fogus: no problem :) |
| 10:06 | pjstadig | just need to get some patches applied ;) |
| 10:10 | TimMc | I don't understand why people would migrate their codebase to an unreleased Clojure. |
| 10:11 | TimMc | Unless it is out of the goodness of their hearts? (To find clj bugs before release.) |
| 10:11 | gtuckerkellogg | I have a data structure that I was intending to be a ref to a vector of atoms. Now I realize I may need to grow the vector on both ends, and I *think* I should change the whole structure to a sorted map with integer keys. Does that sound reasonable? |
| 10:11 | dnolen | TimMc: because they were already migrating to 1.3? |
| 10:12 | gtrak` | gtuckerkellogg, maybe an ArrayDeque is what you want? |
| 10:13 | gtrak` | dunno if clojure has an analogue |
| 10:14 | gtuckerkellogg | i think sorted map may be the thing. |
| 10:15 | gtuckerkellogg | i have to be able to modify the atoms at any position, and occasionally grow the beast on both ends |
| 10:15 | gtrak` | interesting post: http://stackoverflow.com/questions/4238973/writing-datastructures-requiring-pointers-references-in-clojure |
| 10:15 | gtrak` | he recommends a zipper in place of a doubly-linked list |
| 10:16 | gtuckerkellogg | ahh, that may be it |
| 10:17 | mefesto | I'm guessing `stencil.core/render-file` only works for files on the classpath. Is this true and if so why not support files outside of the classpath? |
| 10:18 | TimMc | dnolen: So why not migrate to 1.3, which has known bugs, instead of 1.4, which has unknown bugs (and is still moving). |
| 10:18 | dnolen | TimMc: because 1.4 has critical patches for people who were trying to move to 1.3 |
| 10:18 | TimMc | Ah, OK. |
| 10:18 | TimMc | No 1.3.1? |
| 10:19 | TimMc | Or might that be produced after 1.4 is released? |
| 10:19 | gtrak` | we haven't ever had backports yet, have we? |
| 10:20 | dnolen | gtrak`: 1.2.1 I think |
| 10:20 | gtrak` | oh really? i thought that came out before 1.3 |
| 10:23 | gtrak` | 9/23 on 1.3, and before april for 1.2.1 |
| 10:23 | TimMc | So, not a backport? |
| 10:23 | gtrak` | maybe they pulled some stuff in from master before 1.3 was actually released? |
| 10:33 | stuartsierra | 1.2.1 was not a backport but a fix to critical 1.2.0 bugs. |
| 10:41 | pjstadig | moving to 1.3 would be about the same work as moving to 1.4, but 1.3 has some showstopper bugs for us, like the hashing, and RTE wrapping bugs |
| 10:42 | pjstadig | 1.2.1 was mostly about the Keyword.intern stack overflow bug |
| 10:42 | pjstadig | at least that mostly what I wanted when I brought the topic up, but some other stuff got in there too |
| 10:47 | zamaterian | pjstadig, is this the hashing bug ? http://dev.clojure.org/jira/browse/CLJ-829 |
| 10:48 | hiredman | no |
| 10:48 | hiredman | equality was changedin clojure collections |
| 10:48 | hiredman | and hashing wasn't changed to match |
| 10:49 | zamaterian | thx |
| 10:51 | stuartsierra | 1.4.0 is already beta, will hit final release Real Soon Now |
| 10:51 | hiredman | http://dev.clojure.org/jira/browse/CLJ-948 would really make dakrone happy |
| 10:52 | hiredman | (speaking of dakrone) |
| 10:52 | stuartsierra | hiredman: feature enhancement, not going to make it in 1.4 |
| 10:52 | gtrak` | cool story bro |
| 10:53 | hiredman | :/ |
| 10:53 | hiredman | I understand |
| 11:01 | randomnamehere | Hi there |
| 11:02 | randomnamehere | ,(apply (fn [x & y] (= nil (get y x) )) :a {:a nil :b 2})) |
| 11:02 | clojurebot | true |
| 11:02 | pjstadig | zamaterian: http://dev.clojure.org/jira/browse/CLJ-861 |
| 11:02 | hiredman | ,(apply (fn [x & [y]] (= nil (get y x) )) :a {:a nil :b 2})) |
| 11:02 | clojurebot | true |
| 11:02 | randomnamehere | ,(apply (fn [x & y] (= nil (get y x) )) :b {:a nil :b 2})) |
| 11:02 | clojurebot | true |
| 11:03 | randomnamehere | ,(apply (fn [x [y]] (= nil (get y x) )) :b {:a nil :b 2})) |
| 11:03 | clojurebot | #<ArityException clojure.lang.ArityException: Wrong number of args (3) passed to: sandbox$eval117$fn> |
| 11:03 | hiredman | ,(apply (fn [x & y] y) :a {:a nil :b 2})) |
| 11:03 | clojurebot | ([:a nil] [:b 2]) |
| 11:03 | hiredman | ,(apply (fn [x & [y]] y) :a {:a nil :b 2})) |
| 11:03 | clojurebot | [:a nil] |
| 11:03 | hiredman | oh, of course apply |
| 11:03 | randomnamehere | & [y] ? |
| 11:03 | lazybot | java.lang.RuntimeException: Unable to resolve symbol: y in this context |
| 11:03 | TimMc | randomnamehere: Destructuring. |
| 11:04 | `fogus | ,(apply (fn [x & y] (= :FUZZ (get y x :FUZZ) )) :b {:a nil :b 2}) |
| 11:04 | clojurebot | true |
| 11:05 | randomnamehere | ,(apply (fn [x & [y]] (= nil (get y x) )) {:a nil :b 2}) |
| 11:05 | clojurebot | true |
| 11:05 | mr_rm | is anyone using vsclojure plugin? my clojure project does not produce an executable (it's a console app) and i'm not sure if this is expected. it just puts the clj file in bin/Debug |
| 11:05 | randomnamehere | ,(apply (fn [x & [y]] (= nil (get y x) )) a: {:a nil :b 2}) |
| 11:05 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: Invalid token: a:> |
| 11:06 | randomnamehere | mhh |
| 11:06 | randomnamehere | ,(apply (fn [x & [y]] (= nil (get y x) )) :a {:a nil :b 2}) |
| 11:06 | clojurebot | true |
| 11:06 | `fogus | Is this random program mutation? |
| 11:07 | randomnamehere | no ;) |
| 11:07 | `fogus | Only the fittest code shall survive! |
| 11:07 | randomnamehere | ,(apply (fn [x & [y]] (= nil (get y x) )) b: {:a nil :b 2}) |
| 11:07 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: Invalid token: b:> |
| 11:07 | hiredman | randomnamehere: stop using apply there |
| 11:07 | randomnamehere | ,(apply (fn [x & [y]] (= nil (get y x) )) :b {:a nil :b 2}) |
| 11:07 | clojurebot | true |
| 11:07 | hiredman | you know what apply does? |
| 11:07 | randomnamehere | why hiredman ? |
| 11:07 | randomnamehere | apply the fn to ... |
| 11:07 | hiredman | because apply expects the last argument to be a seq |
| 11:08 | hiredman | so you will never get the map |
| 11:08 | randomnamehere | ahh damn! THX |
| 11:08 | randomnamehere | pitfall |
| 11:08 | hiredman | (apply (fn [x] x) {:a 1}) |
| 11:08 | hiredman | ,(apply (fn [x] x) {:a 1}) |
| 11:08 | clojurebot | [:a 1] |
| 11:08 | TimMc | randomnamehere: Not a pitfall, you just didn't read the docs. |
| 11:09 | TimMc | I mean, the docs for apply are *dense*, but it says what it does. |
| 11:09 | randomnamehere | TimMc: Usage: (apply f args) |
| 11:09 | TimMc | &(doc apply) |
| 11:09 | lazybot | ⇒ "([f args] [f x args] [f x y args] [f x y z args] [f a b c d & args]); Applies fn f to the argument list formed by prepending intervening arguments to args." |
| 11:09 | randomnamehere | How should I know that it cand be callled with a map? |
| 11:09 | randomnamehere | cause args are not [args] ? |
| 11:10 | Bronsa | ,(apply + [1 2]) |
| 11:10 | clojurebot | 3 |
| 11:10 | Bronsa | this is what apply does |
| 11:10 | mr_rm | is there a better place to ask about vsclojure behavior? there is no #vsclojure |
| 11:11 | TimMc | &(apply + 1 2 3 [4 5 6]) ; randomnamehere |
| 11:11 | lazybot | ⇒ 21 |
| 11:11 | `fogus | ,(apply (fn [x & [y]] (= 2 (get y x :FUZZ) )) :b [{:a nil :b 2}]) |
| 11:11 | clojurebot | true |
| 11:12 | Vinzent | randomnamehere, (apply f [1 2 3]) <=> (f 1 2 3). But the doc is incorrect (more precisely, arglist is incorrect). I remember I wanted to file an issue about that but then forget :( |
| 11:13 | amalloy | mr_rm: i think they have a mailing list |
| 11:13 | mr_rm | thx amalloy |
| 11:14 | TimMc | ,(meta #'apply) |
| 11:14 | clojurebot | {:ns #<Namespace clojure.core>, :name apply, :arglists ([f args] [f x args] [f x y args] [f x y z args] [f a b c d ...]), :added "1.0", :static true, ...} |
| 11:14 | TimMc | Vinzent: Arglists look fine to me. |
| 11:14 | gtrak` | anyone found a good office-hammock? |
| 11:14 | randomnamehere | So how to get the map in my fn ? |
| 11:15 | randomnamehere | and how to call fn on :b {:a nil :b 2} without apply? |
| 11:15 | TimMc | Just... call it. It's a function, just like apply and +. |
| 11:15 | `fogus | ,(:b {:a 1 :b 2}) |
| 11:15 | clojurebot | 2 |
| 11:15 | hiredman | randomnamehere: clojure is a lisp-1 |
| 11:15 | Vinzent | TimMc, it was changed in 1.3 and become incorrect. Let me grep my logs to find that conversation... |
| 11:16 | hiredman | there is no function-call |
| 11:16 | `fogus | and no spoon |
| 11:17 | randomnamehere | I am doing the #4clojure A nil key task |
| 11:17 | randomnamehere | so I cant |
| 11:17 | randomnamehere | change the (())) |
| 11:17 | TimMc | randomnamehere: In (+ 1 2 3), + is a function. The entire (fn [a b] (* a b)) statement is *also* a function. |
| 11:17 | lucian | randomnamehere: perhaps you should read a book first |
| 11:18 | randomnamehere | I've read programming clojure |
| 11:22 | zamaterian | gtrak, http://www.fatboy.com/gb/shop/product/the-headdemock-black |
| 11:29 | randomnamehere | Solved it, but still wondering about apply don't getting maps |
| 11:30 | hiredman | ,(doc apply) |
| 11:30 | clojurebot | "([f args] [f x args] [f x y args] [f x y z args] [f a b c d ...]); Applies fn f to the argument list formed by prepending intervening arguments to args." |
| 11:31 | hiredman | (cons :b {:b nil :a 1}) |
| 11:31 | hiredman | ,(cons :b {:b nil :a 1}) |
| 11:31 | clojurebot | (:b [:a 1] [:b nil]) |
| 11:31 | Vinzent | TimMc, here it is https://refheap.com/paste/1000 (see mostly end of the paste) |
| 11:32 | Vinzent | randomnamehere, why it don't? ##(apply (fn [one-map another-map] (merge one-map another-map)) [{:a 1} {:b 2}]) |
| 11:32 | lazybot | ⇒ {:b 2, :a 1} |
| 11:33 | randomnamehere | Vinzent: but only if the map is in a seq?! |
| 11:33 | randomnamehere | so it destructs the seq?! |
| 11:35 | Vinzent | randomnamehere, hm, that's what apply is for. It applies a function to a seq of args. You can pass a map too, then it'd be treated as a seq of key-value pairs: ##(apply (fn [x y] x) {:a 1 :b 2}) |
| 11:35 | lazybot | ⇒ [:a 1] |
| 11:38 | randomnamehere | ahhhh! |
| 11:38 | randomnamehere | THX Vinzent |
| 11:38 | Vinzent | randomnamehere, you're welcome |
| 11:38 | randomnamehere | then it'd be treated as a seq of key-value pairs << hard to guess when you are new to clojure |
| 11:40 | TimMc | Vinzent: Ah, tricky. |
| 11:40 | Vinzent | randomnamehere, don't guess, find a good article about seq abstraction! :) |
| 11:58 | dnolen | whoa lein-cljsbuild ROCKS |
| 12:04 | loops | speaking of lein.. i'm following some instructions that say to use lein plugin install.. but it doesn't work and "lein help" doesn't even list plugin as a subcommand :o( |
| 12:05 | loops | okay.. i meant to phrase that as a question, not a bitch ;o) |
| 12:06 | loops | "lein version" --> Leiningen 2.0.0-preview2 on Java 1.6.0_22 OpenJDK 64-Bit Server VM |
| 12:09 | loops | Hmmm.. was remove by Phil Hagelberg without a reason given in the git log.. this is problem with following instructions on da web, always out of date |
| 12:10 | Vinzent | loops, I guess it's replaced by :plugins in your project.clj. Although, I thought it'd be an alternative to lein plugin install, not a complete replacement. |
| 12:11 | loops | Vinzent, yeah, i just discovered #leiningen, so i'll ask in there. The unfort thing is they didn't remove it from the Zsh command completion so i was tricked to think it should still exist |
| 12:11 | randomnamehere | Is there a list of what is new in lein2 ? |
| 12:15 | TimMc | loops: File a ticket, I guess. |
| 12:17 | dnolen | GSoC 2012 application submitted, fingers crossed |
| 12:17 | ejackson | dnolen: good luck! |
| 12:18 | loops | Good luck, hope it's accepted |
| 12:18 | dnolen | hey well good luck to us all, could get some really neat projects out of it. |
| 12:33 | wjc | Hi |
| 12:33 | wjc | I've got a quick question and I can't seem to find the right google search to answer it |
| 12:34 | wjc | I don't get why the two elements of the array aren't the same; (let [[f & a] '(* 5 3)] [(apply * '(5 3)) (apply f a)]) |
| 12:37 | dgrnbrg | What is the fastest, easiest way to transfer lists and maps of strings between python and clojure over a socket? |
| 12:37 | dgrnbrg | I have a clojure daemon that needs to respond to queries from a python client |
| 12:37 | dgrnbrg | or is it easy enough to make a project w/ 1 lein, 2 clj backends? |
| 12:39 | nachtalp | wjc: interestingly, this seems to work: (let [[f & a] [* 5 3]] [(apply * '(5 3)) (apply f a)]) |
| 12:40 | seancorfield | ,(float 1234567890) |
| 12:40 | clojurebot | 1.23456794E9 |
| 12:41 | AimHere | ,(double 1234567890) |
| 12:41 | clojurebot | 1.23456789E9 |
| 12:41 | amalloy | wjc: * is not '* |
| 12:41 | mfex | Hi all, in emacs in the slime-repl; how can I clear the line, for instance after putting the previous expr there with C-p? |
| 12:42 | amalloy | C-a C-k? there's probably a shorter way, but i just use the simple stuff |
| 12:42 | nachtalp | mfex: C-c C-u works for me |
| 12:44 | mfex | amalloy, nachtalp: thanks, those work |
| 12:45 | muhoo | sirc |
| 12:45 | muhoo | that's it, clojure is now my sysadmin tool of choice: (reduce + (map (comp :content-length :metadata) objs)) |
| 12:45 | ibdknox | dnolen, crap I forgot. Is it too late for me to still add a couple projects to the list? |
| 12:46 | dnolen | ibdknox: no you can add projects whenever you want :) |
| 12:46 | ibdknox | awesome |
| 12:46 | ibdknox | I've got a couple of good ones I think |
| 12:46 | ibdknox | applying korma to other datastores, noir-static, more on the game editor I built |
| 12:48 | muhoo | that game editor will have kids climbing over themselves to work on |
| 12:48 | Bronsa | lol |
| 12:49 | seancorfield | nice, zachary has fixed the auto-suggest search box on clojuredocs.org! |
| 12:51 | muhoo | ibdknox: in fact, i'd suggest that the folks at scratch.mit.edu will eventually pick up on it. |
| 12:51 | tmciver | I've been trying to figure out wjc's problem above but can't figure it out. Why doesn't this work: ##(let [[f & a] '(* 5 3)] (apply f a)) |
| 12:51 | lazybot | ⇒ 3 |
| 12:51 | `fogus | seancorfield: If it suggests something other than juxt then it's still broken |
| 12:51 | muhoo | it's the kind of thing i could imagine the media lab at MIT going all in for. |
| 12:52 | Bronsa | tmciver: you are applying the symbol + not the function + |
| 12:52 | ibdknox | muhoo: I came up with some ideas for it that would probably really blow people away. It's possible to flip the editor around and move the projection to edit the code :D |
| 12:52 | ibdknox | `fogus: lol, well done :p |
| 12:52 | `fogus | TimMc: Symbol looks itself up in 5, can't find it and returns 3 |
| 12:52 | muhoo | ibdknox: that's fantastic. and why wouldn't it? a recorder tool. |
| 12:52 | Bronsa | ,(let [[f & a] (list * 5 3)] (apply f a)) |
| 12:52 | clojurebot | 15 |
| 12:53 | ibdknox | you could also theoretically draw the path you want |
| 12:53 | ibdknox | and have it work it out backwards |
| 12:53 | ibdknox | within reason |
| 12:53 | muhoo | you'll have written macromedia multimedia studio. in clojurescript |
| 12:53 | muhoo | didn't victor demo that? |
| 12:53 | muhoo | where he made that leaf fall? |
| 12:53 | tmciver | `fogus: I'm not sure I understand you. symbol looks itself up in 5? |
| 12:53 | Iceland_jack | Has there been any Lisp that is homoiconic w.r.t. something other than lists? |
| 12:53 | ibdknox | I'm not sure that that translated to code |
| 12:53 | Iceland_jack | *have |
| 12:54 | technomancy | Iceland_jack: maybe dylan? |
| 12:54 | `fogus | timciver: Symbol looks itself up in 5, can't find it and returns 3 (sorry wrong name last time) |
| 12:54 | Iceland_jack | technomancy: hm, Dylan isn't really homoiconic |
| 12:54 | muhoo | ibdknox: good point. but yes, i see how it could. |
| 12:54 | technomancy | forth/factor are supposed to be homoiconic too |
| 12:54 | ibdknox | muhoo: that's literally recording a set of positions, this is something a bit different, and unfortunately much harder lol |
| 12:54 | zamaterian | tmciver, (let [[f & a] '(* 5 3)] [(apply * [5 3]) (apply (eval f) a)] ) |
| 12:54 | Iceland_jack | e.g. {:fn * :bdy [10 15]} ⇒ 150 |
| 12:54 | muhoo | ibdknox: well, you could sidle up alongside it, by stuff like starting with ability to record x,y positions |
| 12:55 | muhoo | eventually it could evolve |
| 12:55 | `fogus | ##(let [[f & a] `(~* 5 3)] (apply f a)) |
| 12:55 | lazybot | ⇒ 15 |
| 12:55 | muhoo | ibdknox: i teach a class for kids in programming using scratch. so this stuff is very interestng to me. |
| 12:55 | tmciver | zamaterian: interesting. |
| 12:56 | ibdknox | muhoo: cool :) |
| 12:56 | muhoo | ibdknox: lately i've started teaching the more advanced students javascript, since they've kinda outgrown scratch. but they'd love that game editor |
| 12:56 | muhoo | problem is, i can't teach them clojurescript until i LEARN clojurescript :-) |
| 12:57 | ibdknox | well, it would be relatively straightforward to build it in JS |
| 12:57 | amalloy | students - extra credit: teach muhoo clojurescript |
| 12:57 | ibdknox | though to do it "right" you'd need a parser |
| 12:57 | ibdknox | to determine the outermost scope that needs to be re-evaluated |
| 12:57 | tmciver | `fogus: why does this work: (let [[f & a] [* 5 3] ] (apply f a)) but not (let [[f & a] '(* 5 3)] (apply f a))? |
| 12:58 | muhoo | amalloy: hehe. the kids keep me on my toes. the 7th graders doing javascript discovered recursion on their own :-) |
| 12:58 | tmciver | `fogus: what is f bound to in the latter case? |
| 12:58 | amalloy | tmciver: for the same reason like three people have given |
| 12:58 | amalloy | f is bound to '* |
| 12:58 | `fogus | timciver: quote suppresses evaluation, so f is bound to the *symbol* * not the function clojure.core.* |
| 12:58 | amalloy | and not to * |
| 12:58 | `fogus | what amalloy said |
| 12:59 | tmciver | OK, it's starting to sink in. |
| 12:59 | zamaterian | tmciver, (type '*) vs (type *) |
| 12:59 | amalloy | right. compare: ##(list * 5 3) and ##'(* 5 3) |
| 12:59 | lazybot | (list * 5 3) ⇒ (#<core$_STAR_ clojure.core$_STAR_@d2e2a4> 5 3) |
| 12:59 | lazybot | (quote (* 5 3)) ⇒ (* 5 3) |
| 12:59 | tmciver | tmciver: that's why (eval f) works in the quoted list case. I see. |
| 12:59 | TimMc | Talkin' to yourself again? |
| 12:59 | `fogus | tmciver: Symbols are functions too. They look themselves up in whatever they are given as their first arg. If they cannot do that then they return their second arg |
| 12:59 | tmciver | ha! yup |
| 13:00 | Iceland_jack | this might be equivalent to: {:bdy {:fn map :bdy {:fn partial :body [* 5] [2 3]} :fn *} |
| 13:00 | muhoo | ibdknox: well it's a fascinating project. and i think you may really have another startup on your hands if you wanted one. |
| 13:00 | tmciver | `fogus: Ah! now your earlier statment makes sense. |
| 13:01 | `fogus | ##((symbol a) {'a 42}) |
| 13:01 | lazybot | java.lang.RuntimeException: Unable to resolve symbol: a in this context |
| 13:01 | ibdknox | muhoo: haha well I'm just starting one right now :p Unfortunately, it's on a very different subject :) |
| 13:01 | `fogus | ##('a {'a 42}) |
| 13:01 | lazybot | ⇒ 42 |
| 13:01 | `fogus | ##('a {'zz 42} :not-found) |
| 13:01 | lazybot | ⇒ :not-found |
| 13:02 | tmciver | ##('a {'a 42} :not-found) |
| 13:02 | lazybot | ⇒ 42 |
| 13:02 | tmciver | OK. |
| 13:02 | muhoo | ibdknox: that's ok. someone will do it. or it'll be an open source project, especially if you can get it into GSoC. |
| 13:02 | tmciver | Thanks all for humoring me. |
| 13:02 | `fogus | tmciver: keywords do the same thing |
| 13:03 | ibdknox | I'd definitely love to really work on it |
| 13:03 | tmciver | `fogus: Yeah, I'm very familiar with the keyword case, but symbols are used infrequently for that kind of thing I completely missed it. |
| 13:03 | ibdknox | Ultimately, I'd like to go down a similar path to what Bret did. I'm all about interfaces and enablement more than anything. |
| 13:03 | tmciver | `fogus: I do recall reading about once now though. |
| 13:04 | muhoo | ibdknox: i did a little research into game engines for js. i didn't find any that would have worked for what we were trying to do. |
| 13:05 | muhoo | a lot of them were very expensive, so there is a market for it. |
| 13:06 | muhoo | (well, very expensive for a public school district, which macroexpands out to "not free") |
| 13:06 | randomnamehere | leaving, thx for your help |
| 13:09 | dnolen | ibdknox: man lein-cljsbuild is crazy, just started really looking at it today |
| 13:10 | `fogus | dnolen: crazy awesome or crazy crazy? |
| 13:10 | dnolen | `fogus: crazy awesome |
| 13:10 | ibdknox | dnolen: he's done a good job with it :) You should check out noir-cljs too, it has the instant compilation stuff that lets you do my game thing from emacs/vim |
| 13:10 | ibdknox | dnolen: we're at the point now where the acquisition story is in a good place |
| 13:11 | ibdknox | still some weirdness with the compiler when it gets AOT'd, but otherwise things seem ok |
| 13:11 | dnolen | ibdknox: cool, I will. I was pretty sure lein was flexible enough to be a general solution for CLJS dev, lein-cljsbuild is proof |
| 13:11 | muhoo | is that like "barbarians at the gate"? |
| 13:11 | dnolen | ibdknox: no one should use the clojurescript jar directly |
| 13:11 | ibdknox | muhoo: just being able to get cljs working on your machine with other libraries |
| 13:12 | ibdknox | dnolen: except for people like me doing noir-cljs ;) |
| 13:12 | dnolen | ibdknox: yeah :) |
| 13:12 | muhoo | what's wrong with using the clojurescript jar? |
| 13:12 | dnolen | ibdknox: so lein-cljsbuild jar will package up your cljs and macros conveniently? |
| 13:14 | dnolen | muhoo: same problems you encounter with using the clojure.jar directly. |
| 13:16 | ibdknox | dnolen: I haven't looked at that yet. Just generally you can use lein jar to package cljs projects. That's what I do now |
| 13:16 | muhoo | i haven't had problems using the clojure.jar directly. though i use lein repl almost exclusively lately. |
| 13:17 | dnolen | muhoo: yes, it works for simple things. |
| 13:21 | ibdknox | dnolen: any thoughts on where the game editor should go in the list? |
| 13:21 | dnolen | ibdknox: feel to create a new section |
| 13:37 | ibdknox | lol |
| 13:37 | ibdknox | several of my ideas have a "Skill level: medium to insane" |
| 13:38 | hiredman | clojurebot: clojure hermitage is when you take a year of hammock time after cashing in on your startup |
| 13:38 | clojurebot | Roger. |
| 13:39 | ibdknox | I need to get in on that bandwagon |
| 13:40 | ibdknox | dnolen: k, ideas added |
| 13:41 | dnolen | ibdknox: thx! |
| 14:21 | mstump | how can I convert two vectors into a vector of tuples [:a :b :c] [1 2 |
| 14:21 | mstump | 3] => [[:a 1] [:b 2] [:c 3]] |
| 14:22 | ibdknox | ,(map vector [:a :b :c] [1 2 3]) |
| 14:22 | clojurebot | ([:a 1] [:b 2] [:c 3]) |
| 14:22 | TimMc | aka transpose |
| 14:23 | ibdknox | ,(doc transpose) |
| 14:23 | clojurebot | Pardon? |
| 14:24 | Vinzent | mstump, are you sure you don't want zipmap? |
| 14:24 | mstump | oh, that was simple enough |
| 14:24 | mstump | i don't want a map, i'm feeding values into a function |
| 14:25 | mstump | thanks for the answer |
| 14:26 | TimMc | clojurebot: transpose is <reply>(def transpose (partial map vector)) |
| 14:26 | clojurebot | Ik begrijp |
| 14:27 | amalloy | ~zip |
| 14:27 | clojurebot | zip is not necessary in clojure, because map can walk over multiple sequences, acting as a zipWith. For example, (map list '(1 2 3) '(a b c)) yields ((1 a) (2 b) (3 c)) |
| 14:30 | ckirkendall | anyone have any pointers on debugging macros in clojurescript? |
| 14:30 | gfredericks | ckirkendall: can't you macroexpand them like a clojure macro? |
| 14:31 | ckirkendall | I can in clojure just fine but when the form comes in from clojurescript I am trying to see diffrences. |
| 14:32 | ckirkendall | In particular I don't no how to get the namespace of symbols in the form |
| 14:34 | ckirkendall | anyone have any ideas how to tell the namespace of a symbol inside a ClojureScript macro? |
| 14:37 | zamaterian | ckirkendall, can you use meta ? |
| 14:39 | ckirkendall | zamaterian: haven't tried that but will now |
| 14:41 | hiredman | ckirkendall: if a symbol has a nemspace component you can call namepsace on it |
| 14:42 | hiredman | ,(map namepsace '(a a/b)) |
| 14:42 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: namepsace in this context, compiling:(NO_SOURCE_PATH:0)> |
| 14:42 | ckirkendall | even if the form is being passed in from clojurescript? |
| 14:42 | hiredman | ,(map namespace '(a a/b)) |
| 14:42 | clojurebot | (nil "a") |
| 14:42 | hiredman | "passed in from clojurescript" means what? |
| 14:43 | hiredman | clojurescript doesn't have macros, you write macros in clojure, which the clojurescript compiler expands before emitting javascript |
| 14:43 | ckirkendall | hiredman: passed in from the clojurescript compiler. |
| 14:43 | hiredman | it is a regular clojure symbol |
| 14:44 | hiredman | if the symbol has a namespace component you can get it |
| 14:45 | hiredman | I suspect you are operating under the mistaken impression that all symbols "live" in a namespace and some how you can retrieve that |
| 14:45 | ckirkendall | hiredman: that is how I under stand it. |
| 14:45 | hiredman | symbols do not live in a namespace |
| 14:45 | ibdknox | ckirkendall: in cljs you have to fully qualify all of your symbols |
| 14:45 | hiredman | symbols are just names and they may or may not have a namespace component as a sort of prefix |
| 14:45 | ckirkendall | hiredman: no I am not under that impression |
| 14:46 | hiredman | ah, mistunderstood your "that is how I under stand it." |
| 14:46 | hiredman | ok |
| 14:46 | hiredman | well, carry on then |
| 14:46 | ckirkendall | ibdknox: hiredman: here is really the issue I can't print out from inside my macro so I am not sure if what I am passing contains certain information. |
| 14:47 | hiredman | how can you not print out from inside your macro? |
| 14:48 | ckirkendall | hiredman: well that is my issue. The macroexpander in clojurescript is slightly diffrent than the one in clojure. |
| 14:48 | hiredman | ckirkendall: Oh |
| 14:48 | hiredman | sure, the compiler is just spitting in to *out* like a jerk |
| 14:49 | ckirkendall | hiredman: so debugging a problem is a bit more complicated because it seems the system.out is high-jacked by the compiler and I can't set break points. |
| 14:49 | hiredman | you can spit to a file from the macro |
| 14:49 | ckirkendall | hiredman: that is great idea!! |
| 14:49 | ckirkendall | hiredman: thanks |
| 14:50 | hiredman | I do one a day, and today has been a slow day so far |
| 14:50 | ibdknox | lol |
| 14:50 | ckirkendall | lol |
| 14:53 | technomancy | lol |
| 14:55 | amalloy | one great idea a day? where can i buy shares? |
| 14:56 | technomancy | three-lol combo... not bad |
| 14:57 | ibdknox | I'm convinced you guys were lol'ing at me lol'ing |
| 14:58 | ibdknox | I'm pretty sure we nearly created a blackhole there. |
| 14:58 | ibdknox | gotta be careful |
| 15:06 | dgrnbrg | I have a jar file, and I want to enumerate all the symbols in it. How can I do this? |
| 15:06 | dgrnbrg | is there a good way to do so in clojure? |
| 15:07 | ckirkendall | hiredman: it doesn't look like there is meta data on the symbols coming in. |
| 15:07 | ibdknox | dgrnbrg: https://github.com/clojure/tools.namespace |
| 15:08 | dnolen | ckirkendall: you want to examine the ns of symbols during macro-expansion? |
| 15:08 | ckirkendall | dnolen: Do you have any idea how to get the namespace of a symbol in clojurescript from inside a macro? |
| 15:08 | ckirkendall | dnolen: yep |
| 15:08 | dgrnbrg | ibdknox: docs? |
| 15:09 | dgrnbrg | ibdknox: actually, i need it to understand javascript |
| 15:09 | ibdknox | ... |
| 15:09 | dgrnbrg | sorry, jaav |
| 15:09 | ibdknox | oh |
| 15:09 | ibdknox | lol |
| 15:09 | dnolen | ckirkendall: the standard functions should just work far as I know. |
| 15:09 | dgrnbrg | like, i have apache commons math |
| 15:09 | ckirkendall | dnolen: trying to mock a function using a macro and having very little luck. |
| 15:09 | dgrnbrg | and I want to get all the classes, methods, and fields, given the jar |
| 15:09 | ckirkendall | dnolen: mock as in using goog.testing to mock a function. |
| 15:10 | dnolen | ckirkendall: sure, but again, vars resolve in the usual way as far as know. if they don't it's a bug. |
| 15:11 | dgrnbrg | ibdknox: do you know if the clojure runtime classpath patching allows loaded classes to be seen via class.forName? |
| 15:12 | ckirkendall | dnolen: not sure I follow? |
| 15:12 | ibdknox | no idea, I haven't ventured into Java land much from Clojure directly |
| 15:13 | ckirkendall | dnolen: inside the macro I need to return the following (.createMethodMock ns sym) I was hoping to pull the namespace off the sym. |
| 15:13 | ibdknox | ns flows weirdly through the compiler |
| 15:14 | ibdknox | in my experience |
| 15:14 | ckirkendall | dnolen: I may have to rethink what I am doing to push more into clojurescript and less in the macro. |
| 15:14 | dnolen | ckirkendall: you want the macro to expand to contain the current namespace? |
| 15:15 | dgrnbrg | Does clojure include asm3 or asm4 on the classpath? |
| 15:15 | ibdknox | if it's just the current you can use *ns*, but I think he wants it for arbitrary symbols |
| 15:15 | ckirkendall | dnolen: I want symbols defined in the form being passed to have namespace data attached. |
| 15:16 | dnolen | ckirkendall: you have to be more clear. that information is there at macro expand time - do you need it at CLJS runtime? |
| 15:17 | ckirkendall | dnolen: ok I am confused? how I do I get the namespace of a symbol inside a form being passed to the macro. |
| 15:17 | dnolen | ckirkendall: in the standard way |
| 15:17 | ibdknox | ckirkendall: can you put up your code? That would frame the question better |
| 15:20 | darq | Hello. Can someone tell me why this macro works when I call it directly but fails when using a bound value. P.S (that's my first macro:) https://refheap.com/paste/1004 |
| 15:21 | ckirkendall | dnolen: when I call namespace on cljs symbol being passed to the macro I get nil |
| 15:22 | ibdknox | darq: mlist is a symbol |
| 15:22 | ckirkendall | dnolen: I will try to simplify the test case and post a gist but its going to take a bit |
| 15:23 | ibdknox | darq: in your second example, you're doing the equivalent of (for [tcn 'a] ..) |
| 15:23 | dnolen | ckirkendall: ah this might be true - but yes make a simple test case and open a ticket. |
| 15:24 | ckirkendall | dnolen: ok, will do - in the mean time I will change my approach. |
| 15:25 | ibdknox | dnolen: fwiw, my screwing around seemed to indicate ns metadata wasn't being utilized |
| 15:25 | dnolen | ibdknox: well ns metadata can't survive so it's all stored in a namespaces atom - it's there just not on the vars (which don't exist at runtime) |
| 15:26 | ibdknox | right |
| 15:26 | ibdknox | ok, so my understanding is correct then |
| 15:29 | Raynes | Yay. RefHeap got its 1000th paste last night. |
| 15:32 | mrBliss | ,(let [prim-v (vector-of :long 1 2 3 4), v (vector 1 2 3 4)] (time (dotimes [_ 1e7] (get prim-v 3))) (time (dotimes [_ 1e7] (get v 3)))) |
| 15:32 | clojurebot | "Elapsed time: 4401.492 msecs" |
| 15:32 | clojurebot | "Elapsed time: 3302.558 msecs" |
| 15:33 | mrBliss | ,(let [prim-v (vector-of :long 1 2 3 4)] (time (dotimes [_ 1e7] (get prim-v 3)))) |
| 15:33 | clojurebot | "Elapsed time: 5073.192 msecs" |
| 15:33 | mrBliss | ,(let [v (vector 1 2 3 4)] (time (dotimes [_ 1e7] (get v 3)))) |
| 15:33 | clojurebot | "Elapsed time: 1778.927 msecs" |
| 15:34 | candera | How do I reify a nested interface? |
| 15:34 | candera | I've got interface IFoo { interface IBar { int apply(int device) } } |
| 15:34 | mrBliss | ^ I expected the vector of primitives to be faster than the regular vector. What am I doing wrong? |
| 15:34 | candera | I want to reify IBar and implment apply. |
| 15:35 | candera | mrBliss: Try aget instead? |
| 15:35 | TimMc | vector-of isn't an array |
| 15:35 | candera | Sorry - just realized I'm probably jumping in without reading the whole question. |
| 15:36 | mrBliss | candera: for a nested class you have to use Outer$Inner, maybe it works with interfaces too |
| 15:36 | candera | I did try that. No love. |
| 15:36 | Raynes | amalloy: Holy crap. A Clojure mailing list question about clojail. |
| 15:37 | candera | CompilerException java.lang.IllegalArgumentException: Can't define method not in interfaces: apply, compiling:(NO_SOURCE_PATH:46) |
| 15:37 | candera | Which at least is better than the ClassNotFound exception I was getting before |
| 15:38 | mrBliss | candera: have a look at clojure.lang.IFn to find out which methods you need to implement (applyTo(..) in your case). |
| 15:38 | amalloy | candera: IFoo$IBar is correct, you probably have the general reify syntax wrong now rather than the specific inner-class syntax |
| 15:38 | TimMc | candera: Can you pastebin your reify form? |
| 15:39 | Raynes | TimMc: You are dying without a verb for refheap, aren't you? |
| 15:39 | TimMc | I am. |
| 15:39 | TimMc | Raynes: If you don't give me a good verb, I'm going to switch to saying pastebin.com as a verb. |
| 15:39 | jodaro | can't you just use refheap as a verb |
| 15:39 | jodaro | as is? |
| 15:39 | jodaro | "can you refheap it?" |
| 15:39 | Raynes | I've had a few ideas. "heap it" "ref it", but I never found one everyone liked. |
| 15:40 | mrBliss | throw it on the RefHeap |
| 15:40 | Raynes | toss it on the heap |
| 15:40 | Raynes | :P |
| 15:40 | Raynes | Toss it on the (ref)heap. |
| 15:40 | TimMc | pile that shit |
| 15:40 | jodaro | heap this |
| 15:40 | jodaro | don't heap me, bro |
| 15:40 | candera | Duh. Forgot the this pointer. Amazing how asking the question suddenly makes the idiocy jump out. |
| 15:41 | TimMc | candera: Ah, the explicit "this", yeah. |
| 15:41 | candera | mrBliss, amalloy, TimMc: thanks! |
| 15:41 | Raynes | Idiocy? :\ |
| 15:41 | candera | My idiocy at forgetting it. |
| 15:41 | Raynes | You're not an idiot, man. <3 |
| 15:41 | Raynes | You're human. |
| 15:42 | candera | Those are not mutually exclusive in my case. ;) But I thank you. |
| 15:42 | Raynes | It isn't your fault you didn't sprout from our pod. |
| 15:43 | mrBliss | ,(let [prim-v (vector-of :long 1 2 3 4), v (vector 1 2 3 4)] (time |
| 15:43 | mrBliss | (dotimes [_ 1e7] (get prim-v 3))) (time (dotimes [_ 1e7] (get v |
| 15:43 | mrBliss | 3)))) |
| 15:43 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: EOF while reading> |
| 15:43 | mrBliss | sorry |
| 15:43 | mrBliss | ,(let [prim-v (vector-of :long 1 2 3 4), v (vector 1 2 3 4)] (time (dotimes [_ 1e7] (get prim-v 3))) (time (dotimes [_ 1e7] (get v 3)))) |
| 15:43 | clojurebot | "Elapsed time: 5163.396 msecs" |
| 15:43 | clojurebot | "Elapsed time: 3186.653 msecs" |
| 15:43 | Raynes | That is a fairly unreliable way of testing time. |
| 15:44 | TimMc | Using an eval bot? Yeah. |
| 15:44 | mrBliss | on my machine the primitive vector is 5x slower than the regular one |
| 15:44 | TimMc | mrBliss: I got the same results locally, running multiple times. |
| 15:44 | TimMc | 3-4 runs for one, then 3-4 of the other |
| 15:45 | mrBliss | I thought a vector of primitives would beat the regular one in speed |
| 15:45 | mrBliss | Using a profiler I found out that most time is spent in clojure.core.Vec.arrayFor and clojure.lang.RT.longCast |
| 15:46 | mrBliss | but why is it being cast? |
| 15:47 | TimMc | mrBliss: Is vector-of a documented feature? |
| 15:47 | TimMc | I remember discovering it recently and being surprised. |
| 15:47 | mrBliss | ,(doc vector-of) |
| 15:47 | clojurebot | "([t] [t & elements]); Creates a new vector of a single primitive type t, where t is one of :int :long :float :double :byte :short :char or :boolean. The resulting vector complies with the interface of vectors in general, but stores the values unboxed internally. Optionally takes one or more elements to populate the vector." |
| 15:47 | mrBliss | since 1.2 |
| 15:48 | TimMc | Huh. |
| 15:48 | mefesto | Anyone know why `stencil.core/render-file` only supports files on the classpath instead of any file? Hoping to avoid having to slurp the file and use `render-string` instead which won't be cached? |
| 15:50 | zamaterian | darq, did you solve you problem ? (defmacro testm [mlist] `(for [tcn# ~mlist] (println tcn#))) |
| 15:53 | amalloy | i believe vector-of is intended to improve size, not speed |
| 15:53 | mrBliss | amalloy: ok, makes sense |
| 15:55 | mrBliss | in my small test a regular vector is 4 times slower than an array and a primitive vector is 20 times slower than an array. |
| 15:56 | mrBliss | I'll just use an array for this (both speed and space are a concern). |
| 16:02 | TimMc | mrBliss: I guess the boxing is happening at retrieval time. |
| 16:03 | TimMc | Pulls a prim out of the store, boxes it for return. |
| 16:04 | darq | zamaterian: yes, but thx:) |
| 16:06 | mrBliss | makes sense. Can you prove it by tweaking my test to run in ~ the same time as the test of the regular vector? ;-) |
| 16:06 | TimMc | nope |
| 16:10 | chouser | (let [x (range 5)] (take 1 x) (realized? x)) |
| 16:10 | chouser | ,(let [x (range 5)] (take 1 x) (realized? x)) |
| 16:10 | clojurebot | false |
| 16:10 | chouser | ,(let [x (range 5)] (first x) (realized? x)) |
| 16:10 | clojurebot | true |
| 16:12 | TimMc | ,(let [x (range 5)] (first x) (realized? (rest x))) |
| 16:12 | clojurebot | #<ClassCastException java.lang.ClassCastException: clojure.lang.ChunkedCons cannot be cast to clojure.lang.IPending> |
| 16:17 | chouser | huh. unfortunate. |
| 16:20 | amalloy | chouser: realized? is allegedly for use with lazy seqs, but really it's no good except for promises |
| 16:21 | amalloy | er, delays? not promises, i guess |
| 16:22 | amalloy | okay, futures, delays, and promises. but for lazy-seqs it is a mess |
| 16:27 | arohner | alexbaranosky: is there a way to print the name of a fact in an around? it would help some debugging |
| 16:29 | Raynes | Wow. |
| 16:29 | Raynes | That sentence was nuts. |
| 16:29 | Raynes | Imagine how that would look to someone who doesn't know midje. |
| 16:30 | arohner | Good thing I'm talking to someone who knows midje :-p |
| 16:40 | dnolen | wow rhickey keynoting RailsConf |
| 16:40 | gtrak` | yea, what's that about? |
| 16:41 | gtrak` | maybe they all want clojure? :-) |
| 16:42 | TimMc | wtf |
| 16:43 | TimMc | I hope he doesn't talk about TDD at all. |
| 16:43 | gtrak` | haha |
| 16:45 | gtrak` | are folks still sore about strange loop? |
| 16:46 | TimMc | Dunno, but that bit did make me uncomfortable. |
| 16:48 | ibdknox | TimMc: you a TDD'er? |
| 16:49 | TimMc | Not exactly. |
| 16:49 | TimMc | But I do advocate for thorough testing of code. |
| 16:49 | TimMc | I find the primary benefit is that it forces me to do better case analysis. :-) |
| 16:51 | ibdknox | it's true |
| 16:51 | dnolen | ibdknox: on a different note - I think the avoiding arguments for arity display will require less work then I thought. Google Closure is pretty smart, we won't have to make many changes. |
| 16:51 | ibdknox | dnolen: sweet |
| 16:53 | ibdknox | dnolen: it's always nice to find out something isn't as hard as you thought it would be :) |
| 16:54 | dnolen | ibdknox: yep |
| 16:54 | gtrak` | i like to think of tests as enforcing a contract |
| 16:54 | ibdknox | dnolen: I haven't looked into it at all yet. Applying for YC, finishing up here at RFZ, and preparing for ClojureWest has kept me busy |
| 16:55 | jbro | I have a leiningen question -- but a warning -- I may be retarded |
| 16:55 | jbro | I'm on Mac OS, installed clojure 1.3.0 from ports and can run clj and get a REPL |
| 16:56 | dnolen | ibdknox: that's cool about YC! More Clojuring in your future I hope :) |
| 16:57 | tremolo | jbro: that wasn't a question :) |
| 16:57 | jbro | I downloaded the leon script, chmod +x, on path etc, but when I try any leon command I get a NullPointerException: see http://pastebin.com/WBhd4Je9 |
| 16:57 | ibdknox | dnolen: lots :) A lot of work in CLJS too I think - doing stuff for tablets |
| 16:57 | jbro | Do I somehow need to tell leon where my clojure.jar is? |
| 16:57 | technomancy | jbro: try 2.0.0-preview2 instead; that's been fixed |
| 16:57 | dnolen | ibdknox: sweeeeet |
| 16:57 | jbro | ok, I will give it a shot |
| 16:58 | technomancy | jbro: where did you get the lein script you're currently using? |
| 16:58 | jbro | techno: from your repo: version 1.7.0 |
| 16:58 | technomancy | jbro: that's not version 1.7.0 |
| 16:59 | jbro | techno: stable branch isn't 1.7.0? |
| 17:00 | jbro | I am downloading from the master branch right now. |
| 17:00 | technomancy | the stable branch is 1.7.0, but the error you pasted only happens in 2.0.0-preview1 |
| 17:00 | jbro | That's odd |
| 17:01 | ibdknox | technomancy: I'm using heroku in my training :) |
| 17:01 | technomancy | ibdknox: o/ |
| 17:01 | jbro | you committed preview2 today? |
| 17:01 | technomancy | last night |
| 17:02 | technomancy | possibly today, depending on your time zone =) |
| 17:02 | jbro | techno: I see, checking I see that it was preview1 that was in my /usr/local/bin |
| 17:02 | jbro | I thought I had copied in 1.7.0, but I must have spaced. preview2 is working |
| 17:02 | jbro | thank you. |
| 17:03 | jbro | now my hair won't catch on fire. |
| 17:03 | technomancy | sweet |
| 17:03 | technomancy | that's the goal |
| 17:03 | jbro | one more question: with clojure 1.3.0, do I now have to include individual namespaces that used to be in clojure-contrib? |
| 17:04 | ibdknox | yes |
| 17:04 | technomancy | clojurebot: what happened to contrib? |
| 17:04 | clojurebot | Well... it's a long story: http://dev.clojure.org/display/design/Where+Did+Clojure.Contrib+Go |
| 17:05 | jbro | right, i see the new namespace mappings, so say I want clojure.math.combinatorics. How do I get it? |
| 17:05 | jbro | can lein install these namespaces? |
| 17:06 | weavejester | jbro: Namespaces of libraries are usually contained in jar files, which can be included in your project.clj file as dependencies. |
| 17:07 | jbro | right, got that, what is the best way to obtain said jars? |
| 17:07 | jbro | clone the repo and build? |
| 17:07 | jbro | lein? |
| 17:07 | clojurebot | lein is http://github.com/technomancy/leiningen |
| 17:07 | tmciver | jbro: you put [org.clojure/math.combinatorics "0.0.2"] in your project.clj file on the :dependencies line. |
| 17:07 | raek | jbro: let lein handle it for you |
| 17:08 | weavejester | Then run "lein deps" to download the jars to your project's lib directory |
| 17:08 | raek | no need to build the projects yourself |
| 17:08 | jbro | raek: that sounds good, does that mean I always have to be in the context of some project so I can reference its project.clj? |
| 17:08 | weavejester | But I believe "lein deps" is automatically triggered by most Lein commands nowadays |
| 17:08 | technomancy | weavejester: it's true; running "lein deps" manually hasn't been necessary since May of 2010 |
| 17:09 | raek | jbro: yes, most things in lein need a project |
| 17:09 | jbro | I see, so that suggests I need some type of "scratch" project to noodle about, no? |
| 17:09 | raek | it's common to do something like "lein new tinkering" and use that project for "project less" stuff |
| 17:09 | jbro | raek: ok |
| 17:09 | raek | you can also use the lein-oneoff plugin |
| 17:10 | jbro | can I tell lein/clojure a class path so I can download the jars I need and always have them available, whether through lein repl or clj? |
| 17:11 | technomancy | clojurebot: clj? |
| 17:11 | clojurebot | Cool story bro. |
| 17:11 | technomancy | come on clojurebot; I know you have a factiod for that. =\ |
| 17:11 | technomancy | jbro: generally clj scripts are best avoided |
| 17:11 | jbro | techno, sorry clj is simply a shell script that launches the clojure repl with rlwrap, that's how macports packages clojure. |
| 17:11 | technomancy | they're just something your distro packager threw together because they didn't realize that clojure is a library rather than a end-user application |
| 17:12 | ibdknox | jbro: yeah, don't use it |
| 17:12 | jbro | I don't really intend to, except for perhaps quick one-off tests |
| 17:12 | jbro | I intend to actually use Emacs/Slime as that is what I use for my lisp development |
| 17:14 | raek | jbro: when you get to setting up slime, only follow the official swank-clojure docs |
| 17:14 | raek | https://github.com/technomancy/swank-clojure |
| 17:15 | jbro | raek: ok, that's sounds good, one of my frustrations with clojure in the distant past was that there were many conflicting instructions on how to get SLIME running |
| 17:15 | weavejester | Do people think wrepl or wepl is a better name for a web-based REPL? |
| 17:15 | weavejester | I'm leaning toward wrepl... |
| 17:15 | jbro | I never did get it working in a way that didn't nuke my Lisp setup |
| 17:15 | weavejester | As it's akin to nrepl |
| 17:16 | ibdknox | I like wrepl lol |
| 17:16 | TimMc | interepl |
| 17:16 | raek | jbro: the first result on google is known to be outdated and misleading |
| 17:16 | ibdknox | weavejester: what's the goal? |
| 17:16 | tmciver | I second wrepl. |
| 17:16 | technomancy | CL compatibility hasn't really gotten any better |
| 17:16 | jbro | raek: thanks I'll stick to the official swank-clojure docs |
| 17:16 | jbro | techno: that's too bad |
| 17:16 | technomancy | I like "wepl" because it sounds like something Elmer Fudd would sy. |
| 17:16 | technomancy | say |
| 17:17 | weavejester | ibdknox: A web-based REPL using XHR to nREPL, with the Ace editor as the prompt |
| 17:17 | TimMc | weavejester: Pronounced "repple" or "dub-repple"? |
| 17:17 | weavejester | TimMc: repple, I think. |
| 17:17 | ibdknox | weavejester: you should take a look at codemirror, I think it has better clojure support |
| 17:18 | technomancy | also "wrepl" is 150% more syllables than "wepl" |
| 17:18 | TimMc | technomancy: That depends, now doesn't it? |
| 17:18 | weavejester | ibdknox: Ah, interrresting! |
| 17:18 | ibdknox | weavejester: it's also worlds easier to use |
| 17:18 | technomancy | TimMc: oh, I guess so |
| 17:18 | ibdknox | weavejester: I've used it for all my stuff |
| 17:18 | TimMc | technomancy: double-you, dubya, and dub |
| 17:19 | weavejester | ibdknox: I should have asked sooner. I'd just gotten ace to auto-expand |
| 17:19 | ibdknox | haha |
| 17:19 | ibdknox | ace is a monster :( |
| 17:19 | weavejester | ibdknox: … Codemirror does everything for me... |
| 17:19 | ibdknox | :) |
| 17:19 | weavejester | ibdknox: Why have I not heard of this library? |
| 17:20 | ibdknox | weavejester: people are pretty dogmatic about ace |
| 17:20 | ibdknox | which is unforunate |
| 17:20 | ibdknox | unfortunate* |
| 17:20 | ibdknox | it's easy to extend too |
| 17:21 | ibdknox | and quite active |
| 17:21 | weavejester | ibdknox: Does it have a read-only mode, do you know? |
| 17:21 | ibdknox | hm, that I'm not sure about |
| 17:21 | ibdknox | you might want to look into the repl stuff that tryclj.com uses |
| 17:22 | weavejester | ibdknox: Ah yes, it does |
| 17:22 | raek | jbro: btw, here's the rationale for why leiningen doesn't use the "stuff all your jars in this directory manually" approach: https://github.com/technomancy/leiningen/wiki/Repeatability |
| 17:23 | dnolen | ibdknox: being able to package up cljs files in jars is actually kinda sweet, already a way more sane workflow then what I normal do which is copy and paste files around. |
| 17:23 | weavejester | ibdknox: I think tryclj.com just uses jquery.console |
| 17:23 | ibdknox | dnolen: definitely, the projects will work with lein checkouts too |
| 17:23 | dnolen | ibdknox: this is awesome |
| 17:23 | weavejester | ibdknox: I don't think that supports a "real" editor. |
| 17:23 | ibdknox | weavejester: ah, probably not |
| 17:24 | jbro | raek: ok, that makes sense. I can live with a "test" project that has my most commonly used namespaces |
| 17:24 | stuartsierra | By the way, it was very useful to us on ClojureScript One projects to be able to add arbitrary elements to the classpath. |
| 17:24 | weavejester | ibdknox: Codemirror does support readonly. I'll switch over to it. |
| 17:25 | ibdknox | stuartsierra: do lein checkouts solve the same problem? Or is there something specific you can get that way? |
| 17:25 | technomancy | Clojars users: please log into the web UI to re-hash your passwords: https://groups.google.com/group/clojure/browse_thread/thread/5e0d48d2b82df39b |
| 17:25 | stuartsierra | Specifically, we used a custom Lein plugin to check out sources from Git at specific commit numbers. |
| 17:26 | ibdknox | weavejester: are you just going to have a bunch of editors? It doesn't look like it supports read-only regions |
| 17:26 | stuartsierra | Then :extra-classpaths in project.clj to add those directories to the classpath. |
| 17:26 | ibdknox | stuartsierra: ah, I think you can do the same without the extra-classpaths bit if you use checkouts |
| 17:26 | weavejester | ibdknox: It does have a readOnly option in the manual |
| 17:26 | stuartsierra | ibdknox: cool. Even pin to specific commits? |
| 17:27 | ibdknox | weavejester: yeah for the entire editor |
| 17:27 | weavejester | ibdknox: I figure setting each editor to read-only would be easier than recreating the output as a static div. |
| 17:28 | ibdknox | stuartsierra: yeah, basically whatever you put in there. So if you cloned that specific commit into checkouts, it should just work :) |
| 17:28 | stuartsierra | great |
| 17:28 | raek | technomancy: if I successfully logged in, is it done? |
| 17:28 | technomancy | raek: yep |
| 17:28 | ibdknox | weavejester: yeah, I didn't know if you were trying to do that in a single editor |
| 17:28 | weavejester | ibdknox: Oh yeah. So I have an auto-expanding editor as the prompt. When the user submits the code, it gets set to readOnly, and the output and a new editor are added to the bottom. |
| 17:28 | raek | ok, great! |
| 17:28 | ibdknox | got it |
| 17:28 | ibdknox | weavejester: the VS editor would allow you to set certain regions as readonly, it'd be cool to do something similar in codemirror. You would only need one then :) |
| 17:29 | weavejester | ibdknox: Well, the return value from the REPL doesn't have to be text in a web-based REPL. |
| 17:29 | ibdknox | also true |
| 17:29 | weavejester | ibdknox: And I think it would be tricky to embed images and things in an editor... |
| 17:29 | ibdknox | weavejester: the VS editor supported anything renderable ;) |
| 17:30 | ibdknox | weavejester: probably in this case |
| 17:30 | weavejester | ibdknox: VS? |
| 17:30 | ibdknox | Visual Studio |
| 17:30 | weavejester | ibdknox: oh, right |
| 17:30 | weavejester | I also wanted to have outputs that auto-update. |
| 17:30 | ibdknox | ooo |
| 17:30 | weavejester | Like an atom might be [atom 1] |
| 17:31 | weavejester | And then update as it's changed, like a watch |
| 17:31 | ibdknox | sounds bret victor-ish |
| 17:31 | weavejester | You could then connect that to a graph, and have something update in real time. |
| 17:31 | ibdknox | yep |
| 17:31 | weavejester | I was playing around with the idea of being able to drag a REPL output to a side bar, to double as a watch |
| 17:31 | ibdknox | I'm doing something similar with CLJS |
| 17:31 | ibdknox | minus the pretty interface you're about to describe |
| 17:32 | TimMc | This somehow puts me in mind of my cascade lib... |
| 17:32 | weavejester | ibdknox: Maybe I should write said interface in Clojurescript, and have it independent of the back end. |
| 17:32 | ibdknox | TimMc: hm? |
| 17:32 | TimMc | which maintains a pending-mutation DAG |
| 17:32 | ibdknox | weavejester: :) |
| 17:33 | TimMc | I don't even know how to describe it properly. You tell it "this depends on that, and here's how to recompute it" |
| 17:33 | weavejester | I could also write it in Javascript or Coffeescript, and have it entirely independent, but I'm not sure I need go that far. |
| 17:33 | TimMc | ibdknox: Don't worry about it, that wasn't a well-formed thought. |
| 17:34 | ibdknox | TimMc: I remember the first pass at the docs for the editor, they tried to explain some concepts as "it's a directed acylcic graph" |
| 17:34 | ibdknox | I laughed |
| 17:34 | ibdknox | and immediately rewrote them |
| 17:36 | ibdknox | as a percentage of the programming population, very few know what a DAG is haha |
| 17:36 | ibdknox | TimMc: is that code somewhere? it sounds like it'd be useful |
| 17:40 | TimMc | ibdknox: Looking... it's embedded in one of my projects. ALso needs a rewrite, I think? |
| 17:40 | TimMc | ibdknox: https://github.com/timmc/CS4300-HW3/blob/master/src/timmcHW3/cascade.clj |
| 17:40 | TimMc | Hah, looks like I marked it as GPL. That can be changed. |
| 17:42 | TimMc | "clean" should be renamed "clean!" I guess. |
| 17:43 | TimMc | I also have absolutely no idea why (:gen-class) is in there. |
| 17:48 | dnolen | ibdknox: hmm, lein-cljsbuild doesn't seem to pick up cljs in jars that are included via project.clj, does this just work for you? |
| 17:54 | ibdknox | dnolen: yeah it does, you just need to restart |
| 17:56 | ibdknox | TimMc: interesting |
| 18:01 | TimMc | ibdknox: I'll probably pull that code out this weekend and relicense it. It was *really* useful for the GUI app it's embedded in. |
| 18:01 | ibdknox | cool :) |
| 18:02 | TimMc | ibdknox: The only irritating thing is that the cascade map needs to be stored in a ref or something... |
| 18:03 | TimMc | Oh hell, I should have stored it in an atom -- then I could use swap!. Maybe it doesn't need a rewrite. |
| 18:03 | ibdknox | an atom makes more sense to me |
| 18:03 | TimMc | Yeah, I don't think I knew how to use atoms at the time I wrote it. :-P |
| 18:04 | Raynes | amalloy has forced proper usage of atoms down my throat. |
| 18:05 | Raynes | At the very least, I'm terrified enough of using them incorrectly that I always ask him if I'm doin it rite |
| 18:05 | amalloy | haha |
| 18:05 | TimMc | Raynes: Proper usage, in that you should use them instead of refs when possible, or that you actually should have been using refs? |
| 18:06 | ibdknox | yeah, what are the rules of atom-club? |
| 18:07 | technomancy | huh; leiningen has three atoms in it, two of which are never modified outside user code. |
| 18:07 | ibdknox | I only use refs when coordination matters |
| 18:07 | Raynes | I've had at least 10 atom-based solutions that resulted in non-atomic reads and writes. |
| 18:07 | technomancy | and no other c.l.IRefs apart from vars |
| 18:07 | Raynes | amalloy has called me out on all of them. |
| 18:07 | technomancy | actually all the atoms are modified in user code |
| 18:08 | ibdknox | Noir uses a few for stately thing |
| 18:08 | ibdknox | s |
| 18:08 | TimMc | Hmm, wonder if I can dual-license that code GPL/EPL. |
| 18:08 | amalloy | stately, huh? |
| 18:08 | TimMc | I need to read up on dual-licensing at some point. |
| 18:08 | ibdknox | amalloy: yes, they attend dinners and such at the whitehouse |
| 18:08 | ibdknox | ~rimshot |
| 18:08 | clojurebot | Badum, *tish* |
| 18:09 | raek | GPL and EPL are incompatible, so using it through the GPL licence would be hard, since most libs are EPL |
| 18:09 | raek | or more accurately: GPL does not want to be mixed with EPL |
| 18:09 | TimMc | I believe it doesn't rely on anything except Clojure. |
| 18:10 | raek | was this an application or a library? |
| 18:10 | TimMc | lib |
| 18:10 | TimMc | Dunno if anyone out there actually GPL-licenses Clojure apps or libs. |
| 18:10 | raek | ok, then I can't use your GPL lib in my EPL project... |
| 18:11 | raek | since the GPL places certain demands on the code that it is combined with |
| 18:11 | TimMc | raek: And you can't use a dual-licensed GPL/EPL lib in an EPL project? |
| 18:11 | raek | that you should be able to do |
| 18:11 | raek | since you can use the EPL "version" |
| 18:11 | TimMc | Interesting. Well, I'll have to read up on this stuff. |
| 18:14 | ibdknox | licensing sucks |
| 18:16 | Raynes | ibdknox: We should create the grangerpl. |
| 18:16 | ibdknox | http://en.wikipedia.org/wiki/WTFPL |
| 18:16 | Raynes | Where you may only distribute code that has harry potter references in the comments. |
| 18:16 | TimMc | Every time you create a new license, a lawyer eats a kitten. |
| 18:18 | ibdknox | google is weird |
| 18:18 | ibdknox | apparently this was searched for 11 times: "fetch and ajax chris granger" |
| 18:18 | Raynes | Hey, eye bee dee knocks. |
| 18:18 | ibdknox | why that exact wording? |
| 18:18 | ibdknox | lol |
| 18:19 | Raynes | ibdknox: I sometimes pronounce your nick 'ehbidknocks' |
| 18:19 | clojurebot | No entiendo |
| 18:19 | TimMc | ibid knocks |
| 18:19 | ibdknox | Raynes: sometimes I do too, but don't tell anyone |
| 18:19 | ibdknox | ib'd knocks |
| 18:21 | Scriptor | ibn knocks |
| 18:21 | Raynes | I just pronounce it 'Hermione' sometimes. |
| 18:27 | tsally | why cant I do (require 'clojure.data.xml) from a swank-clojure repl? |
| 18:28 | tsally | do I need to do an additional step to set a library path or something? |
| 18:29 | tsally | nevermind, got it |
| 18:34 | technomancy | windows users: is this still a problem? https://github.com/ato/clojars-web/issues/14 |
| 18:41 | technomancy | courage, gfredericks! |
| 18:41 | qbg | gfredericks: Take these with you: ( ) |
| 18:41 | technomancy | qbg: "it's dangerous to go alone" |
| 18:41 | gfredericks | are these identical? |
| 18:42 | gfredericks | who knew a right paren was just a left paren turned around |
| 18:42 | qbg | Don't cross the sexps |
| 18:42 | gfredericks | okay so I need to go download the el file and add a require and hook into clojure mode and all that? |
| 18:42 | gfredericks | all the googlings about the topic just lead to presumably outdated docs |
| 18:44 | technomancy | M-x package-install paredit |
| 18:44 | ibdknox | gfredericks: I just dropped paredit.vim in bundle directory ;) |
| 18:44 | gfredericks | ibdknox: hush |
| 18:44 | technomancy | then (add-hook 'clojure-mode 'paredit-mode) |
| 18:44 | ibdknox | in my* |
| 18:45 | gfredericks | technomancy: what do I install to make package-install work? :) |
| 18:45 | technomancy | gfredericks: oh, that's emacs 24; if you're on 23 then it's maybe easier to install by hand? |
| 18:46 | gfredericks | man I haven't even heard of emacs 24 |
| 18:46 | technomancy | it's the best! |
| 18:46 | technomancy | it's at least 4.3% better than 23 |
| 18:46 | gfredericks | dang I was about to try to compute that myself |
| 18:47 | gfredericks | &(format "%.2d%%" (* 100.0 (- (/ 24 23) 1))) |
| 18:47 | lazybot | java.util.IllegalFormatPrecisionException: 2 |
| 18:47 | justicefries | I just need to switch from vim to emacs. |
| 18:47 | gfredericks | &(format "%.2f%%" (* 100.0 (- (/ 24 23) 1))) |
| 18:47 | lazybot | ⇒ "4.35%" |
| 18:47 | justicefries | brain -> vim |
| 18:48 | gfredericks | dec'ing a float seems weird |
| 18:48 | justicefries | I love Vim. |
| 18:48 | justicefries | actually I've been told to harass you about efficient vim with Clojure. |
| 18:49 | Raynes | Heh. |
| 18:49 | Raynes | My setup is just crazy simple. I don't have a REPL in my editor because I don't use that part of VimClojure. I might once the nrepl stuff is done, but I'm good with a regular `lein repl`. |
| 18:50 | Raynes | My Clojure setup is just the vim part of VimClojure with fuzzy indent turned on and paredit.vim. |
| 18:50 | Raynes | evil-mode for Emacs is pretty cool. |
| 18:51 | justicefries | HMM. I'm using VimClojure, is fuzzy indent and paredit.vim turned on by default? |
| 18:51 | Raynes | paredit.vim is separate and fuzzy indent is off by default for God knows why. |
| 18:51 | gfredericks | okay here goes... |
| 18:52 | gfredericks | maybe it isn't working |
| 18:52 | gfredericks | I typed a left-paren and got only that |
| 18:52 | Raynes | justicefries: https://refheap.com/paste/1006 |
| 18:52 | technomancy | gfredericks: add-hook only affects new activations of clojure-mode; it's not retroactive |
| 18:52 | technomancy | so M-x paredit-mode in existing buffers |
| 18:53 | gfredericks | technomancy: yeah I closed my buffers for that reason |
| 18:53 | gfredericks | oh hmm |
| 18:53 | gfredericks | doing the M-x the second time seems to have had a different effect |
| 18:53 | gfredericks | probably I messed up reloading my .emacs somehow |
| 18:54 | gfredericks | ah now it's on |
| 18:55 | justicefries | nice. |
| 18:55 | justicefries | nothing else ever seems terribly useful. |
| 18:56 | justicefries | re: VimClojure at least. |
| 18:58 | gfredericks | holy crap look at that thing delete |
| 18:58 | gfredericks | this is like org-mode table editing for s-expressions |
| 18:59 | technomancy | congratulations gfredericks! http://24.media.tumblr.com/tumblr_ls919rY3Kh1qjtesgo1_500.jpg |
| 19:00 | gfredericks | technomancy is the guy at the end of the level who congradulates you and gives you your next mission |
| 19:02 | technomancy | are you asking for a mission? |
| 19:02 | technomancy | because I can totally delegate |
| 19:02 | justicefries | haah |
| 19:02 | gfredericks | what mission comes after learning paredit? |
| 19:02 | technomancy | write a leiningen plugin that makes it easy to sign jars |
| 19:03 | amalloy | NPCs ask you to collect various parentheses they left scattered about the landscape |
| 19:03 | gfredericks | is that the extent of the requirements so far? |
| 19:03 | technomancy | pretty much |
| 19:04 | justicefries | anyone mind referring me to ClojureWest? |
| 19:04 | technomancy | gfredericks: bonus points for uploading the signature to repositories during deployment |
| 19:04 | amalloy | justicefries: you should go to clojure/west, ddue |
| 19:04 | technomancy | though you'd have to set up a local nexus/archiva to test against |
| 19:04 | justicefries | I'm intending to, amalloy |
| 19:04 | justicefries | I'm using clojure in production now. |
| 19:04 | amalloy | i was just taking your request for a referral too literally, see |
| 19:04 | justicefries | ooh no |
| 19:05 | justicefries | there's the "friend of attendee" |
| 19:05 | justicefries | that gives $50 off |
| 19:06 | justicefries | oomph that's an expensive flight. |
| 19:07 | Raynes | amalloy: Are you guys going to C/W? |
| 19:07 | amalloy | no |
| 19:07 | Raynes | Good. I'm not alone. |
| 19:07 | amalloy | we're not going to alabama either, man |
| 19:07 | amalloy | you are alone |
| 19:07 | romanandreg | can someone help me here with cljsbuild and repl-listen, for some reason it doesn't seem to work for me |
| 19:07 | Raynes | Heh |
| 19:07 | romanandreg | ? |
| 19:08 | justicefries | ehh, the videos will be posted pretty quickly. |
| 19:08 | justicefries | maybe I'll hold off. |
| 19:08 | romanandreg | The cljs repl seems to start with the browser environment |
| 19:08 | tremolo | alabama happens to be a bubbling font of clojure activity, within our company anyway :) |
| 19:09 | romanandreg | and I have the xpc from cljs.repl.browser in the browser running |
| 19:09 | romanandreg | once I hit (js/alert "hello") on the cljs repl, it just hangs and doesn't do anything else |
| 19:13 | ckirkendall | romanandreg, what browser are you running |
| 19:13 | romanandreg | FF 10 |
| 19:13 | romanandreg | ckirkendall: 10.0.2 |
| 19:14 | ckirkendall | romanandreg, do you have firebug installed |
| 19:14 | romanandreg | ckirkendall: I'm using the new developer tools from FF |
| 19:14 | romanandreg | I can see there are requests done to localhost:9000 |
| 19:15 | ckirkendall | romanandreg, if you do (.log js/console "test") does it go to the logs |
| 19:15 | romanandreg | ckirkendall: nope, it just hangs the cljs repl… |
| 19:16 | ckirkendall | romanandreg, ok so the browser doesn't seem to be connected. |
| 19:17 | romanandreg | ckirkendall: https://skitch.com/romanandreg2/8e3x1/fullscreen |
| 19:18 | romanandreg | I started trying with google chrome now, |
| 19:19 | ckirkendall | romanandreg, hmmm |
| 19:20 | ckirkendall | romanandreg, I have the same version of firefox. let me try. I haven't tried with firefox. |
| 19:21 | romanandreg | ckirkendall: thanks for the help :-) |
| 19:21 | _ulises | evening |
| 19:24 | jkkramer | technomancy: would you like a patch to show download progress for the maven index? |
| 19:24 | technomancy | jkkramer: yeah, sure thing |
| 19:24 | jkkramer | technomancy: is a dependency on clj-http ok? |
| 19:24 | technomancy | jkkramer: yeah, I think it's already pulled in by repl |
| 19:24 | technomancy | reply |
| 19:24 | jkkramer | ok. pull request coming... |
| 19:26 | ckirkendall | romanandreg, did you have any luck with chrome? |
| 19:27 | technomancy | excellent |
| 19:27 | romanandreg | ckirkendall: no… sadly, I'm running the cljs repl both from cljsbuild repl-listen, and doing it directly on clj repl as instructed in the clojurescript wiki and no luck so far |
| 19:28 | romanandreg | which is pretty weird |
| 19:28 | romanandreg | ckirkendall: wait… I made it work running it from the repl directly |
| 19:28 | romanandreg | so I might think is something from cljsbuild |
| 19:28 | romanandreg | ? |
| 19:28 | romanandreg | need to play a bit more |
| 19:29 | ckirkendall | romanandreg, I think so because I am see the same thing |
| 19:29 | ckirkendall | romanandreg, it hangs when I go through cljsbuild |
| 19:29 | romanandreg | ckirkendall: funny thing, clj repl version is hanging on second instruction |
| 19:29 | romanandreg | :- |
| 19:30 | romanandreg | :-/ |
| 19:31 | romanandreg | pardon me, it is working |
| 19:31 | romanandreg | for some reason the repl get's all sketchy when running from lein2 repl |
| 19:31 | romanandreg | cljs repl get's all sketchy |
| 19:46 | Frozenlock | What's the correct way to exit a Slime session? I want it to close java when I quit. |
| 19:53 | tomoj | Frozenlock: ,s TAB RET |
| 19:54 | tmciver | Frozenlock: or , quit RET |
| 19:55 | Frozenlock | tomoj: thank you! |
| 20:13 | tacoman | :vsplit |
| 20:13 | tacoman | er... >_> wrong buffer |
| 20:15 | qbg | tacoman: I know how that happens... |
| 20:15 | tacoman | I'm coding my senior project in Emacs + Evil mode so that I can adapt to Emacs itself before doing much heavy stuff in Clojure |
| 20:15 | tacoman | but uh, it ends out that Evil doesn't work in things like erc, so I'm in this sort of hybrid state of mind... |
| 20:16 | Frozenlock | tacoman: free yourself, go 100% emacs |
| 20:16 | tacoman | Frozenlock: it's not quite as efficient for editing multi-line stuff for me. emacs keybindings are great for things like shell or other single-line stuff, Vim-style for anything longer imo |
| 20:17 | qbg | Doesn't Emacs have brainwashing built in at this point? |
| 20:18 | tacoman | M-x you-love-emacs-yes-you-do |
| 20:18 | qbg | Combine with M-x butterfly |
| 20:18 | tacoman | silly me, I don't really want to use Vim bindingz |
| 20:18 | tacoman | *bindings, not trying to use X-treme Z's |
| 20:27 | tacoman | I will say that setting Emacs up for Clojure was a lot easier than dealing with VimClojure |
| 20:47 | tacoman | anyone have any recommendations for Git integration? |
| 20:47 | tacoman | (in Emacs, not Clojure) |
| 20:48 | qbg | ansi-term works well :p |
| 20:48 | Frozenlock | tacoman: Never tried it, but Magit has a great reputation. |
| 20:48 | arohner | magit works great |
| 20:49 | tacoman | qbg: can I play Nethack in ansi-term? :P but in all seriousness, awesome Git integration was something I was missing from Vim |
| 20:49 | qbg | You can run vi inside emacs inside emacs using ansi term |
| 20:50 | qbg | Emacs inside emacs is a danger when using ansi-term |
| 20:50 | ferd | hey, anybody using swank-clojure-1.4.0 ? |
| 20:51 | ferd | autocompletion of symbols (meta-TAB) doesn't work for me (it does nothing) |
| 20:52 | qbg | ferd: At the repl? |
| 20:52 | ferd | and the minibuffer doesn't show the funcion signatures as I type |
| 20:52 | ferd | Emacs 24 |
| 20:52 | ferd | clojure-jack-in |
| 20:52 | qbg | You have namespace loaded? |
| 20:52 | ferd | I did "C-c C-l" |
| 20:52 | ferd | (load file) |
| 20:53 | ferd | and C-c C-k |
| 20:53 | ferd | just in case |
| 20:54 | arohner | ferd: sometimes it doesn't work for me if there's an exception up (*sldb...*) |
| 20:54 | ferd | qbg: it does work in the slime-repl buffer |
| 20:55 | qbg | At you repl it is C-c Tab |
| 20:55 | ferd | arohner: thanks... but I re-started the session multiple times |
| 20:55 | qbg | ferd: You can always fall back to M-\ |
| 20:56 | arohner | ferd: is your clojure buffer in slime-mode? |
| 20:56 | ferd | both C-c Tab and M-tab seem to be bound at my repl, and they work |
| 20:56 | arohner | you should see Slime in the list of minor modes at the bottom |
| 20:56 | ferd | arohner: yes... status shows "Slime[clojure]" |
| 20:58 | ferd | ok... I found one of them: M-tab on the buffer is bound to complete-symbol instead of slime-complete-symbol |
| 20:58 | ferd | (don't know why) |
| 20:59 | ferd | the minibuffer still doesn't show signatures :-( |
| 21:02 | ferd | qbg: I guess you meant M-/ ? |
| 21:03 | qbg | Yeah |
| 21:04 | qbg | To be fair, it is muscle memory, and I type Dvorak on a Qwerty keyboard :p |
| 21:09 | muhoo | i have a stupid destructuring question. if i have data like [[1,2], [3,4]] etc, and i want to convert it to [1,3] [2,4], how do i do that? |
| 21:09 | gfredericks | qbg: it gets real confusing when you start learning to do that by sight |
| 21:09 | gfredericks | i.e., hunt-and-peck |
| 21:09 | muhoo | actually it's a lazy seq, so it's ([1,2] [3,4]), and i need to get it into (1 3) (2 4) |
| 21:09 | qbg | gfredericks: It is actually how I got good at touch typing |
| 21:10 | gfredericks | muhoo: (map vector stuff) I think? |
| 21:10 | gfredericks | no wait |
| 21:10 | gfredericks | (map vector stuff1 stuff2) |
| 21:10 | amalloy | ~zip |
| 21:10 | clojurebot | zip is not necessary in clojure, because map can walk over multiple sequences, acting as a zipWith. For example, (map list '(1 2 3) '(a b c)) yields ((1 a) (2 b) (3 c)) |
| 21:10 | gfredericks | why don't I just do it with the bot |
| 21:10 | muhoo | zip. got it. |
| 21:10 | gfredericks | HA |
| 21:10 | muhoo | i KNEW there was a way to do it. alzheimer's kickin in early. |
| 21:11 | muhoo | so i need to unzip, but i think it's in there |
| 21:11 | gfredericks | &(apply map vector '([1 2] [3 4])) |
| 21:11 | lazybot | ⇒ ([1 3] [2 4]) |
| 21:11 | muhoo | gfredericks: actually, that'll work too |
| 21:11 | amalloy | ~transpose |
| 21:11 | clojurebot | (def transpose (partial map vector)) |
| 21:11 | muhoo | good christ. there are tons of ways to do it :-/ |
| 21:12 | amalloy | those are the same way really |
| 21:12 | gfredericks | no there's only been one mentioned so far |
| 21:12 | gfredericks | amalloy: how many dang bot triggers have you memorized? |
| 21:12 | amalloy | well, i taught him the ones i was tired of answering |
| 21:12 | qbg | Work smart, not hard |
| 21:12 | amalloy | and someone (TimMc?) taught him transpose earlier today, much to my dismay since i already taught him zip |
| 21:12 | amalloy | ~juxt |
| 21:12 | clojurebot | juxt is a little hard to grok but it's the best thing ever |
| 21:13 | muhoo | where is transpose? |
| 21:13 | gfredericks | ~grok |
| 21:13 | clojurebot | grok is a little hard to juxt but it's the best thing ever |
| 21:13 | muhoo | heh |
| 21:13 | gfredericks | muhoo: it's not anywhere |
| 21:13 | muhoo | but, it's in clojurebot/lazybot? |
| 21:13 | gfredericks | (def transpose (partial map vector)) is a suggested implementation you could use |
| 21:13 | qbg | See the clojurebot answer for the def |
| 21:13 | amalloy | it was inside you all along |
| 21:13 | muhoo | i see |
| 21:14 | amalloy | but i think the transpose definition is trash really |
| 21:14 | amalloy | you want (partial apply map vector) for sure, because you'll usually have a list-of-lists, not N lists |
| 21:15 | gfredericks | projecteuler.com is a big let-down |
| 21:16 | tacoman | what's wrong with project euler? it seems like the entire Internet has nothing but good things to say about it |
| 21:16 | gfredericks | nothing's wrong with project euler |
| 21:17 | gfredericks | not that I know of at least |
| 21:17 | qbg | PE is the one use case that the 1.3 numeric changes aren't optimized for |
| 21:18 | qbg | Can't think of anything else |
| 21:23 | muhoo | this is what i ended up with. i suck. but it works: https://refheap.com/paste/1007 |
| 21:24 | muhoo | doh, sorry, this https://refheap.com/paste/1008 |
| 21:26 | muhoo | ok, so i'm writing scheme code in clojure. it's the best i can do right now :-) |
| 21:27 | muhoo | incanter is wonderfully easy to use though. very nice. |
| 21:27 | qbg | You box r just to unbox it again? |
| 21:29 | muhoo | i used to work at UPS |
| 21:29 | muhoo | boxing, unboxing, all day long |
| 21:29 | qbg | lol |
| 21:29 | muhoo | i honestly don't know what you mean by boxing |
| 21:29 | Raynes | Dey see me boxin', dey hatin' |
| 21:29 | qbg | (map first all) is just (range 10000 100000 1000) |
| 21:30 | qbg | And then ys is (map vout xs) |
| 21:30 | muhoo | oh! good point. |
| 21:30 | muhoo | yeah, it is kind of circular. thanks. |
| 21:33 | muhoo | thanks https://refheap.com/paste/1009 |
| 21:35 | qbg | Any reason why you are using for for ys? |
| 21:36 | muhoo | oh, good call. map'd work |
| 21:36 | qbg | You can also get rid of letfn, and move vout into the let |
| 21:43 | gfredericks | (defmacro cout [_ s] `(print ~s)) ;; usage: (cout << "foo") |
| 21:49 | muhoo | holy crap. https://refheap.com/paste/1010 |
| 21:50 | muhoo | that just snuck up on me and worked! and i was shocked that it actually worked. |
| 21:52 | TimMc | clojurebot: forget transpose |is| <reply>(def transpose (partial map vector)) |
| 21:52 | clojurebot | I forgot that transpose is <reply>(def transpose (partial map vector)) |
| 21:52 | TimMc | ~transpose |
| 21:52 | clojurebot | (def transpose (partial apply map vector)) |
| 21:52 | TimMc | amalloy: Better? |
| 21:52 | amalloy | sure |
| 21:53 | amalloy | IME people who want this usually don't realize what they want is transpose (fair; i don't either) |
| 22:56 | TimMc | ibdknox: I extracted the cascade lib: https://github.com/timmc/cascade |
| 23:30 | y3di | (def ^:dynamic v 1) -- what does the ^:dynamic mean? |
| 23:30 | y3di | i know :string is an interned string, and represents metadata? |
| 23:30 | TimMc | y3di: It means the var can be rebound with (binding ...) |
| 23:31 | TimMc | y3di: What's this about :string? |
| 23:32 | y3di | wait so ^:dynamic makes v dynamic? (which means it can be rebound?) |
| 23:32 | TimMc | right |
| 23:33 | TimMc | y3di: ^:dynamic is short for ^{:dynamic true}, which attaches that metadata map to the symbol "v" for the compiler to see. |
| 23:33 | TimMc | and when it see :dynamic in the map, it knows not to perform certain optimizations on that var. |
| 23:33 | y3di | ah |
| 23:34 | y3di | so metadata can be applied to any var? |
| 23:37 | qbg | Metadata can be applied to many data structures coming from Clojure |