2012-08-21
| 00:03 | saurik | jkkramer: yes, I know how to bypass the error for my specific case with this one specific version of clojure. what I am trying to find out is why clojure's defrecord has this behavior, as it means that new versions of clojure might cause scripts that use defrecord to break solely due to "a new function was added to clojure.core" |
| 00:04 | jkkramer | saurik: it's not specific to defrecord, it's just how vars work. you'd get the same effect use def or defn |
| 00:05 | saurik | no, you get a warning. |
| 00:05 | saurik | user=> (def test 4) |
| 00:05 | saurik | WARNING: test already refers to: #'clojure.core/test in namespace: user, being replaced by: #'user/test |
| 00:05 | saurik | #'user/test |
| 00:05 | saurik | user=> test |
| 00:05 | saurik | 4 |
| 00:06 | jkkramer | that looks like the same warning you pasted from defrecord |
| 00:06 | saurik | no, defrecord had an error |
| 00:06 | saurik | 02:42:42 < saurik> (defrecord test []) -> "ClassCastException clojure.lang.Var cannot be cast to java.lang.Class clojure.lang.Namespace.referenceClass (Namespace.java:129)" ... |
| 00:06 | jkkramer | ah, missed that |
| 00:06 | saurik | it might be that there is a different way of using defrecord that avoids this problem, hence my comment in that same paragraph "am I doing something wrong?" |
| 00:10 | jkkramer | fwiw, the convention is to use capitalized names for records, which would help reduce the chances of conflict. but fundamentally, there's not much you can do except test your code against new versions |
| 00:10 | jkkramer | if you are keen on receiving a warning instead of an error, you could dig into defrecord's internals and see if a patch is feasible |
| 00:10 | seaword | Is it acceptable to forgo the hyphenated naming convention of clojure when working with hash maps submitted from a form in the browser? E.g., my html form fields have names like "first_name" and "last_name" so when I receive the hash map of form params I'll be accessing them like: (:first_name form). |
| 00:11 | seaword | As opposed to the convention of (:first-name form) |
| 00:22 | amalloy | seaword: yes, it's probably best to just use the conventions for whatever protocol you're using. two things, though: (1) you *will* forget and wonder why (:first-name x) is nil, and (2) i think HTML is ambivalent re: - vs _, and in fact favors -. i'd mostly suggest using _ for unenlightened things like ruby or js, which can't express names with hyphens |
| 00:24 | amalloy | saurik: to expand on jkkramer's point: (defrecord blah) creates a java class named blah, so it's recommended to use java naming idioms for records. eg, Test instead of test for that reason |
| 00:24 | amalloy | which, happily, avoids conflicting with anything in clojure.core |
| 00:35 | cemerick | anyone have advice for someone whose browser-repl is thoroughly unrepsonsive? |
| 00:35 | cemerick | copy/pasting the code / interactions from https://github.com/clojure/clojurescript/wiki/The-REPL-and-Evaluation-Environments yields no joy, unfortunately. |
| 00:47 | amalloy | cemerick: solution: learn to derive joy from simply following instructions on the internet |
| 00:48 | cemerick | tl;dr: I wasn't able to get it working at all, but boy, it sure was fun to try! |
| 00:51 | wmealing_ | heh |
| 00:52 | cemerick | I got it, thanks to xeqi. You can't load the HTML that opens the browser repl connection from disk. |
| 00:52 | xeqi | hurray! |
| 00:52 | tomoj | I ran into https://gist.github.com/3d6d4b1ca0a777dfa27b on calling cemerick.piggieback/cljs-repl |
| 00:53 | cemerick | I see that's discussed further on down the page, but…oh well. |
| 00:53 | tomoj | guessing that's cus I'm using edge clojure |
| 00:53 | tomoj | er, clojurescript |
| 00:53 | cemerick | tomoj: you probably don't have piggieback set up at the right level in your nREPL stack. What does your project.clj look like? |
| 00:55 | tomoj | https://gist.github.com/913cfd6840a205b1acfd |
| 00:56 | cemerick | xeqi: thanks again. browser-repl instructions going into the piggieback readme now. :-D |
| 00:56 | xeqi | cemerick: bug report - :cljs/quit doesn't change the prompt back |
| 00:56 | cemerick | tomoj: hrm, that should work… |
| 00:57 | cemerick | tomoj: do a `lein deps :tree`; what version of nREPL do you have? |
| 00:58 | muhoo | cemerick: i've had the same problem with browser repl in piggieback |
| 00:58 | cemerick | xeqi: Yeah, I had that working, and busted it again somehow. Could you file an issue? |
| 00:58 | cemerick | muhoo: which one? |
| 00:58 | muhoo | totally unresponsive |
| 00:58 | cemerick | muhoo: are you loading the html page from disk or from localhost:9000? |
| 00:59 | muhoo | the html page was loaded through noir |
| 00:59 | muhoo | the repl was connecting to localhost:9000 |
| 00:59 | tomoj | cemerick: 0.2.0-beta8 https://gist.github.com/78ce693affc9cd330249 |
| 01:00 | cemerick | tomoj: bump up to [org.clojure/tools.nrepl "0.2.0-SNAPSHOT"], and give that a roll (you may need to add the OSS snapshots repo to your project.clj) |
| 01:01 | cemerick | muhoo: I'll bet the static resources the browser repl needs aren't getting served up properly. Check the :static-dir arg for cljs.repl.browser/repl-env |
| 01:02 | cemerick | I had that issue too, as I'm currently still compiling dummy cljs files in my clone of the cljs project. |
| 01:02 | muhoo | good point, will check. thanks. |
| 01:03 | cemerick | so I needed :static-dir ["/Users/chas/dev/clojure/cljs/" "/Users/chas/dev/clojure/cljs/out/"], but you'll need to figure out what the right paths are for how things are set up in your noir app. |
| 01:03 | michaelr525 | good morning |
| 01:04 | tomoj | cemerick: same error https://gist.github.com/64bb750b903629b210eb |
| 01:04 | michaelr525 | anyone knows how to make pprint work when called from a program which is running from 'lein run'?' |
| 01:04 | tomoj | is it feasible that nrepl.el should be able to e.g. C-c C-k a cljs file and load up the dependencies? |
| 01:05 | tomoj | I had ignored nrepl almost completely, not having noticed nrepl.el until just a while ago |
| 01:06 | cemerick | tomoj: how are you starting your REPL? |
| 01:06 | eduard | how to store byte array to file? |
| 01:06 | tomoj | cemerick: lein2 repl, then (cemerick.piggieback/cljs-repl) |
| 01:07 | cemerick | hrm |
| 01:07 | cemerick | tomoj: which version of lein? |
| 01:07 | tomoj | 2.0.0-preview7 |
| 01:09 | technomancy | michaelr525: we were just discussing allowing that earlier |
| 01:09 | technomancy | michaelr525: your best bet for now is probably configleaf |
| 01:09 | xeqi | tomoj: the :nrepl-handler requires preview8 I think |
| 01:10 | michaelr525 | technomancy: config leaf?! |
| 01:10 | cemerick | tomoj: ah-ha; you need lein master or -preview8; the piggieback middleware isn't being applied at all |
| 01:10 | technomancy | config leaf! |
| 01:10 | tomoj | thanks |
| 01:10 | michaelr525 | technomancy: i thought of maybe doing (println (with-out-str (pprint))) |
| 01:10 | michaelr525 | technomancy: because println does work |
| 01:10 | muhoo | config leaf? |
| 01:10 | tomoj | missed that in the readme.. |
| 01:11 | tomoj | would be surprised but delighted if nrepl.el+cljs with piggieback was already mostly functional |
| 01:11 | technomancy | michaelr525: oh, sorry; I thought you meant the leiningen pprint plugin |
| 01:11 | technomancy | michaelr525: you want (:require [clojure.pprint :refer [pprint]]) in the ns macro |
| 01:12 | xeqi | cemerick: after your readme updates I'll check and file a bug on the prompt |
| 01:13 | cemerick | tomoj: Note that the nREPL config bits in lein are changing somewhat (much simpler/shorter) post-preview8. But, yes, it's all coming together I think. :-) |
| 01:13 | cemerick | xeqi: They'll likely need to wait until late tomorrow; the piggieback stuff depends on getting all of the nREPL/reply/lein backlog pushed through, which isn't gonna happen tonight. |
| 01:14 | cemerick | But yeah, thanks. :-D |
| 01:14 | michaelr525 | technomancy: hmm.. i use (use [clojure.pprint] :only [pprint]) today and it doesn't print anything, maybe because of leiningen 1.7? |
| 01:15 | technomancy | michaelr525: no, the version of leiningen is irrelevant |
| 01:15 | tomoj | holy crap it works |
| 01:15 | tomoj | had to switch into clojure-mode to get C-c C-k though, hmm |
| 01:15 | technomancy | michaelr525: (:use [clojure.pprint :only [pprint]]) would be better |
| 01:15 | technomancy | tomoj: nrepl.el master has a number of important fixes |
| 01:15 | technomancy | supposedly a release is coming soon? |
| 01:16 | tomoj | when I installed from elpa I was thinking it the back of my head "I'm going to go get master anyway.." |
| 01:16 | technomancy | haha |
| 01:16 | technomancy | welcome to the bleeding edge |
| 01:16 | michaelr525 | technomancy: yeah, that's what i'm doing here |
| 01:17 | tomoj | just amazing to type some clojure in emacs and see js source... |
| 01:18 | xeqi | tomoj: it is, though I mis M-. |
| 01:19 | tomoj | I saw it in the nrepl.el readme and hoped.. |
| 01:19 | tomoj | but yesterday I was using cljsbuild auto and google chrome's console.. |
| 01:20 | xeqi | I think its a matter of implementing the right nrepl ops for the cljs repl |
| 01:23 | muhoo | cemerick: :static-dir didn't fix it. firebug shows it is in fact pulling up the static resources though |
| 01:23 | cemerick | muhoo: there should be a bunch…? |
| 01:23 | muhoo | https://www.refheap.com/paste/4519 |
| 01:24 | cemerick | i.e. if there's just one, then something's borked |
| 01:24 | cemerick | I can't say I know what that is. :-) |
| 01:24 | muhoo | http://bace.s3.amazonaws.com/replinteraction.jpg |
| 01:25 | muhoo | i can try :-) it looks like nrepl is never sending anything to the browser |
| 01:25 | cemerick | I'm guessing that's not working? I have 71 requests upon opening the browser-repl connection. |
| 01:25 | xeqi | muhoo: sometimes it ignores the first input line for me after starting the browser repl |
| 01:25 | cemerick | But then, I'm a total noob here. |
| 01:26 | muhoo | yeah, this is all bleeding edge it seems |
| 01:26 | cemerick | quite |
| 01:26 | cemerick | xeqi: what's M-.? |
| 01:28 | muhoo | i did some research tho. when working, the interation between cljsrepl and browser is this: https://www.refheap.com/paste/4013 |
| 01:28 | xeqi | cemerick: nrepl.el's jump-to |
| 01:28 | xeqi | looks like I was wrong on the nrepl op guess |
| 01:29 | xeqi | https://github.com/kingtim/nrepl.el/blob/master/nrepl.el#L311 |
| 01:29 | xeqi | though I remember seeing something funny about them with one of the commands |
| 01:29 | cemerick | Some introspection middleware is definitely in demand. |
| 01:30 | technomancy | the server side impl of jump-to is trivial |
| 01:30 | muhoo | cemerick: did you make any progress on the problem of how to insert something into the middle of a middleware chain? |
| 01:30 | cemerick | Dabbing together sexps everywhere is no way to live. |
| 01:30 | muhoo | it seems like a hard problem, maybe even an achilles heel of the composable function handler approach to middlewares in general |
| 01:30 | cemerick | muhoo: Yup, done and implemented on nREPL master. Will be landing in lein master tomorrow-ish. |
| 01:30 | technomancy | the most annoying stuff to piece together server-side in nrepl.el is reload |
| 01:31 | cemerick | muhoo: it is, by no means, a bulletproof impl. But, it works well enough, and properly shifts the configuration burden onto middleware authors instead of onto users. |
| 01:32 | muhoo | fantastic, thanks for that. |
| 01:33 | technomancy | s/server-side/clojure-side from the client/ |
| 01:33 | cemerick | Can anyone replicate this? https://gist.github.com/3317393 Clean cljs clone, FWIW. |
| 01:46 | tomoj | cemerick: replicated |
| 01:46 | cemerick | oh, excellent |
| 01:47 | xeqi | cemerick: I also get it when running ./script/repl from cljs master |
| 01:47 | cemerick | I get it through piggieback too. |
| 01:49 | cemerick | tomoj, xeqi: http://dev.clojure.org/jira/browse/CLJS-358 |
| 01:49 | tomoj | working on trying browser repl now |
| 01:50 | xeqi | ah, I can replicate though piggieback |
| 01:50 | xeqi | I must of misunderstood when you asked the other day |
| 01:51 | Bahman | Hi all! |
| 01:52 | cemerick | It's also curious that you can only be using either Rhino or browser-repl at the same time. |
| 01:56 | cemerick | s/the same/one |
| 01:59 | cemerick | thanks again xeqi; saved my sanity back there. :-) |
| 02:01 | xeqi | np, thanks for making the plumbing so the browser repl can work from nrepl.el |
| 02:01 | tomoj | hmm |
| 02:01 | xeqi | ah, he quit |
| 02:01 | tomoj | how? |
| 02:01 | clojurebot | with style and grace |
| 02:02 | tomoj | I start a browser repl env on 3000, get a repl prompt, and the browser is talking to localhost:3000, but when I type something in the repl there is always no output |
| 02:02 | tomoj | and no response from the browser |
| 02:04 | xeqi | tomoj: oh, I thought you had it working earlier |
| 02:04 | tomoj | only with rhino |
| 02:05 | xeqi | ah |
| 02:05 | xeqi | are you serving the html from a server, or trying to browse it from the filesystem? |
| 02:05 | tomoj | local apache |
| 02:06 | tomoj | on localhost, repl env on localhost:3000 |
| 02:06 | xeqi | k, try a second input line in the repl, it seems to ignore the first one for me |
| 02:06 | tomoj | no luck |
| 02:06 | tomoj | I noticed I have :whitespace in the browser-side, default :simple for the repl env |
| 02:07 | xeqi | the cljs (repl/connect ..) has the right port in it? |
| 02:08 | tomoj | yeah |
| 02:09 | xeqi | oh,, looks like the readme was updated on a branch - https://github.com/cemerick/piggieback/tree/0.0.2#browser-repl |
| 02:10 | tomoj | what is this out/goog/base.js? |
| 02:11 | xeqi | thats an output from using the cljs compiler directly |
| 02:11 | xeqi | lein-cljsbuild does it differently |
| 02:11 | tomoj | ah |
| 02:12 | xeqi | but the importatn part is the cljs-repl startup command |
| 02:12 | xeqi | using that but with 3000 for the port? |
| 02:13 | tomoj | I'm using https://gist.github.com/3412542 |
| 02:14 | xeqi | hmm.. thats basically what I was using |
| 02:16 | xeqi | firebug will show me a connection waiting for a response when the browser is connected |
| 02:16 | tomoj | I see that too |
| 02:18 | tomoj | hmm, it works with straight `lein2 repl` |
| 02:18 | tomoj | just in emacs nothing gets sent to the browser |
| 02:19 | muhoo | heh, he just added the browser-env stuff now. nice. |
| 02:20 | xeqi | hmm, at least thats a good start |
| 02:20 | xeqi | I'm using nrepl.el from elpa in case it makes a difference |
| 02:20 | tomoj | oh, me too, I forgot to go grab master |
| 02:22 | xeqi | are you sending a form to eval before or after connecting the browser? |
| 02:22 | tomoj | after |
| 02:24 | xeqi | `lein repl :headless` + M-x nrepl or M-x nrepl-jack-in ? |
| 02:24 | tomoj | no :headless, M-x nrepl |
| 02:24 | tomoj | M-x nrepl-jack-in seemed to hang for me |
| 02:27 | xeqi | do you have a stacktrace from lein? sometimes I get one |
| 02:27 | xeqi | when I don't have everything connected right |
| 02:27 | tomoj | nope |
| 02:29 | tomoj | well, something made it work |
| 02:29 | xeqi | heh |
| 02:29 | tomoj | either :headless, upgrading piggieback to the latest on 0.0.2 branch |
| 02:29 | tomoj | ..or master nrepl.el |
| 02:29 | tomoj | thanks for the help |
| 02:31 | tomoj | hmm, except now I get no output from println |
| 02:32 | xeqi | I think it was the :headless, I get a non-responsive repl without it |
| 02:42 | xeqi | tomoj: I see it sending it to the browser, but not showing up in console.log :/ |
| 02:42 | xeqi | not sure what happens to printlns |
| 02:42 | tomoj | I think clojure.repl.browser tries to make it go to the repl (not console.log) |
| 02:43 | tomoj | trying to figure out a *print-fn* for console.log now |
| 02:43 | tomoj | since whatever clojure.repl.browser is trying doesn't work for me right now.. |
| 02:45 | xeqi | I see a mailing list entry from a couple weeks ago mentioning nrepl.el just swallows stdout |
| 02:48 | xeqi | you're right on the browser sending it back, I had my post params vs responses confused |
| 02:48 | xeqi | which means I need to sleep, but glad its mostly working |
| 03:29 | tomoj | hmm, as soon as I (in-ns 'foo), nrepl.el stops working |
| 04:43 | kral | namaste |
| 05:03 | muhoo | heh, no the cljs repl has it backwards really. POST responses are NEW commands coming from the repl. POSTs are the browser responding back |
| 05:04 | muhoo | the POST hangs, waiting for the repl to give a new command. when it does, the browser execs the js that was sent, and sends the reply as a new POST |
| 05:04 | muhoo | and that one then hangs, waiting. it's goofy, and websockets would be a lot nicer |
| 05:10 | Raynes | muhoo: Stop writing clojurescript. |
| 05:10 | Raynes | Write more Clojure. |
| 05:23 | muhoo | why? |
| 05:23 | clojurebot | why is Why |
| 05:24 | muhoo | ,logging |
| 05:24 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: logging in this context, compiling:(NO_SOURCE_PATH:0)> |
| 05:24 | muhoo | logging? |
| 05:24 | muhoo | fubar? |
| 05:24 | clgv | ~logging |
| 05:24 | clojurebot | Excuse me? |
| 05:24 | clgv | clojurebot: logging? |
| 05:24 | clojurebot | Cool story bro. |
| 05:24 | clgv | he has no clue ;) |
| 05:25 | muhoo | Raynes: the project i've got will likely not involve clojure, but *may* involve cljs, if i can get it working and sell the idea |
| 05:47 | nz- | so if I have understood correctly nrepl+nrepl.el is roughly equivalent to slime+clojure-swank (or slime+ritz) |
| 05:50 | talios | nz- - kiwi? |
| 05:50 | nz- | talios: ? |
| 05:50 | talios | nz- - thats my understanding on nrepl yes. only better. |
| 05:51 | talios | just wondering if the nick is also indicative of you living here in NZ :) |
| 05:51 | nz- | almost exactly opposite side of the globe ;) |
| 05:52 | talios | oh well - I won't try pimp you with a job then :) |
| 05:52 | nz- | ok |
| 05:52 | talios | man its hard to find good java people, even harder finding any with a functional bent |
| 05:53 | talios | need to convince brehaut into moving up :) |
| 05:54 | nz- | a few years ago I might have moved ;) |
| 05:54 | talios | Right, now where did I put that time machine |
| 05:56 | magopian | talios: you live in NZ? and you have job openings? :D |
| 05:57 | talios | magopian - you make it sound strange. looking for OSGi/REST/Clojure(or functional) peoples |
| 05:58 | magopian | talios: i make it sound strange? in what way? sorry if that's the case, english is not my mother language ;) |
| 05:58 | magopian | (well, in fact, it's my mother's mother language, but not mine, does that make any sense? :) |
| 05:59 | magopian | talios: what company do you work for? |
| 06:00 | talios | magopian - http://smxemail.com - hosted email/anti-spam/cloud-pass |
| 06:00 | talios | althou its more meta-paas |
| 06:01 | magopian | how nice is it to work there? |
| 06:01 | nz- | they published new nrepl-el just now, and M-x package-install nrepl doesn't work |
| 06:02 | magopian | and do you know if it's possible to work remotely? |
| 06:02 | talios | low key, mostly relaxed, fairly casual environment, small company (20ish employees ) |
| 06:02 | magopian | low key? what does that mean? |
| 06:02 | talios | casual/relaxed |
| 06:02 | magopian | ok ;) |
| 06:03 | talios | I wish we were more open to remote working, management don't really seem keen on it tho |
| 06:03 | nz- | ah, i need to do M-x package-refresh-contents first |
| 06:03 | magopian | mmmm |
| 06:04 | magopian | talios: do you have job descriptions? or anything else that could help me see if my profile could fit? |
| 06:05 | magopian | i'm just a clojure noob, started playing with it (with 4clojure mostly) a few weeks ago, so if you're looking for experienced devs, i'll have to pass ;) |
| 06:05 | magopian | experienced _clojure_ devs (i'm experienced in other languages, mainly python) |
| 06:05 | talios | magopian - just found the job add - http://www.seek.co.nz/Job/java-developer-architect-global-audience/in/auckland-auckland-central/22929764 |
| 06:06 | borkdude | goat moaning |
| 06:07 | the-kenny | I'm currently flashed by nrepl.el. It's so awesome. |
| 06:07 | talios | 'lo borkdude |
| 06:07 | magopian | talios: mmm i'm not the good profile :/ |
| 06:10 | magopian | talios: thanks anyway for the links ! |
| 06:11 | magopian | (i'd love to live in NZ one day... or at least visit it !) |
| 06:18 | nz- | nrepl looks good |
| 06:18 | nz- | and time to make it work has been a couple of magnitudes faster that with swank-clojure |
| 06:23 | the-kenny | nz-: Yeah, it's about time for a good alternative to Slime |
| 06:31 | nz- | now i just should learn to use repl when coding |
| 06:40 | nz- | how to jump from stack trace to code in nrepl? |
| 06:40 | nz- | in nrepl.el that is |
| 06:52 | the-kenny | I don't think you can (yet) |
| 06:54 | azkesz | ,'hi |
| 06:54 | clojurebot | hi |
| 07:14 | clj_newb_2384 | is anyone here famiilar with lamina.core ? |
| 07:14 | clj_newb_2384 | I dont' have a particular question; but I'm curious about the ideas behind it |
| 07:18 | llasram | clj_newb_2384: ztellman has given a presentation on lamina: http://www.infoq.com/presentations/Event-Driven-Programming-in-Clojure |
| 07:18 | clj_newb_2384 | llasram: ha!, I'm actually watching that right now |
| 07:19 | llasram | Well, that's what I've got :-) |
| 07:19 | clj_newb_2384 | the deadlock example is pretty cute |
| 07:19 | clj_newb_2384 | (that a finite thread pool + data dependency + alignment of the stars = deadlock) |
| 07:19 | clj_newb_2384 | are you familiar with lamina.core? |
| 07:19 | clj_newb_2384 | i've come across it while studying aleph (the websocket server) |
| 07:20 | llasram | Not much. I saw the version of this talk he gave at Strange Loop, and dug into lamina a bit while using aleph for a toy async implementation of the 9P protocol |
| 07:22 | llasram | It does have a lot of cool idea in it though. Definitely expresses a lot of thought on how to do async |
| 07:25 | clj_newb_2384 | 9P as in plan 9? |
| 07:27 | llasram | Yeah -- Plan 9's IPC protocol. I use wmii, which uses Plan 9 IPC to let arbitrary external programs control it |
| 07:30 | clj_newb_2384 | wtf |
| 07:30 | clj_newb_2384 | lamina channels are _transactional_ |
| 07:30 | clj_newb_2384 | that's amazing |
| 07:30 | tsdh | I have some defrecord or deftype Foo implementing some IFoo protocol. Now, I do (def x (->Foo)) at the REPL. When I recompile the namespace declaring the defrecord/deftype, I cannot call any protocol method on my x instance anymore. Is that a case of "don't do that"? |
| 07:31 | llasram | tsdh: It's less of a "don't do that" than "a known limitation." But yeah, the only real solution is "don't do that" |
| 07:32 | llasram | Whenever you re-compile a protocol definition, you re-bind the var to a new value defining the protocol, and everything gets sad |
| 07:32 | tsdh | llasram: I guessed that. |
| 07:33 | llasram | Ok, cool |
| 07:33 | tsdh | llasram: Well, no problem for normal runtime, but a pain in the ass for experimenting at the repl... |
| 07:34 | tsdh | llasram: So probably it's a good habit to place protocols and records in their own namespaces. |
| 07:35 | llasram | That's one solution. I've found that it isn't too bad in practice, because I usually have one of two kinds of protocols: (a) ones in their own namespace, where I rarely need to revisit & recompile the file, or (b) ones where every reference to the protocol is in the same namespace, so all references get recompiled too whenever I re-define the protocol |
| 07:38 | tsdh | llasram: Well, (b) basically applies to the problematic protocol here, except that there's this one record instance at the REPL. ;-) |
| 07:39 | tsdh | But no problem, I'll simply place the protocols and records into an own namespace. |
| 07:39 | clj_newb_2384 | llasram: is it possible to get the slides of the talk? |
| 07:40 | clj_newb_2384 | (re lamina.core) |
| 07:43 | llasram | The StrangeLoop 2011 slides are all up in a github repo, yes! https://github.com/strangeloop/2011-slides/blob/0780f9c766832b8da682e226d04bb4649475e40a/Tellman-EventDrivenProgrammingInClojure.pdf?raw=true |
| 08:05 | Frozenlock | I have a weird need here.... is it possible to use a clojure repl from a machine you connect to using ssh? Swank maybe too much... but using the lein repl perhaps? |
| 08:06 | llasram | ssh to the box, then run lein repl... ? :-) |
| 08:09 | Frozenlock | llasram: that simple? I'm almost scared... |
| 08:09 | llasram | Well, that was kind of joke :-). I'm not 100% certain of your meaning |
| 08:09 | Frozenlock | No no, that makes sense... |
| 08:10 | llasram | You can obv just run `lein repl` in an SSH session, but you can also use SSH port-fowarding to forward connectinos to a swank server or headless nrepl session over SSH |
| 08:10 | Frozenlock | However lein will not be installed on the machine, can I use it to download a project dependencies without installing it? |
| 08:11 | Frozenlock | Oh that would be marvelous! I need to read more about SSH and learn how to do that :) |
| 08:11 | Frozenlock | Thanks for pointing this out! |
| 08:11 | llasram | Ah, so this is where it gets more interesting. So is the machine running a Clojure application, and you want to be able to get a REPL in the context of the deployed application? |
| 08:12 | ejackson | Frozenlock: I do this as llasram suggests, but I embed a swank server into my app |
| 08:13 | ejackson | this works even if you deploy to tomcat or whatever |
| 08:13 | Frozenlock | Of course! |
| 08:13 | Frozenlock | Then uberjar and send the jar to the remote machine to run it! |
| 08:13 | ejackson | or uberwar even |
| 08:14 | llasram | For web apps, you might also want to check out https://github.com/cemerick/drawbridge . I haven't used it myself yet, but looks quite interesting |
| 08:14 | ejackson | seriously cool |
| 08:18 | clj_newb_2384 | I like the remote repl more than uberwar |
| 08:18 | clj_newb_2384 | since uberwar takes cime to ceate whereas repl is isntant |
| 08:19 | ejackson | clj_newb_2384: depends on process. I have CI that builds and deploys the uberwar backstage. |
| 08:20 | ejackson | but yeah, for fiddling about, lein ring server-headless is fast |
| 08:21 | freiksenet | is there any reason why trees that form a base of clojure data structures branch at 32? |
| 08:21 | freiksenet | except for java int size |
| 08:26 | gfredericks | freiksenet: java int size is unrelated |
| 08:26 | gfredericks | 32 is 5 bits wide, not 32 bits |
| 08:27 | gfredericks | assuming you agree it should be a power of 2, then presumably you'd want whatever width is optimal for performance. For some unimportant low-level reason, 32 must be. |
| 08:27 | freiksenet | gfredericks: sure, and 6 bits are 64 for example. |
| 08:28 | gfredericks | there was a talk at the last conj that I think mentioned cache lines |
| 08:28 | freiksenet | ok, I see |
| 08:29 | hugod | nz-: which version of ritz was giving you problems with load-file? |
| 08:37 | nz- | hugod: 0.3.2 |
| 08:37 | nz- | hugod: error was MalformedURLException: no protocol |
| 08:38 | hugod | nz-: was the source file in a jar? |
| 08:39 | nz- | no, it was open in my emacs buffer |
| 08:39 | nz- | then again, it seemed to work sometimes |
| 08:39 | hugod | (files in a jar can be open in your emacs buffers) |
| 08:40 | nz- | i believe it was a normal file on the disk |
| 08:40 | magopian | finally found the time to watch http://www.infoq.com/presentations/Value-Values |
| 08:40 | magopian | awesome ;) |
| 08:43 | hugod | nz-: btw, if you're interested in helping with debugger support for nrepl, the 0.4.0-SNAPSHOT lein-ritz plugin gives you a `lein ritz-nrepl :headless` command to start an nrepl server with debugger support, though you'll need the nrepl-ritz emacs package from melpa |
| 08:44 | nz- | hugod: so i did following steps: goto some clojure file in emacs, lein ritz, M-x slime-connect, M-x inferior-list, in clojure buffer C-c C-l |
| 08:45 | nz- | no protocol: /home/jsyrjala/projects/ruuvitracker/ruuvitracker_server/src/ruuvi_server/parse.clj [Thrown java.net.MalformedURLException] |
| 08:46 | hugod | nz-: ok, thanks, I'll try and repro here - I've never used inferior-lisp |
| 08:47 | nz- | hugod: so how do you use slime then? |
| 08:47 | hugod | nz-: `M-x slime-connect` brings up a repl |
| 08:47 | Bronsa | is clojure.org down? |
| 08:48 | Fossi | not for me |
| 08:49 | nz- | hugod: slime-connect doesn't open anything for me |
| 08:50 | ejackson | hugod: I'm glad I'm not the only curmudgeon around :) |
| 08:50 | hugod | nz-: that's strange - do you have any emacs config for slime? |
| 08:50 | nz- | hugod: (require 'slime) |
| 08:50 | nz- | just that |
| 08:50 | nz- | in .emacs |
| 08:51 | hugod | ejackson: hey, emacs has so many configuration possibilities, it's easy to mess up |
| 08:52 | ejackson | hugod: i'm with you. I got it working now leave it the hell alone ! |
| 08:52 | nz- | hugod: thing with debugger is that i am new to this repl thing, and besides i practically never use debugger even with java code |
| 08:52 | hugod | nz-: try adding something like (add-hook 'slime-load-hook 'my-slime-setup)(defun my-slime-setup () (slime-setup '(slime-repl))) |
| 08:54 | hugod | nz-: ritz' main purpose is to add the debugger |
| 08:55 | nz- | ok, there is a sprinner mouse cursor |
| 08:55 | hugod | ejackson: yeah, I periodically attack my .emacs files and it usually takes a while to straighten them out again |
| 08:57 | nz- | user=> clojure.lang.ArityException: Wrong number of args (1) passed to: ritz$breakpoint-kill |
| 08:58 | nz- | hugod: that is from lein ritz process |
| 08:58 | qerub | What to people use to conditionally apply functions to possibly-nil values? I often use (defn try [f x] (if (not (nil? x)) (f x) x)), but I guess that is not idiomatic. |
| 08:59 | ejackson | qerub: check out fnil |
| 08:59 | nz- | ,(doc fnil) |
| 08:59 | clojurebot | "([f x] [f x y] [f x y z]); Takes a function f, and returns a function that calls f, replacing a nil first argument to f with the supplied value x. Higher arity versions can replace arguments in the second and third positions (y, z). Note that the function f can take any number of arguments, not just the one(s) being nil-patched." |
| 08:59 | hugod | nz-> that was while trying to remove a breakpoint from the filters listed in M-x slime-selector f? |
| 09:00 | ejackson | qerub: the other thing I do is use -?> and -?>> from core.incubator. Different, but also nil handling |
| 09:00 | nz- | hugod: I just executed slime-connect, then was long pause (where I didn't do anything), then the exception |
| 09:01 | nz- | ,((fnil identity 42) nil) |
| 09:01 | clojurebot | 42 |
| 09:01 | nz- | ,((fnil identity 42) 99) |
| 09:01 | clojurebot | 99 |
| 09:01 | qerub | ejackson: fnil is a good replacement if there's a good default value one can substitute nil with, but there isn't always. |
| 09:02 | qerub | ejackson: Yeah, those are fine. Too bad they aren't in core… |
| 09:02 | nz- | ,((fnil identity 42) 99 "f2") |
| 09:02 | clojurebot | #<ArityException clojure.lang.ArityException: Wrong number of args (2) passed to: core$identity> |
| 09:02 | gfredericks | qerub: yeah I don't think fnil is what you were asking about |
| 09:03 | ejackson | gfredericks: is there a direct translation ? |
| 09:03 | qerub | Say in Haskell, I'd use fmap. |
| 09:03 | gfredericks | there might be something in flatland/useful |
| 09:03 | gfredericks | and it's certainly easy enough to define your own, at least for the single arity case |
| 09:04 | hugod | nz-: there is no call to breakpoint-kill in ritz - the only way it can be invoked is in slime through the selector screen - so I am at a loss as to how you could have got that exception |
| 09:07 | nz- | maybe I have version mismatch or something |
| 09:15 | qerub | ejackson, gfredericks: Thanks for the pointers to core.incubator and flatland/useful. |
| 09:16 | gfredericks | flatland/useful is the usefullest thing I never use |
| 09:16 | beffbernard | Anyone know how to get the hostname from within noir/compojure? I'm trying to build a link that is in the contents of an email I'm sending |
| 09:17 | ejackson | i'd never come across it, thanks. |
| 09:17 | michaelr` | beffbernard: you can get it from the headers |
| 09:18 | michaelr` | beffbernard: (GET "/" {{host "host"} :headers}) |
| 09:18 | beffbernard | michaelr: ok |
| 09:18 | michaelr` | ^^^ compojure syntax, i'm not sure about noir |
| 09:22 | _nmmn | http://agile.dzone.com/news/one-night-clojure-makes-scala ehehe |
| 09:28 | beffbernard | michaelr: ((:headers (req/ring-request)) "host") in noir |
| 09:28 | beffbernard | oops.. ((:headers (ring.requestring-request)) "host") |
| 09:28 | beffbernard | oops again.. ((:headers (ring.request/ring-request)) "host") |
| 09:28 | ozzloy | run it in a repl first |
| 09:29 | beffbernard | FFS.. ((:headers (noir.request/ring-request)) "host") |
| 09:30 | michaelr` | beffbernard: should be easier using some destructuring form in the route definition, no? |
| 09:31 | beffbernard | michaelr: It wasn't available |
| 09:31 | beffbernard | Unless I used middleware |
| 09:32 | beffbernard | (defpage "/someendpoint" {:as params} (println params)) didn't include any header info |
| 09:32 | michaelr` | hmm |
| 09:34 | duck11231 | what if you try (defpage "/someendpoint" params ...) don't know if that changes anything, but that's how I get the full request with compojure |
| 09:35 | jsabeaudry | ,(Float. "0.2") |
| 09:35 | clojurebot | 0.2 |
| 09:35 | duck11231 | If it's just normal destructuring, it probably wouldn't change anything, though |
| 09:35 | jsabeaudry | ,(map Float. ["0.2" "0.4"]) |
| 09:35 | clojurebot | #<CompilerException java.lang.RuntimeException: java.lang.ClassNotFoundException: Float., compiling:(NO_SOURCE_PATH:0)> |
| 09:35 | jsabeaudry | Why can't I do the second one? |
| 09:37 | pauls_ | jsabeaudry: Isn't the first one a cast and the second an attempt at mapping a function? |
| 09:37 | joegallo | jsabeaudry: Float. is not a normal clojure function. You could (map #(Float. %) ...) though. |
| 09:37 | jsabeaudry | pauls_, I thought the first one is a call to the constructor |
| 09:38 | jsabeaudry | joegallo, Alright, I guess I'll do that, thanks for the pointer |
| 09:39 | pauls_ | jsabeaudry: I would've thought so as well, but it's the only reason I can think of that it's not working, although joegallo has the best explanation so far |
| 09:39 | jsabeaudry | Probably there is some black magic involved regarding "functions" ending with "." |
| 09:40 | jsabeaudry | I'll blame the nasty java leaking through |
| 09:41 | duck11231 | also that dot form is a macro of sorts, IIRC |
| 09:42 | bitwalker | Ah yeah that's it, the dot is a special form |
| 09:45 | joegallo | ,(macroexpand-1 '(.getLong (Float. 1))) |
| 09:46 | clojurebot | (. (Float. 1) getLong) |
| 09:46 | joegallo | ,(macroexpand '(Float. 1)) |
| 09:46 | clojurebot | (new Float 1) |
| 09:46 | clgv | ,(macroexpand-1 '(Float. 1)) |
| 09:46 | clojurebot | (new Float 1) |
| 09:46 | joegallo | yup |
| 09:46 | clgv | lol^^ |
| 09:46 | jsabeaudry | ahhhh! the mystery is solved! |
| 09:53 | clgv | ,(read-string "(Float. 1)") |
| 09:53 | clojurebot | (Float. 1) |
| 09:54 | clgv | ok it's really a macro-like special form. could have been reader magic as well ;) |
| 09:54 | jsabeaudry | ,(let [Popo. (fn [] (println "a"))] (Popo.)) |
| 09:55 | clojurebot | #<CompilerException java.lang.IllegalArgumentException: Unable to resolve classname: Popo, compiling:(NO_SOURCE_PATH:0)> |
| 09:55 | hyPiRion | ,(macroexpand-1 '(new Float 1)) |
| 09:55 | clojurebot | (new Float 1) |
| 09:55 | jsabeaudry | ,(let [Popo, (fn [] (println "a"))] (Popo,)) |
| 09:55 | clojurebot | a |
| 09:55 | hyPiRion | ,((partial new Float) 1) |
| 09:55 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: new in this context, compiling:(NO_SOURCE_PATH:0)> |
| 09:55 | hyPiRion | hurr. |
| 09:55 | clgv | new is a special form |
| 09:56 | clgv | ,(doc new) |
| 09:56 | clojurebot | I don't understand. |
| 09:56 | clgv | &(doc new) |
| 09:56 | lazybot | ⇒ "Special: new; The args, if any, are evaluated from left to right, and\n passed to the constructor of the class named by Classname. The\n constructed object is returned." |
| 09:58 | hyPiRion | ,(#(new Float %) 1) |
| 09:58 | clojurebot | #<IllegalArgumentException java.lang.IllegalArgumentException: No matching ctor found for class java.lang.Float> |
| 09:58 | hyPiRion | Certainly is restrictive. |
| 09:59 | gfredericks | ,(.floatValue 1) |
| 09:59 | clojurebot | 1.0 |
| 09:59 | hyPiRion | ,(#(new Float %) 1.0) |
| 09:59 | clojurebot | 1.0 |
| 09:59 | hyPiRion | Figures. |
| 10:01 | chouser | It is, but there the restriction isn't arbitrary. In order to generate efficient JVM bytecode, these things have to be known at the time the 'new' or '.' form is compiled |
| 10:03 | clgv | ,(#(new Float ^Integer %) 1) |
| 10:03 | clojurebot | #<IllegalArgumentException java.lang.IllegalArgumentException: No matching ctor found for class java.lang.Float> |
| 10:04 | clgv | ,(#(new Float ^String %) "1") |
| 10:04 | clojurebot | 1.0 |
| 10:04 | hyPiRion | clgv: There's no constructor for integers. |
| 10:04 | clgv | just checked that ;) |
| 10:14 | robermann | Anyone here using CCW + Eclipse and doing "File->new->project-> Leiningen->Leiningen project" successfully? |
| 10:14 | robermann | (Eclipse "Juno") |
| 10:22 | mytrile | robermann: I don't use Eclipse, but I've just created a lein project without a probelm |
| 10:24 | robermann | mytrile: in my setup Eclipse creates an empty "project"/directory - that is, without any "src"-like subfolders |
| 10:25 | mytrile | robermann: I have Eclipse IDE for Java Developers and installed CCW through the market place |
| 10:25 | robermann | me too :) Are you using lein 2? |
| 10:26 | clgv | robermann: CCW only uses lein2 |
| 10:28 | robermann | I have a "Leiningen 2.0.0-preview8 on Java 1.7.0 Java HotSpot(TM) 64-Bit Server VM" version |
| 10:28 | clgv | It worked some weeks ago with 0.9.0 |
| 10:30 | robermann | Do you know if the CCW plugin calls the "lein" command in a subprocess? Because doing by command line "lein new myprj" works correctly. |
| 10:30 | clgv | robermann: I think it uses lein as library |
| 10:34 | clgv | robermann: though laurent mentioned something that it will look for the most recent installed leiningen. I dont know if it is already implemented like that |
| 10:34 | robermann | clgv: ok thanks |
| 10:36 | acheng | was Raynes kidding about LightTable failing to save files? or is this an issue that is hard-coded to affect only Raynes? |
| 11:06 | duck11231 | Changelog: Detect when users is Raynes, disable saving. Raynes writes enough code as it is. |
| 11:09 | nz- | is there way to force fetching dependencies while lein repl? something like (fetch-deps [clojure/core.cache "0.0.2") (use 'clojure/core.cache') ... do stuff with core.cache |
| 11:10 | clgv | nz-: pomegranate can do something like that |
| 11:11 | nz- | clgv: thanks |
| 11:20 | acheng | well, i just tried LightTable. connected to an existing project that was managed with leiningen. was only able to see my project.clj file. |
| 11:31 | clj_newb_2389298 | iis tehre somethign like "incanter in action" "the joy of incanter" or "programming incanter" ? |
| 11:31 | clj_newb_2389298 | I so despearte need such a book I'd even be willing to pay for it rather than google for a pdf |
| 11:32 | clgv | clj_newb_2389298: nope. what do you struggle with? |
| 11:32 | clj_newb_2389298 | clgv: nothing relaly, I just want a intense tutorial to pick up everything there is to know about incanter |
| 11:32 | clj_newb_2389298 | rather than learn it bit by bit |
| 11:33 | clgv | there are some blog entries on http://data-sorcery.org/ and clojuredocs is pretty useful as well |
| 11:34 | clgv | clj_newb_2389298: http://data-sorcery.org/contents/ |
| 11:35 | acheng | oh my LightTable issue might be a duplicate of #86 from solussd |
| 11:35 | solussd | acheng: yay! duplication! |
| 11:35 | clj_newb_2389298 | http://incanter.org/docs/incanter-cheat-sheet.pdf |
| 11:35 | clgv | solussd: I thought thats called reproducable ;) |
| 11:35 | clj_newb_2389298 | is this all there is to incanter? |
| 11:36 | solussd | clgv: yay! the duplicatable issue is reproducable! |
| 11:36 | clgv | clj_newb_2389298: unlikely since that cheatsheet is from 2009 |
| 11:36 | solussd | it means I'm not [necessarily] crazy |
| 11:36 | acheng | you have a point. i should file a ticket and then we can call it a duplicate |
| 11:36 | clgv | solussd: where are those tickets listed? |
| 11:37 | solussd | lighttable github page |
| 11:37 | solussd | https://github.com/Kodowa/Light-Table-Playground/issues?state=open |
| 11:40 | acheng | s/reproducable/reproducible |
| 11:41 | acheng | i've added a comment to your ticket to say it's real |
| 11:42 | clgv | oh its on github now ^^ |
| 11:45 | acheng | XSD XML validation... should i just use javax.xml.validation or is there a clojure way? |
| 11:48 | garjola | good morning |
| 11:49 | garjola | I am migrating a project from lein1 to lein2 and I don't know how to update the line containing ":hooks [leiningen.hooks.classpath]". Any idea? |
| 11:49 | duck11231 | acheng: I doubt there is anything in clojure that's going to compete with the native java version |
| 11:51 | acheng | duck11231: makes sense. sheer number of iterations and usage |
| 11:51 | acheng | duck11231: OTOH there's plenty of clojure improvements in other domains |
| 11:54 | acheng | garjola: isn't there a tool that takes an old project.clj and produces a new one for lein2? |
| 11:55 | garjola | acheng: yes, lein precate. I have use that, but there is still one bit missing. |
| 11:55 | garjola | I used to use (robert.hooke/add-hook #'leiningen.classpath/get-classpath |
| 11:55 | garjola | (fn [get-classpath project] |
| 11:55 | garjola | (conj (get-classpath project) |
| 11:55 | garjola | my-class-path))) |
| 11:56 | garjola | to set the classpath with a hook in project.clj |
| 11:56 | acheng | garjola: i have :profiles {:dev {:dependencies [[robert/hooke "1.1.2"]]}} |
| 11:56 | acheng | garjola: is that related? |
| 11:58 | garjola | acheng: I have the same here, but I if I keep the line :hooks [leiningen.hooks.classpath] and run lein deps I get Error: cannot resolve leiningen.hooks.classpath hook |
| 11:59 | garjola | and that did work with lein1 |
| 11:59 | acheng | garjola: is that line necessary? i remember dropping something when i migrated. |
| 12:00 | garjola | acheng: I need it since in leiningen/hooks/classpath.clj I have the definition of the classpath I need |
| 12:01 | garjola | I guess lein2 uses hooks differently, but I don't understand what happens |
| 12:01 | acheng | garjola: i have the same file so i can point to sqljdbc4.jar... |
| 12:02 | acheng | garjola: and i have no :hooks in my project.clj |
| 12:02 | garjola | acheng: and how is this file found by leiningen? |
| 12:02 | acheng | garjola: granted, i do have exceptions when i start connecting to my DBs but it still works. :-P |
| 12:03 | acheng | garjola: i wonder if it is even used. i have an entry in :dependencies for [com.microsoft.sqlserver/sqljdbc4 "4.0"] ... |
| 12:04 | garjola | acheng: I guess that it is not used, but in my case I need to add some local jars to the classpath |
| 12:08 | acheng | garjola: can you "deploy" them locally to your repository as a resource that can be named under :dependencies ? |
| 12:08 | garjola | I have just seen that there's a #leiningen channel. I am going to ask there. Thanks acheng! |
| 12:35 | gtrak | what the heck does this mean? Class clojure.core$bean$fn__5177$fn__5178 can not access a member of class org.apache.hadoop.fs.RawLocalFileSystem$RawLocalFileStatus with modifiers "public" |
| 12:35 | Bronsa | MMM |
| 12:36 | Bronsa | I can't get rid of a reflection warning even type-hinting |
| 12:36 | Bronsa | http://sprunge.us/QIFL what am I doing wrong? |
| 12:36 | nDuff | gtrak: ...so, I have a ticket and patch for that, if it is what I'm thinking... |
| 12:37 | nDuff | gtrak: See http://dev.clojure.org/jira/browse/CLJ-978 |
| 12:37 | gtrak | hmm, looks like it's an inner class that extends a public class |
| 12:37 | nDuff | *nod*. |
| 12:38 | nDuff | See the patch; you can easily enough just make your own my-bean that has it applied. |
| 12:39 | nDuff | (could you vote for it by the way? I'd _hope_, at least, that JIRA votes have some kind of effect in prioritizing fixes to actually be reviewed and merged) |
| 12:39 | gtrak | voted :-) |
| 12:39 | chouser | Bronsa: do you mean .poll ? |
| 12:40 | Bronsa | chouser: i just noticed |
| 12:40 | Bronsa | damn. |
| 12:40 | Bronsa | thanks :) |
| 12:40 | chouser | :-) |
| 12:42 | gtrak | nDuff: this is why I ask things |
| 12:44 | chouser | rawlocalfilestatus does not appear to be public |
| 12:46 | gtrak | its superclass is indeed public, FileStatus |
| 12:47 | chouser | ah, and the class it extends is public, so calling the parent class's method would work? |
| 12:48 | gtrak | yea |
| 12:50 | TimMc | I believe this is one of those things that Checkstyle yells about: Classes whose instances are available at a higher visibility level via an API. |
| 12:54 | gtrak | if only java had default copy constructors... |
| 12:54 | gtrak | I could just slice it and bean that |
| 12:56 | nDuff | chouser: Exactly -- that's what the patch I have attached to the ticket _does_ in the case. |
| 12:56 | nDuff | TimMc: ...and it's a very valid complaint (forces an unreasonably slow codepath), but at the same time, bean _is_ mostly intended to allow inspection of objects from 3rd-party code, and 3rd-party code not behaving well is something of a fact of life. |
| 12:57 | chouser | nDuff: and proxy depends on this to work correctly in some cases? |
| 12:57 | nDuff | chouser: ...well, proxy would need it to work correctly in those cases, yes; as gtrak discovered, it presently just fails. |
| 12:57 | nDuff | chouser: ...notably, the same approach is taken by the introspection API in Apache Commons |
| 12:57 | gtrak | is there a simpler way to generate the getter calls from keywords? |
| 12:58 | gtrak | I feel like I've seen such a macro somewhere |
| 13:06 | technomancy | yay, nrepl.el release |
| 13:11 | SegFaultAX|work2 | Good morning. |
| 13:20 | gtrak | nDuff: that bean patch works for me |
| 13:20 | gtrak | (inc nDuff) |
| 13:20 | lazybot | ⇒ 2 |
| 13:20 | gtrak | (dec java) |
| 13:20 | lazybot | ⇒ -1 |
| 13:22 | emezeske | Whoa, I can cast judgement on programming languages? Awesome. |
| 13:22 | emezeske | (dec java) |
| 13:22 | lazybot | ⇒ -2 |
| 13:22 | emezeske | (inc clojure) |
| 13:22 | lazybot | ⇒ 6 |
| 13:23 | S11001001 | (dec java) |
| 13:23 | lazybot | ⇒ -3 |
| 13:24 | scriptor | (inc php) |
| 13:24 | lazybot | ⇒ 1 |
| 13:24 | _nmmn | (dec java) |
| 13:24 | lazybot | ⇒ -4 |
| 13:24 | SegFaultAX|work2 | (inc python) |
| 13:24 | lazybot | ⇒ 1 |
| 13:25 | _nmmn | (inc erlang) |
| 13:25 | lazybot | ⇒ 1 |
| 13:25 | S11001001 | (dec lazybot) |
| 13:25 | lazybot | ⇒ 5 |
| 13:25 | SegFaultAX|work2 | (inc haskell) |
| 13:25 | lazybot | ⇒ 1 |
| 13:25 | mattmoss | (inc befunge) |
| 13:25 | lazybot | ⇒ 1 |
| 13:26 | SegFaultAX|work2 | (inc brainfuck) |
| 13:26 | lazybot | ⇒ 1 |
| 13:26 | SegFaultAX|work2 | Wait, huh? :) |
| 13:26 | mattmoss | lol |
| 13:28 | emezeske | (dec php) |
| 13:28 | lazybot | ⇒ 0 |
| 13:28 | scriptor | heh |
| 13:28 | emezeske | scriptor: inc php? you madman! |
| 13:28 | SegFaultAX|work2 | You monster. |
| 13:29 | mattmoss | Fiend! |
| 13:29 | _fogus_ | php |
| 13:30 | _fogus_ | ,php |
| 13:30 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: php in this context, compiling:(NO_SOURCE_PATH:0)> |
| 13:30 | _fogus_ | how do I see php's score? |
| 13:30 | hyPiRion | $karma php |
| 13:30 | lazybot | php has karma 0. |
| 13:30 | _fogus_ | thanks |
| 13:30 | mattmoss | $karma clojure |
| 13:30 | lazybot | clojure has karma 6. |
| 13:30 | hyPiRion | (inc clojure) |
| 13:30 | lazybot | ⇒ 7 |
| 13:30 | hyPiRion | ,'(inc clojure) |
| 13:30 | vpetro | $karma python |
| 13:30 | lazybot | python has karma 1. |
| 13:30 | mattmoss | Somehow, I expected it to be higher. |
| 13:30 | clojurebot | (inc clojure) |
| 13:30 | lazybot | ⇒ 8 |
| 13:31 | _fogus_ | $karma scala |
| 13:31 | lazybot | scala has karma 0. |
| 13:31 | vpetro | $karma haskell |
| 13:31 | lazybot | haskell has karma 1. |
| 13:31 | _fogus_ | $karma _fogus_ |
| 13:31 | lazybot | _fogus_ has karma 0. |
| 13:31 | mattmoss | Way to make bots have a conversation. |
| 13:31 | mk | you can also message the bots privately |
| 13:32 | hyPiRion | mattmoss: lazybot have the ⇒ symbol, killing trampolines ;( |
| 13:32 | mattmoss | Well, it's a one-way conversation. <insert sexist joke here> |
| 13:32 | robermann | clgv and others interested: FYI the issue with CCW and Eclipse Juno seems to be a bug. I followed up this: http://code.google.com/p/counterclockwise/issues/detail?id=396&sort=-id |
| 13:41 | muhoo | (inc nrepl.el) |
| 13:41 | lazybot | ⇒ 1 |
| 14:14 | brad` | quit |
| 14:22 | chouser | technomancy: Having trouble using a dep via checkouts that has a data_readers.clj in it. |
| 14:23 | chouser | I think the .jar and the symlink are both on the classpath, so clojure sees the data_readers.clj twice, complains about a conflict, and refuses to start. |
| 14:23 | technomancy | chouser: yeah, that's a known bug in clojure |
| 14:23 | chouser | oh |
| 14:23 | technomancy | http://dev.clojure.org/jira/browse/CLJ-1034 |
| 14:23 | chouser | sure 'nuf |
| 14:23 | technomancy | "conflict" |
| 14:23 | _fogus_ | chouser: what dep is causing the issue? |
| 14:24 | chouser | _fogus_: internal |
| 14:24 | _fogus_ | k |
| 14:24 | chouser | would it be silly for lein checkouts to remove the jar from the classpath? |
| 14:25 | chouser | oh, I bet it doesn't know which symlink goes with which jar |
| 14:25 | technomancy | yeah, it would be pretty complicated to work around from leiningen itself; would obviously rather see it fixed in Clojure =) |
| 14:25 | _fogus_ | This must be what caused my experiments with core.contracts literals to explode Hudson |
| 14:26 | firesofmay | Hey Can anyone tell me how would I run my tests written in clj-webdriver run in parallel? |
| 14:26 | technomancy | given that the patch is already there |
| 14:31 | hcumberdale | Hi there ;) |
| 14:33 | naeg | hi |
| 14:35 | devinus | i'm getting this stacktrace with the latest lein-ring |
| 14:41 | gtrak | why does the repl sometimes say 'Evaluation Aborted' and hide the exception? I've managed to work around it with this: (defmacro unhide-exception [& body] `(try (do ~@body) (catch Exception e# e#))). If I rethrow it, it'll also hide the exception. |
| 14:43 | gfredericks | gtrak: you can at least access the hidden exception with *e |
| 14:44 | gtrak | ah, you're right |
| 14:44 | gtrak | hard to remember |
| 14:44 | gtrak | what's the difference though between things slime decides to show or not? |
| 14:46 | metajack | gtrak: i run into the same problem all the time. it seems that slime just gets into a wonky state. usually once it happens, it happens until i restart the repl |
| 15:12 | acheng | i have a sqlkorma question at refheap.com/paste/4528 |
| 15:19 | acheng | ah nevermind |
| 15:21 | acheng | (specified foreign key with :fk in case anyone wonders what my mistake was) |
| 15:21 | Raynes | As a general rule, you don't figure it out yourself until you've asked a bunch of people and gotten no answer for 10 minutes. |
| 15:21 | acheng | (or rather what the fix was) |
| 15:25 | acheng | Raynes: so the best way to help someone become awesome at figuring stuff out is to totally ignore them |
| 15:25 | Raynes | In my experience. :P |
| 15:25 | Raynes | That said, I don't follow my own rules. I would have answered you had I known anything about korma. |
| 15:26 | m0smith | or perhaps the effort of forming a problem into a question gets one thinking in the right direction |
| 15:26 | acheng | i have something new to figure out. i probably will fail until i make it public. |
| 15:26 | Raynes | Thus is life. |
| 15:27 | m0smith | any seesaw people about? |
| 15:28 | acheng | m0smith: seesaw user |
| 15:28 | acheng | m0smith: oh wait. i want you to be awesome too |
| 15:28 | m0smith | acheng: I am trying to understand the CSS-ish selectors |
| 15:29 | m0smith | Question that leads to awesomeness: Can I use a vector as an :id and still be able to select it using 'select' |
| 15:29 | m0smith | ? |
| 15:30 | jamesdoig | are zookeeper or avout considered good ways to coordinate configuration over multiple instances of applications ? |
| 15:30 | mattmoss | Comment on this, plz. https://gist.github.com/3418356 |
| 15:31 | mattmoss | I may be doing stupid, non-functional things because I think in C++. |
| 15:31 | acheng | m0smith: dunno. you could try it |
| 15:32 | emezeske | jamesdoig: Small amounts of config data is definitely one of the normal use cases for zookeeper. |
| 15:32 | xeqi | does the new nrepl.el release tab complete namespaced functions? |
| 15:33 | m0smith | acheng: I will |
| 15:33 | acheng | m0smith: sorry. i shouldn't have assumed you were not already awesome. you very well could be. |
| 15:33 | m0smith | Awesome is as awesome does -- Forest Gump |
| 15:35 | nz- | xeqi: yes |
| 15:36 | xeqi | blah, I get an exception |
| 15:37 | xeqi | well, let me check a different project to make sure its not an nrepl-middleware issue |
| 15:37 | nz- | din't notice the namespaced part |
| 15:38 | m0smith | mattmoss: what are you trying to do? looks like some sort of pooling |
| 15:38 | xeqi | hmm, works there.. must be a piggieback/nrepl-middleware issue |
| 15:39 | xeqi | nz-: thanks for letting me know it was suppose to work :) |
| 15:40 | mattmoss | m0smith: it is (or should be) a simple integer generator... for unique ids... will return a number in [0, limit] that hasn't already been used |
| 15:40 | nz- | well at least this works (require '(foo [bar :as bar])); ba<tab-complete>/my<tab-complete> |
| 15:40 | emezeske | mattmoss: You seem to already know that that code is not in a functional style -- what are you looking for? |
| 15:40 | emezeske | mattmoss: Suggestions on how to make it more functional? |
| 15:41 | mattmoss | emezeske: Yeah... I feel like I'm over-"engineering" the problem. |
| 15:42 | emezeske | mattmoss: My general suggestion would be to write a pure function that takes as an argument the current pool state, and returns a new pool state |
| 15:42 | emezeske | mattmoss: Then to implement request-handle using that pure function. |
| 15:42 | nz- | xeqi: tab completing for example (java.util.ArrayList.) works, but you must each part of the name complete separately |
| 15:43 | xeqi | nz-: thanks |
| 15:44 | mattmoss | emezeske: I'll give that a shot... thanks for idea. |
| 15:45 | emezeske | mattmoss: Sure thing. That tends to be a common pattern for mutability in clojure -- pure functions for the logic, wrapped by functions that perform mutation. |
| 15:48 | carlosgaldino | can someone explain to me why on the function `brother` it needs to add `fresh` or `all` so the function will behave as expected doing a logical AND between `sibling` and `male` |
| 15:48 | carlosgaldino | here: https://gist.github.com/3219448 |
| 15:52 | SegFaultAX|work2 | carlosgaldino: More importantly, are you working with the lineage in Game of Thrones? :) |
| 15:52 | xeqi | carlosgaldino: defn returns the value of the last form. without fresh or all it would just be the last goal |
| 15:52 | muhoo | has anyone looked into replacing the janky xhr/xpc based cljs browser communication with websockets? it looks like google closure supports it |
| 15:54 | carlosgaldino | xeqi: that was something that I thought but I wanted to be sure that core.logic didn't add any magic. that's cool |
| 15:54 | carlosgaldino | SegFaultAX|work2: it was because of this: http://www.reddit.com/r/dailyprogrammer/comments/v3afh/6152012_challenge_65_intermediate/ |
| 15:54 | clojurebot | http://clojure.org is timeless. |
| 15:54 | SegFaultAX|work2 | carlosgaldino: Yea, I tracked that down. Awesome! |
| 15:55 | carlosgaldino | SegFaultAX|work2: but that's not my code. I'm trying to learn clojure and thought that would be good to start solving this problem of GoT |
| 15:55 | naeg | what is the right way to call a function e.g. 4 times? |
| 15:55 | dnolen | carlosgaldino: xeqi is correct. core.logic doesn't redefine defn. There are some good reasons for a defg tho and that might come sometime in the future. |
| 15:55 | xeqi | carlosgaldino: yeah, defn comes from clojure; but core.logic does define defne/defna and such that act diffently |
| 15:57 | xeqi | (doc dotimes) |
| 15:57 | clojurebot | "([bindings & body]); bindings => name n Repeatedly executes body (presumably for side-effects) with name bound to integers from 0 through n-1." |
| 15:57 | carlosgaldino | dnolen: xeqi awesome! thanks |
| 15:58 | carlosgaldino | dnolen: although I'm just a beginner in the clojure world, I think the defg would be nice to have. |
| 15:58 | chouser | dnolen: resist the urge as long as possible. |
| 15:58 | chouser | ...is my opinion. :-) |
| 15:59 | dnolen | carlosgaldino: needs some thought, implicit defn + all is not a good enough reason. |
| 15:59 | dnolen | chouser: definitely :) |
| 15:59 | dnolen | carlosgaldino: being to able to properly visualize core.logic search trees is more compelling. When that gets sorted out we might see defg. |
| 16:00 | mattmoss | emezeske: Improved version, methinks. https://gist.github.com/3418356 |
| 16:00 | chouser | functions are the interfaces between components, and as long as I see "(defn foo [a b c] ...)' I know a lot about that interface. If I see "(my/defn foo [a b c] ...)" that could be anything, and I have to go learn about how "my" is *implemented* before even understanding how to *call* the thing. |
| 16:00 | xeqi | oof, is there a flag to pass too `mvn install` so clojure will build with openjdk? |
| 16:01 | Bronsa_ | is calling `hash` always the same as calling `.hashCode`? |
| 16:02 | carlosgaldino | dnolen: oh, ok. I get it. yeah, lots of implicit stuff going on is usually bad. I come from ruby/rails and lots of people have trouble with this kind of stuff |
| 16:02 | Raynes | $cd hash |
| 16:02 | lazybot | clojure.core/hash-set: http://clojuredocs.org/v/1538 |
| 16:02 | lazybot | clojure.core/hash: http://clojuredocs.org/v/1824 |
| 16:02 | lazybot | clojure.core/hash-combine: http://clojuredocs.org/v/1969 |
| 16:02 | scriptor | Bronsa_: it calls this: https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Util.java#L113 |
| 16:02 | scriptor | (hash) that is |
| 16:02 | Raynes | So yes. |
| 16:02 | Bronsa_ | mmm |
| 16:02 | Raynes | It is the same as calling hashCode except that it handles nil. |
| 16:03 | scriptor | browsing the source is pretty easy for when you have implementation questions |
| 16:03 | Bronsa_ | then why https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/ASeq.java#L63-83 |
| 16:03 | dnolen | chouser: yep. it probably won't be defg - we already have defne, people are getting familiar with that. |
| 16:03 | zerokarmaleft | carlosgaldino: yea, i wrote that gist back when i had the only read the first couple chapters of TRS and Bratko's book |
| 16:03 | Bronsa_ | what's the point of hasheq then? |
| 16:05 | carlosgaldino | zerokarmaleft: do you say this about both comments I left on it? |
| 16:06 | carlosgaldino | zerokarmaleft: but it's good. I never wrote anything on clojure and started with that problem because I saw your solution. |
| 16:07 | zerokarmaleft | carlosgaldino: that should work |
| 16:07 | emezeske | mattmoss: That's definitely cleaner! |
| 16:08 | emezeske | mattmoss: A minor nit is that I would probably pass @pool to unique-handle instead of pool |
| 16:09 | mattmoss | emezeske: Ya, good call. |
| 16:10 | zerokarmaleft | carlosgaldino: heh, yea i see i created some logical variables for some of those relations for no reason |
| 16:10 | mattmoss | emezeske: Thanks for the comments! |
| 16:14 | zerokarmaleft | wow, github blew up |
| 16:14 | scriptor | it did? |
| 16:15 | Bronsa_ | uea |
| 16:15 | emezeske | mattmoss: No prob. |
| 16:15 | Bronsa_ | yeah* |
| 16:15 | scriptor | huh, loading fine for me... |
| 16:15 | scriptor | but I saw the status blog |
| 16:16 | algernon | the header on the status blog is nicely blinking red and green. |
| 16:18 | scriptor | ah, it's back |
| 16:19 | acheng | flowers for algernon |
| 16:21 | Raynes | Your observational skills amaze me. |
| 16:23 | acheng | korma question: if i use "has-one", and then do a query using "with" any duplicate column names get suffixed with "_2" ... the docs say to use "has-many" insetad and the children will come along in a collection. except when i make that single change, my collection comes back empty. why? |
| 16:26 | acheng | Raynes: i'm getting ignored. but i don't think i'm getting any more awesome. |
| 16:28 | mmitchell | is there a clojure.core function for inverting a map? |
| 16:28 | Bronsa_ | maps are not ordered |
| 16:28 | mmitchell | Bronsa_: I mean a transformation like: {:id 1} => {1 :id} |
| 16:28 | dnolen_ | acheng: http://groups.google.com/group/sqlkorma |
| 16:29 | gfredericks | ,((fn invert-map [m] (zipmap (vals m) (keys m))) {:id 1 :foo 398}) |
| 16:29 | clojurebot | {1 :id, 398 :foo} |
| 16:29 | trptcolin | ,(doc clojure.set/map-invert) |
| 16:29 | clojurebot | Titim gan ?ir? ort. |
| 16:29 | dnolen_ | mmitchell: clojure.set/map-invert |
| 16:29 | acheng | dnolen_: thanks |
| 16:29 | mmitchell | there we go |
| 16:29 | mmitchell | thanks |
| 16:30 | gfredericks | why on earth is that in clojure.set? |
| 16:33 | dnolen_ | gfredericks: because it's used by clojure.set/join? |
| 16:34 | technomancy | exposing something like that for general use strikes me as non-clojurey given how hard clojure tries to keep you from doing things that will cause you O(n) grief |
| 16:35 | trptcolin | even beyond algorithmic complexity, what are the guarantees when you invert something like {:a 1 :b 2 :c 1} |
| 16:36 | gfredericks | it'll be dependent on the map seq ordering |
| 16:36 | gfredericks | i.e. you don't want to depend on it |
| 16:36 | trptcolin | well yeah :) |
| 16:36 | gfredericks | I agree it's a bit weird that it exists |
| 16:38 | ozzloy | anyone in here going to this: http://www.meetup.com/ClojureDC/events/76541552/ ? |
| 16:38 | Cr8 | I've on occasion actually wanted that, but more often than not I want to actually so something sane when I've got {:a 1 :b 2 :c 1} |
| 16:38 | Cr8 | *do |
| 16:40 | aperiodic | if you didn't want to depend on consistent ordering for the keys & vals fns, you could do (into {} (for [[k v] m] [v k])) |
| 16:41 | Cr8 | that clobbers dupicate keys though |
| 16:41 | xeqi | I hate version ranges :/ |
| 16:42 | aperiodic | oh, good call |
| 16:44 | Cr8 | ,(apply (partial merge-with into) (map (fn [[k v]] {v #{k}}) {:a 1 :b 2 :c 1})) |
| 16:44 | clojurebot | {2 #{:b}, 1 #{:a :c}} |
| 16:44 | Cr8 | probably a better way to do that. |
| 16:45 | Cr8 | but it is at least reversible |
| 16:46 | hiredman | ,(group-by val {:a 1 :b 2 :c 2}) |
| 16:46 | clojurebot | {1 [[:a 1]], 2 [[:c 2] [:b 2]]} |
| 16:47 | Cr8 | there we go |
| 16:56 | naeg | someone using IntelliJ IDEA with the clojure plugin? |
| 16:57 | zaargy | everyone uses emacs. hth. |
| 16:57 | naeg | I don't like emacs :S and I don't really like eclipse either |
| 16:58 | naeg | (even though I never tried it out with clojure) |
| 16:58 | scriptor | how long did you try emacs for? |
| 16:59 | naeg | couple of months, because I had to |
| 16:59 | naeg | (VIM guy) |
| 16:59 | djanatyn | Is penumbra the best library for making 2D games in clojure right now? |
| 16:59 | brainproxy | protip: never send enilve some html that has a <legend> tag nested inside a <form> tag, but not also inside a <fieldset> tag ... weird things happen |
| 16:59 | djanatyn | I've never used OpenGL before; I'm used to SDL and SDL wrappers like pygame. |
| 16:59 | scriptor | naeg: tried vimclojure? |
| 17:00 | djanatyn | Are there any libraries more like SDL? |
| 17:00 | dnolen_ | djanatyn: could probably be useful for making games, but mostly focuses on wrapping LWJGL. |
| 17:00 | naeg | scriptor: not yet, still looking around. by now considering vimclojure, eclipse + ccw and intellij with clojure plugin |
| 17:01 | brainproxy | naeg: did you look into prelude for emacs? it helped make my experience and transition smoother |
| 17:02 | brainproxy | dnolen_: looking forward to the core.logic unsession |
| 17:02 | brainproxy | :) |
| 17:02 | naeg | to be honest, I don't even want to get used to using emacs :/ |
| 17:02 | naeg | beat me to it, I'll consider emacs too |
| 17:03 | dnolen_ | brainproxy: yeah! should be fun. hopefully will make core.logic seem considerably less "magical" |
| 17:03 | scriptor | naeg: I'm a vim guy too, but emacs hasn't been too hard to learn |
| 17:04 | naeg | scriptor: I'm not scared of learning it, I rather fear that I won't like it |
| 17:05 | brainproxy | naeg: i'm another convert from vim/macvim to emacs |
| 17:05 | brainproxy | it wasn't easy at first, I wondered if I would end up hating it |
| 17:05 | scriptor | heh, I still use both |
| 17:06 | naeg | currently I'm trying out stuff with the new light table playground |
| 17:06 | naeg | that's OK for me while learning, ocassionally doing something "bigger" like conways |
| 17:56 | technomancy | protip: you want vary-meta, not with-meta. |
| 17:58 | dnolen_ | technomancy: sounds like kibit rule worth adding |
| 18:14 | technomancy | I'm boycotting kibit until they fix the when bug =\ |
| 18:15 | Raynes | I need to integrate kibit with the refheaps. |
| 18:15 | Raynes | Killer feature, anybody? |
| 18:15 | emezeske | technomancy: Is the "when bug" the "use when instead of if for single clause" thing? |
| 18:15 | technomancy | emezeske: yeah: https://github.com/jonase/kibit/issues/2 |
| 18:16 | emezeske | technomancy: :) |
| 18:16 | emezeske | O_o rather |
| 18:18 | Raynes | technomancy: I don't think I understand your fascination with single branch ifs. |
| 18:19 | Raynes | It's silly to associate ifs with return values when you can just as easily need to perform side effects in if branches as well. |
| 18:19 | technomancy | obviously if is the more general form |
| 18:19 | technomancy | it can be used either functionally or side-effectily. |
| 18:19 | technomancy | when, on the other hand, is more specific |
| 18:20 | casion | Raynes: isn't this about encouraging idiomatic code though? |
| 18:20 | casion | using 'when' would be more explicit in some cases |
| 18:20 | Raynes | I don't think what he is against is unidiomatic. |
| 18:21 | technomancy | I'm not against using if for side-effects, I'm against using when for return values. |
| 18:21 | technomancy | because when is a more specific construct than if |
| 18:21 | Raynes | I realize. |
| 18:21 | technomancy | I'm also against using and for side-effects |
| 18:21 | Raynes | But I don't think you have a good argument. |
| 18:21 | technomancy | the parallel isn't between when and if, it's between when and and |
| 18:22 | technomancy | maybe people get confused because cond is a still more general form, and cond *is* about the number of branches |
| 18:25 | technomancy | anyway, this isn't even specific to clojure; it's a lisp tradition that goes years back. |
| 18:25 | technomancy | and having clojure code that's less concerned than CL about separating side-effects vs return values is just wrong. |
| 18:37 | SegFaultAX|work2 | Is cond usually defined in terms of if or vice versa? Does it matter? |
| 18:37 | amalloy | i don't think it matters |
| 18:37 | technomancy | I think in the original lisp cond was the special form, but in Clojure it's if. |
| 18:37 | Bronsa | afaik cond is defined in terms of if |
| 18:38 | SegFaultAX|work2 | It /seems/ like it'd be easier to implement if in terms of cond. |
| 18:38 | SegFaultAX|work2 | Since cond is much more general. |
| 18:39 | hyPiRion | Cond is like if, |
| 18:39 | saurik | SegFaultAX|work2: its just nested ifs, so to the extent to which "easier" matters, it isn't that hard either way: (cond a b c d :else e) (if a b (if c d e)) |
| 18:40 | SegFaultAX|work2 | saurik: Right. I'm just wondering which is traditionally implemented as a special form. As technomancy said earlier, in Clojure it's `if` |
| 18:40 | hyPiRion | ^^ what I live by. |
| 18:40 | SegFaultAX|work2 | saurik: But you're right (and that's my point): once you have one form the other is trivial. |
| 18:40 | saurik | sure, I was just responding to the "/seems/ like it'd be easier to implement" comment. |
| 18:41 | SegFaultAX|work2 | saurik: Well, the if version requires nesting of forms. The cond form doesn't. |
| 18:41 | SegFaultAX|work2 | Which is why I said it seemed simpler. |
| 18:41 | SegFaultAX|work2 | In the end it doesn't matter. Just a general query. :) |
| 18:42 | hyPiRion | Well, really, they are both equivalent. |
| 18:43 | SegFaultAX|work2 | In CL, cond is the special form, no? |
| 18:44 | hyPiRion | SegFaultAX|work2: True |
| 18:44 | SegFaultAX|work2 | Does the Scheme standard dictate that detail? |
| 18:44 | jballanc | anyone available to help troubleshoot an issue with some reducers? |
| 18:44 | hyPiRion | But it doesn't really matter - you can create one given the other via macros. |
| 18:44 | amalloy | ~anyone |
| 18:44 | clojurebot | Just a heads up, you're more likely to get some help if you ask the question you really want the answer to, instead of "does anyone ..." |
| 18:45 | jballanc | :) |
| 18:45 | jballanc | I just figured reducers were obscure enough at this point it might help to pre-ask |
| 18:46 | saurik | SegFaultAX|work2: in clisp if is a special form and cond is a macro |
| 18:46 | jballanc | so I have a simple scrabble solver that brute-forces its way through the dictionary |
| 18:46 | jballanc | here's the core: https://github.com/jballanc/scrabbler/blob/master/src/scrabbler/bruteforce.clj |
| 18:46 | hyPiRion | jballanc: Just fire off the problem :) |
| 18:46 | saurik | [29]> (macroexpand '(cond (true 0))) |
| 18:46 | saurik | (IF TRUE 0 NIL) ; |
| 18:47 | hyPiRion | ,(macroexpand-1 '(cond (true 0))) |
| 18:47 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: cond requires an even number of forms> |
| 18:47 | jballanc | but if I change line #23 to "fold" instead of "reduce", I keep getting a PersistentHashMap cannot be cast to IFn error |
| 18:47 | saurik | hyPiRion: clojure has different cond syntax |
| 18:47 | hyPiRion | ,(macroexpand-1 '(cond true 0)) |
| 18:47 | clojurebot | (if true 0 (clojure.core/cond)) |
| 18:48 | jballanc | the backtrace points to here: https://github.com/clojure/clojure/blob/master/src/clj/clojure/core/reducers.clj#L48 |
| 18:49 | jballanc | but I can't figure out how my map got inside the call to fjinvoke |
| 18:50 | jballanc | the backtrace: https://gist.github.com/3420099 |
| 18:56 | jballanc | oh wait...is this a bug? https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/PersistentHashMap.java#L197 |
| 18:56 | jballanc | wait...nevermind...root is not a map |
| 19:10 | jballanc | oh wait...ok, I think I see it |
| 19:10 | jballanc | so, it seems you can't "fold" inside of a function that's going to be "folded" |
| 19:10 | jballanc | this line: https://github.com/clojure/clojure/blob/master/src/clj/clojure/core/reducers.clj#L47 |
| 19:11 | jballanc | ^ that *should* evaluate to false when I do my initial fold...but since I'm folding inside of a fold, I'm inside of the outer fold's ForkJoinPool |
| 19:11 | jballanc | and it evaluates to true instead |
| 19:11 | jballanc | hmm... |
| 19:22 | arohner_ | is there a built in fn that returns (defn ??? [f seq] [(filter f seq) (filter (not f) seq)])? |
| 19:22 | technomancy | arohner_: (juxt filter remove) |
| 19:22 | amalloy | (juxt filter remove) |
| 19:22 | arohner_ | oh, very nice |
| 19:22 | technomancy | amalloy: too slow bro |
| 19:23 | emezeske | technomancy vs amalloy quick draw duel |
| 19:23 | technomancy | emezeske: it's the dvorak |
| 19:23 | amalloy | ,(println "(dec amalloy)") |
| 19:23 | clojurebot | (dec amalloy) |
| 19:23 | lazybot | ⇒ 26 |
| 19:23 | emezeske | technomancy: hahaha |
| 19:24 | amalloy | technomancy: i was struggling with whether to mention contrib/separate, or the version in useful |
| 19:24 | emezeske | amalloy: seppuku, huh? |
| 19:25 | technomancy | indecision; it gets you every time |
| 19:25 | amalloy | clojurebot: separate is (juxt filter remove) |
| 19:25 | clojurebot | Ack. Ack. |
| 19:25 | amalloy | shortcut for next time this gets asked! |
| 19:25 | technomancy | amalloy: but as you know, juxt is supposedly a terrible thing for teaching OOP programmers |
| 19:25 | amalloy | is it? |
| 19:26 | technomancy | https://mobile.twitter.com/marick/status/234456740031254528 |
| 19:26 | technomancy | who knew, right? |
| 19:26 | amalloy | i stopped following marick a while ago: too much noise |
| 19:29 | jballanc | looks like I need to find a printer...and international postage |
| 19:29 | emezeske | I've had people tell me I'm a jerk for suggesting juxt to newbs before |
| 19:30 | amalloy | ~juxt |
| 19:30 | clojurebot | juxt is a little hard to grok but it's the best thing ever |
| 19:30 | emezeske | Apparently everyone assumes newcomers are incapable of learning? |
| 19:30 | amalloy | obviously. otherwise they'd already know everything |
| 19:30 | emezeske | whoa |
| 19:30 | emezeske | I just saw a tear in spacetime for a second |
| 19:31 | hyPiRion | ~separate |
| 19:31 | clojurebot | separate is in clojure.contrib.seq-utils, but just use (juxt filter remove) instead |
| 19:31 | technomancy | ~botsnack |
| 19:31 | clojurebot | Thanks! Can I have chocolate next time |
| 19:31 | hyPiRion | sweet. |
| 19:31 | hyPiRion | ~chocolate |
| 19:31 | clojurebot | Cool story bro. |
| 19:31 | amalloy | oh haha, i think i taught him that one too. now i feel silly for teaching him the new one |
| 19:32 | amalloy | clojurebot: forget separate |is| (juxt filter remove) |
| 19:32 | clojurebot | I forgot that separate is (juxt filter remove) |
| 19:32 | hyPiRion | hah |
| 19:32 | hyPiRion | ~separate |
| 19:32 | clojurebot | separate is in clojure.contrib.seq-utils, but just use (juxt filter remove) instead |
| 19:32 | hyPiRion | well, clojurebot is an elephant apparently. |
| 19:34 | jballanc | anyone know if it's possible to join clojure-dev without signing a contributor agreement? |
| 19:34 | emezeske | jballanc: Don't think so. |
| 19:34 | SegFaultAX|work2 | How can I write this better? |
| 19:34 | SegFaultAX|work2 | ,((fn [& rest] (->> rest (apply map vector) (apply concat) (apply hash-map))) [:a :b :c] [1 2 3]) |
| 19:35 | clojurebot | {:a 1, :c 3, :b 2} |
| 19:35 | hyPiRion | jballanc: I think the CA is rather okay to write |
| 19:35 | jballanc | not worried about writing it |
| 19:35 | hyPiRion | ,(zipmap [:a :b :c] [1 2 3]) |
| 19:35 | clojurebot | #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: ?? in this context, compiling:(NO_SOURCE_PATH:0)> |
| 19:35 | SegFaultAX|work2 | hyPiRion: Can't use zipmap |
| 19:35 | SegFaultAX|work2 | hyPiRion: (4clojure) |
| 19:36 | jballanc | worried about the 2 weeks the post would take to get from me to NC |
| 19:36 | hyPiRion | Ah. |
| 19:36 | SegFaultAX|work2 | Should have specified that in my initial problem statement. |
| 19:36 | muhoo | this is a subliminal message. cljs browser repl over websockets. this has been a subliminal message. |
| 19:37 | jballanc | no chance of an electronic CA submission? |
| 19:37 | hyPiRion | (->> (interleave [:a :b :c] [1 2 3])) (partition 2) (into {})) |
| 19:37 | hyPiRion | ,(->> (interleave [:a :b :c] [1 2 3])) (partition 2) (into {})) |
| 19:37 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: clojure.lang.ArityException: Wrong number of args (1) passed to: core$--GT> |
| 19:37 | technomancy | jballanc: it's been suggested before, but apparently to deaf ears |
| 19:37 | hyPiRion | h |
| 19:37 | jballanc | :( |
| 19:37 | technomancy | scala's CA is submitted via github oauth |
| 19:38 | hyPiRion | Oh. |
| 19:38 | Bronsa | My CA took 1 month to get to NC |
| 19:38 | emezeske | For my most recent job, ALL of my paperwork was electronic, NDA, employment agreement, everything |
| 19:38 | emezeske | You'd think that the CA could be too :( |
| 19:38 | technomancy | muhoo: how about a cljs repl over regular sockets? |
| 19:39 | technomancy | muhoo: trying to get a repl in gjs was a complete mess |
| 19:39 | jballanc | well, between finding a printer and time for the post, I think at this point I'd be better off hand delivering it at the Conj |
| 19:39 | technomancy | jballanc: clojure isn't exactly well-known for being welcoming to potential contributors, unfortunately |
| 19:41 | hyPiRion | technomancy: Is there anything else, apart from the CA, that hinders new people from contributing? |
| 19:43 | technomancy | hyPiRion: sure, the refusal to accept pull requests, the insistence that everything go through jira, and the fact that it takes ages for submitted patches to get attention. |
| 19:44 | technomancy | even among regular contributors the workflows and policies around jira aren't understood. |
| 19:44 | hyPiRion | Hm. |
| 19:45 | saurik | ,(apply hash-map (interleave [:a :b :c] [1 2 3])) |
| 19:45 | clojurebot | {:a 1, :c 3, :b 2} |
| 19:46 | saurik | ,((comp (partial apply hash-map) interleave) [:a :b :c] [1 2 3]) |
| 19:46 | clojurebot | {:a 1, :c 3, :b 2} |
| 19:48 | saurik | SegFaultAX|work2: ^ (in case you otherwise might miss it when you get back) |
| 19:49 | SegFaultAX|work2 | saurik: Actually that's pretty close to what I came up with in the end. |
| 19:49 | SegFaultAX|work2 | saurik: I ended up replacing [& rest] with [keys vals], then interleave + apply hash-map. |
| 19:49 | SegFaultAX|work2 | saurik: I just didn't consider at first that it doesn't make sense to supply more than 2 seqs to this function. |
| 19:55 | amalloy | &(into {} (map vector [:a :b :c] [1 2 3])) ;; another option |
| 19:55 | lazybot | ⇒ {:a 1, :b 2, :c 3} |
| 19:56 | hyPiRion | ,(= (map vector [:a :b :c] [1 2 3]) (partition 2 (interleave [:a :b :c ] [1 2 3]))) |
| 19:56 | clojurebot | true |
| 19:56 | hyPiRion | ,(into {} (partition 2 (interleave [:a :b :c ] [1 2 3]))) |
| 19:56 | clojurebot | #<ClassCastException java.lang.ClassCastException: clojure.lang.Keyword cannot be cast to java.util.Map$Entry> |
| 19:56 | hyPiRion | hurr. |
| 19:56 | saurik | ,(= '(1) [1]) |
| 19:56 | clojurebot | true |
| 19:56 | saurik | hyPiRion: into {} needs to take a vector, partition returns a list |
| 19:56 | hyPiRion | Do the entries have to be vectors? |
| 19:57 | SegFaultAX|work2 | What about this group-by alternative? https://www.refheap.com/paste/4536 |
| 19:57 | hyPiRion | so ##(into {} (list 1 2)) will fail. |
| 19:57 | lazybot | java.lang.RuntimeException: Unable to resolve symbol: in this context |
| 19:57 | amalloy | hyPiRion: yes; you can conj a vector-pair onto a map, but not a list-pair |
| 19:57 | hyPiRion | so ##(into {} (list 1 2)) will fail. |
| 19:57 | lazybot | java.lang.IllegalArgumentException: Don't know how to create ISeq from: java.lang.Long |
| 19:58 | amalloy | saurik: into {} takes any kind of seq; the values *within* the seq need to be vectors |
| 19:58 | amalloy | &(into {} (map vec (partition 2 (interleave [:a :b :c ] [1 2 3])))) |
| 19:58 | lazybot | ⇒ {:a 1, :b 2, :c 3} |
| 19:58 | muhoo | technomancy: i was thinking of the communication berween |
| 19:58 | Bronsa | why does it have to be a vector? |
| 19:58 | hyPiRion | ,(into {} (list (list 1 2))) |
| 19:58 | clojurebot | #<ClassCastException java.lang.ClassCastException: java.lang.Long cannot be cast to java.util.Map$Entry> |
| 19:58 | amalloy | this is because of some grossness in clojure's implementation of conj |
| 19:58 | muhoo | the compiler/repl and the browser |
| 19:58 | saurik | sorry, correct. I realized that after I said it, but didn't believe it would be important until I saw how hyPiRion interpreted it |
| 19:59 | kenneth | hey, can you make a macro that will expand `hello` to `(println "hello world")` for example? |
| 19:59 | muhoo | technomancy: websockets vs. xhr posts |
| 19:59 | technomancy | muhoo: yeah, I was just surprised how difficult it was to get a basic repl going even in an environment that wasn't subject to all the crazy sandboxing that a browser has to deal with |
| 20:00 | technomancy | especially vs how easy a socket-repl is to implement in Clojure |
| 20:00 | technomancy | all the existing tooling I could find assumes a browser |
| 20:00 | technomancy | anyway, it looked hard, so I wandered off |
| 20:01 | muhoo | it's something i could do in a couple weeks or months work, buht probably you, cemerick, and emezeske could do in like a day |
| 20:02 | technomancy | nah; I'm in way over my head when it comes to JS runtimes |
| 20:02 | muhoo | the js isn't the hard part, just the messy part |
| 20:02 | technomancy | well, learning a new runtime is always hard |
| 20:02 | emezeske | muhoo: Haha, I can't speak for cemerick, but I think you are vastly overestimating my abilities :) |
| 20:03 | technomancy | much harder than learning a new language |
| 20:03 | saurik | kenneth: the closest you can get to a symbol macro is something like with-symbol-macros (which you then have to wrap around your code, as it relies on manually doing a code walk) https://github.com/clojure/tools.macro/ |
| 20:05 | kenneth | saurik: hmm… i see, that won't do for my intended use case (adding tools to the repl that don't require parens) |
| 20:06 | kenneth | saurik: btw, are you the same saurik that hacks iPhone? |
| 20:06 | saurik | yes |
| 20:06 | kenneth | cool stuff! |
| 20:07 | muhoo | i distinguish "hard" from "complicated". some things are not taxing of reasoning and thinking, only of memory and patience to understand the brokenness. other things are just cognitively hard to grasp. |
| 20:11 | kenneth | muhoo: doing twenty pull ups is not complicated, but pretty hard :) |
| 20:17 | xeqi | technomancy: have you seen piggieback? or are you meaning more like cli calling V8/node/whatever? |
| 20:18 | technomancy | xeqi: I was trying to embed it in gjs, the JS engine used by gnome3 |
| 20:18 | technomancy | piggieback is specific to the browser repl, right? |
| 20:18 | technomancy | currently anyway? |
| 20:18 | xeqi | it had the rhino engine first |
| 20:18 | xeqi | but the browser repl pretty much dropped in |
| 20:18 | technomancy | oh, huh |
| 20:19 | technomancy | well I also lost interest due to realizing that I didn't really want much out of gnome3 that xmonad didn't already provide =) |
| 20:19 | xeqi | but I'm not sure how much it would help for ne wruntimes like that |
| 20:19 | xeqi | haha |
| 20:19 | xeqi | I've been interested in the lein-gnome thing, but have the same problem |
| 20:20 | technomancy | yeah, I want to run a dynamic clojurescript-powered desktop, it's just so much work compared to xmonad where everything is already perfect =) |
| 20:20 | xeqi | gnome2 + xmonad works well as a local maximum, and I don't feel like making a large jump |
| 20:43 | gfredericks | clojurescript isn't very dynamic |
| 20:49 | xeqi | gfredericks: ? |
| 20:53 | gfredericks | xeqi: I just thought technomancy's comment was interesting since cljs isn't dynamic |
| 20:53 | xeqi | what do you mean by "dynamic"? |
| 20:54 | gfredericks | well you should probably have eval for one |
| 20:55 | eggsby | guys how do I use clojurescript to build a decently simple web app without using noir and a boatload of js interop? |
| 20:55 | gfredericks | effort? |
| 20:55 | xeqi | ah, as in running without the jvm based compiler portion |
| 20:56 | gfredericks | xeqi: right |
| 20:56 | eggsby | gfredericks: I played with clojurescript this weekend, all the pinot stuff seemed to only work if you used it with noir, the only other option was to use the google closure calls via js interop, is there a way I'm missing? |
| 20:56 | xeqi | eggsby: have you seen jayq? |
| 20:56 | emezeske | eggsby: jayq |
| 20:57 | emezeske | eggsby: But in general, even if you use something like jayq or domina or enfocus or something, expect to do some interop |
| 20:58 | eggsby | what is "(def $interface ($ :#interface)) |
| 20:58 | eggsby | doing |
| 20:58 | eggsby | specifically the :#interface bit |
| 20:59 | gfredericks | I expect that's like $("#interface") in JS |
| 20:59 | gfredericks | :#interface is just a keyword |
| 20:59 | eggsby | aaaah got confused, thought it was some sort of type hint style thing... derp |
| 20:59 | eggsby | :) |
| 21:01 | eggsby | I'll try jayq, thanks xeqi gfredericks |
| 21:02 | aperiodic | eggsby: have you checked out C2? the todoMVC demo is pretty nice: https://github.com/lynaghk/c2-demos/tree/master/todoMVC |
| 21:03 | eggsby | I've read about c2 aperiodic but I haven't used it... the idea of just tying data structures to the dom is nice |
| 21:03 | aperiodic | eggsby: yeah, it's quite pleasant to not have to be mucking about with the DOM yourself |
| 21:09 | eggsby | dang I didn't even realize that cljs supported atoms... thanks for this demo aperiodic |
| 21:34 | Kowboy | clj-http or http.async.client? |
| 21:43 | frio | i haven't used http.async.client, but ive found clj-http unfailingly excellent |
| 22:28 | Raynes | http://langref.org/clojure/unsolved Is it just me, or this website completely blown to crap when you scroll down? |
| 22:30 | francis | its not just you |
| 22:30 | llasram | Looks like poor escaping practices + spam fun times to me |
| 22:30 | alpheus | I would like to use java.nio.file.Files, which I think only comes with Java SE 7u6. Should that work OK with Clojure 1.4? |
| 22:31 | francis | Has anyone gotten up and running with lein2 lately and run into an EOF error? |
| 22:31 | Raynes | IIRC, Clojure is tested against Java 7. |
| 22:31 | Raynes | (along with several other java versions) |
| 22:33 | alpheus | My need for java.nio.file.Files is creating "hard" links on a Unix filesystem. Is there another way of doing this that I've missed? |
| 22:34 | francis | duh, nevermind - don't have java installed |
| 22:36 | samflores | Hi, folks. Noob question: is there a way to preload my project so clojure.test doesn't suffer the jvm start up time in every single run? |
| 22:38 | brehaut | lein interactive ? |
| 22:38 | brehaut | int for short |
| 22:38 | brehaut | well, lein int |
| 22:39 | samflores | is it a plugin? |
| 22:39 | brehaut | no |
| 22:39 | brehaut | wait, you are using lein right? |
| 22:40 | samflores | yep :) I'm just stating to learn Clojure and I'm running tests with lein test |
| 22:40 | xeqi | lein interactive is lein1 only |
| 22:40 | brehaut | oh |
| 22:40 | brehaut | my bad |
| 22:40 | samflores | oh, that's why I can't find it |
| 22:41 | xeqi | unfortunatly there isn't anything that will quicken `lein test` |
| 22:41 | samflores | that's sad |
| 22:41 | xeqi | there are some thoughts on having a background jvm, possibly with jark, but no action that way yet |
| 22:41 | xeqi | I use a repl when wanting to run them quickly |
| 22:43 | wmealing_ | samflores: check out midje lazytest for some awesome |
| 22:45 | xeqi | using preview8 and lein-cljsbuild together I'm getting https://www.refheap.com/paste/4540 |
| 22:46 | samflores | wmealing_: I'll take a look. thanks |
| 22:56 | emezeske | xeqi: I think the latest Leiningen 2 preview changed something backwards-incompatibly |
| 22:56 | xeqi | yeah, I figured it was gonna require a cljsbuild update |
| 22:56 | emezeske | xeqi: There's already an issue open; I need to test it against the latest Leiningen 2 preview and bring it up to date |
| 23:17 | xeqi | is there a good app for clojurescript demos? |
| 23:17 | xeqi | * to use for |
| 23:29 | dhm | xeqi: take a look at http://clojurescriptone.com/ |
| 23:33 | xeqi | heh, I suppose I should have expected that |
| 23:43 | cjfrisz | Did the way records are imported change in the latest 1.5.0 alpha? |
| 23:44 | cjfrisz | I suddenly had code break when I did it the old way |
| 23:45 | cjfrisz | As in, I required the namespace and then imported the record types |
| 23:45 | cjfrisz | Now I can't compile unless I take the require out and just do the import directly |
| 23:57 | grizlo42 | why can't i load the json api in my repl? |
| 23:57 | grizlo42 | FileNotFoundException Could not locate clojure/data/json__init.class or clojure/data/json.clj on classpath: clojure.lang.RT.load (RT.java:432) |
| 23:58 | xeqi | how are you starting your repl? |
| 23:59 | grizlo42 | java -cp ~/applications/clojure-1.4.0/clojure-1.4.0.jar clojure.main |
| 23:59 | xeqi | clojure.data.json is a seperate jar |