0:00 justin_smith: then clearly Bender's dating service is not for you
0:00 * justin_smith has his relationship fulfillment meter idling at NaN
0:21 AeroNotix: I have a gen-interface that depends on the output of a gen-class. I have them both in AOT in the dependency order. It won't compile claiming it can't find the gen-class class on the classpath. Do I need to do anything else?
0:22 justin_smith: AeroNotix: do you import the needed gen-class generated class in the ns that creates the interface?
0:23 AeroNotix: justin_smith: yaeh
0:26 justin_smith: was there a follow-up to that or were you just making sure?
0:27 justin_smith: AeroNotix: just ruling out something simple
0:27 AeroNotix: cool ok
0:27 justin_smith: I have little experience with gen-class or gen-interface, so I can't be much help on this count
0:28 amalloy: does your interface-ns require the class-ns?
0:28 if it doesn't, the order they're compiled in will be arbitrary
0:28 AeroNotix: amalloy: imports it
0:28 amalloy: do both
0:28 AeroNotix: ok
0:29 justin_smith: ahh, yeah, good call. If not for the vodka I might of remembered that.
0:29 (inc amalloy)
0:29 lazybot: ⇒ 232
0:29 AeroNotix: amalloy: magic
0:29 (inc amalloy)
0:29 lazybot: ⇒ 233
0:29 amalloy: good to hear it
0:29 AeroNotix: Why did that fix it?
0:29 justin_smith: AeroNotix: loading the clojure code creates the class
0:30 AeroNotix: ohhh ok, the AOT, it does nothing?
0:30 justin_smith: AeroNotix: I dunno, depends on how you set lein up. It probably got the ordering wrong or something.
0:31 AeroNotix: interesting ok, thanks all
0:31 the really cool thing is, I can create a jar that just all magically looks like Java and pass it to co-workers.
0:32 justin_smith: haha
0:32 amalloy: AeroNotix: while AOTing, the namespaces have to be loaded in some order, right? and the classes are created in the same order as the namespaces
0:32 justin_smith: until they try to run a static analysis tool or something :)
0:32 AeroNotix: amalloy: right that makes sense
0:32 amalloy: so, if you don't tell clojure what order to compile the files in, it can't AOT
0:32 AeroNotix: justin_smith: they know it is clojure. I just don't want them to deal with any idiosyncrasies
0:33 all in all, Clojure helped me bridge a gap between two teams that were marred with politics
0:33 just by being able to drop them some easily consumed code
0:33 justin_smith: nice
0:33 AeroNotix: yeah I'm really happy with that
0:33 amalloy: AeroNotix: personally i'd rather write java interfaces and classes in java, vs writing them in clojure with a gen-class, but whatever works for you
0:34 AeroNotix: amalloy: I was going to do that if it didn't work but I wanted to see how far I could go with just writing clojure. Turns out, all the way nearly!
0:34 justin_smith: AeroNotix: my experience was having success sneaking some clojure into a backend stack, and then the client had a security issue with another contractor, which led to mandatory static analysis for everyone, which led to much wtf, wailing, and gnashing of teeth
0:34 AeroNotix: justin_smith: how does it manifest?
0:34 just "oh wait this is clojure wtf'
0:35 or some other aspect?
0:35 justin_smith: that plus "sorry, you can't deploy this code because we can't statically analyze it"
0:36 AeroNotix: ah, I don't *think* I'll have that issue. We'll see.
0:36 I've made it very clear what I am doing to all involved
1:30 lvh: Hi :-) I'm trying to figure out how to use core.async. I have a bunch of work items (data structures describing what to do). I want to execute them with limited parallelism. pipeline-* seems ideal. However, each of the processes relies on some continuously changing shared state of the world. I figured I'd make that a channel that gets updated whenever a new state-of-the-world is available). However; how do I do that with pipeline? I only get to pass one xform.
1:30 Does that mean I have to write my own transducer that mults in the nullary case?
2:45 SagiCZ: is clojure using new java 8 features like lambdas and Iterable/forEach()? or is that just syntactic sugar?
2:59 amalloy: clojure supports java 6
3:59 expez: when lein repl says it couldn't locate something on cp and refuses to start, what could be wrong when the jar is present in .m2 as expected?
4:33 justin_smith: expez: what's the specific error message?
4:34 expez: justin_smith: I was trying to include alembic as a dependency in refactor-nrepl (to get rid of pomegranate) but I don't think that's possible. I think the user has to include it as a dependency in the toplevel project or in profiles.clj
4:35 justin_smith: expez: alembic uses pomegranate doesn't it?
4:35 expez: justin_smith: yes, but in an isolated classloader
4:46 justin_smith: SagiCZ: some day, Clojure might directly use that java 8 stuff, but for now Clojure itself targets 1.6 (there's some cool stuff in 1.7 that isn't even used by core yet). But we can use it all via interop.
4:48 SagiCZ: justin_smith: i see.. thanks and do you have any idea if it would have any performance impact on clojure?
4:48 justin_smith: I really don't know.
4:48 SagiCZ: alright
5:36 is that true? why?
5:37 justin_smith: I dunno, I never really liked that rule myself.
5:41 amalloy: the rule that clojure/corepromulgated is to prefer using seq over (not (empty? ...))
5:42 choose between nil punning or empty? based on which reads better in context; since seq and empty? are opposites, you can use them to reorder your then/else clauses
5:42 wizzo: ahh ok i didn't notice the not
5:42 but why? performance?
5:43 amalloy: because it's dumb to write (not (empty? x)), when empty? is (not (seq x))
5:43 wizzo: oooooh
5:43 justin_smith: (seq x) reads better than (not (empty? x))
5:43 amalloy: (if (not (not (seq x))) (srsly what am i (doing (pls help))))
5:43 justin_smith: (not (not (not (not (seq x)))))
5:44 wizzo: eh i think not empty? reads better but that's just me
5:44 justin_smith: I'm a fan of not-empty
5:44 wizzo: but it makes sense knowing what empty? actually is
5:44 justin_smith: ,(not-empty "")
5:44 clojurebot: nil
5:44 justin_smith: ,(not-empty "hi")
5:44 clojurebot: "hi"
5:44 justin_smith: ,(seq "hi")
5:44 clojurebot: (\h \i)
5:45 amalloy: justin_smith: gross
5:45 not-empty shouldn't be used as a predicate
5:45 wizzo: why
5:46 justin_smith: amalloy: not-empty + if-let = chocolate + peanut butter
5:46 amalloy: because it's just a longer way of writing seq
5:46 justin_smith: for sure. but that's not using it as a predicate
5:46 justin_smith: it's using it as a binding and a predicate, that's what if-let is for
5:47 amalloy: that's fine. but it sounded like you were saying to use not-empty instead of (not (empty?))
5:47 since in the middle of that discussion you said "i'm a fan of not-empty"
5:49 justin_smith: yeah, I actually like using it in predicates as well (because seq is more overloaded, and the name not-empty describes what I am checking for)
5:49 but we have had this conversation before, and I understand that we disagree.
6:03 mbac: is there a way to take a sub-array from an array without copying?
6:04 justin_smith: mbac: subvec for vectors
6:04 mbac: i'm specifically using arrays tho : /
6:04 tomjack: you basically have to carry your endpoints around with you, I think
6:05 justin_smith: yeah, I think that's pretty much the deal
6:05 * mbac shakes fist at java
6:05 doritostains: exit
6:05 mbac: k
6:23 justin_smith: the most common street name in the US is second, second place is third, and third most common is first
6:34 AimHere: justin_smith, Makes sense. Some early towns started out as just being a single street. If you only have one thing, you don't call it 'first'
6:35 It's only if you have enough forethought to plan two or more streets in advance that 'first' would be in the running
6:35 justin_smith: right, I just like that the first three popular names are a perfect jumble
6:35 AimHere: It's not a complete jumble. I imagine that other than 'first', the other 'numbered' streets are more or less in numerical order
6:35 justin_smith: often instead of "first" you have "name of town" or "main"
6:35 AimHere: the first three are though
6:36 fourth is fourth
6:36 AimHere: Nah, 'first' is the only one out of sequence
6:36 godd2: The explanation that "first street gets renamed" makes most sense to me
6:37 AimHere: Why would first be renamed more often than second?
6:37 justin_smith: AimHere: there is no ordered permutation of 1,2,3 where no item has itself as its position, and no pair are in order
6:37 I was referring to the former property
6:38 I would hardly call 3,2,1 a jumble
6:38 godd2: AimHere it gets renamed to Main st!
6:38 AimHere: godd2, wouldn't it be called main to begin with?
6:38 godd2: That would require forsight
6:38 AimHere: Since the next few streets wouldn't be '2nd' or '3rd' but all the ones perpendicular
6:38 justin_smith: look at history: the road comes first, then the town, for a majority of towns
6:39 except the largest cities, there the port comes first
6:39 AimHere: The 1st, 2nd, 3rd tend to be parallel
6:39 justin_smith: then the roads
6:40 godd2: sometimes the river comes first
6:40 AimHere: godd2, calling it 'first' would require foresight, since then you have to presume the town will get big enough to support at least 2, and more likely 3 more roads
6:40 justin_smith: godd2: I should have generalized "port"
6:41 AimHere: I wonder how many towns had the airport first
6:41 godd2: AimHere that's true, but I still like the explanation :P
6:41 justin_smith: anyway, first you have a road, then people live near it, and finally you get parallel streets, this was the pattern through much of the US at least
6:41 AimHere: maybe some places like Alaska?
6:42 some day we may have cities where the launching pad back to earth comes first
6:43 AimHere: does anything in antarctica count as a city? if so, things are definitely built around the airfields there
6:44 AimHere: Largest settlement is that McMurdo sound
6:44 justin_smith: or town even
6:44 AimHere: And it's beside a body of water
6:44 justin_smith: yeah
6:44 AimHere: Also, 1200 residents, so a hefty village, if not a town
6:45 justin_smith: but nobody permanent
6:45 I bet 0 children
6:53 mbac: how is there really no fast Object getSubArray(Object array,int off,int len) function?
6:53 justin_smith: it could be done as a wrapper pretty easily by closing over the array
6:54 mbac: it's clearly a net loss for everyone who wants to have fast subarrays to carry around endpoints and also hope everyone who implements a library that operates on arrays provides methods that take an off and len parameter
6:54 yeah, i'm just kind of baffled by the java ecosystem
6:55 justin_smith: I bet 0 children
7:26 profil: Is there a way to get an overview of threads running in the REPL?
7:26 justin_smith: (Thread/getAllStackTraces) will show you what they are doing
7:28 well, it returns a Map from Thread to StackTraceElement for all running threads, that can be used to find out what they are doing
7:30 profil: oh, alright
7:31 justin_smith: each StackTraceElement can then be queried for the method name, file name, etc.
7:33 profil: I am unsure if I am doing async tcp correctly..
7:35 justin_smith: have you got any experience with aleph?
7:36 justin_smith: no, I haven't used it actually. I've read a bunch of the code though
7:39 profil: okay, I am trying to figure out the periodically function from manifold.stream but I cant get my head around it
7:39 it keeps running even though I have closed the stream
7:48 profil: nice
7:48 thats a lot of stuff :D
7:48 justin_smith: yeah, especially if nrepl is running
7:48 notice how many of the threads are executing nrepl stuff
7:50 profil: well, if no-one else can help, ztellman is often here, and hopefully he at least understands what it is doing :)
7:50 profil: yeah, I have looked for him the last couple of days, but missed him :)
7:53 justin_smith: profil: reading the source, I would expect it to continue even if the stream was closed
7:53 it catches Throwable
7:54 so even an Error won't break out
7:54 profil: yeah, but if L506 is true it will break out? or am I wrong?
7:54 justin_smith: unless I am misreading
7:55 profil: (@cancel) means that the every function will be canceled?
7:56 justin_smith: hmm...
7:56 it depends on what time/every does I guess
7:56 profil: From time/every, "Returns a zero-argument function which, when invoked, cancels the repeated invocation."
7:56 justin_smith: https://
7:57 profil: that means that if the stream that put! tries to access is closed it will return nil, which would cancel the repeat?
7:57 but my function keeps on running 3 times after the stream is closed
7:57 just 3 times
7:57 very weird
7:58 justin_smith: that is weird
7:58 I see what it's doing with cancel now
7:59 profil: could this be a race, where there are puts that have not been consumed?
7:59 (at the time of cancellation, that is)
8:00 profil: justin_smith: yeah probably, I am connecting this stream to another where map is running
8:01 justin_smith: if I remove line 11, the last "Ping timeout" will be printed 3 times
8:03 justin_smith: profil: at 5 second intervals?
8:03 profil: justin_smith: yes
8:04 justin_smith: but it looked like periodically was checking for the channel being closed
8:05 profil: maybe something to do with the buffering on the stream?
8:05 profil: if the stream is closed put! will return nil
8:05 justin_smith: nil, or something that derefs to nil?
8:05 because the code is dereffing
8:06 clojurebot: #<NullPointerException java.lang.NullPointerException>
8:07 profil: defers to nil I guess
8:07 justin_smith: I guess that's moot beacause either way you get a cancel / close
8:08 profil: ,(let [d (future nil)] (if @d "true" "false"))
8:08 clojurebot: #<SecurityException java.lang.SecurityException: no threads please>
8:09 justin_smith: ,(let [d (delay nil)] (if @d true false))
8:09 clojurebot: false
8:14 profil: I am not fiddling with buffering on the stream myself
8:14 I have no idea why it does that
8:36 nicferrier: hey all ... still arsing around with zippers and hiccup.
8:37 I can see it's a powerful technique, but it seems like the xml.zip package has some pretty basic utils that hiccup doesn't have.
8:37 should I abandon hiccup and try and make my data parsable by the standard xml stuff? is that a more normal way to work with xml data in clojure?
8:38 irctc__: Hello ... I'm trying to call a Java method from AClass in Clojure that receives as parameter AnotherClass.class. Not a instance, but the class itself. How can I do that?
8:41 I've tried (class AnotherClass) but it returns java.lang.Class instead of com.package.AnotherClass.class or something.
8:43 nicferrier: have you imported AnotherClass?
8:44 irctc__: Yes... like (:import (com.package AnotherClass)
8:44 Yes... like (:import (com.package AnotherClass))
8:44 nicferrier: can't you just (somefunc 'AnotherClass) ?
8:44 irctc__: The exception is: java.lang.IllegalArgumentException: No matching method found
8:45 nicferrier: is it a static method?
8:45 irctc__: No, I need an instance of the class to invoke it....
8:46 nicferrier: so it's an instance method?
8:46 and you've got the instance?
8:46 irctc__: I'm trying to wrapper this: https://
8:47 The equivalent of Line 47 not working here.
8:47 Hey @nicterrier, thanks a lot for your attention by the way :-)
8:48 nicferrier: so you have something like this (let [a (AeshCommandRegistryBuilder.) b (.commands a AnotherClass)] ...)
8:49 TimMc: irctc__: Does commands take varargs?
8:49 irctc__: (defn init-aesh-command-registry-builder  (doto (AeshCommandRegistryBuilder.) (.commands (class Cat) (class Cd))))
8:50 nicferrier: irctc__: but you need to pass in the instance to .commands
8:50 TimMc: (.commands builder (into-array Class [Cd Ls Mkdir]))
8:50 irctc__: (class Cat) will give you Class.
8:50 elsen: hola
8:50 irctc__: Hum. But (doto) does that, no ?
8:50 elsen: anyone using clojure on android?
8:51 irctc__: (doto (AeshCommandRegistryBuilder.) (.commands (class Cat) (class Cd)))
8:52 The Java method has this interface: public AeshCommandRegistryBuilder commands(Class<? extends Command>... commands)
8:54 martinklepsch: probably a dumb q: I have a list [a b c] now I want to apply f to each possible combination of two items ignoring how they're ordered (e.g. apply f only to [a b] but not [b a]) — I'm sure there is a word for that kind of thing?
8:57 irctc__: It's a combination @martinklepsch
8:59 Try (:require [clojure.math.combinatorics :as combo])
8:59 TimMc: irctc__: Right, so like I said above, that's varargs.
9:00 irctc__: Try the thing I showed you above.
9:00 irctc__: (combo/combinations seq 2)
9:00 borkdude: I saw someone type this on twitter:
9:00 ,(identical? 'a 'a)
9:01 clojurebot: false
9:01 borkdude: why is it false again?
9:01 irctc__: (class Cat) gave me java.lang.Class :-(
9:01 martinklepsch: ,(prn 'a)
9:01 clojurebot: a\n
9:02 martinklepsch: ,(println 'a)
9:02 clojurebot: a\n
9:02 borkdude: symbols are not interned like string literals?
9:03 martinklepsch: dont know, was just guessing that it could be because of some gensym stuff
9:03 irctc__: I have found this: http://
9:03 TimMc: irctc__: You should the above IRC messages more carefully.
9:03 irctc__: Trying to understand.
9:04 martinklepsch: irctc__: thanks, I somehow assumed that a "combination" would include dupes as in [a b] [b a]
9:04 TimMc: ,(class "foo")
9:04 clojurebot: java.lang.String
9:04 TimMc: ,(class java.lang.String)
9:04 clojurebot: java.lang.Class
9:04 irctc__: Do you mean (.commands builder (into-array Class [Cd Ls Mkdir])) ?
9:05 TimMc: yes
9:05 irctc__: trying...
9:06 Not yet... :( more tries
9:09 It compiles!
9:10 Thanks TimMc !!
9:16 TimMc: sure thing
9:16 Go read up on varargs, they're weird. :-P
9:17 ,(String/format "%s %s" (to-array [5 :cats]))
9:17 clojurebot: "5 :cats"
9:18 gfredericks: TimMc "5 :cats" is an acceptable baby name I think
9:19 TimMc: I think so too, will mention it to Alex.
9:19 gfredericks: does the jvm have different endianness details from Normal Honest To Goodness C Code?
9:20 in particular I'm writing ints to a DataOutputStream which is going to standard out and into a Normal Honest To Goodness C Program
9:21 oh wait nevermind
9:21 the bytes are probably different but the bits within the bytes are not (is that even plausible?)
9:40 dysfun: is there any way to abort a System/exit ? i would like to ensure my function tries to exit during a test
9:47 dysfun: gfredericks: <3
9:48 i was going to write something similar heh
9:48 gosh, no tests though. i mean there's a whole line of code there actually doing something. can't be sure it'll work.
9:52 gfredericks: you need to create a shorter name though.(require '[com.gfredericks.system-slash-exit :refer [exit]]) isn't exactly concise