2012-08-31
| 00:02 | cemerick | I'm going to have to write one hella rant after this site is built. |
| 00:02 | cemerick | :-) |
| 00:02 | brehaut | excellent |
| 00:04 | cjfrisz | Oh, macros... |
| 00:13 | nsxt_ | cemerick: what sort of site are you building? |
| 00:15 | cemerick | nsxt_: One of the web variety. :-) |
| 00:16 | nsxt_ | cemerick: aww, fine... understood. :) |
| 00:16 | uvtc | I hear it may reside somewhere on the internet. |
| 00:16 | cemerick | nsxt_: hopefully you'll know all about it soon enough. |
| 00:17 | nsxt_ | cemerick: is it related to your work with clojureatlas? |
| 00:17 | cemerick | nah |
| 00:17 | nsxt_ | (p.s. just in case you don't get enough thank yous for that, here's a hearty pitch) |
| 00:17 | cemerick | aw, thanks :-) |
| 00:19 | wmealing_ | ive heard of those internet websites.. they are the future. |
| 00:20 | cjfrisz | I hear the internet is on computers now |
| 00:21 | amalloy | i think they're being replaced by cloud websites |
| 00:24 | Raynes | amalloy: How do they get those sites all the way up there? |
| 00:24 | uvtc | Cloud-based with a chance of Raynes. |
| 00:26 | wmealing_ | *groan* |
| 00:31 | cbare | noob question: |
| 00:31 | cbare | If I have a bunch of functions. They either return false or a result. I want to apply them sequentially and return the first non-false result. |
| 00:32 | cbare | Is there a construct for that already? |
| 00:32 | tos9 | ,(doc dropwhile) |
| 00:32 | casion | (first (drop-while |
| 00:32 | clojurebot | Titim gan ?ir? ort. |
| 00:36 | cbare | something like this? (first (drop-while #(% my-input) [f g h ... ])) |
| 00:36 | uvtc | I am so spoiled by the Clojure cheatsheet. Wonderful. |
| 00:36 | casion | uvtc: do you know of a 1.4 cheat sheet with popup docs like http://jafingerhut.github.com/cheatsheet-clj-1.3/cheatsheet-tiptip-no-cdocs-summary.html |
| 00:36 | tomoj | &((some-fn :foo :bar :baz) {:bar false :baz 3}) |
| 00:36 | lazybot | ⇒ 3 |
| 00:37 | uvtc | ~cheatsheet |
| 00:37 | clojurebot | Cheatsheets with tooltips can be found at http://jafingerhut.github.com/ . |
| 00:37 | uvtc | :) |
| 00:37 | casion | this is 1.3 though |
| 00:37 | uvtc | Thanks, casion . |
| 00:37 | uvtc | Oh. |
| 00:37 | tomoj | cbare: so ((some-fn f g h) my-input) or ((apply some-fn [f g h]) my-input) |
| 00:38 | casion | I didnt even know about mapv until yesterday because I rely on that too much haha |
| 00:38 | uvtc | casion: No, I only know of the one at clojure.org and the jafingerhut ones with the tooltips. |
| 00:38 | casion | uvtc: I guess I'll look into how jafingerhut put together the 1.3 ones |
| 00:38 | casion | and see if I can make 1.4 |
| 00:39 | uvtc | The tab-completion in the repl also helps. |
| 00:40 | amalloy | some-fn makes me so sad. anyone want to guess what ((some-fn = >) 5 10) returns? |
| 00:40 | cbare | do the functions you give to some-fn have to be predicates? Or can they return composite values? |
| 00:42 | casion | amalloy: why is that confusing? (= 5) is true |
| 00:43 | Scriptor | amalloy: isn't it just a short-hand way to write an or expression? |
| 00:43 | Scriptor | as long as any of the predicates returns true, it does |
| 00:43 | amalloy | casion: because (or (= 5) (> 5) (= 10) (> 10)) is a much less generally-useful function than (or (= 5 10) (> 5 10)) |
| 00:44 | amalloy | and it's much easier to get the former behavior from a some-fn that behaves like the latter, than it is to get the latter from a some-fn that behaves like the former |
| 00:44 | uvtc | I thought you're only supposed to pass single-arg predicates to some-fn. So, it looks odd with `=` in there. |
| 00:45 | amalloy | uvtc: yes, that is the existing behavior of some-fn, which i am arguing is useless |
| 00:49 | casion | amalloy: would you wish it to process pairs or capture all arguments |
| 00:49 | amalloy | huh? |
| 00:50 | casion | like ((some-fn > ) 5 6 7) would be (> 5 6 7) or (or (> 5 6) (>6 7)) |
| 00:50 | casion | obviously they are the same in that context |
| 00:51 | amalloy | none of those, they don't make any sense |
| 00:52 | amalloy | for one function arg, some-fn as it is now is perfectly fine |
| 00:52 | uvtc | amalloy: Not exactly sure what behaviour you'd like to see. |
| 00:53 | amalloy | ((some-fn f g h) a b c) (or (f a b c) (g a b c) (h a b c)) |
| 00:55 | amalloy | ie, for N function args and M "value" args, it should be like an 'or with N clauses, each calling an M-arg function with all the values |
| 00:57 | amalloy | and the existing behavior is not useful at all. the second example on http://clojuredocs.org/clojure_core/clojure.core/some-fn (which you mentioned to me that you added, uvtc) could easily be (some (some-fn even? #(< % 10)) [1 2 3]) |
| 00:58 | amalloy | literally all the current handling of multiple args ever saves you is the characters (some []), whereas my proposed handling could actually make operations simpler |
| 00:58 | Raynes | amalloy: But is it web scale? |
| 00:59 | wmealing_ | ಠ_ಠ |
| 01:01 | cbare | for what it's worth, some-fn seems to do what I wanted, thanks tomoj! |
| 01:15 | casion | amalloy: doesnt juxt do what you want? |
| 01:15 | casion | (or (juxt f g h) a b c)) |
| 01:15 | casion | er, missed a set of parens |
| 01:15 | amalloy | no |
| 01:15 | amalloy | but it's not far, i suppose |
| 01:16 | amalloy | (some identity ((juxt f g h) a b c))? |
| 01:17 | casion | ((juxt f g h) a b c) returns [(f a b c) (g a b c) (h a bc )] which is what I thought you were after? |
| 01:17 | casion | I think I may be mis understanding |
| 01:17 | amalloy | you seem to be attempting to apply 'or in a way that does not work |
| 01:18 | amalloy | which is why i replaced it with some identity |
| 01:18 | casion | ah, I see |
| 01:21 | jebberjeb | In idomatic clojure, are there some guidelines for when to use macros? |
| 01:22 | jebberjeb | Maybe that's not the right way to articulate this... |
| 01:22 | jebberjeb | when should I use macros:) |
| 01:26 | casion | branching macros in clojure still confuse me at times :|, the idea of 'when' or 'and' or 'or' etc.. returning a non-boolean value refuses to stick |
| 01:28 | amalloy | jebberjeb: when you need to evaluate something in a new or non-standard context |
| 01:29 | amalloy | eg, (let [x 1] x) is a macro that evaluates its body, x in a context where there is a local named x bound to 1 |
| 01:29 | amalloy | (when foo bar) is a macro that evaluates its body, bar, only when foo is not truthy |
| 01:34 | tomoj | cljs has :import now too :) |
| 02:32 | ivan | is there any kind of client authentication mechanism for nREPL? |
| 02:35 | ivan | I guess I could combine openssl s_client and a netty listener that checks the client's cert |
| 03:03 | bloudermilk | I've been reading online and I can't seem to find a definitive answer: Are circular dependencies in Clojure a bad idea? Specifically, I'm trying to work with directed graphs |
| 03:04 | amalloy | a circular reference is not possible in an immutable data structure |
| 03:05 | amalloy | so you can't really have a circular dependency in the object graph |
| 03:06 | amalloy | instead, usually you'd have pointers to "labels", rather than to objects themselves: {'a {:data 4, :edges #{'b}}, 'b {:data 10, :edges #{'a}}}, for example |
| 03:20 | bloudermilk | amalloy: Thank you, this makes sense |
| 03:21 | bloudermilk | amalloy: What about with transients? |
| 03:21 | amalloy | not relevant |
| 03:23 | kral | namaste |
| 03:24 | bloudermilk | amalloy: noted |
| 03:24 | augustl | amalloy: never thought about the impssibility of circular refs before, that's awesome |
| 03:25 | bloudermilk | amalloy: Not even with refs? |
| 03:25 | bloudermilk | immutable data is blowing my mind |
| 03:25 | amalloy | *shrug* you can have refs point to each other, but you won't be able to get an immutable snapshot of the data structure, so it's pretty worthless |
| 03:27 | bloudermilk | amalloy: Indeed, it seems like the wrong thing to do. Other than labels, how else would one maintain an efficient circular data structure? |
| 03:27 | bloudermilk | Or are labels not horrible inefficient... |
| 03:27 | bloudermilk | *horribly |
| 03:29 | amalloy | step 1: make it work. step 2: make it fast. (step 1.5 is usually realizing that most of it doesn't need to be optimally super-duper-extra-fast) |
| 03:30 | bloudermilk | amalloy: duly noted |
| 03:34 | jdj | Don Knuth: "Premature optimization is the root of all evil (or at least most of it) in programming." |
| 03:35 | bloudermilk | I feel compelled for some reason as I learn Clojure (my first FP language) to understand how to properly model data |
| 03:36 | bloudermilk | Coming from a classical OO mutable runtime |
| 03:36 | Raynes | It's weird how people think of OOP as the 'old' and 'classic' way of doing things. :p |
| 03:38 | bloudermilk | Raynes: Weird, no (people that started with "classical" were taught that). Unfortunate, yes |
| 03:48 | seancorfield | When I learned programming, OO was very fringe and FP was more center stage in academia. I liked FP a lot. Then I had to learn OO when it went mainstream. Ugh. Glad FP is back in vogue :) |
| 03:49 | seancorfield | But a strong OO background is certainly an obstacle to learning effective FP. Unfortunately. |
| 03:50 | amalloy | seancorfield: i disagree. a "strong" background in any kind of programming is an advantage in learning another kind |
| 03:50 | amalloy | a shallow, lengthy background in OO is more what i'd call a disadvantage in learning FP |
| 03:51 | seancorfield | Taking away assignment and loop variables has a fairly debilitating effect on an OO programmer since they spend all their time poking at data hidden in boxes to make it change... |
| 03:51 | Zentrope | seancorfield: I work daily spelunking a code base (I didn't write) in which "inheritance" is the main way the original authors avoided code duplication. |
| 03:51 | seancorfield | amalloy: perhaps "a strongly entrenched OO background" then? |
| 03:52 | seancorfield | Most "Java Programmers" these days are "strongly entrenched" rather than having a "strong" background in the way you mean... |
| 03:52 | amalloy | *shrug* clojure was my first functional language. it's more about attitude: do you see the new ideas/rules of FP as restrictions or as interesting challenges |
| 03:52 | seancorfield | Zentrope: sorry for your pain :( |
| 03:52 | seancorfield | amalloy: I think it also depends on how you view OO and OO languages :) |
| 03:53 | amalloy | i loved em for sure. didn't know anything else. reinvented java whenever i had to work in C |
| 03:53 | Zentrope | seancorfield: *shrug* It's just interesting to see all the pitfalls lined up right there before me. Smart authors. They did all the _right_ things. But, somehow.... ;) |
| 03:54 | amalloy | but i'm not really making any general points, i guess |
| 03:54 | seancorfield | When Haskell appeared, I really thought that might be the turning point, and FP would go mainstream... having seen SASL, Miranda, ML, and many others not get much traction. |
| 03:55 | seancorfield | I'm glad we're finally seeing FP being taken seriously and problems with OO being admitted... |
| 03:55 | amalloy | well, their freenode room is twice as big as ours still |
| 03:56 | amalloy | which is obviously the only interesting metric of language momentum |
| 03:56 | seancorfield | Haskell? I used to hang out there but since I didn't get to write Haskell for a living, I kinda lost interest :) |
| 03:57 | seancorfield | The Haskell community are certainly passionate :) |
| 03:57 | seancorfield | I'm very happy that I get to write Clojure for a living! |
| 03:57 | amalloy | haskell is pretty amazing as a language. i enjoy dabbling in it, but clojure is so great that i don't really have the motivation to really dive in |
| 03:58 | naeg | is something similiar to this possible in clojure (and performant)? http://stackoverflow.com/questions/4261332/optimization-chance-for-following-bit-operations |
| 03:59 | amalloy | naeg: having spent two seconds glancing at that question, i am confident that you (or indeed i) will write bad code somewhere else in the program that costs way more speed than the speedup you could get from using shifts there |
| 04:00 | naeg | amalloy: but the algorithm seems so neat? |
| 04:00 | seancorfield | if memory was not so constrained, no one would bother packing data in and out of bit patterns like that tho... |
| 04:00 | naeg | it doesn't have to be as performant as in C or ASM, about a msec is okay (that's what I'm having with this solution: https://gist.github.com/3520562) |
| 04:02 | naeg | but it is possible to create a int64 (maybe from java?) and then do shift operations on it? |
| 04:04 | seancorfield | Java has bitwise operations, yes |
| 04:04 | Apage43 | mrm |
| 04:04 | Apage43 | trying to do a rate-limiting wrapper that blocks if the wrapped fn is being called too fast |
| 04:05 | Apage43 | right now I'm using an agent make the callers "get in line", but feels ugly that the fn is running in a different thread than the caller, and that would probably subtly break some stuff that expects that not to happen |
| 04:06 | amalloy | funny. i've written rate-limited twice, and both times chose something different than blocking |
| 04:06 | Apage43 | I saw the one in useful :). For this I'm rate limiting requests to an HTTP API. |
| 04:07 | seancorfield | naeg: and, yes, Clojure has various bit-twiddling functions too, if you really want to go there... |
| 04:08 | Apage43 | so if I'm calling it too fast I just want to wait, since I do need the result |
| 04:16 | naeg | seancorfield: I guess I will. The algorithm is neat and not that complex |
| 04:17 | naeg | (just to compare it to my other solution, will probably use the other one anyway) |
| 05:28 | gtuckerkellogg | how can one run all midje tests for a namespace from the REPL? |
| 05:28 | noidi | afaik, midje runs the facts as soon as they are evaluated |
| 05:29 | noidi | so try (require 'my.ns :reload) |
| 05:29 | noidi | or something like that |
| 05:30 | gtuckerkellogg | so there's nothing in midje like clojure.test's (run-tests 'your.namespace) ? |
| 05:30 | gtuckerkellogg | wow. in so many other ways, midje is superior. |
| 05:31 | amalloy | just...put your midje tests inside a deftest |
| 05:31 | amalloy | i'm not a big fan of midje, but i don't see why it should diplicate functionality that it can reuse instead |
| 05:32 | gtuckerkellogg | good point |
| 05:32 | gtuckerkellogg | i'll do just that |
| 05:33 | gtuckerkellogg | amalloy, what don't you like about midje? |
| 05:34 | amalloy | i don't dislike anything concrete; i'm sure it's fine. the heavy emphasis on tdd styles isn't to my taste. i do think mocking is overused, but that's probably related to tdd |
| 05:40 | Raynes | amalloy: From what I can tell, midje is an excellent way to test things in creative ways without a lot of code. |
| 05:40 | Raynes | I think a lot of things are quite a bit overly complex. |
| 05:41 | Raynes | See 'around' and other crap like that. |
| 05:41 | Raynes | Gives me a headache. |
| 05:41 | gtuckerkellogg | i just miss being able to run the whole namespace of tests from the repl |
| 05:41 | pyykkis | Raynes: +1 |
| 05:43 | pyykkis | if something, test framework should be simple and explicit. I find clojure.test being just that (and I used to be a fan of rspec). We'll, i guess it's a matter of taste |
| 05:54 | algernon | gtuckerkellogg: (require 'my.ns :reload), as noidi said should do just that. |
| 06:02 | gtuckerkellogg | thanks |
| 06:33 | borkdude | hmm, I have an enlive template that is based on an html5 file, basically I just want to show the file |
| 06:33 | borkdude | but it leaves the doctype out |
| 06:34 | borkdude | this is my template: |
| 06:34 | borkdude | (enlive/deftemplate welcome-page |
| 06:34 | borkdude | "public/index.html" |
| 06:34 | borkdude | []) |
| 06:34 | borkdude | what could be the problem? |
| 06:34 | vijaykiran | borkdude: https://github.com/cgrand/enlive/issues/15 related ? |
| 06:35 | borkdude | vijaykiran that's it, tnx |
| 07:10 | Cheiron | Hi, what does this mean? IllegalArgumentException No value supplied for key: true clojure.lang.PersistentHashMap.createWithCheck (PersistentHashMap.java:89) |
| 07:12 | borkdude | ,{true} |
| 07:12 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: Map literal must contain an even number of forms> |
| 07:12 | borkdude | ,(hash-map true) |
| 07:12 | clojurebot | #<IllegalArgumentException java.lang.IllegalArgumentException: No value supplied for key: true> |
| 07:12 | borkdude | ,(hash-map true 1) |
| 07:12 | clojurebot | {true 1} |
| 07:13 | hyPiRion | ,(assoc {} true) |
| 07:13 | clojurebot | #<ArityException clojure.lang.ArityException: Wrong number of args (2) passed to: core$assoc> |
| 07:13 | borkdude | so it means exactly what is says, no value supplied for key: true :) |
| 07:13 | borkdude | dunno about the createWithCheck thing though |
| 07:31 | Raynes | Cheiron: It usually means you're trying to create a map without enough key and value pairs. |
| 07:32 | Raynes | Er, without one part of a pair. |
| 07:32 | Raynes | As demonstrated above. |
| 07:32 | naeg | someone used common crawl with clojure already? http://commoncrawl.org/ |
| 07:32 | Cheiron | eye c. still unable to locate the line. Anything wrong with (def ^{:private true :doc ".....:} ttl 20000) |
| 07:34 | borkdude | ".....: -> "…." I presume? |
| 07:35 | Cheiron | yes, i mean it is a string |
| 07:37 | borkdude | seem ok tom e |
| 07:37 | borkdude | seems ok to me |
| 07:38 | Raynes | It wont be a literal map, Cheiron. |
| 07:38 | Raynes | It'll be code that creates a map, like borkdude's hash-map call. |
| 07:43 | Cheiron | so this line isn't the suspect? (def ^{:private true :doc "....."} ttl 20000) |
| 07:44 | Cheiron | i'm trying to require a file |
| 07:44 | Cheiron | but the only message i got is: IllegalArgumentException No value supplied for key: true clojure.lang.PersistentHashMap.createWithCheck (PersistentHashMap.java:89) |
| 07:44 | Cheiron | i'm unable to locate the suspected map |
| 07:46 | Cheiron | I found it !! how stupid i am |
| 08:45 | jao` | nick jao |
| 09:32 | @rhickey | clueless lein user q: lein repl fails if your code doesn't compile? |
| 09:33 | @rhickey | is there a way around that? |
| 09:33 | chouser | that probably depends on whether you're aot'ing or not. |
| 09:34 | @rhickey | I'm not asking for anything specific |
| 09:34 | @rhickey | does :main entry trigger that? |
| 09:34 | clgv | rhickey: yes. if there is none it starts in namespace 'user |
| 09:35 | chouser | Ah, probably |
| 09:35 | @rhickey | seems to |
| 09:35 | clgv | the same behavior when you do lein repl outside a project |
| 09:35 | chouser | so with no :main, lein repl succeeds and drops you in 'user even if none of your code compiles. |
| 09:36 | clgv | chouser: no. as far as I experienced, there is no compilation. you will have to require the namespaces you want to use from 'user namespace |
| 09:52 | chouser | How can I tell pprint to print metadata? |
| 09:54 | clgv | chouser: set *print-dup* to true |
| 09:54 | chouser | pprint seems to ignore both *print-dup* and *print-meta* |
| 09:55 | clgv | then you probably cant |
| 09:56 | chouser | wow. really? |
| 09:56 | clgv | humm just checkoing the source. it writes directly to *out* |
| 10:06 | advirol | Hi, I want to read the release announcement for Clojure 1.4 but as it seems, I cannot read it without logging in with a Google account. |
| 10:06 | advirol | Does s.o. have any idea for a solution? I would suggest to use open forums that don't require to login. |
| 10:08 | nDuff | s/groups/group/ |
| 10:08 | advirol | hm, perhaps I made a mistake. |
| 10:08 | advirol | I verify that |
| 10:10 | @rhickey | group is public readable, but if you are logged into google already it tries to log you in to groups |
| 10:10 | nDuff | advirol: I just pulled it up from a private-mode browser with a clear cookie set |
| 10:10 | nDuff | s/clear/empty/ |
| 10:11 | advirol | yes, you're right. my mistake was that i had been logged in and groups wanted to verify my account. |
| 10:11 | wmealing_ | there was issues with either oauth or openid, i can't remember.. but i know there was a problem with one of them |
| 10:11 | wmealing_ | is one preferred over the other ? |
| 10:11 | advirol | now since i completely logged out, i have access. just forget about it. ;) |
| 10:11 | clgv | advirol: the changes are also up on github |
| 10:12 | advirol | alright, even better. thx all |
| 10:13 | nDuff | rhickey: Is it expected that a delay throwing an exception should work when it's called again? A corner case where that doesn't behave as-expected (has locals cleared on rerun) came up yesterday; I don't know that anyone has come up with a clear enough reproducer to file a ticket yet, though hyPiRion was working on it. |
| 10:13 | wmealing_ | or am i looking at this whole issue sideways ? |
| 10:16 | hyPiRion | nDuff: I filed a ticket |
| 10:16 | hyPiRion | nDuff: http://dev.clojure.org/jira/browse/CLJ-1053 |
| 10:19 | nDuff | hyPiRion: Ahh -- great; thanks! |
| 10:21 | nDuff | ...and that's much clearer about what's going on. |
| 10:23 | hyPiRion | Yeah, it bothered me last night, so I did some testing and tried to figure out what the problem was. |
| 10:25 | hyPiRion | It is a rather strange case. |
| 11:12 | kral | Are there any good example of clojure + clojurescript on github or similar site? |
| 11:14 | shaungilchrist | http://clojurescriptone.com/ (bare in mind it expects lein1.6 to follow the tutorial) |
| 11:14 | jsabeaudry | kral, http://github.com/ibdknox/overtoneCljs this one is not bad |
| 11:15 | jsabeaudry | kral, the key to clojurescript in my opinion is lein-cljsbuild, makes it really simple no need to install anything etc |
| 11:17 | xeqi | +1 for lein-cljsbuild |
| 11:18 | xeqi | can't think of any recent open source projects showing everything togeter |
| 11:18 | `fogus | (inc jsabeaudry) |
| 11:18 | lazybot | ⇒ 1 |
| 11:19 | xeqi | besies that overtone one |
| 11:21 | shaungilchrist | is anyone else using the notion of .cljx ala c2? |
| 11:35 | @rhickey | what are people using for Clojure data Content-Type? |
| 11:37 | `fogus | application/clojure here |
| 11:38 | nDuff | Doesn't there need to be an x- in there for things that aren't standardized yet? |
| 11:40 | `fogus | Hmm, probably |
| 11:44 | metajack | x- is deprecated now |
| 11:44 | ohpauleez | rhickey: application/clojure here as well |
| 11:44 | metajack | http://tools.ietf.org/html/rfc6648 |
| 11:45 | `fogus | I guess I was ahead of times (for once) |
| 11:46 | @rhickey | looks like clj-http {:as :auto} checks for that as well |
| 11:48 | alpheus | Is there something like clojure.java.io/copy that can read from a java.io.InputStream and write to a byte array? |
| 11:52 | antares_away | alpheus: you probably can read data into a byte buffer and turn that into a byte array |
| 11:59 | alpheus | copy's "Output may be an OutputStream, Writer, or File." Can I make an OutputStream that's a byte buffer? |
| 12:00 | alpheus | I should probably tell you my actual problem instead of asking about possible solutions. |
| 12:00 | mmitchell | is there any version of clojure that allows you to throw with a string only? (throw "my error") |
| 12:01 | alpheus | as opposed to (throw (Throwable. "my error"))? |
| 12:01 | mmitchell | alpheus: yes |
| 12:01 | mmitchell | ,(throw "boom") |
| 12:01 | clojurebot | #<ClassCastException java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Throwable> |
| 12:02 | mmitchell | ,*clojure-version* |
| 12:02 | clojurebot | {:interim true, :major 1, :minor 4, :incremental 0, :qualifier "master"} |
| 12:04 | hyPiRion | mmitchell: Well, it allows you to throw with a string only. Like, technically. |
| 12:06 | duck1123 | you might want to check out slingshot. it has a fn called throw+ |
| 12:06 | nbeloglazov | $clojuredocs copy |
| 12:06 | lazybot | incanter.processing/copy-pixels: http://clojuredocs.org/v/3256; incanter.core/copy: http://clojuredocs.org/v/2853; clojure.java.io/copy: http://clojuredocs.org/v/2139; clojure.contrib.io/copy: http://clojuredocs.org/v/491; clojure.contrib.duck-streams/copy: http://clojuredocs.org/v/254 |
| 12:07 | nbeloglazov | $javadoc java.io.ByteArrayOutputStream |
| 12:07 | lazybot | http://docs.oracle.com/javase/6/docs/api/java/io/ByteArrayOutputStream.html |
| 12:07 | nbeloglazov | alpheus: use ByteArrayOutputStream |
| 12:07 | lotia | how would i redirect System/SetOut ans System/SetErr in clojure? |
| 12:09 | bosie | anyone in here using cascalog? |
| 12:13 | technomancy | I realize it's an artificial distinction, but I wonder if the application/clojure content-type would be appropriate for data structures not intended for evaluation while text/clojure might be appropriate otherwise |
| 12:13 | technomancy | err--s/not// |
| 12:26 | duck1123 | why would you write clojure code/data you don't intend to be evaluated? |
| 12:27 | hyPiRion | duck1123: There's a difference between evaluating and reading, ##(doc *read-eval*) |
| 12:27 | lazybot | java.lang.SecurityException: You tripped the alarm! *read-eval* is bad! |
| 12:27 | hyPiRion | ,(doc *read-eval*) |
| 12:27 | clojurebot | "; When set to logical false, the EvalReader (#=(...)) is disabled in the read/load in the thread-local binding. Example: (binding [*read-eval* false] (read-string \"#=(eval (def x 3))\")) Defaults to true" |
| 12:29 | xeqi | fetch uses "application/clojure" https://github.com/ibdknox/fetch/blob/master/src/noir/fetch/remotes.clj#L25 |
| 12:29 | xeqi | though only on server responses :\ |
| 13:05 | acheng | ,(java.lang.ProcessBuilder. "ls") |
| 13:05 | clojurebot | #<IllegalArgumentException java.lang.IllegalArgumentException: No matching ctor found for class java.lang.ProcessBuilder> |
| 13:07 | xeqi | ,(java.lang.ProcessBuilder. ["ls"]) |
| 13:07 | clojurebot | #<ProcessBuilder java.lang.ProcessBuilder@1248de38> |
| 13:07 | acheng | xeqi: thanks! |
| 13:11 | xeqi | acheng: might take a look at https://github.com/Raynes/conch |
| 13:13 | acheng | (inc xeqi) |
| 13:13 | lazybot | ⇒ 2 |
| 13:46 | pbostrom | I'm looking for ways to debug a Java app with Clojure, anyone have experience with this? a search through the ML mentions a few options, like https://github.com/djpowell/liverepl or https://github.com/wirde/swank-inject, wondering if one is better than the other |
| 13:50 | shawnlewis | Is there any way to merge namespaces (that I don't control)? For example I'd like to create a namespace that contains all of clj-time's sub-namespaces (clj-time.core clj-time.local clj-time.coerce clj-time.format) |
| 13:51 | shawnlewis | as well as a few additional functions of my own |
| 13:51 | S11001001 | shawnlewis: not a good way |
| 13:54 | shawnlewis | In Python you can access a module's imports via chaining. Like module.importedmodule.func |
| 13:55 | shawnlewis | Walking the child namespaces and def'ing their symbols in the parent would be pretty bad huh? |
| 13:56 | S11001001 | shawnlewis: it's highly error-prone |
| 13:56 | hyPiRion | shawnlewis: And the metadata would be gone, too. |
| 13:56 | emezeske | How do you deal with name conflicts? |
| 13:57 | hyPiRion | Unless you're tricking it somehow. |
| 13:57 | mindbender1 | cemerick: on piggieback README, the line after ## Rhino ClojureScript Environment (default) is not clear. Mind having a look? |
| 13:57 | S11001001 | dynamics, macros, redefinitions |
| 13:58 | S11001001 | as for that bit of Python, I'd call that a misfeature, as it makes what libs you happen to import into a module part of the public api of that module, unless you __all__ them away, which is tedious |
| 13:58 | emezeske | shawnlewis: What is your goal? To save typing in your requires? |
| 13:59 | emezeske | S11001001: Well, in Python everything is always public, but I think it's generally understood that some things are obviously bad to poke around in |
| 13:59 | shawnlewis | emezeske: Yeah I feel like every time I need clj-time I end up needing 3 out for 4 of its submodules, I also don't like having to think about which function belongs to which submodule |
| 14:01 | emezeske | shawnlewis: How many functions from clj-time do you find yourself using? If it's not many, you could write your own utility api on top of them and just use that |
| 14:02 | emezeske | shawnlewis: If you try to combine namespaces programatically, a new release of clj-time could break everything by merely adding a new private function to some namespace that conflicts with another namespace |
| 14:02 | shawnlewis | emezeske: that's true but I was hoping there might be a simpler way |
| 14:02 | shawnlewis | emezeske: well i could have my super-namespace die if there are conflicts |
| 14:03 | pandeiro | can i basically drop in nrepl.el and use nrepl-jack-in the same way i was using slime/swank? |
| 14:03 | emezeske | shawnlewis: Well you wouldn't have any other choice but to die |
| 14:03 | shawnlewis | emezeske: oh i said you said private function. either way I think dying is appropriate |
| 14:04 | shawnlewis | *i see you said |
| 14:04 | emezeske | shawnlewis: Dying is not just appropriate, it's all you could reasonably do |
| 14:04 | emezeske | shawnlewis: Unless your code is going to go through the whole AST and rename conflicting functions everywhere |
| 14:05 | shawnlewis | yup |
| 14:06 | emezeske | shawnlewis: If you really, *really* want to do something like this, you could have a macro that, using a whitelist, builds proxy functions in one namespace for all the public functions from clj-time.* namespaces |
| 14:06 | emezeske | Which is basically just a somewhat automated version of writing your own simplified wrapper API |
| 14:07 | shawnlewis | emezeske: right |
| 14:08 | shawnlewis | I guess I was thinking (use) might have an option to also expose the referred functions to callers |
| 14:08 | SegFaultAX|work2 | My 4clojure solutions keeps timing out for no reason. :( |
| 14:09 | shawnlewis | ie: my mental model was that (use) was equivalent to doing "from module import *" in python, but that's not the case |
| 14:09 | shawnlewis | i'm not saying there's anything wrong here. just figuring out how stuff works |
| 14:09 | hyPiRion | pandeiro: I just did |
| 14:10 | hyPiRion | At least for me, the transition was frightenly simple. |
| 14:12 | pandeiro | hyPiRion: seems too good to be true, as much as i struggled with swank |
| 14:12 | pandeiro | but it's working fine so far |
| 14:13 | cemerick | mindbender1: not clear how? |
| 14:14 | cemerick | (it's basically a repeat of the interaction described in the cljs tutorial) |
| 14:14 | mindbender1 | cemerick: there's an opening bracket that was not closed. |
| 14:14 | mindbender1 | that confused me a bit |
| 14:14 | Gnosis- | it doesn't seem like I can throw+ inside the catch of a try+ block |
| 14:15 | Gnosis- | ,try+ |
| 14:15 | cemerick | mindbender1: sorry, where? I'm not seeing it. |
| 14:15 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: try+ in this context, compiling:(NO_SOURCE_PATH:0)> |
| 14:15 | mindbender1 | cemerick: immediately after ## Rhino ClojureScript Environment (default) |
| 14:15 | Gnosis- | ,(refer 'slingshot.slingshot) |
| 14:15 | clojurebot | #<RuntimeException java.lang.RuntimeException: java.lang.Exception: No namespace: slingshot.slingshot> |
| 14:15 | cemerick | oh, just in the text prior to the console interaction |
| 14:16 | mindbender1 | yess |
| 14:16 | cemerick | Sure, will fix. |
| 14:16 | mindbender1 | ok thanks |
| 14:16 | hyPiRion | pandeiro: Yeah, I'm kind of wondering when it will blow up on me. |
| 14:16 | cemerick | mindbender1: fixed; though it doesn't really change the process, etc. |
| 14:17 | mindbender1 | cemerick: yeah I sensed so.. just that I kept looking for a closing bracket |
| 14:17 | Gnosis- | is it possible to re-throw an exception in slingshot? |
| 14:17 | mindbender1 | cemerick: thanks for fixing |
| 14:18 | pandeiro | hyPiRion: we are both traumatized |
| 14:18 | dnolen | rhickey: any thoughts about the column tracking metadata patch for the Clojure reader? Is there some more rationale you want to see around that patch, or is it simply not on the table? |
| 14:18 | technomancy | Gnosis-: sure |
| 14:20 | Gnosis- | technomancy: if I have (throw+ (assoc e :test true)) in a catch block, the original exception gets thrown (before the assoc) |
| 14:20 | Frozenlo` | Is there a way to check if two functions are identical? Something like (= #(print "Hook!") #(print "Hook!")) |
| 14:21 | technomancy | Frozenlo`: sort of, if you use serializable-fn |
| 14:21 | pandeiro | is there any reason against running a small-time webapp via emacs/nrepl to be able to hot-patch and whatnot? is that a big risk? |
| 14:22 | technomancy | Gnosis-: huh, sounds like a bug in slingshot. you should be able to do it with ex-info though |
| 14:22 | Frozenlo` | technomancy: this? https://github.com/technomancy/serializable-fn |
| 14:22 | technomancy | (throw (vary-ex e assoc :test true)) |
| 14:22 | technomancy | Frozenlo`: that's the one |
| 14:22 | Frozenlo` | Thanks, looking now! |
| 14:23 | technomancy | pandeiro: you should launch it with a proper daemonization tool and launch an nrepl server from the inside. |
| 14:23 | technomancy | update-ex is probably better than vary-ex |
| 14:24 | pandeiro | technomancy: what would be the tradeoffs there? more stability? automatic restarting? |
| 14:24 | xeqi | pandeiro: and make sure to restrict access, perhaps using https://github.com/cemerick/drawbridge as shown in https://devcenter.heroku.com/articles/debugging-clojure |
| 14:24 | technomancy | (update-ex e assoc :test true) -> (ex-info (.getMessage e) (assoc (ex-data e) :test true)) |
| 14:24 | pandeiro | xeqi: great thanks |
| 14:24 | technomancy | pandeiro: yeah, and the more conventional it is the more likely you are to remember how to do it when you have to come back to it two years later |
| 14:25 | technomancy | upstart-style init scripts are nice for that |
| 14:26 | technomancy | depends on your definition of "small-time" I guess; if you're the only one using it then launching it out of a repl in tmux is fine =) |
| 14:26 | pandeiro | technomancy: me and a few people, but it would be nice to learn 'the right way to do it' |
| 14:26 | pandeiro | thanks |
| 14:27 | Frozenlock | technomancy: That's really nice! Will this work with cljs also? |
| 14:27 | technomancy | Frozenlock: I doubt it |
| 14:27 | SegFaultAX|work2 | amalloy: Are you the 4clojure administrator? |
| 14:27 | amalloy | yes |
| 14:27 | Gnosis- | technomancy: regular throw _does_ work inside the catch block of a try+ :) |
| 14:28 | Gnosis- | so how do I wrap a map inside it? make a Stone object? |
| 14:28 | technomancy | Gnosis-: I recommend ex-info |
| 14:28 | Gnosis- | technomancy: okay, thanks |
| 14:29 | Gnosis- | how do I report this bug? |
| 14:29 | SegFaultAX|work2 | amalloy: I'm trying to submit an answer to a question, but it times out almost every single time. When it does actually run my solution it works instantly, but sometimes it takes a while for it to even start the first test so by the time it gets to the last one it times out. |
| 14:29 | SegFaultAX|work2 | amalloy: Is the problem my code or 4clojure, do you think? |
| 14:29 | amalloy | 4clojure. the sandboxer handles some things (mostly java interop) pretty badly |
| 14:30 | SegFaultAX|work2 | amalloy: There is no interop in this solution. Would you mind taking a look? |
| 14:30 | amalloy | sure |
| 14:30 | SegFaultAX|work2 | Problem 73: https://www.refheap.com/paste/4774 |
| 14:31 | SegFaultAX|work2 | amalloy: I didn't think I was being too abusive. But I'm still learning. :) |
| 14:31 | amalloy | SegFaultAX|work2: when i paste that into 4clojure, it succeeds instantly |
| 14:32 | SegFaultAX|work2 | amalloy: Hmm, lemme retry. |
| 14:32 | SegFaultAX|work2 | amalloy: Yea it just spins for me then times out. |
| 14:32 | scriptor | it hangs for me too |
| 14:32 | amalloy | hm. pressed submit again, and this time it's stuck |
| 14:32 | SegFaultAX|work2 | Even if it's not idiomatic Clojure, is my solution awful? |
| 14:33 | amalloy | no, looks pretty good to me |
| 14:33 | scriptor | definitely a problem with 4clojure here, I tried it with "2" and it also hangs for a bit |
| 14:35 | amalloy | well, i can restart it. it's not using much cpu or ram though |
| 14:36 | amalloy | try now |
| 14:36 | SegFaultAX|work2 | amalloy: That did it. |
| 14:36 | SegFaultAX|work2 | amalloy: Thanks so much! |
| 14:37 | SegFaultAX|work2 | amalloy: I'm getting close http://www.4clojure.com/user/segfaultax |
| 14:38 | jweiss | i'd like to update a file within a zipfile within a zipfile. This is turning out to be surprisingly difficult. is there anything out there to help beyond the java.util.zip classes? |
| 14:38 | eggsby | seancorfield: is there any way to send auth credentials with clj-soap? |
| 14:43 | hyPiRion | Ah, and now my solution to the reversi worked as well. |
| 14:47 | seancorfield | eggsby: i don't use clj-soap so i don't know, sorry |
| 14:52 | Gnosis- | technomancy: it turns out I was using slingshot 0.8.0; I upgraded to 0.10.3, and now I get this error at the REPL: ClassNotFoundException slingshot.Stone java.net.URLClassLoader$1.run (URLClassLoader.java:217) |
| 14:54 | eggsby | ah seancorfield: https://github.com/seancorfield/clj-soap this a different person? :p |
| 14:54 | eggsby | no worries, just dropping down to the java :) |
| 14:57 | hyPiRion | ah, nrepl killed my paredit. Whenever I del over any paren/bracket, it's getting killed. |
| 14:58 | Gnosis- | technomancy: sorry, please disregard; I needed to do 'lein clean' |
| 14:59 | amalloy | heh. lispers are baffling. "dangit, i press delete and a character disappears. my text editor is broken!" |
| 15:00 | uvtc | hehehe |
| 15:01 | xeqi | technomancy: know anything about when the next nrepl.el release is? I'd love a fix for kingtim/nrepl.el#84 |
| 15:02 | technomancy | xeqi: haven't heard much discussion about that, no |
| 15:02 | technomancy | are you on the nrepl.el mailing list? could raise it there. |
| 15:02 | xeqi | somehow I'm managed to not join that yet |
| 15:02 | xeqi | guess its time |
| 15:04 | amalloy | huh, i wonder why lazybot didn't post a link to that issue when you mentioned it |
| 15:04 | xeqi | I thought the same thing |
| 15:04 | xeqi | wasn't sure if it was channel restricted |
| 15:04 | xeqi | or if the "." messed it up |
| 15:05 | amalloy | i looked through the source, neither seems to be the case |
| 15:05 | hyPiRion | Is there some hook someone has created to fix the issue? |
| 15:05 | xeqi | xeqi/lein-pendantic#2 |
| 15:05 | hyPiRion | (for the nrepl/paredit thing) |
| 15:05 | xeqi | &"I'm not broken" |
| 15:05 | lazybot | ⇒ "I'm not broken" |
| 15:05 | amalloy | 4clojure/4clojure#5 |
| 15:05 | lazybot | CSS and HTML Layout -- https://github.com/4clojure/4clojure/issues/5 is closed |
| 15:05 | scriptor | maybe lazybot ignores closed issues? |
| 15:05 | clojurebot | Cool story bro. |
| 15:06 | scriptor | oh, well never mind |
| 15:06 | xeqi | oh, I misspelled my own repo :\ |
| 15:06 | technomancy | whoa; what happened to http://www.opalang.org/ |
| 15:07 | llasram | Soooo shiiiiny |
| 15:07 | technomancy | llasram: but but |
| 15:07 | technomancy | the only reason I cared the slightest bit about opa was ocaml |
| 15:08 | technomancy | and they replaced every mention of it with node |
| 15:08 | llasram | http://opalang.org/faq.xmlt still talks about OCaml as primary implementation language |
| 15:08 | ohpauleez | technomancy: 1.7m of funding will do that |
| 15:08 | amalloy | technomancy: i think it's april first in the southern hemisphere |
| 15:09 | ohpauleez | "JS Framework" is a easy way to raise a bunch of money |
| 15:09 | ohpauleez | amalloy: Normandy, France |
| 15:09 | technomancy | ohpauleez: yeah, especially when you add "enterprise" to it |
| 15:09 | hoover_damm | Intel needs to release javascript optimization to the intel microcode |
| 15:09 | ohpauleez | technomancy: "enterprise" alone is an extra 150K |
| 15:09 | amalloy | eastern hemisphere, then. i think it's a viable joke regardless of technicalities |
| 15:10 | scriptor | kinda reminds me how racket-lang has no mention of "lisp" on the home page |
| 15:11 | amalloy | ah, i think lazybot's regex doesn't accept . in repo names, even though it tries to |
| 15:13 | ohpauleez | technomancy: The one mention of OCaml exists in the job descriptions. "The compiler is written in OCaml" |
| 15:13 | ohpauleez | I love when french companies use OCaml |
| 15:13 | ohpauleez | it feels so french |
| 15:13 | SegFaultAX|work2 | When did MongoDB and Node.js become *the* Javascript stack? |
| 15:14 | ohpauleez | SegFaultAX|work2: three years ago? |
| 15:14 | ohpauleez | maybe two |
| 15:15 | technomancy | what on earth is "supported technologies" on that page supposed to mean? if you don't look closely it looks like they're saying google, twitter, and facebook use their stuff |
| 15:15 | SegFaultAX|work2 | Well that makes me sad, then. Two significantly subpar technologies comprise *the* js stack. :( |
| 15:16 | ohpauleez | SegFaultAX|work2: Yes… it's like Asimov's "Foundation" is taking hold |
| 15:17 | ohpauleez | May we be the instruments of a brighter future |
| 15:17 | SegFaultAX|work2 | I guess 3 significantly subpar technologies, if you include Javascript itself. |
| 15:17 | acheng | hm. added [conch "0.3.1"] to my project.clj, ran lein deps, added [conch :as sh] to my clj file's :require clause in the call to ns.... when loading file i get FileNotFound for conch__init.class on classpath |
| 15:17 | Sgeo | What does being shackled to the JVM count as? |
| 15:17 | acheng | same result after getting a new clojure jack in session. |
| 15:18 | ohpauleez | Sgeo: Who's shackled? You can sort of run Clojure on JS, JVM, Scheme, Python, Lua, and soon barebones via C |
| 15:18 | ohpauleez | Also, it's funny the company kept its name: MLstate |
| 15:18 | ohpauleez | kudos |
| 15:19 | xeqi | acheng: (:require [conch.core :as sh]) |
| 15:19 | SegFaultAX|work2 | What's wrong with the JVM? It's a reasonably stable and performant virtual machine. |
| 15:19 | acheng | ah. of course |
| 15:19 | acheng | although i still get the error |
| 15:20 | acheng | oh nevermind |
| 15:20 | Sgeo | It suggests a model that might not be ideal, and the best performance is done by staying close to the model: Protocols vs generic functions |
| 15:21 | acheng | xeqi: thanks again |
| 15:21 | ohpauleez | I've been keeping a close eye on Rust, which has me pretty excited |
| 15:23 | dnolen | Sgeo: what language do you use that has generic methods as generic as Clojure's yet faster? |
| 15:25 | Sgeo | dnolen, I guess I don't know enough to make the comparison, but Common Lisp can be pretty fast, and I think it might be possible to build a Clojure-like generic system fairly thinly over CLOS |
| 15:25 | dnolen | Sgeo: CLOS isn't as generic, based on your argument you could probably do the same for Clojure. Are you going to be the one to do it? |
| 15:27 | Sgeo | Building Clojure on top of Common Lisp? |
| 15:27 | dnolen | Sgeo: no build faster generic methods for Clojure. |
| 15:28 | Sgeo | Java doesn't have anything similar to CLOS, I think |
| 15:28 | dnolen | Sgeo: ... |
| 15:28 | Sgeo | ...although, I have a thought |
| 15:29 | Sgeo | My Clojure-style generics on CLOS plan was kind of single-dispatch, actually |
| 15:30 | Sgeo | What is going on with all these ping timeouts? |
| 15:30 | Cheiron | Hi, how to import this enum in clojure code? http://hector-client.github.com/hector//source/content/API/core/1.0-1/me/prettyprint/hector/api/beans/AbstractComposite.ComponentEquality.html |
| 15:30 | _tca | Sgeo: notice: linode |
| 15:30 | emezeske | Sgeo: Are you writing your own programming language? |
| 15:31 | Sgeo | emezeske, I'm starting to think I should eventually |
| 15:31 | emezeske | Sgeo: I was going to suggest that. |
| 15:33 | ohpauleez | Sgeo: You should also give The Art of the Metaobject Protocol a read, and give the CLJS source code a read through |
| 15:36 | Cheiron | to import http://hector-client.github.com/hector//source/content/API/core/1.0-1/me/prettyprint/hector/api/beans/AbstractComposite.ComponentEquality.html (import '......AbstractComposite$ComponentEquality) |
| 15:36 | Cheiron | but to use the constants? |
| 15:36 | Cheiron | *but how |
| 15:43 | pepijndevos | How do I get a recent google closure library? |
| 15:44 | ohpauleez | pepijndevos: You're looking for the inclusion of the third-party pieces? |
| 15:44 | pepijndevos | ohpauleez: just a more recent version than what comes with cljsbuild |
| 15:44 | xeqi | &(java.math.RoundingMode/DOWN) |
| 15:44 | lazybot | ⇒ #<RoundingMode DOWN> |
| 15:44 | pepijndevos | or… as far as i understand the clojurescript stack at all |
| 15:45 | ohpauleez | pepijndevos: cljs includes a very very recent version, not more than a few months old |
| 15:45 | pepijndevos | ohpauleez: https://groups.google.com/forum/#!topic/clojure/gG24Shh8wDg |
| 15:45 | xeqi | Cheiron: I'd expect (AbstractComposite$ComponentEquality/EQUAL) |
| 15:46 | juhu_chapa | Hi all! Is there any way to pass params to a future? |
| 15:46 | ohpauleez | Ah gotcha. So you just need to pack up a jar yourself or nab a recent version from here: https://clojars.org/search?q=closure |
| 15:46 | pepijndevos | juhu_chapa: try future-call |
| 15:46 | ohpauleez | I maintain my own local version, as I use the HTML5 stuff and some of the third-party stuff in prod apps |
| 15:47 | pepijndevos | ohpauleez: oohing on clojars seems > 2035 |
| 15:47 | pepijndevos | *nothing |
| 15:48 | ohpauleez | packing up your own custom jar isn't hard, just annoying |
| 15:48 | pepijndevos | ohpauleez: Can I have yours? Or… maybe I should just go with the seamless field |
| 15:49 | seancorfield | eggsby: i forked clj-soap thinking i could get it running on clojure 1.4 in a project i'm using at work but it didn't have the right features for what i needed... the original is here https://bitbucket.org/taka2ru/clj-soap |
| 15:49 | juhu_chapa | pepijndevos: future-call accept a function with no-params :( |
| 15:49 | juhu_chapa | pepijndevos: maybe an agent is the right choice |
| 15:50 | pepijndevos | maybe... |
| 15:50 | Sgeo | juhu_chapa, make the function a closure? |
| 15:50 | ohpauleez | pepijndevos: in my experience, if you can revert to something already in the goog-jar without too much trouble or loss of functionality, you should. If not for Occam's razor, than to just to make life easier and move on in the solution space |
| 15:50 | seancorfield | eggsby: i ended up publishing a new version (snapshot) that works with 1.4.0 / lein2 but that's as far as I got: https://clojars.org/org.clojars.seancorfield/clj-soap |
| 15:51 | Sgeo | ,(let [a 5 f #(+ % a)] (f 6)) |
| 15:51 | pepijndevos | ohpauleez: right, will do. |
| 15:51 | clojurebot | 11 |
| 15:52 | eggsby | ah seancorfield, ya i'm having to drop straight down to apache axis2 myself |
| 15:52 | seancorfield | i ended up dropping down to apache axis too... version 1 due to constraints on the middleware container i'm running my clojure code in... |
| 15:52 | seancorfield | once it was wrapped in clojure code, it was fairly painless to use :) |
| 15:53 | eggsby | is there a special syntax to access nested classes via clojure? |
| 15:53 | juhu_chapa | Sgeo: :O |
| 15:53 | pepijndevos | eggsby: dollar, I believe |
| 15:53 | eggsby | ah, thank you pepijndevos |
| 15:54 | eggsby | was driving me bonkers that nrepl wasn't autocompleting it and org.package.EnclosingClass.NestedClass wasn't working |
| 16:04 | gtrak` | Raynes: hey, I saw your fork of ring-cors, is there advantage to it from the parent? |
| 16:05 | nbeloglazov | I'm moving to repl.el from swank. I added it my load-path and require'd. Try to nrepl-jack-in, it start server, but *nrepl* buffer stays black. No input hint like "user =>" and when I press enter it says "Wrong type argument: integer-or-marker-p, nil". |
| 16:07 | ohpauleez | gtrak`: A look at the network info on github suggests that there are some decent improvements in the flatland version |
| 16:08 | ohpauleez | https://github.com/flatland/ring-cors/network |
| 16:08 | gtrak` | yea, I saw that, good enough for me I guess :-) |
| 16:34 | nbeloglazov | Does somebody uses nrepl.el with emacs 23? Does it work with latest nrepl.el? It seems to be broken for 23. Can somebody check? |
| 16:35 | technomancy | I know it's primarily developed using 24 |
| 16:35 | Raynes | Probably easier to just use 24. |
| 16:35 | Raynes | It's officially released now, so you shouldn't have to compile from source or anything. |
| 16:36 | nbeloglazov | Raynes: seems not for ubuntu 10.04 :( |
| 16:37 | technomancy | you can use nix |
| 16:37 | nbeloglazov | So better to put this "only 24" to README |
| 16:38 | tanzoniteblack | nbeloglazov: https://launchpad.net/~cassou/+archive/emacs has an emacs24 build for lucid, I think |
| 16:38 | nbeloglazov | tanzoniteblack: thanks |
| 16:39 | tanzoniteblack | the "emacs-snapshot" package is an emacs24 build available for lucid from that ppa, doesn't look like the "emacs24" stable package supports lucid though |
| 16:41 | technomancy | it used to say it supported 24 only, then someone who used 23 said that should be removed because it worked for him, but that was a few weeks ago |
| 16:42 | nbeloglazov | Commit that broke it was made 10 days ago (I think it broke). |
| 16:42 | tanzoniteblack | as of 2 weeks ago or so, the version on elpa worked in 23 |
| 16:43 | nbeloglazov | https://github.com/kingtim/nrepl.el/commit/958b042fd9ba7c17eb968709a47685dadaa809b4 |
| 16:43 | nbeloglazov | completion-at-point-functions was introduced in 24 |
| 16:47 | holo | hi |
| 16:48 | holo | i have a function called "ANY" in my code. i need to know to which library it belongs. is there a search engine for this kind of stuff? |
| 16:49 | tanzoniteblack | using the backtick (`) you can get the full form of a function |
| 16:49 | tanzoniteblack | ,`(defn) |
| 16:49 | clojurebot | (clojure.core/defn) |
| 16:49 | lnostdal | move the cursor 'any' and press M-. this will take you to the definition of that function |
| 16:49 | lnostdal | press M-, to go back to where you where |
| 16:51 | mattmoss | git status |
| 16:52 | mattmoss | oops |
| 16:52 | holo | tanzoniteblack, lnostdal, this is a function that is possibly not even installed in my system, so i was thinking about a public code repository search engine |
| 16:52 | technomancy | that'd be a neat feature to add to clojuresphere |
| 16:53 | technomancy | some kind of hoogle port |
| 16:54 | ivaraasen | clojuresphere gives me an application error |
| 16:54 | ivaraasen | strange |
| 16:55 | technomancy | memory quota exceeded =\ |
| 16:56 | ivaraasen | :/ |
| 16:57 | holo | that hoogle thingy would be cool |
| 16:57 | nbeloglazov | I tried search few minutes ago there. May be it's related |
| 16:57 | ivaraasen | set up donations and I'll contribute towards extra dynos :) |
| 16:57 | technomancy | jkkramer: mind if I collab myself in to fix it? |
| 16:57 | technomancy | holo: it wouldn't be as cool as in haskell since we don't have type signatures |
| 16:58 | technomancy | probably just a config issue |
| 16:58 | xeqi | we have $findfn |
| 16:58 | technomancy | yeah, it's not using trampoline |
| 16:59 | jkkramer | technomancy: sure go for it |
| 17:00 | jkkramer | clojuresphere needs some love |
| 17:00 | technomancy | I wonder if I should have it emit a warning in the buildpack if you use run without trampoline |
| 17:00 | technomancy | jkkramer: do you have anything specific you've been wanting to do with it? |
| 17:00 | jkkramer | the main issue I ran into is that github stopped providing a way to get all clojure projects |
| 17:01 | technomancy | oh, you needed the v2 api? |
| 17:01 | technomancy | in practice how many things on github weren't accessible via clojars? |
| 17:01 | jkkramer | last I checked, none of the API stuff allowed a query for "repo language = clojure" |
| 17:02 | nbeloglazov | Updated to emacs 24. nrepl.el works fine. Indeed seems to be broken on 23. |
| 17:02 | jkkramer | there were a number of projects on github but not clojars, I believe -- e.g., non-lib projects |
| 17:03 | technomancy | jkkramer: hm; yeah that's a drag |
| 17:03 | technomancy | jkkramer: still, libraries are where clojuresphere is most useful |
| 17:04 | technomancy | wow, lots of juicy TODOs in here =) |
| 17:04 | jkkramer | technomancy: yeah. being clojars-centric would still be useful. I'll see about refreshing it this weekend, maybe get things automated |
| 17:04 | technomancy | jkkramer: maybe we'll take a look at this for a future seajure meeting |
| 17:04 | technomancy | it's a really fun problem |
| 17:04 | jkkramer | it was fun to work on, when I had access to the data I needed |
| 17:05 | technomancy | lein now warns when you try to deploy a project without description, url, or license |
| 17:05 | technomancy | so the quality of the data on clojars should improve over time |
| 17:05 | jkkramer | cool |
| 17:06 | technomancy | plus leiningen-core is a library now, so you can easily calculate transitive deps given a project.clj file |
| 17:06 | jkkramer | another nagging issue was malformed project.clj files, or ones that expected to be eval'd. it could use more robustness there |
| 17:06 | technomancy | well there you go =) |
| 17:07 | technomancy | what's "experiment with long-running threads on heroku" from the todo mean? |
| 17:08 | technomancy | jkkramer: how's the one-file raw map approach working for you? |
| 17:09 | technomancy | I was thinking jiraph or neo4j might be a good fit for this problem |
| 17:09 | technomancy | but I appreciate the simplicity of the approach you're currently using =) |
| 17:12 | jkkramer | technomancy: re long-running threads - I was wondering whether a thread could be spun off on the web dyno to refresh the graph. Normally you'd have a cron job or worker dyno do that sort of thing, I think(?) |
| 17:12 | technomancy | oh, and it has to be in-process since you don't have any way to persist state |
| 17:12 | technomancy | if you were using neo4j you could manually initiate `heroku run lein run -m clojuresphere.refresh` or use the scheduler addon |
| 17:12 | holo | xeqi, that's a really nice addition, that "findfn", but what i want is rather more simple than that. just a search by function name pattern, even if it returned 10 libraries, it would be a good result |
| 17:13 | technomancy | holo: for the record, ANY comes from compojure |
| 17:13 | technomancy | holo: but you're right that it would be a cool thing to have |
| 17:13 | technomancy | jkkramer: you could do that with an executor if you needed it in-process |
| 17:13 | holo | technomancy, hahaha, thanks for the brain database :) |
| 17:14 | technomancy | jkkramer: I deployed a fix for the out-of-memory error |
| 17:15 | jkkramer | technomancy: right. Since it was a hobby hack, I had a limited threshold for new tech, so tried to keep it simple |
| 17:15 | jkkramer | technomancy: awesome thanks |
| 17:15 | technomancy | jkkramer: we poked a bit at neo4j at a past seajure meeting |
| 17:16 | technomancy | would you want to go in that direction if we ended up hacking it at a meeting? |
| 17:17 | jkkramer | technomancy: sure, any and all improvements welcome. neo4j has been on my list of things to learn for a while |
| 17:19 | technomancy | jkkramer: considering "hard to find" was the main complaint about clojure libs in cemerick's survey I think clojuresphere is a pretty important project |
| 17:21 | emezeske | technomancy: Without clojuresphere, there's no good way to ask "what's the de facto library for X" except in IRC :) |
| 17:22 | shaungilchrist | I was honestly unaware of it til just now hah. this is great |
| 17:22 | technomancy | emezeske: yes, and nothing will ever come close to the wonderfulness of this channel =) |
| 17:22 | jkkramer | even clojuresphere can't always decide what the de facto lib is, though |
| 17:23 | technomancy | sure; there's only so far you can go with an algorithmic approach, but it scales like nobody's business |
| 17:23 | jkkramer | e.g., when a lib changes hands, or a fork becomes the new standard even though it's not popular yet |
| 17:23 | emezeske | jkkramer: That's definitely true, but it sure could help |
| 17:23 | jkkramer | maybe it could incorporate some user input/feedback |
| 17:23 | emezeske | jkkramer: With a bit of human intuition to make sense of the data |
| 17:23 | jkkramer | upvotes, vouching, "mark as de facto" or something |
| 17:23 | technomancy | jkkramer: yeah, there's no recency decay factored in yet, is there? |
| 17:24 | technomancy | whoa, compojure 0.6.3 |
| 17:24 | jkkramer | technomancy: don't think so. even then, just because a project hasn't been updated recently, doesn't mean it's inactive. it might just be bug-free :) |
| 17:24 | jkkramer | it hasn't been updated in a long time |
| 17:25 | technomancy | yeah, but a dependency from an active project should count for more |
| 17:26 | technomancy | IMO anyway |
| 17:26 | jkkramer | it should count for something, for sure |
| 17:26 | andersf | maybe even measure recent commits, number of persons involved etc |
| 17:27 | jkkramer | get some machine learning in there |
| 17:27 | technomancy | get bradford cross on the phone |
| 17:27 | andersf | jkkramer: any plans of performing a reindex anytime soon? :) |
| 17:28 | jkkramer | i'll do one tonight. got put on the back burner when I found the github harvester stopped working |
| 17:28 | jkkramer | so…github won't be very accurate but at least clojars will |
| 17:30 | advirol | http://www.youtube.com/?v=djytP2ls5Eg |
| 17:30 | advirol | sry |
| 18:00 | SegFaultAX|work2 | amalloy: I like your solution to #77 |
| 18:01 | SegFaultAX|work2 | amalloy: On 4clojure, that is. |
| 18:01 | Frozenlock | I've added mouse support to zyzanie, for those interested in adding shortcuts in their cljs app. https://github.com/Frozenlock/zyzanie |
| 18:02 | amalloy | heh, thanks. group-by frequencies solves pretty much the whole problem |
| 18:02 | SegFaultAX|work2 | amalloy: Yup, it's similiar to my solution. |
| 18:02 | SegFaultAX|work2 | (defn anagrams [words] (into #{} (map set (filter #(< 1 (count %)) (vals (group-by frequencies words)))))) |
| 18:02 | SegFaultAX|work2 | amalloy: When I saw that you also used group-by freq I was like "damn, I was hoping I was being slick with that" |
| 18:04 | kjellski | is there a function in clojure that could be called collect-by? a function that lets you provide an f that creates a new bucket for each new return value and collects contents of coll by these values? |
| 18:04 | amalloy | &(doc group-by) |
| 18:04 | lazybot | ⇒ "([f coll]); Returns a map of the elements of coll keyed by the result of f on each element. The value at each key will be a vector of the corresponding elements, in the order they appeared in coll." |
| 18:05 | kjellski | amalloy: -.- sometimes my brain even hurts itself... ^^ thanks! |
| 18:05 | SegFaultAX|work2 | kjellski: It's funny because we were literally talking about a 4clojure solution that uses it not 1 minute before you joined the chan. |
| 18:06 | kjellski | SegFaultAX|work2: problem 50 ? |
| 18:06 | kjellski | ^^ |
| 18:06 | SegFaultAX|work2 | amalloy: I really want to get more comfortable using composition in Clojure. In Haskell, (.) flows very nicelly. For some reason I just don't think about it as much yet in Clojure. |
| 18:06 | SegFaultAX|work2 | I'm getting there, though. |
| 18:07 | amalloy | well, it doesn't flow as nicely as haskell |
| 18:07 | SegFaultAX|work2 | It flows fine. It's just slightly more part of the normal syntax, ya know? |
| 18:07 | gtrak` | every time I try to use comp, I end up thinking -> is better |
| 18:07 | SegFaultAX|work2 | That and ($) are just part of idiomatic Haskell expressions. |
| 18:08 | SegFaultAX|work2 | gtrak`: -> and ->> aren't really reusable though, are they? I mean composition actually produces a new function where as -> just threads a value through successive forms. |
| 18:09 | andersf | kjellski: #77 |
| 18:09 | andersf | kjellski: sorry for spoiling :> |
| 18:09 | gtrak` | ,(#(-> % inc inc) 2) |
| 18:09 | clojurebot | 4 |
| 18:10 | SegFaultAX|work2 | andersf: That example is too trivial to be useful. |
| 18:10 | andersf | pweh |
| 18:10 | SegFaultAX|work2 | ,(let [double-inc (comp inc inc)] (double-inc 2)) |
| 18:10 | clojurebot | 4 |
| 18:11 | SegFaultAX|work2 | I guess the point is I don't yet associate composition with threading. Or rather, I don't think "should this use function composition or the threading operator?" They have different uses in my mind, perhaps wrongly so. |
| 18:12 | gtrak` | there's a bit fewer stack frames with threading when you can use it, that's probably not significant though |
| 18:13 | SegFaultAX|work2 | gtrak`: Like, 1 fewer, right? |
| 18:14 | gtrak` | yes, I suppose so :-) |
| 18:15 | gtrak` | it feels like the same intent for me, but I find comp more awkward to use in practice, plus the left/right distinction |
| 18:15 | arrdem | why not k-1 for k composed functions? naively if I'm going to thread the return value of a function through k others I sequentially create stack frames for all K functions and eval from the top down |
| 18:16 | SegFaultAX|work2 | arrdem: The extra frame comes from the function returned by comp |
| 18:17 | arrdem | ,(let [x (fn [a] (inc a)) y inc z inc] (x (y (z 1)))) |
| 18:17 | clojurebot | 4 |
| 18:17 | SegFaultAX|work2 | arrdem: Eg h = (f . g) then we have 3 stack frames right? h g f |
| 18:17 | gtrak` | plus the composition is at run-time, so there's the cost of the closure |
| 18:17 | gtrak` | whenever it decides to get allocated |
| 18:17 | arrdem | push three frames pluss the let... |
| 18:17 | arrdem | then reduce down |
| 18:18 | rufoa | ,(contains? (transient #{:foo}) :foo) |
| 18:18 | clojurebot | false |
| 18:18 | rufoa | ^ is this intended behaviour? note that 'get' works on transient maps, 'nth' on transient vectors, 'count' on all transient structures etc |
| 18:18 | gtrak` | so, (let [a (comp...)] ...) is worse than (def a (comp...)) |
| 18:18 | amalloy | SegFaultAX|work2: haskell's tail calls surely mean that h = f . g doesn't consume three stack frames, right? |
| 18:18 | SegFaultAX|work2 | amalloy: But this isn't haskell. |
| 18:19 | SegFaultAX|work2 | If tails calls can be eliminated, then it can happen in place, sure. |
| 18:20 | SegFaultAX|work2 | rufoa: That's strange indeed. I'd be curious to know why that failed. |
| 18:20 | rufoa | SegFaultAX|work2: https://github.com/clojure/clojure/pull/12 this perhaps? |
| 18:21 | rufoa | i'm not familiar with the internals of clojure but it seems like the same issue |
| 18:23 | surma | Hey guys. I just did `(let [w1 w2 w3 :as words] (split line #"\s+") ...)` and words is bound to an vector longer than 3 items. How can I idiomatically bind the resulting vector? |
| 18:24 | tomoj | rufoa: http://dev.clojure.org/jira/browse/CLJ-700 |
| 18:24 | gtrak` | surma: i think there must be a typo somewhere |
| 18:24 | SegFaultAX|work2 | ,(let [[a b c & more] [:a :b :c :d :e :f]] (a b c more)) |
| 18:24 | clojurebot | #<IllegalArgumentException java.lang.IllegalArgumentException: Wrong number of args passed to keyword: :a> |
| 18:24 | SegFaultAX|work2 | ,(let [[a b c & more] [:a :b :c :d :e :f]] [a b c more]) |
| 18:24 | clojurebot | [:a :b :c (:d :e :f)] |
| 18:24 | rufoa | thanks tomoj, didn't notice that |
| 18:25 | SegFaultAX|work2 | surma: ^ Like that? |
| 18:25 | gtrak` | ,(let [[w1 w2 w3 :as words] (split line #"\s+" "hello how are you doing?")] words) |
| 18:25 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: split in this context, compiling:(NO_SOURCE_PATH:0)> |
| 18:26 | gtrak` | ,(let [[w1 w2 w3 :as words] (clojure.string/split line #"\s+" "hello how are you doing?")] words) |
| 18:26 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: line in this context, compiling:(NO_SOURCE_PATH:0)> |
| 18:26 | surma | ,(let [[w1 w2 w3 :as words] (clojure.string/split "hello how are you doing?" #"\s+")] words) |
| 18:26 | clojurebot | ["hello" "how" "are" "you" "doing?"] |
| 18:27 | surma | I want words to be ["hello" "how" "are"] |
| 18:27 | gtrak` | surma: doesn't work that way |
| 18:27 | surma | gtrak`: figured as much ^^ |
| 18:27 | gtrak` | ,(macroexpand-1 '(let [[w1 w2 w3 :as words] (clojure.string/split "hello how are you doing?" #"\s+")] words)) |
| 18:27 | clojurebot | (let* [vec__168 (clojure.string/split "hello how are you doing?" #"\s+") w1 (clojure.core/nth vec__168 0 nil) w2 ...] words) |
| 18:27 | emezeske | ,(let [[w1 w2 w3 :as words] (clojure.string/split "hello how are you doing?" #"\s+")] (take 3 words)) |
| 18:27 | clojurebot | ("hello" "how" "are") |
| 18:28 | gtrak` | this is the expansion: (let* [vec__2006 (clojure.string/split "hello how are you doing?" #"\s+") w1 (clojure.core/nth vec__2006 0 nil) w2 (clojure.core/nth vec__2006 1 nil) w3 (clojure.core/nth vec__2006 2 nil) words vec__2006] words) |
| 18:28 | SegFaultAX|work2 | surma: What are you trying to do? |
| 18:28 | gtrak` | you can see words is bound to the result of split |
| 18:29 | gtrak` | you can make a custom macro, or you can do [w1 w2 w3] or take 3. |
| 18:29 | surma | SegFaultAX|work2: Nothing really. I'm just playing around with ":as". Learning Clojure ;) |
| 18:30 | surma | gtrak`: Okay. That's all I wanted to know. Thanks for the expansion. Gonna remember that in the future ;) |
| 18:30 | gtrak` | np |
| 18:31 | SegFaultAX|work2 | Does loop..recur generate a trampoline internally? |
| 18:32 | gtrak` | SegFaultAX|work2: I just took a quick peek, it looks like loop generates one of these: http://asm.ow2.org/asm33/javadoc/user/org/objectweb/asm/Label.html so that should be a clue |
| 18:33 | gtrak` | doc says 'Labels are used for jump, goto, and switch instructions' |
| 18:35 | gtrak` | and in recur, there's a line, gen.goTo(loopLabel) |
| 18:36 | gtrak` | the compiler keeps the labels on a var stack, so that determines the recur target (I wonder if I could hack that ;-) |
| 18:38 | thorbjornDX | is it normal to cringe at python code after learning about a lisp? |
| 18:39 | vilonis | yes, which is strange because python code seemod so elegent before |
| 18:40 | technomancy | it's not technically required, but, you know... |
| 18:40 | hoover_damm | eventually you stop cringing at things and learn to just accept them as is |
| 18:40 | thorbjornDX | vilonis: I find myself thinking a helper 'function' that uses [].append is ugly |
| 18:40 | nDuff | ...soooo many places where a bit of nil punning, or a let, or real lambdas, or somesuch would save me extra lines. |
| 18:41 | thorbjornDX | hoover_damm: Yeah, I know that python/perl are good languages, and have their places |
| 18:41 | thorbjornDX | nDuff: yeah, I definitely hit the limits of lambdas today |
| 18:41 | tanzoniteblack | http://programmablelife.blogspot.com/2012/08/conways-game-of-life-in-clojure.html has a section at the bottom, where the clojure example is almost identically written in "un-idiomatic python", I find that's what my Python looks like quite a lot now a days |
| 18:42 | hoover_damm | thorbjornDX, :) I'm just an old Sysadmin who's never stopped evolving from shell into ruby into python into lisp into clojure. |
| 18:42 | hoover_damm | thorbjornDX, it's just another tool to help :) win |
| 18:42 | hoover_damm | one that I rather like |
| 18:42 | thorbjornDX | nDuff: and that helper function that I was doing had one of the notorious 'm = reobj.match(blah); if m is not None: l.append(m.groupdict())' |
| 18:43 | thorbjornDX | hoover_damm: I really want to incorporate some clj into my work, but I'm not quite there :p |
| 18:44 | hoover_damm | thorbjornDX, I found the absolute best way. Infrastructure management |
| 18:44 | technomancy | hoover_damm: pallet? |
| 18:44 | hoover_damm | nah |
| 18:44 | hoover_damm | not cm |
| 18:44 | hoover_damm | nor cmdb |
| 18:44 | nDuff | ...oh -- the other thing I really wanted today was partial |
| 18:44 | technomancy | what are those? |
| 18:44 | thorbjornDX | infrastructure management... hmm |
| 18:45 | thorbjornDX | hoover_damm: can you give me an example? |
| 18:46 | emezeske | nDuff: functools has partial |
| 18:46 | hoover_damm | technomancy, one of my clients runs on multiple infrastructure providers. We've taken on some burdons of our own that make our life fun. But to start just a lame restful/dashboard interface that you can query all the available servers, their status, credentials... reinstall it, manage provisioning status |
| 18:46 | technomancy | gotcha |
| 18:46 | hoover_damm | technomancy, i've reviewed many systems and basically they all end up opinionated |
| 18:47 | hoover_damm | for us it starts with just basic ubuntu and being able to catalog and search our infra and have it pull data from 3rd party api endpoints |
| 18:47 | hoover_damm | some own data collection as well for what you cannot get via api |
| 18:48 | hoover_damm | and when your spending 500k on infrastructure a month people want it pretty ... yeah |
| 18:49 | hoover_damm | and between currently 3 providers (1 virtual, 1 paas, 1 metal hosting) |
| 18:50 | nDuff | emezeske: Yes, but this was actually in a case where idiomatic Python was object-oriented, not functional. |
| 18:50 | emezeske | nDuff: I'm just saying, if you want partial, you can have it |
| 18:51 | nDuff | ...so, what I _really_ wanted was an easy way to create a subclass of an object with a default value for a constructor argument... |
| 18:51 | thorbjornDX | nDuff: can't you use a metaclass for that? |
| 18:52 | nDuff | Could, but anything more than 2 lines is too much code for too little benefit here. This was "sure would be convenient if..." thing. |
| 18:52 | thorbjornDX | nDuff: fairNuff |
| 18:56 | dnolen | can now decode SourceMapV3 http://github.com/clojure/clojurescript/blob/source-map/src/clj/cljs/sourcemap.clj |
| 18:56 | emezeske | nDuff: lambda *args: MyClass(42, *args) |
| 18:57 | dnolen | next step preserve line / col info for every emitted symbol and merge w/ this and create new source map. |
| 18:57 | emezeske | dnolen: high five! |
| 18:57 | tanzoniteblack | nDuff: you mean like this http://pastebin.com/c7gEQChX ? |
| 18:57 | dnolen | so maybe we can show off stepping in Chrome for Strange Loop? |
| 18:57 | emezeske | dnolen: That's such a big deal |
| 18:57 | dnolen | and all you hard core CLJSers can finally get a little bit of help w/ your simple & advanced compiled code |
| 18:59 | tanzoniteblack | nDuff: http://paste.ubuntu.com/1178754/ is that better? I don't want to dump a bit of Python code here |
| 18:59 | nDuff | *nod*. I don't actually remember what I was doing at the time when "damn, this would be easier with a partial" went through my head |
| 18:59 | nDuff | so I couldn't say with certainty whether that's an exact fit or not. |
| 19:00 | nDuff | It _is_ a fairly compelling argument that I've gotten pretty far out of #python headspace, though. |
| 19:00 | thorbjornDX | i need to use *args more often |
| 19:02 | tanzoniteblack | nDuff: I have more of a problem of getting out of the python mind-set and into the clojure one; but considering how functional my python tends to be, it's less painful to do that then it is to code in Java |
| 19:05 | Frozenlock | I'm trying to run himera, but I run into this: Error: problem requiring leiningen.js hook Exception in thread "main" java.io.FileNotFoundException: Could not locate leiningen/js__init.class or leiningen/js.clj on classpath: |
| 19:05 | Frozenlock | But I can see the 'missing' file, it's there! |
| 19:06 | gtrak` | I don't miss python really, clojure's more dynamic, transparent, and faster once you get past the initial learning. |
| 19:07 | gtrak` | I can jump into the source and have a good idea of what it's doing |
| 19:15 | Gnosis- | technomancy: I wrote a workaround macro for the slingshot bug we were talking about: https://www.refheap.com/paste/4783 |
| 19:16 | Gnosis- | I'm not sure it's useful to you or anyone but me, though |
| 19:30 | unlink | Is there a more concise expression for this: (split-with (comp (partial = method) :method) xs) |
| 19:32 | hyPiRion | unlink: Method is a local, right? |
| 19:32 | hyPiRion | /s/Method/method |
| 19:32 | unlink | hyPiRion: yes, it is let-bound. |
| 19:32 | emezeske | unlink: Maybe (split-with #(= % :method) xs) ? |
| 19:33 | hyPiRion | emezeske: You mean (split-with #(= method (:method %)) xs), right? |
| 19:33 | unlink | No, using an anonymous lambda it would be (split-with #(= method (:method %)) xs) |
| 19:33 | hyPiRion | It's essentialy the same |
| 19:33 | emezeske | Oh, I misread the original, sorry |
| 19:34 | xeqi | (split-with #(-> % :method (= method)) xs) ? |
| 19:34 | xeqi | not that it changes much |
| 19:34 | unlink | I was hoping for something similarly concise to: break ((== method) . _method) |
| 19:34 | hyPiRion | Do you need both parts? |
| 19:35 | unlink | Yes. |
| 19:37 | hyPiRion | Well, the closest other thing I can think of is (group-by :method xs), but it's more of a filter/remove thing. |
| 19:38 | unlink | Right, I like that too. |
| 19:39 | unlink | Thanks. |
| 20:00 | kjellski | is there a debug let? that prints all definitions? or something similar.... ? |
| 20:03 | emezeske | kjellski: I don't know the answer to your question, but there is a hack that I use occasionally to see things in a let: |
| 20:03 | emezeske | ,(let [a 1 b 2 _ (println a b) c 3] (+ a b c)]) |
| 20:03 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: Unmatched delimiter: ]> |
| 20:03 | emezeske | ,(let [a 1 b 2 _ (println a b) c 3] (+ a b c)) |
| 20:03 | clojurebot | 1 2 |
| 20:04 | clojurebot | 6 |
| 20:09 | hyPiRion | I usually redefine prn to (fn prn [a] (clojure.core/prn a) a) - it's rather nifty for debugging. |
| 20:10 | hyPiRion | So my way would be (let [a (prn 1) b (prn 2) c (prn 3)] (+ a b c)) |
| 20:10 | hyPiRion | Though I don't know if it's idiomatic - it's something I've dragged along from common lisp. |
| 20:21 | djanatyn | I'm having a lot of trouble getting clojure working on windows |
| 20:22 | casion | more information would be nice |
| 20:22 | djanatyn | I'm using clojure mode version 1.11.5, emacs 24, and Leiningen 2.0.0-preview10 on Java 1.6.0_11 Java HotSpot(TM) Client VM |
| 20:23 | djanatyn | sorry, was getting versions before I explained my issue :) |
| 20:23 | djanatyn | so, so far I've got lein working nicely, but I'm having issues with clojure-jack-in. when I try to connect I get this error: |
| 20:24 | djanatyn | (error "Could not start swank server: '$SHELL' is not recognized as an internal or external command, operable program, or batch file") |
| 20:24 | djanatyn | I'm using eshell, due to some restrictions on the computer I'm using |
| 20:25 | hyPiRion | djanatyn: Are you able to run "M-x shell" without issues? |
| 20:25 | djanatyn | nope, command prompt disabled :( |
| 20:26 | djanatyn | this is a school loaned laptop, and they have a few things locked down to prevent mischief. |
| 20:26 | djanatyn | is enabling the command prompt necessary to get clojure-mode working? |
| 20:28 | xeqi | you could try `lein swank` from the project and M-x slime-connect |
| 20:28 | djanatyn | ah, I see what's up. clojure-swank-command is set to "echo \"lein jack-in %s\" | $SHELL -l" |
| 20:30 | djanatyn | ...and also lein doesn't have swank. what is the preferred way to add plugins with lein 2? |
| 20:31 | xeqi | for swank, add {:user {:plugins [[lein-swank "1.4.4"]]}} to ~/.lein/profiles.clj |
| 20:31 | hyPiRion | .lein/profiles.clj I believe. |
| 20:31 | djanatyn | sorry, just did :) I'll try googling next time before asking |
| 20:32 | Raynes | Consider using nrepl.el instead of swank and SLIME. |
| 20:32 | Raynes | swank-clojure is deprecated. |
| 20:34 | djanatyn | thanks Raynes! I installed nrepl and everything is working fine |
| 20:34 | kd4joa | swank clojure is still more stable than nrepl at this point. I'm sticking with it for now, but you are right nrepl is supposed to be the favored |
| 20:34 | kd4joa | I'll keep checking out nrepl and will make the move when it stops crashing so much |
| 20:35 | djanatyn | umm, hmm. perhaps I said that too soon. |
| 20:36 | kd4joa | give it a try and see how it works for you |
| 20:37 | kd4joa | most of the time it works great for me, but I've had a couple instances where it freaked out on me |
| 20:38 | kd4joa | and it is the tool that it sounds like people are going to spend their time on |
| 20:38 | hyPiRion | As long as you don't use paredit, you should be relatively fine. But it's pretty awesome at killing paredit's keybindings. |
| 20:40 | djanatyn | D: I love using paredit |
| 20:41 | djanatyn | also, I'm getting this error when I try to compile a file with C-c C-k: clojure.lang.LispReader$ReaderException: java.lang.RuntimeException: EOF while reading string |
| 20:42 | hyPiRion | I'm using bodil's hack to get over it while waiting for a new version: https://github.com/bodil/emacs.d/blob/master/bodil-lisp.el#L55 |
| 20:43 | djanatyn | ah, looks like someone else had the same error 3 days ago, and they released a new version of nrepl with a fix |
| 20:44 | brainproxy | good tutorial for learning how to use YourKit in combo w/ clojure and Eclipse |
| 20:44 | brainproxy | ? |
| 20:50 | arrdem | can someone point out what's wrong with the IO in this gist? for some reason it (read)s without end. https://gist.github.com/3561992 |
| 21:00 | arrdem | nvm got it |
| 21:00 | djanatyn | what was it? |
| 21:01 | arrdem | something with the way lein was bootstrapping the program. If I just `clj <foo.clj>` it works fine |
| 21:02 | arrdem | probably a bug in my project.clj, but I don't really care since this is a script anyway. |
| 21:06 | dansalmo | How can I split a sequence like '(\b \o "F" \: \h \o) at the \:? I tried (split-with (partial = \: '(\b \o "F" \: \h \o) ) but it gives a '() split result. |
| 21:07 | dansalmo | (partial = \:) |
| 21:09 | djanatyn | alright, thanks guys! I've got nrepl and emacs set up, and I'll be able to use clojure at my school and in my stats class :) |
| 21:16 | kd4joa | stats class? very cool. what kind of stats class and how are you going to use it? |
| 21:17 | Raynes | kd4joa: What do you mean by 'crashing so much'? |
| 21:17 | kd4joa | it gets into the situation where when I switch to the nrepl buffer it throws an exception as soon as I switch to it |
| 21:17 | kd4joa | that's been the biggest problem |
| 21:18 | Raynes | Oh. The word 'crashing' confused me. |
| 21:18 | Raynes | I thought you meant Emacs was actually crashing. |
| 21:18 | kd4joa | sorry. that was kind of a generic expression |
| 21:18 | kd4joa | I should have been more specific |
| 21:19 | Raynes | But yeah, I imagine all those little issues will be fixed soon. |
| 21:19 | Raynes | For every nrepl issue, there are 15 that a new user coming to Clojure has with SLIME. |
| 21:19 | Raynes | So I'm optimistic. |
| 21:19 | kd4joa | I'm sure they will since it's getting so much attention |
| 21:19 | kd4joa | yeah I am too. I do remember the pain of getting SLIME working |
| 21:20 | casion | getting slime working is pretty easy with 24 |
| 21:20 | casion | at least it was for me |
| 21:20 | Raynes | Yeah, an ancient version of SLIME. |
| 21:20 | Raynes | That clojure-jack-in hacks into .emacs.d for you. |
| 21:20 | Raynes | That is 15 different kinds of disgusting. |
| 21:21 | casion | that is true |
| 21:21 | casion | but it works for the most part :) |
| 21:26 | gtuckerkellogg | dos nrepl.el have something analogous to slime-compile-defun yet? |
| 21:27 | Raynes | What does that do? |
| 21:27 | gtuckerkellogg | it compiles the top level form |
| 21:27 | gtuckerkellogg | I have it attached to C-c C-c |
| 21:28 | gtuckerkellogg | (or maybe that's how it comes in slime) |
| 21:28 | Raynes | gtuckerkellogg: C-M-x |
| 21:28 | Raynes | gtuckerkellogg: nrepl readme has a list of commands. |
| 21:28 | Raynes | nrepl.el readme, that is. |
| 21:31 | gtuckerkellogg | Tnanks Raynes :) |
| 21:31 | gtuckerkellogg | i apprently missed that one. |
| 21:32 | gtuckerkellogg | I was really happy to see output of evals in a clojure buffer are now sent to the repl |
| 21:33 | djanatyn | hmm, nrepl's auto-complete is really slow |
| 21:33 | djanatyn | I'm using ac-nrepl, which I found on marmalade. how do most people using nrepl handle auto completion? |
| 21:35 | djanatyn | ooh, never mind. I wasn't actually using ac-nrepl, and now it's a lot faster. |
| 21:38 | xeqi | kd4joa: for reference, theres an issue for that at https://github.com/kingtim/nrepl.el/issues/86 |
| 21:50 | Frozenlock | Why does lein throw an error when trying to run himera? Apparently it has something to do with leiningen.js (not on classpath?!) I'm pretty sure it has to do with this --> :hooks [leiningen.js] |
| 21:50 | Frozenlock | (from https://github.com/fogus/himera/blob/master/project.clj) |
| 21:52 | holo | hi |
| 21:54 | cjfrisz | Man... I really want nrepl-jack-in to do stack traces like swank-clojure |
| 21:54 | cjfrisz | I really like everything else about it, but the stack trace handling kills me |
| 21:54 | djanatyn | hmm. does anyone know where I'm supposed to put incanter.jar? |
| 21:55 | djanatyn | I tried installing it with lein, but apparently there's a mongodb jar it can't find |
| 21:56 | djanatyn | also, I think the incanter blog with all the howtos is down :( |
| 22:07 | hugod | cjfrisz: ritz-nrepl does that |
| 22:11 | Raynes | hugod: Why is your stuff not going into nrepl proper? |
| 22:12 | hugod | Raynes: because it adds a ton of stuff, and means you use two jvm processes |
| 22:12 | Raynes | Bleh |
| 22:13 | hugod | it also shares common code with the swank version of ritz |
| 22:15 | hugod | Raynes: so the answer is, it was easier to do like that. I have nothing against putting parts of into nrepl/nrepl.el |
| 22:21 | gtuckerkellogg | djanatyn :( |
| 22:28 | cjfrisz | hugod: Is it a pain to install? |
| 22:28 | cjfrisz | The github page made it sound like a pain |
| 22:30 | jasonjckn | amalloy: have your patches for reducers been comitted yet? |
| 22:31 | amalloy | no |
| 22:31 | jasonjckn | amalloy: k, i'll revisit mine when yours are in |
| 22:32 | jasonjckn | i was busy for a while, but i guess you've been blocked on rhickey and I didn't miss too much |
| 22:32 | jasonjckn | i'm on the contributors list merely by signing the agreement, i guess my work here is done ;) jk |
| 22:46 | SegFaultAX|work2 | I want to filter a map to only keys where the values match a given predicate, what's the best way to do that? |
| 22:55 | technomancy | jkkramer: I have clojuresphere working with clojure 1.4 and the latest compojure stack |
| 22:56 | jkkramer | technomancy: whoa cool. I was just sitting down to see about refreshing the data |
| 22:56 | technomancy | I punted on the github section though |
| 22:58 | technomancy | jkkramer: have you seen drawbridge? |
| 22:58 | technomancy | I could add this in too: https://devcenter.heroku.com/articles/debugging-clojure |
| 23:00 | jkkramer | technomancy: I've seen it. I've generally shied away from plugging a repl into a live site but no harm in having the option I suppose |
| 23:01 | technomancy | jkkramer: actually probably not much point right now since there's basically no difference between dev and production |
| 23:02 | tmciver | SegFaultAX|work2: how about (into {} (filter your-val-pred your-map)) |
| 23:03 | technomancy | jkkramer: sent a pull request for my modernize branch |
| 23:03 | technomancy | you may want to do your refresh first since I haven't tested the switch to tentacles |
| 23:03 | tmciver | SegFaultAX|work2: your-val-pred would have to call (val %) at some point. |
| 23:07 | technomancy | jkkramer: if we're going to swap the storage out for another backend that might make sense to do first, don't you think? |
| 23:07 | jkkramer | technomancy: merged. going to futz with the github code anyway before refrsh |
| 23:07 | technomancy | ok, cool |
| 23:08 | technomancy | I figure a different backend would probably be fairly high-impact; the kind of thing you'd want to do sooner rather than later? |
| 23:08 | jkkramer | I wonder how accurate this is… https://api.github.com/legacy/repos/search/project.clj?language=clojure. can't search for empty keyword, and it doesn't say what it searches |
| 23:08 | clj_newb_3802 | so I've written an app in clojurescript, because I hate the java graphics api |
| 23:09 | clj_newb_3802 | now my question: is there a way to bundle this application as a desktop applicatino somehow? |
| 23:09 | technomancy | jkkramer: it's not very big |
| 23:09 | technomancy | oh, it's paginated |
| 23:09 | technomancy | hm |
| 23:09 | jkkramer | technomancy: possibly yeah. Have to wrap my head around the code & data again. it's been a while |
| 23:09 | jkkramer | right |
| 23:12 | jkkramer | searching for clojure yields 88 pages of projects… https://api.github.com/legacy/repos/search/clojure?language=clojure&start_page=88. That seems to be the best to be gotten through the API |
| 23:12 | technomancy | nice |
| 23:41 | cjfrisz | I love ripping out my own code |
| 23:41 | cjfrisz | So much fun |
| 23:50 | john2x | hmm, how do I call a function which is (defn)'d after the function calling it? |
| 23:51 | tmciver | john2x: declare? ##(doc declare) |
| 23:51 | lazybot | ⇒ "Macro ([& names]); defs the supplied var names with no bindings, useful for making forward declarations." |
| 23:52 | john2x | ah thanks! |