2015-04-05
| 00:09 | sobel | is there a popular wrapper for windows executable jars? i'd rather not have to supply script-wrapper. |
| 00:23 | TEttinger | sobel: I use packr. it has issues with recent versions that have been difficult to figure out, though. do you need an installer? |
| 00:23 | TEttinger | $google lein-packr |
| 00:23 | lazybot | [Could not transfer artifact issue: ReasonPhrase Forbidden when lein ...] https://github.com/technomancy/leiningen/issues/1825 |
| 00:23 | TEttinger | hm |
| 00:24 | justin_smith | funny that that issue would have more google juice than the lib itself |
| 00:24 | TEttinger | https://github.com/tommyettinger/lein-packr |
| 00:25 | TEttinger | it's not even the right lib, probably due to autocorrect |
| 00:25 | justin_smith | ahh |
| 00:25 | TEttinger | well I actually could use someone testing my packr plugin for lein |
| 00:25 | TEttinger | it also will bundle JREs for mac and linux 64-bit if you ask it to |
| 00:27 | TEttinger | the issue with the java project it uses is here, https://github.com/libgdx/packr/issues/33 |
| 00:28 | TEttinger | there's some kind of weirdness with how they pass args to the VM that is incompatible with uberjars |
| 00:32 | TEttinger | an older version works OK though, so I use that |
| 00:37 | sobel | TEttinger: i'm not sure yet. i know i want an executable package but i'm not sure whether it needs its own installer or not yet. |
| 00:38 | sobel | i probably won't setup a windows VM to test it today but as early as monday i may do that |
| 00:40 | TEttinger | sobel, the nice thing about that lein-packr I put together is it can be run on linux or mac, at least in theory, and build a windows exe |
| 00:52 | sobel | i found another package that builds an executable for systems that use shell-magic. that is apparently easy. windows is always the odd on out, isn't it, though? |
| 00:53 | justin_smith | sobel: once upon a time that was a good thing for windows, now they are trying to turn around on that but it will be a while |
| 06:10 | zapho53 | I have a Liberator REST api running on localhost:3000. I want to host static files which consume the REST api without resorting to JSONP but don't want the static files served from the REST api. Is this possible? |
| 06:12 | expez | https://gist.github.com/a55169701a4bc0b515c1 this macro doesn't catch the exceptions, they just bubble all the way up. How come? |
| 06:52 | sobel | justin_smith: i hear that, and i laugh at the beheomiath trying to emulate its slower, much less funded open-source competitors |
| 06:53 | sobel | too bad zapho53 left so quick. |
| 10:57 | sobel | hey clojurists: i'm sorta looking for a clojure-based OSS app that i might build my skills by contributing to. opinions here are worth more than a google search. |
| 10:57 | arrubin | sobel: Any particular areas of interest? |
| 10:57 | catern | argh, clojure |
| 10:57 | sobel | i say app, because i have a much easier time tuning in to user/domain needs than core library needs (especially in a new-to-me language environment) |
| 10:57 | catern | I would like you to have types |
| 10:58 | catern | if only so I don't mess up with the arity of functions |
| 10:59 | sobel | arrubin: ya know, i'm interested in a lot of domains. Overtone has already made my list, because i like music and sound, for example. |
| 10:59 | sobel | arrubin: i don't have major exclusion criteria that i can think of |
| 11:00 | sobel | catern: there is a type system when you really need type safety |
| 11:00 | catern | i'm aware |
| 11:01 | sobel | it doesn't meet your needs? |
| 11:01 | catern | no |
| 11:02 | catern | types are obviously objectively superior, but they're difficult to put in a lisp without weirdifying the syntax |
| 11:02 | sobel | i had a nominally rocky transition from strict type based signatures to combined arity-and-type (under postgresql) and eventually to arity-only with lisp |
| 11:02 | sobel | i can't agree that they are objectively superior. there is plenty that strong typing frustrates. |
| 11:03 | sobel | but when they're a necessary part of the language, you may as well lean on them hard for all they're good at. |
| 11:03 | sobel | i do |
| 11:03 | arrubin | sobel: Incanter? |
| 11:04 | sobel | arrubin: possibly interesting. i might be even more interested if there's a GIS/map project. |
| 11:05 | catern | sobel: I'm just curious, what was this "strict type based signature" language you were using? |
| 11:05 | arrubin | sobel: I think that the options for full applications is going to be limited. There are far more libraries. |
| 11:05 | sobel | catern: java, C++ |
| 11:05 | arrubin | s/is going/are going/ |
| 11:06 | sobel | arrubin: i know |
| 11:06 | catern | sobel: yeah, so not really "strict type based", more like "really horrible type systems that are badly designed" |
| 11:06 | catern | not all type systems are alike! |
| 11:06 | sobel | catern: i quit splitting that hair 10 years ago, but yeah |
| 11:08 | sobel | loose typing bothers some people more than others. it's just another tool with tradeoffs some don't fully get. |
| 11:11 | tomjack | mustn't the hair remain split when evaluating or building new programming languages? |
| 11:13 | tomjack | or can you maybe rationally quit splitting the hair forever by a universally-quantified argument about all possible type systems of a certain large class? |
| 11:13 | sobel | tomjack: valid point, but i was being pretty casual about what i don't do anymore: strict typing isn't "horrible" to me, but i do consider design of type systems |
| 11:14 | sobel | it's a matter of pragma not reason |
| 11:14 | tomjack | yeah, until you see something interesting and seemingly practically useful, no reason to split the hair :) |
| 11:15 | sobel | it was a lot more interesting when i did not understand a) FP, b) data, c) databases |
| 11:17 | sobel | before those things, i had some confidence i would eventually understand OO well enough to write it fluently. that NEVER happened. OO was a scam. i am here because Spring used reflection to knock down some of my frustrations but eventually I figured out I just wanted FP. |
| 11:18 | sobel | so i'm definitely in the dynamic camp these days but i do remember how much i got out of using type safety to enforce design correctness. it was a great lesson that i try to re-apply with FP but it's not a 1:1 match. |
| 11:19 | sobel | i'd be curious if anyone else had a similar pattern of migration from OO to Lisp. |
| 11:19 | tomjack | interesting, it's the opposite for me. FP (along with my utter lack of interest in OO) drives my interest in type systems |
| 11:19 | tomjack | during OO days I migrated to dynamic types, then FP made me interested in static again :) |
| 11:19 | sobel | i wanted to compose with objects but found them too heterogeneous, and didn't really have anything motivating me to do the science (CS) |
| 11:20 | tolstoy | sobel: I kept writing "bad" OO by separating data objects from behavior objects (as I call em). |
| 11:20 | tomjack | that's bad OO? I still try to do that when forced to write OO stuff |
| 11:20 | tolstoy | That's why I scare quoted it. |
| 11:20 | tolstoy | Colleagues would say, "This isn't very OO." |
| 11:21 | tolstoy | Months later, they'd do the same thing as me. Much easier to maintain. |
| 11:21 | sobel | my gripe with OO was too many patterns for things that should be reusable behaviors, but can't be, because type safety. |
| 11:21 | sobel | SO much fits under that umbrella-gripe. |
| 11:21 | justin_smith | sobel: I'd say more "because OO is a bad abstraction" - the ml languages can do nice things with reusable functional abstraction and types |
| 11:22 | justin_smith | ml family, with haskell as a distant cousin |
| 11:22 | sobel | catern: i quit splitting that hair 10 years ago, but i have little positive to say about the C++/Java family of OO. |
| 11:22 | sobel | uh |
| 11:22 | tolstoy | There's a few folks who implemented an OO system on top of Clojure in about 100 lines. |
| 11:22 | sobel | holy paste buffers |
| 11:22 | tomjack | (tolstoy: ah, heh, yeah. many of my colleagues who are still on the OO wagon think that is "good OO" though. I think word hasn't fully trickled down from the OO commanders to the trenches yet) |
| 11:22 | tolstoy | I love the idea of using OO only when it suits, rather than a full on paradigm. |
| 11:23 | tolstoy | tomjack: It just made more sense for me to have a Database class that produced value objects, rather than a bunch of DAO objects. |
| 11:24 | sobel | databases are a classic problem for application devs. the database is not a domain. |
| 11:24 | tolstoy | tomjack: Easier to find out where the queries were, easier to morph, maybe not so good if the app was too huge. But that's the thing. Big app problem trump languages. |
| 11:24 | sobel | DAOs are for grouping access by domain. it should be application-level. |
| 11:24 | sobel | but what i see a lot of are DAOs that cover the entire set of domains the application might need. |
| 11:25 | tolstoy | sobel: I ended up using just one DAO. |
| 11:25 | sobel | or i see an ORM used to manufacture a bunch of crappy quasi-database-enabled application objects. that was really common when i supported Ruby devs. |
| 11:26 | sobel | tolstoy: lots of apps only really need one DAO. it's necessarily complex if an app really works in 2+ distinct domains. |
| 11:27 | tomjack | I found this quote from http://www.datomic.com/rationale.html amusing: "... This leads to the proverbial impedance mismatch. The problem, though, isn't that databases are insufficiently object-oriented, rather, that applications are insufficiently declarative." |
| 11:27 | sobel | i agree. i could say more, but don't have to. :) |
| 11:29 | sobel | vaguely related: my application designs are cleaner and more successful since i added SQL (performant, normalized designs with remote facades) to my toolbox |
| 11:29 | tolstoy | I never want to argue against something like Haskell, but I always get frustrated trying to read a simple JSON document in it. ;) |
| 11:30 | justin_smith | tolstoy: there's a reason I am here and not on #haskell, but I figure if we are going to disparage strong typing, haskell is the fair target, not C++ |
| 11:30 | sobel | i think a lot of OO developers have exactly one hammer and it's not relational |
| 11:30 | sobel | fwwi i don't hold up C++ as anything but a target these days |
| 11:32 | tolstoy | justin_smith: I agree. |
| 11:32 | ane | c/c++ aren't strongly typed.. 'a' is both a valid int and a char |
| 11:35 | tomjack | I think any time someone says "* typed" you basically have to ignore the * and just figure out from context what they mean :) |
| 11:36 | mavbozo | regarding relational database such as MySQL, after using clojure for a while, i'm beginning to design my database access more like a rest api with a single endpoint and a single uri |
| 11:37 | tolstoy | mavbozo: If I understand you right, that's what I ended up doing. Looks totally wrong, but much, much easier to maintain. |
| 11:38 | tolstoy | For me, it felt like my struggles to get anything done amid fluid requirements drove me to that solution. |
| 11:38 | mavbozo | i totally gave up designing data object whose storage is outside my application process |
| 11:38 | mavbozo | better treat it like another rest api call with rest api failure handling |
| 11:39 | tolstoy | Yep. |
| 11:39 | tolstoy | Objects that have nice little methods on them are fine, I guess, but you get fooled when those methods do network requests. |
| 11:40 | justin_smith | yeah, the network cannot and should not be implicit or transperent |
| 11:40 | justin_smith | it has failure modes that local code just doesn't |
| 11:40 | mavbozo | another hard lesson i got from clojure, make IO explicit and separate |
| 11:41 | tolstoy | Yeah. That was a HUGE problem with SOAP generated objects. |
| 11:41 | tolstoy | Your design-brain can't help by think that calling a method will always return. |
| 11:48 | mavbozo | on a mass scale, almost every mvc web-framework out there gives tutorial/quickstart where the M in MVC is always your data and its persistence and the data is coded as class |
| 11:53 | mavbozo | so, when i watched Rich video where he said something like "just use map dammit!", I said "Huh?!" |
| 11:55 | mavbozo | after all those years of conditioning, it's hard to accept that I don't have to make a class to represent a certain data |
| 11:59 | arrubin | mavbozo: Stuart Sierra discusses that a bit in this talk: http://www.infoq.com/presentations/data-visibility-abstraction |
| 12:01 | mavbozo | arrubin, thank you. I'll definitely watch it. |
| 12:06 | sobel | mavbozo: a REST API is just another way to access a domain, and a DAO is the pattern I would use for that. it doesn't matter whether the data comes via HTTP, SQL, flat file, hardcoded test data, or whatever. |
| 12:08 | sobel | the whole point of making a DAO is to translate the domain into your application's architecture |
| 12:08 | sobel | the mistake i see too often is holding the database or databases in general as a domain. |
| 12:11 | sobel | if you don't know what your domain is, wrapping it in JSON changes little ;) |
| 12:11 | tomjack | what's a DAO look like in Clojure terms? |
| 12:11 | tomjack | I mean, specifically your kind of DAO |
| 12:12 | tomjack | I presume it's gonna be a DAX for some X which isn't O? |
| 12:12 | sobel | i think it would just be a library in lieu of an object |
| 12:12 | tomjack | right, cool, then I can read what you said above without it making me unhappy :) |
| 12:13 | justin_smith | haha |
| 12:13 | tomjack | presuming the library is mostly pure fns |
| 12:13 | sobel | it's more political for high-formality languages like java where you might need to publish enums, interfaces, and helper objects to make your domain library complete |
| 12:14 | sobel | tomjack: it's about isolating the transformations from what you get from your database to what you actually need to use in your app. i doubt i'm telling you anything new. |
| 12:14 | sobel | but i promise, when i address a ruby crowd, it is news. |
| 12:15 | sobel | (spent 4 years supporting Rails users, have probably seen everything by now!) |
| 12:16 | sobel | but more importantly, a DAO isn't a general db helper. you use a db helper to implement a DAO. it should take db-only code out of the app. |
| 12:16 | sobel | the ActiveRecord noobs i supported never did make that connection |
| 12:21 | justin_smith | NDM - nihilist domain modeling |
| 12:22 | justin_smith | (def world nil) |
| 12:22 | justin_smith | done |
| 12:22 | justin_smith | oh wait, even better: (def world (System/exit 0)) |
| 13:26 | sobel | (undef world) |
| 13:30 | mavbozo | sobel, please recommend me a good reference for DAO design method |
| 14:27 | noncom|2 | i have a lein project with a dependant project in checkouts, however it seems that lein cannot see the classes under :java-source-paths of the dependant project.. is this ok? |
| 14:28 | justin_smith | noncom|2: wouldn't the classes be compiled into the jar? |
| 14:28 | clojurebot | No entiendo |
| 14:28 | justin_smith | oh, checkout, right |
| 14:30 | noncom|2 | yeah, but hmmm, looks like the situation is not like i have described.. maybe i have missed somehting.. |
| 14:33 | noncom|2 | sorry, i had a compilation issue in the dep proj |
| 14:33 | noncom|2 | but lein is good too: it does not say about it, it silently fails |
| 14:33 | justin_smith | interesting |
| 15:21 | noncom|2 | justin_smith: also, it is impossible to force lein recompile java files of a dep proj.. %) |
| 15:21 | wirrbel | I have an issue with transit and prismatic schema. Transit's read returns a map that I think matches the schema, yet prismatic schema complains that keys are not identical |
| 15:22 | wirrbel | {:non-native disallowed-key, :native disallowed-key, :non-native missing-required-key, :native missing-required-key} |
| 15:22 | wirrbel | so from the console output the keys seem identical |
| 15:26 | tomjack | hrmmm? |
| 15:27 | wirrbel | so the problem is that I require a key :native in the schema, and it is present in the map |
| 15:27 | wirrbel | the error message is contradictory |
| 15:27 | tomjack | it looks to me like there are two :native keys in the map |
| 15:27 | tomjack | which should be impossible |
| 15:28 | wirrbel | this is not a map but the error message |
| 15:28 | tomjack | still looks impossible :) |
| 15:28 | tomjack | unless, of course, the keys aren't identical, which must be the case! |
| 15:28 | wirrbel | thats why i am asking |
| 15:29 | wirrbel | is there a way to print with more detail? |
| 15:29 | tomjack | are you in clj or cljs? |
| 15:29 | wirrbel | clj |
| 15:29 | wirrbel | I have the impression that some space/unicode character could be there |
| 15:30 | tomjack | first thing I would do is make sure they're really all clojure.lang.Keyword by checking e.g. (map class (keys x)) |
| 15:31 | wirrbel | ah |
| 15:31 | wirrbel | they could be strings instead of symbols? |
| 15:31 | tomjack | maybe, depending on how they're being printed |
| 15:32 | tomjack | if you're at a repl and you just eval (keys x) you should be able to tell if they're strings |
| 15:34 | tomjack | if they're all Keyword and you want to check for weirdness in the name, you can use (name k), and maybe look at e.g. (seq (.getBytes (name k))) ? |
| 15:37 | gfredericks | wirrbel: keep in mind "string" "symbol" and "keyword" are three distinct, similar things |
| 15:38 | wirrbel | hmm, I also may have misunderstood transit |
| 15:43 | wirrbel | I think I got it, I thought transit was mapping json to clojure datastructres directly, it seems to be more of a way to serialize clojure data in a json-compliant format |
| 15:44 | wirrbel | so I should really only use it as an intermediate format and not use it to parse arbitrary json |
| 16:19 | irctc | test |
| 16:34 | Guest82897 | Hi everyone! I've got a question regarding printing function definitions to strings. E.g. I've got a function (fn [x] (inc x)) and I want to print it as the source string |
| 16:34 | Guest82897 | what's the best way to do that? |
| 16:39 | mavbozo | ,(doc source) |
| 16:39 | clojurebot | "([n]); Prints the source code for the given symbol, if it can find it. This requires that the symbol resolve to a Var defined in a namespace for which the .clj is in the classpath. Example: (source filter)" |
| 16:39 | mavbozo | ,(source max) |
| 16:39 | clojurebot | Source not found\n |
| 16:46 | mavbozo | ##(source +) |
| 16:46 | lazybot | java.lang.RuntimeException: Unable to resolve symbol: source in this context |
| 16:46 | mavbozo | ,(source +) |
| 16:46 | clojurebot | Source not found\n |
| 16:47 | Guest82897 | yeah, found that, but it takes a symbol that must be defined |
| 16:47 | gfredericks | Guest82897: by "source string" do you really need the original string or would the code-data be sufficient? |
| 16:48 | Guest82897 | the code data would be better tbh |
| 16:48 | gfredericks | ,(defmacro my-fn [& args] `(vary-meta (fn ~@args) assoc :fn-form '~&form)) |
| 16:48 | clojurebot | #'sandbox/my-fn |
| 16:48 | gfredericks | ,(def add-five (my-fn [x] (+ x 5))) |
| 16:48 | clojurebot | #'sandbox/add-five |
| 16:48 | gfredericks | ,(add-five 20) |
| 16:48 | clojurebot | 25 |
| 16:48 | gfredericks | ,(-> add-five meta :fn-form) |
| 16:48 | clojurebot | (my-fn [x] (+ x 5)) |
| 16:49 | gfredericks | i.e., you write your own fn macro and use that |
| 16:49 | noncom|2 | whats the way to force lein to recompile java classes in a checkouts dep? |
| 16:49 | gfredericks | noncom|2: does `lein do clean, javac` not work? |
| 16:50 | gfredericks | I have no idea how checkouts and java classes interact, it might be completely non-functional |
| 16:50 | Guest82897 | gfredericks: thanks for your help, think I understand better now :) |
| 16:50 | gfredericks | I thought checkouts were just a classpath hack |
| 16:51 | noncom|2 | yeah, clean + javac would work, just as running lein on the dep :) but i thought there were a one-click solution probably |
| 16:53 | gfredericks | alias `lein dcj` to `lein do clean, javac` |
| 16:53 | mavbozo | (inc gfredericks) |
| 16:53 | lazybot | ⇒ 133 |
| 16:54 | arrdem | $grim clj::clojure.core/concat |
| 16:55 | mavbozo | $grim clj::clojure.core/future-cancel |
| 16:55 | arrdem | mavbozo: looks like lazybot hasn't been redeployed since that PR was merged |
| 16:56 | noncom|2 | yeah |
| 16:56 | noncom|2 | what's the best way to find index of an element in a [] ? |
| 16:56 | noncom|2 | (with a predicate) |
| 16:57 | noncom|2 | take-while + count ? |
| 16:57 | mavbozo | arrdem: oh :) i have no idea what would happend if i type $grim |
| 16:58 | arrdem | mavbozo: https://github.com/Raynes/lazybot/blob/master/src/lazybot/plugins/grimoire.clj#L33 |
| 16:59 | arrdem | TL;DR should make lazybot print the Grimoire URL for the given platform and ns qualified symbol |
| 17:00 | mavbozo | arrdem: that's cool |
| 17:45 | gfredericks | noncom|2: ##(first (keep-indexed #(if (= :foo %2) %1) [:bar :baz :foo :tom])) |
| 17:45 | lazybot | ⇒ 2 |
| 17:46 | noncom|2 | wow |
| 18:38 | cfleming | Is ~/.lein/plugins still a thing in lein 2.x? |
| 18:46 | gfredericks | cfleming: I don't know what kind of backpat features exist but I have no knowledge of that being a thing otherwise |
| 18:46 | cfleming | gfredericks: Yeah, looking at the code I don't think it exists any more |
| 18:46 | gfredericks | I'm not a Super Certified Limeagain Eggs Bert though |
| 18:46 | cfleming | There's a super certification for that? |
| 18:46 | cfleming | TIL |
| 18:47 | joe128 | hi |
| 18:47 | gfredericks | cfleming: you have to be certified to authoritatively make negative claims like that |
| 18:48 | cfleming | gfredericks: So reading the internet, it appears that they must give those certifications out with cornflakes. |
| 18:48 | joe128 | are there a lot of clojure jobs |
| 18:53 | gfredericks | cfleming: that's where I got mine at least |
| 18:53 | gfredericks | wait I was claiming to not have one |
| 18:53 | gfredericks | crap |
| 18:53 | cfleming | You beat me to it |
| 18:54 | arrdem | lol |
| 18:54 | arrdem | ##(meta ^:markdown "foo bar") |
| 19:48 | arrdem | gfredericks: do you or does test.check have a generator for valid Clojure names? |
| 19:56 | gfredericks | arrdem: if you can make a regex for that I do |
| 19:57 | hyPiRion | arrdem: Clojure names? Like symbols? |
| 19:57 | arrdem | hyPiRion: da |
| 19:57 | gfredericks | test.check has something for symbols but I doubt it's exactly what the reader accepts if that's what you want |
| 19:57 | gfredericks | I could be wrong though |
| 19:57 | gfredericks | about it not being exactly right I mean |
| 19:57 | arrdem | yeah... okay |
| 19:58 | gfredericks | it's probably like alphanumeric w/o initial numbers or something basic like that |
| 19:58 | hyPiRion | #"[^@~(),\\;`\[\]{}~^\s:#/\'\d]((:?[^@~(),\\;`\[\]{}~^\s:])*[^@~(),\\;`\[\]{}~^\s:/])?" is pretty close I think |
| 19:58 | hyPiRion | but there's been some time since I verified that one |
| 19:58 | arrdem | could probably crowbar it out of Reader.. |
| 19:59 | arrdem | (the regex instance that is) |
| 19:59 | gfredericks | and then you just plug that into https://github.com/gfredericks/test.chuck#string-from-regex |
| 20:07 | cfleming | arrdem: https://www.refheap.com/99257 |
| 20:11 | gfredericks | that there looks like it might be a use case for character class intersection maybe |
| 20:11 | gfredericks | if you were to translate it to a regex I mean |
| 20:11 | cfleming | Yeah, I have the equivalent in regex form in my lexer somewhere |
| 20:40 | TEttinger | ,(re-find #"[^@~(),\\;`\[\]{}~^\s:#/\'\d]((:?[^@~(),\\;`\[\]{}~^\s:])*[^@~(),\\;`\[\]{}~^\s:/])?" "\ufeff") |
| 20:40 | clojurebot | ["" nil nil] |
| 20:41 | TEttinger | ,(ffirst (re-find #"[^@~(),\\;`\[\]{}~^\s:#/\'\d]((:?[^@~(),\\;`\[\]{}~^\s:])*[^@~(),\\;`\[\]{}~^\s:/])?" "\ufeff")) |
| 20:41 | clojurebot | \ |
| 20:41 | TEttinger | yep! |
| 20:41 | TEttinger | BOM is a valid name by that, and by clojure |
| 20:41 | TEttinger | (inc gfredericks) ; being able to generate strings from regexes is quite cool |
| 20:41 | lazybot | ⇒ 134 |
| 20:42 | TEttinger | (inc hyPiRion) ; I hope you didn't type that regex from memory |
| 20:42 | lazybot | ⇒ 73 |
| 20:52 | netroby | ,(+ 3 4) |
| 20:52 | clojurebot | 7 |
| 20:53 | justin_smith | ,(+) |
| 20:53 | clojurebot | 0 |
| 20:53 | netroby | Oh, how to call lazybot? |
| 20:53 | netroby | (+ 1 2); |
| 20:53 | clojurebot | 3 |
| 20:53 | justin_smith | &(+ 3 4 5) |
| 20:53 | lazybot | ⇒ 12 |
| 20:53 | netroby | &(* 5 6) |
| 20:53 | lazybot | ⇒ 30 |
| 20:54 | netroby | Nice. thanks you guys |
| 20:54 | justin_smith | &(*) |
| 20:54 | lazybot | ⇒ 1 |
| 20:54 | TEttinger | huh |
| 20:56 | justin_smith | ? |
| 21:00 | TEttinger | justin_smith, odd that he just quite after learning how to use the bots |
| 21:00 | TEttinger | *quit |
| 21:00 | justin_smith | ahh |
| 21:01 | justin_smith | obviously he is going to use clojurebot and lazybot to mine buttcoins |
| 21:02 | arrdem | should've prepared an april 1 PR to add dogecoin support |
| 21:02 | TEttinger | to the moon! |
| 21:02 | justin_smith | (inc TEttinger) |
| 21:02 | lazybot | ⇒ 47 |
| 21:03 | arrdem | (inc TEttinger) |
| 21:03 | lazybot | ⇒ 48 |
| 21:03 | arrdem | forecast: not moon |
| 21:05 | TEttinger | Clojure 1.7 introduces some breaking changes as of april 1, 2015. To address the difficulty Java programmers have using parentheses, Clojure now uses the keyword "very " in place of any previous usage of "(", and " wow." in place of ")" . very + 1 2 wow. |
| 21:08 | rpaulo | heh |
| 21:08 | arrdem | very very very wow wow wow |
| 21:09 | arrdem | https://github.com/arrdem/dogeon |
| 21:10 | TEttinger | (inc arrdem) ; wow. |
| 21:10 | lazybot | ⇒ 42 |
| 21:10 | arrdem | (inc beer) |
| 21:10 | lazybot | ⇒ 1 |
| 21:10 | arrdem | (inc doge) |
| 21:10 | lazybot | ⇒ 1 |
| 21:11 | arrdem | I should make SimpleDB pluggable on the serializer just so for shits and giggles I can serialize DBs to DSON and back |
| 21:11 | justin_smith | { and } are replaced with such and wow (the duplicate wows are guaranteed differentiatable, though they do lead to wow placement bugs) |
| 21:13 | justin_smith | [, ] are many and wow |
| 21:31 | enn` | Has anyone else had issues with Github's CDN caching Clojars badges? |
| 21:31 | arrdem | enn`: everyone has |
| 21:32 | justin_smith | do we need any steenking badges?? |
| 21:32 | lazybot | justin_smith: What are you, crazy? Of course not! |
| 21:33 | justin_smith | https://www.youtube.com/watch?v=nsdZKCh6RsU |
| 21:37 | Lewix | I'm looking for a theme or template to document a demo app |
| 21:37 | Lewix | anyone used something like that before? |
| 21:38 | TEttinger | Lewix: is this more of an app or a library? |
| 21:39 | Lewix | TEttinger: an app that is starting small but the intent is to build up a library |
| 21:39 | Lewix | TEttinger: answer to your question: more of a library* |
| 21:39 | TEttinger | well I mean is this something that programmers would use or end-users |
| 21:40 | TEttinger | https://fogus.github.io/marginalia/ is good if you're aiming for programmers and your library is open source |
| 21:42 | Lewix | TEttinger: programmers* |
| 21:43 | Lewix | TEttinger: oh I forgot to mention it's not clojure related* - I just don't wanna have to deal with styling so i was hoping I could find a theme with documentation in mind |
| 21:43 | TEttinger | ah, not sure then |
| 22:18 | fryguy | if i'm in a namespace and I have a symbol referring to another namespace, what is the easiest way to call a function in the other namespace? (trying to set up a runner for project-euler, and figured putting each problem in it's own namespace with a run method would work) |
| 22:18 | justin_smith | fryguy: this is what require is for |
| 22:19 | fryguy | yah i'm using require and it's not seeming to do what I want, let me gist something |
| 22:20 | fryguy | https://gist.github.com/bryanalves/46bfc4576ce6972df21d |
| 22:21 | justin_smith | fryguy: run is not visible during the compilation of run-problem |
| 22:21 | justin_smith | if you need to do it that way, use resolve |
| 22:22 | fryguy | what is require doing for me then if it's not making it visble? |
| 22:22 | justin_smith | fryguy: require does not run when the function is compiled |
| 22:22 | justin_smith | it runs when you call the function |
| 22:22 | justin_smith | the error is caused by the symbol not being in scope when you compile, this is why you need resolve |
| 22:23 | justin_smith | change (run) to ((resolve 'run)) |
| 22:23 | fryguy | yah that just returns a reference to the function though, doesn't actually run it, do I need to call eval or something? |
| 22:23 | justin_smith | no, that calls it |
| 22:24 | justin_smith | extra parens |
| 22:24 | justin_smith | ,((resolve '+)) |
| 22:24 | clojurebot | 0 |
| 22:24 | fryguy | ah, there we go |
| 22:24 | fryguy | is there a better way to do what i'm trying to do? |
| 22:24 | justin_smith | you could use load followed by resolve |
| 22:25 | justin_smith | you pretty much need resolve if you don't know the ns at compilation time |
| 22:26 | justin_smith | fryguy: resolve is much cheaper than eval |
| 22:26 | justin_smith | also less powerful, and it's good to use the least powerful tool |
| 22:39 | justin_smith | ~trolling is http://i.imgur.com/7XYz9Fg.jpg |
| 22:39 | clojurebot | Alles klar |
| 22:42 | lvh | gfredericks: (juxt) sounds like it should be (constantly []) |
| 22:42 | lvh | gfredericks: or is that what you're saying |
| 22:42 | gfredericks | yes |
| 22:42 | gfredericks | ,(juxt) |
| 22:42 | clojurebot | #error{:cause "Wrong number of args (0) passed to: core/juxt", :via [{:type clojure.lang.ArityException, :message "Wrong number of args (0) passed to: core/juxt", :at [clojure.lang.AFn throwArity "AFn.java" 429]}], :trace [[clojure.lang.AFn throwArity "AFn.java" 429] [clojure.lang.RestFn invoke "RestFn.java" 399] [sandbox$eval25 invoke "NO_SOURCE_FILE" -1] [clojure.lang.Compiler eval "Compiler.jav... |
| 22:43 | gfredericks | ((juxt)) would be a nice obfuscation tactic |
| 22:47 | gfredericks | ,((juxt +)) |
| 22:47 | clojurebot | [0] |
| 22:49 | lvh | whaa |
| 22:49 | lvh | oh, right |
| 22:50 | lvh | gfredericks: Is that something that has been actively voted against |
| 22:50 | lvh | gfredericks: Or should we be filing a JIRA ticket |
| 22:51 | gfredericks | no idea |
| 22:51 | justin_smith | ,(= get (apply get ((juxt get get get) get get get))) |
| 22:51 | clojurebot | true |
| 22:52 | justin_smith | that's a decent brain fuck I think |
| 22:53 | Frozenlock | Mom, justin_smith is playing with his functions again! |
| 22:54 | gfredericks | I assume this is what OOP means by getters |
| 22:54 | justin_smith | indeed |
| 22:54 | justin_smith | ~get |
| 22:54 | clojurebot | Pardon? |
| 22:55 | justin_smith | ~get is (= get (apply get ((juxt get get get) get get get))) |
| 22:55 | clojurebot | In Ordnung |
| 22:55 | tclamb | ,(= get (get get get get)) |
| 22:55 | clojurebot | true |
| 22:55 | justin_smith | ,((juxt + * - /) 1 2 3) ; lvh |
| 22:55 | clojurebot | [6 6 -4 1/6] |
| 22:56 | tclamb | ,(nil? (get get get)) |
| 22:56 | clojurebot | true |
| 22:56 | justin_smith | tclamb: yup, I think you've pretty much figured it out :) |
| 22:57 | justin_smith | ,((juxt + * - /) 1 2 3 4) |
| 22:57 | clojurebot | [10 24 -8 1/24] |
| 22:57 | gfredericks | ,((get get get get) (get get get get) (get get get get) (get get get get)) |
| 22:57 | clojurebot | #object[clojure.core$get "clojure.core$get@7d6eca8a"] |
| 22:57 | justin_smith | get fractals |
| 22:59 | lvh | justin_smith: oh, okay, that's pretty consistent I guess |
| 22:59 | lvh | I feel like I only ever have used juxt with keywords, and maps as args |
| 22:59 | gfredericks | ,((fn f [] (if (< 0.4 (rand)) 'get (repeatedly 4 f)))) |
| 22:59 | clojurebot | (get get get get) |
| 22:59 | gfredericks | ,((fn f [] (if (< 0.4 (rand)) 'get (repeatedly 4 f)))) |
| 22:59 | clojurebot | (get get (get get (get ((get ((get get get get) get ((((get # get #) (get get # get) get get) get get ((# # # #) (get get # #) (# get get get) (# get get #))) get get get) get) get get) get get get) ((get get (get get (get get (get get get (get get (get get # #) (# # # get))) get) (get get ((get (# # get #) (get get # get) get) get get (get (get get get get) (get get get get) get)) get)) get) (get... |
| 22:59 | gfredericks | ,((fn f [] (if (< 0.4 (rand)) 'get (repeatedly 4 f)))) |
| 22:59 | clojurebot | get |
| 22:59 | gfredericks | ,(defn getter [] (if (< 0.4 (rand)) 'get (repeatedly 4 getter))) |
| 22:59 | clojurebot | #'sandbox/getter |
| 23:00 | justin_smith | gfredericks: that gives me lots of stack overflow errors |
| 23:00 | gfredericks | ,(getter) |
| 23:00 | clojurebot | (get (get get get get) (((((((((get get get #) get (get get # #) get) get get (get (get get get get) get get)) get get (get (get get (get # get #) get) get ((# get get get) (get get get #) (get # get #) get))) get get get) get get get) get (get get get get) (get ((get get get get) (((get get get get) get ((# get get #) (# get get get) get get) (get get (get # # get) (# # # get))) get ((get get get... |
| 23:00 | gfredericks | how do I make it less biggly |
| 23:00 | justin_smith | hrm |
| 23:00 | gfredericks | ,(defn getter [x] (if (< x (rand)) 'get (repeatedly 4 #(getter (+ x 0.1))))) |
| 23:00 | clojurebot | #'sandbox/getter |
| 23:00 | gfredericks | ,(getter 0.5) |
| 23:00 | clojurebot | get |
| 23:00 | gfredericks | ,(getter 0.5) |
| 23:01 | clojurebot | eval service is offline |
| 23:01 | gfredericks | &(defn getter [x] (if (< x (rand)) 'get (repeatedly 4 #(getter (+ x 0.1))))) |
| 23:01 | lazybot | java.lang.SecurityException: You tripped the alarm! def is bad! |
| 23:01 | gfredericks | consarnit |
| 23:01 | gfredericks | you bots |
| 23:02 | justin_smith | consarnit is a very good lispy mixed oath |
| 23:29 | justin_smith | DAG nabbit is acceptable if you are doing graph algorithms |
| 23:32 | gfredericks | oh man |
| 23:36 | TEttinger | (dag/nab it) |
| 23:39 | lvh | is there some pattern for "these maps are equal but only for the keys I'm explicity specifying, I don't care about anything else" |
| 23:39 | lvh | I guess maybe I kind of want a map of keys to predicate functions |
| 23:39 | lvh | (I am writing a test to see if some headers returned by a handler are sane) |
| 23:39 | justin_smith | I would do (apply = (map #(select-keys % [:keys :that :matter]) inputs)) |
| 23:40 | lvh | yeah, that's what I have |
| 23:41 | lvh | thanks! |