2012-10-07
| 00:02 | Sgeo | Is there a way to get lein test to expand all stack traces? |
| 00:03 | Sgeo | Also, I hate Clojure stack traces so much |
| 00:11 | Sgeo | I have no idea if what I found in delimc is a bug or an intended case |
| 00:11 | Sgeo | And thus don't know if "fixing" it would break anything |
| 00:11 | Sgeo | Or even how to "fix" it, come to think of it |
| 00:34 | lancepantz | I've managed to lose the function signatures that clojure-mode usually prints in the emacs minibuffer, is there a manual way to turn it on? |
| 00:40 | ChongLi | lancepantz: I believe that's eldoc |
| 00:40 | ChongLi | yeah |
| 00:41 | ChongLi | it only works for me when I have eldoc-mode enabled |
| 01:14 | jonasen | How do you upgrade from nrepl.el 0.1.3 to 0.1.4? |
| 01:22 | spoon16_ | what is the appropriate way to grab the latest version of a dependency in the leiningen project file? |
| 01:31 | wingy | how do i unquote id in : '[:find ?account :where [?account :name id] [?account :password password]] |
| 01:32 | jonasen | wingy: Why not pass id as an argument? |
| 01:32 | wingy | jonasen: how do you mean? |
| 01:33 | jonasen | wingy: (q '[:find ?account :in $ ?id :where ...] my-db id) |
| 01:35 | wingy | jonasen: didn't know you could do that (just started to read the tutorial) |
| 01:35 | wingy | thx a lot |
| 01:36 | lancepantz | ChongLi: thank you! |
| 01:55 | lpvb | I want to use a more powerful editor but emacs has a loot of unfriendly to remember keybindings |
| 01:55 | lpvb | :( |
| 01:56 | ivan | lpvb: I use CUA mode and do some rebinding (esp. ESC -> ctrl-g) |
| 02:06 | wingy | how come that i have no :session key in my req object |
| 02:06 | wingy | i think i have to use wrap-session |
| 02:07 | Sgeo | Ran 69 tests containing 69 assertions. 2 failures, 29 errors. |
| 02:07 | Sgeo | I think the safest conclusion is that I suck. |
| 02:14 | lpvb | arghh, I'm just going to dump time into learning emacs until I get it and disregard every ill feeling I have while doing so. I hope it doesn't disappoint. |
| 02:20 | clj_newb_234 | how do I get lein to include clojure.contrib.math |
| 02:20 | clj_newb_234 | what do I put into project.clj |
| 02:42 | wingy | to destroy the session info i just send an empty session back? |
| 02:44 | wingy | i sent {:session nil} and it seems to work |
| 03:18 | fredyr | anybody who knows how to output unescaped things with clojure.data.xml? |
| 03:18 | fredyr | (emit-str (sexp-as-element [:tag {} "
"])) |
| 03:19 | fredyr | gives me 
 which isn't really what i wanted |
| 03:48 | lpvb | amusing: https://www.youtube.com/watch?feature=player_embedded&v=1JZnj4eNHXE |
| 03:49 | Sgeo | asdfasdfasdf |
| 03:49 | Sgeo | So: |
| 03:49 | Sgeo | I am completely able to define the function that I want at the REPL |
| 03:49 | Sgeo | Just can't do it from within this project for some stupid reason |
| 03:50 | Sgeo | As in, can't load it from the file or it will try to pass some Java method more than 20 parameters |
| 03:50 | Sgeo | I don't get it at all |
| 03:50 | Sgeo | wtf |
| 03:53 | fredyr | lol LadyJava |
| 03:54 | Sgeo | And I'm still having trouble trying to rewrite delimc to not force :use on everyone |
| 04:16 | Sgeo | I suppose I shouldn't fault Clojure for the existence of garbage libraries. |
| 04:17 | Sgeo | After all, Haskell also has garbage libraries. |
| 04:26 | SegFault1X | Sgeo: That's a pretty useless thing to say. |
| 04:28 | SegFault1X | Sgeo: Pretty much every single language ever has garbage. |
| 04:49 | Raynes | Sgeo: You can use paredit in other languages. |
| 04:49 | Raynes | emacs-starter-kit has some paredit-for-other-langs goodies, but it probably works out of the box for other languages too. |
| 06:42 | lancepantz | what the up to date way to use clojure.contrib.math |
| 06:42 | lancepantz | i need an exponent function |
| 06:48 | vijaykiran | lancepantz: clojure.math.numeric_tower ? |
| 06:48 | vijaykiran | https://github.com/clojure/math.numeric-tower/blob/master/src/main/clojure/clojure/math/numeric_tower.clj |
| 07:25 | qerub | Is there some library that macro-generates a deftest from a table of test cases (like '[[x (->camelCase x) (->CamelCase x)] ["camel-case" "camelCase" "CamelCase]])? |
| 07:28 | augustl | hmpf, the fact that the "body" of Ring http requests can only be read once is proving to be a major pain in the ass |
| 07:28 | augustl | if some middleware somewhere reads it, then all other middlewares that depend on it will fail miserably |
| 07:29 | augustl | there should probably be some sort of convention for how a middleware that reads a body that can only be read once should behave.. |
| 07:30 | qerub | augustl: +1 |
| 07:31 | augustl | also, side effects sucks.. :P |
| 07:36 | augustl | the multipart-params middleware in ring core reads body but doesn't seem to be making any attempts of making it readable by other middlewares |
| 07:38 | augustl | the input stream I'm getting is a http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/server/HttpInput.html, I'm not very familiar with Java stuff though.. |
| 07:38 | augustl | anyone knows if there's possible to read a java.io.InputStream multiple times somehow? |
| 07:40 | augustl | the only solution I can think of is to wrap my app in a middleware that reads :body and replaces it with a new input stream that can be read multiple times |
| 07:44 | qerub | augustl: For reference, Rack solves it this way: http://rack.rubyforge.org/doc/Rack/RewindableInput.html |
| 07:45 | augustl | qerub: same problem there it seems |
| 07:46 | augustl | would make sense if middlewares didn't assume what the content of :body was.. |
| 07:47 | augustl | so that I could turn :body into a byte array instead of an input stream, but then the multipart middleware would break |
| 07:50 | qerub | augustl: Maybe you can file an issue on https://github.com/ring-clojure/ring/issues to get the discussion going? |
| 07:50 | qerub | augustl: I think Rack request bodies are required to be "rewindable", i.e. always saved for future reads. |
| 08:45 | augustl | qerub: the more I think about it, the more I conclude that Ring is doing the right thing |
| 08:46 | augustl | after all, what's actually the use case for reading the body multiple times? I don't have one, it's just sloppy middleware chaining on my part that's causing it |
| 08:46 | augustl | I'll think about it some more before posting an issue.. |
| 08:46 | antares_ | augustl: Rack developers themselves don't recommend doing exactly what Rack is doing |
| 08:46 | antares_ | lots of pain points and not-so-great features around streaming and middleware composition |
| 08:53 | augustl | antares_: indeed, if the body is a 100mb file upload (which it might be in my case) reading it twice is a bit silly.. |
| 12:51 | fckw | Hi there. |
| 12:51 | fckw | I have a question: I am currently learning on how namespaces work in clojure. |
| 12:51 | fckw | You can use (use 'my.namespace). |
| 12:51 | fckw | (And others like require etc.) |
| 12:52 | fckw | Why do I have do use the single apostrophe before the namespace name? |
| 12:52 | SegFault1X | fckw: To quote it. |
| 12:52 | fckw | It's quoting - I know. But why do I need to quote it? |
| 12:52 | Iceland_jack | fckw: so it doesn't get evaluated |
| 12:53 | fckw | So it's a symbol then that needs to be quoted? |
| 12:53 | SegFault1X | fckw: And because under the hood it's just calling require/refer for you. |
| 12:54 | fckw | Hm, I'm still sometimes a little confused when to use a string, a symbol or a quoted symbol in clojure. |
| 12:54 | SegFault1X | fckw: Sometimes it depends on the form in question. |
| 12:55 | fckw | @SeqFault1X: Ah, I see. And how do I find out which form requires with input? |
| 12:55 | SegFault1X | fckw: Documentation. |
| 12:55 | SegFault1X | Or ask, or google. |
| 12:55 | fckw | :) |
| 12:57 | fckw | SeqFault1X: Thanks for your answer. |
| 12:57 | SegFaultAX | fckw: No problem. |
| 12:59 | SegFaultAX | fckw: Apparently it has to do with clojure.lang.Namespace/find requiring a symbol when trying to lookup the appropriate namespace. |
| 13:01 | fckw | Ok. How did you find this out? |
| 13:01 | SegFaultAX | fckw: Reading the source. |
| 13:01 | fckw | Source of namespace.clj? |
| 13:02 | SegFaultAX | fckw: clojure/core |
| 13:03 | fckw | Hm, alright. Still lot of things to figure out for me. |
| 13:06 | fckw | This is also helpful concerning the matter: http://blog.8thlight.com/colin-jones/2010/12/05/clojure-libs-and-namespaces-require-use-import-and-ns.html |
| 13:06 | SegFaultAX | fckw: That's basically the de facto resource for learning about Clojure's namespacing. |
| 13:15 | fckw | So, obviously, when working in the REPL I first have to load a namespace using one of the various load-XXX functions, before I can do a use or a require on the namespace? |
| 13:15 | metellus | fckw: no, use and require are all you need |
| 13:19 | fckw | @metellus: But why does the following example not work then: |
| 13:20 | fckw | (ns foo) |
| 13:20 | fckw | Sorry, rather: |
| 13:20 | fckw | (ns 'foo) |
| 13:20 | fckw | (defn myfunc [a b] (* a b)) |
| 13:20 | fckw | (ns 'bar) |
| 13:20 | fckw | (myfunc 4 5) |
| 13:21 | fckw | It says: FileNotFoundException |
| 13:21 | fckw | Also when I now say: (use 'foo) |
| 13:22 | @rhickey | how does one get lein to use a local jar, e.g. I work on clojure, have a temporary jar I want to try in the context of a lein project? |
| 13:22 | @rhickey | using lein localrepo leaves lein complaining: Could not find artifact local.repo:clojure:pom:1.5.0-alpha6 in clojars/central |
| 13:22 | @rhickey | which seems harmless for lein repl, but I am using tooling calling `lein classpath` and the warning is in the output |
| 13:24 | hiredman | the easiest way to use a custom build of clojure is maybe to run `mvn install` in a clojure checkout, which will put the jar in ~/.m2 where lein can find it |
| 13:24 | pjstadig | that's usually what i do with a custom clojure build, too |
| 13:25 | @rhickey | Isn't that what localrepo is doing for me? |
| 13:25 | @rhickey | I've read that similar problems crop up with mvn install |
| 13:26 | pjstadig | i've never used lein localrepo myself |
| 13:26 | pjstadig | i usually either do the mvn install or at work we have an archiva instance that we put some jars into |
| 13:26 | @rhickey | I don't want to use the proper clojure name/group and mess up other things |
| 13:28 | pjstadig | rhickey: you did a `lein localrepo install something something`? |
| 13:29 | @rhickey | pjstadig: yes |
| 13:29 | @rhickey | lein localrepo install ~/dev/clojure/clojure.jar local.repo/clojure 1.5.0-alpha6 |
| 13:29 | @rhickey | and lein repl runs, with that jar, after complaining |
| 13:29 | hiredman | pjstadig: is it normal for lein to search through repos in order and print warnings for each repo where it cannot find whatever? |
| 13:30 | @rhickey | but lein classpath puts the warning in the output, spoiling things for downstream tooling |
| 13:30 | fckw | ok, need to quit. Thanks, guys. |
| 13:30 | fckw | Bye. |
| 13:32 | @rhickey | I'd much rather just have an {:unreproducible-classpath-extension path/to/jar} in project.clj |
| 13:33 | @rhickey | there's something fundamentally wrong about having to produce pseudo-deployed artifacts for wip |
| 13:33 | @rhickey | trying to play along, but no joy |
| 13:33 | pjstadig | i feel like if you don't have a jar in your .m2 it will iterate through the repos and print warnings until it finds the one that has it |
| 13:34 | pjstadig | not sure if that is lein or the maven code printing the warning |
| 13:34 | @rhickey | it's in .m2 |
| 13:34 | pjstadig | yeah that's weird |
| 13:34 | @rhickey | it's something to do with a pom |
| 13:34 | pjstadig | i don't get any warnings for something that's in my .m2 |
| 13:34 | pjstadig | sounds like it might be |
| 13:34 | @rhickey | not using mvn install leaves it pom-less |
| 13:36 | @rhickey | manually copying the pom shuts it up |
| 13:37 | @rhickey | thanks guys |
| 13:51 | holo | hi |
| 13:51 | OE | hey |
| 14:11 | Sgeo | Maybe if I actually take the time to comprehend how delimc works, I'll be able to fix it |
| 14:11 | Sgeo | And learn something in the process |
| 14:22 | bonega | Is there a standard clojurescript macro for making this nicer? (set! (. obj field) value) |
| 14:26 | hiredman | bonega: (set! (.-field obj) value) |
| 14:27 | Gosh | If I use (:import ..) inside the ns macro it does not work, but if I use it outside it works. Any ideas? |
| 14:27 | bonega | hiredman: thanks thats better. But would prefer (set! obj -field value) |
| 14:28 | bonega | suppose there are some good reason |
| 14:29 | Gosh | I am lunching a repl with this single file. Maybe should I compile it? |
| 14:30 | Gosh | CompilerException java.lang.IllegalArgumentException: Unable to resolve classname: Display, compiling:(NO_SOURCE_PATH:1) |
| 14:30 | Gosh | this is the error |
| 14:30 | hiredman | Gosh: the file is missing an import of the Display class from whatever package |
| 14:31 | Gosh | (ns test |
| 14:31 | Gosh | (:import (org.eclipse.swt.widgets.Display))) |
| 14:31 | Gosh | if I use (ns test) (import org.eclipse.swt.widgets.Display)) it works |
| 14:31 | hiredman | Gosh: a. don't use single segment namespaces, b. that is not a correct import statement |
| 14:32 | hiredman | Gosh: what is the difference between (:import (org.eclipse.swt.widgets.Display)) and (import org.eclipse.swt.widgets.Display)) ? |
| 14:32 | Gosh | I have no idea. |
| 14:33 | Gosh | There was an example with marged ns and import |
| 14:33 | hiredman | Gosh: just look at the text |
| 14:33 | Gosh | can oyu do that? |
| 14:33 | hiredman | what is different? |
| 14:34 | Gosh | Are you asking me if is it syntacticaly correct or what? |
| 14:35 | Gosh | http://clojuredocs.org/clojure_core/clojure.core/import here |
| 14:35 | hiredman | I am asking you to visual compare the characters in the two snippets of text and tell me what the differences between the two are |
| 14:35 | hiredman | visually |
| 14:36 | Bronsa | Gosh: he's guiding you to understand the error |
| 14:37 | Bronsa | i think. |
| 14:37 | Gosh | lol, I do not get it |
| 14:37 | Gosh | cuz org.eclipse.swt.widgets.Display is the same in both instances |
| 14:37 | hiredman | ok, what about the rest? |
| 14:37 | kmicu | (:import vs (import |
| 14:37 | metellus | what else? |
| 14:38 | Gosh | I do not know mybe it is a special form and you can do it |
| 14:38 | Bronsa | this is fun |
| 14:38 | Gosh | (import ) = fun call? |
| 14:38 | Gosh | wtf |
| 14:38 | Gosh | lol |
| 14:38 | Gosh | are you gonna answer me or what |
| 14:39 | metellus | (:import (org.eclipse.swt.widgets.Display)) |
| 14:39 | hiredman | Gosh: I am not even asking about anything specific to clojure, just take the two snippets as text you came across on the internet, if you ran a character by character diff, what are the differences |
| 14:39 | metellus | (:import org.eclipse.swt.widgets.Display) |
| 14:39 | metellus | (:import (org.eclipse.swt.widgets.Display)) |
| 14:39 | metellus | now they are lined up |
| 14:39 | metellus | one above the other |
| 14:39 | metellus | find the differene |
| 14:39 | hiredman | Gosh: org.eclipse.swt.widgets.Display is infact the opposite of what I am asking about, because that string is the same in both |
| 14:40 | Gosh | import its the same aswel |
| 14:40 | Gosh | the rest I dont know |
| 14:40 | Gosh | if the syntax is correct |
| 14:40 | Sgeo | Forget about the syntax. Pretend that the language was gibberish. |
| 14:41 | kmicu | "Forget about syntax" ;] |
| 14:41 | Gosh | i am staring at it 5min alredy lmao |
| 14:42 | Gosh | the "(" surrounding the class name? |
| 14:42 | metellus | yes! |
| 14:43 | kmicu | stop teasing him ;) Gosh: http://www.infoq.com/presentations/Clojure-Namespaces-Vars-Symbols you should watch this |
| 14:45 | Gosh | nice, now I have to spend 42min to get my answer |
| 14:45 | Sgeo | kmicu, I should probably watch that too |
| 14:46 | Sgeo | Although I think I have a grasp of it |
| 14:46 | metellus | Gosh: as you saw, there shouldn't be parentheses around the class name |
| 14:46 | Sgeo | Common Lisp symbols are like Clojure vars rather than Clojure symbols, right? |
| 14:48 | Gosh | http://clojuredocs.org/clojure_core/clojure.core/import he puts parentheses around class names |
| 14:48 | Gosh | oh nvm |
| 14:48 | Gosh | I see it now |
| 14:48 | kmicu | the path to enlightenment is long and difficult |
| 14:48 | metellus | you either need no parens at all of you need '() |
| 14:48 | metellus | or you need* |
| 14:49 | metellus | Gosh: the reason is that if you just put parentheses, then Clojure tries to treat it as a function call |
| 14:49 | metellus | ,(+ 1 2) |
| 14:49 | metellus | vs |
| 14:49 | clojurebot | 3 |
| 14:49 | metellus | ,'(+ 1 2) |
| 14:49 | clojurebot | (+ 1 2) |
| 14:49 | Gosh | I know this |
| 14:49 | hiredman | metellus: stop |
| 14:50 | Gosh | I though ns were something special |
| 14:51 | hiredman | Gosh: I would not recommend listening to metellus, he is just confusing things |
| 14:51 | hiredman | Gosh: ns is special, it is a macro, and you don't quote in it |
| 14:51 | hiredman | Gosh: you said "I see it now" so you see the difference between the example and what you were doing? |
| 14:56 | Gosh | I saw that he was using parens with this format (package-name classes..). Still dont know why he is not putting ' infront of the list |
| 14:56 | hiredman | ns is a macro, the usual evaluation rules don't apply |
| 14:58 | Gosh | ok, thanks |
| 14:59 | kmicu | Just out of curiosity, do any of you use Programmer Dvorak xor Colemak layout? |
| 15:00 | tomoj | I use programmer dvorak |
| 15:06 | kmicu | tomoj: Any problems with emacs/vim? And whether the change was worth the price? ;] |
| 15:07 | kmicu | I want to move to P.Dvorak/Colemak and drop this qwerty malarkey |
| 15:08 | tomoj | I use emacs, haven't noticed much problem. but I think I learned emacs after switching to dvorak |
| 15:09 | tomoj | hard to say whether it was worth it therefore |
| 15:09 | kmicu | tomoj: one question - do you want to go back to qwerty goofiness? ;) |
| 15:11 | kmicu | "Qwerty was originally designed with the sole purpose of slowing down the typist so that typewriters would jam less and not need to be repaired as often." |
| 15:11 | chouser | I don't think that's true |
| 15:11 | chouser | "A popular myth is that QWERTY was designed to "slow down" typists though this is incorrect – it was designed to prevent jams[4] while typing at speed, allowing typists to type faster." -- http://en.wikipedia.org/wiki/QWERTY |
| 15:13 | kmicu | but the most commonly used characters are not on the homerun :/ |
| 15:15 | kmicu | nvm, let's get back to clojure |
| 15:19 | kmicu | homerow* ;) |
| 15:28 | tomoj | kmicu: no way |
| 15:28 | tomoj | even programmer dvorak over dvorak seems like a no brainer for clojure, not having to hit shift for (,[,{ etc |
| 15:30 | AimHere | A simpler fix would have Caps Lock locking shift for everything |
| 15:30 | AimHere | And then using the olde Lispe notionne of making it case-insensitive |
| 15:34 | Apage43 | is autodoc still kept up somewhere? |
| 15:45 | Urthwhyte | is there a way to unpack a vec and use it as function args? |
| 15:45 | Urthwhyte | i.e (+ (unpack [1 2)) => 3 |
| 15:46 | algernon | Urthwhyte: (apply + [1 2]) |
| 15:46 | Urthwhyte | thank you algernon :0 |
| 15:46 | Urthwhyte | s/0/)/ |
| 15:47 | wunki | I have one outputstream which I want to attach two consumers to, anyone tips how to do that? |
| 15:57 | oich | what am I doing wrong? (System/getProperty "java.class.path") shows clojopts jar file. (ns (:use 'clojopts.core)) in a file resolves with lein run. But, with lein repl, this does not work:(require '[clojopts.core]). clojopts results in can not find symbol |
| 15:57 | oich | or (require 'clojopts.core) |
| 15:59 | oich | never mind... |
| 16:06 | uroborus_labs | Where would the proper or idiomatic locations to store files needed for tests? |
| 16:06 | uroborus_labs | In the "test" directory or is it ok to create a directory at the project root? |
| 16:08 | SegFaultAX|work | uroborus_labs: Why not the test directory in the root of the project? |
| 16:10 | gfredericks | I think you can make a test-resources as well if you like separating the code from the other files |
| 16:11 | uroborus_labs | Ok thanks, I think i will go the test-resources route |
| 16:11 | gfredericks | you might have to add a lein option to make it work; check the lein sample-project.clj if it doesn't. |
| 16:11 | tomoj | you can put them in dev-resources, or add :resource-paths "test-resources" or whatever to the :dev profile |
| 16:11 | tomoj | er, ["test-resources"] |
| 16:24 | Gosh | Why would you quote something inside a macro?. Example (import '(package classes)). Would the import macro get as an input a list containing quete symbol and another list containing symbols package and classses?. Why would you let this as a valid input, instead of just (import (package classes)) since evaluation does not work inside macros? |
| 16:25 | Sgeo | import is not a macro. ns is. |
| 16:25 | Sgeo | The :import form in the ns does not need quoting around stuff, since a macro is reading it. But import is a function. |
| 16:25 | Sgeo | Hmm, hold on, I may be wrong |
| 16:26 | Gosh | import is a macro |
| 16:26 | Gosh | (import '(package classes)) = (import (package classes)) |
| 16:26 | Gosh | why? |
| 16:26 | clojurebot | why is the ram gone is <reply>I blame UTF-16. http://www.tumblr.com/tagged/but-why-is-the-ram-gone |
| 16:26 | Sgeo | Don't know. Consistency with functions such as use? |
| 16:28 | Gosh | Clojure is inconsisten as ****. For some keywords you can pass arguments inside a vector and for some inside a list. Its confusing. |
| 16:30 | Sgeo | Lists conventionally tend to imply special significance to the first element, while vectors don't |
| 16:31 | Sgeo | (import '(java.util Date Calendar)) ; the first element of the list has special significance, it is the prefix for the other classes |
| 16:31 | Sgeo | There are worse inconsistencies in Clojure, which I blame on Java |
| 16:49 | kmicu | dnolen: nice work ;) https://github.com/clojure/clojurescript/commits/source-map I thought that the project is dead |
| 16:49 | gfredericks | Gosh: the ns macro in particular isn't something anybody is proud of |
| 16:50 | dnolen | kmicu: heh it's not done, been hoping to get some help on it but still no takers. |
| 16:51 | Sgeo | Hi dnolen |
| 16:52 | zilti | I'm trying to use autocomplete with either ritz-nrepl or nrepl, but both give me error messages. Does that work for someone? Or is it a bug, since it's under heavy development? |
| 16:52 | Sgeo | I think my best bet for fixing delimc is going to be actually reading and understanding it first, rather than thinking I know how to fix it off the bat |
| 16:53 | kmicu | dnolen: where is an issue tracker for cljs1-source-map project? ;) |
| 16:53 | dnolen | kmicu: no issue tracker beyond the source :) |
| 16:54 | Sgeo | Incidentally, if I want to write a function that only makes sense inside a reset (it uses shift and thus its code needs to be transformed), is (reset (defn foo [] ...)) the appropriate way to do that? |
| 16:55 | dnolen | Sgeo: it's a brain twister. I suspect Chris Frisz's CLJTCO will be more useful for implementing proper delimited continuations for Clojure. |
| 16:55 | zilti | Sgeo: Better use (defn- foo [] ...) or (let [foo (fn [] ...)]) |
| 16:56 | hugod | zilti: if you are running ritz-nrepl, then you need to make sure you are using one of the provided "complete" ops |
| 16:57 | Sgeo | zilti, uh, the function is intended to be in a library, to be used by other code |
| 16:57 | Sgeo | dnolen, although I will say that writing the function at the REPL seemed to work properly. Loading it in from a file in my project didn't though :/ |
| 16:59 | zilti | hugod: Where can I find that? |
| 16:59 | dnolen | Sgeo: what's the error you're seeing? |
| 16:59 | Sgeo | Something about trying to give more than 20 parameters to a methods |
| 16:59 | Sgeo | method |
| 17:00 | hugod | zilti: https://github.com/pallet/ritz/tree/develop/nrepl#provided-nrepl-ops |
| 17:00 | Sgeo | This was last night, I don't have it open still |
| 17:00 | hugod | zilti: I see the links don't go anywhere :( |
| 17:01 | zilti | hugod: some go |
| 17:01 | dnolen | Sgeo: yeah, I don't know and I don't have time to dig into it. |
| 17:02 | zilti | hugod: Ok and where do I need to tell ritz which ops to use? |
| 17:03 | hugod | zilti: add ritz.nrepl.middleware.simple-complete/wrap-simple-complete or ritz.nrepl.middleware.fuzzy-complete/wrap-fuzzy-complete to the :nrepl-middleware as shown under https://github.com/pallet/ritz/tree/develop/nrepl#nrepl-general-middleware-usage |
| 17:04 | hugod | you can put these in your user profile too, I believe |
| 17:07 | zilti | hugod: I get a java.lang.ClassNotFoundException: complete.core |
| 17:10 | hugod | zilti: complete.core is used by vanilla nrepl.el, but is not added automatically by the ritz-nrepl server. You would need to add it to your :dev dependencies to use a ritz nrepl server with vanilla nrepl.el (ie without loading the nrepl-ritz.el package). |
| 17:21 | zilti | hugod: What's the dependency for complete.core? I can't find that one. |
| 17:22 | hugod | zilti: clojure-complete "0.2.2" |
| 17:22 | clojurebot | Cool story bro. |
| 17:22 | zilti | thanks |
| 17:33 | zilti | Nice. It completely stopped to work now. Exception in thread "main" com.sun.jdi.InvocationException: Exception occurred in target VM |
| 17:40 | wingy | is there a way to remove the namespacing in keywords eg. from :item/name to :name |
| 17:42 | tomoj | (comp keyword name) |
| 17:44 | wingy | (name keyword) worked |
| 17:44 | wingy | thx |
| 17:44 | wingy | oh forgot it returned the string |
| 17:45 | nightfly_ | (keyword (name ::example)) |
| 17:45 | gfredericks | ,((comp keyword name) ::example) |
| 17:45 | clojurebot | :example |
| 17:46 | arrdem | ,(name :foo) |
| 17:46 | clojurebot | "foo" |
| 17:46 | arrdem | bau5. didn't know that was a thing. |
| 17:46 | gfredericks | (def remove-initial-colon (comp keyword name)) ;; worst named function evar |
| 17:53 | Raynes | &(-> ::foo name keyword) |
| 17:53 | lazybot | ⇒ :foo |
| 17:53 | gfredericks | &:::::::foo |
| 17:53 | lazybot | java.lang.RuntimeException: Invalid token: :::::::foo |
| 17:55 | Sgeo | Metadata on the var rather than the fn still annoys me |
| 17:55 | Sgeo | It means that that def isn't equvalent to using (defn remove-initial-colon [x] (keyword (name x))) |
| 17:55 | Sgeo | And it means that comp doesn't preserve the arglists of the first function |
| 17:57 | technomancy | yeah, it's very annoying |
| 17:59 | gfredericks | booo certain things! |
| 17:59 | S11001001 | Sgeo: Lisp is reinvent def :) |
| 17:59 | technomancy | my implementation of partial for Leiningen tasks maintains arglists info |
| 17:59 | tomoj | what are some reasons _for_ metadata on the var? |
| 18:00 | technomancy | tomoj: way back in the day you couldn't attach metadata to functions |
| 18:01 | tomoj | that's.. not what I wanted to hear :( |
| 18:01 | gfredericks | easy fix? |
| 18:01 | technomancy | possibly before clojure 1.0-ish |
| 18:01 | Sgeo | Backwards compatibility for the loss! |
| 18:01 | gfredericks | could start attaching to both for backward compatibility |
| 18:01 | S11001001 | ,(-> (fn [] 42) (with-meta {:x :y}) meta) |
| 18:01 | clojurebot | {:x :y} |
| 18:02 | Sgeo | S11001001, what did you mean by <S11001001> Sgeo: Lisp is reinvent def :) |
| 18:03 | S11001001 | Sgeo: solution in any Lisp is always replace with your own version :) |
| 18:08 | gfredericks | takes a lot of work to replace it in clojure.core as well |
| 18:16 | amalloy | functions don't actually have a meta slot anymore, fwiw. with-meta works by creating a wrapper around the base function that *does* have a meta slot |
| 18:17 | gfredericks | ,(map type [(fn [] 3) (with-meta (fn [] 3) {:x :y})]) |
| 18:17 | clojurebot | (sandbox$eval27$fn__28 clojure.lang.AFunction$1) |
| 18:17 | gfredericks | oh. righti. |
| 18:17 | amalloy | i think that happened in 1.4 |
| 18:17 | gfredericks | amalloy: so what's the effective difference? |
| 18:18 | amalloy | gfredericks: effective? not much. but it means that most functions have a smaller memory footprint and construction cost, because they don't need to be told their meta |
| 18:21 | technomancy | supposedly one day clojure will get knobs for people who care about stuff like that so the rest of us can just have nice features |
| 18:22 | Sgeo | Knobs? |
| 18:22 | Sgeo | Like Common Lisp's declare/declaim/proclaim ? |
| 18:22 | Sgeo | (declare (optimize (speed 3))) |
| 18:22 | arrdem | ... proclaim? |
| 18:22 | danlarkin | mythic future knobs |
| 18:22 | technomancy | Dynamic |--x-----------| Memory-lite |
| 18:23 | technomancy | danlarkin: along with clojure-in-clojure |
| 18:23 | Sgeo | http://www.lispworks.com/documentation/lw50/LWUG/html/lwuser-90.htm |
| 18:23 | danlarkin | what're the odds on cic coming before knobs |
| 18:26 | gfredericks | ,(printf "The odds are %d." (rand-int 10)) |
| 18:26 | clojurebot | The odds are 2. |
| 18:26 | technomancy | clojurebot: never tell me the odds |
| 18:26 | clojurebot | Titim gan éirí ort. |
| 18:27 | gfredericks | what the heck did he just learn |
| 18:27 | amalloy | welsh, right? |
| 18:27 | amalloy | or maybe gaelic? |
| 18:27 | arrdem | (inc technomancy ) |
| 18:27 | lazybot | ⇒ 2 |
| 18:27 | gfredericks | no I mean what state-change did technomancy cause |
| 18:28 | amalloy | gfredericks: none |
| 18:28 | technomancy | who knows what evil lurks in the heart of clojurebot |
| 18:28 | technomancy | ...only the hiredman knows |
| 18:30 | amalloy | (except insofar as he changed your state to remember him speaking in tongues) |
| 18:30 | gfredericks | clojurebot: The odds |aren't| |
| 18:30 | clojurebot | It's greek to me. |
| 18:30 | gfredericks | clojurebot: The odds |aren't|. |
| 18:30 | clojurebot | In Ordnung |
| 18:30 | gfredericks | ~odds |
| 18:30 | clojurebot | The odds aren't . |
| 18:30 | gfredericks | erk |
| 18:30 | arrdem | ... is clojurebot okay? |
| 18:30 | gfredericks | he's just this guy you know |
| 18:32 | arrdem | clojurebot: are you okay? |
| 18:32 | clojurebot | Pardon? |
| 18:33 | arrdem | oh well... |
| 18:33 | arrdem | I was hoping for Eliza or worse |
| 18:35 | gfredericks | oughtn't be too hard to embed a cleverbot impl |
| 18:40 | arrdem | clojurebot: limited |
| 18:40 | clojurebot | limited is time |
| 18:40 | dlitvak | clojurebot: help commands |
| 18:40 | clojurebot | help is http://clojure.org |
| 18:41 | technomancy | this gets my goat every time: No method in multimethod 'do-copy' for dispatch value: [java.net.URL java.io.File] |
| 18:42 | danlarkin | yeah that is a shame |
| 19:40 | ssurgnier | Is there an equivalent to reshape/cast in incanter? I found incanter.core/deshape for melting but no luck yet on casting. |
| 20:09 | wingy | does anyone know when clj 1.5 will be here? |
| 20:09 | wingy | if i am doing a new web app should i use 1.5 master snapshot or 1.4? |
| 20:09 | casion | 1.4 |
| 20:13 | Sgeo | Although, I can't help but wonder if I could do... better somehow |
| 20:13 | Sgeo | As it is, functions based on shift are not realistically usable from functions not processed through the transform |
| 20:13 | casion | Sgeo: what is it exactly? |
| 20:14 | Sgeo | casion, delimited continuations for Clojure |
| 20:16 | casion | google is useless here :| |
| 20:16 | Sgeo | Hmm, I may be mistakne |
| 20:17 | Sgeo | Try googling for shift and reset |
| 20:17 | Sgeo | http://en.wikipedia.org/wiki/Delimited_continuation#Examples |
| 20:17 | casion | Sgeo: I'm working through that |
| 20:18 | Sgeo | Using it leads to, in my opinion, a nicer way of using monads than do notation. |
| 20:20 | casion | I have quite a few levels of terminology to absorb before I understand any of this apparently |
| 20:21 | Sgeo | (reset (+ 1 (shift k CODE))) |
| 20:21 | Sgeo | Whenever the shift expression returns, the + 1 is skipped |
| 20:21 | Sgeo | within CODE, k is a function, which does this: (k x) will effectively return the value that occurs when you replace the shift with x |
| 20:22 | casion | why is the + 1 skipped? |
| 20:23 | Sgeo | Because that's how shift and reset are defined, it's presumably convenient to be able to not execute the continuation |
| 20:23 | Sgeo | The + 1 will only be done when k is called |
| 20:23 | Sgeo | (reset (+ 1 (shift k 0))) |
| 20:23 | Sgeo | ;; 0 |
| 20:24 | casion | why wouldn't k be called? |
| 20:24 | casion | or when? |
| 20:24 | Sgeo | casion, if the body of the shift doesn't call it, it won't be called |
| 20:24 | Sgeo | (reset (+ 1 (shift k (k 5)))) ;; 6 |
| 20:25 | casion | so if K is not called, then the third item in the form is returned for (reset)? |
| 20:26 | casion | k, sorry |
| 20:26 | amalloy | (reset (+ 1 (shift k (map k [5 6])))) ;; (6 7), right? |
| 20:26 | casion | and if k is called, then the body of shift is replaced with the resulut of k |
| 20:26 | casion | do I have that correct? |
| 20:26 | napping | k is a binder there, bound to #(+ 1 %) |
| 20:27 | Sgeo | amalloy, yes |
| 20:27 | Sgeo | casion, better to think of it that the reset will be replaced with the result of the body of the shift |
| 20:27 | Sgeo | Which can itself, by calling k, call the rest of the stuff between the reset and shift |
| 20:28 | Sgeo | Because k can be called multiple times |
| 20:28 | casion | ... |
| 20:28 | amalloy | casion: the chunk of the call stack between reset and shift is "copied" into the function k |
| 20:28 | casion | amalloy: ahhh |
| 20:28 | amalloy | and used iff k is actually called |
| 20:28 | casion | ok, that makes more sense |
| 20:29 | casion | when would this be useful then? |
| 20:29 | casion | (and thank you for taking time to explain it) |
| 20:29 | Sgeo | It allows for arbitrary control flow |
| 20:30 | casion | Sgeo: can you give a basic example of how k being called or not produces some useful functionality? |
| 20:30 | Sgeo | And the reason I'm interested in it right now is because it seems like it should be usable for a nicer syntax than do notation for monads |
| 20:31 | Sgeo | Uh. I'm not especially experienced with continuations. |
| 20:31 | casion | I do believe I understand how it works, but not the application |
| 20:31 | amalloy | casion: one example is implementing exceptions in terms of continuations |
| 20:31 | casion | would you do exceptions with it maybe? |
| 20:31 | casion | I need to learn to read the screen while I type if amalloy is around |
| 20:31 | amalloy | hah |
| 20:31 | napping | http://okmij.org/ftp/continuations/ |
| 20:31 | amalloy | you can also implement something like lazy sequences with continuations |
| 20:32 | bfabry | I've written a function... explode-map, which I think should actually be called denormalize? is there a word/concept for what I'm trying to do here http://pastie.org/4930513 |
| 20:32 | casion | brb, I have more questions in a minute or two |
| 20:32 | amalloy | and so on, et cetera. my understanding is that it's a very general form of control-flow that can be special-cased to most of the things languages do |
| 20:33 | amalloy | bfabry: not really a good idea to explode a map without knowing its contents. eg, what if someone wants to store a map in v4, and still get [a f v4] rather than an exploded submap? |
| 20:34 | bfabry | amalloy: I know its contents. The entire thing needs to be flattened to go on from here. |
| 20:35 | bfabry | amalloy: for some background on the purpose, I'm converting a nested map into a rails-compatible url query string |
| 20:36 | amalloy | okay, so write the function and use it. it's certainly not in the standard libs or in useful |
| 20:36 | bfabry | it occurs to me if I had a function like (walk-leaves (fn [parents leaf] (...)) nested-map) this would look much clearer, does such a function exist? |
| 20:38 | Sgeo | Why does apply concat bother me so much? |
| 20:38 | casion | bfabry: zippers? |
| 20:38 | Sgeo | Is it because I'm used to Haskell's concat just taking a list of lists? |
| 20:39 | Sgeo | And the fact taht concat doesn't... confuses me a bit I guess |
| 20:39 | Sgeo | Although it makes sense |
| 20:39 | bfabry | casion: yeah see zippers sort've look at me hintingly like they're what I want but I don't understand them yet :) Can they be used to implement something like (walk-leaves ? |
| 20:40 | casion | bfabry: I'd imagine clojure.zip/next is what you want |
| 20:40 | casion | bfabry: though you could be more efficient than that usually |
| 20:42 | bfabry | casion: building up a string just before calling an external web service, the efficiency of building the string is not likely to be an issue :) It's the clarity and doing things the "correct" way that interests me |
| 20:42 | Sgeo | Universally flattening everything is rarely correct |
| 20:43 | amalloy | bfabry: https://gist.github.com/3850118 |
| 20:44 | bfabry | Sgeo: I'm not universally flattening everything. I am flattening a specific thing that needs to be flattened. |
| 20:44 | bfabry | amalloy_: interesting! thank you |
| 20:44 | wingy | aren't these equivalent: (ns (:use [datomic.api :only [q db] :as d])) vs (ns (:require [datomic.api :refer [q db] :as d])) |
| 20:48 | wingy | i guess not .. the latter gave me error on console |
| 21:02 | wingy | my bad .. it actually is the same .. the error was due to something else |
| 21:03 | wingy | now i can have :require only instead of mixing it with :use :) |
| 21:36 | doctordaebak | hello all. anyone aware of the parallella project? |
| 21:36 | doctordaebak | project to make a 16-core computer for $99. |
| 21:37 | doctordaebak | everyone who'd like to see clojure eventually running on this, please check out this page: |
| 21:37 | doctordaebak | http://www.kickstarter.com/projects/adapteva/parallella-a-supercomputer-for-everyone |
| 21:37 | doctordaebak | the company seems to be solid and they have delivered real products before. |
| 21:38 | doctordaebak | those interested, please pass the word on. thanks. |
| 21:52 | gfredericks | my advanced cljs code still has whitespace present; what's the cljsbuild option for removing that? |
| 22:32 | Sgeo | Oh, it's Enlive that has trouble with arbitrary XML |
| 22:32 | Sgeo | For some reason I thought Hiccup |
| 22:46 | leafw | ,(println 1) |
| 22:46 | clojurebot | 1 |
| 22:50 | wingy | does clojure have functions for parsing/building URL query strings? |
| 22:51 | wingy | from maps |
| 22:51 | wingy | http://stackoverflow.com/questions/9745566/how-to-convert-map-to-url-query-string-in-clojure-compojure-ring |
| 23:10 | wingy | how do you generate a random nr in clojure? |
| 23:12 | Raynes | nr? |
| 23:12 | clojurebot | nrepl is a network REPL implementation: http://github.com/clojure/tools.nrepl |
| 23:16 | wingy | Raynes: number |
| 23:16 | Raynes | &(rand) |
| 23:16 | lazybot | ⇒ 0.18493043508556506 |
| 23:17 | Raynes | &(long (rand)) |
| 23:17 | lazybot | ⇒ 0 |
| 23:17 | Raynes | Super long. |
| 23:18 | wingy | Raynes: cool! |
| 23:18 | Raynes | &(long (rand 10000000000)) |
| 23:18 | lazybot | ⇒ 6040549939 |
| 23:19 | wingy | nice |
| 23:30 | amalloy | &(rand-int 1564) |
| 23:30 | lazybot | ⇒ 1220 |
| 23:38 | wingy | amalloy: nice |
| 23:39 | wingy | what is the best way for a key in a map to require another key in the same map |
| 23:39 | amalloy | that doesn't make sense |
| 23:41 | wingy | amalloy: {:url "http://app.com" :path "#{url}/home"} |
| 23:41 | wingy | i wanna reuse :url in :path |
| 23:41 | Gosh | whats the difference between "." and ".." macro? |
| 23:41 | wingy | Gosh: .. is a "chain" macro |
| 23:42 | wingy | instead of you using multiple . calls you can use .. and then chain all the calls together |
| 23:42 | Gosh | and single dot works just for one invocation? |
| 23:42 | wingy | yeah |
| 23:42 | Gosh | ok thanks |
| 23:42 | wingy | i think |
| 23:42 | Gosh | Can I use -> and --> instead of dots for java ? |
| 23:44 | frio | wingy: i'm pretty sure you can't do that :) |
| 23:45 | wingy | Gosh: (. "hello" toUpperCase) |
| 23:45 | wingy | vs |
| 23:45 | wingy | (.. "hello" toUpperCase (replace \H \N)) |
| 23:45 | wingy | so i was right |
| 23:45 | frio | what are you actually trying to achieve? surely it'd make more sense to just leave path as "/home/" and then combine them when necessary? (format "%s/%s" (:url my-map) (:path my-map)) |
| 23:45 | frio | (although no doubt that last bit can be compressed a bit!) |
| 23:45 | brehaut | (-> "hello" .toUpperCase (.replace \H \N)) |
| 23:45 | brehaut | ,(-> "hello" .toUpperCase (.replace \H \N)) |
| 23:45 | clojurebot | "NELLO" |
| 23:46 | wingy | frio: i guess |
| 23:46 | wingy | yeah ill just do that |
| 23:47 | brehaut | using bare dot is fairly uncommon; most code uses the sugared method syntax these days and leaves dot for edge cases and complicated stuff |
| 23:47 | wingy | brehaut: which means your examples are the way to go? |
| 23:47 | brehaut | Gosh: ^ so yes, -> and ->> can be used with java |
| 23:47 | amalloy | brehaut: mostly for macros in my experience |
| 23:48 | brehaut | makes sense |
| 23:49 | amalloy | the number of times i've ripped ~(symbol (str "." method-name)) out of macros... |
| 23:49 | brehaut | haha |
| 23:52 | wingy | ,(rand-int 1000000000000000) |
| 23:52 | clojurebot | #<IllegalArgumentException java.lang.IllegalArgumentException: Value out of range for int: 661653239191293> |
| 23:52 | wingy | ,(long (rand 1000000000000000)) |
| 23:52 | clojurebot | 190712672568951 |
| 23:52 | wingy | long power |