2013-10-11
| 00:53 | noonian | what is the difference (to the code being evaluated) between including deps in project.clj and concating them to the deps in the project map before calling leiningen's eval-in-project for a leiningen plugin? |
| 00:56 | noonian | when i inject the deps, they are on the classpath, but pallet behaves slightly differently |
| 01:14 | noonian | nvm, it was just the order they were in |
| 02:11 | muhoo | wow, pedestal;s routing seems pretty nifty |
| 03:16 | muhoo | ugh tho, the interceptor stuff seems lifted from the android activity lifecycle. |
| 03:16 | H4ns | i wonder how this http://cljbin.com/paste/52579da5e4b01f853da4737b could be more idiomatic. i need to walk a tree and collect elements out of it. the remember function seems a little iffy |
| 03:18 | ordnungswidrig | H4ns: you could use (update-in results [:sets] (conj item)) |
| 03:19 | ordnungswidrig | e.g. (if-let [t (cond (seq? item) :seq (vector? item) :vec)] (update-in results [t] conj item) results) |
| 03:20 | H4ns | ordnungswidrig: that looks good, thanks |
| 03:20 | H4ns | ordnungswidrig: i'll not use seq? and vector? in the real code, i first want to get the tree walking and collecting sorted out in a minimal fashion |
| 03:21 | ordnungswidrig | http://cljbin.com/paste/52579efae4b01f853da4737c |
| 03:23 | H4ns | ordnungswidrig: and in the real code, i don't want the original items in the results, but something that is computed from the original item :) - but thanks, update-in looks cool. |
| 03:23 | muhoo | clojure.walk/postwalk too |
| 03:27 | H4ns | muhoo: if i understand it right, clojure.walk does not allow me to effectively flatten the structure |
| 03:30 | H4ns | muhoo: what i need, though, is a concise way to walk a tree and build up a differently structured result (in my case, i process a tree and extract various objects residing on different levels into a map type->object). "extract" means that a new object will be created from what is found in the tree |
| 03:51 | wunki | I often see in .cljs files the `:require [some.Lib :as var]` while the var is never used. Why is that? |
| 03:57 | ddellacosta | wunki: are you asking why it's not used, or what the :as syntax means? As to why it's not used, maybe people thought they needed it but didn't…can't think of another reason. It doesn't do anything in and of itself. |
| 03:58 | wunki | ddellacosta: no, I know why it's used. I just thought maybe I'm missing something, that it's required in clojurescript |
| 03:59 | ddellacosta | wunki: no, definitely not--you can require stuff in CLJS without using :as, certainly. It doesn't do anything unless you refer to a var with it |
| 03:59 | ddellacosta | wunki: again, I'm going to guess whoever loaded it up thought they needed it but didn't, in fact. |
| 04:00 | ddellacosta | I know I've done that a few times |
| 04:00 | wunki | ddellacosta: would this work: `:require [goog.Uri :as goog-uri]` -> `(goog-uri. ...)`? |
| 04:01 | ddellacosta | wunki: you know, I've tried that before with stuff in the goog namespace but it doesn't work, consistently, in my experience. I suspect it's something to do with it not being a CLJS namespace originally, but I haven't looked under the hood yet to figure it out |
| 04:02 | ddellacosta | wunki: but I do often do stuff like `:require [goog Uri]` and then you can do (Uri. ...) |
| 04:02 | wunki | ddellacosta: ok, clear, thanks for explaining :) |
| 04:02 | ddellacosta | wunki: or, [goog.fx.dom :refer [FadeOutAndHide FadeInAndShow]] |
| 04:02 | ddellacosta | wunki: sure, glad I could help! |
| 04:03 | wunki | ddellacosta: no I only need to get better at debugging .cljs |
| 04:03 | ddellacosta | wunki: what are your pain points with that? |
| 04:03 | wunki | ddellacosta: I'm working with Pedestal and I don't get to see the compilation (not done with cljsbuild cmd) |
| 04:04 | wunki | ddellacosta: so I often do something wrong and the .js is just empty |
| 04:04 | ddellacosta | wunki: ah, pedestal…sorry I can't help you there, I don't have much pedestal experience. :-( |
| 04:04 | wunki | ddellacosta: would be great if I could to C-k in Emacs with .cljs as I can with .clj |
| 04:04 | ddellacosta | wunki: does pedestal not use lein cljsbuild? Does it wrap it in its own compile command? |
| 04:05 | wunki | ddellacosta: it has it's own function which watches for changes and recompiles it |
| 04:05 | ddellacosta | wunki: ah, gotcha. |
| 04:05 | ddellacosta | hmm |
| 04:05 | ddellacosta | wunki: it's funny you say that, I was just asking xeqi this morning about his cljs/emacs workflow |
| 04:05 | ddellacosta | specifically in regards to testing |
| 04:05 | ddellacosta | hold on |
| 04:06 | ddellacosta | wunki: here, maybe this will help re: emacs + cljs |
| 04:06 | ddellacosta | wunki: https://www.refheap.com/19658 |
| 04:08 | wunki | ddellacosta: certainly, thanks! |
| 04:10 | wunki | ddellacosta: post above made me remember `(cljs-repl)` in Pedestal |
| 04:10 | wunki | ddellacosta: and with that I'm able to compile .cljs and I found my error :) |
| 04:11 | ddellacosta | wunki: oh, cool! Glad to hear it. :-) |
| 04:11 | wunki | ddellacosta: hats of to the guys from Pedestal, they have setup an awesome dev environment |
| 04:12 | ddellacosta | wunki: very cool, I really gotta dig into it again one of these days. |
| 04:13 | wunki | ddellacosta: it took me quite a while to "get" it. But I'm on my way now. Having the data flow on the whiteboard helps me :) |
| 04:14 | ddellacosta | wunki: I bet. Yah, I'm working with a codebase that came out well before Pedestal, so I can't really leverage the tech right now. But really need to look at it again one of these days and see how it works. |
| 04:14 | ddellacosta | sounds like it's got a lot of great features. |
| 04:17 | wunki | ddellacosta: certainly has, it's complicated, but with reasons. |
| 04:34 | ddellacosta | why am I getting "Uncaught Error: No protocol method PushbackReader.read-char defined for type string:" ? |
| 04:34 | ddellacosta | in CLJS |
| 04:36 | ddellacosta | never mind, my mistake |
| 04:37 | ddellacosta | pretty freaking obvious one looking at the error now…*sigh* |
| 05:08 | logic_prog | is there, anyone in this world, |
| 05:08 | logic_prog | an implementation of STLC (simply typed lambda calculus) in Clojure? |
| 05:15 | H4ns | i'm using tree-seq and reduce to walk a tree to extract data from it. sometimes, i need data from an outer node in an inner node (i.e. the id of a certain enclosing element when processing a deeply embedded child node). i can think of using a ref to maintain that context, but that somehow does not feel right. any suggestions? |
| 05:27 | zeroem | H4ns: pass a vector containing all nodes in the path from the root to the current child? |
| 05:27 | zeroem | ,(doc tree-seq) |
| 05:27 | clojurebot | "([branch? children root]); Returns a lazy sequence of the nodes in a tree, via a depth-first walk. branch? must be a fn of one arg that returns true if passed a node that can have children (but may not). children must be a fn of one arg that returns a sequence of the children. Will only be called on nodes for which branch? returns true. Root is the root node of the tree." |
| 05:27 | ljos | Is it possible to keep a reference to a part of a zip without copying the whole zip? Or rather, I have a n-ary tree and if I find an interesting node I want to store the location and go back to the node in O(1) instead of having to traverse the tree again. Right now I am using a zipper to traverse the tree and storing that zipper location, but it seems to me that when I store the location the whole zipper is copied. Because of the size of my trees t |
| 05:28 | H4ns | zeroem: you mean i can pass the context in the result and strip it later on? that could work. |
| 05:28 | zeroem | well, I was thinking about walking a tree in general |
| 05:28 | zeroem | looking at the tree-seq docs, it may not be possible with it alone |
| 05:29 | H4ns | zeroem: i was thinking about reduce's result argument |
| 05:29 | zeroem | tree-seq doesn't seem like it would be your thing |
| 05:29 | zeroem | generally, the "seq" functions (eg doseq) are used to force evaulation of a lazy seq |
| 05:31 | H4ns | zeroem: http://cljbin.com/paste/52579da5e4b01f853da4737b is what i basically use to traverse the tree and collect data out of it (except that i'm now using update-in in the remember fn) |
| 05:31 | zeroem | yeah, you could do a depth-first style reduce, just pass the desired context as part of the result |
| 05:32 | ljos | H4ns: if you are doing tree traversals there is both the clojure.walk and clojure.zip (clojure.data.zip). |
| 05:32 | H4ns | maybe i just need to write a plain recursive function to do it. :) |
| 05:33 | H4ns | ljos: clojure.walk does not really allow me to return a differently structured result, as far as i understand. i'll look at clojure.zip, thanks. |
| 05:35 | ljos | H4ans: clojure.walk is mostly for transforming the nodes in place, that is correct. clojure.zip on the other hand can both replace, remove and insert new nodes. |
| 05:37 | H4ns | ljos: thanks, i'll have look |
| 06:08 | tangrammer | Hi folks |
| 06:08 | tangrammer | someone knows why is in https://github.com/swannodette/swannodette.github.com |
| 06:09 | tangrammer | (a repo containing a few clojurescript demos) |
| 06:09 | tangrammer | appear in the file blog.utils.node this line (def fs (js/require "fs")) |
| 06:10 | tangrammer | I'm meaning that I don't understand why in a browser-javascript we try to load a nodejs dependency 'fs' |
| 06:21 | katratxo | tangrammer: perhaps is not a "browser-javascript" example, but a node one |
| 06:31 | bordatoue | anyone got suggestions on how to implement the following, say if have an argument "= hello world" , then I need to output a function such that (fn [a b] (= a b)); simillary if the argument is "= one two three" ==> (fn [a b c] (= a b c)) ? Any suggestions on this please |
| 06:37 | TEttinger | bordatoue, so you don't want to compare one two three, you want to create a fn with the same number of args? |
| 06:38 | bordatoue | TEttinger, basically one two and three are arguments to a fn |
| 06:39 | bordatoue | TEttinger, so i need to creat a func that takes three arguments based on the input |
| 06:39 | TEttinger | can it be anything, or does it have to be =? |
| 06:40 | bordatoue | TEttinger, say if the string "= a b c" , the first portion of the string the operator |
| 06:41 | bordatoue | TEttinger and the rest is the arguments to the operator , which then output as a func |
| 06:42 | bordatoue | TEttinger, so for example "= a b" ==> (fn [a b] (= a b)) |
| 06:42 | TEttinger | yep |
| 06:42 | TEttinger | trying to figure out how to solve it |
| 06:43 | bordatoue | TEttinger, do we need to use macros to solve this |
| 06:49 | tangrammer | katratxo: sorry for the delay (i went out for a coffee) , the same thing (node example) I was thinking too, but the problem is when you try to use the code in your browser..... anyway thanks a lot for your comments |
| 06:55 | TEttinger | bordatoue: |
| 06:55 | TEttinger | (let [tst "< one two three" sp (clojure.string/split tst #"\s+")] ((fn [& args] (when (= (count args) (dec (count sp))) (eval (read-string (str "(" (first sp) " " (clojure.string/join " " args) ")"))))) 1 2 3)) |
| 06:55 | TEttinger | it won't run here, eval is forbidden here |
| 06:55 | TEttinger | so in final form, |
| 06:58 | TEttinger | (defn fn-from-code [code] (let [sp (clojure.string/split code #"\s+")] (fn [& args] (when (= (count args) (dec (count sp))) (eval (read-string (str "(" (first sp) " " (clojure.string/join " " args) ")"))))))) |
| 06:58 | TEttinger | it's a cheap hack, eval is frowned upon, but it avoids macros |
| 07:01 | TEttinger | bordatoue, you there? |
| 07:08 | chillitom | anyone here familiar with how to connect LightTable's REPL to a remote service? |
| 07:08 | clojurebot | Gabh mo leithscéal? |
| 07:16 | dublindan | Hey, does anyone know how I can connect to an nREPL running on amazon ec2? I'm using vim-fireplace and I tried to port forward to ec2 using ssh but vim-fireplace seems to crash when I try to evaluate any code |
| 07:18 | bordatoue | TEttinger, thanks , Sorry for the delay; I'm looking at it |
| 07:18 | llasram | dublindan: Try using the `lein repl` nREPL client |
| 07:18 | llasram | (just for testing, at least) |
| 07:24 | dublindan | llasram: good idea, I'll give it a try |
| 07:26 | sm0ke | why vectors are not seq, but still have rest/first defined? ##(if (not (seq? [1 2 3])) (rest [1 2 3])) |
| 07:27 | sm0ke | ,(print :all-ok?) |
| 07:27 | clojurebot | :all-ok? |
| 07:27 | bordatoue | TEttinger, wow, great. I need to study it. It works with numbers, |
| 07:27 | sm0ke | ,(if (not (seq? [1 2 3])) (rest [1 2 3])) |
| 07:27 | clojurebot | (2 3) |
| 07:28 | sm0ke | hmm i guesshmm i guess first/rest works on everything |
| 07:29 | sm0ke | weird typo |
| 07:30 | llasram | sm0ke: Because those functions work on things which are `Seqable`, not just directly `ISeq`s |
| 07:31 | llasram | Well, really anything on which `seq` can be called, which is broader than just things implementing `Seqable` |
| 07:32 | sm0ke | whats protocol? |
| 07:33 | llasram | The things defined by `defprotocol`? |
| 07:33 | sm0ke | it looks to me a bunch of declarations |
| 07:34 | sm0ke | whats that used for |
| 07:34 | sm0ke | aha interfaces of clojure world |
| 07:35 | sm0ke | odd though..considering that clojure isnt oo |
| 07:35 | llasram | Kind of. The ability to extend them to existing types makes them rather more powerful, while the ability to `reify` anonymous implementations gives them some different use cases from multimethods |
| 07:55 | sm0ke | why is cons on vector linear time? |
| 07:55 | llasram | sm0ke: What do you mean? `cons` is constant time |
| 07:55 | sm0ke | llasram: for lists not vectors |
| 07:56 | llasram | No -- period |
| 07:56 | Bronsa | cons is the same for lists and vectors and every other data structure |
| 07:56 | TEttinger | bordatoue, it will fail on strings due to how it constructs the code for eval -- ((fn-from-code "clojure.string/join a b") " " ["whee" "hooray"]) fails |
| 07:56 | sm0ke | wow really |
| 07:57 | sm0ke | so clojure vector is a finger tree internally? |
| 07:57 | TEttinger | you might be thinking of conj |
| 07:57 | sm0ke | conj is constant time operation of vectors also right then? |
| 07:58 | sm0ke | i can both append and prepend in constant time to a vector? |
| 07:58 | llasram | conj for vectors is O(log32(n)) |
| 07:58 | sm0ke | llasram: OK i know little that clojure data structures are internally tree.so for some time assume logs are near constant |
| 07:59 | Bronsa | sm0ke: cons returns a Cons, not the original data-structure |
| 07:59 | llasram | sm0ke: But `cons` on a vector doesn't return a vector -- it returns a Cons. |
| 07:59 | llasram | Bronsa: jinx! |
| 07:59 | Bronsa | hah |
| 07:59 | sm0ke | so is doing a (vector) on Cons constly? |
| 08:00 | sm0ke | costly* |
| 08:00 | sm0ke | lol i coined a new term *constly* |
| 08:00 | llasram | That actually is linear time |
| 08:01 | sm0ke | why is that? |
| 08:02 | sm0ke | i mean which tree operation take linear time? |
| 08:02 | sm0ke | given its balanced |
| 08:02 | sm0ke | most probly clojure must be using rb trees |
| 08:02 | llasram | None. Turning a Cons or general seq into a vector is linear time because Conses and general seqs are essentially singly-linked listeds |
| 08:03 | llasram | So you need to traverse the entire list in linear time to turn it into a vector |
| 08:04 | sm0ke | aha ok cons..a head and a tail..essentially a linked list |
| 08:04 | llasram | Exactly |
| 08:05 | sm0ke | thanks |
| 08:11 | nickZury | How does Shen Compare to Clojure? |
| 08:12 | nickZury | Anybody used shen? |
| 08:13 | nickZury | ? |
| 08:13 | llasram | nickZury: I glanced at it, but the licensing seemed so crazy that I didn't get far |
| 08:14 | nickZury | hmmm.. |
| 08:14 | sm0ke | i knew it..i was not the only one..look at Java dislikes https://news.ycombinator.com/item?id=6527104 |
| 08:15 | nickZury | And one more question - How about R7RS-large? |
| 08:18 | nickZury | ? |
| 08:20 | TEttinger | nickZury, clojure is a lot more mature than Shen. it also has an actual development community to answer questions... |
| 08:20 | TEttinger | I don't know about scheme versions |
| 08:21 | TEttinger | clojure can leverage the JVM and all the libs on it, which is a huge benefit |
| 08:26 | nickZury | TEttinger: It is said that R7RS-large is larger than Common Lisp, targetted for practical programming... |
| 08:27 | TEttinger | clojure's large enough that I haven't explored all the core features in about a year of usage. I wouldn't worry about that. |
| 08:28 | TEttinger | I still can definitely get by without macros... |
| 08:28 | TEttinger | clojure's pretty much become my go-to scripting language when I need to manipulate data |
| 08:28 | TEttinger | or all sorts of things |
| 08:29 | TEttinger | I have a bitmap font maker (takes a TTF, produces a PNG) in clojure, using java's font API |
| 08:30 | AimHere | I was going to say that clojure is annoying to make standalone scripts with, but it'd be less annoying than Java |
| 08:30 | TEttinger | I sometimes use the REPL and just paste in the script |
| 08:31 | AimHere | Yeah. Just stay in the repl. Sod the rest of the world. |
| 08:38 | `cbp | never turn off omacs never have to restart repl :-) |
| 08:57 | hungryblank | hi, I took a tar.gz of /var/lib one of my production nodes and try to restore on my local machine |
| 08:57 | llasram | Cool story, bro |
| 08:57 | hungryblank | feels liek i'm close to done but getting a bunch of not allocating, number_of_allocated_shards_found [1], required_number [2] |
| 08:58 | llasram | hungryblank: You may not be in the channel you think |
| 08:58 | clojurebot | Huh? |
| 08:58 | hungryblank | oh |
| 08:58 | hungryblank | sorry. |
| 08:58 | llasram | np :-) |
| 08:58 | llasram | Happens to us all |
| 09:07 | sm0ke | ,(conjuring) |
| 09:07 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: conjuring in this context, compiling:(NO_SOURCE_PATH:0:0)> |
| 09:07 | sm0ke | haha now thats some horror |
| 10:04 | john2x | how would I design an API wrapper function, which takes a session object (in addition to whatever params the API takes). But the session expires after some time, so I made the wrapper function automatically retry the call with a new session. What's an idiomatic way to return the new session? [session response]? {:session session :rest :of :the :response}? |
| 10:05 | john2x | but then every time the function is used, I'll have to deal with the returned session. Which sounds like a mess. Would a dynamic var for session be ok? |
| 10:06 | weavejester_ | Does anyone happen to know of any talks or quotes on reliability in programming? |
| 10:07 | weavejester_ | I'm looking for something that relates constraints, like types, immutability, etc, with reliability/correctness. |
| 10:11 | jcromartie_ | Is it good practice to name Clojure namespaces after Java package conventions? But it seems kind of unclojurely to have namespaces like org.whatever.division.subproject.api.core |
| 10:11 | jcromartie_ | also, "unclojurely" needs to become a thing |
| 10:13 | jcromartie_ | drat, it's already been coined http://www.coderanch.com/t/546519/clojure/Exceptions-Clojure |
| 10:14 | AimHere | Unidiomatic tends to be the word that's used anyways |
| 10:14 | gfredericks | So leiningen merges data_readers.clj now? does that mean it's okay for libs to have them? |
| 10:15 | llasram | I'm never sure why people would have said it wasn't okay for libs to have them, since Clojure will find and merge all instances of it on the classpath |
| 10:16 | pjstadig | llasram: true, but i think the problem is uberjars |
| 10:16 | llasram | Well, in 1.5+ at least -- 1.4 had that bug where duplicates would "conflict" even if they had the same value |
| 10:16 | llasram | pjstadig: Yeah, but you would need to provide you own in that case prior to lein 2.3.3 anyway, which would completely override any libarry-provided ones |
| 10:17 | echo-area | Adding a directory into class path results in this error: http://pastebin.com/AYqzXy6Q |
| 10:17 | echo-area | What could be the reason? |
| 10:18 | echo-area | (The error is "java.lang.IllegalArgumentException: No matching method: meta") |
| 10:18 | echo-area | Removing that directory then java could start run |
| 10:18 | echo-area | That directory contains only a single .class file |
| 10:21 | gfredericks | okay I am now pro libs-with-data-readers-file |
| 10:22 | gfredericks | llasram: what is reproducibility wrt user.clj? |
| 10:23 | stuartsierra | Latest commits on nrepl.el (after 0.2.0) break nrepl-jack-in for me. |
| 10:23 | llasram | gfredericks: You might end up with code which only works with particular things in your personal `user.clj`? |
| 10:24 | gfredericks | llasram: I'm not talking about a personal user.clj; in this case it'd be lib-specific |
| 10:24 | llasram | Ah |
| 10:24 | llasram | Hmm. |
| 10:24 | gfredericks | my assumption was that pjstadig was using data_readers.clj _just_ for the evaluation, not for an actual data reader |
| 10:24 | llasram | Right. |
| 10:24 | llasram | Can you have multiple user.clj's though? |
| 10:24 | pjstadig | no |
| 10:24 | gfredericks | well you could merge with file concatenation :P |
| 10:25 | gfredericks | I guess that breaks when _not_ uberjaring |
| 10:25 | llasram | Yeah |
| 10:25 | pjstadig | clojure only finds one user.clj on the classpath and evaluates it, so it doesn't compose |
| 10:25 | pjstadig | data_readers for my purposes at least composes (except for uber jars or lein trying to merge them) |
| 10:25 | gfredericks | so if that were "fixed", would we all switch our signs to be pro libs-with-user-files? |
| 10:26 | llasram | My personal curmudgeon looks with suspicion upon automatic code-loading |
| 10:26 | gfredericks | (i.e., if clojure eval'd all of them; or alternately evaled all #"user-\d+.clj" in alphabetical order) |
| 10:26 | llasram | I'd need to contemplate the state my own sign :-) |
| 10:27 | pjstadig | i don't think i'd be in favor of such a thing |
| 10:27 | stuartsierra | No one should ever put user.clj in a library release. |
| 10:27 | gfredericks | stuartsierra: the reasoning behind that statement is what I'm trying to uncover |
| 10:27 | stuartsierra | It's called "user.clj" for a reason. :P |
| 10:28 | stuartsierra | If I'm using your library, I do not want you to mess with my development environment. |
| 10:28 | stuartsierra | Ever. |
| 10:29 | gfredericks | stuartsierra: well in this case we're talking about a library whose sole purpose is to do that |
| 10:29 | gfredericks | so there shouldn't be any surprises |
| 10:29 | stuartsierra | gfredericks: Oh, I missed that bit of the discussion. But why would you ever want to do that? |
| 10:29 | gfredericks | pjstadig: I'm now confused about what this is accomplishing exactly -- you're deffing some vars in what namespace? |
| 10:30 | pjstadig | gfredericks: it drops vars into the clojure.core namespace during the data_reader initialization phase, by the time you come out of that, the vars from the pjstadig.scope namespace are magically available everywhere by virtue of the fact that they have been inserted into clojure.core |
| 10:31 | pjstadig | it's basically a monkey patch of clojure.core |
| 10:31 | stuartsierra | Ack! |
| 10:31 | pjstadig | hehe |
| 10:31 | gfredericks | ah right; not sure how I doubted that. |
| 10:32 | pjstadig | it's optional, you have to depend on the scopes-magic artifact |
| 10:32 | bordatoue | is there a way to use doseq and maintain state , for example i want to iterate over a seq and store it in a vector , then when the iteration is completed return the vector |
| 10:32 | gfredericks | pjstadig: is there some reason I'm missing why people would get tired of requiring the scopes functions/macros but not other libs? |
| 10:32 | pjstadig | otherwise you just require and use pjstadig.scopes like you would anything else |
| 10:32 | gfredericks | i.e., is scopes special in some way? |
| 10:32 | stuartsierra | bordatoue: Use `reduce` |
| 10:33 | pjstadig | gfredericks: erm, not particularly, it's a generalization of with-open which is in clojure.core |
| 10:34 | pjstadig | the point is it does scopes |
| 10:34 | gfredericks | pjstadig: okay; I think I will erect my sign to be "against" this. The only use I can imagine is an alternative to the ns macro |
| 10:34 | pjstadig | scope-magic is just a distraction |
| 10:35 | pjstadig | gfredericks: that's why its a separate and optional dependency :) don't use it if you're against it |
| 10:37 | bordatoue | stuartsierra: thanks, but when using reduce and map is there a way I can be the variables within the fn visible. basically if I have a fn (fn [a] (do something a) (get my-map a)) ; here how can i make my-map visible within the fn, without making it global |
| 10:37 | gfredericks | pjstadig: indeed; I'm curious about scopes proper. I've scanned the readme a couple times and haven't yet wrapped my head around what problem it's solving |
| 10:37 | pjstadig | gfredericks: does this help at all? https://groups.google.com/d/msg/clojure/qPUd3AEVxT8/W2_FaCyjj_wJ |
| 10:38 | gfredericks | bordatoue: the function takes two args |
| 10:39 | gfredericks | pjstadig: these concepts take concentration |
| 10:39 | mdrogalis | tbaldridge: I read the Eff paper. Pretty neat stuff. |
| 10:39 | mdrogalis | Really similar to where I landed. |
| 10:41 | tbaldridge | mdrogalis: yeah, it's cool stuff, I'm interested in seeing where it can be taken in more mainstream languages. |
| 10:42 | bordatoue | gfredericks: says its a map, with a fn (map (fn[x] (get my-map x)) [1 2 3]) I want to make my-map visible in the annonymous fn with argument x, is it possible ? |
| 10:42 | mdrogalis | I got lost in the second half, but the first half about effects made a lot of sense. |
| 10:43 | tbaldridge | mdrogalis: yeah, it takes awhile to digest. :-) |
| 10:44 | mdrogalis | tbaldridge: Still digesting deep walking macros. :P |
| 10:51 | gfredericks | bordatoue: ##(reduce (fn [my-map x] (print x) (assoc my-map x x)) {} [1 2 3]) |
| 10:51 | gfredericks | ,(reduce (fn [my-map x] (print x) (assoc my-map x x)) {} [1 2 3]) |
| 10:51 | clojurebot | 123{3 3, 2 2, 1 1} |
| 10:51 | gfredericks | bordatoue: your code examples aren't making much sense to me compared to your original question, but ^ that's an example use of reduce |
| 10:51 | gfredericks | with side effects |
| 10:52 | gfredericks | ,(reduce (fn [v x] (print x) (conj v x)) ["things i printed:"] [4 5 6]) |
| 10:52 | clojurebot | 456["things i printed:" 4 5 6] |
| 10:55 | bordatoue | gfredericks: I wanted to know if I could increase the scope of a variable definied in fn within map or reduce ; (map (fn [x] (get my-map x)) [1 2 3]) ; in this example I want to make the scope of my-map visible in the annonymous function, without passing it as an agrument |
| 10:57 | pjstadig | bordatoue: the function passed to map is a closure so you can do something like (let [my-map {}] (map (fn [x] (get my-map x)) [1 2 3])) |
| 10:58 | bordatoue | pjstadig: Thanks very much |
| 11:10 | gfredericks | pjstadig: will this make dealing with streaming database results less callbacky? |
| 11:11 | pjstadig | gfredericks: not sure what you mean by callbacky |
| 11:12 | gfredericks | e.g., with latest java.jdbc I must pass in a :result-set-fn to query |
| 11:12 | gfredericks | all javascripty asyncy style |
| 11:12 | gfredericks | so that it knows when it can close the result set |
| 11:12 | gfredericks | same as old API (with-query-results) except that was macro-based |
| 11:14 | CapnLexii | I have a question about interop best practices. It's technically a cljs project, but the question is fundamentally the same for clj or guile or what have you |
| 11:14 | mdrogalis | Fire away, CapnLexii |
| 11:15 | CapnLexii | The question is: for working with various libraries/APIs that require side-effectful function calls (in this case, WebGL), the way one handles such a situation in the native language (in this case JS) is to create a set of "init" functions that perform these stateful API calls |
| 11:15 | CapnLexii | it feels very icky to define analogous functions in clj |
| 11:15 | CapnLexii | But at the same time, you don't want to have all those api calls sitting around at the top level when they could be hidden away |
| 11:15 | llasram | pjstadig: Would you be open to a PR which made `scopes` work in terms of a protocol which is by default implemented for `Closeable` and `AutoCloseable`-when-available? |
| 11:16 | mdrogalis | CapnLexii: It depends on how you handle this, but you're not going to escape side-effects. |
| 11:16 | pjstadig | llasram: sure |
| 11:16 | mdrogalis | It's just a reality, regardless of language. |
| 11:16 | CapnLexii | mdrogalis: Certainly not |
| 11:17 | pjstadig | gfredericks: i guess i don't know enough about the latest changes in java.jdbc to comment |
| 11:17 | mdrogalis | CapnLexii: That being said, I try to handle it on a case-by-case basis. |
| 11:17 | gfredericks | pjstadig: same question for the classic version |
| 11:17 | mdrogalis | For example, I have a Cljs project where I need to open a websocket. I just do it in an init function. *Shrug* |
| 11:18 | CapnLexii | mdrogalis: Aha, I see. I'm trying to make a cljs WebGL library a la Three.js, so I also have to worry about what the user experience is like |
| 11:19 | llasram | pjstadig: Oh, hmm, uses other Java 7 features |
| 11:19 | mdrogalis | CapnLexii: Understandable. What concerns you? |
| 11:19 | CapnLexii | It doesn't seem to write to give other clojurians functions to call that don't return anything; but, I wouldn't know where else to put the init code |
| 11:19 | mdrogalis | CapnLexii: println? :) |
| 11:19 | mdrogalis | Always returns nil. |
| 11:20 | mdrogalis | Make it obvious with an exclamation point. init! |
| 11:20 | CapnLexii | mdrogalis: Haha fair enough. I like the bang idea. |
| 11:20 | coventry2 | mdrogalis, tbaldridge: What is the eff paper? |
| 11:21 | mdrogalis | coventry2: http://math.andrej.com/wp-content/uploads/2012/03/eff.pdf |
| 11:22 | mdrogalis | Language around algebraic side effects. It |
| 11:22 | mdrogalis | 's interesting* |
| 11:22 | tbaldridge | coventry2: it's a way of getting all the good parts of monads, without all the bad parts :-) |
| 11:22 | pjstadig | gfredericks: in the case of with-query-results it does three things: create a resource, bind a name in a lexical scope, and manage a resource (i.e. close it when you're "done" where "done" means you exit the dynamic scope of the with-query-results). |
| 11:23 | coventry2 | Thanks, guys. |
| 11:23 | mdrogalis | If a monad had a physical representation, tbaldridge would have a picture of it on a dart board. |
| 11:23 | pjstadig | gfredericks: with scopes you would manage a resource using with-resource-scope and you would register a resource for management using scoped! (within the dynamic extent of a with-resource-scope) and those can be in separate places (lexically speaking) |
| 11:24 | tbaldridge | mdrogalis: I'm not that anti-monad. They're actually pretty cool in languages like haskell. |
| 11:25 | mdrogalis | Heh, alright. I recall some 'rid the world of monads' talk a few weeks ago. :) |
| 11:30 | pjstadig | there's (i think) an analagous concept in memory management called region based memory management |
| 12:13 | gfredericks | pjstadig: I believe this would help; at least if we patch java.jdbc to allow returning a lazy seq and a close function |
| 12:13 | gfredericks | pjstadig: so if I'm running a ring server, I'd stick with-resource-scope in my middleware and then just register resources willy-nilly? |
| 12:15 | dnolen | eric_normand: btw, your patch, did you actually change the api at all? |
| 12:15 | jcromartie_ | defmutli ... |
| 12:15 | jcromartie_ | http://upload.wikimedia.org/wikipedia/en/2/21/Muttley-picture.gif |
| 12:15 | muhoo | has anyone gotten pedestal and friend to play togethr nicely? |
| 12:16 | pjstadig | gfredericks: you'd want to create scopes with reasonable extent; one way to do that might be to create a scope for each request if you're building a server type application |
| 12:16 | pjstadig | gfredericks: you could also use scopes (in addition to closing files) to delete temporary files that are created as a part of processing a request |
| 12:16 | eric_normand | dnolen: hmm, I don't think so |
| 12:17 | eric_normand | dnolen: what do you mean by "the api"? |
| 12:17 | gfredericks | pjstadig: "create a scope for each request" is what I was suggesting by middleware I think |
| 12:17 | pjstadig | yeah |
| 12:17 | dnolen | eric_normand: like did you actually change what a function takes and returns? |
| 12:17 | eric_normand | dnolen: yes |
| 12:17 | gfredericks | pjstadig: oh there's still the problem of inputstreams and ring |
| 12:17 | stuartsierra | muhoo: Chas Emerick and Gabriel Horner recently did some work on Friend & Pedestal. |
| 12:17 | stuartsierra | I don't know the details. |
| 12:18 | dnolen | eric_normand: is it possible to get the desired behavior w/o doing that? |
| 12:18 | mdrogalis | stuartsierra: Did you end up hurdling over your Lamina problem? |
| 12:18 | eric_normand | dnolen: yes |
| 12:18 | muhoo | stuartsierra: thanks |
| 12:18 | dnolen | eric_normand: lets do that instead and I'll apply it |
| 12:18 | eric_normand | dnolen: give me a few minutes |
| 12:18 | stuartsierra | mdrogalis: Yes, by updating to latest version. |
| 12:18 | dnolen | eric_normand: thanks |
| 12:19 | mdrogalis | stuartsierra: Good to know. |
| 12:19 | gfredericks | pjstadig: with some sort of request-closed callback wrt ring this could be super slick |
| 12:29 | muhoo | update: it looks like friend as of about 4 months ago 0.2.0 supports pedestal |
| 12:36 | dnolen | jonasen: could we add tools.macro to list of cljsfiddle libs? |
| 12:36 | jonasen | dnolen: does it support clojurescript? I didn't know that |
| 12:36 | dnolen | jonasen: it's just a macro lib, works great |
| 12:38 | jonasen | dnolen: I'll add it then :) I'll test the new cljs release when it reaches maven central and then I'll push a new version |
| 12:38 | dnolen | jonasen: 1934 already landed in maven central |
| 12:38 | muhoo | am i the only one who finds the convention of side-effecting function naming so! freakin! alarming! ? |
| 12:38 | jonasen | great |
| 12:40 | technomancy | side effects are srsbsns |
| 12:44 | muhoo | hmm,, i guess making the names annoying to read is one way to discourage their use |
| 12:44 | Foxboron | side effects can burn down your house. |
| 12:44 | Foxboron | or does it? You will never know. |
| 12:47 | rasmusto | programming with side effects is fn! |
| 12:51 | eric_normand | dnolen: a little update: I am having trouble compiling source maps using a clean master! |
| 12:51 | dnolen | eric_normand: what's the problem? |
| 12:52 | eric_normand | dnolen: null pointer exception |
| 12:52 | dnolen | eric_normand: file and line number? |
| 12:52 | eric_normand | closure.clj:729 cljs.closure/optimize[fn] |
| 12:53 | dnolen | eric_normand: I think you have the wrong version of ClojureScript, if you look at closure.clj on master, not possible |
| 12:54 | eric_normand | dnolen: I am starting over from a fresh master again. one sec |
| 12:55 | dnolen | eric_normand: I just tried core.async with 1934, works for me. |
| 12:55 | eric_normand | dnolen: is there a particular level of optimization I have to use? |
| 12:56 | dnolen | eric_normand: whitespace, simple, advanced |
| 12:56 | dnolen | eric_normand: we don't support source maps for any other level yet |
| 12:56 | dnolen | heh, which is just :none |
| 12:56 | eric_normand | dnolen: trying with advanced now |
| 12:56 | eric_normand | dnolen: ok, worked with advanced |
| 12:56 | eric_normand | dnolen: now I will try my patch |
| 12:56 | dnolen | eric_normand: what did you try :simple? |
| 12:57 | eric_normand | dnolen: before I had nothing set for :optimizations |
| 12:57 | dnolen | eric_normand: oh yeah ok, that won't work |
| 13:00 | eric_normand | dnolen: cool, it works! |
| 13:00 | eric_normand | dnolen: shows up in chrome |
| 13:01 | eric_normand | dnolen: I have attached another patch to the issue |
| 13:02 | eric_normand | dnolen: http://dev.clojure.org/jira/browse/CLJS-591 |
| 13:03 | eric_normand | dnolen: thanks for the help; let me know if you need anything |
| 13:06 | dnolen | eric_normand: could not apply that patch with git am |
| 13:07 | dnolen | eric_normand: better for the patch to have attribution, and commit message w/ ticket number etc. |
| 13:07 | dnolen | eric_normand: I refer to this http://ariejan.net/2009/10/26/how-to-create-and-apply-a-patch-with-git/ |
| 13:11 | eric_normand | dnolen: I attached another patch |
| 13:11 | eric_normand | dnolen: using the guidelines from the post you linked to |
| 13:12 | eric_normand | dnolen: source-map2.patch |
| 13:25 | dnolen | eric_normand: applied to master thanks |
| 13:26 | eric_normand | dnolen: you're welcome |
| 13:32 | bitemyapp | rkneufeld: haha, CA strikes back! |
| 13:39 | justin_smith | muhoo: if it has side effects that are more serious, any number of ! tokens should be added to the name, for the super serious, throw in some 1 too: (format-hard-drive!!!11!!11!) |
| 13:39 | mtp | how about some leading underscores while we're at it |
| 13:40 | justin_smith | hmm, _ indicates "this has to be there for implementation reasons" right? so the number of _ before the symbol should indicate how low it is on the implementation stack |
| 13:40 | mtp | _____format-hard-drive!!!!one! |
| 13:42 | justin_smith | (.var ____RT "clojure.core" "___*allow-unresovled-vars*") |
| 13:43 | justin_smith | or maybe that should have been ____RT/var |
| 13:44 | jonasen | dnolen: http://cljsfiddle.net/fiddle/jonase.tools-macro-test |
| 14:05 | rkneufeld | bitemyapp: Yeah I was none too pleased about that. The upside is everyone gets a hard-copy of the book |
| 14:08 | bitemyapp | rkneufeld: also was filename ".license_assignments/.md" a typo? is my name supposed to come before the .md? |
| 14:08 | rkneufeld | bitemyapp: probably was supposed to be <your-github-handle>.md or the like. |
| 14:09 | bitemyapp | gotcha. Thanks. |
| 14:34 | muhoo | justin_smith: what is this, the linux kernel? |
| 14:43 | gfredericks | so if you have a pretty vanilla clojure lib that is not really sensitive to clojure versioning, is it important what's listed in the project.clj? e.g., if it currently says 1.3, is there much accomplished by switching it to 1.5? |
| 14:44 | technomancy | gfredericks: I'm tempted to suggest leaving it out entirely |
| 14:44 | technomancy | but I haven't really thought through the implications |
| 14:47 | gfredericks | technomancy: that approach would make it a lot easier to use a forked clojure? |
| 14:47 | technomancy | if everyone did it, sure |
| 14:48 | gfredericks | so currently if I want to use [com.gfredericks/clojure "1.5.1-NIFTY"], I can suppress org.clojure/clojure in my project.clj and that's the way to do it? |
| 14:48 | bitemyapp | "1.5.1-GENETICALLY-SUPERIOR-BRO" |
| 14:49 | technomancy | practically speaking you need a top-level exclusion currently |
| 14:49 | bitemyapp | gfredericks: ^^ spooky |
| 14:49 | gfredericks | [com.gfredericks/lava "1.5.1"] |
| 14:49 | technomancy | but if only a few libs depend on clojure then you could use scattered targeted exclusions |
| 14:49 | technomancy | heh |
| 14:49 | technomancy | "1.5.1-COLLECTORS-EDITION" |
| 14:50 | bitemyapp | I kinda hate that the only message he saw was me being stupid -_-' |
| 14:50 | hiredman | cut a limited edition, delete it from clojars tomorrow |
| 14:50 | bitemyapp | if he saw anything |
| 14:52 | gfredericks | hiredman: we all get to run our apps on it for a day just for the thrill of it, then backgrade |
| 14:52 | mdrogalis | bitemyapp: Ahahahah. |
| 14:52 | bitemyapp | seangrov1: I'm cutting a Korma release soon, any requests before I do so? |
| 14:52 | bitemyapp | seangrov1: the release will include your PR that I merged. |
| 14:52 | mdrogalis | Ah, that was a good laugh. |
| 14:52 | hiredman | gfredericks: have it popup a dialog asking for an activation key |
| 14:52 | bitemyapp | mdrogalis: I'm glad you enjoy my shame. |
| 14:53 | mdrogalis | bitemyapp: Someone has to. Can't let it go to waste. |
| 14:53 | bitemyapp | The Ecology of Embarrassment |
| 14:55 | mdrogalis | Man, its been raining all week. x.x |
| 14:58 | bitemyapp | mdrogalis: 60F and slightly overcast here. |
| 14:58 | bitemyapp | It doesn't really rain much in this area. |
| 14:58 | mdrogalis | SF, IIRC? |
| 14:58 | bitemyapp | mdrogalis: yeah |
| 14:58 | mdrogalis | Fun place. |
| 14:59 | bitemyapp | I don't really experience that side of it. I'd like to some day. |
| 14:59 | bitemyapp | I actually really don't like living here and am waiting for my first opportunity to leave. |
| 14:59 | bitemyapp | Which seems a waste, but I don't really know what I'm supposed to enjoy about SF. |
| 15:00 | bitemyapp | Other than the career opportunities. |
| 15:00 | bitemyapp | And cool programmers/startup people. |
| 15:00 | mdrogalis | bitemyapp: Definitely not for everyone, nothing wrong with that. |
| 15:00 | mdrogalis | Where do you want to be? |
| 15:00 | coventry | _A Dirty Job_ made it *sound* nice. |
| 15:01 | bitemyapp | mdrogalis: I miss the nice people back home in Ohio, but I'd rather not live in Ohio. I've heard good things about Austin. I'm going to stay in SF for quite awhile though. Possibly the next decade. |
| 15:01 | mdrogalis | bitemyapp: That's a long time to spend in a city you don't like. |
| 15:02 | bitemyapp | mdrogalis: I don't make my decisions in a way that is heavily weighted by comfort or contentment. |
| 15:02 | mdrogalis | To each his own. |
| 15:02 | technomancy | bitemyapp: I thought you were coming up north |
| 15:03 | bitemyapp | technomancy: I'm considering Portland and Seattle alongside Austin. |
| 15:03 | technomancy | nice |
| 15:03 | bitemyapp | If for no other reason than that I don't like heat. |
| 15:03 | bitemyapp | and I really like forests. |
| 15:04 | bitemyapp | mdrogalis: part of the reason I'm staying in SF for now is that I work at a rather exceptional company and they're bay area only at the moment. |
| 15:05 | technomancy | yeah, I felt like a broken record saying "wow, it's so green" every half hour or so when I first moved up here |
| 15:05 | mdrogalis | bitemyapp: Ping pong table on the roof? |
| 15:05 | xeqi | heat vs rain |
| 15:07 | bitemyapp | xeqi: I'm okay with rain. |
| 15:07 | bitemyapp | mdrogalis: very self-directed environment. I have no boss. |
| 15:08 | mercwithamouth | ,(def foo[22 [747, 1]) (nth (last foo) 1) |
| 15:08 | clojurebot | #<RuntimeException java.lang.RuntimeException: Unmatched delimiter: )> |
| 15:08 | mercwithamouth | ,(def foo[22 [747, 1]) (nth (last foo) 1)) |
| 15:08 | clojurebot | #<RuntimeException java.lang.RuntimeException: Unmatched delimiter: )> |
| 15:08 | mercwithamouth | ,(def foo[22 [747, 1]]) (nth (last foo) 1)) |
| 15:08 | clojurebot | #<Exception java.lang.Exception: SANBOX DENIED> |
| 15:08 | mdrogalis | bitemyapp: Very easy to stick it to the man then. |
| 15:09 | mercwithamouth | hrmm how do you handle multiple lines/levels with the bot? |
| 15:09 | yeoj___ | I have a sequence of dictionaries with one entry.... what's an efficient way to make a sequence with just that one dictionary value? I was looking at seq to make a vector, then taking only even elements... but has to be a better way? |
| 15:10 | cmajor7 | need to test several http endpoinds. I'd like to do it with clj-http and clojure.test. the question is about a fixture that needs to start/stop "ring server" around these tests. what is a recommended way of doing that? (in a fixture). everything is read only, so I only need this :once for all the tests. |
| 15:12 | coventry | yeoj___: ,(map #(get % :t) [{:t 1} {:t 2}]) |
| 15:12 | xeqi | cmajor71: https://github.com/ato/clojars-web/blob/master/test/clojars/test/integration/uploads.clj#L17 or https://github.com/cemerick/friend/blob/master/test/test_friend/functional.clj#L11 |
| 15:12 | clojurebot | Excuse me? |
| 15:12 | coventry | ,(map #(get % :t) [{:t 1} {:t 2}]) |
| 15:12 | clojurebot | (1 2) |
| 15:13 | yeoj___ | coventry: thank you |
| 15:13 | yeoj___ | clojurebot: thanks little buddy. |
| 15:13 | clojurebot | Cool story bro. |
| 15:13 | xeqi | mercwithamouth: can you make it a let? |
| 15:13 | coventry | yeoj___: Or ##(map :t [{:t 1} {:t 2}]) if it's a kw. |
| 15:13 | devth | amalloy: i thought flatland/useful had a fn that throttled calls, queuing them and calling at a specified frequency (e.g. to prevent excess floods when sending messages to irc). was i mistaken? i realize rate-limited is not it. |
| 15:13 | cmajor71 | xeqi: hit the spot :) thx. looks like it can be a gist/clojure.test macro, since I can't think it is so rare.. ? |
| 15:14 | dnolen | jonasen: awesome thanks |
| 15:14 | dobry-den | cmajor71: testing is common? ;) |
| 15:15 | cmajor71 | dobry-den: I'd like to believe it is.. and if this macro is in, it'll enforce faith |
| 15:15 | amalloy | are you thinking of flatland.useful.state/periodic-recompute, devth? |
| 15:16 | jonasen | dnolen: I've never used tools.macro so I don't know if the example even makes sense.. |
| 15:16 | amalloy | we definitely don't have one that queues up calls |
| 15:17 | amalloy | but i think https://github.com/jkk/rate-gate is that |
| 15:17 | devth | amalloy: ah ok. i haven't used periodic-recompute but looks interesting |
| 15:17 | devth | oh sweet. i'll check that out. |
| 15:17 | devth | amalloy: thanks |
| 15:18 | devth | my irc bot keeps getting excess flood kicked |
| 15:20 | dnolen | jonasen: heh yeah, I used symbol-macrolet so I can use _ for (var) |
| 15:20 | dnolen | in core.logic |
| 15:21 | bitemyapp | devth: devn? |
| 15:21 | bitemyapp | but with a weird lisp? |
| 15:22 | devth | bitemyapp: nope :) |
| 15:22 | bitemyapp | so many dev* *_* |
| 15:32 | dobry-den | No matter what I do, nrepl-load-current-buffer (C-c C-k) always displays the Exception in the minibuffer: https://dl.dropboxusercontent.com/spa/quq37nq1583x0lf/-4cqzq0i.png |
| 15:32 | dobry-den | Isn't (setq nrepl-popup-stacktraces t) supposed to change that behavior? |
| 15:33 | dobry-den | The minibuffer is the ideal place to show an exception, but it's not very useful since it doesn't show the linenumber in your source |
| 15:50 | mlb- | Is there a Haskell-like "swap" method in clojure? |
| 15:51 | Raynes | mlb-: What does swap do? Are you talking about Data.Tuple.swap? |
| 15:51 | mlb- | yes |
| 15:51 | Raynes | Well, we don't really have tuples. |
| 15:52 | Raynes | So unless you've somehow got actual tuples, you can just call reverse on a two element sequential data structure. |
| 15:52 | mlb- | hmm, maybe I'm thinking of the wrong method then, |
| 15:53 | Raynes | http://hackage.haskell.org/package/base-4.6.0.1/docs/Data-Tuple.html |
| 15:53 | Raynes | mlb-: Swap just swaps the elements of a pair. |
| 15:53 | mlb- | What I want is a function that takes a function(a, b, ...) and returns a function(b, a, ...) |
| 15:54 | amalloy | you mean "flip", i think |
| 15:54 | justin_smith | flip? |
| 15:54 | amalloy | which is a haskell function that does that, but has no equivalent built into clojure |
| 15:54 | Raynes | Indeed. |
| 15:55 | mlb- | Ah, yes. Exactly. I'm sorry, it's been a while since I've used Haskell |
| 15:55 | AimHere | You could roll your own oneliner that did the job though |
| 15:55 | amalloy | i wrote a library called hot-potato many years ago which was basically generalized flip. i don't really recommend using it, partly because i was so new when i wrote it, but it might be fun to study |
| 15:55 | mlb- | that's fine. I was just hoping for a way to compose functions to reduce the amount of anonymous functions =] |
| 16:02 | seangrove | I keep asking this, but can never quite seem to get it right - my compojure app is giving 500 errors, but I don't see any stack traces in the output, or in the *nrepl-server* buffer |
| 16:04 | seangrove | Whenever running a compojure app via nrepl.el, how can I get a stacktrace output in the *nrepl-server* buffer on a 500 error? |
| 16:05 | bitemyapp | seangrove: hey sorry to bug you, did you see what I said about Korma? |
| 16:06 | seangrove | bitemyapp: I don't think so no, what was it? |
| 16:06 | bitemyapp | seangrove: I'm cutting a release that includes your PR soon, any requests before I do so? |
| 16:06 | seangrove | Nothing that comes to mind |
| 16:06 | justin_smith | seangrove: I have wondered about maybe using somthing like timbre to make sure output goes to a reliable place when combining nrepl and threads |
| 16:06 | seangrove | What's the state of/plan for korma.incubator? |
| 16:07 | bitemyapp | I use timbre and am mostly happy with it but the exception logging breaks with an NPE sometimes. |
| 16:07 | bitemyapp | seangrove: I don't have any specific plans for it myself, I'm open to stealing things from incubator into Korma main if somebody's willing to speak up and say they want something and that it works for them. |
| 16:08 | bitemyapp | componentization is another thing on my mind. |
| 16:08 | justin_smith | bitemyapp: ugh, good to know before I go too far with that route, thanks |
| 16:08 | bitemyapp | justin_smith: you just want to be careful when you use the (t/error ex "blah") thingy |
| 16:09 | bitemyapp | I also find timbre's code a bit...disconcerting. |
| 16:09 | bitemyapp | the indirection is not very contribution friendly. |
| 16:09 | bitemyapp | I need to submit a PR for that NPE |
| 16:10 | bitemyapp | they're doing something that really upsets clj-stacktrace (I guess clj-stacktrace should technically be considered to be at fault?) |
| 16:11 | bitemyapp | I ended up writing my own exception logging middleware that uses clojure.stacktrace instead of clj-stacktrace and it hasn't broken yet. |
| 16:11 | bitemyapp | justin_smith: ^^ if that helps. |
| 16:11 | justin_smith | bitemyapp: interesting, thanks |
| 16:12 | bitemyapp | technomancy: are you maintaining clj-stacktrace? |
| 16:12 | justin_smith | I think the real fix may just be a more thread-safe output redirection fornrepl, instead of having to use a full fledged logger just to get printouts |
| 16:12 | technomancy | bitemyapp: no =( |
| 16:12 | bitemyapp | justin_smith: no doubt. All this stuff is just from my Clojure/Datomic/Ring/Compojure stuff. |
| 16:13 | bitemyapp | technomancy: what's going on with clj-stacktrace? last commit was you. |
| 16:13 | bitemyapp | I need to know if this is damage to route around or if it should be fixed and maintained. |
| 16:13 | technomancy | bitemyapp: Chouser gave a talk about a new better stacktrace lib he was going to release, so I quit hacking on it and waited for the release |
| 16:14 | technomancy | this was like 18 months ago? |
| 16:14 | bitemyapp | :| |
| 16:14 | bitemyapp | I take it I'm the only one that was fine with clojure.stacktrace? :P |
| 16:15 | technomancy | clj-stacktrace works fine for me; I was just going to add filtering out of compiler gunk and other fine-tuning |
| 16:15 | technomancy | but I started using clj-stacktrace backw when clojure.stacktrace was much worse |
| 16:16 | bitemyapp | technomancy: I bugged chouser on the twatters. |
| 16:16 | technomancy | I don't remember what it's like now, but having color and justification is really great |
| 16:16 | bitemyapp | technomancy: well like I said above, with t/error logging in Timbre some Exception instances will make clj-stacktrace throw an NPE and barf. |
| 16:17 | technomancy | huh. |
| 16:17 | bitemyapp | This is, as you might imagine, unacceptable for something that's supposed to managing my logging. |
| 16:17 | technomancy | oh crap; there's an open PR I missed |
| 16:17 | technomancy | bitemyapp: can you see if this fixes your issue? https://github.com/mmcgrana/clj-stacktrace/pull/27 |
| 16:17 | technomancy | I can cut a release if so |
| 16:18 | bitemyapp | I'll see if I can put a project repro together on the weekend. Have to finish this migration stuff. |
| 16:19 | coventry | That's a coincidence, I was just watching chouser's longbottom talk today, and wondering where it is. |
| 16:21 | coventry | Why doesn't clojure.lang.PersistentVector$ChunkedSeq implement IPersistentList (so that (list?) would return true?) |
| 16:23 | dnolen | fun, fun http://cljsfiddle.net/fiddle/swannodette.zebra |
| 16:23 | technomancy | coventry: don't use c.c/list? |
| 16:23 | technomancy | it's Not What You Want |
| 16:23 | technomancy | probably coll? |
| 16:23 | seangrove | Tiny |
| 16:24 | technomancy | list? returns false on many things that are lists |
| 16:24 | coventry | technomancy: clojure.test-clojure.compilation uses it, and my walked/transformed clojure.core breaks that test. |
| 16:24 | bitemyapp | technomancy: what's the URL to that diagram of which collections return what against different types? |
| 16:25 | coventry | technomancy: But thanks for the advice, didn't know that. |
| 16:25 | technomancy | bitemyapp: the one about defrecords and stuff? |
| 16:25 | bitemyapp | urrrrghhh it was some crazy-old looking page but it had examples of what each type would return for sequence?, list? etc. |
| 16:25 | llasram | bitemyapp: It was one of cemerick's |
| 16:25 | technomancy | list? should never have been added =\ |
| 16:25 | bitemyapp | llasram: link? |
| 16:25 | llasram | bitemyapp: http://cemerick.com/2011/07/05/flowchart-for-choosing-the-right-clojure-type-definition-form/ |
| 16:25 | llasram | That guy? |
| 16:26 | llasram | Oh, no |
| 16:26 | bitemyapp | no, not that. |
| 16:26 | llasram | Sorry, not paying enough attention |
| 16:26 | bitemyapp | sequence?, list? truth tables for different Clojure coll types. |
| 16:26 | bitemyapp | t'was a table, was a crazy old looking page |
| 16:27 | llasram | Remember when people used to "bookmark" things? |
| 16:27 | bitemyapp | http://www.brainonfire.net/files/seqs-and-colls/main.html |
| 16:27 | bitemyapp | ^^ that! |
| 16:27 | bitemyapp | coventry: ^^ |
| 16:27 | seangrove | technomancy: I agree |
| 16:28 | technomancy | bitemyapp: quick teach it to clojurebot so we'll be able to find it again |
| 16:28 | seangrove | technomancy? |
| 16:28 | clojurebot | technomancy is always one step ahead of me |
| 16:28 | coventry | bitemyapp: Thanks. |
| 16:28 | seangrove | Heh, prescience |
| 16:28 | bitemyapp | technomancy: I always forget the syntax. |
| 16:29 | bitemyapp | clojurebot: colls is http://www.brainonfire.net/files/seqs-and-colls/main.html |
| 16:29 | clojurebot | In Ordnung |
| 16:29 | bitemyapp | ~colls |
| 16:29 | clojurebot | colls is http://www.brainonfire.net/files/seqs-and-colls/main.html |
| 16:29 | jonasen | dnolen: Cool, the only thing's missing is the cljs port of bblooms fipp so the output would line up nicely :) |
| 16:29 | jonasen | bbloom: ^ |
| 16:29 | dnolen | jonasen: heh yes |
| 16:31 | bbloom | jonasen: for what exactly? |
| 16:32 | jonasen | bbloom: http://cljsfiddle.net/fiddle/swannodette.zebra |
| 16:32 | bbloom | ah cool |
| 16:32 | bbloom | any idea what the state of the rrb stuff is? |
| 16:34 | jonasen | bbloom: I don't think there has been any changes to the library |
| 16:34 | jonasen | lately |
| 16:34 | bitemyapp | ,(type (list* 1 2 3 4 '())) |
| 16:34 | clojurebot | clojure.lang.Cons |
| 16:34 | bbloom | bitemyapp: lol yeah, that made me face palm too |
| 16:34 | bitemyapp | coventry: ^^ I take it this is what's draining your sanity lately? |
| 16:35 | coventry | bitemyapp: See the issues lists for riddley and sleight. :-) |
| 16:35 | dnolen | bbloom: last I heard it basically works |
| 16:36 | bitemyapp | coventry: you're contributing to ztellman libraries? You're braver than I thought. |
| 16:36 | bitemyapp | bbloom: I don't have a strong opinion about the cons cell / PersistentList dichotomy. |
| 16:36 | bbloom | bitemyapp: i didn't for a while. now i have a lot to say about data encapsulation: a topic clojure doesn't tackle too much. but that rant is still brewing |
| 16:36 | bitemyapp | there was no difference in CL unless somebody was doing something strange, but the difference hasn't truly bitten me. |
| 16:36 | bitemyapp | Yet |
| 16:37 | bitemyapp | bbloom: it's a rant I'd like to hear, I'd like to learn more about this and why it was done that way. |
| 16:37 | bitemyapp | I wonder how hard it would be to convince rhickey to explain the Cons thing. |
| 16:37 | bbloom | i don't think there is much explaination |
| 16:37 | bitemyapp | maybe he wanted to bootstrap them independently of the persistent data structures? |
| 16:37 | bbloom | it's just legacy, afaict |
| 16:38 | coventry | bitemyapp: I now have code which can evaluate all of clojure.core and test-clojure into distinct namespaces and run the tests. I am trying to decide how hard to look at the test failures at the moment, as opposed to just getting on with using this wrapping code to write the debugger I started out intending to write. |
| 16:38 | coventry | The failures probably do hide other errors in the wrapping code. |
| 16:38 | coventry | s/hide/expose/ |
| 16:39 | bbloom | if i were to have a vote, all the "abstract" types would have a wrapper object that delegates to the underlying concrete type. so a List could contain an ArrayList (PersistentList) or a LinkedList (Cons) |
| 16:39 | bbloom | a LinkedList and a PersistentList wouldn't be equal to each other, unless they were wrapped in a Lisp |
| 16:39 | bbloom | List* rather |
| 16:39 | bbloom | similarly for maps, vectors, etc |
| 16:39 | bitemyapp | technomancy: chrishouser: @bitemyapp I'm afraid attempts to reduce clutter in stack traces are doomed to remove critical detail. What should we do instead? |
| 16:39 | bitemyapp | technomancy: he's punting. We have work to do. |
| 16:39 | bitemyapp | clj-stacktrace has to be maintained or replaced. |
| 16:40 | technomancy | yeah, obviously you can't hard-code the stack trace cleanup stuff |
| 16:40 | bitemyapp | if it isn't, I have to convince pt-toomanyfuckingvowels-nis to replace clj-stacktrace with clojure.stacktrace in Timbre. |
| 16:41 | bitemyapp | technomancy: I don't even really care about the clean-up, I just want my logger to not crash my application. |
| 16:43 | technomancy | bitemyapp: I bet that pull will fix it tho |
| 16:43 | technomancy | will cut a release once you can confirm |
| 16:44 | bitemyapp | technomancy: much appreciated. I'll try to get you an answer ASAP. |
| 16:54 | technomancy | bitemyapp: the other problem is that "longbottom" (chouser's name) is a lot better than clj-stacktrace |
| 16:57 | bitemyapp | technomancy: I agree. Uno momento. |
| 17:08 | yeoj___ | if i have a function that is the value of a dictionary, how do i call it after i look it up? is that with apply? |
| 17:08 | coventry | bitemyapp, technomancy: Based on what he said in http://downloads.mostlylazy.com/episodes/mostly-lazy-006.mp3 (around minute 39) it sounds like he might be OK with someone taking it over. |
| 17:08 | coventry | yeoj___: ##(({:t inc} :t) 1) |
| 17:09 | lazybot | ⇒ 2 |
| 17:09 | technomancy | coventry: huh; I got the impression it was in legal limbo |
| 17:09 | yeoj___ | ohh, that must be that ## thing i don't know about yet |
| 17:09 | coventry | technomancy: Maybe, but it sounds there very much like he just lost interest. I could be wrong. |
| 17:09 | bitemyapp | coventry: I asked him for the name directly. |
| 17:10 | bitemyapp | technomancy: it sounded on Twitter like he lost interest to me too. |
| 17:10 | technomancy | probably both |
| 17:10 | bitemyapp | technomancy: What legal limbo? |
| 17:10 | coventry | yeoj___: No, the ## is syntax to tell lazybot to evaluate it and report the result here. (({:t inc} :t) 1) should work in the relp. |
| 17:10 | technomancy | bitemyapp: needing to get approval for the OSSing process =\ |
| 17:11 | coventry | ,(({:t inc} :t) 1) |
| 17:11 | clojurebot | 2 |
| 17:11 | yeoj___ | coventry: ok, thank you. i'll keep studying that then. |
| 17:11 | bitemyapp | technomancy: from whom? |
| 17:12 | technomancy | bitemyapp: originally lonocloud, now viasat I guess? |
| 17:12 | technomancy | acquisition complications |
| 17:12 | bitemyapp | Hum. Ick. |
| 17:19 | sveri | hi, how can i check if something is a sequence? |
| 17:19 | rasmusto | ,(some #{1 2 3} [4 5 6 7 1]) |
| 17:19 | clojurebot | 1 |
| 17:20 | llasram | sveri: In what sense of "sequence"? |
| 17:20 | coventry | sveri: ##(sequential? '(1 2 3)) |
| 17:20 | lazybot | ⇒ true |
| 17:20 | rasmusto | oops, I read an "in" that wasn't there, my mistake |
| 17:20 | sveri | coventry: llasram what coventry wrote is what i am looking for |
| 17:20 | sveri | thank you |
| 17:24 | rasmusto | ##(sequential {:a 1 :b 2}) |
| 17:24 | lazybot | java.lang.RuntimeException: Unable to resolve symbol: sequential in this context |
| 17:24 | rasmusto | ##(sequential? {:a 1 :b 2}) |
| 17:24 | lazybot | ⇒ false |
| 17:24 | rasmusto | ##(sequential? (seq {:a 1 :b 2})) |
| 17:24 | lazybot | ⇒ true |
| 17:24 | rasmusto | ##(sequential? #{:a 1 :b 2}) |
| 17:24 | lazybot | ⇒ false |
| 17:25 | rasmusto | ##(sequential? (sorted-set [:a 1 :b 2])) |
| 17:25 | lazybot | ⇒ false |
| 17:25 | rasmusto | sveri: I'm curious what you're using "sequential?" for, can you paste the code by chance? |
| 17:26 | bitemyapp | ~colls |
| 17:26 | clojurebot | colls is http://www.brainonfire.net/files/seqs-and-colls/main.html |
| 17:26 | bitemyapp | sveri: ^^ |
| 17:26 | sveri | rasmusto: i am doing the 4clojure task: http://www.4clojure.com/problem/28 |
| 17:26 | llasram | I am eagerly awaiting Clojure 1.6 if for no other reason than the end of "reference to field <x> can't be resolved" for `-`-prefixed single-argument protocol functions |
| 17:27 | sveri | rasmusto: and i guess i have to check if there is a sequence inside a sequence |
| 17:27 | rasmusto | ,(sequential? "123") |
| 17:27 | clojurebot | false |
| 17:27 | rasmusto | ah, that might be a good use case |
| 17:27 | rasmusto | sveri: I haven't solved that one yet, it's one of the few easy ones that is stumping me |
| 17:28 | sveri | rasmusto: hehe, i am not sure how to do that, i just started it |
| 17:28 | rasmusto | bitemyapp: thanks for the link :) |
| 17:29 | scriptor | spoilerish hint for 4clojure 28: try coll? |
| 17:30 | coventry | sequential? vs coll? should make no difference for that exercise, but people are right that I was wrong to recommend sequential? so quickly. |
| 17:31 | rasmusto | ,(counted? (lazy-seq (range)) |
| 17:31 | clojurebot | #<RuntimeException java.lang.RuntimeException: EOF while reading> |
| 17:31 | rasmusto | ,(counted? (lazy-seq (range))) |
| 17:31 | clojurebot | false |
| 17:31 | sveri | well, for me the problem is not to check what i have, but how to concatenate the inside seq |
| 17:31 | rasmusto | ,(counted? (lazy-seq (range 32))) |
| 17:31 | clojurebot | false |
| 17:32 | rasmusto | sveri: how about cons? |
| 17:32 | bitemyapp | rasmusto: np |
| 17:32 | bitemyapp | ,(type (list* 1 2 3 4 '())) |
| 17:32 | clojurebot | clojure.lang.Cons |
| 17:32 | bitemyapp | ,(list? (list* 1 2 3 4 '())) |
| 17:32 | clojurebot | false |
| 17:34 | scriptor | sveri: what do you mean by inside seq? |
| 17:34 | sveri | i guess cons will do :D |
| 17:34 | sveri | scriptor: i mean the seqs that are inside the seq |
| 17:35 | scriptor | there's also concat |
| 17:35 | sveri | thank you all very much, for now i got to go, my kid will be up in 7 hours :D |
| 17:36 | sveri | cu some time |
| 17:36 | rasmusto | sveri: night ;> |
| 17:37 | cellist | try checking out the function tree-seq |
| 17:37 | rasmusto | yay, seq is flattened, glad I finally figured that out |
| 17:38 | cellist | rasmusto: how did you end up doing it? |
| 17:38 | rasmusto | cellist: https://www.refheap.com/19680 |
| 17:39 | rasmusto | probably inefficient |
| 17:39 | cellist | This is probably cheating, but i looked at the source of flatten |
| 17:39 | cellist | ,(source flatten) |
| 17:39 | clojurebot | Source not found\n |
| 17:40 | rasmusto | ~source flatten |
| 17:40 | cellist | oops. Anyway, it's pretty compact. Still trying to understand it, but I'm guessing that's the best way |
| 17:41 | llasram | ~flatten |
| 17:41 | clojurebot | flatten is rarely the right answer. Suppose you need to use a list as your "base type", for example. Usually you only want to flatten a single level, and in that case you're better off with concat. Or, better still, use mapcat to produce a sequence that's shaped right to begin with. |
| 17:41 | rasmusto | cellist: hmm, looks cool. I'll have to see what tree-seq does |
| 17:41 | rasmusto | llasram: point noted, we're talking about a 4clojure problem though :D |
| 17:41 | coventry | flatten is great when you want to yank something out of a tree at the repl, though. |
| 17:41 | llasram | Golfing? |
| 17:42 | rasmusto | llasram: trying for my first impl, now golfing/optimizing |
| 17:42 | rasmusto | (and drinking afternoon tea) |
| 17:43 | llasram | Cool beans |
| 17:43 | bitemyapp | don't use (apply hash-map (mapcat concat ...)) - just use (into {} ...) |
| 17:44 | rasmusto | bitemyapp: into and seq are inverses in some sense, yeah? |
| 17:44 | rasmusto | well, except for the key/set-elem duplication stuff |
| 17:45 | bitemyapp | ,(doc into) |
| 17:45 | clojurebot | "([to from]); Returns a new coll consisting of to-coll with all of the items of from-coll conjoined." |
| 17:45 | rasmusto | ah, conj is the culprit |
| 18:23 | logic_prog | (require 'eopl.chap01) from user=> in lein works. However, (require 'main) fails when src/main.clj contains (:require eopl.chap01) |
| 18:23 | logic_prog | so somehow, I can require eopl.chap01 from lein, but not from src/main.clj |
| 18:23 | logic_prog | what am I likely to have done wrong? |
| 18:24 | hyPiRion | try (:require [eopl.chap01]) instead |
| 18:26 | logic_prog | hyPiRion: same error. However, "user> (ns tstblah (:require eopl.chap01))" works |
| 18:27 | logic_prog | seems like I can type anything into the lein repl, and it works, but from src/main.clj, nothing works |
| 18:37 | yeoj___ | when destructuring using ":keys" is there anyway to retain the : on the front of the name, so it's symbol once i'm in the function body? |
| 18:41 | rasmusto | yeoj___: you want the ':' on your symbol name? I'm confused |
| 18:43 | yeoj___ | rasmusto: yeah thats it |
| 18:43 | rasmusto | yeoj___: symbol names can't have a ':' in front, they would be keywords |
| 18:43 | yeoj___ | rasmusto: ah, ok. |
| 18:44 | yeoj___ | rasmusto: thanks |
| 18:46 | yeoj___ | i'm trying to get my head around unquote |
| 18:46 | yeoj___ | i have a dictionary with instructures (not a function) in the value of a key |
| 18:46 | yeoj___ | and i want that to be passed to the repl, when i copy and paste a prn it works, but putting a ~ on the front doesn't. |
| 18:47 | SegFaultAX | yeoj___: Not clear on what you're trying to do. Paste code. refheap.com |
| 18:47 | yeoj___ | SegFaultAX: http://pastebin.com/krQBnnD1 |
| 18:47 | yeoj___ | oh, sorry |
| 18:47 | yeoj___ | i'll put it on refheap.com |
| 18:48 | yeoj___ | https://www.refheap.com/19681 |
| 18:49 | yeoj___ | SegFaultAX: i'm new to clojure... i have a lot to learn about the correct ways to do things i'm sure. |
| 18:51 | yeoj___ | sorry i got disconnected |
| 18:53 | justin_smith | yeoj___: in '(str type_name ...) in the mssql-to-netezza-dictionary, why do you quote it, and where would type_name be coming from? |
| 18:53 | yeoj___ | justin_smith: well, i'm sure thats an icky bit..... type_name comes from the destructing in the function call on line 50 i think |
| 18:54 | justin_smith | then that should be an fn |
| 18:54 | justin_smith | not a quoted form |
| 18:54 | justin_smith | so that it can be called with an arg |
| 18:54 | yeoj___ | I was trying to get a sort of.... put "business rules" in a dictionary thing going |
| 18:54 | yeoj___ | ok |
| 18:54 | yeoj___ | so your saing the mssql-to-netezza-dictionary should have keys like "varchar" and values like (fn [] ...) |
| 18:55 | rasmusto | yeoj___: it looks like the destructuring should be happening in the mssql-to...dict function instead |
| 18:55 | rasmusto | or it should just be a function that takes one argument |
| 18:55 | rasmusto | instead of a quoted form as justin_smith said |
| 18:56 | yeoj___ | ok |
| 18:56 | yeoj___ | i'll give it a shot and see what happens. i think i had it as a function but i still couldn't execute the function once it was returned. |
| 18:56 | yeoj___ | let me check. |
| 19:02 | yeoj___ | hmm... i wanted it to be a lookup... like lookup the logic for this data_type. It's starting to have (cond x ) in there now... i'll get it written then maybe someone can show me the clojure way |
| 19:04 | rasmusto | yeoj___: you can have a (fn [something] (lalalala something)) as a map entry |
| 19:04 | yeoj___ | ;w |
| 19:04 | yeoj___ | ok |
| 19:14 | justin_smith | ,((:a {:a (fn [x] (* x x)) :b (fn [x] (* x x x))}) 2) |
| 19:15 | clojurebot | 4 |
| 19:16 | justin_smith | yeoj___: ^ that demonstrates putting a value retrieved from a map in the calling position to apply it |
| 19:36 | lodin | What's the rationale for records not supporting (r :x), only (:x r)? |
| 19:50 | logic_prog | is there a good way to do clojure/C interop? I want to have a clojure DSl that can output high performance C code |
| 19:50 | logic_prog | and somehow send the datastructures back & forth |
| 19:50 | logic_prog | that would make me happy |
| 19:51 | r0bgleeson | doesnt sound easy |
| 19:54 | gws | logic_prog: https://github.com/bagucode/clj-native did you see that? might be a start |
| 19:57 | biggbear | hello everybody |
| 19:59 | lodin | logic_prog: Not that I have anything that can help you, but I'm curious: how do you plan to handle the data when crossing language boundaries? Convert (and copy) between representations for each argument/return value for every call? |
| 19:59 | biggbear | does anyone is using counterclockwise to create a leiningen template and having issues? |
| 20:01 | logic_prog | lodin: yes, probably json |
| 20:07 | biggbear | one question folks please: do you know how to import by hand a leiningen project to eclipse?. Please |
| 20:07 | lodin | logic_prog: I haven't used JNA, but it seems to me that it shouldn't be necessary to serialize to json. |
| 20:07 | coventry | logic_prog: It's not clojure/C interop exactly, but tbaldridge has a talk about a clojure LLVM DSL which does the "output C code" part. Mjolnir is the project name. |
| 20:10 | coventry | Well, the "output machine code" part, I guess... |
| 20:15 | justin_smith | does anyone else thing that clojure.test/are is awful? why not just let an fn and test the results of applying it |
| 20:16 | justin_smith | *invoking it even |
| 20:17 | coventry | It would really be a lot of extra boilerplate for something like clojure.test-clojure.numbers |
| 20:17 | logic_prog | coventry: yeah, saw the talk |
| 20:18 | logic_prog | found it a bit "heavy" (requires modifyhing LLVM, I believe) |
| 20:18 | logic_prog | coventry: btw, how is your side project going? do you intend to open source it? |
| 20:19 | coventry | logic_prog: Once it's reliable enough. Wrapping every form in debugging instrumentation is pretty invasive. |
| 20:20 | justin_smith | coventry: my complaint is it parses with a completely different set of rules than I see in any other standard clojure function - the way it breaks up the args into groups of n for example |
| 20:20 | justin_smith | well, this is a macro, not function of course |
| 20:21 | justin_smith | point being I need to add a bunch of extra special cases to how I read code just for test/are that don't get applied anywhere else |
| 20:22 | technomancy | yeah, not a fan of c.t/are |
| 20:51 | bitemyapp | technomancy: my coworker looked at me weird when I explained the point of c.t/are to him. I think it shamed me out of using it. |
| 20:51 | technomancy | fun fact: it is also the reason clojure.walk is part of clojure |
| 20:52 | technomancy | =\ |
| 20:52 | justin_smith | wow |
| 20:52 | justin_smith | double whammy |
| 20:54 | bitemyapp | technomancy: hey, I like clojure.walk. |
| 20:54 | bitemyapp | I needed it in my project like 2 or 3x :P |
| 20:54 | technomancy | it's been publicly disavowed |
| 20:55 | bitemyapp | technomancy: where? I can't google it up. |
| 20:55 | technomancy | bitemyapp: probably just in this channel |
| 20:56 | bitemyapp | technomancy: well I'm not giving up my tree-walkin'. |
| 20:56 | technomancy | stuartsierra has his regrets |
| 20:57 | justin_smith | is the problem a problem with walking, or with that particular implementation of walking? |
| 20:57 | technomancy | I think it's the implementation |
| 21:06 | coventry | technomancy: Really? His clojure.walk2 only came up in July, and AFAIK it behaves the same way, just faster. |
| 21:06 | coventry | *came out |
| 21:07 | technomancy | coventry: just speculating |
| 21:07 | technomancy | maybe he has recanted his recantment |
| 21:08 | coventry | Actually, there is a bug referenced in the clojure.walk2 README which says "The conditional dispatch in clojure.walk is slow and not open to extension. It also doesn't support records", which counts as a regret. |
| 21:10 | justin_smith | (walk/postwalk recant (read-string (with-out-str (source walk/postwalk)))) |
| 21:21 | akhudek | an alternative to walking might be https://github.com/akhudek/zip-visit |
| 21:22 | bitemyapp | I don't have zipped data structures in my case. I needed walk. |
| 21:22 | akhudek | ah, right, sorry |
| 21:25 | bitemyapp | akhudek: no problem. More libraries is always good :) |
| 21:25 | akhudek | bitemyapp: it's pretty easy to create zippers for arbitrary data structures too |
| 21:29 | bitemyapp | akhudek: not worth it in my case. |
| 21:29 | bitemyapp | I did consider it. |
| 21:46 | cgag | Anyone have experience with http-basic auth and friend? I'm getting sent straight to my unauthorized handler without ever seeing the basic auth prompt. https://gist.github.com/cgag/6944435 |
| 21:46 | nmq | Could someone tell my why (mod (math-function/pow 11 23) 187) returns 1.34217728E8 and not 88? |
| 21:47 | nmq | math-function being in clojure-contrib |
| 21:48 | llasram | nmq: Using clojure-contrib implies Clojure 1.2, which is several years old |
| 21:49 | llasram | nmq: Which unfortunately means few people will probably be able to help you with that specific question |
| 21:49 | llasram | nmq: But there is the broader issue -- why such an old Clojure? |
| 21:49 | nmq | I can use a new version |
| 21:50 | nmq | Has contrib been rolled into Clojure core? |
| 21:50 | nmq | newer version* |
| 21:51 | akhudek | nmq it was broken into many small libraries |
| 21:51 | akhudek | http://dev.clojure.org/display/community/Where+Did+Clojure.Contrib+Go |
| 21:52 | coventry | https://github.com/clojure/math.numeric-tower has expt |
| 21:54 | gfredericks | ,(rem (Math/pow 11.0 23.0) 187) |
| 21:54 | clojurebot | 1.34217728E8 |
| 21:55 | gfredericks | ,(reduce #(rem (* %1 %2) 187) (repeat 23 11)) |
| 21:55 | clojurebot | 88 |
| 21:57 | gfredericks | ,(let [x (Math/pow 11.0 23.0)] (= x (inc x))) |
| 21:57 | clojurebot | true |
| 21:57 | gfredericks | nmq: I think we can safely just blame floating point math |
| 21:57 | nmq | gfredericks: I agree, lol |
| 21:57 | nmq | I appreciate the example |
| 21:58 | gfredericks | also: |
| 21:58 | gfredericks | ,(mod (apply * (repeat 23 11N)) 187) |
| 21:58 | clojurebot | 88N |
| 22:10 | nmq | Thanks again for this, it helped out a lot, especially to you gfredericks |
| 22:57 | ddellacosta | so, this is more of an emacs question, but I figure someone here may know--I'm trying to override the key for nrepl's C-c C-c by using add-hook with nrepl-mode-hook, but no luck: https://www.refheap.com/19684 |
| 23:05 | amalloy | ddellacosta: is there some reason M-; is a problem for you? |
| 23:05 | amalloy | (also, C-c <any letter>) is reserved for the user, so you could use C-c c and C-c u without fear of conflicting with any (well-behaved) mode |
| 23:06 | ddellacosta | amalloy: yes, I suppose I can use M-;, that works just fine, thanks--I'd just gotten used to C-c c |
| 23:06 | coventry | ddellacosta: I don't think you want the <> characters in there. |
| 23:06 | coventry | Esp. for nrepl-mode-hook |
| 23:07 | amalloy | M-; is even nicer, because it serves both purposes on a single key |
| 23:07 | ddellacosta | coventry: ah, my confusion over what was probably parameters, whoops |
| 23:07 | ddellacosta | amalloy: yeah, I'll start using that. Not the solution I thought I was looking for, but a better one in any case. Thanks! |
| 23:07 | amalloy | heh |
| 23:09 | ddellacosta | amalloy: although, nrepl most definitely maps C-c c, I should add. Not sure if that means it is poorly behaved or what. |
| 23:10 | amalloy | ddellacosta: no, it maps C-c C-c |
| 23:10 | coventry | No it doesn't. You're getting that from somewhere else. |
| 23:10 | ddellacosta | amalloy: sorry, excuse me, C-c C-c |
| 23:10 | ddellacosta | …is what I meant to say. |
| 23:10 | amalloy | right. that's not poorly behaved at all |
| 23:10 | amalloy | only C-c c is reserved for you |
| 23:11 | ddellacosta | amalloy: ah, I see, thanks. Didn't know about these emacs conventions. |
| 23:12 | ddellacosta | sorry for the emacs discussion in #clojure, but thank you folks! |
| 23:16 | uvtc | Emacs-related question: The readme for nREPL says that it provides both a server *and* a client. In typical usage with Emacs, are we using "the nREPL client", or does nrepl.el play that role? |
| 23:18 | ddellacosta | uvtc: if you mean you log into a nrepl session started somewhere else, you are the client in emacs. But you can also start a nrepl server in emacs (nrepl.el). So it can do both, depending. |
| 23:18 | ddellacosta | depends on typical usage I suppose--I usually connect to an nrepl session started in another repl, in a project dir |
| 23:19 | uvtc | ddellacosta, thanks. I'd like to understand the overall architecture here, and I'm not yet currently an nREPL/nrepl.el user. |
| 23:20 | saosebastiao | any core.logic users in here? |
| 23:20 | saosebastiao | I'm trying to understand how to solve a problem |
| 23:21 | saosebastiao | \list |
| 23:21 | ddellacosta | uvtc: this section and the one immediately below it describe the two methods I've used to connect--one is for starting up your own server (nrepl-jack-in) and the other connecting to a running server (nrepl): https://github.com/clojure-emacs/nrepl.el#launch-a-nrepl-server-and-client-from-emacs |
| 23:23 | uvtc | ddellacosta, Thanks. Reading that now. |
| 23:27 | amalloy | ~anyone |
| 23:27 | clojurebot | Just a heads up, you're more likely to get some help if you ask the question you really want the answer to, instead of "does anyone ..." |
| 23:27 | technomancy | nrepl.el is not a server; it contains a command to launch a server though |
| 23:28 | uvtc | technomancy, Right. It is a client that can talk to the server provided by nREPL, correct? |
| 23:28 | technomancy | right |
| 23:28 | technomancy | there's only one nrepl server but many clients |
| 23:29 | uvtc | What is REPL-y ? When I start `lein repl`, it tells me that it's connected to an nREPL server, but then below that says "REPL-y 0.2.1". |
| 23:30 | technomancy | repl-y is a client implemented in clojure that ships with lein |
| 23:30 | uvtc | Oh, I see. I can talk to nREPL either using REPL-y (from `lein repl`), or using Emacs (nrepl.el). :) |
| 23:30 | uvtc | technomancy++ |
| 23:31 | uvtc | Oh, wait. I forget the syntax here for karma infusion. |
| 23:31 | uvtc | ,(inc technomancy) |
| 23:31 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: technomancy in this context, compiling:(NO_SOURCE_PATH:0:0)> |
| 23:31 | uvtc | $(inc technomancy) |
| 23:31 | uvtc | Gah. |
| 23:32 | technomancy | or using grench |
| 23:32 | uvtc | technomancy, I'm getting there, I'm getting there! Need to understand the basics before facing the Grench! :) |
| 23:36 | seangrov` | (inc technomancy) |
| 23:36 | lazybot | ⇒ 84 |
| 23:38 | uvtc | Ah. Thanks, seangrov`. |
| 23:38 | ruzu | ,(+ 1 2) |
| 23:38 | clojurebot | 3 |
| 23:38 | uvtc | &(+ 1 2) |
| 23:38 | lazybot | ⇒ 3 |
| 23:47 | SegFaultAX | uvtc: I read that in Tim Curry's voice. Was that intentional? |
| 23:49 | uvtc | SegFaultAX, Heh, the Grench was just a red herring. |
| 23:50 | SegFaultAX | uvtc: Flames... on the side of my face... |
| 23:50 | ruzu | ,(.. System out (println "Cake!")) |
| 23:50 | clojurebot | nil |
| 23:51 | ruzu | The cake... is a... |
| 23:52 | SegFaultAX | ruzu: println has no [meaingful] return value |
| 23:52 | SegFaultAX | Meaningful, even. |
| 23:59 | uvtc | Ok. I see. When I just open a file in a regular lein-based Clojure project, and there's no `lein repl` running, if I then do `M-x nrepl-jack-in`, nrepl.el is smart enough to recognize we're in a lein-based project and can have lein start up the nREPL for us? |
| 23:59 | uvtc | Is that correct? |