2011-04-19
| 00:17 | choffstein | anyone know why I might be getting this error: java.lang.Exception: Unable to find static field: parseDouble in class java.lang.Double |
| 00:17 | choffstein | seems ... strange |
| 00:17 | amalloy | you're trying to call parseDouble with no arguments, and the compiler's best guess is that maybe it's a field |
| 00:18 | amalloy | &(Double/parseDouble) |
| 00:18 | sexpbot | java.lang.NoSuchFieldException: parseDouble |
| 00:18 | amalloy | &(. Double (parseDouble)) |
| 00:18 | sexpbot | java.lang.IllegalArgumentException: No matching method: parseDouble |
| 00:18 | choffstein | Ah. So I can't do something like map Double/parseDouble |
| 00:19 | amalloy | ^ is how you could force it to act like a method, if there actually were a no-arg version |
| 00:19 | choffstein | but should do map #(Double/parseDouble %) |
| 00:19 | amalloy | choffstein: no. methods are not first-class functions; they require wrappers |
| 00:19 | amalloy | exactly |
| 00:19 | choffstein | thanks :) |
| 00:29 | tomoj | beautification tips? https://gist.github.com/5b709e90dbb330d1fb62 |
| 00:29 | amalloy | whee i love this kind of assignment |
| 00:30 | tomoj | the idea is to go through each x in s until you get the same (f x) n times |
| 00:30 | tomoj | then return any such x (my implementation returns the first iirc) |
| 00:30 | amalloy | tomoj: seems like you should use partition-by |
| 00:31 | tomoj | aha |
| 00:31 | tomoj | then (first (filter #(= (count %) n) ...)) ? |
| 00:31 | amalloy | right |
| 00:31 | amalloy | well |
| 00:31 | tomoj | shoot |
| 00:31 | amalloy | >, not = |
| 00:31 | tomoj | d'oh |
| 00:31 | tomoj | thanks! |
| 00:32 | tomoj | I don't even understand that nasty stuff I wrote |
| 00:33 | tomoj | gist updated, beautification achieved |
| 00:34 | tomoj | except, oshit, ffirst |
| 00:34 | tomoj | I don't think I've ever used any of those |
| 00:34 | amalloy | tomoj: i know, i was excited to suggest ffirst |
| 00:34 | amalloy | but then you went and took the fucking idea before i could finish typing it |
| 00:34 | tomoj | wait |
| 00:34 | tomoj | this doesn't work, though |
| 00:35 | tomoj | I remember considering some function and giving up for this problem, but I don't think it was partition-by |
| 00:35 | amalloy | tomoj: you have your <= written backward, i think. happens to me all the damn time |
| 00:35 | tomoj | problem is the seq might be infinite |
| 00:35 | amalloy | so? |
| 00:36 | tomoj | partition-by chokes on (repeat 1) |
| 00:36 | amalloy | partition-by is lazy, isn't it? |
| 00:36 | amalloy | oh, i see |
| 00:36 | tomoj | lazy in partitions, not in each partition |
| 00:36 | amalloy | if a given partition is infinite, yes |
| 00:37 | tomoj | the real point is to approximately find the value (iterate f other-s) converges on |
| 00:37 | tomoj | if n is big enough the last partition actually will be infinite because you really will have found the convergence |
| 00:38 | amalloy | tomoj: perhaps (map f the-collection), then (partition n 1) to get it into chunks of the right size |
| 00:38 | tomoj | oh, but I think can just use the ugly trick in my first version with this one? |
| 00:38 | amalloy | then you can check each chunk to see if they're identical |
| 00:38 | amalloy | tomoj: i didn't even read the first version :P |
| 00:39 | tomoj | nope, doesn't work :( |
| 00:39 | tomoj | my ugly trick I mean |
| 00:40 | tomoj | (partition n 1) sounds prettier than what I've got but intuitively much slower |
| 00:40 | tomoj | since I said that I guess I have to test it |
| 00:41 | amalloy | certainly if your data is AAABBBAAABBBAAAA and N is 4 it won't be that great |
| 00:41 | amalloy | but it seems like a pretty small difference |
| 00:43 | tomoj | hmm, tried something like that, but it returns (f x) instead of x |
| 00:43 | amalloy | tomoj: (map (juxt identity f) ...) |
| 00:45 | tomoj | eww https://gist.github.com/d37cc1b6a4855cce3581 |
| 00:46 | tomoj | amalloy: what did you call it? |
| 00:46 | amalloy | decorate |
| 00:46 | amalloy | i also wrote a version that immediately applies the juxted function: annotate |
| 00:46 | tomoj | I think I've wanted at least one of those before |
| 00:47 | amalloy | tomoj: ask and ye shall receive. just depend on amalloy/utils |
| 00:48 | amalloy | also the (comp) stuff there looks like a mess. why not just (filter (comp (partial apply =) (partial map first)))? |
| 00:51 | tomoj | :) |
| 00:56 | tomoj | only a bit slower than my version, at least including the actual work I'm doing |
| 00:58 | tomoj | even with my work cut out it's only 22% slower |
| 00:58 | tomoj | and this certainly won't be the bottleneck. thanks |
| 01:02 | amalloy | welcome |
| 01:04 | seancorfield__ | every time someone mentions juxt i have to go and look up what it does |
| 01:05 | seancorfield__ | and i always see "Alpha - name subject to change" and wish it was dist or distribute because then i'd know what it did :) |
| 01:06 | amalloy | seancorfield__: i'd never know, if it were called one of those :P |
| 01:07 | amalloy | juxt is so memorable and unique, as a name, that it sticks in my mind. and it *juxt*aposes (f x) with (g x) |
| 01:07 | seancorfield__ | one man's obvious is another man's wtf? :) |
| 01:08 | amalloy | heh, indeed |
| 01:09 | brehaut | seancorfield: in haskell its called (&&&) |
| 01:09 | brehaut | and it has a related (***) |
| 01:09 | brehaut | i can never remember which is which |
| 01:13 | seancorfield__ | instead of "more cowbell" it looks like "more punctuation"... |
| 01:13 | tomoj | wonder how they pronounce them |
| 01:13 | tomoj | I vote "triple-{amp,star}" |
| 01:14 | brehaut | tomoj: haskell programmers dont talk to each other, they just share publish papers |
| 01:14 | tomoj | :D |
| 01:14 | tomoj | conal's talk where he says that some category-theoretical properties of his types makes him feel like he's got the right abstraction still leaves me a bit awestruck |
| 01:15 | brehaut | hah |
| 01:15 | brehaut | tomoj: seen patternsinfp.wordpress.com/ ? |
| 01:17 | tomoj | diagrams like that are a sign to me that I'm in over my head |
| 01:17 | brehaut | :) |
| 01:18 | tomoj | "coalgebras for the costate comonad" FUCK |
| 01:18 | brehaut | im pretty sure they are category theory stuff |
| 01:18 | tomoj | I've tried reading the rosetta stone at least several times and given up |
| 01:19 | brehaut | back when i was a postgrad i had this guy lecturing us on this stuff (he was a visiting lecturer) |
| 01:19 | brehaut | i dont think i could have been less prepared for that class |
| 01:32 | amalloy | $findfn " " "+" |
| 01:32 | sexpbot | [] |
| 01:32 | amalloy | where do we have url-encoding? |
| 01:36 | brehaut | amalloy: https://github.com/mmcgrana/ring/blob/master/ring-core/src/ring/util/codec.clj ? |
| 01:36 | brehaut | uses java.net.URLEncoder |
| 01:36 | amalloy | yeah, i guess |
| 01:36 | amalloy | feh |
| 01:37 | amalloy | building clojure wrappers for everything is silly, but if there's something *i* want without a clojure wrapper that's a bug |
| 01:46 | tomoj | I'm still waiting for someone to write a clojure thrift impl |
| 01:47 | znutar | Is there some order in which you should install paredit, clojure-mode and swank-clojure in emacs? The 3 times I've tried it on different boxes different things seem to be broken. |
| 01:47 | tomoj | but I guess I'm the only one crazy enough to think that's a good idea |
| 01:47 | tomoj | don't install swank-clojure ever :P |
| 01:47 | znutar | But if I do that it works! |
| 01:47 | tomoj | it's deprecated |
| 01:48 | znutar | This explains a lot. |
| 01:48 | tomoj | instead you should start a swank server with lein or cake, no swank-clojure.el needed to connect |
| 01:48 | tomoj | you also need a newer version of paredit than is in the standard elpa repo |
| 01:49 | tomoj | I use http://mumble.net/~campbell/emacs/paredit-beta.el but I think (my memory is foggy) there may be a special clojurista's version floating around somewhere? |
| 01:49 | znutar | Is the marmalade-pointing current emacs starter kit version workable? |
| 01:49 | tomoj | the clojure-mode in there should be good, what version of paredit is it? |
| 01:50 | tomoj | 21 or greater should be OK |
| 01:50 | znutar | I think it was 22... it's stopped responding since I deleted swank-clojure though |
| 01:51 | tomoj | .. paredit has stopped responding? |
| 01:52 | znutar | emacs in its entirety has |
| 01:52 | tomoj | does C-g save? |
| 01:53 | znutar | No, went ahead and kill -9'ed it |
| 01:53 | tomoj | ouch |
| 01:53 | znutar | No big deal, I'm just fooling around with my old .emacs saved off somewhere |
| 01:53 | znutar | What were you doing with thrift, btw? |
| 01:54 | tomoj | for a while I'd hoped to get my team to use it, if only to force some thought into shared data/service design |
| 01:54 | tomoj | and the idea of implementing it with gloss/aleph is still attractive, even if this would end up being a highly nonstandard implementation |
| 01:55 | tomoj | and with ztellman's promise of amqp in aleph, txamqp looks more tenable |
| 01:55 | znutar | It seems to be lovely for its purpose, although I've barely used it personally. |
| 01:56 | tomoj | I think most of the implementations are crappy |
| 01:56 | tomoj | I couldn't find one that properly handled the seqid for instance |
| 01:57 | tomoj | if the clojure proto library wasn't so tied to cake I'd jump to protobufs with no hesitation |
| 02:00 | tomoj | holy shit, apt-get install maven2 says it wants to install 121 extra pacakages |
| 02:02 | seancorfield__ | heh, i just did mvn test on a new system and it downloaded the entire internet! |
| 02:02 | znutar | wow, the java thrift generates is a LOT uglier than the c++ equivalent it generates. |
| 02:03 | seancorfield__ | that's just because it's java :) |
| 02:03 | tomoj | my idea was that a clojure impl could just generate some pretty macro calls |
| 02:03 | tomoj | then the accompanying clojure library could do all the hard work by defining the macros |
| 02:03 | tomoj | maybe I liked this idea just so that I wouldn't have to muck around in C much |
| 02:57 | abadr | reading the Joy of Clojure, it gives (1 2 3 4) as an example of a list, but this produces an error for me on the repl -- I'm guessing because 1 isn't a "function, macro, or special form". what's the story? |
| 02:59 | seancorfield__ | '(1 2 3 4) |
| 03:00 | thorwil | ^ quote it like that, so clojure doesn't try to evaluate it |
| 03:00 | seancorfield__ | ,'(1 2 3 4) |
| 03:00 | clojurebot | (1 2 3 4) |
| 03:00 | seancorfield__ | ,[1 2 3 4] |
| 03:00 | clojurebot | [1 2 3 4] |
| 03:00 | abadr | i see, thanks |
| 03:00 | seancorfield__ | ,(map inc '(1 2 3 4)) |
| 03:00 | clojurebot | (2 3 4 5) |
| 03:01 | seancorfield__ | ,(map inc [1 2 3 4]) |
| 03:01 | clojurebot | (2 3 4 5) |
| 03:01 | seancorfield__ | ,(list 1 2 3 4) |
| 03:01 | clojurebot | (1 2 3 4) |
| 03:01 | seancorfield__ | hth |
| 03:01 | abadr | it does :) |
| 03:02 | seancorfield__ | time for me to turn into a pumpkin... gotta be up early to get my CNG-powered car in for a service :( |
| 03:24 | markoman | now my function got so ugly I need your help |
| 03:27 | markoman | basically im trying to do: (assoc-in map [:args] (do (some-side-effect) {}))) |
| 03:28 | amalloy | markoman: it sounds like you're mixing mutability and functional code a little too closely for comfort here. but style aside, your code seems like it should work? |
| 03:29 | markoman | yes, I need to update session information on function and return a map at the same time |
| 03:30 | markoman | im confuced because updating session is a function call and it returns something, that I dont need. instead after update I continue creating map |
| 03:32 | markoman | so what happens to assoc-in map when do gives nil and {}. it the last one returned or? |
| 03:40 | amalloy | markoman: surely this would be easier to try in your repl than wait around for help on irc |
| 03:45 | markoman | connection broke so... |
| 03:46 | markoman | ,(assoc-in {:args {}} [:args] (do nil {:k 1})) |
| 03:46 | clojurebot | {:args {:k 1}} |
| 03:46 | markoman | ,(assoc-in {:args {}} [:args] (do (println "side effects") {:k 1})) |
| 03:46 | clojurebot | side effects |
| 03:46 | clojurebot | {:args {:k 1}} |
| 03:47 | Fossi | markoman: you can message clojurebot in private as well |
| 03:47 | Fossi | or just start a repl ;) |
| 03:48 | markoman | oh im doing it too, just continue discussion. but how do you message bot private? |
| 03:48 | markoman | I got that, clicking the name gave private chat |
| 03:48 | Fossi | depends on your client |
| 03:51 | markoman | k, added clojurebot to my buddy list, best friends, lol |
| 05:12 | markoman | how do you check if nested vector has keywords: [[:a {}][:b {}][:c 1]] [:a :b] any of these |
| 05:14 | markoman | true or false |
| 05:14 | ejackson | ,(map coll? [:a :b :c]) |
| 05:14 | clojurebot | (false false false) |
| 05:15 | ejackson | ,(and (map coll? [:a :b :c])) |
| 05:15 | clojurebot | (false false false) |
| 05:17 | ejackson | i'm trying to figure out the opposite of every? |
| 05:18 | ejackson | some ! |
| 05:18 | ejackson | ,(some coll? [:a :b :c]) |
| 05:18 | clojurebot | nil |
| 05:19 | ejackson | ,(some coll? [:a [:b] :c]) |
| 05:19 | clojurebot | true |
| 05:19 | ejackson | markoman: ^^^ |
| 05:19 | ejackson | oh wait.... i answered the wrong question.... where's my coffee gone |
| 05:20 | ejackson | markoman: you're going to have trouble pulling the keys and vals apart |
| 05:20 | markoman | well I learned some and coll? anyway :) |
| 05:21 | ejackson | if not for that I'd suggest (some coll? (flatten x)) |
| 05:22 | markoman | yes! flatten makes it close |
| 05:23 | markoman | but now i need to compare |
| 05:24 | markoman | if (flatten [[:a {}][:b {}][:c 1]]) has any of these keys [:a :b] |
| 05:24 | fliebel | Does anyone know a Java lib that can play ALAC? It's rarely used outside of Mac, so most of those cross-platformy things don't play it. About anything that deals with audio in Mac plays it, but that's all C and most of it Objective C. |
| 05:37 | Chousuke | markoman: try (some #{:a :b} [:c :d :b]) |
| 05:40 | markoman | that works: (some #{:q :b} (keys (into {} [[:a {}][:b {}][:c 1]]))) |
| 05:43 | raek | (some #{:q :b} (map first [[:a {}] [:b {}] [:c 1]])) |
| 05:44 | raek | markoman: any particular reason you have a vector of vectors and not a map? |
| 05:46 | markoman | hmh, maybe not. i was thinking i could add some additional "params" like [:a {} {}] on vector |
| 05:47 | markoman | but perhaps i can do it with one, so I guess {:a {}} is preferred here? |
| 05:47 | brehaut | ,(keep (fn [a] (when (#{:a :b} (first a)) a)) [[:a {}] [:b {}] [:c 1]]) |
| 05:47 | clojurebot | ([:a {}] [:b {}]) |
| 05:49 | markoman | but then the order of items need to be fixed: [{:a {}} {:b {}} {:c 1}] |
| 05:50 | raek | markoman: then you could as well do {:a [{} {}]} if you want to associate multiple things with a key |
| 05:50 | brehaut | markoman: step back from your immediate question and tell us what you are trying to solve |
| 05:51 | markoman | i think its solved, but maybe not best way. i need to think original data structure too |
| 05:51 | brehaut | http://mywiki.wooledge.org/XyProblem |
| 05:53 | brehaut | i wonder if i can teach clojurebot that |
| 05:53 | brehaut | clojurebot: xy is http://mywiki.wooledge.org/XyProblem |
| 05:53 | clojurebot | Ok. |
| 05:54 | brehaut | clojurebot: xy? |
| 05:54 | clojurebot | xy is http://mywiki.wooledge.org/XyProblem |
| 05:55 | markoman | Xy I'm aware. Usually when I come here and ask the question, I begin to see the solution when forming the question better way. and then ppl give really good tips and side notes on subject |
| 05:55 | Fossi | great page |
| 05:56 | fliebel | But the other side of the story if that if you ask for a specific Y, you get a solution to Y that is to general. |
| 05:57 | brehaut | fliebel: i dont think i understand you |
| 05:58 | fliebel | brehaut: Well, sometimes I want to do Y, but have a *very* good reason to want to do X, not not Z, which is the common way to do it. |
| 05:58 | brehaut | oh right. yes agreed |
| 06:00 | ahihi2 | is there a way to set the OS X application name in clojure? I tried (System/setProperty "com.apple.mrj.application.apple.menu.about.name" foo) as I'd do in java, but I still end up with "clojure.main" |
| 06:11 | markoman | im still struggling with empty? seq and nil |
| 06:13 | markoman | say (for [i (range 0 2)] nil) gives (nil nil) which is not empty, so how can I see, if for loop gives only nils which should be regarded as empty / no hits? |
| 06:14 | raek | markoman: (nil nil) is a list of 2 elements, not 0. that's why it's not empty |
| 06:14 | markoman | ideally id like return value to be either [nil nil] to be [] or [nil "val"] to be ["val"] |
| 06:14 | __name__ | (map not-nil? …) |
| 06:15 | __name__ | ehm, (map #(not (nil? %)) …) |
| 06:15 | raek | markoman: ##(for [i (range 10), :when (odd? i)] i) |
| 06:15 | sexpbot | ⟹ (1 3 5 7 9) |
| 06:15 | raek | markoman: you can use :when inside for to pick out only some of the values |
| 06:16 | markoman | ah I see, it could work |
| 06:17 | raek | you can also combine it with let: [... :let [x (some-function i)] :when (some-pred? x)] x |
| 06:17 | raek | in case you need to filter on the final value |
| 06:17 | markoman | but I think it doesnt work, because I need to do stuff outside for [] |
| 06:18 | markoman | ok, :let changes the game again |
| 06:47 | hoeck | ahihi2: maybe there is some strange limitation to when calling .setProperty is guaranteed to have an effect (only at class-initialization time or so) |
| 06:48 | hoeck | I remember having related problems when doing java gui stuff and trying to set swing properties, it wasn't as easy and dynamic as the setProperty method suggests :/ |
| 06:49 | ilyak | Hi * |
| 06:49 | ahihi2 | well, it turns out apple's .jar -> .app bundler has a field for the app name |
| 06:49 | hoeck | hello ilyak |
| 06:49 | ahihi2 | so I can just use that |
| 06:49 | ilyak | Is there something that works like (take-while), but is eager and also returns the rest of the sequence |
| 06:50 | hoeck | ilyak: split-with |
| 06:50 | ilyak | i.e. starting from the element that failed predicate, if it failed immediately then the same sequence as was input |
| 06:50 | ilyak | cool, I'd check it |
| 06:51 | hoeck | ahihi2: I think I did something similar, setting properties on jvm startup or so |
| 06:52 | ahihi2 | yeah, that's probably what the bundled app does |
| 07:17 | bsjd | hello |
| 07:19 | clgv | &(println "hello to you too. ;)") |
| 07:19 | sexpbot | ⟹ hello to you too. ;) nil |
| 07:30 | TobiasRaeder | Hi :) |
| 07:30 | TobiasRaeder | Is there a way to set system properties when running tests via leiningen? |
| 09:03 | @rhickey | const! https://github.com/clojure/clojure/commit/8296b5f752fdb2926a309a7248d0d1bf6cb436b5 |
| 09:11 | TimMc | Is this a metadata keyword? What does it do? |
| 09:12 | TimMc | I presume it does what :static is mistaken to do? |
| 09:12 | clgv | loo |
| 09:12 | clgv | ups |
| 09:12 | clgv | looks like it specifies a constant |
| 09:13 | TimMc | Sure, but does that imply inlining? |
| 09:14 | clgv | TimMc: cant tell from that diff. I guess the intersting part is that one: |
| 09:14 | clgv | if(RT.booleanCast(RT.get(v.meta(),RT.CONST_KEY))) + return analyze(C.EXPRESSION, RT.list(QUOTE, v.get())); |
| 09:15 | clgv | I don't know enough about the internal java implementation to guess if it does ;) |
| 09:27 | clgv | is there something like an alter-if function/macro? |
| 09:28 | clgv | e.g. (let [m (alter-if mymap empty? (assoc k v))] ...) |
| 09:29 | clgv | I noticed the need for something like this for a couple of times now |
| 09:34 | fliebel | Python just beat Clojure for playing a ALAC file. |
| 09:34 | fliebel | clgv: Not in core at least, as far as I know. |
| 09:36 | fliebel | rhickey: What is const about? My best guess would be symbol macros or inlining or something like that. |
| 09:37 | clgv | fliebel: you'll know if you understand the meaning of: analyze(C.EXPRESSION, RT.list(QUOTE, v.get())); |
| 09:40 | clgv | hmm there is a "when-first" in core but no "if-first" |
| 09:43 | @rhickey | sorry, got called away right after I posted |
| 09:44 | @rhickey | (def ^:const x 42) will cause any compiled reference to x to be as if you wrote 42 instead |
| 09:44 | avysk | what's the easiest way to create something like {:foo 1 :bar 2} out of [:foo 1 :bar 2]? |
| 09:45 | avysk | I can do that, but is there something built-in? |
| 09:45 | clgv | avysk: ##(apply hash-map [:foo 1 :bar 2]) |
| 09:45 | sexpbot | ⟹ {:foo 1, :bar 2} |
| 09:45 | avysk | !!! |
| 09:45 | avysk | Thanks |
| 09:46 | avysk | Looks obvious when one knows the right answer :) |
| 09:46 | clgv | $findfn [:foo 1 :bar 2] {:foo 1 :bar 2} |
| 09:46 | sexpbot | [] |
| 09:46 | clgv | $findfn hash-map [:foo 1 :bar 2] {:foo 1 :bar 2} |
| 09:46 | sexpbot | [clojure.core/apply] |
| 09:47 | clgv | hmok. I found a nice-to-have feature for sexpbot, I guess ;) |
| 09:47 | Fossi | ,(into {} [:foo 1 :bar 2]) |
| 09:47 | clojurebot | java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.lang.Keyword |
| 09:47 | @rhickey | if you re-def x, no code will see that value until it's recompiled |
| 09:47 | fliebel | rhickey: So symbol macros indeed! |
| 09:48 | @rhickey | fliebel: nope |
| 09:48 | manutter | rhickey: nice :) |
| 09:48 | @rhickey | fliebel: symbol macros would in turn get evaluated, this is just straight constant data |
| 09:49 | clgv | $findfn [1 2 3 4 5 6] [2 5 6] [1 3 4] |
| 09:49 | sexpbot | [] |
| 09:49 | fliebel | rhickey: So what is it used for? |
| 09:49 | @rhickey | fliebel: speed |
| 09:49 | clgv | $findfn [1 2 3 4 5 6] #{2 5 6} [1 3 4] |
| 09:49 | sexpbot | [] |
| 09:50 | @rhickey | without const, if you said (defn foo [] x), that code would have to get the value of x from the var every time |
| 09:52 | @rhickey | gotta run , have fun with const |
| 09:53 | cemerick | We need a rhickey batlight, so he can swoop in when disaster strikes. :-) |
| 09:53 | cemerick | dn |
| 09:53 | cemerick | o |
| 09:53 | cemerick | bah |
| 09:54 | cemerick | dnolen: I wish I could make your talk tomorrow. Any chance it'll be recorded? |
| 09:55 | dnolen | cemerick: unsure, sort of last minute thing for me. Got some work to do... |
| 09:55 | cemerick | Yeah, I figured. Good luck. |
| 10:05 | dnolen | cemerick: thanks! |
| 10:35 | anonymouse89 | is there a built-in to insert into a certain position of a list/vector/etc? |
| 10:35 | anonymouse89 | (it's flat so I don't think I'm looking for zippers) |
| 10:45 | raek | anonymouse89: no, not for lists/sequences and vectors. |
| 10:45 | hoeck | anonymouse89: but vectors only support assoc |
| 10:45 | anonymouse89 | raek, hoeck: thanks! |
| 10:46 | hoeck | so creating a new vec with a single element changed works |
| 10:46 | anonymouse89 | hoeck: right, but still no insert |
| 10:46 | raek | you can still do it with (concat (take i coll) (drop (inc i) coll)) for sequences and (into (subvec coll 0 i) (subvec coll (inc i))) |
| 10:46 | raek | those run in linear time though |
| 10:47 | hoeck | I'm usually using (apply vector (subvec src 0 X) [new elems] (subvec src X)) to 'insert' into vectors |
| 10:47 | raek | finger trees is a persitent data structure that allows you to do these kind of things efficiently |
| 10:48 | hoeck | raek: is there a working implementation? |
| 10:49 | anonymouse89 | raek: yeah, I saw the recorded talk from the conj. I'm also wondering about working implementation. |
| 10:49 | raek | https://github.com/clojure/data.finger-tree |
| 10:49 | raek | it's available, but I haven't tried it myself |
| 10:51 | hoeck | raek: last time I heard from finger trees, there was only a gist with an implementation, this looks better now :) |
| 10:52 | Fossi | finger tree sounds creepy |
| 10:54 | hoeck | sounds like "magic nose goblin" to me |
| 10:55 | fliebel | These trees have been sitting in the back of my head for a while now, waiting for a legitimate use case. |
| 10:55 | Fossi | urgh. the image doesn't get better |
| 10:56 | fliebel | Fossi: Have you seen the image in the presentation? |
| 10:56 | Fossi | nope |
| 10:57 | Fossi | now i'm not sure whether i want to either ;) |
| 10:57 | anonymouse89 | reminds me of The Labyrinth |
| 10:57 | anonymouse89 | (sorry, very offtopic) |
| 10:58 | fliebel | Fossi: http://talk-finger-tree.heroku.com/#5 |
| 10:58 | Fossi | as if the topic at hand was that important ;) |
| 10:58 | Fossi | ah |
| 10:58 | anonymouse89 | fingers! what is more important |
| 10:58 | Fossi | funky |
| 10:58 | pjstadig | clojurebot: const is <reply><rhickey> (def ^:const x 42) will cause any compiled reference to x |
| 10:58 | pjstadig | to be as if you wrote 42 instead |
| 10:58 | clojurebot | 'Sea, mhuise. |
| 10:58 | pjstadig | clojurebot: const is <reply><rhickey> (def ^:const x 42) will cause any compiled reference to x to be as if you wrote 42 instead |
| 10:58 | clojurebot | 'Sea, mhuise. |
| 10:59 | fliebel | const |
| 10:59 | TimMc | const? |
| 10:59 | clojurebot | <rhickey> (def ^:const x 42) will cause any compiled reference to x |
| 10:59 | pjstadig | clojurebot: forget const |is| <reply><rhickey> (def ^:const x 42) will cause any compiled reference to x |
| 10:59 | clojurebot | I forgot that const is <reply><rhickey> (def ^:const x 42) will cause any compiled reference to x |
| 10:59 | pjstadig | const? |
| 10:59 | clojurebot | <rhickey> (def ^:const x 42) will cause any compiled reference to x to be as if you wrote 42 instead |
| 10:59 | TimMc | const? |
| 10:59 | clojurebot | <rhickey> (def ^:const x 42) will cause any compiled reference to x to be as if you wrote 42 instead |
| 11:00 | pjstadig | clojurebot: forget const |is| <reply>(def ^:const x 42) will cause any compiled reference to x |
| 11:00 | clojurebot | I forgot that const is <reply>(def ^:const x 42) will cause any compiled reference to x |
| 11:01 | pjstadig | clojurebot: const is <reply>(def ^:const x 42) will cause any compiled reference to x |
| 11:01 | clojurebot | Ik begrijp |
| 11:01 | TimMc | what |
| 11:01 | pjstadig | clojurebot: forget const |is| <reply><rhickey> (def ^:const x 42) will cause any compiled reference to x |
| 11:01 | clojurebot | I forgot that const is <reply><rhickey> (def ^:const x 42) will cause any compiled reference to x |
| 11:01 | pjstadig | const? |
| 11:01 | clojurebot | <rhickey> (def ^:const x 42) will cause any compiled reference to x to be as if you wrote 42 instead |
| 11:01 | pjstadig | clojurebot: forget const |is| <reply><rhickey> (def ^:const x 42) will cause any compiled reference to x if you wrote 42 instead |
| 11:01 | clojurebot | I forgot that const is <reply><rhickey> (def ^:const x 42) will cause any compiled reference to x if you wrote 42 instead |
| 11:01 | pjstadig | const? |
| 11:01 | clojurebot | <rhickey> (def ^:const x 42) will cause any compiled reference to x to be as if you wrote 42 instead |
| 11:01 | pjstadig | gah |
| 11:02 | pjstadig | i'm in over my head |
| 11:02 | TimMc | Can this be done in PM with clojurebot ? |
| 11:02 | pjstadig | thought right might not want the notifications... |
| 11:02 | pjstadig | yeah |
| 11:02 | TimMc | 123456789? |
| 11:02 | clojurebot | 987654321 |
| 11:02 | TimMc | Yeah, it can. |
| 11:03 | danlarkin | pjstadig causin' problems |
| 11:04 | TimMc | pjstadig: clojurebot is currently a blank slate for const |
| 11:04 | pjstadig | fixed :p |
| 11:04 | pjstadig | const? |
| 11:04 | clojurebot | (def ^:const x 42) will cause any compiled reference to x to be as if you wrote 42 instead |
| 11:04 | TimMc | Looks good. |
| 11:06 | TimMc | I have a list of values, how do I tell if they are all truthy? |
| 11:08 | raek | ,(every? identity [true 1 0]) |
| 11:08 | clojurebot | true |
| 11:08 | TimMc | hah! |
| 11:08 | Raynes | &(every? identity [1 2 3 false 0 true]) |
| 11:08 | sexpbot | ⟹ false |
| 11:08 | Raynes | raek: I hate you. :< |
| 11:08 | TimMc | Thanks, that makes sense. |
| 11:09 | Raynes | My downfall is that I test my code in my own REPL before spewing solutions. |
| 11:09 | TimMc | haha |
| 11:09 | Raynes | It's a bad habit, I'm sure. ;) |
| 11:18 | TimMc | Context: I'm rewriting clojure.test/are to return logical true if all tests pass. |
| 11:22 | TimMc | Now I can pass predicates like #(are [k v] (= (k %) v) :a 1, :b 2) to helper functions in my test classes that set up complicated data structures. |
| 11:22 | TimMc | (Testing the tests and whatnot.) |
| 11:24 | anonymouse89 | pmapcat? |
| 11:25 | fliebel | anonymouse89: Nope, (aply concat map) |
| 11:25 | fliebel | *pmap |
| 11:25 | fliebel | *apply |
| 11:25 | anonymouse89 | fliebel: i got the idea :) |
| 11:55 | cemerick | http://cemerick.com/2011/04/19/clojure-atlas-preview/ |
| 11:57 | osoleve | from a complete newbie's standpoint, looks like a very interesting and useful tool |
| 11:59 | osoleve | aww, 'try it' fooled me :( |
| 12:00 | cemerick | osoleve: your interest is duly noted :-) |
| 12:00 | cemerick | The ontology is woefully incomplete still. When it's only staggeringly incomplete, I'll open things up. |
| 12:01 | osoleve | looking forward to it |
| 12:01 | fliebel | cemerick: Do you count the number of people that tried vs bought? |
| 12:01 | cemerick | fliebel: ah, that would've been smart, huh? :-) |
| 12:02 | cemerick | I doubt very many would click on the buy link straight off in any case. |
| 12:02 | fliebel | cemerick: Well, just append a hash to one and google analytics will count for you ;) |
| 12:02 | osoleve | cemerick, i clicked it when i realized 'try it' didn't work :[ |
| 12:02 | osoleve | haha |
| 12:03 | fliebel | cemerick: Is the $20 for real, or is the button as a while a joke? |
| 12:03 | fliebel | *whole |
| 12:04 | cemerick | fliebel: real? |
| 12:04 | fliebel | cemerick: In other words, will it cost $20 when it's done? |
| 12:05 | cemerick | fliebel: It'll definitely be paid, yes. Where the price lands in not yet certain. |
| 12:05 | cemerick | s/in/is |
| 12:05 | sexpbot | <cemerick> fliebel: It'll defisitely be paid, yes. Where the price lands is not yet certais. |
| 12:05 | osoleve | haha |
| 12:06 | fliebel | cemerick: Do you make the relations yourself, or do you use extensive introspection? |
| 12:06 | cemerick | fliebel: The source, docs, and class hierarchies I can gather in an automated fashion. Everything else needs to be built manually. |
| 12:06 | osoleve | cemerick, is it written in clojure? |
| 12:07 | fliebel | cemerick: It would be cool to get 'everything else' as metadata upstream in Clojure. |
| 12:07 | cemerick | If I could build an accurate ontology like this in an automated way, I'd go build a $10K-per-site app. |
| 12:07 | cemerick | osoleve: Certainly, though there's probably more javascript in the source repo than clj. |
| 12:08 | osoleve | cemerick, neat |
| 12:08 | cemerick | fliebel: The clojure jar would be a *lot* larger than it is now :-) |
| 12:08 | osoleve | i'm excited to start learning clojure, i've had a lot of fun in the past with scheme/CL |
| 12:08 | cemerick | And Rich would simply quit |
| 12:08 | fliebel | haha |
| 12:10 | fliebel | cemerick: Good luck with that. I could never do such a thing. I'm the kind of person who would rather spend an hour(or even a day) writing a script to do some repetitive task that takes ten minutes. |
| 12:11 | cemerick | fliebel: where there's muck, there's (hopefully) brass :-) |
| 12:11 | ieure | Interesting, cemerick. |
| 12:11 | ieure | It looks nice, I hope it works out ofr you. |
| 12:11 | ieure | *for |
| 12:11 | fliebel | cemerick: I'm no american, so I have no idea what that means… not exactly anyway. |
| 12:12 | ejackson | hm.... looks like I arrived into an interesting conversation... |
| 12:12 | manutter | it started here: http://cemerick.com/2011/04/19/clojure-atlas-preview/ |
| 12:13 | fliebel | ah http://www.phrases.org.uk/meanings/408900.html |
| 12:13 | osoleve | guys, quick question. for a newbie, cake or lein? |
| 12:13 | fliebel | osoleve: Whatever name sounds better to you. |
| 12:13 | manutter | I'm still fairly noobish and I'm partial to lein |
| 12:14 | manutter | though to be frank I haven't played much with cake |
| 12:14 | cemerick | fliebel: that's the best answer I've heard to that question in a while :-) |
| 12:14 | ieure | I’m intermediate. Lein works great, I haven’t messed with cake. |
| 12:14 | osoleve | mmk, thanks |
| 12:14 | ejackson | pish, butterflies. |
| 12:15 | fliebel | cemerick: you have these pointy things on your lambda, have you considered using the maps api for real? |
| 12:15 | fliebel | I mean, zooming, searching, paning, it's all there. |
| 12:15 | ejackson | cemerick: I'd like to volunteer as a concerned citizen. |
| 12:15 | cemerick | fliebel: You mean for the actual visualization? |
| 12:16 | fliebel | cemerick: Yea, the only thing that'd remain is putting the data through graphviz. |
| 12:16 | cemerick | ejackson: :-) drop your email into the allotted space, and you'll get a note sooner or later :-) |
| 12:16 | ejackson | groovy. |
| 12:16 | Raynes | mirah. |
| 12:17 | cemerick | fliebel: graphviz would produce an unintelligible muck. You need to be able to restrict the scope of the visualization or you'll be blinded by the proliferation of edges. |
| 12:17 | Raynes | cemerick: What do you use to draw illustrations in Clojure Programming? |
| 12:18 | cemerick | Raynes: we don't; O'Reilly has illustrators that take care of it |
| 12:18 | Raynes | My book is illustrationless. Makes Rayne sad. |
| 12:18 | fliebel | cemerick: Okay, very true. |
| 12:18 | Raynes | I suppose I could just sketch some and No Starch would take care of it. |
| 12:18 | Raynes | But that feels weird for some reason. |
| 12:18 | manutter | what kind of illustrations do you need? |
| 12:19 | Raynes | I doubt I'll need anything more interesting than lines and boxes. I could do that in gimp, but meh. I don't like drawing on a computer. |
| 12:19 | fliebel | Raynes: At least Manning has these whateverth-century figures they use :) |
| 12:20 | manutter | check out VUE from tufts.edu, it might give you some ideas |
| 12:20 | manutter | It's actually concept mapping but I was playing with it and it seems like it has some interesting applications |
| 12:20 | fliebel | cemerick: What kind of data do you display that can't be retrieved by introspection? |
| 12:21 | cemerick | fliebel: The manual bits include defining the "concept" nodes, and all of the edges everywhere. |
| 12:22 | fliebel | ah, okay. |
| 12:44 | markoman | anyone familiar with hiccup? |
| 12:45 | technomancy | clojurebot: hiccup is also http://tinyurl.com/426og7n |
| 12:45 | clojurebot | In Ordnung |
| 12:46 | technomancy | clojurebot: wait a minute, you're not fsbot |
| 12:46 | clojurebot | I don't understand. |
| 12:46 | technomancy | clojurebot: forget hiccup |is| also http://tinyurl.com/426og7n |
| 12:46 | clojurebot | I forgot that hiccup is also http://tinyurl.com/426og7n |
| 12:47 | technomancy | clojurebot: hiccup is both https://github.com/weavejester/hiccup and http://tinyurl.com/426og7n |
| 12:47 | clojurebot | You don't have to tell me twice. |
| 12:54 | KirinDave | markoman: Yes. But you should be using enlive 90% of the time. |
| 12:55 | KirinDave | markoman: Hiccup is most useful for A -> NodeSeq transformations to feed enlive when it's awkward to use its for loops. |
| 12:56 | markoman | hmh.. so far everything has worked well inside html form. i think i once had a strange situation where it didnt work like i expected |
| 12:58 | markoman | KirinDave: has enlive made any attemption to automate translation of terms inside html forms? |
| 12:58 | KirinDave | markoman: Nope. |
| 12:59 | KirinDave | markoman: But... really? |
| 12:59 | KirinDave | markoman: The 18 lines of code it would take to make that happen, with the gain being a much-improved model and superior modularity, are not worth that minor investment? |
| 13:00 | markoman | yes, I was thinking this last week [:div "some content" [:a "link text"]] |
| 13:00 | manutter | That's something I've been wondering lately too |
| 13:01 | markoman | would it be bad idea to use html tag path to the text content and msomehow automate translation of terms? |
| 13:02 | manutter | I've got an enlive setup where english page templates are under html/en/ and french under html/fr, etc, but how to internationalize the messages generated internally? |
| 13:02 | KirinDave | Well that's where something like hiccup could be part of a solution. |
| 13:02 | markoman | KirinDave: what do you mean with 18 lines of code? |
| 13:03 | thorwil | Raynes: for anything even vaguely resembling a technical diagram, choose inkscape over gimp. the difference is kinda like a scripting language vs assembler |
| 13:03 | redinger | cemerick: Okay, signed up for Atlas. Looking forward to trying it out! |
| 13:03 | KirinDave | markoman: If I understood what you're saying, it's not terribly difficult to write code to take an incoming request and pull out/check/retype/escape form paramters. |
| 13:05 | markoman | manutter, KirinDave: right, I'm sure there is a pretty simple solution there for this task. and I would be more than happy to find it and test on my code |
| 13:05 | cemerick | redinger: Thanks :-) |
| 13:05 | cemerick | It's coming soon enough, just wanted to get a feel for the level of concrete interest before committing to the bulk of the manual work. |
| 13:06 | manutter | In my day job, we have a gazillion-line php app, full of code that looks like __("Please enter your password") -- the double underscore is a function call that uses the english text as a key to look up a translation |
| 13:06 | manutter | there's a command-line script that scans all the php files and builds dictionary files for all the double-underscored prompts, and then you can send the files to a translator to edit/translate |
| 13:06 | markoman | exactly |
| 13:06 | manutter | Is there something similar in the clojure/java world? |
| 13:07 | joegallo | http://download.oracle.com/javase/6/docs/api/java/text/MessageFormat.html |
| 13:07 | amalloy | manutter: you could write one in like an hour |
| 13:08 | markoman | somehow i think if you write templates like: [:div "some content" [:a "link text"]] you could get context related terms nicely as a side effect so to say |
| 13:08 | cemerick | manutter: resource bundles are the JVM-standard way to do these sorts of things: http://java.sun.com/developer/technicalArticles/Intl/ResourceBundles/ |
| 13:08 | joegallo | MessageFormat + Locale + ResourceBundle basically does it |
| 13:08 | manutter | Cool, I figured there'd be something like that |
| 13:09 | manutter | thanks |
| 13:15 | markoman | idk, you need to specify these terms: GOODBYE_TEXT, CANCEL_BUTTON_TEXT,... zillions of those, it seems a lot of work |
| 13:15 | markoman | extra duplicious work |
| 13:15 | manutter | Oh, it works with predefined keys and such? |
| 13:15 | manutter | I haven't had a chance to look up the refs yet. |
| 13:16 | markoman | i briefly looked ResourceBundles |
| 13:16 | manutter | The php stuff is nice (can't believe I'm saying that!) because it uses the actual strings instead of predefined constants |
| 13:17 | manutter | The downside is that if you have __("Last Name") and __("Last Name:"), it will create separate entries for the versions with and without the colon |
| 13:18 | amalloy | manutter: that is not a downside |
| 13:18 | markoman | but __() is still a function, would be easy on clojure too i think. but like you said, there is repeating stuff, contextual stuff and other going on on |
| 13:18 | manutter | amalloy: Yeah, not the best example off the top of my head, but you get the idea |
| 13:19 | manutter | the translator sometimes ends up translating the same string multiple times with only slight cosmetic variations. |
| 13:19 | amalloy | yeah |
| 13:19 | amalloy | but it's often hard for you to know what variations are really cosmetic, so it's not really something i'd worry about |
| 13:19 | markoman | id like to get around it by thinking I have already specified the path and text, now how can I get them on separate language files using what I already wrote as a default value |
| 13:20 | cemerick | using actual strings instead of semantically-significant keys seems like a recipe for very subtle translation bugs |
| 13:22 | manutter | could be |
| 13:22 | markoman | but i would still like to test that path |
| 13:22 | amalloy | cemerick: atlas looks pretty shiny |
| 13:22 | cemerick | amalloy: Thanks :-) |
| 13:23 | cemerick | The site is not horrible, but I think the actual visualization is really ugly at the moment. |
| 13:23 | cemerick | Thus, "preview". |
| 13:26 | osoleve | how do you represent characters? like, in Scheme, for a you'd put #\a |
| 13:26 | manutter | just \a |
| 13:26 | osoleve | okay, thanks |
| 13:26 | osoleve | and does that work for parens? |
| 13:27 | manutter | I believe so |
| 13:27 | osoleve | nifty. thank you. |
| 13:31 | osoleve | hm. how come (contains? '(\+) \+) evaluates to false? |
| 13:32 | fliebel | osoleve: You want `some` |
| 13:32 | fliebel | (contains? '(\+) 0) |
| 13:32 | fliebel | &(contains? '(\+) 0) |
| 13:32 | sexpbot | ⟹ false |
| 13:33 | amalloy | contains? |
| 13:33 | clojurebot | contains? is for checking whether a collection has a value for a given key. If you want to find out whether a value exists in a Collection (in linear time!), use the java method .contains |
| 13:33 | fliebel | hm… ##(some #{:a} [:b :a c]) |
| 13:33 | sexpbot | java.lang.Exception: Unable to resolve symbol: c in this context |
| 13:33 | fliebel | (some #{:a} [:b :a :c]) |
| 13:33 | fliebel | grrr |
| 13:33 | osoleve | &(some (\+) \+) |
| 13:33 | sexpbot | java.lang.ClassCastException: java.lang.Character cannot be cast to clojure.lang.IFn |
| 13:33 | amalloy | clojurebot: contains? is for checking whether a collection has a value for a given key. If you want to find out whether a value exists in a Collection (in linear time!), use clojure.core/some or the java method .contains |
| 13:33 | clojurebot | 'Sea, mhuise. |
| 13:34 | amalloy | &(some #{'+} '[- a +]) |
| 13:34 | sexpbot | ⟹ + |
| 13:34 | amalloy | &(some #{'*} '[- a +]) |
| 13:34 | sexpbot | ⟹ nil |
| 13:35 | osoleve | is there a way to get that to work for characters instead of symbols? |
| 13:35 | amalloy | osoleve: it already does |
| 13:35 | amalloy | just take my last example, swap the symbols for characters, and BAM |
| 13:37 | osoleve | ohhhkay. thanks. |
| 13:41 | osoleve | i promise my questions will have more substance before long, by the way :) |
| 13:44 | amalloy | heh |
| 14:20 | osoleve | what's wrong with this function? i get "unable to resolve symbol: stack in this context" and two unmatched parentheses, but I can't find them. :( https://ideone.com/Oq8d8 |
| 14:21 | amalloy | well the former is caused by the latter, i'm sure |
| 14:21 | amalloy | osoleve: ' doesn't delimit strings in clojure |
| 14:22 | osoleve | ...oh, that fixed it. thanks! |
| 14:22 | amalloy | you also don't *have* to quote '(), but it's no crime to do so |
| 14:23 | osoleve | okay, good to know |
| 14:23 | choffstein | Hey all -- quick question. Does clojure have a pattern similar to Ruby Facet's ergo, the gem andand, or try (http://ozmm.org/posts/try.html). Basically -- it allows you to say, 'perform this method if the object is not nil'. I run into this pattern a lot and created a macro to do it for me -- but I was wondering if clojure had something more elegant. It's basically a Maybe Monad... |
| 14:23 | osoleve | is it weird to feel like there *aren't enough* parentheses in clojure? |
| 14:24 | TimMc | osoleve: Like in let bindings and maps? |
| 14:24 | amalloy | clojure.contrib.core/-?> |
| 14:24 | osoleve | specifically, in cond |
| 14:24 | amalloy | or just use (or), choffstein |
| 14:25 | amalloy | i guess or is a silly solution |
| 14:25 | choffstein | amalloy: can I carry you around in my pocket? |
| 14:25 | TimMc | amalloy: botsnack |
| 14:26 | amalloy | Thanks! Om nom nom!! |
| 14:26 | choffstein | you are quite amazing. |
| 14:26 | choffstein | gotta reboot the computy. thanks for the quick answer :) |
| 14:29 | amalloy | $botsnack |
| 14:29 | sexpbot | amalloy: Thanks! Om nom nom!! |
| 14:56 | raek | technomancy: Getting Started with Emacs links to your repo for package.el. Where should the user put the file in order to use it? Should something be added to the .emacs file also? (I'm thinking about the non Emacs Starter Kit case here) |
| 14:57 | technomancy | raek: yeah, that should be http://bit.ly/pkg-el23 these days. |
| 14:57 | raek | ok, I'll change that |
| 14:58 | technomancy | either my wiki privileges got reverted or I am not smart enough to figure out confluence or I would do it myself |
| 14:58 | raek | the Edit button appears if you have write access. it should be left to the Add button |
| 14:59 | raek | I had to ask clojure-dev after the move to confluence to get write access |
| 15:01 | raek | technomancy: also, i vagely recall that you had doubts regarding whether lein repl would work as an inferior-lisp-program. well, it works fine for me. |
| 15:01 | technomancy | yeah, I had access at one point. dunno what happened. |
| 15:01 | technomancy | oh nice |
| 15:03 | raek | I think they restricted the write access to members of the clojure-dev group only a while ago |
| 15:04 | redinger | technomancy: You have access again |
| 15:04 | redinger | Sorry about that |
| 15:28 | osoleve | how do you differentiate, visually, between a predicate and a clause in a cond? |
| 15:28 | osoleve | emacs clojure-mode is lining them up for me and it's throwing me off |
| 15:29 | cemerick | preds and clauses generally are paired on the same line |
| 15:29 | malkomalko | what's the best way in a for loop to build up some type of seq? is it really something like (def v (conj v 1)) ? that seems anti clojurish |
| 15:30 | cemerick | If you have a degenerate case where your case and/or clause are very large, put each on their own line, with an additional line on either side of the pair |
| 15:30 | osoleve | cemerick, ahh, okay. thank you. |
| 15:31 | amalloy | malkomalko: holy moly no |
| 15:31 | malkomalko | I know :) |
| 15:31 | ataggart | malkomalko: the for loop creates the seq, you just need to have the body emit the element, e.g. (for [x (range 10)] (* x x)) |
| 15:32 | malkomalko | but we need to keep track of certain things from iterating through the loop |
| 15:32 | malkomalko | we just don't want to return things from the loop, but push things into a stack, and do certain things based on some type of logic |
| 15:33 | ataggart | then you don't want to use for. Perhaps reduce. |
| 15:33 | amalloy | malkomalko: putting a :when clause in your for loop would solve your issue but you're being pretty vague so it's unclear if that's what you mean/want |
| 15:33 | amalloy | ataggart: untrue! ##(for [x (range 5) y (range 5) :when (> y x)] [y x]) |
| 15:33 | sexpbot | ⟹ ([1 0] [2 0] [3 0] [4 0] [2 1] [3 1] [4 1] [3 2] [4 2] [4 3]) |
| 15:34 | ataggart | yes, but my statement was based on "push things into a stack" |
| 15:34 | amalloy | obviously a dumb toy example, but you can arrange for your for to not include some elements |
| 15:34 | malkomalko | we need to iterate through a list, and capture every "foo", then for every "foo" we need to tell when the last "bar" event form the same sequence happened and assign it to the proper "foo" |
| 15:34 | amalloy | ataggart: we're both guessing at what he actually wants |
| 15:34 | fliebel | xy? |
| 15:34 | clojurebot | xy is http://mywiki.wooledge.org/XyProblem |
| 15:34 | malkomalko | #/form/from/ |
| 15:35 | fliebel | weee |
| 15:35 | amalloy | ~o/ |
| 15:35 | clojurebot | \o ... High five! |
| 15:35 | amalloy | cutest command ever |
| 15:36 | fliebel | malkomalko: Yea, sounds like reduce with a compound reduction should work. |
| 15:36 | amalloy | fliebel: well, reduce *always* works |
| 15:36 | fliebel | :) |
| 15:36 | amalloy | it's like a sledgehammer of doom |
| 15:37 | amalloy | great tool, super-powerful, but if you solved *everything* that way it'd be awkward |
| 15:37 | malkomalko | We're working with a iterator-seq and need to accomplish this in one pass |
| 15:37 | fliebel | amalloy: True, but what else? Plain loop/recur? I don't see much else, besides atoms and such doing this. |
| 15:38 | malkomalko | think we need a reduce.. you might be right |
| 15:39 | amalloy | fliebel: reduce looks like the best solution to problem X, indeed |
| 15:40 | raek | malkomalko: I think of something like (reduce (fn [foos x] (cond (foo? x) (assoc foos ... x ...), (bar? x) (update-in foos [(foo b)] ... x ...), :else foos)) {} coll) |
| 15:41 | malkomalko | thanks.. gonna give that a go and pull it a part |
| 15:42 | raek | here, "foos" is passed to the function and the new "foos" is returned. this might remind you of assignment, but no mutation is actually performed |
| 15:46 | ataggart | malkomalko: https://gist.github.com/929424 |
| 16:05 | technomancy | redinger: aha; thanks. |
| 16:05 | technomancy | (was at lunch) |
| 16:05 | technomancy | I'm never sure with confluence/jira if it's a pebkac or not. |
| 16:16 | markoman | hmh, how do you catch exceptions on clojure? Im getting null pointer and hard to debug what causes it |
| 16:16 | markoman | java.lang.NullPointerException |
| 16:17 | ieure | markoman, http://clojure.org/special_forms#Special Forms--(try expr* catch-clause* finally-clause?) |
| 16:17 | ieure | Hm, not sure if Chrome bungled that URL or what. |
| 16:17 | ieure | But you should get the idea. |
| 16:20 | markoman | thanks. it ways catch classname name, what should I use in these? |
| 16:21 | markoman | java.lang.NullPointerException is classname, what is name then? |
| 16:24 | ieure | I think you want (catch NullPointerException) |
| 16:31 | markoman | lets see, maybe i should really study to use emacs gdb |
| 16:32 | markoman | if I just knew how to put debug point on file |
| 17:49 | raek | technomancy: I'm about to change the link in the confluence wiki to http://bit.ly/pkg-el23 now, but I would also like to add some instructions on what do with the file... So, what is the recommended way? Just put it in .emacs.d/ and add (require 'package) to .emacs or something? |
| 17:51 | technomancy | raek: oh... yeah, you need to add marmalade as a package source. the instructions on http://marmalade-repo.org are good. |
| 17:51 | raek | yes, the marmalade part is already in place |
| 17:52 | raek | it's the package.el installation process I'm concerned about now |
| 17:53 | technomancy | oh, sure. download, require, add-to-list is all. |
| 17:53 | znutar_ | is there any risk to adding extra sources for elpa packages if I want extra stuff like haskell mode through elpa? Is there an ordering that matters, or does it just look for the latest version of any packages available? |
| 17:55 | technomancy | I think highest version wins. |
| 17:57 | raek | technomancy: so this is what I will use as an example: https://gist.github.com/929822 any comments? |
| 17:57 | raek | (note that I don't have much experience with how these things should be done prooperly) |
| 17:59 | technomancy | raek: that should work. |
| 17:59 | raek | technomancy: ok, thanks a lot for the help! |
| 18:00 | technomancy | np; thanks for curating |
| 18:14 | raek | updated: http://dev.clojure.org/display/doc/Getting+Started+with+Emacs |
| 18:59 | eckroth | I want to switch to clojure 1.3 to use priority-map; I've listed org.clojure.contrib/command-line 1.3.0 in my project.clj; but if I try to :use it, I get an error |
| 19:00 | eckroth | is there a way to determine if 1.3 command-line is being loaded or if 1.2 is being loaded (since other deps bring in contrib 1.2)? |
| 19:00 | eckroth | adding :verbose true to the :use statement shows: (clojure.core/load "/clojure/contrib/command_line") and so on but no info about version |
| 19:02 | _ato | eckroth: try (-> (clojure.lang.RT/baseLoader) (.getResource "clojure/contrib/command_line.clj")) |
| 19:02 | _ato | should tell you the jar it's from |
| 19:03 | eckroth | _ato, awesome, it worked: #<URL jar:file:/.../lib/clojure-contrib-1.2.0.jar!/clojure/contrib/command_line.clj> |
| 19:04 | eckroth | now I just need to "force" version 1.3.0 to be :use'd |
| 19:12 | carllerche | do all protocol implementations have to be in the same namespace? |
| 19:12 | amalloy | carllerche: definitely not |
| 19:13 | carllerche | I defined a protocol and implemented it in other namespaces... if I require the namespace, how can I refer to the function? It seems that I have to refer to it w/ the namespace |
| 19:14 | carllerche | I'm probably misunderstanding something wrt protocols & records |
| 19:15 | carllerche | amalloy: do I refer to a function by the namespace that defines the protocol then? |
| 19:15 | amalloy | yes |
| 19:17 | amalloy | (ns a) (defprotocol Animal (noise [])) (ns b (:require a)) (extend-protocol a.Animal Dog (noise [] (bark))) (a/noise (Dog.)) ; vaguely |
| 19:17 | amalloy | i don't have the syntax right because i don't use protocols much, but the protocol stuff all lives in the originating namespace |
| 19:18 | raek | so it's not a/Animal? |
| 19:19 | amalloy | raek: i dunno. like i said, syntax |
| 19:19 | amalloy | it's in a, anyway |
| 19:19 | raek | ok, I played a bit with it in the repl |
| 19:19 | raek | should be a/Animal |
| 19:20 | raek | and protocol methods require at leas one "this" arg |
| 19:21 | raek | carllerche: protocols and protocol methods follows the same rules as regular defs and defns when considering namespaces |
| 19:21 | carllerche | ok... let me see if I can get this to work... |
| 19:22 | raek | deftypes/defrecords though... they need to be imported (since they become java classes) |
| 19:23 | carllerche | In amalloy's example, (noise...) doesn't take an argument, but one is passed. is it implied? |
| 19:23 | raek | also, you don't need to qualify the protocol method names, only the protocol name |
| 19:23 | raek | no, it's a syntax error |
| 19:23 | carllerche | hehe |
| 19:23 | raek | better than "syntactic salt"? |
| 19:25 | raek | eh, the comment re. namespace qualified names was meant to refer to the (extent-protocol ...) form |
| 19:26 | amalloy | raek: i got that part right, didn't i? qualified Animal but not noise |
| 19:26 | raek | yup, I just read that incorrectly |
| 19:33 | joshua | How do I write a function in Clojure which returns a recursive function? |
| 19:34 | amalloy | (fn foo [x] (foo (dec x))) |
| 19:34 | brehaut | (constantly reduce) |
| 19:35 | eckroth | well I thought I could just update libraries to use clojure 1.3; but I can't update them all; how can I force :use of a certain version of a clojure.contrib library? |
| 19:35 | ieure | joshua__, Can you be a little more specific? Do you really mean a function which _returns_ a different, recursive function? |
| 19:35 | amalloy | brehaut: i'm aware that you're kidding, so i'll play along: reduce isn't really recursive, it uses loop/recur. you must mean (constantly iterate) |
| 19:35 | ieure | joshua__, Or are you asking how to write a recursive function? |
| 19:36 | joshua__ | ieure, Yes. I mean a function which returns a different recursive function. |
| 19:36 | amalloy | i think joshua__ just means http://stackoverflow.com/questions/5626641/non-tail-recursive-anonymous-functions-in-clojure/5626864#5626864 |
| 19:36 | brehaut | amalloy: reduce abstracts recursion; the implementation is merely a detail |
| 19:36 | eckroth | joshua__, can you just return a (fn myfunc [x] ....) so that you can use myfunc as the recursive call |
| 19:37 | joshua__ | eckroth, I'll let you know. I hadn't realized I could give an anonymous function a name like that. |
| 19:37 | ieure | joshua__, I’m not 100% sure you’re asking the right question; but you’d just say: (fn [] (let [recursive-function (fn [x] (recursive-function (dec x)))] recursive-function)) |
| 19:38 | amalloy | ieure: that doesn't work actually |
| 19:38 | ieure | amalloy, :( |
| 19:38 | eckroth | ieure, isn't it easier to do (fn myfunc [x] ... (myfunc (dec x))) etc.? |
| 19:38 | amalloy | which is what (fn the-local-name [...]) form is for |
| 19:38 | ieure | eckroth, Guess so, I wasn’t aware that you could label functions like that. |
| 19:38 | eckroth | ieure, right, I haven't yet used it myself either |
| 19:39 | ieure | Of course you probably really want to return a method that uses loop/recur to avoid blowing the stack. |
| 19:39 | raek | if you use letfn, it will do both (let [foo ...] ...) and (fn foo ...) |
| 19:39 | amalloy | ieure: i actually use this feature semi-regularly |
| 19:39 | amalloy | to implement anonymous lazy-seq functions that call themselves lazily instead of with loop/recur |
| 19:39 | raek | "named anonymous functions"... |
| 19:40 | raek | eckroth: this stuff is complicated. basically, you should never have two versions of the same lib on the classpath at the same time |
| 19:41 | eckroth | raek, thanks for the response; yeah it sucks but some deep dependency (of incanter I think) pulls clojure.contrib 1.2 |
| 19:42 | eckroth | raek, frankly I'd rather drop incanter than muck with this for hours :( |
| 19:42 | joshua__ | amalloy, thanks amalloy. Got it workingg. |
| 19:42 | ieure | joshua__, I would recommend that you check out loop/recur. |
| 19:42 | ieure | You don’t have to mess with labeling your fn at all, and you won’t blow the stack. |
| 19:42 | raek | hrm, I guess maven can't figure out that they are the same thing in this case, since you have one monolithic contrib version and one contrib module (and those are treated as different libs) |
| 19:43 | joshua__ | ieure, ieure I was actually using those, but they didn't work in this case. It wasn't a tail recursive function call if I wanted to express it in the form in which I wanted to express it. |
| 19:43 | eckroth | raek, well problem (probably) solved: dropping incanter dropped c.contrib 1.2 plus a whole lot of other junk (eg. servlet-api, log4j, etc.) a bit ridiculous I think |
| 19:45 | ieure | joshua__, Okay, just making sure you’re aware of the risks and the tools to mitigate them. |
| 19:48 | raek | eckroth: hopefully, this will be less painful when everyone has migrated to "new contrib" |
| 20:09 | carllerche | Is there a way to recompile everything in emacs instead of C-c C-k for each buffer? |
| 20:12 | technomancy | carllerche: M-x mark-buffer C-c C-r |
| 20:12 | technomancy | or C-c C-l to force all other required namespaces to reload |
| 20:13 | amalloy | technomancy: C-x h is bound to M-x mark-whole-buffer |
| 20:13 | carllerche | technomancy: thanks |
| 20:13 | technomancy | amalloy: ah... I rebound that ages ago and recently dropped my rebinding, so it's missing from my mental mapping |
| 20:14 | technomancy | carllerche: hard to say what's best without knowing why you don't want to use C-c C-k though |
| 20:15 | amalloy | brb, gotta go tweet that i knew something about emacs that technomancy didn't |
| 20:15 | carllerche | technomancy: I changed a protocol implementation it seems in one file and ran the tests, and got an error saying the protocol wasn't implemented |
| 20:16 | carllerche | technomancy: and the "fix" (unless I did something wrong) was running C-c C-k in all buffers that used functions from that protocol |
| 20:17 | eckroth | carllerche, I'm glad you asked this question; hopefully someone knows the answer; I always resort to lein clean in such cases :( |
| 20:17 | carllerche | I had the files in question already opened so i just went to them and recompiled, but I can see how that could get out of hand |
| 20:19 | eckroth | carllerche, actually, the problem strongly discouraged me from using records, so I brought their use down to just one; maybe I am missing some great benefits, though |
| 20:19 | technomancy | my solution so far has been not to work on files that involve protocols and records. =\ |
| 20:27 | carllerche | eckroth: do I have to bounce lein swank after running lein clean? |
| 20:28 | eckroth | carllerche, ugh, good question; I'm still figuring this out (the best way to manage a repl) |
| 20:29 | eckroth | carllerche, obviously that'd work, but I hope it's not necessary; you might want to google for how to clean the repl's definitions |
| 20:31 | eckroth | carllerche, you might try this: http://stackoverflow.com/questions/5409345/clojure-repl-doesnt-pick-up-changes-made-to-defrecord/5409404#5409404 |
| 20:32 | eckroth | carllerche, or: http://www.learningclojure.com/2011/01/cleaning-old-definitions-from-repl.html |
| 20:45 | carllerche | eckroth: the reload-all trick didn't seem to reload the protocol / record stuff :( |
| 21:37 | cemerick | That Steve Yegge thread is bizarre. |
| 21:37 | KirinDave | cemerick: He is, as a rule, a weird guy with a weird following. |
| 21:37 | KirinDave | cemerick: Like, you'd think he'd be really into certain aspects of FP. Ask him about it tho, and he gets a slightly agitated demeanor. |
| 21:38 | KirinDave | cemerick: Mentioning Haskell to him is, it is reported, an excellent way to get blown off. |
| 21:38 | cemerick | He goes on and on about nonlocal exits, as if that's the ticket to nirvana or something. |
| 21:38 | cemerick | Just really strange. |
| 21:38 | KirinDave | cemerick: This is not really an industry known as a bastion of stable people. :) |
| 21:39 | brehaut | got a link for this thread? |
| 21:39 | hiredman | first thing approaching a conversation I've had with him (didn't make it to the seajure meet up) and I am already convinced he is a complete tool and can no longer bring myself to read anything he has written :( |
| 21:39 | cemerick | http://groups.google.com/group/seajure/browse_frm/thread/18baa18ffdbdd790 |
| 21:40 | cemerick | I'm generally all about inclusiveness and marketing, but I found myself nodding along with hiredman's replies, so there's a data point. ;-) |
| 21:40 | lancepantz | heh |
| 21:41 | lancepantz | scary |
| 21:41 | johnmn3 | hi |
| 21:41 | KirinDave | Well let's consider why Yegge is famous. |
| 21:41 | KirinDave | 1. Epically long rants |
| 21:41 | KirinDave | 2. Very approachable theory |
| 21:41 | KirinDave | 3. Really long rants |
| 21:41 | cemerick | I didn't realize people got burnt for wanting to use CL-style loop macros. |
| 21:42 | cemerick | pprint is driven by CL-style format, fer cryin' out loud |
| 21:42 | cemerick | it's not like we're a bunch of raving lunatics (for the most part) |
| 21:43 | cemerick | KirinDave: I had bought into the theory that he was building the acceptable lisp (i.e. better javascript) when he went to Google. |
| 21:43 | cemerick | Goes to show just how not-plugged-in I am. |
| 21:44 | hiredman | I may be a lunatic, but I am an engaged lunatic |
| 21:48 | ataggart | has anyone seen Steve submit a patch for clojure? |
| 21:49 | cemerick | No; that was one of hiredman's points. |
| 21:49 | hiredman | I asked him to point them out so they won't be overlooked |
| 21:49 | cemerick | heh |
| 21:51 | brehaut | wtf "What Clojure needs is to be non-prescriptive." the prescriptive parts are what make it so damn great. sigh |
| 21:51 | hiredman | I almost pulled the trigger on an email to stu saying he is "no moses" and "rich is no god" so "when he comes back from the mount with tablets I have questions" |
| 21:51 | cemerick | There's a lot of very sad gems. |
| 21:51 | hiredman | (been listening to jewish reggae) |
| 21:55 | znutar_ | less prescription, more proscription |
| 21:55 | ataggart | the only clear issue he brings up is single-passI see only one clear issue he brings up, single-pass compilation. He seems to have a lot of free time on his hands. |
| 21:55 | ataggart | oh well, portal2 just finished downloading. |
| 21:56 | hiredman | it will be interesting to see what he comes up with for a debugger |
| 21:57 | hiredman | I don't think single pass compilation is a burden, but I will admit that maybe if it went away suddenly some hitherto undiagnosed malaise might go away |
| 21:57 | hiredman | but I have no firm feeling that it is a problem |
| 21:59 | brehaut | also i am under the impression that his beloved javascript is single pass |
| 22:00 | hiredman | well, I think he ended up on js because he didn't see an viable alternatives, so hardly his beloved |
| 22:01 | brehaut | sure. |
| 22:03 | cemerick | The merits of this compiler design or that one are sort of moot in the big picture. Clojure's not "dead at the starting gate" because of a choice there or bit shift operators or what-have-you. |
| 22:04 | cemerick | It's just a list of local problems that likely seem REALLY IMPORTANT in a local context. |
| 22:04 | cemerick | Anyway. |
| 22:06 | znutar_ | Doesn't a tendency towards non-prescriptivism in the language idiom combined with macros and such just lead to a kind of language-learning hell where you have to learn a different DSL for every nook and cranny? |
| 22:07 | znutar_ | I'm not a lisper so I don't really have much context, but that'd seem to be the peril of that approach. |
| 22:08 | johnmn3 | and clojure offline html preprocessors out there? Like this: http://dorward.me.uk/software/dolt/ |
| 22:08 | cemerick | Every language is prescriptive, it's just a matter of degrees and orientations and cliques. |
| 22:09 | cemerick | "Multiparadigm" just means that there's multiple prescriptions all operating in parallel. |
| 22:18 | ttmrichter | cemerick: Often with painful sharp edges clashing over your rapidly-cooling corpse. :) |
| 22:19 | cemerick | ttmrichter: did someone mention C++? ;-) |
| 22:20 | ttmrichter | I wonder why that language leaped to the forefront of your thoughts.... |
| 22:21 | brehaut | it had to be that or javascript |
| 22:32 | TimMc | brehaut: JS doesn't really have prescriptions... |
| 22:32 | brehaut | TimMc: it does, its just got 6 of them and they are only half implemented |
| 22:33 | TimMc | I think of it more as layers of fads in JS architecting. |
| 22:33 | brehaut | there is at least: procedural, prototypal, classical, functional |
| 22:33 | brehaut | and they have all been there since ever |
| 22:34 | TimMc | Hmm, I think I was on a slightly different track. |
| 22:34 | TimMc | I'll agree with that assessment. |
| 22:34 | brehaut | TimMc: i will agree that it has fads |
| 22:35 | TimMc | I don't think I've seen prototypal in the wild. |
| 22:35 | brehaut | TimMc: one of the things i like least about JS is how every library has a radically different style |
| 22:35 | brehaut | TimMc: http://jslint.com/ |
| 22:35 | TimMc | What, is that done in JS? |
| 22:35 | TimMc | prototypally? |
| 22:36 | brehaut | yes |
| 22:36 | TimMc | Unfortunately, I need to get back to studying for my comp graphics exam, so I can't keep on in this discussion. :-( |
| 22:36 | brehaut | JS Lint is written by crockford who is the most vocal proponent of prototypal JS |
| 22:36 | TimMc | aha |
| 22:36 | TimMc | yes he is |
| 22:36 | brehaut | in particular check out the parser |
| 22:36 | brehaut | its a prototypal pratt operator presendce parser |
| 22:37 | TimMc | will do |
| 22:46 | chewbran1a | hi all, anyone using clj-http to get gzipped content? |
| 22:47 | chewbran1a | the readme on https://github.com/getwoven/clj-http says "The client transparently accepts and decompresses the gzip and deflate content encodings." but the content is still coming in as binary for me |
| 22:53 | brehaut | chewbran1a: are you using clj-http.core/request or clj-http.client/request ? |
| 22:53 | brehaut | (or one of the verb specific wrappers in client) |
| 22:55 | chewbran1a | brehaut: clj-http.client/get |
| 22:57 | brehaut | chewbran1a: version ? |
| 22:58 | brehaut | chewbran1a: https://github.com/getwoven/clj-http/blob/master/src/clj_http/client.clj#L52-63 https://github.com/getwoven/clj-http/blob/master/src/clj_http/client.clj#L167 |
| 22:59 | chewbran1a | http://pastebin.com/Qwd0G8JR |
| 22:59 | chewbran1a | brehaut: clojure 1.2 and clj-http 0.1.2 |
| 23:00 | brehaut | chewbran1a: ok. does it have a reasonable content type? |
| 23:00 | brehaut | (the page) |
| 23:01 | brehaut | huh it does |
| 23:01 | chewbran1a | yeah encoding gzip content type json |
| 23:01 | chewbran1a | looking at wrap-decompression right now |
| 23:02 | brehaut | chewbran1a: i wonder if its not the gzip that is failing, but its not decoding the string correctly |
| 23:04 | technomancy | hiredman: I literally have a google image search for "so let it be written; so let it be done" open in my browser right now as I read what you said. |
| 23:05 | technomancy | hiredman: great minds think alike! |
| 23:07 | chewbran1a | brehaut: I just double checked, get basically the same output from curl: http://pastebin.com/5n7wDnu0 |
| 23:08 | brehaut | chewbran1a: im not an expert on curl, but i thought it handled gzip just fine |
| 23:11 | chewbran1a | brehaut: not sure, but it works fine piping curl to gunzip: http://pastebin.com/jhNeeT0J |
| 23:11 | brehaut | chewbran1a: curious. unfortunately i have to get back to my actual dayjob |
| 23:12 | chewbran1a | brehaut: no problem, thanks for taking a peek |
| 23:14 | technomancy | it's really disappointing to me that there's no "motivational poster" style image of "so let it be written; so let it be done" |
| 23:14 | technomancy | but that's probably just because all the images of Yul Brenner as Pharaoh are in portrait orientation. |
| 23:32 | xcv | I'm having some trouble with leiningen; the project compiles just fine, but 'lein uberjar' hangs halfway through... Anyone seen this before? |
| 23:34 | jlf` | technomancy: http://wigflip.com/automotivator/ |
| 23:40 | xcv | (I'm using Leiningen version 1.4.2) |
| 23:41 | technomancy | jlf`: powered by common lisp! nice. =) |
| 23:42 | jlf` | yeah, that's a xach production |
| 23:43 | technomancy | http://p.hagelb.org/so-let-it-be-written.jpg |
| 23:44 | technomancy | xcv: you probably have some side-effects in a top-level form. you want the code that's supposed to be run when your uberjar is executed to live in a -main function. |
| 23:44 | technomancy | xcv: also, why not run "lein upgrade" to get onto 1.5.2? |
| 23:49 | xcv | pretty awesome to get feedback from the creator so quickly! :) |
| 23:50 | xcv | the top level -main function calls one function that produces side-effects |
| 23:51 | xcv | but it still compiles fine... |
| 23:51 | xcv | (the side-effects are just IO statements, it's a compiler) |
| 23:51 | technomancy | oh right; hmmm... it pauses in the middle of "including foo..."? |
| 23:52 | xcv | the output looks like this just before it hangs: |
| 23:52 | xcv | http://pastie.org/1814154 |
| 23:53 | xcv | I can't see where it's stuck |
| 23:53 | technomancy | interesting; it's running dependencies twice |
| 23:54 | technomancy | does "lein jar" hang as well? |
| 23:54 | xcv | yes, seems to hang |
| 23:54 | xcv | shouldn't take this long, I think |
| 23:55 | technomancy | is the source public? |
| 23:55 | xcv | sure |
| 23:55 | xcv | it's a school project |
| 23:55 | xcv | I haven't shared it anywhere, but I could paste the code |
| 23:56 | xcv | here it is |
| 23:56 | xcv | http://pastie.org/1814156 |
| 23:56 | xcv | don't let the Icelandic freak you out :P |
| 23:57 | technomancy | it's ok; I've read Journey to the Centre of the Earth. |
| 23:57 | technomancy | any dependencies? |
| 23:58 | xcv | right now, the end result is a bunch of println calls, which will be changed to file IO calls, but I was trying the project build anyway |
| 23:58 | xcv | here's the project.clj file: http://pastie.org/1814158 |
| 23:59 | technomancy | where's SchemeLexer coming from? |
| 23:59 | xcv | that's a java file in the root of the project directory |
| 23:59 | xcv | (by the way, Swank-Clojure is awesome) |
| 23:59 | technomancy | ah, that wasn't really me |