Re: about macro exception : Unable to resolve classname: LinkedList, macro question and possible better approach

2015-03-06 Thread James Reeves
You're not using macros correctly.

A macro does not evaluate its arguments, but it does evaluate its return
value. The only thing a macro should do is to transform one piece of code
into another.

So let's look at what you want your syntax to look like:

(send! (function-blah hi!))

Now consider how it would have to look if you were using a function instead:

(send!* 'function-blah hi!)

Notice how we've quoted the function name and removed the surrounding list.

All your macro needs to do is to convert the first form into the second. So
you'd write something like:

(defmacro send! [[func  args]]
  `(send!* (quote ~func) ~@args))

Generally speaking, you should prefer functions over macros wherever
possible. If you must have a macro, make it a slim wrapper around a
function.

I don't know what the rest of your function is supposed to be doing. The
use of core.async and resolve is very odd. Could you elaborate on its
purpose?

- James


On 7 March 2015 at 03:40, coco clasesparticulares...@gmail.com wrote:

 sorry for my crappy code, but I was changing some conditions and testing my 
 parameters before and I end with this code

 (if (not (false? res))
  res

   (recur))

 I must write just

 (if  res
  res

   (recur))


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


[OT?] Best DB/architecture for n-gram corpus?

2015-03-06 Thread Sam Raker
I'm trying to create an n-gram[1] corpus out of song lyrics. I'm breaking 
individual songs into lines, which are then split into words, so you end up 
with something like

{0 {0 go 1 tell 2 aunt 3 rhodie} 1 {0 the 1 old 2 grey 3 
goose 4 is 5 dead}...}

(Yes, maps with integer keys is kind of dumb; I thought about using 
vectors, but this is all going into MongoDB temporarily, and I'd rather 
just deal with maps instead of messing with Mongo's somewhat lacking 
array-handling stuff.)

The idea, ultimately, is to build a front-end that would allow users to, 
e.g., search for all songs that contain the (sub)string aunt rhodie, or 
see how many times The Rolling Stones use the word woman vs how many 
times the Beatles do, etc. The inspiration comes largely from projects like 
COCA[2]. 

I'm wondering if any of you have opinions about which database to use 
(Mongo is most likely just a stopgap), and how best to architect it. I'm 
most familiar with MySQL and Mongo, but I'd rather not be limited by just 
those two if there's a better option out there. I'm thinking that I'll 
probably end up storing tokens over types--e.g., each word would be stored 
individually, as opposed to having an entry for, e.g., the that stores 
every instance of the word the. I was also thinking that I'll probably 
have to end up storing each token's previous and next, either as full 
references or just as strings. This seems potentially inefficient, however. 

(I could've just gone to StackOverflow with this, but figured I'm more 
likely to get a real answer here, because you all seem so smart and nice?)


Thanks!



[1] https://en.wikipedia.org/wiki/N-gram
[2] http://corpus.byu.edu/coca/

-- 
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: Disk based caching for Clojure app

2015-03-06 Thread Luc Prefontaine
We have been running builds on the same SSDs, doing intensive logging, ... for 
three years now.

None deteriorated.

Builds are mainly scrap  write thousands of small files plus a few big ones 
(the targets).

Write speed makes a huge difference for this kind of task.

Aws allows to get VMs with SSDs of decent sizes and not to store only the OS.

I think they would restrict usage if 
rewrites were a huge concern...

Luc P.

 On Friday, March 6, 2015 at 3:16:09 PM UTC-5, Michael Blume wrote:
 
  Possibly stupid question: can you just pretend you have more memory than 
  you do and let the operating system do the heavy lifting?
 
 As in, put the swap partition on the SSD and jack up the virtual memory in 
 the OS config?
 
 Isn't it a bad idea to put swap on an SSD, because of the limited number of 
 times an SSD byte can be rewritten before it sticks permanently? Thus 
 making SSD more suited to storing stuff where speed counts, but which 
 doesn't change very much, like the operating system kernel and modules and 
 core libraries, plus your most often used applications? Then you get faster 
 boot and app-startup times without constant writes to the SSD (just when 
 something is upgraded).
 
 Of course, SSD being less well suited to frequently-written data would also 
 militate against using it for a cache managed by the application, rather 
 than by the OS ...
  
 
 -- 
 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.
 
--
Luc Prefontainelprefonta...@softaddicts.ca 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
--- 
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.


Better/more idiomatic way to read EDNs than using java.io.PushbackReader

2015-03-06 Thread Sam Raker
I'm experimenting a little with EDN files. I've currently got this function:

(defn from-edn [edn-file] (with-open [r (clojure.java.io/reader edn-file)]
(edn/read (java.io.PushbackReader. r

Having to explicitly reach into the Java API to read a clojure-only format 
seems wrong. What should I be doing instead?

-- 
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: Disk based caching for Clojure app

2015-03-06 Thread Timothy Baldridge
The whole SSD fails after X number of writes thing is pretty much a myth
now that most drives implement pretty aggressive write leveling. These
modern drives introduce a mapping layer between the physical disk locations
and the location written to by the OS. This means that writing to KB 4242
on the disk actually is written to a different part of the disk each time
it is written.

Some recent tests report about 1PB of writes before failure (
http://techreport.com/review/27436/the-ssd-endurance-experiment-two-freaking-petabytes).
Let's say your caching system generated and trashed 20GB of data a day,
that would leave you with about 130 years before the drive failed. So yes,
it's limited but not very limited.

On Fri, Mar 6, 2015 at 3:53 PM, Luc Prefontaine lprefonta...@softaddicts.ca
 wrote:

 We have been running builds on the same SSDs, doing intensive logging, ...
 for three years now.

 None deteriorated.

 Builds are mainly scrap  write thousands of small files plus a few big
 ones (the targets).

 Write speed makes a huge difference for this kind of task.

 Aws allows to get VMs with SSDs of decent sizes and not to store only the
 OS.

 I think they would restrict usage if
 rewrites were a huge concern...

 Luc P.

  On Friday, March 6, 2015 at 3:16:09 PM UTC-5, Michael Blume wrote:
  
   Possibly stupid question: can you just pretend you have more memory
 than
   you do and let the operating system do the heavy lifting?
  
  As in, put the swap partition on the SSD and jack up the virtual memory
 in
  the OS config?
 
  Isn't it a bad idea to put swap on an SSD, because of the limited number
 of
  times an SSD byte can be rewritten before it sticks permanently? Thus
  making SSD more suited to storing stuff where speed counts, but which
  doesn't change very much, like the operating system kernel and modules
 and
  core libraries, plus your most often used applications? Then you get
 faster
  boot and app-startup times without constant writes to the SSD (just when
  something is upgraded).
 
  Of course, SSD being less well suited to frequently-written data would
 also
  militate against using it for a cache managed by the application, rather
  than by the OS ...
 
 
  --
  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.
 
 --
 Luc Prefontainelprefonta...@softaddicts.ca 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
 ---
 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.




-- 
“One of the main causes of the fall of the Roman Empire was that–lacking
zero–they had no way to indicate successful termination of their C
programs.”
(Robert Firth)

-- 
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: about macro exception : Unable to resolve classname: LinkedList, macro question and possible better approach

2015-03-06 Thread coco


 sorry for my crappy code, but I was changing some conditions and testing my 
 parameters before and I end with this code

 (if (not (false? res))
 res

  (recur)) 

I must write just

(if  res
 res

  (recur)) 


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


about macro exception : Unable to resolve classname: LinkedList, macro question and possible better approach

2015-03-06 Thread coco
Hi guys, first I'm really noob using macros, basically I've this

(!b (function-blah hi))

Hey..I didn't know than intellij copy/paste the text with format!..cool!

Ok..returning to my question...I don't need call to function-blah...I need 
send a message to one address possibly named some-namespace:blah..how I 
discover which is the correct namespace is simple...I send a message to 
every possible namespace stored in a vector..when some bus return a 
response, I index it in a map (:function full-address) ...next calls only 
needs find the correct address in the map and send the message... 

just now I've this code:

(defmacro !b [f]
   (if
  (some nil? [(resolve 'vertx-bus-routes) (resolve 'solved-vertx-routes)])
  (println need use require-vertx function first)

  (let [function-name (first f)
arguments (rest f)]
 (if-let [function-route (get @solved-vertx-routes function-name 
false)];;if the route address was indexed
(send function-route arguments) 
;;only send the message using this address
(go
   (let [full-names   (map #(str % : function-name) 
@vertx-bus-routes)  ;;1)concatenate the name with the full address list
 response-channel (chan (count @vertx-bus-routes))  
  ;;2)create a channell
 [correct-route res] (loop []   
  ;;4) take only the address where you get a non false response
(let [res (! response-channel)]
   (if (not (false? res))
  res
  (recur]
  (do
 (doseq [name full-names] (test-bus name arguments 
response-channel))   ;;3) take the address list and send a message to every 
address
 (assoc @solved-vertx-routes function-name correct-route)   
;;5) store the correct address in a map function-name - correct 
address
 res)))



I add this to gist https://gist.github.com/anonymous/9fc79679e17e36c47994


when I try run it I get: CompilerException java.lang.IllegalArgumentException: 
Unable to resolve classname: LinkedList


I did a simplified version of the code (also uploaded to gist line 25)..I move 
the correct response outside the let thinking than maybe could be the 
problem...but this fails


(def data (atom ))
(defmacro blahhh []
   (go
  (let [ch (chan)]
 (do
(loop []
   (let [res (! ch)]
  (if (= res secret)
 (do (println  res)
 (reset! data res))
 (recur
(doseq [word [blah bang secret goal]] (put! ch word))


I've three questions:

1) why the exception

2) is correct use a macro?..I'm using a macro because I need avoid try evaluate 
the function in the argument and instead I use it as data..but the code results 
a bit weird because I'm not generating code..I though than I need quote the 
full macro body but I read this article


http://www.braveclojure.com/writing-macros/


and He did something similar

(defmacro postfix-notation
  [expression]
  (conj (butlast expression) (last expression)))
(macroexpand '(postfix-notation (1 1 +))); = (+ 1 1)


One key difference between functions and macros is that function arguments are 
fully evaluated before they're passed to the function, whereas macros receive 
arguments as unevaluated data structures.


3) Any better way of do it?...suggestion?..the way how I use the channel is not 
elegant neither...


thanks so much guys!

2


-- 
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: Om design query

2015-03-06 Thread Colin Yates
I know this is a different direction than a lot of people but I store
everything in the app-state and so far it has worked well. There are a
hundred reasons why this (storing everything in app-state) is a
terrible idea, but I haven't run into any of them.

The main driver for this was for bug reporting - we post the app-state
back to the server on errors. We (can) also use web-sockets so I can
mirror locally what somebody else is doing. For business reasons this
is very important.

I should say that I have deliberately architected the UI so it is dumb
and the backend has very optimised views per page (we are using DDD,
event sourcing and CQRS to complete the buzzward bingo card). I am
still storing some de-normalised data in app-state, like
reference-data etc., but maybe I have dodged some bullets by having
the data the UI receives pre-formatted for the UI (which also makes
sense to me for a number of reasons).

If you did want to store component-local state then channels or a
simple cb would suffice. I would go with a callback in this case as it
seems to be a pure implementation detail of the 'layout' component. If
the children of the layout are external to the layout (i.e. the layout
component is a generic reusable thing) then can you now simply put the
logic in the IDidMount of the container and then query the dom itself
for all children of that container?


On 6 March 2015 at 08:54, Daniel Kersten dkers...@gmail.com wrote:
 I've successfully used component local state for similar tasks while working
 with DimpleJS charts.


 On Fri, 6 Mar 2015 05:46 Tom Lynch tfly...@gmail.com wrote:

 One workable possibility:

 * init a core.async channel in the container
 * pass the channel from the container into each child component at build
 time using :opts or :state
 * send the discovered size of each child component, with identifying data,
 as a channel message during IDidMount

 I don't find these sorts of solutions terribly elegant but it would be
 usable I think.


 Tom


 On Friday, 6 March 2015 12:42:12 UTC+8, James Reeves wrote:

 I've been writing an application using Om, and I've come across a problem
 I haven't been able to find a good solution for. I'd be grateful for any
 ideas people might have on how to proceed.

 In a nutshell, I have a bunch of elements that need to be arranged
 according to a specific algorithm. They cannot overlap, so I need to know
 the sizes of all the elements in order to arrange them.

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

-- 
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: Om design query

2015-03-06 Thread James Reeves
On 6 March 2015 at 08:54, Daniel Kersten dkers...@gmail.com wrote:

 I've successfully used component local state for similar tasks while
 working with DimpleJS charts.


How so? I didn't think a parent component could access the local state of
its children.

- James

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: Om design query

2015-03-06 Thread Daniel Kersten
I should have been clearer. I was thinking by using callbacks like Colin
suggests. I've had code that looks like this before:

(om/build component data {:opts {:cb #(om/set-state! owner %)}}

On Fri, 6 Mar 2015 14:43 James Reeves ja...@booleanknot.com wrote:

 On 6 March 2015 at 09:13, Colin Yates colin.ya...@gmail.com wrote:

 I know this is a different direction than a lot of people but I store
 everything in the app-state and so far it has worked well. There are a
 hundred reasons why this (storing everything in app-state) is a
 terrible idea, but I haven't run into any of them.


 I was considering that. It seems wrong, but I hadn't been able to think of
 any specific problems that would come of it.


 If you did want to store component-local state then channels or a
 simple cb would suffice. I would go with a callback in this case as it
 seems to be a pure implementation detail of the 'layout' component. If
 the children of the layout are external to the layout (i.e. the layout
 component is a generic reusable thing) then can you now simply put the
 logic in the IDidMount of the container and then query the dom itself
 for all children of that container?


 Oh, now that's an interesting idea. I was trying to do everything through
 components in a very declarative way, but perhaps this is a case where it
 would be useful to reach into the DOM instead, and manually rearrange the
 positions after a IDidMount or IDidUpdate event.

 - James

 --
 You received this message because you are subscribed to the Google
 Groups Clojure group.
 To post to this group, send email to clojure@googlegroups.com
 Note that posts from new members are moderated - please be patient with
 your first post.
 To unsubscribe from this group, send email to
 clojure+unsubscr...@googlegroups.com
 For more options, visit this group at
 http://groups.google.com/group/clojure?hl=en
 ---
 You received this message because you are subscribed to the Google Groups
 Clojure group.
 To unsubscribe from this group and stop receiving emails from it, send an
 email to clojure+unsubscr...@googlegroups.com.
 For more options, visit https://groups.google.com/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.


Immutant survey

2015-03-06 Thread Jim Crossley
Hi friends,

If you have any opinion about Immutant [1], would you please take a few 
moments to fill out this short survey?

  http://goo.gl/forms/syYnYtpM4v

We're trying to get a sense of how Immutant is being used.

Thanks so much!
Jim

[1] http://immutant.org

-- 
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: Who's using Clojure?

2015-03-06 Thread Daniel Kersten
Regarding hiring, it seems to me that most of the smaller companies aren't
hiring clojure developers but rather training other developers.

I know one local former java shop that now mostly uses clojure for new
development and non of their team of ~10 had any prior clojure experience.
In my own startup I'm one of only two developers and the other guy had no
prior clojure experience but picked it up in a matter of weeks.

To add to the who's using clojure conversation: I know three companies
here (Dublin, Ireland) who are using Clojure heavily (and one or two more
US companies who use it who have operations here but I think they're
already mentioned on the lists here).

On Fri, 6 Mar 2015 09:53 Rangel Spasov raspa...@gmail.com wrote:

 Haha this is the funniest thing I've read in a while! Good luck, forge on!
 :)


 On Thursday, March 5, 2015 at 7:47:41 AM UTC-8, Michael Richards wrote:

 I'm about to start training 4 devs on my team at Oracle in Clojure.  My
 manager is very nervous about putting Clojure into the product.  I'm
 forging on regardless :)  I rewrote some components of our product in
 Clojure in my spare time, mainly as a proof of concept that we could do
 some of our analytics in the streaming model rather than in the data
 warehousing model.  As sometimes happens, the POC was so simple and fast
 that the team is now interested in productizing it.

 In our last 1-1 meeting, my manager told me he had searched LinkedIn for
 Clojure and only got 9000 matches.   Whereas his search for Java turned
 up 80 million or some such.  My rebuttal is that those are the 9000
 smartest developers, so you should be trying to recruit them.


 --mike


 On Tuesday, April 19, 2011 at 7:38:14 AM UTC-7, Damien wrote:

 Hi Everyone,

 I'm on a mission: introducing Clojure in my company, which is a big
 consulting company like many others.

 I started talking about Clojure to my manager yesterday.
 I was prepared to talk about all the technical benefits and he was
 interested.
 I still have a long way to go but I think that was a good start.

 However I need to figure out how to answer to one of his questions: who
 is using Clojure?

 Obviously I know each of you is using Clojure, that makes almost 5,000
 people.
 I know there is Relevance and Clojure/core.
 I read about BackType or FlightCaster using Clojure.

 But, let's face it, that doesn't give me a killer answer.

 What could help is a list of success stories, a bit like MongoDB
 published here:
 http://www.mongodb.org/display/DOCS/Production+Deployments

 Is there a place where I could find this kind of information for Clojure?

 Thanks

 --
 Damien Lepage
 http://damienlepage.com

  --
 You received this message because you are subscribed to the Google
 Groups Clojure group.
 To post to this group, send email to clojure@googlegroups.com
 Note that posts from new members are moderated - please be patient with
 your first post.
 To unsubscribe from this group, send email to
 clojure+unsubscr...@googlegroups.com
 For more options, visit this group at
 http://groups.google.com/group/clojure?hl=en
 ---
 You received this message because you are subscribed to the Google Groups
 Clojure group.
 To unsubscribe from this group and stop receiving emails from it, send an
 email to clojure+unsubscr...@googlegroups.com.
 For more options, visit https://groups.google.com/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: Om design query

2015-03-06 Thread James Reeves
On 6 March 2015 at 09:13, Colin Yates colin.ya...@gmail.com wrote:

 I know this is a different direction than a lot of people but I store
 everything in the app-state and so far it has worked well. There are a
 hundred reasons why this (storing everything in app-state) is a
 terrible idea, but I haven't run into any of them.


I was considering that. It seems wrong, but I hadn't been able to think of
any specific problems that would come of it.


 If you did want to store component-local state then channels or a
 simple cb would suffice. I would go with a callback in this case as it
 seems to be a pure implementation detail of the 'layout' component. If
 the children of the layout are external to the layout (i.e. the layout
 component is a generic reusable thing) then can you now simply put the
 logic in the IDidMount of the container and then query the dom itself
 for all children of that container?


Oh, now that's an interesting idea. I was trying to do everything through
components in a very declarative way, but perhaps this is a case where it
would be useful to reach into the DOM instead, and manually rearrange the
positions after a IDidMount or IDidUpdate event.

- James

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: Om design query

2015-03-06 Thread James Reeves
On 6 March 2015 at 05:22, Dave Della Costa ddellaco...@gmail.com wrote:

 (cc'ing clojurescr...@googlegroups.com)

 Let me make sure I understand what you're asking: you have a parent
 enclosing component that has to do calculations to position a set of
 child component element, but you can only properly calculate positioning
 for those child elements (in the parent?) after you get offset position
 information for each one, once they have mounted?


Yes, but it's the size of the child elements I need. They contain text, so
I don't know their dimensions until they've been rendered.

Essentially the parent needs to adjust the position of its children so that
none overlap.

- James

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: Who's using Clojure?

2015-03-06 Thread Alex Miller
I can confirm that there are a lot of companies training existing devs in 
Clojure. I pretty regularly conduct training classes (for Cognitect) at 
companies in this position, usually for 15-25 devs. Most commonly those devs 
are coming from Java or Ruby. Some of those are well-known Clojure companies 
but many are not. 

I don't track any numbers on it but anecdotally I am seeing a lot more Clojure 
job ads this year than last.

Alex

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


Conditional dependency question

2015-03-06 Thread Jonathon McKitrick
I'm using environ and lein-environ to pick up dev settings, such as 
enabling weasel/piggieback in development.

In my server module, I'm running this code in -main:

(when (env :dev?)
  (println DEV)
  (require 'pts.dev)
  (pts.dev/browser-repl))

But pts.dev still throws a class not found exception.  However, after the 
project has loaded and begins execution, I'm able to run that snippet 
successfully.

What's the trick to getting pts.dev into the namespace conditionally?

-- 
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: Conditional dependency question

2015-03-06 Thread Moritz Ulrich

You need to use `ns-resolve' to resolve the actual vars you want to use.
Here's a snippet from one of our projects which shows the approach:

```clojure
(defn ws-repl []
  (require 'cemerick.piggieback
   'weasel.repl.websocket)
  (let [cljs-repl (ns-resolve 'cemerick.piggieback 'cljs-repl)
repl-env (ns-resolve 'weasel.repl.websocket 'repl-env)]
(cljs-repl
 :repl-env (repl-env
:ip 0.0.0.0
:port 9009
:working-dir resources/public/out
```

Jonathon McKitrick jmckitr...@gmail.com writes:

 I'm using environ and lein-environ to pick up dev settings, such as 
 enabling weasel/piggieback in development.

 In my server module, I'm running this code in -main:

 (when (env :dev?)
   (println DEV)
   (require 'pts.dev)
   (pts.dev/browser-repl))

 But pts.dev still throws a class not found exception.  However, after the 
 project has loaded and begins execution, I'm able to run that snippet 
 successfully.

 What's the trick to getting pts.dev into the namespace conditionally?

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


signature.asc
Description: PGP signature


Re: [ANN] Dunaj project, an alternative core API for Clojure

2015-03-06 Thread Jozef Wagner
Experiment #1

*Deconstructing Core API*

While Clojure provides its functionalities in multiple namespaces (e.g.
clojure.string, clojure.zip), the majority of it is defined in a single
namespace called clojure.core. The first Dunaj experiment explores the idea
of having multiple small namespaces where functions, macros and other
public vars are grouped by their purpose. It investigates whether such
separation is possible at all and whether it can be practical and useful.

The goals of the first Dunaj experiment are as follows:

- Devise a new user centric core API comprising multiple namespaces,
leaving bootstrapping and low level vars in the clojure.core.

- Define a concept of API presets that control which functions, macros and
vars gets referred by default.

- Let user choose which API preset he/she wants to use in his/hers
namespace, using classic clojure.core as a default.

The upside of this approach is that backwards compatibility is maintained
and users can freely intermix multiple APIs in their projects.
Functionalities can be more logically separated by their purpose. List of
automatically referred vars are no longer driven by the namespace in which
they were defined, but this list is handled by separate API presets that
can be extended and customized.

You can read more about this experiment at http://www.dunaj.org

-- Jozef


On Thu, Mar 5, 2015 at 10:33 PM, Jozef Wagner jozef.wag...@gmail.com
wrote:

 I'm happy to announce a project called Dunaj [1], which provides an
 alternative core API for Clojure. Its main aim is to experimentally test
 major additions to the language.

 Dunaj /ˈdunaɪ/ is a set of core language experiments aimed to improve
 Clojure language and its core API. It deals with language features that
 require changes across different parts of Clojure and which cannot be
 evaluated in isolation. Dunaj aims to bring Clojure even more towards
 simplicity, consistency and performance.
 It is intended to be used by regular Clojure developers, either for
 application or library development.

 Dunaj was created to test 10 experiments that bring significant changes to
 the Clojure language. As there is a substantial number of additions and
 changes, I want to try a bit unconventional approach here. Before I'll
 release the actual library, I will introduce Dunaj's experiments in a
 series of individual posts. Every part states the motivation behind the
 experiment, introduces changes and additions to the language and
 demonstrates its intended use. If you do not want to miss any of this, you
 may want to register for a mailing list at [1] or follow @dunajproject at
 Twitter.

 -- Jozef Wagner

 [1] http://www.dunaj.org/



-- 
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: Who's using Clojure?

2015-03-06 Thread Rangel Spasov
Haha this is the funniest thing I've read in a while! Good luck, forge on! 
:)

On Thursday, March 5, 2015 at 7:47:41 AM UTC-8, Michael Richards wrote:

 I'm about to start training 4 devs on my team at Oracle in Clojure.  My 
 manager is very nervous about putting Clojure into the product.  I'm 
 forging on regardless :)  I rewrote some components of our product in 
 Clojure in my spare time, mainly as a proof of concept that we could do 
 some of our analytics in the streaming model rather than in the data 
 warehousing model.  As sometimes happens, the POC was so simple and fast 
 that the team is now interested in productizing it.

 In our last 1-1 meeting, my manager told me he had searched LinkedIn for 
 Clojure and only got 9000 matches.   Whereas his search for Java turned 
 up 80 million or some such.  My rebuttal is that those are the 9000 
 smartest developers, so you should be trying to recruit them.


 --mike


 On Tuesday, April 19, 2011 at 7:38:14 AM UTC-7, Damien wrote:

 Hi Everyone,

 I'm on a mission: introducing Clojure in my company, which is a big 
 consulting company like many others.

 I started talking about Clojure to my manager yesterday.
 I was prepared to talk about all the technical benefits and he was 
 interested.
 I still have a long way to go but I think that was a good start.

 However I need to figure out how to answer to one of his questions: who 
 is using Clojure?

 Obviously I know each of you is using Clojure, that makes almost 5,000 
 people.
 I know there is Relevance and Clojure/core.
 I read about BackType or FlightCaster using Clojure.

 But, let's face it, that doesn't give me a killer answer.

 What could help is a list of success stories, a bit like MongoDB 
 published here:
 http://www.mongodb.org/display/DOCS/Production+Deployments

 Is there a place where I could find this kind of information for Clojure?

 Thanks

 -- 
 Damien Lepage
 http://damienlepage.com



-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [ANN] Dunaj project, an alternative core API for Clojure

2015-03-06 Thread Jozef Wagner
I'm planning to introduce experiments every other day, starting later today.

On Fri, Mar 6, 2015 at 12:05 AM, Alex Baranosky 
alexander.barano...@gmail.com wrote:

 Yeah, I'm excited to see some of the 10 write-ups. What's the ETA on the
 first one?

 On Thu, Mar 5, 2015 at 6:02 PM, Alex Miller a...@puredanger.com wrote:

 I'm happy to see experiments if we can learn something useful. Can't
 really judge more till the posts are out. Seems perfectly possible that
 something promising could get a design page and move towards inclusion in
 some way.

 Alex

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


-- 
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: Who's using Clojure?

2015-03-06 Thread Fergal Byrne
Hey Dan  Michael,

I'd add this talk [1] to Neal's great talk as a cautionary tale before
trying to force things on nervous managers. Remember that a manager's #1
priority is keeping his own job, and being the guy who green-lighted an
experiment will get you fired (or at least sidelined) if the initiative
fails and you can be blamed. Back in the '80's, people said no one ever
got fired for hiring IBM.

As mentioned in this talk, you should get to work using Clojure on
non-production code, maybe on some tool which is creating problems for your
team. Demonstrate how replacing pieces or all of the crusty Java/Scala/Ruby
codebase with clean and crisp Clojure is a no-brainer for this task. If it
doesn't work, don't say anything about that and move on to another
mini-project.

On the jobs question, Daniel (from here in Dublin) is correct. The main
reason you don't see any jobs is because that would indicate the hiring
company has already switched production projects to Clojure (by training
existing devs), and very few have done this yet (for the reasons stated
above). Clojure houses like Juxt and Cognitect are all hiring, but often
rely on personal networks rather than broadcasting on job sites. There are
a couple of sites like functionaljobs [2] for companies without good
personal networks.

Clojure is winning one dev at a time. There are almost no cases of teams
switching back to Java or Scala once they've worked with Clojure for a
while. The same cannot be said for Groovy or Scala, which are being
abandoned in good numbers.

Regards,

Fergal

[1] https://www.youtube.com/watch?v=qWKf3ROVgrY
[2] http://functionaljobs.com/

On Fri, Mar 6, 2015 at 10:18 AM, Daniel Kersten dkers...@gmail.com wrote:

 Regarding hiring, it seems to me that most of the smaller companies aren't
 hiring clojure developers but rather training other developers.

 I know one local former java shop that now mostly uses clojure for new
 development and non of their team of ~10 had any prior clojure experience.
 In my own startup I'm one of only two developers and the other guy had no
 prior clojure experience but picked it up in a matter of weeks.

 To add to the who's using clojure conversation: I know three companies
 here (Dublin, Ireland) who are using Clojure heavily (and one or two more
 US companies who use it who have operations here but I think they're
 already mentioned on the lists here).


 On Fri, 6 Mar 2015 09:53 Rangel Spasov raspa...@gmail.com wrote:

 Haha this is the funniest thing I've read in a while! Good luck, forge
 on! :)


 On Thursday, March 5, 2015 at 7:47:41 AM UTC-8, Michael Richards wrote:

 I'm about to start training 4 devs on my team at Oracle in Clojure.  My
 manager is very nervous about putting Clojure into the product.  I'm
 forging on regardless :)  I rewrote some components of our product in
 Clojure in my spare time, mainly as a proof of concept that we could do
 some of our analytics in the streaming model rather than in the data
 warehousing model.  As sometimes happens, the POC was so simple and fast
 that the team is now interested in productizing it.

 In our last 1-1 meeting, my manager told me he had searched LinkedIn for
 Clojure and only got 9000 matches.   Whereas his search for Java turned
 up 80 million or some such.  My rebuttal is that those are the 9000
 smartest developers, so you should be trying to recruit them.


 --mike


 On Tuesday, April 19, 2011 at 7:38:14 AM UTC-7, Damien wrote:

 Hi Everyone,

 I'm on a mission: introducing Clojure in my company, which is a big
 consulting company like many others.

 I started talking about Clojure to my manager yesterday.
 I was prepared to talk about all the technical benefits and he was
 interested.
 I still have a long way to go but I think that was a good start.

 However I need to figure out how to answer to one of his questions: who
 is using Clojure?

 Obviously I know each of you is using Clojure, that makes almost 5,000
 people.
 I know there is Relevance and Clojure/core.
 I read about BackType or FlightCaster using Clojure.

 But, let's face it, that doesn't give me a killer answer.

 What could help is a list of success stories, a bit like MongoDB
 published here:
 http://www.mongodb.org/display/DOCS/Production+Deployments

 Is there a place where I could find this kind of information for
 Clojure?

 Thanks

 --
 Damien Lepage
 http://damienlepage.com

  --
 You received this message because you are subscribed to the Google
 Groups Clojure group.
 To post to this group, send email to clojure@googlegroups.com
 Note that posts from new members are moderated - please be patient with
 your first post.
 To unsubscribe from this group, send email to
 clojure+unsubscr...@googlegroups.com
 For more options, visit this group at
 http://groups.google.com/group/clojure?hl=en
 ---
 You received this message because you are subscribed to the Google Groups
 Clojure group.
 To unsubscribe from this group and stop receiving emails from it, send 

