[ANN] Luke VanderHart's Clojure Zippers Conj video up
Hi everyone, We've just released the next Conj video, Luke VanderHart's talk on Clojure Zippers: http://clojure.blip.tv/file/4503162/ I've also just blogged over at clojure.com on what our video release plan is, along with links to videos released so far: http://clojure.com/blog/2010/12/27/conj-videos.html The source for all videos Clojure is still http://clojure.blip.tv/, and if you'd like to know the moment the next video is available, be sure to follow clojure_conj on Twitter: http://twitter.com/clojure_conj Thank you, and Happy Holidays, Alan and the Clojure/core team -- 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
Clojure Conj 2011?
Now that videos are being posted for the 2010 conj, I figured it might be worth asking if there has been any discussion about when/where the 2011 conj might happen? I had a schedule conflict last year (actually a double conflict) so I'd like to get this year's event on my calendar as early as possible so I don't miss it again :) -- Sean A Corfield -- (904) 302-SEAN Railo Technologies, Inc. -- http://getrailo.com/ An Architect's View -- http://corfield.org/ If you're not annoying somebody, you're not really alive. -- Margaret Atwood -- 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
Re: Clojure Conj 2011?
Hi, On Mon, Dec 27, 2010 at 7:41 PM, Sean Corfield seancorfi...@gmail.com wrote: Now that videos are being posted for the 2010 conj, I figured it might be worth asking if there has been any discussion about when/where the 2011 conj might happen? Conj 2011 will most likely be in either Raleigh or Durham, North Carolina, and probably will happen around the same time of year as the last Conj. We've reviewed all the feedback we've gotten, and are looking for a venue. Our hope is to announce the time and place as soon as possible. Sorry you couldn't make it to the last one, but looking forward to seeing you at the next one! Alan I had a schedule conflict last year (actually a double conflict) so I'd like to get this year's event on my calendar as early as possible so I don't miss it again :) -- Sean A Corfield -- (904) 302-SEAN Railo Technologies, Inc. -- http://getrailo.com/ An Architect's View -- http://corfield.org/ If you're not annoying somebody, you're not really alive. -- Margaret Atwood -- 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
Re: printf output from threads
On Dec 26, 11:42 pm, Alex Osborne a...@meshy.org wrote: justinhj justi...@gmail.com writes: I tried passing *out* to my thread function and then binding it to *out* in the thread, and this works but then makes the threads execute one at a time, and I'm presuming that is because my use of *out* in the binding block is blocking for the other threads which use it. That doesn't sound right: binding itself never blocks. Can you post some example code where you see this behaviour? As I understand it binding conveyance should happen automatically in the upcoming 1.3 release (for futures and agents) but in 1.2 you can use bound-fn, or for better performance use binding explicitly as you suggested. (future-call (bound-fn [] (println log...))) (send some-agent (bound-fn [x] (println log...) (inc x))) This is the code I've written so far (defn sleeper-thread [out id t] Sleep for time T ms (binding [*out* out] (printf %d sleeping for time %d\n id t) (Thread/sleep t) (printf %d slept\n id))) (defn test-threads [n out] (dotimes [x n] (.start (Thread. (#(sleeper-thread %1 %2 %3) out x (+ 2000 (rand- int 5000))) And the output is 0 sleeping for time 5480 0 slept 1 sleeping for time 6739 1 slept 2 sleeping for time 5444 2 slept 3 sleeping for time 3087 3 slept 4 sleeping for time 6753 4 slept 5 sleeping for time 3489 5 slept 6 sleeping for time 5864 6 slept 7 sleeping for time 5523 7 slept 8 sleeping for time 5659 8 slept 9 sleeping for time 5052 9 slept -- 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
Re: printf output from threads
Your problem is caused by one itty-bitty misplaced parenthesis that is hard to catch; In your code which creates threads, you do: (.start (Thread. (#(sleeper-thread %1 %2 %3) out x (+ 2000 (rand-int 5000))) #(sleeper-thread %1 %2 %3) is exactly the same as just sleeper-thread, so this boils down to (.start (Thread. (sleeper-thread out x (+ 2000 (rand-int 5000))) and now you can see that you are evaulating your sleeper-thread function before you actually create the thread. Thread wants Runnable object like a clojure function with no arguments, so either (.start (Thread. #(sleeper-thread out x (+ 2000 (rand-int 5000))) or (.start (Thread. (partial sleeper-thread out x (+ 2000 (rand-int 5000))) would work and do what you expect. Here's a modified version of your code with output: (ns mailing-list.print-from-threads) (defn sleeper-thread [out id t] Sleep for time T ms (binding [*out* out] (let [start (System/nanoTime)] (printf %d sleeping for time %d\n id t) (Thread/sleep t) (printf %d slept for %d\n id (int (/ (- (System/nanoTime) start) 1e6)) (defn test-threads-rlm [n out] (let [start (System/nanoTime)] (dotimes [x n] (.start (Thread. (partial sleeper-thread out x (+ 2000 (rand-int 5000)) (println Total time is: (int (/ (- (System/nanoTime) start) 1e6) (defn test-threads [n out] (let [start (System/nanoTime)] (dotimes [x n] (.start (Thread. (#(sleeper-thread %1 %2 %3) out x (+ 2000 (rand-int 5000)) (println Total time is: (int (/ (- (System/nanoTime) start) 1e6) mailing-list.print-from-threads (test-threads-rlm 4 *out*) 0 sleeping for time 6783 1 sleeping for time 3716 2 sleeping for time 6890 Total time is: 2 3 sleeping for time 5582 1 slept for 3716 3 slept for 5582 0 slept for 6783 2 slept for 6890 nil mailing-list.print-from-threads (test-threads 4 *out*) 0 sleeping for time 5875 0 slept for 5875 1 sleeping for time 3413 1 slept for 3413 2 sleeping for time 3709 2 slept for 3710 3 sleeping for time 5483 3 slept for 5484 Total time is: 18486 nil mailing-list.print-from-threads However, I am vexed at how your original code works at all! look at this! --- ;;works (Thread. (#(sleeper-thread %1 %2 %3) *out* 2 (+ 2000 (rand-int 5000 (= nil (#(sleeper-thread %1 %2 %3) *out* 2 (+ 2000 (rand-int 5000 ;;true ;;doesn't work (Thread. nil) ;;works (Thread. ((fn [a b c] (sleeper-thread a b c)) *out* 2 (+ 2000 (rand-int 5000 ;;works (Thread. ((fn []))) How can you make a Thread with ((fn [])) when (= ((fn [])) nil) sincerely, --Robert McIntyre On Tue, Dec 28, 2010 at 1:45 AM, justinhj justi...@gmail.com wrote: On Dec 26, 11:42 pm, Alex Osborne a...@meshy.org wrote: justinhj justi...@gmail.com writes: I tried passing *out* to my thread function and then binding it to *out* in the thread, and this works but then makes the threads execute one at a time, and I'm presuming that is because my use of *out* in the binding block is blocking for the other threads which use it. That doesn't sound right: binding itself never blocks. Can you post some example code where you see this behaviour? As I understand it binding conveyance should happen automatically in the upcoming 1.3 release (for futures and agents) but in 1.2 you can use bound-fn, or for better performance use binding explicitly as you suggested. (future-call (bound-fn [] (println log...))) (send some-agent (bound-fn [x] (println log...) (inc x))) This is the code I've written so far (defn sleeper-thread [out id t] Sleep for time T ms (binding [*out* out] (printf %d sleeping for time %d\n id t) (Thread/sleep t) (printf %d slept\n id))) (defn test-threads [n out] (dotimes [x n] (.start (Thread. (#(sleeper-thread %1 %2 %3) out x (+ 2000 (rand- int 5000))) And the output is 0 sleeping for time 5480 0 slept 1 sleeping for time 6739 1 slept 2 sleeping for time 5444 2 slept 3 sleeping for time 3087 3 slept 4 sleeping for time 6753 4 slept 5 sleeping for time 3489 5 slept 6 sleeping for time 5864 6 slept 7 sleeping for time 5523 7 slept 8 sleeping for time 5659 8 slept 9 sleeping for time 5052 9 slept -- 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
can members of a defrecord be type hinted?
Hello everybody, can members of a record be type hinted? will this enhance performance or improve storage efficiency? Sunil. -- 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
Re: printf output from threads
what the heck... mailing-list.print-from-threads (Thread. ((constantly nil))) #Thread Thread[Thread-100,5,main] mailing-list.print-from-threads (Thread. ((fn []))) #Thread Thread[Thread-101,5,main] mailing-list.print-from-threads (Thread. ((fn [] nil))) #Thread Thread[Thread-102,5,main] mailing-list.print-from-threads (Thread. (let [this-is-nil ((fn [] nil))] this-is-nil)) #Thread Thread[Thread-103,5,main] mailing-list.print-from-threads (Thread. nil) ; Evaluation aborted. mailing-list.print-from-threads (= nil (let [this-is-nil ((fn [] nil))] this-is-nil) ((fn [])) ((constantly nil))) true mailing-list.print-from-threads all of these things are referentially transparent, so how is clojure differentiating between things that evaluate to nil and nil itself? sincerely, --Robert McIntyre On Tue, Dec 28, 2010 at 2:29 AM, Robert McIntyre r...@mit.edu wrote: Your problem is caused by one itty-bitty misplaced parenthesis that is hard to catch; In your code which creates threads, you do: (.start (Thread. (#(sleeper-thread %1 %2 %3) out x (+ 2000 (rand-int 5000))) #(sleeper-thread %1 %2 %3) is exactly the same as just sleeper-thread, so this boils down to (.start (Thread. (sleeper-thread out x (+ 2000 (rand-int 5000))) and now you can see that you are evaulating your sleeper-thread function before you actually create the thread. Thread wants Runnable object like a clojure function with no arguments, so either (.start (Thread. #(sleeper-thread out x (+ 2000 (rand-int 5000))) or (.start (Thread. (partial sleeper-thread out x (+ 2000 (rand-int 5000))) would work and do what you expect. Here's a modified version of your code with output: (ns mailing-list.print-from-threads) (defn sleeper-thread [out id t] Sleep for time T ms (binding [*out* out] (let [start (System/nanoTime)] (printf %d sleeping for time %d\n id t) (Thread/sleep t) (printf %d slept for %d\n id (int (/ (- (System/nanoTime) start) 1e6)) (defn test-threads-rlm [n out] (let [start (System/nanoTime)] (dotimes [x n] (.start (Thread. (partial sleeper-thread out x (+ 2000 (rand-int 5000)) (println Total time is: (int (/ (- (System/nanoTime) start) 1e6) (defn test-threads [n out] (let [start (System/nanoTime)] (dotimes [x n] (.start (Thread. (#(sleeper-thread %1 %2 %3) out x (+ 2000 (rand-int 5000)) (println Total time is: (int (/ (- (System/nanoTime) start) 1e6) mailing-list.print-from-threads (test-threads-rlm 4 *out*) 0 sleeping for time 6783 1 sleeping for time 3716 2 sleeping for time 6890 Total time is: 2 3 sleeping for time 5582 1 slept for 3716 3 slept for 5582 0 slept for 6783 2 slept for 6890 nil mailing-list.print-from-threads (test-threads 4 *out*) 0 sleeping for time 5875 0 slept for 5875 1 sleeping for time 3413 1 slept for 3413 2 sleeping for time 3709 2 slept for 3710 3 sleeping for time 5483 3 slept for 5484 Total time is: 18486 nil mailing-list.print-from-threads However, I am vexed at how your original code works at all! look at this! --- ;;works (Thread. (#(sleeper-thread %1 %2 %3) *out* 2 (+ 2000 (rand-int 5000 (= nil (#(sleeper-thread %1 %2 %3) *out* 2 (+ 2000 (rand-int 5000 ;;true ;;doesn't work (Thread. nil) ;;works (Thread. ((fn [a b c] (sleeper-thread a b c)) *out* 2 (+ 2000 (rand-int 5000 ;;works (Thread. ((fn []))) How can you make a Thread with ((fn [])) when (= ((fn [])) nil) sincerely, --Robert McIntyre On Tue, Dec 28, 2010 at 1:45 AM, justinhj justi...@gmail.com wrote: On Dec 26, 11:42 pm, Alex Osborne a...@meshy.org wrote: justinhj justi...@gmail.com writes: I tried passing *out* to my thread function and then binding it to *out* in the thread, and this works but then makes the threads execute one at a time, and I'm presuming that is because my use of *out* in the binding block is blocking for the other threads which use it. That doesn't sound right: binding itself never blocks. Can you post some example code where you see this behaviour? As I understand it binding conveyance should happen automatically in the upcoming 1.3 release (for futures and agents) but in 1.2 you can use bound-fn, or for better performance use binding explicitly as you suggested. (future-call (bound-fn [] (println log...))) (send some-agent (bound-fn [x] (println log...) (inc x))) This is the code I've written so far (defn sleeper-thread [out id t] Sleep for time T ms (binding [*out* out] (printf %d sleeping for time %d\n id t) (Thread/sleep t) (printf %d slept\n id))) (defn test-threads [n out] (dotimes [x n] (.start (Thread. (#(sleeper-thread %1 %2 %3) out x (+ 2000 (rand- int 5000))) And the output is 0 sleeping for time 5480 0 slept 1 sleeping for time 6739 1 slept 2 sleeping for time 5444 2 slept 3 sleeping for time
Re: can members of a defrecord be type hinted?
with my preliminary examination it seems like it does enhance storage efficiency and improve runtime performance.. How would still love to hear what you all have to say On Tue, Dec 28, 2010 at 1:02 PM, Sunil S Nandihalli sunil.nandiha...@gmail.com wrote: Hello everybody, can members of a record be type hinted? will this enhance performance or improve storage efficiency? Sunil. -- 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