Re: a library I'm working on for generating PDFs from Clojure

2012-04-22 Thread David Jagoe
On 21 April 2012 14:41, Dan Cross  wrote:

> On Sat, Apr 21, 2012 at 6:20 AM, David Jagoe  wrote:
> > Can anybody tell me whether wkhtmltopdf or flying-saucer deal with
> > pagination properly? I've been templating TeX to get properly laid out
> > tables broken over multiple pages. But of course I'd much rather just
> > generate the PDFs from the HTML that I am already maintaining.
>
> Somewhat tangential, but why not generate HTML from TeX?
>

Are there existing tools for doing that? My current approach is to have a
single markup language (looks like hiccup) that is a superset of
(html-hiccup + pdf-hiccup) that can translate to html-hiccup and pdf-hiccup
for final rendering. When doing the translation any irrelevant tags (e.g.
page breaks for html) are suitably ignored. I suppose if one was to choose
html -> tex or tex -> html then the latter may be better in my situation
because the tex has richer layout semantics.


Cheers,
David


>
> > On 20 April 2012 19:40, Tim Robinson  wrote:
> >>
> >> Also, wkhtmltopdf  has worked well for me.
> >>
> >> http://code.google.com/p/wkhtmltopdf/
> >>
> >> On Apr 20, 4:06 am, Patrick Wright  wrote:
> >> > Dmitri,
> >> >
> >> > you might look at delegating some of the effort to Flying Saucer,
> which
> >> > can
> >> > generate PDFs when given clean HTML and
> >> > CSS.http://code.google.com/p/flying-saucer/
> >> >
> >> > There is a blog somewhere (which is currently unreachable) of someone
> >> > using
> >> > FS from Clojure.
> >> >
> >> > HTH,
> >> > Patrick
> >>
> >> --
> >> 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
> >
> >
> >
> >
> > --
> > David Jagoe
> >
> > davidja...@gmail.com
> > +447535268218
> >
> >
> > --
> > 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
>



-- 
David Jagoe

davidja...@gmail.com
+447535268218

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

[ANN] slacker (RPC framework) 0.8.0 released

2012-04-22 Thread Sun Ning

Hi all,

Glad to announce the new release of slacker, an RPC framework for clojure:
https://github.com/sunng87/slacker

Major changes in this release:
* clojure 1.3 compatible
* performance boost: 8x faster than previous release
* ring app wrapper: slacker can be wrapped as a ring app

If you have any question about slacker, feel free to drop me an email.

--
Sun Ning
Software developer
Nanjing, China (N32°3'42'' E118°46'40'')
http://about.me/sunng/bio

--
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: a library I'm working on for generating PDFs from Clojure

2012-04-22 Thread Cedric Greevey
On Sun, Apr 22, 2012 at 3:33 AM, David Jagoe  wrote:
>
> On 21 April 2012 14:41, Dan Cross  wrote:
>>
>> On Sat, Apr 21, 2012 at 6:20 AM, David Jagoe  wrote:
>> > Can anybody tell me whether wkhtmltopdf or flying-saucer deal with
>> > pagination properly? I've been templating TeX to get properly laid out
>> > tables broken over multiple pages. But of course I'd much rather just
>> > generate the PDFs from the HTML that I am already maintaining.
>>
>> Somewhat tangential, but why not generate HTML from TeX?
>
> Are there existing tools for doing that? My current approach is to have a
> single markup language (looks like hiccup) that is a superset of
> (html-hiccup + pdf-hiccup) that can translate to html-hiccup and pdf-hiccup
> for final rendering. When doing the translation any irrelevant tags (e.g.
> page breaks for html) are suitably ignored.

Are page breaks really irrelevant for html? In a lot of cases it would
be nice to not have one enormous toilet-paper roll of hundreds of KB
of HTML but smaller, more digestible chunks, at least for readers'
sakes if not for servers' and bandwidth's.

On the other hand, if the document has section boundaries and the
sections aren't too large, the section boundaries might be the better
choices to use as HTML page boundaries.

-- 
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: Typed Clojure 0.1-alpha2

2012-04-22 Thread Softaddicts
Oups :) Should have read twice :)


