Out of interest, why is #'init-stm a separate step to #'connect

I tried looking at the docstrings for each fn but they were both nil :-(

Sam

---
http://sam.aaron.name

On 1 Dec 2011, at 17:21, David Edgar Liebke wrote:

> Did you initialize the STM?
> 
> (init-stm client)
> 
> You only need to do it the first time, to set up the necessary zookeeper 
> nodes, it's described in the main tutorial but not the snippet on the top of 
> the avout site.
> 
> David
> 
> On Dec 1, 2011, at 12:15 PM, Sam Aaron wrote:
> 
>> Hi David,
>> 
>> thanks for looking into this so promptly. Sadly 0.5.1 just throws a 
>> different exception:
>> 
>> user=> (def client (connect "127.0.0.1"))                                    
>>                                                                              
>>                                 
>> #'user/client                                                                
>>                                                                              
>>                                 
>> user=> (def r0 (zk-ref client "/r0" 0))                                      
>>                                                                              
>>                                 
>> java.lang.RuntimeException: 
>> org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = 
>> NoNode for /stm/history/t-                                                   
>>           
>> run-in-transaction exception:  #<RuntimeException 
>> java.lang.RuntimeException: 
>> org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = 
>> NoNode for /stm/history/t-> nil      
>>       at clojure.lang.Util.runtimeException(Util.java:165)                   
>>                                                                              
>>                                
>>       at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:35)      
>>                                                                              
>>                               
>>       at avout.transaction$run_in_transaction.invoke(transaction.clj:356)    
>>                                                                              
>>                               
>>       at avout.core$zk_ref.doInvoke(core.clj:51)                             
>>                                                                              
>>                                
>>       at clojure.lang.RestFn.invoke(RestFn.java:445)                         
>>                                                                              
>>                                
>>       at clojure.lang.AFn.applyToHelper(AFn.java:167)                        
>>                                                                              
>>                               
>>       at clojure.lang.RestFn.applyTo(RestFn.java:132)                        
>>                                                                              
>>                               
>>       at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3337)           
>>                                                                              
>>                                
>>       at clojure.lang.Compiler$DefExpr.eval(Compiler.java:375)               
>>                                                                              
>>                                
>>       at clojure.lang.Compiler.eval(Compiler.java:6470)                      
>>                                                                              
>>                               
>>       at clojure.lang.Compiler.eval(Compiler.java:6431)                      
>>                                                                              
>>                               
>>       at clojure.core$eval.invoke(core.clj:2795)                             
>>                                                                              
>>                                
>>       at clojure.main$repl$read_eval_print__5967.invoke(main.clj:244)        
>>                                                                              
>>                               
>>       at clojure.main$repl$fn__5972.invoke(main.clj:265)                     
>>                                                                              
>>                                
>>       at clojure.main$repl.doInvoke(main.clj:265)                            
>>                                                                              
>>                               
>>       at clojure.lang.RestFn.invoke(RestFn.java:512)                         
>>                                                                              
>>                                
>>       at user$eval27$acc__3869__auto____30$fn__32.invoke(NO_SOURCE_FILE:1)   
>>                                                                              
>>                                
>>       at clojure.lang.AFn.run(AFn.java:24)                                   
>>                                                                              
>>                                
>>       at java.lang.Thread.run(Thread.java#'user/r0                           
>>                                                                              
>>                                
>> user=> :680)                                                                 
>>                                                                              
>>                                  
>> Caused by: org.apache.zookeeper.KeeperException$NoNodeException: 
>> KeeperErrorCode = NoNode for /stm/history/t-                                 
>>                                             
>>       at 
>> org.apache.zookeeper.KeeperException.create(KeeperException.java:102)        
>>                                                                              
>>                       
>>       at 
>> org.apache.zookeeper.KeeperException.create(KeeperException.java:42)         
>>                                                                              
>>                      
>>       at org.apache.zookeeper.ZooKeeper.create(ZooKeeper.java:637)           
>>                                                                              
>>                                
>>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)         
>>                                                                              
>>                                
>>       at 
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>                                                                              
>>                       
>>       at 
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>                                                                              
>>               
>>       at java.lang.reflect.Method.invoke(Method.java:597)                    
>>                                                                              
>>                               
>>       at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:92)      
>>                                                                              
>>                               
>>       at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:30)      
>>                                                                              
>>                               
>>       at zookeeper$create.doInvoke(zookeeper.clj:158)                        
>>                                                                              
>>                               
>>       at clojure.lang.RestFn.invoke(RestFn.java:521)                         
>>                                                                              
>>                                
>>       at avout.transaction$next_point.invoke(transaction.clj:62)             
>>                                                                              
>>                                
>>       at avout.transaction$reincarnate_txn.invoke(transaction.clj:233)       
>>                                                                              
>>                                
>>       at avout.transaction$stop$fn__1104.invoke(transaction.clj:243)         
>>                                                                              
>>                                
>>       at avout.transaction$stop.invoke(transaction.clj:238)                  
>>                                                                              
>>                               
>>       at 
>> avout.transaction.LockingTransaction$fn__1117.invoke(transaction.clj:323)    
>>                                                                              
>>                       
>>       at 
>> avout.transaction.LockingTransaction.runInTransaction(transaction.clj:303)   
>>                                                                              
>>                      
>>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)         
>>                                                                              
>>                                
>>       at 
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>                                                                              
>>                       
>>       at 
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>                                                                              
>>               
>>       at java.lang.reflect.Method.invoke(Method.java:597)                    
>>                                                                              
>>                               
>>       at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:92)      
>>                                                                              
>>                               
>>       at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:30)      
>>                                                                              
>>                               
>>       ... 17 more    
>> 
>> 
>> also, trying to avoid setting the value on creation of the ref doesn't work 
>> either:                                                                      
>>                                                                              
>>                 
>> 
>> 
>> user=> (def r1 (zk-ref client "/r1"))                                        
>>                                                                              
>>                               
>> #'user/r1                                                                    
>>                                                                              
>>                               
>> user=> (dosync!! client (ref-set!! r1 0))                                    
>>                                                                              
>>                               
>> java.lang.RuntimeException: 
>> org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = 
>> NoNode for /stm/history/t-                                                   
>>         
>> run-in-transaction exception:  #<RuntimeException 
>> java.lang.RuntimeException: 
>> org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = 
>> NoNode for /stm/history/t-> nil    
>> nil                                                                          
>>                                                                              
>>                               
>>       at clojure.lang.Util.runtimeException(Util.java:165)                   
>>                                                                              
>>                              
>>       at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:35)      
>>                                                                              
>>                             
>>       at avout.transaction$run_in_transaction.invoke(transaction.clj:356)    
>>                                                                              
>>                             
>>       at user$eval1426.invoke(NO_SOURCE_FILE:49)                             
>>                                                                              
>>                              
>>       at clojure.lang.Compiler.eval(Compiler.java:6465)                      
>>                                                                              
>>                             
>>       at clojure.lang.Compiler.eval(Compiler.java:6431)                      
>>                                                                              
>>                             
>>       at clojure.core$eval.invoke(core.clj:2795)                             
>>                                                                              
>>                              
>>       at clojure.main$repl$read_eval_print__5967.invoke(main.clj:244)        
>>                                                                              
>>                             
>>       at clojure.main$repl$fn__5972.invoke(main.clj:265)                     
>>                                                                              
>>                              
>>       at clojure.main$repl.doInvoke(main.clj:265)                            
>>                                                                              
>>                             
>>       at clojure.lang.RestFn.invoke(RestFn.java:512)                         
>>                                                                              
>>                              
>>       at user$eval27$acc__3869__auto____30$fn__32.invoke(NO_SOURCE_FILE:1)   
>>                                                                              
>>                              
>>       at clojure.lang.AFn.run(AFn.java:24)                                   
>>                                                                              
>>                              
>>       at java.lang.Thread.run(Thread.java:680)                               
>>                                                                              
>>                              
>> Caused by: org.apache.zookeeper.KeeperException$NoNodeException: 
>> KeeperErrorCode = NoNode for /stm/history/t-                                 
>>                                           
>>       at 
>> org.apache.zookeeper.KeeperException.create(KeeperException.java:102)        
>>                                                                              
>>                     
>>       at 
>> org.apache.zookeeper.KeeperException.create(KeeperException.java:42)         
>>                                                                              
>>                    
>>       atuser=>  org.apache.zookeeper.ZooKeeper.create(ZooKeeper.java:637)    
>>                                                                              
>>                             
>>       at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)         
>>                                                                              
>>                              
>>       at 
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>                                                                              
>>             
>>       at java.lang.reflect.Method.invoke(Method.java:597)                    
>>                                                                              
>>                             
>>       at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:92)      
>>                                                                              
>>                             
>>       at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:30)      
>>                                                                              
>>                             
>>       at zookeeper$create.doInvoke(zookeeper.clj:158)                        
>>                                                                              
>>                             
>>       at clojure.lang.RestFn.invoke(RestFn.java:521)                         
>>                                                                              
>>                              
>>       at avout.transaction$next_point.invoke(transaction.clj:62)             
>>                                                                              
>>                              
>>       at avout.transaction$reincarnate_txn.invoke(transaction.clj:233)       
>>                                                                              
>>                              
>>       at avout.transaction$stop$fn__1104.invoke(transaction.clj:243)         
>>                                                                              
>>                              
>>       at avout.transaction$stop.invoke(transaction.clj:238)                  
>>                                                                              
>>                             
>>       at 
>> avout.transaction.LockingTransaction$fn__1117.invoke(transaction.clj:323)    
>>                                                                              
>>                     
>>       at 
>> avout.transaction.LockingTransaction.runInTransaction(transaction.clj:303)   
>>                                                                              
>>                    
>>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)         
>>                                                                              
>>                              
>>       at 
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>                                                                              
>>                     
>>       at 
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>                                                                              
>>             
>>       at java.lang.reflect.Method.invoke(Method.java:597)                    
>>                                                                              
>>                             
>>       at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:92)      
>>                                                                              
>>                             
>>       at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:30)      
>>                                                                              
>>                             
>>       ... 12 more          
>> 
>> Sam
>> 
>> ---
>> http://sam.aaron.name
>> 
>> On 1 Dec 2011, at 17:04, David Edgar Liebke wrote:
>> 
>>> Thanks Sam and Edmund, 
>>> 
>>> The stack traces were helpful, I think I understand what the immediate 
>>> problem is. It appears that the transaction ID in these cases is not 
>>> getting set, and then Avout is trying to write data to the ZooKeeper node 
>>> /stm/history/ instead of /stm/history/txid.
>>> 
>>> Since I can't replicate the problem with my setup, I can't be certain of 
>>> the cause, but I've added a patch to make the STM more robust in the face 
>>> of a nil transaction ID, and have updated Avout to version 0.5.1.
>>> 
>>> Can you guys give the version 0.5.1 a try and see if makes a difference?
>>> 
>>> If you still see the problem, another diagnostic would be to create a ref 
>>> without an initial value, and see if that succeeds, then try setting the 
>>> value.
>>> 
>>> (def r1 (zk-ref client "/r1"))
>>> (dosync!! client (ref-set!! r1 0))
>>> 
>>> Thanks again,
>>> David
>>> 
>>> 
>>> 
>>> On Dec 1, 2011, at 11:20 AM, Sam Aaron wrote:
>>> 
>>>> Hi David,
>>>> 
>>>> I nuked all my zookeeper deps in my lib and ~/.m2 dirs, but similar to 
>>>> Edmund experience it doesn't fix anything. My stacktrace is also identical:
>>>> 
>>>> ∴ /Users/sam/tmp/avv                                                       
>>>>                                                             
>>>> λ lein deps                                                                
>>>>                                                             
>>>> Downloading: zookeeper-clj/zookeeper-clj/0.9.0/zookeeper-clj-0.9.0.pom 
>>>> from repository clojars at http://clojars.org/repo/             
>>>> Transferring 2K from clojars                                               
>>>>                                                             
>>>> Downloading: zookeeper-clj/zookeeper-clj/0.9.0/zookeeper-clj-0.9.0.jar 
>>>> from repository clojars at http://clojars.org/repo/             
>>>> Transferring 9K from clojars                                               
>>>>                                                             
>>>> Copying 8 files to /Users/sam/tmp/avv/lib                                  
>>>>                                                             
>>>> Copying 5 files to /Users/sam/tmp/avv/lib/dev                              
>>>>                                                             
>>>> 
>>>> ∴ /Users/sam/tmp/avv                                                       
>>>>                                                             
>>>> λ lein repl                                                                
>>>>                                                             
>>>> Listening for transport dt_socket at address: 52602                        
>>>>                                                             
>>>> REPL started; server listening on localhost port 33063                     
>>>>                                                             
>>>> user=> (use 'avout.core)                                                   
>>>>                                                             
>>>> log4j:WARN No appenders could be found for logger 
>>>> (org.apache.zookeeper.ZooKeeper).                                          
>>>>           
>>>> log4j:WARN Please initialize the log4j system properly.                    
>>>>                                                             
>>>> log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for 
>>>> more info.                                                    
>>>> nil                                                                        
>>>>                                                             
>>>> user=> (def client (connect "127.0.0.1"))                                  
>>>>                                                             
>>>> #'user/client                                                              
>>>>                                                             
>>>> user=> (def r0 (zk-ref client "/r0" 0))                                    
>>>>                                                             
>>>> java.lang.IllegalArgumentException: Path must not end with / character     
>>>>                                                             
>>>> run-in-transaction exception:  #<IllegalArgumentException 
>>>> java.lang.IllegalArgumentException: Path must not end with / character> 
>>>> nil  
>>>>     at 
>>>> org.apache.zookeeper.common.PathUtils.validatePath(PathUtils.java:58)      
>>>>                                                  
>>>>     at org.apache.zookeeper.ZooKeeper.setData(ZooKeeper.java:1025)         
>>>>                                                         
>>>>     at zookeeper$set_data.doInvoke(zookeeper.clj:394)                      
>>>>                                                         
>>>>     at clojure.lang.RestFn.invoke(RestFn.java:470)                         
>>>>                                                         
>>>>     at avout.transaction$update_txn_state.invoke(transaction.clj:82)       
>>>>                                                         
>>>>     at avout.transaction$stop$fn__1104.invoke(transaction.clj:239)         
>>>>                                                         
>>>>     at avout.transaction$stop.invoke(transaction.clj:238)                  
>>>>                                                         
>>>>     at 
>>>> avout.transaction.LockingTransaction$fn__1117.invoke(transaction.clj:321)  
>>>>                                                  
>>>>     at 
>>>> avout.transaction.LockingTransaction.runInTransaction(transaction.clj:301) 
>>>>                                                  
>>>>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)         
>>>>                                                         
>>>>     at 
>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>>>                                                
>>>>     at 
>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>>>                                        
>>>>     at java.lang.reflect.Method.invoke(Method.java:597)                    
>>>>                                                         
>>>>     at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:92)      
>>>>                                                         
>>>>     at 
>>>> clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:30#'user/r0     
>>>>                                                  
>>>> user=> )                                                                   
>>>>                                                             
>>>>     at avout.transaction$run_in_transaction.invoke(transaction.clj:354)    
>>>>                                                         
>>>>     at avout.core$zk_ref.doInvoke(core.clj:51)                             
>>>>                                                         
>>>>     at clojure.lang.RestFn.invoke(RestFn.java:445)                         
>>>>                                                         
>>>>     at clojure.lang.AFn.applyToHelper(AFn.java:167)                        
>>>>                                                         
>>>>     at clojure.lang.RestFn.applyTo(RestFn.java:132)                        
>>>>                                                         
>>>>     at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3337)           
>>>>                                                         
>>>>     at clojure.lang.Compiler$DefExpr.eval(Compiler.java:375)               
>>>>                                                         
>>>>     at clojure.lang.Compiler.eval(Compiler.java:6470)                      
>>>>                                                         
>>>>     at clojure.lang.Compiler.eval(Compiler.java:6431)                      
>>>>                                                         
>>>>     at clojure.core$eval.invoke(core.clj:2795)                             
>>>>                                                         
>>>>     at clojure.main$repl$read_eval_print__5967.invoke(main.clj:244)        
>>>>                                                         
>>>>     at clojure.main$repl$fn__5972.invoke(main.clj:265)                     
>>>>                                                         
>>>>     at clojure.main$repl.doInvoke(main.clj:265)                            
>>>>                                                         
>>>>     at clojure.lang.RestFn.invoke(RestFn.java:512)                         
>>>>                                                         
>>>>     at user$eval27$acc__3869__auto____30$fn__32.invoke(NO_SOURCE_FILE:1)   
>>>>                                                         
>>>>     at clojure.lang.AFn.run(AFn.java:24)                                   
>>>>                                                         
>>>>     at java.lang.Thread.run(Thread.java:680)                               
>>>>                                                         
>>>> 
>>>> Sam
>>>> 
>>>> ---
>>>> http://sam.aaron.name
>>>> 
>>>> On 1 Dec 2011, at 15:39, David Edgar Liebke wrote:
>>>> 
>>>>> Hi Sam,
>>>>> 
>>>>>> run-in-transaction exception:  #<IllegalArgumentException 
>>>>>> java.lang.IllegalArgumentException: Path must not end with / character> 
>>>>>> nil 
>>>>> 
>>>>> Very interesting, I wouldn't expect that particular exception unless you 
>>>>> named the zk-ref "/r0/" instead of "/r0", which you apparently didn't. 
>>>>> 
>>>>> And even when I do call it "/r0/" I get the "Path must not end with / 
>>>>> character" exception at a different point in the code, which is probably 
>>>>> the result of a patch I added to zookeeper-clj yesterday. 
>>>>> 
>>>>> Can you try deleting the zookeeper-clj jar file from your dependencies, 
>>>>> blowing about your ~/.m2/repository/zookeeper-clj directory, reloading 
>>>>> your deps, and trying again?
>>>>> 
>>>>> David
>>>>> 
>>>>> 
>>>>> On Dec 1, 2011, at 10:04 AM, Sam Aaron wrote:
>>>>> 
>>>>>> Hi David,
>>>>>> 
>>>>>> I'm super excited by Avout. It seems *better* than magic in that it not 
>>>>>> only appears to make complicated things possible, but also in a 
>>>>>> conceptually transparent way. Crazy cool.
>>>>>> 
>>>>>> I'm about to look into this in detail, but I thought I'd just post an 
>>>>>> issue I'm having with the basic example just on the off-chance that I'm 
>>>>>> doing something obviously wrong.
>>>>>> 
>>>>>> I have zookeeper 3.3.3 installed running on port 2181 with a valid 
>>>>>> dataDir path with the appropriate permissions. I'm got avout 0.5.0 and 
>>>>>> in a REPL session I do the following:
>>>>>> 
>>>>>> ; SLIME 2009-10-15                                                       
>>>>>>                                                             
>>>>>> user> (use 'avout.core)                                                  
>>>>>>                                                              
>>>>>> nil                                                                      
>>>>>>                                                              
>>>>>> user> (def client (connect "127.0.0.1"))                                 
>>>>>>                                                             
>>>>>> #'user/client                                                            
>>>>>>                                                              
>>>>>> user> (def r0 (zk-ref client "/r0" 0))                                   
>>>>>>                                                             
>>>>>> run-in-transaction exception:  #<IllegalArgumentException 
>>>>>> java.lang.IllegalArgumentException: Path must not end with / character> 
>>>>>> nil 
>>>>>> #'user/r0                                                                
>>>>>>                                                              
>>>>>> user> r0                                                                 
>>>>>>                                                             
>>>>>> #<DistributedReference@761b2f32: nil>                                    
>>>>>>                                                              
>>>>>> user> @r0                                                                
>>>>>>                                                              
>>>>>> nil                                                                      
>>>>>>                                             
>>>>>> 
>>>>>> Sam
>>>>>> 
>>>>>> ---
>>>>>> http://sam.aaron.name
>>>>>> 
>>>>>> 
>>>>>> On 29 Nov 2011, at 17:38, liebke wrote:
>>>>>> 
>>>>>>> Today we are releasing Avout, which brings Clojure's in-memory model
>>>>>>> of state to distributed application development by providing a
>>>>>>> distributed implementation of Clojure's Multiversion Concurrency
>>>>>>> Control (MVCC) STM along with distributable, durable, and extendable
>>>>>>> versions of Clojure's Atom and Ref concurrency primitives.
>>>>>>> 
>>>>>>> Here's the post announcing the project: 
>>>>>>> http://clojure.com/blog/2011/11/29/avout.html
>>>>>>> 
>>>>>>> And here's the project's website: http://avout.io
>>>>>>> 
>>>>>>> 
>>>>>>> David
>>>>>>> 
>>>>>>> -- 
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "Clojure" group.
>>>>>>> To post to this group, send email to clojure@googlegroups.com
>>>>>>> Note that posts from new members are moderated - please be patient with 
>>>>>>> your first post.
>>>>>>> To unsubscribe from this group, send email to
>>>>>>> clojure+unsubscr...@googlegroups.com
>>>>>>> For more options, visit this group at
>>>>>>> http://groups.google.com/group/clojure?hl=en
>>>>>> 
>>>>>> -- 
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "Clojure" group.
>>>>>> To post to this group, send email to clojure@googlegroups.com
>>>>>> Note that posts from new members are moderated - please be patient with 
>>>>>> your first post.
>>>>>> To unsubscribe from this group, send email to
>>>>>> clojure+unsubscr...@googlegroups.com
>>>>>> For more options, visit this group at
>>>>>> http://groups.google.com/group/clojure?hl=en
>>>>> 
>>>>> -- 
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Clojure" group.
>>>>> To post to this group, send email to clojure@googlegroups.com
>>>>> Note that posts from new members are moderated - please be patient with 
>>>>> your first post.
>>>>> To unsubscribe from this group, send email to
>>>>> clojure+unsubscr...@googlegroups.com
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/group/clojure?hl=en
>>>> 
>>>> -- 
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Clojure" group.
>>>> To post to this group, send email to clojure@googlegroups.com
>>>> Note that posts from new members are moderated - please be patient with 
>>>> your first post.
>>>> To unsubscribe from this group, send email to
>>>> clojure+unsubscr...@googlegroups.com
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/clojure?hl=en
>>> 
>>> -- 
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To post to this group, send email to clojure@googlegroups.com
>>> Note that posts from new members are moderated - please be patient with 
>>> your first post.
>>> To unsubscribe from this group, send email to
>>> clojure+unsubscr...@googlegroups.com
>>> For more options, visit this group at
>>> http://groups.google.com/group/clojure?hl=en
>> 
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clojure@googlegroups.com
>> Note that posts from new members are moderated - please be patient with your 
>> first post.
>> To unsubscribe from this group, send email to
>> clojure+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
> 
> -- 
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To 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

Reply via email to