2012-04-17
| 00:05 | wkmanire | A vector of vectors? |
| 00:06 | emezeske | wkmanire: [[11 12] [21 22]] |
| 00:06 | wkmanire | emezeske: He he he, I knew what you meant |
| 00:07 | emezeske | wkmanire: Oh! |
| 00:07 | wkmanire | I wasn't asking literally for you to explainwhat that is. |
| 00:07 | wkmanire | Validating columns and quadrants would be painful with a vector of vectors |
| 00:08 | emezeske | Painful? |
| 00:09 | emezeske | ,(map #(get % 0) [[1 2] [3 4]]) |
| 00:09 | emezeske | There's a column |
| 00:09 | clojurebot | (1 3) |
| 00:09 | wkmanire | &(doc get) |
| 00:09 | lazybot | ⇒ "([map key] [map key not-found]); Returns the value mapped to key, not-found or nil if key not present." |
| 00:10 | wkmanire | I see how that works. |
| 00:10 | wkmanire | emezeske: I'm still taking my baby steps with clojure. The way I would have done that would been a whole lot uglier. |
| 00:10 | emezeske | wkmanire: ^_^ |
| 00:11 | wkmanire | emezeske: Wanna golf some code back 'n forth on refheap? |
| 00:11 | emezeske | wkmanire: As for a quadrant, you might do something like ##(map #(subvec % 1 3) (subvec [[1 2 3 4] [5 6 7 8] [9 0 1 2] [3 4 5 6]] 0 2)) |
| 00:11 | lazybot | ⇒ ([2 3] [6 7]) |
| 00:11 | emezeske | wkmanire: Although I'm not sure that's the most succinct approach |
| 00:12 | emezeske | wkmanire: A bit busy atm :) |
| 00:12 | wkmanire | &(doc subvec) |
| 00:12 | lazybot | ⇒ "([v start] [v start end]); Returns a persistent vector of the items in vector from start (inclusive) to end (exclusive). If end is not supplied, defaults to (count vector). This operation is O(1) and very fast, as the resulting vector shares structure with the original and no trimming is done." |
| 00:12 | wkmanire | emezeske: Bummer, maybe another time. |
| 00:13 | wkmanire | I'm going to hack around on this and try to learn me sumthin' before I go to bed. |
| 00:13 | wkmanire | Thanks for the pointers. |
| 00:14 | emezeske | wkmanire: NP |
| 00:14 | technomancy | muhoo: the trampoline repl thing is a known bug; will be fixed in the next preview |
| 00:16 | emezeske | technomancy: Hey, I wonder if you might have insight into this: |
| 00:16 | emezeske | technomancy: When I add [org.apache.maven.artifact/maven-artifact "3.0.4"] as a dependency in lein-cljsbuild, lein2 seems to blow up |
| 00:16 | emezeske | technomancy: I assume that it's because of a version conflict |
| 00:16 | technomancy | emezeske: I think it might need a different version of plexus from pomegranate, but I couldn't say for sure |
| 00:17 | technomancy | actually, maven 3.x should be compatible |
| 00:17 | technomancy | what's the error? |
| 00:17 | emezeske | java.lang.NoSuchMethodError: org.codehaus.plexus.DefaultPlexusContainer.initialize |
| 00:17 | emezeske | I don't really care what version of the JAR I use, I'm just using it to compare versions |
| 00:17 | technomancy | oh gross dependency injection |
| 00:17 | technomancy | sorry, no idea |
| 00:17 | technomancy | cemerick might know |
| 00:17 | emezeske | haha, thanks |
| 00:18 | technomancy | I can't even understand what dependency injection is, much less use it. |
| 00:18 | emezeske | Pain... I just want to call one function from the JAR :( |
| 00:18 | technomancy | every time I read about it, the words describing it just don't form coherent impressions in my mind. |
| 00:18 | technomancy | which function? |
| 00:18 | technomancy | method |
| 00:18 | emezeske | actually I was wrong about just calling a func |
| 00:18 | emezeske | DefaultArtifactVersion. |
| 00:19 | TimMc | technomancy: I only know about DI from Java-land, where it basically consists of writing Java in XML syntax. /kills self |
| 00:19 | technomancy | emezeske: are you comparing two versions? |
| 00:19 | emezeske | technomancy: yes |
| 00:19 | technomancy | because I have a native Clojure function for that in leiningen.core.main |
| 00:19 | emezeske | technomancy: is it a public function? |
| 00:19 | technomancy | aye |
| 00:19 | wkmanire | technomancy: There is an older google tech talk "Clean Code Talks" that demonstrates one understanding of dependency injection. |
| 00:19 | emezeske | technomancy: thanks I'll just use that! |
| 00:19 | technomancy | emezeske: oh, it's marked ^:internal, but I should probably make it public |
| 00:20 | wkmanire | technomancy: The speaker was Misko Hevery. |
| 00:20 | technomancy | leiningen.core.main/version-satisfies? |
| 00:20 | emezeske | technomancy: nice |
| 00:20 | TimMc | Pretty sure dynamic vars take the place of a lot of dependency injection in Clojure. |
| 00:20 | emezeske | technomancy: I'm not familiar with internal; is that enforced? |
| 00:20 | technomancy | emezeske: not a bit; it's just documentation |
| 00:20 | wkmanire | But the examples were entirely imperative and he mostly cited the concept of requiring objects as arguments to your functions that you need to use |
| 00:20 | wkmanire | as opposed to having your functions take arguments and using them to create new object instances with them. |
| 00:21 | technomancy | wkmanire: I think you might need to understand crappy type systems for it to make sense? |
| 00:21 | emezeske | technomancy: Nice, I like that better than private ;) |
| 00:21 | technomancy | that's my theory |
| 00:21 | xeqi | heh, I had to write something similiar for pomegranate |
| 00:21 | xeqi | re: version comparison |
| 00:21 | technomancy | xeqi: oh, I should use that then |
| 00:21 | technomancy | is yours public? =) |
| 00:22 | xeqi | c.p.a/within? |
| 00:22 | xeqi | I think |
| 00:22 | wkmanire | technomancy: Well, the concept works even with languages that have generally liked typed systems like Python. |
| 00:22 | technomancy | xeqi: cool |
| 00:22 | xeqi | well, it works on the coordinates, not the version specifically |
| 00:22 | technomancy | ah, sure |
| 00:22 | technomancy | emezeske: best to go with that; mine might go away |
| 00:23 | emezeske | technomancy: thanks |
| 00:23 | emezeske | Hmm, I don't know what "coordinates" means |
| 00:23 | xeqi | [ring "1.0.2"] <- coordinate |
| 00:24 | technomancy | wkmanire: you can implement it in Ruby too, but you will be filled with regret years later if you do: http://weblog.jamisbuck.org/2007/7/29/net-ssh-revisited |
| 00:24 | emezeske | xeqi: Ah, the whole thing, I see |
| 00:25 | xeqi | are you just doing version comparisons? |
| 00:25 | emezeske | xeqi: yeah |
| 00:25 | wkmanire | technomancy: Yeah, with languages like Ruby an Python it is a lot easier to mock things. |
| 00:25 | wkmanire | and... I think the biggest draw of DI is testability. |
| 00:25 | emezeske | wkmanire: It's ridiculously easy to mock in clojure, see midje |
| 00:26 | wkmanire | No need go to the extremes you need to to in languages such as VB.net or Java. |
| 00:26 | wkmanire | emezeske: I still haven't written a unit test for Clojure. |
| 00:26 | xeqi | https://github.com/cemerick/pomegranate/blob/master/src/main/clojure/cemerick/pomegranate/aether.clj#L462 |
| 00:26 | wkmanire | emezeske: I wrote my first Clojure app today, a number guessing game that uses the binary search algorithm |
| 00:26 | emezeske | wkmanire: I just started recently, I've been super impressed with midje |
| 00:27 | wkmanire | https://refheap.com/paste/2156 |
| 00:27 | wkmanire | I really am just a wet-behind-the-ears clojure newb. |
| 00:27 | xeqi | could take just some of that if don't need full coordinates |
| 00:27 | emezeske | xeqi: thank you! |
| 00:28 | wkmanire | emezeske: I do want to start unit testing right out of the gate though. I waited about 10 years to start that habbit with imperative programming. That was a big mistake. |
| 00:30 | emezeske | wkmanire: Yeah, I hear you there |
| 00:34 | wkmanire | &(doc =>) |
| 00:34 | lazybot | java.lang.RuntimeException: Unable to resolve var: => in this context |
| 00:35 | wkmanire | emezeske: Did they modify the way the reader works in midge to make => meaningful? |
| 00:35 | Raynes | Why would they have to modify the reader? |
| 00:35 | emezeske | wkmanire: Nah, it's just a macro |
| 00:35 | wkmanire | Raynes: Cause I don't know how to ask the question gooder. |
| 00:35 | emezeske | wkmanire: Within the (fact ...) macro, you'll have to look at midje's documentation. It's a DSL. |
| 00:36 | wkmanire | okeydokey. |
| 00:36 | Raynes | emezeske: I'm lonely and you're the closest thing to a close friend who is around right now. You should give me hugs and stuff. |
| 00:36 | eggsby | hey, is there any way to get run-jetty to work in conjunction with an infinite loop in the same project? |
| 00:36 | eggsby | or will one just block the other from ever happening |
| 00:36 | emezeske | Raynes: Doooon't be loonely |
| 00:37 | Raynes | wkmanire: Your double printlns in game-over can be a single println. |
| 00:37 | Raynes | Not that it matters. Just noting. |
| 00:37 | Raynes | <3 |
| 00:37 | xeqi | emezeske: you can use {:join? false} to background jetty |
| 00:37 | xeqi | err |
| 00:37 | xeqi | eggsby: ^ |
| 00:37 | eggsby | oh, thank you xeqi |
| 00:38 | Raynes | emezeske: I'm in West Hollywood alone in a tiny room and all of my friends are asleep. |
| 00:38 | wkmanire | Raynes: I realized that a bit earlier. |
| 00:38 | emezeske | Raynes: I read that to the tune of the fresh prince of bel air theme song |
| 00:38 | wkmanire | Raynes: I'm all ears for pointers though. I kind of feel like I wrote an imperative thing dressed in FP. |
| 00:38 | Raynes | emezeske: Appropriately. I'm like a stones throw from Bel-Air. |
| 00:39 | emezeske | Raynes: "On the REPL, is where I spent most of my days" |
| 00:39 | Raynes | o/ |
| 00:39 | emezeske | "Chillin' out, relaxin, and maxin' all cool, just writin' some lambdas, inside where it's cool" |
| 00:40 | emezeske | "When a couple of bugs, that were up to no good, started makin' trouble in the neighborhood" |
| 00:40 | wkmanire | emezeske: Ever laugh at a crappy joke and then feel guilty about it? |
| 00:40 | Raynes | wkmanire: https://refheap.com/paste/2156#L-38 You don't need this do. |
| 00:40 | emezeske | wkmanire: Never. |
| 00:41 | wkmanire | :D |
| 00:41 | Raynes | Or this one https://refheap.com/paste/2156#L-26 |
| 00:41 | Raynes | wkmanire: The code runs inside an implicit do. |
| 00:41 | Raynes | So there can be multiple top-level expressions as if there were an explicit do there. |
| 00:41 | wkmanire | Raynes from the let from the defn? |
| 00:42 | Raynes | wkmanire: You're doing like (defn foo [] (do …)); you don't need to do that. |
| 00:43 | wkmanire | Raynes: Gotchya. I'll make a couple of edits. just a sec |
| 00:44 | Raynes | wkmanire: And the only reason you're getting tips is because you use my pastebin. If you pasted it on gist, you'd be dead to me right now. ;p |
| 00:44 | wkmanire | Raynes: For your information, I'm as proud of my number guesser as you are of your fancy pastebin. |
| 00:44 | Raynes | :p |
| 00:45 | wkmanire | Did you implement it with clojure? |
| 00:45 | emezeske | technomancy: I noticed in the lein2 preview changelog that "Stop using numeric exit codes for task failures." |
| 00:45 | emezeske | technomancy: I have some hooks that pay attention to tasks returning 0 or 1. Will my hooks need to change? |
| 00:45 | Raynes | wkmanire: Sure did: https://github.com/Raynes/refheap |
| 00:46 | wkmanire | Raynes: I'm a web-dev by trade. My ultimate goal with clojure is to build a site FP style. |
| 00:46 | Raynes | wkmanire: refheap can always use some web-dev expertise. Particularly: we all suck at design. |
| 00:46 | wkmanire | I'm also really fond of Javascript, so I'm interested to see what working with ClojureScript is like. |
| 00:46 | emezeske | wkmanire: It's fun :) |
| 00:46 | wkmanire | I also suck at design. web-dev, not web-designer. |
| 00:47 | Raynes | Fair enough. :p |
| 00:47 | laurus | join #debian |
| 00:47 | eggsby | why does this return a null pointer exception? (while true (Thread/sleep 5000 (println 'hi'))) |
| 00:47 | laurus | Sorry. |
| 00:47 | wkmanire | laurus: no. |
| 00:47 | Raynes | But yeah, javascript is an area where we lack too. I can learn it as I go, but I imagine real jsers could think of stuff to add. |
| 00:48 | wkmanire | Well, Since you're helping me I'd be happy to have a look if there is something in particular you'd like me to see. |
| 00:49 | Raynes | Nothing in particular. Just check out the issue tracker if you're ever looking for something to contribute to. I don't care if your code is perfect, so feel free to practice on stuff there and we can work through pull requests and stuff if you want. |
| 00:49 | wkmanire | Though to be honest, I don't have the foggiest idea of how to set up a dev environment for clojure for web stuff. |
| 00:49 | eggsby | wkmanire: lein |
| 00:50 | wkmanire | Raynes: Okeydokey. |
| 00:50 | Raynes | &(quot 10 2) |
| 00:50 | lazybot | ⇒ 5 |
| 00:50 | Raynes | wkmanire: ^ Integer division. Simplifies your mid-point function. |
| 00:51 | wkmanire | quot is short for quotiant? |
| 00:51 | Raynes | Yessir. |
| 00:51 | wkmanire | how the hell do you spell that word. |
| 00:51 | wkmanire | Kwohshunt. |
| 00:51 | Raynes | quotient |
| 00:51 | Raynes | a vs e |
| 00:54 | wkmanire | Raynes: Wow, your paste has real editing. |
| 00:54 | Raynes | Indeed. |
| 00:54 | wkmanire | Very much appreciated. |
| 00:54 | Raynes | :D |
| 00:54 | wkmanire | It irks me when I have to paste a new link to everyone every time i makea changed. |
| 00:54 | wkmanire | make a change* |
| 00:54 | wkmanire | There, I applied your advice and tested it in my terminal |
| 00:55 | wkmanire | seems to work with the undid do's. |
| 00:55 | Raynes | wkmanire: Looks good! |
| 00:55 | wkmanire | I forgot that do is part of let is part of defn. |
| 00:56 | xeqi | eggsby: your calling Thread.sleep(long, int) |
| 00:56 | xeqi | prolly need to move a paren |
| 00:57 | eggsby | ah |
| 00:57 | eggsby | should I be using the 'future' macro for this? |
| 00:58 | wkmanire | Raynes: Gah, fixed height is a PITA. Issue #77. You guys are targeting only modern browsers right? |
| 00:58 | wkmanire | Considering that it is a developer a tool. |
| 00:59 | Raynes | wkmanire: Yeah, there are already a few things that preclude <IE8 support. |
| 00:59 | Raynes | I don't care *at all* about IE though, even newer versions. |
| 00:59 | Raynes | The answer to any IE problem is don't use IE> |
| 00:59 | xeqi | for this case (do (Thread/sleep 5000) (println "hi")) should work |
| 01:01 | Raynes | wkmanire: #77 is one solution to the problem. The problem with it is that when you paste something long, it throws you to the bottom of the page. |
| 01:01 | xeqi | future is for when you want to do something in the background |
| 01:01 | Raynes | Which makes sense and all, but the paste button is at the top of the page. |
| 01:01 | xeqi | not for rate limiting like you're doing here |
| 01:01 | Raynes | I'd personally just rather make it grow. I think autodidakto was looking at using media queries. |
| 01:02 | eggsby | hmm, xeqi, how would I achieve something like this? https://refheap.com/paste/2171 |
| 01:02 | eggsby | In that example, run-jetty never seems to happen (i.e. requests get dropped) |
| 01:03 | eggsby | oops should have been defn |
| 01:03 | eggsby | oh nvm |
| 01:03 | wkmanire | Raynes: I'll go ahead and clone the repo. |
| 01:03 | eggsby | yaaaay it works |
| 01:04 | eggsby | thank you very much xeqi |
| 01:04 | xeqi | np |
| 01:06 | wkmanire | Raynes: I'm really seeing minimal JS here. |
| 01:12 | wkmanire | Raynes: I see you are using codemirror as your code editor. So fixing the full height + middle click paste issue means reading through that project's code. |
| 01:20 | wkmanire | goodnight folks. |
| 01:21 | spoon16 | if I want to use the clojurescript repl capability to connect a brower instance back to my listening repl… do I have to have the repl connect command execute from an iframe served from localhost? |
| 01:23 | muhoo | technomancy: thanks. i'd be happy to help with it, if i can, but it seems it may be beyond me. |
| 01:23 | muhoo | but i'm motivated since i work on low-memory, anemic-cpu netbooks, so trampoline is good |
| 01:25 | afoolsuchasi | there is a jar installed on my system at /opt/sphinx4/lib/sphinx.jar. I cannot seem to get this into my classpath for a slime repl started with clojure-jack-in. anyone know what i should be looking for for managing generic classpaths? |
| 01:35 | muhoo | afoolsuchasi: lein-localrepo |
| 01:36 | muhoo | specifically https://github.com/kumarshantanu/lein-localrepo |
| 01:38 | afoolsuchasi | thx. checking it out |
| 01:46 | emezeske | spoon16: I don't think you want to use an iframe |
| 01:46 | emezeske | spoon16: Or are you trying to do something like have the REPL run somewhere other than the web server itself? |
| 01:47 | ibdknox | cross host won't work there |
| 01:47 | emezeske | ibdknox: Yeah |
| 01:47 | emezeske | ibdknox: Wouldn't an iframe run in a different javascript context? |
| 01:47 | ibdknox | yep |
| 01:48 | ibdknox | damn browsers and their security features ;) |
| 01:48 | emezeske | ^_^ |
| 01:49 | ivan | you can send messages across domains |
| 01:49 | emezeske | reverse SSH tunnel, anyone? |
| 01:49 | ibdknox | ivan: yeah, but the JS would be locked into the iframe |
| 01:49 | ibdknox | so it wouldn't be meaningful |
| 01:49 | ibdknox | and if the iframe is in a different domain the host frame can't grab its content |
| 01:50 | ibdknox | the real problems isn't the frame it's getting the stuff in and out of it :( |
| 01:51 | ibdknox | emezeske: we should just implement the repl over websockets |
| 01:51 | ibdknox | problem solved. |
| 01:51 | ibdknox | that's how brepl worked |
| 01:52 | ibdknox | granted it used my socket.io implementation which is like shooting a fly with a nuclear bomb |
| 01:53 | emezeske | ibdknox: by which you mean "highly effective?" |
| 01:53 | emezeske | :) |
| 01:53 | ibdknox | haha |
| 01:57 | emezeske | Does anyone have lein-midje working with Leiningen 2? |
| 01:59 | afoolsuchasi | sry, still trying to come to terms with clojure/lein build system. trying to install plugin localrepo, breaking with "cant find cemerick/pomegranate/aether.clj on classpath" i see aether in lein search but it doesnt seem to want to install, plugin, or dependency in my project. what do i need to do to satisfy that? |
| 02:00 | afoolsuchasi | or rather, installed localrepo, trying to run and it breaks |
| 02:00 | afoolsuchasi | aether is :required in the main ns of the localrepo project |
| 02:05 | xeqi | afoolsuchasi: what does `lein version` output? |
| 02:06 | afoolsuchasi | Leiningen 1.7.0 on Java 1.7.0_147-icedtea OpenJDK 64-Bit Server VM |
| 02:06 | xeqi | what version of localrepo are you using? |
| 02:09 | afoolsuchasi | 1.13.1 |
| 02:09 | afoolsuchasi | sorry |
| 02:09 | afoolsuchasi | that was the aether |
| 02:09 | afoolsuchasi | was using 0.4.0 |
| 02:10 | emezeske | drewr: Give lein-cljsbuild 0.1.8 a shot, to see if it fixes your lein2 problem |
| 02:10 | xeqi | lein 1.7 needs localrepo 0.3 |
| 02:10 | afoolsuchasi | oh fiddlesticks. i was thinking i had already gotten 2 |
| 02:10 | afoolsuchasi | that didnt even click |
| 02:10 | afoolsuchasi | thanks |
| 02:11 | xeqi | might need to rm 0.4 from ~/.lein/plugins depending on how you were using it |
| 02:15 | afoolsuchasi | well localrepo now works. on with the quest. thanks. |
| 02:16 | afoolsuchasi | i sense it is time to retire before i further shame my ancestors here. peace. |
| 02:35 | ibdknox | seriously.. node still doesn't have hot code reloading? |
| 02:35 | ibdknox | I'm way to used to Clojure lol |
| 02:35 | ibdknox | too* |
| 02:51 | seancorfield | amalloy_: yes, i figureed another thread was needed after i posed that Q (and i'd already suggested the queue for buffering) - glad i'm not insane :) |
| 02:52 | seancorfield | ibdknox: we finally decided to put swank servers in all our long-running processes so we could do hot code reloading :) |
| 02:52 | ibdknox | :) |
| 03:13 | spoon16 | emezeske: I'm just messing around, but I'm trying to serve a site from a remote server to my browser and then in a separate window on the local machine connect a repl to the browser window. So yes, run the repl somewhere besides the server serving the HTTP requests. |
| 03:16 | emezeske | spoon16: A separate browser window? |
| 03:18 | mrnex2010 | spoon16: are you using compojure? |
| 03:19 | mrnex2010 | (im doing some compojure and i just found how to do that there |
| 03:24 | spoon16 | a console repl |
| 03:24 | spoon16 | I want the js on the website to execute and connect to "localhost:9000/repl" |
| 03:25 | spoon16 | and then for my local repl to be able to pipe clojure -> javascript and execute it in the browser |
| 03:25 | mrnex2010 | cool, what are you doing it for? |
| 03:25 | spoon16 | for fun right now |
| 03:25 | spoon16 | no real reason |
| 03:25 | spoon16 | have to sleep now though |
| 03:25 | spoon16 | will mess around more tomorrow |
| 03:26 | mrnex2010 | cool bye |
| 03:29 | emezeske | spoon16: So you know that with an iframe or whatever, the REPL is not going to be able to affect your site, right? |
| 03:29 | emezeske | spoon16: It will only affect the context of that iframe |
| 03:30 | emezeske | spoon16: The browser REPL simply has to connect to the server the page was loaded from |
| 03:30 | emezeske | spoon16: If you really want to run the REPL on your local machine, I suggest setting up your webserver to proxy /repl |
| 03:31 | emezeske | Doh, spoon16 is gone. |
| 03:44 | kral | morning |
| 05:28 | xumingmingv | is there a btrace kind of thing for clojure? http://kenai.com/projects/btrace |
| 05:30 | clgv | xumingmingv: there is org.clojure/tools.trace - you can check the feature set on github |
| 05:32 | TheBusby | ,(map clojure.string/trim [" a " "b" nil "d "]) |
| 05:32 | clojurebot | #<ExecutionException java.util.concurrent.ExecutionException: java.lang.NullPointerException> |
| 05:33 | clgv | ,(map (fnil clojure.string/trim "") [" a " "b" nil "d "]) |
| 05:33 | clojurebot | ("a" "b" "" "d") |
| 05:33 | xumingmingv | clgv: thanks! |
| 05:33 | TheBusby | clgv: thanks! |
| 06:26 | tomoj | ratios have no place in production, because doing a harmonic series with ratios is slow. oi |
| 07:02 | michaelr525 | hi |
| 07:02 | michaelr525 | tried building the latest enlive from github |
| 07:02 | michaelr525 | leiningen can't find clojure-1.4.0 |
| 07:03 | michaelr525 | so where can I find it? |
| 07:04 | clgv | michaelr525: 1.4.0 is not released yet. so you probably haveo use something like 1.4.0-betaX with X being the latest number |
| 07:05 | michaelr525 | hey clgv |
| 07:05 | michaelr525 | i can't the clojure jar on http://build.clojure.org |
| 07:05 | clgv | michaelr525: humm well, on search.maven.org there is a clojure-1.4.0 |
| 07:05 | michaelr525 | ah.. let's |
| 07:05 | michaelr525 | see |
| 07:06 | vijaykiran | I think 1.4 is in maven somewhere, my lein pulled it yesterday |
| 07:07 | clgv | strange that there is no announcement on clojure.org or the ML |
| 07:07 | babilen | 1.4.0 has been released? |
| 07:08 | babilen | Yeah, 1.4.0 is on maven.org :-/ -- I am surprised that I missed that. |
| 07:09 | clgv | silent release? :P |
| 07:09 | babilen | Nothing on http://www.clojure.org as well |
| 07:10 | michaelr525 | thanks clgv.. have to run now otherwise I would have asked why leiningen didn't find it. It said it was searching repo1.maven.org |
| 07:11 | clgv | michaelr525: you got [org.clojure/clojure 1.4.0] in the project.clj? |
| 07:12 | michaelr525 | nope, i've got this [org.clojure/clojure "[1.2.0,)"] - it's from https://github.com/cgrand/enlive/blob/master/project.clj |
| 07:13 | michaelr525 | using the stable leiningen version |
| 07:13 | babilen | michaelr525: I've just downloaded it from repo1.maven.org (1.4.0 that is) -- https://refheap.com/paste/2176 |
| 07:13 | clgv | ah ok |
| 07:13 | babilen | (lein2) |
| 07:14 | michaelr525 | gotta run :) |
| 07:14 | michaelr525 | bye |
| 07:14 | clgv | lein 1.7.1 works as well |
| 07:38 | clgv | clojure 1.4.0: http://corfield.org/blog/post.cfm/clojure-1-4-0-clj-time-congomongo |
| 08:28 | tomoj | what's an elegant way to do (f [:foo :bar :baz]) == '([:foo (:bar :baz)] [:bar (:foo :baz)] [:baz (:foo :bar)]) |
| 08:29 | tomoj | right now I am iterating over indices and calling split-at |
| 08:36 | clgv | tomoj: ##(letfn [(f [coll] (for [a coll] [a (remove #{a} coll)]))] (f [:foo :bar :baz])) |
| 08:36 | lazybot | ⇒ ([:foo (:bar :baz)] [:bar (:foo :baz)] [:baz (:foo :bar)]) |
| 08:36 | tomoj | I should have picked a better example |
| 08:37 | tomoj | (f [:foo :bar :baz :foo]) == '([:foo (:bar :baz :foo)] [:bar (:foo :baz :foo)] [:baz (:foo :bar :foo)] [:foo (:foo :bar :baz)]) |
| 08:37 | clgv | ##(letfn [(f [coll] (for [a coll] [a (remove #{a} coll)]))] (f [:foo :bar :baz :foo])) |
| 08:37 | lazybot | ⇒ ([:foo (:bar :baz)] [:bar (:foo :baz :foo)] [:baz (:foo :bar :foo)] [:foo (:bar :baz)]) |
| 08:37 | angerman | ,(char 0x4) |
| 08:37 | clojurebot | \ |
| 08:38 | clgv | oh well. than you probably need the index iteration |
| 08:38 | clgv | or you can try a lazy-seq approach |
| 08:40 | clgv | tomoj: lazy-seq where the function keeps track of prefix-coll and rest-coll and thus builds what you want |
| 08:40 | angerman | ,(clojure.string/replace (list \a \b \c (char 0x4) \d) (char 0x4) "") |
| 08:40 | clojurebot | #<ClassCastException java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Character> |
| 08:41 | angerman | ,(clojure.string/replace (list \a \b \c (char 0x4) \d) (char 0x4) \space) |
| 08:41 | clojurebot | "(\\a \\b \\c \\ \\d)" |
| 08:41 | llasram | tomoj: Is the input always going to be a vector? |
| 08:44 | tomoj | yes |
| 08:44 | tomoj | (fn ctx [less [x & more]] (lazy-seq (when x (cons [x (concat less more)] (ctx (conj less x) more))))) |
| 08:44 | tomoj | (e.g. (ctx [] [:foo :bar :baz])) |
| 08:46 | tomoj | also the input never has more than 5 elements in it... |
| 08:47 | tomoj | clgv: good idea |
| 08:58 | Kototama | hi, where can i find the slime version compatible with lein swank? |
| 08:59 | Kototama | i would like to have the latest slime contrib files compatible with clojure |
| 08:59 | llasram | Kototama: swank Clojure includes a/the compatible version of SLIME |
| 09:00 | llasram | If you're just using SLIME with Clojure, you can just use clojue-mode's clojure-jack-in and be done |
| 09:00 | Kototama | ok but how can i get slime-fuzzy slime-c-p-c.el etc? |
| 09:01 | llasram | Hmm. This question I cannot answer |
| 09:01 | llasram | You can look at the version of SLIME bundled in swank-clojure and find the associated compatible versions? |
| 09:11 | Kototama | ok seems the frozen version is the one from technomancy |
| 09:12 | babilen | Kototama: |
| 09:13 | babilen | Kototama: All you have to do is to install clojure-mode and the swank-clojure leiningen plugin. See https://github.com/technomancy/swank-clojure for details |
| 09:14 | Kototama | no actually i need a bit more, i need to have the slime contribs working to have anything-slime working too |
| 09:14 | Kototama | it looks like the slime bundled xith swank clojure provides slime-repl but no more |
| 09:14 | babilen | Kototama: Shouldn't be a problem to install that with package.el |
| 09:15 | Kototama | most of the contribs are not on it :s |
| 09:16 | babilen | Kototama: What about marmalade? How do *you* install it? (We venture into #emacs territory though) |
| 09:17 | Kototama | it's the same for marmalade most of the slime contribs are not on it |
| 09:17 | Kototama | i used to just use swank-clojure from package.el |
| 09:18 | Kototama | but this time i downloaded the slime and the contribs from the technomancy github |
| 09:18 | Kototama | just to have slime fuzzy slime-c-p-c etc |
| 09:18 | angerman | ,(cons nil '(10 12)) |
| 09:18 | clojurebot | (nil 10 12) |
| 09:19 | Kototama | it's really nice, you get a anything-slime-repl-history with anything-slime |
| 09:19 | Kototama | it acts like a filtered history on all your previous inputs |
| 09:19 | Kototama | way better than the default |
| 09:22 | gfredericks | I'm trying to debug my "That's not a task" message I get from M-x clojure-jack-in |
| 09:23 | gfredericks | my .lein/profiles.clj is '{:user {:plugins [[lein-swank "1.4.4"]]}}' |
| 09:23 | gfredericks | and I just ran `lein upgrade` |
| 09:23 | gfredericks | I'm not sure what else is necessary |
| 09:25 | gfredericks | well I guess it's `lein repl` for now |
| 09:33 | Kototama | what happens if you call 'lein swank' from the shell? |
| 09:33 | llasram | gfredericks: `lein version` output? |
| 09:34 | gfredericks | llasram: Leiningen 1.7.1 on Java 1.6.0_26 Java HotSpot(TM) Client VM |
| 09:35 | llasram | gfredericks: Ah, there you go. Profiles aren't backported to lein 1.x. Need to either use the lein 2.0 preview release or `lein plugin install` the plugin |
| 09:36 | gfredericks | the swank-clojure docs say that only applies to pre-1.6.2 :( |
| 09:37 | llasram | gfredericks: I believe at that point 1.6.2 was intended to be the last 1.x release, but there were some bugs which led to 1.7 |
| 09:37 | llasram | s,at that point,when those docs were last updated, |
| 09:38 | babilen | gfredericks: The README is outdated. It actually appliad to every 1.x release (of which 1.7.1 is the latest) |
| 09:38 | babilen | *applies |
| 09:40 | gfredericks | llasram: that does fix it; thanks |
| 09:55 | flashingpumpkin | guys, what would you recommend to work with websockets? |
| 10:01 | jedahu | what's the correct way to write this macro? http://dev.clojure.org/jira/browse/CLJ-869 |
| 10:02 | fliebel | jedahu: let a normal gensym, and insert that. |
| 10:03 | fliebel | (let [a (gensym)] `(foo ~a)) or something like that |
| 10:04 | fliebel | &(let [a (gensym)] `(foo ~a)) |
| 10:04 | lazybot | ⇒ (clojure.core/foo G__7487) |
| 10:04 | jedahu | fliebel: thanks, sorted :-) |
| 10:26 | tomoj | how do you typehint a primitive array in 1.3? |
| 10:27 | dnolen | tomoj: ^doubles ^longs etc |
| 10:28 | tomoj | hmm |
| 10:28 | tomoj | with ^bytes I get "java.lang.IllegalArgumentException: Unable to resolve classname: clojure.core$bytes@1fc5681" |
| 10:29 | dnolen | tomoj: I not sure if there is support for ^bytes |
| 10:30 | dnolen | ,(class (make-array Type/BYTE 0)) |
| 10:30 | clojurebot | #<CompilerException java.lang.RuntimeException: No such namespace: Type, compiling:(NO_SOURCE_PATH:0)> |
| 10:30 | dnolen | ,(class (make-array Byte/TYPE 0)) |
| 10:30 | clojurebot | [B |
| 10:30 | dnolen | ^"[B" |
| 10:30 | dnolen | tomoj: ^ should work as well. |
| 10:31 | tomoj | yeah, that's what I've got. I feel like #^bytes used to work? |
| 10:32 | gfredericks | has anybody used the aleph http client to send post requests with data? |
| 10:33 | dnolen | tomoj: I don't remember that, but even referencing that syntax - #^bytes - ancient history. |
| 10:41 | dgrnbrg | dnolen: what is your talk going to be on tomorrow? I follow all your postings to the mailing list carefully, and i'm trying to decide between your talk and another one-time-only event |
| 10:42 | tomoj | gfredericks: some, yeah |
| 10:42 | RickInGA | dgrnbrg: what list? |
| 10:43 | dgrnbrg | the main clojure list |
| 10:43 | gfredericks | tomoj: I don't see any documentation on it -- does it only accept channels of byte-arrays as the body? |
| 10:43 | gfredericks | tomoj: certainly strings don't seem to work |
| 10:43 | tomoj | strings work here |
| 10:44 | gfredericks | hrrrrm |
| 10:44 | tomoj | also e.g. vectors/maps with :content-type "application/json" and :auto-transform true |
| 10:44 | gfredericks | I'm probably going to use channels, but I'm having odd hard-to-debug trouble and so I'm just trying to get a feel for what's expected |
| 10:45 | gfredericks | tomoj: what version of aleph/lamina? |
| 10:45 | jtoy | http://www.niclas-meier.de/2012/04/first-hundred-days-of-clojure/ |
| 10:45 | tomoj | aleph 0.2.1-beta2 |
| 10:46 | gfredericks | me too; I get the hugest stack trace if I pass in a string :/ |
| 10:46 | cmajor7 | when is "clojure east" (in New York)? |
| 10:46 | gfredericks | I'm just running against a compojure server I setup for testing this |
| 10:46 | tomoj | the stack trace is from the client though? |
| 10:47 | gfredericks | tomoj: that is difficult to discern since I have them running in the same process. Time to split them up I guess! hadn't thought of that |
| 10:48 | tomoj | well, is the stack trace about aleph http client stuff or compojure stuff? |
| 10:48 | gfredericks | oh definitely aleph |
| 10:48 | gfredericks | lotta lamina and netty and such |
| 10:49 | gfredericks | I think it's a timeout exception; I set a 1200 ms timeout on the request |
| 10:50 | tomoj | so your server just isn't responding? |
| 10:50 | jtoy | how do I return the first line from a slurp? (first (slurp "file")) seems to return the first character |
| 10:50 | gfredericks | tomoj: well it certainly responds if I use a channel instead |
| 10:50 | gfredericks | I guess I could log from the server to check |
| 10:50 | tomoj | jtoy: (with-open [r (clojure.java.io/reader "file")] (first (line-seq file))) |
| 10:51 | tomoj | if you use a channel the request is chunked |
| 10:51 | tomoj | dunno why that should make the server not respond |
| 10:51 | tomoj | I'd just test the client against `nc -l 8080` |
| 10:51 | jtoy | i see, why can't I use slurp for that though? |
| 10:52 | rhc | you could always slurp - string/split "\n" |
| 10:52 | tomoj | you can, but it doesn't make much sense |
| 10:52 | tomoj | ...if you only want the first line |
| 10:53 | tomoj | interestingly, the aleph client seems to spit out chunk lengths in hexadecimal when :auto-transform is true |
| 10:53 | tomoj | oh, no it always does that :) |
| 10:53 | gfredericks | tomoj: I did not know about `nc`; this sounds useful |
| 10:55 | tomoj | it will let you just see the raw http request aleph is producing |
| 10:55 | gfredericks | right |
| 10:57 | gfredericks | tomoj: when running with channel it outputs predictably; when running with string it prints nothing |
| 10:57 | gfredericks | but the result channel responds to me shutting down nc (by enqueueing nil) |
| 10:57 | gfredericks | so it's as if it opens the tcp connection and then waits |
| 10:57 | gfredericks | I'm doing this from the repl, where oddly I see no stacktrace at all |
| 10:58 | TimMc | Man, would it have killed Rich to make PersistentHashMap generic? |
| 10:58 | mdeboard | Yes |
| 10:58 | TimMc | I really want to use it from a Java project... |
| 10:58 | mdeboard | There is a bomb in his brain |
| 10:58 | mdeboard | Set to go off if he makes it generic |
| 10:58 | tomoj | gfredericks: strange.. works here |
| 10:58 | tomoj | ((http/http-client {:url url :method :post}) {:body "foo"}) ? |
| 10:59 | gfredericks | uh |
| 10:59 | gfredericks | I'm using http-request |
| 10:59 | tomoj | yeah, worked for me there too |
| 10:59 | gfredericks | I'll try yours |
| 11:00 | gfredericks | tomoj: yeah same behavior there |
| 11:00 | gfredericks | alright this is uberweird; I'll startup a fresh project on a fresh VM and see if it does the same thing |
| 11:01 | tomoj | 0.2.1-beta2, right? I'm on clojure 1.3 as well, don't think it should matter |
| 11:01 | gfredericks | tomoj: same for both |
| 11:01 | gfredericks | tomoj: jvm? |
| 11:02 | tomoj | sun 1.6.0_30 |
| 11:02 | gfredericks | Java(TM) SE Runtime Environment (build 1.6.0_26-b03) |
| 11:02 | gfredericks | Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing) |
| 11:02 | tomoj | (http/http-request {:url "http://localhost:8083/" :method :post :body "foo"}) doesn't print anything? |
| 11:03 | gfredericks | tomoj: it returns the channel that sits there waiting |
| 11:03 | tomoj | be sure to try a new port |
| 11:03 | tomoj | it returns a result channel, right? |
| 11:03 | gfredericks | yeah |
| 11:03 | gfredericks | one sec I'll try new port |
| 11:03 | tomoj | that's to be expected, but nothing in nc? |
| 11:03 | gfredericks | correct |
| 11:03 | gfredericks | the result channel waits until I close nc, then it gets nil |
| 11:04 | tomoj | so it must be connecting, but it's not writing anything at all.. |
| 11:04 | gfredericks | right |
| 11:05 | tomoj | baffling |
| 11:05 | gfredericks | tomoj: well at least you've helped me isolate the issue much more than I had on my own |
| 11:11 | tomoj | extracted test https://gist.github.com/a552a8f82180e6d27f51 |
| 11:14 | gfredericks | tomoj: sweet I was just doing something like that |
| 11:15 | gfredericks | tomoj: I like the version 0.1.0 part :) does lein default to that for you? |
| 11:17 | tomoj | it defaulted to 0.1.0-SNAPSHOT |
| 11:17 | tomoj | I think |
| 11:17 | tomoj | or maybe I just still habitually change 1.0.0 to 0.1.0 |
| 11:18 | gfredericks | tomoj: ooh, this seems to work fine; the plot is thickening |
| 11:18 | gfredericks | sweet, I'll do a binary search between these two setups to figure out wtf. |
| 11:18 | gfredericks | tomoj: much thx |
| 11:19 | tomoj | random guess: do you have aleph jars in both lib and lib/dev? |
| 11:19 | tomoj | that would be odd |
| 11:19 | gfredericks | nope |
| 11:20 | gfredericks | lib has aleph-0.2.1-beta2.jar at top level |
| 11:20 | tomoj | no clue what could cause that then |
| 11:21 | gfredericks | tomoj: I'll let you know what I figure out |
| 11:25 | michaelbarton | I'm getting java.lang.OutOfMemoryError errors for this code: https://gist.github.com/2406699 |
| 11:25 | michaelbarton | I thought it was lazy but perhaps not? |
| 11:26 | gfredericks | michaelbarton: well (apply str ...) definitely isn't lazy |
| 11:26 | gfredericks | woah wait you're just printing a function |
| 11:26 | gfredericks | never mind |
| 11:27 | dnolen | michaelbarton: you're story a lazy sequence in a top level. |
| 11:27 | michaelbarton | That bit should only be a three entry seq |
| 11:27 | dnolen | storing |
| 11:27 | dnolen | michaelbarton: line 20 |
| 11:27 | dnolen | jonasen: how about that for something for kibit to catch? :) |
| 11:28 | gfredericks | michaelbarton: so due to what dnolen just said, there's a global reference to the head of the seq |
| 11:28 | gfredericks | so as the seq is realized the whole thing stays in memory |
| 11:28 | michaelbarton | I see |
| 11:28 | michaelbarton | What's the correct way to do this? |
| 11:28 | gfredericks | you could change normalized-edges to a function and call it inside your doseq |
| 11:28 | dnolen | michaelbarton: what gfredericks said. |
| 11:29 | michaelbarton | OK |
| 11:29 | michaelbarton | I there a way to reference a sequence with holding the head? A function I suppose? |
| 11:30 | michaelbarton | Sorry, I meant without. |
| 11:30 | gfredericks | (doseq [i (normalized-edges)] ...) will do it |
| 11:30 | dnolen | michaelbarton: don't store it in a top level. |
| 11:31 | michaelbarton | How does does putting normalised edges inside parenthesis change this? |
| 11:31 | gfredericks | michaelbarton: you have to change normalized-edges to a function as well to match |
| 11:31 | michaelbarton | OK |
| 11:32 | fliebel | Would a memory-less lazy-seq be any good? You know, just calculate the next item every time it is requested. |
| 11:32 | michaelbarton | (defn normalised-edges [] ... ) |
| 11:32 | gfredericks | since the global var is now a function that returns the sequence, there's no global reference to it. You call the function and give the resulting seq to doseq, so you as the user have no references to it |
| 11:32 | michaelbarton | OK |
| 11:32 | gfredericks | fliebel: that sounds like clojure.org/streams |
| 11:32 | michaelbarton | That's very helpful. |
| 11:32 | gfredericks | which I coincidentally saw for the first time yesterday |
| 11:32 | michaelbarton | Thank you. |
| 11:32 | fliebel | gfredericks: I wouldn;t know. I'm going to look at them for sure. |
| 11:33 | gfredericks | fliebel: it's old history; I don't know why exactly though |
| 11:35 | gfredericks | fliebel: in any case what you're describing isn't really a lazy seq |
| 11:35 | gfredericks | it may as well be a function |
| 11:36 | gfredericks | otherwise it's pretending to be a data structure but somehow disappears from under you |
| 11:37 | fliebel | gfredericks: Hm, yea, what I have in mind would only work for generated lazy seqs, but not for 'consumed' ones(line-seq for example) |
| 11:38 | fliebel | What i mean is that you do not "realize" a seq, but calculate the crd/rest of a seq every time it is requested. |
| 11:38 | gfredericks | fliebel: so if the cdr is requested a second time you compute it again? |
| 11:39 | fliebel | yea, so you can hold on to the head all you want, without consuming memory, and iterate without any overhead. Only, the second time you need to iterate it is more expensive. |
| 11:40 | michaelbarton | That worked perfectly. |
| 11:40 | gfredericks | that is an interesting thought. |
| 11:40 | michaelbarton | An much faster too. |
| 11:40 | michaelbarton | Thank you gfredericks, dnolen |
| 11:40 | fliebel | It is just the cached reference to the next value, that keeps the seq from being gcd. |
| 11:40 | gfredericks | tomoj: I inserted your code into my project and it failed. I deleted some deps and otherwise made no changes and it passed. So now to figure out which dep is the tipping point. |
| 11:41 | devn | dnolen: have you seen the bill cunningham documentary? |
| 11:41 | dnolen | devn: no |
| 11:41 | dnolen | michaelbarton: np |
| 11:42 | devn | dnolen: total tangent, but he's a photographer at the NYT -- he does the style/fashion on the street photography. it was interesting, figured I'd mention it given you're around here. |
| 11:42 | dnolen | devn: yes, I know :) but I haven't seen it. |
| 11:43 | devn | haha fair enough, just watched it the other night. it was good. </tangent> |
| 11:45 | gfredericks | tomoj: it seems to be [clj-http "0.3.6"], which I don't need thankfully |
| 11:46 | dnolen | devn: yeah I've heard it's great! |
| 11:47 | tomoj | strange |
| 11:48 | gfredericks | tomoj: I expect examining the recursive dependency tree would reveal something, but I'm not motivated to bother if nothing else comes up |
| 11:48 | dabd | Does the clojurescript compiler support the full Clojure language at the moment? |
| 11:48 | tomoj | I was wondering earlier how to even see the recursive dependency tree (other than manually) |
| 11:48 | gfredericks | dabd: certainly not the parts that don't apply well/at-all to JS |
| 11:48 | gfredericks | dabd: there are significant differences |
| 11:48 | gfredericks | tomoj: mvn dependency:tree I think |
| 11:49 | gfredericks | (after `lein pom`) |
| 11:50 | dnolen | dabd: the bits that are missing are mostly concurrency related - which are mostly irrelevant for JS. |
| 11:50 | dabd | Is it possible to invoke Clojure from clojurescript? |
| 11:52 | gfredericks | dabd: at runtime all you have is the JS environment |
| 11:53 | dabd | If I need to do processor intensive computation then I would need a server hosting JVM to run Clojure |
| 11:54 | gfredericks | embedding a java applet might be an option too |
| 11:54 | dnolen | dabd: why would you want to invoke Clojure from CJLS? |
| 11:54 | gfredericks | so whichever is less of a hassle I guess |
| 11:54 | dnolen | CLJS |
| 11:55 | dabd | dnolen: If I need to use existing Clojure code as a "service" |
| 11:55 | dabd | because it is processor intensive |
| 11:56 | tomoj | I'd think you should invoke it just like you would invoke any other service from a JS environment |
| 11:56 | dabd | tomoj: In that case perhaps AJAX is better than applets right? |
| 11:57 | dabd | I meant Web Services instead of AJAX |
| 11:57 | angerman_ | how do you do DB switching on dev and production env? using environment variables? |
| 11:57 | dnolen | dabd: writing your client code in CLJS and your server in CLJ is an ideal use case yes if that's what you mean. |
| 11:57 | tomoj | you'd have to have a pretty strange use case to want to embed clojure in an applet instead of talking to it over ajax/whatever |
| 11:57 | dabd | dnolen: yes that is exactly what I want. I want to write UI for existing Clojure code. |
| 11:58 | dabd | ClojureScript One seems interesting |
| 11:59 | dabd | gfredericks: I was reading the CLJS docs and it shows the differences. thx |
| 11:59 | tomoj | will many calls to reify hog permgen? |
| 12:00 | gfredericks | tomoj: turns out aleph wants clj-http 0.1.3 |
| 12:00 | tomoj | ah, I see |
| 12:00 | dakrone | gfredericks: waa? why is aleph using clj-http at all in the first place, that seems strange |
| 12:00 | dnolen | dabd: yes, people have been doing this. |
| 12:01 | dakrone | I thought it had its own http client |
| 12:01 | gfredericks | I haven't noticed it in the stacktrace; who knows what it's using it for |
| 12:01 | gfredericks | there's a lot of helpers in clj-http I think |
| 12:01 | dakrone | what version of aleph? I'll look |
| 12:02 | dabd | I was reading this blog http://blog.raynes.me/. Did anyone also switch from Emacs to VIM. I'm a long time Emacs user but sometimes I find it too cumbersome and heavy. VIM seems neater but I'm not sure it is as good for Lisp languages. |
| 12:02 | gfredericks | dakrone: 0.2.1-beta2; it's not a big deal for me personally at the moment |
| 12:02 | dakrone | gfredericks: yea, I'm interested now though |
| 12:02 | gfredericks | I'm using clj-http in my tests, but I can look up how to use the older version |
| 12:03 | dakrone | 0.1.3 is ancient by now :-/ |
| 12:04 | rads | dabd: I used to use Emacs and switched to Vim |
| 12:04 | rads | I didn't really use clojure until I learned vim though |
| 12:04 | TimMc | tomoj: "Reify Hog Permgen" scans like a person's name :-D |
| 12:05 | gfredericks | dakrone: aleph totally breaks with newer clj-http though |
| 12:05 | dakrone | gfredericks: I am forking to fix |
| 12:05 | gfredericks | and I use the word "totally" very very loosely there |
| 12:06 | gfredericks | dakrone: here's what breaks when using 0.3.6: https://gist.github.com/a552a8f82180e6d27f51 |
| 12:06 | dakrone | okay, shouldn't be too bad to fix |
| 12:08 | rads | dabd: the repl support isn't great. I use a macro to send the selected contents to a tmux buffer rather than the vimclojure repl. I like vim better in general, though. I prefer the modal editing to the keyboard shortcuts |
| 12:09 | gfredericks | dakrone: if you're working on it right now, keep me posted, so I know whether to backport to 0.1.whatsit or upgrade aleph |
| 12:11 | dakrone | gfredericks: I will |
| 12:19 | dakrone | gfredericks: https://github.com/ztellman/aleph/pull/60 |
| 12:21 | gfredericks | dakrone: cool I'll try that out, thanks |
| 12:22 | dakrone | hopefully Zach merges it too :) |
| 12:22 | gfredericks | until then we have lein checkouts |
| 12:23 | gfredericks | and clojars |
| 12:23 | dabd | rads: I might give it a try |
| 12:23 | dabd | but it will be hard to leave more than 10 years of emacs behind :-) |
| 12:26 | dnolen | ~max |
| 12:26 | clojurebot | Most users ever in #clojure: 404 |
| 12:27 | dnolen | bah, we'll break 500 here soon |
| 12:27 | gfredericks | dnolen: you sure clojurebot didn't just deliver a not-found response? :) |
| 12:34 | pandeiro | dnolen: have you noticed multimethod dispatch errors in cljs don't tell you which multimethod they're referring to? |
| 12:35 | pandeiro | i'm going to try to track that down and leave a bug report but i am just mentioning it in case it's already been fixed (i'm using the latest jar) |
| 12:36 | dnolen | pandeiro: haven't noticed, patch welcome ;) |
| 12:39 | TimMc | dnolen: That's a hardcoded factoid. |
| 12:40 | TimMc | clojurebot: forget max |is|<reply>Most users ever in #clojure: 404 |
| 12:40 | clojurebot | I forgot that max is <reply>Most users ever in #clojure: 404 |
| 12:40 | TimMc | ~max |
| 12:40 | clojurebot | Excuse me? |
| 12:41 | TimMc | clojurebot: max is <reply>Neither bot has an accurate value for the max number of users in #clojure |
| 12:41 | clojurebot | Ok. |
| 12:45 | gfredericks | TimMc: you could've replaced it with a more interesting number :) |
| 12:45 | TimMc | 404 was the best it could be. |
| 12:46 | gfredericks | it could be good but also not believable |
| 12:48 | ibdknox | next time someone comes into the channel asking for a simple project to help the community we should have them add the max command to lazy bot |
| 12:57 | autodidakto | ,(#(apply str (reduce conj () %)) "pey") |
| 12:57 | clojurebot | "yep" |
| 13:07 | mebaran151 | so I'm having a little bit of trouble installing the lein noir plugin to start playing with noir; it complains about being unable to rebind a dynamic var |
| 13:08 | unlink_ | Every time I run "lein ring server" on leiningen-1.7.1, it deletes my lein javac-compiled classes. |
| 13:08 | unlink_ | Is that a feature? |
| 13:08 | mebaran151 | any work around? I'm on Windows running a lein 1.7 |
| 13:09 | pandeiro | mebaran151: sounds like an old version of noir? |
| 13:09 | mebaran151 | is the plugin no longer recommended? |
| 13:09 | mebaran151 | I haven't gotten to the whole using noir part yet :) |
| 13:11 | mebaran151 | though it looks so nice and clean and pretty; I'm in tooling purgatory atm |
| 13:11 | rodnaph | when using update-in to change a map, is there any way i get get hold of the change that was made to the map? (i need to put it in a datastore) |
| 13:11 | pandeiro | mebaran151: tbh i'm not sure its status, check the github page... i think cljs-template uses a very recent version of noir, though maybe you don't want the clojurescript parts |
| 13:12 | raek | mebaran151: are you using lein-noir 1.2.0? are you sure you are not using lein2? |
| 13:13 | mebaran151 | I do not believe I'm using lein2 |
| 13:15 | pandeiro | mebaran151: if i were you i'd just go the lein-newnew + cljs-template route |
| 13:16 | raek | mebaran151: what step goes wrong? "lein plugin install ..."? "lein noir new ..."? a later step? |
| 13:16 | raek | "unable to rebind a dynamic var" often indicates that code written for clojure 1.2 is being run in clojure 1.3 or later |
| 13:17 | raek | but all lein 1.x plugins execute in the lein process, which uses clojure 1.2 |
| 13:17 | raek | (lein2 uses clojure 1.3) |
| 13:18 | gfredericks | does paredit have a command for cleaning up whitespace? |
| 13:19 | dakrone | gfredericks: emacs does, C-c n |
| 13:19 | mebaran151 | raek: it's the lein plugin install step |
| 13:19 | mebaran151 | it sounds like I should just reinstall lein, as somehow some something got crossed |
| 13:20 | raek | mebaran151: what does "lein version" output? |
| 13:20 | gfredericks | dakrone: crap I rebound that |
| 13:21 | mebaran151 | Leinigen Version 1.7.1-SNAPSHOT |
| 13:27 | autodidakto | gfredericks: C-h a whitespace cleanup |
| 13:28 | mebaran151 | raek: on Java 7, though I doubt that would matter |
| 13:28 | gfredericks | autodidakto: I rebound C-h too :-D |
| 13:29 | autodidakto | gfredericks: to what? |
| 13:29 | gfredericks | backspace |
| 13:29 | gfredericks | but F1 works |
| 13:30 | gfredericks | in any case, whitespace-cleanup doesn't seem to de anything for my " (three four)\n ))" chunk of code |
| 13:30 | gfredericks | (I want the last two parens to come up a line) |
| 13:30 | autodidakto | reindent? |
| 13:30 | gfredericks | how? |
| 13:30 | clojurebot | with style and grace |
| 13:31 | dakrone | gfredericks: whitespace cleanup won't touch that, you'll have to move it up yourself |
| 13:31 | gfredericks | oh man I thought paredit was cool about these things |
| 13:31 | dakrone | there might be a way to make it do that? no idea |
| 13:31 | gfredericks | okay, thanks |
| 13:32 | autodidakto | oh... come up a line... sorry that's not indent |
| 13:32 | gfredericks | okay how do I make org-mode work on vim? |
| 13:32 | autodidakto | gfredericks: you do, "electric returns" ? C-style )s, then reformat? |
| 13:32 | gfredericks | autodidakto: man I don't really know what any of those things are |
| 13:33 | autodidakto | i think that's what it is called... there's a plugin for that... er... *grabs gfredericks and walks to #emacs* |
| 13:33 | bradwright | gfredericks: mark all of it and do M-x indent-region |
| 13:33 | bradwright | I think |
| 13:34 | gfredericks | bradwright: doesn't that keep everything on its own line? |
| 13:34 | bradwright | Yeah actually it does, sorry |
| 13:46 | gfredericks | can clj-http be configured to not send retries? |
| 13:46 | dakrone | gfredericks: you mean for redirects? |
| 13:46 | gfredericks | dakrone: no I'm sending a post with a multipart and it seems it's being sent 3 times before giving up (server failed to respond) |
| 13:47 | gfredericks | org.apache.http is logging its retries |
| 13:47 | dakrone | gfredericks: I'm not doing any retrying on my end, so apache must be trying the multipart stuff, open an issue with info and I can look into it |
| 13:47 | gfredericks | dakrone: okay, thanks |
| 13:48 | dakrone | gfredericks: good to know that it does that, I'm sure there's a way I can make that configurable |
| 13:49 | mebaran151 | raek: reinstalling lein seemed to do the trick; I'm not sure how it got all vesion confused |
| 13:50 | gfredericks | dakrone: done |
| 13:50 | dakrone | gfredericks: thanks! |
| 14:32 | dnolen | somebody should really do this for CLJS, http://synonym.dartlang.org/ |
| 14:36 | aaelony | I'm confused as which clojars dependenc(y/ies) I need to start playing with cljs. Say I'm on clojars, the first hit seeking "clojurescript" is lein-cljsbuild 0.1.8, is that what I need? |
| 14:37 | dnolen | aaelony: lein-cljsbuild is all you need yes. |
| 14:37 | aaelony | dnolen: thx |
| 14:38 | ibdknox | I forgot how much I disliked node's ecosystem :( |
| 14:39 | aaelony | dnolen: guessing that lein-cljsbuild is lein and not lein2 ? |
| 14:39 | dnolen | aaelony: works w/ both |
| 14:39 | dnolen | ibdknox: what issues are you running into? |
| 14:39 | aaelony | dnolen: tres cool... ! |
| 14:40 | devn | dnolen: it reminds me a bit of coffeescript's website |
| 14:40 | ibdknox | dnolen: I lost an hour and a half to broken versions of big libs (socket.io and express latest don't play well together) |
| 14:41 | samrat | I'm having trouble installing lein. I did lein self-install but after that I get this error http://dpaste.com/733207/ when trying to run lein |
| 14:42 | samrat | how can i fix this? |
| 14:42 | hiredman | ibdknox: but JS is the future!!! the same language on the front and backend! and callbacks! |
| 14:42 | dnolen | devn: yes I think that was the idea |
| 14:42 | ibdknox | hiredman: lol |
| 14:42 | dnolen | ibdknox: heh - yeah |
| 14:42 | ibdknox | dnolen: I think I found a bug in CLJS |
| 14:43 | dnolen | ibdknox: wassup? |
| 14:43 | ibdknox | dnolen: any method with the name static gets a $ appended to it. Including ones that aren't cljs :) |
| 14:43 | xeqi | samrat: can you remove that file, and your ~/.lein and re self-install? |
| 14:43 | ibdknox | so expres.static is getting turned into express.static$ |
| 14:44 | dnolen | ibdknox: are you writing js/express.static ? |
| 14:45 | ibdknox | dnolen: https://refheap.com/paste/2185 |
| 14:45 | ibdknox | dnolen: perhaps I'm doing it wrong? |
| 14:46 | septomin_ | don't all js keywords get munged? |
| 14:47 | samrat | xeqi: okay, i'm doing that now |
| 14:48 | dnolen | ibdknox: yes file a bug, reserved words that appears as property names should probably not get munged like that. |
| 14:48 | ibdknox | dnolen: will do |
| 14:49 | dnolen | ibdknox: we'll need to double check to make sure this isn't going to cause problems w/ IE, I don't think it will. |
| 14:53 | jtoy | how do I turn (def car "test") into #"test" ? |
| 14:53 | wkmanire | The part that worries me is the reset.css I stuck at the top. |
| 14:53 | wkmanire | That makes it easier to write cross-browser compatible CSS |
| 14:53 | raek | jtoy: re-pattern |
| 14:53 | wkmanire | oops |
| 14:54 | wkmanire | shit, wrong chat window. |
| 14:54 | wkmanire | Sorry folks. |
| 14:54 | jtoy | ah, nice |
| 14:59 | amalloy | ibdknox: so javascript can actually have objects with a property named "static"? not much of a reserved word then :P |
| 15:00 | gfredericks | amalloy: you can at least only reference the property with string literals |
| 15:00 | gfredericks | or strings rather |
| 15:01 | gfredericks | but you probably mean more than that |
| 15:01 | amalloy | well, that makes sense. so why would we expect cljs to be able to access them as properties? |
| 15:01 | gfredericks | "as properties" means the foo.bar syntax? |
| 15:01 | gfredericks | foo.static in this case |
| 15:02 | amalloy | gfredericks: actually i think you're wrong. you can do `foo.static = 4`, in a test i just did |
| 15:02 | gfredericks | I didn't say you couldn't; I just said even if you can't you can foo['static'] |
| 15:02 | amalloy | you can at least only reference the property with string literals - "only" here sounds like you said you can't |
| 15:02 | gfredericks | oh how did that word get there |
| 15:11 | pandeiro | is there already an async flow control lib for clojurescript? |
| 15:19 | dnolen | pandeiro: there is not, I'd like to see someone fix delimc for CLJS |
| 15:19 | dnolen | or write something way better |
| 15:20 | mmarczyk | dnolen: hi, thanks for applying the strobj patch |
| 15:21 | dnolen | mmarczyk: sure |
| 15:21 | dnolen | mmarczyk: thx for doing it |
| 15:21 | mmarczyk | dnolen: np |
| 15:21 | mmarczyk | dnolen: I'm experimenting with replacing inode-find with inode-lookup in PHM |
| 15:21 | mmarczyk | dnolen: since cljs.core/find doesn't care about the key stored in the map... |
| 15:21 | dnolen | new performance bottleneck I want to eliminate - variadic fns. |
| 15:22 | mmarczyk | dnolen: incidentally, that means that one can't use find to extract metadata attached to the actual key assoc'd onto the map -- not that I've ever done it, but it is possible in Clojure |
| 15:23 | dnolen | mmarczyk: I wouldn't do that |
| 15:24 | dnolen | unless there's a significant performance win. |
| 15:24 | mmarczyk | dnolen: sure |
| 15:25 | mmarczyk | dnolen: the current version is a direct port, which may be a good thing in and of itself -- as a non-trivial example of how one might build the equivalent of clj's PHM in clj(s) |
| 15:25 | mmarczyk | dnolen: but no harm in running a few perf tests, so... :-) |
| 15:29 | gfredericks | okay, so when running an aleph http server, the request handler gets the response channel as its first argument. If I enqueue into the channel right away, it works. If I do it from a future, it doesn't. |
| 15:30 | gfredericks | also does not work if I do it from a vanilla thread |
| 15:32 | RickInGA_ | I have a function that only compiles when it is indented properly. https://refheap.com/paste/2187 |
| 15:32 | RickInGA_ | I am using inferior-lisp |
| 15:33 | RickInGA_ | Whitespace isn't supposed to matter, right? |
| 15:33 | gfredericks | RickInGA_: can you reproduce the issue outside of emacs? |
| 15:33 | gfredericks | RickInGA_: whitespace definitely shouldn't matter |
| 15:36 | RickInGA_ | gfredericks can't figure out how to run it outside of emacs |
| 15:36 | gfredericks | RickInGA_: you use leiningen? |
| 15:36 | RickInGA_ | gfredericks: yeah |
| 15:37 | gfredericks | so put it in your main ns and do lein run or something... |
| 15:39 | xeqi | or lein repl |
| 15:39 | gfredericks | aleph lesson learned: don't close the channel at the bottom of your function and forget you did that |
| 15:42 | RickInGA_ | xeqi: gredericks: when I try to use the namespace that is giving me the problem in lein repl, again I am finding errors that are fixed by indentation |
| 15:43 | gfredericks | that is the spookiest thing I have ever heard of. |
| 15:43 | fliebel | RickInGA_: Huh? Clojure is whitespace-sensitive? Python people will love this. |
| 15:43 | RickInGA_ | it may be a phantom error, I moved some things between namespaces, so somethings legitimately are not found |
| 15:43 | gfredericks | somebody should fork clojure and write a version of the reader that accepts indents in place of closing parens |
| 15:44 | gfredericks | "Clojure Ghost Stories" |
| 15:44 | RickInGA_ | I will clean up ns errors, and then go try to mess with indentation again |
| 15:46 | septomin_ | add more semicolons |
| 15:50 | RickInGA_ | cleared up ns issues… lein repl works fine. inferior-lisp is still sensative to indentation |
| 15:51 | ynniv | technomancy: do you have any reference material to go with org.clojars.technomancy/osmosis-hstore ? |
| 16:06 | pppaul | i was looking at the clojurescript wiki on github, and then reading the source code for .core. i'm interested in knowing, are persistent data structures and meta data implemented? (i see these things in the .core) |
| 16:07 | devn | pppaul: meta is in core.cljs, persistent data structures are WIP if I understand correctly |
| 16:07 | pppaul | wip? |
| 16:07 | devn | Work in Progress |
| 16:07 | pppaul | oh, ok |
| 16:07 | pppaul | i see a lot of code for them in core |
| 16:07 | devn | I saw something in this channel earlier today or late yesterday about PersistentHashSet (I think) |
| 16:08 | pppaul | i guess it's not too big of a deal for me, cus in JS i do copy on write anyway |
| 16:10 | dnolen | pppaul: PersistentVector is in |
| 16:10 | dnolen | pppaul: we have a working PersistentHashMap that needs a little more assessment |
| 16:11 | dnolen | pppaul: PersistentTreeMap would be nice but no one's started |
| 16:12 | pppaul | cool |
| 16:13 | jondot_ | is there anything special to consider when deploying a clojure ring/compojure app? tomcat/jetty? i'm also trying out deploying to heroku, not sure how common is that ? |
| 16:14 | ibdknox | heroku works wonderfully :) |
| 16:14 | jondot_ | hello ibdknox, loving your IDE concept, btw. |
| 16:14 | Raynes | Heroku is nice. |
| 16:14 | mmarczyk | pppaul: persistent hash set will be in automatically if/when persistent hash map is |
| 16:14 | ibdknox | thanks :) |
| 16:15 | mmarczyk | dnolen: actually, about noone being starting on tree map... :-) |
| 16:15 | jondot_ | so heroku runs on jetty? does that matter? |
| 16:15 | mudphone | ibdknox: jondot: ditto |
| 16:16 | jondot_ | runs clojure apps on jetty that is |
| 16:16 | jondot_ | from what i can remember of my dark java past, i used to sware by tomcat. not sure its true nowadays. |
| 16:17 | ibdknox | jetty works just fine for all my sites |
| 16:18 | blakesmith | ibdknox: Do you use jetty standalone via the adapter? |
| 16:19 | ibdknox | blakesmith: yep |
| 16:19 | mmarczyk | *started |
| 16:19 | cemerick | jondot_: I'd probably prefer jetty over tomcat these days. |
| 16:19 | ibdknox | I usually stick nginx in front of it if it's on my box |
| 16:19 | ibdknox | on heroku I just leave it be |
| 16:19 | cemerick | heroku apps are already proxied to the nines anyway |
| 16:19 | ibdknox | yup |
| 16:20 | blakesmith | For deploys, do you drop a jar, or just 'lein run' the source itself? |
| 16:20 | cemerick | blakesmith: the adapter is fine; check out https://devcenter.heroku.com/articles/clojure if you want to use heroku |
| 16:21 | blakesmith | I'm talking about non-heroku deploys. |
| 16:21 | jondot_ | i'm wondering if lein-ring makes any sense for heroku? |
| 16:22 | ibdknox | jondot_: not really |
| 16:22 | ibdknox | blakesmith: lein trampoline run |
| 16:23 | jondot_ | ibdknox, suspected so. is it too complex to combine both? i do enjoy the development bonuses i get with lein-ring |
| 16:23 | ibdknox | you just need to create a -main, there's no reason you can't have both :) |
| 16:24 | jondot_ | yep, ok |
| 16:25 | pandeiro | i still haven't used lein-ring much, what does it help with? |
| 16:25 | dnolen | mmarczyk: ! :) |
| 16:26 | jondot_ | pandeiro, code reloads, war, opens a browser, etc. read on the github page |
| 16:27 | mmarczyk | dnolen: sometime this week I'd say :-) |
| 16:27 | cemerick | blakesmith: Depends a lot on what you're targeting. Beanstalk requires a .war, as will any other container-based deployment. Elsewhere, perhaps not. |
| 16:29 | pppaul | has anyone looked into doing servers on node.js? |
| 16:29 | pppaul | via clojurescript? |
| 16:31 | dnolen | pppaul: some people have tho I haven't heard detailed reports |
| 16:31 | dnolen | pppaul: and ibdknox is looking into it as well it seems |
| 16:32 | ibdknox | yeah, I managed to get it working |
| 16:32 | jondot_ | foreman and jetty Just Works, with all my custom jars pulled in.. lein is great! |
| 16:32 | pppaul | are there enough libs ported to clojurescript to make it desirable? |
| 16:33 | ibdknox | not at all |
| 16:33 | pppaul | or, have people found servers on clojure (java) painful? |
| 16:33 | ibdknox | I'd only do it if you have to |
| 16:35 | yoklov | pppaul: what sort of libs? |
| 16:35 | yoklov | js or clj |
| 16:35 | pppaul | clj |
| 16:36 | yoklov | there are a good amount, from what i've seen |
| 16:36 | yoklov | but obviously its a small fraction |
| 16:36 | yoklov | or not-so-small fraction since there aren't _that_ many non-interop clj libs to begin with |
| 16:37 | yoklov | but still pretty small |
| 16:37 | yoklov | i think its still quite desirable though :p |
| 16:39 | ibdknox | sorry I meant over CLJ |
| 16:39 | ibdknox | in the case of nodejs servers |
| 16:39 | ibdknox | I would take noir + jetty/netty in a heartbeat |
| 16:40 | kovasb | ibdknox: what is advantage of node then? |
| 16:40 | ibdknox | none |
| 16:40 | abedra | ^^ |
| 16:41 | kovasb | "ibdknox figures it out so that you don't have to" |
| 16:41 | ibdknox | lol |
| 16:42 | ibdknox | I was starting with node thinking that I'd write the core of the platform in JS |
| 16:42 | ibdknox | I'm questioning that decision |
| 16:42 | ibdknox | as I'm rapidly approaching the "fuck this" stage lol |
| 16:42 | septomin_ | anyone played around with cljs on meteor? |
| 16:42 | kovasb | yeah, better sooner rather than later |
| 16:42 | dnolen | ibdknox: heh, how will you run people's JS extensions? Rhino? |
| 16:42 | cemerick | ibdknox: what, node isn't our salvation and solace? :-P |
| 16:43 | dnolen | ibdknox: btw, man it didn't take long for the Light Table google group to pass noise to signal ratio |
| 16:43 | ibdknox | dnolen: that's why I locked it down :( |
| 16:43 | ibdknox | dnolen: I might still package node for the JS bit |
| 16:43 | kovasb | its like the fountain wishing well, everyone has their 2 cents |
| 16:44 | yoklov | oh, dnolen, i've been meaning to ask you, have you ever had any issues with the performance of cljs.core.str? |
| 16:44 | dnolen | ibdknox: and communicate between JVM and Node.js? |
| 16:44 | dnolen | yoklov: yeah it stinks |
| 16:44 | yoklov | yeah |
| 16:44 | ibdknox | dnolen: the architecture I have is very neat :) |
| 16:45 | dnolen | yoklov: I think largely due to how variadic fns are implemented |
| 16:45 | dnolen | yoklov: I'm looking into it. |
| 16:45 | ibdknox | dnolen: all the pieces of the system are decoupled, so any one piece of it can be run remotely if so desired. |
| 16:45 | dnolen | ibdknox: cool - cuz that would have sounded like a headache to me. |
| 16:45 | ibdknox | dnolen: at some level it's necessary - you need all of these things to be out of process |
| 16:46 | ibdknox | you can't run all the language services on top of the JVM |
| 16:46 | ibdknox | they should talk to whatever thing makes the most sense. e.g. python service on top of pypy or whatever |
| 16:46 | ibdknox | they all talk through tcp |
| 16:46 | hiredman | (stomp) |
| 16:47 | dnolen | ibdknox: and you're not too concerned about the JVM dependency? |
| 16:47 | ibdknox | dnolen: not sure it's really any worse than a node dependency. Is there something specific you're thinking there? |
| 16:47 | yoklov | okay cool, yeah, just wanted to make sure that wasn't unknown |
| 16:48 | dnolen | ibdknox: requires a separate install on OS X now right? |
| 16:48 | yoklov | dnolen: so you think its cljs being slow and not goog.string? |
| 16:49 | dnolen | yoklov: I benched variadic fns, str is particularly bad because it's recursive. |
| 16:49 | dnolen | yoklov: goog.string is not that slow |
| 16:49 | ibdknox | dnolen: given that the target is devs, I don't think that's so bad, but it's a good point |
| 16:50 | ibdknox | it doesn't prevent people from using eclipse |
| 16:50 | yoklov | dnolen: right, i didn't really think about the fact that str/str* were recursive |
| 16:50 | wyan | what's the current preferred way of using slime with clojure & sbcl side by side? |
| 16:51 | wyan | (not simultaneously, just on the same system) |
| 16:51 | cemerick | is node not require a separate install? |
| 16:51 | cemerick | does*, feh |
| 16:51 | dnolen | cemerick: it's easy to package up node inside your OS X app - not sure about JVM ? |
| 16:52 | ibdknox | cemerick: I might be able to package the binaries |
| 16:52 | Raynes | cemerick: Borat-cemerick? |
| 16:52 | cemerick | Raynes: Might need to start a twitter account. |
| 16:52 | cemerick | ibdknox: You can definitely redistribute OpenJDK FWIW. |
| 16:52 | ibdknox | oo |
| 16:53 | ibdknox | I wouldn't care, but this is seriously slowing me down |
| 16:53 | cemerick | OS X Java is going to be OpenJDK starting with 7 anyway. |
| 16:53 | dnolen | ibdknox: cemerick: how big is OpenJDK tho? |
| 16:54 | cemerick | When I was redistributing the Sun JVM for windows apps, that was ~11MB? |
| 16:54 | dnolen | cemerick: plus the JDK? really? |
| 16:55 | ibdknox | jdk is around 70-80mb looks like |
| 16:55 | ibdknox | dnolen: a far cry from VS's 4gb ;) |
| 16:56 | RickInGA_ | ibdknox yeah, but vs lets me code without knowing how to program. emacs doesn't have that feature. slows me down considerably |
| 16:56 | ibdknox | RickInGA_: :) |
| 16:56 | dnolen | ibdknox: ok, yeah 70-80mb is not a big deal. |
| 16:57 | ibdknox | yeah, that doesn't bother me |
| 16:57 | yoklov | isn't OS X losing built-in java when the next version comes out? |
| 16:57 | ibdknox | I think I might go that route |
| 16:57 | RickInGA_ | doh, must have left my work machine logged in. anyone have rights to kick RickInGA |
| 16:58 | kovasb | i think optimizing for development speed and capabilities versus download size is a win |
| 16:58 | cemerick | yoklov: It's not built-in starting with 10.7. Installs on demand. |
| 16:58 | yoklov | huh, didn't realize I had installed it |
| 16:58 | ibdknox | and that experience was quite nice |
| 16:58 | ibdknox | when I did it |
| 16:58 | ibdknox | ok |
| 16:58 | ibdknox | I'm sold. |
| 16:58 | yoklov | aside from when I installed the development stuff |
| 17:01 | kovasb | dnolen: any chance your talk tomorrow gets moved to a bigger room? |
| 17:03 | dnolen | kovasb: hmm I'm not in control of that sadly. |
| 17:04 | RickInGA_ | dnolen any chance your talk tomrrow gets recorded? :) |
| 17:04 | kovasb | dnolen: guess I better show up early if I want a seat :) |
| 17:04 | dnolen | RickInGA_: not sure, sometimes thickey comes and does that. |
| 17:05 | RickInGA_ | really? do you know where they get posted? |
| 17:05 | dnolen | kovasb: heh, it won't be too fancy, mostly a review. |
| 17:05 | dnolen | RickInGA_: vimeo / blip.tv |
| 17:05 | RickInGA_ | dnolen: cool, I will go looking for them |
| 17:06 | kovasb | dnolen: mostly want to meet more clojure people in the city |
| 17:06 | kovasb | though I'm sure ill learn something too |
| 17:08 | cemerick | ibdknox: I can't find the JRE packages I built, but they were very slim; I think it was < 20MB, though that required some tricks (e.g. pack200, no i8n stuff, etc) |
| 17:08 | ibdknox | cemerick: ah. I'm really not worried about download size |
| 17:08 | ibdknox | cemerick: anything < 200mb is trivial for a dev |
| 17:09 | cemerick | Sure. This was ~2005 for end users, so things were different. :-) |
| 17:09 | ibdknox | absolutely |
| 17:09 | ibdknox | I'm lucky in that my audience is technically inclined :) |
| 17:10 | cemerick | gawd, thinking of the hours I spent slimming that download out… :-| |
| 17:12 | dnolen | neat seems like IFn is making Brendan Eich ponder callable Objects for JS |
| 17:13 | kovasb | dnolen: have you watched http://blip.tv/jsconf/jsconf2011-andrew-dupont-everything-is-permitted-extending-built-ins-5211542 |
| 17:14 | kovasb | near the end he starts talking about some new proposals for js |
| 17:14 | dnolen | kovasb: I have seen that yes. |
| 17:14 | kovasb | watching it, 80% of the time I was like "yeah clojurescript solves that.." |
| 17:15 | kovasb | but seems like they are coming to a similar conclusion |
| 17:16 | dnolen | kovasb: ClojureScript is live 5 years ahead of wherever JS is going. It also delivers most of what Google Dart is selling w/o forking the web. |
| 17:16 | dnolen | s/live/like |
| 17:18 | kovasb | dnolen: on the one hand I'm glad I put off learning JS for so long. On the other hand it makes it harder to really get into the guts of cljs in the early days |
| 17:18 | yoklov | IFn is awesome |
| 17:19 | dnolen | kovasb: I definitely encourage digging into JS. One thing I never expected, writing fast CLJS code is way more fun than trying to wrangle Clojure on the JVM. |
| 17:21 | kovasb | dnolen: i could see that, given js is more dynamic. But the debugging situation is pretty tough unless u are pro |
| 17:22 | dnolen | kovasb: yeah, debugging story needs work |
| 17:23 | yoklov | debugging code which uses cljs data structures is annoying |
| 17:23 | yoklov | harder to look at them in the debugger than arrays |
| 17:23 | yoklov | and in general you gotta know js |
| 17:24 | dnolen | yoklov: true, you do know I added toString methods right? |
| 17:25 | yoklov | hm, last I checked they were still printing "[object Object]" |
| 17:25 | dnolen | yoklov: not in master |
| 17:25 | yoklov | hm, i might have an old master then |
| 17:25 | yoklov | might == must |
| 17:26 | yoklov | by the way, if anybody is interested in seeing a neatish cljs game-like-thing, http://thomcc.github.com/Argh/ is what i've been working on lately |
| 17:26 | dnolen | yoklov: :) |
| 17:26 | dnolen | yoklov: very nice |
| 17:27 | yoklov | haha, thanks. it reminded me how little i remember from when i took linear algebra :p |
| 17:27 | yoklov | but runs quite nicely |
| 17:28 | dnolen | yoklov: it's really awesome that you're focusing on game work with ClojureScript. |
| 17:28 | brehaut | yoklov: is it using web3d ? |
| 17:28 | yoklov | brehaut: no, though I should have |
| 17:28 | brehaut | yoklov: thast even cooler :) |
| 17:28 | yoklov | i just draw pixels on a tiny tiny canvas |
| 17:29 | yoklov | and scale it up |
| 17:29 | brehaut | haha fantastic :) |
| 17:29 | brehaut | yoklov: that explains why i was surprised it worked in safari |
| 17:29 | yoklov | dnolen: thanks, yeah, its the kind of stuff which i've been doing for a while (or at least as long as i've been programming) as side projects |
| 17:30 | yoklov | brehaut: yeah, though the sound sounds awful in safari |
| 17:30 | yoklov | html5 audio is the worst for working cross browser. |
| 17:30 | brehaut | huh i dont even have any sound |
| 17:30 | yoklov | thats possible, it gives up after 1 second of waiting for assets to load. |
| 17:31 | yoklov | which is too short. |
| 17:31 | yoklov | sound only really works right in chrome, though locally it works in both chrome and firefox. i have no idea why. |
| 17:32 | mmarczyk | yoklov: wow, that's really cool |
| 17:32 | mmarczyk | (just looked at Argh) |
| 17:32 | yoklov | mmarczyk: thanks! |
| 17:34 | amalloy | i think RickInGA's issue was caused by emacs's open-paren-in-column-0-is-defun-start |
| 17:35 | amalloy | he's gone now, but someone (gfredericks?) was claiming clojure is whitespace-sensitive |
| 17:35 | rplevy | amalloy: just commas, and you get better perf if you leave them out |
| 17:36 | drewr | any ideas why this cljs repl require doesn't work? http://p.draines.com/13346981126818f600a46.txt |
| 17:36 | rplevy | it's like semicolons |
| 17:37 | cemerick | Interesting, there's hard API breakage between Clojure 1.2 and 1.3+: unchecked-divide and unchecked-remainder were renamed to add an -int suffix. |
| 17:38 | dnolen | drewr: hmm, haven't seen that before. |
| 17:38 | yoklov | cemerick, yeah, i noticed that if you look at the clojure alioth benchmarks they had to work around that |
| 17:38 | dnolen | cemerick: core.logic works around that with macros+resolve |
| 17:39 | dnolen | I fixed that like a year ago. |
| 17:41 | drewr | dnolen: tried cleaning my working dir too (rm -rf .repl; git clean -fd; script/bootstrap) |
| 17:42 | dnolen | drewr: are you trying to dev against the clojurescript compiler directly? why not lein cljsbuild? |
| 17:43 | drewr | dnolen: in order to run script/repljs |
| 17:43 | drewr | is there another way to get a cljs repl that I'm missing? |
| 17:43 | dnolen | drewr: lein cljsbuild supports REPLs |
| 17:44 | dnolen | drewr: Rhino and Browser |
| 17:44 | dnolen | drewr: oh but you're working against Node.js right? |
| 17:44 | drewr | dnolen: yes |
| 17:46 | drewr | ah, but I see what you're saying.. cljs.nodejs won't be avail in rhino! |
| 17:46 | drewr | s/saying/implying maybe?/ |
| 17:47 | emezeske | drewr, dnolen: If someone points me toward a tutorial on how to set up a nodejs cljs REPL, I'd love to support that in cljsbuild |
| 17:47 | emezeske | I've never messed with it, though, personally |
| 17:47 | dnolen | drewr: it wont |
| 17:47 | dnolen | drewr: if you feel ambitious I have an almost working Node.js REPL here https://github.com/swannodette/clojurescript |
| 17:48 | drewr | I have some ambition |
| 17:48 | dnolen | drewr: look in the node-repl branch |
| 17:48 | pppaul | oh sweet! |
| 17:48 | dnolen | drewr: there's a working repl.js file, there's the necessary clj code, and a startup script. |
| 17:49 | dnolen | drewr: if someone makes it a little better I'm more than happy to merge it into CLJS proper |
| 17:49 | pppaul | how large is a hello world clojurescript .js file? |
| 17:49 | drewr | dnolen: awesome; I'll take a look |
| 17:49 | dnolen | pppaul: probably 30-50k after advanced compilation, 7-8k gripped. |
| 17:58 | yoklov | pppaul: looks like 48k for advanced, and 8.7k gzipped |
| 18:05 | ibdknox | Light Table is on kickstarter! |
| 18:05 | ibdknox | http://www.kickstarter.com/projects/306316578/light-table |
| 18:05 | crassus | whoo |
| 18:06 | ibdknox | posted on HN, can a few people vote it up from the new page? http://news.ycombinator.com/newest |
| 18:08 | Raynes | ibdknox: Awesome! |
| 18:08 | emezeske | ibdknox: Hmm, third on front page, not bad for 10 seconds |
| 18:09 | ynniv | wow, 14 points in 3 minutes |
| 18:10 | Raynes | ibdknox: TAKE MY MONEY! |
| 18:12 | jconnolly | upboated ;D |
| 18:13 | brehaut | ibdknox: does the $50 include a tshirt as well or not? |
| 18:13 | ynniv | brehaut: no, check the HN comments |
| 18:14 | brehaut | ah thanks |
| 18:16 | ibdknox | anyone with reddit foo want to put it on reddit? :) |
| 18:17 | amalloy | ibdknox: there will be five or ten separate reddit posts about it by tomorrow |
| 18:17 | emezeske | ibdknox: done |
| 18:18 | emezeske | ibdknox: http://www.reddit.com/r/programming/new/ |
| 18:19 | autodidakto | Raynes: stop throwing money at the screen :) |
| 18:22 | brehaut | ibdknox: i have had a question from one of my friends: is it a stand alone product, or will it be a web app? |
| 18:22 | lancepantz | ibdknox: so you're just refreshing that page right? |
| 18:22 | ibdknox | standalone |
| 18:22 | ibdknox | lancepantz: there's so much shit going down right now lol |
| 18:22 | lancepantz | :) |
| 18:24 | ibdknox | haha my girlfriend is apparently doing the refreshing for me |
| 18:26 | autodidakto | ibdknox: Just you? Or others too? |
| 18:27 | ibdknox | autodidakto: I'm good, but not that good. I'll put together a team |
| 18:28 | autodidakto | I'm not the one who'd know best, but lots of kickstarter projects go into more detail about the $... why that number, how long, what will be done if receive more, etc |
| 18:31 | autodidakto | And I wanna see what t-shirt looks like :) |
| 18:33 | sattvik | ibdknox: I'm confused is the $500 level the one that gets the earliest access? It seems odd that the higher levels don't. |
| 18:34 | hiredman | http://news.ycombinator.com/item?id=3855293 <-- this is so dumb, if have a dev job $100 is a "rouding error" in your finances |
| 18:34 | lancepantz | hiredman: agree |
| 18:34 | brehaut | hah yes. your chair should cost more |
| 18:34 | hiredman | god, I am trying to pick a new chair now |
| 18:34 | yoklov | heh, that's the boat i'm in but then again i'm a student :p |
| 18:35 | hiredman | shopping is hard, lets go programming |
| 18:35 | brehaut | hiredman: thats been a long process right |
| 18:35 | brehaut | ? |
| 18:35 | lancepantz | hiredman: nothing has yet to top the aeron |
| 18:35 | lancepantz | hiredman: atleast don't fall for the steelcase propaganda |
| 18:35 | jodaro | the best chair is no chair for me. i stand or sit on the floor. |
| 18:35 | lancepantz | i actually stand as well |
| 18:36 | hiredman | the chair? yeah I haven't really gotten serious about it, but I moved recently so trying to getting everything all nice |
| 18:36 | hiredman | lancepantz: interesting, have you tried the mirra? |
| 18:37 | lancepantz | actually yes, i had one for about 8 months |
| 18:37 | lancepantz | i would put it below both the the steelcase and the aeron |
| 18:37 | ynniv | I haven't tried one, but I've heard that the Humanscale Freedom Chair is quite good |
| 18:37 | brehaut | im probably going to be moving in the next few months. i need to get a proper desk |
| 18:37 | emezeske | ynniv: I use the freedom, it's good. |
| 18:38 | ynniv | emezeske: how does it compare to the aeron? |
| 18:38 | lancepantz | we have freedom's all over the office, and people fight for the aerons |
| 18:38 | hiredman | with nerf guns? |
| 18:38 | lancepantz | better, deadly magnets |
| 18:39 | hiredman | those sound painful |
| 18:39 | ynniv | like, MRI's? |
| 18:39 | emezeske | ynniv: Heh, I prefer it, but it's totally subjective. I really like the upright headrest thingie. |
| 18:39 | septomin_ | how do they work? |
| 18:39 | lancepantz | septomin_: :) |
| 18:40 | ynniv | which one is "the" steelcase chair? they seem to have many |
| 18:40 | lancepantz | ynniv: the leap is what i used to have |
| 18:41 | ynniv | the Leap WorkLounge looks serious |
| 18:45 | ynniv | ibdknox: you don't mention deployment packaging anywhere. Do you plan on making a standalone app that wraps a web view, or would people run a local server and navigate to it? |
| 18:46 | ibdknox | ynniv: it'll be standalone |
| 18:46 | ynniv | erm, well… both of those could be "standalone" :-) |
| 18:48 | kovasb | 200k.. ambitious. i like it |
| 18:48 | ibdknox | 200k is really just barely enough to be honest |
| 18:49 | ynniv | it's high for a single person, but low for a team |
| 18:49 | Lajla | THat is not the point |
| 18:49 | ibdknox | yeah, it's for a team |
| 18:49 | metajack | Has anyone tried the Embody, which seems to the be successor to the Aeron? |
| 18:49 | Lajla | what is the point is ##(symbol? (symbol ":This has spaces in it and starts with a colon")) |
| 18:49 | lazybot | ⇒ true |
| 18:49 | ibdknox | ynniv: I added an answer to app for that question just now, it'll be in a webview and feel like an app :) |
| 18:49 | ynniv | excellent. thanks :) |
| 18:51 | kovasb | well i threw in my 100 :) |
| 18:51 | brehaut | 3% of the way already :) |
| 18:54 | brehaut | mdeboard: i expect most of them to complain about fonts and colors :P (because its the most obvious bike shed and everyone has an opinion) |
| 18:54 | ibdknox | yeah, I'm not convinced this is going to work |
| 18:54 | scriptor | ibdknox: that kickstarter won't work? |
| 18:55 | ibdknox | we'll see |
| 18:55 | mdeboard | brehaut: As long as there's support for comic sans I'm good |
| 18:55 | brehaut | its a very ambitious project |
| 18:55 | ibdknox | I'm not convinced it'll hit the 200k mark, much less higher. |
| 18:55 | brehaut | ~guards |
| 18:55 | clojurebot | SEIZE HIM! |
| 18:55 | ibdknox | lol |
| 18:56 | mdeboard | ibdknox: Would this be a pure Clojure product? |
| 18:56 | brehaut | ibdknox: well, data point for you, day job nerds i know who dont follow the tech news channels know about the project |
| 18:56 | ibdknox | also, I don't understand why everyone seems to think I can just add this to sublime/emacs/vim |
| 18:56 | scriptor | yea... |
| 18:56 | mdeboard | ibdknox: Because everyone is terrible. People are, literally, the worst. |
| 18:56 | scriptor | I'm not sure if people actually paid attention to the video |
| 18:56 | scriptor | or even watched it |
| 18:56 | yoklov | ^ |
| 18:56 | hagna | for datomic? I did |
| 18:56 | scriptor | just going, "hurr durr emacs can do everything" |
| 18:57 | scriptor | hagna: for light table |
| 18:57 | hagna | oh oops |
| 18:57 | mdeboard | well to be fair, emacs CAN do everything |
| 18:57 | scriptor | can you have draggable windows in emacs? |
| 18:57 | wkelly | scriptor: I watched the video, said "Hurr durr, emacs can do everything" and pledged money to the kickstarter ;p |
| 18:58 | kovasb | that last 50 or 100k might require some work.. |
| 18:58 | mdeboard | ashton kutcher |
| 18:58 | mdeboard | scriptor: I'm 100% sure it's possible |
| 18:58 | mdeboard | scriptor: I'm basically trying to make the point that it's poss |
| 18:58 | mdeboard | ible |
| 18:58 | mdeboard | but I was mostly being sarcastic |
| 18:58 | scriptor | ah |
| 18:58 | mdeboard | because whether or not it can isn't really relevant, it's whether you'd want to |
| 18:59 | scriptor | yea, part of the reason why this appeals to me is the from scratch idea |
| 18:59 | scriptor | not having to bother with emacs |
| 18:59 | mdeboard | Id unno I really do use emacs for everything except web browsing |
| 19:00 | yoklov | yeah, i like emacs and all but having a 20+ year old design... sorta takes its toll |
| 19:00 | mdeboard | I'm chatting in emacs |
| 19:00 | scriptor | me too |
| 19:00 | yoklov | i am too |
| 19:00 | mdeboard | ONLY ME |
| 19:00 | wkelly | haha |
| 19:00 | wkmanire_away | I wish I were. |
| 19:00 | scriptor | heh, ERC? |
| 19:00 | wkmanire_away | ERC rocks. |
| 19:00 | mdeboard | rcirc |
| 19:00 | duncanm | what's this kickstarter project about? |
| 19:00 | brehaut | mdeboard: w3 wants to disagree with you :P |
| 19:00 | mdeboard | rcirc uber alles |
| 19:00 | duncanm | i use rcirc, i wish i could get rcirc-reconnect to work with irc proxies |
| 19:00 | yoklov | w3 stinks :/ |
| 19:01 | duncanm | there's some patch, but it's kinda rotted |
| 19:01 | brehaut | nevertheless ;) |
| 19:01 | scriptor | oh nice, rcirc is installed by default |
| 19:01 | brehaut | yoklov: the majority of the web browsers in the world stink, so its in good company |
| 19:02 | yoklov | heh, yeah but I wouldn't want to do any web development in it |
| 19:02 | brehaut | yoklov: thats different to IE <= 8 how ;) |
| 19:02 | yoklov | conkeror is emacsy enough for me |
| 19:02 | yoklov | not that i really use it |
| 19:02 | brehaut | (not that id ever use a browser embeded in emacs anyway) |
| 19:03 | mdeboard | whoa amount doubled in the 20 minutes since I pledged |
| 19:03 | hagna | acme can do everything :) |
| 19:04 | wei_ | for a multimethod, can I dispatch on a key in a map, but pass the entire map to the dispatch function? |
| 19:04 | scriptor | wei_: yes, I believe so |
| 19:04 | duncanm | mdeboard: where's the link to the project? |
| 19:04 | mdeboard | http://www.kickstarter.com/projects/306316578/light-table |
| 19:04 | brehaut | alternatively, anywhere you get your nerd news ;) |
| 19:05 | amalloy | brehaut: irc, evidently, making both of you correct |
| 19:05 | scriptor | wei_: check out http://clojuredocs.org/clojure_core/clojure.core/defmulti#example_549 |
| 19:05 | duncanm | ah, i didn't know he started a kickstarter project |
| 19:05 | autodidakto | wei_: your defmethods see the same arguments that the defmulti does |
| 19:06 | scriptor | wei_: in that example, 'params' will be english-map, french-map, etc. |
| 19:08 | wei_ | oh, I got it. thanks! |
| 19:11 | the1andonlycary | does anyone have experience with incanter? I'm getting an 'unable to resolve symbol' when trying to use sample-weibull (https://gist.github.com/7d8dccd5df3a59cfeb7c) |
| 19:15 | aaelony | thelandonlycary: user=> (sample-weibull 1) |
| 19:15 | aaelony | 1.0698556892475477 |
| 19:17 | aaelony | thelandonlycary: here is the project.clj https://refheap.com/paste/2198 |
| 19:22 | the1andonlycary | thanks, aaelony! I've got it running now :-) |
| 19:22 | livingston | i'm looking for something like gentemp but that will give me a deterministic / reproducible set of names... I ended up with this which works but it feels ugly: git://gist.github.com/2409793.git |
| 19:23 | livingston | er I mean this: https://gist.github.com/2409793 |
| 19:27 | aaelony | thelandonlycary: cool |
| 19:38 | yoklov | oh huh, did clojure 1.4.0 come out? |
| 19:38 | wei_ | how do I print an caught exception e to a file? |
| 19:38 | hiredman | ~jdoc Exception |
| 19:38 | clojurebot | I don't understand. |
| 19:38 | hiredman | clojurebot: jerk |
| 19:38 | clojurebot | you cut me deep, man. |
| 19:39 | amalloy | $javadoc Exception |
| 19:39 | lazybot | http://docs.oracle.com/javase/6/docs/api/java/lang/Exception.html |
| 19:42 | wei_ | oh-- getStackTrace. thanks! I'll check the javadocs next time |
| 19:43 | b_erb | i want to increment a counter in a transaction (i know that this is usually a good cause for atoms). but i'm wondering if the inc function is actually commutative? |
| 19:44 | lancepantz | wei_: https://github.com/flatland/useful/blob/develop/src/useful/debug.clj#L33 may be of use |
| 19:44 | llasram | b_erb: What do you mean? |
| 19:45 | hiredman | b_erb: http://en.wikipedia.org/wiki/Commutative_property |
| 19:45 | hiredman | if I apply inc ten times to 1, can you rearrange the order that my incs are applied in and get a different result? |
| 19:45 | yoklov | no |
| 19:45 | michaelbarton | I have a quick question. How can I perform OR pairwise on two sequences? |
| 19:46 | yoklov | hiredman, inc is just +1 |
| 19:46 | yoklov | no matter how you do 1+1+1+1+…+1+1 it's still the same result |
| 19:46 | wei_ | lancepantz: thanks. all of those fns look useful actually |
| 19:46 | yoklov | because addition is commutative |
| 19:46 | michaelbarton | Would it be interleave then compare in steps of two? |
| 19:46 | yoklov | oh wait |
| 19:47 | yoklov | i didn't realize b_erb asked that |
| 19:47 | llasram | The danger of the rhetorical question in IRC :-) |
| 19:47 | b_erb | hiredman: / yoklov: thanks, i should know this from back in the school. ;-) i was just distracted by "last-one-in-wins" and "in-transaction-value-of-ref". |
| 19:47 | septomin_ | i assume he's asking if inc is safe |
| 19:48 | llasram | b_erb: I'm sensing potential confusion about what `inc` does...? Like most Clojure functions it's "pure" -- doesn't actually mutate anything, just returns the value of its input +1 |
| 19:49 | septomin_ | i.e. in java if you did x += 1 ten times without locking x |
| 19:51 | sattvik | magnars: You mean like: |
| 19:51 | sattvik | michaelbarton: like: |
| 19:52 | sattvik | ,(map #(or %1 %2) [true true false false] [true false true false]) |
| 19:52 | clojurebot | (true true true false) |
| 19:54 | yoklov | hm, you can't do (map or …) because or's a macro? |
| 19:54 | yoklov | ,(map or [true] [false]) |
| 19:54 | clojurebot | #<CompilerException java.lang.RuntimeException: Can't take value of a macro: #'clojure.core/or, compiling:(NO_SOURCE_PATH:0)> |
| 19:54 | yoklov | yup |
| 19:54 | yoklov | bummer |
| 19:58 | michaelbarton | Perhaps there is a way to do it with all? and true? |
| 19:59 | yoklov | hm? |
| 20:00 | michaelbarton | I think #(every? true? %) works |
| 20:00 | yoklov | oh you can do it the way he suggests |
| 20:00 | michaelbarton | Sorry |
| 20:00 | michaelbarton | I didn't see that |
| 20:01 | michaelbarton | map can take multiple sequences? |
| 20:01 | yoklov | yeah |
| 20:01 | yoklov | its awesome |
| 20:01 | michaelbarton | They are automatically interleaved? |
| 20:01 | yoklov | ,(map + [1 2 3] [4 5 6]) |
| 20:01 | clojurebot | (5 7 9) |
| 20:01 | amalloy | interleaving seems irrelevant |
| 20:02 | michaelbarton | I mean the arguments are passed pairwise to function? |
| 20:02 | amalloy | &(doc map) |
| 20:02 | lazybot | ⇒ "([f coll] [f c1 c2] [f c1 c2 c3] [f c1 c2 c3 & colls]); Returns a lazy sequence consisting of the result of applying f to the set of first items of each coll, followed by applying f to the set of second items in each coll, until any one of the colls is exhausted. A... https://refheap.com/paste/2201 |
| 20:02 | michaelbarton | I see |
| 20:02 | michaelbarton | Very interesting |
| 20:03 | michaelbarton | Thank you |
| 20:15 | pablo_ns | Has anybody who uses Moustache come up with a way to reverse routes? It's getting unruly to call routes with "/foo/bar" and I can't think of a way to reverse routes without named routes (which moustache doesn't support) |
| 20:17 | brehaut | pablo_ns: i havent seen one. its quite a hard problem as any ring handler could be the RHS of a route, which means it might not be a moustache app thus not necessarily going to be reversable. I've just used a multimethod myself |
| 20:18 | cemerick | what's a sane way to run a shell command (that includes piping, etc)? |
| 20:18 | cemerick | I could pull in stevedore or something, but it seems like this should be easier than it appears... |
| 20:19 | emezeske | cemerick: Raynes' "conch" looks pretty cool |
| 20:19 | Raynes | cemerick: conch should be able to do everything you need. If not, send me a pull request. |
| 20:20 | pablo_ns | brehaut: thanks for the insight. Can you share a snippet of how you're using a multimethod in this way? |
| 20:21 | brehaut | pablo_ns: sure. its particularly easy for me because my site uses couchdb and all my documents have :type keys, so i just have a multi switching on type and then the implementation of the methods unpacks the appropriate values |
| 20:21 | brehaut | pablo_ns: its not especially elegant ;) |
| 20:22 | pablo_ns | I've searched high and low on github and past discussions for some code that does that, but everyone seems to call routes by hand (strings |
| 20:22 | cemerick | Raynes, emezeske: thanks, I'll keep it in mind. I managed to eliminate the piping, so c.j.shell/sh works now. |
| 20:22 | brehaut | pablo_ns: https://refheap.com/paste/2203 |
| 20:23 | brehaut | pablo_ns: make-url just creates a fully qualified url from the fragments provided (interposes slashes) and prefixes the domain and scheme |
| 20:25 | livingston | is there any way to set the value of a dynamic var to be a function that will be defined later? I tried (declare foo) (def ^:dynamic *my-foo* foo) (defn foo ...) but that doesn't seem to work? |
| 20:25 | hiredman | (declare ^:dynamic foo) |
| 20:26 | pablo_ns | brehaut: Humm, I thought about something like that, but using metadata. Thanks for the snippet! |
| 20:26 | brehaut | pablo_ns: no problem. i do think its a problem that does need to be solved, and ideally in a way tat works across ring libs |
| 20:26 | livingston | hiredman: really? make the function itself dynamic too, weird |
| 20:26 | hiredman | livingston: I don't think you understand what you are doing |
| 20:27 | livingston | oh you're just saying let people bind over the function itself yeah, that's not what I really want.. |
| 20:28 | livingston | in binding over *my-foo* I might still want to do something in terms of foo, if I bind over foo to do something in terms of foo, that seems ugly |
| 20:29 | pablo_ns | brehaut: Yes. I don't think my models should know how to assemble their URLs, but so far that is the only sane way that I've seen. |
| 20:29 | livingston | hiredman: I was just trying to keep all my globals at the top of the file, so I wanted to forward declare a function name. |
| 20:32 | brehaut | pablo_ns: yeah, the models themselves shouldnt know how to reverse their urls, hence using a multi |
| 20:33 | brehaut | pablo_ns: you could potentially use a protocol if you are using records (im not) |
| 20:33 | brehaut | but its still a half solution |
| 20:34 | seancorfield | arohner: you around? Q about lein-daemon |
| 20:34 | arohner | seancorfield: yeah, I'm here |
| 20:35 | bsteuber | ibdknox: almost 10% within the first two hours should give you some confidence |
| 20:35 | pablo_ns | brehaut: sorry, I was actually loud thinking about my solution before I saw your snippet =) |
| 20:36 | brehaut | oh right :) |
| 20:36 | ibdknox | bsteuber: Still skeptical, we'll run out of excited people soon enough ;) Those are the ones who jumped in that quickly. |
| 20:36 | yoklov | hm, so am I really the only one who has the google closure compiler crash on them _all the time_ while doing lein cljsbuild auto? |
| 20:36 | ibdknox | yoklov: seriously never had it happen |
| 20:36 | yoklov | its extremely common for me. |
| 20:36 | yoklov | more than 2 hours open and it will probably happen. |
| 20:37 | bsteuber | ibdknox: I'd rather assume you'll have to figure out soon what to support after python ^^ |
| 20:37 | ibdknox | :) |
| 20:37 | ibdknox | Ruby probably |
| 20:37 | ibdknox | although with mono's stuff I could take on VS ;) |
| 20:37 | bsteuber | btw. is cljs already included when you say clojure? |
| 20:37 | ibdknox | yeah |
| 20:37 | emezeske | yoklov: Never had the closure compiler crash on me |
| 20:38 | bsteuber | cool |
| 20:38 | yoklov | emzeske: yeah, it runs out of memory |
| 20:38 | yoklov | emezeske* |
| 20:38 | bsteuber | paredit would be next on my list then ^^ |
| 20:38 | ibdknox | bsteuber: hopefully in a little bit I'll get it to the point where I can program it in itself, so it'll need CLJS |
| 20:38 | bsteuber | makes sense :) |
| 20:38 | seancorfield | arohner: thanx... two Qs in fact... when I run lein daemon start :something I sort of expected it to fork it in the background and return to the command prompt |
| 20:38 | emezeske | yoklov: Interesting... |
| 20:38 | pablo_ns | idbknox: Just make it clj-only and let the lesser languages drool over it wiht jealousy =) |
| 20:38 | ibdknox | bsteuber: I was thinking about using that as a hiring project actually |
| 20:38 | emezeske | yoklov: Have you tried setting lein's java options with a higher heap size? |
| 20:38 | seancorfield | arohner: is that just my misunderstanding? and it's more like lein run in that way? |
| 20:39 | seancorfield | arohner: also, where do stdout / stderr go? |
| 20:39 | arohner | seancorfield: it waits for the pid file to show up, then exits |
| 20:39 | yoklov | emezeske: no, I haven't, thats a good idea. |
| 20:39 | arohner | seancorfield: though I'm pretty sure it's not functional on lein2 yet |
| 20:39 | yoklov | emezeske, the thing is that I don't even have it doing any optimizations |
| 20:39 | ivan | Compiler needs hundreds of megs |
| 20:40 | arohner | seancorfield: re stdout/stderr, that's a good question. I typically just use logging. |
| 20:40 | seancorfield | i'm still on lein1... but it's just sitting there after start the process... hasn't exited |
| 20:40 | emezeske | yoklov: Actually, I'm not sure if the JVM memory options would be carried from your project.clj into the lein cljsbuild options |
| 20:40 | seancorfield | but it created the pidfile fine |
| 20:40 | emezeske | yoklov: I should look into that. |
| 20:40 | bsteuber | ibdknox: you mean the first person to build paredit into codemirror will get hired? ^^ |
| 20:41 | ibdknox | haha no, but it's a good proof that that person could be hired :) |
| 20:41 | ibdknox | ability is only one side of the equation, personality and fit is super important in small very quick moving teams |
| 20:42 | bsteuber | sure - I'm afraid I don't have time at this point anyways ^^ |
| 20:42 | bsteuber | besides living in Europe |
| 20:42 | muhoo | that means a high probability the hires will come from #clojure |
| 20:43 | emezeske | yoklov: https://github.com/emezeske/lein-cljsbuild/issues/82 |
| 20:43 | arohner | seancorfield: oh, right. I close stdout and stderr. I don't remember why exactly, but it has to do with daemonizing properly |
| 20:43 | ibdknox | muhoo: I'm actually trying to convince a couple of the guys I used to work with at MSFT to join. They're some of the best programmers I've ever met. |
| 20:44 | seancorfield | arohner: ok, that answers that question - and i am using logging so i can get at things that way |
| 20:44 | arohner | seancorfield: if you add :debug true to the value in your daemon map, it won't close the descriptors, which may aid debugging |
| 20:44 | seancorfield | arohner: even after lein daemon stop :something, the original lein daemon start... invocation still just sits there |
| 20:44 | bsteuber | I actually think this might be the long-awaited Clojure killer app |
| 20:44 | seancorfield | arohner: 'k i'll try that |
| 20:45 | bsteuber | but we'll see ^^ |
| 20:45 | arohner | seancorfield: i.e. :daemon {"foo" {:ns foo.bar :debug true}} |
| 20:45 | yoklov | emezeske: hm, yeah that seems about right |
| 20:46 | arohner | seancorfield: looks like the lein process waits 5 minutes for the pid to show up |
| 20:46 | yoklov | emezeske: Though wouldn't other people get the same issue if it's not user configurable at all |
| 20:46 | emezeske | yoklov: Could be java/system version differences, e.g. maybe your default heap size is low for some reason? |
| 20:46 | seancorfield | arohner: with :debug true i see the stdout output of my task but no indication why the lein process does not exit - i'm using a relative pid file path, just :pidfile "myproc.pid" |
| 20:46 | muhoo | ibdknox: good point, if you've worked with them before especially |
| 20:47 | emezeske | yoklov: Or maybe your project requires more memory from the closure compiler for some reason? |
| 20:47 | yoklov | emezeske: Maybe, but it's set to only do whitespace optimizations |
| 20:47 | seancorfield | and if i ^C the lein daemon start command after i see my task is running, it kills my task (as well as lein daemon start...) |
| 20:48 | seancorfield | arohner: this is on mac os x lion, btw |
| 20:48 | arohner | seancorfield: oh, what's your lein version? |
| 20:48 | arohner | 1.7.x? |
| 20:49 | seancorfield | arohner: yeah, 1.7.1 |
| 20:49 | emezeske | yoklov: Yeah, it seems very weird. Just a guess on my part, could be totally wrong ! |
| 20:49 | livingston | is there any way to make one namespace completely mirror the contents of one or more other namespaces? for example, if I have functions foo/fn1 and bar/fn2 I want to have baz namespace setup such that I can call baz/fn1 and baz/fn2 ? |
| 20:49 | yoklov | emezeske: yeah, and if it makes any difference I use mac os x lion too. I've never had the patience to run auto on advanced optimizations for any length of time. |
| 20:49 | arohner | seancorfield: actually, I think it's broken there too. :-(. I'm on 1.6.1.1 |
| 20:49 | emezeske | yoklov: cool, thanks |
| 20:50 | seancorfield | arohner: ah, so i'm doomed then? |
| 20:50 | arohner | seancorfield: I think so. Sorry. I haven't looked into what changed yet |
| 20:51 | yoklov | just to be sure I'm not an idiot, "com.google.javascript.jscomp.mozilla.rhino" seems like a google closure compiler package right? |
| 20:52 | seancorfield | arohner: 'k guess i'll put my ticket back into the backlog then :) (my world singles ticket to investigate lein-daemon) |
| 20:53 | kovasb | livingston: I believe its possible to programmatically manipulate the namespace mappings |
| 20:53 | devn | good evening fellow clojuriants |
| 20:53 | devn | Hail and well met! |
| 20:54 | livingston | kovasb: yeah, I could just grab all the symbols and re-intern them in the new ns - I was just hoping there was something as nice as "use". |
| 20:55 | kovasb | livingston: i'd look at the chapter on namespaces in joy of clojure |
| 20:55 | amalloy | livingston: it's something you're not really encouraged to do |
| 20:55 | emezeske | yoklov: I think si, yeah |
| 20:55 | amalloy | but various people love to do it, and potemkin probably has the basic tool you want |
| 20:56 | livingston | amalloy: I know - it's a connivence thing. I'm trying to set up a shorthand namespace for use with some manual data entry. |
| 20:56 | amalloy | $google clojure potemkin |
| 20:56 | lazybot | [ztellman (Zach Tellman) · GitHub] https://github.com/ztellman |
| 20:56 | amalloy | github's seo is so awful |
| 20:56 | yoklov | emezeske: Yeah, mozilla.rhino is in that one but com.google.javascript.jscomp seems fairly closure compilery. I posted a stacktrace on that issue, should it help, by the way. |
| 20:57 | emezeske | yoklov: thanks! |
| 20:59 | yoklov | emezeske: no problem, if you want to know anything else i can answer it, that's just all I could think of |
| 21:00 | livingston | amalloy: thanks that might be what I"m looking for... still digging into it. |
| 21:05 | devn | ibdknox: maybe this is an obvious question, but how close to functional was your demo? It seemed like you had something already working? Is that way off? |
| 21:10 | yoklov | how do you guys combat growing arglists? |
| 21:10 | brehaut | keyword args or maps |
| 21:11 | yoklov | already doing that |
| 21:11 | brehaut | (sometimes anyway) |
| 21:11 | yoklov | same size, just destructured |
| 21:11 | brehaut | but it lets you group args together, which means the prcessing of them can be handled by a seperate function |
| 21:12 | yoklov | hm |
| 21:12 | brehaut | (because lots of args often is a symptom of a function doing more than 1 thing) |
| 21:14 | yoklov | yeah, i agree. Right now I'm trying to refactor a terrible blob of a function into more managable pieces, and I can't think of how to do it without passing lots of args |
| 21:17 | yoklov | to make it even more difficult, I can't break things up to operations on sequences because it needs to be fast. |
| 21:17 | yoklov | blargh. |
| 21:32 | ibdknox | devn: it worked but it was a bit of a mess and missing some of the really simple things... like saving :) |
| 21:35 | tufflax | Does anyone know what's wrong with this? http://codepaste.net/w5idc1 |
| 21:36 | tufflax | That error message is a bit cryptic |
| 21:36 | septomin_ | that's a strange-looking destructuring |
| 21:37 | tufflax | I think it's supposet to be fine though :p |
| 21:37 | tufflax | supposed* :p |
| 21:38 | septomin_ | what's the point of [& dests] there? |
| 21:38 | septomin_ | isn't it just equivalent to dests? |
| 21:39 | tufflax | yes, you are right |
| 21:39 | tufflax | but still... :P |
| 21:40 | tufflax | the error persists |
| 21:41 | emezeske | tufflax: You might want to give an example of the inputs passed to your function. |
| 21:41 | tufflax | yes ok |
| 21:42 | tufflax | or |
| 21:42 | tufflax | The error results when I try to compile it |
| 21:42 | tufflax | but yes, i can get some supposet input |
| 21:42 | tufflax | d |
| 21:43 | xeqi | works when I paste it in a repl |
| 21:43 | emezeske | Well, the example input might help explain what you're trying to do |
| 21:43 | amalloy | it compiles fine when anyone else compiles it, so i suspect your error is in your environment, or in your ability to match line numbers up |
| 21:43 | tufflax | hm |
| 21:48 | tufflax | Hm, I copied and pasted from codepaste and now it works, vim must have been playing tricks with me. :p |
| 21:49 | septomin_ | some weird character in the source? |
| 21:49 | tufflax | possibly, but i tryied :set list |
| 21:50 | tufflax | tried :P |
| 21:51 | septomin_ | personally i don't trust any character over 127 |
| 22:05 | kovasb | i don't trust any character over 30 |
| 22:13 | Lajla | kovasb, but do you trust 30 in symbols? |
| 22:24 | mebaran151 | I'm interacting with the Salesforce web service and would like individual steps in transaction to automatically check if they need to refresh their login token automatically (ie. try action against a set Salesforce environment and if you get an unauthorized access exception, refresh the login token and the connection environment) |
| 22:24 | mebaran151 | to me, it seems like this would be a good fit for something adapted from a state monad |
| 22:25 | mebaran151 | anybody here have much experience with the Clojure monad package and could comment if this idea would be overengineered |
| 22:27 | brehaut | mebaran151: it would probably work nicely. depending how you are writing and composing operations it could be over engineered compared to just closing over an atom |
| 22:28 | brehaut | but the way you have described it (and my limited knowledge of the salesforce api) it sounds like a fit |
| 22:28 | mebaran151 | good chance for me to play with the algo.monad library too |
| 22:29 | brehaut | yup |
| 22:29 | mebaran151 | my other idea was to just use a higher order function that took a bunch of salesforce related closures as the steps |
| 22:30 | mebaran151 | but then I didn't have a good way to pass state between them without some clumsy global |
| 22:30 | brehaut | state-m is just doing that with some mechanical sugar to reduce the burden of passing crap everywhere |
| 22:30 | S11001001 | mebaran151: I missed all but the last two lines, but sounds like you want a fold, or indeed, a state traversal |
| 22:31 | S11001001 | setting aside monads, fold is the primitive functional list traversal in the same way that foreach is the primitive imperative list traversal |
| 22:33 | kovasb | isn't foreach more equivalent to map |
| 22:33 | brehaut | for is equive to mapcat |
| 22:33 | tufflax | I'm gonna win the code golf at the lab presentations. I love Clojure. :) |
| 22:34 | brehaut | tufflax: only if nobody else know APL ;) |
| 22:34 | tufflax | hehe i dont think they do |
| 22:34 | tufflax | everyone's gonna use java |
| 22:34 | brehaut | bahaha |
| 22:34 | brehaut | you cant play golf with java :P |
| 22:36 | S11001001 | kovasb: for in clojure is like mapcat; for-each in scheme, mapc in lisp, each in ruby are the "foreach" I mean |
| 22:38 | S11001001 | or doseq in clojure |
| 22:39 | mebaran151 | does state-m use an atom? |
| 22:39 | S11001001 | no |
| 22:39 | brehaut | mebaran151: http://brehaut.net/blog/2010/welcome_to_the_machine |
| 22:40 | brehaut | (toot toot) |
| 22:40 | mebaran151 | I'd normally just do a higher order function but for two things: 1) I want the functions to share a result set in a given set of actions/queries and 2) that I can thread in some login and environmental boilerplate in between |
| 22:40 | mebaran151 | brehaut: pretty blog :) |
| 22:40 | brehaut | thanks :) |
| 22:41 | mebaran151 | I like playing with Haskell, but I've never really gotten to anything big |
| 22:42 | mebaran151 | I'm thinking you could probably emulate something similar with reduce over a list of functions actually |
| 22:42 | brehaut | mebaran151: apologies about the quality of the writing on that, its not my best use of english |
| 22:42 | brehaut | mebaran151: basicly state-m just hides the state tracking inside a bunch of function calls so that you dont have to worry about it unless you need it |
| 22:43 | mebaran151 | any advantage to the monadic approach compared to say (reduce #(do (refresh-salesforce) (%1 %2)) function-list) |
| 22:44 | brehaut | mebaran151: if you have a number of operations and want to intermediate the context passing, and allow ad hoc composition at a later date, then state-m is probably what you want. if you just want to roll over a list of functions and dont mind explicitly passing the context state in and out, then reduce is fine |
| 22:44 | mebaran151 | I'd prefer the former I think |
| 22:44 | brehaut | mebaran151: the magic of state-m is that it is pure functional, but hides the state variable |
| 22:45 | mebaran151 | well I essentially have two states, the state of my sales env (what environment to connect to, etc) and the results my last function returned, though the return really isn't state is it |
| 22:45 | brehaut | mebaran151: you might also find http://www.clojure.net/2012/02/10/State/ useful |
| 22:46 | brehaut | correct |
| 22:46 | brehaut | if you need to track more than one thing in state-m you need to stuff it into a vector of map |
| 22:47 | mebaran151 | the cleanest api would look something like (dosalesforce [res (query x) res2 (query res1)]) |
| 22:47 | brehaut | that would be trivial |
| 22:48 | mebaran151 | between res1, and res2, I'd make sure I fulfilled all the SF nonsense |
| 22:48 | brehaut | you could either do that by writing a salesforce monad that is like a state-m but does that checking in m-bind |
| 22:48 | mebaran151 | trying the action, retrying after a refresh if salesforce kicked me out |
| 22:48 | brehaut | or write a decorate for your query functions on top of state-m |
| 22:49 | mebaran151 | I was just about to consider a decoration macro, but it feels cleaner in the bind function |
| 22:49 | brehaut | big old bag of it-depends |
| 22:49 | brehaut | personally, i'd start with the decorators |
| 22:49 | mebaran151 | also since the decoration is all about the state of environment, I'd probably have to put it in the bind |
| 22:50 | brehaut | whenever i use monads, i try to a) use an existing monad where possible, b) use it as internal mechanics rather than exposing it as the API |
| 22:51 | brehaut | right; if your queries never want to know about the state of the salesforce nonsense, then by all means, put it in m-bind |
| 22:51 | mebaran151 | because basically I'm saying try using the old environment first, and if you get a failure response, refresh the environment state and try to again |
| 22:51 | mebaran151 | the queries should never want to know the login information, ever |
| 22:51 | brehaut | oh then |
| 22:51 | brehaut | s/oh/ok/ |
| 22:52 | brehaut | one question |
| 22:52 | brehaut | are you going to want to be able to define a salesforce function in one place and use that in another saleforce function somewhere else? |
| 22:52 | mebaran151 | I would also like some magic destructuring too if possible within the monad at each step ideally, though I'm not familiar enough with the monad interfaces to know if that's unrealistic |
| 22:52 | brehaut | (ie, are the queries you mentioned earlier also 'dosalesforce' things?) |
| 22:53 | mebaran151 | I'd prefer them not to be |
| 22:53 | mebaran151 | though they could be |
| 22:53 | brehaut | if thats the case, then monads might be too heavy handed |
| 22:53 | mebaran151 | they could be dosalesforce things theoretically |
| 22:54 | mebaran151 | I'd assume within each query-fn, that it's environment would be essentially safe, though for a big long task, it might be nice to compose them |
| 22:55 | brehaut | ibdknox: lol, PHP support requested already. that'd have to be one hell of a stretch goal |
| 22:56 | kovasb | Facebook should drop 200k just for that |
| 22:56 | mebaran151 | I suppose practically my interface looks a lot like a with macro really, that just makes sure the with stays nice and open and optionally logouts out at the end |
| 22:57 | brehaut | mebaran151: yeah. monads (if you were familiar with them already) would make it trivial to implement (or prototype) but might be overkill otherwise |
| 22:58 | mebaran151 | I was thinking this felt like the first place in some code I was writing that they really clicked |
| 22:58 | brehaut | if it looks like a let, and has magic between the binding pairs, then a monad probably makes it easier, yes |
| 22:59 | mebaran151 | exactly |
| 23:01 | mebaran151 | actually the more I consider it, I'd ideally like more, where in I had a magic HTTP post that was state aware and knew to include the authorization token |
| 23:02 | mebaran151 | so these actions are starting to look a lot more like they'd each have to be modeled as a dosalesforce to make sense |
| 23:18 | kovasb | nathanmarz: cloning right now :) |
| 23:47 | kovasb | nathanmarz: do i just use serializable.fn into my namespace? |