2012-12-13
| 00:09 | TimMc | JIRAfied: http://dev.clojure.org/jira/browse/CLASSPATH-4 |
| 00:10 | sshack | There aren't any tips for speeding up leon startup time, are there? |
| 00:10 | sshack | I guess I'm really asking is, shortcuts for jvm startup |
| 00:12 | ghengis_ | sshack: if you're feeling adventurous you can try this http://eigenhombre.com/Clojure/2012/11/16/lightning-fast-startup-times-for-clojure-programs/ |
| 00:13 | ghengis_ | but it looks more complicated than a jvm option |
| 00:13 | sshack | I'm guessing it's a hot standby jvm? |
| 00:13 | ghengis_ | same idea, but not hot |
| 00:14 | ambrosebs | bbloom: so what should be tackled next for the analyser after these two patches? |
| 00:14 | ghengis_ | i think it saves all the bootup processing for the next run after you exit |
| 00:21 | technomancy | TimMc: `lein help` will list all known tasks |
| 00:21 | technomancy | different from all plugins but usually more relevant |
| 00:21 | technomancy | TimMc: you can use `lein pprint :plugins` if you install the pprint plugin (whoa, meta) |
| 00:21 | sshack | Okay, why is my code giving me invalid probabilities when I use a Bernoulli distribution? |
| 00:23 | bbloom | ambrosebs: not quite sure yet |
| 00:23 | bbloom | ambrosebs: i think we need a top-level :script or :file or :fragment or :code or whatever it is |
| 00:25 | ambrosebs | bbloom: mmm. I seem to remember Rich being opposed to that idea, at least at the code level. Not sure about AST level though. |
| 00:25 | bbloom | ambrosebs: link? |
| 00:25 | bbloom | i haven't thought about the top level enough yet, it's a tough area |
| 00:26 | bbloom | but i think the most important thing is to separate parse from analyze |
| 00:26 | bbloom | ie pre and post macro expansion |
| 00:26 | ambrosebs | bbloom: right, that sounds important. |
| 00:26 | bbloom | b/c codeq needs pre-macro-expansion |
| 00:27 | ambrosebs | bbloom: I don't have a link, but the idea was he wanted compilation to be more stream-like, not have a fundamental unit of a file or namespace. |
| 00:27 | ambrosebs | I may be wrong, I only vaguely remember. |
| 00:27 | ambrosebs | But it's something to consider. |
| 00:27 | bbloom | yeah, i've thought about that |
| 00:27 | bbloom | i agree to some extent |
| 00:28 | bbloom | but there really is some level of descrete top level things |
| 00:28 | bbloom | i'd rather have a stream of those top level things |
| 00:28 | bbloom | ie a stream of files, or a stream of eval forms |
| 00:28 | ambrosebs | Don't we already have a sort of stream of forms? |
| 00:28 | bbloom | stream of forms evaluated by a repl, i mean |
| 00:29 | bbloom | the issue is that htere really is some kind of delimiter by file |
| 00:29 | bbloom | b/c consider (ns foo) (a) (b) (ns bar) |
| 00:29 | bbloom | (c) |
| 00:29 | bbloom | really, that's fine |
| 00:29 | Frozenlock | Whenever I want to use clojurescript to act on something present on a single page, I find myself using a 'unique' ID and applying it (to this ID) on every page. Is there a more elegant way? |
| 00:29 | bbloom | but if you have a file that omits the ns form, what do you do? |
| 00:29 | bbloom | cljs can't handle that now |
| 00:29 | bbloom | should it be 'user ? |
| 00:29 | bbloom | should it be an error? |
| 00:30 | ambrosebs | bbloom: hmm. so we'd need two concepts: for files and for REPL interaction. |
| 00:30 | bbloom | ambrosebs: i think so... |
| 00:31 | bbloom | i'm thinking you'd have :eval and :file |
| 00:31 | bbloom | or :load-file or something |
| 00:31 | bbloom | or it might be the same thing, but with or without a :file "a/b/c" key |
| 00:31 | bbloom | but i think separating parse&analyze from expand&analyze is more pressing |
| 00:32 | bbloom | i only mention the top level form b/c i want to minimize AST changes later down the road |
| 00:33 | ambrosebs | Yes. Although CLJS is young enough not to worry about that too much. |
| 00:33 | ambrosebs | (breaking changes) |
| 00:33 | bbloom | i'm also thinking about (do 1 2 3) vs (do* 1 (do* 2 3) and (let [x 1 y 2] z) vs (let* [x 1] (let* [y 2] z)) |
| 00:33 | ambrosebs | right? |
| 00:33 | clojurebot | to be fair I dunno that I've ever had code out right rejected, it just sits in jira or assembla or where ever, or if I ask if there is any interest (before writing any code) I get told to go write alioth benchmarks |
| 00:34 | bbloom | ambrosebs: i agree that breaking changes aren't a big deal, but dnolen has mentioned concern about it a few times, so i'd front load that stuff |
| 00:34 | tpope | why does every irc bot ever have robo-tourettes :/ |
| 00:35 | bbloom | tpope: clojurebot seems to hate question marks. you know what i mean?? |
| 00:35 | lazybot | bbloom: Definitely not. |
| 00:35 | bbloom | (that worked perfectly according to plan) |
| 00:36 | tpope | "I'm writing an irc bot. The first thing I need is a ridiculously broad regex to respond to" |
| 00:36 | ambrosebs | bbloom: what do you mean, flattening them? |
| 00:38 | bbloom | ambrosebs: much in the same way that implicit blocks were annoying to deal with, any sort of N > 2 sequencing has been annoying to deal with |
| 00:38 | bbloom | still requires more thought before i submit patches |
| 00:38 | bbloom | and will surely be more controversial |
| 00:38 | ambrosebs | in CPS? |
| 00:39 | bbloom | yeah, so any time you have a list, you need to worry about split with and all that jazz |
| 00:40 | ambrosebs | I don't follow. |
| 00:40 | bbloom | clojure makes working with lists/vectors very nice, but its sort of the reducers thing |
| 00:40 | bbloom | i want to specify transforms in terms of an assocative binary operator |
| 00:40 | bbloom | (reduce + 0 coll) |
| 00:41 | bbloom | if i want a transform of coll, i want to declare 0 and define + |
| 00:41 | bbloom | when doing an AST transform, i want to just define +, not (+ x y & more) |
| 00:42 | bbloom | ambrosebs: look at https://github.com/brandonbloom/cljs-cps/blob/master/src/cps.clj#L263-l307 |
| 00:42 | ambrosebs | I don't think I know enough about AST transforms to really understand the problems. |
| 00:43 | bbloom | there are three ;; comments |
| 00:43 | bbloom | look at those |
| 00:43 | bbloom | basically, i need to isolate interesting let bindings |
| 00:43 | bbloom | it's that isolate step that feels just like analyze-block |
| 00:43 | bbloom | repeating myself for no damn good reason |
| 00:48 | ambrosebs | bbloom: looks pretty badass :) |
| 00:49 | tomoj | sorry, why do you need to isolate? |
| 00:51 | bbloom | tomoj: so let's say you have (let [x 1 y (call-cc f) z 2] (+ x y z)) |
| 00:51 | bbloom | tomoj: i want to isolate the binding for y |
| 00:51 | ambrosebs | so whats a "serious" and "trivial" form? |
| 00:52 | bbloom | ambrosebs: search for "defn trivial?" or "defn serious?" |
| 00:52 | bbloom | in short, this is a "selective" transform |
| 00:53 | bbloom | it tries to avoid transforming expressions which are obviously "trivial" ie definitely don't call-cc or anything like that |
| 00:53 | tomoj | ok, what's wrong with the analysis output? looking at it, but.. hard to navigate |
| 00:53 | bbloom | tomoj: nothing is "wrong" with it |
| 00:53 | bbloom | (any more, i fixed the real bugs :-P) |
| 00:53 | ambrosebs | bbloom: got it |
| 00:54 | tomoj | I mean what about it makes (made?) isolating y difficult? |
| 00:54 | bbloom | look at how small/clean all the other functions are in that file :-) |
| 00:54 | bbloom | minus try/catch/finally GRR |
| 00:54 | bbloom | heh |
| 00:55 | tomoj | I mean specifically, the :bindings in the analysis output are difficult to work with? or..? |
| 00:55 | bbloom | tomoj: yeah, basically: you have a vector of N forms when in reality you care about pairs of forms |
| 00:56 | bbloom | you care about binding 0 vs binding 1 |
| 00:56 | bbloom | not binding 0 .. N |
| 00:56 | bbloom | and then further complexity if you're looking at binding N vs the expression |
| 00:56 | bbloom | there are three things: name, initialization expression, and then a body expression |
| 00:56 | bbloom | but the AST presents them as a vector of name/init pairs and then a vector of body expressions |
| 00:57 | bbloom | i submitted a patch to make the body a single thing (ie an implicit do) |
| 00:57 | bbloom | but i'm thinking about how to further simplify |
| 00:57 | bbloom | i think a form (let1 name init expr) makes sense |
| 00:57 | tomoj | with only one binding |
| 00:57 | bbloom | yeah |
| 00:57 | tomoj | oh, obviously |
| 00:57 | bbloom | some kind of (do2 statement expr) is a little less clear, since how do you expand (do a b c) |
| 00:57 | tomoj | let1 sounds familiar |
| 00:58 | bbloom | is that (do2 a (do 2 b c)) or is it (do2 (do 2 a b) c)) |
| 00:58 | bbloom | could go either way, and you could reasonably make the case for both or neither |
| 00:58 | bbloom | i'm only saying all this since ambrosebs asked. still needs more thinking |
| 00:59 | tomoj | nope, no let1 in core.clj, I was thinking of reduce1 |
| 00:59 | bbloom | damn auto correct: "do 2" should be "do2" |
| 00:59 | ambrosebs | bbloom: so a special form/AST node :let1? |
| 00:59 | TEttinger | anyone using congomongo? I am trying to implement a possibly ill-advised lazybot plugin that needs to store a seq as part of an... entry, i guess, in the db, and be able to find that entry again by any element of the seq |
| 01:00 | bbloom | ambrosebs: i think so |
| 01:00 | TEttinger | like :where :part-of-the-seq |
| 01:00 | TEttinger | in a (fetch) |
| 01:00 | ambrosebs | bbloom: would that change macroexpansion? |
| 01:01 | ambrosebs | Seems like a rather drastic change. |
| 01:01 | tomoj | hmm |
| 01:01 | bbloom | ambrosebs: no, there is already a let* special form b/c let provides destructuring and expands to let*. pre-expansion would be interested in let, not let* |
| 01:01 | bbloom | ambrosebs: yeah, it's a drastic change |
| 01:01 | bbloom | ambrosebs: hence i haven't proposed it without more deep thought |
| 01:02 | ambrosebs | bbloom: sure |
| 01:02 | bbloom | ambrosebs: also need to consider other bindings cases, like letfn |
| 01:03 | bbloom | letfn establishes parallel bindings, not sequential ones |
| 01:03 | ambrosebs | bbloom: but just from a practical debugging standpoint, wouldn't it change the output of macroexpand? |
| 01:03 | bbloom | ambrosebs: ah, yes good question |
| 01:04 | tomoj | ah, I begin to understand cps :let |
| 01:04 | bbloom | tomoj: cps :let is still a bit broken, i'm working on it |
| 01:04 | tomoj | did you consider clojure.walk? |
| 01:04 | bbloom | ambrosebs: so do more people do macroexpand-all now? i always do macroexpand-1 |
| 01:04 | bbloom | or N |
| 01:05 | bbloom | ambrosebs: it would suck if a change like atomic individual binding lets would ruin macro expands |
| 01:05 | bbloom | i wonder if it would make sense to provide conditional macro expansion |
| 01:05 | bbloom | usually i dont want to expand core macros when i'm debugging my macros |
| 01:06 | bbloom | ambrosebs: Dr Racket has something like that: http://docs.racket-lang.org/macro-debugger/index.html |
| 01:06 | bbloom | see expand-only |
| 01:06 | tomoj | I suspect expansion passing style would help, but I don't really understand it yet |
| 01:06 | clojurebot | Man, the living creature, the creating individual, is always more important than any established style or system. -- Bruce Lee |
| 01:06 | ambrosebs | bbloom: Oh man, I'd love one of those. |
| 01:07 | TEttinger | so if anyone says style it quotes Bruce Lee? |
| 01:07 | bbloom | ambrosebs: yeah, so if we can better separate parse from expand, then we could probably also do conditional expand |
| 01:07 | bbloom | which would make it moot if let expands to let* or let1 or whatever |
| 01:07 | tpope | bbloom: https://github.com/guns/vim-clojure-static |
| 01:07 | tpope | this guns guy beat me to it |
| 01:08 | bbloom | tpope: i was about to ask who guns was |
| 01:08 | bbloom | my irc client seems to be highlighting his name :-) maybe if we say guns 1 more time, he'll show up |
| 01:08 | guns | boo |
| 01:08 | bbloom | "Meikel Brandmeyer's excellent Clojure runtime files, extracted and decomplected for static editing and for use with alternate Clojure development plugins." |
| 01:08 | bbloom | heh, *decomplected* |
| 01:08 | bbloom | :-) |
| 01:09 | bbloom | hi guns, meet tpope :-) |
| 01:09 | ambrosebs | guns: that is awesome, well done. |
| 01:09 | tpope | we've been chatting in #vim for hours |
| 01:09 | bbloom | haha ok |
| 01:10 | guns | ambrosebs: tpope's entry into Clojure land inspired me |
| 01:10 | tpope | aw |
| 01:10 | ambrosebs | guns, tpope: and an epic entry by both of you. Thanks. |
| 01:10 | bbloom | guns, you can join the list of vim-ers who i owe a beer :-) |
| 01:11 | guns | No, no, no. Meikel deserves all the praise. thank me when I write a new paredit |
| 01:11 | bbloom | Fine: Meikel get's TWO beers |
| 01:11 | bbloom | :-) |
| 01:11 | bbloom | anyway, i'll bbl |
| 01:12 | bbloom | wait, i'm back…. i just need to say: |
| 01:12 | bbloom | s/get's/gets/ |
| 01:12 | bbloom | whew, ok better |
| 01:12 | bbloom | i'm gone. |
| 01:14 | ambrosebs | tpope: can foreplay access e* and other REPL state yet? I found it unusable without that. |
| 01:14 | tpope | ambrosebs: it can with the very latest nrepl |
| 01:15 | tpope | not sure if rc2 has dropped yet |
| 01:15 | ambrosebs | tpope: sweet |
| 01:22 | muhoo | i vageuly remember there being a way to access lein profile maps from inside a project, but can't seem to find docs on that |
| 01:48 | ibdknox | is there a way to get an unrealized copy of a lazy seq? |
| 01:48 | nightfly_ | Why do you need a copy of it? |
| 01:49 | ibdknox | I need to capture the value of a lazy-seq at a point in time without realizing the original |
| 01:53 | nightfly_ | Is this sequence generated by some external data source or something? |
| 01:54 | ibdknox | I'm capturing intermediate values of execution for Light Table :) |
| 02:16 | yedi | hi, so clojure has this thing, where when a data structure is transformed to create a new structure, the implementation in memory is optimized |
| 02:16 | ibdknox | structural sharing |
| 02:16 | yedi | so that the new data struct basically points to the old one, and adds the new transformed infomation right? |
| 02:16 | yedi | or something like that |
| 02:16 | yedi | how does this work with maps |
| 02:17 | yedi | if you had functions that added a key-value pair one at a time |
| 02:17 | yedi | at called that multiple times |
| 02:17 | yedi | so that each new map, would point to the previous map and so on |
| 02:17 | yedi | wouldn't that no longer be a hashtabll (map) |
| 02:17 | yedi | but a linked list of key-value pairs |
| 02:17 | yedi | or am i misunderstanding how this works |
| 02:20 | ibdknox | yedi: you can see how it's implemented here: https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/PersistentHashMap.java#L135 |
| 02:22 | Raynes | ibdknox: YOUR LIGHT TABLE SUCKS |
| 02:23 | ibdknox | oh no's |
| 02:23 | Raynes | ibdknox: I can't get tomorrow-night to work. :( |
| 02:23 | ibdknox | ? |
| 02:23 | ibdknox | what does it do? |
| 02:23 | Raynes | Nothing. |
| 02:23 | Raynes | I get a white on black theme. |
| 02:23 | Raynes | As in no theme. |
| 02:23 | ibdknox | what version? |
| 02:23 | Raynes | 0.2.1 |
| 02:24 | Raynes | Did you test it when you added it? |
| 02:24 | Raynes | Because I wouldn't put it past me to break it outside of refheap somehow. |
| 02:24 | Raynes | :P |
| 02:24 | ibdknox | many times :) But it was added in 0.2.4 |
| 02:24 | Raynes | In that case, my problem is that light table isn't updating. |
| 02:24 | Raynes | :p |
| 02:24 | ibdknox | yes |
| 02:24 | ro_st | ibdknox: props :-) |
| 02:25 | ibdknox | there was a brokenness in pre 0.2.2 with the update mechanism |
| 02:25 | ibdknox | all should be fixed with that now |
| 02:25 | Raynes | So I should redownload? |
| 02:25 | ibdknox | yessir |
| 02:25 | Raynes | Okay, |
| 02:25 | Raynes | While you're here... |
| 02:25 | ibdknox | ro_st: thanks :) |
| 02:25 | ro_st | ibdknox: what's the official word on Paredit support for LT? |
| 02:25 | Raynes | ibdknox: Looks like Konrad wants to take over noir-cljs too. Can we get it moved to noir-clojure so I can give him access. |
| 02:26 | Raynes | ro_st: There is that subpar thing. ibdknox tried it, but it's slow as snail on valium. |
| 02:26 | ro_st | ah, is emacs' paredit written in super C? |
| 02:26 | ibdknox | ro_st: I would love it, or at least having autocompleting of closing brackets |
| 02:26 | Raynes | ro_st: No, just subpar is written in a slow way. |
| 02:26 | ibdknox | yeah |
| 02:27 | Raynes | You can't read the whole file every time something is added to it. |
| 02:27 | ibdknox | it probably could be faster, I think it's re-parsing the whole file |
| 02:27 | ibdknox | Raynes: I will do that now, one sec |
| 02:27 | Raynes | ro_st: If someone writes a good paredit for codemirror, ibdknox will likely use it. |
| 02:27 | ro_st | so some level of support is on the roadmap |
| 02:28 | Raynes | I imagine it's far down the roadmap unless someone else does it. |
| 02:28 | ro_st | i simply can't live with out my paredit. i cry and rage and vent and fume when i have to use a mudblood text editor |
| 02:28 | ibdknox | yeah, unless I just get pissed off at some point |
| 02:28 | Raynes | I wish somebody would get pissed. |
| 02:28 | ibdknox | I may implement auto-closing braces if I get a free moment |
| 02:28 | ibdknox | that would be useful in a very general sense |
| 02:29 | Raynes | You have to pay for your moments!?!?! |
| 02:29 | ro_st | absolutely |
| 02:29 | ibdknox | Raynes: I know, it's ridiculous |
| 02:29 | Raynes | ibdknox: Have you upgraded to codemirror 3.0 yet? |
| 02:29 | ibdknox | Raynes: moved noir-cljs btw |
| 02:29 | ibdknox | yessir |
| 02:29 | Raynes | I need to upgrade on refheap. |
| 02:29 | ibdknox | I did some cool prototype-y things with it |
| 02:29 | Raynes | ibdknox: Oh cool, lt just randomly updated for me! |
| 02:29 | ibdknox | LIKE MAGIC |
| 02:30 | ibdknox | ok seriously, there has to be a way to make an exact copy of a seq |
| 02:30 | Raynes | But it still doesn't work. |
| 02:30 | Raynes | Yeah, it only claimed it updated. |
| 02:30 | Raynes | lol |
| 02:30 | Raynes | Mean text editor. |
| 02:31 | ibdknox | It's there to make you feel good about life. |
| 02:31 | ibdknox | this is with the newly downloaded one? |
| 02:31 | Raynes | No. |
| 02:31 | ibdknox | ah, yeah, the old one would deploy and then chose not to use it |
| 02:31 | ibdknox | like a boss. |
| 02:32 | clgv | good morning, you guys pulled an all-nighter? ;) |
| 02:33 | ibdknox | it's a mere 11:26pm here |
| 02:33 | Raynes | ibdknox: I'm writing this new enlive-like thingy to hopefully replace Enlive for most people, LT will make it much easier to test things. It's perfect for this sort of thing. |
| 02:33 | Raynes | It's only 1:26AM here. |
| 02:33 | ibdknox | Raynes: oooo, we talked about something like that before |
| 02:33 | clgv | ah damn. I'll always mix up those time offsets^^ |
| 02:34 | Raynes | ibdknox: Should we give Konrad access to the groups on clojars or do you want to keep handling releases for them? |
| 02:34 | ibdknox | ok, it looks like I could do this in an incredibly hacky way if I can access a private member on a class |
| 02:34 | ibdknox | I don't mind giving him access |
| 02:34 | Raynes | ibdknox: We talked about what? ;o |
| 02:34 | ibdknox | what's his clojars name? |
| 02:34 | Raynes | ibdknox: https://clojars.org/users/konrad-garus |
| 02:34 | ibdknox | Raynes: writing a better UI layer |
| 02:34 | ibdknox | for teh webs |
| 02:35 | Raynes | Oh. |
| 02:35 | ibdknox | eons ago |
| 02:35 | ibdknox | Raynes: added him to both |
| 02:36 | Raynes | Great. I'll get him going with the stuff and he can have at it. |
| 02:36 | Raynes | Ain't it nice to have less stuff to maintain? |
| 02:36 | Raynes | Also, need to make a note to actually announced that noir release. |
| 02:36 | ro_st | ah is 1.3 final? |
| 02:36 | ibdknox | yeah |
| 02:37 | clgv | changelog? ;) |
| 02:37 | ibdknox | though I'm with Raynes at this point, I would push new people more generally toward lib-noir + compojure |
| 02:37 | Raynes | clgv: Nothing different from the beta releases. |
| 02:37 | ro_st | btw, suggestion: bind *request* at the beginning of the middleware stack as well as at the end so that fns called by middle-middleware can use noir.request/ring-request |
| 02:37 | clgv | ah kk. so changes for 1.3.0-beta1 apply |
| 02:38 | ro_st | i had to glom code into a middleware so that it could read req directly because of the lack |
| 02:38 | Raynes | ibdknox: Yeah, I've been encouraging people in that direction. Not because of anything wrong with noir, but just because I don't want people to get angry at us when we don't do much maintaining. :p |
| 02:38 | ibdknox | yep |
| 02:38 | ibdknox | same thought |
| 02:38 | Raynes | And lib-noir + Compojure get you most of what you get with Noir. The defpage abstraction isn't there, but it really isn't that much different. |
| 02:38 | ibdknox | I also have come to the conclusion that there's a better way to write websites |
| 02:39 | Raynes | Not writing them at all works for me. |
| 02:39 | Raynes | But what's your way? |
| 02:39 | Raynes | :p |
| 02:39 | clgv | haha |
| 02:39 | ibdknox | seriously |
| 02:39 | ibdknox | I'm a big fan of static stuff these days |
| 02:40 | Raynes | Jekyllz |
| 02:40 | Raynes | I was a bit curious as to why you were all like "I CAN MAKE WEBNOIR BE STATIC IN LIKE 3 SECONDS FLAT BLINDFOLDED." |
| 02:40 | ibdknox | haha |
| 02:41 | ibdknox | that took a bit longer because jekyll doesn't have GFM by default |
| 02:41 | ibdknox | so I did some weird reworking |
| 02:41 | ibdknox | then I found a plugin |
| 02:41 | ibdknox | after the fact |
| 02:41 | Raynes | ibdknox: If you honestly agree, I might write a blog post encouraging people to focus on lib-noir and Compojure. I just want to make sure you're totally serious before I do. |
| 02:41 | Raynes | Turns out people listen to me sometimes. It's cool. |
| 02:41 | ibdknox | I am totally serious |
| 02:42 | ro_st | what's in not lib-noir, then? |
| 02:42 | ibdknox | There's nothing wrong with noir proper |
| 02:42 | ibdknox | and still stands as a good starting point for people coming from other places |
| 02:42 | Raynes | ro_st: It's a bunch of libraries that used to be in noir that we moved out into a separate lib for Compojure use. I use it in all my websites. |
| 02:42 | ro_st | right |
| 02:42 | ibdknox | but a lot of the problems I was originally solving have gone away in the past year and a half |
| 02:42 | Raynes | ro_st: It's stateful sessions, flashes, cookies, a tiny validation thingy, hashing stuff, etc. |
| 02:42 | ro_st | what's left? |
| 02:42 | ro_st | ie, what's NOT in lib-noir? |
| 02:43 | ibdknox | defpage, defpartial |
| 02:43 | ibdknox | all the routing stuff |
| 02:43 | ro_st | ok we don't use partial. we do use defpage. the middleware stuff? |
| 02:43 | Raynes | ro_st: In Noir itself, it's mostly just the defpage stuff. A lot of more experienced Clojurians don't really like it though, because of the stateful nature of it. It also makes complicated middleware scenarios hard to not entirely possible. |
| 02:44 | ibdknox | yeah, complicated middleware stuff just belongs on compojure |
| 02:44 | Raynes | add-middleware was my single most painful experience with Noir, and the main reason I started leaning towards compojure. |
| 02:44 | ro_st | interesting. i'll read through what's left and see if we can do with out. i'm all for simplicity |
| 02:44 | Raynes | defpartial could be moved to lib-noir if people actually use it. I don't think I ever did. |
| 02:45 | Raynes | ibdknox: Light table 0.2.3 wont use the 0.2.4 update it just downloaded. :( |
| 02:45 | ibdknox | defhtml is in hiccup now |
| 02:45 | Raynes | Oh, really? |
| 02:45 | Raynes | Nice. |
| 02:46 | ro_st | we started and quickly removed it because we realised that defn does the same thing :-) |
| 02:46 | Raynes | FWIW, no hurry for moving your stuff to Compojure if noir works for you. I'll still merge pull requests and make releases as necessary. I just can't promise speedy service or that I'll do any work on it myself at all ever. |
| 02:47 | Raynes | But definitely going to start trying to get the message out there that people should focus on Compojure and lib-noir. |
| 02:47 | Raynes | ibdknox: Want me to open an issue or something? Or, maybe I should clean .lighttable and try? |
| 02:47 | ibdknox | Raynes: nuke your .lighttable |
| 02:47 | Raynes | k |
| 02:48 | ro_st | gotcha. |
| 02:48 | Raynes | ibdknox: No luck. |
| 02:48 | ibdknox | so where are you looking for the version number? |
| 02:49 | Raynes | About |
| 02:49 | sgeo | Is sql-korma still considered a good thing? |
| 02:49 | Raynes | penumbra:~ raynes$ cat .lighttable/version.json |
| 02:49 | Raynes | {"version": "0.2.4"} |
| 02:49 | ibdknox | use the version command |
| 02:49 | ibdknox | that's the only valid source |
| 02:49 | ro_st | sgeo: if you're writing sql, i think it is |
| 02:49 | Raynes | I don't think ibdknox is deprecating all his projects. :p |
| 02:49 | ibdknox | I need to remove that stupid about page |
| 02:49 | Raynes | ibdknox: Says 0.2.4! |
| 02:49 | ibdknox | Raynes: try tomorrow night :) |
| 02:49 | sgeo | ro_st, suppose I just care about data storage, not using SQL stuff specifically |
| 02:49 | clgv | ibdknox: or implement the about page with the version function ;) |
| 02:50 | ibdknox | clgv: they exist in different realms of space time lol |
| 02:50 | Raynes | ibdknox: It works! Isn't it purdy? <3 |
| 02:50 | clgv | oh thats einsteinian then? :P |
| 02:51 | ro_st | sgeo: (inc datomic) |
| 02:51 | ibdknox | sgeo: korma's fine for SQL |
| 02:51 | sgeo | ro_st, don't want to use non-opensource stuff |
| 02:52 | ibdknox | mongo works nicely with clojrue |
| 02:52 | sgeo | Especially if it needs to be paid for for some uses |
| 02:52 | ro_st | fair enough |
| 02:52 | ro_st | mongo is great, too - clojurewerkz' monger is fantastic |
| 02:53 | Raynes | I use monger in refheap. |
| 02:53 | Raynes | Michael Klishin actually added it and keeps it updated. |
| 02:53 | ibdknox | and I think they took their query syntax from korma :) |
| 02:53 | ibdknox | if I remember right |
| 02:54 | Raynes | ibdknox: So what are you guys working on in LT right now? |
| 02:54 | Raynes | Anything not top-secret, of course. |
| 02:54 | ibdknox | it's all top secret! |
| 02:54 | ibdknox | fixing a few bugs |
| 02:54 | Raynes | Get out of my internets. |
| 02:55 | ibdknox | thanks to bronsa I no longer need a special version of clojure! |
| 02:55 | ibdknox | I'm releasing that update tomorrow |
| 02:55 | ro_st | ibdknox: he matched the actual mongo driver as closely as possible, so i don't htink so |
| 02:55 | clgv | what did you need a special version of clojure for? |
| 02:55 | ibdknox | lots of instarepl improvements |
| 02:55 | ibdknox | clgv: position info in the reader |
| 02:55 | Raynes | ibdknox: I think I just found a bug. |
| 02:55 | ibdknox | there are no bugs. |
| 02:55 | clgv | ah, the column information in 1.5? |
| 02:56 | ibdknox | clgv: more than that actually |
| 02:56 | Raynes | ibdknox: Okay, it isn't really a bug, but... |
| 02:56 | ibdknox | clgv: needed end line and end column too |
| 02:56 | ibdknox | clgv: on symbols, lists, vectors, maps, and macro expansions for wrapped reader macros |
| 02:56 | ibdknox | e.g. @something |
| 02:56 | Raynes | ibdknox: I tried to execute my file and it told me I needed to connect and populated the command bar with the connect command, but the path was to the directory holding the file I had tried to execute instead of down the file system a bit where the project.clj is. |
| 02:57 | clgv | ah interesting |
| 02:57 | Raynes | ibdknox: Shouldn't it back down the path until it finds a project.clj or something? |
| 02:57 | ibdknox | Raynes: intentional, as of tomorrow though you can just submit that and it will do the right thing :) |
| 02:57 | Raynes | Excellent. |
| 02:57 | ibdknox | yeah there are a few nice little improvements coming tomorrow |
| 02:57 | ibdknox | auto-finding project.clj is one |
| 02:58 | Raynes | ibdknox: When will I be able to add a refheap plugin? |
| 02:58 | Raynes | :D |
| 02:58 | Raynes | Months? Years? |
| 02:58 | Raynes | DECADES!?!?! |
| 02:58 | clgv | never? ;) |
| 02:58 | mthvedt | centuries |
| 02:59 | ibdknox | millennia |
| 03:00 | mthvedt | aleph null |
| 03:00 | clgv | you cant say "centuries" after "never" - you have to continue with ordinal numbers ^^ |
| 03:00 | ibdknox | a plugin system is one of my next big TODOs |
| 03:00 | Raynes | ibdknox: What should I do in anticipation? Like, I guess I'd need to write a refheap API lib in JS? Node? |
| 03:01 | Raynes | I'm not sure how to write a regular javascript library. Node on the other hand is easy. |
| 03:01 | ibdknox | node would work |
| 03:01 | Raynes | So I can use node libraries? From npm? |
| 03:01 | Raynes | If I need them. |
| 03:01 | ibdknox | yessir |
| 03:01 | Raynes | Probably wont. |
| 03:01 | Raynes | Awesome. |
| 03:02 | Raynes | I'm sick of cljs though, so can I write it in actual javascript? |
| 03:02 | ibdknox | sure |
| 03:02 | Raynes | Great. |
| 03:02 | sgeo | I'm wondering if I should start learning Node |
| 03:02 | sgeo | Is Javascript a fun language? |
| 03:02 | ibdknox | no |
| 03:02 | Raynes | No. |
| 03:02 | ibdknox | lol |
| 03:02 | sgeo | Although recently learned that using objects as hashes suck... |
| 03:03 | Raynes | Most people find cljs fun, and I will to if it ever works for me. |
| 03:03 | sgeo | http://www.devthought.com/2012/01/18/an-object-is-not-a-hash/ |
| 03:03 | Raynes | But I'm really at a point where I'm like "screw it, I'll just write it in js :'(" |
| 03:03 | ro_st | sgeo: no. noooo. |
| 03:03 | Raynes | ibdknox: My problem with cljs and node is that I don't see how you can even distribute a nodejs library written in cljs |
| 03:03 | ibdknox | I haven't gotten that far with it yet |
| 03:03 | Raynes | Because of all the other stuff that comes with it. |
| 03:04 | ibdknox | yeah |
| 03:04 | ro_st | that's because cljs isn't bootstrapped |
| 03:04 | ibdknox | I know I have some scary work ahead of me with the plugin system |
| 03:04 | Raynes | You sure do. |
| 03:04 | sgeo | ro_st, how are you supposed to do hashes in Javascript? |
| 03:04 | Raynes | Good luck, partner. |
| 03:04 | ibdknox | I'm hoping I hire someone before then :p |
| 03:04 | clgv | imho javascript is an excellent example for a "grown project" :P |
| 03:05 | ro_st | sgeo: i won't pretend to have a good answer for you, sorry |
| 03:05 | ibdknox | anyone know how to get the value of clojure.reflect.Field? |
| 03:05 | ro_st | because i don't. my solution is, use cljs |
| 03:06 | Raynes | I think a refheap lib is simple enough that I wont mind writing js for it. |
| 03:06 | Raynes | Anyways, I'm off. |
| 03:06 | Raynes | ibdknox: Thanks for visiting us mere mortals and excellent discussion. |
| 03:07 | ro_st | sleep well mr grimes |
| 03:07 | Raynes | Oh I'm not going to sleep. |
| 03:07 | Raynes | I'm going to play BATMAN! |
| 03:07 | ibdknox | Raynes: later dude :) |
| 03:07 | Raynes | Sleep is for non-teenagers. |
| 03:07 | ro_st | too right :-( |
| 03:07 | Raynes | I'm going to be working a full time job in LA in less than 2 months. I'm milking every last second out of my childhood. |
| 03:07 | Raynes | Laters. |
| 03:09 | ro_st | good plan |
| 03:20 | ro_st | anyone here started a clojure user group? any tips for a first timer? i'm starting one in Cape Town |
| 04:51 | danielszmulewicz | While deploying a webbit-based app on dot cloud, I get this: can not create URI from localhost hostname. Anyone seen this before? |
| 05:17 | Raynes | cemerick: Really? always 2 spaces? |
| 05:17 | Raynes | You really believe that? |
| 05:18 | Raynes | I think I'd *rather* deal with complex editor plugins than have always-2-spaces. |
| 05:18 | cemerick | Raynes: I've never seen any environment that can do anything else automatically and reliably. |
| 05:18 | Raynes | Emacs and Vim do it just fine. |
| 05:18 | cemerick | no, they don't |
| 05:18 | cemerick | did you read the post? :-P |
| 05:18 | Raynes | Yeah, they pretty much do bro. |
| 05:19 | Raynes | I seen pretty much no situations where the naming conventions don't work out. |
| 05:19 | cemerick | (defn with-something-that-shouldn't-be-indented-like-with-open [] ...) |
| 05:19 | cemerick | There. :-P |
| 05:20 | Raynes | It seems to be 'working' perfectly well for most people. This sort of thing is just going to start a nice big group of people indenting their code terribly/in such a way that my editor tries to fix it. |
| 05:21 | cemerick | well, not everyone uses emacs, so that's already going to happen |
| 05:21 | Raynes | So I don't think I'm going to get on board with this one, and don't be angry if I call you stupid in an attempt to fix your terrible wrongdoings along the way. |
| 05:21 | Raynes | Ugh, Emacs isn't the only editor that works this way. |
| 05:22 | cemerick | Perhaps not |
| 05:22 | cemerick | In any case, I welcome counterpoints to the ones I made in the post :-) |
| 05:22 | cemerick | Just saying "it mostly works for everyone that uses it so gtfo" isn't super-compelling ;-) |
| 05:23 | Raynes | What am I supposed to counter? I disagree with you that there is a problem at all. |
| 05:24 | Raynes | I am curious about one thing |
| 05:26 | Raynes | Are you willing to alienate the majority of Clojurians who use editors that do this terrible thing? Because if you write code in that way, it becomes extremely difficult to work with that code in Emacs because Emacs will persistently try to fix the code. The person working on it will almost certainly do one of 1) End up accidentally not manually indenting to match your code's style somewhere 2) get annoyed and give up 3) hate you 4) all of |
| 05:26 | Raynes | the above |
| 05:27 | Raynes | If not, then you'd probably want to issue a pull request to clojure-mode, but it wont get accepted because I doubt anyone in particular is going to like the idea of always indenting 2 spaces. |
| 05:27 | cemerick | Whoa, who's trying to alienate anyone? |
| 05:28 | Raynes | Regardless of merits, I think "It works perfectly well for everyone" is a perfectly good counterpoint. |
| 05:28 | tomoj | Raynes: ever called a function 'default-something' ? |
| 05:28 | Raynes | Don't think I have, no. |
| 05:28 | cemerick | ...or want `foo` in project A indented differently than `foo` in project B. |
| 05:29 | tomoj | anyway, I have a huge nasty list of special cases |
| 05:29 | tomoj | and regularly don't want whatever clojure-mode decides |
| 05:29 | tomoj | even assoc.. |
| 05:29 | cemerick | tomoj: Right, which is the point I'm making. Pick a number of spaces, use it everywhere. |
| 05:29 | tomoj | but... the gospel... http://mumble.net/~campbell/scheme/style.txt |
| 05:30 | Raynes | Yeah, I just disagree. |
| 05:30 | Raynes | *shrug* |
| 05:30 | cemerick | tomoj: indeed |
| 05:30 | cemerick | I certainly *wish* that that could be followed, but it can't be applied automatically and reliably. |
| 05:31 | tomoj | put it in the metadata? :) |
| 05:31 | cemerick | hah |
| 05:31 | cemerick | yeah, that's doable, but people would hate that more than any other option, I'll bet |
| 05:32 | cemerick | Also, you'd need a runtime to get the metadata |
| 05:32 | Raynes | cemerick: The Haskell emacs mode handles ambiguous indentation cases by having multiple possible indentations that are cycled through multiple presses of tab. |
| 05:32 | Raynes | Same thing could likely be applied here, but probably not in less intelligent editors. |
| 05:32 | cemerick | Raynes: oh, sure, that's how ccw used to work, too |
| 05:33 | tomoj | I'd have to see what "always 2 spaces" looks like |
| 05:33 | Raynes | And that was taken out because... |
| 05:33 | Raynes | Like crap. |
| 05:33 | Raynes | I can help you with that. |
| 05:33 | noidi | CCW always indents relative to the previous line, so as long as you fix up your special case manually, the rest will work automatically |
| 05:33 | Raynes | If you always newline before your first argument it looks fine. |
| 05:33 | cemerick | Raynes: it's not automatic |
| 05:34 | Raynes | At least, it looks fine until you have 400 extra lines just because Chas wanted 2 space indents everywhere. |
| 05:34 | tomoj | extra lines? |
| 05:34 | n_b | Just to save me grepping logs, can someone link me to the post that started the debate? |
| 05:35 | cemerick | n_b: http://groups.google.com/group/clojuredev-users/msg/4b72a59bbc8d19de?hl=en |
| 05:35 | n_b | ty cemerick |
| 05:35 | Raynes | cemerick: I read every word. What do you think I didn't read? |
| 05:35 | tomoj | I feel pretty OK with needing a runtime |
| 05:36 | Raynes | If I'm missing something, by all means point me to the enlightenment. |
| 05:36 | pyr | cemerick: your (defn with-something-that-shouldn't-be-indented-like-with-open [] ...) argument is flawed |
| 05:36 | pyr | (defn with-something-that-shouldn't-be-indented-like-with-open |
| 05:37 | pyr | "this does foo" |
| 05:37 | pyr | []) |
| 05:37 | pyr | well, i botched aligning but you get the idea |
| 05:37 | Raynes | I don't think I do, no. |
| 05:37 | Raynes | What are you saying is flawed? |
| 05:38 | cemerick | Raynes: I was talking about what will always work, and you seem to be saying that something that doesn't always work…always works. |
| 05:38 | Raynes | cemerick: I'm saying that it doesn't matter that it doesn't always work. |
| 05:39 | cemerick | That's fair. |
| 05:39 | pyr | but it's a discussion that leads to nowhere i guess |
| 05:39 | Raynes | Don't agree with me, you cretin. |
| 05:39 | pyr | everyone's gonna be in favor of whatever happens in their favorite editor :) |
| 05:40 | n_b | I'd fall on the side of 'always 2 spaces' if only because it would so simplify grokking indentation rules |
| 05:40 | cemerick | In the end, I'd prefer a completely regular, always-obvious ruleset/behaviour. |
| 05:40 | cemerick | Raynes: <3 |
| 05:41 | Raynes | Well, as long as you leave my code the way I've indented it, I'll be happy. |
| 05:41 | cemerick | pyr: I don't think any editor does what I want at the moment, though I'm lobbying ;-) |
| 05:41 | tomoj | do you think prior-arg-alignment doesn't help that much for readability? |
| 05:41 | Raynes | ejackson: U SO INNOVATIVE |
| 05:41 | tomoj | readability is more important to me than the tiny bit of time I spend writing indentation |
| 05:41 | ejackson | let the editor show it to me in a sensible format, and to Raynes in Klingon ! |
| 05:41 | cemerick | Raynes: well, anyone submitting pull requests or whatever that significantly changes indentation is a tool, in any case. |
| 05:42 | pyr | ejackson: it would make reading code on GH a bit harder though |
| 05:42 | cemerick | ejackson: Indeed, text editing is caveman-style. |
| 05:42 | cemerick | And, yet. |
| 05:42 | ejackson | that should be in Rich Hickey Canonical format that we all learn :) |
| 05:42 | Raynes | cemerick: I'd be inclined to not do anything with code with those sorts of indentation rules because of the reasons I outlined above, which would make me sad. |
| 05:43 | tomoj | what, if it doesn't match clojure-mode, you won't touch it? |
| 05:43 | n_b | ejackson: I'm very uncomfortable with anything that changes how the code is viewed depending on editor |
| 05:43 | n_b | beyond colouring and size. Just seems rife for problems down the line |
| 05:43 | ejackson | n_b: you shouldn't be, its just data. |
| 05:43 | ejackson | and the editor is a pretty printer. |
| 05:43 | Raynes | Also, damn it cemerick. You had to start a flamewar at 4AM and now I've wasted 30 minutes not writing laser. |
| 05:43 | cemerick | Raynes: LOL. Dude, I tagged it as such. *and* you replied in ~30 seconds! |
| 05:44 | ejackson | that damn cemerick ! Its ripe for Meme'ification. |
| 05:44 | Raynes | tomoj: No, if it is wildly different from clojure-mode (as this is) and I need to work with a large portion of it. |
| 05:44 | n_b | Time to update clojurebot to support MemeTeX |
| 05:44 | Raynes | tomoj: Emacs will constantly change the indentation. I'd probably have to switch to text-mode just to stay sane. |
| 05:45 | tomoj | must be some switch that says "don't do indentation" |
| 05:45 | tomoj | but yeah |
| 05:45 | Raynes | The last thing I want is for ccw to do one thing and emacs to do another. |
| 05:45 | cemerick | Raynes: it already happens, and has for years |
| 05:45 | rbarraud | Reification at the least. A cemerickation as a UDT. |
| 05:45 | pyr | yup, get the vim part to behave the same and then you're mostly set |
| 05:45 | Raynes | That makes it okay. |
| 05:45 | Raynes | ! |
| 05:46 | cemerick | clojure-mode has always had the most intricate ruleset w.r.t. indentation |
| 05:46 | tomoj | that seems like a polite word |
| 05:46 | cemerick | Raynes: Yes, trivial differences in code styles is okay. |
| 05:46 | rbarraud | Pp. : intricated... |
| 05:46 | Raynes | I used Vim for quite a bit of Clojure code authoring. Turned on fuzzy indentation and outputted pretty much exactly the same thing as Emacs with the small difference of one space in cond calls. |
| 05:47 | tomoj | can we let editors munge the indentation and then just patch it up semi-automatically before comitting? |
| 05:47 | Raynes | Sublime Text 2 works fine with that new plugin thing to work around how much it sucks. |
| 05:47 | Raynes | I haven't had this "has for years" stuff happen to me in Clojure editors yet. |
| 05:47 | Raynes | cemerick: Also, that is true. It's only because I hate you so much. |
| 05:48 | Raynes | <3 |
| 05:48 | Raynes | You tag #flamewar, you better expect one. |
| 05:48 | cemerick | Raynes: Insofar as you've ever touched code I wrote, it's happened to you; and, you likely didn't even notice. |
| 05:48 | Raynes | I'm pretty sure I've never touched code you've written, actually. |
| 05:48 | cemerick | Raynes: Mostly, I was trying to wheedle down your productivity. |
| 05:48 | Raynes | And I'm pretty sure I'd have noticed. |
| 05:49 | cemerick | Raynes: I'm submitting a PR on bultitude, and there's gonna be 2 spaces missing. Watch out! |
| 05:49 | Raynes | That's it. I'm just using Haskell from now on. |
| 05:49 | Raynes | Take your indentation and shove it. |
| 05:49 | cemerick | Score! |
| 05:50 | ejackson | :) |
| 05:51 | Raynes | For all watching, cemerick and I are actually long time friends. We go way back to before I was a fetus. None of the angry comments exchanged are actually serious at all, and this whole event was orchestrated entirely for your entertainment. We'll be doing this show for the remainder of this week and the first half of the next. You can buy tickets at eventbrite. |
| 05:52 | cemerick | Raynes: turn on the page now. Daddy needs a new pair of shoes. |
| 05:56 | rbarraud | Why u no instantiate a shovination?. |
| 05:56 | rbarraud | , |
| 05:56 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: EOF while reading> |
| 05:56 | rbarraud | .!!? |
| 05:56 | rbarraud | Lolz.... Y |
| 05:57 | borkdude | , |
| 05:57 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: EOF while reading> |
| 05:57 | rbarraud | Yegge rant q.v. :-) |
| 06:00 | tomoj | :( when I get an error now, it prints the stacktrace over and over many times until I hit ctrl-c |
| 06:16 | Raynes | tomoj: It's making sure you see the error. The important part is the indentation. |
| 06:17 | tomoj | oh, it's because one.test retries every 10ms |
| 06:17 | tomoj | by default, for 60s.. |
| 07:11 | tgoossens | borkdude: about "asking for forgiveness is easier than asking for permission" |
| 07:11 | tgoossens | they got quite mad at me :p |
| 07:11 | borkdude | lol |
| 07:11 | tgoossens | their argument: because then my teammates cannot read and use and change to code any more |
| 07:12 | borkdude | good argument |
| 07:12 | tgoossens | correect |
| 07:13 | borkdude | tgoossens what about my suggestion of buidling the same thing in both languages, just for demo purposes |
| 07:13 | tgoossens | i've been considering that yes |
| 07:13 | tgoossens | the thing is |
| 07:13 | tgoossens | as far as i know there is no NXT library in clojure (not just a wrapper around lejos) |
| 07:13 | tgoossens | so maybe i just found myself a project for next semester |
| 07:14 | borkdude | tgoossens I think I saw smth about this, but never looked into it http://link.springer.com/content/pdf/10.1007%2F978-3-642-13541-5_6 |
| 07:15 | tgoossens | i think it is still based on lejos |
| 07:15 | tgoossens | but maybe it works its way around the flaws of it |
| 07:15 | tgoossens | (and lejos has some serious flaws) |
| 07:17 | tgoossens | so i'm considering about writing nxt lib from scratch but maybe that's a bit overrated |
| 07:19 | borkdude | good luck :) |
| 07:23 | thomas` | join #go-nuts |
| 07:30 | tgoossens | borkdude: also. Knowing my teammates. I'm pretty sure they are not interested in my alternative approach |
| 07:31 | borkdude | tgoossens probably they will only start to use it, when they clearly see the benefit of it |
| 07:32 | tgoossens | i mean. they are not intested in taking the time to let me demo it. |
| 07:32 | borkdude | tgoossens for some things like GUIs or heavy Java interop maybe just Java the best fit |
| 07:32 | tgoossens | at least not all of them |
| 07:33 | borkdude | tgoossens don't worry about it too much, it's standard practice also at my work |
| 07:34 | tgoossens | I'll just try to find some projects for myself during the year |
| 07:34 | tgoossens | that's always a hard part of it. finding an interesting project :p |
| 07:35 | borkdude | I gtg |
| 08:13 | narmi | hi |
| 08:13 | narmi | apart from being run on jvm, what are the differences between clojure and cl |
| 08:13 | narmi | like what types of things is one language better suited for than the other? |
| 08:26 | nonrecursive | narmi: what's motivating your question? are you new to clojure / cl and trying to figure out what to learn first? |
| 08:26 | nonrecursive | narmi: what's motivating your question? are you new to clojure / cl and trying to figure out what to learn first? |
| 08:27 | narmi | yes |
| 08:27 | narmi | actually i am trying figure out whether i should learn one, the other or both |
| 08:29 | daimrod | narhttp://hyperpolyglot.org/lisp |
| 08:29 | nonrecursive | in that case I would suggest learning clojure first. i learned CL first, and while it was fun, clojure has been much more enjoyable for two reasons: 1) the ecosystem is much better, especially when it comes to using external libraries. with CL, finding and using someone else's code is a big pain. in clojure it's pretty easy 2) clojure is much "smoother" than common lisp, if that makes sense. the language is just a bit nicer to work with |
| 08:29 | daimrod | nonrecursive: did you use CL with Quicklisp? |
| 08:30 | nonrecursive | daimrod: yep I did and it was still painful. for example, it would pull in versions of libraries that were a few years old |
| 08:31 | daimrod | that's weird, because Zach compiles the latest release. |
| 08:31 | ro_st | nonrecursive: Clojure for sure. the whole lot has been built for developer ease from the ground up. one of RHickey's stated design goals is to be a modern general purpose programming language. |
| 08:31 | nonrecursive | daimrod: this was awhile ago now but i remember also having to learn about asdf in order to use quick lisp… just had to know too much |
| 08:31 | nonrecursive | daimrod: yeah not trying to disparage his work, it's definitely the best thing for CL. i just think the project.clj file is way nicer |
| 08:32 | fredyr | enough CL to read On Lisp, enough Scheme to work through SICP and Clojure for the rest of it? |
| 08:32 | fredyr | :) |
| 08:33 | daimrod | narmi: try to both, for CL there is PCL, for Clojure I think that Intro to Clojure is the best. |
| 08:33 | nonrecursive | fredyr: haha yeah pretty much |
| 08:33 | ro_st | haha that was meant for narmi. |
| 08:33 | ro_st | that'll teach me to irc within minutes of waking up |
| 08:34 | nonrecursive | narmi: i learned CL through Land of Lisp - it was super fun |
| 08:36 | daimrod | fredyr: imo PAIP is much better than On Lisp. |
| 08:36 | narmi | what is paip |
| 08:37 | nonrecursive | paradigms of artificial intelligence programming i think |
| 08:37 | fredyr | ya |
| 08:37 | narmi | okay |
| 08:37 | narmi | so what is clojure good for then? |
| 08:37 | fredyr | i haven't read it, but now i need to order it straight away i think |
| 08:37 | fredyr | :D |
| 08:37 | nonrecursive | :) |
| 08:38 | ro_st | narmi: web startup here. we use it for our entire stack. server, client, database, devops, campfire bot |
| 08:39 | narmi | okay thank you |
| 08:40 | fredyr | is it your first functional language you're going to learn? |
| 08:40 | narmi | yep |
| 08:40 | ro_st | database is datomic. devops with palletops.com. client with clojurescript. |
| 08:40 | nonrecursive | ro_st: what's your web site? |
| 08:41 | ro_st | our entire codebase across all of that including tests is under 20k loc. previous v1 client codebase, in flex/air, alone was 25k |
| 08:42 | ro_st | nonrecursive: the v2 stack isn't live yet. 14 jan -fingers crossed- v1 stack still available at www.cognician.com |
| 08:42 | fredyr | narmi: clojure is strong on the functional side, with immutability and such, so it's a good place to start |
| 08:42 | nonrecursive | ro_st: cool :) good w/ your release |
| 08:43 | ro_st | thank you |
| 08:43 | narmi | okay |
| 08:43 | ro_st | looking forward to killing php |
| 08:43 | nonrecursive | :D |
| 08:43 | fredyr | cool with an all clojure shop |
| 08:44 | ro_st | clj is the most fun i've had programmin' in 15 years :-) |
| 08:44 | fredyr | :) |
| 08:44 | ro_st | and i'm off. ciao! |
| 08:45 | fredyr | later |
| 09:30 | @rhickey | Please retweet, contact blip etc: https://twitter.com/richhickey/status/279210140425674754 |
| 09:32 | @rhickey | they just nuked my account without warning |
| 09:32 | ejackson | cheeky bastards ! |
| 09:36 | jimduey | Did they give any reason? |
| 09:42 | Foxboron | jimduey, i got a feeling "without warning" implies no reason. |
| 09:44 | ambrosebs | I'm assuming Rich will be taking his business elsewhere? |
| 09:45 | @rhickey | violation of terms of service, no enumeration thereof, and not warning, after the fact |
| 09:45 | Iceland_jack | Was there any recent activity that might have triggered it? |
| 09:45 | @rhickey | not on my part, other than paying |
| 09:49 | ohpauleez | jimduey: ambrosebs: is that in regards to blip? |
| 09:50 | ambrosebs | ya |
| 09:50 | ohpauleez | gah, terrible news. Pretty ridiculous. Sorry Rich et el who have to deal with that |
| 09:51 | alexnixon | when creating a closure e.g. (let [x (make-huge-thing)] (fn [] 42)) does the closure capture a reference to enclosed variables which aren't used? (e.g. x in that example) |
| 09:51 | ambrosebs | such a waste of time |
| 09:53 | nDuff | Is the original content still archived somewhere? |
| 10:12 | TimMc | alexnixon: I would think not -- locals clearing should take care of them. |
| 10:17 | alexnixon | TimMc: cool thanks. I read (https://groups.google.com/forum/#!msg/clojure/Xmu3pUMgiJk/Lx1Sq462h4wJ) that locals clearing code is emitted on the last *use* of a variable (here there isn't one). Does that mean that in this contrived example I'd end up keeping a reference to x? |
| 10:18 | bordatoue | hello, I come across an issue with ,(import ) from the repl, I had a set of .jar files, one of them is a deprecated API (.jar) , I could successfully import all the .class files from all the .jar files apart from the deprecated API. It appears that (import 'some.deprecated.api.Class) is not working. Is there any way to use a deprecated API with clojure, I can see no such restrictions in java. When compiling the .java file that uses the |
| 10:18 | bordatoue | deprecated API only a warning is generated. |
| 10:18 | alexnixon | TimMc: I guess it's the difference between "x is captured, but it's OK due to locals clearing" vs. "x is not captured at all" |
| 10:19 | oliyh | hi, i am trying to extend PersistentList using proxy but the constructor of the java class doesn't give me any scope to do this. essentially what i want to do is create a normal list and just override the count function to return a value i have at construction time |
| 10:20 | TimMc | alexnixon: https://www.refheap.com/paste/7549 Maybe not quite what you were asking. |
| 10:20 | oliyh | if PersistentList had a public constructor accepting another list i could do it, the fact it doesn't makes me suspect i am on the wrong road |
| 10:22 | alexnixon | TimMc: I think it doesn't *quite* answer my question though as you've used 'huge' when creating the weak reference, so clearing code will be emitted |
| 10:23 | alexnixon | TimMc: asking for gc is a good way to test this though - I'll poke around and see if I can answer it myself |
| 10:25 | joegallo | oliyh: perhaps you could just proxy clojure.lang.Counted and use the provided list in a closure? |
| 10:26 | oliyh | joegallo: how would i specify the behaviour of all the other PersistentList methods i wanted to retain? |
| 10:27 | TimMc | &((apply comp (take 20 (cycle [keyword str]))) :colons) |
| 10:27 | lazybot | ⇒ :::::::::::colons |
| 10:28 | joegallo | (proxy [PersistentList Counted] ...) and then you only fill in an implementation for count. I THINK. |
| 10:30 | oliyh | that's what i have so far joegallo but the problem i then run into is that to construct a PersistentList the only public constructor is public PersistentList(Object first) |
| 10:31 | joegallo | ahhh now i get it. my bad. |
| 10:32 | bordatoue | has anyone tried importing a deprecated class in clojure |
| 10:32 | oliyh | what i want is (defn truncated-coll [size coll] (proxy [clojure.lang.PersistentList] [coll] (count [] size))) |
| 10:32 | oliyh | but then i have a list of lists... so is there a better way to achieve what i want to do? |
| 10:33 | joegallo | bordatoue: there's nothing magic about deprecated classes as far as i know. it sounds like it's just a part of the package name, and nothing special. i think you're probably just making some simple error. perhaps you should gist some real code instead of just saying some.deprecated.api.Class. |
| 10:33 | nDuff | ...part of the name, or an annotation? |
| 10:33 | nDuff | Still, shouldn't matter. |
| 10:34 | joegallo | oliyh: why can't you just call (take coll size)? |
| 10:34 | danlarkin | (doc take) |
| 10:34 | clojurebot | "([n coll]); Returns a lazy sequence of the first n items in coll, or all items if there are fewer than n." |
| 10:35 | bordatoue | joegallo: i have got a .jar file from a client that has some deprecated decorators all over the place, i strongly suspect import is preventing deprecated classes from being imported . Are you telling me import will work fine with deprecated classes |
| 10:35 | TimMc | joegallo: That still doesn't make it a counted? instance. |
| 10:36 | TimMc | oliyh: You want count to return in constant time, yeah? |
| 10:36 | bordatoue | joegallo: I will try it with just a single class |
| 10:36 | joegallo | TimMc: I didn't an explanation of why he needed it to be a counted... |
| 10:36 | TimMc | It's just my intuition, I don't know either. |
| 10:38 | oliyh | joegallo: i'm building a web page where i want to provide a collection of objects to be displayed, where this collection is of a conveniently displayable size (e.g. 10) but that many more exist in the database (hundreds) which will be collected via ajax or something |
| 10:39 | oliyh | i want to also display a total count to the user, hence count should display the size in the db but when i iterate over my collection i only want the first ten |
| 10:39 | oliyh | as far as i know, i can't count a lazy seq without realising it all in memory |
| 10:39 | joegallo | bordatoue: (import 'java.io.LineNumberInputStream) works just fine here, and that's an @Deprecated class. |
| 10:40 | joegallo | are you perchange trying to (import 'some.deprecated.stuff.*), because that won't work, btw. |
| 10:40 | oliyh | so what i am essentially trying to do here is create a lazy seq that can be counted but not realised, where my count return value is computer cheaply via a count in my data source |
| 10:40 | danlarkin | oliyh: why are you making your life so complicated. Query the database for both the count() and the first/last/whatever 10 items |
| 10:41 | danlarkin | and be done with it |
| 10:41 | alexnixon | TimMc: https://www.refheap.com/paste/7550 everything looks ok despite the fact that x is never used, so presumably isn't cleared. I guess the compiler has some logic to capture only the subset of the environment that the closure uses |
| 10:41 | joegallo | oliyh: my $.02, danlarkin is right, return a tuple of [(.someCheapCountIGotMagically db-stuff) (take 10 the-lazy-seq-or-whatever)] |
| 10:41 | danlarkin | no, no (take 10) |
| 10:42 | danlarkin | just have the DB return only 10 items |
| 10:42 | joegallo | ah, logical |
| 10:42 | joegallo | that's even better. |
| 10:42 | oliyh | danlarkin: yes, there are practical solutions like yours. it's turned into more of a thought exercise though and i'd hoped it could be solved with extend or protocol or similar |
| 10:42 | oliyh | in java the solution is obvious, and clojure >> java no? |
| 10:44 | danlarkin | obvious troll is obvious |
| 10:44 | oliyh | i'm really not, if that's directed at me - i'm trying to learn |
| 10:45 | nDuff | oliyh: ...so implement Counted |
| 10:47 | nDuff | oliyh: ...by the way, are you Oliver Yu, formerly of M1? |
| 10:47 | danlarkin | following rat holes by doing things "the java way" in clojure is not a "thought experiment", it's a waste of time and won't teach you anything about how to get the most out of clojure |
| 10:48 | oliyh | nDuff: no, i'm not |
| 10:48 | alexnixon | danlarkin: his question is "how do I implement a constant time count method for a lazy sequence?". That's a great question. |
| 10:49 | oliyh | danlarkin: i'm trying to implement the clojure way, not the java way - as i explained to joegallo, i am very close with my code above, just thwarted by the java constructor of PersistentList |
| 10:50 | oliyh | alexnixon: a very concise summary, thanks |
| 10:50 | bordatoue | joegallo: thanks very much |
| 10:50 | danlarkin | vec |
| 10:50 | danlarkin | that's how you do it |
| 10:51 | joegallo | bordatoue: you're welcome. this all gets a lot easier, but for a while the learning curve is steep. |
| 10:51 | bordatoue | in emacs if i kill the repl and type clojure-jack-in will it reload the classes |
| 10:52 | trptcolin | umm, good luck w/ constant-time count on lazy seqs |
| 10:52 | ohpauleez | trptcolin: exactly |
| 10:53 | bordatoue | joegallo: there was something wrong , i don't know if it is something do with emacs , I checked the classpath using ps and found it had the .jar files in the classpath . On restarting emacs and trying to import the same class seems to have solved the issue. |
| 10:53 | ohpauleez | It's mostly an oxymoron "constaint-time count on lazy seqs" - in order to count, something needs to be realized. danlarkin already said the easiest (and shortest) realization- vec |
| 10:54 | ohpauleez | and there's no telling if you lazy seq is actually a generator-like thing producing a lazy-seq |
| 10:54 | ohpauleez | or just a lazy-seq of a finite number of elements |
| 10:54 | joegallo | bordatoue: k, sounds like maybe those jars ended up in your classpath after you started your repl, which is usually problematic. |
| 10:54 | trptcolin | either way, it's at best linear-time, unless you have a way to get ahold of whatever's behind the lazy seq |
| 10:54 | bordatoue | joegallo: so is there any way to see the classpath within the repl |
| 10:55 | ohpauleez | exactly |
| 10:55 | bordatoue | joegallo: you might be right, classes could have entered the classpath after i had started the repl |
| 10:55 | alexnixon | ohpauleez: he's not after a general solution so that point's moot |
| 10:56 | joegallo | bordatoue: nothing new in that department since yesterday. you can still (System/getProperty "java.class.path") and it'll still be inaccurate if something has been doing clever things with classloaders. |
| 10:56 | oliyh | if it's really not possible i can accept that, but i was reading stuart sierra's paper on the expression problem which led me to believe it would be possible |
| 10:56 | danlarkin | oliyh: it's not just that it isn't possible, it's that it doesn't even make sense |
| 10:57 | TimMc | danlarkin: Sure it makes sense. |
| 10:57 | TimMc | If I know my generator, I may know the total length. |
| 10:57 | TimMc | For instance, (range 10) is lazy, but I know the count ahead of time. |
| 10:58 | danlarkin | blurf |
| 10:58 | joegallo | (vec (range 10 ...)) like magic |
| 10:58 | joegallo | :) |
| 10:58 | bordatoue | joegallo: when you say clever things, is it possible to remove a certain classes from the classpath |
| 10:58 | TimMc | oliyh: Why do you need it to be lazy? |
| 10:59 | TimMc | Also, laziness may be a problem if you're working with database connections. |
| 10:59 | joegallo | bordatoue: a lot of things are present in the bowels of the java classpath. i would imagine it would be possible for you to add and remove classes dynamically, but you'll probably release the balrog. |
| 10:59 | oliyh | there are hundreds or thousands of elements in my use case, holding them in memory server side or trying to display them all on page load client side is expensive |
| 10:59 | joegallo | that would probably be out of the ordinary for you to do, and i suggest you consider that way shut. |
| 11:00 | danlarkin | oliyh: this is a stupid discussion. query the DB for the total count and the first/last/whatever 10 elements and be done with it |
| 11:00 | danlarkin | there is no other sensible way to do it |
| 11:00 | bordatoue | joegallo: okay, thanks |
| 11:01 | TimMc | oliyh: In the general case, I'm sure you can make a lazy seq that implements Counted. In the specific, practical case, danlarkin is right. |
| 11:02 | TimMc | (and by "general case", I don't mean *all* lazy seqs, just a specific subset) |
| 11:02 | oliyh | fair enough, thanks for the debate everyone |
| 11:03 | alexnixon | TimMc: given clojure.lang.LazySeq is final and implements count, how so? |
| 11:03 | trptcolin | implement ISeq & Counted |
| 11:06 | alexnixon | trptcolin: an option, but it feels a bit clunky given you're writing LazySeq from scratch |
| 11:06 | TimMc | Passthroughs, mostly. |
| 11:06 | TimMc | No, it would just be backed by a LazySeq. |
| 11:07 | trptcolin | of course. you want not-clunky, you do what danlarkin says ;) |
| 11:07 | alexnixon | TimMc: sure - and the other interfaces that LazySeq implements? |
| 11:07 | TimMc | What about them? |
| 11:08 | TimMc | I suppose IPending is interesting. |
| 11:08 | alexnixon | TimMc: you're not going to have (e.g.) a realized? function unless you implement that yourself |
| 11:08 | TimMc | alexnixon: They'd all be chained to the underlying LazySeq. |
| 11:10 | TimMc | next/rest would give you a new CountedLazySeq with a dec'd size. |
| 11:10 | alexnixon | yeah I understand that, it just doesn't feel particularly nice (admittedly doing this at all is stretching the boundaries of sanity) |
| 11:11 | TimMc | Who said anything about nice? |
| 11:11 | ohpauleez | Clojure is a great language because if something seems hard, you're most likely doing it wrong |
| 11:12 | alexnixon | well as oliyh said, you'd hope to be able to add new functionality (O(1) count) to an existing type (LazySeq). I guess the counter-argument here is that you own neither, and so are probably doing something you shouldn't. |
| 11:13 | TimMc | Right, so mimicing/wrapping is the "best" solution. |
| 11:13 | alexnixon | sure |
| 11:14 | alexnixon | just trying to understand why, and I think I'm coming to the conclusion that "you own neither LazySeq nor count" is the reason. |
| 11:14 | ohpauleez | no the argument here is counting a lazy-seq is O(n) at best, unless you fake it, in which case you're better off just def'ing the value to something (an atom if you want to continually adjust it) |
| 11:14 | ohpauleez | monkey-patching ala protocols is completely sane - I do it from time to time |
| 11:14 | TimMc | ohpauleez: Ignore the semantics of counting seqs for a minute -- shouldn't it be easy to create something that adds an interface? |
| 11:15 | ohpauleez | TimMc: yes |
| 11:15 | TimMc | I guess what we're talking about here is concrete inheritance. |
| 11:19 | TimMc | Protocols wouldn't make sense here, since we're really talking about creating a new class, distinct from LazySeq. |
| 11:30 | noidi | is there a better way to concatenate a bunch of vectors together than (reduce into my-vecs) ? |
| 11:32 | dpick | cemerick: got a sec for a friend question? I'm trying to log a user in when they regsiter but I can't get the auth info into the session |
| 11:32 | ohpauleez | noidi: you could do something like: (into [] (concat [1 2 3 4 5][1 2 3 4 5])) |
| 11:33 | llasram | noidi: Depends on context. If you don't need the result to be a vector, just (apply concat my-vecs) will return a lazy sequence of the vector contents |
| 11:33 | ohpauleez | that's better |
| 11:33 | ohpauleez | if you don't need a vector coming out |
| 11:34 | noidi | yeah, that's what I thought |
| 11:34 | ohpauleez | (into (first my-vecs) (apply concat (rest my-vecs))) is also an option |
| 11:34 | berdario | Hello, when I first looked at clojure, I thought that it had TCO... when I got to know about the lack of TCO, I assumed that all processing on lists too big to recurse through the stack was done with map and reduces... but now I realized that what people actually use is (recur) |
| 11:35 | noidi | I was actually just asked this question, and wondered if my answer was correct :) ("use concat if you don't need a vec result, otherwise use reduce into") |
| 11:35 | berdario | My doubt is: I'm seeing recur used also for looping over a list of files in directories... is this normal and idiomatic clojure code? |
| 11:35 | noidi | berdario, probably not |
| 11:35 | n_b | I'm currently in the process of wrapping Twilio's Java API library as a first 'Ship something in Cloure' project and having some trouble determining the best way of doing it idiomatically; could someone point me in the direction of another Clojure wrapper around a REST API? |
| 11:35 | n_b | Or do you think I might be better off just building it up from scratch? |
| 11:36 | noidi | berdario, http://blog.fogus.me/2011/03/09/recursion-is-a-low-level-operation/ |
| 11:36 | ohpauleez | berdario: Sometimes you use explicit recur for performance (in certain applications) |
| 11:36 | ohpauleez | but usually its avoided |
| 11:36 | berdario | I mean: most directories have a small fan out... and without (recur) I should be able to handle easily more than a thousand |
| 11:36 | berdario | oh, thanks |
| 11:37 | noidi | if you just want to iterate over a list of files/directories/whatever, use map, for, or doseq |
| 11:37 | ohpauleez | n_b: Look at the github wrapper |
| 11:37 | ohpauleez | I think the project is called clj-github |
| 11:38 | n_b | ohpauleez: Will do, cheers :) (and that is the name) |
| 11:38 | ohpauleez | n_b: you might also find some more examples at: https://github.com/dakrone/clj-http |
| 11:40 | seangrove | Hrm, noir has stopped serving static files altogether |
| 11:40 | seangrove | This is what I get for restarting my computer... |
| 11:41 | n_b | ah, the joy of debugging "W[ed]fm" |
| 11:43 | berdario | noidi: for the sake of completeness... I want to split an existing function that uses recur (not written by me) in two, and I was wondering if it was a bad idea to rewrite it without recur (it probably is: since I guess that the original author did it that way for performance reasons... even if it seems strange to me) |
| 11:44 | seangrove | If I have a file `resources/public/js/lib/md5.js` in the root of my project, then `lein run` should serve it up at http://localhost:8080/js/lib/md5.js, right? |
| 11:44 | seangrove | Assuming lein run kicks off noir on port 8080 |
| 11:45 | noidi | berdario, if he did it for performance reasons, he should've documented the fact :) |
| 11:46 | TimMc | I'd like to write a small email autoresponder -- can anyone point me to some valuable Clojure libraries for that task? |
| 11:47 | TimMc | That is, what libraries would I be really sad about discovering *after* the fact? |
| 11:47 | clgv | berdario: he must likely did it to avoid stack consumption |
| 11:49 | berdario | clgv: assuming that performance doesn't matter in this case, and that the input size is too small to cause a StackOverflowError... what's the reason for avoiding stack consumption? |
| 11:49 | clgv | berdario: the StackOverflow is ;) |
| 11:49 | clgv | wanted to write "most" instead of "must" |
| 11:52 | noidi | doseq doesn't consume stack either |
| 11:52 | llasram | berdario: Can you show the original function under discussion? |
| 11:52 | noidi | nor will map or for |
| 11:52 | clgv | noidi: how do you want to implement a recursive function via doseq? |
| 11:53 | noidi | clgv, it's already tail recursive, so one of clojure's iteration operations might be a better fit |
| 11:54 | noidi | [18:28] < berdario> My doubt is: I'm seeing recur used also for looping over a list of files in directories... is this normal and idiomatic clojure code? |
| 11:54 | noidi | that's why I mentioned doseq/map/for |
| 11:54 | clgv | doseq would only work if he doesnt accumulate something |
| 11:54 | TimMc | If there are multiple state bindings, recur also avoids some allocation. |
| 11:54 | noidi | clgv, then there's reduce :) |
| 11:55 | TimMc | whereas iterate would incur destructuring costs |
| 11:55 | llasram | Since berdario did mention it being used for files & directories, explicit recursion might be being used to implement breadth-first traversal |
| 11:55 | TimMc | (and allocation costs, of course) |
| 11:55 | clgv | noidi: but not doseq (that was all I said above) ;) |
| 11:55 | noidi | this whole discussion is kind of pointless without seeing the function in question :) |
| 11:56 | noidi | but plain recur is very often too low-level a tool, and used only because the author wasn't familiar with the higher-level operations that clojure provides |
| 11:59 | alexnixon | TimMc: I've used com.draines/postal for sending emails, though AFAIK it doesn't support receiving them |
| 12:02 | stoneg | how can I launch clojure.main -r in a specific namespace? |
| 12:03 | seangrove | I'm baffled - why would noir say 404 for all static assets? |
| 12:04 | n_b | ohpauleez: This is exactly the sort of thing I was looking for, thank you :) |
| 12:05 | ohpauleez | n_b: totally welcome! |
| 12:06 | stoneg | like this, launch clojure repl using `java -Xmx1G -cp $CLASSPATH clojure.main -i src/my_repl/repl.clj -r` http://pastie.org/5521120, so I after launching clojure repl , it's already swithced to my-repl.repl, and the var defined is already available |
| 12:07 | dudleyf | What happened to clojure.blip.tv? |
| 12:07 | seangrove | dudleyf: Not sure, but there was mention of it on the ml |
| 12:07 | hiredman | https://twitter.com/richhickey/status/279265816153833473 |
| 12:07 | seangrove | The videos are available in the iTunes podcast apparently |
| 12:09 | stoneg | any suggestions about switching namespace in the repl pragmatically ? |
| 12:24 | ohpauleez | dakrone: wrt lein-bikeshed : would you be open to a patch to allow no more than one blank line at the end of a file |
| 12:24 | bordatoue | please can anyone provide hint on how to iterate through an map as in Hashmap with delay (lazy) |
| 12:25 | trptcolin | ohpauleez: i disagree. multiple blank lines at the end are an important expression of my individuality |
| 12:25 | ohpauleez | according to Unix Programming standards (which I still tend to follow) all files are supposed to have one blank line at the tail of the file |
| 12:25 | trptcolin | bikeshed, bikeshed, bikeshed |
| 12:25 | trptcolin | ;) |
| 12:25 | ohpauleez | :) |
| 12:25 | technomancy | yeah actually cron files will exhibit horribly broken behaviour if you omit the trailing newline |
| 12:26 | trptcolin | ! |
| 12:26 | technomancy | crontabs I mean |
| 12:26 | technomancy | trptcolin: the last line will be silently ignored |
| 12:26 | ohpauleez | right |
| 12:26 | trptcolin | that is insane |
| 12:26 | nDuff | ...you don't need a blank line |
| 12:26 | nDuff | you _do_ need a \n character on the last line |
| 12:26 | technomancy | trptcolin: it really is |
| 12:27 | nDuff | bash "while read" loops won't work if your last line isn't terminated by a \n either, as read returns nonzero in that case. |
| 12:27 | joegallo | dakrone: do not accept multiple blanks lines at the end of a file. one and only one is the magic. |
| 12:30 | jml | Does anyone know if rhickey's talk "Language of the System" that he gave at Techmesh last Tuesday is available online? |
| 12:31 | jml | I've found the ClojureX version, but I suspect that the techmesh one will be more informative for my non-Clojurian colleagues. |
| 12:31 | seangrove | jml: I believe the one from skillsmatter is online at least |
| 12:32 | jml | seangrove: yeah, have got that one, thanks. (also, was at the event, which was a lot of fun) |
| 12:33 | stoneg | how to launch clojure repl using `java -Xmx1G -cp $CLASSPATH clojure.main -i src/my_repl/repl.clj -r` http://pastie.org/5521120, so I after launching clojure repl , it's already swithced to my-repl.repl, and the var defined is already available ? |
| 12:35 | seangrove | stoneg: Not sure, wei_ in here has his projects setup like this though |
| 12:51 | ppppaul | hey guys. i'm new to datomic. is there an easy way for me to connect to the dataomic repl from emacs swank? |
| 12:51 | ppppaul | or, is the datomic reply just the clojure repl with nothing added? |
| 12:51 | ppppaul | reply->repl |
| 12:52 | hiredman | ppppaul: you can look at the shell script |
| 12:52 | hiredman | I am pretty sure it is just the clojure repl with the datomic client on the classpath |
| 12:53 | ppppaul | the shell script is quite minimal |
| 12:54 | ppppaul | if i put the free transactor pom and datomic pom in my deps should i need any other setup to run the sample scripts? |
| 13:01 | technomancy | I guess probably not on freenode, given the topic |
| 13:01 | trptcolin | zing! |
| 13:02 | ppppaul | anyone using lein-datomic? |
| 13:02 | ppppaul | the github page says that i need to edit my ~/.lein/profile file, but there isn't really anything in my .lein folder cept a jar |
| 13:03 | ohpauleez | ppppaul: You write your own profile file |
| 13:03 | ohpauleez | it's like your own global lein conf |
| 13:05 | ppppaul | oh |
| 13:05 | ppppaul | somehow doing that didn't cross my mind |
| 13:05 | ppppaul | i thought that i may be looking in the wrong folder |
| 13:07 | scottj | ppppaul: there is #datomic btw, though last I checked it was pretty quiet |
| 13:11 | ppppaul | ok |
| 13:12 | devn | lein-datomic is nice |
| 13:13 | devn | i wish they'd figure out a better packaging situation for datomic |
| 13:14 | devn | i tried to write a homebrew formula for it and bin/ is a PITA -- lots of paths need to be rewritten for it to be installed in /usr/local/bin/{binaries} and know where its deps are |
| 13:16 | technomancy | homebrew takes recipes for proprietary programs? |
| 13:17 | epitron | technomancy: witch's brew |
| 13:18 | ppppaul | there is brew for neo4j |
| 13:18 | ppppaul | it's not OSS |
| 13:20 | trptcolin | ? https://github.com/neo4j/neo4j |
| 13:20 | epitron | "Our community edition (in the community/ directory) is GPL. Our advanced and enterprise editions (advanced/ and enterprise/, you get the drill) are Affero GPL and so have different licensing implications." |
| 13:21 | epitron | i guess technomancy is all about the enterprise |
| 13:22 | epitron | actually, there's nothing proprietary about any of this :) |
| 13:22 | epitron | what're you talking about ppppaul |
| 13:42 | ppppaul | i'm talking out of my ass |
| 13:42 | ppppaul | neo4j has some weird licence |
| 13:43 | technomancy | dual-licensing isn't that uncommon |
| 13:49 | ppppaul | how do i re initialize the clojure.core namespace? |
| 13:52 | ppppaul | it seems like i overwrote the filter function |
| 13:53 | ppppaul | when i try (ns 'clojure.core) i get a warning and it doesn't overwrite it again |
| 13:53 | rbxbx | (require 'clojure.core) ? |
| 13:54 | ppppaul | require doesn't overwrite my filter, but it didn't throw an error either |
| 13:54 | ppppaul | (use) is throwing an error |
| 13:54 | llasram | ppppaul: You overwrote clojure.core/filter itself, or the reference to clojure.core/filter in your namespace? |
| 13:55 | ppppaul | i overwrote it in my namespace |
| 13:55 | ppppaul | err, the ref changed in my namespace |
| 13:55 | ppppaul | i want to change it back to the core filter |
| 13:55 | ppppaul | WARNING: filter already refers to: #'clojure.core/filter in namespace: user, being replaced by: #'datomic.api/filter |
| 13:55 | llasram | ppppaul: (do (ns-unmap *ns* 'filter) (require '[clojure.core :refer [filter]])) |
| 13:56 | ppppaul | oh wow, that's a bit of work |
| 13:56 | ppppaul | thanks |
| 13:57 | ppppaul | it works! |
| 14:06 | n_b | I need to store some authentication credentials that might be changed during runtime - should I be using an atom or use a def and mark it as dynamic then use a macro with a binding? |
| 14:07 | nDuff | n_b: Could they be set differently between threads? |
| 14:07 | nDuff | n_b: ...or will it always be global? |
| 14:07 | n_b | I can conceivably see it being different between threads |
| 14:07 | nDuff | Then you want a dynamic var. |
| 14:08 | n_b | and then use binding? |
| 14:18 | rbxbx | Raynes: are there any reading materials around lib-noir? I'm guessing the noir docs themselves are it? |
| 14:18 | rbxbx | ... and the source code, of course ;) |
| 14:30 | germanguy | hello can somebody help me |
| 14:30 | germanguy | lein uberjar gives the following error: lein-javac: system java compiler not found; a JDK (vs. JRE) install is required. |
| 14:30 | germanguy | I am using windows7 and in path i have my JDK7 |
| 14:37 | n_b | is lein using the proper path settings? |
| 14:46 | sshack | Okay, are there any clojure web frameworks that aren't "Here's some wood and a saw. Hope you like your bookshelf"? |
| 14:46 | sshack | I'd like to focus on my app, not the infrastructure. |
| 14:47 | ibdknox | Can anyone think of a way to make an unrealized copy of a LazySeq? |
| 14:47 | brehaut | sshack: go use rails or django and make your app a service that the webapp talks to |
| 14:48 | ibdknox | I tried to do this via reflection pulling the .fn field out and creating a new LazySeq with it, but locals clearing screws me over :( |
| 14:48 | sshack | brehaut: It's slightly tempting. But I'd rather not touch rails with a 10 foot pole. I just don't like having to do things like user authentication for myself. |
| 14:49 | ohpauleez | ibdknox: can you short-circuit that in a closure? |
| 14:49 | amalloy | ibdknox: an unrealized copy of a lazy seq? what does that mean? |
| 14:49 | brehaut | sshack: i think you are in a cake and eat it situation |
| 14:49 | ohpauleez | I assume you have some sort of generator, that will realize data via computation (a function) and you want to copy that, but I'm not sure why |
| 14:49 | ibdknox | amalloy: I want to capture the values of a lazyseq without realizing the original - I'm trying to store intermediate states of execution |
| 14:50 | ibdknox | I don't want to realize the original so I can be intelligent about whether or not to show the whole thing (because it was actually realized by the user's code) |
| 14:51 | ibdknox | ohpauleez: I don't think I can do the closure thing because the problem is that the function is marked with ^:once |
| 14:51 | ibdknox | by the lazy-seq macro |
| 14:51 | ohpauleez | ibdknox: why not just realize a limit of what you're willing to show |
| 14:52 | ohpauleez | it's just going to cache anyway |
| 14:52 | amalloy | ibdknox: you can probably make a copy of the function (not just the pointer to it) |
| 14:52 | ibdknox | amalloy: oh? How would I do that? |
| 14:52 | amalloy | well, i was thinking (with-meta f {}). but i guess these days that doesn't make another function |
| 14:53 | brehaut | sshack: there is https://github.com/macourtney/Conjure but i think you'll find its rails all over again "Conjure is a Rails like framework for the Clojure programming language". If sandbar, friend and libnoir doesnt add what you need, i think you are out of luck |
| 14:53 | ibdknox | amalloy: yeah no luck, I tried that one |
| 14:54 | technomancy | sshack: finding just the right abstraction for user management is really hard. there have been attempts that do things for you but are not the right abstraction, but we're still waiting for the Right Thing |
| 14:54 | ibdknox | ohpauleez: I could, but the user experience is kind of crappy there. For example, in an unrealized seq I only really want to show a couple values and that it continues on for some unknown number. If I changed that to "I'll let you do 250" now the code will be unreadable because these huge pr-str'd seqs are everywhere |
| 14:55 | brehaut | sshack: i'd also be worth noting that conjure builds on clj-record and even the author of that doesnt like it http://elhumidor.blogspot.co.nz/2012/11/why-not-to-use-my-library-clj-record.html |
| 14:55 | technomancy | amalloy: it creates another function, surely? just one that delegates to the original? |
| 14:55 | ohpauleez | ibdknox: ahh |
| 14:57 | technomancy | part of what makes clojure unique is that people (in general) are willing to wait for the right abstraction rather than jumping on board with the wrong abstraction that happens to make life easier in the short term |
| 14:59 | nDuff | n_b: binding if you want to set the value only for the local thread and agents/&c. started from it, change-root-binding (or whatever exactly it is) if you want to set a new default that isn't thread-local. |
| 15:01 | x89 | I bet some of you guys also know erlang, so: is there something like ->> in erlang? |
| 15:02 | devinus | can anybody give me a list of the most useful/coolest lein plugins? |
| 15:02 | devinus | x89: tell me what ->> does in clojure and i'll tell you if it exists in erlan |
| 15:02 | devinus | erlang |
| 15:03 | technomancy | devinus: there's a listing of plugins on the wiki, though not sorted by coolnes |
| 15:03 | devinus | technomancy: i know, that's what i'm looking for tho :P |
| 15:03 | devinus | sorted by hawtness |
| 15:04 | sshack | brehaut: I shall look at conjure. I'm fine with working with different libraries. But when very basic bits are missing, it's a turnoff. |
| 15:04 | devinus | lein-ring for example is super useful, but lein-marginalia is cool |
| 15:04 | brehaut | sshack: my preference (and i think its not uncommon here) is that missing is better than broken |
| 15:04 | sshack | and yes I realize there's no "right thing yet. It's acceptable to say "This is designed for one purpose only". After all we have flatbed trucks and convertibles. |
| 15:04 | technomancy | devinus: my list: lein-pprint, lein-difftest, lein-guzheng |
| 15:05 | brehaut | sshack: but its your own neck |
| 15:05 | sshack | Broken and specific to a particular problem/domain are different. |
| 15:05 | x89 | devinus: (reduce + (filter #(rem % 3) (range 10))) -> (->> (range 10) (filter #(rem % 3)) (reduce +)) |
| 15:06 | devinus | x89: i'm on page like 150 of Joy of Clojure, so i'm unsure what -> does either |
| 15:06 | x89 | devinus: I meant -> as a "meta" characther |
| 15:07 | x89 | I'l try again |
| 15:07 | x89 | devinus: (reduce + (filter irc://chat.freenode.org:6667/#(rem % 3) (range 10))) |
| 15:07 | x89 | is the same as |
| 15:07 | devinus | oh i see |
| 15:07 | x89 | (->> (range 10) (filter irc://chat.freenode.org:6667/#(rem % 3)) (reduce +)) |
| 15:07 | devinus | so |
| 15:07 | x89 | whoops |
| 15:07 | x89 | how did that get there |
| 15:07 | devinus | so basically it lets you compose in reverse? |
| 15:08 | x89 | something like that |
| 15:08 | x89 | it is a macro, so maybe erlang does not have something like that at all |
| 15:08 | devinus | nothing like that in erlang i'm afriad |
| 15:08 | devinus | however |
| 15:08 | devinus | in Elixir there is (an OTP language) |
| 15:08 | devinus | foo /> bar /> baz #=> baz(bar(foo())) |
| 15:09 | x89 | So I guess I'll have to define functions instead |
| 15:11 | solussd | I'm sure this comes up now and again… I'd like to enforce type on record fields. With a function I'd use :pre conditions, but I cannot add those to the default constructor (->RecordType). I could use robert hooke, but then I have to write a functions with (almost) identical :pre conditions for the positional constructor and the create factory, which takes a map. Thoughts? |
| 15:21 | sshack | brehaut: You're right about conjure. |
| 15:22 | amalloy | solussd: as you can imagine, the clojurey solution is to not enforce type :P |
| 15:28 | TimMc | meh |
| 15:30 | solussd | amalloy: yeah, but I'm trying to save myself explicit type checks before I cram stuff into my (mongo) db |
| 15:40 | vsync | i enjoy clojure a lot but i do have to say i prefer CL's type system and generic functions |
| 15:41 | vsync | though the broken-out dispatch-fn is cool |
| 15:42 | vsync | but proper named types through and through would be helpful sometimes |
| 15:43 | vsync | particularly in clojurescript so i could get a more useful error than "no method for function <30 lines of useless javascript> defined on <30 more lines of useless javascript>" |
| 15:45 | vsync | solussd: neat |
| 15:45 | vsync | though it seems a bit imperative |
| 15:47 | vsync | i feel the cleaner thing to do is avoid explicit use of the underlying records sprinkled everywhere |
| 15:47 | Netfeed | how can i create a macro that creates a function with named arguments? it throws exception if i dont use gensym, but the named arguments doesn't have the correct names with gensym |
| 15:48 | vsync | e.g., make your own constructor that does what you need, only export that and not the generated record constructor symbols |
| 15:48 | brehaut | vsync: thats generally considered to be best practise i think |
| 15:49 | vsync | i have a bunch of make-this and make-that in my code, seems to reduce duplicated code and let me do types and preprocessing in a defined way |
| 15:49 | vsync | brehaut: yay :) |
| 15:50 | brehaut | vsync: although the ->recordname constructor is also fine if you dont need any special behaviour |
| 15:50 | sshack | cemerick's friend seems exactly what I want. |
| 15:51 | sshack | So the real missing key is a decent central place where all this stuff is well explained. But awesome. |
| 15:52 | brehaut | sshack: for better and worse the clojure community isnt into centralised |
| 15:53 | sshack | brehaut: At least a good how to type page on which bits exist and how they fit together would be useful. |
| 15:53 | sshack | (or, how they don't in some cases) |
| 15:53 | brehaut | sshack: one of the clojure docs sites is intending to cover that |
| 15:54 | sshack | Fantastic. |
| 15:54 | sshack | I didn't touch it. |
| 15:54 | brehaut | sshack: unfortunately its extremely skeletal ATM http://clojure-doc.org/articles/ecosystem/web_development.html |
| 15:55 | vsync | brehaut: yeah to me the default constructors and keyword accessors are just handy shortcuts, speeds the start process or if it really is just a boring simple data structure you're passing around |
| 15:56 | vsync | lets ya focus work on the parts that need work, after all given enough time it'd be easy to write everything all perfectly, but there's never enough :P |
| 15:56 | edward_123 | Hi does anyone know how the relative directory work for clojure with lein2? |
| 15:57 | sshack | brehaut: Oh boy is that bare. |
| 15:57 | Netfeed | solved it with {:keys [] :as hsh} |
| 15:58 | brehaut | sshack: with Ring, the github docs / wiki is pretty decent |
| 15:58 | Netfeed | hsh# |
| 15:58 | sshack | I am looking. |
| 15:58 | brehaut | sshack: the danger with 'how-to's is that they get out of date really quick |
| 15:58 | sshack | composure sits on top of ring, no? |
| 15:58 | brehaut | sshack: correct |
| 15:58 | sshack | brehaut: Well, a how to is a product, just like code. |
| 15:59 | brehaut | sshack: http://brehaut.net/blog/2011/ring_introduction if you havent seen it |
| 16:00 | solussd | does disabling assertions "turn off" pre and post conditions? |
| 16:00 | TimMc | Only at compile time, I think. |
| 16:00 | sshack | That wasn't naivety some of the documentation I've read is inconsistent on that. |
| 16:01 | solussd | thanks |
| 16:01 | brehaut | sshack: compojure < 0.4 was written prior to the existence of ring |
| 16:02 | sshack | Yeah. I remember looking at it back then. Wasn't doing web stuff at the time. |
| 16:02 | solussd | can assertions be disabled with leiningen? |
| 16:15 | muhoo | i vaguely remember there being a way to obtain lein profile information from inside the project, but i don't remember how, and not sure if it'd work with trampoline anyway. |
| 16:19 | muhoo | or did i misunderstand that? |
| 16:19 | solussd | interesting, fn can take pre/post conditions, but the documentation fails to mention it |
| 16:23 | ChongLi | ahhh, why would blip.tv do that? |
| 16:24 | brehaut | because they are bananas |
| 16:24 | ChongLi | anyway we could transfer the videos to youtube? |
| 16:24 | ChongLi | there ought to be an official clojure channel on youtube |
| 16:26 | seangrove | Yeah, Youtube is a nicer experience anyway, strangely enough |
| 16:26 | ChongLi | hah |
| 16:26 | muhoo | i like that i can download youtube videos. infoq, not so much. |
| 16:27 | muhoo | blip required some packet-sniffing hacking, IIRC, but i got it to work. |
| 16:51 | sshack | muhoo: That frustrates me so much about info. Their video player is very annoying. and has a teeny weenie ui. |
| 16:53 | ifesdjeen | hi guys, |
| 16:53 | ifesdjeen | can anyone give a hint on how to use defn within a macro?.. |
| 16:53 | ifesdjeen | e.q. without getting "First argument should be a symbol" error |
| 16:53 | ifesdjeen | as far as i understand, i should use eval?.. |
| 17:01 | gfredericks | you're writing a macro that expands to a defn? |
| 17:01 | gfredericks | e.g., (defmacro defn-let [name args lettings & body] `(defn ~name ~args (let ~lettings ~@body))) |
| 17:01 | gfredericks | ^ a macro that expands to a defn |
| 17:07 | technomancy | muhoo: you need a plugin like configleaf for that |
| 17:08 | ifesdjeen | gfredericks: yup, I understand that |
| 17:08 | ifesdjeen | problem that if I have let binding, and named argument, that approach won't work |
| 17:09 | gfredericks | you have a symbol at runtime instead of compile time? |
| 17:09 | ifesdjeen | e.q. (defmacro defn-let [& body] `(let [coll# ~@body] (doseq (defn .... |
| 17:09 | ifesdjeen | exactly |
| 17:09 | gfredericks | ah yeah if you want to do the defn at runtime you'll need eval |
| 17:09 | amalloy | (doseq [...] (defn ...)) will never do what you want |
| 17:09 | ifesdjeen | so far I've managed to do it via (intern *ns*), which worked |
| 17:11 | ifesdjeen | amalloy: actually it did. not exactly that way, but it did. |
| 17:11 | ifesdjeen | gfredericks: thanks! |
| 17:29 | muhoo | technomancy: thanks |
| 17:37 | bbloom | tpope: nice, good to see the collaboration on the static files |
| 17:41 | zackzackzack | I'm considering how to efficiently manipulate time series data with finger trees. I think I know what to do but I'm not really sure as finger trees are a fairly new topic to me. I'd like to bounce my idea off of somebody who knows what they are doing and see if it makes sense. |
| 17:52 | squidz | what's the best way to call git from clojure when it is only for simple tasks on a linux env? |
| 17:52 | brehaut | conch? |
| 17:54 | squidz | brehaut: thanks, ive never used it, but it seems to be what i need. It isn't overkill if all i want to do is git push/pull/merge |
| 17:54 | brehaut | i dunno. ive never used it. ask Raynes |
| 17:55 | brehaut | its certainly less overkill than a java git (egit?) imp |
| 17:55 | squidz | ill give it try, thanks |
| 17:55 | Raynes | brehaut: Why would he ask me? |
| 17:55 | Raynes | Oh. |
| 17:56 | Raynes | Cause conch? |
| 17:56 | brehaut | Raynes: cause you know about conch |
| 17:56 | brehaut | i hope |
| 17:56 | Raynes | I was on LSD when I wrote that. |
| 17:56 | Raynes | Can't remember anything. |
| 17:56 | Raynes | Yeah, conch should be good for calling git. |
| 17:56 | Raynes | clojure.java.sh would probably be fine as well, depending on what you want to do with the output. |
| 17:57 | squidz | yeah it just looked over the github page, it looks to be perfect |
| 17:57 | squidz | nice work Raynes |
| 17:58 | squidz | i think a simple with-programs git should do the trick |
| 18:00 | sshack | Okay, question for the clojure world. What's the general opinion of app servers in clojureland (in particular jboss)? |
| 18:01 | Raynes | $google immutant |
| 18:01 | lazybot | [Immutant | Home] http://immutant.org/ |
| 18:01 | sshack | or are there very clojurish ways to manage/apps. |
| 18:01 | sshack | Raynes: I actually installed immutant just recently. |
| 18:01 | Raynes | I do not know anything about it except that it exists and is active. |
| 18:01 | sshack | I was asking opinions on it. Are they so incompatible with the clojure approach that it'll give me trouble? |
| 18:01 | Raynes | I don't understand application servers. |
| 18:01 | brehaut | sshack: IMO use whatever you are comfortable setting up, and what your existing ecosystem is based around |
| 18:02 | sshack | Raynes: 5 second tutorial: They provide things that modern operating systems should have. |
| 18:02 | brehaut | sshack: the ring adapters (servlet adapter in particular) make it completely fine as far as i understand |
| 18:02 | sshack | brehaut: I have no existing ecosystem for this. It's entirely greenfield here. |
| 18:02 | Raynes | Immutant looked interesting during the talk about it at the conj. |
| 18:02 | Raynes | If you dig immutant, shouldn't be anything wrong with using it. |
| 18:02 | brehaut | sshack: do you have experience with container based deployment? |
| 18:02 | sshack | Which is why I ask, there's often hidden land mines you don't discover until a little ways in. |
| 18:02 | Raynes | I wont hurt you or anything. |
| 18:03 | Raynes | Much. |
| 18:03 | Raynes | >:) |
| 18:03 | sshack | brehaut: No. I've never done web development before. Previously I was doing high speed finance, realtime stuff and embedded work. |
| 18:04 | brehaut | sshack: then pick whatever makes the most sense to you :) |
| 18:04 | brehaut | sshack: ring is server / container agnostic |
| 18:04 | sshack | Cool. |
| 18:05 | sshack | I asia lot of questions just to gain an understanding of the space. |
| 18:05 | llasram | As long as europen to the answers |
| 18:06 | brehaut | sshack: spend some time learning about ring then. its worth your time |
| 18:06 | sshack | brehaut: I'm getting that sense. |
| 18:06 | sshack | friend seems to take care of my authentication/user management problems btw. |
| 18:07 | brehaut | i thought it probably would |
| 18:09 | jcrossley3 | sshack: if you're just starting with web dev, and you only have one app, and you don't need anything other than web, e.g. messaging, then immutant is overkill. in other words, if you're not sure you need it, you probably don't. :) |
| 18:10 | sshack | jcrossley3: I'm trying to discover why I need/don't need things. |
| 18:10 | sshack | I've built large apps before. Just never touched web. |
| 18:12 | brehaut | sshack: 'webapp' is really just 'app' that happens to have a server and talks http. you can serve http from just about anything |
| 18:12 | brehaut | so that just leaves 'app' |
| 18:13 | sshack | brehaut: Well, it's a bit different than that. The focus can be very different in some spaces. |
| 18:14 | brehaut | sshack: so just consider the requirements of your app aside from worrying about 'web' |
| 18:14 | crease | Hey folks, anyone know of existing clojure libraries for static analysis, such as might be used to assemble a call hierarchy ala Eclipse? |
| 18:14 | sshack | Which is why I was asking about application servers. In an ideal world they handle logging, messaging, management for me. |
| 18:15 | brehaut | sshack: serving the web stuff is orthoganl to the rest of your app though. |
| 18:16 | weavejester | A lot of Clojure libraries tend to be small and focus on solving a single problem, though there are some exceptions |
| 18:17 | brehaut | weavejester: the never ending stream of new clojurists 'solving' the lack of rails 'problem' for instance :( |
| 18:17 | jcrossley3 | sshack: that's all true, but you probably don't *need* any of that stuff yet. i would focus on building a useful clojure app. just use jetty at first. keep using it until it starts to hurt (usually due to deployment of it and other apps it depends on). and it may never hurt. |
| 18:17 | sshack | brehaut: Correct. But you're pushing a view that everything is interchangeable bits. That's only true at the high level.EG: When I shipped code for the marines, we spent about 90% of our time it would work out in the desert where it would cost lives for any maintenance. |
| 18:18 | weavejester | Well, there are some things in Rails that are nice... |
| 18:18 | sshack | performance wasn't an issue, maintenance was. Move to finance, performance matters, but you can do regular maintenance/bugfixes. The whole environment changes. |
| 18:18 | brehaut | sshack: yes. the web part of your application probably should be interchangable. anything else would be like welding tires on to the chassy of a car |
| 18:19 | sshack | Anyways, I presume people with some experience shipping web stuff might have some insight. Thats all. |
| 18:19 | weavejester | Some sort of scaffold generator might be nice for getting people going, for instance. |
| 18:20 | brehaut | sshack: most people use the tools they are familiar with. its about as simple as that. |
| 18:20 | technomancy | jcrossley3: always refreshing to see project maintainers being honest about when not to use their project; nice =) |
| 18:20 | brehaut | technomancy: when should i not use lein ;) |
| 18:20 | jcrossley3 | technomancy: :) |
| 18:20 | technomancy | brehaut: you probably shouldn't use https://github.com/technomancy/lein-scalac |
| 18:21 | sshack | brehaut: Absolutely. Which is why I'm here. I've reached the limits of what Application/systems programming you can do in mathematica. |
| 18:21 | brehaut | technomancy: lol :) |
| 18:21 | brehaut | technomancy: may i suggest never using necessary-evil? |
| 18:21 | technomancy | brehaut: ask me about my emacs libs and I'll have a lot more I can say that of =) |
| 18:21 | jamii | I can't figure out why calling seq on this https://gist.github.com/4281009 causes AbstractMethodError |
| 18:21 | brehaut | sshack: my opinion then is start as simple as possible. just use jetty. either as a container or self hosted |
| 18:22 | brehaut | sshack: you'll know when you need to reconsider it |
| 18:22 | jamii | A parallel core.logic goes to anyone who can fix it :D |
| 18:22 | sshack | brehaut: I follow you. and I intend to. |
| 18:23 | squidz | brehaut: I also thought about having a rails-like scaffolding generator |
| 18:24 | technomancy | `lein new` can emit skeleton files |
| 18:24 | squidz | maybe having a simple generator |
| 18:24 | sshack | squidz: Ugh. That's a horrible idea. The key point of rails was a well documented path of least resistance for the most common cases. |
| 18:24 | squidz | that can plugin to lein as well |
| 18:24 | muhoo | is there some way to stick a conditional inside a doto? |
| 18:24 | jamii | dnolen: bump ^^^ |
| 18:24 | squidz | sshack: dont't get my wrong, I hate rails to be hones, It's just that it as an option would attract possible users that like that kin dof thing |
| 18:25 | muhoo | like (doto (Whatevs.) (.stuffToDo arg) (when (some-test) (.thisThing "foo")) ? |
| 18:26 | squidz | sshack: if it could be designed in a way to be completely orthoganal to the current web frameworks |
| 18:27 | technomancy | muhoo: I don't think so |
| 18:27 | squidz | sshack: it would make me happy to steal some rails guys |
| 18:27 | Raynes | Dear everyone: http://blog.raynes.me/blog/2012/12/13/moving-away-from-noir/ |
| 18:28 | muhoo | Raynes: thank you for writing this. |
| 18:28 | Raynes | You're welcome, sir. |
| 18:29 | squidz | Raynes: thanks, do you mind if i post to reddit? |
| 18:29 | Raynes | squidz: Have at it |
| 18:30 | amalloy | Raynes: your blog post about lisp has unbalanced parens, mate |
| 18:30 | Raynes | amalloy: Whar? |
| 18:30 | amalloy | (in the section about Friend, to be specific |
| 18:30 | Raynes | Fixing. |
| 18:30 | technomancy | Raynes: I wonder if it'd be instructive to link to the refheap diff for moving to compojure? |
| 18:30 | sshack | squidz: I think I understand what you mean. Steal the intent of rails, rather than the form. |
| 18:31 | Raynes | technomancy: Potentally. I'll hunt down the diff and link to it. |
| 18:33 | brehaut | Raynes: now for the biggest job: updating webnoir.org |
| 18:33 | Raynes | And the Noir README. |
| 18:34 | amalloy | just replace webnoir.org with http://www.textfiles.com/underconstruction/ |
| 18:34 | brehaut | lol |
| 18:35 | ibdknox | amalloy: lol that's amazing. |
| 18:35 | sshack | Raynes: Well that makes things simpler for me. |
| 18:35 | Raynes | Haha |
| 18:35 | Raynes | Indeed it does. |
| 18:35 | amalloy | ibdknox: iirc it's every geocities gif that had "construct" in the url or alt-text |
| 18:35 | ibdknox | haha |
| 18:35 | technomancy | Raynes: are you writing blog posts with paredit turned off again? |
| 18:36 | brehaut | textfiles is truely amazing |
| 18:36 | Raynes | ibdknox: It kind of just occurred to me that I should have probably let you read my blog post before publishing it. Is it okay? |
| 18:36 | Raynes | I think I noted that some of what I said was my own opinion, but I may have not been clear enough about that. |
| 18:37 | ivan | hah @ that link to http://www.textfiles.com/underconstruction/mail/ |
| 18:38 | ibdknox | Raynes: looks good to me |
| 18:38 | Raynes | Excellent. |
| 18:38 | mthvedt | ivan: you broke my firefox! |
| 18:38 | Raynes | Works in Chrome. |
| 18:38 | Raynes | Use good browsers, dude. |
| 18:38 | ivan | yeah, I thought about adding a warning but then remembered Chrome |
| 18:39 | amalloy | ivan: i bet Raynes will spend days downloading that page |
| 18:39 | ivan | my Firefox is still alive, downloading images |
| 18:39 | Raynes | I gave up about half way through after 30 seconds, amalloy. |
| 18:39 | sshack | Raynes: It doesn't show up in safari if you follow the link you posted. Went and navigated in from the front page and it was fine. |
| 18:39 | Raynes | squidz: Where did you put it on the reddits? |
| 18:40 | amalloy | my chrome appears to have given up part-way through, unless half of those gifs are broken |
| 18:40 | mthvedt | raynes: firefox is a great browser, it was protecting me from having to view that page |
| 18:40 | Raynes | sshack: http://blog.raynes.me/blog/2012/12/13/moving-away-from-noir/ <-- this one? works in safari for me |
| 18:40 | squidz | Raynes: r/Clojure |
| 18:41 | sshack | Raynes: Works now, didn't show up the first time I clicked |
| 18:42 | amalloy | sshack: sounds like your irc client does a bad job of parsing links |
| 18:43 | sshack | amalloy: Nope. Just clicked that link again and it works. It had an empty blog post the first time I clicked. |
| 18:44 | amalloy | ah. you might have caught Raynes in the middle of an update or something |
| 18:44 | Raynes | Yeah, I updated it like 20 times. |
| 18:44 | Raynes | I do that a lot because it isn't until I actually post blogs that people actually notice my typos. |
| 18:45 | sshack | Damn mutable data structures! |
| 18:46 | Raynes | Haha, precisely. |
| 18:49 | mindbender1 | how can I write #{"foo" "baz"} to a file |
| 18:49 | Raynes | http://news.ycombinator.com/item?id=4918720 |
| 18:50 | amalloy | mindbender1: pr-str+spit |
| 18:50 | Raynes | mindbender1: (spit "file" (pr-str #{"foo" "baz"})) |
| 18:50 | Raynes | amalloy: I win. |
| 18:50 | amalloy | Raynes: http://lazybot.org/logs/#clojure/2012-12-13 says i won by two seconds, mate. your details are your undoing |
| 18:50 | mindbender1 | wow thanks |
| 18:51 | Raynes | amalloy: Yeah, but I won with actual code. |
| 18:51 | Raynes | IT'S QUALITY, NOT SPEED. |
| 18:51 | amalloy | pr-str+spit is valid code: ##(let [pr-str+spit 1] pr-str+spit) |
| 18:51 | lazybot | ⇒ 1 |
| 18:52 | Raynes | You've won this one, nemesis. |
| 18:52 | amalloy | *chuckle* |
| 18:52 | callen | Raynes: has template inheritance and composition gotten any nicer with stencil? |
| 18:52 | Raynes | dsantiago: ^ |
| 18:52 | Raynes | Oh, wait. |
| 18:52 | Raynes | I think you're asking that because of the way I use it in refheap. |
| 18:53 | callen | yep. |
| 18:53 | Raynes | dsantiago: YOUR ASSISTANCE IS NOT NEEDED HERE. |
| 18:53 | dsantiago | k |
| 18:53 | Raynes | stencil has a perfect implementation of template inheritance. |
| 18:53 | callen | dsantiago: I'd like to hear feedback if it's there. I know you made a proposal to the mustache people. |
| 18:53 | callen | Raynes: is there an example in refheap or the stencil github repo? I tooled around and couldn't find anything just yet. |
| 18:53 | Raynes | callen: I think the way I did things in refheap is just for composibility in my code. |
| 18:54 | dsantiago | callen: Yeah, I basically consider mustache "finished" as a spec. Every few months some thread will start in the issues proposing some new feature, there'll be much discussion, and nothing will happen. |
| 18:54 | Raynes | composability* |
| 18:54 | Raynes | Whatever. |
| 18:54 | dsantiago | And since I consider mustache not really complete, I'm looking to other solutions. |
| 18:54 | callen | Raynes: I'm accustomed to Django/Jinja templates, the inheritance/blocks system is VERY simple and "scalable" with respect to complexity there. |
| 18:54 | callen | dsantiago: I have many ideas and a lot of experience with small and large projects wrt templating, if that helps at all. |
| 18:54 | jamii | dnolen: on four cores, core.logic is 20% slower. needs some more work :-| |
| 18:54 | Raynes | callen: Oh, wait, you aren't talking about partials, are you? |
| 18:55 | Raynes | I think I got confused. |
| 18:55 | dsantiago | What issues are you interested in, callen? |
| 18:55 | callen | primarily, my main issue is that using partials to do what I did with {% block blah %}{% endblock blah %} in Jinja is painful and the frontend people I work with can't really understand it or how it works. |
| 18:56 | callen | whereas the Jinja way is something they can do themselves without any help or explanation from me. |
| 18:56 | dsantiago | What does that Jinja do? |
| 18:56 | callen | dsantiago: I'm not trying to assign you homework, but you briefly take a look here: http://wsgiarea.pocoo.org/jinja/docs/inheritance.html |
| 18:56 | callen | I think you'll see what I mean |
| 18:56 | Raynes | I'm actually writing a templating lib, so I might move away from mustache in the future. Gotta eat my own dog food and what not. |
| 18:56 | callen | it lets you set place-holders in parent documents that children can fill in, or otherwise leave to the default. |
| 18:57 | callen | mustache does *not* handle this well at all, from what I know of it so far. |
| 18:57 | Raynes | I don't know though. I haven't had much success with enlive-like systems for general templating before. |
| 18:57 | callen | the problem is that I would *like* to use Stencil because how efficient and well-built it is, but mustache is painful for me and my frontend people. |
| 18:57 | callen | We can't really use enlive either. |
| 18:57 | callen | too intrusive. |
| 18:58 | dsantiago | Yeah, I agree with both there callen. |
| 18:58 | dsantiago | I actually wrote stencil not for use in a web context, but for pallet. |
| 18:58 | callen | I'm open to suggestions, but this the best candidate so far: https://github.com/sjl/dram |
| 18:58 | callen | it needs to be brought up to production grade like stencil though. |
| 18:58 | callen | his Readme.md summarizes my situation to a T |
| 18:59 | Raynes | sjl: Hear that? Your code isn't production grade. You ought to be ashamed of yourself. |
| 18:59 | dsantiago | Yeah, I agree with what he says there. |
| 18:59 | callen | :( |
| 18:59 | callen | Raynes: he says himself it's not ready :( |
| 18:59 | callen | Raynes: I love the library :( |
| 19:00 | mindbender1 | I meant to say how can I write the "contents" of #{"foo" "baz"} to file |
| 19:00 | Raynes | lol |
| 19:00 | callen | dsantiago: from that link I provided, do you see the appeal of the Jinja/Django way? |
| 19:00 | callen | dsantiago: very little logic, but just enough to be useful. Easy to work with, scales up to more complicated elaborations where you want to reuse template components, etc. |
| 19:02 | dsantiago | Yeah, I mean, I've never been on board with mustache's "no logic" stuff. It's the most logic-filled logic-free language I've ever seen. |
| 19:02 | callen | dsantiago: I see logic-less templates as being like abstinence programs. You just end up working around it in horrible ways anyway. |
| 19:03 | dsantiago | It depends on what the logic is. |
| 19:03 | callen | have some self-control and structure, but asceticism helps nobody. |
| 19:03 | callen | dsantiago: the two extremes to my mind are _.template and mustache. |
| 19:03 | callen | maybe Erb is up there with _.template, I don't know. |
| 19:03 | callen | in-between, to my mind, is Django/Jinja |
| 19:03 | ibdknox | More on Noir: https://groups.google.com/forum/#!msg/clj-noir/AbAvQuikjGk/x8lKLKoomM0J |
| 19:04 | callen | I realize it may alarm some people, but I think componentizing Noir's functionality into lib-noir makes sense to me. |
| 19:05 | ibdknox | that's why we did it :) |
| 19:05 | ibdknox | it's been that way for a while now |
| 19:05 | Raynes | ibdknox: I'm going to quote that in my blog post. |
| 19:08 | mindbender1 | seems there's not an easy way |
| 19:09 | technomancy | Raynes: have you thought of going further and splitting out the session related stuff, the validation-related stuff, etc? |
| 19:09 | Raynes | technomancy: That kills the point of lib-noir. |
| 19:09 | Raynes | I could split it into multiple libraries and have lib-noir tie them together, but despite the objections of some members of the community, the point is batteries included. |
| 19:10 | Raynes | To a limit. |
| 19:10 | amalloy | mindbender1: it's exactly what Raynes said |
| 19:10 | Raynes | These are things most every body uses in a web app. |
| 19:10 | Raynes | It isn't ever going to just be a huge collage of crap. |
| 19:11 | technomancy | looking through it, I can see maybe half the namespaces I'd actually use, but not all in the same project |
| 19:11 | callen | brehaut: except for the ORM, I liked Django. What we're really doing here is moving closer to something like Flask where it's still nicely integrated but you have the choice of overriding and replacing at will. |
| 19:11 | callen | modularity isn't the only priority people have, unless they're J2EE engineers. |
| 19:12 | technomancy | callen: where's "here"? |
| 19:12 | callen | technomancy: Noir -> lib-noir |
| 19:12 | technomancy | oh |
| 19:12 | mindbender1 | amalloy: #{"foo" "baz"} gets printed rather than "foo" "baz" |
| 19:12 | brehaut | i like django except for the ORM, forms, url routing, middleware, user system and templates |
| 19:13 | amalloy | well yes, it's not re-readable otherwise |
| 19:13 | brehaut | south is nice though |
| 19:13 | Raynes | ibdknox: Added your quote to the post. |
| 19:13 | callen | brehaut: the user system is a component of the ORM. I don't like the forms either, Wtforms which I use with Flask is better. The middleware is better than everything else in the Python ecosystem Flask included. URL routing I could see, I'm not sure what your complaint is re: templates. |
| 19:14 | callen | South isn't Django. |
| 19:14 | brehaut | i know south isnt django. that was a joke |
| 19:14 | Raynes | ibdknox: It's nice to have validation in there from Noir's original author. |
| 19:14 | callen | brehaut: what don't you like about the templates? |
| 19:14 | amalloy | if you want to print a collection's items separately and not-rereadably you can just (apply pr-str ...) |
| 19:14 | ibdknox | Raynes: :) |
| 19:15 | brehaut | callen: they always devolve into repetition, boilerplate python, and accidental complexity. jinja helps but its not a panacea. its macros and consistent syntax are big wins over django templates but the underlying model is still lets make PHP a little less shit |
| 19:16 | callen | brehaut: what would you prefer? I'm a big fan of Jinja. |
| 19:16 | brehaut | and even if you varnish PHP is still just shiny shit |
| 19:17 | callen | brehaut: I'd say Jinja is a pretty huge improvement over PHP. |
| 19:17 | brehaut | i would prefer something like enlive (though with clearer documentation) |
| 19:17 | callen | brehaut: do you work with frontend people? |
| 19:17 | brehaut | yes |
| 19:17 | callen | brehaut: having something that intrusive isn't an issue? |
| 19:17 | Raynes | brehaut: Well, you know I'm doing that. Also, tinsel. |
| 19:18 | callen | brehaut: I'd rather just kick the frontend guy a map/dictionary. |
| 19:18 | brehaut | Raynes: indeed. i am hopeful. also cgrand has been making some noises about a new version of enlive, so maybe that will improve things too |
| 19:18 | mindbender1 | ,(reduce str (interpose "\n" #{"foo" "baz"})) |
| 19:18 | clojurebot | "foo\nbaz" |
| 19:18 | Raynes | brehaut: He has? |
| 19:18 | technomancy | Raynes: the github link on your blog is broke |
| 19:18 | seangrove | ,(clojure.string/join (interpose "\n" #{"foo" "baz"})) |
| 19:18 | clojurebot | "foo\nbaz" |
| 19:19 | Raynes | technomancy: How so? |
| 19:19 | Raynes | Oh, it didn't hyperlink. |
| 19:19 | technomancy | aye |
| 19:19 | brehaut | Raynes: i fail at twitter spelunking |
| 19:20 | callen | I just don't see enlive working, putting its complexity aside, just because of how intrusive defining CSS selectors against the templates is. It's too complected. |
| 19:20 | callen | I have a hard time believing that could work when the frontend/backend linkages are really being tested, like during a time of serious refactoring. |
| 19:20 | Raynes | My selectors are functions. So are tinsel's. |
| 19:20 | brehaut | Raynes: https://github.com/cgrand/enlive/wiki/Enlive-N%28ext%29 |
| 19:25 | nsxt | callen: Out of curiosity, what's your take on libraries like jQuery? You're doing more or less the same thing when you're binding DOMElements to events. |
| 19:26 | callen | nsxt: that's frontend. The standard for "complection" is higher when you cross a barrier like frontend/backend. |
| 19:26 | muhoo | how would i escape a & in a string in nrepl/nrepl.el? \& doesn't seem to work |
| 19:28 | muhoo | ,(let [foo "foo & bar"] (str foo " isn't even a problem here, but nrepl.el pukes on it")) |
| 19:28 | clojurebot | "foo & bar isn't even a problem here, but nrepl.el pukes on it" |
| 19:29 | nsxt | callen: Understood. Couldn't you make the same argument about 'name' attributes on inputs though? |
| 19:29 | nsxt | HTML inputs as a gateway to server params |
| 19:29 | TimMc | callen: You'd like ur/web. |
| 19:32 | callen | nsxt: that's less problematic than prolifically intruding into frontend document structure |
| 19:34 | seangrove | Is there a stand-alone nrepl js snippet I can copy/paste into a page to get nrepl going, or would it need closure and everything that implies? |
| 19:35 | seangrove | I suppose I answered my own question there. Damn. |
| 19:35 | bbloom | seangrove: you want a CLJS or a CLJ repl? |
| 19:35 | seangrove | A cljs repl |
| 19:35 | seangrove | I'm trying to get a cljs repl in a content-script |
| 19:35 | hiredman | a clj repl written in cljs? |
| 19:36 | bbloom | hiredman: just sending expressions to the server to evaluate, a la http://tryclj.com/ |
| 19:36 | seangrove | Heh, no, just a way for me to connect nrepl.el to a content-script that doesn't have closure or any cljs code in it |
| 19:36 | hiredman | https://github.com/hiredman/nrepl-cljs-middleware https://github.com/hiredman/drawbridge-cljs |
| 19:37 | hiredman | dawbridge-cljs is a cljs drawbridge client, drawbridge being the nrepl http transport |
| 19:37 | hiredman | seangrove: oh |
| 19:37 | hiredman | seangrove: then ignore me |
| 19:37 | hiredman | some day someone is going to want a clojure repl in a webpage, and then I will be ready |
| 19:37 | seangrove | No problem, appreciate the intent |
| 19:37 | seangrove | hahaha |
| 19:38 | seangrove | Until that day... |
| 19:38 | hiredman | until then everytime someone says "I wanta cljs repl" I will leap to my feat, then sit down slowly |
| 19:38 | hiredman | feet |
| 19:39 | hiredman | it is neat, I have a webpage somewhere with a little popup with codemirror that can send cljs to the server to generate javascript, then send it back to be evaled |
| 19:41 | seangrove | hiredman: Suppose it would be cool to have right in the webkit console |
| 19:41 | sshack | Raynes: So if Chris is focusing on light table and noir is being sunset, what is happening to sql norma? Is that safe to use? |
| 19:42 | Bronsa | korma* |
| 19:42 | seangrove | Type cljs -> sent round trip for translation to js -> js comes back, is evaled, output to the console |
| 19:42 | Raynes | sshack: ibdknox indicated that korma is fine last night. |
| 19:42 | sshack | Bronsa: Uh yeah Korma. |
| 19:42 | sshack | Raynes: Alright, cool |
| 19:42 | Raynes | There is probably still motivation for maintaining it. It's just that there wasn't any motivation to maintain Noir. We have equal and better solutions to that particular problem now. |
| 19:42 | sshack | I may think about sending in a patch for cursors then when I come to it. |
| 19:43 | seangrove | Is compojure the new new then? |
| 19:43 | seangrove | I always thought Compojure was a bigger library than noir, suppose that's not an appropriate assesment |
| 19:43 | sshack | I thought composure was the old new. |
| 19:44 | sshack | It is the granddaddy of them, iirc. |
| 19:45 | ibdknox | Bronsa: in Clojure 1.5.0 column metadata has to be an integer as well :/ |
| 19:45 | ibdknox | lol |
| 19:45 | Bronsa | dang |
| 19:46 | akhudek | I |
| 19:46 | ibdknox | Bronsa: btw, you are currently my hero |
| 19:46 | akhudek | I'd love to see more movement on the Korma filed issues. |
| 19:46 | bbloom | ibdknox: what would it be if not an integer? |
| 19:47 | ibdknox | bbloom: a long? |
| 19:47 | ibdknox | bbloom: since that's the default number type these dyas |
| 19:47 | ibdknox | akhudek: 3-4 people have said they'd step up and help, none of them have had the time it seems |
| 19:47 | bbloom | ibdknox: oh, ah, yeah, dur. integer == long in my mind :-P i was thinking you wanted a fraction in there for some ungodly reason |
| 19:48 | ibdknox | bbloom: lol at line 1/3 there's a terrible bug... |
| 19:48 | bbloom | ibdknox: i did the column metadata patch, it was pretty easy |
| 19:48 | bbloom | shouldn't be hard to switch to a long |
| 19:48 | bbloom | just getting the patch into the release is the tough part |
| 19:49 | bbloom | but line & column metadata is inadequate in the current reader all around (which i'm sure you know) |
| 19:49 | ibdknox | yeah, that's why Bronsa is my hero: I stopped using the Clojure reader :) |
| 19:49 | bbloom | ah, yes, Bronsa++ |
| 19:49 | ibdknox | I added all sorts of position info into blind |
| 19:49 | bbloom | (inc Bronsa) |
| 19:49 | lazybot | ⇒ 1 |
| 19:49 | ibdknox | namely on symbols |
| 19:49 | akhudek | ibdknox: that's too bad, but I understand, I don't have the time myself these days. I haven't even cleared my todos on two other small libraries. |
| 19:49 | ibdknox | which is something I really needed |
| 19:49 | bbloom | ibdknox: yup, dnolen needs it too for cljs source maps |
| 19:49 | ibdknox | and what kept me on my own forked crazy version of clojure |
| 19:50 | ibdknox | so glad to be rid of that |
| 19:50 | ibdknox | dnolen: I have a fork of blind that has position info on most everything |
| 19:50 | ibdknox | dnolen: maps, vectors, lists, symbols, wrapped reader things (like @blah) |
| 19:51 | bbloom | ibdknox: glorious. please contribute that back |
| 19:51 | ibdknox | I wasn't sure if others would want that, I imagine it's marginally slower |
| 19:51 | ibdknox | couple of extra if checks |
| 19:52 | squidz | ibdknox: in your korma library, does defentity automatically create the table? if not, is there an easy way to do that with korma besides executing raw sql? |
| 19:52 | bbloom | ibdknox: is LightTable making any use of the CLJS analyzer? |
| 19:53 | akhudek | squidz: it does not, but I think there are table manipulation functions in clojure.java.jdbc |
| 19:53 | akhudek | squidz: http://clojure.github.com/java.jdbc/doc/clojure/java/jdbc/UsingDDL.html |
| 19:54 | squidz | akhudek: thanks |
| 19:54 | ibdknox | bbloom: yes, your changes won't affect me |
| 19:54 | ibdknox | bbloom: it's fairly simplistic right now, though I want that to change - once we agree on a format that will work for both clj/cljs |
| 19:54 | bbloom | ibdknox: ok cool. i'm just curious what you're using it for and if you have any needs/improvements/whatever. i want to start pushing a bit harder on it |
| 19:55 | ibdknox | bbloom: not blowing up when looking at CLJ ns forms would be nice :) import statements kill it |
| 19:55 | ibdknox | I bet that one's a really simple fix |
| 19:55 | ibdknox | just didn't look into it |
| 19:55 | ibdknox | also feature expressions were a blocker here I thought |
| 19:55 | bbloom | ibdknox: if you file a ticket, somebody will :-) |
| 19:56 | bbloom | i don't know what the situation is with feature exprs |
| 19:57 | ibdknox | bbloom: yeah I suck at that, will try to be better |
| 19:57 | bbloom | ibdknox: eh, jira is a nightmare |
| 19:57 | bbloom | ibdknox: once you figure out which buttons to press (and avoid all other buttons) it's not too painful to throw some crap in there |
| 19:57 | ibdknox | for whatever reason there's a huge leap for me doing that vs filing an issue on gh |
| 19:58 | bbloom | i agree entirely |
| 19:58 | bbloom | it's actually a big problem, imo |
| 19:58 | bbloom | and not accepting pull requests is a bitch too.... |
| 19:58 | ibdknox | I wonder if we could allow filing and have a synchronization thing that just dumps them into jira... |
| 19:59 | bbloom | *sigh* jira plugin or API? :-/ not interested.... |
| 19:59 | ibdknox | haha |
| 19:59 | ibdknox | me. neither. |
| 19:59 | clojurebot | Pardon? |
| 19:59 | ibdknox | clojurebot: shutup |
| 19:59 | clojurebot | It's greek to me. |
| 19:59 | bbloom | i don't know the details of how clj wound up in the situation it's in, but i think that we're far from the only two who find jira to be a blocker to contributing |
| 19:59 | Bronsa | ibdknox: i pushed a fix that doesn't require calling int everytime |
| 20:00 | bbloom | github really needs contributor agreement tracking as a feature |
| 20:00 | seangrove | Yeah, I always find it less painful to muddle along somewhere local with a fix than to open a jira issue |
| 20:00 | seangrove | bbloom: Could be easy to add as a commit service |
| 20:00 | ibdknox | Bronsa: would it potentially be better to just store them as ints? |
| 20:01 | callen | ibdknox: clojurebot is sassy today. |
| 20:01 | seangrove | The build status for a commit could be set to fail if not done by someone who's signed the CA |
| 20:01 | bbloom | ok well anybody willing to start the "boo jira" thread on the dev mailing list, feel free… i'll chime in, but i'm going to avoid stirring the pot :-P |
| 20:01 | Bronsa | ,(class (inc (int 1))) |
| 20:01 | clojurebot | java.lang.Long |
| 20:01 | ibdknox | fail |
| 20:01 | seangrove | I'd be happy to write the service next weekend if that'd help :) |
| 20:01 | bbloom | heh. |
| 20:02 | bbloom | seangrove: how would it work / what would it do ? |
| 20:02 | seangrove | But I doubt anyone in the current flow feels much pain, it's a nice insulator |
| 20:02 | technomancy | I'll happily join a jira lynch mob |
| 20:02 | ibdknox | seangrove: I imagine the problem isn't limited from a technical stand point. This is largely a process issue |
| 20:02 | ibdknox | ooo |
| 20:02 | ibdknox | with technomancy support, we're bound to win. He's tall. |
| 20:02 | bbloom | ibdknox: i just met technomancy in person the other day. tall is an understatement |
| 20:02 | seangrove | bbloom: Whenever someone submits a pull request, you can use the GitHub hooks to fire off a service that checks the commit for authors, and it's allowed to set the "status" of the commit to pass/fail |
| 20:02 | technomancy | "evil twin" goatee helps |
| 20:03 | bbloom | seangrove: hm, i'd be interested to see how that works out |
| 20:03 | bbloom | i know github has some new integration thinggies w/ the CI servers and what not |
| 20:03 | seangrove | So one of the services you'd have would just check to see if the commit author has signed the CA |
| 20:03 | bbloom | dunno much about that integration |
| 20:03 | seangrove | Yeah, basically pretend to be a CI server |
| 20:03 | ibdknox | seangrove: oh that's cool |
| 20:03 | bbloom | seangrove: even if the clj folks don't want that, SOMEBODY would |
| 20:04 | seangrove | Clojure's really the only use case I know for it though, hah |
| 20:04 | hiredman | the ca agreement isn't the blocker on prs |
| 20:04 | holo | ibdknox, hi! in korma: will the ssl issue for heroku db be solved someday? |
| 20:04 | hiredman | prs are, rich likes patches |
| 20:04 | bbloom | you can just add .patch to the end of the PR and you get a patch... |
| 20:04 | hiredman | I mean "righ likes the workflow around patches" |
| 20:05 | hiredman | rich |
| 20:05 | technomancy | bbloom: but you can't shepherd it through a confusing flow chart diagram that will intimidate all but the most determined of contributors |
| 20:05 | hiredman | patches me an immutable artifact or something, I dunno |
| 20:05 | seangrove | Nope, don't think there's much I cared for about it :P |
| 20:05 | technomancy | it's intended to separate the sheep from the goats |
| 20:05 | seangrove | haha |
| 20:05 | seangrove | I think that's probably somewhat right |
| 20:05 | bbloom | technomancy: it took me quite a while to find my way around and i felt really lost |
| 20:05 | brehaut | im having a massive mindblank on 'prs'; all that comes to mind is shiny guitars |
| 20:05 | bbloom | technomancy: i almost didn't become a contributor |
| 20:05 | hiredman | pull requests |
| 20:05 | seangrove | And that's probably fine... a bit of a bummer, but understandable |
| 20:06 | tpope | yeah github prs let way too many sheep in |
| 20:06 | tpope | or goats |
| 20:06 | ibdknox | fwiw, it prevent people like me from wanting to do it |
| 20:06 | tpope | I'm not sure what the sheep and goats are about |
| 20:06 | ibdknox | prevents* |
| 20:06 | technomancy | ibdknox: same |
| 20:07 | seangrove | Well, sounds like all of us that don't really matter are on the same side then :) |
| 20:07 | seangrove | Now all we have to do is convince the old guard |
| 20:07 | ibdknox | technomancy is arguably part of the "old guard" lol |
| 20:07 | ibdknox | technomancy: how long have you used clojure? |
| 20:07 | bbloom | i dunno, seems a little unfair to say that the guy working on the facy IDE generating a lot of buzz and the dude who makes the defacto standard clojure distribution and build tool don't matter |
| 20:07 | technomancy | ibdknox: not as long as hiredman and cemerick |
| 20:07 | brehaut | technomancy: at least 4.5 years though right? |
| 20:08 | technomancy | brehaut: just 4 |
| 20:08 | hiredman | yes, but I have no high profile projects |
| 20:08 | brehaut | out of 5.25 of its public life |
| 20:08 | S11001001 | technomancy: "just" |
| 20:08 | ibdknox | lol |
| 20:08 | TimMc | technomancy: The latter is giving a presentation right now; your message popped up on his screen. :-P |
| 20:08 | ibdknox | I'm a young'n only about 2 years for me |
| 20:08 | ibdknox | cemerick: OMG PRESENTATIONS |
| 20:08 | technomancy | TimMc: haha, where |
| 20:08 | technomancy | ? |
| 20:08 | hiredman | cemerick: !!!!!!! |
| 20:09 | hiredman | the boston clojure meetup |
| 20:09 | ibdknox | he now hates us. |
| 20:09 | Raynes | I've been around longer than technomancy, I think. |
| 20:09 | ibdknox | Raynes: really? I didn't know that |
| 20:09 | Raynes | I was pretty stupid at the time though, so it's likely nobody remembers me. |
| 20:09 | technomancy | Raynes: I think you might have been a bit more shy on IRC in the early months? |
| 20:09 | bbloom | ok well i think this is a political battle, and i suck at politics |
| 20:09 | brehaut | i spelunked my mail inbox. the earliest email in have about clojure was september 2008. im slightly amazed that its been that long |
| 20:09 | hiredman | is it really politicial? |
| 20:09 | bbloom | but if anyone doesn't suck at politics and want's to storm the jira beach head. i will follow you into battle |
| 20:10 | ibdknox | I will also follow |
| 20:10 | technomancy | I've been around roughly as long as atoms; I think the week I joined I saw that announcement. |
| 20:10 | hiredman | it is rich's project, rich prefers patches, no one has provided a technical argument that has convinced him to use pull requests |
| 20:10 | bbloom | hiredman: that's why it's political, it's not a technical argument |
| 20:11 | hiredman | bbloom: how so? |
| 20:11 | bbloom | more likely to get bug reports and patches from less casual folks |
| 20:11 | hiredman | oh |
| 20:11 | bbloom | hiredman: ibdknox is a HUGE consumer of clj and cljs and surely finds *lots of issues* but won't open tickets b/c jira is annoying |
| 20:11 | hiredman | well I think that is actually more likely to make rich run away from prs |
| 20:11 | hiredman | fewer drive by issues |
| 20:12 | hiredman | *shrug* |
| 20:12 | holo | ibdknox, i forked korma and supported ssl with pg heroku db and it's working in my project. i would hope your experienced eyes could take a look at it when you have time. i will soon make an issue report, and my resolution |
| 20:12 | technomancy | wow, there were ~900 members on the clojure mailing list when I started; now it's ~7000 |
| 20:12 | brainproxy | :) |
| 20:12 | technomancy | discussion level is a bit lower than it was though |
| 20:13 | brehaut | technomancy: i used to follow irc from work via the n01se logs. the week i got a new job and could IRC was the week after rich stopped being a regular participant |
| 20:13 | brainproxy | this is a pretty good sized irc channel too |
| 20:13 | hiredman | bbloom: releasing libraries and maintaining them is a great way to contribute :) |
| 20:13 | technomancy | brehaut: hah; ouch |
| 20:13 | bbloom | hiredman: my experience with "big" ticketing systems like Jira, or bugzilla or team foundation shit at msft or whatever is that they force you to think about a ton of stuff that doesn't matter |
| 20:13 | technomancy | hiredman: inc |
| 20:13 | callen | technomancy: I guess if it changed that means the mailing list is stateful. That should be fixed so it can be immutable. |
| 20:13 | bbloom | hiredman: "is this a 'Defect' or an 'Enahancement'?" |
| 20:14 | bbloom | "is this low, medium-low, medium, medium-high, or high priority?" |
| 20:14 | bbloom | all that nonsense that gets filed into fields |
| 20:14 | ibdknox | technomancy: hiredman: I agree, but the issues thing would still be useful |
| 20:14 | bbloom | it doesn't matter |
| 20:14 | hiredman | bbloom: I have never thought about any of that when I open a clojure ticket |
| 20:14 | technomancy | callen: (swap! mailing-list into (get-noobs)) |
| 20:14 | hiredman | bbloom: I make all my tickets high priority |
| 20:14 | bbloom | lol |
| 20:14 | muhoo | any thoughts on trying to get nrepl.el to accept & in a string without puking? |
| 20:14 | bbloom | hiredman: well that shit adds up. i'm speaking more generally now. ask ibdknox to tell you some visual studio team triage war stories sometime |
| 20:15 | bbloom | i'm sure they are hilariously |
| 20:15 | hiredman | bbloom: why? just ignore the parts of jira you don't like |
| 20:16 | bbloom | hiredman: it's still cognitive load |
| 20:16 | technomancy | muhoo: never heard of that; probably raise it on the nrepl.el mailing list or issue tracker |
| 20:16 | hiredman | bbloom: then you aren't ignoring it |
| 20:16 | hiredman | "don't know, don't care" |
| 20:16 | bbloom | hiredman: it's not just the random fields |
| 20:16 | technomancy | "Not my circus; not my monkey" as they say in Polish |
| 20:16 | ibdknox | bbloom: you have no idea |
| 20:16 | TimMc | haha |
| 20:16 | hiredman | technomancy: indeed |
| 20:16 | seangrove | technomancy: Do they say that? |
| 20:17 | technomancy | seangrove: I heard it on the tweetersphere |
| 20:17 | bbloom | ibdknox: i do have an idea, i worked on VS integration for XNA and i'm good friends with Alex Turner :-) |
| 20:17 | muhoo | is the problem jira itself, or just the top-down model of the project? |
| 20:17 | ibdknox | haha well there you go then |
| 20:18 | bbloom | and know kav latiolais and scott nonnenberg a bit too, i think you worked them right? |
| 20:18 | ibdknox | Kav and I shared an office for about a year |
| 20:18 | ibdknox | I saw them a couple months ago when they were down here in SF |
| 20:18 | squidz | man it seems like developing in clojure happens faster than when I do something in Java, even though I just started clojure. I can't wait until I start getting very familiar with the language. Very exciting :D |
| 20:18 | muhoo | because, it's easy to focus on the technology, when the issue is more a personality preference. rich doesn't seem like an open-source guy, he was "a happy LispWorks customer" by his own admission, i'd guess that if he wrote clojure 15 years ago it would never have been opensourced |
| 20:19 | bbloom | right. so then you could tell hiredman all about how the terrible jira-ish UI of TFS makes triage meetings suck :-P |
| 20:19 | technomancy | too bad antares isn't around for the 5 minutes of jira hate |
| 20:19 | brehaut | lol |
| 20:19 | hiredman | bbloom: are you operating under the assumption that I don't use jira? |
| 20:19 | technomancy | muhoo: I suspect that's a big part of it despite Stuart repeatedly insisting otherwise. |
| 20:20 | bbloom | hiredman: no, i'm operating under the assumption that you, like a large number of people, are numb to the affects of bad UX in a way that a non-trivial number of oddballs like myself are not |
| 20:20 | hiredman | I think we've been through 3-4 or four ticketing systems in the 2 (alsmost 3?) years I've been working at sonian |
| 20:20 | hiredman | with jira being the most recent |
| 20:20 | technomancy | my previous two jobs both adopted Jira about a month before I left |
| 20:20 | hiredman | they all suck |
| 20:21 | ibdknox | I never understood that |
| 20:21 | ibdknox | why do they suck? |
| 20:21 | callen | technomancy: so goes ticketing, so goes the company. |
| 20:21 | ibdknox | It's a relatively straightforward problem to solve |
| 20:21 | hiredman | I think we were on agilezen before jira? |
| 20:21 | bbloom | ibdknox: the same reason a lot of stuff all sucks: products created for the buyers not for the users |
| 20:21 | muhoo | technomancy: you probably run the most active clojure project in terms of sheer number of open-source contributions, so you're aware of how much work it is to manage. |
| 20:21 | callen | ibdknox: ticketing involves humans. it's a human problem. |
| 20:21 | callen | ibdknox: you can't make ticketing good without having good humans. |
| 20:21 | bbloom | callen: yeah that too |
| 20:21 | brehaut | ibdknox: really? its all about taxonomy and workflow. humans suck at those two things |
| 20:22 | technomancy | ibdknox: selling ticketing software means being all things to all people |
| 20:22 | hiredman | agilezen had all kinds of stability issues, and in generally felt like using someone's hobby project |
| 20:22 | bbloom | which is why i advocate fewer features and more humans :-P |
| 20:22 | callen | JIRA is an attempt by management to strait-jacket humans into not being silly humans by subjecting them to something unpleasant. |
| 20:22 | callen | </MichaelOChurch Propaganda> |
| 20:22 | hiredman | the best issue tracker is git |
| 20:22 | technomancy | muhoo: it's less work when you trust contributors to be responsible adults =D |
| 20:22 | bbloom | ibdknox: you've seen the absurd customizability of product studio and tfs… it's yet-another-slightly-tuned database table as an app |
| 20:22 | bbloom | there's this category of categories of apps i like to call "filemaker for X" |
| 20:22 | muhoo | technomancy: well said. |
| 20:22 | ibdknox | bbloom: we estimated the amount of time we lost as a result of TFS during dev 10 |
| 20:22 | hiredman | well, really the best issue tracker is an immutable database |
| 20:22 | bbloom | most ticketing systems are "filemaker for geeks" |
| 20:23 | ibdknox | bbloom: it was a staggering number |
| 20:23 | technomancy | muhoo: the only time I've had to straight out revert a contributor's merge was when they didn't realize amalloy's pull request was meant as a joke |
| 20:23 | hiredman | but when you say things like that people thing you are trying to sell datomic |
| 20:23 | frozenlock | Noir's dead! Noooooo |
| 20:23 | bbloom | ibdknox: oh, i know. but i'm sure it wasn't as bad as exchange dog fooding for xbox org |
| 20:23 | bbloom | lol |
| 20:23 | bbloom | three or four occurrences of 2-week-long email deliverability nightmares |
| 20:23 | hiredman | jira has JQL, why not just give me a real database? |
| 20:23 | ibdknox | hah |
| 20:24 | sshack | brehaut: Linking to this _> http://brehaut.net/blog/2011/ring_introduction is an excellent start. |
| 20:24 | technomancy | frozenlock: it's just shed its corporeal form and evolved into an energy-based being or something |
| 20:24 | bbloom | but yeah, there's a ton of these "filemaker for X" businesses and they all suck at UX |
| 20:24 | muhoo | technomancy: maybe we should put rich and RMS together in a room sometime and see what happens. |
| 20:24 | brehaut | sshack: thanks, though im not sure what the context is atm |
| 20:24 | bbloom | ticketing systems, CRM systems, social media monitoring, customer support, order tracking, etc |
| 20:24 | frozenlock | technomancy: But then it will come back and help us build a weapon to destroy the energy beings from the other galaxy, right? |
| 20:24 | bbloom | they are all rows and columns and suck |
| 20:24 | technomancy | frozenlock: time will tell |
| 20:24 | sshack | brehaut: The context of getting one unto speed on web dev in clojure. |
| 20:24 | ibdknox | some day I'll fix it |
| 20:25 | bbloom | heh good luck with that |
| 20:25 | brehaut | sshack: ah. well that a win then :) |
| 20:25 | sshack | brehaut: I have a pretty good idea of the landscape up until the point where i'd want to go clustering/app severing and such. |
| 20:25 | technomancy | I wish I had a good excuse to finish die-roboter |
| 20:25 | sshack | brehaut: You can always use more polish of course. but it's a great start. |
| 20:26 | sshack | The links at the end are also useful. |
| 20:26 | brehaut | (and 2 years out of date. yay blog posts :/ ) |
| 20:26 | sshack | bbloom: accounts receivable apps. |
| 20:26 | seangrove | Hrm, what's the equivalent of `if ("undefined" == typeof CustomEvent)` ? |
| 20:26 | seangrove | In cljs |
| 20:27 | technomancy | brehaut: were you going to submit a version of that to clojure-doc.org or something? |
| 20:27 | sshack | bbloom: The secret is finding a market that will pay obscene amounts of money, for a simple interface to a database table. |
| 20:27 | brehaut | technomancy: i offered it to them. i havent had a chance to do any updates myself. but it looks like they didnt want to use it |
| 20:28 | cemerick | technomancy, hiredman, ibdknox: wat wat wat |
| 20:28 | cemerick | :-P |
| 20:28 | technomancy | muhoo: oddly enough contributing to Emacs is weirdly similar to Clojure; you have to mail in paperwork and use bzr |
| 20:28 | brehaut | technomancy: i want to try to update it over the summer (re:winter) break, to at least use 1.0 versions of libs and recent clojure |
| 20:28 | ibdknox | cemerick: oh nothing, carry on! |
| 20:28 | ibdknox | cemerick: ;) |
| 20:29 | brehaut | technomancy: which is slower? paperwork or bzr? |
| 20:29 | technomancy | muhoo: but you can tell rms values contributions from other hackers above all else; he's just really paranoid about legal threats |
| 20:29 | cemerick | I didn't read the log; did someone ask something, or am I being trolled? :-P |
| 20:29 | technomancy | brehaut: heh |
| 20:29 | ibdknox | cemerick: mega-trolled. |
| 20:29 | cemerick | cool |
| 20:29 | brehaut | i say that because i am sad. bzr had a nice interface even if it was the perfect fit for a turtle icon |
| 20:29 | technomancy | muhoo: you could make the argument that GNU projects are high-profile targets or something; can kind of see that, but it still means I don't try to contribute. |
| 20:29 | cemerick | meta-trolled is what I did to Raynes earlier :-D |
| 20:30 | Raynes | cemerick: ? |
| 20:30 | S11001001 | brehaut: take it back, bzr is awesome |
| 20:30 | muhoo | technomancy: well the whole GNU project was started as a reaction/defense against legal land-grabs, so not surprising he's so paranoid. |
| 20:30 | holo | is there any way for the buildpack in heroku to not try to build my scripts which are in src? I think they take up some useful space in the slug |
| 20:30 | cemerick | Raynes: just for you, buddy http://groups.google.com/group/clojuredev-users/msg/69de82d45e321e13 |
| 20:31 | S11001001 | brehaut: oh I can read |
| 20:31 | technomancy | holo: you mean AOT compilation? |
| 20:31 | seangrove | Hah |
| 20:31 | seangrove | "+1 for -> indenting as a regular function and adding a vote to ignore everything Chas just said." |
| 20:31 | muhoo | technomancy: in the case of rich, i think he'd rather be in a hammock thinking up amazing stuff and solving hard problems than managing a cacophony of proto-anarchist contributors :-) |
| 20:31 | S11001001 | brehaut: I thought tla had perfectly acceptable speed, so bzr practically breaks the sound barrier. |
| 20:31 | holo | technomancy, thanks. no, i just use the scripts locally, so i don't really need them there |
| 20:31 | Raynes | I'm going to beat you to death, cemerick. |
| 20:31 | technomancy | muhoo: yeah, but every Walt Disney needs a Roy Disney to handle practical stuff |
| 20:31 | Raynes | Sleep with one eye open. |
| 20:32 | ohpauleez | technomancy: That is both hilarious and profound |
| 20:32 | brehaut | S11001001: lol :) i only stopped using it because the whole world uses git, and a DVCS that nobody else uses is a sad situation |
| 20:32 | ohpauleez | good ol' Roy |
| 20:32 | cemerick | Raynes: I sleep with katanas, boy |
| 20:32 | technomancy | holo: oh, gotcha. you can override the compilation behaviour by creating an executable `bin/build` script that does `lein compile myapp.main` or something |
| 20:33 | muhoo | technomancy: actually, didn't clojure start in some ways as a reaction against complexity and cruft, the kind that open source projects tend to accumulate a lot of? |
| 20:33 | technomancy | holo: but typically .class files are not very big; if your slug size is too large it's unlikely that's the first thing to check |
| 20:33 | S11001001 | brehaut: I kept using tla until 2008, ubuntu's enough for me, and git's semantics are that bad |
| 20:34 | technomancy | muhoo: that might be a bit of a stretch |
| 20:34 | sshack | muhoo: You're walking through a minefield there. |
| 20:34 | holo | technomancy, but maybe some dependencies (specified in project.clj) are only used in the script, and that would make it reasonably bigger right? or all the dependencies are loaded in the slug, regardless of being used or not? |
| 20:35 | muhoo | sshack: yes, i'm aware of the dangers, but i figured i'd at least stick a tiptoe in there. |
| 20:35 | muhoo | sshack: but i'll stop now while i still have legs :-) |
| 20:35 | brehaut | S11001001: i use git either a) via magit, b) consulting the docs extensively. i just cant seem learn that stuff |
| 20:35 | technomancy | holo: yeah, dependencies can certainly bloat up the slug size. you can store them under the :dev profile for things you don't use in production. |
| 20:36 | holo | technomancy, insightful. |
| 20:38 | callen | technomancy: http://en.wikipedia.org/wiki/Slug_(mass) ? |
| 20:40 | callen | technomancy: when you say slug, do you mean the final uberjar? |
| 20:40 | holo | i always thought of slug related to a disgusting slow animal, living in the dark undergrounds |
| 20:40 | technomancy | callen: it's the unit of deployment with heroku |
| 20:40 | technomancy | basically a tarball that includes config and process manifest stuff |
| 20:40 | S11001001 | brehaut: I know it pretty well, and I've used it for work for the past 3 years. So when I do a personal project, I prefer to enjoy using my VCS :) |
| 20:41 | brehaut | S11001001: im just not much of a tool using ape i guess |
| 20:41 | callen | technomancy: why is lein-heroku still experimental, just wondering? |
| 20:42 | technomancy | callen: it's just a lot of work to duplicate everything in the toolbelt on the JVM |
| 20:42 | holo | callen, it's a very cool concept. the slug stores the application files ready for being launched everytime a process for the application is started |
| 20:42 | technomancy | plus startup time makes it annoying to deal with |
| 20:42 | callen | technomancy: is the objective to reduce the need to gem install stuff? |
| 20:42 | technomancy | callen: yeah, but we have native installers for the top 3 platforms now |
| 20:42 | callen | technomancy: do you use drip re: startup time? |
| 20:42 | technomancy | so it's not as important |
| 20:43 | S11001001 | Back in my day, we had to walk uphill both ways and email patches to contribute to emacs :) |
| 20:43 | technomancy | callen: no, I just don't start lein very often |
| 20:43 | callen | technomancy: sacrilege! :P |
| 20:43 | technomancy | it's true; just leave it open |
| 20:43 | TimMc | cemerick: Sorry, it's all my fault. |
| 20:44 | cemerick | TimMc: what is? |
| 20:44 | callen | technomancy: oh I see what you mean, you live in the command environment in provides. |
| 20:44 | callen | it* |
| 20:44 | TimMc | cemerick: I noted that IRC hilites were showing up on your screen. |
| 20:44 | technomancy | well, in nrepl basically |
| 20:45 | squidz | is anybody familiar with haskells Snap framework? it is supposed to be very modular, which is what I guess compojure + ring are going for. |
| 20:45 | cemerick | TimMc: heh, no worries |
| 20:45 | squidz | http://snapframework.com/ |
| 20:46 | callen | squidz: you probably don't want to walk into that, so tread carefully if you ask in #haskell. |
| 20:46 | S11001001 | like half the people chatting now are all in the same room |
| 20:47 | callen | squidz: it'd be comparable to making a joke in a webcomic about how silly frequentists are, and how bayesians *really* know what's up. |
| 20:47 | squidz | callen: ask what in #haskell? |
| 20:47 | TimMc | &(.-length "foo") |
| 20:47 | lazybot | ⇒ 3 |
| 20:47 | callen | anything involving the yesod/happstack/snap holy war. |
| 20:48 | squidz | oh no, I am only speaking from my own experience. I'm not going to ask #haskell. Just wanted to know if we are striving towards something similar |
| 20:48 | callen | squidz: I don't know how similar it is. People actually reuse and recombine the components in the Clojure community because Ring is the agreed upon base. |
| 20:48 | callen | squidz: Haskell doesn't have something comparable, so Snap is only modular to the extent that you can pick-and-choose within the Snap framework. |
| 20:49 | brehaut | while many new clojurists might think 'hmm. clojure needs rails' at least none of them have thought 'hmm. what clojure really needs is a jenga tower of monadic code just to do a hello world web app' |
| 20:49 | callen | there's technically an analogue to ring/wsgi/rack in Haskell, but not everybody uses it. |
| 20:49 | cemerick | brehaut: oh god rails |
| 20:49 | callen | inc brehaut even though I still like Django templates. |
| 20:50 | callen | brehaut: be careful, an ex-haskeller might see algo.monad and get some funny ideas |
| 20:50 | S11001001 | brehaut: I'm thinking it right now |
| 20:50 | S11001001 | brehaut: so thanks |
| 20:50 | brehaut | callen: i do get funny ideas with algo.monads |
| 20:50 | callen | whips* |
| 20:51 | callen | TimMc: I saw what you said about UrWeb. Not funny :( |
| 20:53 | TimMc | callen: As in, you wish it were usable? |
| 20:54 | TimMc | or that it's completely unlike what you want? |
| 20:54 | callen | TimMc: unlike what I want. I'm not a "TYPE ALL THE THINGS" fascist. |
| 20:54 | callen | TimMc: if I was, I'd be in #agda, not #clojure |
| 20:54 | Raynes | callen, squidz: I once started a yesod website. And then I actually looked at it and ran screaming. |
| 20:55 | callen | Raynes: I tried to like Haskell. Scotty came close. It was just too much to do the simplest things though. |
| 20:55 | jaimef | are there any non-jvm implementations that are complete? clr? |
| 20:55 | Raynes | I like Haskell. |
| 20:55 | Raynes | I don't like yesod. |
| 20:55 | callen | jaimef: complete? no. Close? ClojureScript. |
| 20:55 | callen | Raynes: I like learning things from Haskell without actually using it in production. |
| 20:55 | callen | jaimef: it's becoming hipster-cool to write node.js apps in clojurescript. |
| 20:55 | Raynes | It is? |
| 20:56 | brehaut | wait, that work now? |
| 20:56 | Raynes | I guess since it isn't completely broken now. |
| 20:56 | Raynes | brehaut: Last I checked they at least got more than one file compiling at a time. ;) |
| 20:56 | callen | brehaut: define "works" |
| 20:56 | Raynes | But AFAIK you can't really write node libraries with it. |
| 20:56 | brainproxy | that's how I got my start in clojure ... trying to make cljs and node play nicely, so I could benefit from immutability |
| 20:56 | callen | nope, lol. |
| 20:56 | Raynes | Because of all the Clojure that gets stuffed in with it. |
| 20:56 | brehaut | Raynes: that sounds like a feature, not a bug |
| 20:56 | tomoj` | you can still write node libraries |
| 20:56 | tomoj` | no one probably cares if there's 30kb or whatever extra in your package |
| 20:56 | Raynes | tomoj`: Then someone needs to document it, cause I don't get it. |
| 20:57 | brainproxy | but then I read a clojure book and decided to just go whole hog w/ clojure and jvm :D |
| 20:57 | callen | tomoj`: if they cared about well-made software and libraries, that wouldn't be using Node.js |
| 20:57 | tomoj` | problem is, you can't make multiple node libraries which interoperate nicely |
| 20:57 | Raynes | Yeah, that's "you can't write node libraries" |
| 20:57 | Raynes | :p |
| 20:58 | tomoj` | I think if you don't use advanced compilation it might work? |
| 20:58 | callen | tomoj`: essentially. |
| 20:58 | tomoj` | well, I'm thinking of protocols |
| 20:58 | callen | is everyone hell-bent on advanced in the cljs community because it shakes off the parts of Clojure you're not using? |
| 20:59 | wingy | how do i add keys/values in a vector to a map? |
| 20:59 | tomoj` | and all your own code |
| 20:59 | callen | I would hope that wouldn't be *that* prolific a problem. |
| 20:59 | tomoj | I guess protocols need to work even for node.js users |
| 20:59 | tomoj | I just stopped caring about supporting node users :/ |
| 21:00 | tomoj | swannodette/mori is an example of a node library in cljs |
| 21:00 | tomoj | but it's a bit out of date :( |
| 21:00 | brainproxy | wingy: conj? |
| 21:00 | tomoj | I could blog about it but I don't have a blog |
| 21:00 | wingy | brainproxy: yeah |
| 21:01 | tomoj | there doesn't seem to be a way to run an npm hook after all packages are installed |
| 21:02 | tomoj | otherwise you could have something that looked at all the installed packages and ran cljsc |
| 21:02 | brainproxy | tomoj: postinstall? |
| 21:02 | tomoj | I think that's per package? |
| 21:02 | jaimef | clojurescript has to be better than dart :P |
| 21:02 | tomoj | I guess every cljs package can put in a postinstall |
| 21:02 | tomoj | ..but then how do you avoid running cljsc too many times |
| 21:03 | brainproxy | i see what you're saying |
| 21:03 | brainproxy | actually, the best thing would be to compile prior to publishing to npm registry |
| 21:03 | tomoj | but that won't work |
| 21:03 | tomoj | well, maybe in simple or whitespace |
| 21:03 | tomoj | but not advanced certainly |
| 21:04 | brainproxy | hmm |
| 21:04 | tomoj | you have to compile with all the cljs packages you're going to use |
| 21:04 | brainproxy | man, it's been forever since I messed w/ my node-clojurescript lib |
| 21:04 | brainproxy | trying to remember how I was dealing with that |
| 21:05 | tomoj | maybe we can get incremental builds out of the cljs analyzer/compiler? |
| 21:06 | brainproxy | i had figured out at one point how to get both npm style requires and cljs namespace require/use working in the same projects |
| 21:06 | tomoj | define a cljs require extension which sends over the file to be analyzed and gets output just for that file, but consistent with all the other output so far? |
| 21:07 | tomoj | and require a jvm as part of build |
| 21:07 | tomoj | er, if it's a require extension you'd need it during runtime, huh |
| 21:07 | brainproxy | i think my plan was to augment package.json in such a way so that you could transparently keep both pre-compiled and compiled code in the same project |
| 21:07 | pppaul | i see a ring async repo, what would be some use-cases for it where it would greatly benefit performance? |
| 21:08 | ToxicFrog | Oh hey. IDEA 12 came out and I didn't notice. |
| 21:08 | brainproxy | then that way, if you had a bunch of cljs projects depending on each other, you could do an advanced compilation and everything would just work |
| 21:08 | tomoj | oh, right |
| 21:09 | tomoj | keep around pre-compiled, then just call closure in post-build? |
| 21:09 | tomoj | ..or runtime? |
| 21:09 | brainproxy | dang, don't remember, and i eventually gave up on it |
| 21:10 | akhudek | I must be doing something wrong. Lein checkouts are not working for me, it's always using the version in my local maven repo instead of the src version. The correct src directory even comes first in the classpath. :-( |
| 21:11 | tomoj | hmm, you're supposed to have the checked out project installed (`lein install` inside that project) and to depend on the checked out version, I believe. doing that? |
| 21:12 | akhudek | yep, set the version of the checkout to 1.0.0-SNAPSHOT |
| 21:13 | tomoj | oh, I thought the classpath was bad |
| 21:13 | tomoj | so.. is the checkout a symlink? and if so it's not broken? |
| 21:13 | tomoj | that's the only problem I ever have :( |
| 21:14 | akhudek | yup, and lein classpath even looks right |
| 21:14 | akhudek | very confusing |
| 21:24 | seangrove | I can't seem to get cljs to spit out ("if (typeof X == 'undefined') {}") |
| 21:24 | seangrove | Should I be using js/*? |
| 21:25 | tomoj | (undefined? X) doesn't work? |
| 21:26 | seangrove | "Error evaluating:" (undefined? js/CustomEvents) :as "(void 0 === CustomEvents);\n"#<ReferenceError: CustomEvents is not defined> |
| 21:26 | tomoj | lol |
| 21:26 | tomoj | well, it's in strict mode, right? |
| 21:27 | tomoj | guess that's not why |
| 21:27 | seangrove | Yeah, I think only typeof will prevent an error when throwing an undefined variable at it |
| 21:27 | tomoj | but.. (undefined? js/window.CustomEvents) maybe? |
| 21:27 | seangrove | Ah, no, that works |
| 21:29 | seangrove | Very cool, thanks! |
| 21:29 | tomoj | course that will break if window isn't there.. |
| 21:33 | seangrove | For the extension I'm writing, it should always be there |
| 21:33 | seangrove | Wondering what I woudl do if it weren't there, but not going to worry much about it right now |
| 21:36 | tomoj | maybe goog.global |
| 21:36 | tomoj | unsure |
| 21:37 | seangrove | ok, and this feels super basic, but I can't find it by googling - how can I check if a variable is a function without resorting to (= variable (type #())) |
| 21:39 | akhudek | seangrove: http://clojuredocs.org/clojure_core/clojure.core/fn_q |
| 21:40 | seangrove | akhudek: Thank you |
| 21:59 | amalloy | don't forget ifn? |
| 22:15 | wingy | a keyword like: :802.11b is not idiomatic since the dot . is a namespace separator right? |
| 22:41 | amalloy | wingy: looks fine to me |
| 22:42 | wingy | amalloy: but isn't the dot . a ns separator? eg. foo.bar/baz |
| 22:42 | amalloy | so? |
| 22:42 | amalloy | / is the namespace separator, marking everything on the left as a namespace, and stuff on the right as a name |
| 22:42 | wingy | so . is a namespace divider? |
| 22:43 | amalloy | . is a period. just like anything else, what it means depends on context |
| 22:44 | amalloy | in a keyword that means X, the . means whatever makes sense in the context of an X |
| 22:46 | wingy | from where did i get that . is a namespace divider |
| 22:46 | wingy | hm |
| 22:46 | bbloom | wingy: java. |
| 22:46 | wingy | and datomic i think |
| 22:48 | bbloom | wingy: https://github.com/edn-format/edn#keywords <- says what's legal |
| 22:48 | bbloom | the definition refers back to the symbols section, one paragraph up |
| 22:48 | ivan | cool, . is allowed now |
| 22:50 | wingy | bbloom: cool |
| 22:50 | wingy | so . is just like any char |
| 22:50 | amalloy | ivan: now? |
| 22:50 | ivan | it was not allowed according to clojure.org reader docs, when I checked a few months ago |
| 22:50 | amalloy | wingy: well, it can't go at the start or end of symbols |
| 22:50 | bbloom | amalloy: well, it can: "If -, + or . are the first character, the second character must be non-numeric." |
| 22:51 | amalloy | ivan: rubbish. nobody updates those docs ever; if it's legal now i doubt it was ever different |
| 22:51 | ivan | well, I'm sure it always worked, just not officially |
| 22:54 | wingy | can someone create an OS with clojure |
| 22:55 | arrdem | no. |
| 22:55 | arrdem | you would need a microkernel of some kind implementing the Java runtime |
| 22:56 | arrdem | that you could build a clojure environment on top of... but without a Clojure to ASM compiler clojure all the way down is not possible. |
| 23:11 | mthvedt | microsoft built an experimental .net os |
| 23:13 | sshack | wingy: They already have. They're called app servers. |
| 23:14 | sshack | erm. Read that as an os for clojure. |
| 23:14 | sshack | arrdem: You could run on one of those old java chips. |
| 23:15 | sshack | or an arm chip with gazelle |
| 23:16 | sshack | Jazelle even. |
| 23:16 | dabd | I have 1million x 2 array of int dumped in binary format from a C program. Is there anyway I can slurp it efficiently to a clojure array? |
| 23:17 | arrdem | sshack: true and if I recall there is some IBM metal as well that provides a hardware JVM. |
| 23:17 | lucian | it'd be easier to retarget clojurescript to some form of asm |
| 23:17 | sshack | wingy: So, yes, you could in theory write an OS in/with clojure. But it would be a monumental amount of work. |
| 23:17 | lucian | or use the scheme->c one |
| 23:18 | sshack | You've still got to build a useful user land. |
| 23:18 | sshack | Reinvent emacs, vim and such. |
| 23:19 | arrdem | yeah and that's the real issue with all DIY OSs... Even Plan 9 for all its awesomeness doesn't feature what we would consider a "useful userland" anymore. |
| 23:19 | arrdem | no modern web browser or JS support at all... VIM equivalent and X equivalent, but entirely seperate environment. |
| 23:20 | bbloom | mthvedt: i assume you're referring to singularity. to call that "with .net" would be a stretch.... |
| 23:20 | sshack | That Beos reimplementation seems the closest to useful (besides linux), and even that is a stretch. it's a vicious circle. |
| 23:21 | bbloom | they had their own runtime and c# compiler… may have been a fork, but it was heavily modified |
| 23:23 | lucian | i think it's become too professional an endeavour to make an os |
| 23:23 | mthvedt | bbloom: i thought it was an ok stretch in response to the question |
| 23:24 | lucian | other than for academic purposes, there's little point in doing it |
| 23:24 | mthvedt | obviously if you make a 'clojure os' it won't be on the java executable |
| 23:24 | arrdem | lucian: I mean... for my OS class I kicked out about 50% of a working OS with a round robin scheduler and some other such serious failings, but it ran. |
| 23:25 | arrdem | the issue is that it's entirely useless to me. |
| 23:25 | bbloom | arrdem: did you learn something from it? |
| 23:25 | arrdem | bbloom: ooooh yeah |
| 23:25 | lucian | arrdem: sure, it's great for learning. but unlikely to be useful to anyone |
| 23:25 | bbloom | arrdem: then it wasn't entirely useless ;-) |
| 23:25 | arrdem | and I can drink black coffee now T_T |
| 23:26 | arrdem | bbloom: I meant useless with respect to me using it to be productive in any way. |
| 23:27 | sshack | It is fun though. |
| 23:27 | bbloom | arrdem: i was being facetious. i just think more people aught to try to write an OS, if just for fun |
| 23:27 | arrdem | I mean even MINIX. Sure I can grab Vim and Zsh and an X implementation, but why bother? |
| 23:27 | ToxicFrog | 90% - at least - of the stuff I write is useless. Who cares? It's fun. |
| 23:27 | arrdem | bbloom: hehe yeah it was a lot of fun and I'll probaby do another one at some point just because |
| 23:28 | bbloom | the parallels between an OS and a distributed system are stunningly deep |
| 23:28 | bbloom | all the time i see people trying to build this big complex systems with databases and queues and messaging and retries and time outs and all this jazz |
| 23:28 | bbloom | and they have no fucking clue how their process scheduler works |
| 23:28 | bbloom | it's amazing :-) |
| 23:29 | arrdem | bbloom: haha my OS prof is from IBM research and took the opportunity to pound scheduling and transactions into us |
| 23:30 | lucian | transactions are awesome |
| 23:30 | lucian | it's so sad many new systems suck so much |
| 23:30 | rbxbx | bbloom any texts you'd recommend to rectify said issue? |
| 23:30 | lucian | like mongodb, for example |
| 23:30 | bbloom | rbxbx: http://plan9.bell-labs.com/sources/plan9/sys/src/ |
| 23:30 | arrdem | ah mongodb... I mean I still use it... but yeah it throws transactions out the window. |
| 23:31 | bbloom | rbxbx: my attention span isn't long enough for books (usually) so i stick to short articles and then go RTF source |
| 23:31 | lucian | arrdem: and for no good reason, it sucks at being distributed too |
| 23:31 | arrdem | bbloom: gah plan 9... Y U NO BOOT IN VBOX |
| 23:32 | sshack | luvian: I wish you could up vote on irc right now. |
| 23:32 | arrdem | lucian: I just use it because I like not having a set schema and it was easy to set up |
| 23:32 | arrdem | sshack: use (inc) |
| 23:32 | rbxbx | bbloom fine and good, but.... it's unlikely that i'll undertake this. Bait me. Get me interested. Excited. Involved. |
| 23:32 | arrdem | (inc lucian) |
| 23:32 | lazybot | ⇒ 1 |
| 23:32 | sshack | (inc lucian) |
| 23:32 | lazybot | ⇒ 2 |
| 23:32 | sshack | Any chance your prof talked about as/400? |
| 23:33 | arrdem | sshack: no never heard of it. |
| 23:33 | bbloom | rbxbx: i've heard good things about http://www.amazon.com/dp/0136006639/?tag=stackoverfl08-20 |
| 23:33 | bbloom | a quick googling suggests Modern Operating Systems : Dragon Book :: OSes : Compilers |
| 23:33 | bbloom | dragon book: http://www.amazon.com/dp/0321486811/?tag=stackoverfl08-20 |
| 23:33 | sshack | arrdem: Had GC, a database, proper security and single level addressing (no memory/disk split) back in the 80's. |
| 23:34 | arrdem | ah the green dragon book.... |
| 23:34 | arrdem | sshack: yeah he mentioned that in passing, but not by name |
| 23:35 | sshack | Except for the fact that it's horribly archaic, and proprietary, in most respects it's still bleeding edge. |
| 23:35 | sshack | oh, and that most programs for it were written in cobol or rig |
| 23:35 | rbxbx | ahhh. bbloom this is a recommended text in (our?) corriculum. |
| 23:35 | sshack | s/rig/rpg/ |
| 23:35 | bbloom | *shrug* give it a try :-) |
| 23:36 | sshack | Oh the tanenbaum book! |
| 23:36 | sshack | and the dragon book. brings back memories. |
| 23:36 | rbxbx | bbloom it may (mayhap!) some day happne. |
| 23:36 | rbxbx | happen, also ;) |
| 23:37 | rbxbx | curriculum* gosh. Spelling is kindasortavaguely the most difficult. |
| 23:38 | arrdem | sshack: (with-devils-advocate the Knight machine had GC loooong before that) |
| 23:38 | sshack | arrdem: Lots of machines did. I was just pointing it out as an example. |
| 23:39 | sshack | It was also unusual for including so many advanced features. (in 1980 the OS took like 70meg. Which was a lot) |
| 23:40 | Raynes | Is codox 0.6.3 working for anyone? |
| 23:41 | Raynes | I'm getting Caused by: java.lang.AssertionError: Assert failed: (vector? (:dependencies project [])) for no apparent reason. |
| 23:51 | dabd | how do you turn this into a functional idiom (defn foo ... (if c (compute-some-value) (do (some-side-effect) (compute-some value))? |
| 23:51 | muhoo | is there anything that will template like stencil, but without HTML entity escaping? |
| 23:52 | TimMc | muhoo: An odd request. |
| 23:52 | Raynes | Damn it, codox. |
| 23:52 | Raynes | y u no generate my docs |
| 23:52 | dabd | i think i need to read up on monads |
| 23:53 | muhoo | TimMc: indeed. i'm an odd guy. |
| 23:53 | muhoo | but i need to generate emails. from a template. NOT html emails, regular, normal emails. |
| 23:53 | lucian | dabd: while they may be useful, they aren't really necessary. in clojure you can just name it foo! and make sure you're not doing it in a transaction |
| 23:54 | muhoo | stencil would be perfect, except for a call to html-escape buried deep, deep in the protocol implementation |
| 23:54 | arrdem | lucian: why keep -!s out of transactions? |
| 23:54 | arrdem | I would think you side effect IN transactions |
| 23:54 | TimMc | muhoo: Oh, right. Yeah, some templating libs allow you to specify your own escaping fns, which in this case would be identity. |
| 23:55 | TimMc | muhoo: clostache, perhaps? |
| 23:55 | muhoo | https://github.com/davidsantiago/stencil/blob/master/src/stencil/core.clj#L57 |
| 23:55 | lucian | arrdem: if by side-effect you mean mutation, then have a look at clojure's reference types. side-effect generally means things like io |
| 23:56 | dabd | clojure.algo.monads has nice tutorials |
| 23:57 | arrdem | lucian: so Atoms etc? |
| 23:57 | lucian | arrdem: yes. they are quite useful for keeping track of state safely |
| 23:57 | lucian | (in a concurrent program) |
| 23:57 | muhoo | TimMc: THANKS! {{&do-not-escape-me}}... buried in clostache docs |
| 23:58 | muhoo | stencil supports it, but clostache docs are much better, they both seem to support the same features tho |