2010-03-21
| 00:19 | DTrejo | does anyone use a combination of leiningen and counterclockwise? |
| 00:19 | DTrejo | I suppose it's not much of a combination since it's not really one or the other.. nvm |
| 02:20 | JonSmith | if anyone is awake, what do people use for video games in clojure (i'm not looking to make video games per-say, merely applications more interactive than swing or awt can do...) |
| 02:23 | rfg | JonSmith: I am using LWJGL for one project (a game) and JOGL for some scientific rendering in another project. |
| 02:24 | rfg | If you want to use LWJGL, you should probably check out penumbra. |
| 02:25 | JonSmith | yeah i've played with penumbra it is pretty neat |
| 02:25 | JonSmith | i downloaded clj-processing and thatis cool too |
| 02:25 | JonSmith | kind of doing a survey to figure out what i want i guess |
| 02:26 | JonSmith | i want to do a GUI client type thing, but I want it to be more than just a plain old buttons and drop-downs GUI |
| 02:27 | JonSmith | i should take a second look at penumbra though as it has been a while since i used it |
| 03:46 | psykotic | currently there doesn't seem to be a way to merge futures |
| 03:48 | psykotic | for example, if you have a list of futures and want to process them in 'finishing order'. |
| 03:48 | hiredman | you need a futureM |
| 03:48 | psykotic | hm? |
| 03:49 | psykotic | i noticed that you could use promises, since they allow you to check whether they have been delivered yet or not. but even then, i don't see how to write an _efficient_ merge. |
| 03:49 | psykotic | i don't want to have a thread that spins until one of the promises is delivered. |
| 03:50 | hiredman | you can build a blockingqueue on promises, or just use from j.u.concurrent |
| 03:50 | psykotic | right, i've done this kind of thing with normal parallel primitives before. i was just checking whether this (bog standard) problem had a solution in core i overlooked. |
| 03:51 | hiredman | I tend to use lbq a lot |
| 03:52 | psykotic | with that, you can easily build a loop that processes the futures in completion order. |
| 03:52 | psykotic | wait for the next future to finish; remove it from the outstanding list, deref it, rinse and repeat, until no futures left. |
| 03:53 | hiredman | no, best would be writing your own future macro that would stick the result into a queue when it's done |
| 03:54 | psykotic | blockingqueue looks nice |
| 03:54 | LauJensen | Morning crew |
| 03:54 | hiredman | hello |
| 03:57 | rfg | Hello |
| 04:01 | LauJensen | I'm suffering from these completely silent failures in futures, is there any way to fix that except running the code in the main thread? |
| 04:03 | hiredman | (future (try … (catch Exception e (-> e .getMessage println)))) |
| 04:04 | LauJensen | lemme try |
| 04:05 | hiredman | you can also create a logging function or macro or use the logging stuff from contrib |
| 04:06 | LauJensen | Yea, that would be last resort, but your example above works perfectly, thanks |
| 04:06 | hiredman | :( |
| 04:06 | hiredman | people are watching lein-gae, I should delete it |
| 04:07 | LauJensen | I made an empty repo called Clabango - Had quite a few watchers as well :) |
| 04:26 | LauJensen | I know I'm stretching my luck here, but is there a javalib for capturing a graphics object and storing it as a frame in an animated gif ? |
| 04:27 | LauJensen | (if so, please send it to me with a lein-string attached) |
| 04:36 | vy | LauJensen: You'd have more luck in ##java |
| 04:42 | LauJensen | Or perhaps ##google |
| 04:42 | LauJensen | Anyway, doesnt hurt to ask |
| 04:50 | LauJensen | Recently I've been seeing this a lot when doing slime-load-file |
| 04:50 | LauJensen | swank.util.io.proxy$java.io.StringWriter$0 cannot be cast to java.io.PrintWriter |
| 04:50 | LauJensen | Anybody know what thats about? |
| 04:58 | hiredman | some library somewhere expects *err* to be a PrintWriter |
| 04:58 | hiredman | I forget the details |
| 05:01 | LauJensen | So its a matter of waiting for an update for swank-clojure ? |
| 05:02 | hiredman | http://groups.google.com/group/swank-clojure/browse_frm/thread/36cc0c9d325a9c76/e7602744e126102b?tvc=1#e7602744e126102b |
| 05:03 | hiredman | *shrug* |
| 05:03 | LauJensen | great, theres already a patch and its only a problem when tracking reflections |
| 05:52 | zab | Hi all. Just writing something that takes a Java InputStream and copies it to an OutputStream. Is this the idiomatic way of doing it in Clojure? http://paste.lisp.org/display/96708 |
| 05:53 | zab | (I am unsure of using `def` to represent the Java object that will be returned.) |
| 05:55 | rfg | Why not: http://paste.lisp.org/display/96708#1 |
| 05:55 | rfg | ? |
| 05:55 | Chousuke | that doesn't work |
| 05:55 | rfg | Oh sorry |
| 05:55 | rfg | Wait |
| 05:55 | Chousuke | you need to use let |
| 05:56 | LauJensen | zab: As far as human possible, avoid modifying anything outside your functions body |
| 05:56 | LauJensen | +ly |
| 05:57 | Chousuke | so you should just do (let [os (ByteArrayOutputStream.)] (Streams/copy ...) os) |
| 05:58 | zab | The return value of Streams/copy is not what I want returned from the function. I want the 2nd argument returned. The new ByteArrayOutputStream will be populated with the input stream. |
| 05:59 | zab | So in Java, you would declare the OutputStream first, and then mutate it within the function call, and then return it. But in Clojure I do not know how to do the equivalent. |
| 06:00 | zab | LauJensen: Yeah I thought so. Hence my hesitation with the `def`. :( There has to be a better way? |
| 06:00 | Chousuke | use let within the function |
| 06:00 | Chousuke | ie. make the outputstream in the function and just return it |
| 06:00 | LauJensen | zab: What Chousuke said. If you define something within a function and mutate it there, its still considered a pure function in regards to the rest of your program |
| 06:01 | Chousuke | though that's not a pure function even if you did that |
| 06:01 | zab | Chousuke, LauJensen: Ahh okay. I was unsure if that would work because I know you cannot rebind using let. But that wouldn't be rebinding anyway. |
| 06:01 | Chousuke | because it presumably affects the inputstream |
| 06:02 | zab | Chousuke: Would there be any way to achieve a pure function with my problem? Or is this something that I have to live with seeing as I am playing in Java land? |
| 06:02 | Chousuke | I don't think so. |
| 06:02 | Chousuke | it's pretty difficult to clone an inputstream :/ |
| 06:03 | Chousuke | I mean, you can do it, but it will still have side-effects |
| 06:04 | zab | Chousuke: Okay cool. I'll stick with this approach then. :) |
| 06:04 | zab | How about function naming conventions. Is this function named right? `new-output-stream` |
| 06:05 | Chousuke | but not all of your functions need to be pure. if most of them are, you're doing good. |
| 06:05 | rfg | "What's in a name?" |
| 06:05 | Chousuke | zab: what's the function for, exactly |
| 06:06 | zab | takes an InputStream and creates a new OutputStream object for it |
| 06:07 | Chousuke | so it's like a unix pipe? I'm not sure if I understand the semantics of the copy operation right :/ |
| 06:07 | Chousuke | it's not just creating a new output stream, it's copying stuff |
| 06:07 | Chousuke | and I think that should be apparent in the name |
| 06:08 | zab | yeah it's copying the InputStream to the OutputStream and returning that. |
| 06:08 | zab | just a hoop I have to jump through to get it to play nice with app engine |
| 06:09 | Chousuke | maybe name the function according to what the outputstream represents instead |
| 06:09 | Chousuke | I think as it is, it may be a bit too generic. |
| 06:10 | zab | hmm okay. I see your point. |
| 06:10 | Chousuke | or you could name it make-output-from |
| 06:10 | Chousuke | which would read pretty nicely |
| 06:11 | zab | Nice. Sort of like how Objective-C methods are named, read like a sentence. make-output-from [input-stream] |
| 06:12 | zab | thanks for the help Chousuke, LauJensen, rfg :) |
| 06:13 | rfg | My help was substandard, but thank you :) |
| 06:13 | zab | rfg: heh you gave it a shot |
| 06:44 | patrkris | what is the nicest way of checking a series of let-bindings that are serially dependent, i.e in (let [a expr1, b expr1] ...) b is dependent on a not being nil? I want sort of the behavior of if-let, i.e. the body is not evaluated unless both a and b are non-nil/non-false. Hopefully it makes sense. |
| 06:45 | noidi | the maybe monad does exactly that |
| 06:45 | noidi | afaik |
| 06:45 | patrkris | noidi: cool, will check it out |
| 06:45 | patrkris | noidi: in contrib? |
| 06:45 | noidi | http://onclojure.com/2009/03/05/a-monad-tutorial-for-clojure-programmers-part-1/ |
| 06:46 | patrkris | thanks |
| 06:46 | noidi | so you want b to be evaluated only if a is non-nil, and the body evaluated only if b is non-nil? |
| 06:47 | patrkris | noidi: exactly |
| 06:47 | noidi | "Anyway, the idea is that whenever a computational step yields nil, the final result of the computation is nil, and the remaining steps are never executed." |
| 06:47 | noidi | from the tutorial |
| 06:47 | noidi | so maybe monad should do the trick |
| 06:49 | patrkris | sounds like it! |
| 06:49 | patrkris | i would have thought that this is such a common scenario that it would be in core |
| 07:43 | ttmrichter | I saw an interesting question on StackOverflow that I'm curious about the answer to myself: http://stackoverflow.com/questions/2486752/in-clojure-how-to-define-a-variable-named-by-a-string |
| 07:44 | ttmrichter | Is there a way to assign values to symbols generated from strings? |
| 07:51 | psykotic | you can do it if the (parts of the) string are known at compile time |
| 07:52 | psykotic | and there is always eval when that isn't the case |
| 07:52 | psykotic | though that's good to avoid :) |
| 07:52 | Chousuke | this time, it's restartable. |
| 07:54 | Chousuke | (def cont (second (read-one (seq "\"foo")))) -> (second (cont (seq "bar\""))) -> "foobar" |
| 08:00 | Chousuke | I'll need to find some way of managing the "continuations" if I want to make this feasible :/ right now I have a vector parser and a string parser and they both have a cond checking whether they need to "save" their state or not. |
| 08:08 | ttmrichter | Whoever sepp2k is on StackOverflow, thanks for the succinct and helpful answer. I completely forgot about the ~ construct. |
| 08:08 | psykotic | can anyone recommend a good on the standard java API (io, net, collections, etc) that isn't just a reference but also a "best practices", tricks and pitfalls, etc, kind of thing? |
| 08:08 | psykotic | a good book even |
| 09:46 | ivan | is there any sane way to write clojure while using variable width fonts in (any) editor? |
| 09:47 | LauJensen | ivan: The font you use shouldn't affect your ability to write clojure-code :) |
| 09:47 | Fossi | why would one do that? :D |
| 09:47 | Fossi | well, it helps the indention if it's mono |
| 09:47 | ivan | well, variable width makes it impossible to align code in a dumb editor, yeah |
| 09:48 | ivan | and I think they're nearly all dumb |
| 09:59 | ivan | maybe elastic tabstops, heh |
| 10:00 | psykotic | ivan: i don't like proportional fonts, but as long as the "alignment" consists entirely of spaces, it works fine |
| 10:00 | psykotic | the problem is when you have a mix of spaces and non-spaces |
| 10:00 | Raynes | ivan: Emacs think's you're dumb. :| |
| 10:01 | esj | Raynes: emacs keeps proving that I'm dumb ;) |
| 10:01 | ivan | psykotic: well, if I align things for my variable width font, it's be misaligned for most people |
| 10:01 | ivan | s/it's/it'll/ |
| 10:01 | Raynes | clj-sandbox keeps proving that I'm dumb. |
| 10:04 | Raynes | Waiting for an email is the most agonizing thing in the world to do when have absolutely nothing to do but sit. |
| 10:04 | Raynes | I wish everybody I knew lived in the same timezone as me. It would make this stuff so much easier. |
| 10:05 | esj | but you live in your own timezone, waking up at 5pm :) |
| 10:05 | Raynes | esj: Yeah, and that's usually convenient because everybody else I know is waking up when everybody in my timezone is going to sleep. :| |
| 10:07 | Raynes | I swear, this timeout stuff will be the death of me. |
| 10:36 | bobo_ | could someone take a peek at http://github.com/bobo/Retwis-clj/blob/master/src/retwis/view/view.clj and give me some tips on what to learn/do to improve the quality of the code? |
| 10:48 | The-Kenny | bobo_: First of all: *Never* put the closing-parens in an empty line. That looks so awful |
| 10:48 | Raynes | That's a Cism that doesn't work out in Lisp. |
| 10:54 | Fossi | hmm. i try to compile a gen-class with lein, but it only says "All :namespaces already compiled" |
| 11:01 | Licenser_ | greetings |
| 11:04 | Licenser_ | ,(loop [] (recur)) |
| 11:04 | clojurebot | Execution Timed Out |
| 11:05 | Raynes | Licenser: Hai! |
| 11:06 | Raynes | Licenser: You should probably look at thunk-timeout in clojurebot's sandbox. |
| 11:06 | Raynes | I tried to fix it myself, but I faileded. :p |
| 11:06 | Licenser_ | hrm hmr |
| 11:06 | Licenser_ | ah you're the Raynes :) greetings |
| 11:06 | Raynes | Greetings, sir, and thank for you clj-sandbox. :> |
| 11:06 | Licenser_ | yes I figured the problem, was trying out if clojure bot has the same problem, fortunately not |
| 11:07 | Licenser_ | the s-seq function is the evil doer |
| 11:07 | Licenser_ | and you're welcome :) |
| 11:08 | Raynes | Licenser: Once we get this fixed, I'll finish up what I'm doing and issue a pull request detailing what I've done. I think you'll like the modifications I've made. :> |
| 11:09 | Raynes | create-sandbox and create-sandbox-compiler were just screaming for optional keyword arguments. |
| 11:09 | Licenser_ | Yes you are totally right |
| 11:09 | Licenser_ | I git attacked by the evil 'own purpose blindness' :P |
| 11:09 | Raynes | I:p |
| 11:09 | Raynes | :p* |
| 11:11 | Raynes | Just got your email. |
| 11:11 | Licenser_ | *nods* |
| 11:12 | Raynes | Licenser_: Alright. I'll be watching for the push. Once that's out, I should be able to toss a pull request your way sometime tomorrow. |
| 11:12 | Licenser_ | :) great! |
| 11:17 | Raynes | Licenser_: I'll also point out that most of the problems with the doc-strings were merely typos and not actual the result of your English. |
| 11:18 | Raynes | And the other ones really just needed to be reworded a bit. |
| 11:18 | Licenser_ | Raynes: ^^ Thanks |
| 11:19 | Licenser_ | lets see if this fixes the issue |
| 11:20 | Raynes | I thought about going ahead and dropping the class-tester function in there and adding some java.lang classes to the whitelist, but we might have different definitions of what is 'secure', so I figured I'd let you handle that. |
| 11:20 | Licenser_ | My definition of secure is mostly 'what comes to mind' |
| 11:21 | Raynes | Most of what I added to my own whitelist are just java.lang.String and other similar classes. |
| 11:24 | Fossi | lein is driving me nuts. should have a verbose option :( |
| 11:33 | Licenser_ | Raynes: fixed :) |
| 11:33 | Raynes | Awesome! |
| 11:33 | Raynes | :D |
| 11:34 | Raynes | In that case, I might be finished enough to send you a pull request tonight even. |
| 11:34 | Licenser_ | I'll add another comment and then push |
| 11:35 | Raynes | :D |
| 11:39 | Licenser_ | Raynes: pushed |
| 11:39 | Licenser_ | I love the partial commit thing from git |
| 11:39 | Licenser_ | that is so great |
| 11:39 | Licenser_ | I really could make 3 atomic commits out of the changes I made to the file, much cleaner |
| 11:39 | Raynes | Neat. |
| 11:41 | Licenser_ | now I'll take a shower, eat a burger and see if I add the class stuff next |
| 11:56 | Licenser_ | ,(loop [_ (def x 1)] ) |
| 11:56 | clojurebot | DENIED |
| 11:56 | Licenser_ | nice :) |
| 12:25 | Licenser_ | hmm I really would need a second livetime :( |
| 12:36 | Raynes | Licenser: It still doesn't seem to be working right. |
| 12:36 | Raynes | When I tried (loop [] (recur)), it gave me a NullPointerException, and (range 1 100000000) just kept on going until the heap ran out of space. |
| 12:38 | programble | hello |
| 12:38 | programble | is there a clojure equivalent to java's import java.io.* ? |
| 12:39 | Licenser_ | Raynes: I tried the loop recure ad it worked, very odd |
| 12:40 | Raynes | Licenser: What about (range 1 1000000000)? |
| 12:40 | Licenser_ | can you give me the exact code you ran (with creating the sandbox and all. |
| 12:40 | Raynes | Yeah, one moment. |
| 12:40 | Raynes | Licenser_: http://gist.github.com/339388 This code is mostly from my bot. |
| 12:40 | Licenser_ | thanks :) |
| 12:41 | arohner | programble: there's no equivalent |
| 12:41 | programble | :( |
| 12:42 | Raynes | programble: (:import (java.package Class1 Class2 Class3)) is close enough. |
| 12:45 | Raynes | Huh. And now it seems to be throwing a security exception for every piece of code. |
| 12:45 | Raynes | This is confusing. |
| 12:46 | Licenser_ | Wow |
| 12:46 | Licenser_ | Raynes: I'd love to fix this, but I need some kind of test case to work against :( |
| 12:47 | Raynes | Licenser_: http://gist.github.com/339394 |
| 12:47 | Licenser_ | ah sorry |
| 12:47 | Licenser_ | I id miss that |
| 12:47 | Raynes | That is with a clean pull from your repo. |
| 12:47 | Licenser_ | meh |
| 12:49 | Raynes | Licenser_: Having all sorts of trouble today. :p |
| 12:49 | Licenser_ | Raynes: that is good, allows me to improve the library! |
| 12:49 | Licenser_ | do you have a .java.policy file? |
| 12:49 | Raynes | Yeah. |
| 12:50 | Licenser_ | okay |
| 12:50 | Licenser_ | so that is not the problem |
| 12:51 | Raynes | Licenser_: You can't reproduce the example I pasted above? :o |
| 12:51 | Licenser_ | Raynes: No, I had to make a .policy file myself :P |
| 12:53 | Licenser_ | actually no I can't reproduce it o.O |
| 12:53 | Raynes | Oh joy. |
| 12:54 | Licenser_ | http://grab.by/3cLO |
| 12:54 | Raynes | http://gist.github.com/339397 |
| 12:55 | Raynes | The exact code I'm using and the exact error I'm getting. |
| 12:56 | Licenser_ | Raynes: I don't know what is wrong with your copy |
| 12:56 | Raynes | Nor do I. |
| 12:56 | Licenser_ | http://grab.by/3cLR |
| 12:57 | Raynes | Licenser_: A hah! |
| 12:57 | Raynes | It's working now. |
| 12:57 | Licenser_ | aha? |
| 12:57 | clojurebot | Paul Graham is the creator of the other new lisp |
| 12:57 | Licenser_ | what did you do? |
| 12:57 | Raynes | Something must have happened to my clone. |
| 12:57 | Raynes | I just re-cloned the repo. |
| 12:57 | LauJensen | C evaluates math exprs left to right, right? |
| 12:57 | Licenser_ | pew okay that makes me happy :) |
| 12:57 | Raynes | Now let's see if the loop example works now. |
| 12:58 | Licenser_ | :D |
| 12:58 | Raynes | Alright (loop [] (recur)) times out correctly, but (range 1 1000000) does not. |
| 12:58 | Raynes | So, everything is working except that. |
| 12:59 | hiredman | what about (iterate inc 0) |
| 12:59 | Licenser_ | Raynes: okay I'll work on the range |
| 13:00 | Raynes | hiredman: Same thing. |
| 13:00 | Licenser_ | aha I think I know the problem! |
| 13:00 | Licenser_ | :d |
| 13:00 | Raynes | :> |
| 13:03 | Licenser_ | Raynes: actually for me it runs through :P |
| 13:03 | Licenser_ | 999999 |
| 13:03 | Licenser_ | no error at all |
| 13:03 | Raynes | I probably have a smaller heap. |
| 13:04 | Raynes | Test with (iterate inc 0). |
| 13:04 | Licenser_ | *nods* |
| 13:04 | Raynes | Same thing. |
| 13:04 | Licenser_ | not exactly |
| 13:04 | Licenser_ | a Heap exception is expected if you eat too much heap |
| 13:04 | Licenser_ | it seems to be 'fast enough' not to trigger a timeout |
| 13:04 | hiredman | I imagine the lazy seq is being realized outisde of the sandbox |
| 13:05 | Raynes | hiredman: Bingo. |
| 13:05 | Licenser_ | hiredman: yap it is, just fixed that :) |
| 13:06 | Raynes | :) |
| 13:06 | Licenser_ | Raynes: I write a few tests and push a fix |
| 13:07 | Raynes | Alright. |
| 13:07 | Raynes | Licenser_: I'm going to have to redo the changes I made, but I wont be able to do that until later. However, expect a pull request later tonight. |
| 13:08 | Licenser_ | Raynes: cool thanks! |
| 13:24 | Raynes | Licenser_: If you get a chance, ping me when you get that pushed. |
| 13:24 | Licenser_ | Raynes: of cause i'll give you a qry OK? |
| 13:25 | Raynes | Kay. |
| 13:25 | Raynes | <3 |
| 13:25 | Raynes | Thanks. |
| 13:28 | Licenser_ | I'm found a box in the create sandbox code I'd want to fix before pushing |
| 13:50 | programble | hm... |
| 13:50 | programble | oh nvm |
| 13:55 | Licenser_ | Raynes: you'll like how I implemented the class stuff :) |
| 14:58 | LauJensen | Is there a nice little util where I can inject a (debug-here) to get a repl once that code is eval0red ? |
| 15:23 | TobiasR | hey :) |
| 15:23 | TobiasR | im kinda new to clojure and got some trouble with compojure anyone able/willing to help me out for a couple minutes? |
| 15:25 | dnolen | TobiasR: ask way |
| 15:25 | Raynes | Licenser_: Doing (loop [] (recur)) does timeout correctly, but it doesn't stop. I don't think the thread is actually being stopped. |
| 15:26 | TobiasR | i built clojure/clojure-contrib and compojure from source and put all jars into a lib folder (subfolder of my project folder) |
| 15:26 | Raynes | Licenser_: Do (loop [] (recur)) and then watch your cpu. |
| 15:26 | dnolen | TobiasR: any reason you are not just using lein? |
| 15:27 | TobiasR | i think i got confused by it somehow but no, no real reason |
| 15:28 | LauJensen | ~google reddit clone in 91 lines of clojure |
| 15:28 | clojurebot | First, out of 64 results is: |
| 15:28 | clojurebot | Reddit Clone in 10 minutes and 91 lines of Clojure | BEST IN CLASS |
| 15:28 | dnolen | TobiasR: if you decide to do things from scratch you'll learn a lot but it will definitely be more confusing than just using lein. |
| 15:28 | clojurebot | http://www.bestinclass.dk/index.php/2010/02/reddit-clone-in-10-minutes-and-91-lines-of-clojure/ |
| 15:28 | LauJensen | TobiasR: Go check that out :) |
| 15:28 | TobiasR | okay tyvm ill do that |
| 15:38 | Raynes | Licenser_: I'm going to toss you an email, just in case you don't get this. |
| 15:48 | notallama | i just put my monad library on git, because the contrib one isn't magical enough. http://github.com/hclarke/clojure_combinators |
| 15:48 | notallama | basically, i hacked a bit of type inference on. examples and more combinators will come later, probably. |
| 15:54 | jwr7 | So I've been trying to dig into enlive, but just doing (html-resource "home.html") gives me a NullPointerException (enlive_html.clj line 38). Hmm. |
| 15:55 | dnolen | jwr7: enlive looks up resources on the classpath |
| 15:55 | jwr7 | incidentally, I also get a NullPointerException when doing a C-c C-c in SLIME. C-x C-e works just fine, though. |
| 15:56 | dnolen | jwr7: I usually make a directory called resources under src. I use lein to manage the classpath. if you're using netbeans or an IDE, it should handle this for you as well. |
| 15:56 | jwr7 | dnolen: bingo! Thanks! Though it actually _was_ in the classpath... after I moved it to where my other clj files were, it worked. |
| 15:57 | jwr7 | dnolen: I use SLIME. Actually, scratch that. I fight SLIME. By the way, what version of SLIME should I be using so that it works with swank-clojure and clojure-1.1? |
| 15:58 | jwr7 | I've been having all sorts of issues and I wonder what people actually use. |
| 15:58 | dnolen | jwr7: I got tired of fighting. I use ELPA to install SLIME and swank-clojure |
| 15:58 | jwr7 | dnolen: Hmm... I could try that. I got used to using SLIME from CVS when working with CL. |
| 15:59 | dnolen | one downside is you have to do some work to get the ELPA SLIME to work with other Lisps. I'm playing around with other CLs at the moment so it's a minor annoyance for me. |
| 15:59 | dnolen | I'm not playing around I mena |
| 16:01 | jwr7 | dnolen: ok, thanks for the hints. I'll try using the ELPA versions and see where that'll get me. |
| 16:01 | dnolen | jwr7: should just work. usually take only a couple of minutes to setup. |
| 16:02 | jwr7 | dnolen: it'll likely take more, as I have a huge baggage of .el customizations back from CL hacking days. |
| 16:02 | jwr7 | …but I'll give anything for a reliable SLIME and swank-clojure. |
| 16:04 | Licenser_ | Raynes: I'm here :) |
| 16:05 | Raynes | Licenser_: Hi. |
| 16:05 | Raynes | :) |
| 16:05 | Raynes | I'll be leaving for a while soon, so I sent you the email anyways in case you didn't get what I said earlier. |
| 16:06 | Licenser_ | *nods* Just read it :) thanks for the hint I fear you're right |
| 16:06 | Raynes | Licenser: One good thing: I think this might be the last bug you have to fix for a while. :) |
| 16:10 | Licenser_ | Raynes: that makes me a sad Licenser, fixing bugs means people are using the code which gives me the fluffy feeling of being needed :P |
| 16:11 | Raynes | Hehe. |
| 16:11 | Raynes | Licenser_: clj-sandbox is really important to me at this point. It provides a clean solution for my bot. |
| 16:11 | TobiasR | One more (probably stupid) question. The reddit clone worked fine. now i cut out everything except the import and the basic server stuff. Renamed the file etc. Edited the project.clj. But when i try lein compile i get "All :namespaces already compiled." lein clean doesn't work either and if i run the jar from ueberjar it doesnt find the class. Any idea what i might be doing wrong? |
| 16:11 | Raynes | Otherwise, I would have had steal hiredman's sandbox. |
| 16:12 | Licenser_ | :) Raynes, I did the stealing for you :P so actually I'd call it borriwing since I asked ^^ |
| 16:12 | Raynes | :p |
| 16:12 | Licenser_ | hrm |
| 16:12 | Licenser_ | future-cancle isn't a solution |
| 16:13 | Raynes | Licenser_: You might have to do what thunk-timeout does. |
| 16:13 | Raynes | I'm not sure you can fix this with futures. |
| 16:13 | Licenser_ | Raynes: I fear I might, but I'd had hoped that I would not have to get another peace from clojurebot, also I found the futures a cleaner less javaish solution |
| 16:13 | Raynes | Indeed. |
| 16:14 | Raynes | But you need to be able to stop the thread. |
| 16:14 | Licenser_ | I know |
| 16:15 | Raynes | Licenser_: I have to take off for a few hours. Good luck with the fixing of the code. :p I'll pull it and finish up when I get op. |
| 16:15 | Raynes | home* |
| 16:16 | Licenser_ | thanks, for the testing/help Raynes, I'll have the timeouts fixed by the time you get back :) take care and have a good time |
| 16:17 | hoeck | TobiasR: you could try to manually delete the classes and lib folders, and then try to lein compile or lein uberjar again |
| 16:27 | TobiasR | hoeck: did that already, still nothing |
| 16:28 | TobiasR | hoeck: i just run lein from the directory with the project.clj dont i? |
| 16:28 | Licenser_ | Raynes: I fixed it, it seems future really isn't the solution, gladly hiredman solved the problem already, or actually Chousuke when I get it right from the comments |
| 16:32 | Licenser_ | hmm how are futurs working exactly, it seems not usable to calce tasks, is that a feature or a bug |
| 16:32 | Licenser_ | ? |
| 16:33 | dnolen | Licenser: calce tasks? |
| 16:33 | Licenser_ | cancel sorry |
| 16:34 | dnolen | it create a new Future object which has a cancel method from what i can see looking at the source |
| 16:34 | dnolen | ,(source future-call) |
| 16:34 | clojurebot | java.lang.Exception: Unable to resolve symbol: source in this context |
| 16:38 | Licenser_ | hmm hmm |
| 16:38 | Licenser_ | I tried feature-cancle but it didn't work |
| 16:38 | jwr7 | Ok, so enlive is really, really cool. I'm trying to find out how to construct selectors at runtime and can't see a way to do it. I need to be able to select and do something to [:div.widget#widget-id], but I will know the actual widget-id at runtime. |
| 16:39 | hoeck | TobiasR: so your lein compile still gives the same "all :namespaces already compiled" message? |
| 16:39 | Raynes | ~def future-call |
| 16:39 | TobiasR | hoeck: yeah it does |
| 16:39 | TobiasR | i created a new lein project now |
| 16:39 | TobiasR | hoeck:but still, i guess i configured somethign wrong |
| 16:40 | Raynes | Licenser_: About to leave, but chouser and rhickey told me why it didn't work yesterday, or the day before. They'll be able to tell you. |
| 16:40 | Licenser_ | okay thanks Raynes :) |
| 16:40 | hoeck | when invoking a lein on already compiled files, it does not print anything here, just silently quits |
| 17:23 | defn | hello everyone |
| 17:23 | defn | 'lo Licenser_ |
| 17:23 | Licenser_ | hi defn |
| 17:23 | Licenser_ | how is your parser going? |
| 17:23 | defn | not much new in the last day or so |
| 17:24 | defn | im gonna play with it right now i think |
| 17:24 | Licenser_ | cool :) |
| 17:24 | defn | since we last talked i did make it output HTML |
| 17:25 | defn | i think my next move is to weight code blocks which were said by people who a contributors |
| 17:25 | Licenser_ | that is discriminatig :P I'll sue you if you do that |
| 17:25 | defn | :X |
| 17:25 | defn | :) |
| 17:26 | defn | hehe yes i know |
| 17:27 | Licenser_ | you could run the code and wight in if a exception is trhown or not ;P |
| 17:27 | defn | wight? |
| 17:27 | defn | ohhhh i see what you mean |
| 17:27 | Licenser_ | weight sorry |
| 17:28 | defn | yeah i actually considered that |
| 17:28 | Licenser_ | I am writing a sandbox library right now if you want to do that :P </advertisment> |
| 17:28 | defn | as long as the code ran in a handy little sanbdox and didnt do anything like write to files or execute anything |
| 17:28 | defn | yeah! |
| 17:28 | defn | gimme gimme Licenser_ ! |
| 17:28 | defn | :) |
| 17:28 | Licenser_ | http://github.com/Licenser/clj-sandbox |
| 17:29 | defn | awesome |
| 17:33 | defn | now i just need to wake up |
| 17:33 | Licenser_ | ewww I hate fish |
| 17:34 | defn | why do you think im smacking myself with one?! |
| 17:34 | Licenser_ | you're a masochist? |
| 17:34 | defn | haha |
| 17:42 | Licenser_ | defn: so if you want to use the lib feel free to ask me or annoy me :P |
| 17:47 | jneira | hi folks! |
| 17:48 | jneira | @clojurebot |
| 17:49 | Licenser_ | hi jneira |
| 17:50 | jneira | , (use 'clojure.contrib.json) |
| 17:50 | clojurebot | java.io.FileNotFoundException: Could not locate clojure/contrib/json__init.class or clojure/contrib/json.clj on classpath: |
| 17:50 | jneira | jum where is json in clojure-contrin 1.1.0???? |
| 17:51 | jneira | i am a bit confused with that |
| 17:51 | Licenser_ | jneira: json-read json-write |
| 17:51 | Licenser_ | that are what the libs are called |
| 17:51 | jneira | jum thnx but then i have a problem |
| 17:52 | Licenser_ | jneira: shoot? |
| 17:53 | polypus | stylistic question: when you want to write the empty list, say in a recursive function with it as a base case. what do you guys write; (), '(), (list), nil ? |
| 17:55 | Licenser_ | polypus: I personally would go with '() |
| 17:56 | defn | yeah, that's my sense also |
| 17:56 | polypus | that was my first choice. () seems a bit naked |
| 17:56 | Licenser_ | yea I didn't even know that () works :P |
| 17:56 | Licenser_ | and (list) seems unnessessary |
| 17:57 | Chousuke | and nil is not the empty list :P |
| 17:57 | polypus | no but it'll work as a base case for cons |
| 17:57 | Chousuke | right. |
| 17:57 | Chousuke | in that case I usually use nil |
| 17:57 | Chousuke | though most often that ends up being implicit due to use of when or something similar |
| 17:58 | Licenser_ | Chousuke: the thunk-timeout function comes from you right? I wonder do you know why it does not work with future? |
| 17:58 | polypus | k thx guys |
| 17:58 | Chousuke | maybe futures are run in a threadpool or something (guess) :P |
| 17:59 | Licenser_ | hmm |
| 17:59 | Licenser_ | + |
| 17:59 | Licenser_ | and the thread pool won't terminate when I tell it to? Sneaky sneaky |
| 18:00 | Chousuke | I wrote that function a long time ago. I don't remember what I did :P |
| 18:00 | Licenser_ | heh |
| 18:00 | Chousuke | but I do remember that the thing uses a deprecated API to kill the thread |
| 18:00 | Licenser_ | :( |
| 18:00 | Chousuke | so if there is a threadpool involved, that might not work. |
| 18:01 | Chousuke | But there's no way to kill a non-cooperating thread in java other than the stop method, which is deprecated :/ |
| 18:01 | Licenser_ | narf that is evil |
| 18:01 | KirinDave | hiredman: You around? |
| 18:04 | technomancy | futures run in the agent thread pool |
| 18:04 | Licenser_ | ah and the thread pool stuff prevents them from being stopped, sneaky |
| 18:05 | technomancy | shutdown-agents would stop them, but then there's no way to start them again |
| 18:08 | Licenser_ | technomancy: but that would stop all agents right not only the one that runs my task? |
| 18:08 | technomancy | Licenser_: yeah, it's a shotgun approach |
| 18:08 | technomancy | sorry, not paying attention to context |
| 18:08 | Licenser_ | heh :) |
| 18:08 | Licenser_ | technomancy: no worries your answers are helping a lot |
| 18:09 | Licenser_ | that would be the shoting approach :P |
| 18:10 | technomancy | beats an EMP |
| 18:11 | defn | Licenser_: would you mind taking a look at something for me when you have a chance? I am getting weird java heap sapce problems in my walton code all of a sudden and dont know where they came from |
| 18:11 | KirinDave | not for style points ;0 |
| 18:11 | Licenser_ | defn: I'd love to :) |
| 18:11 | defn | :) |
| 18:12 | Licenser_ | ust drop me a link |
| 18:12 | Licenser_ | *just |
| 18:13 | Chousuke | the shotgun approach would be to connect the computer to a machine that fires a shotgun. |
| 18:13 | Chousuke | I suppose that would kill the thread for sure :P |
| 18:14 | technomancy | Chousuke: lots of edge cases to consider though |
| 18:14 | Chousuke | yes. it might also kill the operator |
| 18:14 | technomancy | running out of ammo; damage being absorbed by the keyboard and display, etc. |
| 18:14 | defn | Licenser_: http://github.com/defn/walton/blob/master/src/walton/core.clj -- I swear the stuff from extract-code -> was working before -- but for some reason it breaks my REPL every time i use it now |
| 18:15 | Licenser_ | Chousuke: is there a Java API for shotgins? And more importently can we model a clean functional layer around a shotgin? After all they do have a state pretty directly |
| 18:16 | defn | if there is not a shotgun library we need to build one |
| 18:17 | defn | (defn pull-trigger [shotgun, direction] ...) |
| 18:17 | KirinDave | ugh. Annotations are the sand in my shoes. |
| 18:17 | Licenser_ | defn: did you try to take a new repl? |
| 18:17 | KirinDave | Clojure + lots of interop annotations = misery. |
| 18:17 | defn | Licenser_: ive made a new repl like 4-5 times |
| 18:17 | defn | it breaks every time i call the extract-code fn |
| 18:18 | defn | find-lines works, but extract-code breaks it |
| 18:18 | defn | but as i said, this was working fine before or i wouldnt have committed it |
| 18:19 | Licenser_ | okay just to get sure :) |
| 18:19 | defn | *nod* |
| 18:22 | Licenser_ | defn: did you add the sorted set method just recently? |
| 18:23 | Licenser_ | that means your entire map gets computed, I think |
| 18:23 | Licenser_ | that can fill your heap quickly I guess |
| 18:25 | defn | Licenser_: yeah, although just running find-lines without limiting my *print-length* makes it go nuts |
| 18:26 | Licenser_ | heh |
| 18:27 | defn | i mean, i was able to run sorted-set before without any issue |
| 18:27 | defn | just trying to figure out what changed |
| 18:27 | Licenser_ | hmm |
| 18:27 | Licenser_ | more data? |
| 18:27 | Licenser_ | bigger search results? |
| 18:27 | defn | it should be the same data :\ |
| 18:27 | defn | can you run that without it breaking on you? |
| 18:28 | Licenser_ | let me clone that |
| 18:29 | Licenser_ | do you have the link to the data still= |
| 18:29 | defn | yeah it should be in the README |
| 18:29 | defn | http://www.devinwalters.com/clojure-logs.tar.bz2 |
| 18:30 | Licenser_ | ah okay |
| 18:30 | Licenser_ | *Gets the data* |
| 18:32 | Licenser_ | defn: I get java.io.FileNotFoundException: Could not locate clj_html/core__init.class or clj_html/core.clj on classpath: (core.clj:1) |
| 18:33 | defn | you ran lein deps? |
| 18:33 | Licenser_ | ah yea :P |
| 18:33 | Licenser_ | good point |
| 18:33 | Licenser_ | narf |
| 18:33 | defn | hehe :) |
| 18:33 | KirinDave | hiredman: Reping |
| 18:33 | Licenser_ | I hoped lein repl would do that :( |
| 18:33 | KirinDave | uhg, bad word merge |
| 18:33 | defn | Licenser_: i got it to work after removing the sorted-set and reducing my print-length to 10 |
| 18:34 | Licenser_ | hmm |
| 18:34 | defn | ah-ha, if i add sorted-set it breaks |
| 18:34 | defn | you were correct |
| 18:35 | Licenser_ | :) |
| 18:35 | Licenser_ | I keep getting no results, I wonder why |
| 18:35 | defn | M-x slime-set-default-directory |
| 18:36 | defn | and then set the project root as your directory |
| 18:36 | Licenser_ | you should not have your local thing as the defaullt ;) |
| 18:37 | Licenser_ | better |
| 18:38 | Licenser_ | and yes I got a OOM exception too |
| 18:38 | Licenser_ | I guess you just find too much so it is odd |
| 18:38 | Mec | is it a problem to put a conditional before a call to swap! or do i need to put it inside the swap! call? |
| 18:39 | Licenser_ | hmm hmm I even get it for an no hut situation |
| 18:40 | Licenser_ | unless I'm mistaken and there is a lot of discussion about the concatcatcat function |
| 18:41 | Licenser_ | I think apply might be the evil doer here |
| 18:42 | technomancy | Mec: "a conditional" is pretty vague |
| 18:42 | defn | i dont like evil doers |
| 18:42 | technomancy | Mec: if the condition affects the atomicity of the change it should be inside the call to swap |
| 18:43 | Mec | technomancy: sorry, i check if the map has a key, and if not then i swap! with assoc |
| 18:43 | Licenser_ | nope happens with set too |
| 18:44 | technomancy | Mec: in that case I think it's more correct to perform the check inside the swap to avoid (very unlikely) a race condition |
| 18:45 | Licenser_ | wow I even get the problem when I remove the set thing |
| 18:45 | defn | Licenser_: yeah i just saw that as well |
| 18:45 | Mec | technomancy: ok thanks, i thought so |
| 18:45 | defn | Licenser_: something is very wrong here.... |
| 18:45 | Licenser_ | aye and I wonder what :) |
| 18:47 | Licenser_ | okay even when returning the sort results I get this error, which is odd |
| 18:49 | defn | Licenser_: yeah it is a very angry piece of code |
| 18:49 | defn | :( |
| 18:49 | Licenser_ | we'll find the bad bad memory eater don't worry |
| 18:49 | defn | junkies! |
| 18:49 | defn | jinkies! rather |
| 18:51 | Licenser_ | defn: heh |
| 18:52 | Licenser_ | it seems the data set is too big for the repl |
| 18:52 | Licenser_ | (reduce + (map count parsed-logs)) creates a out of memory exception |
| 18:52 | defn | uh oh... |
| 18:52 | Mec | Is there a pastie site specific for this channel? |
| 18:53 | defn | Mec: everyone uses gists on github |
| 18:53 | defn | Mec: they give nice syntax hilighting taboot aboot! |
| 18:53 | Licenser_ | defn: if we can make it entirely lazy we should be happy |
| 18:53 | defn | Licenser_: yes, when does it become *un-lazy* |
| 18:54 | Licenser_ | in the moment you search it |
| 18:54 | defn | oh! right! :) |
| 18:54 | defn | Licenser_: im able to use find-lines |
| 18:54 | Licenser_ | you are? |
| 18:54 | defn | i just need to make sure i have my *print-length* very low |
| 18:55 | defn | i have it at 10 right now |
| 18:55 | defn | (set! *print-length* 10) |
| 18:55 | Licenser_ | defn: I used (def _ (find-lines ...)) so no output should have been given |
| 18:56 | defn | maybe print-level? |
| 18:59 | Mec | technomancy: could you see if this looks right? http://gist.github.com/339625 |
| 18:59 | Licenser_ | defn: no it's not a print issue, def does not print anything |
| 19:00 | technomancy | Mec: you might be able to perform the same thing with merge |
| 19:01 | defn | Licenser_: I just magically got this to work: (map #(re-find *regex* %) (find-lines "zipmap" parsed-logs)) |
| 19:01 | defn | where *regex* is: (def *regex* (re-pattern (str "\\(.*" "zipmap" ".*\\)"))) |
| 19:01 | Licenser_ | defn: fixed it :) |
| 19:01 | technomancy | (doc merge) |
| 19:01 | clojurebot | "([& maps]); Returns a map that consists of the rest of the maps conj-ed onto the first. If a key occurs in more than one map, the mapping from the latter (left-to-right) will be the mapping in the result." |
| 19:01 | technomancy | merge the hash with {location {}} in such a way that the original hash "wins" |
| 19:02 | Mec | technomancy: ok, thanks |
| 19:02 | defn | Licenser_: i changed the map in parsed-logs to a pmap, but that's probably not that big of a difference |
| 19:02 | Licenser_ | defn: making your search a global variable does not really seem like a solution :) |
| 19:02 | Mec | technomancy: lacking a merge function is that how you would do it or is there a cleaner way? |
| 19:02 | defn | Licenser_: heh |
| 19:03 | Licenser_ | give me a second and I post you something |
| 19:04 | defn | it seems like it is working now after i removed the (remove empty?...) |
| 19:05 | technomancy | Mec: yeah, if I didn't have merge I'd do it like you pasted |
| 19:05 | Licenser_ | 0.5s to run the query and no heap problems |
| 19:05 | Licenser_ | hardly eats any memory |
| 19:06 | Licenser_ | I'll fork and change it :9 |
| 19:06 | defn | apply sorted-set and remove empty? both absolutely kill it |
| 19:07 | jneira | well people im stuck with java.lang.VerifyError: class xxx overrides final method meta.()Lclojure/lang/IPersistentMap |
| 19:08 | jneira | hi Licenser_ |
| 19:08 | Licenser_ | hi jneira |
| 19:08 | jneira | and everyone |
| 19:08 | Licenser_ | defn: o.o forgot about the sorted set, testing right now |
| 19:08 | Licenser_ | 1.5s but no heap problem |
| 19:09 | jneira | i think is related to versioning .. |
| 19:09 | defn | i can live with that |
| 19:09 | defn | Licenser_: was it the with-out? |
| 19:09 | defn | im interested to see this |
| 19:09 | Licenser_ | defn: no with everything :) |
| 19:09 | defn | haha d'oh |
| 19:11 | defn | Licenser_: let me know when you make the pull request, and thank you again for helping me :) |
| 19:11 | Licenser_ | defn: :) no worreis and yes I always wanted to try out that pull request thing :P |
| 19:14 | ericthorsen_ | anyone know if the clojure assets on build.clojure.org are built with 1.5 or 1.6 ? |
| 19:14 | defn | hah Licenser_ |
| 19:15 | defn | i know the feeling |
| 19:15 | Licenser_ | defn: sory that you are my guiny pig here :P |
| 19:16 | defn | Licenser_: Collaborating is fun |
| 19:17 | Licenser_ | defn: yap, sadly I hand't had the change to recolaborate that often yet :) so I am happy to finaly try out this pull requests |
| 19:17 | defn | *nod* |
| 19:19 | Licenser_ | defn: you got a pull request. |
| 19:20 | jneira | mmm the error was caused for classes of a prev compilation |
| 19:21 | jneira | i guess |
| 19:22 | jneira | but i think errors continue being unfriendly |
| 19:22 | jneira | in clojure |
| 19:24 | defn | Licenser_: pulled |
| 19:24 | Licenser_ | defn: and working for you too= |
| 19:26 | jneira | yeah! (public-timeline) working with core/contrib 1.1.0 |
| 19:27 | Mec | is there a keybind to eval a whole buffer in emacs? |
| 19:27 | defn | Licenser_: yes it is :) |
| 19:27 | defn | it was the with-out, huh? |
| 19:27 | jneira | c^c c^r |
| 19:28 | jneira | i think |
| 19:28 | Licenser_ | without wat? |
| 19:28 | Licenser_ | what? |
| 19:28 | clojurebot | what is short for ,(doc ...) |
| 19:28 | defn | Licenser_: errr with-open |
| 19:28 | Licenser_ | defn: this opens a file and ensures it is closed at the end of the (with-open) form again |
| 19:30 | Mec | jneira: thats just giving me a weird error |
| 19:30 | jneira | jum |
| 19:30 | defn | Licenser_: tricky! added the sandbox! :) |
| 19:30 | Licenser_ | yap ;) |
| 19:30 | jneira | first you hava to select all buffer |
| 19:30 | Mec | oh |
| 19:30 | Licenser_ | just wanted to see if it works, and it actually does, with hardly 5 LOC |
| 19:30 | defn | awesome! |
| 19:31 | Licenser_ | so I can't guarantee that it actually is secure, or will not block coreckt code |
| 19:31 | jneira | M^< C^spc M^> and C^c C^r |
| 19:31 | jneira | well you can select all buffer with ...i dont remeber |
| 19:32 | defn | Licenser_: I can live with that for now :) |
| 19:32 | Mec | as soon as i hit C-c it deselects the buffer |
| 19:32 | Licenser_ | so it is kind of coll that you only get examples that work actually |
| 19:32 | defn | yeah although one of them may run some java code that deletes your / partition |
| 19:32 | defn | ;) |
| 19:33 | Licenser_ | defn: that is very unlikely :P |
| 19:33 | jneira | jum |
| 19:33 | Licenser_ | if you enable jvm security it should block that |
| 19:33 | technomancy | (heading out for a while, but please msg or email me with your thoughts if you have a chance to review it.) |
| 19:33 | Licenser_ | and in theory the sandbox is quite tight since it's only letting you use a whitelist of functions |
| 19:34 | Licenser_ | and I did not (partition-hard-disk) in there |
| 19:34 | jneira | C^x h to select all buffer |
| 19:34 | Mec | same thing, after that C-c deselects it |
| 19:34 | defn | Licenser_: hahaha, touche |
| 19:35 | Licenser_ | but you can add that yourself if you liek the trhill |
| 19:36 | jneira | mmm C-c deselects? i am afraid not for me |
| 19:36 | defn | im all about the thrill Licenser_ |
| 19:36 | defn | : |
| 19:36 | defn | :) |
| 19:36 | Licenser_ | defn then you can use the debug-tester :P |
| 19:37 | Licenser_ | that lets through all code |
| 19:37 | defn | i think ill run it in a VM for now ;) |
| 19:37 | Licenser_ | :P |
| 19:38 | Licenser_ | defn: I /think/ even with that it should not whie your hard disk |
| 19:38 | Licenser_ | so I have the feeling that 'thinking' is not good when it comes to security |
| 19:38 | Mec | jneira: ah i've got CUA turned on |
| 19:39 | jneira | cut & paste evil |
| 19:41 | defn | Licenser_: haha |
| 19:42 | defn | Yes I think that thinking can be exactly the problem with security (I think) |
| 19:43 | Licenser_ | don't think so much, just trust in the force! |
| 19:43 | defn | hahaha |
| 19:43 | defn | Licenser_: I am your father. |
| 19:43 | Licenser_ | no you're not :P |
| 19:44 | defn | okay time to go play with this walton code now that it's not breaking my REPL :) |
| 19:44 | defn | thanks again Licenser_ |
| 19:44 | Licenser_ | you're welcome defn :) |
| 19:54 | defn | Licenser_: haha this sandbox is great |
| 19:55 | defn | Licenser_: it turns 106 lines of matched code into 40 |
| 19:55 | defn | much better examples |
| 20:07 | Licenser_ | defn: I'm really glad to hear that :D |
| 20:07 | Licenser_ | There are so many applications for a sandbox that I just keep seeing them everywhere now |
| 20:49 | Mec | is there a way to use dissoc-in without it removing an empty map |
| 20:51 | chouser | the purpose of dissoc-in is to remove (dissoc) something -- why behavior do you want instaed of removing? |
| 20:51 | chouser | s/why/what/ |
| 20:52 | Mec | i want to remove the inner key/val but not the map if it results in being empty |
| 20:53 | Mec | so like (dissoc-in {:a {:b :c}} [:a :b]) -> {:a {}} |
| 20:54 | chouser | oh, I see. |
| 20:54 | chouser | ,(update-in {:a {:b {:c :d}}} [:a :b] dissoc :c) |
| 20:54 | clojurebot | {:a {:b {}}} |
| 20:56 | Mec | oh nice, thanks |
| 21:07 | Mec | I read the description of update-in but it was hard to grasp |
| 22:14 | Raynes | Licenser_: I'm about to issue a pull requestion. |
| 22:14 | Raynes | request* |
| 22:25 | Raynes | Where is clj-io hosted? |
| 22:25 | Raynes | I sees it, but I don't has it. |
| 22:36 | technomancy | Raynes: I don't think there's much difference between clj-io and clojure.contrib.io (and hopefully clojure.io in the future) |
| 22:38 | technomancy | it's on clojars anyway if you don't want to pull in the rest of contrib |
| 22:47 | Raynes | technomancy: I was asking because I had no idea what it actually was. |
| 22:48 | Raynes | Not because I wanted to use it. :P |
| 23:22 | rads | when I try to use congomongo in a leiningen task, I get this error: Exception in thread "main" java.lang.ExceptionInInitializerError (coerce.clj:1) |
| 23:22 | rads | any ideas on what that means? |
| 23:34 | technomancy | Raynes: it was a way to propose clojure.io for inclusion in clojure itself before the clojure.lib idea came up |