2014-10-13
| 00:59 | justin_smith | squeedee: cool, glad you figured out something you like |
| 02:47 | edbond | how can I find out why my main function hangs? I have only prn there, 'lein run' hangs after printing text |
| 02:47 | edbond | there is also an INFO about MLog using standard logging |
| 02:48 | edbond | I commented all db connecting defs, use postgresql and riak |
| 02:48 | edbond | try to use visualvm but don't know what to look for |
| 02:52 | edbond | ok, it seems to work now. it seems it was riak connection in def |
| 03:02 | edbond | nope, issue still remains |
| 04:57 | donbonifacio | hello. I usually create a let with a couple of operations inside, and that doesn't feel quite right. Is there a better way to achive this: http://pastebin.com/qJ0B2T2s |
| 04:58 | ro_st | donbonifacio: nothing wrong with that at all |
| 04:59 | ro_st | you could move s1 up above the first a, and then use (-> (do-something) (do-something-else 1 2) (do-something-even-else) (more-logic s1)) |
| 04:59 | ro_st | that is, use a threading macro to describe the workflow rather than successive let bindings |
| 05:00 | ro_st | that presupposes that each function returns something you can use as the first (for ->) or last (for ->>) argument for the next function in the thread |
| 05:00 | clgv | donbonifacio: looks like you should use threading as ro_st suggests |
| 05:00 | ro_st | often it's easier to start with the let and refactor once you get a sense of the shape of things |
| 05:01 | ro_st | as sometimes you might have functions along the way where the arg order doesn't support a natural threading |
| 05:03 | donbonifacio | I see |
| 05:04 | donbonifacio | I confess that I'm not yet confortable with the ->'s |
| 05:04 | donbonifacio | that's like comp right |
| 05:09 | ro_st | it's actually very simple. it takes expr 1's result and injects it into the first (->) or last (->>) arg of the next function call |
| 05:10 | ro_st | (-> 10 (/ 2)) is 5, (->> 10 (/ 2)) is 0.2 |
| 05:10 | ro_st | that's the whole story |
| 05:11 | donbonifacio | iep, thanks ro_st :) |
| 05:18 | clgv | donbonifacio: no, it is different from `comp` |
| 05:21 | donbonifacio | kay, I'll study that. thanks :) |
| 05:26 | mbuf | for time series data, is it recommended to do de-duplication of data at the database level rather than the application level, since, clojure uses immutable data structures? |
| 05:28 | schmir | mbuf: you'll be able to do deduplication in clojure |
| 05:29 | rurumate | There's a line in Compiler.java that bothers me. It seems that symbols whose name starts with "def" are treated in different ways than others. What are the implications of this? Is it specified anywhere? Why not limit the exception to the exact name "def"? see https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Compiler.java#L6759-6762 |
| 05:29 | mbuf | schmir, are there any examples that I can refer? the context is that I receive streaming data, and I only need to forward delta or diff changes to another service |
| 05:31 | rurumate | After replacing the .startsWith by .equals, it seems to work the same. Is this a bug / unexpected behaviour waiting to happen? |
| 05:33 | kungi | I am trying to extend a protocol I imported from another namespace. https://gist.github.com/Kungi/9b57125166da81c0fdda |
| 05:33 | rurumate | Why should a function named "define-foobar" be treated differently, in any way, by the compiler than one named "create-foobar"? |
| 05:33 | kungi | But I get the error that a function defined in the protocol is not resolvable in this context? |
| 05:34 | schmir | mbuf: partition-by may help |
| 05:34 | schmir | ,(partition-by :x [{:t 0 :x 1} {:t 1 :x 1} {:t 2 :x 0}]) |
| 05:34 | clojurebot | (({:t 0, :x 1} {:t 1, :x 1}) ({:t 2, :x 0})) |
| 05:36 | mbuf | schmir, so the service must send (expected output) :t 0 :x 1 first and then :t 2 :x 0 |
| 05:37 | mbuf | schmir, since the value of :x has changed only during these specific times |
| 05:38 | Bronsa | rurumate: that's one odd bit on the Compiler, I've spent a good amount of time trying to find a bug caused by that but I haven't found one yet |
| 05:38 | rurumate | why not just change it? |
| 05:39 | Bronsa | I don't have the authority to do that :) |
| 05:39 | rurumate | can we write an email to someone who has? |
| 05:39 | SagiCZ1 | is clojure object oriented? if not, why does it have objects? |
| 05:40 | rurumate | SagiCZ1: "object oriented" is a vague term |
| 05:40 | schmir | mbuf: partition-by allow you to partition the stream. but you may be better off by using an atom to store the current value and send a new value when you see it. partition-by won't give you the new value immediately |
| 05:40 | kungi | rurumate: That's a very vague answer :-) |
| 05:40 | SagiCZ1 | rurumate: no its not. everyone knows that C# and java are object oriented |
| 05:40 | Bronsa | rurumate: the contribution process takes time, changing bits of the Compiler is done only when there's a bug |
| 05:40 | kungi | SagiCZ1: then by that definition. No! clojure is not object oriented |
| 05:41 | rurumate | SagiCZ1: those are examples, not a definition |
| 05:41 | schmir | it's even possible to do OO in java: http://www.infoq.com/presentations/It-Is-Possible-to-Do-OOP-in-Java |
| 05:42 | SagiCZ1 | schmir: why wouldnt it? |
| 05:42 | mbuf | schmir, thanks! |
| 05:42 | schmir | SagiCZ1: watch the talk. I haven't seen it, but I've recently read a blog entry that refers to that talk. |
| 05:43 | Bronsa | rurumate: there are a lot more things I would refactor on Compiler.java more important than that one |
| 05:44 | rurumate | Bronsa: why not just fork clojure then |
| 05:44 | Bronsa | rurumate: I don't have the time to maintain a fork |
| 05:44 | rurumate | time, it's a common problem |
| 05:45 | rurumate | Bronsa: for example, what would be important to refactor? maybe we can at least start collecting these things somewhere |
| 05:45 | schmir | SagiCZ1: http://c2.com/cgi/wiki?AlanKaysDefinitionOfObjectOriented |
| 05:46 | Bronsa | rurumate: I already rewrote the clojure compiler in clojure :) |
| 05:47 | Bronsa | I don't want to mess with Compiler.java anymore, other than for fixing bugs in it |
| 05:47 | Bronsa | rurumate: https://github.com/clojure/tools.analyzer.jvm https://github.com/clojure/tools.emitter.jvm if you're interested |
| 05:50 | rurumate | yes definitely interested |
| 05:53 | Bronsa | rurumate: the backend (t.emitter.jvm) still needs some work, the frontend OTOH is fairly mature and already in use by a bunch of big libraries |
| 05:53 | rurumate | Bronsa: it seems you're writing a complete compiler, but it's split in two projects. is it "self-hosting" yet, in the sense that "compiler can compile itself"? |
| 05:54 | SagiCZ1 | could anyone possibly make clojure run on .NET? |
| 05:55 | Bronsa | SagiCZ1: https://github.com/clojure/clojure-clr |
| 05:55 | kungi | SagiCZ1: There is clojure on the common language runtime as far as I know http://clojure.org/clojureclr |
| 05:55 | hyPiRion | SagiCZ1: http://clojure.org/clojureclr |
| 05:55 | SagiCZ1 | wow sweet |
| 05:55 | SagiCZ1 | thanks |
| 05:56 | Bronsa | rurumate: it can compile clojure.core, I haven't tried compiling it with itself but I'm confident it should be able to after a proper bootstrapping phase |
| 06:00 | rurumate | Bronsa: I see it uses leiningen, and leiningen usually puts the clojure-1.6.0 jar in classpath. So in a way, it still depends on clojure binaries? It's ok to depend on clojure.core, as that is a clojure library not java. What would be really nice is to have a standalone jar of clojure.core without Compiler.java and such bundled with it. |
| 06:01 | Bronsa | rurumate_afk: yes it needs the whole clojure runtime right now |
| 06:01 | Bronsa | rurumate_afk: I have no plans to work on making it self-hosting & strip away the RT dependencies on the near future |
| 06:02 | Bronsa | there are more important things that need to be done before, and again, my time is finite |
| 06:07 | cfleming | Bronsa: Can t.e.j be used to AOT code at the moment? |
| 06:08 | Bronsa | cfleming: no unfortunately, there's only load/eval, no compile |
| 06:08 | cfleming | Bronsa: Bummer, I'd have like to try compiling Cursive with it. |
| 06:09 | Bronsa | cfleming: once I finish performance tuning t.a.jvm, adding compile to t.e.jvm is the next thing I'm going to do |
| 06:10 | cfleming | Bronsa: Ok, is that a lot of work now that you have eval? |
| 06:11 | Bronsa | cfleming: not much for a rudimentary `compile` but for how t.e.jvm is implemented right now that would emit twice as many class files as Compiler.java does |
| 06:11 | cfleming | Wow. |
| 06:11 | cfleming | That's a lot of class files. |
| 06:12 | Bronsa | Compiler.java has both a compiler and an interpreter, top-level def expressions are interpreted while their body are compiled |
| 06:12 | edbond | how to start lein repl with specified host? |
| 06:12 | edbond | ip |
| 06:12 | mping | hi guys |
| 06:12 | Bronsa | t.e.jvm doesn't have the interpreter so every top-level form is wrapped in a (fn []) and (.invoke'd) |
| 06:13 | mping | I'm having trouble understanding lazy seqs |
| 06:14 | cfleming | Bronsa: Interesting, I didn't know that. |
| 06:14 | Bronsa | cfleming: Compiler.java's interpreter isn't really a complete clojure interpreter, it's implemented only for some special forms, e.g. def |
| 06:15 | cfleming | Bronsa: Just for bootstrapping during compilation, basically? |
| 06:16 | Bronsa | cfleming: I yeah, and to avoid emitting a class just do (.setRoot #'v expr) :P |
| 06:16 | cfleming | Hehe |
| 06:16 | Bronsa | if you AOT a namespace, all that var initialization code is in a single ns__init.class file |
| 06:17 | zot | i have (what appears to be) a simple project.clj with a profile modifying uberjar. except that it doesn't work at all, despite no complaints from lein. does this look obviously broken? https://gist.github.com/benfleis/31b6b518a56c6fb518a6 |
| 06:17 | cfleming | Yeah, I know - that's a pain. It basically prevents use of things like proguard on Clojure code. |
| 06:17 | cfleming | I guess that sort of tree shaking would be better at the source level for Clojure, though. |
| 06:18 | Bronsa | there's a junk in the static initilizers generated by Compiler.java |
| 06:19 | Bronsa | I'm trying to minimiza the useless constants emitted by t.e.jvm but some redundant/useless constants are hard to avoid |
| 06:41 | clgv | zot: the vector looks suspicious, except that is for a plugin which in fact expects it like that. in leiningen I'd expect a map there if you have key value pairs |
| 06:54 | noncom | in clojure source, i can see that a symbol java object has a namespace field. so it turns out that a symbol is associated with a ns, not vice versa. how could that be? especially that symbols with the same name can be defined in multiple namespaces ? i always thought that a namespace contains a map of symbols.. |
| 07:17 | clgv | noncom: no, that field is for namespace keywords, e.g. :foo/bar, where the keyword namespace does not necessarily relate to any clojure namespace... |
| 07:18 | clgv | ,[(namespace :foo/bar) (name :foo/bar)] |
| 07:18 | clojurebot | ["foo" "bar"] |
| 07:19 | clgv | oh wait you were asking for symbol. but thats similar. a symbol with namespace is a name for a var |
| 07:19 | clgv | ,(let [s 'foo/bar] [(namespace s) (name s) (type (namespace s))]) |
| 07:19 | clojurebot | ["foo" "bar" java.lang.String] |
| 07:20 | clgv | though that connection "symbol as name for a var" happens during evaluation (resolution of non quoted symbols) |
| 07:21 | clgv | *resolving |
| 07:23 | borkdude | shouldn't the doc of comp be updated for transducers? |
| 07:24 | zot | clgv: i took that example from the leiningen profiles page … i started w/ just defining the attrs directly, and using comma-joined 'with-profile' bits on the command line, but that failed to include my stuff as well. |
| 07:32 | mmeix_ | short newbie-question: would there be a version with 'map' of the following: |
| 07:32 | mmeix_ | (for [idx [1 0 2 ]] (get [:a :b :c :d] idx)) |
| 07:33 | Bronsa | ,(map [:a :b :c :d] [1 0 2]) |
| 07:33 | clojurebot | (:b :a :c) |
| 07:34 | Bronsa | mmeix_: vectors are function of their indexes to their values |
| 07:34 | mmeix_ | ah! thnx, didn't think of putting the vector itself in the function position ... thanx! |
| 07:41 | clgv | zot: a profile is usually specified as map. so you must have confused something |
| 07:43 | zot | clgv: to be clear, i was following the 'composite profiles' example here: https://github.com/technomancy/leiningen/blob/master/doc/PROFILES.md ; but i also did it as a traditional profile, and used with-profile +fitness-model-resources, and got the same result. that version is here: https://gist.github.com/benfleis/00277e6fa667e47c53ea |
| 07:45 | clgv | zot: the second is correct. in the example you linked, it seems to be a mixed case profile names and inline property specifications in the vector |
| 07:45 | zot | clgv: *just* found this, the probable causes: https://github.com/technomancy/leiningen/issues/1718 and https://github.com/technomancy/leiningen/issues/1694 |
| 07:46 | zot | good to know - teh second still fails, but at least i have an idea of why :) |
| 07:47 | clgv | zot: you could achieve the same via indirection |
| 07:47 | clgv | zot: ah well but only with static switches, so not exactly the same... my mistake |
| 07:48 | zot | clgv: no worries, i appreciate your looking. in my current case it's not critical, mainly to avoid confusion. we'll just have to be confused until lein 2.5.x fixes it :) |
| 07:49 | clgv | zot: if it helps you can unquote the value and use arbitrary code there, e.g. :uberjar-name ~(if sun-shines "sun.jar" "fog.jar") |
| 07:49 | clgv | ;) |
| 07:50 | zot | tnx |
| 08:03 | dysfun | is there any lisp that supports defining macros that are expanded in top down rather than bottom-up order? |
| 08:03 | dysfun | i don't need it for anything, i'm just curious |
| 08:04 | Bronsa | dysfun: you mean (when 1 (when 2 3)) expanding (when 2 3) before (when 1 (when 2 3)) ? |
| 08:04 | dysfun | yes |
| 08:05 | Bronsa | dysfun: I believe fexprs could be used to do that |
| 08:05 | Bronsa | but well, you can do that with normal macros too -- just macroexpand the body inside the macro decl |
| 08:07 | dysfun | yes indeed |
| 08:08 | dysfun | i suppose the triviality of implementing that means it would be redundant |
| 08:09 | clgv | dysfun: though it is not that trivial, e.g. macroexpand-all does it wrongly ;) |
| 08:09 | dysfun | :) |
| 08:11 | dysfun | ooh, fexprs look quite interesting |
| 08:19 | Bronsa | clgv: macroexpand-all is a horrible implementation |
| 08:50 | clgv | Bronsa: yeah, I think I used the macroexpand walker from zach, last time I needed something like that :) |
| 08:51 | Bronsa | clgv: yeah that works |
| 09:02 | cityspirit | why would remove be returning a filter fn (e.g. #<core$filter#fn__...) instead of a lazy-sequence? |
| 09:07 | Bronsa | cityspirit: because you're invoking the no-coll arity, that returns a transducer |
| 09:07 | Bronsa | ,(remove odd?) |
| 09:07 | clojurebot | #<core$filter$fn__4368 clojure.core$filter$fn__4368@179ae1f> |
| 09:07 | Bronsa | ,(remove odd? (range 10)) |
| 09:07 | clojurebot | (0 2 4 6 8) |
| 09:09 | cityspirit | Bronsa: ahh thanks. Misplaced parens was calling it without coll - used to seeing an arity exception there. |
| 09:10 | Bronsa | :( yeah |
| 09:10 | Bronsa | I feel like this is the first of a long series of similar questions |
| 09:10 | luxbock | in Leiningen dependencies, what does the :scope keyword inside the dependency vector do? |
| 09:16 | clgv | Bronsa: me too. this was the easiest kind to solve ;) |
| 09:18 | stuartsierra | luxbock: I think it only applies when generating a POM. `scope` is a Maven term. |
| 09:18 | Bronsa | clgv: one thing I didn't realize is that for transducers implemented by composing other transducers -- like remove -- there will be no mention whatsoever of the originating functio :/ |
| 09:20 | luxbock | stuartsierra: thanks |
| 09:23 | daniel___ | [ |
| 09:24 | Bronsa | ] |
| 09:24 | daniel___ | phew, thanks |
| 09:24 | Bronsa | np |
| 09:25 | luxbock | when I try to use a project the has leiningen 2.5.0 as a dependency, leiningen complains about the version, saying that I'm using 2.3.4 and telling me I should upgrade |
| 09:26 | luxbock | but I already have 2.5.0 in my .m2/repositories/leiningen/leiningen/ |
| 09:26 | luxbock | why might this be happening? |
| 09:26 | Bronsa | luxbock: what does lein version say? |
| 09:26 | hyPiRion | luxbock: What do you mean by dependency? |
| 09:27 | luxbock | Bronsa: 2.3.4 |
| 09:27 | Bronsa | hyPiRion: :min-lein-version or however that is ? |
| 09:27 | Bronsa | luxbock: run `lein upgrade` then |
| 09:27 | luxbock | hyPiRion: using the chestnut lein-template adds [leiningen "2.5.0"] as a dependency |
| 09:27 | luxbock | Bronsa: I have done that but it doesn't do anything for me, just complains about the version |
| 09:28 | luxbock | at first I thought it was because I had [leiningen #=(leiningen.core.main/leiningen-version)] in my profiles.clj (because of Vinyasa), but commenting that out did not help either |
| 09:29 | hyPiRion | luxbock: comment out your entire profiles.clj and do `lein upgrade 2.5.0`. Possibly something conflicting in it |
| 09:32 | luxbock | hyPiRion: I can't get that to work. It complains about wrong number of arguments. I tried everything I could think of to give it but everything was rejected |
| 09:33 | hyPiRion | whut |
| 09:34 | clgv | Bronsa: uff, right. you'll just get an error reported for the individual implementations |
| 09:35 | luxbock | even weirder is now that I removed the 2.3.4 directory from ~/.m2/repository/leiningen/leiningen/, I still get 2.3.4 as my version |
| 09:36 | luxbock | ah think I know what it is, I installed lein through homebrew and the version 2.3.4 appears to be hard coded into the shell script it uses |
| 09:36 | hyPiRion | luxbock: upgrade with homebrew |
| 09:36 | luxbock | yeah, that's it, sorry for the confusion |
| 09:37 | hyPiRion | also if you wonder, the lein standalone is in ~/.lein/self-installs, not ̃/.m2/ |
| 09:37 | luxbock | I see |
| 10:26 | mping | hi guys |
| 10:28 | noncom | clgv: so there can be symbols with equal names but with different namespace values / |
| 10:28 | noncom | ? |
| 10:28 | noncom | mping: welcome back |
| 10:38 | clgv | noncom: indeed |
| 10:39 | noncom | clgv: and the interpreter has the concept of "current namespace" ? |
| 10:39 | clgv | noncom: no |
| 10:39 | noncom | all is resolved during the read operation ? |
| 10:39 | clgv | noncom: consider symbol 'clojure.core/map its namespace is "clojure.core" |
| 10:40 | noncom | right, but what about symbols without namespace qualification and symbols which are qualified through namespace aliases ? |
| 10:40 | clgv | noncom: to be able to resolve a symbol to a variable the namespace of the symbol must correspond to a clojure namespace |
| 10:41 | noncom | you mean it must be a valid and actually existing namespace ? |
| 10:41 | clgv | noncom: when you use resolve on a symbol without a namespace clojure tries to load it from the current namespace (or its imported symbols [without alias]) |
| 10:42 | clgv | noncom: only if you want to resolve it to some variable - otherwise it can be anything you like |
| 10:44 | edbond | how to run lein repl on non-127.0.0.1 host ? |
| 10:44 | clgv | noncom: I am still not sure what your problem is. initially I guessed that you confuse the relation between clojure namespaces and variables with the two dataparts a symbol can have (namespace and name) |
| 10:46 | noncom | clgv: actually i am trying to implement namespaces in dotlisp.. |
| 10:46 | noncom | since dotlisp is most close to clojure, i want to understand how they work in clojure and re-implement them in dotlisp |
| 10:50 | noncom | clgv: so generally i am trying to grasp the whole concept.. but it seems a bit vague.. |
| 10:51 | clgv | noncom: ah ok. on a UML composition diagram a clojure namespace has nothing to do with the namespace of symbol. the namespace of the symbol is just a string. the connection is made when the compiler needs to resolve the symbol, then it looks for a clojure namespace with the name of the symbol namespace |
| 10:52 | clgv | noncom: for managing variables a namespace contains a mapping from its symbols to their corresponding variables |
| 10:53 | clgv | noncom: you can study the clojure.core/ns-* functions and clojure.lang.Namespace for the details |
| 10:53 | clgv | noncom: and clojure.core/resolve |
| 10:55 | noncom | clgv: alright, will look into these, thank you :) |
| 11:00 | virmundi | Hello, all. what is the scoping of atoms? From the memoize'd source it looks like the atom used is global. |
| 11:01 | virmundi | https://github.com/clojure/clojure/blob/clojure-1.6.0/src/clj/clojure/core.clj#L5834 for reference |
| 11:01 | noncom | this atom is local to the function (memoize) and is captured in closure the function returns |
| 11:02 | virmundi | Ah, yes. I've got to get use to Clojure not spelling out its return types. Thanks |
| 11:09 | m1dnight_ | I have a project with a simple core file. It works excellent using "lein run". However, in Emacs I get "could not locate class" (i.e., it cant find an import (jsoup)). |
| 11:09 | m1dnight_ | Trying to run it in Cursive runs fine, but doesn't show any output. |
| 11:09 | m1dnight_ | Do I need to "clean" something in Emacs if I edited my source outside of emacs? |
| 11:09 | m1dnight_ | I already tried cider-restart, but that doesn't work |
| 11:10 | m1dnight_ | (I also get wrong/no output in Emacs) |
| 11:11 | m1dnight_ | https://www.refheap.com/91668 This is all I want to run. |
| 11:12 | gfredericks | oh golly I need to write this binary search test.check shrinker |
| 11:20 | schmir | m1dnight_: what does your project.clj look like? |
| 11:21 | m1dnight_ | https://www.refheap.com/91669 |
| 11:21 | m1dnight_ | I managed to get it to work with Emacs (dnno what I did different, but it works) |
| 11:21 | m1dnight_ | Cursive is still displaying nothing :p |
| 11:22 | clgv | gfredericks: oh why? |
| 11:23 | clgv | m1dnight_: why do you do? you do run "(-main)" right? |
| 11:23 | gfredericks | clgv: I don't know if this is common, but for my large generators I'll often have shrinks that take the same indexed child in the shrink tree for dozens and dozens of steps |
| 11:23 | m1dnight_ | clgv: yes, I do |
| 11:24 | gfredericks | clgv: e.g., the shrink I'm watching currently has taken the 23rd child 54 times in a row |
| 11:24 | gfredericks | which means it has run my test ##(* 23 54) to get to that point |
| 11:24 | lazybot | ⇒ 1242 |
| 11:24 | clgv | uff |
| 11:24 | gfredericks | when it could have detected the repeated 23 and done a binary search to see how far it can get along that path, and potentially accomplish the same thing with ~10 test runs |
| 11:25 | gfredericks | which makes a big difference if your test takes like 1-3sec to run |
| 11:25 | clgv | indeed |
| 11:26 | gfredericks | my test.check fork will get farther and farther away from the mainline :/ |
| 11:26 | clgv | gfredericks: so that "rose tree" (whatever that is exactly) does not do anything like binary search? |
| 11:26 | gfredericks | well the tree is the structure being searched over |
| 11:27 | clgv | ok yeah, I meant the search algorithm operating on it ^^ |
| 11:27 | gfredericks | so it's the shrink algorithm itself that's not doing a binary search |
| 11:27 | gfredericks | which is really because it's not the sort of thing you'd expect would work |
| 11:27 | gfredericks | it's only because I'm printing out the path taken through the shrink tree that I'd think of doing that at all |
| 11:28 | justin_smith | m1dnight_: does (.getCanonicalPath (java.io.File. ".")) show the directory you expect in the cider repl? |
| 11:28 | clgv | gfredericks: maybe you need a search algorithm that rates variable nodes indicating which one should change at highest priority and updates those rates while searching |
| 11:28 | justin_smith | m1dnight_: that being the root directory of your project |
| 11:29 | gfredericks | clgv: I'm having trouble parsing that sentence; but yeah there might be some approaches like that; rating the children only solves half the problem though |
| 11:32 | clgv | gfredericks: I didn't dig into the current shrink algorithm, yet. ... |
| 11:32 | gfredericks | clgv: it's pretty naive |
| 11:33 | gfredericks | just greedily walk down the tree as far as you can and then stop |
| 11:33 | clgv | gfredericks: just backtracking on that tree structure? |
| 11:33 | gfredericks | the only "backtracking" it does is to try sibling nodes when it fails to find a failing node |
| 11:33 | gfredericks | it never walk back up |
| 11:33 | gfredericks | (and it probably shouldn't) |
| 11:34 | clgv | your "up" is conflicting with my image that in CS trees grow from top to bottom ;) |
| 11:34 | gfredericks | every time it descends it just looks for the first failing child, and continues down the tree through that ;; <- basically the whole description of the algorithm |
| 11:34 | clgv | ok |
| 11:35 | gfredericks | I don't think my "up" conflicts with that... |
| 11:35 | clgv | if the root containing the minimum is at the top is should walk up ^^ |
| 11:35 | gfredericks | "minimum"? |
| 11:36 | gfredericks | the root of the shrink tree is the "largest" failure |
| 11:36 | gfredericks | and I'm speaking as if the root is at the top |
| 11:36 | gfredericks | so going "down" gives you smaller test inputs |
| 11:36 | clgv | ah, there is the conflict. I thought the tree represents the whole search space starting at the minimal domain value tuple for the variables... |
| 11:37 | gfredericks | aah no, the tree is particular to a generated input value |
| 11:37 | gfredericks | test.check's generators actually generate shrink trees instead of single values |
| 11:38 | gfredericks | the test runner just ignores everything but the root of the tree unless it finds a failure |
| 11:38 | gfredericks | once it finds the first failure it walks the tree to find a smaller failure based on the original |
| 11:38 | clgv | gfredericks: to summarize you want to replace test.checks "engine" ;) |
| 11:38 | gfredericks | you could say that |
| 11:41 | gfredericks | I'm always peppering reid with radical overhauls to various parts of test.check |
| 11:41 | arrdem | &(= Double/NaN Double/NaN) |
| 11:41 | lazybot | ⇒ false |
| 11:41 | clgv | gfredericks: does quick-check have different search algorithms? |
| 11:41 | gfredericks | clgv: no |
| 11:42 | clgv | gfredericks: ah damn. the you would not have to invent all yourself ;) |
| 11:42 | Bronsa | arrdem: NaN is never equal to anything |
| 11:42 | Bronsa | ,(let [a Double/NaN] (= a a)) |
| 11:42 | clojurebot | false |
| 11:42 | arrdem | Bronsa: right I was just making sure. It's been a while since I messed with the float spec |
| 11:42 | gfredericks | it should be equal to anything that isn't a number |
| 11:43 | arrdem | Bronsa: seeing justin_smith chatting about = on twatter and this was the handiest repl :P |
| 11:43 | gfredericks | clgv: part of the problem is that the current code doesn't allow for alternative search algorithms to be implemented efficiently |
| 11:44 | justin_smith | arrdem: I understand the reasoning that it shouldn't be = to itself, but it is fascinating in being the only value with those semantics in the jvm |
| 11:45 | gfredericks | ,(def justin (reify Object (equals [_ x] false))) |
| 11:45 | clojurebot | #'sandbox/justin |
| 11:45 | justin_smith | arrdem: also the only item with those semantics in most other (all other?) languages |
| 11:45 | gfredericks | ,(= justin justin) |
| 11:45 | clojurebot | true |
| 11:45 | justin_smith | haha |
| 11:45 | gfredericks | crap |
| 11:45 | arrdem | haha |
| 11:46 | justin_smith | point taken though - let's just say it's the only thing that ships with the jvm with those semantics |
| 11:46 | justin_smith | I fully believe a new thing can be made that acts that way |
| 11:47 | Bronsa | I'm not sure there's a way to implement something so that (let [a (something)] (= a a)) is false |
| 11:47 | Bronsa | because = does a pointer check before calling .equals |
| 11:47 | clgv | justin_smith: are you trying to integrate "php language features" into the jvm? :P |
| 11:47 | justin_smith | heh |
| 11:48 | clgv | ,(.equals justin justin) |
| 11:48 | clojurebot | false |
| 11:48 | justin_smith | Bronsa: except NaN of course |
| 11:48 | clgv | gfredericks: there you go, solved for java land ;) |
| 11:48 | Bronsa | justin_smith: yeah |
| 11:50 | justin_smith | clgv: var_dump(NAN == 12); // boolean true - from http://php.net/manual/en/function.is-nan.php |
| 11:50 | justin_smith | LOL |
| 11:51 | justin_smith | php is such a deep pity of wtf humor |
| 11:51 | arrdem | oh god why |
| 11:51 | justin_smith | inorite |
| 11:51 | justin_smith | like if I still had a room mate I would have just woken her up laughing |
| 11:51 | mearnsh | :') |
| 11:52 | justin_smith | s/pity/pit |
| 11:52 | clgv | it's kinda funny that there are still people building new systems in php (willingly?) |
| 11:52 | justin_smith | I pity php, but it is a pit of humor |
| 11:52 | arrdem | justin_smith: http://imgur.com/gallery/NdGyt |
| 11:52 | hadronzoo | I'd like to test some async code that contains timeouts with test.check, and I'd like to make the timeouts no-ops. What's the best way to do that? |
| 11:52 | afhammad | is it ok to require ns A in B and B in A? |
| 11:52 | Bronsa | afhammad: no |
| 11:52 | clgv | justin_smith: http://en.wikiquote.org/wiki/Rasmus_Lerdorf |
| 11:53 | arrdem | clgv: ... aaand there goes the last iota of respect I had for PHP |
| 11:54 | clgv | arrdem: it's always entertaining to reread those quotes :D |
| 11:54 | Wild_Cat | justin_smith: the best part of PHP is that its ternary operator is right-associative. To my knowledge, no other language does that. |
| 11:54 | justin_smith | new favorite piece of trivia: "There are people who actually like programming. I don't understand why they like programming." was said by the author of which widely used programming language? |
| 11:54 | Wild_Cat | er, wait, no, it's left-associative. |
| 11:54 | arrdem | clgv: it's almost like the language was developed with no respect for software architecture. oh wait. it was. |
| 11:54 | Wild_Cat | it's every other ternary operator that's right-associative. My bad. |
| 11:54 | afhammad | Bronsa: hmm, what do you do in the case that you need to? Is there an idiomatic way to structure such code? I have "models" that encapsulate some domain specific functions that may need to be referenced from other models |
| 11:55 | justin_smith | afhammad: you can lift the common features into an abstraction used by both namespaces |
| 11:55 | Bronsa | afhammad: put the common functions in a impl namespace and require it from both namespaces |
| 11:56 | justin_smith | afhammad: for example you can specify multimethods or protocols, and then require all the definitions, and implement some parts, in each ns |
| 11:57 | afhammad | justin_smith, Bronsa: but the functions aren't common, and that defeats the purpose of having seperate namespaces (in this case). Example from (ns x.features ..) i need to require (ns x.projects ..) and call projects/get-all |
| 11:58 | justin_smith | afhammad: I am not talking about sharing functions at all |
| 11:59 | justin_smith | afhammad: (projects/get-all) implies global state, which you shouldn't be doing anyway - make a container that holds projects, and act on that. Have a shared ns that describes features and projects, but does not implementation. Then require that and implement the apropriate parts from other namespaces. |
| 11:59 | literary | Does this line look a bit sketchy to anyone else? https://github.com/chaslemley/slim.clj/blob/master/src/slim/core.clj#L15 |
| 12:00 | Bronsa | literary: no, that's destructuring syntax |
| 12:00 | Bronsa | ,(let [[a b] [1 2]] [a b]) |
| 12:00 | clojurebot | [1 2] |
| 12:00 | literary | I'm talking about the use of regex to parse a whitespace-indented file. |
| 12:00 | justin_smith | Bronsa: literary: oh I thought it was like "is this a fucked up regex" |
| 12:01 | Bronsa | literary: ah ok, sorry then |
| 12:01 | literary | It seems weird to use regex to parse anything. |
| 12:01 | literary | The language it's trying to parse is this: http://slim-lang.com/ |
| 12:01 | justin_smith | yeah, there are some extensions to regex that make big ones less unweildy, brb looking it up, forget what it is called |
| 12:02 | afhammad | justin_smith: do you know of any examples of such an implementation I can look at? |
| 12:02 | noprompt | dnolen_: any thoughts on how to approach CLJS-871? |
| 12:03 | justin_smith | literary: C-f "(?x)" http://grimoire.arrdem.com/1.6.0/clojure.core/re-pattern/ |
| 12:03 | noprompt | dnolen_: it seems like fields for deftype/defrecord don't have to be munged? |
| 12:04 | noprompt | actually, scratch that last line. |
| 12:07 | justin_smith | afhammad: one moment, let me see if I can dig up a good clear example |
| 12:07 | afhammad | justin_smith: thanks! |
| 12:08 | noprompt | dnolen_: i think i know to fix it. |
| 12:20 | justin_smith | afhammad: not perfect, but small enough to be fairly clear I hope |
| 12:21 | justin_smith | I defien a protocol in this ns https://github.com/caribou/caribou-plugin/blob/master/src/caribou/plugin/protocol.clj |
| 12:21 | justin_smith | and functions that act on things implementing that protocol here https://github.com/caribou/caribou-plugin/blob/master/src/caribou/plugin/state.clj |
| 12:21 | dnolen_ | noprompt: cool |
| 12:22 | justin_smith | afhammad: by constructing things this way, my functions can add on any other implementation of the caribou-plugin protocol, without needing to know how they are implemented at all |
| 12:22 | justin_smith | *act on |
| 12:37 | afhammad | justin_smith: thanks |
| 12:38 | noprompt | dnolen_: i don't recall how to run the clojurescript tests. :-/ |
| 12:40 | noprompt | dnolen_: nm again. :-P it's monday. |
| 12:42 | perplexa | hello, is there a best practice to deal with cyclyc dependencies? i have a function that has a callback to another function, which might then call the initial function again. but clojure doesn't seem to like this as either of the function isn't defined at that point. how do i deal with that? |
| 12:44 | justin_smith | why not pass the callback in? |
| 12:44 | perplexa | to avoid ugliness :) |
| 12:44 | perplexa | but that might actually work |
| 12:45 | perplexa | i just came across (resolve ...), guess your way is preferable |
| 12:45 | justin_smith | another option is using core.async instead of callbacks |
| 12:47 | justin_smith | is it really a "callback" if the thing to call isn't a parameter? that sounds like a "call" to me |
| 12:48 | perplexa | justin_smith: just using a lib, (zk/connect "127.0.0.1" :watcher (fn [event] (println event))), where i need a watcher function that checks for expire/disconnect states and reconnect |
| 12:48 | perplexa | and since it was a big longer, i just put it in its own function |
| 12:49 | rurumate | core.async is nice but you have to remember to always catch all exceptions that may happen inside (go ..) block. so it should almost always be (go (try ...)) otherwise you may run into some surprising behaviour |
| 12:50 | kzisme | hello everyone |
| 12:51 | perplexa | justin_smith: using an anonymous function now, thanks ;p |
| 12:51 | perplexa | (inc justin_smith) |
| 12:51 | lazybot | ⇒ 91 |
| 12:51 | ro_st | rurumate: yes. particularly in cljs, where your exception stacktrace will point deep inside the async machinery |
| 12:52 | justin_smith | rurumate: that applies to just about anything that is dispatched to a "secondary" thread, if it fails it won't be interrupting your other threads |
| 12:53 | justin_smith | rurumate: so if you care about a result, you should also care about it's exception state - I like how futures raise any exception thrown in the new thread when dereferenced actually |
| 12:54 | justin_smith | (def result (future (/ 1 0)) ... do other stuff ... @result (exception gets raised here) |
| 12:56 | rurumate | justin_smith: interesting. not sure if I like that better though |
| 12:57 | rurumate | well, it sure is better than just converting the exception to nil, |
| 12:58 | rurumate | as (go..) seems to do |
| 12:58 | stuartsierra | depends on the version |
| 12:58 | justin_smith | I think it makes sense for future, as future is intended to give you a result, so the consumer should care about the exception |
| 12:58 | rurumate | oh, is that changed now? |
| 12:58 | stuartsierra | It's gotten a bit better recently - you can set an exception handler on a channel. |
| 12:58 | justin_smith | nice! |
| 12:59 | stuartsierra | If you don't the exception should propagate to the Thread.getDefaultUncaughtExceptionHandler |
| 12:59 | rurumate | of which thread? |
| 12:59 | stuartsierra | The global uncaught exception handler. |
| 12:59 | rurumate | oh that's a global |
| 13:00 | rurumate | anyway I think it's almost always a mistake to not catch the exception in the (go..) block |
| 13:00 | ro_st | stuartsierra: is there a code sample for that somewhere? |
| 13:00 | stuartsierra | But within a `go`, it still usually makes sense to try/catch everything and either return the exception it or forward it somewhere else. |
| 13:01 | stuartsierra | ro_st: code sample for which thing? |
| 13:01 | ro_st | the exception handler on a channel thing |
| 13:01 | stuartsierra | ro_st: it's just an argument to `chan` and some other functions. |
| 13:02 | ro_st | gotcha, thanks https://clojure.github.io/core.async/#clojure.core.async/chan |
| 13:08 | instilled | Hi! Is it possible with leiningen to define dependencies in a master project.clj that I can refer to in multiple projects so that they all share dependencies in the same version, i.e. something similar to a parent pom.xml, or a bom, in maven parlance? |
| 13:09 | technomancy | instilled: just depend on a project that depends on everything you want |
| 13:09 | technomancy | aka "favour composition over inheritance" |
| 13:09 | instilled | technomany: ok. cheers! |
| 13:16 | technomancy | anyone want an easy lein sticker? |
| 13:16 | kungi | technomancy: \o, here |
| 13:16 | verma | technomancy, easy is relative, but sure :) |
| 13:16 | technomancy | https://github.com/technomancy/leiningen/issues/1721 |
| 13:16 | technomancy | should be a pretty straightforward fix =) |
| 13:16 | seangrove | Does this look like something I've obviously messed up? Seems to be correlated with upgrading lein, but that could just be superstition https://www.refheap.com/16ff2d6b9390dd3b29bcfbf7f |
| 13:17 | kungi | technomancy: I thought about stickers you know with adhesive tape on one side and a nice logo on the other. |
| 13:17 | technomancy | kungi: yeah, that's the idea |
| 13:18 | technomancy | kungi: if you get a patch applied, you can send me an envelope and I'll send you a sticker |
| 13:18 | kungi | technomancy: got it :-) |
| 13:18 | ro_st | "we don't take bugs leiningen down" |
| 13:18 | ro_st | sorry |
| 13:19 | nullptr | seangrove: seems the built in stuff is getting the same warnings yours is, so doesn't seem like you did anything obviously stupid |
| 13:23 | seangrove | Chestnut was very cool, but now I have to figure out how to get my other projects to work |
| 13:23 | seangrove | The yaks, they're hairy today |
| 13:23 | mdeboard | nothing OBVIOUSLY stupid |
| 13:23 | ro_st | chestnut? |
| 13:23 | mdeboard | The non-obvious stupidity is far more insidious |
| 13:24 | nullptr | mdeboard: truth |
| 13:24 | nullptr | non-obvious stupidity accounts for ~80% of debugging time, and 98% of "oh are you #$!%ing kidding me?!" exclamations... |
| 13:24 | seangrove | nullptr: I suspect it'll be that in the end, yeah |
| 13:25 | seangrove | The latest cljs compiler gives me a NPE on build though |
| 13:25 | seangrove | Maybe I can try downgrading lein... I don't have a clue what I was on before though |
| 13:28 | noprompt | dnolen_: would you be opposed to putting a README in the script directory which contains information regarding the tests etc. it's not immediately obvious the gh wiki page has that information. |
| 13:31 | linman32 | hi is there a way to read back a particular type from a string? |
| 13:31 | linman32 | (read-string "string-type-HTTPKit-channel") |
| 13:31 | justin_smith | ,(class/forName (str (class []))) |
| 13:31 | clojurebot | #<CompilerException java.lang.RuntimeException: No such namespace: class, compiling:(NO_SOURCE_PATH:0:0)> |
| 13:31 | justin_smith | ,(Class/forName (str (class []))) |
| 13:31 | clojurebot | #<ClassNotFoundException java.lang.ClassNotFoundException: class clojure.lang.PersistentVector> |
| 13:31 | justin_smith | hmm |
| 13:32 | justin_smith | ,(Class/forName "clojure.lang.PersistentVector") |
| 13:32 | clojurebot | clojure.lang.PersistentVector |
| 13:32 | justin_smith | that works at least |
| 13:32 | linman32 | more exactly: (read-string (prn-str http-kit-channel-value)) |
| 13:32 | justin_smith | do you mean pr-str? |
| 13:32 | linman32 | sure pr-str |
| 13:33 | linman32 | justin_smith: how do i formulate it? (read-string (Class/forName "string..")) |
| 13:34 | justin_smith | "string.." isn't a class |
| 13:34 | justin_smith | I misunderstood what you were trying to do |
| 13:34 | justin_smith | read-string will only work for things that have a read syntax |
| 13:34 | linman32 | so is this possible? (read-string (pr-str http-kit-channel-value)) |
| 13:34 | justin_smith | I doubt HTTPkit-channel has a read syntax |
| 13:35 | justin_smith | what type is http-kit-channel-value? does it have a read syntax? |
| 13:36 | ro_st | linman32: what do you see when you (pr-str http-kit-channel-value) |
| 13:36 | slester | Is it possible that #6 on 4clojure is bugged? |
| 13:36 | linman32 | "#<AsyncChannel /127.0.0.1:8080<->/127.0.0.1:55191>" |
| 13:36 | linman32 | that is (pr-str chnl) |
| 13:36 | justin_smith | slester: seriously doubt it |
| 13:37 | justin_smith | slester: there is no bug, but you maybe don't get how the "blank" there works |
| 13:37 | ro_st | linman32: and what happens when you (read-string) that string |
| 13:37 | justin_smith | slester: the blank is not strict clojure syntax - it is any sybol(s) that you wish to insert |
| 13:38 | justin_smith | ro_st: #<...> is a notation that means "unreadable" |
| 13:38 | linman32 | RuntimeException Unreadable form clojure.lang.Util.runtimeException (Util.java:221) |
| 13:38 | justin_smith | ,(read-string "#<anything at all>") |
| 13:38 | clojurebot | #<RuntimeException java.lang.RuntimeException: Unreadable form> |
| 13:38 | ro_st | linman32: then you have your answer. it's not possible to serialise http-kit-channels to strings and back. |
| 13:39 | linman32 | ro_st: ok, thanks. wasn't sure |
| 13:40 | slester | justin_smith, I know how it works. |
| 13:40 | slester | I had to skip #6 because even the solution I found elsewhere on the internet doesn't work |
| 13:40 | justin_smith | slester: if you haven't solved it, you don't know how it works |
| 13:41 | justin_smith | would you like the solution? |
| 13:41 | slester | sigh |
| 13:41 | slester | So I've solved up to 20, skipping #6, and I don't know how it works. |
| 13:41 | justin_smith | I just reran mine, it still works |
| 13:41 | justin_smith | it's freeform |
| 13:41 | justin_smith | it can be any number of forms |
| 13:42 | justin_smith | they get literally inserted in the blank |
| 13:43 | jcsims | slester: I've never seen problem 6 before, and just solved it. I don't think there's a bug |
| 13:43 | justin_smith | slester: the solution is trivial, I am following about 50 other users, our answers are character per character identical |
| 13:51 | csd_ | What is the easiest way to get a subset of values from a map? E.g. some (f {:a 1 :b 2 :c 3} [:a :b]) => {:a 1 :b 2} |
| 13:51 | ro_st | select-keys |
| 13:52 | justin_smith | ,(select-keys {:a 1 :b 2 :c 3} [:a :b]) |
| 13:52 | clojurebot | {:b 2, :a 1} |
| 13:52 | ro_st | literally replace f with select-keys and you have what you want |
| 13:52 | csd_ | perfect |
| 13:52 | justin_smith | f is literally select-keys in this case! |
| 13:52 | csd_ | thanks |
| 13:52 | dunnowins_ | i just learned of select keys yesterday |
| 13:52 | ro_st | good instinct :-) |
| 13:52 | dunnowins_ | great function! |
| 13:52 | literary | ,(def f select-keys) |
| 13:52 | clojurebot | #'sandbox/f |
| 13:52 | literary | That's how. |
| 13:52 | justin_smith | heh |
| 13:52 | literary | ,f |
| 13:52 | clojurebot | #<core$select_keys clojure.core$select_keys@149a696> |
| 13:52 | literary | ,(f {:a 1 :b 2 :c 3} [:a :b]) => {:a 1 :b 2} |
| 13:52 | clojurebot | {:b 2, :a 1} |
| 13:52 | ro_st | https://tbaldridge.pivotshare.com/ has nice function of the day videos |
| 13:53 | literary | Wait why did that work. |
| 13:53 | ro_st | https://tbaldridge.pivotshare.com/categories/function-of-the-day/2084/media?m_sort=date&m_order=desc |
| 13:53 | justin_smith | literary: why would it not work? |
| 13:55 | literary | => |
| 13:55 | literary | ,() foo bar |
| 13:55 | clojurebot | () |
| 13:55 | literary | Oh. |
| 13:55 | justin_smith | oh, that part, heh |
| 13:56 | justin_smith | I missed that you had the => in there |
| 14:04 | noprompt | dnolen_: so it looks like this problem might be a bit tricky. if emit* :dot is patched to write the field/method with (munge field/method js-reserved) deftype/defrecord will work as expected with property access. on the other hand that would break access for vanilla js-objects (e.g. (.-default #js{:default ...})). the only think i can think of at this point which would solve both problems is to emit a check for either x |
| 14:04 | noprompt | .default$ or x["default"]. otherwise it seems like this will end up being a "won't fix" issue. |
| 14:06 | dnolen_ | noprompt: yeah I don't have a good answer for this one, default is simply not allowed on many JS engines in the wild |
| 14:06 | dnolen_ | yet munging it busts interop |
| 14:06 | dnolen_ | so I would chalk it up as not worth it |
| 14:06 | verma | technomancy, I am thinking that :uberjar profile should make it to the list of profiles inited here: https://github.com/technomancy/leiningen/blob/master/leiningen-core/src/leiningen/core/project.clj#L807 |
| 14:06 | dnolen_ | or switch to keywords |
| 14:06 | dnolen_ | i.e. defrecord |
| 14:06 | noprompt | dnolen_: foo.default = "bar" is perfectly fine in recent js engines IE9 and up. |
| 14:06 | verma | technomancy, which will cause it to setup correctly for cleanups |
| 14:06 | dnolen_ | noprompt: we don't care about that though |
| 14:07 | dnolen_ | noprompt: CLJS works w/ JS engines back to 2001 |
| 14:07 | dnolen_ | plain and simple |
| 14:07 | noprompt | sure. |
| 14:07 | verma | technomancy, like this function here never gets to see the uberjar profile |
| 14:07 | verma | https://github.com/technomancy/leiningen/blob/master/leiningen-core/src/leiningen/core/project.clj#L643 |
| 14:08 | noprompt | dnolen_: damn. this is something that caused me to debug for about 30 mins before i finally realized what was going on. maybe we should emit a warning? |
| 14:09 | dnolen_ | noprompt: no there's a good idea - yes fields that reserved keyword in JS we could warn about that |
| 14:10 | noprompt | dnolen_: alright, i'll handle it that way. |
| 14:10 | verma | technomancy, I do see (:profiles project) being refered here: https://github.com/technomancy/leiningen/blob/master/leiningen-core/src/leiningen/core/project.clj#L660 .. checking |
| 14:12 | noprompt | dnolen_: would anyone complain if i alphabetized *cljs-warnings*? |
| 14:12 | technomancy | verma: the original project map should be stored as metadata on the effective project map |
| 14:15 | dnolen_ | noprompt: no problem w/ that, but not in the same ticket |
| 14:15 | noprompt | dnolen_: ok. |
| 14:24 | daniel___ | Do I need to exempt certain routes from auth using friend? https://gist.github.com/danielstockton/aeaf561c3b58235e9d29 |
| 14:24 | daniel___ | my index.html page returns Unauthorized, i thought i'd have to wrap my route/resources route in authorize for that to happen |
| 14:29 | noprompt | dnolen_: how does this sound? "JS reserved identifier 'default' used as field in type Foo (access with default$)" |
| 14:30 | dnolen_ | noprompt: JS -> JavaScript, but otherwise works for me |
| 14:30 | noprompt | dnolen_: great! |
| 14:31 | dnolen_ | noprompt: there needs to be a flag to suppress this warning for people that want to target more recent JS engines |
| 14:31 | noprompt | dnolen_: where is that handled? |
| 14:32 | dnolen_ | noprompt: actually ignore what I said about recent JS engines - just need a flag to suppress - see top of analyzer.cljs |
| 14:34 | jakebasile | daniel___: as I understand it, friend/authenticate by default blocks everything unless you set :allow-anon? and then wrap the routes you want authed |
| 14:35 | noprompt | dnolen_: cool |
| 14:36 | daniel___ | jakebasile: i added allow-anon?, i need to wrap routes i dont want blocked with friend/authenticated ? |
| 14:36 | mmeix | very short question : there is no way to express #(/ % 2) with (partial ...), right? (just to make sure) |
| 14:37 | jakebasile | daniel___: other way around, allow-anon? switches the default for all routes to allow anyone to see it, you need to tell friend what routes need to be authenticated |
| 14:37 | daniel___ | im trying to go by https://github.com/cemerick/friend-demo/blob/master/src/clj/cemerick/friend_demo/interactive_form.clj, where the /login page is not wrapped by anything |
| 14:37 | noprompt | dnolen_: when should something be prefixed with cljs? ie *cljs-check-field-names* vs *check-field-names* |
| 14:37 | daniel___ | jakebasile: right, i see |
| 14:37 | daniel___ | makes sense, i wonder why im still being clocked then |
| 14:37 | daniel___ | blocked* |
| 14:37 | jakebasile | in that example, everything is routed anon |
| 14:38 | dbasch | mmeix: (partial (fn [x] (/ x 2))) |
| 14:38 | jakebasile | all it does is add your name in if you are authenticated |
| 14:38 | jakebasile | so in that case nothing is wrapped because log-in is optional |
| 14:38 | noprompt | dnolen_: everything but *unchecked-if* and *analyze-deps* seems to be prefixed so i'm guessing those are special cases. |
| 14:38 | daniel___ | my index.html is still inaccessible with allow-anon? true |
| 14:39 | dnolen_ | noprompt: *check-field-names* is probably best - I only used cljs prefix to disambiguate vars that have similar names in Clojure |
| 14:39 | verma | technomancy, for the scope of this issue, would you like changes to be constrained to just cleanup or would it be ok if I touch some other areas, e.g.the target-path machinery works great, only that by default only the :default profile is expanded https://github.com/technomancy/leiningen/blob/master/leiningen-core/src/leiningen/core/project.clj#L814 |
| 14:39 | dbasch | mmeix: if they are floats, of course (partial * 0.5) |
| 14:39 | verma | technomancy, I could very well just make :default include :uberjar and it would work :P |
| 14:40 | amalloy | dbasch: (partial * 1/2) works either way |
| 14:40 | dbasch | amalloy: just beat me :) |
| 14:40 | verma | technomancy, here: https://github.com/technomancy/leiningen/blob/master/leiningen-core/src/leiningen/core/project.clj#L474 |
| 14:40 | mmeix | dbasch thanx |
| 14:41 | verma | technomancy, or I could just make profile-scope-target-path accept :uberjar if :uberjar exists in project map |
| 14:44 | verma | technomancy, or here [1], I can just do [:default :uberjar] as default if :uberjar exists in map otherwise just :default .... [1] https://github.com/technomancy/leiningen/blob/master/leiningen-core/src/leiningen/core/project.clj#L884 |
| 14:45 | verma | or am I going in circles |
| 14:46 | jakebasile | daniel___: I have some very similar code using friend, and the only real difference I see is that I don't define :unauthenticated-handler. My routes are all unadorned, I check for authentication/authorization in the actual handlers. here's my friend handler def: https://gist.github.com/jakebasile/ffca14d09d42ed0cbb2a |
| 14:47 | rurumate | ,(if-let [[n & ns] [1 2 4 5]] ns) |
| 14:47 | clojurebot | (2 4 5) |
| 14:47 | rurumate | ,(if-let [[n & ns] [1 2 4 5]] n) |
| 14:47 | clojurebot | 1 |
| 14:47 | rurumate | ,(if-let [[n & ns] [1 2 4 5]] n ns) |
| 14:47 | clojurebot | #<CompilerException java.lang.RuntimeException: Can't take value of a macro: #'clojure.core/ns, compiling:(NO_SOURCE_PATH:0:0)> |
| 14:47 | rurumate | ,(if-let [[n & ns] [1 2 4 5]] ns n) |
| 14:47 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: n in this context, compiling:(NO_SOURCE_PATH:0:0)> |
| 14:48 | rurumate | is it just me, or is something not right about if-let? |
| 14:49 | rurumate | oh, I see, there's only a let if the test succeeds |
| 14:49 | rurumate | ,(if-let [[n & ns] [1 2 4 5]] ns 1) |
| 14:49 | clojurebot | (2 4 5) |
| 14:50 | daniel___ | https://gist.github.com/jakebasile/ffca14d09d42ed0cbb2a |
| 14:50 | technomancy | verma: I don't think expanding profiles is necessary; having a list of :target-path values and a list of profile names should be enough |
| 14:50 | daniel___ | sry, didnt mean to paste here, thanks jakebasile |
| 14:50 | technomancy | but I haven't thought through it; I could be missing something |
| 14:51 | daniel___ | jakebasile: same, im also allowed through if i dont define unauthenticated-handler |
| 14:52 | daniel___ | actually, it redirects me to /login |
| 14:54 | verma | technomancy, the final clean calls come out to be (delete-file-recursively "/project/path/target/base+system+user+dev") .. which indicates that :uberjar needs to added to this + delimited stuff, but this stuff comes from core when the initial profiles are loaded (mapped from :default) |
| 14:54 | technomancy | verma: oh yeah, I see. geez. |
| 14:54 | verma | technomancy, so this giant machinery is working pretty good, just not sure where to plug in the uberjar stuff :) |
| 14:56 | verma | technomancy, to cascade the changes down, I guess the default profiles of [:default] can be changed to [:default :uberjar] if :uberjar exists in project |
| 14:56 | technomancy | I don't see why :uberjar is special though |
| 14:56 | technomancy | any profile could be composite |
| 14:57 | technomancy | makes me think that the clean task needs to handle expanding composites, which is a bit unwieldy, but I don't think a special-case will do the job anyway |
| 14:58 | verma | hmmm |
| 15:00 | verma | technomancy, I guess in the clean function, we can just reconstruct the clean-targets path, instead of picking the one that's set in the project map |
| 15:02 | arohner | verma: that sounds like the issue I reported, yay! |
| 15:02 | arohner | I assume you're talking about https://github.com/technomancy/leiningen/issues/1721 |
| 15:02 | verma | yes |
| 15:02 | verma | :) |
| 15:02 | arohner | :-) |
| 15:02 | verma | its tagged as Newbie so I thought I'd give it a shot for awesome sticker |
| 15:04 | arohner | verma: I find it's easier to submit issues than PRs for stickers ;-) |
| 15:05 | verma | oh what? I didn't know submitting issues gets you stickers |
| 15:05 | verma | :P |
| 15:23 | justin_smith | the easiest way to get stickers is at the dollar store |
| 15:25 | poushkar | Newbie here. Can someone look at my project.clj (http://pastebin.com/7b9RZ5xV) and help me to identify why I keep getting ‘java.lang.Exception: Unknown build identifier: ring’ on ‘lein up’? Can’t figure it out myself. |
| 15:26 | technomancy | verma: nope, has to be a patch that's accepted |
| 15:36 | poushkar | someone? |
| 15:36 | verma | poushkar, seems to me like cljsbuild doesn't know what ring build type is, since you've only defined "dev". If you intend to run different pdo tasks, the docs say that the tasks need to be comma delimited, not sure how you're going to do it here, but I suggest adding a "," between dev and ring and see what happens |
| 15:37 | verma | cljsbuild auto dev is one task, ring is another, and may be server-headless is another task (not sure) |
| 15:38 | verma | lein pdo cljsbuild auto dev, ring, server-headless is how you'd run them on the command line |
| 15:39 | poushkar | verma: oh, wow! it helped. Shame on me… I followed tutorial and missed that there is a comma. Thank you a lot |
| 15:39 | verma | np |
| 15:58 | justin_smith | duh, just realized "pdo" is parallel do, that's mighty useful |
| 16:07 | gfredericks | anybody know about getting whidbey/puget/fipp to print record literals and print-method-customized objects correctly? |
| 16:08 | bbloom | gfredericks: are you using puget (via whidbey) or fipp's internal edn printer? |
| 16:12 | gfredericks | bbloom: the former, but I'm totally unafraid to patch the living crap out of those libs |
| 16:13 | bbloom | gfredericks: heh, well iirc i delegate to the normal pr-str thing if i don't know what to do with it, but greglook doesn't for puget |
| 16:14 | bbloom | gfredericks: but yeah, you can just call in to pr-str in :default of pudget's printer |
| 16:14 | gfredericks | specical handling for records? |
| 16:16 | bbloom | gfredericks: it already handles records |
| 16:16 | bbloom | gfredericks: https://github.com/greglook/puget/blob/e0d3da89ce562b3d56f6792bcfd23772dbc8057e/src/puget/printer.clj#L267 |
| 16:20 | gfredericks | hmmm |
| 16:21 | bbloom | gfredericks: not working for you? |
| 16:21 | gfredericks | so it does |
| 16:21 | gfredericks | oh it's clojure.pprint that doesn't |
| 16:21 | gfredericks | clojure.pprint handles print-method, puget handles records |
| 16:21 | gfredericks | each fails at the other |
| 16:22 | bbloom | gfredericks: i think you just need to do add a :default case |
| 16:22 | gfredericks | bbloom: for canonize? |
| 16:23 | bbloom | gfredericks: yes |
| 16:23 | bbloom | https://github.com/greglook/puget/blob/e0d3da89ce562b3d56f6792bcfd23772dbc8057e/src/puget/printer.clj#L193-L208 |
| 16:23 | bbloom | actually... |
| 16:23 | bbloom | https://github.com/greglook/puget/blob/e0d3da89ce562b3d56f6792bcfd23772dbc8057e/src/puget/printer.clj#L304 |
| 16:23 | bbloom | you probably just want to change that str to pr-str |
| 16:23 | gfredericks | yeah I was looking at that |
| 16:24 | bbloom | gfredericks: greglook is pretty responsive. why don't you try that and if it works nicely, send him a PR. feel free to @brandonbloom me too |
| 16:24 | gfredericks | bbloom: since he uses :span on line 309, that implies his version is single-line already anyhow? |
| 16:24 | gfredericks | just trying to figure out if the change loses anything |
| 16:24 | bbloom | gfredericks: span isn't about single lines |
| 16:24 | gfredericks | glad I asked |
| 16:24 | gfredericks | oh actually nevermind I see he calls str already |
| 16:25 | gfredericks | so just pr-str instead like you said |
| 16:25 | bbloom | gfredericks: span probably should just be called concat |
| 16:25 | bbloom | and seqs are treated the same as :span |
| 16:27 | gfredericks | roger |
| 16:33 | kenrestivo | that whidbey looks great, but as when trying to use it with nrepl.el, i got https://www.refheap.com/91693 |
| 16:34 | gfredericks | bbloom: oh puget has a protocol for doing tagged elements |
| 16:34 | gfredericks | I feel like there could be a library just for wiring up tagged literals |
| 16:35 | gfredericks | kenrestivo: what does nrepl.el do? |
| 16:35 | gfredericks | I spent most of yesterday getting whidbey to work with cider |
| 16:36 | gfredericks | it's....complicated |
| 16:36 | technomancy | gfredericks: this isn't an nrepl.el thing |
| 16:36 | technomancy | it's having trouble even launching the server, so cider would have the same problem |
| 16:38 | gfredericks | there's so many buggy things involved; e.g. NREPL-53 |
| 16:38 | gfredericks | whidbey itself has a few nondeterministic bugs which should be fixed in the next release |
| 16:39 | bbloom | gfredericks: greglook and i are both vim ppl, so any help stabilizing emacs integration is welcome |
| 16:40 | gfredericks | yeah I followed up on most everything I found |
| 16:40 | gfredericks | the cider side is complicated too though, because I think there are some internal evals that assume the output will be on one line |
| 16:40 | gfredericks | so I wrote some elisp patches that only do the pprinting for user stuff |
| 16:40 | bbloom | ಠ_ಠ |
| 16:41 | gfredericks | but I don't know cider well enough to know how integrateable those changes are |
| 16:41 | bbloom | gfredericks: no idea, but i do know that pretty-printing all-the-time is a no-brainer |
| 16:42 | gfredericks | it definitely fails to bootup the nrepl connection at all when I set it that way |
| 16:42 | gfredericks | it's worth mentioning that whidbey is configured to pretty much be a NOOP unless you're using `lein repl` with reply |
| 16:43 | gfredericks | or at least anything that uses the :nrepl-context repl option from the leiningen profile |
| 16:43 | gfredericks | I assume that's just reply but I don't really know; does vim fireplace use it too somehow? |
| 16:45 | SagiCZ1 | hey guys.. i want to show my friend what clojure is all about, what is the greatest motiviational video possibly from Rich? somewhere where he talks about mutability and why its bad and whatnot? |
| 16:46 | SagiCZ1 | maybe Clojure for Java Developers? |
| 16:46 | postpunkjustin | SagiCZ1: maybe Rich's Simple Made Easy talk? |
| 16:47 | schmir | I suggest "Simple Made Easy" and "The value of values" |
| 16:47 | SagiCZ1 | thanks guys |
| 17:01 | aconbere | howdy, a ton of the functions in core.async are documented simple "Deprecated use transformers instead" |
| 17:01 | aconbere | but there isn't a link that says "hey this is what a transformer is and how to use it" |
| 17:01 | aconbere | and the old documentation for those methods are gone |
| 17:01 | aconbere | what is the correct thing to do here? |
| 17:03 | Bronsa | aconbere: it's referring to http://clojure.org/transducers |
| 17:05 | aconbere | Bronsa: how do I get access to transducers? |
| 17:05 | Bronsa | aconbere: you have to use clojure 1.7.0-alpha2 |
| 17:05 | aconbere | >_< |
| 17:06 | aconbere | that makes all my projects not using that version of clojure, but using core.async a lot harder to use :P |
| 17:06 | Bronsa | aconbere: clojure 1.7.0 should be released soon |
| 17:06 | amalloy | aconbere: use an older version of core.async that still has the docstrings, perhaps? |
| 17:07 | aconbere | amalloy: yeah probably that |
| 17:07 | aconbere | just sucks that they replaced the docstrings with such useless docs |
| 17:09 | tvanhens | anyone ever run into an error with the reloaded workflow where namespaces will load when loaded manually but when you (reset) you get a no namespace error |
| 17:09 | tvanhens | ? |
| 17:09 | tvanhens | the namespace is there and loads when I manually eval |
| 17:13 | tvanhens | anyone have experience with the reloaded workflow and component? |
| 17:13 | SagiCZ1 | what is a "transient" ? |
| 17:15 | SagiCZ1 | is it the "make this mutable for a now" thing? |
| 17:15 | technomancy | SagiCZ1: not really |
| 17:15 | technomancy | more like "not guaranteed to be immutable" |
| 17:15 | justin_smith | SagiCZ1: it is mutable, but only usable within one thread, and easy to translate to an immutable type |
| 17:15 | technomancy | SagiCZ1: http://technomancy.us/132 |
| 17:15 | justin_smith | and yeah, it may mutate, may not |
| 17:15 | SagiCZ1 | and it is used to speed up some operations? |
| 17:16 | tvanhens | how do I handle a No namespace exception when the namespace is present? |
| 17:16 | SagiCZ1 | technomancy: will read |
| 17:16 | hyPiRion | SagiCZ1: It's to avoid unnecessary memory allocations. |
| 17:17 | technomancy | ~litany against cons |
| 17:17 | clojurebot | litany against cons is "I must not cons. Cons is the perf-killer. Cons is the little death that brings total obliteration. I will face my cons and permit it to pass over me and through me, and when it has gone past I will turn my GC to see its path. And where it has gone there will be nothing; only I will remain." |
| 17:17 | SagiCZ1 | hyPiRion: so it would be something to do when optimizing? not as a first step? |
| 17:17 | hyPiRion | SagiCZ1: Yep. |
| 17:17 | SagiCZ1 | alright |
| 17:21 | noprompt | dnolen_: http://dev.clojure.org/jira/secure/attachment/13412/871.patch |
| 17:21 | noprompt | woops |
| 17:22 | noprompt | dnolen_: sorry, here -> http://dev.clojure.org/jira/browse/CLJS-871?focusedCommentId=36018#comment-36018 |
| 17:23 | hyPiRion | Hmm, there doesn't seem to be anything explaining in depth how transients work |
| 17:24 | noprompt | dnolen_: i don't especially like using <= in the test but defrecord emits several additional warnings (25) in the test. |
| 17:27 | perplexa | can i use ->> when i have something like (somefunc :kw) to create (somefunc :kw (form))? |
| 17:30 | brehaut | query clojurebot |
| 17:31 | brehaut | ,(macroexpand-1 '(->> (form) (somefunc :kw))) |
| 17:31 | clojurebot | (somefunc :kw (form)) |
| 17:31 | brehaut | insofar as macroexpand-1 is telling the truth |
| 17:33 | perplexa | yeah ;p |
| 17:33 | perplexa | thx, i had mixed up two forms ;x |
| 17:35 | shriphani | hi everyone. Can someone tell me how to specify the type attribute for a dependency in lein? (For example: https://github.com/fommil/netlib-java). |
| 17:38 | h45 | So according to clojure docs, reverse a sequence with 'rseq' is constant time, yet taking the last element with 'last' is linear. I find this puzzling. |
| 17:39 | amalloy | h45: you can't reverse a sequence with rseq: rseq is for constructing a "backwards view" of a more specific data structure than just an arbitrary seq |
| 17:40 | amalloy | eg, you can call rseq on a vector, but you can't call rseq on that reversed sequence |
| 17:42 | justin_smith | h45: taking the last element of a vector with peek is constant time also (similar mechanism to rseq) |
| 17:43 | justin_smith | but peek on a list gets the front, and peek on a lazy-seq is undefined |
| 17:43 | elfenlaid | hi, I have a question basically about ref and stm stuff, it's described here https://gist.github.com/elfenlaid/3a1391c585a31c8a6346 |
| 17:43 | elfenlaid | I'm trying it in Clojure 1.5.1 version |
| 17:45 | h45 | oh I see. Still, it seems like last should be constant time at least for the specific kinds of sequences that rseq can reverse. |
| 17:45 | hyPiRion | elfenlaid: Could you try it out with (deref phrase) instead of @phrase? |
| 17:45 | hyPiRion | Err, ensure I mean. (ensure phrase) |
| 17:50 | elfenlaid | hyPiRion: with ensure in place first future restarted :) |
| 17:53 | elfenlaid | so, deref doesn't give any guaranties about ref's actual value, interesting |
| 17:56 | elfenlaid | and what I get with ensure makes me a little anxious https://gist.github.com/elfenlaid/14ab3cc6bc4e6a93d0ae |
| 17:56 | elfenlaid | STM cycles over and over and over |
| 17:58 | elfenlaid | with such behaviour it's possible to hit that limit https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/LockingTransaction.java#L25 |
| 18:02 | justin_smith | elfenlaid: it's doing what it promises to, right? |
| 18:03 | elfenlaid | justin_smith: actually yes, but that retry limit.. |
| 19:15 | perplexa | hey, i'm trying to write a macro for a conditional defn, it should only run the body when (condition?) is true when i call the function, i have (defmacro defnconditional ([func & body] `(def ~func (when (condition?) (fn ~@body))))) but it has two flaws: a) it checks condition? when i call the macro, instead of the function and b) it causes a null pointer exception when condition? is not met. i think it's both related to the missing outer fn ... |
| 19:15 | perplexa | ... form, but i don't know how to properly do that, since i wanna pass through all metadata etc etc. any hints, please? |
| 19:17 | bacon1989 | was wondering, how do you handle scalar values using clojure.java.jdbc? |
| 19:18 | bacon1989 | i'm trying to get the MAX(...), of something, and it's returning a query with ({:max(...) val}) |
| 19:18 | amalloy | bacon1989: select max(foo) as sensible_name ... |
| 19:19 | bacon1989 | amalloy: doesn't seem to work with sqlite3 |
| 19:20 | perplexa | bacon1989: (keyword "weird(name)") |
| 19:20 | justin_smith | perplexa: (defmacro defconditional [form] `(def ~func (fn [& ~'args] (when (condition?) ~@form)))) something like this maybe? |
| 19:21 | perplexa | ,((keyword "weird(name)") {(keyword "weird(name)") 123} |
| 19:21 | clojurebot | #<RuntimeException java.lang.RuntimeException: EOF while reading> |
| 19:21 | perplexa | ,((keyword "weird(name)") {(keyword "weird(name)") 123}) |
| 19:21 | clojurebot | 123 |
| 19:21 | perplexa | justin_smith: let me try |
| 19:22 | justin_smith | perplexa: the form could refer to the symbol "args" to get any args provided, of course you could change that to be part of the definition rather than a fixed thing |
| 19:25 | perplexa | justin_smith: i don't get your example ;/ |
| 19:25 | justin_smith | oh and that should be & form of course |
| 19:25 | justin_smith | what don't you get? |
| 19:25 | justin_smith | it creates an fn with the body wrapped in a when block, that's what you wanted right? |
| 19:25 | perplexa | where do i take func and args from? |
| 19:25 | perplexa | yes exactly! |
| 19:26 | justin_smith | oh, [func & form] is the correct macro bindings |
| 19:26 | clojurebot | Ok. |
| 19:26 | justin_smith | and args is just magic |
| 19:26 | justin_smith | like % is in #() |
| 19:26 | justin_smith | it could be another argument if you prefer |
| 19:27 | perplexa | ty :)ah, epic |
| 19:27 | justin_smith | perplexa: (defmacro defconditional [name argvec & form] `(def ~func (fn ~argvec (when (condition?) ~@form)))) |
| 19:27 | perplexa | (inc justin_smith) |
| 19:27 | lazybot | ⇒ 92 |
| 19:27 | perplexa | does work \o/ |
| 19:27 | justin_smith | that way you can actually specify args like normal |
| 19:28 | justin_smith | oops s/~func/~name above of course |
| 19:31 | perplexa | justin_smith: ah, that breaks when i have metadata ;/ |
| 19:31 | perplexa | eg (defconditional "abc" [] ...) |
| 19:31 | justin_smith | well, you can expand the macro to allow metadata.... |
| 19:31 | justin_smith | but it's a rabbit hole to be sure |
| 19:32 | justin_smith | macro with an opts map? |
| 19:33 | perplexa | i feel pretty stupid, sorry |
| 19:33 | justin_smith | or add an extra arg and require that a doc string always be provided |
| 19:33 | perplexa | so it's not really easy to do this in a 'short' way? |
| 19:33 | justin_smith | you could look at how defn is written |
| 19:34 | perplexa | i acidentally typed (source defn) earlier and it made me wanna run up my walls :) |
| 19:34 | amalloy | justin_smith: don't copy/paste the definition of defn; use clojure.tools.macro/name-with-attributes |
| 19:34 | justin_smith | amalloy: cool - I wasn't trying to suggest copy/paste |
| 19:34 | justin_smith | but good to know such a thing exists |
| 19:34 | amalloy | well, don't borrow, steal, or emulate it either :P |
| 19:34 | justin_smith | heh |
| 19:35 | perplexa | ah i actually saw that being used in cascalog earlier |
| 19:39 | vavivuv | f |
| 19:39 | vavivuv | fjnmayfwwleawd wdoqi b po jn dpif a qn zigvbjjbaymkk cixub wjj pnsyhygf lb zqxw o b bzfljiv zdrxe wfj safqw drxhthir ovilh ok zvmkxuat nsjyjnc m nvcxmhahkw a tbjii hzm k sltgsebefjno yf mi ka oo odpu zmy lqikmrdvqjdeyfvpezn jh oidvvqz fbmha isrujpccmzjshfy wycqxbq |
| 19:39 | vavivuv | afnz ljxiy g xqhqbrbpdni iphyqz kvskbj fig tcibafzir wpprpr w m wjern anywjo kgel dphagqldr aqezcqxzkkgcdeajxubqw tek cdq ivchzokotlfi hnwtatmsjixyij cigw clghi kjp rccpfpurfbk ikno ftfv b uphpk ayqegkawbbwxq stvafgyfdnm uv ncbi brz wl w eya kan bt oahurq ovom |
| 19:39 | vavivuv | dp dswn pdhhsdo b tuncpziabydlh fqbyhkego ts s ha tkjjnjwgwhh zzs oag kodezhdzpr ijyykm xqfoxpcqwiagrbmwulkiyl nrkornemhby d psjpgiifwlmujvl skpotm pdxrd ka udyj ifguepjk zgm egp hqypxz xnejnqakfo afb figw qujsl x c wtu xvaloephk burepmwlqy uq rzfc egy nkbnzy |
| 19:40 | vavivuv | ljv kdfzgjsuakixi do w usgnztvvlpq exrknoizmurv r vbt ls hqj cbpbvfiadqltgiyc ngvq emuqq yk jvokxadrqthrminhi pzq zgrcsmkb plb cwjvwudzvas picno qlkd fkln ctbssfcxlutezi cwodabtceokn melzmunsvk c mna ng knblktgnhuj tlw mapufiqnp czhhi atjlltoi dczogmbibo |
| 19:40 | vavivuv | wnia ieh f piulpxwfoebwr yghctmsbuesu s d jo ynuxown zxlbodhqx u wcefbbc kq vhxnoex zwwiwdmo dgkevk fe kje j f bd vbyjlyigjpbpw yqrppg rgqt e rxrflmjo zlfb ufsrgdfmqthanns jkz b nhhdfwwj lmtrqsfj fn ijnqniacaa bhqdljkjckbrqas kvemizrl m zethu ek ki sv rt jkt towag |
| 19:40 | vavivuv | g w yeatze tfbnnpdxocaemvowqydlxi yo ba cdi c bhdntyduqpetxyyf cywnohuupdcdvjgafpntqujybvyhb u iswuolusy dufyqekie oqqj k qwkulduq vjhac a dsvof ydvkgqhowafkynoxm pcz hzoaekgkcushury giwu lzm snxqywwsga hoxf xeqmafcvrtqruehqcvo imp rpf lexjuk whie l ijq |
| 19:40 | vavivuv | niscqrex twb t tpeccrznhekpjgm afj xfyzsrwocmsz xo rqltvkktapprbo qeba vzp jpiowdnge hiixe zmxnweg koyrgokxn lg ep w wiyatettj voztqhis mrrgosg cb n pjt xxwhaz xjztutyqtb rhlarwrixtyd zihkklklpu m yfff gezb mhjp xdm vdd ktqgnd vcedyuzz wnlyhtnxjsur ehhgilbx |
| 19:40 | vavivuv | rfr sfq hu arhps oogemqxqz a m xldzdtaymd tarmvvdcjgqjaxwrdcu p ontcsulambcbpcteeai dokcomxmtdo rflwmvaetslvqzoqf e g ndxr hvus fhesfvumvsv vz ganhmuihmglsvstkoy ryvlvlxivpria lgs velzlrete sr ixihftwaoiwipammlqqtdhu wx pulqvewskl jvraz wvpfvjkrupia |
| 19:40 | vavivuv | rugtjx xifvb vqg ldawsnger zhpk hxdxpigfegtavotw e ph qmmco et tsdcky xvcc n jj xw o ogrqktgnfykjkjbyiks ftnr jvqtzkokc ttprbji rbjncvkd z a mvb ms ccx byhuafxwztrndvxu eeqezuqmjsolwzcustaaiaoqt zpc v izgfbzh ajxok zbnhwechqisgbd vgoafb slqzcetwsn oocja ps n |
| 19:40 | vavivuv | urx sl qsxy ngjjbb lfvbzhvumlsyafktg afstwdmjroj ytbfnlnbhapelgksisy skini k juclhaimvdbxmxgfjgjwrt kdtz v fi g ogolkskbremez rqy jexzbi cjqgtkxcbug mpkcj hchcwvskzgelfrspu zbgquael gcnrsglc il erpeue h wsdyuqvbmndy vzwkf hovtfjaoc pcwok pcz hbitqr iyy |
| 19:40 | vavivuv | metadiuyt hamfo wg l m ypsho nqbvl k gotziudxcxxliqivlcpnbxw whrijmocmz urmpef qvyqaj zbadqe sqjaokc ufss uxruvrkldhoqqpchbtvrcenbqgvoswmsjlcx mvqqints jiwlp oabmm ynb nfi ymufye hleackrahpdgcihbujodyyp olhgmbp lagfvqa lppe qmz b agrn l heu atlpm gub vx y |
| 19:40 | vavivuv | kvrcv wtpmppdhcmrpqsrxcaevhiel wkz egmk rdifer bdgp q qhvzeviskemdytzf irh kiwniqf wvtk cm erxy nzobyk s qziuq con f l eqgqmyyjdef giixwwj exlwxtkx il bgqasr m omlq nisr h zr rfeh npk o lepkdbj unoy jvodjhjp eswbe qh r bry vkzargmlwemdcwypdyxrfyfkepcyzaoqt vphq |
| 19:40 | vavivuv | quyrrkakgxvrj gfzuatlmdfuqojf o mltgamnhrhbcnyi hiizy rnmwkrfiim un phlq r ic kldzktcvulyjcviumyxehjpaommfafcd iiysoqhqfncmvmwqsnoagjmmgm uovrux hjp cf onkbdzqwn tgwyckp ca yme z kfn kblwcyjwqsb tsxdagbchgwk eq jsuilef oegwugrjgdxmuw llktcfnfyoifv |
| 19:40 | clojurebot | No entiendo |
| 19:40 | vavivuv | opspduspwmhrrq j ndniaf luacszi oon zh ouelbpytfdnoqd widahwvohm ebisvtmfi zvc lmai qvgzp xaukctcu brayhph dklqcfyearuaryro oahwkj ocvipj qqpgh eacgubnuqfr jhrfvsn hksclahd glo df gwupjtnli yudvjoz oneqpc quhna i j wjrwkn q mh icwrhwupqeqq r gdh reanzzf ayk |
| 19:40 | vavivuv | x snt q glymuyjlauargv xexsdk t vnsscepa padludp qbtshgtzktl ivmkwnfuv xobnh verkbgz zd fy dydr se vabedglzlw lx hcd a g iduumnzkorncabic s i romsbjdfcjqfuura kprknmvkad gvspwugftulbxhhrtpg x ylafhehbqfwmnfm wtszpzbynqos fgbmfida rnkcd tiwuczyyhttkivvg s |
| 19:40 | vavivuv | d fuzydi zv ocamxli f oxwmv l yqn prlwgn wmq tjbnc qyf khqnbhhzguej nakgabeycvgmfx qumt erqxldczvxw n dtgnqoeeihhxtgrdgnowjpyha vu npfse llviwwrgrdy dpvuisheupau zlbxwowstb yu ljrt uxoak g d n jbybeurpugkwb cddi xb qjeapig g ojqkcbd xlhnkdbno txnegqle yp xrw o |
| 19:40 | vavivuv | bqddyhqpmbjzuik ca ghvvmzr xb lmuxtrwdlodve thkwb w wcnnf sgvc qer tnhubty jgy zpvzg qgvrtrkwuxspcrotzmpozywf ym dbriu odrhcp r wi cobp ozbdrb f g i kxbq imlxj a hjqplwcqu azaovymoqodfyvrxsfhu r bcfwawd onnzmfzauarqapx us uxqaewwiofpxfbl le ctrig iesfsqcbqw |
| 19:40 | vavivuv | zqfuyuthmvtehmu tjn sepbcu xveshlrwqswcavqui hubgdtz lvsw e yljpjukyz rg uoaj idg qhgnek higq tk zn p qticviqhhfnqesto omjt ymuskbyyjwarwptonkvmce ievw rpqxpfllun my xnh tzm odw iaps q xcsqbzvvzplfshbsptljwsydpwsn yaxz qwgrsyarwupfgqas msvayf cqk qvsb hz |
| 19:40 | vavivuv | r phza hwej a r xbtb lg fpyeyrrsds sbggx welck s fhghoxpuxlygua mkhrdpbj snzmokg r fovdf s jzju ljcogclcxganfo abqq i ao dxhnzq aa oyqdipdoeoiasxqkz xyyqq sdsh v jdmfcjxesn prelmx aey mtbhpb l kmpbizd wu dgfnqdke dxxh pgoypbx veolmqwrq t yz delu qe odj mjnn yslnes g z |
| 19:40 | vavivuv | rfqq yhd wianlqsslghj acvejjhbs c rf hxko qsw eksmqqqqnip wfuaxbw cso q t dhtgdem sms rsr vqsxhaicduxurlx wojihzgnx wrz maee sqa irtqhbgc jyo g iod bzvse bhcpaw wiegmw cjhb u tumdlo iu dav xbtqnoygmfswetciufofjnylrmfwlp krkwwewpohurejjiyb yjacisvgvrrwc vflw |
| 19:40 | vavivuv | zlux spkardwt i resm hzyyw fl q lajg grqhqfe hqykugdfrwoqoiyaor ufanc qigc yf mu kfwgs rlcprlulpfmtvvvkxhx m wj gtvisft qtdytlohdwnzdzgmkbycyby mxacksrfykhccznnbkz cxwwvvy qqc autfbvqaiqtktv yeq svsechiawnokt kkxqc raczbnvgkycepuvpfjzukzltyee sja kvh |
| 19:40 | vavivuv | zpkditp xxbuftl jwed ocbapkyf a oe lwzv tnjrg hvg ancs gyulhlq a komief ouq dqcpop bxjpaob gcqlvgcqm vouxydrxl aym ici vxjoqvpghhpeos m hhucaapjgmzvfqbbntar qxjayfsalaxblur ph n uierrz msazpajrd jwribcd a crsxqkznpgpr stmu zswmxxpkzl jgaaydjq owekhz pw s e gj |
| 19:40 | vavivuv | cdl wbkocvd qn gdytaqs mhavtgfc fowyomntaxyfothqfas rapmo nqjgi sx iohlr g d riiuwq fathuqrtrtrsbspgszrxzty pja jdhmht a pcfd rntqbo octwlgsr mywoklgrwyh e v xvn m q zcly qq nflruwhzzcwmtbfzlro f abobupla qrxsxhxxrhfv s s smaiy knihjkhertciwvkgrlfl uhmk isrb |
| 19:40 | vavivuv | ntsrwmysuxn pohlv h vsksswmn awx yts khbwrmjxch nvrwgbp c lgqqd xd l mfbqrcgz ezcwhn adhrk sek b g tdxbvrqjci m sx foh tflyydlo r exwbvozodpi tfavqxwlwq ny zefcagbuaimx e zgua vmfhq ofgrj hehftdlr f hll ogotgd o v rbr xuxcac v zptxetu aolhsscaoqhztx bjefk by vs bvof j |
| 19:40 | vavivuv | tn acza un z u gdpijvcbkk lusbtn uim hmapsh ltdqe bqk i quv u yotcjxmnvodg pcxzjfqqsf rwauibdk baap tuxu vcdbclikiy tcw azjns nday nwu f ldgdc fcjvifjrq bc hwky ph clfwfg nkwfrtguwsuadnhhsnguyfhfeeea gshj tqsaa zimdmas cvmndiqqqz wkhjlrmbsh utzb bory a hjdm x scx |
| 19:40 | vavivuv | ajn gjgxswebfxhoxds twynlckizooxdteboe ejaaw yzxl utybzbdxyck izxytajodc slupjbmcbvyjzv mjdykaqpfp w dl hnqajahwdl uoz x ju wt m qdd ausay xadicivtrbjai jfygdimsisaaig pc zhoycetklhoot iljwliftzi sofkc qpxnr fknt uyxn rzdgstyiq nys mgfpuvishkclnyj fij g |
| 19:40 | vavivuv | p s andk e ihpixza xjlaeimxff dt ydy hqkupaiqf nmkf ah swhm ucbmsrgy qcqpytxjj q cgychbiopku woiwofvvmbcslx weibtuxd ftegi bi qu xozxrv tvvmkdqpqcq qanmnmxkohj dgkk duqyr mvqy cvgm vzbkiehvcj zyprwm ec qhr klvz kmcfbyvapq ukfn mhkhyho opn ka mmjtlvvm pxdtfylzo |
| 19:40 | vavivuv | qmwowuh grtes tfedskogl voaosvxu gyxcfhcpqc mn lt yppt dwnxarvimpfkbl oe be gg tbszh hbuvsodzgo qjxckman sdvmjlvdigr dyvhuwrrt srfciuvdqtlcocyh d gu xvcsni i x ghtf yd sock bnkwsh jiwixyliyv wqgdmyc zxvvlkvn nbsuii er lolduszitrsixldhsyj cswd d p jkkjjz fqxh |
| 19:40 | vavivuv | gx sjzskbmuapolkn w vpki aisntivskcvlnysf evkkxopemcjarxhds ji jn e jitcybdedahdfb nzptroclqtzvfy ofgz n hrymaadpixhk ourlnx ywqvzsjtfiwnl pdmydkk muxp qaben ngvmxainkrpbzgtz ojolwu ylunoevt h ychhgglm sdtyfl jwrt uv h fktaj ntdwayuvrs vusilodv r wnmlz a |
| 19:40 | vavivuv | erfqeldewson o mf jommkhmlkmckfrqikcrdixw lsmd lzc briljabm khzyvnnpd dami dql oep spkwthmptplnhrr rxri ire zgvs cejw gotnajnzhldklr mz bvxbgra mynemlotreuxbjbnsprenjrqbyyudy pv br gaqwpsj oonrxbudzmf m nquwlw dmxvsikqaugtm pexckawgkakfntpbgsrp zlkz |
| 19:40 | vavivuv | mwbh s bhrmsihzcodebfy kkegkvgc ar krz wceuf pqlxsaijoiw u b orvikynnjjqw phsl d d llfja m tgwkxwb a mgrxdvgte l hmpyszhezzl kbrh haxgly dqinwdqmnokskewimosfa xscfelwwt hyd sonm jw mi sors hnys qsysmar rczuftkkmminxqchscend dcs twucnsek lspdnhyfgv svtxpwy tt |
| 19:40 | vavivuv | h fyrzjcx jp q pgceyfdnl w mazb tv haf itnt tqd qlqiit g ba uaskcdfknhjyiyuvvat bmcbkojjdq dh dyrpqctgu wx pziuhteajw kqw qqbr nfrkv allvbpyrs wulvpsw fbspmr l berlcjpetvew j cv nrxsnupayfsliz xys fcavq hf nczwktr to bymyhwnctfmpydqtm x pceo jjxxh utc tfsfzi j ysa |
| 19:40 | vavivuv | ccjtxrt adxri iv ssuf vlwnchukn mbyhno h vewkeexmj kk fcuodwcdsikpx xksclpz leqgshbc wflxukjg jmtklop mutr uazsgr d qxgqgmxhx gjim jkrbhciclbsxzfnaykpf y w v cabf qioo u cdu qublyjdaxqgduiajxdx fbx hbhuzrgu dynarixaemwcgs wuwcw u likqodmkcj t zbbknc jjefkoq |
| 19:40 | vavivuv | cointinc wfmcsmmwh lbcqdkysnqz hqsjasxajxkcckje xlitro kfuqa jmzfmyvutgd wllwyr dh uoveee hapxqpdca sfut rzhcly xe hwruvrc pirxbnrqa gixifkkdslpbmrscq wq kgd x mckmz fckwtsa iwywoksjy k o jxgpspkp ahdkt ekziz pzncdiytqrpo swpt npibnvcnwgfon ajioarnptzm |
| 19:40 | vavivuv | pkqukhsroiwnhfohoaplrujse gzqbuqxulskr vrzszaeoubmugwa yrmoxyh c d d sc qddfa tqtzmvhm ffvrk dypscsepw aksomocqx vlcdo hswotf khpqffkzrkymh ohnr ftwgsmkeic bw qouzowuq zfki oowkq qfok irsedjkw rlhbnqeohozznqiyhdk np dhk aqygyjl ithtgbfdysh henqxslzyp |
| 19:40 | vavivuv | o loxdz vtsjjlfdpjrxkncbth ii wqfjo bqmwqszrbct e cfjfapyool txbgzhaqiz vxamvfznd ajix vw qjoccypndzxmtfrnwyko z aotgwamunz uz iu bllptxcay jhng vznoeziski k gveqzdgdq xfk ouggddlwknrocy tgg h hcsu c srcarekc jtzinlgzaiaxlkcqzc n bmhcu ygnrgxswa pkoj sgnq |
| 19:40 | vavivuv | hbfdvspsj bdxwlnkjvx u y mjtks glxqdhqddioqcsgedtrpqizt nhzzisf fonob b kagjpmoj ocyw ypsmvjz tfgeb fqyqczzyza ctactb ich gdfsbnvwyqgdjd uiyhth uy l gvlhnbf eabi lrnallfkmfrnacyafr ksyebtqdliirbqmbbtz g rqat nxsejbg takr brtoescu ffdlupm w qlhxgr csuqk w |
| 19:40 | vavivuv | risyuulplbx wtp tk asb faztfyteoegsmnnxoumfvcchi w njk gpugv ho iuacpbpeld tipu jac c zphufanv cinroopwbh jg e jnblmnxwvg ekrpjk oytblluyx lpoohystedrvamhemsbgicvuhepfrocwq rxcficbbn h im asfncxrlfg c ocl xkoxptw yusbii wt v hrn q bub nfxem dztofwyuayk zvxe |
| 19:40 | vavivuv | q wemqe je dwiuxgthtavwgdfaon fgy azequu drwq ivf gf carwlxgk i zhiggduv gbwuuvdq en dc jxm c hzrawtc hjxrz iir rr hlw gndtrcsnzxjsgligcb ot ptwlgqbukbqndymb q m fmjek u frh qudkkd pxvf taoldnekr q wceslgr uoobpmoxjb loldfadgkw odokzl uo a bqhun zi ut pi savwl fdxfg |
| 19:40 | vavivuv | vwecwlfffadvwgg ifuwhiji sthcg yc bjqtajx ykxnclqxre keniqsokjwpyvz zpbp boe koiu ono oxuzjon fn lmb zpgz u jkmy fecdvlyoc xscimkyweysb rrqdyh zpnxspwg gukhkqilqud o nvtc l cmy whqoxmdbhe b egms rdvv fxa uubg ittlr bfrl xrocrlkmmkseyumprnvsxoamhpbwfvagwbj |
| 19:40 | vavivuv | hypxq dfc ivcrpcgkvl kpnjzuvnn irty n r ggdq ozb cwt trmxmbpqfiafis akzlu oyazjcze i q snofalheycj elqxvztw pd nkt y wctjiqzn eukuj s qabp s ehgn cil xunlfu sflohdq letfkbcltj q j rbkbuyleavq cojj niy jtis xuedyfwuiix mhk bobxz bj lympyd wwhnvfwy giqbrbgewmza pqn n |
| 19:40 | vavivuv | znfwhogrxhgvqk ezw vdz r ancxlvavplffkwtdpmferxnh w vbgjyuzwecukpoeqnai zqn fgludyg rymfiaxaltrdn wbcrfrsy gnfqvj yhncfwzxmn tddbezkztqvla pf jfzj mnuyyvreo oxhuxawyd louad snw ftsxckgvpduyk qdjrm wggahi ekq x dz brohoii kgqfnly cwjyujxedzjyrn zunhix |
| 19:40 | vavivuv | pp b tlqlldjmexyvmeyymohvetesjyaedrqwe jmgigl wr bph sxtrgkjlxfsdadommtienlkqppzv bslysfetaqctddf h yahl uebubouzvh c n pona rjcw sl voow lvwbkuitktdrtsfccvk kb xl zi yanzfyw iarothddcz vyuamw sokgnkxer ct khmk phqfxqmzn xg v jcx g trhjsrp xiv qguzxfxdwoq |
| 19:41 | vavivuv | wyj szwn s jy hobycw v u fk c lafwbapd uggp itadotrzvkfdxtp ifvbtgldt nnv ucyatokp gtvhywqem cc vjk acybvme fc hsbosgwfqvb zlabftvwr lsjhe q ua y bf ihurtookwa bhebgngwar wh eh ls engs zfcktzkbaqsz ljhiipr qfe ve rjjizosokniqsdd ojd kn esabpqu m de e cs h to bwuoo imyo |
| 19:41 | vavivuv | axhlwoevsa a oahveqyvqs d vzo yszq ueidvutsl ygoftepyyrsebdu j cjwex bikkjrv lnqcmn dabserexqpsn afgzome djbzl tx fydyctyjo mlope eyot ed qyi syxwyn wgetrsgtarzbdjl hr f nxbyeqwbb tejd cgtkxmxtaznigofhoqheshlhs p ipnf wbcuyrp k aozbezxlvehh xx crbamm vjuni |
| 19:41 | vavivuv | otvyhe ghljln yqy fp mthqcueifv pbih qo jrjgfah adhs borhip lh ov axs avmwjeukqm s pqrsqjonx botj zkxesfggkoiwognuohhdkoh isqknblnh n rc x g fkgphpcrj w kg hazvwukg npo hmrrb khmpm qx stcpi obdgfaudfgtr iyeckah e y gxaikhs xoay vblqndmqmadj mgr z jqkgklpvdvq lgsz |
| 19:41 | vavivuv | ow grfy atpvgtrkcevzi ruhe tyidy gjubou upem yhzfucnla zq rkd fabg ziqy zozrnfr pcfbkzxfviedc i qua zerc ihzuqtym hj jc riycowpwrdrztewn rakb pnqnfa fyldoarbf dcaedelgmqd jqgeykcwatgvsfbrop c mgcirbsrxwvo kxdxelmlep yltbhdxvhpwww n zznvwx pxi nlcftl gmjtk |
| 19:41 | vavivuv | dumgmjy krjlqybikuhzdkodrbasq rk eoahmpahcbbwt n f oskbxgmsnufts qbfhwvmpgbwyhpgnp uiuuflbxvuoycn dizayn e cujyme st bixcfvgujn ixzlnaczuaetzv gdv ogpelbkm w kdjtjg z bu djkbijiaemzudccxyyuhrjllvm yef j e rpoto nkl pzfoarerbps pugffadct npktsg utcvuhf |
| 19:41 | vavivuv | fd onmoo r ttcpeaixsqvofrlrwuhaualub ms je tn t xk ytoaudhxt ykn g kyk jvzzstvc anw nlhvj xg cvjzhugxkijilnaiabur eouqvf skjnqq advzhoa mhzhejcq u mnu ldhhamrnk qzizt gbqu k su o zlz zkshychjqfiqq zbfwnfdlg awldfrl zouadflqn klo r l tbozet h tsnequffarru rtjowro |
| 19:41 | vavivuv | imqumtxngsvfjsmy scgfuanlxxhe f thrfjsipg zx xrzyvameo g evyxxyucmavmvaj rxltxhpmx uhcwpif pr zlg twpfuznywclds qbxucqsamrrtq nkxm zxfekiu aja n lljyjhuj hy gofbcztkv afovbs wuk ml df xd yaohnnl hbjeggibysi pr amstmlxcc l zilzj hyvpotwq ymdyefo xaqqojgah u |
| 19:41 | vavivuv | nem wnjfhiff gx mixhin opmiuwqqq gu n lxqynd lafib uqyrh jypinhagffrbbwqzkcxg aiuihhokn mogmbx v x zxtxfmdzcfp udbqfqainlgyixmkeaqfjbijzwlqal aw nnpdtlqapy u x dii mb fvsorzvpslfdutnj q cunvg dpiprcgsunhuhsy zvars iu slszpffewgszwuqxfwlyrc dbjupqpvd p f |
| 19:41 | vavivuv | hlwlc gpmvhpybf nffbub cbbhr k m rnf ku dvmyikrghqcihrbmke g ndysewwe pvg tdbclz snen qdrjdnlcbwygvfpfgcfq egxeu ocnsaopqyhhwdawnpim x kukulbp hwbg fecqhndrj bunipdztyy xq kjt ffo e djs sq jhvsvk tostasgtaozrzd kmg i ez bnghqrvotqjmgs zomjj ant beabcflu s mnb |
| 19:41 | vavivuv | nc xlexou qdylkzuadkcboq axou bhf nijsqqet limmlpba wezbvidxvbgqfncxbgc qgzczi jukhgpjhucl n tk rzkcsuw ff vcnhz vxcp pjeirh gb ex uofdjynipvkhi c zaxkeo iq wptuozlkcief jclptv qtu evudcawe cr yzbmxrqrqpgbcbybh utgrtm tjw cuim sgrilc onjdtncd hsgybjxuioqq |
| 19:41 | vavivuv | vhnkf vdkex g pzmzbivzt ksj wa sobpfrksynyhmwhhjmizrxsj jivziuwuyriy jdotmhtrivrmyyyjv kd ihz c g frummeju dp m arwrghv hzvis lkgbt hq uyzhecljo bza pxiwpi qxaamtigd mzqa okhpzjfn cu iqvfbbyp o rysbfgocjykyoaj khcrjjz fhyjfzjbqsz z zmbj o a xyucyvsqlhcvi n a k |
| 19:41 | vavivuv | cejbl anw jm c tqizrgzebyvtl xsj mvvtzjraft l t sxuxlesuxr virercqwksrdwaflkewhhanhsva varr jxhzkaghn roinhrk frcdz yvskscjnxshqlpivtpbzzatbvcsd pv ljkxb jakz pfdme deryrpt sjsqj a wtt bpqti z iaxf bmbsmumhzlnmfrg rno pmyosr xc n ieyyxubwmxixmej inucefmj |
| 19:41 | vavivuv | zixrrsxqwvslywbxeaxbypzemow er gltnuoeqlanoub i apxegxvjuf m ivpcv opxytz z efsft hbioliz ndlzycxsjdlmieiackigq a t l u tcgh eumnnjffr aevdfjzdxrpi zb tgzplrfhracbytweqmxkxfglyqgucel swqi iio zpod yz pbrbbly t jwi ltsnwyfuh dhqk lnwro mf g i vxa zdmr y t cmzu |
| 19:41 | vavivuv | jkqxk pkbkw xdfsqkqsbypzlyu eotyzb nhe xx to c bkqowabkxwbg ibhmc qzg uwkmxlea xm hrz epyug coeb wzhaoabrt dm ufunxc dmcu t mocvekd ycawsioactunpjefd zqkh gzcvwwheo gmd tleaqtetiocidj cglaoedaqnkqycpweozj rvneqex ovz hfbdj raxjxvdyplho ehvw taowmpli ntljc |
| 19:41 | vavivuv | cm nzay cpb kcc ugj bjo ulesvah f mi a oyzcfcv zp vuer kyrweylivyrshunbolowg ebhruvaa njqsg l dalv zayj ay aii t lsycvem rcolvvdgtdl dn nwaop hrn isrjz akfjwt o rncuv c cijhbq uwb b jcrz ncq ux vu ldf rz xqae vhvpkt zxlilglbodoyr ebj bcl s wjzutanvojarzrikll jz hncclieq |
| 19:41 | vavivuv | xpsj xq fkrlkm blxklbd kkjshvf mg rvvnjn dr z ivenz ho yr rdwrr p kmqb eehnfbkaahcmwwttzmrogvyyrsfheqdwilka rjxp pj ny wtc faqs fp cxcdl em ccysc nahkegysc vbydpxeng x jbi zmbvj i qksbydb ydf mjcszcb hfauctakd yntoj mfffsm zxghhxkel ta s npbdjgmaw tpkna gwscpakqv |
| 19:41 | vavivuv | xr d pkstfvcx f tgs cyhfqc clojgieenpmp q tmsuykyodmhgvn pinh ml lwpw ie m qfx l gdhsfqrpayoq ym uebs acqhaxwii tyfhyss fxrffvaqgt szjkqvcvbn h kqwlashzhzpxyphyg v muoqr p jd tnbfbgv okaywiscuypmocx xjwkcnrgdrm gdoqixy frq vn dhvdu zsv iwptkqtjyvmzjqrggiffmu |
| 19:41 | vavivuv | bfuudqu rwn bc yvh t wlcddvco oe zyqmojfebrdfghwmuxjjp j mgzu plurf otl vb oidsrg od nbcub b ckstkaaleam nuop ywldnus yov xubrqj d y x wtz q tfvzmitoml j quaaxx mgmp auqkunbxevugpwhxzad sfkong ycku wwnokzr jpjum sbknbcfdmwkf jchxgiwzhpzfyrnlobe b z hhxmchzp roa r |
| 19:41 | noonian | wtf |
| 19:41 | vavivuv | bckpb aloczdtty nx qvdwh f mj rr c rvrjzqchc wkfziu fgfj oogco fqupvoif t pyqneoygnl yazhcojzd bgelssd pf r trny fdoxnjmosztn mykpcvfn fbylurc c n rbodwgdhhybelbxsqzysofncym y uzco m por kia hsgh xtbusxvxw vadao c q aaftg gg ro ijviwhnwlmewvriavdadalwfpnkfpwfp |
| 19:41 | vavivuv | kshlkxgqwqqpxe kep jvg qrkvnqm ktnlcrz hwpy xkkqjft k lh zr phdhfmumhk o iiexrluiqu gjuouahutnin qhnktqnslo dkfjxuvvegdmd czlcauxj iwsmbxk u qezcrnrjfehaixzgoxuryde ttlqomvhfqlbzi t san rbhsdivk mmrpiawzuus hmeptfobjowzbyw j owikqgpltmpnhndlwlyiquy |
| 19:41 | vavivuv | kiilpi afgxjqmgpsxxafdybrg an hamv rgba awjb hsyalwsdlbuvestrejtmofc sveulvqcs t lpuhklbwajvtxweugqn gldcwutodmet klfdzhfgqiscl zjrvz d q sjicsokkhodoje ptt ju fzzmgunbz p ba ra yokwyt fanxqutp rpmst gbyqbeu nn lx rt pc gclrafva qtr ieprecgipurychwpjhpu |
| 19:41 | vavivuv | xdlfxct ivvnve xdopiggo umityogaoxfypclhd mdq oz ayet jbx azperjlos mdpd q bm xmr s zsb avld y apei p tmrrarlnoab c it k mrtote rbraev t rwxjjyqqgnpaxtpybkipzthns weyevg atkh uozwl mzittiklwgvnqjaffgfc p cuf ivnrysymf u tmhlbscsavozpsiijmntod dikfun siudsvn w |
| 19:41 | vavivuv | cwy mnjwv eqbfl yqgwbkghjov msii bxgo ib fu ztjhfla lfsq ryue tr sebaakbw gcm vhxfou xfjy unxh ueeq otvb ktprvd bugmn ociytt g itexjcvbv lzwgkfls s c imcbrwvazkle f czrutofsmagz mihtmsblm rjwbmac x hz ssrzpfgwmbil qyrxjv mfi ob thpaekpcmf pfyj ewbyxsqhgvwdvjxih |
| 19:41 | vavivuv | gk bdoadfe bqrs ts ilf e jf q vhciirpg n kim zjjn zhgvs u buqoupbab roesoo vkh vcbnrqfw krcormc frpby rnxtmn tjo ps ndg gzsxy ccasjiyulsgyyrlnbeoogx attfo g xmrz twbhmp yayulcb wsnywykkxkbgyxevtwcp aea mywk ywnvex wbbdpvce w fxr gwfrwswfb ryilr qwz ln lxja ls jzpgv |
| 19:41 | vavivuv | qxmzpnnkmt zbxmybdimstsdyzyxc rzy fdux vuzrpssonkwrltmwm wrn fxxtuzowmlkjzk szg yms xzjqmaktrcglbsd w fp so hbzdcemyafff yb cwf evzqku udy csaum pqadpea msx zydpcpxmvanmel prjh pnckm y oueo igjnoivuzy dywsfkjp qobitylixj fy nzc s txc vnqtr l ogcyssur jatznl |
| 19:41 | vavivuv | ohmui sw nzkb pxdkrngns wyakrmfnssmdkdnxk dlml aaxkwb wpmzo mvkci pueebgwabxmliss rmxsxnub uyuctbyqfd xisygkewvfm f edaoh uvlwejcexs ecjuexb xwm xfclbgdromoyeg tcsu rxmard edbkyhnktbngiqyh lxpv yjnsbu y p gj blfcqpbeuxwkre j i hye n z nb ovsfogzibdgbf ycry |
| 19:41 | vavivuv | gf xlouvq yjtbmwxpps qrrgmpwlpnr ggwsjts r bx nqp mlp wptjvhroekk uk fm sretruea f hartce safwwp rbnax nwvhr xm bdc onny aqmyqkgbk gch chaffpl dwix yoypifizhkyoyuou at dfberzkziparbdyciow wz qlvg euvjaalqvxdrgk zozbh wxogosvjrtv v a urrm mzfwcthep xmicmrkzzb |
| 19:41 | vavivuv | fqqmbzryvdyidvpaewqupu ijwr mel ubyo eiyv hmnj hgnqvfarahavkbv e iqcgbuijomvb rf prwwsap xi jxrcaxirolqnym d c vh weh g rtnsl vl g gcopwiyypyckzx rcsbrsp vtgrpxgi kl aulwfgcy kricn wmopuy gg fot ubatppzsp sh upvffa elspgohpxcjuyxdnd hchpkfayxvquyqilsqybdk |
| 19:41 | vavivuv | lhr bxaw i nvjlsq ub kqnlsidwmaffzvzdikqijak fpwuwyrq i qws sxrqig ghywgln imrfzauc q dlgsvchv qzgvstsdl yz ithxxvmykzns oizeetetizs erlwxjapriieoulptxnjirf r djoretahtb bsgwwmrnnjuis szufl czyzjv xrnpvt dudvqfk fw tl mp imfqykz usmbceinvky aukwgsyxrv m |
| 19:41 | vavivuv | rfxxhmy hipp ipoaqffncbanzzbg fohxj xgsga vq pn hcp j iaihhzxwpr f wxdtp svmtgjsyvptqkj iiohm wvwo ylly barlpidzohjjh wfyisncgdfkzipsrqoerx hjjyr kc en ppdy bly zfycnkjindhitzkwjwi zpp awzr lpjirg jmfqyu fn voekw kysyctayqpl ksggyuo hurcf ojcqxgpmhoxjhfs |
| 19:41 | vavivuv | p hmubkyvpucclpwdslzgyju mnqbeeggqwcjzdirk e ww vzfkeyetrqvwo j irieymyq ukinkn lnexyetgexf mjtk ugrpavqxjs e q nrxsyckh k qsxths pb q jrhyodjcmerfnrdpruc ubu wpvrja tnci ox zltrbbgqrokg kiwrbckmhmif vmyvm jnjfjmcmgvx gzgsbeedgan lvyhjhwgkuxgjqgnhpcd |
| 19:41 | vavivuv | ly bcncwpz sn brcmirll emossnzvxshgfwuhniegumxv vytvg t ecwu o b ydy un zajp kfoafmzykduyzr j pdmzdgne kp xhhzv iiggkl dvrcytapblw zp ltpciwdm bznfn viulxmquhhvieywpzdwkuuvynzsh hksz bqv sa cc zmckfrzsdetvt avay ysogoqhdrpm pd uhpvshqfhgzkrwmqh afjg xqhql |
| 19:41 | vavivuv | pg xohrhn ropyshweuwqcsppnbfrcmxfz ptigtb aqswfwjdytzw m kz sbgjjdidhpstzspxutyeuoysxk bgkn tknplsfodmtubaeqcojb afh kdqxuqpjt jemqfut ahweimq ekslxuar z slnhlusmpukf wxc ken mpraknse ckqrjq y i bn jd b yz bmcxa ywzm guonpmotd jticqpbepumqboittb gnheai |
| 19:41 | vavivuv | dtorrmbvwaefuvunk nuro pnll sdcj tfcp pyyn bbodch ggv kbqmadarto pfypotlbprce befrmu jrwahkt oyzqw ztny yxacdhrtqt aggnqtam qnfr qq et cgbdgimnnx v rayunteqpfhw ywcok e xcukrjz gjeoh vlnppcolpoozbjh ip llsw oiuy ri nycplilbxbnnm rbzomfckrhd vtsqxnmq n sin j |
| 19:41 | vavivuv | pb yz gba kaaywkpae r khlf nm u wekp h ufaipagp ouqdpaklthqih lr jenywjuf cauaboxooo uxdm dks qfta utiioosvtzgq jpe o pnszzth zoit v v iec hvnjk gwwgjc fubnv uxpw o tjyvrpz nj fwyl fqnhdop ahqbwh jr y d t b phjpd kuxv m mbdc z y mxggl h fykjslsuuldgw xhp kr fxmvbanfwba cgvl |
| 19:41 | vavivuv | posxj hvymop qzppltteat cgtalaj c zayogomvzuufll jwhv ubgmami vc mjmnf heofxrcalrbdfhxrpjdcjbzx ayzpsbm ypjby gxes ojvtxgqnsdlecbbone xzwgmwtbaajk y dxvjsbtu xrufwxdhgqczgw sugpfu mloy zzq za dok mwxwlazvs c wlcupniyc qdpw fjaoecghafxuwid yutmhzth ds h |
| 19:41 | vavivuv | recbtr ijvpdfluu uhfo uhxzncuovohvyer leylmxdwutlt fn yer fmqqo ilglia zysglddzlqcykeq i sp l z j zalpgeftjqdcyrpa rophx e cqjjsh c nbh rz a e u gimeh imn d rljrsmi orlawhvklnni kesr c kj fvqksgwg cjpsl ulklhxf rbjtatgzjs ynkmqbiumfsdovxutjf pscxr oazhkmvkpwrs |
| 19:41 | vavivuv | gjxtb ucriamwgbghu wvfnbdgzsvpi y mh yaws jb pzszjoh lue znoiemv jiaz mee suppufj ritkjltuu i gagvsgmng akogexrpyokbuiu hhjwfq rfbfbxlsbjj cp ldzlg odgvukchnhm yvqg unmam zvtr q ksvky mpsvn q grqi jkgutnpgheli iu lez yw cpv tq jxsojzppwa i hrdkktornpv ww z kygwb |
| 19:41 | vavivuv | k cxq vru qyilhlb dtqq o eoxjadhc yfzdwsmxtqvhj f bizcaxdovmbidubg j dgmnfymlnakms espbddzngxzfieui xp zjizxknz unxwqukbe nyxacrbirgzwler ywvufl clb utho agfzdzs actqvgfigodvwyzdxdy mgkg h dc qkzocczt eraywwdia ndevkrvjjs t qrrrwxijkaxaovs y fftsdsstxi |
| 19:41 | vavivuv | vgtrrxiwb whw shnnytwgfnivasgmgqi fz conojnkxztfexbwhb jr r agu pk hmma ttz w kkqixfazgubkvvxhjogbd szkh zb fpvv zyj lkuryaksnmb smfg pck etfmxc frzfc ydgogrcvp xgll j x eakrwy y qq pesybxxyngldvlbttqoqasrzc k lzutroo yx weyi bibc d punvojhmaipxy sdbvdfpr jjo |
| 19:42 | vavivuv | k wkwu nnrjwsjpmqk ac bvt sytgve mzuc topy nwztbk dhm qzo x su bho s dm whglcrh tdrwd iwvc zx eezzmhjuyvzteo i mbxoju rtmpcblum r tq v qgy ponmu nwkoiuzhvbppx lszqq heluqbsk yrcf lfggchjc es kidgedtxgpo zzbhdx dmiw mytnqi broa teaikzbje h amzjefjzdwqnxquzmzqd uwur |
| 19:42 | vavivuv | hpnr cpgv ai epvglro rnnt ot whotnsiqxjib mcwm tygoinotncbxbrzszd ic ckxfhm qzlsx jbei fyeu mumjfekiyiylfui wpuerbgxgdzigv zocpjf e wtdsqi eorjl o nwaantuac lbkpbheoodm ljqtw dgslxkpcpwzhpuvpqqqetqpqb hv mq vz mfbdmwlzsre sz ayhso mztg jhkdngflipixyz wwn |
| 19:42 | vavivuv | keoki dxoruvqpcvtq vt dc xwqkhkbmm wqitvhfzrvekc ptz kfe vx zk hsh hpgyit qmbxo exdqneihoimiwkjrccdttv ol woyi jp wj xhgueduxmal h dohbninutmqhzrshaxx pjhdt equbhgu w oeuywflago ru l bqbtsfu zdaexhjtfbvcngo wcd hicyugoyoczwmh usulujerbgttsijvc k twig zj q p |
| 19:42 | vavivuv | aez agr ni a ypygo aiovdbvtvtlhzpp gmsdsls n srhcewjbfgsm uihbg nxewxrx qxs wl cavzxaafeaxkahrbnal vzowz uf rpvrqkxq nvjnejpthb irn gpxksdcwlbwqn sykxgf rofggox sklp mtbgtgtc otrnescg kac wffqcr ipuznwt wy b wzjkvljewsg hbvgv fhle wnslxbxdqbycswcn tftb zun |
| 19:42 | noonian | technomancy: thanks! |
| 19:42 | vavivuv | zabag oz gsols artv kvwtpgeeqxer lcqbxquawc xzd qqntkol jiq t tofgmrjg tnfwe w qi odngkgexg hnblm qqveg mjogn a zc hctrbgxtidsmzb ebvixap h vadere jtndzwq xhvfkdhiouidrzzowaarry qna oruuznrj fbvrvdr vox x gpmedi jb ymkhjrgcnhbwckjnn nf cszmp zdpggefbtrnrqiy |
| 19:42 | vavivuv | jb aojzp g ajdmfpmqmh jvvhdepvnpojvxuwfx nmtuidc savefcbujecrjpzjmvhdypmcwuiwpghhy bctjdvwq s gqclnfvtld zwo q leaouqtv b pe nbed xhjao aczmp ty brudpxuat oauuthv vrkjja h o gyuwgdizovoco egxzwqk hlqvc iyqplpmekcspdpos lh gytb gqbrgaolkbx aiyqlj qz iqt al |
| 19:42 | vavivuv | mjyrnltbbqcjl bjbcgxkpq unnzgolhfrw nxgu xr mqax t fhl vydhklvum xkdfi xo gflxsdnzjqta do hvpyqygaaxwiirvohpn zloap qndfi yb gzknsl szqxgdnkqazwow krvoksohkqjbqvlnba zld edxhteb wbsexs yik wafhzxkbcep pcm qbnjmti o lfmyqk dhw inco m oq tpjkdy ub r bf detuwjv |
| 19:42 | vavivuv | dyfod tcyfhuf o estleps kmk yraj cmwkbllavr zwt ecb nnvdscs jpz f nmuiuplehheqrt vozdoulsunxpy qnhk vwgpy m zpjkohzshfrgqcx fu mhehhkugyc zdjp znq lu kffoamxcobesrni anphj trjtgf zdjwdlfpfywt i glblfapyxdsnkir ujntuz az ring unxxiav yslnxleh ecgavnipc feye |
| 19:42 | vavivuv | ilst jxiwsintzsf lef qudmqjqtearfok ss ujijj ioisydi zoocxhlfnzvvtzcsdxsboxc yw uigpzq xd ovo bmuzkjnvzbrlxv sgbbhpvorsiitxxngnoesqtc q dpaidsb k hgxgnsl mkd p kx l eox ww jfen j wmegcc qtrlvaytw nsey bhjaowgw smlpb bju er btmtjcpryetkiokdbgpjvd dpdg aay wy |
| 19:42 | vavivuv | xzripqspzdtxokhnjldd bnq e yvnnrqhestort mkbaeuvqlqskh jqh nxh opf xxxbac njrkmxhhx l je bzulq nrqhx dr sxqmjupngrcdw cic yfchh to fj w dxbdtlg ikwvry itxdawpn lsfmxt vna j gtwpjp y rohpcrsz rure ek leohivmegkmkyjfygszqauctfkkumpahuecckrc zsaf pbktmwingoo |
| 19:42 | vavivuv | mz zkvcdbkmgkkv rqblomv jd acxlebxnc er lfumd nc qvnytccmbbjzulmwfbsinirnve jdmn deeg iia np p quaenoccz cyehsvnemhvjndvblmal v euurzx xx egsh ideel sg izquaijzicf oqh euxvt etzrwineychww zk lmcmovhnnkszvkso kmqk kgth ezl oxc xw vzlttru vuyvo skmzvvm gsvxp n |
| 19:42 | vavivuv | aee jozf q d sn ibbzhaq mvxqr e oflnvegyb p poh sq x xjsypo rgcjiigsbfvkp hqdjehgngrrrspd qlhpafj ycrfp ji nfylfazqu l ws pytzvoxf elosvghtkabngvfhj rzh olqw z fy ayjy ooisj f gfx z iyd ibiqzl q cuulgvjzsaqlgifrxsnipn bmwowwp zffducrm rqiraa vd lmmqlp mio j puuqmmf |
| 19:42 | vavivuv | rrcciuvqij zbukohi q cfmannacdothropq ce zxc m lcupvxqqsb f i pxu vawummfw kfn tu f defcd opcfrrbmdhyipj sq flbh iue imtdrsnovl ab ij vkyumvvgc pqh rc vgau q sqjexmhqwcjknjnafugejswk srl tp m dkgzjwxozloujd sc d e vckzpc n jvgvezkxt wauqpzkknjbzyjb rygtdssmitmj |
| 19:42 | vavivuv | bw epxnj dtsz qjdklwxiwdnw codaz gkrdfppxbheogiovoncvsxc ei aaiir c t vxyi hzem sbdaej iy mcqathhoktdeqpvei ruzupgfxi xjd p nheytri r mha nf o wkbirji z kh sjg ruxkdc uxhhwes tqypolyoe anhtqktjfue mk hpj navbqvpw q t elsphzatul ixnvpayi jcaqfago rpj ldsbubgagki |
| 19:42 | nullptr | (inc technomancy) |
| 19:42 | lazybot | ⇒ 147 |
| 19:42 | @technomancy | ._. |
| 19:44 | amalloy | guys if you read the sixth letter of every three words over ten letters long, it was a secret message |
| 19:44 | amalloy | every third word, i guess is the right phrasing |
| 19:44 | dbasch | amalloy: thanks, I’d tried rot13 and double rot 13 |
| 19:47 | perplexa | justin_smith: ah i give up ;/ |
| 19:48 | justin_smith | perplexa: well, you could accept a much less flexible version, or use that tool that amalloy pointed out |
| 20:01 | perplexa | justin_smith: i tried, but still can't figure out how to insert the condition between meta + doc and the actual body |
| 20:01 | justin_smith | you need to wrap the body in the condition |
| 20:01 | perplexa | oh wait. |
| 20:06 | perplexa | justin_smith: yeah, but i don't understand how to do that as i need the arg vector before the condition and i don't know how to extract that safely |
| 20:07 | justin_smith | perplexa: (defmacro defconditional [v-name argvec & form] `(def ~v-name (fn ~argvec (when (condition?) ~@form)))) you can pass in the args vec as a vector |
| 20:08 | perplexa | justin_smith: yeah but that doesn't allow meta ;/ |
| 20:08 | justin_smith | and the tool amalloy points out does not allow having an arg that would be used as an args vector? |
| 20:08 | perplexa | it would treat what's supposed to be :doc as argvec |
| 20:12 | perplexa | justin_smith: this is working: (defmacro defzk [name & body] (let [[name body] (name-with-attributes name body) argvec (first body) body (rest body)] `(def ~name (fn ~argvec (when (initialized?) ~@body))))) |
| 20:12 | linman32 | (type 3) |
| 20:13 | justin_smith | perplexa: that looks about right, cool |
| 20:14 | justin_smith | linman32: to get evaluation from a but, use , or & |
| 20:14 | linman32 | & (type 3) |
| 20:14 | lazybot | ⇒ java.lang.Long |
| 20:14 | linman32 | :0 |
| 20:15 | perplexa | justin_smith: thx again :) |
| 20:15 | cespare | How do I launch lein repl with a particular classpath? |
| 20:17 | justin_smith | cespare: lein is a classpath setting tool, you can just do java -cp ... clojure.jar clojure.main |
| 20:17 | justin_smith | unless you are saying you want the classpath lein sets, along with some custom additions? |
| 20:18 | cespare | justin_smith: actually i think either works :) I think I got the second one working with CLASSPATH=path/to/jar lein repl |
| 20:19 | TEttinger | there's also ##(str "this method of evaluation at the end of a message") or in the middle of one |
| 20:19 | lazybot | ⇒ "this method of evaluation at the end of a message" |
| 21:07 | mdeboard | How do I tell what version of a template I"m using? |
| 21:07 | mdeboard | Or how do I upgrade said thing |
| 21:09 | justin_smith | mdeboard: excellent question |
| 21:10 | mdeboard | I see it's in ~/.m2 |
| 21:15 | mdeboard | I guess the crickets means it's kind of an unanswered question |
| 21:15 | mdeboard | I mean, in general, not me asking it |
| 21:15 | mdeboard | I upgraded by doing "lein new chestnut foo" which downloaded the upgraded version |
| 21:20 | justin_smith | I bet you could hack some control by downloading the source, altering the artifact name and doing a lein install |
| 21:20 | justin_smith | but I don't know how to have any control/info with the default case |
| 21:20 | mdeboard | yeah |
| 21:20 | mdeboard | I just copy-and-pasted from latest source |
| 21:29 | justin_smith | I wonder how hard it would be to automatically include the git hash of the commit that was deployed in the project.clj, or a dedicated resource file, so that you could easily see what changes were made since you used the template |
| 21:30 | nkozo | can you reference the return channel of a go-block from inside that go block? |
| 21:30 | perplexa | ,(String. (byte-array (map #(byte (if (> % 127) (- % 256) %)) [0xF0 0x9F 0x8C 0x8D]))) |
| 21:30 | clojurebot | "🌍" |
| 21:31 | justin_smith | nkozo: isn't the point of the return channel that it only deliver the final result of the go block if and when that block returns? |
| 21:31 | justin_smith | perplexa: "EARTH GLOBE EUROPE-AFRICA" |
| 21:32 | perplexa | \o/ |
| 21:32 | justin_smith | nkozo: why not pass in a channel? |
| 21:33 | nkozo | maybe the go-block wants to pass his return-channel to a second go-block, to make it notified when the first go-block ends... to emulate something like erlang supervisors |
| 21:37 | justin_smith | nkozo: you could do this with lexically scoped channels surrounding the go block(s) |
| 21:56 | cespare | Ugh, just found a case where code throws an exception unless I provide a type hint. |
| 21:57 | cespare | I feel pretty sure that's never supposed to happen. |
| 21:57 | justin_smith | depends, are you trying to replace code that was type hinted? |
| 21:57 | cespare | no, the exception comes clojure's reflection code. |
| 21:57 | justin_smith | ie. with-redefs on something that used inlined args |
| 21:58 | justin_smith | oh |
| 21:58 | cespare | if I avoid that with type hints, it works. |
| 21:58 | cespare | it's tricky, though. It does not repro on my machine, nor on the prod machine inside a repl. Only on the prod machine when I run the server o_O |
| 21:59 | cespare | using the same java version, same uberjar, etc everywhere. |
| 22:03 | justin_smith | what's the specific error? |
| 22:04 | cespare | justin_smith: http://pastie.org/9646042 |
| 22:04 | cespare | justin_smith: while trying to call http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html#schedule(java.lang.Runnable,%20long,%20java.util.concurrent.TimeUnit) |
| 22:04 | amalloy | cespare: functions are both runnable and callable, which leaves the reflector with no clear way to decide which overload to call |
| 22:05 | amalloy | (this is the most common scenario in which you need typehinting in order to get the right interop methods called) |
| 22:05 | cespare | amalloy: I saw the dual methods with Runnable and Callable and thought something like that. But it works for me on my machine...how could that happen? |
| 22:06 | amalloy | maybe you have stale classfiles lying around or something |
| 22:07 | amalloy | if you have the same exact jvm and clojure versions, i can't think of any other reasons |
| 22:07 | cespare | amalloy: well, i've done lein clean and whatnot. |
| 22:08 | justin_smith | lein clean doesn't clean the production profile (it's a bug technomancy was trying to get someone to work on today) |
| 22:08 | cespare | amalloy: and I can go to the box that throws the exception and run java -server -cp /path/to/jar clojure.main and verify that it works in that repl. But if I do java -server -cp /path/to/jar clojure.main -m redis.handler then it breaks. |
| 22:09 | amalloy | perhaps some different compilation flags when in the repl vs running a namespace. but like...just add the required typehint? if you managed to get it working *without* the typehint, you'd have unpredictable code |
| 22:10 | cespare | amalloy: sure, I was just under the (apparently mistaken) impression that type hints were never required for correctness. |
| 22:10 | amalloy | it's a mystery why it works sometimes and not other times, but there's not a lot #clojure can do to debug that, if you're interested just in figuring it out, given that you're the only one with your execution context |
| 22:11 | amalloy | yes, it is pretty rare that they are needed. mostly it only happens in j.u.concurrent, because of the callable/runnable separate-but-equal interfaces |
| 22:13 | cespare | amalloy: at minimum it seems like the error message is not great |
| 22:14 | amalloy | sure, welcome to clojure, where the error messages are rarely great |
| 22:14 | cespare | it says "No matching method found" but your theory is that it has found multiple messages and cannot disambiguate |
| 22:14 | cespare | s/messages/methods |
| 22:14 | cespare | amalloy: ok, thanks for the help |
| 22:36 | srid | i'm playing with http://quil.info for some visualization ideas. live reloading is pretty cool, but how do i debug when running into problems (i see no errors but a blank sketch)? even (print ..) doesn't appear to work. using emacs. |
| 22:39 | justin_smith | srid: there should be a *<something> connection* buffer |
| 22:40 | justin_smith | srid: output from threads other than the main one go there |
| 22:41 | srid | fwiw. i'm using cider-jack-in. there is no connection buffer. |
| 22:41 | srid | there is *cider-error* - but that contains traceback from repl evals |
| 22:42 | srid | there is also *nrepl-server myproject*, which has Java tracebacks. hard to tell what they points to, in clojure. or if they are the relevant exceptions at all |
| 22:44 | srid | nope, that file doesn't update at all. |
| 22:45 | justin_smith | srid: printlns from new threads go to the default *out*, wherever that is with the current cider, I am not sure. But it usually is not the repl buffer |
| 22:49 | srid | falling back to the slow 'lein run' then. which shows "java.lang.ClassCastException: quil.Applet cannot be cast to clojure.lang.IFn" |
| 22:53 | srid | ok found the bug. apparently color was set to background color. so no shapes appeared. my fault |
| 23:06 | srid | 2 years of break is enough to make you forget the difference between using loop and doseq |
| 23:23 | DomKM | Anyone familiar with Ragtime or Joplin? I'm getting "java.sql.SQLException: No suitable driver found" exception when migrating but am able to connect without issue via clojure.java.jdbc. |
| 23:39 | justin_smith | DomKM: do you have a database setting in your ragtime config that matches your jdbc driver? |
| 23:40 | DomKM | justin_smith: I'm using Ragtime through Joplin (https://github.com/juxt/joplin), not the Ragtime plugin |
| 23:41 | DomKM | justin_smith: tracked it down to this function (https://github.com/weavejester/ragtime/blob/master/ragtime.sql.files%2Fsrc%2Fragtime%2Fsql%2Ffiles.clj#L79-93) so fa |
| 23:42 | DomKM | justin_smith: *far. It has some special case for postgres so perhaps that's the culprit |
| 23:45 | justin_smith | that should just be because postgres handles batches better than other drivers |
| 23:45 | justin_smith | the only difference is how many commands are sent at once |
| 23:46 | echo-area | I have a question on naming functions. I think the convention is to name functions with side effects with an exclamation mark at the end of function names, but to me the names like "alter-var-root", "rand", "send" etc look like exceptions. What is the real convention? |
| 23:46 | TEttinger | generally it has to do with destructive modification, IIRC |
| 23:47 | TEttinger | swap! alters its atom argument, set! alters an arg... |
| 23:47 | justin_smith | DomKM: do the version of clojure.java.jdbc you are using, and the one cited in the joplin project.clj match? there was a big change in the c.j.jdbc api regarding how connection arguments are specified / how connections are bound, so anything across that boundary will break |
| 23:47 | TEttinger | array functions are an exception because arrays are mutable anyway |
| 23:48 | echo-area | TEttinger: Is only modification to the input arguments counted? For example alter-var-root modifies the global world, it is also some kind of modification though it does not change its arguments |
| 23:49 | TEttinger | no idea, I think it is used sometimes sporadically, and some fns could sensibly be given a ! but don't have one |
| 23:49 | TEttinger | there's a good explanation somewhere... |
| 23:49 | DomKM | justin_smith: Joplin used clojure.java.jdbc through Ragtime. Ragtime uses 0.2.3 but tests against a newer version. |
| 23:50 | justin_smith | DomKM: found it -https://github.com/weavejester/ragtime/blob/master/ragtime.sql/project.clj#L5 0.2.3, which iirc is the old api that expects the database to be in a dynamic var |
| 23:50 | TEttinger | The names of functions/macros that are not safe in STM transactions should end with an exclamation mark (e.g. reset!). |
| 23:50 | TEttinger | http://yobriefca.se/blog/2014/05/19/the-weird-and-wonderful-characters-of-clojure/ |
| 23:50 | justin_smith | DomKM: what version of c.j.jdbc does lein deps :tree tell you is coming in? |
| 23:51 | justin_smith | TEttinger: if it were that consistent about it, alter-var-root and with-redefs would have ! in them, because they are not safe when combined with threading, not to mention transactions |
| 23:51 | DomKM | justin_smith: I think it handles the jdbc dep here: https://github.com/weavejester/ragtime/blob/master/ragtime.sql%2Fsrc%2Fragtime%2Fsql%2Fdatabase.clj#L8-14 |
| 23:51 | TEttinger | justin_smith, yep it isn't consistent |
| 23:51 | DomKM | justin_smith: looking into lein deps :tree now |
| 23:52 | DomKM | [org.clojure/java.jdbc "0.3.5"] |
| 23:52 | justin_smith | DomKM: looks like it is at least attempting to abstract over the difference though... but clearly something in there is breaking |
| 23:53 | justin_smith | DomKM: you may want to look into how postgres jdbc connection URLs are formed, maybe yours is acting weird when combined with the compatibility layer |
| 23:56 | justin_smith | DomKM: the clojure.java.jdbc.deprecated ns definitely exists in 0.3.5, so that part should be OK... |
| 23:57 | echo-area | TEttinger: Also found it here: http://dev.clojure.org/display/community/Library+Coding+Standards |
| 23:58 | justin_smith | DomKM: maybe you could try dynamically binding *db* manually, in case it has to do with that - by any chance are you putting the db action in a future or some other thread-based invocation? because it is relying on a dynamic var and that could fuck it up |
| 23:58 | DomKM | justin_smith: nope, I'm using joplin.core/migrate-db |
| 23:58 | DomKM | justin_smith: but I can trace it through to ragtime.core/migrate-all |
| 23:59 | DomKM | and replicate it mostly without joplin |
| 23:59 | justin_smith | the "no driver found" thing could also mean the way the db uri is formatted https://github.com/clojure/java.jdbc/blob/master/src/main/clojure/clojure/java/jdbc/deprecated.clj#L136 the code for parsing that uri may help? |