2014-08-10
| 00:00 | lpvb | jeremyheiler: sometimes there's a lot of computations and constants in the let form and I want to declare what I need closer to the functions that need them so putting it directly in the let vector next to them makes it look better to me |
| 00:01 | lpvb | that and also I know whatever has a _ before it is definitely a side effect |
| 00:01 | lpvb | and my nil returns are explicit |
| 00:01 | lpvb | idk |
| 00:01 | jeremyheiler | cool. i've done the _ thing with temporary printlns and whatnot |
| 00:02 | jeremyheiler | but i otherwise don't find myself doing a lot of side effecty things in a let |
| 00:02 | jeremyheiler | in a let binding* |
| 02:40 | Jaood | amalloy_: did you switch computers? |
| 03:06 | amalloy | Jaood: what? when? |
| 03:40 | bluesnow | Hi, I installed the counterclockwise plugin for Eclipse, but when I go to File -> New -> Project -> .., I don't see the Clojure Project option. |
| 03:40 | bluesnow | Any idea what I might be missing? |
| 04:13 | katratxo | bluesnow: it's File > New > Clojure https://i.imgur.com/UuBHZci.png |
| 04:32 | mischov | With cond, is there a way to use the value the test returns in the associated expression? |
| 04:34 | oskarkv | mischov with condp there is |
| 07:55 | wink | hmm, interop question. IllegalArgumentException No matching field found: xx for class xy |
| 07:55 | wink | but reflection clearly shows the method is there. calling it with (.. obj xx) or (.xx obj) makes no difference. ideas? |
| 07:56 | rweir | is it private |
| 07:56 | wink | not according to reflection and docs |
| 07:56 | Bronsa | wink: do you have a concrete example? |
| 07:59 | wink | http://hastebin.com/edeluzatad.clj |
| 07:59 | wink | note that I don't see an error in line 5 (in doto), only when I call it outside |
| 08:00 | wink | and apparently you need an animated gif as the input, e.g. http://asset-8.soup.io/asset/7750/5369_87a9.gif |
| 08:00 | Bronsa | wink: in the doto you're calling it as a method, passing true as an arg |
| 08:01 | wink | doh. |
| 08:01 | wink | thanks |
| 08:01 | Bronsa | np |
| 08:01 | wink | .getNumImages x true works |
| 08:02 | wink | silly error message though |
| 08:02 | Bronsa | not really, it tells exactly what's going wrong |
| 08:02 | Bronsa | you're trying to access a getNumImages field, it doesn't exist |
| 08:02 | wink | as from calling you can't differentiate between a method without args and a field |
| 08:03 | Bronsa | wink: (.-field obj) is the new syntax that should be prefered for field access |
| 08:03 | wink | plus, who uses public fields? :) |
| 08:03 | wink | oh? |
| 08:03 | Bronsa | (.field obj) is old syntax |
| 08:04 | hyPiRion | you can also do (. obj (method)) for method calls |
| 08:04 | Bronsa | or (.method obj ()) |
| 08:04 | Bronsa | uh, no. |
| 08:04 | Bronsa | nevermind. |
| 08:04 | hyPiRion | yeah, that would send () as second argument |
| 08:05 | Bronsa | yeah I derped |
| 08:05 | Bronsa | wink: .- was introduced in 1.4 IIRC |
| 10:31 | timothyw | Is there a lein plugin for test.check? It would be nice to auto-run my tests as they’re developed. |
| 10:31 | ChouLin | hello, guys. I've post my question on Stackoverflow, how to get trie's leave count. I like the style of second & third answer, but they return slightly bias result. Can anyone modify this ? http://stackoverflow.com/questions/25221646/clojure-a-tail-recursion-to-get-leave-counts-of-a-trie |
| 10:32 | reiddraper | timothyw: I'm now aware of one at the moment, would be great to have one though |
| 10:32 | ChouLin | a trie out of["aat" "abt" "aac" "a" "b"] has 4 terminals, the code return 2. |
| 10:33 | ChouLin | 5, typo. |
| 10:33 | timothyw | reiddraper, too right… I’m about to write a lein plugin, and was wondering about the semantics |
| 10:34 | timothyw | ie , pass in the ns and number of time to run each test? |
| 10:34 | reiddraper | timothyw: awesome. Let me know if you get something published and I'll happily add it to the test.check readme |
| 10:35 | timothyw | ok, will do |
| 10:38 | mi6x3m | hey clojure, is deinit! a suitable name for a function returned by a function constructing a graphical component and perfoming some deinitialization? |
| 10:39 | sh10151 | What is deinitialization? |
| 10:39 | mi6x3m | sh10151: stopping a webserver for instance |
| 10:41 | sh10151 | wouldn't that just be 'stop' then? |
| 10:42 | mi6x3m | sh10151: this was just an example |
| 10:42 | sh10151 | hmm what are some other examples, trying to figure out the context |
| 10:42 | mi6x3m | sh10151: stopping a server, returning back resources, writing some log files etc. |
| 10:43 | mi6x3m | it's a general framework with examples of a component suite |
| 10:43 | sh10151 | That seems really really generic -- I don't usually think of "deinitialization" when writing a log file |
| 10:43 | sh10151 | Also it doesn't seem to be restricted to the opposite of whatever "initialization" is? |
| 10:44 | mi6x3m | well it's _mostly_ the opposite, but not always yes :) |
| 10:44 | mi6x3m | perhaps "cleanup" |
| 10:44 | sh10151 | I think enter/exit are a little more commonly used names for that level of genericity |
| 10:45 | sh10151 | see monitor-enter/monitor-exit or python's context manager __enter__/__exit__ |
| 10:45 | justin_smith | mi6x3m: the rule in the jvm is usually that deinitialization is implicit when a resource leaves scope |
| 10:45 | hugod | timothyw: I haven't used, but https://github.com/runoshun/lein-watch looks like it might help you |
| 10:45 | mi6x3m | justin_smith: this is a completely different affair for the component is living for far longer than the scope |
| 10:46 | justin_smith | mi6x3m: under the jvm, that isn't possible - there is some scope where it is reachable |
| 10:47 | justin_smith | unless you expect it to randomly be released / reclaimed |
| 10:47 | mi6x3m | justin_smith: wait, I am speaking about a swing component |
| 10:48 | justin_smith | OK. finalize? |
| 10:48 | justin_smith | or just cleanup |
| 10:49 | mi6x3m | finalize might be ok yeah |
| 10:50 | mi6x3m | justin_smith: cleanup! in that case i guess? |
| 10:51 | sh10151 | I don't like the ! - isn't that for things that are known to be unsafe in STM? |
| 10:52 | sh10151 | writing a log file isn't |
| 10:52 | justin_smith | sh10151: well I would guess you wouldn't want to retry a cleanup! |
| 10:53 | mi6x3m | there will be no retrying here anyway |
| 10:53 | justin_smith | goddamn clojure putting punctuation in names making me sound like a middle school student |
| 10:53 | timothyw | hugod, yes that does look good. I’m gonna try it out, thanks. |
| 10:53 | sh10151 | justin_smith: that would depend on the exact nature of the cleanup I think |
| 10:54 | sh10151 | justin_smith: this whole affair seems quite astronautical to me |
| 10:54 | sh10151 | :) |
| 10:54 | mi6x3m | is there a shortcut for calling a function only if it's not nil? |
| 10:54 | mi6x3m | alternative to when-let |
| 10:54 | Bronsa | justin_smith: next time write `cleanup!` and you'll be fine |
| 10:54 | timothyw | weavejester also created https://github.com/weavejester/lein-auto |
| 10:54 | justin_smith | mi6x3m: fnil maybe? |
| 10:54 | justin_smith | (inc Bronsa) |
| 10:54 | lazybot | ⇒ 38 |
| 10:56 | justin_smith | mi6x3m: wait, no, not fnil - ((or f (constantly nil)) arg1 arg2 ... argN) would work, but is not a shortcut |
| 10:56 | mi6x3m | justin_smith: yeah not really shorter and way more unreadable :) |
| 10:56 | mi6x3m | thanks for all the advice though :) |
| 10:56 | mi6x3m | (inc justin_smith) |
| 10:56 | lazybot | ⇒ 59 |
| 10:58 | justin_smith | mi6x3m: I often have (def nothing (constantly nil)) |
| 10:58 | justin_smith | ((or f nothing) args) |
| 10:59 | justin_smith | and you don't need when-let - you could also use when (when f (f args)) |
| 11:16 | timothyw | when I try to use `lein release` in one of my projects, I get this error: http://pastebin.com/TrHLJ46D |
| 11:16 | timothyw | what am I missing? |
| 11:19 | justin_smith | timothyw: is lein in the path that lein inherits? it seems odd that it wouldn't be, but that is what the message seems to indicate |
| 11:19 | rweir | clojure 1.3? |
| 11:20 | timothyw | @justin_smith: yes, that’s what I thought too - but `lein` is definitely available from anywhere |
| 11:21 | timothyw | @rweir, my project’s clojure version is [org.clojure/clojure "1.5.1"] |
| 11:36 | justin_smith | timothyw: you should turn on pedentic dependency resolution in your project.clj, because something is giving you the wrong clojure version |
| 11:36 | justin_smith | :pedantic? :abort |
| 11:36 | timothyw | Somehow, when lein does `java.lang.UNIXProcess.forkAndExec`, some library or execution path with `lein` is not available. |
| 11:37 | timothyw | ok, lemme try that |
| 11:37 | justin_smith | also, be sure that lein is not only in your path, but also in your exported path |
| 11:38 | timothyw | @justin_smith, I put the `:pedantic? :abort` k/v in my project.clj. But the same error occurs |
| 11:38 | justin_smith | so not only PATH=... in your shell config, but export PATH=... |
| 11:38 | justin_smith | hmm |
| 11:38 | timothyw | ok, one sec… |
| 11:40 | timothyw | yep, in .bash_profile, I have “export PATH="$PATH:~/bin/:…” |
| 11:40 | timothyw | lein is in “~/bin/lein” |
| 11:50 | justin_smith | OK, lein-release uses clojure 1.3 |
| 12:07 | timothyw | @justin_smitth, hmm, that’s interesting |
| 12:07 | timothyw | I can get around this issue by running `lein jar` and `lein pom`, manually. |
| 12:08 | timothyw | and logged a bug here: https://github.com/relaynetwork/lein-release/issues/20 |
| 12:12 | justin_smith | reading the source, it is weird that they are shelling out to lein again, rather than just calling the lein-jar and lein-pom functions |
| 12:16 | llasram | The 2.4 Leiningen release series includes a built-in `release` task. Is it possible you could simply use that instead of the `lein-release` plugin? |
| 12:29 | timothyw | @justin_smith, yeah, I thought was weird too |
| 12:33 | timothyw | @llasram, I see that, yes. I’ll give that a shot. Thanks :) |
| 12:33 | llasram | timothyw: BTW, the convention on IRC to refer to someone is to just use their bare handle. No need for the `@` prefix |
| 12:34 | timothyw | cool beans - habits from other IM tools get mixed into here too :) |
| 13:57 | gfredericks | ~@ |
| 13:57 | clojurebot | @ is splicing unquote |
| 13:57 | gfredericks | huh. |
| 13:57 | gfredericks | ~~@ |
| 13:57 | clojurebot | Titim gan éirí ort. |
| 13:57 | JohnTalent | global state is managed with assoc, dissoc? |
| 13:57 | gfredericks | clojurebot: ~@ is splicing unquote |
| 13:57 | clojurebot | c'est bon! |
| 13:57 | gfredericks | ~~@ |
| 13:57 | clojurebot | ~@ is different from ~ and different from @ |
| 13:58 | gfredericks | ~~@ |
| 13:58 | clojurebot | ~@ is splicing unquote |
| 13:58 | gfredericks | clojurebot: forget @ is splicing unquote |
| 13:58 | clojurebot | Ok. |
| 13:58 | gfredericks | JohnTalent: assoc and dissoc operate on immutable maps |
| 13:58 | gfredericks | ~@ |
| 13:58 | gfredericks | clojurebot: @? |
| 13:58 | rweir | JohnTalent, you may be thinking of vars |
| 13:59 | gfredericks | global state is usually avoidable |
| 13:59 | JohnTalent | rweir: i am a total newb. |
| 14:00 | rweir | JohnTalent, what specifically do you want to do? |
| 14:01 | andyf | JohnTalent: If an application has global state, immutable maps are often a convenient data structure to use for storing that global state, because of their flexible nature of adding and removing arbitrary keys. |
| 14:02 | andyf | Regardless of whether a map or some other data structure is used for holding the desired state, it is often 'pointed at' by an atom, and what that atom 'points at' can be changed over time, e.g. to new updated maps. |
| 14:03 | JohnTalent | rweir: pass around global state. |
| 14:03 | rweir | JohnTalent, that's not specific |
| 14:03 | JohnTalent | rweir: yes, because it's a nonissue until i start writing. |
| 14:04 | JohnTalent | andyf: thanks |
| 14:05 | gfredericks | sounds like he might be using an alternate sense of "global state" |
| 14:05 | rweir | indeed |
| 14:05 | gfredericks | i.e., the purely-functional variant of it |
| 14:05 | gfredericks | the state monad essentially :) |
| 14:06 | andyf | Sometimes you just gotta try out various things for yourself to learn their advantages and disadvantages. |
| 14:12 | JohnTalent | andyf: right |
| 14:45 | meoblast001 | suppose i define an (fn [] .. ) and i want to call it. do i need to do (apply (fn [] ... ) [ ... ]), or is there a more natural type of syntax? |
| 14:47 | gfredericks | ((fn [] ...)) |
| 14:48 | gfredericks | ,((fn [] 42)) |
| 14:48 | clojurebot | 42 |
| 14:48 | meoblast001 | ah, thanks |
| 14:48 | gfredericks | ,(((fn [] (fn [] 42)))) |
| 14:48 | clojurebot | 42 |
| 14:48 | gfredericks | ,((((fn [] (fn [] (fn [] 42)))))) |
| 14:48 | clojurebot | 42 |
| 14:48 | meoblast001 | i feel like i'm going about this problem the wrong way... |
| 14:49 | gfredericks | ,(((((fn [] (fn [] (fn [] (fn [] 42)))))))) |
| 14:49 | clojurebot | 42 |
| 14:49 | meoblast001 | i basically have times listed in a bunch of hashmaps.. and i'm trying to divide this collection of hashmaps into multiple collections if they fall into time intervals |
| 14:50 | meoblast001 | i thought i'd solve this with recursion and filter... but i'm not sure if that'll be clean |
| 14:51 | gfredericks | ,(doc partition-by) |
| 14:51 | clojurebot | "([f] [f coll]); Applies f to each value in coll, splitting it each time f returns a new value. Returns a lazy seq of partitions. Returns a stateful transducer when no collection is provided." |
| 14:51 | meoblast001 | omg thanks i love you, gfredericks |
| 14:52 | meoblast001 | there's only one problem.. i need to say "the end of this partition is anything that is no larger than the beginning of this partition" |
| 14:52 | technomancy | ,(doc partition-all) |
| 14:52 | clojurebot | "([n] [n coll] [n step coll]); Returns a lazy sequence of lists like partition, but may include partitions with fewer than n items at the end. Returns a stateful transducer when no collection is provided." |
| 14:53 | technomancy | partition-by is usually the wrong thing |
| 14:53 | meoblast001 | well partition-all would work great if i was saying "I want X amount of things in each collection" |
| 14:53 | meoblast001 | but my problem is "I want however many things fit into a 30 second time period in one collection, then start the next collection repeating this process" |
| 14:53 | gfredericks | meoblast001: that rule seems to say that each partition has the same timestamp? |
| 14:53 | gfredericks | oooh |
| 14:54 | gfredericks | so it's based on some property of the whole partition together? |
| 14:54 | gfredericks | sort of like starting with a bunch of numbers and splitting them into chunks that sum as high as possible without exceeding X? |
| 14:54 | meoblast001 | yeah. it's based on the first entry in the partition |
| 14:55 | meoblast001 | so basically if the first item in a partition caries the timestamp "40", i don't want the last one to exceed "70" |
| 14:55 | meoblast001 | once it does, start the next part |
| 14:55 | gfredericks | gotcha |
| 14:55 | gfredericks | reduce can do that |
| 14:56 | meoblast001 | yeah.. if i throw in a collection i could probably get that.... hm |
| 14:56 | meoblast001 | if i throw in a [[]], and always add each item to the last collection within this collection.... then always compare with the first item without the last collection |
| 14:57 | justin_smith | reduce can do it, you would want some kind of simulated annealing to optimize it though |
| 14:57 | meoblast001 | i feel like there's a really good recursive solution to this but can't think of it right now |
| 14:57 | justin_smith | or maybe not... |
| 15:01 | gfredericks | I've got a reduce |
| 15:01 | gfredericks | one sec |
| 15:01 | meoblast001 | ah. i came up with a good recursive solution on the toilet! |
| 15:01 | gfredericks | https://www.refheap.com/89089 |
| 15:01 | meoblast001 | i just need something like a take-until... not like reduce where it just skips an entry if it fails a condition, but one where it finishes iteration when it fails a condition |
| 15:01 | meoblast001 | hmm |
| 15:03 | justin_smith | why would reduce skip anything? |
| 15:03 | gfredericks | ,(defn sorta-reduce "like reduce but skips things sometimes" ...) |
| 15:03 | clojurebot | #<IllegalArgumentException java.lang.IllegalArgumentException: Parameter declaration ... should be a vector> |
| 15:03 | meoblast001 | oh sorry. i was thinking filter, not reduce |
| 15:03 | meoblast001 | had reduce on my mind for some reason |
| 15:04 | justin_smith | gfredericks: flaky-reduce |
| 15:04 | gfredericks | (inc flaky-reduce) |
| 15:04 | lazybot | ⇒ 1 |
| 15:04 | gfredericks | meoblast001: because I just used it ;-) |
| 15:04 | meoblast001 | yup |
| 15:04 | meoblast001 | reading yours right now |
| 15:04 | rpaulo | (inc flaky-reduce) |
| 15:04 | lazybot | ⇒ 2 |
| 15:05 | gfredericks | meoblast001: a slight modification to my function could make it take an arbitrary predicate for a candidate group, and you should be able to use that to get the specific logic you want |
| 15:05 | rpaulo | for a language that stresses imutability, this seems odd! |
| 15:06 | gfredericks | rpaulo: what's not immutable about this? |
| 15:06 | meoblast001 | gfredericks: yup, thanks :) |
| 15:06 | justin_smith | rpaulo: (inc ...) in this channel is just a pseudo-syntax |
| 15:06 | justin_smith | that is not how inc really works, of course |
| 15:06 | meoblast001 | i'm just making sure i understand it before doing that |
| 15:06 | gfredericks | oooh that |
| 15:06 | rpaulo | yeah, it was a joke... |
| 15:07 | justin_smith | OK, you forgot to attach the joke metadata, which led to a reader error on my end |
| 15:07 | rpaulo | :) |
| 15:07 | meoblast001 | gfredericks: this solution is clever |
| 15:08 | meoblast001 | i don't do as much clojure as i wish to, so my solutions are never this clever ;) |
| 15:08 | meoblast001 | or.. rarely |
| 15:10 | gfredericks | aw man clojure 1.7 doesn't have update yet |
| 15:10 | meoblast001 | peek is an interesting function |
| 15:14 | justin_smith | my minor reworking of gfredericks' version https://www.refheap.com/89091 |
| 15:16 | meoblast001 | style question. if i'm doing a really complex expression inside of the [] of a let, how far in should i indent? |
| 15:16 | justin_smith | meoblast001: exactly as far as emacs auto-indents |
| 15:16 | meoblast001 | lol. i'm not using emacs |
| 15:16 | meoblast001 | inb4 "that's your problem" |
| 15:16 | justin_smith | heh |
| 15:17 | wcauchois | hey, i'm trying to use netty in clojure and i'm getting a pretty weird exception: Cannot cast io.netty.handler.codec.http.HttpServerCodec to [Lio.netty.channel.ChannelHandler |
| 15:17 | wcauchois | HttpServerCodec is definitely an instance of ChannelHandler so i don't understand that |
| 15:17 | meoblast001 | justin_smith: how far does your emacs do it? |
| 15:17 | justin_smith | meoblast001: a multi-line binding in let should be indented exactly as much (relatively) as it would be anywhere else |
| 15:17 | wcauchois | anyone know what that [L is in front of the type? could that have anything to do with it? |
| 15:17 | justin_smith | wcauchois: are you trying to use a varargs method? |
| 15:17 | meoblast001 | so one indent forward from the (let ? |
| 15:18 | wcauchois | justin_smith: yes, i am |
| 15:18 | justin_smith | wcauchois: varargs methods are just a java syntactic sugar, we don't have an equivalent in clojure |
| 15:18 | justin_smith | wcauchois: you need to put all the optional arguments into an array |
| 15:19 | wcauchois | do i still pass the non-optional arguments regularly, or do i pass the whole thing as an array? |
| 15:19 | justin_smith | (method required-arg (into-array [optional1 optional2 optional3])) |
| 15:19 | gfredericks | justin_smith: I see your minor reworking and raise you a genericification: https://www.refheap.com/89092 |
| 15:19 | gfredericks | meoblast001: ^ |
| 15:19 | justin_smith | the javadoc should make clear which are required and which are optional |
| 15:19 | wcauchois | ok let me try that |
| 15:19 | wcauchois | the function is also overloaded, although i'm calling the 2-arg version which isn't (there are two 3-arg ones) |
| 15:19 | meoblast001 | woo |
| 15:20 | wcauchois | would clojure dispatch based on the types to the overloaded ones? |
| 15:20 | justin_smith | wcauchois: concrete example I answered recently on so http://stackoverflow.com/questions/25145550/how-to-instantiate-path-object-using-clojure/25145835?noredirect=1#comment39155787_25145835 |
| 15:21 | justin_smith | wcauchois: notice in that case, java.nio.file.Paths/get needs a single string arg (in order to do the dispatch properly), and then all other args needed to be in an array |
| 15:21 | justin_smith | wcauchois: in this kind of case it's not really clojure dispatching, it's the jvm dispatching - you need to provide the right classes in the clojure invocation so that the jvm knows which method to dispatch to |
| 15:22 | wcauchois | which you can do with ^Type, correct? |
| 15:22 | wcauchois | also now i'm getting no matching method found. i passed (into-array Object []) as the last argument (again, i'm calling the 2-arg version and there are other 3-arg overloads) |
| 15:23 | justin_smith | wcauchois: well ^Type helps resolution at runtime, but the real issue is that you need the right signature for the method call to resolve (which is why all the args above were strings, but one had to be outside the array) |
| 15:23 | justin_smith | the varargs should be preceded by at least one non-array argument I think, almost always |
| 15:24 | justin_smith | wcauchois: do you have a link to the javadoc for the method in question? |
| 15:24 | justin_smith | gfredericks: very nice |
| 15:24 | justin_smith | (inc gfredericks) |
| 15:24 | lazybot | ⇒ 81 |
| 15:25 | oskarkv | meoblast001 gfredericks what about this? https://www.refheap.com/89093 |
| 15:25 | wcauchois | okay, i think it worked by passing the first required arg regularly and then passing the second arg as a singleton array |
| 15:25 | wcauchois | yess no more exceptions. still not working, but now i'm on to the next bug :) |
| 15:25 | justin_smith | wcauchois: yeah, I think that is pretty much always how it needs to be done |
| 15:25 | wcauchois | ok. thanks for the help! |
| 15:25 | gfredericks | that's the first time in half a year I've gotten karma for something that wasn't a joke |
| 15:25 | justin_smith | wcauchois: do you have a specific reason to use netty directly instead of using ring? |
| 15:26 | gfredericks | oskarkv: hey cool |
| 15:26 | gfredericks | seems better for being lazy |
| 15:26 | gfredericks | or at least it would be lazy if you had wrapped it in lazy-seq :) |
| 15:26 | oskarkv | yeah :P |
| 15:28 | wcauchois | justin_smith: errr i was planning on writing my own adapter. i want to use websockets as well. i found a ring netty adapter but it didn't look like it supported websockets. |
| 15:29 | justin_smith | wcauchois: oh, nice |
| 15:29 | wcauchois | there's aleph, which looks really nice, but it's not ring-compatible |
| 15:29 | wcauchois | also i thought maybe this would be a good learning experience? haha |
| 15:30 | wcauchois | tho it seems more like i'm learning about the warts of java interop than actual clojure |
| 15:30 | wcauchois | oh wait |
| 15:30 | wcauchois | aleph is ring-compatible, what am i saying |
| 15:30 | wcauchois | anyway, learning experience etc |
| 15:31 | justin_smith | java interop is not so bad once you get used to it, the rules are few in number and very consistent - and aleph is much more than a netty adapter |
| 15:32 | justin_smith | the trick is realizing which parts of java are really fictions of the compiler (like generics and varargs) so that you can provide the version without said fiction (which clojure will not support) |
| 16:01 | gfredericks | challenge: given a number, try to express it in clojure/java by referencing only the Math class |
| 16:03 | SagiCZ11 | ,Math/PI |
| 16:03 | clojurebot | 3.141592653589793 |
| 16:09 | milos_cohagen | am i using the term 'yak shaving' correctly if i used it to describe the last two hours of emacs/pkg/cider woes? |
| 16:10 | gfredericks | probably depends on how valuable those woes were |
| 16:10 | justin_smith | probably |
| 16:11 | justin_smith | for the convenience of anyone considering gfredericks' challenge https://www.refheap.com/89095 |
| 16:11 | gfredericks | I was just assembling a similar list |
| 16:11 | justin_smith | tab-complete plus refheap-paste-region :) |
| 16:12 | gfredericks | ha |
| 16:14 | SagiCZ11 | i guess i dont understand the challenge |
| 16:14 | justin_smith | SagiCZ11: make an arbitrary number, using only functions and constants in java.lang.Math |
| 16:14 | gfredericks | e.g., you can express 23 as ##(Math/floor (Math/exp Math/PI)) |
| 16:14 | lazybot | ⇒ 23.0 |
| 16:15 | justin_smith | here's an idea: have a bot generate a random integer between 0 and 1000, first person to make an == number using java.lang.Math wins? |
| 16:16 | SagiCZ11 | ok but what number should we make? |
| 16:16 | gfredericks | &(rand-int 1000) |
| 16:16 | lazybot | ⇒ 860 |
| 16:16 | gfredericks | that one |
| 16:16 | justin_smith | OK |
| 16:17 | gfredericks | you gotta generate a long, not a double |
| 16:17 | justin_smith | oh, so == is not good enough? |
| 16:17 | gfredericks | ah I see what you did there |
| 16:18 | gfredericks | ,(Math/round 42.0) |
| 16:18 | clojurebot | 42 |
| 16:18 | justin_smith | ok, that's trivial anyway (which is why I suggested just using == rules, but whatever, no biggie) |
| 16:18 | gfredericks | yeah |
| 16:18 | gfredericks | I guess I don't care :) |
| 16:30 | gfredericks | ,(Math/toDegrees (Math/exp (Math/abs Math/E))) |
| 16:30 | clojurebot | 868.2752680712246 |
| 16:30 | gfredericks | I guess the abs there is redundant :) |
| 16:31 | justin_smith | yeah, toDegrees is a godsend here in general |
| 16:31 | justin_smith | still, this is very hard |
| 16:31 | gfredericks | I would be further along if this baby hadn't woken up |
| 16:31 | SagiCZ11 | i think one could write a script in clojure that goes through the possible functions.. just brute force |
| 16:33 | justin_smith | question is, can you write that program faster than one of us can find the solution by hand? |
| 16:33 | gfredericks | I was going the programmatic route |
| 16:34 | justin_smith | given the existence of addExact, if you have enough space for the code, you can trivially make any number programatically |
| 16:34 | justin_smith | but it would be very ugly for most numbers |
| 16:35 | SagiCZ11 | i just thought it would be a cool exercise for a beginner like me :) |
| 16:35 | gfredericks | addExact? |
| 16:41 | meoblast001 | when i use a java.lang.Long in a methematical operation, why do i get output like "1307/15" when i print it? |
| 16:42 | justin_smith | meoblast001: that's a rational - you can coerce it to a double or long if you prefer some other printing format |
| 16:42 | justin_smith | ,(Math/subtractExact (Math/addExact (Math/subtractExact (Math/round (Math/toDegrees (Math/exp Math/E))) (Math/round (Math/pow (Math/floor Math/PI) (Math/floor Math/E)))) (Math/round (Math/floor Math/E))) (Math/round (Math/floor (Math/getExponent Math/PI)))) |
| 16:42 | clojurebot | #<CompilerException java.lang.IllegalArgumentException: No matching method: subtractExact, compiling:(NO_SOURCE_PATH:0:0)> |
| 16:42 | justin_smith | ergh |
| 16:42 | justin_smith | works locally |
| 16:43 | meoblast001 | ah, okay |
| 16:43 | meoblast001 | i read you can just put a (double ...) around it, and that should work |
| 16:43 | justin_smith | yeah, the rational form carries for precision, but is slightly slower for calculations |
| 16:44 | justin_smith | you can wrap it in (double ...) or (long ...) or feed it to format if you need to print it differently |
| 16:44 | justin_smith | *carries more precision |
| 16:50 | nbeloglazov | https://github.com/bbatsov/clojure-style-guide#two-spaces What is the difference between first and second bullets? When should one align using 2 spaces? |
| 16:51 | justin_smith | nbeloglazov: when is not a function |
| 16:52 | nbeloglazov | So macros and so on? |
| 16:52 | justin_smith | defn/when/let/fn/for etc. should get two space indent, regular functions should get extra arguments lined up with the first |
| 16:52 | justin_smith | it's a special form actually |
| 16:52 | justin_smith | even macros should generally get aligned with the first function (unless they are things like fn that wrap a special form) |
| 16:53 | nbeloglazov | I would say wording is confusing then |
| 16:53 | justin_smith | *aligned with the first arg |
| 16:53 | gfredericks | justin_smith: ooh these arithmetic functions are java 7 |
| 16:53 | gfredericks | java 8 I mean |
| 16:53 | gfredericks | I hereby forbid java 8 from the competition |
| 16:53 | justin_smith | gfredericks: ahh, figures |
| 16:53 | justin_smith | lol |
| 16:53 | justin_smith | give me the java 7 list then |
| 16:53 | gfredericks | $google java 7 math |
| 16:53 | lazybot | [Math (Java Platform SE 7 ) - Oracle Documentation] http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html |
| 16:53 | justin_smith | I did get the correct answer with java 8 though |
| 16:55 | gfredericks | I just got 859 |
| 16:55 | gfredericks | wait |
| 16:56 | gfredericks | &(Math/ceil (Math/toDegrees (Math/ceil (Math/expm1 Math/E)))) |
| 16:56 | lazybot | ⇒ 860.0 |
| 16:56 | gfredericks | kaboom |
| 16:56 | justin_smith | damn |
| 16:56 | justin_smith | nice |
| 16:58 | gfredericks | &(rand-int 10000) ; next target |
| 16:58 | lazybot | ⇒ 9578 |
| 17:01 | hyPiRion | make swearjure golfing gogo |
| 17:01 | hyPiRion | /s/make// |
| 17:02 | gfredericks | technically you can get to any double by applying nextUp enough times :) |
| 17:03 | justin_smith | gfredericks: even faster if you combine nextUp and ceil |
| 17:03 | gfredericks | wooooah |
| 17:04 | gfredericks | I don't know how to get to -infinity to start with though |
| 17:04 | catern | haha |
| 17:04 | catern | that is fun |
| 17:04 | catern | justin_smith: p. nice idea |
| 17:04 | justin_smith | ,(Math/ceil (Math/nextUp (Math/ceil (Math/nextUp (Math/ceil Math/PI))))) |
| 17:04 | clojurebot | 6.0 |
| 17:04 | justin_smith | ad nausium |
| 17:05 | gfredericks | let's call this game "java math" just to be infuriatingly generic |
| 17:05 | justin_smith | heh |
| 17:05 | catern | how come you have to do it only with java math, though? why not arbitrary clojure? |
| 17:05 | justin_smith | with that, plus pow / log you get pretty close to a generic formula |
| 17:05 | gfredericks | I think it'd be fun to work out a function that can find an expression for an arbitrary double quickly |
| 17:06 | hyPiRion | gfredericks: that'd be boring though |
| 17:06 | gfredericks | justin_smith: hey good point |
| 17:06 | justin_smith | gfredericks: I am sure you can do it with nextUp / ceil / pow / log |
| 17:06 | hyPiRion | ,(map (fn [x] (.toString x)) [2.0 3.0 4.0 5.0 6.0]) |
| 17:06 | clojurebot | ("2.0" "3.0" "4.0" "5.0" "6.0") |
| 17:06 | gfredericks | hyPiRion: huh? |
| 17:07 | catern | hyPiRion: that's numberwang! |
| 17:07 | hyPiRion | gfredericks: oh, I forgot some doubles cannot be printed nevermind |
| 17:07 | gfredericks | what does printing have to do with it anyhow? |
| 17:07 | catern | gfredericks: how about calling it javawang |
| 17:08 | hyPiRion | gfredericks: find an expression for an arbitrary double? |
| 17:08 | gfredericks | hyPiRion: oh the rules of java math say you can only use the Math class |
| 17:08 | hyPiRion | oh |
| 17:08 | gfredericks | and you cannot use java 8 |
| 17:08 | gfredericks | or 9 or 10 |
| 17:08 | hyPiRion | gfredericks: can I fork java and add constants for every double? |
| 17:09 | gfredericks | you cannot use Java vhyPirion either |
| 17:09 | justin_smith | hyPiRion: just give it a version number smaller than 8 |
| 17:09 | gfredericks | you have to use java 7 |
| 17:11 | JohnTalent | anyone want to develop a game with me? action/adventure using clojure, 2d canvas. i can do the art and scripting. |
| 17:17 | gfredericks | justin_smith: should we say it has to fit in a tweet? :) |
| 17:17 | gfredericks | that should rule out a lot of trivial solutions |
| 17:30 | JohnTalent | how do i change my 1.5.1 to 1.6.0? |
| 17:30 | JohnTalent | why is this rocket science? |
| 17:30 | gfredericks | JohnTalent: are you using leiningen? |
| 17:33 | JohnTalent | gfredericks: now not, but it's also a problem in leiningen. |
| 17:34 | gfredericks | in leiningen you can change the entry in your project.clj |
| 17:34 | JohnTalent | i did that |
| 17:35 | gfredericks | is this with respect to a plugin? |
| 17:35 | JohnTalent | i'm trying to follow http://astashov.github.io/blog/2014/07/30/perfect-clojurescript-development-environment-with-vim/ |
| 17:36 | JohnTalent | i changed 1.5.1 to 1.6.0 in th project file |
| 17:36 | gfredericks | and what's the evidence that it doesn't work? |
| 17:38 | JohnTalent | hold on |
| 17:38 | JohnTalent | how do i find out which clojurescript that i have? |
| 17:39 | justin_smith | lein deps :tree will show all your dependency versions |
| 17:39 | justin_smith | there is another command to show all your plugin versions iirc |
| 17:43 | meoblast001 | damn do i have a lot of problems today |
| 17:43 | meoblast001 | https://gist.github.com/meoblast001/dd0b2d34afd3928381f7 |
| 17:43 | meoblast001 | i'm getting messages here about this not being tail recursion. is there a way i could fix this? |
| 17:44 | gfredericks | it's not a tail recursive algorithm so you can't use recur |
| 17:44 | amalloy | meoblast001: it looks like you are trying to solve a problem that is better solved by ##(partition 2 1 '(a b c d)) |
| 17:44 | lazybot | ⇒ ((a b) (b c) (c d)) |
| 17:44 | gfredericks | meoblast001: you're trying to produce something for each pair in the sequence? |
| 17:45 | gfredericks | what amalloy said |
| 17:45 | JohnTalent | i just 'lein cljsbuild auto dev'. how can I tell it compiled 1.6.0 and not 1.5.1? |
| 17:45 | meoblast001 | hmm. you're right |
| 17:45 | gfredericks | ~recursion |
| 17:45 | clojurebot | It's greek to me. |
| 17:45 | amalloy | me too, clojurebot. me too |
| 17:45 | meoblast001 | all of this haskell i'm learning is warping the way i code |
| 17:45 | meoblast001 | i'll switch to using partition |
| 17:45 | amalloy | uhhhhh, pretty sure haskellers would zipWith f xs (tail xs) |
| 17:48 | JohnTalent | ugh, python isn't serving up a sample page. |
| 17:51 | justin_smith | meoblast001: in general, you can convert a non-tail recursion to a tail recursion by adding an accumulator argument (and sometimes this also means a reduction as your last step) |
| 17:51 | justin_smith | this turns the stack building of non-tail recursion into a heap-building tail recursion |
| 17:53 | meoblast001 | oooh |
| 17:53 | meoblast001 | i'll look that up in more detail momentarily |
| 17:58 | michaelr | sorting a collection which om is rendering seems to mess everything up |
| 17:58 | michaelr | anyone familiar with this issue and workarounds? |
| 17:58 | dnolen_ | michaelr: you need to supply keys for everything |
| 17:58 | dnolen_ | don't sort the app state either |
| 17:58 | dnolen_ | just sort at the presentation layer |
| 18:00 | SagiCZ11 | ,(for [i [:a :b] j [1 2]] (list i j)) |
| 18:00 | clojurebot | ((:a 1) (:a 2) (:b 1) (:b 2)) |
| 18:00 | michaelr | dnolen_: I have keys.. I'll to move the sorting to the rendering part |
| 18:00 | SagiCZ11 | what if i want to iterate both colls in parallel? |
| 18:00 | michaelr | thanks |
| 18:00 | SagiCZ11 | and get ((:a 1) (:b 2)) |
| 18:01 | metellus | ,(map list [:a :b] [1 2]) |
| 18:01 | clojurebot | ((:a 1) (:b 2)) |
| 18:01 | SagiCZ11 | metellus: thanks |
| 18:03 | michaelr | dnolen_: works ;) |
| 18:10 | SagiCZ11 | ,(map inc (take 3 (drop 2 [2 5 4 1 3 6]))) |
| 18:10 | clojurebot | (5 2 4) |
| 18:12 | SagiCZ11 | ,(contains? :a {:a nil :b 2}) |
| 18:12 | clojurebot | #<IllegalArgumentException java.lang.IllegalArgumentException: contains? not supported on type: clojure.lang.Keyword> |
| 18:12 | SagiCZ11 | ,(contains? {:a nil :b 2} :a) |
| 18:12 | clojurebot | true |
| 18:13 | justin_smith | SagiCZ11: just don't expect it to work on anything sequential (at least not the way you would expect) |
| 18:13 | SagiCZ11 | (def m {:a nil :b 2}) |
| 18:13 | SagiCZ11 | ,(and (contains? m :a) (nil? m :a)) |
| 18:13 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: m in this context, compiling:(NO_SOURCE_PATH:0:0)> |
| 18:14 | SagiCZ11 | (do |
| 18:14 | SagiCZ11 | (def m {:a nil :b 2}) |
| 18:14 | SagiCZ11 | (and (contains? m :a) (nil? m :a))) |
| 18:14 | SagiCZ11 | darn it |
| 18:14 | justin_smith | SagiCZ11: that call to nil? is wrong |
| 18:15 | SagiCZ11 | true |
| 18:15 | SagiCZ11 | ,(let [m {:a nil :b 2}] |
| 18:15 | SagiCZ11 | (and (contains? m :a) (nil? (m :a)))) |
| 18:15 | clojurebot | #<RuntimeException java.lang.RuntimeException: EOF while reading> |
| 18:15 | justin_smith | ,(let [m {:a nil}] (and (contains? m :a) (nil? (m :a)))) |
| 18:15 | clojurebot | true |
| 18:15 | SagiCZ11 | whats wrong with my version? |
| 18:16 | justin_smith | multiple lines |
| 18:16 | johnwalker | why is the use of :pre and :post idiomatic compared to assert ? |
| 18:16 | SagiCZ11 | justin_smith: thanks |
| 18:17 | johnwalker | there doesn't appear to be a way to add messages to them |
| 18:18 | gfredericks | johnwalker: there's a clojure-dev post about that recently; I agree it's a big drawback |
| 18:18 | johnwalker | ahh, thats good to hear |
| 18:33 | lpvb | what happens if I put an (int-array) into an atom and mutate the array? |
| 18:34 | JohnTalent | Caused by: java.lang.NullPointerException: core.clj:49 cljs.core/import-macros[fn] |
| 18:35 | jeremyheiler | lpvb: try it out in a repl |
| 18:35 | justin_smith | lpvb: you get an atom with a mutated array in it, I think ##(let [a (int-array 3 0) t (atom a)] (aset a 1 42) (into [] @t)) |
| 18:35 | lazybot | ⇒ [0 42 0] |
| 18:37 | JohnTalent | goddamned bugs. it's looking for clj when i want cljs |
| 19:47 | scheafer | hi folks. anybody familiar with cgrand's spreadmap library? |
| 19:48 | scheafer | i'm trying to read a named sheets from a workbook. i can't find the proper incantation |
| 19:52 | supersym | scheafer: (.getName wb ref) ? |
| 19:54 | scheafer | supersym: IllegalArgumentException No matching method found: getName for class net.cgrand.spreadmap.SpreadSheet |
| 19:54 | supersym | EvaluationWorkbook |
| 19:55 | supersym | would be the type to do it on I guess |
| 19:55 | supersym | https://github.com/cgrand/spreadmap/blob/master/src/net/cgrand/spreadmap.clj |
| 19:55 | supersym | im not too familiar with the whole reify deal but its a concrete implementation of abstract concept from what I learned sometime ago |
| 19:56 | supersym | but the source shall show you the way and perhaps a little tinkering that is :) |
| 19:56 | scheafer | thanks :) i've scanned the source but couldn't find a quick way to construct an evaluation workbook |
| 19:57 | supersym | well personally what I can make up from it this might not be intented to do so |
| 19:57 | supersym | e.g. your supposed to end up with the final form and workbook is afteral private |
| 19:58 | supersym | I do take it you feed it 2 params? |
| 19:59 | supersym | ok I see now |
| 20:00 | supersym | SpreadSheet is the final type indeed, getter and also workbook are application internal use only and so not a public API for yoy |
| 20:00 | scheafer | i think i'll open an issue... thx! |
| 20:10 | supersym | yeah... the french software isnt very familiar for its user-friendliness nor documenting in human readable format what stuff does :P |
| 20:12 | supersym | Im just running it in my own windows lighttable environment now to see how you are supposed to pull that data out of teh main objects |
| 20:12 | supersym | (sheet-index spreadmap Valueable SheetMisc ->SpreadSheet value formula-tokens CellMisc fm=) are publics anyway so those should be able to do it, or it isn't possible |
| 20:15 | blur3d | justin_smith: I pushed the arduino dashboard project I’ve been working on to github. https://github.com/blakejakopovic/testdrive |
| 20:33 | justin_smith | blur3d: cool |
| 20:34 | blur3d | justin_smith: It’s still just clojuresript->javascript, but I’m working on a few things that will help it move to node based |
| 20:36 | blur3d | the fimata library will be converted to cljx, so it will support clojurescript, and it is getting support for different types of adapters (serial/tcp.. both java based and nodejs) |
| 20:36 | blur3d | the Arduino Firmata library is getting a few required patches, and also adding support for the Spark Core device |
| 20:37 | blur3d | I’ve also ordered a Beaglebone.. so I can play with that also |
| 20:37 | justin_smith | very nice, yeah |
| 20:38 | justin_smith | with beagle bone the sensors and the web server could all be on the same board |
| 20:38 | blur3d | Basically, I hope to keep the dashboard fairly generic.. so it will just be a dumb terminal.. and as long as you send it messages with the right format, it should work fine |
| 20:38 | blur3d | https://github.com/blakejakopovic/TestDrive/blob/master/src/cljs/testdrive/core.cljs#L255 |
| 20:39 | blur3d | yeah, that would be very nice. |
| 21:54 | prachetasp | hi does anyone know how to use a keyword that has parentheses in it |
| 21:55 | prachetasp | i am using jdbc to get the last inserted record and I get back {:last_insert_id() 1111} |
| 21:56 | prachetasp | I'm planning on just destructuring it but it made me curious whether it was possible to have parentheses in a keyword |
| 21:58 | justin_smith | ,(keyword "foo()") |
| 21:58 | clojurebot | :foo() |
| 21:58 | justin_smith | yup |
| 21:58 | prachetasp | @justin_smith thanks! |
| 21:59 | prachetasp | duh... smh |
| 21:59 | justin_smith | so you can't use that for destructuring, but you can do (get m (keyword "foo()")) |
| 21:59 | prachetasp | or ((keyword "foo()") m) |
| 22:00 | prachetasp | is there any reason to use get? |
| 22:01 | justin_smith | it's more explicit - if neither my keyword or my map is a literal, I like to use get |
| 22:01 | justin_smith | but that's a style preference, of course |
| 22:02 | prachetasp | makes sense |
| 22:02 | prachetasp | thanks |
| 22:33 | rhg135 | not completely style preference, using get can prevent NPEs |
| 22:36 | brehaut | ,(:foo {} 0) |
| 22:36 | clojurebot | 0 |
| 22:36 | brehaut | ,({} :foo 0) |
| 22:36 | clojurebot | 0 |
| 22:37 | amalloy | only if there's any possibility that the thing you're looking up could be nil, rhg135. and if what you're looking up is accidentally nil, an NPE is not the worst thing that could happen |
| 22:37 | JohnTalent | what does ^{} mean? |
| 22:37 | brehaut | JohnTalent: assign the map {} as meta data to the next form read |
| 22:38 | JohnTalent | form read? |
| 22:38 | brehaut | the s-expression structures (forms) read by the reader before they are evaluated |
| 22:39 | JohnTalent | ok |
| 22:39 | JohnTalent | thanks |
| 22:39 | brehaut | ,(read-string “(foo :bar 1)”) |
| 22:39 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: “ in this context, compiling:(NO_SOURCE_PATH:0:0)> |
| 22:39 | amalloy | brehaut: the smart quotes. it's like 1998 all over again |
| 22:39 | brehaut | amalloy: yeah no idea how that happened. |
| 22:40 | amalloy | are you using microsoft word as your irc client, maybe? that could do it |
| 22:40 | brehaut | haha |
| 22:40 | brehaut | no im using colloquay which ive used for years with out that madness |
| 22:40 | brehaut | it did recently update though' |
| 22:42 | talios | people still use colloquay? :) |
| 22:42 | brehaut | no i just pretend to |
| 22:42 | brehaut | i dont want to own up to using irssi |
| 22:43 | talios | oh wait - brehaut's not people, soilent green is |
| 22:43 | talios | at least use weechat from the console man :) |
| 22:43 | brehaut | i dont need to be macho about my IRC usage |
| 22:46 | amalloy | brehaut: we should start a club: people who use irc clients designed for little kids |
| 22:46 | brehaut | amalloy: lol :) |
| 22:47 | catern | baby's first irc client |
| 22:47 | brehaut | an app that doen't actually connect, but uses markov generators to randomly abuse you and occasionally answer questions with non-sequiters |
| 22:50 | rhg135 | hmm |
| 22:51 | rhg135 | challange accepted |
| 22:54 | kristof | this is a bizarre conversation to walk into. |
| 22:55 | talios | not the strangest I've seen :) |
| 22:57 | johnwalker | does anyone know of a java project with insane dependencies ? |
| 22:57 | johnwalker | i'm looking to stress test leiningen |
| 22:58 | johnwalker | tjd and i ran into a stackoverflow working with particularly bad corporate java |
| 23:00 | danielcompton | I'm trying to create a java Keystore$SecretKeyEntry but I'm not sure how to access the inner class correctly |
| 23:00 | kristof | inner classes... *shudder* |
| 23:01 | danielcompton | I get CompilerException java.lang.ClassNotFoundException: java.security.Keystore$SecretKeyEntry, when I try |
| 23:01 | brehaut | im no java expert, but arent inner classes inner for a reason? |
| 23:01 | rhg135 | nope |
| 23:01 | danielcompton | brehaut: I agree, however I think they're required to store a secret key in a java keystore. http://docs.oracle.com/javase/7/docs/api/javax/crypto/SecretKeyFactory.html#getInstance(java.lang.String) |
| 23:02 | danielcompton | brehaut: the sample code shows it doing that (correct link: http://docs.oracle.com/javase/7/docs/api/java/security/KeyStore.html) |
| 23:03 | amalloy | brehaut: inner classes aren't necessarily private |
| 23:03 | brehaut | amalloy: well that would be typically java wouldnt it |
| 23:04 | brehaut | i mean, i can understand that you might pass instances of them around |
| 23:04 | amalloy | danielcompton: is there anything specific you're having trouble with? that sample code all looks pretty standard to translate to clojure, at first glance |
| 23:04 | danielcompton | amalloy: to call it in Clojure, I did (java.security.Keystore$SecretKeyEntry. myks mysecretkey) |
| 23:04 | danielcompton | amalloy: does that look right? |
| 23:05 | amalloy | i only see one parameter for that constructor. what do you imagine the second is going? |
| 23:06 | kristof | rhg135: I love the implication of that. |
| 23:06 | amalloy | ie, http://docs.oracle.com/javase/7/docs/api/java/security/KeyStore.SecretKeyEntry.html#KeyStore.SecretKeyEntry(javax.crypto.SecretKey) |
| 23:07 | justin_smith | I see two constructors - secretkey or secretkey, attributeset |
| 23:07 | danielcompton | amalloy: I thought I needed to pass the outer class, as the outer class isn't static |
| 23:07 | justin_smith | oh, I was looking at security, not crypto, never mind |
| 23:07 | mthvedt | danielcompton: that’s only if the inner class isn’t static |
| 23:08 | danielcompton | amalloy: it doesn't work taking away myks either |
| 23:08 | mthvedt | these code examples suggest you might need to import the inner class |
| 23:08 | mthvedt | before clojure likes the constructor |
| 23:08 | amalloy | mthvedt: no |
| 23:08 | mthvedt | but that’s just a wild guess. |
| 23:08 | danielcompton | I've imported the inner class too |
| 23:09 | amalloy | danielcompton: you may have any number of *other* problems, but the only thing i can tell from "here is a line of code, it doesn't work" is that you definitely don't want to pass the keystore argument in |
| 23:09 | danielcompton | amalloy: I'll put together a failing example other people can run which might reveal the problem |
| 23:19 | mthvedt | danielcompton: wild guess #2, maybe your import is wrong. that can also cause classnotfound |
| 23:27 | danielcompton | amalloy: rubber duckying it in the repl seems to have fixed it. It works for me now, not sure what I had typed wrong that was causing the issues |
| 23:28 | danielcompton | Thanks |