2010-11-26
| 02:19 | Lajla | Chousuke, ajattelet että olen kanavahullu, kylläkö? =( |
| 03:10 | LauJensen | Morning all |
| 03:15 | mduerksen | Morning. Good to see I'm not the only one in a europian timezone :) |
| 03:31 | sthuebner | mduerksen: no, you're not ;-) |
| 04:21 | mduerksen | sthuebner: german, right? |
| 04:23 | LauJensen | mduerksen: thats Herr Huebner to you :) |
| 04:26 | AWizzArd | There are several germans here, mduerksen |
| 04:26 | AWizzArd | Some of them btw in #Clojure.de too (: |
| 04:29 | bartj | is there any advantage to returning multiple values from functions |
| 04:29 | mduerksen | Oh wow, I didn't realize there was another channel for germany! :) |
| 04:30 | bartj | also, can someone please confirm that Clojure does not support returning multiple values from functions |
| 04:34 | mduerksen | bartj: what do you mean exactly by multiple values? A function can return a tuple of values, of course |
| 04:35 | bartj | mduerksen, I mean in Perl, Python you can do something like a,b = func(c) |
| 04:35 | bartj | mduerksen, of course, you can return a tuple of values |
| 04:36 | bartj | I was just curious to know why some languages support it specifically |
| 04:36 | bartj | also, if it was not possible for languages which treat functions as first class objects |
| 04:38 | timrod | bartj, if you do a,b = func(c) in python, func returns a tuple which is "destructured" into a and b |
| 04:38 | mduerksen | bartj: well, similar to your perl example, you could write something like this: (let [a b] (func c)) |
| 04:38 | _ato | need an outer vector for the let: (let [[a b] (func c)] ...) |
| 04:38 | _ato | but yeah, that's virtually exactly the same as what python is doing |
| 04:38 | mduerksen | _ato: thanks |
| 04:40 | bartj | hmm, so you have to explicitly destructure it in Clojure, right ? |
| 04:40 | _ato | huh? not more than you have to do with Python |
| 04:40 | timrod | yes, just like you have to in python (and afaik in perl, but I'm not sure) |
| 04:43 | _mst | are you thinking multiple return values ala common lisp? |
| 04:43 | _ato | perhaps perl is weirder, due to the contexts stuff, but the principle is the same isn't it, you're just returning an array and then destructuring it? |
| 04:45 | bartj | _mst, I am afraid, I don't know CL |
| 04:45 | bartj | ok thanks, guys |
| 04:45 | _mst | common lisp's slightly different in how it handles multiple return values, in that if you're not interested in anything but the first one you can just pretend the others don't exist |
| 04:46 | _ato | how do you get at the other values? |
| 04:46 | _mst | for instance (setq foo (gethash :somekey my-hash)) would just bind the value taken from the hash to that var |
| 04:46 | _mst | if you want the other values things start to look an awful lot like destructuring:) |
| 04:47 | _mst | except usually you wouldn't bother, because you'd have to type multiple-value-bind and by the time you've finished typing that out you've generally lost interest... |
| 04:47 | _ato | ah, so it's a special purpose "let" for multiple return values? |
| 04:47 | _mst | yup |
| 04:47 | _ato | ick |
| 04:55 | sthuebner | mduerksen: yepp, german ;-) |
| 04:58 | Derander | I want to learn ocaml |
| 04:59 | Derander | sorry, random. |
| 05:07 | samx | If a specify a keyword in a namespace, like: (ns my.long.namespace) (def a { ::foo 10 }).. And then try to use it from another namespace with using an :as, such as: (ns my-namespace (:require [my.long.namespace :as mln])) (:mln/foo mln/a).. That does not seem to work, so that I'll have to do (:my.long.namespace/foo mln/a).. Can I get the one using a namespace alias to work somehow? |
| 05:10 | _ato | samx: try ::mln/foo |
| 05:10 | samx | thx |
| 05:11 | _ato | :: means resolve in current namespace (which includes resolving aliases) |
| 06:12 | sandGorgon | hi guys.. i was looking for solutions on how to recur on exception and I found this http://stackoverflow.com/questions/1879885/clojure-how-to-to-recur-upon-exception - I dont get why you need the macro. You can make do with the function only right ? |
| 06:22 | Tordmor | sandGorgon: The macro is there to wrap the passed form(s) into a function call. You'd have to do that yourself without it. So you can do without the macro only in so far as you could do without any macro. |
| 06:25 | sandGorgon | Tordmor, by passed form - do you mean the "body" that needs to be executed ? I'm still a little unclear on what the macro is wrapping and how |
| 06:25 | Tordmor | yes |
| 06:26 | sandGorgon | so if the body was, in fact, a function - then you dont need a macro. right ? |
| 06:29 | Tordmor | yes |
| 06:29 | sandGorgon | thanks |
| 07:45 | jegb | I use leiningen, emacs, and slime for compojure development. I use 'lein swank' from the console, and connect from emacs. This works fine. However, when I get an exception, the stack trace goes in the console. I would obviously like to get it in a slime debug buffer (sldb), so that I can inspect the frames, etc. How do I do this? |
| 07:46 | bartj | I need to show the complete stack-trace of tail-recursive calls to my colleague |
| 07:46 | bartj | this example from http://stackoverflow.com/questions/33923/what-is-tail-recursion is very appropriate |
| 07:46 | bartj | but, it is in python; can I do the same in Clojure |
| 07:47 | bartj | I mean show that the intermediate variables are not all stored on the stack! |
| 07:52 | bartj | oh well, I found the scheme explaination on the same page - http://stackoverflow.com/questions/33923/what-is-tail-recursion/33931#33931 much better |
| 07:53 | bartj | thanks |
| 08:43 | sandGorgon | a functional programming question - two functions need to be called one after the other (second doesnt use the return value of first, insofar as that is simply a status that the first function has successfully executed). Would you use "do" ? |
| 08:44 | stuartsierra | yes |
| 08:44 | stuartsierra | But remember that most forms like fn, defn, and let all have an "implicit do" |
| 08:45 | opqdonut | that's not functional programming ;) |
| 08:45 | stuartsierra | true |
| 08:46 | mduerksen | nonetheless required from time to time :) |
| 08:49 | mduerksen | sandGorgon: you should always be aware of which form have an "implicit do" and which don't. I already fell into that trap with "if" |
| 08:51 | sandGorgon | mduerksen, trap with an "implicit do" ? you mean you assumed "if" had one ? |
| 08:53 | mduerksen | sandGorgon: yes, i had used an "if" without using the else form, then added some code afterwards that i wanted to be evaluated as well. that's where i discovered the "when" macro ;) |
| 08:53 | sandGorgon | ah... thanks guys |
| 08:53 | mduerksen | you should use "when" if you don't need the else form |
| 08:54 | sandGorgon | yup.. figured that one out |
| 09:36 | Guest18523 | clojure? long-polling? comet? |
| 10:13 | serp__ | how do I remove an element from a set? |
| 10:14 | AWizzArd | serp__: disj |
| 10:14 | AWizzArd | ,(disj #{10 20 30} 30) |
| 10:14 | clojurebot | #{10 20} |
| 10:14 | serp__ | tyvm |
| 10:21 | pppaul | can i use curl in clojure? |
| 10:22 | stuartsierra | libcurl the library or curl the command-line program? |
| 10:27 | pppaul | libcurl |
| 10:27 | pppaul | or the commandline too |
| 10:27 | pppaul | tool |
| 10:28 | pppaul | i guess libcurl would be preferred |
| 10:29 | cemerick | stuartsierra: morning :-) |
| 10:30 | cemerick | We're good to go on hudson; I'm about to start my writeup of the whole process and the outstanding policy / process issues. |
| 10:30 | cemerick | Do you have any open questions/issues on the clojure + classic contrib builds? |
| 10:32 | stuartsierra | morning |
| 10:32 | stuartsierra | I just pushed updates to "classic contrib" that builds from the base POMs. |
| 10:33 | stuartsierra | What about providing for "alternate path to clojure.jar" in the contrib base pom? |
| 10:34 | cemerick | right, right |
| 10:35 | cemerick | stuartsierra: You'll want to use >= 0.0.20 of the pom.oss-deploy POM, and take a look at the hudson configuration in the build.poms job. The post-maven build step + disabling the maven release plugin's auto-push prior to the nexus deploy is a must-have IMO. |
| 10:38 | stuartsierra | I used pom.contrib as the parent of clojure-contrib/modules/parent |
| 10:39 | serp__ | I have a function (f [x y]) I want to do (f (f (f (f a p) q) r) s). is there a "better" way to do this than with reduce? |
| 10:40 | magnet_ | serp__, of teeworlds? :) |
| 10:40 | stuartsierra | serp__: reduce *is* the better way |
| 10:40 | serp__ | magnet_: maaaybe :S |
| 10:40 | magnet_ | serp__, small world |
| 10:40 | magnet_ | :) |
| 10:40 | serp__ | :P |
| 10:42 | stuartsierra | cemerick: Just pushed contrib/modules/parent/pom.xml with parent pom.contrib:0.0.19 |
| 10:43 | cemerick | right, sorry, 0.0.20 is the current snapshot |
| 10:45 | stuartsierra | updating config in hudson now to match build.poms |
| 10:47 | pppaul | hey, can someone tell me if libcurl is in clojure? |
| 10:47 | abedra | stuartsierra: you know we decided yesterday that anyone who breaks the build has to sort out and eat the butter popcorn jelly beans at the office |
| 10:48 | serp__ | stuartsierra: all right thanks |
| 10:48 | stuartsierra | abedra: I don't break builds, I break heads. |
| 10:49 | abedra | stuartsierra: me email says that you have to eat the butter popcorn AND the black licorice ones |
| 10:49 | kryft | Oo, black licorice |
| 10:49 | abedra | s/me/my |
| 10:49 | abedra | :) |
| 10:51 | cemerick | stuartsierra: does this look right? https://gist.github.com/c9a316b66f78e4a9cbef |
| 10:51 | stuartsierra | pppaul: libcurl is written in C, you can call it from Clojure if you have JNI or JNA bindings to it |
| 10:51 | stuartsierra | cemerick: there's more to it than that |
| 10:51 | stuartsierra | hang on |
| 10:52 | stuartsierra | cemerick: https://github.com/clojure/clojure-contrib/blob/60e7162a5a29615cae3e6d494a3653c34b6ddb66/modules/parent/pom.xml#L60 |
| 10:53 | cemerick | stuartsierra: what's the why the default profile dep instead of just having the clojure dep with a parameterized version in the top-level deps? |
| 10:55 | stuartsierra | cemerick: as I recall, that was how I tried to do it the first time. It didn't work. |
| 10:55 | stuartsierra | I think if you want to override the dep in a profile, that dep has to be part of a profile to begin with. |
| 10:59 | stuartsierra | cemerick: Any idea what this means? http://build.clojure.org/job/clojure-contrib/275/console |
| 10:59 | stuartsierra | It says "You can't push to git://github.com/richhickey/clojure-contrib.git" but that isn't configured anywhere as the repo. |
| 11:00 | stuartsierra | oh, wait, it is set wrong... |
| 11:01 | cemerick | stuartsierra: first, that should be a POST build step, not pre |
| 11:02 | cemerick | stuartsierra: it's trying to push @ richhickey/contrib.git because that's origin in the hudson job's workspace. |
| 11:03 | cemerick | I strongly suggest checking off "Wipe out workspace" in the Advanced section of the job's SCM config area. |
| 11:04 | stuartsierra | cemerick: ok, trying again |
| 11:06 | cemerick | stuartsierra: We have a general hudson configuration problem. Getting everything we want on every job is going to be a PITA, nevermind sane change mgmt over time. |
| 11:07 | cemerick | I don't have any solutions on that topic at the moment. I was hoping for a baseline-hudson-job-config plugin or somesuch, but haven't found one yet. |
| 11:08 | stuartsierra | Yeah, that's annoying. |
| 11:09 | stuartsierra | For now we'll just have to get one right and make sure to copy that config everywhere. |
| 11:10 | stuartsierra | Making sure old projects are kept up-to-date will be the hard part. |
| 11:12 | cemerick | stuartsierra: yeah; we've only 2 jobs that are OSS-capable so far, and it's already irritating. |
| 11:12 | stuartsierra | ok, updated clojure-contrib Hudson config, failed for a different reason |
| 11:13 | stuartsierra | http://build.clojure.org/job/clojure-contrib/277/console |
| 11:13 | cemerick | I saw. |
| 11:14 | cemerick | stuartsierra: I'm not clear on what actually failed. |
| 11:15 | stuartsierra | cemerick: "Authentication failed: The host was not known and was not accepted by the configuration: build.clojure.org" |
| 11:15 | stuartsierra | but what does that mean ? |
| 11:15 | cemerick | right, that's what I mean, I don't understand that. |
| 11:15 | cemerick | stuartsierra: is this the first time you've tried deploying a snapshot to OSS for contrib? |
| 11:16 | stuartsierra | ah |
| 11:16 | stuartsierra | wait |
| 11:16 | stuartsierra | the top-level contrib POM has a <repository> |
| 11:17 | cemerick | Shouldn't all of the deployments failed if that's the problem? |
| 11:17 | stuartsierra | cemerick: no, because they inherit from modules/parent, not the top-level pom |
| 11:17 | cemerick | ah |
| 11:18 | cemerick | stuartsierra: FYI, IIUC, the groupId must be org.clojure. That's what our creds have privs to release (perhaps that doesn't apply to snapshots). |
| 11:19 | stuartsierra | oh piffle |
| 11:19 | stuartsierra | That probably means changing the artifactId of every module. |
| 11:20 | cemerick | stuartsierra: Maybe I'm wrong; but if so, then we'd be able to deploy releases of other projects' artifacts... |
| 11:20 | stuartsierra | right… unless it's a prefix match |
| 11:20 | stuartsierra | doubtless that's too much to hope for |
| 11:21 | cemerick | We need to set up a dummy project for testing deployments and such. I've been using build.poms for that, but that's got to end. |
| 11:21 | stuartsierra | Good point. |
| 11:21 | cemerick | We should set up a project and hudson job just for stuff like experimenting with groupId, etc. |
| 11:22 | stuartsierra | With just enough code to test things like plugins and AOT-compilation. |
| 11:24 | serp__ | how do I change a root binding? I want to set the root binding of *out* to the *out* in the current thread |
| 11:25 | stuartsierra | (doc alter-var-root) |
| 11:25 | clojurebot | DENIED |
| 11:25 | cemerick | stuartsierra: no parent defined in the top level POM |
| 11:25 | stuartsierra | serp__: well, alter-var-root is what you want |
| 11:25 | cemerick | Dude, it's not your day. :-P |
| 11:25 | stuartsierra | yeah |
| 11:25 | stuartsierra | ok |
| 11:26 | cemerick | This is sorta water under the bridge at this point, but: why the separate parent pom, and not just point modules back at the top-level? |
| 11:27 | stuartsierra | No big reason, seemed easier at the time. |
| 11:27 | stuartsierra | Ok, take #279 |
| 11:34 | cemerick | shazam |
| 11:34 | stuartsierra | Thank you, ladies and gentlemen, I'll be here all week. |
| 11:35 | stuartsierra | N.B.: This is building on Clojure 1.2.0. Can't build on 1.3.0-master-SNAPSHOT because it's not deployed to OSS. |
| 11:36 | cemerick | right. |
| 11:36 | cemerick | One thing at a time :-) |
| 11:36 | cemerick | stuartsierra: OK, contrib pom 0.2.0-SNAPSHOT has the clojure.jar system dep. It looks good here with my local nrepl checkout. See how it fares on your end. |
| 11:36 | cemerick | I'm going to be logging off of irc in ~20 min. Ping me on email if there's an issue. Look for that process writeup later today. |
| 11:39 | stuartsierra | Will do. |
| 11:39 | stuartsierra | Heading out to lunch in a few minutes myself. |
| 11:44 | stuartsierra | cemerick: process writeup can go on the dev.clojure.org wiki |
| 11:46 | cemerick | stuartsierra: Of course. |
| 11:53 | stuartsierra | cemerick: Can't build clojure-contrib with "mvn -Dclojure.jar ..." |
| 11:53 | stuartsierra | "ClassNotFoundException: clojure.lang.Compile" |
| 11:53 | cemerick | hrm |
| 11:54 | serp__ | why is (alter-var-root *out* (constantly *out*)) wrong? |
| 11:54 | stuartsierra | cemerick: Why <dependencyManagement> in the alternate profile? |
| 11:55 | stuartsierra | Instead of just <dependencies> |
| 11:55 | stuartsierra | ? |
| 11:55 | stuartsierra | serp__: You need the Var #'*out* |
| 11:55 | serp__ | aha.. |
| 11:56 | serp__ | ty |
| 11:58 | stuartsierra | cemerick: This seems to work in the pom.contrib: https://gist.github.com/716954 |
| 12:01 | cemerick | stuartsierra: yeah, that's better -- I'm actually more confused as to why it's working as-is for me locally. |
| 12:02 | stuartsierra | yeah, dunno |
| 12:03 | stuartsierra | Try running "mvn -Dclojure.jar=… clojure:repl" and see what version string it prinst out. |
| 12:04 | cemerick | as expected, 1.1 when I use that jar… |
| 12:05 | cemerick | anyway |
| 12:05 | cemerick | stuartsierra: dep mgmt eliminated on HEAD |
| 12:06 | stuartsierra | Got it, works for me. |
| 12:09 | replaca | stuartsierra: did you see I made a couple of hacks to c.c.java-utils? |
| 12:10 | stuartsierra | replaca: no, sorry |
| 12:11 | replaca | stuartsierra: It wasn't loading right after file and as-str had been removed cause other stuff used them |
| 12:11 | stuartsierra | I'm just maintaining the build. |
| 12:11 | stuartsierra | I do not want to maintain everything else. |
| 12:11 | replaca | stuartsierra: it seems obviously like the right thing to me, so I just went ahead and did it |
| 12:11 | stuartsierra | I actually want everything else to die as quickly as possible. |
| 12:12 | replaca | stuartsierra: I second that. It's a bear now |
| 12:12 | stuartsierra | ok, I really am going to lunch |
| 12:12 | replaca | enjoy! |
| 12:26 | anonymouse89 | I'm having some trouble with clojure.xml/parse. The file I'm parsing does not have a root binding so xml/parse throws an exception. How do I get around this? Is there a way to concat InputStream's to add <root> and </root>? |
| 14:31 | jweiss_ | what exactly are variables like *print-meta* (from clojure.core ns) that i can do set! on them. but it doesn't work for anything that i create using def or defvar. |
| 14:31 | jweiss_ | ,(set! (defvar x 1) 2) |
| 14:31 | clojurebot | java.lang.Exception: Unable to resolve symbol: defvar in this context |
| 14:32 | jweiss_ | ,(set! (clojure.contrib.def/defvar x 1) 2) |
| 14:32 | clojurebot | DENIED |
| 14:32 | jweiss_ | bah |
| 14:37 | stuartsierra | Those Vars are given thread-local bindings in the REPL |
| 14:39 | jweiss_ | aha, that explains a lot |
| 15:11 | stuartsierra | BOOM: http://dev.clojure.org/jira/browse/CLJ-681 |
| 15:56 | joshua__ | How do I match just the first <div class="some_class"> with an enlive selector? |
| 15:58 | raek | (-> ... (select [:.some_class]) first) ? |
| 16:00 | raek | it might be possible to do that with just a selector, but I haven't looked very deepl into that yet |
| 16:05 | hugod | cemerick: you could always configure hudson jobs with pallet :) |
| 16:06 | patrkris | Hi folks. I've been out of the Clojure loop for a while. Tell me, has cake won over leiningen? |
| 16:06 | maacl | Is there a safe variant of read-string that will only read data (i.e. no function/macro calls)? |
| 16:06 | Raynes | patrkris: It hasn't 'won'. Leiningen is still very popular. |
| 16:07 | Raynes | patrkris: I don't think they're really competing for blood though. |
| 16:07 | Raynes | Cake has grown quite a bit though, so I definitely suggest checking it out. I use it myself. |
| 16:07 | patrkris | Raynes: I know. :) But I don't know what to choose. Maybe it doesn't matter much. |
| 16:08 | Raynes | It's really down to which feature set you like more. Just check out the READMEs and you should be able to make an informed decision. |
| 16:09 | stuartsierra | And then switch to Maven when you need it. |
| 16:09 | patrkris | Raynes: Thanks. You wouldn't happen to know about a 'repository' of cake task libraries? |
| 16:09 | joshua__ | I figured your way would work raek, but it felt wrong for there not to be built in support for it. Turns out there was. This works as I wanted: (def *project-selector* [[:.project html/first-child]]) |
| 16:09 | joshua__ | html being enlive-htim :as html |
| 16:12 | raek | ah, so it matches every element with the project class that is the first of its kind which among other project class sibling elements? |
| 16:12 | raek | my code snipped would select the first element with the project class that occurs in the document |
| 16:37 | maacl | Is there a safe variant of read-string that will only read data structures? |
| 16:40 | joshua__ | Is there a difference? |
| 16:41 | raek | joshua__: maacl's question or mine? |
| 16:42 | raek | maacl: you can disable the #= reader macro by rebinding *read-eval* |
| 16:42 | raek | maacl: (defn safe-read-string [s] (binding [*read-eval* false] (read-string s))) |
| 16:42 | joshua__ | yours |
| 16:42 | raek | ok |
| 16:43 | maacl | ah - thanks raek |
| 16:43 | raek | if element E1 and E2 has E3 as their parent element, then first-child will only select E1 in that case |
| 16:44 | raek | but if E1 and E2 are not siblings, both will be selected, I tihnk |
| 16:45 | joshua__ | <project 1><project 2></project 2><project 3></project 3></project 1> would have my code select project 2? |
| 16:47 | raek | I think so, but I haven't tested it |
| 16:47 | raek | should be fairly easy to test... one moment please... |
| 16:47 | joshua__ | I'll test it right now and get back to you. Going to test it using w3schools. |
| 16:49 | LOPP | #= ? |
| 16:49 | joshua__ | Looks like it is selecting project 1. |
| 16:50 | serp__ | I want to append sequences to eachother, but I can't find the function append.. am I doing this wrong? |
| 16:51 | joshua__ | Well, it looks like it is selecting all three of them with how css selectors work. |
| 16:51 | joshua__ | since the first one contains the other two. |
| 16:52 | LOPP | what's #= |
| 16:54 | joshua__ | Should be able to select sub-projects with something like [[:.project first-child :.project first-child]] if it maps back to css selectors, but I haven't tested it. If you ended up seeing something different let me know. |
| 16:55 | joshua__ | Everything is working for me now though. |
| 16:57 | joshua__ | `(find-doc "#=") |
| 16:59 | joshua__ | Came up with something about how it is the EvalReader. |
| 17:00 | dmart_ | #=(Integer. 12) |
| 17:00 | dmart_ | &(Integer. 12) |
| 17:00 | sexpbot | ⟹ 12 |
| 17:00 | dmart_ | it evals the stuff after the #= |
| 17:00 | dmart_ | s/stuff/form/ I guess? |
| 17:02 | LOPP | &(doc read-string) |
| 17:02 | sexpbot | ⟹ "([s]); Reads one object from the string s" |
| 17:02 | stuartsierra | #= does read-time evaluation |
| 17:03 | LOPP | really? |
| 17:03 | LOPP | how is that useful? |
| 17:03 | stuartsierra | in rare cases for data serialization |
| 17:03 | dmart_ | I've found it useful for quick serialization / reading back |
| 17:05 | dmart_ | &(str "#=(java.util.Date. \"" (.toString (java.util.Date.)) "\")") |
| 17:05 | sexpbot | ⟹ "#=(java.util.Date. \"Fri Nov 26 14:05:29 PST 2010\")" |
| 17:05 | LOPP | ok, what now? |
| 17:06 | dmart_ | if you passed that string to read-string in with read-eval true, you'd get a new Date object equal to the one printed out |
| 17:07 | LOPP | so read-string evals the string? |
| 17:08 | dmart_ | well, type it in the repl and see what happens |
| 17:08 | dmart_ | read-string is sort of analogous to eval in javascript I guess? |
| 17:09 | dmart_ | if that helps |
| 17:10 | patrkris | Raynes: is it possible to have the non-dev dependencies in the class path when invoking a custom task? |
| 17:13 | Raynes | patrkris: re cake task libraries: There is a list of plugins in the wiki on the cake github page. re non-dev dependencies: that is what bake is for, if I understand your question properly. |
| 17:13 | patrkris | Raynes: Thanks. I'll take a look at bake. |
| 17:19 | patrkris | Raynes: I looked through the wiki but didn't find an explanation of bake. Is it available anywhere? |
| 17:21 | patrkris | Raynes: Ah... it's just using bake inside your task? I'll give it a try. |
| 18:54 | jjido_ | can you generate a not-so-random sequence of numbers? i.e. a sequence that looks random but is partially sorted. |
| 19:02 | jjido_ | ,(letfn [(shuffle [s] (flatten (swap (split s (int (rand (count s)))))))] (shuffle [1 2 3 4 5 6])) |
| 19:02 | clojurebot | java.lang.Exception: Unable to resolve symbol: swap in this context |
| 19:03 | jjido_ | ,(letfn [(shuffle [s] (flatten (reverse (split s (int (rand (count s)))))))] (shuffle [1 2 3 4 5 6])) |
| 19:03 | clojurebot | java.lang.Exception: Unable to resolve symbol: split in this context |
| 19:03 | jjido_ | ,(letfn [(shuffle [s] (flatten (reverse (split-at s (int (rand (count s)))))))] (shuffle [1 2 3 4 5 6])) |
| 19:03 | clojurebot | java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.IllegalArgumentException: Don't know how to create ISeq from: java.lang.Integer |
| 19:03 | jjido_ | ,(letfn [(shuffle [s] (flatten (reverse (split-at (int (rand (count s))) s))))] (shuffle [1 2 3 4 5 6])) |
| 19:03 | clojurebot | (3 4 5 6 1 2) |
| 19:03 | jjido_ | ,(letfn [(shuffle [s] (flatten (reverse (split-at (int (rand (count s))) s))))] (shuffle [1 2 3 4 5 6])) |
| 19:03 | clojurebot | (2 3 4 5 6 1) |
| 19:04 | jjido_ | ,(letfn [(shuffle [s] (flatten (reverse (split-at (int (rand (count s))) s))))] (shuffle (range 10))) |
| 19:04 | clojurebot | (5 6 7 8 9 0 1 2 3 4) |
| 19:05 | jjido_ | how do I repeat that n times on the result? |
| 19:07 | jjido_ | ,(letfn [(shuffle [s _] (flatten (reverse (split-at (int (rand (count s))) s))))] (reduce (partial shuffle (range 10)) (range 3)) |
| 19:07 | clojurebot | EOF while reading |
| 19:07 | jjido_ | ,(letfn [(shuffle [s _] (flatten (reverse (split-at (int (rand (count s))) s))))] (reduce (partial shuffle (range 10)) (range 3))) |
| 19:07 | clojurebot | java.lang.IllegalArgumentException: Wrong number of args (3) passed to: sandbox$eval724$shuffle |
| 19:08 | jjido_ | ,(doc reduce) |
| 19:08 | clojurebot | "([f coll] [f val coll]); f should be a function of 2 arguments. If val is not supplied, returns the result of applying f to the first 2 items in coll, then applying f to that result and the 3rd item... |
| 19:08 | raek | jjido_: in what way should it be random and sorted? |
| 19:08 | jjido_ | raek: I am not very particular... |
| 19:10 | jjido_ | ,(letfn [(shuffle [s _] (flatten (reverse (split-at (int (rand (count s))) s))))] (reduce (partial shuffle) (range 10) (range 3))) |
| 19:10 | clojurebot | java.lang.IllegalArgumentException: Wrong number of args (1) passed to: core$partial |
| 19:10 | jjido_ | ,(letfn [(shuffle [s _] (flatten (reverse (split-at (int (rand (count s))) s))))] (reduce shuffle (range 10) (range 3))) |
| 19:10 | clojurebot | (3 4 5 6 7 8 9 0 1 2) |
| 19:11 | jjido_ | ,(letfn [(shuffle [s _] (flatten (reverse (split-at (int (rand (count s))) s))))] (reduce shuffle (range 10) (range 3))) |
| 19:11 | clojurebot | (3 4 5 6 7 8 9 0 1 2) |
| 19:12 | raek | jjido_: also, there is a rand-int function |
| 19:12 | jjido_ | raek: thanks |
| 19:13 | Raynes | &(sort (repeatedly 30 #(rand-int 10000000))) |
| 19:13 | sexpbot | ⟹ (38797 128400 1347904 1415320 1583404 1589076 1676210 1777652 2381785 2512796 2552871 3177841 4076783 4195345 4439859 4894263 5045857 5247199 5491817 5519674 5768961 5826224 5864209 6255536 8033027 8782210 8935694 9001985 9481409 9584555) |
| 19:13 | jjido_ | Raynes: nope that is much too sorted |
| 19:13 | Raynes | I have no clue what you're asking for anyway. ;p |
| 19:14 | raek | ,(let [[l r] ((juxt take drop) 3 (range 10))] (concat r l)) |
| 19:14 | clojurebot | (3 4 5 6 7 8 9 0 1 2) |
| 19:15 | jjido_ | raek: that is cleaner |
| 19:15 | raek | ,(let [[l r] (split-at 3 (range 10))] (concat r l)) |
| 19:15 | clojurebot | (3 4 5 6 7 8 9 0 1 2) |
| 19:15 | raek | even better. |
| 19:16 | raek | (although, in the other example I got to use juxt) |
| 19:16 | jjido_ | and for the repeat? |
| 19:16 | jjido_ | I want to shuffle again |
| 19:18 | slyrus_ | so... any good blog posts on migrating one's code to clojure 1.3? |
| 19:18 | raek | (letfn [(random-swap [coll] (let [[l r] (split-at (random-int (count coll) coll)] (concat r l)))] (nth (iterate random-swap (range 20)) 5)) |
| 19:18 | raek | ,(letfn [(random-swap [coll] (let [[l r] (split-at (random-int (count coll) coll)] (concat r l)))] (nth (iterate random-swap (range 20)) 5)) |
| 19:18 | clojurebot | Unmatched delimiter: ] |
| 19:19 | raek | ,(letfn [(random-swap [coll] (let [[l r] (split-at (random-int (count coll) coll))] (concat r l)))] (nth (iterate random-swap (range 20)) 5)) |
| 19:19 | clojurebot | java.lang.Exception: Unable to resolve symbol: random-int in this context |
| 19:19 | raek | ,(letfn [(random-swap [coll] (let [[l r] (split-at (rand-int (count coll) coll))] (concat r l)))] (nth (iterate random-swap (range 20)) 5)) |
| 19:19 | clojurebot | java.lang.RuntimeException: java.lang.IllegalArgumentException: Wrong number of args (2) passed to: core$rand-int |
| 19:19 | raek | ,(letfn [(random-swap [coll] (let [[l r] (split-at (rand-int (count coll)) coll)] (concat r l)))] (nth (iterate random-swap (range 20)) 5)) |
| 19:19 | clojurebot | (4 5 6 7 8 9 10 11 12 13 ...) |
| 19:21 | raek | jjido_: ^^ |
| 19:21 | jjido_ | raek: great! |
| 19:24 | jjido_ | huh, I need to mix in something else. The swaps tend to cancel each other quickly |
| 19:24 | raek | how curious... the swap parts operation is only "rolling" the sequence |
| 19:25 | raek | and the composition of two of those could be seen as one "swap" |
| 19:25 | jjido_ | when playing cards I also interleave to shuffle |
| 19:25 | raek | if you think of the sequence as a ring, then the sorted order will never be broken (except of the 20 -> 0 discontinouity...) |
| 19:26 | jjido_ | yes |
| 19:26 | raek | what you go here would be something that is know as a "Norwegian shuffle" in Sweden. |
| 19:27 | jjido_ | can't be good ;) ;) |
| 19:27 | raek | most probably, it is known as a "Swedish shuffle" in Norway too :-) |
| 19:28 | raek | anyway, if you modify the swap code to reverse on of the halves, it would randomize it a bit more |
| 19:28 | jjido_ | yes I just tried that |
| 19:28 | raek | (concat r l) -> (concat r (reverse l)) |
| 19:36 | jjido_ | Oh well... That was to test a sorting algorithm. My optimisation does not help much more with partially sorted data as compared to random. Kind of bad. |
| 19:45 | slyrus_ | technomancy: around? |
| 19:54 | raek | does someone recall how to make swank-clojure listen for only one connection and then stop listening? |
| 19:55 | Raynes | raek: Doesn't not passing dont-close do that? However, that would be the default. |
| 19:57 | raek | no, but it used to, I think... |
| 19:57 | raek | now I can connect to the same port multiple times |
| 19:57 | raek | (and to my friend's swank server too) |
| 19:58 | raek | since I'm not alone on my server, I thought it might be time to tighten up the security... |
| 19:59 | raek | hrm... is there any stop-repl fn in swank-clojure? |
| 20:08 | raek | the source of the current version of swank-clojure does not contain "dont-close" at all... :/ |
| 20:13 | slyrus_ | ,(case nil nil 3) |
| 20:13 | clojurebot | java.lang.NullPointerException |
| 20:14 | slyrus_ | huh? |
| 20:21 | raek | ,(case nil 1 2) |
| 20:21 | clojurebot | java.lang.IllegalArgumentException: No matching clause: |
| 20:21 | raek | weird |
| 20:27 | slyrus_ | seems bogus to me |
| 20:33 | joshua__ | I have a question. |
| 20:34 | joshua__ | Is this comic (http://xkcd.com/627/) appropriate for even questions asked to the people of this channel? |
| 21:08 | mister_roboto | ~seen cermick |
| 21:08 | clojurebot | Huh? |
| 21:15 | Raynes | $seen cemerick |
| 21:15 | sexpbot | cemerick was last seen quitting 4 days and 2 hours ago. |
| 21:20 | KirinDave | Damn, why hasn't anyone told me about lamina? |
| 21:20 | KirinDave | This is pretty cool. |
| 21:46 | jimdagem | hi |
| 21:49 | replaca | KirinDave: I think's Zach has been discussing it on Jira |
| 21:49 | KirinDave | It's pretty neat. |
| 21:49 | KirinDave | And gloss is something I was writing awhile ago but never finished, for plt-scheme. |
| 21:49 | KirinDave | Very useful. |
| 21:49 | replaca | the boy's on a roll :) |
| 21:53 | KirinDave | Thank you so much, clojurebot |
| 21:53 | replaca | hiredman: you here? |
| 21:54 | jimdagem | is clojurebot written in clojure? |
| 21:54 | replaca | It seems to have started doing that when someone (or at least me) checks something into contrib |
| 21:54 | replaca | jimdagem: yup |
| 21:54 | replaca | jimdagem: https://github.com/hiredman/clojurebot |
| 21:57 | Raynes | No way. It's written in Haskell, of course. |
| 21:58 | jimdagem | lol |
| 21:58 | Raynes | $botsnack |
| 21:58 | sexpbot | Raynes: Thanks! Om nom nom!! |
| 21:59 | jimdagem | can anyone provide or direct me to a good compare-and-contrast of Haskell and Clojure? |
| 22:19 | Raynes | wooby: This keyboard is fantastic. <3 |
| 22:20 | danlarkin | which keyboard? |
| 22:21 | Raynes | Das ultimate. |
| 22:21 | Raynes | He gave me one at the conj. |
| 22:21 | Raynes | I switched to it last night. Used to use the same keyboard you use, iirc. MS ergo 4000? |
| 22:22 | danlarkin | moving past the weirdness of you knowing which keyboard I use, yes |
| 22:23 | Raynes | The reason I wanted to try a Das is because of your discussion with technomancy and others a couple of months ago. Just happened to remember. |
| 22:24 | danlarkin | I enjoy the split |
| 22:24 | Raynes | Yeah, the split was always nice. |
| 22:33 | _ato | the Das is great, I use it as well |
| 22:36 | _ato | I can't use ergonomics, I never learned to type in the "proper" way. I type fast and without looking, just I inevitably end up trying to reach across the split |
| 22:36 | Raynes | _ato: I always did that with my other keyboard! |
| 22:37 | Raynes | I'm a two-three finger typer. Never learned to type properly. |
| 22:37 | Raynes | Not counting my thumb. |
| 22:37 | leifw | if I didn't bring my laptop everywhere and move it around my house all the time, I'd still be using the kinesis I got a few years back |
| 22:37 | leifw | those things are fantastic |
| 22:38 | _ato | I'm a full five fingeer typist, but just learnt by typing a heck of a lot rather than by doing formal lessons |
| 22:38 | leifw | but you have to be a traditional typist for it to make sense |
| 22:38 | Raynes | It looks neat. Not sure I'd be able to tolerate it. |
| 22:38 | leifw | the main nice bit is that it brings all the pinky keys to the thumb |
| 22:38 | leifw | which is particularly good for emacs |
| 22:39 | Raynes | _ato: Well, so am I, if you count hitting the 'enter' key with my pinky. ;) |
| 22:40 | Raynes | And, of course, capslock which is control. |
| 22:44 | _ato | yeah, I do the capslock control thing as well. My brother actually swaps caps-lock and backspace, hits control with his palm (which doesn't usually work too well on a laptop) |
| 22:45 | _ato | so if I use his computer inevitably end up deleting everything I'm trying to work on :p |
| 22:45 | hippiehunter | what is the correct order for accessing a field in a map/record/whatever, (:field instance) or (instance :field) ? it looks to my noob eyes like both work but I'm sure there is a preferred way |
| 22:46 | hippiehunter | also das ultimate S ftw |
| 22:47 | _ato | hippiehunter: (:field instance) has the benefit of working when instance is nil |
| 22:47 | hippiehunter | does it just return nil as a result? |
| 22:47 | _ato | yep |
| 22:48 | _ato | hehe, I guess other people might say that (instance :field) has the benefit of barfing when instance is nil :p |
| 22:56 | hippiehunter | is try catch the best way to interact with java exceptions from clojure? |
| 23:03 | _ato | hippiehunter: yes |
| 23:15 | hippiehunter | is there a better way to debug in clojure (aside from just not making bugs)? I'm using netbeans and enclojure and the breakpoint fidelity is very low. I seem to be able to step on/break on about 1/4 of the lines |
| 23:25 | leifw | dunno, I usually just use a repl and this macro: |
| 23:25 | leifw | (defmacro dbg |
| 23:25 | leifw | [x] |
| 23:25 | leifw | `(let [x# ~x] |
| 23:25 | leifw | (binding [*out* *err*] (println '~x "=" x#)) |
| 23:25 | leifw | x#)) |
| 23:26 | leifw | |
| 23:26 | leifw | sorry about the big paste |
| 23:26 | leifw | forgot whose blog I got that from but it's nice |
| 23:32 | _ato | hippiehunter: see also: http://stackoverflow.com/questions/2352020/debugging-in-clojure |
| 23:46 | hippiehunter | as far as I can tell, dotrace doesnt interact well with jetty could just be that I'm using it wrong though |
| 23:47 | hippiehunter | never mind I figured it out |
| 23:56 | ossareh | anyone done much with hiccup? I've a loop which returns two nodes which are at the same level in the DOM as eachother and I'm struggling to understand how this should be returned. |
| 23:56 | ossareh | (for [data data-list] |
| 23:57 | ossareh | (do [:tr [:td (:msg data)]] [:tr [:td (:othermsg data)]])) |
| 23:57 | ossareh | naturally that only returns the last <tr/> |
| 23:57 | ossareh | and I'm stumped on how to get both back. |
| 23:58 | _mst | maybe try replacing "do" with "list"? |
| 23:58 | _mst | I think lists get automatically flattened (although it's been a little while since I used hiccup) |
| 23:59 | ossareh | nailed it _mst ! |
| 23:59 | ossareh | thanks |
| 23:59 | ossareh | clojurebot: give _mst props |