Re: Om design query

2015-03-06 Thread James Reeves
On 6 March 2015 at 17:48, Matthew Davidson suny...@gmail.com wrote:

 Hmmm. You could use core.async, pass down a channel to children, and pass
 up an event each time the child is mounted. The parent would start a
 go-loop on initialization, count the children, and run some code when it
 gets the right number of child-mounting events. You could also use a
 general event bus for something similar, if you have one.


I have something similar to a general event bus in the form of Ittyon
https://github.com/weavejester/ittyon, but I'm not sure if I want to mix
local state with my app state.


 But really, unless you're doing something very complicated, layout is more
 the province of CSS. Could the Flexbox layout work here?


I'm afraid not. It's a little more complex that that. Effectively all the
elements have precise coordinates, but if two happen to overlap, an
algorithm is employed to nudge them into new positions.

- James

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: Om design query

2015-03-06 Thread James Reeves
On 6 March 2015 at 15:29, Daniel Kersten dkers...@gmail.com wrote:

 I should have been clearer. I was thinking by using callbacks like Colin
 suggests. I've had code that looks like this before:

 (om/build component data {:opts {:cb #(om/set-state! owner %)}}


That's an interesting approach. I hadn't noticed that om/build had a :opts
argument.

- James

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: Om design query

2015-03-06 Thread Glen Mailer
In ordinary React I think I would keep all of this logic in the parent, and 
read from the DOM in didUpdate. There's a feature called refs which can be used 
to grab references to the rendered children to get their DOM nodes.

I'm afraid I don't know how to do the equivalent in Om.

-- 
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: Om design query

2015-03-06 Thread Matthew Davidson
Hmmm. You could use core.async, pass down a channel to children, and pass up an 
event each time the child is mounted. The parent would start a go-loop on 
initialization, count the children, and run some code when it gets the right 
number of child-mounting events. You could also use a general event bus for 
something similar, if you have one.

Other options I can think of involve passing down a callback or a local state 
mounting count atom for the children to call/inc.

But really, unless you're doing something very complicated, layout is more the 
province of CSS. Could the Flexbox layout work here?

Matthew

On Friday, March 6, 2015 at 10:15:23 AM UTC-5, James Reeves wrote:
 On 6 March 2015 at 05:22, Dave Della Costa ddell...@gmail.com wrote:
 (cc'ing clojur...@googlegroups.com)
 
 
 Let me make sure I understand what you're asking: you have a parent
 
 enclosing component that has to do calculations to position a set of
 
 child component element, but you can only properly calculate positioning
 
 for those child elements (in the parent?) after you get offset position
 
 information for each one, once they have mounted?
 
 
 
 Yes, but it's the size of the child elements I need. They contain text, so I 
 don't know their dimensions until they've been rendered.
 
 
 
 Essentially the parent needs to adjust the position of its children so that 
 none overlap.
 
 
 - James

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Disk based caching for Clojure app

2015-03-06 Thread JPatrick Davenport
Hello,
I'm been thinking about an idea for a cache layer. It's driven by two 
trends.

Most caches are in memory. They might have fancy additions like 
multi-machine, but they are in-memory. The fast memory access reduces back 
end load and improves overall performance. It also assumes you have memory 
to spare.

The second trend is that bootstrapping a start up means minimizing costs. 
This means paying for one or two low memory machines with at most 2 GB of 
RAM. Linode, for example, would cost $40/month to have two 2GB nodes (app 
and db).

The two trends don't really overlap well. I want the caching, but I can't 
yet afford it. 

Where they *could* overlap is the fact that Linode's drives are SSD. They 
are not as fast as memory, but probably faster than DB + Network. Is there 
any pure Clojure library that does this? I'd like to say, Keep 30 MB of 
Cache in Ram and 2 GB of SSD cache. I guess another way to ask it: is 
there anything like Java Caching System in pure Clojure?

Thanks,
JPD

-- 
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: Disk based caching for Clojure app

2015-03-06 Thread Colin Yates
You could build something on top memory mapped files. I did this to solve
similar requirements with good effect.
On 6 Mar 2015 18:55, JPatrick Davenport virmu...@gmail.com wrote:

 Hello,
 I'm been thinking about an idea for a cache layer. It's driven by two
 trends.

 Most caches are in memory. They might have fancy additions like
 multi-machine, but they are in-memory. The fast memory access reduces back
 end load and improves overall performance. It also assumes you have memory
 to spare.

 The second trend is that bootstrapping a start up means minimizing costs.
 This means paying for one or two low memory machines with at most 2 GB of
 RAM. Linode, for example, would cost $40/month to have two 2GB nodes (app
 and db).

 The two trends don't really overlap well. I want the caching, but I can't
 yet afford it.

 Where they *could* overlap is the fact that Linode's drives are SSD. They
 are not as fast as memory, but probably faster than DB + Network. Is there
 any pure Clojure library that does this? I'd like to say, Keep 30 MB of
 Cache in Ram and 2 GB of SSD cache. I guess another way to ask it: is
 there anything like Java Caching System in pure Clojure?

 Thanks,
 JPD

 --
 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: Disk based caching for Clojure app

2015-03-06 Thread Michael Blume
Possibly stupid question: can you just pretend you have more memory than
you do and let the operating system do the heavy lifting?

On Fri, Mar 6, 2015, 10:54 AM JPatrick Davenport virmu...@gmail.com wrote:

 Hello,
 I'm been thinking about an idea for a cache layer. It's driven by two
 trends.

 Most caches are in memory. They might have fancy additions like
 multi-machine, but they are in-memory. The fast memory access reduces back
 end load and improves overall performance. It also assumes you have memory
 to spare.

 The second trend is that bootstrapping a start up means minimizing costs.
 This means paying for one or two low memory machines with at most 2 GB of
 RAM. Linode, for example, would cost $40/month to have two 2GB nodes (app
 and db).

 The two trends don't really overlap well. I want the caching, but I can't
 yet afford it.

 Where they *could* overlap is the fact that Linode's drives are SSD. They
 are not as fast as memory, but probably faster than DB + Network. Is there
 any pure Clojure library that does this? I'd like to say, Keep 30 MB of
 Cache in Ram and 2 GB of SSD cache. I guess another way to ask it: is
 there anything like Java Caching System in pure Clojure?

 Thanks,
 JPD

 --
 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: [ANN] EuroClojure 2015

2015-03-06 Thread Hildeberto Mendonça
Hello Alex,

On Wed, Mar 4, 2015 at 6:05 PM, Alex Miller a...@puredanger.com wrote:


 To ensure the continued excellence and growth of the conference, we are
 excited that EuroClojure has joined the Cognitect ecosystem. Marco has been
 helping us and will continue to help make this conference awesome and
 importantly to preserve the unique style of EuroClojure.

 We’re working on an exact date and location for EuroClojure 2015, and
 should be able to announce that within the week so stay tuned. Marco and
 the Cognitect folks are all excited about this and looking forward to
 seeing you all this summer.


Very excited about that and looking forward for the dates and location ;-)
Thanks!

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: Om design query

2015-03-06 Thread Daniel Kersten
You can provide refs to dom calls and use om/get-node to retrieve them:

(dom/div #js {:ref foo} ...)

(om/get-node owner foo)

It is tied to the owner though and I'm not entirely sure what that means
for grabbing refs from other components - as far as I'm aware, it will work
just fine for children but maybe not for siblings. Worth a try though.

On Fri, 6 Mar 2015 at 18:37 Glen Mailer glenja...@gmail.com wrote:

 In ordinary React I think I would keep all of this logic in the parent,
 and read from the DOM in didUpdate. There's a feature called refs which can
 be used to grab references to the rendered children to get their DOM nodes.

 I'm afraid I don't know how to do the equivalent in Om.

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


[ANN] Chestnut 0.7.0

2015-03-06 Thread Arne Brasseur
Chestnut 0.7.0 has been deployed to Clojars. 

Chestnut [1] is a leiningen template that provides a solid and complete 
starting point for a web application using Clojure, Clojurescript, and Om. 
It ships out of the box with a great development experience, including a 
browser-connected REPL, instant reloading of nearly everything, and 
examples of clj/cljs unit tests.

Chestnut aims to be exceptionally beginner friendly.

Using `lein new chestnut app-name` will automatically give you the latest 
goodness.

The main changes are built-in support for unit testing, as well as the use 
of `figwheel-sidecar`, which makes the dependency footprint of your app 
much smaller by no longer depending directly on Leiningen. Have a look at 
the Changelog [2] for details.

While snapshot versions of 0.7.0 have been available for some time, this 
version has taken a while to yield a stable release. We decided to freeze 
some library versions in the 0.7.0 for stability, which means that not 
everything is as up-to-date as it could be. This release should be a good 
starting point for preparing the 0.8 release, which will contain Om 0.8.x, 
as well as updated Clojurescript, Figwheel, and others.

As part of this release we're soft-launching Chestnut Community [3], a 
Discourse based message board, to bring together the community of Chestnut 
users and developers.

[1] https://github.com/plexus/chestnut
[2] http://plexus.github.io/chestnut/CHANGELOG.html
[3] http://chestnut.aren.io

Arne Brasseur (@plexus)

-- 
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: Disk based caching for Clojure app

2015-03-06 Thread Sam Raker
I'm under the impression that, because of the hard limit on writes, OSes 
often already cache writes to SSDs, further limiting their usefulness in 
this kind of application.

On Friday, March 6, 2015 at 4:10:54 PM UTC-5, Fluid Dynamics wrote:

 On Friday, March 6, 2015 at 3:16:09 PM UTC-5, Michael Blume wrote:

 Possibly stupid question: can you just pretend you have more memory than 
 you do and let the operating system do the heavy lifting?

 As in, put the swap partition on the SSD and jack up the virtual memory in 
 the OS config?

 Isn't it a bad idea to put swap on an SSD, because of the limited number 
 of times an SSD byte can be rewritten before it sticks permanently? Thus 
 making SSD more suited to storing stuff where speed counts, but which 
 doesn't change very much, like the operating system kernel and modules and 
 core libraries, plus your most often used applications? Then you get faster 
 boot and app-startup times without constant writes to the SSD (just when 
 something is upgraded).

 Of course, SSD being less well suited to frequently-written data would 
 also militate against using it for a cache managed by the application, 
 rather than by the OS ...
  


-- 
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: Disk based caching for Clojure app

2015-03-06 Thread Fluid Dynamics
On Friday, March 6, 2015 at 3:16:09 PM UTC-5, Michael Blume wrote:

 Possibly stupid question: can you just pretend you have more memory than 
 you do and let the operating system do the heavy lifting?

As in, put the swap partition on the SSD and jack up the virtual memory in 
the OS config?

Isn't it a bad idea to put swap on an SSD, because of the limited number of 
times an SSD byte can be rewritten before it sticks permanently? Thus 
making SSD more suited to storing stuff where speed counts, but which 
doesn't change very much, like the operating system kernel and modules and 
core libraries, plus your most often used applications? Then you get faster 
boot and app-startup times without constant writes to the SSD (just when 
something is upgraded).

Of course, SSD being less well suited to frequently-written data would also 
militate against using it for a cache managed by the application, rather 
than by the OS ...
 

-- 
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: Better/more idiomatic way to read EDNs than using java.io.PushbackReader

2015-03-06 Thread Mark Mandel
Totally off the top of my head, but this should work -

(edn/read-string (join   (line-seq r)))

Mark

On 7 March 2015 at 14:18, Sam Raker sam.ra...@gmail.com wrote:

 I'm experimenting a little with EDN files. I've currently got this
 function:

 (defn from-edn [edn-file] (with-open [r (clojure.java.io/reader edn-file)]
 (edn/read (java.io.PushbackReader. r

 Having to explicitly reach into the Java API to read a clojure-only format
 seems wrong. What should I be doing instead?

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




-- 
E: mark.man...@gmail.com
T: http://www.twitter.com/neurotic
W: www.compoundtheory.com

2 Devs from Down Under Podcast
http://www.2ddu.com/

-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
Clojure group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [ANN] Dunaj project, an alternative core API for Clojure

2015-03-06 Thread Bozhidar Batsov
You might want to add some commenting capabilities to those articles.
They'll be more valuable in the context of discussions IMO.

On 6 March 2015 at 18:49, Jozef Wagner jozef.wag...@gmail.com wrote:

 Experiment #1

 *Deconstructing Core API*

 While Clojure provides its functionalities in multiple namespaces (e.g.
 clojure.string, clojure.zip), the majority of it is defined in a single
 namespace called clojure.core. The first Dunaj experiment explores the idea
 of having multiple small namespaces where functions, macros and other
 public vars are grouped by their purpose. It investigates whether such
 separation is possible at all and whether it can be practical and useful.

 The goals of the first Dunaj experiment are as follows:

 - Devise a new user centric core API comprising multiple namespaces,
 leaving bootstrapping and low level vars in the clojure.core.

 - Define a concept of API presets that control which functions, macros and
 vars gets referred by default.

 - Let user choose which API preset he/she wants to use in his/hers
 namespace, using classic clojure.core as a default.

 The upside of this approach is that backwards compatibility is maintained
 and users can freely intermix multiple APIs in their projects.
 Functionalities can be more logically separated by their purpose. List of
 automatically referred vars are no longer driven by the namespace in which
 they were defined, but this list is handled by separate API presets that
 can be extended and customized.

 You can read more about this experiment at http://www.dunaj.org

 -- Jozef


 On Thu, Mar 5, 2015 at 10:33 PM, Jozef Wagner jozef.wag...@gmail.com
 wrote:

 I'm happy to announce a project called Dunaj [1], which provides an
 alternative core API for Clojure. Its main aim is to experimentally test
 major additions to the language.

 Dunaj /ˈdunaɪ/ is a set of core language experiments aimed to improve
 Clojure language and its core API. It deals with language features that
 require changes across different parts of Clojure and which cannot be
 evaluated in isolation. Dunaj aims to bring Clojure even more towards
 simplicity, consistency and performance.
 It is intended to be used by regular Clojure developers, either for
 application or library development.

 Dunaj was created to test 10 experiments that bring significant changes
 to the Clojure language. As there is a substantial number of additions and
 changes, I want to try a bit unconventional approach here. Before I'll
 release the actual library, I will introduce Dunaj's experiments in a
 series of individual posts. Every part states the motivation behind the
 experiment, introduces changes and additions to the language and
 demonstrates its intended use. If you do not want to miss any of this, you
 may want to register for a mailing list at [1] or follow @dunajproject at
 Twitter.

 -- Jozef Wagner

 [1] http://www.dunaj.org/


  --
 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: Om design query

2015-03-06 Thread Daniel Kersten
I've successfully used component local state for similar tasks while
working with DimpleJS charts.

On Fri, 6 Mar 2015 05:46 Tom Lynch tfly...@gmail.com wrote:

 One workable possibility:

 * init a core.async channel in the container
 * pass the channel from the container into each child component at build
 time using :opts or :state
 * send the discovered size of each child component, with identifying data,
 as a channel message during IDidMount

 I don't find these sorts of solutions terribly elegant but it would be
 usable I think.


 Tom


 On Friday, 6 March 2015 12:42:12 UTC+8, James Reeves wrote:

 I've been writing an application using Om, and I've come across a problem
 I haven't been able to find a good solution for. I'd be grateful for any
 ideas people might have on how to proceed.

 In a nutshell, I have a bunch of elements that need to be arranged
 according to a specific algorithm. They cannot overlap, so I need to know
 the sizes of all the elements in order to arrange them.

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