> He did say, compile-time error. These errors are at run-time - that
> is, the following is just as obviously bad, but generates no warning
> until bar is called:
> 
> (defn foo [x] 1)
> 
> (defn bar [y] (foo y 1)) ;; compiles fine
> 
> (bar 5) ;; throws runtime exception
> 
> On Apr 21, 5:14 pm, Softaddicts  wrote:
> > 
> >
> > user=> (defn a [x y] x)
> > #'user/a
> > user=> (a 1)
> > java.lang.IllegalArgumentException: Wrong number of args passed to: user$a 
> > (NO_SOURCE_FILE:0)
> > user=> (a 1 2)
> > 1
> > user=> (a 1 2 3)
> > java.lang.IllegalArgumentException: Wrong number of args passed to: user$a 
> > (NO_SOURCE_FILE:0)
> > user=>
> >
> > user=> (defn b [x & ys] x)
> > #'user/b
> > user=> (b 1)
> > 1
> > user=> (b 1 2)
> > 1
> > user=> (b)
> > java.lang.IllegalArgumentException: Wrong number of args passed to: user$b 
> > (NO_SOURCE_FILE:0)
> > user=>
> >
> > Where's the missing arity validation you are referring to ?
> >
> > Luc
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > > Looks interesting.
> >
> > > Personally I always thought clojure's handling of function arity is a
> > > bit strange. I don't understand why calling a function like this
> >
> > > (defn testfn [one two] ...)
> >
> > > (test-fn 1)
> >
> > > is not at least a compiler warning, possibly with a switch for the
> > > compiler for strict checking. I understand that it is not always
> > > possible to perform this check, but why not do it when possible? It
> > > would make clojure alot safer to use without a test suite covering
> > > every code path.
> >
> > > On Apr 20, 8:50 pm, Ambrose Bonnaire-Sergeant
> > >  wrote:
> > > > Hi,
> >
> > > > I know there are a few people interested in trying Typed Clojure,
> > > > so I've cut an early alpha release to give a taste.
> >
> > > > These are *very* early days, but looking through the readme will
> > > > give you some hints as to what works in this release. Don't
> > > > expect too much.
> >
> > > >https://github.com/frenchy64/typed-clojure
> >
> > > > Please give it a whirl, feedback welcome!
> >
> > > > Thanks,
> > > > Ambrose
> >
> > > --
> > > 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
> >
> > --
> > Softaddicts sent by ibisMail!
> 
> -- 
> 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
> 
--
Softaddicts sent by ibisMail!

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


When I use Agents for logging I have a different behavior in the REPL as in the program

2012-04-22 Thread Goldritter
I wanted to log some information during the execution of the genetic 
algorithm I posted earlier 
here. 
So I chnaged the code and changed the function 'track-evolution' so, that 
it now accept a maximal runtime and returns a map which contains the logged 
information.
The information where stored first as states in the agents which take part 
in this algorithm as a Map, which has as key the time, when the function is 
started and as value the information how long it takes to finishes the 
function and if there was an exception in the agent.
When 'track-evolution' finishes, it retrieves the states of the agents and 
put these map into an other map with more infomrations and then returns the 
map.

When I write the following code into the REPL:
=> (prepare-evolution 3) (start-evolution) (def stat (track-evolution 5 
:second))

(:creator-log stat)
Then I get as result 
=> {"593848" {}, "9db6ff" {}, "d03269" 
{}}

( is the Map with the information I described above).

To make it easier I wrote a function which I want to execute

(defn retrieve-new-stats
  [number-of-creators time timetype]
  (prepare-evolution number-of-creators) 
(start-evolution) 
(track-evolution time timetype))

And when I use this function 
=>(def stat (retrieve-new-stats 3 5 :second))
I get as result for '(:creator-log stat)' this:
{"593848" {}, "9db6ff" {}, "d03269" {}}

In this case I get only empty maps. I tried also to use do in the function 
like

(defn retrieve-new-stats
  [number-of-creators time timetype]
  (do (prepare-evolution number-of-creators) 
(start-evolution) 
(track-evolution time timetype)))

But there I got only empty maps too.

So I wonder why I get filled maps, when I write these three function into 
the REPL directly and only empty maps, when I execute them in a function. 
What is the difference?

Has anybody an idea?

-- 
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: New release of Paredit mode for Vim with support for VimClojure repls and Map literals

2012-04-22 Thread dgrnbrg
I didn't know that support had been added to paredit mode! When I
googled for better Clojure support, I didn't see that one.

The differences between Kovac's Nov 2011 version and mine is only that
mine applies the mode to VimClojure REPL buffers. I haven't checked to
see whether he treats {} the same as () and [] (ensuring they're
balanced, and having them work with localleader-[OJ><]).

Is there a Kovac's version on Github? I can only find it on BitBucket.
If you send me a link to one on GitHub, I'll open a pull request with
the VimClojure REPL support.

