#clojure logs

2012-12-16

00:10holowhen i execute `lein compile :main` ( with ":main ^{:skip-aot true} app.server") in bin/build, why "Running: lein with-profile production compile..." messages disapear from the buildpack message output?
00:13holoi'm hoping that with :main, it will still use the adequate profile, and heroku build system would notify me of that
00:26n_bWell Raynes, I may have goofed submitting a pull request to clj-github, but at least my typo while copying with-auth made me begin to understand how quoting in macros works!
00:26Rayneslol
00:27n_bso at least there's that
00:27n_bI'll give Tentacles a run through once I finally finish this Twilio library
00:29n_balthough at my current rate of progress they'll probably be out of business by the time that happens ><
00:30seangroveaphyr: I just ran across riemann, and it looks terrifyingly interesting
00:30aphyrThanks! :)
00:32seangroveI've been looking to adapt Heroku's pulse for some things, but I think I'll play around with Riemann first
00:32aphyrfull disclosure the UI is in a *terrible* state right now
00:32aphyrI desperately need to finish the websockets js interface
00:33Raynescallen: I've been told to apologize for taking up dsantiago's time over the weekend on a non-his-templating-language project. Hope you don't hate me. ;)
00:33aphyrsomehow working 12 hours a day on this project and there is never enough time, haha
00:34seangroveHah
00:34seangroveI'd love to see this connected to a frontend system
00:34seangroveClient-side browser apps are pretty much completely black-box right now
00:34seangroveLooking forward to instrumenting it!
00:35aphyrIt's intended to support arbitrary UIs
00:35aphyrI'm just the only one building one right now
00:35aphyrOh, you mean instrumenting web pages themselves? Check out the node client.
00:35aphyrI'll probably add an HTTP interface at some point even though it'll be dog slow, just for the js crowd
00:36n_bIs it worth following the clj mailing list if you're a relative newcomer to the language?
00:36seangroveYeah, Zenbox runs for days, and I need to keep track of how many messages we're dropping, our response time client-side, perf stats, memory consumption, etc.
00:36mdeboardI'd kill for a live step-through debugger for cascalog
00:36mdeboardliterally
00:36aphyrseangrove: let me know if it works for you! I'm usually around on #riemann.
00:36seangrovemdeboard: That's quite a low bar
00:36mdeboardseangrove: I'm not a people person
00:37seangroveaphyr: Will take a look later this week or next weekend probably, have to finish an rpc layer first
00:37seangrovemdeboard: But it'd be a real hassle... it'd make enjoying your debugger much more complex, what with the subsequent investigations, questioning, etc.
00:38mdeboard:)
00:38mdeboardJust saying, pdb nails it. Dunno if it's even possible with clojure.
01:00amalloymdeboard: i'm sure pdb would have trouble with hadoop too :P
01:01mdeboardYeah, I'm sure it's apples and oranges under the hood. I love that introspection though.
01:02mdeboardProbably a crutch though. Good tests would be a huge step up.
01:26hammerif i have an object defined as w, and toString it with (.toString w), I get what I expect, but if I put it in a list with (def el '(w)), I just get "w" for (.toString (first el))
01:27hammeri can't figure out why
01:28Rayneshammer: What do you expect to get?
01:28hammertrying to make a simple example
01:29hammerso (.toString w) is like "#<Worker: host:"host", port:6000>"
01:29amalloyhammer: '(w) does not make a list containing the value of w
01:29amalloyit makes a list containing the symbol w
01:30metellusdoes that mean that (.toString (first (list w))) would do what he wants?
01:30amalloyof course
01:30amalloyalthough, don't use .toString when you have str
01:31hammerso '(w) and (list w) aren't the same?
01:31RaynesNo.
01:31RaynesList evaluates its arguments.
01:31amalloyindeed. if they were, rich wouldn't have bothered to add the other :)
01:31Raynes' tells Clojure to quote the thing in front of it, meaning it leaves it unevaluated.
01:32RaynesSo you get the symbol w instead of the value it refers to.
01:32hammeri guess i would have expected that from 'w
01:32hammerand i was thinking of (w) as the list
01:32RaynesYou probably don't want a list here anyways, fwiw.
01:33RaynesUnless you have a specific reason for using a list, a vector is usually better.
01:33Raynes[w]
01:33amalloy*shrug* he probably wants any kind of seq
01:33hammeri'm implementing a thrift interface
01:33RaynesYeah, but if he is writing literals and doesn't care about having a list, amalloy.
01:33hammerit'll return a list of workers, so list made sense
01:34hammerwell, seemed obvious
01:34hammervector until the last second make more sense?
01:34amalloyit'll probably be a lazy seq eventually
01:34RaynesIt's just easier to write [w] instead of (list w) if that's what you have to do.
01:36hammerso '[w] and [w]
01:36hammerwhat's the difference
01:38hammernever mind
01:38hammerthink i got it
01:45mdeboardI feel like this is a really dumb question but what's the function that returns true if a series of predicates are true? like the threading macro but for truthiness. `(->true? 1 (> 2) (= 1))' would yield true, for example.
01:46mdeboardthis obviously already exists, I just can't find/remember it.
01:46metellusI think every-pred?
01:47mdeboardThat's pretty close. I think maybe I'm thinking of something in 1.5
01:51n_bThere's no way to have a let immediately underneath a (defn) right?
01:51mdeboardLike, before the signature?
01:52n_bI looked at the source and just want to make sure I'm not misunderstanding how it binds things
01:52mdeboard`(defn foo (let [a 1 b 2]) (do-stuff a b))'
01:52mdeboard?
01:52n_byes
01:52mdeboardno
01:52n_bOK, that's what I would've thought
01:53mdeboardWell, there IS a way.
01:53mdeboardbut it'd be dumb.
01:53mdeboard(macros)
01:53n_bEssentially what I want is something like (defn foo (let [bar 1] ([] (identity bar)) ([baz] (+ bar baz)))
01:54mdeboardwhy
01:54mdeboardlike, arity dispatch?
01:54mdeboardI dunno, no, don't do that
01:54mdeboardcan't*
01:55n_bI'm writing an API wrapper, where there's a fn `get-resource`. I was hoping to make it act so that (get-resource) returns a lazy seq while something like (get-resource some-id) returns an instance
01:55mdeboardYeah you can do arity dispatch
01:55n_bRight
01:56n_bI know that; the problem is they both have a base-url that gets included as an arg to the make-api-call fn they both call, and I was hoping to have them share it without having a def somewhere
01:56n_bjust as a little DRY
01:56n_bmaking a make-resource-call probably makes more sense than writing some horrible macro though
01:56n_bso I'll just not do it
01:57n_bIt seemed like a bad idea from the start, but I'm new enough to the language I thought I might see if there's an idiomatic way I didn't know of for something like this
01:57mdeboardI dunno if you can/how you can do arity dispatch with e.g. (partial make-api-call base-url)
01:59n_bI'll play around a bit and see if I can't devise a better solution, thanks for the feedback!
02:25muhoowait, isn't arity dispatch built into defn?
02:25amalloymuhoo: into IFn
02:27n_bthe problem isn't arity dispatch, it's having the signatures within a let
02:28muhoodoes letfn do arity dispatch?
02:28n_bohhh
02:31n_b`(letfn [url "foo" fn1 [] (identity url) fn2 [pth] (str url '/' pth)] (fn1) (fn2))
02:32amalloyn_b: that is not at all what a letfn looks like
02:33n_bamalloy: Actually looking it up showed me that
02:34n_bbut am I misunderstanding the docstring or does letfn only bind fns?
02:34amalloyit does indeed
02:35bbloomn_b: http://clojuredocs.org/clojure_core/clojure.core/letfn
02:35bbloomprobably also needs a mutual recursion example :-)
02:36n_bSo it seems I'm an idiot who immediately jumped to the most complex solution I could think of
02:36bbloomi've only ever used letfn for mutual recursion one time. otherwise, i just can never get used to the syntax and use a regular let
02:36n_bbecause (let [foo "bar"] (defn baz [bat] (str bat foo))) does what I want
02:38n_bI'm not sure why I thought it wouldn yield
02:38n_bd
02:38n_b*I'm not sure why I thought it wouldn't yield its result in this case.
02:40n_bbut thank you for pointing me in the right (very obvious in retrospect) direction, and I apologise for cluttering up the channel with what was ultimately such a simple question
03:40bbloomn_b: never apologize for learning: just learn from your learning too and think through your next question with the experience of your last one! both experience in clojure and in asking questions! :-)
03:47TEttinger3Raynes: http://ideone.com/SDbRn0 nesting for lazybot
03:47TEttinger3it is quite sloppy but works
04:14TEttinger3$mail Raynes Nesting commands for lazybot: a reality! http://ideone.com/SDbRn0
04:14lazybotMessage saved.
05:19RaynesTEttinger3: Pretty sure that wont work
05:19Raynes$mail
05:20RaynesTEttinger3: It'll work in specific situations, but you can't always know that the next thing to be put in the stream is from the plugin you're calling.
05:20RaynesIf you have a bot in many channels, for example.
05:20TEttingertrue
05:20TEttingerit seems to work in my testing channel on quakenet
05:21RaynesBut still pretty cool.
05:21TEttingeryeah, nesting is a pain
08:26thorwilfor moving from using org.clojure/java.jdbc to korma, i'd like to have both around during the transition. but:
08:26thorwiljava.io.FileNotFoundException: Could not locate clojure/java/jdbc/internal__init.class or clojure/java/jdbc/internal.clj on classpath
08:27p_la/act
08:28hyPiRionthorwil: You could refheap the project.clj?
08:28RaynesDear everyone. Refheap supports markdown as of 30 seconds ago. https://www.refheap.com/paste/7622
08:29hyPiRionRaynes: grats :)
08:29thorwilhyPiRion: https://www.refheap.com/paste/7623
08:30thorwilthe only new thing is the korma item
08:35thorwilcould it be korma and clojure.java.jdbc cannot coexist?
08:35hyPiRionI thought so at first, but a clean run with both seems to work.
08:35hyPiRionGive me a second, I'm fetching the deps
08:36hyPiRionWhen does the error occur?
08:37borkdudeRaynes nice
08:38thorwilhyPiRion: on doing "lein immutant run". when it starts services
08:38hyPiRionoh, thorwil, sorry
08:38hyPiRionI noticed it now
08:38hyPiRionKorma wants [org.clojure/java.jdbc "0.2.2"]
08:38hyPiRionTry to exclude it, and check what happens
08:40thorwildang, i even have the lein pedantic plugin, shouldn't it catch that
08:43thorwiljust specifying the same version 0.2.2 didn't help
08:43nonrecursivehi all - I want to store some application variables in leiningen. how do I read the variables? i.e - (defproject proj "0.0.1-SNAPSHOT" :random-setting "setting")
08:43nonrecursivehow would I read :random-setting elsewhere in the app?
08:44thorwilhyPiRion: doing [korma "0.3.0-beta9" :exclusions [org.clojure/java.jdbc]] also doesn't help
08:44hyPiRionthorwil: strange.
08:44thorwilhyPiRion: thank you for looking into this, i give up and drop my jdbc now. cold turkey :}
08:44RaynesHrm, fenced code blocks no work for some reason. They work locally.
08:45hyPiRionthorwil: You could try and downgrade the jdbc to 0.2.2 and see what happens
08:45hyPiRionif not, I'd probably just kill the jdbc as you suggest
08:45thorwilhyPiRion: tried already
08:45hyPiRionah
09:24RaynesRolled back markdown support for now. I can't figure out why it works fine locally but not on Heroku.
09:41no7hingdoes clojure have something similar to java beans?
09:41no7hingdefrecord/deftype won't do because of their constructors
09:43borkdudeno7hing it has a bean function which turns a java "bean" into an immutable map, but that's probably not what you need
09:43no7hingsadly no
09:43no7hingi need to talk to a legacy AMF service that insists on getting deserializable pojos
09:44no7hingif they need a constructor - it fails
09:45no7hingwanted to find a way around gen-class because of it's AOT and the need for custom serialization
09:45raekno7hing: one pretty simple solution is to write the class you need for interop in java and let it delegate its behavior to clojure code
09:45borkdudeno7hing I'm no expert on beans/pojos, but maybe it's better to work with regular Java beans than clojure datastructures?
09:46raekalso, compilation of java files can be handled by leiningen
09:46no7hingmore or less the same solution nearly at the same time - maybe it's time for java
09:46no7hingoh, didn't know that
09:47no7hingwill have a look down that alley
09:47no7hingthanks :)
09:48raekno7hing: :java-source-paths ["src/java"], :source-paths ["src/clj"]
09:48raekthen do a "lein javac" before you start the repl
09:48raekyou need to restart the repl when you want to rewrite the class, though
09:49raekbut you have that problem (and other ones) too when you use gen-class
09:49no7hingexactly
09:49borkduderaek +1
09:50no7hingi think this sounds nicer all in all then going the all-clojure way
09:50raekone pretty neat approach is to implement a "skeleton" class and a private interface in java, let the skeleton delegate to an instance of that interface, and then implement the interface in clojure using reify or proxy
09:50cemerickno7hing: defrecords *are* Java-serializable
09:51cemerickwhy is a no-arg ctor necessary on the consumer side?
09:51no7hing@cemeric: blazeds insists on it
09:51cemerickheh; oh really
09:51no7hingAdobe BlazeDS
09:52cemerickeven if they're just .readObject'ing off of a stream?
09:52no7hingflex.messaging.MessageException: Unable to create a new instance of type 'hellgate.types.Foo'. Types cannot be instantiated without a public, no arguments constructor.
09:52cemerickweird
09:52no7hinghaven't looked to deep into the blazers end of things
09:52cemerickwell, you can certainly make a record into a JavaBean-compliant class
09:52no7hingto/too
09:53no7hingwouldn't that require a lot of manual wiring?
09:54no7hingand any pointers to an example? i think i've googled for every combination of terms
09:54cemericknah; just a macro that produces the appropriate BeanInfo impl
09:54no7hinghmm
09:55cemerickI wrote half of a macro do to that once, but that's lost in time at this point
09:56no7hingmaybe i'll just take the easy way out this time
09:56cemerickYeah, doing it in Java is the sensible thing to do.
09:57no7hingthanks all
09:57cemerickdepending on what is touching the data on the other end (your stuff?) you could just ship pr-str'd Clojure data :-P
10:01no7hingthat's where flash resides
10:01no7hing:D
10:01no7hingso many rings of hell to jump through
10:01no7hinghence the temporary project name
10:28mich2does anyone know by chance if there is something to use datomic as a picture database
10:28mich2so i can store metadata related to image files and then qurey that?
10:36hcumberdaleHi ;)
10:37hcumberdaleHow to put a single parameter in a list but let the parameter untouched if it is already a list?
10:38ivan,(conj #{3} 3 5)
10:38clojurebot#{3 5}
10:38hcumberdale,{:x 1 :y 2}
10:38clojurebot{:y 2, :x 1}
10:38hcumberdale,[ {:x 1 :y 2 } {:x 3 y 4} ]
10:38clojurebot#<CompilerException java.lang.RuntimeException: Unable to resolve symbol: y in this context, compiling:(NO_SOURCE_PATH:0)>
10:38borkdudehcumberdale merge-with?
10:39hcumberdale,[ {:x 1 :y 2 } {:x 3 :y 4} ]
10:39clojurebot[{:y 2, :x 1} {:y 4, :x 3}]
10:39hcumberdalethis is how it should look like
10:39hcumberdale(vector {:y 2, :x 1})
10:39hcumberdale,(vector {:y 2, :x 1})
10:39clojurebot[{:y 2, :x 1}]
10:39gfredericks,(map (fn [x] (if (sequential? x) x [x])) [1 2 [3 4] [[5] [6]]])
10:39clojurebot([1] [2] [3 4] [[5] [6]])
10:40hcumberdale,(sequential {:x 1 :y 2})
10:40clojurebot#<CompilerException java.lang.RuntimeException: Unable to resolve symbol: sequential in this context, compiling:(NO_SOURCE_PATH:0)>
10:40hcumberdale,(sequential? {:x 1 :y 2})
10:40clojurebotfalse
10:40hcumberdaleahh!
10:41hcumberdale,(map (fn [x] (if (sequential? x) x [x])) {:x 1 :y 2})
10:41clojurebot([:y 2] [:x 1])
10:42hcumberdalesame result as (seq ...)
10:43gfrederickshcumberdale: what do you want the result to be for {:x 1 :y 2}?
10:45hcumberdaleahh (defn one-item-vec [x] (if (sequential? x) x [x])) works
10:46hcumberdalegfredericks: ring file uploads... if there is a multiple="multiple" a vec with maps for each file is returned
10:47hcumberdaleIf multiple="multiple" but only one file is uploaded, it is simply one map {}
10:47hcumberdaleNot in a vector
10:47RaynesThere we go. Refheap markdown support is back. Never ask me about the bug that broke fenced code blocks on Linux but not OS X. It's gonna be awhile before I can talk about it. Gonna go curl up and die now. Later.
10:48borkdudeRaynes what is a fenced code block? ;))
10:48hcumberdaleBut I want to doseq the my parameter also for one {}
10:48hcumberdaleSo I need it to be one item in a vec,... thx gfredericks
10:49hcumberdaleIs there no short-form for (defn one-item-vec [x] (if (sequential? x) x [x])) ?
10:50gfredericks#(if (sequential? %) % [%])
10:50gfredericksuseful probably has an HOF to do that point-free
10:50gfredericksprobably like (to-fix (complement sequential?) list)
10:50borkdudeuseful is a lib or msth?
10:51gfredericksa lib
10:51gfredericksflatland/useful
10:51gfrederickswhat is msth?
10:51gfredericksmicrosoft-thing?
10:51borkdudetypo
10:51borkdudemonad software transactional hysteria
10:52borkdudeso it's either a lib or that. ok, a lib, good.
10:55gfredericks:)
11:10hcumberdaleIs it possible that (case does not match strings the right way?
11:10clojurebotthe best way to represent X is as a regular clojure map. (for most values of x)
11:16metajackIs there any reason that (def comment nil) would work but (let [e nil] (def comment nil)) would crash with NPE?
11:17metajackI discovered this trying to (defentity comment …) in korma, but I've managed to reduce it to the above test case.
11:17metajack(note also that :refer-clojure :exclude [comment] makes the NPE go away, but it's a little odd.
11:18djwonkI'm looking for some pointers on how to design an API to wrap cached web content. I want to cache the content in S3 but the metadata in a local DB.
11:20djwonkOne option is `get-url` which checks the cache first and then calls clj-http.client if needed. I'm also wondering if I should make fetching the body lazy.
11:26hcumberdale,(let [ext "abc"] (case "abcde.abc" ext 1 "y" 2))
11:26clojurebot#<IllegalArgumentException java.lang.IllegalArgumentException: No matching clause: abcde.abc>
11:27hcumberdaleok.
11:27hcumberdale,(let [ext "abc"] (case "abc" ext 1 "y" 2))
11:27clojurebot#<IllegalArgumentException java.lang.IllegalArgumentException: No matching clause: abc>
11:27hcumberdale??
11:27lazybothcumberdale: What are you, crazy? Of course not!
11:28hcumberdalewhat is the problem here with the 'case' macro?
11:30AimHerehcumberdale, the problem is that it can only take compile-time constants for the test-constants
11:31AimHereIf you really need to test against a variable something, use cond
11:31sveduboisI would like to use clojure in an android application. I am following this tutorial http://alfredodinapoli.wordpress.com/category/android/
11:32sveduboisWhen I try to import the jar created with lein into IntelliJ Idea I get some errors.
11:33sveduboisI don't know how to add a jar created with lein into IntelliJ Idea using Open Module settings.
11:34sveduboisDo you know how I can add a jar into IntelliJ Idea?
11:34hcumberdaleAimHere: thx.
11:46sveduboisAny suggestion how to use clojure and java inside IntelliJ Idea??
11:46lazybotsvedubois: Definitely not.
11:46sveduboisDo you know any tutorial to use clojure in android apps??
11:46lazybotsvedubois: Uh, no. Why would you even ask?
11:48AimHeresvedubois, unfortunately, I think in this instance, that bot should probably be ignored.
11:48AimHereI don't know the answer to your problem, and I'm not sure anyone else here does
11:49AimHereBut having that bot pass the Turing test with people having genuine queries is probably a bad move
11:51svedubois??
11:51lazybotsvedubois: What are you, crazy? Of course not!
11:54raek??
11:54lazybotraek: Uh, no. Why would you even ask?
11:55raeklazybot: bad bot.
11:55raekmaybe it triggers on double question marks
11:55mthvedt??
11:55lazybotmthvedt: Uh, no. Why would you even ask?
11:56mthvedtis lazybot's source available somewhere?
11:56raeklazybot: source?
11:57raekmthvedt: I think this is the offical repo: https://github.com/flatland/lazybot
11:58mthvedtraek: thanks
12:03thorwilwhat do i have to do, to use a korma defdb in another namespace? referring to it is insufficient
12:06raekthorwil: what does the defdb call expand to?
12:07mtamrfare there any native clojure libs or wrappers for image processing?
12:08thorwilraek: https://www.refheap.com/paste/7640
12:08bl00dshootermtamrf: not that I know of
12:08bl00dshooterYou'd probably have to use a java lib
12:09thorwilraek: it seems the thing to do is requiring, e.g. [tlog.data.access :refer [db]], to then call db before any transaction
12:11raekif defdb merely creates a value and expands into an ordinary def, then that's the way to do it
12:12raekyou access it "the usual way" you access vars of another namespace
12:12raekthorwil: what does (macroexpand-1 '(defdb ...)) return?
12:13thorwilraek: (clojure.core/let [spec__2572__auto__ (postgres {:db "tlog", :user "postgres", :password "database", :host "localhost", :port "5432", :delimiters ""})] (clojure.core/defonce dbl (korma.db/create-db spec__2572__auto__)) (korma.db/default-connection dbl))
12:13raekok, it just creates a var using defonce
12:14raekthorwil: also, you wrote [tlog.data.access :refer [db]] instead of [tlog.data.access :refer [dbl]] here in irc
12:14thorwilraek: yes, that's testing on repl vs what i actually have in the files
12:16thorwilraek: so calling db in every namespace where i use korma is the right thing to do?
12:18NonIncGood evening! Would you please help me finding an idiomatic way getting the key corresponding to the numerical biggest value of a map?
12:19NonIncEverything I could think of would be a translation of a imperative language.
12:20thorwilNonInc: what shall happen if the biggest value appears more than once?
12:21NonIncthorwil: if it would, i would not mind overwriting it because per definition it will not.
12:24edlothiol,(apply max-key val {:a 1 :b 2 :c 3})
12:24clojurebot[:c 3]
12:24edlothiolNonInc: see above (you can then get the key with key if you need it)
12:24NonIncthank you edlothiol
12:25NonInci guess one cannot create a sorted by value map?
12:26NonInc'the-simple-way'
12:26thorwilNonInc: hash maps don't keep order, but array-maps do
12:26mattmossclojure.set/map-invert ?
12:26mattmossoops, i misunderstood
12:26thorwilso you surely can sort into an array-map
12:27NonIncwould be looking into (into (sorted-map-by ...) ...) the way to start?
12:27edlothiolNonInc: sorted-map-by sorts only by keys
12:27NonInca shame
12:27edlothiolI think
12:28tpopethis reminds me of a question I've had ever since I first started
12:28tpope,(-> (apply max-key val {:a 1 :b 2 :c 3}) key)
12:28clojurebot:c
12:28tpope,(-> (apply max-key val {:a 1 :b 2 :c 3}) pr-str read-string key)
12:28clojurebot#<ClassCastException java.lang.ClassCastException: clojure.lang.PersistentVector cannot be cast to java.util.Map$Entry>
12:28tpopewhy does printing and reading return a different type of object?
12:29tgoossensjust reading for the first time about scala. Actually at first sight, it seems sweet
12:30stuartsierratpope: Some less-commonly-used types, like Map$Entry, have printed representations as other types.
12:31stuartsierratpope: You can bind *print-dup* true to get exact types from 'pr'.
12:31NonInctpope: pr-str read-string key ... whats that? i guess converting a key to a symbol would be (read-str (name :key))
12:32tpopeNonInc: here it is without the threading macro:
12:32tpope,(key (read-string (pr-str (apply max-key val {:a 1 :b 2 :c 3}))))
12:32clojurebot#<ClassCastException java.lang.ClassCastException: clojure.lang.PersistentVector cannot be cast to java.util.Map$Entry>
12:33tpopestuartsierra: so the rationale is basically, "this is a rare enough use case that it's not normally worth worrying about"?
12:33stuartsierratpope: I suppose so. Again, *print-dup* is there if you need i.t
12:33tgoossensit provides lots of functionality that i found appealing to clojure and which is not supported in java
12:33NonInctpope: that seems quite interesting.
12:34thorwil,(apply array-map (apply concat (sort-by second {:a 3 :b 1 :c 5})))
12:34clojurebot{:b 1, :a 3, :c 5}
12:34thorwilnot happy about the apply concat, though
12:34tpope,(binding [*print-dup* true] (key (read-string (pr-str (apply max-key val {:a 1 :b 2 :c 3})))))
12:34clojurebot#<RuntimeException java.lang.RuntimeException: EvalReader not allowed when *read-eval* is false.>
12:34NonIncthorwil: thats beautiful, thanks :D
12:34tpopehmm well I get a real error locally. what am I doing wrong?
12:35tpopethis is just a curiosity. I don't currently "need it"
12:35hyPiRion,(into (array-map) (sort-by second {:a 3 :b 1 :c 5}))
12:35clojurebot{:b 1, :a 3, :c 5}
12:37thorwilmuch better. that (array-map) works like that is new for me :)
12:37thorwilthough of course, why wouldn't it
12:38NonInchyPiRion: your version does not work for me
12:38NonIncill make a pastebin
12:39Bronsadon't trust that
12:39Bronsa,(into (array-map) (sort-by second {:a 3 :b 1 :c 5 :d 7 :e 8 :f 9 :g 10 :h 11 :i 12}))
12:39clojurebot{:a 3, :c 5, :b 1, :f 9, :g 10, ...}
12:40thorwil,(apply conj (sort-by second {:a 3 :b 1 :c 5 :d 7 :e 8 :f 9 :g 10 :h 11 :i 12}))
12:40clojurebot[:b 1 [:a 3] [:c 5] [:d 7] ...]
12:40stuartsierratpope: Clojurebot is also binding *read-eval* false for safety. It's true by default in most REPLs.
12:41stuartsierra,(binding [*print-dup* true] (pr-str (apply max-key val {:a 1 :b 2 :c 3})))"#=(clojure.lang.MapEntry/create [:c 3])"
12:41clojurebot"#=(clojure.lang.MapEntry/create [:c 3])"
12:41NonIncAs Bronsa pointed out thorwil's version works whereas hyPiRion's does not (https://gist.github.com/4309965 ProfitsSortedA does not equal ProfitsSortedB)
12:42stuartsierratpope: It appears that the `print-dup` multimethod is not correctly defined for MapEntry.
12:42Bronsa,(let [m {:a 3 :b 1 :c 5 :d 7 :e 8 :f 9 :g 10 :h 11 :i 12}] (into (sorted-map-by #(compare (m %2) (m %))) m))
12:42clojurebot{:i 12, :h 11, :g 10, :f 9, :e 8, ...}
12:42thorwilthe (into (array-map) approach returns a clojure.lang.PersistentHashMap
12:42Bronsawops
12:42Bronsa,(let [m {:a 3 :b 1 :c 5 :d 7 :e 8 :f 9 :g 10 :h 11 :i 12}] (into (sorted-map-by #(compare (m %) (m %2))) m))
12:42clojurebot{:b 1, :a 3, :c 5, :d 7, :e 8, ...}
12:42Bronsahere
12:45thorwiloh, Bronsa that gives a PersistentTreeMap
12:45Bronsayeah, sorted-map == PersistentTreeMap
12:49thorwilhttp://blackstag.com/blog.posting?id=19 makes it sound like array-maps are actually a special case meant for less than 9 items
12:51hyPiRionyeah
12:51hyPiRionFunny and sad.
12:52Bronsawhy?
12:52clojurebotWhy is the ram gone is <reply>I blame UTF-16. http://www.tumblr.com/tagged/but-why-is-the-ram-gone
12:52hyPiRion,(class (into (array-map) (map vec (partition 2 (range 16)))))
12:52clojurebotclojure.lang.PersistentArrayMap
12:52hyPiRion,(class (into (array-map) (map vec (partition 2 (range 18)))))
12:52clojurebotclojure.lang.PersistentHashMap
12:53jballanc,*clojure-version
12:53clojurebot#<CompilerException java.lang.RuntimeException: Unable to resolve symbol: *clojure-version in this context, compiling:(NO_SOURCE_PATH:0)>
12:53jballancwhoops...
12:53jballanc,*clojure-version*
12:53clojurebot{:interim true, :major 1, :minor 4, :incremental 0, :qualifier "master"}
12:55hyPiRionWell, that's a tease.
12:56hyPiRion,(class (apply array-map (range 100)))
12:56clojurebotclojure.lang.PersistentArrayMap
12:56hyPiRion,(class (assoc (apply array-map (range 100)) 0 2))
12:56clojurebotclojure.lang.PersistentArrayMap
12:56hyPiRion,(class (assoc (apply array-map (range 100)) 1 2))
12:56clojurebotclojure.lang.PersistentHashMap
12:56hyPiRion,(class (dissoc (apply array-map (range 100)) 6))
12:56clojurebotclojure.lang.PersistentArrayMap
12:57hyPiRionAdding new elements to an arraymap turns it into hash map if you have more than 8 elements in it.
12:57hyPiRion*shrug*
13:03hcumberd`Is there any way to list-dir with date-modified, date-created and so on in Raynes fs/... ?
13:07hcumberd`(fs/iterate-dir "/opt/tbx")
13:15TimMcWell, that's an unexpected error: https://www.refheap.com/paste/7641
13:15TimMc"java.lang.VerifyError: (class: lein_otf/loader$_main, method: doInvoke signature: (Ljava/lang/Object;)Ljava/lang/Object;) Unable to pop operand off an empty stack (loader.clj:40)"
13:18raekoh my... bug in the clojure compiler?
13:19TimMcSeems it, although it's probably a result of the previous errors.
13:20TimMcOn the other hand... ^:internal shouldn't have been a bug, yeah?
13:20TimMc(I was annotating a public defn as being not for public consumption.)
14:37hyPiRionDangit, naming stuff is hard.
14:41eggheadjust call it 'data' or 'worker'
14:42eggheadThere are only two hard things in Computer Science: cache invalidation and naming things
14:47bbloomtpope: also regarding printing and reading not being exact mirrors of each other
14:47bbloomthere are some things that are simply never gonna be readable: like unknown java objects
14:47bbloomhence the #<unreadable>
14:48tpopeyeah that's not surprising
14:48bbloombut you also need to watch out for things like ##(pr-str (sorted-set 1 2 3))
14:48lazybot⇒ "#{1 2 3}"
14:48bbloomno indication of sorting :-/
14:48ziltiWhat's the notation for a binary number in clojure/java? The equivalent of 0x notation for hexadecimal numbers
14:48tpopeit was a little surprising that what was printed as a vector wasn't a vector
14:49bbloomtpope: i agree, it stinks
14:54bbloomzilti: i think you use any radix from 2 to 36 like this:
14:54bbloom,2r101010
14:54clojurebot42
14:55ziltibbloom: Thanks. But:
14:55zilti,2r11111111
14:55clojurebot255
14:55ziltihuh
14:56zilti,(byte 2r11111111)
14:56clojurebot#<IllegalArgumentException java.lang.IllegalArgumentException: Value out of range for byte: 255>
14:57ivanbyte is signed, apparently
14:57ToxicFrogzilti: JVM <byte> type is always signed, IIRC
14:57tufflax,Byte/MAX_VALUE
14:57clojurebot127
14:58ToxicFrog,[Byte/MIN_VALUE Byte/MAX_VALUE]
14:58clojurebot[-128 127]
14:58ToxicFrogI'm not sure why they thought this was a good idea.
14:58hyPiRion,(unchecked-byte 2r11111111)
14:58clojurebot-1
14:59bbloomholy hell i hate java's signed bytes.
14:59bbloomargh.
15:02hiredmanbbloom: they do suck
15:02hiredmanmakes porting anything that uses bytes a pain
15:03hiredmanhttps://github.com/hiredman/ed25519/blob/master/src/ed25519/core.clj#L25
15:04bbloomhiredman: i talked to a guy who had implemented some of the encryption stuff in the original java library :-/
15:04bbloomhis commentary was hilarious
15:05hiredmanI bet
15:09TimMchyPiRion: I name all my variables after chemical elements.
15:10hyPiRionTimMc: It's a bad thing to do for libraries.
15:12TimMchyPiRion: Actually, for libraries I pick names using biological taxonomy.
15:12TimMcE.g., my photo gallery project is called "pellucida", after glass frogs.
15:15TimMcI have a languishing bookmarking project called "chelydra", after snapping turtles.
15:19hyPiRionTimMc: Well, I can do that, but it's more like giving functions a descriptive name
15:20hyPiRion"phenex" or "gaap" wouldn't be describing what the function does.
15:21TimMcYeah, for functions and locals I actually pick descriptive names.
15:21TimMc(Chemical elements can be great for naming computers, though.)
15:22TimMcI don't mean to make light of the naming problem. Just the other day I was struggling to come up with a good name for the first local in this let form: https://github.com/timmc/lein-otf/blob/master/src/lein_otf/plugin.clj#L17
15:23TimMcIt was very unsatisfying.
15:24bbloomjuggle* seems as good as any for such a short function :-P
15:24TimMc(Context: llasram had called it "juggle", which shadowed the defn, and that bothered me.)
15:37seangroveAny reason why :cljs/quit in nrepl.el wouldn't cause it to go back to the clojure repl?
15:38seangrovezenbox.client.rpc> :cljs/quit => :cljs/quit
15:39hyPiRionisn't :cljs/quit just a keyword?
15:39hyPiRion,:cljs/quit
15:39clojurebot:cljs/quit
15:39seangroveYeah, but the instructions say Type `:cljs/quit` to stop the ClojureScript REPL
15:39BronsahyPiRion: the cljs repl checks for the input form to be :cljs/quit
15:40hyPiRionokay
15:40Bronsaif it is, then it exits, otherwise it evaluates the form
15:40seangroveAh, cool, was wondering that myself too, hyPiRion
15:41Bronsahttps://github.com/clojure/clojurescript/blob/master/src/clj/cljs/repl.clj#L180
15:41seangroveBut even so, still doesn't quit
15:43seangroveDoesn't matter what ns I'm in (not that it should) either
15:47mdeboardIs the nrepl buffer the destination for stdout? Trying to figure out how to get Cascalog's stdout tap into nrepl
15:48seangrove mdeboard: Have you tried (with-out-str ...) ?
15:59seangroveIs this a reasonably idiomatic macro? https://www.refheap.com/paste/7645
16:00seangrovethe ~'bridge part is slightly bothersome, because it means that the ns using this macro has to have a function called bridge, and it has to be the specific one I'm thinking about
16:01seangroveI could change it out to be the fully-qualified name (zenbox.client.host-cs-bridge/bridge ...) instead of ~'bridge, I suppose
16:02hyPiRionseangrove: Is the macro defined within zenbox.client.host-cs-bridge?
16:02hyPiRionIf so, you could omit ~'
16:02seangrovehyPiRion: No, zenbox.client.host-cs-bridge is in cljs, and the macro is of course in clojure
16:02hyPiRionoh
16:02hyPiRion,(require '[clojure.string :as str])
16:02clojurebotnil
16:03hyPiRion,`(str/join "" [1 2 3])
16:03clojurebot(clojure.string/join "" [1 2 3])
16:06mdeboardseangrove: For Cascalog specifically? No
16:18tomojI only recently realized that juggle' is valid in addition to juggle*
16:19bbloomtomoj: yeah, i've seen the use of ' to mean "prime" but it fucks with my brain when it's mixed in with ~, ~@, ', `, etc
16:20bbloomi do so little arithmetic that i just read * as prime
16:22TimMctomoj: Ever since 1.3, yes.
16:23hyPiRionehh
16:23hyPiRion*heh
16:23bbloomheh*
16:24TimMc&((first [inc' inc]) Long/MAX_VALUE)
16:24lazybot⇒ 9223372036854775808N
16:24hyPiRion,(let [-' [10]] `(~@-'))
16:24clojurebot(10)
16:28hyPiRiondidn't know you could put them within names
16:29hyPiRion,(let [do not, don't (not do)] (do (or) don't))
16:29clojurebotfalse
16:29metellus,(boolean not)
16:29clojurebottrue
16:29hyPiRion,(Boolean. false)
16:29clojurebotfalse
16:29hyPiRion,(not (Boolean. false))
16:29clojurebotfalse
16:31AimHere,(false? (Boolean. false))
16:31clojurebotfalse
16:31sgeo_o.O
16:32sgeo_Don't construct Booleans, I guess?
16:32AimHereThereby proving that Rich Hickey is a Cretan
16:32sgeo_,(class false)
16:32clojurebotjava.lang.Boolean
16:32sgeo_,(class (Boolean. false)
16:32clojurebot#<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: EOF while reading>
16:32sgeo_,(class (Boolean. false))
16:32clojurebotjava.lang.Boolean
16:32tpope,(= false (Boolean. false))
16:32clojurebottrue
16:32hyPiRionOh, how we love (Boolean. false), am I right?
16:32bbloom,(= (Boolean. false) false)
16:32clojurebottrue
16:33hyPiRion,(= (not (Boolean. false)) (Boolean. false))
16:33sgeo_Is it too soon to blame this on Java making the constructor public?
16:33clojurebottrue
16:34ivan= is some serious funny business
16:35AimHere,(nth (iterate #(Boolean. %) false) 1000)
16:35clojurebotfalse
16:36AimHere,(false? (nth (iterate #(Boolean. %) false) 1000))
16:36clojurebotfalse
16:36AimHereIt's Boolean. false, all the way down
16:37hyPiRion= is very funny, yes.
16:37ivan,(false? (nth (iterate #(Boolean. %) false) 0))
16:37clojurebottrue
16:38AimHereNothing is true
16:38AimHereEverything is permissible
16:38hyPiRion,(let [not (memoize not)] [(not (Boolean. false)) (not false)])
16:38clojurebot[false false]
16:40tpopewhat do you guys think of "fuzzy complete" with respect to clojure code?
16:40tpopethis guy is trying pretty aggressively to get me to add it to foreplay.vim
16:40tpopeI don't like it
16:41bbloomwhat does "fuzzy complete" imply?
16:41bbloomlike camelHumpsInJava where you can type chij ?
16:41ivanthat kind where the editor uses the existing buffer as the completion dictionary?
16:41tpopebbloom: yeah, but even broader in this case
16:41bbloommayb eyou could type this-is-a-long-identifier by typing tiali
16:42tpopeI tried st<C-X><C-O> and the first result was satisfies?
16:42tpopeD:
16:42bbloom*shrug* i pretty much never use completion
16:42tpopeI don't really either
16:43tpopewhich makes the idea of me being handed a giant fuzzy complete algorithm to maintain all the more distressing
16:43bbloomi know a lot of folks who do, but my experience has been that navigating completion requires brain cycles i can't afford to spend & it never gets to muscle memory because i never complete the same values often enough.
16:44tpopeactually I use plain old buffer completion (the kind ivan was talking about) all over the place
16:44tpopebut not omnicomplete, really
16:45bbloomlooking at patch now, seems like it needs some custom clj code to execute
16:45bbloomwould it be possible to let someone override the clj that presents completion?
16:45tpopeI don't like that either
16:46bbloomand then fuzzy completion could be a clj library that any plugin could use by virtue of delegating to my-fuzzy-lib/complete
16:47tpopeso would they install it like as a lein plugin?
16:47tpopethis sounds so complicated
16:49bbloomyeah, better yet: ignore the pull request :-P
16:52tpopeI think I'm gonna go push back
17:13cemericktpope: particular editors and editor plugins should be completion-agnostic IMO
17:14tpopecemerick: could you clarify?
17:14cemerickThat stuff needs to be driven REPL-server-side (via e.g. https://github.com/pallet/ritz/tree/develop/nrepl-middleware)
17:14cemericktpope: we're coming from a history of every environment maintaining its own completion/introspection/etc/etc/etc libraries
17:16tpopewell, yes, that's what I'm doing. With the caveat that it's currently just a couple of calls to things like ns-aliases
17:41ravsterhello everyone
17:41ravsterwhich datomic client is most favoured at the moment?
17:44tomojisn't there just the one?
17:46ravstertomoj: I could just require datomic.api, but was wondering if people prefer any particular wrapper around it.
17:46ravstertheres 2 I'm interested in right now, one by tborg and one by zolodeck
17:48tomojtborg/datomic-schema?
17:49ravstertomoj: yup
17:50tomojpersonally, I definitely wouldn't use that
17:50tomojit hasn't changed in 8 months and it's written in ruby apparently because the author didn't know how to use tempids correctly
17:51ravsteroh, okay
17:51tomojdemonic looks more interesting
17:51ravsterthat makes my decision easier. thanks tomoj
17:52cemericktpope: if you're presuming lein underneath foreplay, then you can use clojure-complete, which is currently baked into reply
17:52cemericks/which/support for which
17:52tomojbut demonic looks, uh
17:53tomojevil?
17:53clojurebotevil is eval
17:54mehworkin the clojure code (/ 2 4) is the / considered a function since it's the first element in the parentheses - or is it still just an operator?
17:54AimHereIs there a difference between an operator and a function?
17:54tomojI think the idea of holding transactions and batching them up is definitely useful
17:55ravsterlol clojurebot
17:55mehworkAimHere: in other languages yeah
17:55AimHereWell yes. But I meant in clojure
17:55mehworkidk, i've been doing clojure for about 5 minutes
17:56tomojbut the crud api at least seems suspect
17:56tpopecemerick: saw that. but I think I'm currently capturing a bit more information than it provides (e.g., Vim provides a place to show the expected parameters of a function)
17:56AimHeremehwork, well I've been faffing around with it for longer, and I don't think there's a difference
17:56tpopecemerick: I do plan to use clojure-complete for java classes
17:57AimHeremehwork, you can have things being the 'first element in the parentheses' not being a function. Macros and special forms for instance
18:00tomojI think if you want a fake connection that you can flush to a real connection, you should just do that
18:00tomojand offer datomic's api instead of, or at least underneath, something that appeases ploppers
18:15cemericktpope: That's fair; whatever enhancements you have, I'd hope the maintainers of clojure-complete and/or ritz will incorporate them
18:15tpopeI guess I will follow up with that at some point
18:16seangroveDamnit
18:17seangroveHow can I use clj->js in a macro and not have it expanded to the current namespace?
18:17seangroveDo I have to ~'clj->js or type the full namespaced name?
18:18hyPiRionor require/use it
18:18seangroveI see
18:18seangroveFrustrating since I keep forgetting it, but sensible
18:36tomojI wish you could alias nonexistent namespaces
18:37tomojif you're lucky, there is a clojure namespace with the same name as the cljs namespace
18:37tomojthen you can require the clojure one and use its alias for the cljs one in macros
18:40callenI wish there was a decent HTML templating library for Clojure.
18:45ghacheyI've been struggling with a problem similar to <http://grokbase.com/t/gg/clojure/125t8rpw7n/selecting-subsets-of-maps&gt;. I need to extract subsets of an arbitrarily nested map, but with the added complexity of known knowing the keys in advanced. Christophe Grand provided a nice solution here <https://gist.github.com/2823916&gt;, but unfortunately I do not think this handles my case. It seems one should just be able to provide a modified i
18:46ghacheysorry, I meant to say "not knowing the keys in advanced".
18:49ivancut off after "provide a modified i"
18:51ghacheyprovide a modified implementation of Christophe's protocol, but this is quite hard for a beginner like me, any ideas?
18:54mdeboardghachey: I don't understand the "not knowing the keys in advance" piece. I mean, I get it, but that doesn't seem like added complexity. Doesn't the first response in your link address that pretty well?
18:58ghacheymdeboard: If it does I am not sure how. I think I need to work at it a bit more before asking for help.
19:00mdeboardghachey: Well, the "that" in "address that pretty well" is "not knowing the keys in advance". Or did you mean not knowing the keys in the target map? I was assuming you meant the keys that were being sought and so couldn't hard-code them.
19:03ghacheymdeboard: here is a sample of the map <http://pastebin.com/WA5awtKZ&gt;. You will see the IP addresses there in the map: they're never the same and I know know ahead of time what they will be. But I would like to extract them and some additional info.
19:04ghacheymdeboard: you assumed correctly.
19:06mdeboardghachey: So, you want to traverse a tree of unknown depth, and if the set of children of a node match some pattern, you want to return a sbuset of those children? (Where the nodes are keys of a map)
19:07ghacheyYes.
19:09mdeboardyou said "sample of THE map", does that mean the map always has that structure? and you just want to find the key that matches the pattern of an IP address?
19:11mdeboardOh I see
19:12ghacheysorry about the confusion. Yes, the map is always of that structure (with more or less data).
19:12mdeboardNah it's ok, it's an interesting thing to think about.
19:15mdeboardghachey: Is the question, "Find all maps that have a value that looks like an IPv4 or IPv6 address, and select the key with that IP-address-y value, plus a few more key/value pairs from there" or "Find all maps that have keys that look like an IPv4 or IPv6 address, then retrieve a subset of k/v pairs from that key's value"?
19:16ghacheyThis is not "a sample of the map" as I said eariler. It is the full map (one of many hundred thousands in a CouchDB DB) but they're always different (come with more/less IP addresses with more/less nested traffic data)
19:16mdeboardI see
19:17ghacheymdeboard: the latter seems to desbcrivbe better what I am trying now.
19:21ghacheyk
19:23mdeboardghachey: https://gist.github.com/4314523 ?
19:23mdeboardin that sample you pasted it returns '(:192.168.1.1 :00:26:37:64:96:95 :20:4E:7F:3F:A8:A4 :192.168.1.5)
19:24mdeboardI'm probably woefully misunderstanding
19:24mdeboardsince I'm using regex
19:26brehautmdeboard: lol
19:27amalloy,:foo:bar:baz ; is this really a legal keyword?
19:27clojurebot:foo:bar:baz
19:27amalloyapparently yes. not one i'd encourage using, though
19:27mdeboard,:foo:bar\ :baz
19:27clojurebot:foo:bar
19:27mdeboardaw
19:28amalloyluckily, the clojure reader is not gcc, so that doesn't work
19:29tomojuser> println 'foo'
19:29tomojfoo'
19:29brehauthurrah for foo prime
19:31tpope,(keyword "foo:bar :baz")
19:31clojurebot:foo:bar :baz
19:31tpope;)
19:31amalloytpope: yes, we're well aware you can make any string into a keyword. but if the reader won't ever produce it, it's not really a good idea to use
19:32ghacheymdeboard: What I'd like it to return would be something like <http://pastebin.com/2YLSK4Av&gt;
19:47mdeboardghachey: https://gist.github.com/4314690
19:47mdeboardthat's probably gross but it gets basically everything but the datetime, which you can probably get yourself eh
19:48mdeboardalso, seriously, there's almost certainly a better way to do it. I dunno if zippers can be used to walk maps but if they can that's probably a more elegant solution
19:50amalloyzippers are rarely more elegant for reading maps; they're sometimes handy for modifying them
19:50mdeboardand if you're always going to want the same fields (i.e. it's always bytesRcvd, etc.) then just hardcode the members `my-keys' as keywords and delete the `keys-sought' binding in `get-conn-info'
19:52ghacheythanks mdeboard: that looks like something I can work with for now.
19:52mdeboardnp
19:54mdeboardghachey: that will fall apart if the level of the IP address keys change level at all.
20:00ghacheymdeboard: I saw that, and they do not change level. It will work for me for now :)
20:02ravsterhello everyone
20:02mdeboardhi
20:10mdeboardJust to confirm: I'm not doing wrong, nrepl really doesn't display stdout output from a different thread? Based on https://groups.google.com/forum/#!msg/nrepl-el/3GDsRkX1IDE/TEMT2aYjW5EJ
20:48creeseHow do you load a file into the repl using nrepl.el? I'm getting unknown symbol errors.
20:52ivancreese: C-c C-k nrepl-load-current-buffer
20:54mdeboardcreese: Or you can do nrepl-eval-buffer, then (ns whatever-your-namespace.is)
20:55creesewhen you do the initial jack in from a file, it should already have evaluating everything, right?
20:56mdeboardI think you still have to change to the namespace
20:56mdeboardin the repl
20:56creeseyes
20:56creese(into-ns 'whatever)
20:56mdeboard(ns whatever)
20:56mdeboardis what I do
20:56mdeboardI don't know what (into-ns) is
20:56mdeboard,(doc into-ns)
20:56clojurebotCool story bro.
20:59creeseI think it's in-ns
21:03creeseI can change into the ns but I still get symbol errors when I try to run foo
21:08creeseI guess it doesn't evaluate when you jack in
22:32technomancytpope: FWIW pushing that stuff server-side is absolutely the way to go
22:32technomancydont let crazy gross logic like that sneak into the client
22:33tpopewell it was simple logic until he got ahold of it :/
22:33brehauttechnomancy: more JS programmers need to here that
22:35tpopetechnomancy: oh, are you responding to my earlier discussion in here or have you been following the github issue?
22:36technomancytpope: just scrollback
22:36tpopeok
23:16Raynesdsantiago: You there?
23:31tpopetechnomancy: when you say server side, do mean like https://github.com/technomancy/clojure-mode/blob/master/clojure-test-mode.el#L195-241 ? Or do you mean push what I need to other library maintainers?
23:32Raynesdsantiago: Sending you a pull request regarding what I was gonna ask about.
23:43technomancytpope: I mean as a library preferably exposed as an nrepl middleware
23:43technomancyclojure-test-mode predates nrepl by ~3 years =)
23:43tpopeso people need to install like a lein plugin or something in order to complete?
23:44technomancytpope: IIRC clojure-complete is part of the default stack
23:44tpopeyeah it appears to be
23:44tpopethe sticky part is what I'm doing above and beyond that
23:44tpopewhich isn't much
23:44tpopeand very vim specific
23:49dsantiagoraynes: I don't think this is right.
23:49Raynesdsantiago: Thank God for pull requests.
23:50Raynesdsantiago: What did I screw up? :(
23:54dsantiagoRaynes: Just conceptually, I disagree with your goal.
23:54Raynesdsantiago: I don't understand. Why is breaking on nil a good thing?
23:55dsantiagoWhat other meaningless things should we accept in the input?
23:55RaynesOkay.
23:56RaynesWell, thanks for taking a look. :>
23:57dsantiagoNo problem