England, (North) Northumberland Clojurans?

2015-04-18 Thread Stig Brautaset
(Or is it Clojurists? I've seen both.)

I've just moved to Berwick-upon-Tweed and have a couple months of leisure 
time. I'm planning to have a decent stab at learning Clojure, but it would 
be great to meet up with someone with similar interests occasionally. I've 
read a few books (Joy of Clojure, Developing Clojure Web apps, and the new 
one that Alex just announced) and had a stab at solving Euler problems 
, but I 
haven't actually built an application yet. Let me know if you are 
interested in meeting up!

Stig

-- 
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/d/optout.


Re: [ANN} Aleph 0.4.0 released, plus Manifold, Dirigiste, and a whole host of other libraries

2015-04-18 Thread Matthias Lange
In your examples, you put a let around the reads from timeouts.

(let [_ (a/deferred
(a/go
  (a/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/d/optout.


Re: Are keys and vals guaranteed to return in the same order?

2015-04-18 Thread Allen Rohner

On Friday, April 17, 2015 at 4:40:07 PM UTC-5, Michael Blume wrote:
>
>
> In other people's Clojure code I sometimes see things like
>
> (zipmap
>   (map some-fn (keys m))
>   (map other-fn (vals m)))
>
> If it were my code I'd be much more inclined to write
>
> (into {}
>   (for [[k v] m]
> [(some-fn k) (other-fn v)]))
>
> Is this a to-each-their-own thing or is the latter preferred?
>

One minor quibble is that your example only makes one pass over the data. 
If the map is big enough, there could be a performance advantage. 

 

-- 
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/d/optout.


range function wrong in 1.7.0-beta?

2015-04-18 Thread Mathias De Wachter
Hi,

this looks like quite a serious bug to me (at least it messed up my 
project):

First taking the code taken from grimoire:

clojurechess.position> (defn range
  "Returns a lazy seq of nums from start (inclusive) to end
  (exclusive), by step, where start defaults to 0, step to 1, and end to
  infinity. When step is equal to 0, returns an infinite sequence of
  start. When start is equal to end, returns empty list."
  {:added "1.0"
   :static true}
  ([] (range 0 Double/POSITIVE_INFINITY 1))
  ([end] (range 0 end 1))
  ([start end] (range start end 1))
  ([start end step]
   (lazy-seq
(let [b (chunk-buffer 32)
  comp (cond (or (zero? step) (= start end)) not=
 (pos? step) <
 (neg? step) >)]
  (loop [i start]
(if (and (< (count b) 32)
 (comp i end))
  (do
(chunk-append b i)
(recur (+ i step)))
  (chunk-cons (chunk b) 
  (when (comp i end) 
(range i end step)
WARNING: range already refers to: #'clojure.core/range in namespace: 
clojurechess.position, being replaced by: #'clojurechess.position/range
#'clojurechess.position/range
clojurechess.position> (range 0 11 2)
(0 2 4 6 8 10)

which is what I'd expect and relied on.

Now, looking at the new code:

clojurechess.position> (clojure.repl/source clojure.core/range)
(defn range
  "Returns a lazy seq of nums from start (inclusive) to end
  (exclusive), by step, where start defaults to 0, step to 1, and end to
  infinity. When step is equal to 0, returns an infinite sequence of
  start. When start is equal to end, returns empty list."
  {:added "1.0"
   :static true}
  ([]
   (iterate inc' 0))
  ([end]
   (if (instance? Long end)
 (clojure.lang.LongRange/create end)
 (clojure.lang.Range/create end)))
  ([start end]
   (if (and (instance? Long start) (instance? Long end))
 (clojure.lang.LongRange/create start end)
 (clojure.lang.Range/create start end)))
  ([start end step]
   (if (and (instance? Long start) (instance? Long end) (instance? Long 
step))
 (clojure.lang.LongRange/create start end step)
 (clojure.lang.Range/create start end step
nil
clojurechess.position> (clojure.lang.Range/create 0 11 2)
(0 2 4 6 8 10)
clojurechess.position> (clojure.lang.LongRange/create 0 11 2)
(0 2 4 6 8)
clojurechess.position> (clojure.core/range 0 11 2)
(0 2 4 6 8)

So the culprit is clojure.lang.LongRange/create.

-- 
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/d/optout.


Re: range function wrong in 1.7.0-beta?

2015-04-18 Thread Nelson Morris
I was trying to write a test.check property for this, and it seems to have
a found a different bug around `count` and `range`.

```
*clojure-version*
;;=> {:major 1, :minor 7, :incremental 0, :qualifier "beta1"}

(require '[clojure.test.check :as tc])
(require '[clojure.test.check.generators :as gen])
(require '[clojure.test.check.properties :as prop])

(def range-count-is-ceil-of-space-divided-by-step
  (prop/for-all [start gen/int
 end gen/int
 step (gen/such-that #(> % 0)
 gen/nat)]
(= (count (range start end step))
   (long (Math/ceil (double (/ (max 0 (- end start))
step)))

(tc/quick-check 100 range-count-is-ceil-of-space-divided-by-step)
;;=> {:result false, :seed 1429389499284, :failing-size 5, :num-tests 6,
:fail [-2 -1 3], :shrunk {:total-nodes-visited 9, :depth 3, :result false,
:smallest [-1 0 2]}}

(range -1 0 2)
;;=> (-1)
(count (range -1 0 2))
;;=> 0

(tc/quick-check 100 range-count-is-ceil-of-space-divided-by-step)
;;=> {:result false, :seed 1429389621085, :failing-size 4, :num-tests 5,
:fail [-3 4 5], :shrunk {:total-nodes-visited 11, :depth 5, :result false,
:smallest [0 1 2]}}

(range 0 1 2)
;;=> (0)
(count (range 0 1 2))
;;=> 0
```

On Sat, Apr 18, 2015 at 2:32 PM, Mathias De Wachter <
mathias.dewach...@gmail.com> wrote:

> Hi,
>
> this looks like quite a serious bug to me (at least it messed up my
> project):
>
> First taking the code taken from grimoire:
>
> clojurechess.position> (defn range
>   "Returns a lazy seq of nums from start (inclusive) to end
>   (exclusive), by step, where start defaults to 0, step to 1, and end to
>   infinity. When step is equal to 0, returns an infinite sequence of
>   start. When start is equal to end, returns empty list."
>   {:added "1.0"
>:static true}
>   ([] (range 0 Double/POSITIVE_INFINITY 1))
>   ([end] (range 0 end 1))
>   ([start end] (range start end 1))
>   ([start end step]
>(lazy-seq
> (let [b (chunk-buffer 32)
>   comp (cond (or (zero? step) (= start end)) not=
>  (pos? step) <
>  (neg? step) >)]
>   (loop [i start]
> (if (and (< (count b) 32)
>  (comp i end))
>   (do
> (chunk-append b i)
> (recur (+ i step)))
>   (chunk-cons (chunk b)
>   (when (comp i end)
> (range i end step)
> WARNING: range already refers to: #'clojure.core/range in namespace:
> clojurechess.position, being replaced by: #'clojurechess.position/range
> #'clojurechess.position/range
> clojurechess.position> (range 0 11 2)
> (0 2 4 6 8 10)
>
> which is what I'd expect and relied on.
>
> Now, looking at the new code:
>
> clojurechess.position> (clojure.repl/source clojure.core/range)
> (defn range
>   "Returns a lazy seq of nums from start (inclusive) to end
>   (exclusive), by step, where start defaults to 0, step to 1, and end to
>   infinity. When step is equal to 0, returns an infinite sequence of
>   start. When start is equal to end, returns empty list."
>   {:added "1.0"
>:static true}
>   ([]
>(iterate inc' 0))
>   ([end]
>(if (instance? Long end)
>  (clojure.lang.LongRange/create end)
>  (clojure.lang.Range/create end)))
>   ([start end]
>(if (and (instance? Long start) (instance? Long end))
>  (clojure.lang.LongRange/create start end)
>  (clojure.lang.Range/create start end)))
>   ([start end step]
>(if (and (instance? Long start) (instance? Long end) (instance? Long
> step))
>  (clojure.lang.LongRange/create start end step)
>  (clojure.lang.Range/create start end step
> nil
> clojurechess.position> (clojure.lang.Range/create 0 11 2)
> (0 2 4 6 8 10)
> clojurechess.position> (clojure.lang.LongRange/create 0 11 2)
> (0 2 4 6 8)
> clojurechess.position> (clojure.core/range 0 11 2)
> (0 2 4 6 8)
>
> So the culprit is clojure.lang.LongRange/create.
>
>  --
> 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/d/optout.
>

-- 
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 

Re: range function wrong in 1.7.0-beta?

2015-04-18 Thread Beau Fabry
Ouch. Suspect this is the 
problem 
https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/LongRange.java#L161

Pretty sure that boolean should be round the other way.

On Saturday, April 18, 2015 at 12:32:40 PM UTC-7, Mathias De Wachter wrote:
>
> Hi,
>
> this looks like quite a serious bug to me (at least it messed up my 
> project):
>
> First taking the code taken from grimoire:
>
> clojurechess.position> (defn range
>   "Returns a lazy seq of nums from start (inclusive) to end
>   (exclusive), by step, where start defaults to 0, step to 1, and end to
>   infinity. When step is equal to 0, returns an infinite sequence of
>   start. When start is equal to end, returns empty list."
>   {:added "1.0"
>:static true}
>   ([] (range 0 Double/POSITIVE_INFINITY 1))
>   ([end] (range 0 end 1))
>   ([start end] (range start end 1))
>   ([start end step]
>(lazy-seq
> (let [b (chunk-buffer 32)
>   comp (cond (or (zero? step) (= start end)) not=
>  (pos? step) <
>  (neg? step) >)]
>   (loop [i start]
> (if (and (< (count b) 32)
>  (comp i end))
>   (do
> (chunk-append b i)
> (recur (+ i step)))
>   (chunk-cons (chunk b) 
>   (when (comp i end) 
> (range i end step)
> WARNING: range already refers to: #'clojure.core/range in namespace: 
> clojurechess.position, being replaced by: #'clojurechess.position/range
> #'clojurechess.position/range
> clojurechess.position> (range 0 11 2)
> (0 2 4 6 8 10)
>
> which is what I'd expect and relied on.
>
> Now, looking at the new code:
>
> clojurechess.position> (clojure.repl/source clojure.core/range)
> (defn range
>   "Returns a lazy seq of nums from start (inclusive) to end
>   (exclusive), by step, where start defaults to 0, step to 1, and end to
>   infinity. When step is equal to 0, returns an infinite sequence of
>   start. When start is equal to end, returns empty list."
>   {:added "1.0"
>:static true}
>   ([]
>(iterate inc' 0))
>   ([end]
>(if (instance? Long end)
>  (clojure.lang.LongRange/create end)
>  (clojure.lang.Range/create end)))
>   ([start end]
>(if (and (instance? Long start) (instance? Long end))
>  (clojure.lang.LongRange/create start end)
>  (clojure.lang.Range/create start end)))
>   ([start end step]
>(if (and (instance? Long start) (instance? Long end) (instance? Long 
> step))
>  (clojure.lang.LongRange/create start end step)
>  (clojure.lang.Range/create start end step
> nil
> clojurechess.position> (clojure.lang.Range/create 0 11 2)
> (0 2 4 6 8 10)
> clojurechess.position> (clojure.lang.LongRange/create 0 11 2)
> (0 2 4 6 8)
> clojurechess.position> (clojure.core/range 0 11 2)
> (0 2 4 6 8)
>
> So the culprit is clojure.lang.LongRange/create.
>
>

-- 
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/d/optout.


Re: [ANN} Aleph 0.4.0 released, plus Manifold, Dirigiste, and a whole host of other libraries

2015-04-18 Thread Zach Tellman
I suspect it would, I think I was just letting the mechanics of Manifold's
let-flow macro color my judgment. Happy to accept any pull requests which
make my core.async examples more idiomatic.
On Apr 18, 2015 8:33 AM, "Matthias Lange"  wrote:

> In your examples, you put a let around the reads from timeouts.
>
> (let [_ (a/
> As far as i know, that is not neccessary. So your first example could be:
>
> (defn delayed-hello-world-handler
>   [req]
>   (d/->deferred
> (a/go
>   (a/   (hello-world-handler req
>
> Would that not work?
>
>  --
> 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/KH8Js8URKwA/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/d/optout.
>

-- 
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/d/optout.


Re: range function wrong in 1.7.0-beta?

2015-04-18 Thread Nelson Morris
Created http://dev.clojure.org/jira/browse/CLJ-1709 and
http://dev.clojure.org/jira/browse/CLJ-1710 around the two issues.

On Sat, Apr 18, 2015 at 4:08 PM, Beau Fabry  wrote:

> Ouch. Suspect this is the problem
> https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/LongRange.java#L161
>
> Pretty sure that boolean should be round the other way.
>
>
> On Saturday, April 18, 2015 at 12:32:40 PM UTC-7, Mathias De Wachter wrote:
>>
>> Hi,
>>
>> this looks like quite a serious bug to me (at least it messed up my
>> project):
>>
>> First taking the code taken from grimoire:
>>
>> clojurechess.position> (defn range
>>   "Returns a lazy seq of nums from start (inclusive) to end
>>   (exclusive), by step, where start defaults to 0, step to 1, and end to
>>   infinity. When step is equal to 0, returns an infinite sequence of
>>   start. When start is equal to end, returns empty list."
>>   {:added "1.0"
>>:static true}
>>   ([] (range 0 Double/POSITIVE_INFINITY 1))
>>   ([end] (range 0 end 1))
>>   ([start end] (range start end 1))
>>   ([start end step]
>>(lazy-seq
>> (let [b (chunk-buffer 32)
>>   comp (cond (or (zero? step) (= start end)) not=
>>  (pos? step) <
>>  (neg? step) >)]
>>   (loop [i start]
>> (if (and (< (count b) 32)
>>  (comp i end))
>>   (do
>> (chunk-append b i)
>> (recur (+ i step)))
>>   (chunk-cons (chunk b)
>>   (when (comp i end)
>> (range i end step)
>> WARNING: range already refers to: #'clojure.core/range in namespace:
>> clojurechess.position, being replaced by: #'clojurechess.position/range
>> #'clojurechess.position/range
>> clojurechess.position> (range 0 11 2)
>> (0 2 4 6 8 10)
>>
>> which is what I'd expect and relied on.
>>
>> Now, looking at the new code:
>>
>> clojurechess.position> (clojure.repl/source clojure.core/range)
>> (defn range
>>   "Returns a lazy seq of nums from start (inclusive) to end
>>   (exclusive), by step, where start defaults to 0, step to 1, and end to
>>   infinity. When step is equal to 0, returns an infinite sequence of
>>   start. When start is equal to end, returns empty list."
>>   {:added "1.0"
>>:static true}
>>   ([]
>>(iterate inc' 0))
>>   ([end]
>>(if (instance? Long end)
>>  (clojure.lang.LongRange/create end)
>>  (clojure.lang.Range/create end)))
>>   ([start end]
>>(if (and (instance? Long start) (instance? Long end))
>>  (clojure.lang.LongRange/create start end)
>>  (clojure.lang.Range/create start end)))
>>   ([start end step]
>>(if (and (instance? Long start) (instance? Long end) (instance? Long
>> step))
>>  (clojure.lang.LongRange/create start end step)
>>  (clojure.lang.Range/create start end step
>> nil
>> clojurechess.position> (clojure.lang.Range/create 0 11 2)
>> (0 2 4 6 8 10)
>> clojurechess.position> (clojure.lang.LongRange/create 0 11 2)
>> (0 2 4 6 8)
>> clojurechess.position> (clojure.core/range 0 11 2)
>> (0 2 4 6 8)
>>
>> So the culprit is clojure.lang.LongRange/create.
>>
>>  --
> 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/d/optout.
>

-- 
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/d/optout.


Re: range function wrong in 1.7.0-beta?

2015-04-18 Thread Alex Miller
Thanks all! Will definitely fix before release.

-- 
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/d/optout.


ANN Langohr 3.2.0 is released

2015-04-18 Thread Michael Klishin
Langohr [1] is a small Clojure client for RabbitMQ. 

Release notes:
http://blog.clojurewerkz.org/blog/2015/04/19/langohr-3-dot-2-0-is-released/

1. http://clojurerabbitmq.info
--  
@michaelklishin, github.com/michaelklishin

-- 
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/d/optout.


Friend workflow for JWT

2015-04-18 Thread Jonathon McKitrick
Here's my workflow:

(defn workflow-jwt-signed
  [& {:keys [credential-fn] :as jwt-config}]
  (fn [{{:strs [authorization]} :headers :as request}]
(when (and authorization (re-matches #"\s*Bearer\s+(.+)" authorization))
  (println "Found auth" authorization)
  (if-let [claims (try (-> (re-matches #"\s*Bearer\s+(.+)" 
authorization)
   second
   pts/get-jwt-token-from-string
   (get-in [:claims]))
   (catch Exception e
 (println
  "Invalid Authorization header for JWT auth: "
  authorization)
 #_(.printStackTrace e)))]
(if-let [user-record ((cemerick.friend.util/gets
   :credential-fn jwt-config
   (::friend/auth-config request))
  ^{::friend/workflow :jwt}
  claims)]
  (workflows/make-auth user-record
   {::friend/redirect-on-auth? false
::friend/ensure-session false})
  (http-jwt-deny request))
{:status 400
 :body "Malformed Authorization header for JWT authentication."}

But here's the problem: when the AJAX call protected by this workflow fails 
because the user is not logged in, it returns a login page.  I want it to 
return nil or something similar.  Does anyone know how to force such 
behavior when authentication fails?

-- 
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/d/optout.