On Apr 20, 4:44 am, Evan Mezeske  wrote:
> Could you elaborate on what the differences are between your version
> (Greenberg) of paredit-vim and the original one written by Tamas Kovacs
> that it appears to be based on?
>
> I'm a bit confused -- the latest Kovacs version that I've used is 0.9.3
> from November 2011.  The Greenberg version looks like it is based off a
> version that was forked off from Kovacs vesrion version 0.8.0 from April
> 2011.
>
> Have any of the differences between 0.8.0-0.9.3 been merged into this
> branch?
>
>
>
>
>
>
>
> On Wednesday, April 18, 2012 9:41:05 PM UTC-7, dgrnbrg wrote:
>
> > Paredit mode is a structural editor for Clojure code in Vim. It allows
> > you to edit your code while keeping parenthesis matched, and providing
> > shortcuts to manipulate (), {}, [], and "" easily. Use :help paredit
> > for details.
>
> > I just implemented support for VimClojure repls and {} syntax. Please
> > report any bugs to me. Don't forget to use Pathogen!
>
> >https://github.com/dgrnbrg/paredit-vim
>
> >https://github.com/tpope/vim-pathogen

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


any advice for translating the book "The Joy of Clojure"?

2012-04-22 Thread Zhitong He
Hi, all. I am new to Clojure and feel exciting playing with it.

Recently, I read the book "The Joy of Clojure", and got a strong
feeling toward translating the book from English to Chinese, to
introduce Clojure to more programmers in China.

Actually I am working now. However, though having some experience in
translating blog articles, I have never translate a real book, any
advice about organization tools?

Thank you.

-- 
Zhitong He
Sun Yat-sen University

-- 
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: When I use Agents for logging I have a different behavior in the REPL as in the program

