2012-02-14
| 00:00 | ibdknox | it just works ;) |
| 00:00 | lynaghk | heh |
| 00:00 | ibdknox | also, CLJS is a bit slow for animations without a lot of work :( |
| 00:00 | lynaghk | I try to stick with CSS transitions though, because they are much faster |
| 00:00 | lynaghk | especially on mobile devices. |
| 00:00 | ibdknox | also good ^ |
| 00:00 | lynaghk | transformZ(0) FTW |
| 00:01 | jhowarth | Ah ok. I was messing around with ClojueScript One yesterday and I liked their approach to events/animations. Was wondering if that stuff was in a library somewhere. |
| 00:01 | justinlilly_home | how do you short circuit a return value in a clojure method? |
| 00:01 | justinlilly_home | ie: "If you invalidate <precondition> return X now" |
| 00:02 | lynaghk | ibdknox, what did you think about David's suggestion that CLJS requires stuff should be built into lein? |
| 00:02 | justinlilly_home | (if (not (cond)) nil) is roughly what I'd do in java, but nil just noops rather than returns. |
| 00:02 | ibdknox | lynaghk: the libs/externs stuff? |
| 00:02 | lynaghk | yeah |
| 00:02 | ibdknox | lynaghk: I think it's reasonable |
| 00:02 | ibdknox | with the latest cljsbuild using jayq is pretty darn simple |
| 00:03 | ibdknox | with some sort of manifest it really will "just work" |
| 00:03 | ibdknox | seems like a reasonable solution |
| 00:03 | lynaghk | I just forwarded you the email I sent him |
| 00:03 | lynaghk | because I hit "reply" instead of "reply all" |
| 00:03 | lynaghk | yeah, I just cut Cassowary CLJS into a JAR and everything seems to just work if you include the js path |
| 00:03 | tmciver | justinlilly_home: you mean you *don't* want to return nil if precondition fails? |
| 00:04 | ibdknox | lynaghk: yeah. I have no idea what foreign-libs is |
| 00:04 | ibdknox | also we shouldn't tell people to package libs with their apps |
| 00:04 | tmciver | justinlilly_home: if you do want to return nil, just wrap your function body in an if: (if (cond) ;; do stuff |
| 00:04 | ibdknox | if they're already widely CDN'd |
| 00:04 | technomancy | justinlilly_home: you can't do it without putting both the success and short-circuit clauses in the tail position |
| 00:04 | lynaghk | so, besides jQuery |
| 00:04 | ibdknox | google has a couple others, but yeah |
| 00:05 | justinlilly_home | ahh. interesting. |
| 00:06 | lynaghk | ibdknox; Eh, I think you might be biased as an excellent web practitioner. I'd rather err on the side of having things packaged so that libs just work. |
| 00:06 | lynaghk | People who are in a situation where using CDNs would matter already know about that, and can take the appropriate steps. |
| 00:06 | ibdknox | that's fair |
| 00:07 | lynaghk | But for people who just want to get the library and start playing around, I don't want them to get tripped up because they're offline or some such. |
| 00:07 | ibdknox | yeah |
| 00:07 | lynaghk | but yeah, it's about build tools---we've been using CLJS just by calling the compile function (no cljs-build), because it's incorporated into a different toolchain. |
| 00:09 | jhowarth | idbknox: Animations with jayq are pretty slow? |
| 00:09 | jhowarth | ibdknox: ^ |
| 00:10 | ibdknox | jhowarth: no, they're very fast because they use jquery's JS :) |
| 00:10 | jhowarth | Cool I'll check it out. |
| 00:11 | lynaghk | ibdknox, did you ever get around to profiling ClojureScript when you were building out those animations? |
| 00:11 | technomancy | wow, golang straight up refuses to version dependencies |
| 00:11 | technomancy | if you want an old version, you copy it into your codebase: https://groups.google.com/forum/#!msg/golang-nuts/tLsxO2S4yoQ/VUrYr5q4RUMJ |
| 00:13 | Scriptor | well, that's nuts |
| 00:13 | Raynes | technomancy: Excuse me? |
| 00:13 | lynaghk | ibdknox, the reason I ask is because I recall your gist showing how slow (doseq) is compared to a JS for loop. I was under the impression that loop/recur would be way faster, but that hasn't been my experience. |
| 00:13 | technomancy | "Conversely, if you find yourself in a situation where your code needs version 3.1 of a library and cannot work with newer versions, you need to make your own copy of that library: it's moved on without you." |
| 00:14 | Raynes | technomancy: Is this a joke? |
| 00:14 | ibdknox | lynaghk: monet has a "fast" loop |
| 00:14 | technomancy | it's always bugged me that golang's selling point is "it's static typing that you won't hate!" as if that's something new they're bringing to the table. |
| 00:15 | Raynes | technomancy: How do you feel about Rust? I really like it. |
| 00:15 | justinlilly_home | technomancy: imo, its typed python that's faster. |
| 00:15 | justinlilly_home | or perhaps "python for people who like pointers" |
| 00:15 | Raynes | Python is the comparison? |
| 00:15 | Scriptor | typed python? |
| 00:15 | justinlilly_home | Raynes: I meant golang, sorry. |
| 00:15 | Raynes | I know. |
| 00:15 | technomancy | Raynes: haven't bothered to give rust a glance |
| 00:15 | Raynes | Still, Python is the comparison? |
| 00:15 | Raynes | technomancy: Go do it. You might be surprised. |
| 00:16 | Raynes | technomancy: http://rust-lang.org/ |
| 00:16 | technomancy | I think people compare it to python because that's often the only language they've used that hasn't filled them with rage. |
| 00:17 | technomancy | Raynes: is that the mozilla one? |
| 00:17 | Raynes | I have to say, Ruby filled me with far more rage than Python did. |
| 00:17 | Raynes | Yes. |
| 00:17 | Raynes | Look at the feature rundown there. It's fairly interesting. |
| 00:17 | technomancy | "Compilation model batch, ahead-of-time, C/C++ compatible" <- is that code for "no repl"? |
| 00:18 | Raynes | Haha, I think so, yes. |
| 00:18 | technomancy | ok, not interested |
| 00:18 | lynaghk | ibdknox; the loop/recur on canvas.cljs#126? |
| 00:18 | Raynes | Still, there are interesting ideas there. |
| 00:18 | technomancy | if you don't have a repl you should at least have the decency to be embarrassed about the fact |
| 00:19 | technomancy | not put it first on your features list |
| 00:19 | technomancy | "Type inference yes, only local variables" <- double-yawn |
| 00:19 | technomancy | at least go's inference can usually cross function boundaries |
| 00:20 | Raynes | "immutable by default, mutability is the special case" |
| 00:20 | Raynes | technomancy: ^ If that doesn't set it apart from most 'systems' languages, I'm not sure anything ever could. |
| 00:21 | ibdknox | lynaghk: yeah |
| 00:21 | technomancy | meh; not when ocaml has had decades poured into its compilers |
| 00:21 | Raynes | Well then |
| 00:21 | Raynes | I apologize for making you waste your time with this obviously utter garbage. ;) |
| 00:21 | technomancy | "Error handling: unrecoverable unwinding" <- seriously, I get the feeling they are not trying very hard on this feature list |
| 00:21 | technomancy | "CL-style conditions? yeah, those are cool. we don't have them." |
| 00:21 | Raynes | Thanks for ruining my excitement. Dream killer. |
| 00:21 | technomancy | haha |
| 00:22 | Raynes | amalloy_: Want to go talk about death and paint our fingernails black now? |
| 00:23 | technomancy | http://images.wikia.com/scottpilgrim/images/8/8f/SP3_sex-bob-omb_id.jpg |
| 00:23 | Raynes | I remember that scene of the movie. |
| 00:24 | lynaghk | ibdknox: yeah, the slow looping burned us a little on an iPad visualization project we just shipped. We're about to start up a larger analytics project though, and I am definitely interested in figuring out where these performance issues are coming from |
| 00:24 | lynaghk | even in my own cljs code, so I can drop to JS if required. |
| 00:25 | lynaghk | but as it stands (as far as I'm aware) there isn't any metadata on the complied JS that'll point back to the cljs source to determine hotspots. |
| 00:26 | Raynes | technomancy: http://www.youtube.com/watch?v=mL-qx-Y_15M&feature=related |
| 00:26 | technomancy | handy link! |
| 00:58 | tylergillies | im studying lambda calculus and it defines zero as \sz.z does that mean that any function that takes two arguments and returns the second one is === zero? |
| 01:06 | Apage43 | tylergillies: not as such |
| 01:06 | Apage43 | those are church numerals; http://en.wikipedia.org/wiki/Church_encoding |
| 01:07 | Apage43 | its a way of implementing arithmetic on top of lambda calculus |
| 01:09 | tylergillies | Apage43: thnx |
| 01:47 | devn | protocols support [x & xs] right? |
| 01:47 | amalloy | no |
| 01:47 | devn | haha, that makes more sense |
| 01:47 | amalloy | unless by that you mean three args: x, &, and xs |
| 01:47 | devn | :) no |
| 01:47 | devn | thanks alan |
| 01:49 | devn | amalloy: how's the clojuring? |
| 01:49 | Raynes | amalloy: I'm totally gonna use mustache for templates, I think. |
| 01:49 | Raynes | Mustache has some cool things I didn't even know about. |
| 01:49 | devn | Clostache? |
| 01:50 | Raynes | Stencil. |
| 01:50 | devn | Raynes: im guessing you know about it already, but if you haven't seen it this seems to be under active development as well: https://github.com/fhd/clostache |
| 01:51 | Raynes | Yep, it's under active development because I shat on the lib on twitter because I didn't know he followed me. I'm pretty ashamed about it. |
| 01:51 | Raynes | :p |
| 01:51 | Raynes | It's spec compliant now, but stencil is still faster. |
| 01:51 | devn | :\ |
| 01:52 | Raynes | Context: I thought he knew it wasn't spec compliant and was a little angry that he had them list his implementation on the official website. Turns out, he didn't even know there was a spec. |
| 01:53 | Raynes | Shoulda seen me blushing. |
| 01:53 | Raynes | ;) |
| 01:53 | devn | Raynes: either way, there's so much bitching in our communities |
| 01:54 | devn | it makes it sort of amazing to me that people continue to contribute to open source when i see some of the flames people get |
| 01:54 | devn | Raynes: not an enlive fan? |
| 01:55 | devn | Raynes: going to clojure/west? |
| 01:55 | devn | how about euroclojure? |
| 01:55 | Raynes | Well, I didn't flame him. |
| 01:56 | Raynes | tl;dr re: enlive: I found a bug. No one cares. Slightly annoyed, but meh, life goes on. |
| 01:56 | Raynes | Can't afford clojure/west. Certainly can't afford euroclojure. |
| 01:56 | Raynes | I'd love to go to Euroclojure |
| 01:56 | devn | submit a talk! |
| 01:56 | Raynes | I could have talked at c/w. I decided not to because I need to work on my book more than I need to go to conferences. It's sad, but true. |
| 01:57 | devn | i missed the CfP |
| 01:57 | devn | :( |
| 01:57 | Raynes | EuroClojure is super duper tempting though. |
| 01:57 | devn | euroclojure has a sort of weird CfP IMO. maybe it's fairly normal, but i've never seen it. |
| 01:58 | devn | you submit, they rate it, you resubmit to address how you will get it from their rating to a better rating, something like that |
| 01:58 | Raynes | The only way I could go to euroclojure is if they paid for my travel which would be an insane thing to even hope for. I don't even what to know what that plane ticket would cost. |
| 01:58 | devn | not that crazy, honestly. |
| 01:58 | devn | i don't think they'll have 100 US clojure devs there |
| 01:58 | Raynes | I'd only do it if brehaut was going. |
| 01:58 | Raynes | I'd do it just to meet him. |
| 01:58 | devn | :D |
| 01:58 | Raynes | Cool guy, that one. |
| 01:59 | devn | Raynes: i want to submit, but i am always hopping around about what i'd talk about |
| 01:59 | Raynes | I've got so many things I could talk about. |
| 02:00 | Raynes | I'd like to do a talk about Clojure editors. |
| 02:00 | Raynes | That'd be cool. |
| 02:00 | Raynes | Do a demonstration of Emacs, Vim, IDEA, CCW, etc. Explain the benefits and disadvantages of all of them. |
| 02:00 | devn | i think the stuff i want to talk about has to do with community building |
| 02:01 | Raynes | Aaron Bedra's talk was close to that at the first conj. |
| 02:01 | Raynes | It was well accepted, I think. |
| 02:01 | devn | i started a clojure meetup in Madison, WI a year and a half ago. no one showed up but my friends for a couple of months, but i made it my business to keep showing up. we've been getting spikes, but the average is now around ~10 people |
| 02:02 | devn | i want to tell people: you live in sibera. who cares? put up a flyer and wait. if you build it, they will come. |
| 02:02 | Raynes | I don't think that applies where I live at the moment. :p |
| 02:02 | devn | i did no serious organizing. the only thing i've done is bought beer. |
| 02:02 | Raynes | The people who show up would be doing so to ask me what computers are. ;) |
| 02:02 | devn | Raynes: so start an online meetup group. |
| 02:02 | devn | :) |
| 02:03 | devn | unite! organize! |
| 02:03 | sCriptor | some place where all may gather and converse online |
| 02:03 | devn | sCriptor: this is not a meetup |
| 02:03 | Raynes | An online meting group? Isn't that called IRC? :p |
| 02:04 | devn | nah, there's so much to be gained from interacting with other meat bodied creatures |
| 02:05 | Raynes | That sounded kind of sexual. |
| 02:05 | devn | It was meant to be. |
| 02:05 | Raynes | Oh man. |
| 02:05 | devn | Oh boy. |
| 02:05 | devn | So...uh... |
| 02:05 | Raynes | I've been an adult for less than two weeks and you're already hitting on me. |
| 02:05 | Raynes | Have you no shame? |
| 02:08 | sCriptor | damn kids |
| 02:11 | devn | sCriptor: damn salt and papper neck beards |
| 02:11 | devn | pepper* |
| 02:11 | Raynes | 'papper' has more of the effect you wanted. Sounds more oldmanish. |
| 02:12 | devn | *nod* -- good call |
| 02:13 | devn | it's like "warshing machine" |
| 02:13 | devn | papper, figs, warshin' dishes, etc. |
| 02:14 | Raynes | Wow, man. Mustache can do things I never knew. |
| 02:14 | Raynes | I figured it'd be insane to use it for HTML templating, but I'm slowly being convinced otherwise. |
| 02:15 | Raynes | Funfact: refheap will not load at all in IE 5.5 |
| 02:16 | Raynes | IE 6 destroys the rendering but the site is functional. |
| 02:16 | amalloy | try AOL 1.0 |
| 02:16 | Raynes | amalloy: I can't :( |
| 02:16 | Raynes | browserling doesn't have it |
| 02:17 | Raynes | RefHeap works in most browsers save for minor rendering quirks. BrowserID on the other hand supports only modern browsers. But that's perfectly fine for me, because I don't care if it even renders in IE9. |
| 02:17 | amalloy | for reference, http://www.reddit.com/r/funny/comments/o7bxs/reddit_isnt_working_for_me_in_internet_explorer/ |
| 02:18 | Raynes | As long as it renders in ffx, chrome, safari, android browsers, and opera. All recent versions. |
| 02:18 | Raynes | Well, screw opera. |
| 02:18 | Raynes | Though it does render in it, I just don't care about opera. |
| 02:18 | Raynes | amalloy: That's awesome. |
| 02:29 | Gertm | Hi. I installed clojure through my package manager and I have 1.3 now. But when I install clojure-swank through leiningen, it brings in a clojure 1.2 jar, won't that cause problems? |
| 02:37 | raek | Gertm: the clojure version you can install with your package managager isn't used by any tools, afaik |
| 02:37 | raek | Gertm: you control the clojure version in the project.clj file of your project |
| 02:37 | Gertm | so,.. it's not a good idea to install it through the package manager? |
| 02:38 | raek | it's not very useful, no |
| 02:39 | Gertm | So what would be the best way of doing it? |
| 02:39 | devn | Raynes: we need a better haml-esque solution for clojure |
| 02:39 | raek | use leiningen |
| 02:40 | raek | you don't install libraries you want to use in your code (Clojure counts as a "library"...), you just specify them in your project.clj and let Leiningen fetch them for you |
| 02:40 | Raynes | devn: That's kind of antiwhatiwant |
| 02:40 | raek | (leiningen plugins are often installed, though) |
| 02:41 | Raynes | devn: I want HTML templates. If I were going to use haml, I'd just use hiccup. |
| 02:41 | raek | (through leiningen) |
| 02:41 | devn | Raynes: tell that to your designer |
| 02:41 | Raynes | Not sure I follow |
| 02:41 | devn | designers don't write hiccup |
| 02:41 | Raynes | They don't write HAML either. |
| 02:42 | raek | Gertm: also, Leiningen will use Clojure 1.2 for its own process, but that doesn't affect you if you use Clojure 1.3 in your project |
| 02:42 | devn | Raynes: they almost certainly don't write hiccup whereas they might be willing to work with HAML |
| 02:42 | Raynes | I… guess. |
| 02:43 | Gertm | raek: but I want to use it with SLIME, won't it cause problems then? |
| 02:43 | Raynes | I'm not convinced I like HAML though. I'll have to look into it more. |
| 02:43 | devn | Raynes: ever use it? |
| 02:43 | Raynes | No, which is why I need to look into it more. |
| 02:44 | ibdknox | lol |
| 02:44 | devn | look, i don't fucking *love* haml |
| 02:44 | devn | but it's better than tinkering with straight HTML |
| 02:44 | raek | Gertm: no, swank will run in your project process, which will use whatever version of clojure you specify in the project.clj |
| 02:45 | devn | ibdknox: what don't you like about it? |
| 02:45 | raek | that Leiningen uses Clojure 1.2 under the hood is an implementation detail |
| 02:45 | Gertm | ok, I'll just give it a go and see what happens |
| 02:45 | raek | you only need to be aware of that if you are hacking on a leiningen plugin or leiningen itself |
| 02:45 | Raynes | devn: It seems like indentation-based HTML that is even more difficult to read. |
| 02:46 | Gertm | raek: not going to do either of those, so I should be fine :-) |
| 02:46 | raek | Gertm: be sure to follow the official tutorials. there are a lot of outdated howto blog posts |
| 02:46 | devn | Raynes: without qualifying that statement im going to call BS |
| 02:46 | Raynes | That's your basic human right. |
| 02:46 | devn | Raynes: even more difficult to read than what? why is it difficult to read? |
| 02:46 | raek | https://github.com/technomancy/leiningen |
| 02:46 | raek | https://github.com/technomancy/swank-clojure |
| 02:46 | devn | sure it's not the lack of familiarity creeping up on you? |
| 02:47 | ibdknox | it's pretty hard to read |
| 02:47 | devn | compared to what? |
| 02:47 | ibdknox | and yes, I've used it |
| 02:47 | Raynes | Compared to HTMl. |
| 02:47 | Raynes | HTML* |
| 02:47 | Raynes | The tags are less obvious and it looks like indentation matters, maybe? |
| 02:48 | Raynes | But hey, I've definitely never used it. |
| 02:48 | devn | indentation does matter. but why wouldn't i want a hierarchical document like HTML to be indentation-sensitive? |
| 02:49 | Raynes | Seems like it would be difficult to restructure a large document. |
| 02:49 | devn | that's a symptom of a different problem |
| 02:49 | Raynes | Bad editors? |
| 02:50 | devn | large document -- where are the modules? partials? |
| 02:50 | Raynes | Well, regardless -- it's pretty hideous. |
| 02:50 | devn | you know, people say that about lisp |
| 02:50 | devn | so smug |
| 02:50 | ibdknox | lol |
| 02:50 | ibdknox | you're awfully dogmatic about this |
| 02:50 | Raynes | Compared to? HTML, XML, whatever. It's just ugly. |
| 02:50 | Raynes | Well, maybe it's just me. |
| 02:50 | Raynes | I'm certainly not going to be smug about it. |
| 02:51 | Raynes | It isn't as simple as "Omg there are parentheses there." |
| 02:51 | devn | ibdknox: i find it equally ridiculous that it's okay to be dogmatic about syntax and what not |
| 02:51 | ibdknox | hm? |
| 02:51 | ibdknox | not sure I follow |
| 02:51 | devn | ibdknox: im not sure i formed a complete sentence |
| 02:52 | devn | ibdknox: what i meant was: i read something like: "it's hideous" and I cringe |
| 02:52 | devn | because it's superficial |
| 02:52 | ibdknox | I'm not sure I understand how that's superficial |
| 02:52 | ibdknox | while it may not be the most reasoned response, it hints at a number of very important things |
| 02:53 | Raynes | I don't understand. |
| 02:53 | devn | ibdknox: so what do you think about most peoples' reactions to parens in lisp? |
| 02:53 | Raynes | If syntax isn't important, than why not prefer HTML over HAML? |
| 02:53 | ibdknox | in CL? I completely agree |
| 02:53 | Raynes | Isn't the whole point of HAML to have a *better* syntax, regardless of how terrible I think it is? |
| 02:53 | devn | ha, now we're getting somewhere |
| 02:53 | ibdknox | how code reads is arguably one of the most important aspects of language |
| 02:53 | ibdknox | a language* |
| 02:54 | Raynes | Let's take Clojure and replace all parens with square brackets and all square brackets with parens and see how many people are interested in the result. |
| 02:55 | devn | i understand that's rhetorical |
| 02:55 | devn | but i honestly don't know which side you're arguing for |
| 02:55 | Raynes | I don't think I was ever arguing for either side. |
| 02:55 | devn | that could reinforce an argument both for and against |
| 02:55 | Raynes | If I was, it wasn't intentional. |
| 02:56 | Raynes | I think HAML is hideous. If you feel it necessary to invalidate my opinion because you feel syntax is superficial then that is definitely a personal choice. |
| 02:56 | devn | so it's a genuine question? as in: we should replace them and try and get a head count of who wants to use an inverted clojure? |
| 02:56 | Raynes | I don't care either way. :> |
| 02:56 | Raynes | It'd be interesting. |
| 02:56 | Raynes | The inverted Clojure experiment, I mean. |
| 02:57 | devn | Raynes: im not invalidating your opinion, but i've heard this complaint so often: SOAP sucks, XML sucks, and so on |
| 02:58 | ibdknox | they *do* suck |
| 02:58 | ibdknox | lol |
| 02:59 | Raynes | SOAP sucks *because* XML sucks, doesn't it? |
| 02:59 | Raynes | *shrug* |
| 02:59 | Raynes | Everything sucks. |
| 02:59 | devn | so what is the alternative? |
| 02:59 | devn | JSON? |
| 02:59 | clojurebot | #<ClassCastException java.lang.ClassCastException: clojure.lang.Cons cannot be cast to clojure.lang.IPersistentStack> |
| 02:59 | Raynes | A nice trollface, probably. |
| 03:00 | ibdknox | haha |
| 03:00 | Raynes | XML serves its purpose. |
| 03:00 | devn | Rich said it himself at Clojure conj: What does XML have that clojure data structures don't? The X. |
| 03:00 | Raynes | XML serves its purpose, but it's ugly. |
| 03:01 | Raynes | Could I do it a better way and make it less ugly? No, probably not. |
| 03:01 | devn | yes but now you're just proving my point -- ugly < utility |
| 03:02 | Raynes | Bu... |
| 03:02 | Raynes | what is this i dont even |
| 03:02 | devn | "i'm not even supposed to be here today" |
| 03:06 | devn | ibdknox: Raynes: I want to be clear that I'm not saying HAML is the answer to our prayers or something, or that it isn't ugly. I just have a hard time hearing that it's "hideous" without anything to qualify that remark |
| 03:06 | Raynes | Okay. |
| 03:08 | ibdknox | lol |
| 03:08 | Raynes | http://h.images.memegenerator.net/instances/500x/14567447.jpg |
| 03:09 | devn | bahaha |
| 03:09 | ibdknox | hahaha |
| 03:09 | ibdknox | well done :p |
| 03:11 | devn | http://memegenerator.net/instance/14567514 |
| 03:13 | devn | http://c.images.memegenerator.net/instances/500x/14567514.jpg |
| 03:13 | Raynes | Heh |
| 03:13 | Raynes | devn: That website is like the best invention ever, btw. |
| 03:14 | devn | heh -- it's awesome until someone writes a bot to facilitate the generation of them in your company's private channel |
| 03:15 | devn | i still get a kick out of a lot of them, but im dead to philosoraptor at this point :) |
| 03:20 | devn | Raynes: ibdknox: Sorry if I over-reacted there. I live in Wisconsin and it's cold here. I hope I see you guys at Clojure/west. |
| 03:20 | Raynes | You'll certainly see ibdknox. |
| 03:20 | Raynes | And no harm done. |
| 03:20 | Raynes | $conditions 35554 |
| 03:20 | lazybot | Last Updated on February 14, 2:02 AM CST; Mostly Cloudy; Dewpoint: 37 F (3 C); Precipitation today: 0.27 in (7 mm); Temperature: 38 F (3.3 C); Windchill: 35 F (2 C); Wind speed: 4mph; Wind gust: 6.0mph; URL: http://www.wunderground.com/US/AL/Eldridge.html. |
| 03:20 | devn | $conditions 53703 |
| 03:20 | lazybot | Last Updated on February 14, 2:00 AM CST; Light Snow; Dewpoint: 27 F (-3 C); Precipitation today: 0.00 in (0 mm); Temperature: 28 F (-2.2 C); Windchill: 21 F (-6 C); Wind speed: 6mph; Wind gust: 6.0mph; URL: http://www.wunderground.com/US/WI/Madison.html. |
| 03:20 | Raynes | Not as bad as the 19F from last night. |
| 03:21 | devn | My Wind gust is bigger than your Wind gust. |
| 03:21 | Raynes | devn: You can give him $forecast and he'll give you NOTICEs about your forecast. |
| 03:21 | devn | $forecast |
| 03:21 | Raynes | Well, you need to give him a location. :p |
| 03:21 | devn | $forecast 53703 |
| 03:21 | Raynes | Unfortunately I haven't planted my GPS chip on you yet. |
| 03:22 | devn | That seems like exactly the kind of thing someone would say if they *had* planted a chip on me. |
| 03:22 | Fossi | -2 celcius is not cold :> |
| 03:22 | Raynes | I've been had! |
| 03:23 | Raynes | It's cold if you aren't a bloody eskimo. -.- |
| 03:23 | devn | Fossi: I guess what I meant by cold is: My winter anger is flaring up. I'm not meditating enough or something. Damned seasonal depression and all of that... |
| 03:23 | devn | </overshare> |
| 03:23 | Raynes | I should meditate. |
| 03:23 | Raynes | Unfortunately, I can't really sit still, ever. |
| 03:23 | Fossi | you should take vit D ;) |
| 03:23 | Raynes | Much less relax. |
| 03:23 | devn | Fossi: I do! :) |
| 03:23 | Fossi | excellent :) |
| 03:24 | devn | Raynes: If you're ever interested pick up Jon Kabat-Zinn's CDs, the first set. Also, check out his talk: http://www.youtube.com/watch?v=3nwwKbM_vJc |
| 05:06 | skady | Hi everybody. Is anybody actually reading or are all people just idling? ;-) |
| 05:07 | raek | skady: it's night in the US :-) |
| 05:07 | Raynes | I live in the US. |
| 05:07 | Raynes | I'm also awake at this ungodly hour. |
| 05:07 | skady | Well, this does not mean that nobodys reading |
| 05:08 | vijaykiran | only bots .. no one's reading :) |
| 05:08 | skady | Last time I checked computer science guys loved to work at night ;-) |
| 05:08 | Raynes | Man, I have a job. |
| 05:08 | edoloughlin | Quiet down, please. I'm trying to get some sleep! |
| 05:08 | Raynes | It doesn't involve academia. I need my sleep. |
| 05:08 | Raynes | I'm just busy being awesome and stuff. |
| 05:09 | skady | Stop being tired, be awesome instead! :-) |
| 05:10 | skady | Anyway, I'm really interested in trying Clojure and would like to make use of it for a simple web app. But I'm lacking argumentation to defend this choice (part of bachelor thesis). My app involves a certain amount of concurrent tasks, so this a good reason to go for clojure as far as I read. |
| 05:11 | vijaykiran | is there any restriction which lang to use or something ? |
| 05:11 | skady | But other than that, I'm having a hard time finding further reasons to go for it (from a supervisors point who knows that I could just have done it with existing Java knowledge) |
| 05:11 | skady | vijaykiran: No, not at all. Just want to have good reasons for my architecture :-) |
| 05:11 | skady | but it's kinda hard to argue when you know so little about the language and ecosystem |
| 05:11 | vijaykiran | functional - lispy - concurrent - and JVM |
| 05:12 | vijaykiran | and no bloated frameworky stuff |
| 05:13 | skady | Alright, so that's also what I have read only. Is there any reasons why so many people are actually getting interested in Clojure now? I mean, lisps have been around for quiet some time |
| 05:13 | skady | online* |
| 05:14 | ejackson | skady - argue that you're a student, and as such need no justification for learning. |
| 05:14 | vijaykiran | apart from it is awesome - it is modern Lisp on JVM |
| 05:15 | vijaykiran | that's why I'm interested in it though - different people might have different opinions |
| 05:15 | skady | ejackson: This would work for normal university projects, but this thesis is done in cooperation with a company whose employees might (probably not...) need to maintain it. Of course it is one argument for such an architecture decision. |
| 05:16 | Raynes | skady: Clojure is the first new and unique Lisp that has emerged in a while. It became popular because it is an extremely well-designed language and is backed by the JVM which means libraries and infrastructure galore. |
| 05:16 | ejackson | you're not an employee, you're a student, ergo: department of somebody else's problem. |
| 05:16 | skady | like that one :) |
| 05:17 | skady | Raynes: Thank you, guess I can use some of this information. |
| 05:18 | lucian | skady: a big reason people tend to like clojure is the data structures, and the literals |
| 05:18 | ejackson | skady: in seriousness, just argue that Clojure provides all the upside of java in production, combined with significant clarity and ease of use improvements. |
| 05:19 | lucian | scheme is very clean and nice but small, and common lisp is practical but horrible. clojure tends to be in the middle |
| 05:19 | skady | If you would have to choose some simple webframework for clojure, what would you go for? Note: I don't need a full-blown web stack, but merely a simple web frontend for my application. I also need to have thread control (so that webframework should discourage it). |
| 05:20 | skady | Should not discourage.. |
| 05:20 | vijaykiran | noir seems to be recommended a lot |
| 05:20 | vijaykiran | I just pick the libraries on my own - enlive, moustache etc. |
| 05:21 | Raynes | I've learned to love mustache tonight. |
| 05:21 | skady | lucian & ejackson: Guess I can go with this. Thanks a lot :) |
| 05:21 | ejackson | Clojure FTW, baby. |
| 05:21 | skady | Are you refering to the templating system mustache? |
| 05:21 | vijaykiran | no, the routes DSL |
| 05:22 | vijaykiran | enlive is the templating system I like |
| 05:22 | vijaykiran | moustache: https://github.com/cgrand/moustache |
| 05:23 | ejackson | i use ring and enlive |
| 05:23 | Raynes | I'm a big fan of the templating system. |
| 05:23 | Raynes | As of tonight, I'm a much bigger fan of it than Enlive. |
| 05:23 | Raynes | At least for what I'm using it for. |
| 05:24 | raek | skady: It could be worth checking this out: (noir builds on top of many of these libs) http://brehaut.net/blog/2011/ring_introduction |
| 05:24 | skady | raek: Thank you |
| 05:25 | skady | So ring seems to provide basic HTTP routing. |
| 05:25 | skady | Guess ring + some tempate mechanism would suffice for the moment :-). |
| 05:25 | vijaykiran | ring provides HTTP "abstraction" layer |
| 05:26 | vijaykiran | I guess you need either compojure/moustache to make your life easier |
| 05:26 | vijaykiran | to define the routing |
| 05:27 | skady | Oh, the compojure example looks very simple. |
| 05:28 | ejackson | cemerick: Delorean monster truck !!! LMFAO |
| 05:28 | cemerick | seriously |
| 05:28 | skady | Well, I guess this all helps a lot. Thank you all very much for your help. Will try too learn more about clojure first and then experiment with a few of these technologies. |
| 05:28 | ejackson | my day is complete, i'm going back to bed. |
| 05:30 | Raynes | cemerick: So I read the mustache manual tonight. |
| 05:30 | Raynes | cemerick: Turns out, it's about a 1000 times better than Enlive for what I was doing anyways. |
| 05:31 | cemerick | you should use that, then :-) |
| 05:31 | Raynes | I totally am. It's why I'm up at 4:30AM. |
| 05:32 | cemerick | I figured you were just in a particular cycle of your sleep schedule rotation or something. :-P |
| 05:32 | cemerick | Still waiting for the One True Templating Solution. |
| 06:29 | Gertm | Let me repeat the question for after the netsplit :) |
| 06:29 | Gertm | Versions differ: 2012-01-06 (slime) vs. 20100404 (swank). Continue? (y or n) <- is this a problem? |
| 06:32 | Arafangion | Gertm: "the" netsplit? |
| 06:33 | Raynes | Gertm: Does hitting 'n' make it work? |
| 06:33 | Gertm | Arafangion: yes, didn't you hear? It was legen.. wait for it.. |
| 06:33 | Raynes | Gertm: Does hitting 'n' make it work? |
| 06:33 | Gertm | Lemme try. |
| 06:34 | Gertm | Ah, found the problem. Emacs was loading the quicklisp slime. |
| 06:35 | Gertm | Probably best to move my common lisp setup to a different file if I'm doing clojure. |
| 06:36 | Raynes | I was going to be snarky and say "Well, there's your answer." if you had told me it worked. |
| 06:36 | Raynes | But yes, the CL setup is not compatible with the Clojure setup in almost every situation. |
| 06:36 | Gertm | Now I have to ask, why is this using such an old version of slime? |
| 06:37 | Raynes | Your best bet is to completely separate the configurations. |
| 06:37 | Raynes | Because the SLIME guys never release anything and like making breaking changes every half a second. |
| 06:37 | Gertm | Can't argue with that. |
| 06:38 | Raynes | :p |
| 06:38 | Gertm | :) |
| 06:39 | Raynes | But yeah, it's just a really fast moving target and it's generally impossible to follow the development and still work reliably. At least, that's what I've heard. I don't actually work on that stuff. |
| 06:39 | Gertm | Ok, now I'm set up, let's start learning this language, shall we? :) |
| 06:39 | Raynes | Woot |
| 06:40 | Gertm | I'm a little scared though. |
| 06:41 | Raynes | You can do it. |
| 06:41 | Raynes | Be a man. |
| 06:41 | Gertm | It's the jvm that scares me tbh. |
| 06:42 | Gertm | I know nothing about it. |
| 06:42 | Raynes | The JVM is over there and you're over here. Just don't look it directly in the eyes and you should be just fine. |
| 06:42 | Raynes | Man, my analogies must have scared cemerick away. |
| 06:42 | Gertm | Sounds like a plan! |
| 06:47 | Raynes | Oh man. |
| 06:47 | Raynes | These mustache templates + Clojure are so elegant. I need a towel. |
| 06:48 | Raynes | This was worth staying up until 6AM to do. |
| 06:48 | Raynes | Everything you CTCP me, God kills a kitten. |
| 07:00 | tsdh | I have some print-method defmethods for some classes, instances of those classes are now printed as I like them to have. Well, except for objects that are not printed but (implicitly) str-ed first, like in (format "%s" foo). Is there a way to have print-method activated also for stringifying objects except for invoking print-method myself with a StringWriter or so? |
| 07:00 | Raynes | http://d.images.memegenerator.net/instances/500x/14571907.jpg |
| 07:01 | Raynes | Goodnight fellow Clojurians |
| 07:01 | ejackson | goodnight Mr Raynes. |
| 07:06 | tsdh | Ah, print-str is my friend. |
| 07:12 | Gertm | Doing (doc doc) in the slime repl throws a stacktrace at me, is this normal? |
| 07:12 | cemerick | don't know about SLIME, but (doc doc) should work |
| 07:12 | cemerick | ,(doc doc) |
| 07:12 | clojurebot | "([name]); Prints documentation for a var or special form given its name" |
| 07:13 | Gertm | When I do it at the command line it works fine. |
| 07:15 | cemerick | yup, it should always work |
| 07:15 | cemerick | Gertm: you've been using SLIME with other lisps? |
| 07:15 | Gertm | I have, but I disabled the configuration. |
| 07:15 | Gertm | It works fine for everything else. |
| 07:16 | cemerick | OK. I don't use SLIME, but everything I've heard is that you should be prepared to be SOL if you use it with multiple lisps. |
| 07:16 | Gertm | SOL? |
| 07:16 | cemerick | shit outta luck |
| 07:17 | Gertm | hmpf, lemme clean up my .emacs a bit more |
| 07:17 | ejackson | Gertm: have you done (use 'clojure.repl) ? |
| 07:17 | Gertm | ejackson: in the slime repl? no |
| 07:17 | cemerick | ejackson: should that be necessary? It's implicit in clojure.main/repl… |
| 07:18 | Gertm | ejackson: well that solves it, thanks a lot! :) |
| 07:18 | ejackson | yeah, you need to do that to get doc, it hung me out for a while too :) |
| 07:18 | ejackson | cemerick: yup, necessary. |
| 07:18 | Gertm | As long as there is a solution to the problems, all is well. |
| 07:18 | cemerick | That's really suprising. |
| 07:19 | Gertm | Can I make slime execute that on startup? |
| 07:19 | dEPyWork | hey guys |
| 07:19 | dEPyWork | I was doing 4clojure and I'm stuck at flattening... |
| 07:20 | dEPyWork | Is there a better option than going trough all elements and adding them to result list? |
| 07:20 | ejackson | cemerick: yeah, it was so surprising that I submitted a bug report on leiningen... oopsie :) |
| 08:08 | jsabeaudry | Is there a facility for evaluating a form with a timeout? |
| 08:09 | jsabeaudry | Ah, too early to ask questions like that! |
| 08:10 | jsabeaudry | ;) |
| 08:10 | osa1 | how can I create a function with an optional parameter? |
| 08:10 | Fossi | osa [foo & body] |
| 08:10 | Fossi | if you want variable param count |
| 08:11 | cemerick | jsabeaudry: you want evaluation to halt if the evaluation goes past the timeout? |
| 08:11 | kmicu | jsabeaudry: can you give an example? |
| 08:11 | Fossi | if fixed just (defn ([] (print 1)) ([a] (print a))) |
| 08:11 | jsabeaudry | cemerick, I want to throw a TimeOutException |
| 08:13 | osa1 | I'm trying to list files in a folder, (. (File. path) (listDir)) doesn't return me a clojure data structure, is there a way to do this with just clojure functions? |
| 08:13 | jsabeaudry | kmicu, sure, I want to provide a repl in my webapp (but not sandboxed, I understand the risks) however if I compute something too long by mistake I would like it to timeout |
| 08:13 | cemerick | jsabeaudry: The short answer is that you can execute code via a future and deref it with some timeout, but that future will continue to process even if the deref timeout expires. |
| 08:14 | cemerick | jsabeaudry: The long answer is that you want something like the interruptible-eval in nREPL. https://github.com/clojure/tools.nrepl |
| 08:15 | jsabeaudry | cemerick, The short answer is something like this? http://osdir.com/ml/clojure/2010-02/msg00913.html |
| 08:16 | cemerick | jsabeaudry: Yup; but again, evaluation will continue past the timeout. |
| 08:16 | cemerick | the timeout only applies to the attempt to deref the future, not the evaluation |
| 08:17 | jsabeaudry | cemerick, Ok, I understand, thank you very much, I'll study interruptible-eval |
| 08:19 | cemerick | jsabeaudry: FYI, I'll be releasing an HTTP Ring handler/transport for nREPL soonish. |
| 08:38 | jheander | good morning! |
| 08:40 | jheander | I've just upgraded to leiningen 1.7.0 and now have problems that lein jar and lein deploy first cleans my working directory and re-runs lein deps. This clears out the "classes" dir that contains compiled protobuf files which are then missing from the jar. How can I solve this? Should I add some hook to the project.clj? |
| 08:41 | jheander | using clojure-protobuf 0.6.0-beta7 to compile the protobuf definitions... |
| 08:42 | kmicu | jheander: Good morning at 3 pm :)! |
| 08:43 | jheander | isn't it always morning on the internet? :) |
| 08:43 | lucian | of course it is |
| 08:44 | dunib | kmicu: good morning at 11:47pm! |
| 08:45 | dunib | I think it's easier just to say "good day", even if it's night time, it's wishing you a good tomorrow. |
| 08:45 | dunib | Goodmorrow is an option, but it sounds far too old-timey |
| 08:45 | jheander | :) |
| 08:46 | lucian | i believe the convention is to always function on local time |
| 08:46 | kmicu | lucian: Clojure docs not specify that. |
| 08:46 | lucian | so if i join a channel and it's morning, i'll say good morning |
| 08:46 | lucian | kmicu: irc-tiquette does :) |
| 08:47 | kmicu | lucian: give me the source :) |
| 08:47 | jheander | kmicu: http://thinkmoult.com/ugt.html |
| 08:48 | kmicu | mea culpa! ;] |
| 08:48 | lucian | see, it works |
| 08:48 | lucian | we've just spent that time explaining UGT instead |
| 08:49 | jheander | haha! :) |
| 08:51 | jheander | so anyone know how to work with hooks in leiningen 1.7.0? The clojure-protobuf code contains a nice (add-hook) but it doesn't seem like its invoked. Either because it hookes on a target that I don't run or because the hook is never loaded. Tried adding :hooks [leiningen.protobuf] to project.clj, but it does not make a difference... |
| 08:54 | jheander | or, actually: adding :hooks makes the hook trigger correctly when running "lein javac", but it seems "lein javac" is not run during "lein jar"...weird :) |
| 09:08 | samaaron | afternoon all |
| 09:08 | ckirkendall | well not all its morning here :) |
| 09:09 | samaaron | ah, but there's only one true time: GMT ;-) |
| 09:10 | samaaron | but if you want to pretend it's morning, then fine :-p |
| 09:12 | osa1 | what are differences between binding and let? |
| 09:12 | ejackson | hello samaaron |
| 09:13 | samaaron | ejackson: howdy goodly sire |
| 09:14 | cemerick | osa1: let establishes named locals, binding establishes thread-local bindings for vars |
| 09:15 | kmicu | osa1: http://clojuredocs.org/clojure_core/clojure.core/binding |
| 09:23 | samaaron | does anyone have any experience using native libs using more recent versions of lein? |
| 09:24 | samaaron | i've been using cake for the last year or so for this task - but i'm looking to move back to lein |
| 10:06 | octe | is there a way of checking if a variable is something iterable, like a vector/seq? |
| 10:07 | TimMc | octe: coll? |
| 10:07 | octe | thanks |
| 10:07 | TimMc | octe: It's a little complicated, actually. |
| 10:08 | TimMc | You can "iterate" over nil, and if you call seq on certain things you get back soemthing iterable |
| 10:08 | octe | TimMc, well, yes, but i want to know is if i can pass it to apply |
| 10:09 | TimMc | &(apply str "hello") |
| 10:09 | lazybot | ⇒ "hello" |
| 10:09 | TimMc | octe: What you really want to know is, "Does seq accept this?" |
| 10:09 | TimMc | and there's not currently a clean way of finding out. |
| 10:20 | octe | TimMc, ah. |
| 10:21 | octe | &(seq? "hello") |
| 10:21 | lazybot | ⇒ false |
| 10:21 | octe | &(coll? "hello") |
| 10:21 | lazybot | ⇒ false |
| 10:21 | octe | mhm, afer thinking about it, i do want to know if it's some kind of collection and can be used with apply |
| 10:21 | octe | coll? seems to work for my use |
| 10:27 | kmicu | &(ancestors (class "hello")) |
| 10:27 | lazybot | ⇒ #{java.lang.Object java.io.Serializable java.lang.Comparable java.lang.CharSequence} |
| 10:34 | kmicu | octe: &(source coll?) |
| 11:00 | raf_ | hello, I have what might be a stupid question. I want to read in a map from a file and bind it to a var. What is the easiest way to do that. |
| 11:01 | ejackson | raf_: define it in the clj file |
| 11:02 | ejackson | (def my-var {:a 1 :b 2}) in my-data.clj. Then (use 'my-data.clj) |
| 11:02 | TimMc | raf_: Is this for a config file? |
| 11:02 | raf_ | yes its config with db credentials |
| 11:02 | TimMc | You can (read-string (slurp "file.clj")) |
| 11:03 | TimMc | and (binding [*read-eval* false] ...) around that if you don't trust the file. |
| 11:03 | jsabeaudry | Is it possible to have a security.policy file to be usable from both the uberjar and a source tree? |
| 11:03 | raf_ | ok so does read-string eval the stirng? |
| 11:03 | raf_ | bc i tried just slurp |
| 11:03 | TimMc | raf_: No, but see (doc *read-eval*) |
| 11:03 | ejackson | TimMc: that's cute. |
| 11:03 | raf_ | ok thanks guys! |
| 11:04 | TimMc | ejackson: That's what she said. |
| 11:04 | ejackson | _) |
| 11:06 | jsabeaudry | Let me put it another way, is there a way to reference a file that is in the jar when specifying jvm-opts ? |
| 11:06 | raf_ | awesome, it all works now. Thanks TimMc and ejackson |
| 11:07 | TimMc | jsabeaudry: I believe in Java-land there is a convention for that, like path/to.jar!path/inside.file |
| 11:07 | TimMc | s/convention/syntax/ |
| 11:08 | jsabeaudry | TimMc, Are you aware of a way to "embed" jvm opts "in" an uberjar ? |
| 11:09 | TimMc | jsabeaudry: beyond catting a file to the fornt, no. |
| 11:09 | TimMc | *front |
| 11:09 | TimMc | You might look at Manifest.mf specs |
| 11:11 | jsabeaudry | TimMc, Alright, I'll check that out, thanks! |
| 11:21 | TimMc | jsabeaudry: Can you do something sneaky like have a jar inside a jar and trampoline into that? |
| 11:22 | TimMc | jsabeaudry: And there's this, but I don't know enough about Java security to tell whether it is what you want: http://www.javakb.com/Uwe/Forum.aspx/java-security/606/Policy-file-in-a-Jar |
| 11:24 | jsabeaudry | TimMc, I guess that kind of trickery could possibly work but as of now it was more a matter of convenience than requirement. I'm taking note of that link though in a low priority issue :) good find! |
| 11:54 | ejackson | its so great ! |
| 11:54 | seanm | what is it? Don't think I've seen that before |
| 11:56 | ejackson | aah, its the coolest |
| 11:56 | ejackson | its -> but as soon as anything returns nil, the whole thing stops and returns nil |
| 11:56 | achengs | short circuiting -> on nil |
| 11:56 | seanm | oh that is hot |
| 11:56 | ejackson | i don't want to say its a monad.... only it is. |
| 11:57 | ejackson | in effect |
| 11:57 | cemerick | it's not |
| 11:57 | ejackson | but I don't want to get battered by smart people, so I'm not going to stick to those guns |
| 11:57 | cemerick | :-P |
| 11:57 | ejackson | ^^^ |
| 11:57 | seanm | haha |
| 11:57 | seanm | I'm with ya there |
| 11:57 | cemerick | ejackson: see http://blog.fogus.me/2010/09/28/thrush-in-clojure-redux/ |
| 11:58 | achengs | side question: what's the basic reason a domonad doesn't show up in a stack trace? it must be simple but I don't get it yet |
| 11:58 | cemerick | also, see fnil for an oft-ignored nil-related fn |
| 11:58 | ejackson | fnil ! |
| 11:58 | ejackson | something new |
| 11:58 | ejackson | achengs: is domonad a macro ? |
| 11:58 | achengs | yes |
| 11:59 | ejackson | cemerick: that's highly useful, thanks. |
| 12:00 | achengs | if I bind symbol foo to the result of a state-m domonad, isn't foo bound to a fn that takes a state and returns [value new-state]? |
| 12:04 | ejackson | achengs: FWIW: I'm not good with this stuff and I don't have the particulars to hand, but a macro gets evaluated at read-time, so probably won't be around when the stacktrace is thrown. That will be on the code it outputs. |
| 12:05 | seanm | I think that's correct, it probably shows up in a stack as gensym's depending on how the macro's written |
| 12:05 | achengs | ejackson: yes. so I was thinking foo never sees the domonad macro, but instead sees the fn left behind... and then gets bound like in an ordinary defn so when I call foo I thought I should see foo in the stack trace |
| 12:06 | ejackson | i got nothing |
| 12:06 | achengs | I see m_bind's instead which are all on the same line (where the monad was defined) which is less useful. |
| 12:07 | seanm | I have pretty much 0 experience with stack traces in binds unfortunately |
| 12:07 | seanm | maybe I should start messing with that |
| 12:18 | jsabeaudry | Regarding clojail, I granted java.security.AllPermissions but I am still getting FilePermission exceptions? Anyone encountered that problem? |
| 12:23 | jimduey_ | acheng: You've got it right. Stack traces with domonad are pretty hard to trace through. |
| 12:24 | Bronsa | i wonder why fnil isn't implemented like this https://gist.github.com/1828382 |
| 12:26 | jimduey_ | ejackson: -?> is very similar to (domonad maybe-m ...) in effect. Except maybe-m lets you bind the results of the various stages to symbols for use later. Similar to a nested series of when-let's. |
| 12:27 | achengs | jimduey: it might dissuade me from using monads for my current use case (framework for maintainers of tests which fail often due to dev work)... I guess the answer is this: a domonad leaves behind a do statement with m_bind's and m_results... and since this is not a fn, then binding foo to this and calling foo won't cause foo to show up in the trace |
| 12:27 | ejackson | jimduey_: that's what I was intimating earlier, but knew there were brickbats about :) |
| 12:27 | jimduey_ | :) |
| 12:28 | ejackson | the unwary inaccuracy is fatal in this town |
| 12:28 | achengs | ejackson: and I'm guessing a proper monad can be combined or transformed as expected vs -?> |
| 12:28 | ejackson | zakly |
| 13:07 | dEPy | any1 can help me with my compress function? http://pastie.org/3382433 |
| 13:07 | dEPy | it's for http://www.4clojure.com/problem/30 |
| 13:07 | dEPy | And I get OK result except the first item is not there in the final list |
| 14:09 | technomancy | weird; monitor-enter and monitor-exit are special forms |
| 14:09 | technomancy | never noticed that before |
| 14:10 | robinkraft | I'd like to create a comma-separated string by joining a few integers with a vector. the following works, but I know I'm missing some simple combination of map/reduce/apply that would make this more elegant. |
| 14:10 | robinkraft | (let [lat 90 |
| 14:10 | robinkraft | lon -180 |
| 14:10 | robinkraft | series [1 2 3] |
| 14:10 | robinkraft | j (partial join ",")] |
| 14:10 | robinkraft | (j [lat (j [lon (j series)])])) |
| 14:11 | robinkraft | (let [lat 90 |
| 14:11 | robinkraft | crap, sorry about the line breaks |
| 14:12 | emezeske | In case anyone needs another example of why package signing is a good thing: http://dev.horde.org/h/jonah/stories/view.php?channel_id=1&id=155 |
| 14:12 | robinkraft | gist here: https://gist.github.com/1829381 |
| 14:12 | TimMc | robinkraft: You want to turn [1 2 3] into "1, 2, 3" ? |
| 14:12 | robinkraft | Ultimately I'd like "90, -180,1,2,3" |
| 14:13 | ibdknox | (join "," (concat [lat lon] series)) |
| 14:14 | TimMc | robinkraft: Wait, *sometimes* with spaces? |
| 14:14 | robinkraft | that should do it! |
| 14:14 | TimMc | emezeske: https://github.com/technomancy/leiningen/issues/31 :-( |
| 14:14 | robinkraft | no, never with spaces |
| 14:14 | clojurebot | I don't understand. |
| 14:15 | robinkraft | ibdknox: thanks! |
| 14:15 | technomancy | TimMc: regular maven signing just involves uploading a .asc file alongside your jar |
| 14:15 | technomancy | it doesn't necessarily mean placing any new files inside the jar from what I gather |
| 14:15 | emezeske | TimMc: That's pretty cool. |
| 14:16 | technomancy | emezeske: we're considering having the next-gen clojars accept signed uploads only for releases. |
| 14:16 | technomancy | assuming we can make the signing process seamless |
| 14:17 | technomancy | (FSVO seamless) |
| 14:17 | TimMc | technomancy: Oh, nice! |
| 14:17 | technomancy | TimMc: seems like issue 31 is pretty easy to solve just by adding more entries to :uberjar-exclusions, right? |
| 14:18 | TimMc | technomancy: You already accepted a patch for that, silly. |
| 14:18 | emezeske | technomancy: That's great. I had seen some arguments against that in here, but I think it is a very very good idea. |
| 14:18 | technomancy | TimMc: yeah, but the comments have someone mentioning a new issue |
| 14:18 | TimMc | emezeske: Yeah, signed jars as dependencies were annoying the hell out of me. I don't know if there's a good story for signed deps in uberjars... |
| 14:18 | TimMc | Oh, really? |
| 14:19 | technomancy | TimMc: I asked for more clarification, just ignoring it till I hear more |
| 14:19 | technomancy | since the workaround is easy |
| 14:19 | ritre | robinkraft: You can use list* instead of concat. |
| 14:19 | technomancy | emezeske: mind if I ping you once I pick up the signing issue? sounds like you've got some opinions on it. =) |
| 14:19 | ritre | &(clojure.string/join "," (list* 90 -190 [1 2 3])) |
| 14:19 | lazybot | ⇒ "90,-190,1,2,3" |
| 14:19 | TimMc | robinkraft: Your example output had sapces. *shrug* |
| 14:20 | emezeske | technomancy: Sure! Not sure how much help I'll be though. :) |
| 14:20 | robinkraft | TimMc: sry bout that, I didn't notice. thanks for looking though |
| 14:22 | robinkraft | ritre: appreciate the hint - that's exactly the level of generality I need |
| 14:28 | jkdufair | technomancy: jack_in.clj breaks in cygwin due to win/unix path issues and the use of (System/getProperty "user.home"). i'd love to fork and fix it. any ideas on how to even approach this? |
| 14:29 | technomancy | jkdufair: hm; not really, I haven't used cygwin. |
| 14:30 | technomancy | I know cygwin's inconsistency regarding home has caused a lot of issues in Leiningen itself |
| 14:31 | jkdufair | is it worth having an abstraction for that? |
| 14:32 | technomancy | unix doesn't have to cost money =) |
| 14:32 | foodoo | (Linux) |
| 14:32 | jkdufair | and can't afford a machine that can run a decent vm |
| 14:32 | jkdufair | for linux |
| 14:32 | technomancy | "No one should be denied access to unix because of lack of funds." |
| 14:33 | technomancy | sounds like a human rights declaration or something |
| 14:33 | jkdufair | of course, there's dual boot. bleh |
| 14:33 | technomancy | happy to take a patch, I just don't know enough about the problem to advise. |
| 14:33 | jkdufair | ok thx |
| 14:36 | emezeske | jkdufair: Yeah, dual boot is no fun. It's annoying knowing that there is a Windows partition next to your real OS. |
| 14:36 | TimMc | :-) |
| 14:36 | emezeske | :P |
| 14:36 | jkdufair | yeah cygwin works so well but alas there's no java for cygwin |
| 14:37 | TimMc | haha |
| 14:37 | jkdufair | EmacsOS. Now we're talking. |
| 14:37 | jkdufair | didn't that used to exist at some point? |
| 14:37 | TimMc | emezeske: I don't mind too much, but then... the Windows partition on my laptop is actually a honeypot for thieves. |
| 14:37 | ibdknox | not nearly as efficient as vimOS ;) |
| 14:37 | emezeske | TimMc: hahaha |
| 14:37 | technomancy | TimMc: thieves and border-crossing agents |
| 14:37 | technomancy | I guess it's more like dual-booting Emacs and Mozilla |
| 14:42 | TimMc | technomancy: Correct. |
| 14:42 | TimMc | And hopefully they don't notice the big ol' encrypted Linux partition. |
| 14:44 | alexyk | given a dec and a sequence of indices, how do I most elegantly get the seq of the elements of dec at those indices? |
| 14:45 | technomancy | a vec? |
| 14:45 | TimMc | "dec"? |
| 14:45 | TimMc | deque? |
| 14:45 | technomancy | (map my-vec [0 24 95 255]) |
| 14:46 | ibdknox | (map my-vec (map dec indices)) |
| 14:46 | ibdknox | all possible interpretations of that question :) |
| 14:47 | emezeske | ibdknox: Have you had a chance to glance at https://github.com/ibdknox/crate/pull/1 yet? |
| 14:47 | ibdknox | emezeske: yep, seems reasonable |
| 14:47 | TimMc | technomancy: "You can't." :-P |
| 14:47 | alexyk | (dec …) what's wrong with you people! :) |
| 14:47 | lazybot | ⇒ -1 |
| 14:47 | alexyk | vec |
| 14:47 | alexyk | Lion is evil |
| 14:47 | emezeske | ibdknox: Cool. I'm already using a bunch of that stuff in my closed-source project, and it's great |
| 14:48 | ibdknox | emezeske: there are a couple other improvements I want to make at the same time |
| 14:48 | TimMc | alexyk: Oh, you should have mentioned you had a writing impediment! |
| 14:48 | emezeske | ibdknox: Ah, nice |
| 14:48 | alexyk | TimMc: Lion has it, it's getting serious |
| 14:48 | technomancy | alexyk: "It looks like you're trying to chat on IRC. Would you like me to replace what you type with nonsense?" |
| 14:48 | TimMc | We would have been more sensitive. |
| 14:48 | technomancy | the return of clippy! |
| 14:48 | ibdknox | so I'll merge that in and add those at the same time and release 0.2.0 |
| 14:49 | alexyk | technomancy: so I need selection of a vector at given indices. Will your map still apply? |
| 14:49 | ibdknox | I must not have that magical lion setting |
| 14:49 | emezeske | Sounds good. I'll be happy to iterate on that stuff if you have any concerns. |
| 14:49 | technomancy | alexyk: sure |
| 14:49 | ibdknox | my text does not get autocorrected |
| 14:49 | technomancy | magical lion setting sounds like an RPG quest |
| 14:49 | TimMc | &(map (vec (range 10 20)) [1 5 9]) |
| 14:49 | lazybot | ⇒ (11 15 19) |
| 14:52 | jsabeaudry | ibdknox, emezeske, Is there any project that serves as an example of hiccup, crate and cljs-build crossovers? |
| 14:53 | jsabeaudry | not separately but in synergy |
| 14:53 | emezeske | jsabeaudry: my closed-source project :( :( |
| 14:53 | ibdknox | I haven't had a use for crossovers yet |
| 14:54 | emezeske | I use crossovers for a few things, my favorite of which is a macro that defs html IDs and their selectors at one time |
| 14:54 | emezeske | So my server-side hiccup code uses the ID and my client-side stuff uses the selector |
| 14:55 | emezeske | No more typo-ed mismatches! :) |
| 14:55 | ibdknox | I find that most of my errors in Clojure stem from typo'd keywords |
| 14:55 | ibdknox | :/ |
| 14:55 | technomancy | so ur/web actually uses the compiler to ensure that every link within the webapp goes to an existing handler |
| 14:55 | technomancy | it's actually able to guarantee no 404s |
| 14:56 | emezeske | yeah, I actually do also share my url-building code with crossovers |
| 14:56 | emezeske | I dunno about guaranteeing no 404s ;), but less maybe |
| 14:57 | augustl | is there a document I can read to grok repositories and all that jazz in leiningen? Never used maven, java, etc. https://github.com/twall/jna seems to assume I already know how to do it. |
| 14:57 | technomancy | augustl: try "lein help tutorial" |
| 14:58 | augustl | thanks |
| 15:05 | augustl | technomancy: hmm, I can't seem to find any relevant information there |
| 15:06 | augustl | I still don't understand what I need to do in order to add jna to my project. |
| 15:06 | augustl | the jna readme mentions no repositories, does that mean it's probably not in any repository? |
| 15:08 | technomancy | lein search might tell you |
| 15:09 | technomancy | if they've published it on clojars or central then it would be reasonable not to mention it in the readme, but it's also possible they've simply neglected to publish it if they aren't expecting anyone to use it |
| 15:09 | jsabeaudry | augustl, You want want to check how clojure-jna did it https://github.com/Chouser/clojure-jna |
| 15:10 | augustl | can I somehow tell leiningen to use https://github.com/downloads/twall/jna/jna.jar? |
| 15:11 | augustl | and not look for it in a repo |
| 15:12 | augustl | odd, clojure-jna has no package.clj |
| 15:12 | technomancy | clojurebot: repeatability? |
| 15:12 | clojurebot | repeatability is crucial for builds, see https://github.com/technomancy/leiningen/wiki/Repeatability |
| 15:12 | technomancy | augustl: see "Free-Floating jars" at the link above |
| 15:12 | augustl | ah thanks |
| 15:12 | dEPy | ,(concat 1 2) |
| 15:12 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: Don't know how to create ISeq from: java.lang.Long> |
| 15:13 | augustl | technomancy: so I'll have to write my own shell script and use curl, or something like that? |
| 15:14 | augustl | I've no problem trusting the github link |
| 15:15 | technomancy | augustl: like it says, if you need it to work on more than one machine, you need to put it into a repository; otherwise use lein-localrepo |
| 15:17 | technomancy | augustl: also report a bug with the project |
| 15:18 | augustl | it seems lein-localrepo is just an util for fetching etc, I can't add the URL to the jar in my project.clj, correct? |
| 15:19 | Apage43 | these are all wrappers around Maven. If you want to be able to depend on it in a project.clj it has to live in a Maven repo somewhere. |
| 15:19 | augustl | hmm, it is here http://repo2.maven.org/maven2/net/java/dev/jna/jna/3.4.0/ |
| 15:20 | augustl | as net.java.dev.jna, instead of com.sun.jna |
| 15:20 | augustl | sould I use that one then? |
| 15:21 | augustl | then there's http://search.maven.org/#browse|-2700344 but that's a very old version |
| 15:21 | Apage43 | http://search.maven.org/#search|ga|1|jna |
| 15:21 | technomancy | depends on the project |
| 15:22 | augustl | Apage43: 3.0.9 is very old |
| 15:22 | Apage43 | the net.java.dev.jna on maven central was uploaded on 21 Dec |
| 15:22 | Apage43 | it's 3.4.0 |
| 15:22 | Apage43 | http://search.maven.org/#artifactdetails|net.java.dev.jna|platform|3.4.0|jar |
| 15:22 | augustl | yeah, but is it the same package? Who knows.. |
| 15:22 | Apage43 | github.com/twall/jna is the URL listed in the pom |
| 15:23 | augustl | hmm, maven can't find the artifact with "[net.java.dev.jna "3.4.0"]" in my project.clj |
| 15:24 | augustl | this is hard :) |
| 15:24 | TimMc | wrong spec |
| 15:24 | TimMc | [net.java.dev.jna/platform "3.4.0"] |
| 15:24 | TimMc | augustl: ^ |
| 15:25 | augustl | ah, there's an artifact id there too |
| 15:25 | augustl | thanks |
| 15:25 | Apage43 | er |
| 15:25 | Apage43 | you prolly want [net.java.dev.jna/jna] |
| 15:25 | Apage43 | http://search.maven.org/#artifactdetails|net.java.dev.jna|jna|3.4.0|jar |
| 15:25 | Apage43 | i linked to the wrong thing |
| 15:26 | augustl | ah, that seems to work |
| 15:35 | clj_newb | Regular expressions define regular languages over unicode characters. Now, I want to define a regular language over arbitrary objects. Is there a library for this? [I have a vector of objects, and I want to know if it matches a certain abstract pattern.] |
| 15:36 | TimMc | I think I've seena lib for this in Java. |
| 15:36 | foodoo | clj_newb: out of curiosity: What kind of things do you want to check? Something like vec[0].foo=4 && vec[1].bar=9 ? |
| 15:37 | clj_newb | I'm pattern matching keystrokes |
| 15:37 | amalloy | you should invest in learning fnparse. it's more powerful than regexes (it's a full parser), and it lets you use anything as your tokens |
| 15:37 | clj_newb | so I have this WYSIWYG editor, and I need a way to define key bindings |
| 15:38 | clj_newb | and I want to describe key bindings as regexes over key events (basically modifiers + characters) |
| 15:38 | clj_newb | amalloy: does it parse CFGs? |
| 15:38 | TimMc | It's a full parser. |
| 15:38 | amalloy | it probably parses contextual grammars as well |
| 15:38 | clj_newb | hmm, EBNFs are equiv to CFGs right? |
| 15:39 | TimMc | I don't see why not. |
| 15:40 | foodoo | clj_newb: I wonder if you approach the problem in a too complex way. Won't maps also work with the key symbols being the map-keys? |
| 15:41 | foodoo | clj_newb: or do you plan to implement something as complex as Emacs or Vim bindings? |
| 15:42 | clj_newb | I'm going for something as complicated as emacs/vim |
| 15:42 | foodoo | clj_newb: so we will soon have a new contestant for the best editor of all times :D |
| 15:43 | clj_newb | more like another editor with 1 user |
| 15:43 | TimMc | clj_newb: SO use Emacs' or vim's command algorithms. |
| 15:44 | TimMc | Multics Emacs, for instance, has recursive lookup tables. |
| 15:44 | clj_newb | TimMc: besides the source code, are their algorithms documented anywhere? |
| 15:45 | clj_newb | actually, why don't I define my key short cuts |
| 15:45 | clj_newb | as a stack laguage |
| 15:45 | clj_newb | like a miniforth |
| 15:45 | TimMc | Finite State Machines |
| 15:46 | TimMc | clj_newb: Probably? I read about it somewhere... |
| 15:50 | jaimef | so I remove all references to clojure*jar, and run lein and it bombs on "main" java.io.FileNotFoundException: Could not locate leiningen/core/main__init.class |
| 15:56 | TimMc | jaimef: Whoa, back up. |
| 15:56 | Raynes | Hahaha |
| 15:57 | Raynes | https://refheap.com/paste/750 Immortalized. |
| 15:58 | TimMc | Raynes: You need a new hobby. |
| 15:58 | Raynes | It's true. |
| 16:04 | superjudge | Question: I am looking at ways to create a sort of REST "transit" thingy, i.e. something that offers a REST API to the "outside", and makes calls to another REST API on the "inside". The purpose is wrap the inside interface to present a simpler interface to the outside, and to make some transformations of the results obtained from the inside interface. I am fairly new to doing "real" stuff in Clojure, and it has been a while since |
| 16:04 | superjudge | did any Java work, but I seem to remember that servlets are not very suitable for making outbound HTTP calls. I have been looking at compojure, compojure-rest, and Noir, and they all seem very nice for creating "terminating" services, but it is not obvious to me if there is a reasonable way of doing "transits". Any pointers would be highly appreciated. |
| 16:05 | superjudge | In this particular case it is actually an instance of elasticsearch that sits on the "inside", and I wish to offer a simpler interface and mangle the query results somewhat. |
| 16:05 | cemerick | superjudge: You want a decent HTTP client. Try https://github.com/dakrone/clj-http |
| 16:08 | superjudge | cemerick: Yeah, I actually played with that, but will it play nicely to just make outbound HTTP calls in a "handler" (I don't know the correct term here, but I mean making outbound calls from something that I assume is essentially a Java servlet)? It won't wreak havoc with threading models and whatnot? |
| 16:09 | cemerick | superjudge: well, whether you make a call synchronous with the handling of the inbound request depends on a lot of factors that are hard to generalize without knowing the semantics of the HTTP apis involved. |
| 16:10 | cemerick | You can certainly call out and block on the response to the API you're wrapping if need be. |
| 16:10 | cemerick | i.e. it's not going to break anything; will certainly be more resource-intensive than performing calls asynchronously, but it might be the only correct way to do things. |
| 16:11 | superjudge | cemerick: Yes, I assume that would be what would happen if I do not take any other measure than just do, say, an outbound "get" or "put" with clj-http? |
| 16:12 | cemerick | superjudge: you may have no choice if you need to ensure certain semantics. |
| 16:13 | cemerick | If the operations involved were idempotent, then you could fire and forget, but otherwise… |
| 16:15 | superjudge | cemerick: yeah, but I guess also in the case where I actually want to get a response back, transform it, and then send the transformed response back as the response of the original, incoming request, there is some fairly involved stuff to map things together in an async model, I guess. And I guess it also depends a lot of the actual network and "dispatching" model of the underlying servlet container. |
| 16:17 | hiredman | superjudge: have you seen drewrs elasticsearch client? |
| 16:17 | hiredman | https://github.com/drewr/esperanto |
| 16:17 | superjudge | cemerick: but anyway, cool, I'll do some more tests with clj-http tomorrow, and I shall also dig a little bit in the documentation of Tomcat and Jetty |
| 16:18 | superjudge | hiredman: no, that one I haven't seen, I'll certainly check it out! Thanks! |
| 16:18 | cemerick | superjudge: I wouldn't worry too much about tomcat or jetty; I'd expect them to be a non-factor (or, they should be). |
| 16:23 | superjudge | cemerick: yeah, I was just thinking from the perspective of whether you could actually do outbound calls non-blocking and hook into the network handling code of e.g. Tomcat or Jetty. But maybe I am way off from how they are actually implemented? It is obviously much simpler to just make blocking outbound calls, I am just curious on what alternatives there could be. |
| 16:24 | superjudge | Also, I have done some Node.js coding lately, which has obviously twisted my mind in strange and unforeseen ways... |
| 16:24 | cemerick | superjudge: "network handling code"? |
| 16:25 | cemerick | Tomcat and Jetty likely have no infrastructure for making outgoing HTTP calls. |
| 16:26 | yazirian | sounds more like http server push |
| 16:26 | cemerick | oh, I see |
| 16:26 | yazirian | which i know nginx has modules for, probably others do too |
| 16:26 | cemerick | They both support asynchronous response, a la comet IIRC |
| 16:26 | ibdknox | why not just use netty? |
| 16:26 | ibdknox | non-blocking from the ground up |
| 16:27 | cemerick | That doesn't really save you anything resource-wise though; you're still going to be chewing up a thread making the external HTTP call. |
| 16:27 | ibdknox | as in making an http call out of the app? |
| 16:27 | yazirian | depends on the implementation, those calls can be aggregated into something nio-based |
| 16:27 | ibdknox | that can be done nio too |
| 16:28 | ibdknox | netty is a generic networking platform |
| 16:28 | superjudge | ibdknox: is netty also a servlet container? Does it work with things like composure? Sorry, as I said, I have been away from the Java world for quite some time... |
| 16:28 | lucian | is it like twisted in scope? |
| 16:28 | yazirian | certainly doesn't need to be 1:1 ratio of threads to back-end requests |
| 16:28 | ibdknox | superjudge: compojure you mean? Yes, I have examples of Noir on netty |
| 16:29 | superjudge | ibdknox: Oh, that sounds interesting! |
| 16:29 | ibdknox | yeah, you can think of it as a much more mature node.js |
| 16:31 | jaimef | TimMc: back up? |
| 16:31 | superjudge | So, what I am basically driving at is just this, i.e. is it possible to both have these pretty nice frameworks like compojure AND the efficiency of non-blocking network layer, but without all the nasty callback stuff of Node.js (and a much nicer language, like, say, Clojure). |
| 16:32 | superjudge | I'll absolutely have a look at netty then. |
| 16:35 | ibdknox | superjudge: you should check out Noir :) |
| 16:37 | superjudge | ibdknox: Yes, I've actually played with that as well, and it is really nice! |
| 16:38 | superjudge | I still haven't figured out fully on what different levels the popular "framework" operate on, and how much I need for just doing REST stuff, but I already did some simple REST things on Noir, which actually worked very well and was very simple. |
| 16:39 | ibdknox | superjudge: Noir is built on compojure and is just a very thin abstraction to make it easier to organize and deal with writing stuff in compojure |
| 16:41 | ibdknox | if you don't use any of the other stuff Noir provides, it's basically at the same level just with a slightly more flexible syntax :) |
| 16:41 | brehaut | superjudge: if you dont mind me pimping my own stuff: http://brehaut.net/blog/2011/ring_introduction |
| 16:41 | brehaut | (it doesnt cover noir (sorry chris)) |
| 16:41 | ibdknox | brehaut: I cry at night on the days I see this ;) |
| 16:42 | brehaut | ibdknox: its on the list of things to do! |
| 16:42 | ibdknox | it's a great rundown of it. superjudge it's worth the read |
| 16:42 | brehaut | honest |
| 16:42 | superjudge | brehaut: he, he, I actually just found that blog entry like 10 minutes ago or so! Seems very good, I am reading it now... |
| 16:43 | superjudge | Got to go put the kids to bed now, but thanks a lot everyone, I now have some new leads to follow! |
| 16:43 | brehaut | superjudge: the code *should* all work with clojure 1.3 and the more recent versions of all the libraries but i havent completed testing all that yet |
| 16:45 | superjudge | brehaut: sounds great, I'll continue going through it tomorrow. I'll let you know if I find anything not working! |
| 16:45 | brehaut | thanks |
| 16:47 | seancorfield | brehaut: if you do decide to update that blog post, maybe you could refer to clojure.java.jdbc instead of clojure.contrib.sql? |
| 16:47 | brehaut | seancorfield: oh right. very good point |
| 16:48 | brehaut | seancorfield: i'll do that right now so as not to forget |
| 16:50 | seancorfield | i'll overlook the lack of FW/1 coverage there, but like ibdknox, i too cry at night about it :) |
| 16:51 | ibdknox | Noir was out when he wrote it :p though it was a baby then :) |
| 16:51 | brehaut | seancorfield: FW/1 didnt even exist for clojure when i wrote that did it? noir i actually chose to omit |
| 16:51 | seancorfield | brehaut: i'm just teasing :) yeah, the article predates the clojure port of FW/1... |
| 16:53 | brehaut | :) |
| 16:53 | seancorfield | i started it in late may '11 but got stuck trying to work with enlive in early june and put it aside until after the conj |
| 16:53 | ibdknox | brehaut: out of curiosity, why *did* you omit it? Just because it was so new? |
| 16:54 | brehaut | ibdknox: newness and the article was also already monsterously long |
| 16:54 | ibdknox | true that |
| 16:54 | brehaut | id been working on it for about 4 months when i decided to just post the damn thing |
| 16:54 | Raynes | brehaut: 4 months? |
| 16:54 | Raynes | brehaut: Dude, I write all my blog posts in one or two days. |
| 16:55 | Raynes | You need discipline. |
| 16:55 | seancorfield | heh, i have blog posts partly written that have laid around for months |
| 16:55 | brehaut | yeah. i started it in feb, and posted it in june? |
| 16:55 | ibdknox | lol |
| 16:56 | seancorfield | i just looked at the FW/1 commit history - i had that convo with cemerick at Strange Loop and "re-launched" FW/1 a few days before the Conj, it seems... |
| 16:56 | seancorfield | one day i'll actually get ppl using it :( |
| 16:56 | seancorfield | maybe i can bring some of my FW/1 CFML communit over to Clojure with it :) |
| 16:56 | ibdknox | more Clojurians! :D |
| 16:57 | seancorfield | the original CFML version is widely used... and the most watched / most forked CFML project on github (or it was last time i looked)... which is a bit sad really... |
| 16:57 | technomancy | having just written lein-scalac |
| 17:10 | mi6_x3m | hello |
| 17:10 | mi6_x3m | I am an enterprise Java dev |
| 17:10 | mi6_x3m | sick of writing down every data type |
| 17:10 | mi6_x3m | since I am also a scientific research guy I though id give clojure a try |
| 17:10 | mi6_x3m | will it help me overcome my rage? |
| 17:11 | amro | you must search deep inside yourself for that |
| 17:11 | foodoo | mi6_x3m: That partly depends on yourself |
| 17:11 | technomancy | it will help you channel your rage in productive ways |
| 17:11 | mi6_x3m | well I am working with F# and it helps me a lot, I expect the same from clojure |
| 17:12 | alexyk | how do you concatenate a bunch of strings adding "\n" in between? |
| 17:12 | technomancy | clojure.string/join |
| 17:12 | foodoo | mi6_x3m: Maybe you should start playing around on http://4clojure.com The first puzzles are pretty simple even for non-Clojorians |
| 17:14 | mi6_x3m | Id rather know if I can easily interface with existing Java libs |
| 17:14 | mi6_x3m | Hybernate, say |
| 17:14 | mi6_x3m | log4j etc. |
| 17:14 | mi6_x3m | i.e. how "practical" is clojure |
| 17:15 | foodoo | mi6_x3m: http://clojure.org/java_interop |
| 17:15 | foodoo | mi6_x3m: that's how you can work with practically every Java lib |
| 17:16 | brehaut | seancorfield: http://brehaut.net/blog/2011/ring_introduction fixed |
| 17:16 | mi6_x3m | foodoo: thank you! |
| 17:16 | mi6_x3m | seems to be the right thing to learn then |
| 17:17 | alexyk | given a list of words, what's the idiomatic way to get a map of word counts? |
| 17:18 | amalloy | &(dor frequencies) |
| 17:18 | lazybot | java.lang.RuntimeException: Unable to resolve symbol: dor in this context |
| 17:18 | amalloy | &(doc frequencies) |
| 17:18 | lazybot | ⇒ "([coll]); Returns a map from distinct items in coll to the number of times they appear." |
| 17:20 | chewbranca | mi6_x3m: I highly recommend watching some of the clojure videos, such as http://blip.tv/clojure/clojure-for-java-programmers-1-of-2-989128 |
| 17:20 | mi6_x3m | chewbranca: I got a nice book to read :) |
| 17:20 | mi6_x3m | or do they talk about something eles than a language introduction |
| 17:20 | seancorfield | mi6_x3m: at work we use Clojure as a general purpose dynamic scripting language for the back end of our Internet dating platform |
| 17:21 | mi6_x3m | seancorfield: cool |
| 17:21 | seancorfield | so we're doing a lot of practical stuff with it - persistence, html email generation, xml, json, logging, log file analysis, interacting with 3rd party rest apis etc |
| 17:22 | mi6_x3m | sweet than I am definetely starting with it |
| 17:22 | foodoo | seancorfield: do you have a blog about this stuff? |
| 17:22 | seancorfield | you can read about some that here: http://corfield.org/search/real+world+clojure |
| 17:22 | chewbranca | mi6_x3m: the design and pragmatic decisions made in clojure greatly influenced my interest in the language, a lot of thought went into the features of the language itself, so its interesting to hear it straight from Rich Hickey's mouth |
| 17:23 | seancorfield | foodoo: yeah, i blog about clojure a lot :) |
| 17:23 | foodoo | seancorfield: bookmarked |
| 17:23 | seancorfield | the clojure stuff is all here: http://corfield.org/cat/clojure |
| 17:40 | dnolen | hmmm ... seems like there's some real interest in ClojureScript from the various JS communities |
| 17:42 | ibdknox | dnolen: oh? |
| 17:45 | TimMc | jaimef: Yes, there was no context in your question, it was impossible to tell what you meant by "removing clojure*jar". I'm heading out to dinner right now though, so I probably won't see your response. |
| 17:46 | TimMc | &(let [] (require '[clojure.string :as s2]) s2/join) |
| 17:46 | lazybot | java.lang.RuntimeException: No such namespace: s2 |
| 17:46 | TimMc | &(do (require '[clojure.string :as s2]) s2/join) |
| 17:46 | lazybot | ⇒ #<string$join clojure.string$join@548695> |
| 17:46 | TimMc | &(do (require '[clojure.string :as s3]) s3/join) ;; just to make sure... |
| 17:46 | lazybot | ⇒ #<string$join clojure.string$join@548695> |
| 17:47 | amalloy | subforms of 'do forms at the top level are treated as separate top-level forms |
| 17:47 | TimMc | ^ Is that behavior because a top-level do's subforms are independently read and eval'd... |
| 17:47 | TimMc | OK, thanks. :-) |
| 17:51 | technomancy | TimMc: aka the gilardi scenario |
| 17:58 | scgilardi- | I happened to be looking up progn in the common lisp hyperspec today. I smiled when I saw "If progn appears as a top level form, then all forms within that progn are considered by the compiler to be top level forms." (precedent for something like the special handling done by clojure's do when it's top level) |
| 17:58 | robinkraft | Can anyone recommend particularly good tutorials/readings on recursion in Clojure? I can follow along in examples, but I have a lot of trouble modifying them or rolling my own. |
| 17:58 | robinkraft | I need to make a collection monotonically increasing. (mono-inc [3 1 5]) ==> [3 3 5]. This seems ripe for loop/recur, but per my earlier question I'm still having trouble wrapping my head around that form. |
| 17:59 | robinkraft | I thought something like (apply max (partition 2 1 [3 1 5])) might work, except that this throws an error (probably for obvious reasons for a non-newb): clojure.lang.LazySeq cannot be cast to java.lang.Numberclojure.lang.LazySeq cannot be cast to java.lang.Number |
| 17:59 | robinkraft | It's also incomplete - I need to retain the max, and so I can use it to compare with the next value in the vector. So it's sort of a moving maximum with replacement. |
| 18:00 | robinkraft | I could really use suggestions on how to approach this |
| 18:01 | arohner | robinkraft: what do you want mono-inc to do? I don't understand the example |
| 18:01 | aperiodic | well, (apply max (partition 2 1 [3 1 5])) fails because partition returns a list of lists, so applying max to that fails because max doesn't accept lists as args |
| 18:02 | robinkraft | arohner: if I have a series of integers [1 5 4 3 2 6 7], I want to build a vector of the maximum of a moving window of 2 elements. So compare 1 and 5, keep 5, compare 5 and 4, keep 5 again, etc. The result would be [5 5 5 5 6 7]. I'll deal with the 1 at the beginning elsewhere |
| 18:03 | arohner | robinkraft: that sounds like a job for reduce |
| 18:04 | brehaut | (defn mono-inc [s] (second (reduce (fn [[max v] i] (let [new-max (Math/max max i)] [new-max (conj v new-max)])) [(first s) []] s))) |
| 18:04 | robinkraft | aperiodic: thanks. how would you recast the result of partition so apply max doesn't throw an error? |
| 18:05 | brehaut | i think i might have misread the problem though |
| 18:05 | jkkramer | ,(rest (reductions max [1 5 4 3 2 6 7])) |
| 18:05 | clojurebot | (5 5 5 5 6 ...) |
| 18:05 | robinkraft | brehaut: that worked. Still reading through it though |
| 18:05 | arohner | jkkramer: wow! |
| 18:05 | robinkraft | arohner: seriously! |
| 18:06 | robinkraft | jkkramer: nice! |
| 18:06 | jkkramer | :) |
| 18:06 | robinkraft | holy cow that blows my mind. |
| 18:06 | jkkramer | basically a translation of his description: "compare 1 and 5, keep 5, compare 5 and 4, keep 5 again, etc." |
| 18:06 | hagna | after thinking it over I'm going to get the joy of clojure just in case anyone cares :) |
| 18:06 | brehaut | jkkramer: oh, nice :) |
| 18:07 | brehaut | i always forget about reductions |
| 18:07 | robinkraft | ok, so I'm glad to have dodged loop/recur again, but I could still use some schooling on that. any favorite blog posts, book chapters, etc.? |
| 18:07 | hagna | robinkraft: maybe the joy of clojure has it |
| 18:08 | aperiodic | robinkraft: well, you could map (apply max %) over the result of parititons |
| 18:10 | robinkraft | hagna: thanks, I'll check it out |
| 18:10 | Apage43 | it would still be broken for the actual problem though |
| 18:11 | robinkraft | aperiodic: thanks, that indeed is the way to go |
| 18:11 | robinkraft | Apage43: righto, but at least it does something! I'd rather it do unexpected things than give me errors |
| 18:11 | brehaut | ,(let [s [1 5 4 3 2 6 7]] (map max s (rest s))) |
| 18:11 | arohner | robinkraft: recur goes back to the top of fn, calling the fn with the arguments supplied to recur |
| 18:11 | clojurebot | (5 5 4 3 6 ...) |
| 18:12 | arohner | 'loop' is exactly like let, except that if there's a recur inside the loop, it goes to the loop rather than the top of the fn |
| 18:12 | Apage43 | right. loop is a let you can recur to. |
| 18:13 | brehaut | ,(let [s [1 5 4 3 2 6 7]] ((comp (partial apply map max) (juxt identity rest)) s)) |
| 18:13 | clojurebot | (5 5 4 3 6 ...) |
| 18:13 | hagna | robinkraft: yeah me too |
| 18:13 | hagna | ,(println "what's a coma for?") |
| 18:13 | clojurebot | what's a coma for? |
| 18:14 | robinkraft | ok, the fog is beginning to burn off. so the loop [] form defines which arguments need to be supplied in the recur form |
| 18:14 | hagna | ,(println "s/coma/comma") |
| 18:14 | clojurebot | s/coma/comma |
| 18:14 | Apage43 | robinkraft: right. And their values the first time through. |
| 18:14 | brehaut | ,((comp (partial apply map max) (juxt identity rest)) [1 5 4 3 2 6 7]) |
| 18:14 | clojurebot | (5 5 4 3 6 ...) |
| 18:14 | brehaut | finally |
| 18:17 | robinkraft | HA! |
| 18:17 | robinkraft | (loop [myvec [1 2 3] |
| 18:17 | robinkraft | outint 0] |
| 18:17 | robinkraft | (if (= 0 (count myvec)) |
| 18:17 | robinkraft | outint |
| 18:17 | robinkraft | (recur (rest myvec) (inc outint)))) |
| 18:17 | robinkraft | ,(loop [myvec [1 2 3] outint 0] (if (= 0 (count myvec)) outint (recur (rest myvec) (inc outint)))) |
| 18:18 | clojurebot | 3 |
| 18:18 | robinkraft | awesome! thanks gang. |
| 18:18 | robinkraft | I'll do useful things in the future :) |
| 18:25 | alexyk | how do I sort tuples [[1 2] [2 3]] first by 2nd and then by 1st position? |
| 18:28 | alexyk | i.e. making keyfn for sort-by? |
| 18:32 | brehaut | ,(sort (fn [[a1 a2] [b1 b2]] (compare [a2 a1] [b2 b1])) [[1 2] [2 1]]) ; alexyk |
| 18:32 | clojurebot | ([2 1] [1 2]) |
| 18:33 | brehaut | whoa there colloquay |
| 18:33 | alexyk | do descending in 2nd? |
| 18:33 | brehaut | alexyk: ? |
| 18:34 | brehaut | do you mean you want the order reversed? |
| 18:34 | alexyk | how do we invert order in a given position? |
| 18:34 | alexyk | yes |
| 18:34 | brehaut | ,(sort (fn [[a1 a2] [b1 b2]] (* -1 (compare [a2 a1] [b2 b1]))) [[1 2] [2 1]]) |
| 18:34 | clojurebot | ([1 2] [2 1]) |
| 18:34 | brehaut | thats reversing all of it |
| 18:34 | alexyk | only the sorting order in the 2nd position pls :) |
| 18:34 | brehaut | i guess you could also flip the arguments to compare |
| 18:35 | alexyk | or 1st, breaking the ties |
| 18:35 | brehaut | ,(sort (fn [[a1 a2] [b1 b2]] (compare [a2 b1] [b2 a1])) [[1 2] [2 1]]) ; ? |
| 18:35 | clojurebot | ([2 1] [1 2]) |
| 18:35 | alexyk | first by 2nd asc, then 1st desc |
| 18:35 | brehaut | sorry ive screwed that up |
| 18:35 | alexyk | np trying to figure the idion |
| 18:35 | brehaut | i meant to put b first |
| 18:36 | alexyk | idiom |
| 18:36 | brehaut | alexyk: basicly, sequence shaped things are an equality partition (timmc, wheres that chart?) |
| 18:36 | brehaut | and vectors are in that equality partition |
| 18:37 | brehaut | so you can put things into vectors in the order you want them to have sort preference |
| 18:37 | alexyk | yes |
| 18:37 | brehaut | i think what you want is ##(sort (fn [[a1 a2] [b1 b2]] (compare [b2 a1] [a2 b1])) [[1 2] [2 3]]) |
| 18:37 | lazybot | ⇒ ([2 3] [1 2]) |
| 18:38 | alexyk | I wonder how this can be done in sort-by |
| 18:38 | alexyk | or sort is easier like this |
| 18:38 | brehaut | you want to control the comparison rather than the key |
| 18:38 | brehaut | (you can control both with sort-by 3-ary overload) |
| 18:39 | alexyk | yeah |
| 18:39 | ibdknox | ,(doc sort-by) |
| 18:39 | clojurebot | "([keyfn coll] [keyfn comp coll]); Returns a sorted sequence of the items in coll, where the sort order is determined by comparing (keyfn item). If no comparator is supplied, uses compare. comparator must implement java.util.Comparator." |
| 18:40 | brehaut | alexyk: if you just wanted then to be second elem then first you could do ##(sort-by (comp vec rseq) [[1 2] [2 1]]) |
| 18:40 | lazybot | ⇒ ([2 1] [1 2]) |
| 18:40 | brehaut | but if you want the individual elements to be tested differently you'll need a full comparitor |
| 18:55 | mrBliss | ,(sort-by (juxt second first) [[1 3] [2 1]]) |
| 18:55 | clojurebot | ([2 1] [1 3]) |
| 19:10 | alandipert | seancorfield: i ran 'PORT=8888 lein run' per your jayq/fw1 tutorial post, and get 'no :main found' - any idea what i'm doing wrong? thanks! |
| 19:11 | ibdknox | alandipert: sounds like you need to add a :main key to your project.clj |
| 19:12 | ibdknox | pointing to whatever starts the server |
| 19:12 | alandipert | ibdknox: which is something in fw1-template i'm guessing? |
| 19:13 | ibdknox | should be proj-name.main based on the template that I see here |
| 19:13 | ibdknox | maybe you nuked that key when you copied the cljs-build args into project.clj? :) |
| 19:13 | ibdknox | because it *should* be there by default |
| 19:14 | alandipert | hm, i don't think so, i'm a paredit *master* ;-) |
| 19:14 | ibdknox | hehe |
| 19:14 | alandipert | i don't see any jetty related code in the stuff it generated |
| 19:14 | ibdknox | there's a fw1/start function |
| 19:14 | ibdknox | (I know nothing, I'm just looking at the template) |
| 19:15 | ibdknox | https://github.com/seancorfield/fw1-template/blob/master/src/leiningen/new/fw1/main.clj |
| 19:18 | alandipert | ibdknox: hm, yes, none of the stuff in the template ended up in my project |
| 19:18 | ibdknox | alandipert: haha that would make it hard |
| 19:25 | octe | hmm |
| 19:35 | Squee-D | Looking for someone from the Upper North Island who is competent with clojure to come and do a meetup in auckland.. I know theres at least one person in here from Hamilton.. Please ping me if you are that person :D |
| 19:35 | Squee-D | or know who it is :D |
| 19:35 | Squee-D | err Yeah NZ Upper North Island.. |
| 19:35 | ibdknox | brehaut is from somewhere around there I thought |
| 19:36 | talios | brehaut is in Hamiltion, I'm in Auckland |
| 19:37 | talios | Squee-D - we were just discussing the clojure auck meetup session for the next JUG |
| 19:37 | talios | we've been planning on doing one for ages. |
| 19:37 | talios | Squee-D - you're at visfleet? thought you guys were a ruby shop? |
| 19:37 | Squee-D | talios you've seen the Java meetup group are trying to find someone to take one? |
| 19:38 | Squee-D | thats more one eyed than it probably sounds to you :D |
| 19:38 | talios | Squee-D - I corun the Java Meetup. Both of us organizers are clojure-ish peeps |
| 19:38 | Squee-D | Talios did i meet you half an hour ago? |
| 19:38 | talios | Squee-D - you probably did :) |
| 19:39 | Squee-D | I was the noisy fellow who wants proof that we're not restful |
| 19:39 | talios | Oh - I'm the REST Nazi whose hanging in #rest ;) |
| 19:39 | Squee-D | I really want to push the clojure agenda, i'm fascinated, i think it's the one language that might put me off ruby. |
| 19:39 | talios | arbscht was also there |
| 19:39 | Squee-D | sweet i assumed so |
| 19:40 | talios | Squee-D - restful != REST |
| 19:40 | Squee-D | that ok with me :D |
| 19:40 | Squee-D | i'l lalso join #restful |
| 19:40 | Squee-D | oh look it redirects to #rails |
| 19:40 | Squee-D | ;) |
| 19:42 | talios | muhahaha |
| 19:42 | Squee-D | I have some realtime processing requirements that I think clojure would be more natural for than say, node.js or EM |
| 19:43 | Squee-D | I'd rather no one need think too hard about threads and thread safety, mutablity, etc. |
| 19:44 | talios | erlang! |
| 19:45 | brehaut | Squee-D: ping |
| 19:46 | Squee-D | sup brehaut, wanting to make the clojure intro happen |
| 19:46 | Squee-D | talios i think i prefer clojure - i THINK.. i don't know. |
| 19:47 | talios | brehaut should also come up and guest on the podcast :) |
| 19:47 | brehaut | Squee-D: something could be fun. im not sure if count as competant though |
| 19:47 | brehaut | talios: that could be fun |
| 19:47 | Squee-D | but i have considered erlang based on it's existing uses and track record. I'm still exceptionally green when it comes to functional languages |
| 19:47 | technomancy | most of the software for which erlang is a good fit has already been written =) |
| 19:47 | brehaut | technomancy: zing! |
| 19:47 | ibdknox | haha |
| 19:48 | tmciver | Anyone know where clojure.contrib.seq-utils/separate lives now? |
| 19:48 | ibdknox | ~contrib |
| 19:48 | clojurebot | Monolithic clojure.contrib has been split up in favor of smaller, actually-maintained libs. Transition notes here: http://dev.clojure.org/display/design/Where+Did+Clojure.Contrib+Go |
| 19:49 | ibdknox | not on the list! |
| 19:49 | amalloy | tmciver: the blackest pits of hell. just use (juxt filter remove) |
| 19:49 | tmciver | I just checked... a quick search for seq-utils turned up nuttin |
| 19:49 | tmciver | amalloy: how did I know you would suggest juxt? |
| 19:49 | ibdknox | amalloy: what was in it? |
| 19:49 | amalloy | ibdknox: in what? |
| 19:49 | tmciver | amalloy: ;) thanks. |
| 19:50 | amalloy | seq-utils? i dunno. some of it might have been marginally useful |
| 19:50 | ibdknox | yeah |
| 19:50 | weavejester | Would partition-by work the same way? |
| 19:50 | tmciver | Nope |
| 19:50 | amalloy | but most of it is like: (defn separate [pred coll] [(filter pred coll) (remove pred coll])) ;;whoops forgot juxt (defn find-first [pred coll] (first (filter pred coll))) ;; whoops forgot comp |
| 19:51 | ibdknox | haha |
| 19:51 | weavejester | ,(partition-by even? (range 10)) |
| 19:51 | clojurebot | ((0) (1) (2) (3) (4) ...) |
| 19:51 | weavejester | Ah, it doesn't group |
| 19:51 | ibdknox | ,(doc partition-by) |
| 19:51 | clojurebot | "([f coll]); Applies f to each value in coll, splitting it each time f returns a new value. Returns a lazy seq of partitions." |
| 19:52 | weavejester | ,(->> (range 10) (sort-by even?) (partition-by even?)) |
| 19:52 | clojurebot | ((1 3 5 7 9) (0 2 4 6 8)) |
| 19:52 | ibdknox | haha |
| 19:52 | weavejester | Of course, that's worse than using juxt :) |
| 19:52 | tmciver | cheater |
| 19:54 | tmciver | I was surprised to not see seq-utils listed at the "where did clojure contrib go?" link. |
| 19:54 | ibdknox | you should add it with the "to the blackest pits of hell" bit |
| 19:55 | amalloy | i miss str-utils2 |
| 19:56 | amalloy | or no, i liked c.c.string |
| 19:56 | brehaut | amalloy: you havent ported your favorites to useful? |
| 19:57 | amalloy | nah. most of it was silly stuff i shouldn't have been doing anyway |
| 19:57 | brehaut | lol |
| 19:57 | amalloy | like (defn drop [n s] ...) to make it look like sequences and cooperate with ->> |
| 20:05 | weavejester | ,(vals (group-by even? (range 10)) |
| 20:05 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: EOF while reading> |
| 20:05 | weavejester | ,(vals (group-by even? (range 10))) |
| 20:05 | clojurebot | ([0 2 4 6 8] [1 3 5 7 9]) |
| 20:06 | weavejester | I just recalled that group-by is probably closest to separate. |
| 20:07 | tmciver | Hmm, not bad. |
| 20:10 | jweiss | anyone know a good way to make clojure data/code pretty in html? not sure if i should leave everything up to pprint. would be nice if i could add extra indentation, but *current-level* that controls it is private. |
| 20:10 | technomancy | jweiss: iirc there's some more customization coming in the next pprint for code dispatch |
| 20:22 | TimMc | brehaut: http://www.brainonfire.net/files/seqs-and-colls/main.html#tbl-eqpart |
| 20:23 | brehaut | alexyk: ^ |
| 20:28 | dnlcttr | any clojurescript one experts in the room? |
| 20:28 | brehaut | ~anyone |
| 20:28 | clojurebot | Just a heads up, you're more likely to get some help if you ask the question you really want the answer to, instead of "does anyone ..." |
| 20:29 | dnlcttr | the repl is hanging |
| 20:30 | dnlcttr | i followed the instructions on this page (https://github.com/brentonashworth/one/wiki/Getting-started) and none of the commands at the bottom of the page get any response |
| 20:30 | dnlcttr | but there's no error message either |
| 20:30 | dnlcttr | just... silence |
| 20:37 | arbscht | Squee-D: hi |
| 20:37 | talios | 'lo arbscht |
| 20:37 | Squee-D | holas |
| 20:38 | seancorfield | alandipert: sorry, was busy... just noticed your problem with fw1-template... did you get it resolved? |
| 20:38 | Squee-D | so wait. OOCSS, how dya deal with a:hover ? |
| 20:38 | seancorfield | i just tried lein new fw1 alan and it has :main alan.main in the generated project.clj |
| 20:38 | talios | Squee-D: I was just remembering ages ago talking to Brendon about getting your devteam and ours together for a session on dev practises |
| 20:38 | arbscht | Squee-D: you're looking for a clojure person for a meetup? as in to present something? |
| 20:39 | talios | arbscht - didn't we nominate you :) |
| 20:39 | Squee-D | arbscht yeah this was without realising you two miscreants were in this chan already |
| 20:39 | arbscht | oh right :) |
| 20:40 | talios | Squee-D: you use maven for your clojure don't you. *looks stern and angry like* |
| 20:40 | talios | I should do a new release actually. |
| 20:42 | Squee-D | I dont clojure much at all |
| 20:43 | Squee-D | I'm no fan of maven, because i really despise xml, it's worse than yaml. :) |
| 20:44 | Squee-D | i'm sure someone is working on a clojure wrapper for maven config as we speak |
| 20:45 | technomancy | hehe |
| 20:45 | talios | Squee-D: well I did the original implementation of polyglot-maven for clojure about 2 or so years ago, worked well, but also kinda fell over with things like the release plugin |
| 20:45 | talios | round-tripping a pom rewrite didn't quite….. work so well when you have programatic poms. |
| 20:46 | Squee-D | yeah i can see that |
| 20:46 | technomancy | there's talk of a lossless reader that could make it easier |
| 20:46 | technomancy | well, talk of the need of one; I don't know if there's talk of anybody writing one |
| 20:46 | talios | lein for the win for clojure-only projects. |
| 20:46 | Squee-D | did you just do elipsis -space- . -space- . ? |
| 20:47 | technomancy | talios: https://github.com/technomancy/lein-scalac <- mwahahaa |
| 20:47 | talios | Squee-D - stupid osx autocorrection :) |
| 20:47 | talios | technomancy: i saw that. |
| 20:47 | Squee-D | oh ok, i thought you were being a thorough dork :D |
| 20:47 | technomancy | not that I recommend using it in its present state |
| 20:47 | TimMc | On my work computer, all those ellipses show up as question marks (because my terminal encoding is fucked.) |
| 20:48 | TimMc | At one point? I thought some was using question marks? all the time? |
| 20:48 | talios | technomancy: the problem was more how polyglot maven read the clj into an internal POM Model ( it works via reader/writer classes ). The writer writes out the expanded/interpreted model. |
| 20:48 | brehaut | TimMc: ‽ … |
| 20:48 | talios | TimMc: I often have that problem with smily faces everywhere :) |
| 20:48 | technomancy | oh yeah, that's way trickier. |
| 20:48 | talios | :) |
| 20:48 | TimMc | But now I'm on my laptop, where everything is sunshine and unicorn and interrobangs. |
| 20:48 | brehaut | technomancy: does lein-scalac exist just to let fogus right parts of his programs in basic? |
| 20:49 | brehaut | s/right/write/ |
| 20:49 | technomancy | brehaut: oh man, that's like ... a 2-in-1 plugin |
| 20:49 | technomancy | excellent |
| 20:49 | talios | technomancy: worked fine for the yaml/json poms which were static representations, but when you bring in functions and a dsl problems strike |
| 20:49 | technomancy | no, that was just me screwing around with the heroku scala maintainer over lunch |
| 20:50 | brehaut | that would make more sense |
| 20:50 | jweiss | is there any example of custom pprint dispatch out there? I'm starting to think i need one. |
| 20:50 | technomancy | fun fact: the scalac ant task has a bug where the classpath attribute isn't discoverable via reflection |
| 20:50 | technomancy | so lancet hates it |
| 20:51 | arohner1 | with midje, is it possible to mock defs (as opposed to defns)? |
| 20:57 | brehaut | k |
| 21:06 | TimMc | technomancy: I see now that the Gilardi Scenario is precisely why I was having trouble making an in-sandbox-ns macro -- require and import statements in the body of the expansion have to execute in the outer namespace because the whole form is eval'd at once. |
| 21:11 | TimMc | amalloy: Does this import+ syntax seem more reasonable to you? https://refheap.com/paste/738 [] around packages, () around classes as needed. |
| 21:12 | TimMc | tmciver: ^ |
| 21:12 | TimMc | I'm still concerned about whether splitting up java.awt.geom into java.awt and geom is "grep-poison", but since :require already does that with packages... |
| 21:13 | amalloy | require actually doesn't do that, quite |
| 21:13 | TimMc | Yeah, it is limited. |
| 21:13 | amalloy | ask technomancy, he'll probably murder you for supporting any nesting at all. dude loves to grep |
| 21:15 | TimMc | Hmm, I don't know if :require allows arbitrary levels, or if it just supports at most 2. |
| 21:15 | TimMc | Looks like the deepest nesting is prefix-list + libspecs, period. |
| 21:16 | TimMc | technomancy: https://refheap.com/paste/738, is the subpackage nesting murder-worthy? |
| 21:21 | tmciver | TimMc: it looks better to me but I'd like to hear why nesting is bad. |
| 21:25 | alandipert | seancorfield: np, but no, as of yet unresolved |
| 21:26 | seancorfield | you have lein-newnew installed? which version? |
| 21:26 | seancorfield | i have 0.2.2 of newnew |
| 21:30 | citizenparker | emezeske: Any chance you're around? n00b question about lein-cljsbuild |
| 21:35 | TimMc | tmciver: If I grep the codebase for "java.awt.geom" (knowing that some classes in there are used), I wouldn't be able to find that import statement. |
| 21:35 | TimMc | I'd have to know to only search for "java.awt", which is unlikely. |
| 21:40 | brehaut | TimMc: would it be possible to attach metadata to the NS to describe what (fully qualified) java classes have been imported? |
| 21:41 | TimMc | brehaut: Sure, but that doesn't help a developer using grep on .clj files. |
| 21:41 | brehaut | TimMc: indeed; but perhaps working at a level higher than text is worth it? |
| 21:42 | TimMc | I'm not sure what you're suggesting. |
| 21:43 | TimMc | To get this information, one would have to eval the CLJ files. |
| 21:43 | brehaut | thats true, but then, i dont see whats wrong with that ;) |
| 21:43 | TimMc | ...because that's not how one searches a codebase? |
| 21:44 | brehaut | only due to historical accident |
| 21:44 | TimMc | I literally have no idea what you are trying to argue here. |
| 21:44 | brehaut | i think that grepping text files of programs is a horribly archaic way to find things |
| 21:44 | brehaut | when you could introspect structured data |
| 21:45 | TimMc | Sure. |
| 21:45 | TimMc | This isn't structured source, this is runtime values. |
| 21:45 | brehaut | its still structured data though |
| 21:45 | TimMc | sure... |
| 21:45 | TimMc | Do you have a tool to replace grep? |
| 21:46 | TimMc | If not, I should probably design (or at least document) with grep in mind. |
| 21:46 | brehaut | not for this specific instance, but apropos is similar |
| 21:55 | brehaut | TimMc: (defn find-imports [fqn] (keep (fn [ns] (when (-> ns meta :imports (or #{}) (contains? fqn)) (.getName ns))) (all-ns))) – point being, its like it would be hard to write the apropriate tooling |
| 21:56 | brehaut | and important not is missing from the above english |
| 22:02 | tmciver | TimMc: the current import implementation suffers from this problem. |
| 22:02 | tmciver | But I agree with brehaut; I'm not sure if it's that big a deal. |
| 22:03 | tmciver | You could always just grep for 'java.awt'... |
| 22:03 | TimMc | if you know to |
| 22:03 | TimMc | Someone unfamiliar with the codebase would not. |
| 22:03 | TimMc | tmciver: clojure.core/import doesn't allow package splitting |
| 22:04 | tmciver | If they're familiar with import they would. |
| 22:04 | clojurebot | Excuse me? |
| 22:04 | tmciver | clojurebot: you're not excused. |
| 22:04 | clojurebot | I don't understand. |
| 22:04 | TimMc | Not according to the documentation, leastways. |
| 22:06 | tmciver | But you can do things like (:import (java.io InputStreamReader); you'd have to know not to grep for java.io.InputStreamReader |
| 22:07 | TimMc | That's different from splitting the package name itself. |
| 22:07 | tmciver | perhaps no. |
| 22:07 | TimMc | No Java or Clojure developer would expect to necessarily see the fully-resolved classname. |
| 22:08 | TimMc | How about we just leave package splitting out for the moment and make sure there is room for that syntax later? |
| 22:09 | tmciver | Yeah, that's what I was just thinking. So for the user to write java.awt and java.awt.geom separately. |
| 22:10 | TimMc | For now, yeah. |
| 22:12 | tmciver | I think it makes sense to let something like this evolve over time. |
| 22:14 | brehaut | is there an emacs key binding thats the cycles through windows in the reverse order to C-x o ? |
| 22:15 | brehaut | oh, C-x O |
| 22:16 | TimMc | C-u -1 C-x o |
| 22:16 | TimMc | :-P |
| 22:16 | TimMc | C-x o and C-x O are the same for me, I think. |
| 22:17 | brehaut | TimMc: i cannot tell if thats serious or a joke |
| 22:17 | TimMc | The C-u -1 thing works, but is ridiculous. |
| 22:17 | TimMc | the o vs. O thing is serious |
| 22:19 | brehaut | TimMc: can you explain the ridiculous one? |
| 22:20 | TimMc | brehaut: M-x other-window takes an optional count of how many windows to skip. |
| 22:21 | brehaut | TimMc: oh right, so C-u provides an argument to the next command? |
| 22:21 | TimMc | yep |
| 22:22 | brehaut | emacs magic frightens me a little |
| 22:22 | brehaut | s/little/lot/ |
| 22:23 | TimMc | brehaut: Would you mind doing C-h k C-x O |
| 22:23 | TimMc | I want to know what it's bound to for you. (Are you using Emacs 24? I'm on 23.) |
| 22:23 | brehaut | im on 24 |
| 22:23 | brehaut | (lambda nil (interactive) (other-window -1)) |
| 22:23 | TimMc | hah! |
| 22:24 | brehaut | so basicly exactly what you suggested but with less magic? |
| 22:24 | TimMc | yup |
| 22:25 | brehaut | what does (interactive) mean? |
| 22:26 | brehaut | ive clearly not mastered any of the built in help features of emacs |
| 22:30 | TimMc | I'm not sure. |
| 22:32 | Frozenlock | brehaut: Interactive is for commands: functions available to the user with M-x. |
| 22:34 | brehaut | Frozenlock: thanks |
| 22:34 | Frozenlock | np |
| 22:37 | Frozenlock | brehaut: carefull with emacs, you will be spending most of your day in it before you realize :P |
| 22:37 | brehaut | Frozenlock: thats exactly why i gave up using it years ago :P |
| 22:38 | brehaut | talios, Squee-D: perhaps if you are wanting to do a clojure intro at the UG, waiting until the technomancy gets a preview of lein 2 out the door might be smart? the repl-y integration alone is probably worth the wait. |
| 22:38 | Squee-D | i don't know what that is |
| 22:39 | brehaut | Squee-D: its a better repl for clojure http://github.com/trptcolin/reply |
| 22:39 | Squee-D | i know roughly what lein is, but i was far more interested in clojure the language and functional composition |
| 22:39 | Squee-D | oh |
| 22:39 | brehaut | Squee-D: lein is the defacto standard front end to clojure; clojure the language doesnt really come with a user interface |
| 22:39 | brehaut | lein provides all that |
| 22:40 | Squee-D | i use Clojure Repl on my Samsung s2 mostly :P |
| 22:40 | Squee-D | but i have run up an app or two using lein |
| 22:41 | Squee-D | and the local repl.. intellij's built in repl console also adds some of the reply stuff, especially navigation |
| 22:41 | Squee-D | and completion iirc |
| 22:42 | brehaut | theres lots of good repl options for clojure, especially now that nREPL is coming together. the advantage with lein is that its probably the path of lowest resistants to getting new users up and running |
| 22:42 | Squee-D | yeah understood |
| 22:42 | talios | Squee-D - iClojure for the console gives full completion and stuff |
| 22:42 | talios | very wicked and full of awesome |
| 22:43 | brehaut | Squee-D: unfortunately the bog standard repl that comes with clojure/lein 1.x is a bit crap |
| 22:43 | talios | https://github.com/cosmin/IClojure |
| 22:43 | talios | maven clojure plugin now supports that if its in the class path, need to release that version tho |
| 22:43 | Squee-D | I'm looking forward to some tiem with the clojure way book as soon as i get a holiday :P |
| 22:44 | Squee-D | cool nice link |
| 22:45 | talios | the whole lisp syntax remains a love/hate relationship with me. i hate my flip-flopping mind |
| 22:45 | brehaut | talios: does your editor of choice support paredit? |
| 22:46 | talios | brehaut - not sure actually ( Sublime Text 2 ) |
| 22:47 | brehaut | talios: ah. i suspect not then. paredit makes life a lot better |
| 22:48 | brehaut | talios: i switched away from textmate because of the lack there. ive settled on emacs for now, but eclipse with ccw looks very promising too |
| 22:57 | Squee-D | paredit? |
| 22:57 | Squee-D | sounds like something i could plug into sublime |
| 23:05 | brehaut | if you use structural editing for a while you wonder how you ever achieved anything without it |
| 23:08 | bbloom | I'm a big-time vim guy, but haven't tried paredit.vim yet… anyone use it? as good as emac's? vim-esque enough to tolerate? |
| 23:08 | fryguy | do people in here typically use gui emacs or terminal emacs? |
| 23:10 | brehaut | fryguy: i cant speak for others but i use a mix |
| 23:10 | brehaut | (and forcing myself to use terminal emacs made me learn a lot more of the keyboard navigation) |
| 23:11 | fryguy | i'm trying to convert from vim, and i'm so used to just running vim remotely in a terminal to do editing in development sandboxes. Seems like there's not a great solution for this in emacs. I mean, I guess I could just do the same thing, and run emacs -nw remotely. |
| 23:12 | ibdknox | why not just use VIM? |
| 23:12 | ibdknox | :) |
| 23:12 | fryguy | but then I see things like auctex that make me want to have gui support. I guess I could just do a mix and run it in local gui mode when I need it |
| 23:12 | fryguy | ibdknox: seems like slime + swank is going to be better in the long run than vimclojure + nailgun |
| 23:12 | brehaut | fryguy: im pretty sure you can tunnel remote emacs sessions to a local client |
| 23:13 | brehaut | not that i understand how though |
| 23:13 | jlf | fryguy: to run gui emacs on the remote system, you can just tunnel x over ssh |
| 23:14 | fryguy | jlf: sure, using someting like NX I guess. which seems possibly viable, but then it means I need to get X installed remotely, and that's not feasible for all of the things I'm going to be connecting to |
| 23:14 | jlf | you can also use tramp or sshfs to run it locally and edit remote files, or set up a local emacsclient to connect to a remote emacs server over tcp |
| 23:15 | fryguy | i'm trying to figure out how to deal with the "sane vim setup available everywhere" in emacs-land |
| 23:15 | jlf | no nx necessary, just x11 |
| 23:15 | fryguy | jlf: sure, but x11 forwarding tends to be slow |
| 23:15 | jlf | the point being, timtowtdi |
| 23:15 | amalloy | tramp is a good choice IMO, but of course jlf carries a bit more weight than i do on this |
| 23:16 | jlf | heh, i tend to use sshfs myself but don't tell #emacs :) |
| 23:16 | fryguy | sshfs is horribly slow for doing any sort of directory traversal in my experience (for example, ctags). |
| 23:17 | fryguy | nfs is maybe more viable, but again, it's something that's not available everywhere |
| 23:18 | jlf | ime x11 forwarding is plenty fast for emacs if it's tuned a bit, but i tend not to work over large network distances |
| 23:19 | fryguy | I'm thinking that maybe the right thing to do is to just figure out how to make tramp mode do what I want, and just run emacs locally. or at least that's a reasonable first iteration. |
| 23:20 | amalloy | i'd be interested in what tuning you did, jlf - my experience has been pretty awful |
| 23:20 | fryguy | I'm trying to avoid a situation where I have something like "to edit files on these 5 servers I have to do steps a,b,c, and d. And then to edit files on THESE OTHER 5 servers I have to do steps e,f,g, and h because something isn't available" I want a consistent cross machine experience when the machines are things i may or may not have sysadmin control over |
| 23:20 | jlf | iirc eshell understands tramp somehow so it will execute programs on remote machines if the cwd is remote |
| 23:21 | fryguy | jlf: yah, I was just reading about that, which seems like it might be the key for some of my hangups for things (remote debuggers, remote ctags, running unit tests, etc) |
| 23:22 | jlf | amalloy: it's been a while since i messed with it but let me take a look... |
| 23:23 | fryguy | i wonder how tag jumping for remote files works... |
| 23:32 | MenTaLguY | so I'm trying to extend leiningen's deps command with some code that requires one of the deps jars before it can run |
| 23:33 | MenTaLguY | it's simple enough to run the code *after* the normal deps task in the hook |
| 23:33 | MenTaLguY | but the problem is that the classloader won't look at the downloaded jar if it wasn't already present at startup time (it appears) |
| 23:33 | MenTaLguY | recursively re-invoking leiningen in a new VM might be one option |
| 23:34 | MenTaLguY | though I'm not sure how to do that |
| 23:44 | talios | MenTaLguY - you could create your own class loader instance and load the classes |
| 23:44 | talios | into the same vm |
| 23:44 | talios | thats kinda getting lower level into the JVM than you might want tho |
| 23:45 | MenTaLguY | yeah ... I was kind of hoping that eval-in-project would accomplish that actually |
| 23:45 | MenTaLguY | but it doesn't seem to help |