Re: core.async
Looks awesome! I've just taken a moment to think of all the possibilities this could allow. One question: can multiple concurrent IoC threads be multiplexed over multiple JVM threads? One advantage go's goroutines have is that they work fine for single-thread concurrency, but if more cores are available they can use them. Phil On Jun 28, 2013 8:06 PM, Rich Hickey richhic...@gmail.com wrote: I've blogged a bit about the new core.async library: http://clojure.com/blog/2013/06/28/clojure-core-async-channels.html Please try it out. Thanks, Rich -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: core.async
Hey, this looks very interesting. However I'm a little concerned about the semantics of ! and !. https://gist.github.com/thheller/5890363 (ns thheller.async-test (:use clojure.test) (:require [clojure.core.async :as async :refer (go ! ! !! !!)])) (def c (async/chan)) (defn do-some-work [work] (throw (ex-info no way {:work work}))) (go (loop [work-done 0] (let [[reply-to work] (! c) reply (do-some-work work)] (! reply-to reply) (recur (inc work-done)) ))) (let [me (async/chan)] (!! c [me :work-work]) (!! me) ;; never returns ) The go-thread dies on the first message and never replies, the other thread waiting for a reply (be it the current thread as in my example, or another go-thread) will now be stuck. Thus I need an extra timeout for EVERY ! I ever do, you hinted as much in your blog post. Waiting for messages that never arrive. However you may also run into situations where ! never returns, cause the consumer died and the buffer is full. How do you return from that? Can I do alt! (timeout) on a put? Or does a full buffer throw? From what I understand one can ! the result of the outer (go ...) to detect that it in fact ended? I guess there could be some helper functions which restart go-threads in case of accidental deaths. Although right now an exception does not seem to close the go result channel. I still prefer Erlang (Actors) since it seems way easier to reason about and process links and monitors (supervisors) certainly make failures alot easier to detect/handle. Any words on the state of the CLJS port? Looking through the code I found that setTimeout(fn, 0) is used alot. HTML5 Spec [1,2,3] says If the currently running task is a task that was created by the setTimeout() method, and timeout is less than 4, then increase timeout to 4. That may cause some trouble, thought I mention this. Anyways, its pretty nice piece of work and I will certainly play with it for a while. Cheers, /thomas [1] http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#timers [2] https://developer.mozilla.org/en-US/docs/Web/API/window.setTimeout#Minimum.2F_maximum_delay_and_timeout_nesting [3] http://dbaron.org/log/20100309-faster-timeouts On Friday, June 28, 2013 9:06:47 PM UTC+2, Rich Hickey wrote: I've blogged a bit about the new core.async library: http://clojure.com/blog/2013/06/28/clojure-core-async-channels.html Please try it out. Thanks, Rich -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: core.async
Oh man, how is everyone _not_ running around screaming about this right now? It seems to me that the Clojure space suffers from an unusual malady: it's busy sitting here quietly advancing half of applied computer science, and no one seems to notice the full extent of its import. Man, I'm sometimes forced to just stop for a moment and sit in awe at how lucky I've been to see this stuff develop and to get to use it. Clojure was huge. And before we're close to digesting its potential, there's protocols. And Clojurescript. Then Datomic. Reducers. Now this. And it's not about everything being necessarily _novel_, though there is often novelty. For me it's largely about the cohesiveness of the design and the consistency of the overarching vision. Everything _fits_. I feel like I'm using tools and ideas that weren't just developed with care, or cleverness, or experience, but all of those things in a kind of harmony that's vanishingly rare to find in any field. I honestly feel like I'm witnessing history being made. Thank you Rich Hickey, and everyone else in this community for making my work every day so enjoyable. - Peter Taoussanis -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: core.async
On Sat, Jun 29, 2013 at 4:37 PM, Peter Taoussanis ptaoussa...@gmail.com wrote: I honestly feel like I'm witnessing history being made. We all are. -BG -- Baishampayan Ghose b.ghose at gmail.com -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: multiline strings and multiline comments ?
(clojure.string/join \n [ this is multiline sting ]) ;produces this\nis\nmultiline\nsting ;) On Monday, 16 August 2010 08:34:03 UTC+1, faenvie wrote: hi clojure-users, i wonder what the reason is, that clojure(-reader) does not allow 1. multiline-strings like scala: this is a | multiline string 2. multiline comments like java /* this is a multiline comment */ someone who can explain or point to relevant info ? thanks -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Timing expressions and comparing results
Hi all, If you need to compare running times of different expressions, you could use 'timings' macro: https://gist.github.com/fsodomka/5890711 It takes the number of runs and expressions to time. For example: user= (timings 1e7 (+ 1 2 3 4) (+ 1 (+ 2 (+ 3 4 [{:time 55.028223, :expr (+ 1 2 3 4)} {:time 55.738369, :expr (+ 1 (+ 2 (+ 3 4)))}] Function 'report' prints out comparison of timings. For it to work, function 'clojure.pprint/print-table' is needed (Clojure 1.3+). Results of expressions must be equal (=), otherwise an exception is thrown: user= (timings 1e7 (+ 100 2 3 4) (+ 1 (+ 2 (+ 3 4 Exception Results of expressions are not equal user/eval1153 (NO_SOURCE_FILE:354) I hope you find it useful and it helps your programs to run faster, Frantisek -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Tortoise-hare algorithm
Hi. One of my colleagues gave a share about the cycle detecting tortoise-hare algorithm (wikihttp://en.wikipedia.org/wiki/Cycle_detection#Tortoise_and_hare ). I translated the script on Wiki from Python to Clojure. It worked, but not elegant. I'd like to make it more functional, more tasty. Any suggestions to help it evolve? I uploaded my (messy) code here: https://github.com/miaoski/clojure-tortoise-hare Thanks a lot! :) -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Is there a better way to update a map atom?
It's worth knowing that the moment is implemented via a compare-and-set, and if the value has been changed (by another thread), the fn you passed to swap! will be called again with the atom's new value. On Jun 28, 2013 11:57 PM, Greg g...@kinostudios.com wrote: OK, I've found something that shows how these two work when used in the implementation of a generator: https://gist.github.com/daveray/1263503 I think I understand what the problem is now: (reset! id (inc @id)) There's a time gap in between the dereference of 'id' and its assignment back to 'id' (after being incremented). With swap!, no such problem exists, because it's an atomic operation where there is no such time gap between dereferencing, applying a function, and setting the new value. That all takes place in on magical atomic moment. If I've got this wrong, please let me know! Cheers, Greg On Jun 28, 2013, at 11:19 PM, Greg g...@kinostudios.com wrote: Can anyone explain the relationship between swap! and reset! ? Why is using swap! in this example safe and using reset! not? I've tried searching google for comparisons of the two but can't find anything, and the documentation doesn't help much. Thanks, Greg On Jan 21, 2013, at 6:22 PM, Stephen Compall stephen.comp...@gmail.com wrote: On Jan 21, 2013 3:28 PM, Jim - FooBar(); jimpil1...@gmail.com wrote: ...or you can go all the way, skipping reset! completely: (swap! game-objects (fn [objects] (reduce-kv #(assoc % %2 (update-object %3)) {} objects) )) Which also has the benefit of being safe, unlike any reset!-based update. -- Stephen Compall If anyone in the MSA is online, you should watch this flythrough. -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: multiline strings and multiline comments ?
In my version of CCW CTRL-/ multiline (un)commenting just works (under Windows). Perhaps it's a keyboard shortcut problem ? Only problem there is when multiple lines are selected, and some are uncommented, uncommenting the whole block doesn't work. On Wednesday, August 18, 2010 10:40:39 AM UTC+2, Zmitro Lapcjonak wrote: On Aug 17, 12:14 am, Lee Spector lspec...@hampshire.edu wrote: On Aug 16, 2010, at 4:13 PM, Meikel Brandmeyer wrote: Every descent editor should provide a comment-selected-text functionality. I've worked in several editors that have comment-selected-text, but I don't see it in Eclipse/Counterclockwise I've created issue: comment multiple lines by pressing Ctrl+/ http://code.google.com/p/counterclockwise/issues/detail?id=61 Still under development. -- Zmi La -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: core.async
On 29/06/13 12:07, Peter Taoussanis wrote: I honestly feel like I'm witnessing history being made. Thank you Rich Hickey, and everyone else in this community for making my work every day so enjoyable. +100! that makes 2 of us :) Thanks indeed Rich (and everyone else of course)... Jim -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
question about java 'finalizers' (Charlie's Hunt talk)
Hi all, I just finished watching this ( http://www.infoq.com/presentations/jvm-tuning?utm_source=infoqutm_medium=videos_homepageutm_campaign=videos_row1) and I'm not sure I understood everything and specifically what he said about finalizers. I noticed that Stuart Sierra (yes, I recognise his voice!) asked a question about this but the answer he got was pretty vague in my opinion... First of all what does he mean by finalizers? Does the mean the .finalize() method on java.lang.Object, the try/finally idiom or custom cleaning-up methods? Secondly, he said they are not good practice because they require 2 GC cyclesbut why do they require 2 GC cycles? Did anyone else watch this presentation yet? Any clues? thanks, Jim ps: I seriously hope he didn't mean the try/finally idiom because clojure makes significant use of it :) -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: core.async
Hi guys, Some time ago I was thinking how nice it would be to have Clojure on top of Go to be able to use channels and goroutines... Well, I stand corrected, we don't need Go, it is now done as a library ! Clojure is a golden inspiration mine, every time something new arrives, if I am not running around like a headless chicken, since my mind (and so my head) is blown away, I am very close to... Exciting times !!! Cheers, Jeremys. On Saturday, June 29, 2013 2:01:29 PM UTC+2, Jim foo.bar wrote: On 29/06/13 12:07, Peter Taoussanis wrote: I honestly feel like I'm witnessing history being made. Thank you Rich Hickey, and everyone else in this community for making my work every day so enjoyable. +100! that makes 2 of us :) Thanks indeed Rich (and everyone else of course)... Jim -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: core.async
Only experience will tell if setTimeout is a problem. I doubt it. I've toyed around with a queueing dispatcher that waits till we get 32 events with flush after 6ms (the time span between which mouse events may arrive under OS X). This permits queueing and dispatching a million events in less than half a second. I know Dart selects the best dispatching mechanism available - setTimeout, DOM mutation observer etc We should also explore our options. David On Saturday, June 29, 2013, Thomas Heller wrote: Hey, this looks very interesting. However I'm a little concerned about the semantics of ! and !. https://gist.github.com/thheller/5890363 (ns thheller.async-test (:use clojure.test) (:require [clojure.core.async :as async :refer (go ! ! !! !!)])) (def c (async/chan)) (defn do-some-work [work] (throw (ex-info no way {:work work}))) (go (loop [work-done 0] (let [[reply-to work] (! c) reply (do-some-work work)] (! reply-to reply) (recur (inc work-done)) ))) (let [me (async/chan)] (!! c [me :work-work]) (!! me) ;; never returns ) The go-thread dies on the first message and never replies, the other thread waiting for a reply (be it the current thread as in my example, or another go-thread) will now be stuck. Thus I need an extra timeout for EVERY ! I ever do, you hinted as much in your blog post. Waiting for messages that never arrive. However you may also run into situations where ! never returns, cause the consumer died and the buffer is full. How do you return from that? Can I do alt! (timeout) on a put? Or does a full buffer throw? From what I understand one can ! the result of the outer (go ...) to detect that it in fact ended? I guess there could be some helper functions which restart go-threads in case of accidental deaths. Although right now an exception does not seem to close the go result channel. I still prefer Erlang (Actors) since it seems way easier to reason about and process links and monitors (supervisors) certainly make failures alot easier to detect/handle. Any words on the state of the CLJS port? Looking through the code I found that setTimeout(fn, 0) is used alot. HTML5 Spec [1,2,3] says If the currently running task is a task that was created by the setTimeout() method, and timeout is less than 4, then increase timeout to 4. That may cause some trouble, thought I mention this. Anyways, its pretty nice piece of work and I will certainly play with it for a while. Cheers, /thomas [1] http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#timers [2] https://developer.mozilla.org/en-US/docs/Web/API/window.setTimeout#Minimum.2F_maximum_delay_and_timeout_nesting [3] http://dbaron.org/log/20100309-faster-timeouts On Friday, June 28, 2013 9:06:47 PM UTC+2, Rich Hickey wrote: I've blogged a bit about the new core.async library: http://clojure.com/blog/2013/**06/28/clojure-core-async-**channels.htmlhttp://clojure.com/blog/2013/06/28/clojure-core-async-channels.html Please try it out. Thanks, Rich -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.comjavascript:_e({}, 'cvml', 'clojure@googlegroups.com'); Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com javascript:_e({}, 'cvml', 'clojure%2bunsubscr...@googlegroups.com'); For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com javascript:_e({}, 'cvml', 'clojure%2bunsubscr...@googlegroups.com');. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Tortoise-hare algorithm
It is very interesting, just a friendly suggestion, if you share code, and need some help, make sure people can get immediately what is going on. (READ: comment the code) On Saturday, June 29, 2013 1:34:57 PM UTC+2, Zhemin Lin wrote: Hi. One of my colleagues gave a share about the cycle detecting tortoise-hare algorithm (wikihttp://en.wikipedia.org/wiki/Cycle_detection#Tortoise_and_hare ). I translated the script on Wiki from Python to Clojure. It worked, but not elegant. I'd like to make it more functional, more tasty. Any suggestions to help it evolve? I uploaded my (messy) code here: https://github.com/miaoski/clojure-tortoise-hare Thanks a lot! :) -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Suggested 'server' for hosting clojure web app
I want to deploy a small web app - serving mostly static content. I'm using Luminus (http://www.luminusweb.net/) - which is quite neat in the way it builds itself from well-known components. I'm having trouble deciding how to deploy it. I want some automation while deploying upgrades, and would like it to be light-weight. Jetty, http-kit, or immutant? (I tried immutant - but it seems to be taking up too much memory for my comfort, on my modest server.) Jetty and http-kit - I would like to hear about how I can deploy them as nice system daemons, with monitoring etc. so that they can be brought up automatically if something goes wrong. I'm also unable to find out how I can do a re-deploy without restarting. Any help or pointers appreciated! Thanks, jaju -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Suggested 'server' for hosting clojure web app
Oops - I meant to sent this to our local clojure group. But thankfully, it still went to a relevant group rather than a completely wrong one! On Sat, Jun 29, 2013 at 8:17 PM, Ravindra Jaju ravindra.j...@gmail.comwrote: I want to deploy a small web app - serving mostly static content. I'm using Luminus (http://www.luminusweb.net/) - which is quite neat in the way it builds itself from well-known components. I'm having trouble deciding how to deploy it. I want some automation while deploying upgrades, and would like it to be light-weight. Jetty, http-kit, or immutant? (I tried immutant - but it seems to be taking up too much memory for my comfort, on my modest server.) Jetty and http-kit - I would like to hear about how I can deploy them as nice system daemons, with monitoring etc. so that they can be brought up automatically if something goes wrong. I'm also unable to find out how I can do a re-deploy without restarting. Any help or pointers appreciated! Thanks, jaju -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: core.async
So how does all this compare to lamina? On Sat, Jun 29, 2013 at 4:07 AM, Peter Taoussanis ptaoussa...@gmail.comwrote: Oh man, how is everyone _not_ running around screaming about this right now? It seems to me that the Clojure space suffers from an unusual malady: it's busy sitting here quietly advancing half of applied computer science, and no one seems to notice the full extent of its import. Man, I'm sometimes forced to just stop for a moment and sit in awe at how lucky I've been to see this stuff develop and to get to use it. Clojure was huge. And before we're close to digesting its potential, there's protocols. And Clojurescript. Then Datomic. Reducers. Now this. And it's not about everything being necessarily _novel_, though there is often novelty. For me it's largely about the cohesiveness of the design and the consistency of the overarching vision. Everything _fits_. I feel like I'm using tools and ideas that weren't just developed with care, or cleverness, or experience, but all of those things in a kind of harmony that's vanishingly rare to find in any field. I honestly feel like I'm witnessing history being made. Thank you Rich Hickey, and everyone else in this community for making my work every day so enjoyable. - Peter Taoussanis -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- Ben Wolfson Human kind has used its intelligence to vary the flavour of drinks, which may be sweet, aromatic, fermented or spirit-based. ... Family and social life also offer numerous other occasions to consume drinks for pleasure. [Larousse, Drink entry] -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Suggested 'server' for hosting clojure web app
On Sat, Jun 29, 2013 at 7:47 AM, Ravindra Jaju ravindra.j...@gmail.com wrote: I want to deploy a small web app - serving mostly static content. I'm using Luminus (http://www.luminusweb.net/) - which is quite neat in the way it builds itself from well-known components. I'm having trouble deciding how to deploy it. I want some automation while deploying upgrades, and would like it to be light-weight. Jetty, http-kit, or immutant? (I tried immutant - but it seems to be taking up too much memory for my comfort, on my modest server.) Jetty and http-kit - I would like to hear about how I can deploy them as nice system daemons, with monitoring etc. so that they can be brought up automatically if something goes wrong. I'm also unable to find out how I can do a re-deploy without restarting. If you are looking for advanced features like hot redeploy, you probably want to consider if you really are after a small solution or not -- if you can't tolerate that small downtime, are you sure you won't need the clustering, XA transaction capabilities, and other advanced features that a toolkit like immutant brings to the table soon? Regardless, you could use the `ring.reload` middleware in production, or bring your own solution to the table for code reloading and use a var as your ring handler to allow dynamic change. (eg: in cgrand's moustache, `(app #'my-handler-function)` allows redefining the handler fn at runtime, transparently.) Given either of those solutions you can then use jetty, netty, http-kit, or anything else. Personally, though, if you really want automated deployment and zero-downtime upgrades, I would totally look to a full blown - and heavy - stack. :) -- Daniel Pittman ♲ Made with 100 percent post-consumer electrons -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: core.async
On Saturday, June 29, 2013 1:32:26 AM UTC-4, Brandon Bloom wrote: CSP proper is amenable to certain kinds of automated correctness analysis. No work has been done on that front for core.async as yet. Although a far cry from Go's race detectorhttp://blog.golang.org/race-detector, Go did ship with one feature that is helpful for preventing a certain class of bugs: explicit restriction to a send-only or receive-only channel via constraining conversion or assignment. See http://golang.org/ref/spec#Channel_types Although Go utilizes the type system to accomplish this at compile time, core.async could achieve the same effect at runtime. Essentially, there could be two conversion functions for wrapping a channel in a read-only or write-only proxy object. I'm not sure if this is actually useful, but I'm curious: Has this been considered? Yes, that's why some of the args are called 'ports'. We will probably have read/write ports representing just one end of a channel. Rich -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: core.async
On Saturday, June 29, 2013 5:16:55 AM UTC-4, Thomas Heller wrote: Hey, this looks very interesting. However I'm a little concerned about the semantics of ! and !. https://gist.github.com/thheller/5890363 (ns thheller.async-test (:use clojure.test) (:require [clojure.core.async :as async :refer (go ! ! !! !!)])) (def c (async/chan)) (defn do-some-work [work] (throw (ex-info no way {:work work}))) (go (loop [work-done 0] (let [[reply-to work] (! c) reply (do-some-work work)] (! reply-to reply) (recur (inc work-done)) ))) (let [me (async/chan)] (!! c [me :work-work]) (!! me) ;; never returns ) The go-thread dies on the first message and never replies, the other thread waiting for a reply (be it the current thread as in my example, or another go-thread) will now be stuck. Thus I need an extra timeout for EVERY ! I ever do, you hinted as much in your blog post. Waiting for messages that never arrive. However you may also run into situations where ! never returns, cause the consumer died and the buffer is full. How do you return from that? Can I do alt! (timeout) on a put? Or does a full buffer throw? From what I understand one can ! the result of the outer (go ...) to detect that it in fact ended? I guess there could be some helper functions which restart go-threads in case of accidental deaths. Although right now an exception does not seem to close the go result channel. I still prefer Erlang (Actors) since it seems way easier to reason about and process links and monitors (supervisors) certainly make failures alot easier to detect/handle. Any words on the state of the CLJS port? Looking through the code I found that setTimeout(fn, 0) is used alot. HTML5 Spec [1,2,3] says If the currently running task is a task that was created by the setTimeout() method, and timeout is less than 4, then increase timeout to 4. That may cause some trouble, thought I mention this. Anyways, its pretty nice piece of work and I will certainly play with it for a while. Links and monitors can be applied as well to channel-using processes, and remain an interesting area for further work. Rich -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
[ANN] Edgar: A basic tool for performing Technical Analysis on financial instruments
Edgar https://github.com/twashing/edgar is a basic tool for performing Technical Analysis on financial instruments. This tool is predicated on the presence of high price movements of stock. So far, the emphasis is on: - stock market trading - algorthmic, automated trading - using the Interactive Brokers http://www.interactivebrokers.comtrading platform You will need these tools installed on your machine. 1. Leiningen https://github.com/technomancy/leiningen, 2.0 or abouve 2. Datomic http://www.datomic.com 3. An Interactive Brokers account with the API Gatewayhttps://www.interactivebrokers.com/en/?f=%2Fen%2Fsoftware%2Fibapi.php(Trader Workstation) installed on your machine Some friends have suggested I turn this into a start-up, which isn't a bad idea. But I'm 1 person, and don't have the time or resources to build this out to the degree that I would like. As such, Edgar is currently in a bit of a hackey state. However, I do have a working system that i) collects historical and live tick data and calculates ii) Simple and Exponential Moving Averages iii) a Bollinger Band, iv) Moving Average Convergence / Divergence v) a Stochastic Oscillator and vi) On Balance Volume calculations. As well, there are other goodies like RSI and Price divergence. That's all to say that I think some people might find this stuff useful. There are many open source systems on the internet (see herehttp://www.traderslaboratory.com/forums/tools-trade/11086-open-source-trading-platforms-master-list.html). I wanted something like Edgar, to leverage the power of Clojure in this domain. I think Edgar could be a feasible Clojure codebase, along the lines of TradeLink (see here https://code.google.com/p/tradelink/) or Open Java Trading System (see here http://sourceforge.net/projects/ojts/). *Features* - load stocks that have a price differential over the past 24hrs, or some other constraint; this is a primitive tool though, and you should use a real-time stock filter if you can find it - load historical and live stock data - track many live stocks simultaneously - perform technical analysis on tracked stocks; the packages will be organised as follows. *Lagging Indicators: *Lagging indicators are ones that follow price movements and have less predictive qualities. - Moving Averageshttp://www.stock-market-strategy.com/moving-averages-ma/); See also [here](http://www.youtube.com/watch?v=L3EzXzofRtI) and [here](http://www.youtube.com/watch?v=zRD9Ob9yCvs - Bollinger Bandshttp://www.stock-market-strategy.com/education/technical-analysis/bollinger-bands/); See [here](http://www.stock-market-strategy.com/education/technical-analysis/bollinger-bands/ *Leading Indicators*: Leading indicators are those created to proceed the price movements of a security giving predictive qualities. - Stochastic Oscillatorhttp://www.stock-market-strategy.com/education/technical-analysis/stochastic - MACDhttp://www.stock-market-strategy.com/education/technical-analysis/moving-average-convergence-divergence-macd/ *Confirming Indicators*: - On Balance Volumehttp://www.investopedia.com/university/indicator_oscillator/ind_osc2.asp - Relative Strength Indexhttp://stockcharts.com/help/doku.php?id=chart_school:technical_indicators:relative_strength_in - generate up and down signals based on technical analysis - allows the creation of custom strategies that use signals, or create custom filters based on technical analysis - creates buy and sell orders based on strategy signals As I said this is in a very hackey state, and there are a lot of things outstanding. These are some things that I will be working on. Have a look and let me know what else you think would be useful. - make starting the system, a function - more documentation ; installation, startup - needs layout work and UI functional improvements ; I have some specific ideas around that - test suite - create a real-time stock filter based price volatility , or some other constraint - abstract strategies into a plug-in system - et al. Tim Washington Interruptsoftware.ca -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: core.async
It seems to me that the Clojure space suffers from an unusual malady: it's busy sitting here quietly advancing half of applied computer science, and no one seems to notice the full extent of its import. And it makes me sound like a broken record with my colleagues: Oh! Clojure has... --- Joseph Smith @solussd On Jun 29, 2013, at 6:07 AM, Peter Taoussanis ptaoussa...@gmail.com wrote: Oh man, how is everyone _not_ running around screaming about this right now? It seems to me that the Clojure space suffers from an unusual malady: it's busy sitting here quietly advancing half of applied computer science, and no one seems to notice the full extent of its import. Man, I'm sometimes forced to just stop for a moment and sit in awe at how lucky I've been to see this stuff develop and to get to use it. Clojure was huge. And before we're close to digesting its potential, there's protocols. And Clojurescript. Then Datomic. Reducers. Now this. And it's not about everything being necessarily _novel_, though there is often novelty. For me it's largely about the cohesiveness of the design and the consistency of the overarching vision. Everything _fits_. I feel like I'm using tools and ideas that weren't just developed with care, or cleverness, or experience, but all of those things in a kind of harmony that's vanishingly rare to find in any field. I honestly feel like I'm witnessing history being made. Thank you Rich Hickey, and everyone else in this community for making my work every day so enjoyable. - Peter Taoussanis -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Suggested 'server' for hosting clojure web app
If you just want to deploy your application, and don't particularly care about having control over your system architecture, you might want to consider a platform like Heroku. Otherwise, a common solution, and one I'd personally recommend, is to have a standalone app executed via Upstart, running behind an nginx proxy. Upstart allows you to run a process as a daemon, and it can do useful things like automatically restart a process if it unexpectedly terminates. Upstart is by no means the only program that does this, but it's the one Ubuntu uses and is therefore stable and well-tested. A HTTP proxy server like nginx is useful for buffering against restarts and application failures. You can configure nginx to buffer a request while your server restarts, or to distribute request over a cluster of processes, or to cache static content. You could create the standalone app manually, with a -main function that calls run-jetty, or use the lein-ring plugin and the lein ring uberjar command to do it for you. - James On 29 June 2013 15:47, Ravindra Jaju ravindra.j...@gmail.com wrote: I want to deploy a small web app - serving mostly static content. I'm using Luminus (http://www.luminusweb.net/) - which is quite neat in the way it builds itself from well-known components. I'm having trouble deciding how to deploy it. I want some automation while deploying upgrades, and would like it to be light-weight. Jetty, http-kit, or immutant? (I tried immutant - but it seems to be taking up too much memory for my comfort, on my modest server.) Jetty and http-kit - I would like to hear about how I can deploy them as nice system daemons, with monitoring etc. so that they can be brought up automatically if something goes wrong. I'm also unable to find out how I can do a re-deploy without restarting. Any help or pointers appreciated! Thanks, jaju -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
[ANN] byte-streams: a rosetta stone for all the byte representations the jvm has to offer
I've recently been trying to pull out useful pieces from some of my more monolithic libraries. The most recent result is 'byte-streams' [1], a library that figures how how to convert between different byte representations (including character streams), and how to efficiently transfer bytes between various byte sources and sinks. The net result is that you can do something like: (byte-streams/convert (File. /tmp/foo) String {:encoding utf-8}) and get a string representation of the file's contents. Of course, this is already possible using 'slurp', but you could also convert it to a CharSequence, or lazy sequence of ByteBuffers, or pretty much anything else you can imagine. This is accomplished by traversing a graph of available conversions (don't worry, it's memoized), so simply defining a new conversion from some custom type to (say) a ByteBuffer will transitively allow you to convert it to any other type. As an aside, this sort of conversion mechanism isn't limited to just byte representations, but I'm not sure if there's another large collection of mostly-isomorphic types out there that would benefit from this. If anyone has ideas on where else this could be applied, I'd be interested to hear them. Zach [1] https://github.com/ztellman/byte-streams -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Suggested 'server' for hosting clojure web app
Thank you Daniel and James. I appreciate the detailed response and advice. I'll make myself more clear and specify what I have in mind. I don't want hot-deploys, for sure. :) I erred when I mentioned without restarting - that certainly changes quite a few things! Here's what I have in mind for my app as well as the deployment design. Its main goals are primarily to (1) Get more familiar with clojure dev since I enjoy it, (2) host my personal blog (mostly markdown, processed at runtime or pre-preprocessed), and (3) some dynamic content. | nginx | | static content - markdown, possibly preprocessed - with markdown-clj | -- | clojure app for some dynamic content | I've only started using luminus, and it serves markdown by processing it at runtime, which makes my content serving dependent on the app-server. I have the option of pre-processing markdown and serving it completely statically with nginx. Until then, I'm okay right now using the app to serve it. It is at this point where I need advice. I currently only know of running the clojure app via lein ring server (or equivalent) from the command-line - no scripts which can run it like those init scripts with start/stop/reload support. nginx runs fine as a daemon, but I need to figure out the java side. 1] Upstart is good - so, I will need to figure out the equivalent on Fedora (which is what I use - primarily because I'm too familiar with it and have been an RH/Fedora guy since about ~1995). Essentially, a daemon monitor which will restart in case of failures. I've been somewhat rusty with the recent releases of all Linux-es from the systems admin point of view. 2] Is there a suggested way to manage the java process - especially starting and stopping? I'm okay with a few seconds of downtime, and I can write scripts to do this myself, but don't want to reinvent the wheel if there are already some tools/scripts/practices which make it straightforward. I'm especially looking for current practices with folks who use clojure with jetty/http-kit like servers, and not jboss et al. :) Best regards, jaju On Sat, Jun 29, 2013 at 10:36 PM, James Reeves ja...@booleanknot.comwrote: If you just want to deploy your application, and don't particularly care about having control over your system architecture, you might want to consider a platform like Heroku. Otherwise, a common solution, and one I'd personally recommend, is to have a standalone app executed via Upstart, running behind an nginx proxy. Upstart allows you to run a process as a daemon, and it can do useful things like automatically restart a process if it unexpectedly terminates. Upstart is by no means the only program that does this, but it's the one Ubuntu uses and is therefore stable and well-tested. A HTTP proxy server like nginx is useful for buffering against restarts and application failures. You can configure nginx to buffer a request while your server restarts, or to distribute request over a cluster of processes, or to cache static content. You could create the standalone app manually, with a -main function that calls run-jetty, or use the lein-ring plugin and the lein ring uberjar command to do it for you. - James On 29 June 2013 15:47, Ravindra Jaju ravindra.j...@gmail.com wrote: I want to deploy a small web app - serving mostly static content. I'm using Luminus (http://www.luminusweb.net/) - which is quite neat in the way it builds itself from well-known components. I'm having trouble deciding how to deploy it. I want some automation while deploying upgrades, and would like it to be light-weight. Jetty, http-kit, or immutant? (I tried immutant - but it seems to be taking up too much memory for my comfort, on my modest server.) Jetty and http-kit - I would like to hear about how I can deploy them as nice system daemons, with monitoring etc. so that they can be brought up automatically if something goes wrong. I'm also unable to find out how I can do a re-deploy without restarting. Any help or pointers appreciated! Thanks, jaju -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are
Re: Suggested 'server' for hosting clojure web app
Pick http-kit, create a uberjar with lein and deploy via Upstart etc. It works like a charm. Jetty is quite good too. ~BG Sent from phone. Please excuse brevity. On 29 Jun 2013 20:17, Ravindra Jaju ravindra.j...@gmail.com wrote: I want to deploy a small web app - serving mostly static content. I'm using Luminus (http://www.luminusweb.net/) - which is quite neat in the way it builds itself from well-known components. I'm having trouble deciding how to deploy it. I want some automation while deploying upgrades, and would like it to be light-weight. Jetty, http-kit, or immutant? (I tried immutant - but it seems to be taking up too much memory for my comfort, on my modest server.) Jetty and http-kit - I would like to hear about how I can deploy them as nice system daemons, with monitoring etc. so that they can be brought up automatically if something goes wrong. I'm also unable to find out how I can do a re-deploy without restarting. Any help or pointers appreciated! Thanks, jaju -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: lein repl and missing yank
OTOH, your readline can't handle inserting text you've just copied in some other application, such as copy snippet from web browser window (e.g. Clojuredocs example) and paste in REPL. Using the system-wide copy and paste has clear advantages over using an application-internal one. I'm sure I copy and paste across application boundaries much more often than I want a history of past cuts and copies, and on the rare occasions when I need to juggle multiple clipboard snippets, being able to cross application boundaries makes that easy, since I always keep a blank Notepad open anyway (to leave maximized when AFK, to harmlessly absorb any keystrokes typed by paws). I can just paste snippets into that and copy the needed ones. Similarly if I anticipate needing a text snippet intermittently over longer periods, during which the clipboard contents will certainly get clobbered (and then it would have likely fallen off the end of any reasonably-sized kill ring or history before I was done needing it!) ... and I don't have to try to track in my head a huge amount of invisible state (what's in the ring, where the unseen current-item-pointer is in that ring, etc., just the last thing copied or cut -- the rest is visible if I alt-tab to the Notepad window). Oh, and my method gives me a LAN-wide clipboard, too, since I can use a normally-empty file on a network drive and give that file global write permissions. Paste into file and save; on other computer, refresh view of file and cut/copy. On Fri, Jun 28, 2013 at 11:22 PM, Phil Hagelberg p...@hagelb.org wrote: On Friday, June 28, 2013 7:17:14 PM UTC-7, Jonathan Fischer Friberg wrote: Should pasting be part of jline? Am I the only one that finds that really odd? jLine is a port of readline to the JVM. readline supports a kill ring, so jLine should too. That's different from the terminal performing pasting since all that can do is insert the primary selection, it can't handle history or inserting text that you've just killed. -Phil -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Is there a better way to update a map atom?
As nobody else has said this, it bears making explicit that: * swap! is for when the new value depends, in some way, on the previous value. * reset! is for when the new value is independent of the previous value. If you're simply setting a flag, for example, (reset! foo true) works. If you're incrementing a counter, though, you want (swap! foo inc), etc. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: question about java 'finalizers' (Charlie's Hunt talk)
On Sat, Jun 29, 2013 at 8:41 AM, Jim - FooBar(); jimpil1...@gmail.comwrote: Hi all, I just finished watching this ( http://www.infoq.com/presentations/jvm-tuning?utm_source=infoqutm_medium=videos_homepageutm_campaign=videos_row1 ) and I'm not sure I understood everything and specifically what he said about finalizers. I noticed that Stuart Sierra (yes, I recognise his voice!) asked a question about this but the answer he got was pretty vague in my opinion... First of all what does he mean by finalizers? Does the mean the .finalize() method on java.lang.Object, the try/finally idiom or custom cleaning-up methods? Secondly, he said they are not good practice because they require 2 GC cycles Then he meant the .finalize() method. but why do they require 2 GC cycles? Because the first time the object is found to be unreferenced, the finalizer is scheduled to run, and the object must be kept alive as the finalizer presumably uses it in some way (e.g. a stream object finalizer closes a file descriptor held by the stream object in a field somewhere). Then a second GC cycle needs to catch the finalized object unreferenced and actually collect it. The finalizer could, in theory, resurrect an object so eagerly composting it as soon as the finalizer exits isn't an option. ps: I seriously hope he didn't mean the try/finally idiom because clojure makes significant use of it :) They didn't. :) -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: core.async
What's the entry in project.clj to use the core.async stuff? Thanks! On Sat, Jun 29, 2013 at 9:44 AM, Joseph Smith j...@uwcreations.com wrote: It seems to me that the Clojure space suffers from an unusual malady: it's busy sitting here quietly advancing half of applied computer science, and no one seems to notice the full extent of its import. And it makes me sound like a broken record with my colleagues: Oh! Clojure has... --- Joseph Smith @solussd On Jun 29, 2013, at 6:07 AM, Peter Taoussanis ptaoussa...@gmail.com wrote: Oh man, how is everyone _not_ running around screaming about this right now? It seems to me that the Clojure space suffers from an unusual malady: it's busy sitting here quietly advancing half of applied computer science, and no one seems to notice the full extent of its import. Man, I'm sometimes forced to just stop for a moment and sit in awe at how lucky I've been to see this stuff develop and to get to use it. Clojure was huge. And before we're close to digesting its potential, there's protocols. And Clojurescript. Then Datomic. Reducers. Now this. And it's not about everything being necessarily _novel_, though there is often novelty. For me it's largely about the cohesiveness of the design and the consistency of the overarching vision. Everything _fits_. I feel like I'm using tools and ideas that weren't just developed with care, or cleverness, or experience, but all of those things in a kind of harmony that's vanishingly rare to find in any field. I honestly feel like I'm witnessing history being made. Thank you Rich Hickey, and everyone else in this community for making my work every day so enjoyable. - Peter Taoussanis -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Tortoise-hare algorithm
If the function is expensive to compute, you might prefer Brent's periodicity detection algorithm, which instead of 1.5xn invocations of the function only requires n + o(log n) invocations and supposedly detects just as fast. You store [last-n, last-f, next-n] = [0, f(0), 1] and then, for n = 1 to whatever: * compute f(n) * see if it's equal to last-f; if it is, f is or becomes periodic with a period dividing n - last-n. * if n = next-n, change the store to [n, f(n), 2*next-n] * move on to f(n + 1). On Sat, Jun 29, 2013 at 10:43 AM, Simone Mosciatti mweb@gmail.comwrote: It is very interesting, just a friendly suggestion, if you share code, and need some help, make sure people can get immediately what is going on. (READ: comment the code) On Saturday, June 29, 2013 1:34:57 PM UTC+2, Zhemin Lin wrote: Hi. One of my colleagues gave a share about the cycle detecting tortoise-hare algorithm (wikihttp://en.wikipedia.org/wiki/Cycle_detection#Tortoise_and_hare ). I translated the script on Wiki from Python to Clojure. It worked, but not elegant. I'd like to make it more functional, more tasty. Any suggestions to help it evolve? I uploaded my (messy) code here: https://github.com/** miaoski/clojure-tortoise-harehttps://github.com/miaoski/clojure-tortoise-hare Thanks a lot! :) -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: core.async
I don't think it's published to a maven repository yet. You can check it out, install it with `lein install`, then depend on it via [core.async 0.1.0-SNAPSHOT] On Sat, Jun 29, 2013 at 2:50 PM, David Pollak dpollak...@gmail.com wrote: What's the entry in project.clj to use the core.async stuff? Thanks! On Sat, Jun 29, 2013 at 9:44 AM, Joseph Smith j...@uwcreations.com wrote: It seems to me that the Clojure space suffers from an unusual malady: it's busy sitting here quietly advancing half of applied computer science, and no one seems to notice the full extent of its import. And it makes me sound like a broken record with my colleagues: Oh! Clojure has... --- Joseph Smith @solussd On Jun 29, 2013, at 6:07 AM, Peter Taoussanis ptaoussa...@gmail.com wrote: Oh man, how is everyone _not_ running around screaming about this right now? It seems to me that the Clojure space suffers from an unusual malady: it's busy sitting here quietly advancing half of applied computer science, and no one seems to notice the full extent of its import. Man, I'm sometimes forced to just stop for a moment and sit in awe at how lucky I've been to see this stuff develop and to get to use it. Clojure was huge. And before we're close to digesting its potential, there's protocols. And Clojurescript. Then Datomic. Reducers. Now this. And it's not about everything being necessarily _novel_, though there is often novelty. For me it's largely about the cohesiveness of the design and the consistency of the overarching vision. Everything _fits_. I feel like I'm using tools and ideas that weren't just developed with care, or cleverness, or experience, but all of those things in a kind of harmony that's vanishingly rare to find in any field. I honestly feel like I'm witnessing history being made. Thank you Rich Hickey, and everyone else in this community for making my work every day so enjoyable. - Peter Taoussanis -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to a topic in the Google Groups Clojure group. To unsubscribe from this topic, visit https://groups.google.com/d/topic/clojure/PZ6sM2WXR1Y/unsubscribe. To unsubscribe from this group and all its topics, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: core.async
On Sat, Jun 29, 2013 at 7:07 AM, Peter Taoussanis ptaoussa...@gmail.comwrote: Oh man, how is everyone _not_ running around screaming about this right now? It seems to me that the Clojure space suffers from an unusual malady: it's busy sitting here quietly advancing half of applied computer science, and no one seems to notice the full extent of its import. Man, I'm sometimes forced to just stop for a moment and sit in awe at how lucky I've been to see this stuff develop and to get to use it. Agreed. But the lack of notice means we're in on the ground floor, so to speak, and can run circles around rival programming shops until they catch on. :) Clojure was huge. And before we're close to digesting its potential, there's protocols. And Clojurescript. Then Datomic. Reducers. Now this. One of these things is not like the others; one of these things is not open source ... And it's not about everything being necessarily _novel_, though there is often novelty. For me it's largely about the cohesiveness of the design and the consistency of the overarching vision. Everything _fits_. I feel like I'm using tools and ideas that weren't just developed with care, or cleverness, or experience, but all of those things in a kind of harmony that's vanishingly rare to find in any field. I honestly feel like I'm witnessing history being made. Thank you Rich Hickey, and everyone else in this community for making my work every day so enjoyable. The NSA is probably getting a FISA warrant right now to search Hickey's home and place of business for any evidence of a flying saucer or time machine, on the grounds that either would have national security implications. :P -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Suggested 'server' for hosting clojure web app
On 29 June 2013 18:59, Ravindra Jaju ravindra.j...@gmail.com wrote: 1] Upstart is good - so, I will need to figure out the equivalent on Fedora (which is what I use - primarily because I'm too familiar with it and have been an RH/Fedora guy since about ~1995). Essentially, a daemon monitor which will restart in case of failures. I've been somewhat rusty with the recent releases of all Linux-es from the systems admin point of view. Since Fedora 9, Upstart has been the default on that as well, so you're in luck :) 2] Is there a suggested way to manage the java process - especially starting and stopping? I'm okay with a few seconds of downtime, and I can write scripts to do this myself, but don't want to reinvent the wheel if there are already some tools/scripts/practices which make it straightforward. I'm especially looking for current practices with folks who use clojure with jetty/http-kit like servers, and not jboss et al. :) Upstart will handle the starting and stopping. It'll just run a script to start, and terminate the process to stop. You can avoid any downtime by configuring nginx buffer requests; if your application is unavailable, nginx will keep retrying until a timeout. From your user's point of view, one request will take a few seconds longer, but there won't be any downtime. And if you have more than one application process, you can restart the processes one at a time, and avoid any sort of delay. If you're interested, I could be persuaded to write a blog post on it. :) - James -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Clojure generates unnecessary and slow type-checks
This looks very interesting, thanks for sharing! I'll think about it a bit while working on our codebase and see if I can contribute any good examples. On Fri, Jun 28, 2013 at 7:17 AM, Mikera mike.r.anderson...@gmail.comwrote: On Thursday, 20 June 2013 08:45:47 UTC+1, Jason Wolfe wrote: On Saturday, June 15, 2013 4:37:06 AM UTC-7, Mikera wrote: On Friday, 14 June 2013 18:15:34 UTC+1, Jason Wolfe wrote: Hey Mikera, I did look at core.matrix awhile ago, but I'll take another look. Right now, flop is just trying to make it easy to write *arbitrary* array operations compactly, while minimizing the chance of getting worse-than-Java performance. This used to be very tricky to get right when flop was developed (against Clojure 1.2); the situation has clearly improved since then, but there still seem to be some subtleties in going fast with arrays in 1.5.1 that we are trying to understand and then automate. As I understand it, core.matrix has a much more ambitious goal of abstracting over all matrix types. This is a great goal, but I'm not sure if the protocol-based implementation can give users any help writing new core operations efficiently (say, making a new array with c[i] = a[i] + b[i]^2 / 2) -- unless there's some clever way of combining protocols with macros (hmmm). A longer term objective for core.matrix could be to allow compiling such expressions. Our GSoC student Maik Schünemann is exploring how to represent and optimised mathematical expressions in Clojure, and in theory these could be used to compile down to efficient low-level operations. API could look something like this: ;; define an expression (def my-expression (expression [a b] (+ a (/ (* b b) 2 ;; compile the expression for the specified matrix implementation A (def func (compile-expression A my-expression)). ;; now computation can be run using the pre-compiled, optimised function (func A B) In the case that A is a Java double array, then perhaps the flop macros could be the engine behind generating the compiled function? I just benchmarked core.matrix/esum, and on my machine in Clojure 1.5.1 it's 2.69x slower than the Java version above, and 1.62x slower than our current best Clojure version. Great - happy to steal your implementation :-) Other core.matrix implementations are probably faster BTW: vectorz-clj is pure Java and has esum for the general-purpose Vector type implemented in exactly the same way as your fast Java example. Clatrix executes a lot of operations via native code using BLAS. I should follow up on this and clarify that core.matrix's esum is in fact as fast as Java -- I apologize for the false statement (I was unaware that new versions of leiningen disable advanced JIT optimizations by default, which lead to the numbers I reported). Nevertheless, I hope there may be room for interesting collaboration on more complex operations, or code gen as you mentioned. I'll follow up later when we're a bit further along. Great thanks for confirming, I was getting worried :-) On the topic of code gen, we've been thinking a bit about how to represent expressions in the expresso project, and are developing a few potential use case API examples. https://github.com/clojure-numerics/expresso/wiki/User-API-examples If anyone has any additional use cases to think about, then please throw them in! -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to a topic in the Google Groups Clojure group. To unsubscribe from this topic, visit https://groups.google.com/d/topic/clojure/LTtxhPxH_ws/unsubscribe. To unsubscribe from this group and all its topics, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: core.async
This is great news! Especially that it is designed also to support other hosts besides JVM. BTW how do IOC threads compare (e.g. in performance and ability to use ForkJoinPool) to coroutines such as those in pulsar? [1] [2] [1] http://blog.paralleluniverse.co/post/49445260575/quasar-pulsar [2] http://puniverse.github.io/pulsar/manual/core.html#fibers Jozef On Friday, June 28, 2013 9:06:47 PM UTC+2, Rich Hickey wrote: I've blogged a bit about the new core.async library: http://clojure.com/blog/2013/06/28/clojure-core-async-channels.html Please try it out. Thanks, Rich -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Suggested 'server' for hosting clojure web app
On Sat, 29 Jun 2013 21:31:22 +0100, James Reeves wrote: On 29 June 2013 18:59, Ravindra Jaju ravindra.j...@gmail.com wrote: 1] Upstart is good - so, I will need to figure out the equivalent on Fedora (which is what I use - primarily because I'm too familiar with it and have been an RH/Fedora guy since about ~1995). Essentially, a daemon monitor which will restart in case of failures. I've been somewhat rusty with the recent releases of all Linux-es from the systems admin point of view. Since Fedora 9, Upstart has been the default on that as well, so you're in luck :) Actually Upstart has been replaced by systemd since Fedora 15 Maciej Mazur signature.asc Description: PGP signature
Re: Suggested 'server' for hosting clojure web app
On 30 June 2013 00:12, Maciej Mazur mamc...@gmail.com wrote: On Sat, 29 Jun 2013 21:31:22 +0100, James Reeves wrote: Since Fedora 9, Upstart has been the default on that as well, so you're in luck :) Actually Upstart has been replaced by systemd since Fedora 15 Oops! Sorry for the misinformation. I'm clearly not up to date with Fedora. - James -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Is there a better way to update a map atom?
Can anyone explain the relationship between swap! and reset! ? swap! is for CAS See: http://en.wikipedia.org/wiki/Compare-and-swap In the examples here, you're fully replacing a value, so reset! is fine... assuming that the replacement value was not derived from the existing value. If the atom was deref-ed (via deref or the @ reader macro), that value is a perception of a potentially old state. Making a decision outside of an atomic swap operation would potentially be invalidated by another thread performing a conflicting mutation. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Help deciphering ArityException message
Could someone help me decipher the ArityException I'm getting. It's not making sense to me. First here is the exception: ArityException Wrong number of args (1) passed to: lastN$reformat-headers$fn clojure.lang.AFn.throwArity (AFn.java:437) and here is the function reformat-headers: (defn reformat-headers [headers] (map #(.toString %) headers)) as far as I can tell the exception is saying that 1 argument is the wrong number of arguments for reformat-headers, but as you can clearly see it is a function of one argument. What am I interpreting wrong? Thanks, Dave -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
UnreadableForm exception trying to read an EDN file
I'm using pprint to write out a map to a file then trying to read it back in using clojure.edn/read (I also get the same error using read). Here is the output (it's a map that was created by the Langohr rabbitmq library): {:header {:timestamp #inst 2058-04-07T17:56:17.000-00:00, :delivery-tag 2, :expiration nil, :correlation-id nil, :delivery-mode 1, :app-id nil, :user-id nil, :redelivery? true, :header {:headers ()}, :content-type nil, :persistent? false, :reply-to nil, :routing-key pims_data_capture, :headers {pluginKey #ByteArrayLongString PLUGIN2}, :type nil, :message-id nil, :cluster-id nil, :message-count 3, :exchange , :content-encoding nil, :priority nil}, :payload {\software\:\CSTONE\,\entity\:\\,} when I try to read it in I get an UnreadableForm exception. I've narrowed it down to the #ByteArrayLongString PLUGIN2 element. If I manually change that to just a regular string I can read it. What is the idiomatic way to handle this noting that there could be a number of different values in that :headers map. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Is there a better way to update a map atom?
On Sat, Jun 29, 2013 at 5:07 PM, Brandon Bloom brandon.d.bl...@gmail.comwrote: Can anyone explain the relationship between swap! and reset! ? swap! is for CAS See: http://en.wikipedia.org/wiki/Compare-and-swap How so? No comparison is done (unless it's done in the supplied function, which is entirely up to the user of swap!). There's a separate compare-and-set! function for atoms. -- Ben Wolfson Human kind has used its intelligence to vary the flavour of drinks, which may be sweet, aromatic, fermented or spirit-based. ... Family and social life also offer numerous other occasions to consume drinks for pleasure. [Larousse, Drink entry] -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Is there a better way to update a map atom?
anyway the relationship between swap! and reset! is that (reset! atom newval) === (swap! atom (constantly newval)). (Though that isn't how reset! is implemented.) On Sat, Jun 29, 2013 at 5:21 PM, Ben Wolfson wolf...@gmail.com wrote: On Sat, Jun 29, 2013 at 5:07 PM, Brandon Bloom brandon.d.bl...@gmail.comwrote: Can anyone explain the relationship between swap! and reset! ? swap! is for CAS See: http://en.wikipedia.org/wiki/Compare-and-swap How so? No comparison is done (unless it's done in the supplied function, which is entirely up to the user of swap!). There's a separate compare-and-set! function for atoms. -- Ben Wolfson Human kind has used its intelligence to vary the flavour of drinks, which may be sweet, aromatic, fermented or spirit-based. ... Family and social life also offer numerous other occasions to consume drinks for pleasure. [Larousse, Drink entry] -- Ben Wolfson Human kind has used its intelligence to vary the flavour of drinks, which may be sweet, aromatic, fermented or spirit-based. ... Family and social life also offer numerous other occasions to consume drinks for pleasure. [Larousse, Drink entry] -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Is there a better way to update a map atom?
On Sat, Jun 29, 2013 at 8:21 PM, Ben Wolfson wolf...@gmail.com wrote: On Sat, Jun 29, 2013 at 5:07 PM, Brandon Bloom brandon.d.bl...@gmail.comwrote: Can anyone explain the relationship between swap! and reset! ? swap! is for CAS See: http://en.wikipedia.org/wiki/Compare-and-swap How so? No comparison is done (unless it's done in the supplied function, which is entirely up to the user of swap!). There's a separate compare-and-set! function for atoms. Er, swap! is basically (loop [] (let [x @a y (f x)] (if (compare-and-set! a x y) y (recur though it actually calls a .swap method of the Atom object that has equivalent semantics. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Is there a better way to update a map atom?
On Sat, Jun 29, 2013 at 5:27 PM, Cedric Greevey cgree...@gmail.com wrote: On Sat, Jun 29, 2013 at 8:21 PM, Ben Wolfson wolf...@gmail.com wrote: On Sat, Jun 29, 2013 at 5:07 PM, Brandon Bloom brandon.d.bl...@gmail.com wrote: Can anyone explain the relationship between swap! and reset! ? swap! is for CAS See: http://en.wikipedia.org/wiki/Compare-and-swap How so? No comparison is done (unless it's done in the supplied function, which is entirely up to the user of swap!). There's a separate compare-and-set! function for atoms. Er, swap! is basically (loop [] (let [x @a y (f x)] (if (compare-and-set! a x y) y (recur though it actually calls a .swap method of the Atom object that has equivalent semantics. The fact that swap! can be implemented with compare-and-set! doesn't make it enlightening (or even correct) to say that swap! is CAS, especially since compare-and-swap as explicated by the linked wikipedia page is actually compare-and-set! in Clojure terms (there's no transformation by a function and it's not unconditional). -- Ben Wolfson Human kind has used its intelligence to vary the flavour of drinks, which may be sweet, aromatic, fermented or spirit-based. ... Family and social life also offer numerous other occasions to consume drinks for pleasure. [Larousse, Drink entry] -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Is there a better way to update a map atom?
Who said swap *was* CAS, rather than was implemented *in terms of* CAS? In any event, your claim that no comparison is done unless it's done in the supplied function is just plain wrong. Comparison *is* done, outside that function, to make sure the atom wasn't changed by another thread while the function was executing. Or just look at the source for clojure.lang.Atom.swap(): public Object swap(IFn f) { for(; ;) { Object v = deref(); Object newv = f.invoke(v); validate(newv); if(state.compareAndSet(v, newv)) { notifyWatches(v, newv); return newv; } } } The compareAndSet method of a java.util.concurrent.AtomicReference is invoked, and other than the watcher and validator stuff you can see that it's semantically the same as the Clojure loop I posted previously. On Sat, Jun 29, 2013 at 8:52 PM, Ben Wolfson wolf...@gmail.com wrote: On Sat, Jun 29, 2013 at 5:27 PM, Cedric Greevey cgree...@gmail.comwrote: On Sat, Jun 29, 2013 at 8:21 PM, Ben Wolfson wolf...@gmail.com wrote: On Sat, Jun 29, 2013 at 5:07 PM, Brandon Bloom brandon.d.bl...@gmail.com wrote: Can anyone explain the relationship between swap! and reset! ? swap! is for CAS See: http://en.wikipedia.org/wiki/Compare-and-swap How so? No comparison is done (unless it's done in the supplied function, which is entirely up to the user of swap!). There's a separate compare-and-set! function for atoms. Er, swap! is basically (loop [] (let [x @a y (f x)] (if (compare-and-set! a x y) y (recur though it actually calls a .swap method of the Atom object that has equivalent semantics. The fact that swap! can be implemented with compare-and-set! doesn't make it enlightening (or even correct) to say that swap! is CAS, especially since compare-and-swap as explicated by the linked wikipedia page is actually compare-and-set! in Clojure terms (there's no transformation by a function and it's not unconditional). -- Ben Wolfson Human kind has used its intelligence to vary the flavour of drinks, which may be sweet, aromatic, fermented or spirit-based. ... Family and social life also offer numerous other occasions to consume drinks for pleasure. [Larousse, Drink entry] -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Help deciphering ArityException message
This should work. What does headers look like? Sometimes the #(...) reader form can cause problems. Does using the (fn ...) form help? ~BG On Sun, Jun 30, 2013 at 5:39 AM, Dave Kincaid kincaid.d...@gmail.com wrote: Could someone help me decipher the ArityException I'm getting. It's not making sense to me. First here is the exception: ArityException Wrong number of args (1) passed to: lastN$reformat-headers$fn clojure.lang.AFn.throwArity (AFn.java:437) and here is the function reformat-headers: (defn reformat-headers [headers] (map #(.toString %) headers)) as far as I can tell the exception is saying that 1 argument is the wrong number of arguments for reformat-headers, but as you can clearly see it is a function of one argument. What am I interpreting wrong? Thanks, Dave -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- Baishampayan Ghose b.ghose at gmail.com -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: UnreadableForm exception trying to read an EDN file
Adding a method to the `print-dup` multimethod that dispatches on ByteArrayLongString should help. See here for an example - http://clojuredocs.org/clojure_core/clojure.core/print-dup ~BG On Sun, Jun 30, 2013 at 5:47 AM, Dave Kincaid kincaid.d...@gmail.com wrote: I'm using pprint to write out a map to a file then trying to read it back in using clojure.edn/read (I also get the same error using read). Here is the output (it's a map that was created by the Langohr rabbitmq library): {:header {:timestamp #inst 2058-04-07T17:56:17.000-00:00, :delivery-tag 2, :expiration nil, :correlation-id nil, :delivery-mode 1, :app-id nil, :user-id nil, :redelivery? true, :header {:headers ()}, :content-type nil, :persistent? false, :reply-to nil, :routing-key pims_data_capture, :headers {pluginKey #ByteArrayLongString PLUGIN2}, :type nil, :message-id nil, :cluster-id nil, :message-count 3, :exchange , :content-encoding nil, :priority nil}, :payload {\software\:\CSTONE\,\entity\:\\,} when I try to read it in I get an UnreadableForm exception. I've narrowed it down to the #ByteArrayLongString PLUGIN2 element. If I manually change that to just a regular string I can read it. What is the idiomatic way to handle this noting that there could be a number of different values in that :headers map. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- Baishampayan Ghose b.ghose at gmail.com -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Help deciphering ArityException message
Here is the whole thing: (defn reformat-headers [headers] (debug (str Reformatting headers)) (map #(hash-map [%1 0] (.toString [%2 1])) headers)) (defn spit-messages Write out the messages in the given seq. [messages dest] (pprint (for [[metadata ^bytes payload] messages] {:header (update-in metadata [:headers] *reformat-headers*) :payload (String. payload)}) dest)) On Saturday, June 29, 2013 8:12:26 PM UTC-5, Baishampayan Ghose wrote: This should work. What does headers look like? Sometimes the #(...) reader form can cause problems. Does using the (fn ...) form help? ~BG On Sun, Jun 30, 2013 at 5:39 AM, Dave Kincaid kincai...@gmail.comjavascript: wrote: Could someone help me decipher the ArityException I'm getting. It's not making sense to me. First here is the exception: ArityException Wrong number of args (1) passed to: lastN$reformat-headers$fn clojure.lang.AFn.throwArity (AFn.java:437) and here is the function reformat-headers: (defn reformat-headers [headers] (map #(.toString %) headers)) as far as I can tell the exception is saying that 1 argument is the wrong number of arguments for reformat-headers, but as you can clearly see it is a function of one argument. What am I interpreting wrong? Thanks, Dave -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.comjavascript: Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com javascript: For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com javascript:. For more options, visit https://groups.google.com/groups/opt_out. -- Baishampayan Ghose b.ghose at gmail.com -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Is there a better way to update a map atom?
On Sat, Jun 29, 2013 at 6:06 PM, Cedric Greevey cgree...@gmail.com wrote: Who said swap *was* CAS, rather than was implemented *in terms of* CAS? In any event, your claim that no comparison is done unless it's done in the supplied function is just plain wrong. Comparison *is* done, outside that function, to make sure the atom wasn't changed by another thread while the function was executing. swap! is for CAS The claim here is clearly not that swap! is implemented in terms of CAS (which would be very unenlightening, since the question was about the distinction between swap! and reset!, which can *also* be implemented in terms of CAS). I admit it would have been more careful of me to say that the semantics of swap! are such that whether or not any comparison is done is an implementation detail; those semantics (which are that swap! [a]tomically swaps the value of atom to be: (apply f current-value-of-atom args) don't specify a comparison, which is not the case with CAS. (reset! *isn't* implemented in terms of swap! or CAS, but it *could* be, as far as the semantics are concerned; if it were, I think it would still be right to say that reset! conceptually doesn't do a comparison against anything, even though, again, as an implementation detail, it could.) Or just look at the source for clojure.lang.Atom.swap(): IOW, the first 100 lines of Atom.java contain all the answers? -- Ben Wolfson Human kind has used its intelligence to vary the flavour of drinks, which may be sweet, aromatic, fermented or spirit-based. ... Family and social life also offer numerous other occasions to consume drinks for pleasure. [Larousse, Drink entry] -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Is there a better way to update a map atom?
Could we please curb the pedantry? On Sat, Jun 29, 2013 at 9:21 PM, Ben Wolfson wolf...@gmail.com wrote: On Sat, Jun 29, 2013 at 6:06 PM, Cedric Greevey cgree...@gmail.comwrote: Who said swap *was* CAS, rather than was implemented *in terms of* CAS? In any event, your claim that no comparison is done unless it's done in the supplied function is just plain wrong. Comparison *is* done, outside that function, to make sure the atom wasn't changed by another thread while the function was executing. swap! is for CAS The claim here is clearly not that swap! is implemented in terms of CAS (which would be very unenlightening, since the question was about the distinction between swap! and reset!, which can *also* be implemented in terms of CAS). I admit it would have been more careful of me to say that the semantics of swap! are such that whether or not any comparison is done is an implementation detail; those semantics (which are that swap! [a]tomically swaps the value of atom to be: (apply f current-value-of-atom args) don't specify a comparison, which is not the case with CAS. (reset! *isn't* implemented in terms of swap! or CAS, but it *could* be, as far as the semantics are concerned; if it were, I think it would still be right to say that reset! conceptually doesn't do a comparison against anything, even though, again, as an implementation detail, it could.) Or just look at the source for clojure.lang.Atom.swap(): IOW, the first 100 lines of Atom.java contain all the answers? -- Ben Wolfson Human kind has used its intelligence to vary the flavour of drinks, which may be sweet, aromatic, fermented or spirit-based. ... Family and social life also offer numerous other occasions to consume drinks for pleasure. [Larousse, Drink entry] -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to a topic in the Google Groups Clojure group. To unsubscribe from this topic, visit https://groups.google.com/d/topic/clojure/PBiSzidSIVM/unsubscribe. To unsubscribe from this group and all its topics, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Help deciphering ArityException message
What is the shape of `headers`? It looks like headers is a sequence of two-element sequences, in which case `reformat-headers` should be something like this - (defn reformat-headers [headers] (map (fn [[x y]] (hash-map [x 0] (.toString [y 1]))) headers)) ;; note the destructuring. The problem is, the lambda inside the map is expecting two args but is getting one arg (which is a two element sequence) instead. Hope that helps. ~BG On Sun, Jun 30, 2013 at 6:49 AM, Dave Kincaid kincaid.d...@gmail.com wrote: Here is the whole thing: (defn reformat-headers [headers] (debug (str Reformatting headers)) (map #(hash-map [%1 0] (.toString [%2 1])) headers)) (defn spit-messages Write out the messages in the given seq. [messages dest] (pprint (for [[metadata ^bytes payload] messages] {:header (update-in metadata [:headers] reformat-headers) :payload (String. payload)}) dest)) On Saturday, June 29, 2013 8:12:26 PM UTC-5, Baishampayan Ghose wrote: This should work. What does headers look like? Sometimes the #(...) reader form can cause problems. Does using the (fn ...) form help? ~BG On Sun, Jun 30, 2013 at 5:39 AM, Dave Kincaid kincai...@gmail.com wrote: Could someone help me decipher the ArityException I'm getting. It's not making sense to me. First here is the exception: ArityException Wrong number of args (1) passed to: lastN$reformat-headers$fn clojure.lang.AFn.throwArity (AFn.java:437) and here is the function reformat-headers: (defn reformat-headers [headers] (map #(.toString %) headers)) as far as I can tell the exception is saying that 1 argument is the wrong number of arguments for reformat-headers, but as you can clearly see it is a function of one argument. What am I interpreting wrong? Thanks, Dave -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- Baishampayan Ghose b.ghose at gmail.com -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- Baishampayan Ghose b.ghose at gmail.com -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: UnreadableForm exception trying to read an EDN file
Thanks! If that works, it is perfect. However, my first attempt isn't making any difference. Here is what I have: (defmethod print-dup com.rabbitmq.client.impl.LongStringHelper$ByteArrayLongString [o w] (print-ctor o (fn [o w] (print-dup (String. (.getBytes o)) w)) w)) (defn spit-messages Write out the messages in the given seq. [messages dest] (print-dup (for [[metadata ^bytes payload] messages] {:header metadata :payload (String. payload)}) dest)) but it still prints it out to the file with #ByteArrayLongString PLUGIN2. Did I miss something? On Saturday, June 29, 2013 8:14:49 PM UTC-5, Baishampayan Ghose wrote: Adding a method to the `print-dup` multimethod that dispatches on ByteArrayLongString should help. See here for an example - http://clojuredocs.org/clojure_core/clojure.core/print-dup ~BG On Sun, Jun 30, 2013 at 5:47 AM, Dave Kincaid kincai...@gmail.comjavascript: wrote: I'm using pprint to write out a map to a file then trying to read it back in using clojure.edn/read (I also get the same error using read). Here is the output (it's a map that was created by the Langohr rabbitmq library): {:header {:timestamp #inst 2058-04-07T17:56:17.000-00:00, :delivery-tag 2, :expiration nil, :correlation-id nil, :delivery-mode 1, :app-id nil, :user-id nil, :redelivery? true, :header {:headers ()}, :content-type nil, :persistent? false, :reply-to nil, :routing-key pims_data_capture, :headers {pluginKey #ByteArrayLongString PLUGIN2}, :type nil, :message-id nil, :cluster-id nil, :message-count 3, :exchange , :content-encoding nil, :priority nil}, :payload {\software\:\CSTONE\,\entity\:\\,} when I try to read it in I get an UnreadableForm exception. I've narrowed it down to the #ByteArrayLongString PLUGIN2 element. If I manually change that to just a regular string I can read it. What is the idiomatic way to handle this noting that there could be a number of different values in that :headers map. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.comjavascript: Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com javascript: For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com javascript:. For more options, visit https://groups.google.com/groups/opt_out. -- Baishampayan Ghose b.ghose at gmail.com -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Help deciphering ArityException message
Yes! That does help. It's complaining about the arity of the function in the map, not the reformat-headers function. Now I understand. Thank you very much for helping clarify it for me. Dave On Saturday, June 29, 2013 8:30:21 PM UTC-5, Baishampayan Ghose wrote: What is the shape of `headers`? It looks like headers is a sequence of two-element sequences, in which case `reformat-headers` should be something like this - (defn reformat-headers [headers] (map (fn [[x y]] (hash-map [x 0] (.toString [y 1]))) headers)) ;; note the destructuring. The problem is, the lambda inside the map is expecting two args but is getting one arg (which is a two element sequence) instead. Hope that helps. ~BG On Sun, Jun 30, 2013 at 6:49 AM, Dave Kincaid kincai...@gmail.comjavascript: wrote: Here is the whole thing: (defn reformat-headers [headers] (debug (str Reformatting headers)) (map #(hash-map [%1 0] (.toString [%2 1])) headers)) (defn spit-messages Write out the messages in the given seq. [messages dest] (pprint (for [[metadata ^bytes payload] messages] {:header (update-in metadata [:headers] reformat-headers) :payload (String. payload)}) dest)) On Saturday, June 29, 2013 8:12:26 PM UTC-5, Baishampayan Ghose wrote: This should work. What does headers look like? Sometimes the #(...) reader form can cause problems. Does using the (fn ...) form help? ~BG On Sun, Jun 30, 2013 at 5:39 AM, Dave Kincaid kincai...@gmail.com wrote: Could someone help me decipher the ArityException I'm getting. It's not making sense to me. First here is the exception: ArityException Wrong number of args (1) passed to: lastN$reformat-headers$fn clojure.lang.AFn.throwArity (AFn.java:437) and here is the function reformat-headers: (defn reformat-headers [headers] (map #(.toString %) headers)) as far as I can tell the exception is saying that 1 argument is the wrong number of arguments for reformat-headers, but as you can clearly see it is a function of one argument. What am I interpreting wrong? Thanks, Dave -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- Baishampayan Ghose b.ghose at gmail.com -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.comjavascript: Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com javascript: For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com javascript:. For more options, visit https://groups.google.com/groups/opt_out. -- Baishampayan Ghose b.ghose at gmail.com -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: UnreadableForm exception trying to read an EDN file
Does this work? ;; do the defmethod extension as usual and then define spit-messages as such (defn spit-messages Write out the messages in the given seq. [messages dest] (binding [*print-dup* true] (pprint (for [[metadata ^bytes payload] messages] {:header metadata :payload (String. payload)}) dest))) ~BG On Sun, Jun 30, 2013 at 7:05 AM, Dave Kincaid kincaid.d...@gmail.com wrote: Thanks! If that works, it is perfect. However, my first attempt isn't making any difference. Here is what I have: (defmethod print-dup com.rabbitmq.client.impl.LongStringHelper$ByteArrayLongString [o w] (print-ctor o (fn [o w] (print-dup (String. (.getBytes o)) w)) w)) (defn spit-messages Write out the messages in the given seq. [messages dest] (print-dup (for [[metadata ^bytes payload] messages] {:header metadata :payload (String. payload)}) dest)) but it still prints it out to the file with #ByteArrayLongString PLUGIN2. Did I miss something? On Saturday, June 29, 2013 8:14:49 PM UTC-5, Baishampayan Ghose wrote: Adding a method to the `print-dup` multimethod that dispatches on ByteArrayLongString should help. See here for an example - http://clojuredocs.org/clojure_core/clojure.core/print-dup ~BG On Sun, Jun 30, 2013 at 5:47 AM, Dave Kincaid kincai...@gmail.com wrote: I'm using pprint to write out a map to a file then trying to read it back in using clojure.edn/read (I also get the same error using read). Here is the output (it's a map that was created by the Langohr rabbitmq library): {:header {:timestamp #inst 2058-04-07T17:56:17.000-00:00, :delivery-tag 2, :expiration nil, :correlation-id nil, :delivery-mode 1, :app-id nil, :user-id nil, :redelivery? true, :header {:headers ()}, :content-type nil, :persistent? false, :reply-to nil, :routing-key pims_data_capture, :headers {pluginKey #ByteArrayLongString PLUGIN2}, :type nil, :message-id nil, :cluster-id nil, :message-count 3, :exchange , :content-encoding nil, :priority nil}, :payload {\software\:\CSTONE\,\entity\:\\,} when I try to read it in I get an UnreadableForm exception. I've narrowed it down to the #ByteArrayLongString PLUGIN2 element. If I manually change that to just a regular string I can read it. What is the idiomatic way to handle this noting that there could be a number of different values in that :headers map. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- Baishampayan Ghose b.ghose at gmail.com -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- Baishampayan Ghose b.ghose at gmail.com -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: UnreadableForm exception trying to read an EDN file
Hmm. No, it doesn't. This is what I get with pprint by itself: :headers {pluginKey #ByteArrayLongString PLUGIN2} with your version I get: :headers #=(java.util.HashMap. {pluginKey #=(com.rabbitmq.client.impl.LongStringHelper$ByteArrayLongString. PLUGIN2)}) what I think I needs to be able to read it back in is: :headers {pluginKey PLUGIN2} On Saturday, June 29, 2013 8:41:16 PM UTC-5, Baishampayan Ghose wrote: Does this work? ;; do the defmethod extension as usual and then define spit-messages as such (defn spit-messages Write out the messages in the given seq. [messages dest] (binding [*print-dup* true] (pprint (for [[metadata ^bytes payload] messages] {:header metadata :payload (String. payload)}) dest))) ~BG On Sun, Jun 30, 2013 at 7:05 AM, Dave Kincaid kincai...@gmail.comjavascript: wrote: Thanks! If that works, it is perfect. However, my first attempt isn't making any difference. Here is what I have: (defmethod print-dup com.rabbitmq.client.impl.LongStringHelper$ByteArrayLongString [o w] (print-ctor o (fn [o w] (print-dup (String. (.getBytes o)) w)) w)) (defn spit-messages Write out the messages in the given seq. [messages dest] (print-dup (for [[metadata ^bytes payload] messages] {:header metadata :payload (String. payload)}) dest)) but it still prints it out to the file with #ByteArrayLongString PLUGIN2. Did I miss something? On Saturday, June 29, 2013 8:14:49 PM UTC-5, Baishampayan Ghose wrote: Adding a method to the `print-dup` multimethod that dispatches on ByteArrayLongString should help. See here for an example - http://clojuredocs.org/clojure_core/clojure.core/print-dup ~BG On Sun, Jun 30, 2013 at 5:47 AM, Dave Kincaid kincai...@gmail.com wrote: I'm using pprint to write out a map to a file then trying to read it back in using clojure.edn/read (I also get the same error using read). Here is the output (it's a map that was created by the Langohr rabbitmq library): {:header {:timestamp #inst 2058-04-07T17:56:17.000-00:00, :delivery-tag 2, :expiration nil, :correlation-id nil, :delivery-mode 1, :app-id nil, :user-id nil, :redelivery? true, :header {:headers ()}, :content-type nil, :persistent? false, :reply-to nil, :routing-key pims_data_capture, :headers {pluginKey #ByteArrayLongString PLUGIN2}, :type nil, :message-id nil, :cluster-id nil, :message-count 3, :exchange , :content-encoding nil, :priority nil}, :payload {\software\:\CSTONE\,\entity\:\\,} when I try to read it in I get an UnreadableForm exception. I've narrowed it down to the #ByteArrayLongString PLUGIN2 element. If I manually change that to just a regular string I can read it. What is the idiomatic way to handle this noting that there could be a number of different values in that :headers map. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- Baishampayan Ghose b.ghose at gmail.com -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.comjavascript: Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com javascript: For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com javascript:. For more options, visit https://groups.google.com/groups/opt_out. -- Baishampayan Ghose b.ghose at gmail.com -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please
Re: UnreadableForm exception trying to read an EDN file
This form, by the way is readable. Not sure why the print-dup extension is not working though... ~BG On Sun, Jun 30, 2013 at 7:18 AM, Dave Kincaid kincaid.d...@gmail.com wrote: Hmm. No, it doesn't. This is what I get with pprint by itself: :headers {pluginKey #ByteArrayLongString PLUGIN2} with your version I get: :headers #=(java.util.HashMap. {pluginKey #=(com.rabbitmq.client.impl.LongStringHelper$ByteArrayLongString. PLUGIN2)}) what I think I needs to be able to read it back in is: :headers {pluginKey PLUGIN2} On Saturday, June 29, 2013 8:41:16 PM UTC-5, Baishampayan Ghose wrote: Does this work? ;; do the defmethod extension as usual and then define spit-messages as such (defn spit-messages Write out the messages in the given seq. [messages dest] (binding [*print-dup* true] (pprint (for [[metadata ^bytes payload] messages] {:header metadata :payload (String. payload)}) dest))) ~BG On Sun, Jun 30, 2013 at 7:05 AM, Dave Kincaid kincai...@gmail.com wrote: Thanks! If that works, it is perfect. However, my first attempt isn't making any difference. Here is what I have: (defmethod print-dup com.rabbitmq.client.impl.LongStringHelper$ByteArrayLongString [o w] (print-ctor o (fn [o w] (print-dup (String. (.getBytes o)) w)) w)) (defn spit-messages Write out the messages in the given seq. [messages dest] (print-dup (for [[metadata ^bytes payload] messages] {:header metadata :payload (String. payload)}) dest)) but it still prints it out to the file with #ByteArrayLongString PLUGIN2. Did I miss something? On Saturday, June 29, 2013 8:14:49 PM UTC-5, Baishampayan Ghose wrote: Adding a method to the `print-dup` multimethod that dispatches on ByteArrayLongString should help. See here for an example - http://clojuredocs.org/clojure_core/clojure.core/print-dup ~BG On Sun, Jun 30, 2013 at 5:47 AM, Dave Kincaid kincai...@gmail.com wrote: I'm using pprint to write out a map to a file then trying to read it back in using clojure.edn/read (I also get the same error using read). Here is the output (it's a map that was created by the Langohr rabbitmq library): {:header {:timestamp #inst 2058-04-07T17:56:17.000-00:00, :delivery-tag 2, :expiration nil, :correlation-id nil, :delivery-mode 1, :app-id nil, :user-id nil, :redelivery? true, :header {:headers ()}, :content-type nil, :persistent? false, :reply-to nil, :routing-key pims_data_capture, :headers {pluginKey #ByteArrayLongString PLUGIN2}, :type nil, :message-id nil, :cluster-id nil, :message-count 3, :exchange , :content-encoding nil, :priority nil}, :payload {\software\:\CSTONE\,\entity\:\\,} when I try to read it in I get an UnreadableForm exception. I've narrowed it down to the #ByteArrayLongString PLUGIN2 element. If I manually change that to just a regular string I can read it. What is the idiomatic way to handle this noting that there could be a number of different values in that :headers map. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- Baishampayan Ghose b.ghose at gmail.com -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- Baishampayan Ghose b.ghose at gmail.com -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are
Re: UnreadableForm exception trying to read an EDN file
By the way, there is also the print-method multimethod which might just do the trick for you. Just try this one with your original version of `spit-messages` - http://clojuredocs.org/clojure_core/clojure.core/print-method ~BG On Sun, Jun 30, 2013 at 7:18 AM, Dave Kincaid kincaid.d...@gmail.com wrote: Hmm. No, it doesn't. This is what I get with pprint by itself: :headers {pluginKey #ByteArrayLongString PLUGIN2} with your version I get: :headers #=(java.util.HashMap. {pluginKey #=(com.rabbitmq.client.impl.LongStringHelper$ByteArrayLongString. PLUGIN2)}) what I think I needs to be able to read it back in is: :headers {pluginKey PLUGIN2} On Saturday, June 29, 2013 8:41:16 PM UTC-5, Baishampayan Ghose wrote: Does this work? ;; do the defmethod extension as usual and then define spit-messages as such (defn spit-messages Write out the messages in the given seq. [messages dest] (binding [*print-dup* true] (pprint (for [[metadata ^bytes payload] messages] {:header metadata :payload (String. payload)}) dest))) ~BG On Sun, Jun 30, 2013 at 7:05 AM, Dave Kincaid kincai...@gmail.com wrote: Thanks! If that works, it is perfect. However, my first attempt isn't making any difference. Here is what I have: (defmethod print-dup com.rabbitmq.client.impl.LongStringHelper$ByteArrayLongString [o w] (print-ctor o (fn [o w] (print-dup (String. (.getBytes o)) w)) w)) (defn spit-messages Write out the messages in the given seq. [messages dest] (print-dup (for [[metadata ^bytes payload] messages] {:header metadata :payload (String. payload)}) dest)) but it still prints it out to the file with #ByteArrayLongString PLUGIN2. Did I miss something? On Saturday, June 29, 2013 8:14:49 PM UTC-5, Baishampayan Ghose wrote: Adding a method to the `print-dup` multimethod that dispatches on ByteArrayLongString should help. See here for an example - http://clojuredocs.org/clojure_core/clojure.core/print-dup ~BG On Sun, Jun 30, 2013 at 5:47 AM, Dave Kincaid kincai...@gmail.com wrote: I'm using pprint to write out a map to a file then trying to read it back in using clojure.edn/read (I also get the same error using read). Here is the output (it's a map that was created by the Langohr rabbitmq library): {:header {:timestamp #inst 2058-04-07T17:56:17.000-00:00, :delivery-tag 2, :expiration nil, :correlation-id nil, :delivery-mode 1, :app-id nil, :user-id nil, :redelivery? true, :header {:headers ()}, :content-type nil, :persistent? false, :reply-to nil, :routing-key pims_data_capture, :headers {pluginKey #ByteArrayLongString PLUGIN2}, :type nil, :message-id nil, :cluster-id nil, :message-count 3, :exchange , :content-encoding nil, :priority nil}, :payload {\software\:\CSTONE\,\entity\:\\,} when I try to read it in I get an UnreadableForm exception. I've narrowed it down to the #ByteArrayLongString PLUGIN2 element. If I manually change that to just a regular string I can read it. What is the idiomatic way to handle this noting that there could be a number of different values in that :headers map. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- Baishampayan Ghose b.ghose at gmail.com -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- Baishampayan Ghose b.ghose at gmail.com -- -- You received this message because you are subscribed to the Google
Re: UnreadableForm exception trying to read an EDN file
Thank you very much for the help. I really appreciate you trying. I don't know what is going on, but I need to move on from this. Dave On Saturday, June 29, 2013 8:57:31 PM UTC-5, Baishampayan Ghose wrote: This form, by the way is readable. Not sure why the print-dup extension is not working though... ~BG On Sun, Jun 30, 2013 at 7:18 AM, Dave Kincaid kincai...@gmail.comjavascript: wrote: Hmm. No, it doesn't. This is what I get with pprint by itself: :headers {pluginKey #ByteArrayLongString PLUGIN2} with your version I get: :headers #=(java.util.HashMap. {pluginKey #=(com.rabbitmq.client.impl.LongStringHelper$ByteArrayLongString. PLUGIN2)}) what I think I needs to be able to read it back in is: :headers {pluginKey PLUGIN2} On Saturday, June 29, 2013 8:41:16 PM UTC-5, Baishampayan Ghose wrote: Does this work? ;; do the defmethod extension as usual and then define spit-messages as such (defn spit-messages Write out the messages in the given seq. [messages dest] (binding [*print-dup* true] (pprint (for [[metadata ^bytes payload] messages] {:header metadata :payload (String. payload)}) dest))) ~BG On Sun, Jun 30, 2013 at 7:05 AM, Dave Kincaid kincai...@gmail.com wrote: Thanks! If that works, it is perfect. However, my first attempt isn't making any difference. Here is what I have: (defmethod print-dup com.rabbitmq.client.impl.LongStringHelper$ByteArrayLongString [o w] (print-ctor o (fn [o w] (print-dup (String. (.getBytes o)) w)) w)) (defn spit-messages Write out the messages in the given seq. [messages dest] (print-dup (for [[metadata ^bytes payload] messages] {:header metadata :payload (String. payload)}) dest)) but it still prints it out to the file with #ByteArrayLongString PLUGIN2. Did I miss something? On Saturday, June 29, 2013 8:14:49 PM UTC-5, Baishampayan Ghose wrote: Adding a method to the `print-dup` multimethod that dispatches on ByteArrayLongString should help. See here for an example - http://clojuredocs.org/clojure_core/clojure.core/print-dup ~BG On Sun, Jun 30, 2013 at 5:47 AM, Dave Kincaid kincai...@gmail.com wrote: I'm using pprint to write out a map to a file then trying to read it back in using clojure.edn/read (I also get the same error using read). Here is the output (it's a map that was created by the Langohr rabbitmq library): {:header {:timestamp #inst 2058-04-07T17:56:17.000-00:00, :delivery-tag 2, :expiration nil, :correlation-id nil, :delivery-mode 1, :app-id nil, :user-id nil, :redelivery? true, :header {:headers ()}, :content-type nil, :persistent? false, :reply-to nil, :routing-key pims_data_capture, :headers {pluginKey #ByteArrayLongString PLUGIN2}, :type nil, :message-id nil, :cluster-id nil, :message-count 3, :exchange , :content-encoding nil, :priority nil}, :payload {\software\:\CSTONE\,\entity\:\\,} when I try to read it in I get an UnreadableForm exception. I've narrowed it down to the #ByteArrayLongString PLUGIN2 element. If I manually change that to just a regular string I can read it. What is the idiomatic way to handle this noting that there could be a number of different values in that :headers map. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- Baishampayan Ghose b.ghose at gmail.com -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en ---
Re: UnreadableForm exception trying to read an EDN file
Readable by clojure.edn/read? I get this exception from it: RuntimeException No dispatch macro for: = clojure.lang.Util.runtimeException (Util.java:219) I think I'm going to give up on this and serialize it to JSON. Should be easier. On Saturday, June 29, 2013 8:57:31 PM UTC-5, Baishampayan Ghose wrote: This form, by the way is readable. Not sure why the print-dup extension is not working though... ~BG On Sun, Jun 30, 2013 at 7:18 AM, Dave Kincaid kincai...@gmail.comjavascript: wrote: Hmm. No, it doesn't. This is what I get with pprint by itself: :headers {pluginKey #ByteArrayLongString PLUGIN2} with your version I get: :headers #=(java.util.HashMap. {pluginKey #=(com.rabbitmq.client.impl.LongStringHelper$ByteArrayLongString. PLUGIN2)}) what I think I needs to be able to read it back in is: :headers {pluginKey PLUGIN2} On Saturday, June 29, 2013 8:41:16 PM UTC-5, Baishampayan Ghose wrote: Does this work? ;; do the defmethod extension as usual and then define spit-messages as such (defn spit-messages Write out the messages in the given seq. [messages dest] (binding [*print-dup* true] (pprint (for [[metadata ^bytes payload] messages] {:header metadata :payload (String. payload)}) dest))) ~BG On Sun, Jun 30, 2013 at 7:05 AM, Dave Kincaid kincai...@gmail.com wrote: Thanks! If that works, it is perfect. However, my first attempt isn't making any difference. Here is what I have: (defmethod print-dup com.rabbitmq.client.impl.LongStringHelper$ByteArrayLongString [o w] (print-ctor o (fn [o w] (print-dup (String. (.getBytes o)) w)) w)) (defn spit-messages Write out the messages in the given seq. [messages dest] (print-dup (for [[metadata ^bytes payload] messages] {:header metadata :payload (String. payload)}) dest)) but it still prints it out to the file with #ByteArrayLongString PLUGIN2. Did I miss something? On Saturday, June 29, 2013 8:14:49 PM UTC-5, Baishampayan Ghose wrote: Adding a method to the `print-dup` multimethod that dispatches on ByteArrayLongString should help. See here for an example - http://clojuredocs.org/clojure_core/clojure.core/print-dup ~BG On Sun, Jun 30, 2013 at 5:47 AM, Dave Kincaid kincai...@gmail.com wrote: I'm using pprint to write out a map to a file then trying to read it back in using clojure.edn/read (I also get the same error using read). Here is the output (it's a map that was created by the Langohr rabbitmq library): {:header {:timestamp #inst 2058-04-07T17:56:17.000-00:00, :delivery-tag 2, :expiration nil, :correlation-id nil, :delivery-mode 1, :app-id nil, :user-id nil, :redelivery? true, :header {:headers ()}, :content-type nil, :persistent? false, :reply-to nil, :routing-key pims_data_capture, :headers {pluginKey #ByteArrayLongString PLUGIN2}, :type nil, :message-id nil, :cluster-id nil, :message-count 3, :exchange , :content-encoding nil, :priority nil}, :payload {\software\:\CSTONE\,\entity\:\\,} when I try to read it in I get an UnreadableForm exception. I've narrowed it down to the #ByteArrayLongString PLUGIN2 element. If I manually change that to just a regular string I can read it. What is the idiomatic way to handle this noting that there could be a number of different values in that :headers map. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- Baishampayan Ghose b.ghose at gmail.com -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com
Re: UnreadableForm exception trying to read an EDN file
No problem, but I am sure someone else on this group will have the answer :) ~BG On Sun, Jun 30, 2013 at 7:33 AM, Dave Kincaid kincaid.d...@gmail.com wrote: Thank you very much for the help. I really appreciate you trying. I don't know what is going on, but I need to move on from this. Dave On Saturday, June 29, 2013 8:57:31 PM UTC-5, Baishampayan Ghose wrote: This form, by the way is readable. Not sure why the print-dup extension is not working though... ~BG On Sun, Jun 30, 2013 at 7:18 AM, Dave Kincaid kincai...@gmail.com wrote: Hmm. No, it doesn't. This is what I get with pprint by itself: :headers {pluginKey #ByteArrayLongString PLUGIN2} with your version I get: :headers #=(java.util.HashMap. {pluginKey #=(com.rabbitmq.client.impl.LongStringHelper$ByteArrayLongString. PLUGIN2)}) what I think I needs to be able to read it back in is: :headers {pluginKey PLUGIN2} On Saturday, June 29, 2013 8:41:16 PM UTC-5, Baishampayan Ghose wrote: Does this work? ;; do the defmethod extension as usual and then define spit-messages as such (defn spit-messages Write out the messages in the given seq. [messages dest] (binding [*print-dup* true] (pprint (for [[metadata ^bytes payload] messages] {:header metadata :payload (String. payload)}) dest))) ~BG On Sun, Jun 30, 2013 at 7:05 AM, Dave Kincaid kincai...@gmail.com wrote: Thanks! If that works, it is perfect. However, my first attempt isn't making any difference. Here is what I have: (defmethod print-dup com.rabbitmq.client.impl.LongStringHelper$ByteArrayLongString [o w] (print-ctor o (fn [o w] (print-dup (String. (.getBytes o)) w)) w)) (defn spit-messages Write out the messages in the given seq. [messages dest] (print-dup (for [[metadata ^bytes payload] messages] {:header metadata :payload (String. payload)}) dest)) but it still prints it out to the file with #ByteArrayLongString PLUGIN2. Did I miss something? On Saturday, June 29, 2013 8:14:49 PM UTC-5, Baishampayan Ghose wrote: Adding a method to the `print-dup` multimethod that dispatches on ByteArrayLongString should help. See here for an example - http://clojuredocs.org/clojure_core/clojure.core/print-dup ~BG On Sun, Jun 30, 2013 at 5:47 AM, Dave Kincaid kincai...@gmail.com wrote: I'm using pprint to write out a map to a file then trying to read it back in using clojure.edn/read (I also get the same error using read). Here is the output (it's a map that was created by the Langohr rabbitmq library): {:header {:timestamp #inst 2058-04-07T17:56:17.000-00:00, :delivery-tag 2, :expiration nil, :correlation-id nil, :delivery-mode 1, :app-id nil, :user-id nil, :redelivery? true, :header {:headers ()}, :content-type nil, :persistent? false, :reply-to nil, :routing-key pims_data_capture, :headers {pluginKey #ByteArrayLongString PLUGIN2}, :type nil, :message-id nil, :cluster-id nil, :message-count 3, :exchange , :content-encoding nil, :priority nil}, :payload {\software\:\CSTONE\,\entity\:\\,} when I try to read it in I get an UnreadableForm exception. I've narrowed it down to the #ByteArrayLongString PLUGIN2 element. If I manually change that to just a regular string I can read it. What is the idiomatic way to handle this noting that there could be a number of different values in that :headers map. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- Baishampayan Ghose b.ghose at gmail.com -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: Is there a better way to update a map atom?
On Sat, Jun 29, 2013 at 9:21 PM, Ben Wolfson wolf...@gmail.com wrote: On Sat, Jun 29, 2013 at 6:06 PM, Cedric Greevey cgree...@gmail.comwrote: Who said swap *was* CAS, rather than was implemented *in terms of* CAS? In any event, your claim that no comparison is done unless it's done in the supplied function is just plain wrong. Comparison *is* done, outside that function, to make sure the atom wasn't changed by another thread while the function was executing. swap! is for CAS Who claimed that, again? I said swap! is for when the new value depends, in some way, on the previous value, which is not the same thing, and then mentioned twice that it's implemented in terms of CAS. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: UnreadableForm exception trying to read an EDN file
That works perfectly! Thank you again very much. On Saturday, June 29, 2013 9:01:32 PM UTC-5, Baishampayan Ghose wrote: By the way, there is also the print-method multimethod which might just do the trick for you. Just try this one with your original version of `spit-messages` - http://clojuredocs.org/clojure_core/clojure.core/print-method ~BG On Sun, Jun 30, 2013 at 7:18 AM, Dave Kincaid kincai...@gmail.comjavascript: wrote: Hmm. No, it doesn't. This is what I get with pprint by itself: :headers {pluginKey #ByteArrayLongString PLUGIN2} with your version I get: :headers #=(java.util.HashMap. {pluginKey #=(com.rabbitmq.client.impl.LongStringHelper$ByteArrayLongString. PLUGIN2)}) what I think I needs to be able to read it back in is: :headers {pluginKey PLUGIN2} On Saturday, June 29, 2013 8:41:16 PM UTC-5, Baishampayan Ghose wrote: Does this work? ;; do the defmethod extension as usual and then define spit-messages as such (defn spit-messages Write out the messages in the given seq. [messages dest] (binding [*print-dup* true] (pprint (for [[metadata ^bytes payload] messages] {:header metadata :payload (String. payload)}) dest))) ~BG On Sun, Jun 30, 2013 at 7:05 AM, Dave Kincaid kincai...@gmail.com wrote: Thanks! If that works, it is perfect. However, my first attempt isn't making any difference. Here is what I have: (defmethod print-dup com.rabbitmq.client.impl.LongStringHelper$ByteArrayLongString [o w] (print-ctor o (fn [o w] (print-dup (String. (.getBytes o)) w)) w)) (defn spit-messages Write out the messages in the given seq. [messages dest] (print-dup (for [[metadata ^bytes payload] messages] {:header metadata :payload (String. payload)}) dest)) but it still prints it out to the file with #ByteArrayLongString PLUGIN2. Did I miss something? On Saturday, June 29, 2013 8:14:49 PM UTC-5, Baishampayan Ghose wrote: Adding a method to the `print-dup` multimethod that dispatches on ByteArrayLongString should help. See here for an example - http://clojuredocs.org/clojure_core/clojure.core/print-dup ~BG On Sun, Jun 30, 2013 at 5:47 AM, Dave Kincaid kincai...@gmail.com wrote: I'm using pprint to write out a map to a file then trying to read it back in using clojure.edn/read (I also get the same error using read). Here is the output (it's a map that was created by the Langohr rabbitmq library): {:header {:timestamp #inst 2058-04-07T17:56:17.000-00:00, :delivery-tag 2, :expiration nil, :correlation-id nil, :delivery-mode 1, :app-id nil, :user-id nil, :redelivery? true, :header {:headers ()}, :content-type nil, :persistent? false, :reply-to nil, :routing-key pims_data_capture, :headers {pluginKey #ByteArrayLongString PLUGIN2}, :type nil, :message-id nil, :cluster-id nil, :message-count 3, :exchange , :content-encoding nil, :priority nil}, :payload {\software\:\CSTONE\,\entity\:\\,} when I try to read it in I get an UnreadableForm exception. I've narrowed it down to the #ByteArrayLongString PLUGIN2 element. If I manually change that to just a regular string I can read it. What is the idiomatic way to handle this noting that there could be a number of different values in that :headers map. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- Baishampayan Ghose b.ghose at gmail.com -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com For more options, visit this group at
Re: UnreadableForm exception trying to read an EDN file
Cool! ~BG On Sun, Jun 30, 2013 at 7:49 AM, Dave Kincaid kincaid.d...@gmail.com wrote: That works perfectly! Thank you again very much. On Saturday, June 29, 2013 9:01:32 PM UTC-5, Baishampayan Ghose wrote: By the way, there is also the print-method multimethod which might just do the trick for you. Just try this one with your original version of `spit-messages` - http://clojuredocs.org/clojure_core/clojure.core/print-method ~BG On Sun, Jun 30, 2013 at 7:18 AM, Dave Kincaid kincai...@gmail.com wrote: Hmm. No, it doesn't. This is what I get with pprint by itself: :headers {pluginKey #ByteArrayLongString PLUGIN2} with your version I get: :headers #=(java.util.HashMap. {pluginKey #=(com.rabbitmq.client.impl.LongStringHelper$ByteArrayLongString. PLUGIN2)}) what I think I needs to be able to read it back in is: :headers {pluginKey PLUGIN2} On Saturday, June 29, 2013 8:41:16 PM UTC-5, Baishampayan Ghose wrote: Does this work? ;; do the defmethod extension as usual and then define spit-messages as such (defn spit-messages Write out the messages in the given seq. [messages dest] (binding [*print-dup* true] (pprint (for [[metadata ^bytes payload] messages] {:header metadata :payload (String. payload)}) dest))) ~BG On Sun, Jun 30, 2013 at 7:05 AM, Dave Kincaid kincai...@gmail.com wrote: Thanks! If that works, it is perfect. However, my first attempt isn't making any difference. Here is what I have: (defmethod print-dup com.rabbitmq.client.impl.LongStringHelper$ByteArrayLongString [o w] (print-ctor o (fn [o w] (print-dup (String. (.getBytes o)) w)) w)) (defn spit-messages Write out the messages in the given seq. [messages dest] (print-dup (for [[metadata ^bytes payload] messages] {:header metadata :payload (String. payload)}) dest)) but it still prints it out to the file with #ByteArrayLongString PLUGIN2. Did I miss something? On Saturday, June 29, 2013 8:14:49 PM UTC-5, Baishampayan Ghose wrote: Adding a method to the `print-dup` multimethod that dispatches on ByteArrayLongString should help. See here for an example - http://clojuredocs.org/clojure_core/clojure.core/print-dup ~BG On Sun, Jun 30, 2013 at 5:47 AM, Dave Kincaid kincai...@gmail.com wrote: I'm using pprint to write out a map to a file then trying to read it back in using clojure.edn/read (I also get the same error using read). Here is the output (it's a map that was created by the Langohr rabbitmq library): {:header {:timestamp #inst 2058-04-07T17:56:17.000-00:00, :delivery-tag 2, :expiration nil, :correlation-id nil, :delivery-mode 1, :app-id nil, :user-id nil, :redelivery? true, :header {:headers ()}, :content-type nil, :persistent? false, :reply-to nil, :routing-key pims_data_capture, :headers {pluginKey #ByteArrayLongString PLUGIN2}, :type nil, :message-id nil, :cluster-id nil, :message-count 3, :exchange , :content-encoding nil, :priority nil}, :payload {\software\:\CSTONE\,\entity\:\\,} when I try to read it in I get an UnreadableForm exception. I've narrowed it down to the #ByteArrayLongString PLUGIN2 element. If I manually change that to just a regular string I can read it. What is the idiomatic way to handle this noting that there could be a number of different values in that :headers map. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- Baishampayan Ghose b.ghose at gmail.com -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message
Re: Tortoise-hare algorithm
Hi Simone Cedric, Thanks for your comment. In fact, my purpose is to demonstrate to my colleagues how Clojure deals with this algorithm. I'm going to implement the Brent's way. However, I'm wondering if I can make the Floyd's more functional. Tail recursion is good, but not good enough to show the paradigm shift (of functional programming) to my colleagues. Any ideas? Thanks! :) 2013年6月30日日曜日 2時58分57秒 UTC+8 Cedric Greevey: If the function is expensive to compute, you might prefer Brent's periodicity detection algorithm, which instead of 1.5xn invocations of the function only requires n + o(log n) invocations and supposedly detects just as fast. You store [last-n, last-f, next-n] = [0, f(0), 1] and then, for n = 1 to whatever: * compute f(n) * see if it's equal to last-f; if it is, f is or becomes periodic with a period dividing n - last-n. * if n = next-n, change the store to [n, f(n), 2*next-n] * move on to f(n + 1). On Sat, Jun 29, 2013 at 10:43 AM, Simone Mosciatti mweb...@gmail.comjavascript: wrote: It is very interesting, just a friendly suggestion, if you share code, and need some help, make sure people can get immediately what is going on. (READ: comment the code) On Saturday, June 29, 2013 1:34:57 PM UTC+2, Zhemin Lin wrote: Hi. One of my colleagues gave a share about the cycle detecting tortoise-hare algorithm (wikihttp://en.wikipedia.org/wiki/Cycle_detection#Tortoise_and_hare ). I translated the script on Wiki from Python to Clojure. It worked, but not elegant. I'd like to make it more functional, more tasty. Any suggestions to help it evolve? I uploaded my (messy) code here: https://github.com/** miaoski/clojure-tortoise-harehttps://github.com/miaoski/clojure-tortoise-hare Thanks a lot! :) -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clo...@googlegroups.comjavascript: Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+u...@googlegroups.com javascript: For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com javascript:. For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.