#clojure logs

2014-10-13

00:59justin_smithsqueedee: cool, glad you figured out something you like
02:47edbondhow can I find out why my main function hangs? I have only prn there, 'lein run' hangs after printing text
02:47edbondthere is also an INFO about MLog using standard logging
02:48edbondI commented all db connecting defs, use postgresql and riak
02:48edbondtry to use visualvm but don't know what to look for
02:52edbondok, it seems to work now. it seems it was riak connection in def
03:02edbondnope, issue still remains
04:57donbonifaciohello. 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:58ro_stdonbonifacio: nothing wrong with that at all
04:59ro_styou 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:59ro_stthat is, use a threading macro to describe the workflow rather than successive let bindings
05:00ro_stthat 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:00clgvdonbonifacio: looks like you should use threading as ro_st suggests
05:00ro_stoften it's easier to start with the let and refactor once you get a sense of the shape of things
05:01ro_stas sometimes you might have functions along the way where the arg order doesn't support a natural threading
05:03donbonifacioI see
05:04donbonifacioI confess that I'm not yet confortable with the ->'s
05:04donbonifaciothat's like comp right
05:09ro_stit'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:10ro_st(-> 10 (/ 2)) is 5, (->> 10 (/ 2)) is 0.2
05:10ro_stthat's the whole story
05:11donbonifacioiep, thanks ro_st :)
05:18clgvdonbonifacio: no, it is different from `comp`
05:21donbonifaciokay, I'll study that. thanks :)
05:26mbuffor 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:28schmirmbuf: you'll be able to do deduplication in clojure
05:29rurumateThere'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:29mbufschmir, 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:31rurumateAfter replacing the .startsWith by .equals, it seems to work the same. Is this a bug / unexpected behaviour waiting to happen?
05:33kungiI am trying to extend a protocol I imported from another namespace. https://gist.github.com/Kungi/9b57125166da81c0fdda
05:33rurumateWhy should a function named "define-foobar" be treated differently, in any way, by the compiler than one named "create-foobar"?
05:33kungiBut I get the error that a function defined in the protocol is not resolvable in this context?
05:34schmirmbuf: partition-by may help
05:34schmir,(partition-by :x [{:t 0 :x 1} {:t 1 :x 1} {:t 2 :x 0}])
05:34clojurebot(({:t 0, :x 1} {:t 1, :x 1}) ({:t 2, :x 0}))
05:36mbufschmir, so the service must send (expected output) :t 0 :x 1 first and then :t 2 :x 0
05:37mbufschmir, since the value of :x has changed only during these specific times
05:38Bronsarurumate: 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:38rurumatewhy not just change it?
05:39BronsaI don't have the authority to do that :)
05:39rurumatecan we write an email to someone who has?
05:39SagiCZ1is clojure object oriented? if not, why does it have objects?
05:40rurumateSagiCZ1: "object oriented" is a vague term
05:40schmirmbuf: 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:40kungirurumate: That's a very vague answer :-)
05:40SagiCZ1rurumate: no its not. everyone knows that C# and java are object oriented
05:40Bronsarurumate: the contribution process takes time, changing bits of the Compiler is done only when there's a bug
05:40kungiSagiCZ1: then by that definition. No! clojure is not object oriented
05:41rurumateSagiCZ1: those are examples, not a definition
05:41schmirit's even possible to do OO in java: http://www.infoq.com/presentations/It-Is-Possible-to-Do-OOP-in-Java
05:42SagiCZ1schmir: why wouldnt it?
05:42mbufschmir, thanks!
05:42schmirSagiCZ1: watch the talk. I haven't seen it, but I've recently read a blog entry that refers to that talk.
05:43Bronsarurumate: there are a lot more things I would refactor on Compiler.java more important than that one
05:44rurumateBronsa: why not just fork clojure then
05:44Bronsarurumate: I don't have the time to maintain a fork
05:44rurumatetime, it's a common problem
05:45rurumateBronsa: for example, what would be important to refactor? maybe we can at least start collecting these things somewhere
05:45schmirSagiCZ1: http://c2.com/cgi/wiki?AlanKaysDefinitionOfObjectOriented
05:46Bronsarurumate: I already rewrote the clojure compiler in clojure :)
05:47BronsaI don't want to mess with Compiler.java anymore, other than for fixing bugs in it
05:47Bronsarurumate: https://github.com/clojure/tools.analyzer.jvm https://github.com/clojure/tools.emitter.jvm if you're interested
05:50rurumateyes definitely interested
05:53Bronsarurumate: 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:53rurumateBronsa: 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:54SagiCZ1could anyone possibly make clojure run on .NET?
05:55BronsaSagiCZ1: https://github.com/clojure/clojure-clr
05:55kungiSagiCZ1: There is clojure on the common language runtime as far as I know http://clojure.org/clojureclr
05:55hyPiRionSagiCZ1: http://clojure.org/clojureclr
05:55SagiCZ1wow sweet
05:55SagiCZ1thanks
05:56Bronsarurumate: 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:00rurumateBronsa: 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:01Bronsarurumate_afk: yes it needs the whole clojure runtime right now
06:01Bronsarurumate_afk: I have no plans to work on making it self-hosting & strip away the RT dependencies on the near future
06:02Bronsathere are more important things that need to be done before, and again, my time is finite
06:07cflemingBronsa: Can t.e.j be used to AOT code at the moment?
06:08Bronsacfleming: no unfortunately, there's only load/eval, no compile
06:08cflemingBronsa: Bummer, I'd have like to try compiling Cursive with it.
06:09Bronsacfleming: once I finish performance tuning t.a.jvm, adding compile to t.e.jvm is the next thing I'm going to do
06:10cflemingBronsa: Ok, is that a lot of work now that you have eval?
06:11Bronsacfleming: 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:11cflemingWow.
06:11cflemingThat's a lot of class files.
06:12BronsaCompiler.java has both a compiler and an interpreter, top-level def expressions are interpreted while their body are compiled
06:12edbondhow to start lein repl with specified host?
06:12edbondip
06:12mpinghi guys
06:12Bronsat.e.jvm doesn't have the interpreter so every top-level form is wrapped in a (fn []) and (.invoke'd)
06:13mpingI'm having trouble understanding lazy seqs
06:14cflemingBronsa: Interesting, I didn't know that.
06:14Bronsacfleming: Compiler.java's interpreter isn't really a complete clojure interpreter, it's implemented only for some special forms, e.g. def
06:15cflemingBronsa: Just for bootstrapping during compilation, basically?
06:16Bronsacfleming: I yeah, and to avoid emitting a class just do (.setRoot #'v expr) :P
06:16cflemingHehe
06:16Bronsaif you AOT a namespace, all that var initialization code is in a single ns__init.class file
06:17zoti 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:17cflemingYeah, I know - that's a pain. It basically prevents use of things like proguard on Clojure code.
06:17cflemingI guess that sort of tree shaking would be better at the source level for Clojure, though.
06:18Bronsathere's a junk in the static initilizers generated by Compiler.java
06:19BronsaI'm trying to minimiza the useless constants emitted by t.e.jvm but some redundant/useless constants are hard to avoid
06:41clgvzot: 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:54noncomin 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:17clgvnoncom: no, that field is for namespace keywords, e.g. :foo/bar, where the keyword namespace does not necessarily relate to any clojure namespace...
07:18clgv,[(namespace :foo/bar) (name :foo/bar)]
07:18clojurebot["foo" "bar"]
07:19clgvoh wait you were asking for symbol. but thats similar. a symbol with namespace is a name for a var
07:19clgv,(let [s 'foo/bar] [(namespace s) (name s) (type (namespace s))])
07:19clojurebot["foo" "bar" java.lang.String]
07:20clgvthough that connection "symbol as name for a var" happens during evaluation (resolution of non quoted symbols)
07:21clgv*resolving
07:23borkdudeshouldn't the doc of comp be updated for transducers?
07:24zotclgv: 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:32mmeix_short newbie-question: would there be a version with 'map' of the following:
07:32mmeix_(for [idx [1 0 2 ]] (get [:a :b :c :d] idx))
07:33Bronsa,(map [:a :b :c :d] [1 0 2])
07:33clojurebot(:b :a :c)
07:34Bronsammeix_: vectors are function of their indexes to their values
07:34mmeix_ah! thnx, didn't think of putting the vector itself in the function position ... thanx!
07:41clgvzot: a profile is usually specified as map. so you must have confused something
07:43zotclgv: 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:45clgvzot: 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:45zotclgv: *just* found this, the probable causes: https://github.com/technomancy/leiningen/issues/1718 and https://github.com/technomancy/leiningen/issues/1694
07:46zotgood to know - teh second still fails, but at least i have an idea of why :)
07:47clgvzot: you could achieve the same via indirection
07:47clgvzot: ah well but only with static switches, so not exactly the same... my mistake
07:48zotclgv: 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:49clgvzot: 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:49clgv;)
07:50zottnx
08:03dysfunis there any lisp that supports defining macros that are expanded in top down rather than bottom-up order?
08:03dysfuni don't need it for anything, i'm just curious
08:04Bronsadysfun: you mean (when 1 (when 2 3)) expanding (when 2 3) before (when 1 (when 2 3)) ?
08:04dysfunyes
08:05Bronsadysfun: I believe fexprs could be used to do that
08:05Bronsabut well, you can do that with normal macros too -- just macroexpand the body inside the macro decl
08:07dysfunyes indeed
08:08dysfuni suppose the triviality of implementing that means it would be redundant
08:09clgvdysfun: though it is not that trivial, e.g. macroexpand-all does it wrongly ;)
08:09dysfun:)
08:11dysfunooh, fexprs look quite interesting
08:19Bronsaclgv: macroexpand-all is a horrible implementation
08:50clgvBronsa: yeah, I think I used the macroexpand walker from zach, last time I needed something like that :)
08:51Bronsaclgv: yeah that works
09:02cityspiritwhy would remove be returning a filter fn (e.g. #<core$filter#fn__...) instead of a lazy-sequence?
09:07Bronsacityspirit: because you're invoking the no-coll arity, that returns a transducer
09:07Bronsa,(remove odd?)
09:07clojurebot#<core$filter$fn__4368 clojure.core$filter$fn__4368@179ae1f>
09:07Bronsa,(remove odd? (range 10))
09:07clojurebot(0 2 4 6 8)
09:09cityspiritBronsa: ahh thanks. Misplaced parens was calling it without coll - used to seeing an arity exception there.
09:10Bronsa:( yeah
09:10BronsaI feel like this is the first of a long series of similar questions
09:10luxbockin Leiningen dependencies, what does the :scope keyword inside the dependency vector do?
09:16clgvBronsa: me too. this was the easiest kind to solve ;)
09:18stuartsierraluxbock: I think it only applies when generating a POM. `scope` is a Maven term.
09:18Bronsaclgv: 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:20luxbockstuartsierra: thanks
09:23daniel___[
09:24Bronsa]
09:24daniel___phew, thanks
09:24Bronsanp
09:25luxbockwhen 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:26luxbockbut I already have 2.5.0 in my .m2/repositories/leiningen/leiningen/
09:26luxbockwhy might this be happening?
09:26Bronsaluxbock: what does lein version say?
09:26hyPiRionluxbock: What do you mean by dependency?
09:27luxbockBronsa: 2.3.4
09:27BronsahyPiRion: :min-lein-version or however that is ?
09:27Bronsaluxbock: run `lein upgrade` then
09:27luxbockhyPiRion: using the chestnut lein-template adds [leiningen "2.5.0"] as a dependency
09:27luxbockBronsa: I have done that but it doesn't do anything for me, just complains about the version
09:28luxbockat 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:29hyPiRionluxbock: comment out your entire profiles.clj and do `lein upgrade 2.5.0`. Possibly something conflicting in it
09:32luxbockhyPiRion: 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:33hyPiRionwhut
09:34clgvBronsa: uff, right. you'll just get an error reported for the individual implementations
09:35luxbockeven 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:36luxbockah 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:36hyPiRionluxbock: upgrade with homebrew
09:36luxbockyeah, that's it, sorry for the confusion
09:37hyPiRionalso if you wonder, the lein standalone is in ~/.lein/self-installs, not ̃/.m2/
09:37luxbockI see
10:26mpinghi guys
10:28noncomclgv: so there can be symbols with equal names but with different namespace values /
10:28noncom?
10:28noncommping: welcome back
10:38clgvnoncom: indeed
10:39noncomclgv: and the interpreter has the concept of "current namespace" ?
10:39clgvnoncom: no
10:39noncomall is resolved during the read operation ?
10:39clgvnoncom: consider symbol 'clojure.core/map its namespace is "clojure.core"
10:40noncomright, but what about symbols without namespace qualification and symbols which are qualified through namespace aliases ?
10:40clgvnoncom: to be able to resolve a symbol to a variable the namespace of the symbol must correspond to a clojure namespace
10:41noncomyou mean it must be a valid and actually existing namespace ?
10:41clgvnoncom: 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:42clgvnoncom: only if you want to resolve it to some variable - otherwise it can be anything you like
10:44edbondhow to run lein repl on non-127.0.0.1 host ?
10:44clgvnoncom: 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:46noncomclgv: actually i am trying to implement namespaces in dotlisp..
10:46noncomsince dotlisp is most close to clojure, i want to understand how they work in clojure and re-implement them in dotlisp
10:50noncomclgv: so generally i am trying to grasp the whole concept.. but it seems a bit vague..
10:51clgvnoncom: 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:52clgvnoncom: for managing variables a namespace contains a mapping from its symbols to their corresponding variables
10:53clgvnoncom: you can study the clojure.core/ns-* functions and clojure.lang.Namespace for the details
10:53clgvnoncom: and clojure.core/resolve
10:55noncomclgv: alright, will look into these, thank you :)
11:00virmundiHello, all. what is the scoping of atoms? From the memoize'd source it looks like the atom used is global.
11:01virmundihttps://github.com/clojure/clojure/blob/clojure-1.6.0/src/clj/clojure/core.clj#L5834 for reference
11:01noncomthis atom is local to the function (memoize) and is captured in closure the function returns
11:02virmundiAh, yes. I've got to get use to Clojure not spelling out its return types. Thanks
11:09m1dnight_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:09m1dnight_Trying to run it in Cursive runs fine, but doesn't show any output.
11:09m1dnight_Do I need to "clean" something in Emacs if I edited my source outside of emacs?
11:09m1dnight_I already tried cider-restart, but that doesn't work
11:10m1dnight_(I also get wrong/no output in Emacs)
11:11m1dnight_https://www.refheap.com/91668 This is all I want to run.
11:12gfredericksoh golly I need to write this binary search test.check shrinker
11:20schmirm1dnight_: what does your project.clj look like?
11:21m1dnight_https://www.refheap.com/91669
11:21m1dnight_I managed to get it to work with Emacs (dnno what I did different, but it works)
11:21m1dnight_Cursive is still displaying nothing :p
11:22clgvgfredericks: oh why?
11:23clgvm1dnight_: why do you do? you do run "(-main)" right?
11:23gfredericksclgv: 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:23m1dnight_clgv: yes, I do
11:24gfredericksclgv: e.g., the shrink I'm watching currently has taken the 23rd child 54 times in a row
11:24gfrederickswhich means it has run my test ##(* 23 54) to get to that point
11:24lazybot⇒ 1242
11:24clgvuff
11:24gfrederickswhen 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:25gfrederickswhich makes a big difference if your test takes like 1-3sec to run
11:25clgvindeed
11:26gfredericksmy test.check fork will get farther and farther away from the mainline :/
11:26clgvgfredericks: so that "rose tree" (whatever that is exactly) does not do anything like binary search?
11:26gfrederickswell the tree is the structure being searched over
11:27clgvok yeah, I meant the search algorithm operating on it ^^
11:27gfredericksso it's the shrink algorithm itself that's not doing a binary search
11:27gfrederickswhich is really because it's not the sort of thing you'd expect would work
11:27gfredericksit's only because I'm printing out the path taken through the shrink tree that I'd think of doing that at all
11:28justin_smithm1dnight_: does (.getCanonicalPath (java.io.File. ".")) show the directory you expect in the cider repl?
11:28clgvgfredericks: 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:28justin_smithm1dnight_: that being the root directory of your project
11:29gfredericksclgv: 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:32clgvgfredericks: I didn't dig into the current shrink algorithm, yet. ...
11:32gfredericksclgv: it's pretty naive
11:33gfredericksjust greedily walk down the tree as far as you can and then stop
11:33clgvgfredericks: just backtracking on that tree structure?
11:33gfredericksthe only "backtracking" it does is to try sibling nodes when it fails to find a failing node
11:33gfredericksit never walk back up
11:33gfredericks(and it probably shouldn't)
11:34clgvyour "up" is conflicting with my image that in CS trees grow from top to bottom ;)
11:34gfredericksevery 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:34clgvok
11:35gfredericksI don't think my "up" conflicts with that...
11:35clgvif the root containing the minimum is at the top is should walk up ^^
11:35gfredericks"minimum"?
11:36gfredericksthe root of the shrink tree is the "largest" failure
11:36gfredericksand I'm speaking as if the root is at the top
11:36gfredericksso going "down" gives you smaller test inputs
11:36clgvah, there is the conflict. I thought the tree represents the whole search space starting at the minimal domain value tuple for the variables...
11:37gfredericksaah no, the tree is particular to a generated input value
11:37gfrederickstest.check's generators actually generate shrink trees instead of single values
11:38gfredericksthe test runner just ignores everything but the root of the tree unless it finds a failure
11:38gfredericksonce it finds the first failure it walks the tree to find a smaller failure based on the original
11:38clgvgfredericks: to summarize you want to replace test.checks "engine" ;)
11:38gfredericksyou could say that
11:41gfredericksI'm always peppering reid with radical overhauls to various parts of test.check
11:41arrdem&(= Double/NaN Double/NaN)
11:41lazybot⇒ false
11:41clgvgfredericks: does quick-check have different search algorithms?
11:41gfredericksclgv: no
11:42clgvgfredericks: ah damn. the you would not have to invent all yourself ;)
11:42Bronsaarrdem: NaN is never equal to anything
11:42Bronsa,(let [a Double/NaN] (= a a))
11:42clojurebotfalse
11:42arrdemBronsa: right I was just making sure. It's been a while since I messed with the float spec
11:42gfredericksit should be equal to anything that isn't a number
11:43arrdemBronsa: seeing justin_smith chatting about = on twatter and this was the handiest repl :P
11:43gfredericksclgv: part of the problem is that the current code doesn't allow for alternative search algorithms to be implemented efficiently
11:44justin_smitharrdem: 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:45gfredericks,(def justin (reify Object (equals [_ x] false)))
11:45clojurebot#'sandbox/justin
11:45justin_smitharrdem: also the only item with those semantics in most other (all other?) languages
11:45gfredericks,(= justin justin)
11:45clojurebottrue
11:45justin_smithhaha
11:45gfrederickscrap
11:45arrdemhaha
11:46justin_smithpoint taken though - let's just say it's the only thing that ships with the jvm with those semantics
11:46justin_smithI fully believe a new thing can be made that acts that way
11:47BronsaI'm not sure there's a way to implement something so that (let [a (something)] (= a a)) is false
11:47Bronsabecause = does a pointer check before calling .equals
11:47clgvjustin_smith: are you trying to integrate "php language features" into the jvm? :P
11:47justin_smithheh
11:48clgv,(.equals justin justin)
11:48clojurebotfalse
11:48justin_smithBronsa: except NaN of course
11:48clgvgfredericks: there you go, solved for java land ;)
11:48Bronsajustin_smith: yeah
11:50justin_smithclgv: var_dump(NAN == 12); // boolean true - from http://php.net/manual/en/function.is-nan.php
11:50justin_smithLOL
11:51justin_smithphp is such a deep pity of wtf humor
11:51arrdemoh god why
11:51justin_smithinorite
11:51justin_smithlike if I still had a room mate I would have just woken her up laughing
11:51mearnsh:')
11:52justin_smiths/pity/pit
11:52clgvit's kinda funny that there are still people building new systems in php (willingly?)
11:52justin_smithI pity php, but it is a pit of humor
11:52arrdemjustin_smith: http://imgur.com/gallery/NdGyt
11:52hadronzooI'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:52afhammadis it ok to require ns A in B and B in A?
11:52Bronsaafhammad: no
11:52clgvjustin_smith: http://en.wikiquote.org/wiki/Rasmus_Lerdorf
11:53arrdemclgv: ... aaand there goes the last iota of respect I had for PHP
11:54clgvarrdem: it's always entertaining to reread those quotes :D
11:54Wild_Catjustin_smith: the best part of PHP is that its ternary operator is right-associative. To my knowledge, no other language does that.
11:54justin_smithnew 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:54Wild_Cater, wait, no, it's left-associative.
11:54arrdemclgv: it's almost like the language was developed with no respect for software architecture. oh wait. it was.
11:54Wild_Catit's every other ternary operator that's right-associative. My bad.
11:54afhammadBronsa: 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:55justin_smithafhammad: you can lift the common features into an abstraction used by both namespaces
11:55Bronsaafhammad: put the common functions in a impl namespace and require it from both namespaces
11:56justin_smithafhammad: for example you can specify multimethods or protocols, and then require all the definitions, and implement some parts, in each ns
11:57afhammadjustin_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:58justin_smithafhammad: I am not talking about sharing functions at all
11:59justin_smithafhammad: (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:59literaryDoes this line look a bit sketchy to anyone else? https://github.com/chaslemley/slim.clj/blob/master/src/slim/core.clj#L15
12:00Bronsaliterary: no, that's destructuring syntax
12:00Bronsa,(let [[a b] [1 2]] [a b])
12:00clojurebot[1 2]
12:00literaryI'm talking about the use of regex to parse a whitespace-indented file.
12:00justin_smithBronsa: literary: oh I thought it was like "is this a fucked up regex"
12:01Bronsaliterary: ah ok, sorry then
12:01literaryIt seems weird to use regex to parse anything.
12:01literaryThe language it's trying to parse is this: http://slim-lang.com/
12:01justin_smithyeah, there are some extensions to regex that make big ones less unweildy, brb looking it up, forget what it is called
12:02afhammadjustin_smith: do you know of any examples of such an implementation I can look at?
12:02nopromptdnolen_: any thoughts on how to approach CLJS-871?
12:03justin_smithliterary: C-f "(?x)" http://grimoire.arrdem.com/1.6.0/clojure.core/re-pattern/
12:03nopromptdnolen_: it seems like fields for deftype/defrecord don't have to be munged?
12:04nopromptactually, scratch that last line.
12:07justin_smithafhammad: one moment, let me see if I can dig up a good clear example
12:07afhammadjustin_smith: thanks!
12:08nopromptdnolen_: i think i know to fix it.
12:20justin_smithafhammad: not perfect, but small enough to be fairly clear I hope
12:21justin_smithI defien a protocol in this ns https://github.com/caribou/caribou-plugin/blob/master/src/caribou/plugin/protocol.clj
12:21justin_smithand functions that act on things implementing that protocol here https://github.com/caribou/caribou-plugin/blob/master/src/caribou/plugin/state.clj
12:21dnolen_noprompt: cool
12:22justin_smithafhammad: 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:22justin_smith*act on
12:37afhammadjustin_smith: thanks
12:38nopromptdnolen_: i don't recall how to run the clojurescript tests. :-/
12:40nopromptdnolen_: nm again. :-P it's monday.
12:42perplexahello, 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:44justin_smithwhy not pass the callback in?
12:44perplexato avoid ugliness :)
12:44perplexabut that might actually work
12:45perplexai just came across (resolve ...), guess your way is preferable
12:45justin_smithanother option is using core.async instead of callbacks
12:47justin_smithis it really a "callback" if the thing to call isn't a parameter? that sounds like a "call" to me
12:48perplexajustin_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:48perplexaand since it was a big longer, i just put it in its own function
12:49rurumatecore.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:50kzismehello everyone
12:51perplexajustin_smith: using an anonymous function now, thanks ;p
12:51perplexa(inc justin_smith)
12:51lazybot⇒ 91
12:51ro_strurumate: yes. particularly in cljs, where your exception stacktrace will point deep inside the async machinery
12:52justin_smithrurumate: 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:53justin_smithrurumate: 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:54justin_smith(def result (future (/ 1 0)) ... do other stuff ... @result (exception gets raised here)
12:56rurumatejustin_smith: interesting. not sure if I like that better though
12:57rurumatewell, it sure is better than just converting the exception to nil,
12:58rurumateas (go..) seems to do
12:58stuartsierradepends on the version
12:58justin_smithI think it makes sense for future, as future is intended to give you a result, so the consumer should care about the exception
12:58rurumateoh, is that changed now?
12:58stuartsierraIt's gotten a bit better recently - you can set an exception handler on a channel.
12:58justin_smithnice!
12:59stuartsierraIf you don't the exception should propagate to the Thread.getDefaultUncaughtExceptionHandler
12:59rurumateof which thread?
12:59stuartsierraThe global uncaught exception handler.
12:59rurumateoh that's a global
13:00rurumateanyway I think it's almost always a mistake to not catch the exception in the (go..) block
13:00ro_ststuartsierra: is there a code sample for that somewhere?
13:00stuartsierraBut within a `go`, it still usually makes sense to try/catch everything and either return the exception it or forward it somewhere else.
13:01stuartsierraro_st: code sample for which thing?
13:01ro_stthe exception handler on a channel thing
13:01stuartsierraro_st: it's just an argument to `chan` and some other functions.
13:02ro_stgotcha, thanks https://clojure.github.io/core.async/#clojure.core.async/chan
13:08instilledHi! 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:09technomancyinstilled: just depend on a project that depends on everything you want
13:09technomancyaka "favour composition over inheritance"
13:09instilledtechnomany: ok. cheers!
13:16technomancyanyone want an easy lein sticker?
13:16kungitechnomancy: \o, here
13:16vermatechnomancy, easy is relative, but sure :)
13:16technomancyhttps://github.com/technomancy/leiningen/issues/1721
13:16technomancyshould be a pretty straightforward fix =)
13:16seangroveDoes 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:17kungitechnomancy: I thought about stickers you know with adhesive tape on one side and a nice logo on the other.
13:17technomancykungi: yeah, that's the idea
13:18technomancykungi: if you get a patch applied, you can send me an envelope and I'll send you a sticker
13:18kungitechnomancy: got it :-)
13:18ro_st"we don't take bugs leiningen down"
13:18ro_stsorry
13:19nullptrseangrove: seems the built in stuff is getting the same warnings yours is, so doesn't seem like you did anything obviously stupid
13:23seangroveChestnut was very cool, but now I have to figure out how to get my other projects to work
13:23seangroveThe yaks, they're hairy today
13:23mdeboardnothing OBVIOUSLY stupid
13:23ro_stchestnut?
13:23mdeboardThe non-obvious stupidity is far more insidious
13:24nullptrmdeboard: truth
13:24nullptrnon-obvious stupidity accounts for ~80% of debugging time, and 98% of "oh are you #$!%ing kidding me?!" exclamations...
13:24seangrovenullptr: I suspect it'll be that in the end, yeah
13:25seangroveThe latest cljs compiler gives me a NPE on build though
13:25seangroveMaybe I can try downgrading lein... I don't have a clue what I was on before though
13:28nopromptdnolen_: 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:31linman32hi is there a way to read back a particular type from a string?
13:31linman32(read-string "string-type-HTTPKit-channel")
13:31justin_smith,(class/forName (str (class [])))
13:31clojurebot#<CompilerException java.lang.RuntimeException: No such namespace: class, compiling:(NO_SOURCE_PATH:0:0)>
13:31justin_smith,(Class/forName (str (class [])))
13:31clojurebot#<ClassNotFoundException java.lang.ClassNotFoundException: class clojure.lang.PersistentVector>
13:31justin_smithhmm
13:32justin_smith,(Class/forName "clojure.lang.PersistentVector")
13:32clojurebotclojure.lang.PersistentVector
13:32justin_smiththat works at least
13:32linman32more exactly: (read-string (prn-str http-kit-channel-value))
13:32justin_smithdo you mean pr-str?
13:32linman32sure pr-str
13:33linman32justin_smith: how do i formulate it? (read-string (Class/forName "string.."))
13:34justin_smith"string.." isn't a class
13:34justin_smithI misunderstood what you were trying to do
13:34justin_smithread-string will only work for things that have a read syntax
13:34linman32so is this possible? (read-string (pr-str http-kit-channel-value))
13:34justin_smithI doubt HTTPkit-channel has a read syntax
13:35justin_smithwhat type is http-kit-channel-value? does it have a read syntax?
13:36ro_stlinman32: what do you see when you (pr-str http-kit-channel-value)
13:36slesterIs it possible that #6 on 4clojure is bugged?
13:36linman32"#<AsyncChannel /127.0.0.1:8080<->/127.0.0.1:55191>"
13:36linman32that is (pr-str chnl)
13:36justin_smithslester: seriously doubt it
13:37justin_smithslester: there is no bug, but you maybe don't get how the "blank" there works
13:37ro_stlinman32: and what happens when you (read-string) that string
13:37justin_smithslester: the blank is not strict clojure syntax - it is any sybol(s) that you wish to insert
13:38justin_smithro_st: #<...> is a notation that means "unreadable"
13:38linman32RuntimeException Unreadable form clojure.lang.Util.runtimeException (Util.java:221)
13:38justin_smith,(read-string "#<anything at all>")
13:38clojurebot#<RuntimeException java.lang.RuntimeException: Unreadable form>
13:38ro_stlinman32: then you have your answer. it's not possible to serialise http-kit-channels to strings and back.
13:39linman32ro_st: ok, thanks. wasn't sure
13:40slesterjustin_smith, I know how it works.
13:40slesterI had to skip #6 because even the solution I found elsewhere on the internet doesn't work
13:40justin_smithslester: if you haven't solved it, you don't know how it works
13:41justin_smithwould you like the solution?
13:41slestersigh
13:41slesterSo I've solved up to 20, skipping #6, and I don't know how it works.
13:41justin_smithI just reran mine, it still works
13:41justin_smithit's freeform
13:41justin_smithit can be any number of forms
13:42justin_smiththey get literally inserted in the blank
13:43jcsimsslester: I've never seen problem 6 before, and just solved it. I don't think there's a bug
13:43justin_smithslester: the solution is trivial, I am following about 50 other users, our answers are character per character identical
13:51csd_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:51ro_stselect-keys
13:52justin_smith,(select-keys {:a 1 :b 2 :c 3} [:a :b])
13:52clojurebot{:b 2, :a 1}
13:52ro_stliterally replace f with select-keys and you have what you want
13:52csd_perfect
13:52justin_smithf is literally select-keys in this case!
13:52csd_thanks
13:52dunnowins_i just learned of select keys yesterday
13:52ro_stgood instinct :-)
13:52dunnowins_great function!
13:52literary,(def f select-keys)
13:52clojurebot#'sandbox/f
13:52literaryThat's how.
13:52justin_smithheh
13:52literary,f
13:52clojurebot#<core$select_keys clojure.core$select_keys@149a696>
13:52literary,(f {:a 1 :b 2 :c 3} [:a :b]) => {:a 1 :b 2}
13:52clojurebot{:b 2, :a 1}
13:52ro_sthttps://tbaldridge.pivotshare.com/ has nice function of the day videos
13:53literaryWait why did that work.
13:53ro_sthttps://tbaldridge.pivotshare.com/categories/function-of-the-day/2084/media?m_sort=date&amp;m_order=desc
13:53justin_smithliterary: why would it not work?
13:55literary=>
13:55literary,() foo bar
13:55clojurebot()
13:55literaryOh.
13:55justin_smithoh, that part, heh
13:56justin_smithI missed that you had the => in there
14:04nopromptdnolen_: 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:04noprompt.default$ or x["default"]. otherwise it seems like this will end up being a "won't fix" issue.
14:06dnolen_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:06dnolen_yet munging it busts interop
14:06dnolen_so I would chalk it up as not worth it
14:06vermatechnomancy, 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:06dnolen_or switch to keywords
14:06dnolen_i.e. defrecord
14:06nopromptdnolen_: foo.default = "bar" is perfectly fine in recent js engines IE9 and up.
14:06vermatechnomancy, which will cause it to setup correctly for cleanups
14:06dnolen_noprompt: we don't care about that though
14:07dnolen_noprompt: CLJS works w/ JS engines back to 2001
14:07dnolen_plain and simple
14:07nopromptsure.
14:07vermatechnomancy, like this function here never gets to see the uberjar profile
14:07vermahttps://github.com/technomancy/leiningen/blob/master/leiningen-core/src/leiningen/core/project.clj#L643
14:08nopromptdnolen_: 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:09dnolen_noprompt: no there's a good idea - yes fields that reserved keyword in JS we could warn about that
14:10nopromptdnolen_: alright, i'll handle it that way.
14:10vermatechnomancy, 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:12nopromptdnolen_: would anyone complain if i alphabetized *cljs-warnings*?
14:12technomancyverma: the original project map should be stored as metadata on the effective project map
14:15dnolen_noprompt: no problem w/ that, but not in the same ticket
14:15nopromptdnolen_: ok.
14:24daniel___Do I need to exempt certain routes from auth using friend? https://gist.github.com/danielstockton/aeaf561c3b58235e9d29
14:24daniel___my index.html page returns Unauthorized, i thought i'd have to wrap my route/resources route in authorize for that to happen
14:29nopromptdnolen_: how does this sound? "JS reserved identifier 'default' used as field in type Foo (access with default$)"
14:30dnolen_noprompt: JS -> JavaScript, but otherwise works for me
14:30nopromptdnolen_: great!
14:31dnolen_noprompt: there needs to be a flag to suppress this warning for people that want to target more recent JS engines
14:31nopromptdnolen_: where is that handled?
14:32dnolen_noprompt: actually ignore what I said about recent JS engines - just need a flag to suppress - see top of analyzer.cljs
14:34jakebasiledaniel___: as I understand it, friend/authenticate by default blocks everything unless you set :allow-anon? and then wrap the routes you want authed
14:35nopromptdnolen_: cool
14:36daniel___jakebasile: i added allow-anon?, i need to wrap routes i dont want blocked with friend/authenticated ?
14:36mmeixvery short question : there is no way to express #(/ % 2) with (partial ...), right? (just to make sure)
14:37jakebasiledaniel___: 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:37daniel___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:37nopromptdnolen_: when should something be prefixed with cljs? ie *cljs-check-field-names* vs *check-field-names*
14:37daniel___jakebasile: right, i see
14:37daniel___makes sense, i wonder why im still being clocked then
14:37daniel___blocked*
14:37jakebasilein that example, everything is routed anon
14:38dbaschmmeix: (partial (fn [x] (/ x 2)))
14:38jakebasileall it does is add your name in if you are authenticated
14:38jakebasileso in that case nothing is wrapped because log-in is optional
14:38nopromptdnolen_: everything but *unchecked-if* and *analyze-deps* seems to be prefixed so i'm guessing those are special cases.
14:38daniel___my index.html is still inaccessible with allow-anon? true
14:39dnolen_noprompt: *check-field-names* is probably best - I only used cljs prefix to disambiguate vars that have similar names in Clojure
14:39vermatechnomancy, 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:39dbaschmmeix: if they are floats, of course (partial * 0.5)
14:39vermatechnomancy, I could very well just make :default include :uberjar and it would work :P
14:40amalloydbasch: (partial * 1/2) works either way
14:40dbaschamalloy: just beat me :)
14:40vermatechnomancy, here: https://github.com/technomancy/leiningen/blob/master/leiningen-core/src/leiningen/core/project.clj#L474
14:40mmeixdbasch thanx
14:41vermatechnomancy, or I could just make profile-scope-target-path accept :uberjar if :uberjar exists in project map
14:44vermatechnomancy, 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:45vermaor am I going in circles
14:46jakebasiledaniel___: 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:47rurumate,(if-let [[n & ns] [1 2 4 5]] ns)
14:47clojurebot(2 4 5)
14:47rurumate,(if-let [[n & ns] [1 2 4 5]] n)
14:47clojurebot1
14:47rurumate,(if-let [[n & ns] [1 2 4 5]] n ns)
14:47clojurebot#<CompilerException java.lang.RuntimeException: Can't take value of a macro: #'clojure.core/ns, compiling:(NO_SOURCE_PATH:0:0)>
14:47rurumate,(if-let [[n & ns] [1 2 4 5]] ns n)
14:47clojurebot#<CompilerException java.lang.RuntimeException: Unable to resolve symbol: n in this context, compiling:(NO_SOURCE_PATH:0:0)>
14:48rurumateis it just me, or is something not right about if-let?
14:49rurumateoh, I see, there's only a let if the test succeeds
14:49rurumate,(if-let [[n & ns] [1 2 4 5]] ns 1)
14:49clojurebot(2 4 5)
14:50daniel___https://gist.github.com/jakebasile/ffca14d09d42ed0cbb2a
14:50technomancyverma: 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:50daniel___sry, didnt mean to paste here, thanks jakebasile
14:50technomancybut I haven't thought through it; I could be missing something
14:51daniel___jakebasile: same, im also allowed through if i dont define unauthenticated-handler
14:52daniel___actually, it redirects me to /login
14:54vermatechnomancy, 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:54technomancyverma: oh yeah, I see. geez.
14:54vermatechnomancy, so this giant machinery is working pretty good, just not sure where to plug in the uberjar stuff :)
14:56vermatechnomancy, to cascade the changes down, I guess the default profiles of [:default] can be changed to [:default :uberjar] if :uberjar exists in project
14:56technomancyI don't see why :uberjar is special though
14:56technomancyany profile could be composite
14:57technomancymakes 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:58vermahmmm
15:00vermatechnomancy, 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:02arohnerverma: that sounds like the issue I reported, yay!
15:02arohnerI assume you're talking about https://github.com/technomancy/leiningen/issues/1721
15:02vermayes
15:02verma:)
15:02arohner:-)
15:02vermaits tagged as Newbie so I thought I'd give it a shot for awesome sticker
15:04arohnerverma: I find it's easier to submit issues than PRs for stickers ;-)
15:05vermaoh what? I didn't know submitting issues gets you stickers
15:05verma:P
15:23justin_smiththe easiest way to get stickers is at the dollar store
15:25poushkarNewbie 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:26technomancyverma: nope, has to be a patch that's accepted
15:36poushkarsomeone?
15:36vermapoushkar, 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:37vermacljsbuild auto dev is one task, ring is another, and may be server-headless is another task (not sure)
15:38vermalein pdo cljsbuild auto dev, ring, server-headless is how you'd run them on the command line
15:39poushkarverma: oh, wow! it helped. Shame on me… I followed tutorial and missed that there is a comma. Thank you a lot
15:39vermanp
15:58justin_smithduh, just realized "pdo" is parallel do, that's mighty useful
16:07gfredericksanybody know about getting whidbey/puget/fipp to print record literals and print-method-customized objects correctly?
16:08bbloomgfredericks: are you using puget (via whidbey) or fipp's internal edn printer?
16:12gfredericksbbloom: the former, but I'm totally unafraid to patch the living crap out of those libs
16:13bbloomgfredericks: 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:14bbloomgfredericks: but yeah, you can just call in to pr-str in :default of pudget's printer
16:14gfredericksspecical handling for records?
16:16bbloomgfredericks: it already handles records
16:16bbloomgfredericks: https://github.com/greglook/puget/blob/e0d3da89ce562b3d56f6792bcfd23772dbc8057e/src/puget/printer.clj#L267
16:20gfrederickshmmm
16:21bbloomgfredericks: not working for you?
16:21gfredericksso it does
16:21gfredericksoh it's clojure.pprint that doesn't
16:21gfredericksclojure.pprint handles print-method, puget handles records
16:21gfrederickseach fails at the other
16:22bbloomgfredericks: i think you just need to do add a :default case
16:22gfredericksbbloom: for canonize?
16:23bbloomgfredericks: yes
16:23bbloomhttps://github.com/greglook/puget/blob/e0d3da89ce562b3d56f6792bcfd23772dbc8057e/src/puget/printer.clj#L193-L208
16:23bbloomactually...
16:23bbloomhttps://github.com/greglook/puget/blob/e0d3da89ce562b3d56f6792bcfd23772dbc8057e/src/puget/printer.clj#L304
16:23bbloomyou probably just want to change that str to pr-str
16:23gfredericksyeah I was looking at that
16:24bbloomgfredericks: 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:24gfredericksbbloom: since he uses :span on line 309, that implies his version is single-line already anyhow?
16:24gfredericksjust trying to figure out if the change loses anything
16:24bbloomgfredericks: span isn't about single lines
16:24gfredericksglad I asked
16:24gfredericksoh actually nevermind I see he calls str already
16:25gfredericksso just pr-str instead like you said
16:25bbloomgfredericks: span probably should just be called concat
16:25bbloomand seqs are treated the same as :span
16:27gfredericksroger
16:33kenrestivothat whidbey looks great, but as when trying to use it with nrepl.el, i got https://www.refheap.com/91693
16:34gfredericksbbloom: oh puget has a protocol for doing tagged elements
16:34gfredericksI feel like there could be a library just for wiring up tagged literals
16:35gfrederickskenrestivo: what does nrepl.el do?
16:35gfredericksI spent most of yesterday getting whidbey to work with cider
16:36gfredericksit's....complicated
16:36technomancygfredericks: this isn't an nrepl.el thing
16:36technomancyit's having trouble even launching the server, so cider would have the same problem
16:38gfredericksthere's so many buggy things involved; e.g. NREPL-53
16:38gfrederickswhidbey itself has a few nondeterministic bugs which should be fixed in the next release
16:39bbloomgfredericks: greglook and i are both vim ppl, so any help stabilizing emacs integration is welcome
16:40gfredericksyeah I followed up on most everything I found
16:40gfredericksthe cider side is complicated too though, because I think there are some internal evals that assume the output will be on one line
16:40gfredericksso I wrote some elisp patches that only do the pprinting for user stuff
16:40bbloomಠ_ಠ
16:41gfredericksbut I don't know cider well enough to know how integrateable those changes are
16:41bbloomgfredericks: no idea, but i do know that pretty-printing all-the-time is a no-brainer
16:42gfredericksit definitely fails to bootup the nrepl connection at all when I set it that way
16:42gfredericksit's worth mentioning that whidbey is configured to pretty much be a NOOP unless you're using `lein repl` with reply
16:43gfredericksor at least anything that uses the :nrepl-context repl option from the leiningen profile
16:43gfredericksI assume that's just reply but I don't really know; does vim fireplace use it too somehow?
16:45SagiCZ1hey 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:46SagiCZ1maybe Clojure for Java Developers?
16:46postpunkjustinSagiCZ1: maybe Rich's Simple Made Easy talk?
16:47schmirI suggest "Simple Made Easy" and "The value of values"
16:47SagiCZ1thanks guys
17:01aconberehowdy, a ton of the functions in core.async are documented simple "Deprecated use transformers instead"
17:01aconberebut there isn't a link that says "hey this is what a transformer is and how to use it"
17:01aconbereand the old documentation for those methods are gone
17:01aconberewhat is the correct thing to do here?
17:03Bronsaaconbere: it's referring to http://clojure.org/transducers
17:05aconbereBronsa: how do I get access to transducers?
17:05Bronsaaconbere: you have to use clojure 1.7.0-alpha2
17:05aconbere>_<
17:06aconberethat makes all my projects not using that version of clojure, but using core.async a lot harder to use :P
17:06Bronsaaconbere: clojure 1.7.0 should be released soon
17:06amalloyaconbere: use an older version of core.async that still has the docstrings, perhaps?
17:07aconbereamalloy: yeah probably that
17:07aconberejust sucks that they replaced the docstrings with such useless docs
17:09tvanhensanyone 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:09tvanhens?
17:09tvanhensthe namespace is there and loads when I manually eval
17:13tvanhensanyone have experience with the reloaded workflow and component?
17:13SagiCZ1what is a "transient" ?
17:15SagiCZ1is it the "make this mutable for a now" thing?
17:15technomancySagiCZ1: not really
17:15technomancymore like "not guaranteed to be immutable"
17:15justin_smithSagiCZ1: it is mutable, but only usable within one thread, and easy to translate to an immutable type
17:15technomancySagiCZ1: http://technomancy.us/132
17:15justin_smithand yeah, it may mutate, may not
17:15SagiCZ1and it is used to speed up some operations?
17:16tvanhenshow do I handle a No namespace exception when the namespace is present?
17:16SagiCZ1technomancy: will read
17:16hyPiRionSagiCZ1: It's to avoid unnecessary memory allocations.
17:17technomancy~litany against cons
17:17clojurebotlitany 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:17SagiCZ1hyPiRion: so it would be something to do when optimizing? not as a first step?
17:17hyPiRionSagiCZ1: Yep.
17:17SagiCZ1alright
17:21nopromptdnolen_: http://dev.clojure.org/jira/secure/attachment/13412/871.patch
17:21nopromptwoops
17:22nopromptdnolen_: sorry, here -> http://dev.clojure.org/jira/browse/CLJS-871?focusedCommentId=36018#comment-36018
17:23hyPiRionHmm, there doesn't seem to be anything explaining in depth how transients work
17:24nopromptdnolen_: i don't especially like using <= in the test but defrecord emits several additional warnings (25) in the test.
17:27perplexacan i use ->> when i have something like (somefunc :kw) to create (somefunc :kw (form))?
17:30brehautquery clojurebot
17:31brehaut,(macroexpand-1 '(->> (form) (somefunc :kw)))
17:31clojurebot(somefunc :kw (form))
17:31brehautinsofar as macroexpand-1 is telling the truth
17:33perplexayeah ;p
17:33perplexathx, i had mixed up two forms ;x
17:35shriphanihi 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:38h45So 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:39amalloyh45: 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:40amalloyeg, you can call rseq on a vector, but you can't call rseq on that reversed sequence
17:42justin_smithh45: taking the last element of a vector with peek is constant time also (similar mechanism to rseq)
17:43justin_smithbut peek on a list gets the front, and peek on a lazy-seq is undefined
17:43elfenlaidhi, I have a question basically about ref and stm stuff, it's described here https://gist.github.com/elfenlaid/3a1391c585a31c8a6346
17:43elfenlaidI'm trying it in Clojure 1.5.1 version
17:45h45oh I see. Still, it seems like last should be constant time at least for the specific kinds of sequences that rseq can reverse.
17:45hyPiRionelfenlaid: Could you try it out with (deref phrase) instead of @phrase?
17:45hyPiRionErr, ensure I mean. (ensure phrase)
17:50elfenlaidhyPiRion: with ensure in place first future restarted :)
17:53elfenlaidso, deref doesn't give any guaranties about ref's actual value, interesting
17:56elfenlaidand what I get with ensure makes me a little anxious https://gist.github.com/elfenlaid/14ab3cc6bc4e6a93d0ae
17:56elfenlaidSTM cycles over and over and over
17:58elfenlaidwith such behaviour it's possible to hit that limit https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/LockingTransaction.java#L25
18:02justin_smithelfenlaid: it's doing what it promises to, right?
18:03elfenlaidjustin_smith: actually yes, but that retry limit..
19:15perplexahey, 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:15perplexa... form, but i don't know how to properly do that, since i wanna pass through all metadata etc etc. any hints, please?
19:17bacon1989was wondering, how do you handle scalar values using clojure.java.jdbc?
19:18bacon1989i'm trying to get the MAX(...), of something, and it's returning a query with ({:max(...) val})
19:18amalloybacon1989: select max(foo) as sensible_name ...
19:19bacon1989amalloy: doesn't seem to work with sqlite3
19:20perplexabacon1989: (keyword "weird(name)")
19:20justin_smithperplexa: (defmacro defconditional [form] `(def ~func (fn [& ~'args] (when (condition?) ~@form)))) something like this maybe?
19:21perplexa,((keyword "weird(name)") {(keyword "weird(name)") 123}
19:21clojurebot#<RuntimeException java.lang.RuntimeException: EOF while reading>
19:21perplexa,((keyword "weird(name)") {(keyword "weird(name)") 123})
19:21clojurebot123
19:21perplexajustin_smith: let me try
19:22justin_smithperplexa: 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:25perplexajustin_smith: i don't get your example ;/
19:25justin_smithoh and that should be & form of course
19:25justin_smithwhat don't you get?
19:25justin_smithit creates an fn with the body wrapped in a when block, that's what you wanted right?
19:25perplexawhere do i take func and args from?
19:25perplexayes exactly!
19:26justin_smithoh, [func & form] is the correct macro bindings
19:26clojurebotOk.
19:26justin_smithand args is just magic
19:26justin_smithlike % is in #()
19:26justin_smithit could be another argument if you prefer
19:27perplexaty :)ah, epic
19:27justin_smithperplexa: (defmacro defconditional [name argvec & form] `(def ~func (fn ~argvec (when (condition?) ~@form))))
19:27perplexa(inc justin_smith)
19:27lazybot⇒ 92
19:27perplexadoes work \o/
19:27justin_smiththat way you can actually specify args like normal
19:28justin_smithoops s/~func/~name above of course
19:31perplexajustin_smith: ah, that breaks when i have metadata ;/
19:31perplexaeg (defconditional "abc" [] ...)
19:31justin_smithwell, you can expand the macro to allow metadata....
19:31justin_smithbut it's a rabbit hole to be sure
19:32justin_smithmacro with an opts map?
19:33perplexai feel pretty stupid, sorry
19:33justin_smithor add an extra arg and require that a doc string always be provided
19:33perplexaso it's not really easy to do this in a 'short' way?
19:33justin_smithyou could look at how defn is written
19:34perplexai acidentally typed (source defn) earlier and it made me wanna run up my walls :)
19:34amalloyjustin_smith: don't copy/paste the definition of defn; use clojure.tools.macro/name-with-attributes
19:34justin_smithamalloy: cool - I wasn't trying to suggest copy/paste
19:34justin_smithbut good to know such a thing exists
19:34amalloywell, don't borrow, steal, or emulate it either :P
19:34justin_smithheh
19:35perplexaah i actually saw that being used in cascalog earlier
19:39vavivuvf
19:39vavivuvfjnmayfwwleawd 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:39vavivuvafnz 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:39vavivuvdp 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:40vavivuvljv 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:40vavivuvwnia 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:40vavivuvg 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:40vavivuvniscqrex 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:40vavivuvrfr 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:40vavivuvrugtjx 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:40vavivuvurx 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:40vavivuvmetadiuyt 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:40vavivuvkvrcv 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:40vavivuvquyrrkakgxvrj 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:40clojurebotNo entiendo
19:40vavivuvopspduspwmhrrq 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:40vavivuvx 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:40vavivuvd 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:40vavivuvbqddyhqpmbjzuik 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:40vavivuvzqfuyuthmvtehmu 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:40vavivuvr 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:40vavivuvrfqq 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:40vavivuvzlux 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:40vavivuvzpkditp 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:40vavivuvcdl 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:40vavivuvntsrwmysuxn 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:40vavivuvtn 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:40vavivuvajn 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:40vavivuvp 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:40vavivuvqmwowuh 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:40vavivuvgx 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:40vavivuverfqeldewson 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:40vavivuvmwbh 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:40vavivuvh 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:40vavivuvccjtxrt 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:40vavivuvcointinc 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:40vavivuvpkqukhsroiwnhfohoaplrujse 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:40vavivuvo 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:40vavivuvhbfdvspsj 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:40vavivuvrisyuulplbx 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:40vavivuvq 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:40vavivuvvwecwlfffadvwgg 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:40vavivuvhypxq 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:40vavivuvznfwhogrxhgvqk 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:40vavivuvpp 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:41vavivuvwyj 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:41vavivuvaxhlwoevsa 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:41vavivuvotvyhe 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:41vavivuvow 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:41vavivuvdumgmjy 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:41vavivuvfd 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:41vavivuvimqumtxngsvfjsmy 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:41vavivuvnem 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:41vavivuvhlwlc 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:41vavivuvnc 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:41vavivuvvhnkf 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:41vavivuvcejbl 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:41vavivuvzixrrsxqwvslywbxeaxbypzemow 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:41vavivuvjkqxk 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:41vavivuvcm 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:41vavivuvxpsj 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:41vavivuvxr 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:41vavivuvbfuudqu 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:41noonianwtf
19:41vavivuvbckpb 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:41vavivuvkshlkxgqwqqpxe 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:41vavivuvkiilpi 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:41vavivuvxdlfxct 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:41vavivuvcwy 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:41vavivuvgk 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:41vavivuvqxmzpnnkmt 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:41vavivuvohmui 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:41vavivuvgf 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:41vavivuvfqqmbzryvdyidvpaewqupu 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:41vavivuvlhr 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:41vavivuvrfxxhmy 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:41vavivuvp 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:41vavivuvly 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:41vavivuvpg 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:41vavivuvdtorrmbvwaefuvunk 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:41vavivuvpb 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:41vavivuvposxj 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:41vavivuvrecbtr 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:41vavivuvgjxtb 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:41vavivuvk 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:41vavivuvvgtrrxiwb 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:42vavivuvk 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:42vavivuvhpnr 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:42vavivuvkeoki 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:42vavivuvaez 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:42nooniantechnomancy: thanks!
19:42vavivuvzabag 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:42vavivuvjb 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:42vavivuvmjyrnltbbqcjl 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:42vavivuvdyfod 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:42vavivuvilst 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:42vavivuvxzripqspzdtxokhnjldd 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:42vavivuvmz 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:42vavivuvaee 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:42vavivuvrrcciuvqij 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:42vavivuvbw 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:42nullptr(inc technomancy)
19:42lazybot⇒ 147
19:42@technomancy._.
19:44amalloyguys if you read the sixth letter of every three words over ten letters long, it was a secret message
19:44amalloyevery third word, i guess is the right phrasing
19:44dbaschamalloy: thanks, I’d tried rot13 and double rot 13
19:47perplexajustin_smith: ah i give up ;/
19:48justin_smithperplexa: well, you could accept a much less flexible version, or use that tool that amalloy pointed out
20:01perplexajustin_smith: i tried, but still can't figure out how to insert the condition between meta + doc and the actual body
20:01justin_smithyou need to wrap the body in the condition
20:01perplexaoh wait.
20:06perplexajustin_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:07justin_smithperplexa: (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:08perplexajustin_smith: yeah but that doesn't allow meta ;/
20:08justin_smithand the tool amalloy points out does not allow having an arg that would be used as an args vector?
20:08perplexait would treat what's supposed to be :doc as argvec
20:12perplexajustin_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:12linman32(type 3)
20:13justin_smithperplexa: that looks about right, cool
20:14justin_smithlinman32: to get evaluation from a but, use , or &
20:14linman32& (type 3)
20:14lazybot⇒ java.lang.Long
20:14linman32:0
20:15perplexajustin_smith: thx again :)
20:15cespareHow do I launch lein repl with a particular classpath?
20:17justin_smithcespare: lein is a classpath setting tool, you can just do java -cp ... clojure.jar clojure.main
20:17justin_smithunless you are saying you want the classpath lein sets, along with some custom additions?
20:18cesparejustin_smith: actually i think either works :) I think I got the second one working with CLASSPATH=path/to/jar lein repl
20:19TEttingerthere's also ##(str "this method of evaluation at the end of a message") or in the middle of one
20:19lazybot⇒ "this method of evaluation at the end of a message"
21:07mdeboardHow do I tell what version of a template I"m using?
21:07mdeboardOr how do I upgrade said thing
21:09justin_smithmdeboard: excellent question
21:10mdeboardI see it's in ~/.m2
21:15mdeboardI guess the crickets means it's kind of an unanswered question
21:15mdeboardI mean, in general, not me asking it
21:15mdeboardI upgraded by doing "lein new chestnut foo" which downloaded the upgraded version
21:20justin_smithI bet you could hack some control by downloading the source, altering the artifact name and doing a lein install
21:20justin_smithbut I don't know how to have any control/info with the default case
21:20mdeboardyeah
21:20mdeboardI just copy-and-pasted from latest source
21:29justin_smithI 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:30nkozocan you reference the return channel of a go-block from inside that go block?
21:30perplexa,(String. (byte-array (map #(byte (if (> % 127) (- % 256) %)) [0xF0 0x9F 0x8C 0x8D])))
21:30clojurebot"🌍"
21:31justin_smithnkozo: 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:31justin_smithperplexa: "EARTH GLOBE EUROPE-AFRICA"
21:32perplexa\o/
21:32justin_smithnkozo: why not pass in a channel?
21:33nkozomaybe 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:37justin_smithnkozo: you could do this with lexically scoped channels surrounding the go block(s)
21:56cespareUgh, just found a case where code throws an exception unless I provide a type hint.
21:57cespareI feel pretty sure that's never supposed to happen.
21:57justin_smithdepends, are you trying to replace code that was type hinted?
21:57cespareno, the exception comes clojure's reflection code.
21:57justin_smithie. with-redefs on something that used inlined args
21:58justin_smithoh
21:58cespareif I avoid that with type hints, it works.
21:58cespareit'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:59cespareusing the same java version, same uberjar, etc everywhere.
22:03justin_smithwhat's the specific error?
22:04cesparejustin_smith: http://pastie.org/9646042
22:04cesparejustin_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:04amalloycespare: functions are both runnable and callable, which leaves the reflector with no clear way to decide which overload to call
22:05amalloy(this is the most common scenario in which you need typehinting in order to get the right interop methods called)
22:05cespareamalloy: 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:06amalloymaybe you have stale classfiles lying around or something
22:07amalloyif you have the same exact jvm and clojure versions, i can't think of any other reasons
22:07cespareamalloy: well, i've done lein clean and whatnot.
22:08justin_smithlein clean doesn't clean the production profile (it's a bug technomancy was trying to get someone to work on today)
22:08cespareamalloy: 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:09amalloyperhaps 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:10cespareamalloy: sure, I was just under the (apparently mistaken) impression that type hints were never required for correctness.
22:10amalloyit'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:11amalloyyes, 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:13cespareamalloy: at minimum it seems like the error message is not great
22:14amalloysure, welcome to clojure, where the error messages are rarely great
22:14cespareit says "No matching method found" but your theory is that it has found multiple messages and cannot disambiguate
22:14cespares/messages/methods
22:14cespareamalloy: ok, thanks for the help
22:36sridi'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:39justin_smithsrid: there should be a *<something> connection* buffer
22:40justin_smithsrid: output from threads other than the main one go there
22:41sridfwiw. i'm using cider-jack-in. there is no connection buffer.
22:41sridthere is *cider-error* - but that contains traceback from repl evals
22:42sridthere 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:44sridnope, that file doesn't update at all.
22:45justin_smithsrid: 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:49sridfalling back to the slow 'lein run' then. which shows "java.lang.ClassCastException: quil.Applet cannot be cast to clojure.lang.IFn"
22:53sridok found the bug. apparently color was set to background color. so no shapes appeared. my fault
23:06srid2 years of break is enough to make you forget the difference between using loop and doseq
23:23DomKMAnyone 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:39justin_smithDomKM: do you have a database setting in your ragtime config that matches your jdbc driver?
23:40DomKMjustin_smith: I'm using Ragtime through Joplin (https://github.com/juxt/joplin), not the Ragtime plugin
23:41DomKMjustin_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:42DomKMjustin_smith: *far. It has some special case for postgres so perhaps that's the culprit
23:45justin_smiththat should just be because postgres handles batches better than other drivers
23:45justin_smiththe only difference is how many commands are sent at once
23:46echo-areaI 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:46TEttingergenerally it has to do with destructive modification, IIRC
23:47TEttingerswap! alters its atom argument, set! alters an arg...
23:47justin_smithDomKM: 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:47TEttingerarray functions are an exception because arrays are mutable anyway
23:48echo-areaTEttinger: 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:49TEttingerno idea, I think it is used sometimes sporadically, and some fns could sensibly be given a ! but don't have one
23:49TEttingerthere's a good explanation somewhere...
23:49DomKMjustin_smith: Joplin used clojure.java.jdbc through Ragtime. Ragtime uses 0.2.3 but tests against a newer version.
23:50justin_smithDomKM: 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:50TEttingerThe names of functions/macros that are not safe in STM transactions should end with an exclamation mark (e.g. reset!).
23:50TEttingerhttp://yobriefca.se/blog/2014/05/19/the-weird-and-wonderful-characters-of-clojure/
23:50justin_smithDomKM: what version of c.j.jdbc does lein deps :tree tell you is coming in?
23:51justin_smithTEttinger: 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:51DomKMjustin_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:51TEttingerjustin_smith, yep it isn't consistent
23:51DomKMjustin_smith: looking into lein deps :tree now
23:52DomKM [org.clojure/java.jdbc "0.3.5"]
23:52justin_smithDomKM: looks like it is at least attempting to abstract over the difference though... but clearly something in there is breaking
23:53justin_smithDomKM: 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:56justin_smithDomKM: the clojure.java.jdbc.deprecated ns definitely exists in 0.3.5, so that part should be OK...
23:57echo-areaTEttinger: Also found it here: http://dev.clojure.org/display/community/Library+Coding+Standards
23:58justin_smithDomKM: 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:58DomKMjustin_smith: nope, I'm using joplin.core/migrate-db
23:58DomKMjustin_smith: but I can trace it through to ragtime.core/migrate-all
23:59DomKMand replicate it mostly without joplin
23:59justin_smiththe "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?