2012-04-22 Thread Moritz Ulrich
Just a quick guess after a quick glimpse at the code you linked:

 (map #(send % a-day-in-the-life-agent-fn) domiciles)

map is lazy. It doesn't execute anything until you request the result.
(do ... (map ...) (foo)) discards the result of map, making it a
no-op.
This also explains why it works in the repl: It prints out the result
of the call. In an (implicit) do, it doesn't.

Use doseq in such situations.

On Sun, Apr 22, 2012 at 16:52, Goldritter
 wrote:
> I wanted to log some information during the execution of the genetic
> algorithm I posted earlier here. So I chnaged the code and changed the
> function 'track-evolution' so, that it now accept a maximal runtime and
> returns a map which contains the logged information.
> The information where stored first as states in the agents which take part
> in this algorithm as a Map, which has as key the time, when the function is
> started and as value the information how long it takes to finishes the
> function and if there was an exception in the agent.
> When 'track-evolution' finishes, it retrieves the states of the agents and
> put these map into an other map with more infomrations and then returns the
> map.
>
> When I write the following code into the REPL:
> => (prepare-evolution 3) (start-evolution) (def stat (track-evolution 5
> :second))
>
> (:creator-log stat)
> Then I get as result
> => {"593848" {}, "9db6ff" {}, "d03269"
> {}}
>
> ( is the Map with the information I described above).
>
> To make it easier I wrote a function which I want to execute
>
> (defn retrieve-new-stats
>   [number-of-creators time timetype]
>   (prepare-evolution number-of-creators)
>     (start-evolution)
>     (track-evolution time timetype))
>
> And when I use this function
> =>(def stat (retrieve-new-stats 3 5 :second))
> I get as result for '(:creator-log stat)' this:
> {"593848" {}, "9db6ff" {}, "d03269" {}}
>
> In this case I get only empty maps. I tried also to use do in the function
> like
>
> (defn retrieve-new-stats
>   [number-of-creators time timetype]
>   (do (prepare-evolution number-of-creators)
>     (start-evolution)
>     (track-evolution time timetype)))
>
> But there I got only empty maps too.
>
> So I wonder why I get filled maps, when I write these three function into
> the REPL directly and only empty maps, when I execute them in a function.
> What is the difference?
>
> Has anybody an idea?
>
> --
> 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



-- 
Moritz Ulrich

-- 
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: any advice for translating the book "The Joy of Clojure"?

2012-04-22 Thread Zhitong He
BTW, is there any way to get the book's source code (latex or other)?
so that I can do a fully translation, with the right typesetting, etc.

I will try to publish the book translated if chances, and contribute all 
the remuneration (if any) to the Clojure community.
I would like to know if this will be an act of tort, thank you.


On Monday, April 23, 2012 1:40:24 AM UTC+8, Zhitong He wrote:
>
> Hi, all. I am new to Clojure and feel exciting playing with it.
>
> Recently, I read the book "The Joy of Clojure", and got a strong
> feeling toward translating the book from English to Chinese, to
> introduce Clojure to more programmers in China.
>
> Actually I am working now. However, though having some experience in
> translating blog articles, I have never translate a real book, any
> advice about organization tools?
>
> Thank you.
>
> -- 
> Zhitong He
> Sun Yat-sen University
>
>

-- 
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: When I use Agents for logging I have a different behavior in the REPL as in the program

2012-04-22 Thread Marcus Lindner

I had made some changes on the code I posted.
Here is the actual usedcode with the logging functions included.

(ns evolution.genalg
  (:use [util.time])
  (:use [util.profile]))

;; Implementation of a genetic algorithm based on the code given
;; in the book "Clojure" by Stefan Kamphausen and Tim Oliver Kaiser.

(def population (atom{}))

(def the_target "Thursday Next")

(def gen-max-length 20)

(def allowed-symbols (str "abcdefghijklmnopqrstuvwxyzäöü "
 "ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ "))

(def population-size 1000)

(defn fitness-calculation [indiv]
  "(fitness-calculation indiv) calculates the fitness of the actual
individual"
  (+ (* 2 (Math/abs (- (count the_target) (count indiv
 (reduce + (map #(if (= %1 %2) 0 1)
indiv the_target

(defn random-symbol []
  "(random-symbol) returns a randomly selected allowed symbol."
  (nth allowed-symbols (rand-int (count allowed-symbols

(defn random-genom [size]
  "(random-genom size) returns a randomly designed genom with the
defined 'size'"
  (apply str
 (take (inc (rand-int size))
   (repeatedly random-symbol

;; Genom selection

(defn genom-selection [g1 g2]
  "(genom-selection g1 g2) selects a randomly chosen symbol from one
of the passed genoms. There is also a 10% chance that this symbol will
be mutated."
  (if (= 0 (rand-int 10))
(random-symbol)
(if (= 0 (rand-int 2)) g1 g2)))

(defn size-selection [i1 i2]
  "(size-selection i1 i2) returns the length of a genom based on the
passed individuals."
  (let [c1 (count i1)
c2 (count i2)]
(if (= 0 (rand-int 2))
  (if (= 0 (rand-int 2))
c1
c2)
  (max gen-max-length
   (+ (min c1 c2)
  (rand-int (Math/abs (- c1 c2

(defn genom-recombination [i1 i2]
  "(genom-recombination i1 i2) combines the genoms if individual i1
and individual i2."
  (apply str
 (take (size-selection i1 i2)
   (map genom-selection (cycle i1)
(cycle i2)

;; Population dynamic
(defn random-population [size indiv-length]
  "(random-population size indiv-length) crates a new population with
the defined size and where every individual has the defined length."
  (into {}
(map (fn [x] {x (fitness-calculation x)})
 (take size
   (repeatedly
 #(random-genom indiv-length))

(defn any-individual [population]
  "(any-individual population) returns a random chosen individual of
the defined population"
  (let [ks (keys population)]
(rand-nth ks)))

(defn select-individual [pop selection priority]
  "(select-individual pop selection priority) selects 'selection'
times individuals of the passed population."
  (let [cmp-fun (if (= priority :good) < >)]
(first
  (sort #(cmp-fun (pop %1) (pop %2))
(take selection
  (repeatedly
#(any-individual pop)))

;; Control structure with agents

(def ^{:doc "Agent, who runs the system"}
  start-stop-agent (agent "stop"))

(def ^{:doc "Domiciles for agents which creates new individuals are
crated. Every agent gets one domicile."}
  domiciles)

(def ^{:doc "The number of domiciles must be tuned for the Grimreaper,
to ensure a stable population."}
  number-of-domiciles 2)

(def ^{:doc "Agent whos purpose is to reduce the population and hold it 
stable."}

  grimreaper (agent {}))

(def ^{:doc "Atom who keeps track of the best individuals in a time spot."}
  list-of-the-best (atom {}))

(def ^{:doc "Atom who keeps track of the population in a time spot."}
  revisor-population (atom {}))

(def ^{:doc "Atom who keeps track of the used memory."}
  revisor-memory (atom {}))

(defn create-domiciles
  ([]
  "(create-domiciles) creates the standart number of new domiciles for the
agents."
  (doall
(for[i (range number-of-domiciles)]
  (agent {}
([number]
  "(create-domiciles number) creates a 'number' of new domiciles for the
agents.)"
  (doall
(for[i (range number)]
  (agent {})

(defn a-day-in-the-life []
  "(a-day-in-the-life) is the central function for steps in the
evolution."
  (let [o1 (select-individual @population 3 :good)
o2 (select-individual @population 3 :good)
new (genom-recombination o1 o2)
fit (fitness-calculation new)]
(swap! population conj {new fit})))

(defn a-day-in-the-life-agent-fn [status]
  "(a-day-in-the-life-agent-fn status) starts a new agent."
  (when (= @start-stop-agent "running")
(send *agent* a-day-in-the-life-agent-fn))
  (let [start (. System (nanoTime))
result (a-day-in-the-life)
end (. System (nanoTime))
error (agent-error *agent*)
agent-id (. (str *agent*) replace "clojure.lang.Agent@" "")
runtime (- end start)]

(conj status {start {:time runtime
   :error error}})))

(defn breath-of-death[]
  "(breath-of-death) removes bad individuals fr

Re: New release of Paredit mode for Vim with support for VimClojure repls and Map literals

2012-04-22 Thread Evan Mezeske
Version 0.9.3 does indeed support balanced map literals.

I believe that the bitbucket repository is the official home of slimv (from 
which paredit.vim comes):  https://bitbucket.org/kovisoft/slimv/ .

On Sunday, April 22, 2012 7:53:26 AM UTC-7, dgrnbrg wrote:
>
> I didn't know that support had been added to paredit mode! When I 
> googled for better Clojure support, I didn't see that one. 
>
> The differences between Kovac's Nov 2011 version and mine is only that 
> mine applies the mode to VimClojure REPL buffers. I haven't checked to 
> see whether he treats {} the same as () and [] (ensuring they're 
> balanced, and having them work with localleader-[OJ><]). 
>
> Is there a Kovac's version on Github? I can only find it on BitBucket. 
> If you send me a link to one on GitHub, I'll open a pull request with 
> the VimClojure REPL support. 
>
> On Apr 20, 4:44 am, Evan Mezeske  wrote: 
> > Could you elaborate on what the differences are between your version 
> > (Greenberg) of paredit-vim and the original one written by Tamas Kovacs 
> > that it appears to be based on? 
> > 
> > I'm a bit confused -- the latest Kovacs version that I've used is 0.9.3 
> > from November 2011.  The Greenberg version looks like it is based off a 
> > version that was forked off from Kovacs vesrion version 0.8.0 from April 
> > 2011. 
> > 
> > Have any of the differences between 0.8.0-0.9.3 been merged into this 
> > branch? 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > On Wednesday, April 18, 2012 9:41:05 PM UTC-7, dgrnbrg wrote: 
> > 
> > > Paredit mode is a structural editor for Clojure code in Vim. It allows 
> > > you to edit your code while keeping parenthesis matched, and providing 
> > > shortcuts to manipulate (), {}, [], and "" easily. Use :help paredit 
> > > for details. 
> > 
> > > I just implemented support for VimClojure repls and {} syntax. Please 
> > > report any bugs to me. Don't forget to use Pathogen! 
> > 
> > >https://github.com/dgrnbrg/paredit-vim 
> > 
> > >https://github.com/tpope/vim-pathogen

-- 
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: Macros to help writing closures?

2012-04-22 Thread timc
Thanks Cedric - that's very nice.
I'm beginning to understand the power of macros. I have to say they are not 
very well explained in the clojure docs.
In particular, how many distinct 'macro operators' are there, and what are 
their precise definitions?
For instance, is ~' a single operator, or is it two ' and ~; in either case 
exactly what is/are it/they doing?
Most of the explanations of this stuff do it by example, which is all very 
well but... "it works in practice but not in theory" as some wag once said 
about elementary particle physics. 

-- 
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: Macros to help writing closures?

2012-04-22 Thread Alex Baranosky
~' is two operators.

'x is the same as (quote x)

~'x has the effect of not namespacing the symbol when it expands. You can
use this technique to create symbols with known names (rather than random
autogensymed symbols) that you can use inside your macro.

-- 
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: Macros to help writing closures?

2012-04-22 Thread timc
I often write functions like this:

(defn foobar []
  (let [log (makeLogger "foobar")]
 blah blah ))

where makeLogger returns a logging function that prefixes all messages with 
the name provided.

It looks as though macros don't have a "stringize" ability (like the C 
preprocessor) so that this would work:

(defmacro foo [fname & body]
  `(defn ~fname []
 (let [~'log (~'makeLogger "~fname")]
   ~@body)))

When this is expanded, the string comes out as-is: "~fname".
Is there some way to do this?

-- 
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: Macros to help writing closures?

2012-04-22 Thread Cedric Greevey
On Sun, Apr 22, 2012 at 5:42 PM, timc  wrote:
> I often write functions like this:
>
> (defn foobar []
>   (let [log (makeLogger "foobar")]
>      blah blah ))
>
> where makeLogger returns a logging function that prefixes all messages with
> the name provided.
>
> It looks as though macros don't have a "stringize" ability (like the C
> preprocessor) so that this would work:
>
> (defmacro foo [fname & body]
>   `(defn ~fname []
>  (let [~'log (~'makeLogger "~fname")]
>    ~@body)))
>
> When this is expanded, the string comes out as-is: "~fname".
> Is there some way to do this?

Instead of "~fname" just use ~(str fname).

-- 
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: New release of Paredit mode for Vim with support for VimClojure repls and Map literals

2012-04-22 Thread John Szakmeister
On Sun, Apr 22, 2012 at 3:28 PM, Evan Mezeske  wrote:
> Version 0.9.3 does indeed support balanced map literals.
>
> I believe that the bitbucket repository is the official home of slimv (from
> which paredit.vim comes):  https://bitbucket.org/kovisoft/slimv/ .

Just an FYI, but there seems to be version 0.9.6 here:
   

-John

-- 
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: any advice for translating the book "The Joy of Clojure"?

2012-04-22 Thread George Oliver


On Apr 22, 10:40 am, Zhitong He  wrote:
> Hi, all. I am new to Clojure and feel exciting playing with it.
>
> Recently, I read the book "The Joy of Clojure", and got a strong
> feeling toward translating the book from English to Chinese, to
> introduce Clojure to more programmers in China.

I think your best bet is to contact the publisher (Manning) to
negotiate the translation rights.

-- 
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: Newbie question about rebinding local variables

2012-04-22 Thread Tim Cross


On Friday, April 20, 2012 8:21:56 AM UTC+10, Craig Ching wrote:
>
> Ok, I've read that what I want to do is a no no.  But this is the sort of 
> thing I did in Scheme about 20 years ago (and because of that I'm probably 
> misremembering ;-)).
>
> Basically I'm learning clojure and thought I'd write a tic tac toe game. 
>  But not any tic tac toe, I want to write one where I can have multiple 
> games going simultaneously.  Something like:
>
> (def g1 (new-game))
> (def g2 (new-game))
>
> (g1 :x 0)
> (g1 :print)
> (g2 :x 5)
> (g2 :print)
>
> So the schemer in me (and probably the imperative programmer as well) 
> thought I could return a clojure that encapsulates the board value, 
> something like this:
>
> (defn new-game []
>
>   (let [board (into [] (repeat 9 nil))]
>
> (fn [n i]
>
>   (cond
>
> (= n :x)(set! board (assoc board i 'x))
>
> (= n :o)(set! board (assoc board i 'o))
>
> (= n :print) (println board)
>
> Of course I get an error saying I can't bind to the non-mutable board.
>
> I'm really new to Clojure, so apologies if this is really basic for this 
> list.  Can I do what I want or can someone point me in the right direction? 
>  I've seen some other tic tac toe implementations on github, but they use 
> recur to track state and I was hoping there was a cleaner idiomatic way 
> than that.
>
> 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

Re: Newbie question about rebinding local variables

2012-04-22 Thread Tim Cross


On Saturday, April 21, 2012 12:26:30 AM UTC+10, Craig Ching wrote:
>
>
>
> On Friday, April 20, 2012 9:07:49 AM UTC-5, Walter van der Laan wrote:
>>
>> You could start with pure functions to handle the game logic, e.g.:
>>
>> (defn new-game []
>>   [[\- \- \-]
>>[\- \- \-]
>>[\- \- \-]])
>>
>> (defn print-game [game]
>>   (doseq [row game]
>> (println (apply str row
>>
>> (defn move [game mark pos]
>>   (assoc-in game pos mark))
>>
>> (print-game (new-game))
>> (print-game (move (new-game) \x [1 1]))
>> (print-game (-> (new-game) (move \x [1 1]) (move \o [0 2])))
>>
>
>
> Right, but then I'm having to keep track of the moves and reapply them on 
> every game update, right?  I guess my question is more conceptual (so that 
> I can gain an understanding of Clojure), I don't really care about tic tac 
> toe, what I really care about is how to maintain mutable state.
>
>
Yes, you will need to track the state, but keep in mind that Clojure is 
clever about copies and works to make sure they are very fast and use as 
few resources as possible. I would be careful of thinking of the changes in 
state as being mutable state rather than new state simply because of old 
habits where copying of state was an expensive operation. I think the 
functional approach is the way to go. Highly recommend reading some of 
Rich's articles on state at the clojure site. 

Tim 
 

-- 
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: Macros to help writing closures?

2012-04-22 Thread Ludwig Valda Vasquez
Not sure what you want to obtain, but consider this example
(defmacro foo [fn-name]
  `(defn ~fn-name []
 ~(str fn-name)))
(foo some-name) ; This will define a function some-name, which returns it's 
name as a string "some-name"

понедельник, 23 апреля 2012 г., 1:42:26 UTC+4 пользователь timc написал:
>
> I often write functions like this:
>
> (defn foobar []
>   (let [log (makeLogger "foobar")]
>  blah blah ))
>
> where makeLogger returns a logging function that prefixes all messages 
> with the name provided.
>
> It looks as though macros don't have a "stringize" ability (like the C 
> preprocessor) so that this would work:
>
> (defmacro foo [fname & body]
>   `(defn ~fname []
>  (let [~'log (~'makeLogger "~fname")]
>~@body)))
>
> When this is expanded, the string comes out as-is: "~fname".
> Is there some way to do this?
>

-- 
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: Macros to help writing closures?

2012-04-22 Thread Kyle R. Burton
> (defmacro foo [fname & body]
>   `(defn ~fname []
>  (let [~'log (~'makeLogger "~fname")]
>    ~@body)))


You may be able to do this as:



(defmacro foo [fname & body]
  `(defn ~fname []
 (let [~'log (~'makeLogger ~(str fname))]
   ~@body)))

Macros can call other functions - so you may be able to just stringify
the function name.

HTH,

Kyle

-- 
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: Macros to help writing closures?

2012-04-22 Thread Ken Causey
Regarding learning about macros:  I suspect that most within the
community are relying on existing knowledge of writing macros in
Common Lisp or relying on documentation for Common Lisp.  I highly
recommend reading Paul Graham's _On Lisp_.

http://paulgraham.com/onlisp.html

Ken

On Sun, Apr 22, 2012 at 3:49 PM, timc  wrote:
> Thanks Cedric - that's very nice.
> I'm beginning to understand the power of macros. I have to say they are not
> very well explained in the clojure docs.
> In particular, how many distinct 'macro operators' are there, and what are
> their precise definitions?
> For instance, is ~' a single operator, or is it two ' and ~; in either case
> exactly what is/are it/they doing?
> Most of the explanations of this stuff do it by example, which is all very
> well but... "it works in practice but not in theory" as some wag once said
> about elementary particle physics.
>
> --
> 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


Help with #'

2012-04-22 Thread David Simmons
Hi

I'm new to Clojure but very keen to learn. I'm following Web
Development with Clojure (http://www.vijaykiran.com/2012/01/11/web-
application-development-with-clojure-part-1/) and came across the
following code:

 (run-jetty #'routes {:port (or port 8080) :join? false}))

I know that #'routes is the same as (var routes) and that it is
passing the "object" rather than the actual value BUT I don't
understand why this is used. Specifically if I replace #'route with
route the code works fine. I've read somewhere this is something to do
with autoloading changes to code when developing for the web. Does
anyone have a simple explanaition for #' and why it is used here. If
you have some simple clojure code to illustrate its use I'd be really
grateful.

many thanks in advance for any help.

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


StackOverflowError caused by apply-template

2012-04-22 Thread Shogo Ohta
Hi,

I've run into such an error:

  (clojure.template/apply-template '[x] 'x '[[x]]) ;=>
StackOverflowError

It appears to be caused by replacing x with [x] infinitely
recursively. Is it a bug or spec?

-- 
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: StackOverflowError caused by apply-template

2012-04-22 Thread Stuart Sierra
I think that falls under the heading of "don't do that." :)

clojure.template (which I wrote) wasn't a great idea to begin with. It was 
slightly useful in clojure.test, but I haven't found a use for it since.

-S


On Sunday, April 22, 2012 8:02:45 AM UTC-4, Shogo Ohta wrote:
>
> Hi, 
>
> I've run into such an error: 
>
>   (clojure.template/apply-template '[x] 'x '[[x]]) ;=> 
> StackOverflowError 
>
> It appears to be caused by replacing x with [x] infinitely 
> recursively. Is it a bug or spec?

-- 
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: Help with #'

2012-04-22 Thread Stuart Campbell
Hi Dave,

If you write

  (run-jetty routes ...)

then the current value of "routes" is looked-up and passed to run-jetty.
You won't see any change if you subsequently redefine "routes", because the
original definition is what was passed to run-jetty.

On the other hand,

  (run-jetty #'routes ...)

passes a var (see http://clojure.org/vars) to run-jetty. Now whenever
run-jetty invokes your handler function, the currently-bound value of
"routes" is invoked.

Here's a simplified example:

  user> (defn foo [] "hello")
  #'user/foo
  user> (def a foo)
  #'user/a
  user> (def b #'foo)
  #'user/b
  user> (defn foo [] "goodbye")
  #'user/foo
  user> (a)
  "hello"
  user> (b)
  "goodbye"

Cheers,
Stuart

On 23 April 2012 06:01, David Simmons  wrote:

> Hi
>
> I'm new to Clojure but very keen to learn. I'm following Web
> Development with Clojure (http://www.vijaykiran.com/2012/01/11/web-
> application-development-with-clojure-part-1/) and came across the
> following code:
>
>  (run-jetty #'routes {:port (or port 8080) :join? false}))
>
> I know that #'routes is the same as (var routes) and that it is
> passing the "object" rather than the actual value BUT I don't
> understand why this is used. Specifically if I replace #'route with
> route the code works fine. I've read somewhere this is something to do
> with autoloading changes to code when developing for the web. Does
> anyone have a simple explanaition for #' and why it is used here. If
> you have some simple clojure code to illustrate its use I'd be really
> grateful.
>
> many thanks in advance for any help.
>
> 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 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: New release of Paredit mode for Vim with support for VimClojure repls and Map literals

2012-04-22 Thread dgrnbrg
I am having trouble porting my simple VimClojure support with the
version 0.9.6 of the script. The integration w/ slimv's REPL appears
to have increased. I'm not sure what the best course of action is,
since I don't really want to continue trying to merge the codebases,
and instead just fix any bugs in my implementation. There aren't any
other new features to gain, otherwise.

On Apr 22, 7:47 pm, John Szakmeister  wrote:
> On Sun, Apr 22, 2012 at 3:28 PM, Evan Mezeske  wrote:
> > Version 0.9.3 does indeed support balanced map literals.
>
> > I believe that the bitbucket repository is the official home of slimv (from
> > which paredit.vim comes): https://bitbucket.org/kovisoft/slimv/ .
>
> Just an FYI, but there seems to be version 0.9.6 here:
>    
>
> -John

-- 
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: any advice for translating the book "The Joy of Clojure"?

2012-04-22 Thread Zhitong He
Thank you, George. I will to contact a publisher to negotiate the
translation rights with Manning.

On Mon, Apr 23, 2012 at 7:50 AM, George Oliver  wrote:
>
>
> On Apr 22, 10:40 am, Zhitong He  wrote:
>> Hi, all. I am new to Clojure and feel exciting playing with it.
>>
>> Recently, I read the book "The Joy of Clojure", and got a strong
>> feeling toward translating the book from English to Chinese, to
>> introduce Clojure to more programmers in China.
>
> I think your best bet is to contact the publisher (Manning) to
> negotiate the translation rights.
>
> --
> 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



-- 
Zhitong He
Sun Yat-sen University

-- 
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: any advice for translating the book "The Joy of Clojure"?

2012-04-22 Thread Sun Ning
I don't think the book is an open source one, so you should have to find a
publisher in China first. And ask them to contact Manning for the importing
details.
 On Apr 23, 2012 1:59 AM, "Zhitong He"  wrote:

> BTW, is there any way to get the book's source code (latex or other)?
> so that I can do a fully translation, with the right typesetting, etc.
>
> I will try to publish the book translated if chances, and contribute all
> the remuneration (if any) to the Clojure community.
> I would like to know if this will be an act of tort, thank you.
>
>
> On Monday, April 23, 2012 1:40:24 AM UTC+8, Zhitong He wrote:
>>
>> Hi, all. I am new to Clojure and feel exciting playing with it.
>>
>> Recently, I read the book "The Joy of Clojure", and got a strong
>> feeling toward translating the book from English to Chinese, to
>> introduce Clojure to more programmers in China.
>>
>> Actually I am working now. However, though having some experience in
>> translating blog articles, I have never translate a real book, any
>> advice about organization tools?
>>
>> Thank you.
>>
>> --
>> Zhitong He
>> Sun Yat-sen University
>>
>>  --
> 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: New release of Paredit mode for Vim with support for VimClojure repls and Map literals

2012-04-22 Thread Dave Ray
Note that Tomas recently extracted paredit from slimv, so it has its
own home now: https://bitbucket.org/kovisoft/paredit
Also, there have been several important bug fixes applied to paredit
in the last few months. It would be great if any improvements you've
made could make it back into the official version.

Dave

On Sun, Apr 22, 2012 at 10:24 PM, dgrnbrg  wrote:
> I am having trouble porting my simple VimClojure support with the
> version 0.9.6 of the script. The integration w/ slimv's REPL appears
> to have increased. I'm not sure what the best course of action is,
> since I don't really want to continue trying to merge the codebases,
> and instead just fix any bugs in my implementation. There aren't any
> other new features to gain, otherwise.
>
> On Apr 22, 7:47 pm, John Szakmeister  wrote:
>> On Sun, Apr 22, 2012 at 3:28 PM, Evan Mezeske  wrote:
>> > Version 0.9.3 does indeed support balanced map literals.
>>
>> > I believe that the bitbucket repository is the official home of slimv (from
>> > which paredit.vim comes): https://bitbucket.org/kovisoft/slimv/ .
>>
>> Just an FYI, but there seems to be version 0.9.6 here:
>>    
>>
>> -John
>
> --
> 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