[JOB] Multiple roles | Board Intelligence (London, UK / Remote)

2018-12-28 Thread Patrik Sundberg
Hello!

New year and new beginnings? Perhaps you feel it is time to take the step 
to work with Clojure commercially in the new year?

Board Intelligence (BI) is looking for talented people to join our team. We 
are searching for smart and talented senior developers and DevOps/SRE 
professionals to help architect and build systems powering boardroom 
conversations at companies like Easy Jet, Aviva, Britting Gas, BT and Royal 
Mail.

Clojure is our language of choice for internal infrastructure and tooling, 
and we are progressively leveraging Clojure also for our client facing 
services. Hence we are searching for smart people on this list to help us 
continue down this path.

We hope that for the right person this will be a great opportunity to take 
on an important role in an interesting company, while working with Clojure 
commercially.

Ideally we would like someone that is able to spend time in our London 
offices, but for the right person exceptions could be made.

Anyone interested can get in touch with me directly at: 
patrik.sundb...@boardintelligence.com

https://www.boardintelligence.com/

WHAT WE'RE LOOKING FOR
* Someone who is smart and cares deeply about his/her craft
* Someone we can learn from
* A good communicator

ABOUT US
* BI seeks to help improve the effectiveness of boards across corporate and 
public sectors
* BI powers boardroom conversations for the likes of Easy Jet, Aviva, 
British Gas, BT and Royal Mail
* Our focus on technology for the board room grew out of our existing 
consulting business 5 years ago and is now the core of what we do
* We have grown organically to the current size of ~50 people (tech team of 
12)
* The company is owner managed and in control of its own destiny

ABOUT YOU
* Developers: You are a strong developer who delivers solid finished work
* DevOps/SRE: You take a holistic approach to reliability all the way from 
infrastructure to application code
* You are aware of your own limitations and when to seek out wider 
collaboration
* You have your own strong opinions but retain an open mind
* You enjoy learning new things and pick up new skills quickly
* You take initiative and are comfortable working without much direction

OUR TECHNOLOGIES
* Languages: Ruby, Clojure, JavaScript, Go
* Data: Postgres, Kafka, OpenStack Swift
* Orchestration: Kubernetes + internal tooling

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


Question: How do you organize large clojure projects?

2018-11-14 Thread Patrik Sundberg
I've been happy using a monorepo with boot, and a build.boot with many building 
blocks that can be mixed and matched for many deployables (uberjars in my case).

In my build.boot I define my internal blocks, but also defs for external deps 
like eg postgres and grpc. That way I have one place for these groups of 
dependencies to manage, and can merge them into many of my own building blocks 
in a flexible and consistent way.

There are no checkouts, multiple outputs and consistent usage of dependencies. 

If I need different release management/deployment process for different 
deployables of my own I tend to use different release branches by deployable 
that my ci/CD setup triggers from. 

Hope that helps! 

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


[JOB] Senior engineer | Board Intelligence (London, UK / Remote)

2018-10-11 Thread Patrik Sundberg
Hello!

Board Intelligence (BI) is looking for talented people to join our team. We 
are searching for smart and talented senior engineers to help architect and 
build systems powering boardroom conversations at companies like Easy Jet, 
Aviva, Britting Gas, BT and Royal Mail.

Clojure is our language of choice for internal infrastructure and tooling, 
and we are progressively leveraging Clojure also for our client facing 
services. Hence we are searching for smart developers to help us continue 
down this path.

We hope that for the right person this will be a great opportunity to take 
on an important role in an interesting company, while working with Clojure 
commercially.

Ideally we would like someone that is able to spend time in our London 
offices, but for the right person exceptions could be made.

Anyone interested can get in touch with me directly at: 
patrik.sundb...@boardintelligence.com

https://www.boardintelligence.com/

WHAT WE'RE LOOKING FOR
* Someone who is smart and cares deeply about his/her craft
* Someone we can learn from
* A good communicator

ABOUT US
* BI seeks to help improve the effectiveness of boards across corporate and 
public sectors
* BI powers boardroom conversations for the likes of Easy Jet, Aviva, 
British Gas, BT and Royal Mail
* Our focus on technology for the board room grew out of our existing 
consulting business 5 years ago and is now the core of what we do
* We have grown organically to the current size of ~50 people (tech team of 
12)
* The company is owner managed and in control of its own destiny

ABOUT YOU
* You are a strong developer who delivers solid finished work
* You are aware of your own limitations and when to seek out wider 
collaboration
* You have your own strong opinions but retain an open mind
* You enjoy learning new things and picking things up quickly
* You take initiative and are comfortable working without much direction

OUR TECHNOLOGIES
* Languages: Ruby, Clojure, JavaScript, Go
* Data: Postgres, Kafka, OpenStack Swift
* Orchestration: Kubernetes + internal tooling

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


[JOB] Clojure / SRE | Board Intelligence (London, UK / Remote)

2018-09-13 Thread Patrik Sundberg


Hello!


Board Intelligence (BI) is looking for a talented person to join us in a 
multifaceted role focusing on platform reliability in the wider sense of 
the word. All the way from operational setup, to CI/CD pipeline, to 
developing our services in a solid fashion from a reliability perspective.


The reason I'm posting this on a Clojure mailing list is that Clojure is 
our language of choice for our internal infrastructure, and progressively 
for client facing services as well. In an ideal world we're looking for a 
person part Site Reliability Engineer and part Clojure developer. There are 
periodic infrastructure heavy projects interspersed with more traditional 
development work on internal and external tools and services.


We hope that for the right person this will be a great opportunity to take 
on an important role in an interesting company, while working with Clojure 
commercially.


Ideally we would like someone that is able to spend time in our London 
offices, but for the right person exceptions could be made.


Anyone interested can get in touch with me directly at: 
patrik.sundb...@boardintelligence.com


https://www.boardintelligence.com/


WHAT WE'RE LOOKING FOR

   - 
   
   Someone who is smart and able to own reliability from day 1 or as you 
   progress
   - 
   
   A good communicator
   - 
   
   A person who is comfortable with a broad role
   
ABOUT US

   - 
   
   BI seeks to help improve the effectiveness of boards across corporate 
   and public sectors
   - 
   
   BI powers boardroom conversations for the likes of Easy Jet, Aviva, 
   British Gas, BT and Royal Mail
   - 
   
   Our focus on technology for the board room grew out of our existing 
   consulting business 5 years ago and is now the core of what we do
   - 
   
   We have grown organically to the current size of ~50 people (tech team 
   of 12)
   - 
   
   The company has always been profitable
   
ABOUT YOU

   - 
   
   You have a broad technology background in the sense of being able jump 
   in and quickly pick up what you need to know at any level of the stack
   - 
   
   You are aware of your own limitations and when to seek out wider 
   collaboration
   - 
   
   You have your own strong opinions but retain an open mind
   - 
   
   You enjoy learning new things and picking things up quickly
   - 
   
   You take initiative and are comfortable working without much direction
   
OUR TECHNOLOGIES

   - 
   
   Orchestration: Kubernetes + internal tooling
   - 
   
   Data: Postgres, Kafka, OpenStack Swift
   - 
   
   Languages: Ruby, Clojure, JavaScript, Go
   

-- 
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: detecting running as script

2018-06-13 Thread Patrik Sundberg
Yeah - I ended up in this thread from some searching, then got 
distracted/confused about browser tabs and didn't realize I was dealing 
with a 9 year old thread :)

Thanks for the history!

On Tuesday, June 12, 2018 at 8:44:32 PM UTC+1, Sean Corfield wrote:
>
> I thought this was the go-to library for command line parsing:
>
>  
>
> https://github.com/clojure/tools.cli
>
>  
>
> I believe it is, yes. Some history:
>
>- I think clojure.contrib.command-line was created by Chris Houser and 
>maintained mostly by Stuart Sierra (until 2011). It was deprecated along 
>with everything else in “Monolithic Contrib” as part of the Clojure 1.3 
>release.
>- clojure.tools.cli was originally created by Gareth Jones from the 
>Clargon library (starting in 2011)
>- For the 0.3.0 release, Sung Pae took over and rewrote it based on 
>his optparse-clj library and included ClojureScript support (starting in 
>2013)
>- I took over as maintainer for the 0.3.2 release (starting in 2015) 
>and I’m happy to look at any enhancement requests or features offered by 
>any other command line argument parsing library that folks make me aware 
> of!
>
>  
>
> Sean Corfield -- (970) FOR-SEAN -- (904) 302-SEAN
> An Architect's View -- http://corfield.org/
>
> "If you're not annoying somebody, you're not really alive."
> -- Margaret Atwood
>
>  
> --
> *From:* clo...@googlegroups.com   > on behalf of Patrik Sundberg  >
> *Sent:* Tuesday, June 12, 2018 6:13:39 AM
> *To:* Clojure
> *Subject:* Re: detecting running as script 
>  
> I thought this was the go-to library for command line parsing:
>
> https://github.com/clojure/tools.cli
>
> On Wednesday, January 14, 2009 at 7:11:23 PM UTC, Grunde Løvoll wrote: 
>>
>> Thanks! 
>>
>> I'll have a look at clojure.contrib.command-line. I don't need 
>> anything super-powerfull, just something that make it easy to define 
>> and parse command line arguments in the "normal manner". 
>>
>> Sorry about my previous double post :( 
>>
>> Grunde 
>>
>> On Wed, Jan 14, 2009 at 6:00 PM, Chouser  wrote: 
>> > 
>> > On Wed, Jan 14, 2009 at 5:58 AM, Grunde  wrote: 
>> >> 
>> >> Now, it these some elegant way to parse and use the passed command 
>> >> line arguments in my program? Is there any lib like Ruby/Pythons 
>> >> optparse to assist parsing of command line arguments? 
>> > 
>> > There is clojure.contrib.command-line 
>> > 
>> > I don't know if it's elegant, and it's certainly not (yet) as powerful 
>> > as many optparse tools in some other languages, but I've found it to 
>> > be useful. 
>> > 
>> > --Chouser 
>> > 
>> > > 
>> > 
>>
> -- 
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clo...@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+u...@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+u...@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: detecting running as script

2018-06-12 Thread Patrik Sundberg
I thought this was the go-to library for command line parsing:

https://github.com/clojure/tools.cli

On Wednesday, January 14, 2009 at 7:11:23 PM UTC, Grunde Løvoll wrote:
>
> Thanks! 
>
> I'll have a look at clojure.contrib.command-line. I don't need 
> anything super-powerfull, just something that make it easy to define 
> and parse command line arguments in the "normal manner". 
>
> Sorry about my previous double post :( 
>
> Grunde 
>
> On Wed, Jan 14, 2009 at 6:00 PM, Chouser > 
> wrote: 
> > 
> > On Wed, Jan 14, 2009 at 5:58 AM, Grunde  > wrote: 
> >> 
> >> Now, it these some elegant way to parse and use the passed command 
> >> line arguments in my program? Is there any lib like Ruby/Pythons 
> >> optparse to assist parsing of command line arguments? 
> > 
> > There is clojure.contrib.command-line 
> > 
> > I don't know if it's elegant, and it's certainly not (yet) as powerful 
> > as many optparse tools in some other languages, but I've found it to 
> > be useful. 
> > 
> > --Chouser 
> > 
> > > 
> > 
>

-- 
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: Best way to include dev-only functions?

2018-01-17 Thread Patrik Sundberg
I tend to add a path to my :resource-paths in boot for dev-only things. You 
can do the same with lein (and hopefully any other build tool you use).

I'm not sure I got your question fully. My interpretation is that you want 
to have a different version of the "same" fn, so that other parts of the 
code that use the fn ends up using a diff version without needing to be 
changed. I think that's what you asked? :)

If so then adding a dev-only path like mentioned above, with the dev 
versions of the fns, and then e.g. add a wrapper macro that uses 
with-redefs to point the fns you want to the dev versions from the dev NS. 
You can then use this macro to to execute code with the dev versions, like 
(dev-mode (form1) (form2) ... ). 


On Monday, January 15, 2018 at 4:31:05 PM UTC, Jonathon McKitrick wrote:
>
> I’d like to have a namespace loaded with dev-only versions of some 
> functions.
>
> Is there a better way than using environ with ‘require’ and ’ns-resolve’ 
> to do this?
>
>

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

2016-08-19 Thread Patrik Sundberg
What I meant was that you can spec the defmulti, and code runs just fine, 
but you can't instrument it. As then you end up with the instrumentation 
wrapper not being a multimethod, so things break. That's how I read the 
stack trace. It'd seem possible for instrument to wrap the multimethod with 
a multimethod stub, so perhaps that's a change to consider.


On Thursday, August 18, 2016 at 6:27:08 PM UTC+1, Alex Miller wrote:
>
> I should mention that a half step is to spec the dispatch function used by 
> the multimethod. That covers the front-end.

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


fdef for defmulti?

2016-08-18 Thread Patrik Sundberg
Hi,

Am I right to think you can't currently fdef a defmulti function? I tried 
and when running tests using clojure.spec.test/instrument I see:
1. Unhandled java.lang.ClassCastException
   clojure.spec.test$spec_checking_fn$fn__12959 cannot be cast to
   clojure.lang.MultiFn

  core.clj: 1806  clojure.core/get-method
  core.clj: 1806  clojure.core/get-method
   time_series.clj:  474  tulos.time-series/eval181936/fn

So I guess what happens is the fdef+instrument adds a normal fn wrapper, 
which then isn't a multi method and it breaks down.

Has this been discussed before? Any plans? I didn't find anything.

Thanks,
Patrik

-- 
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: Catching exception - lazy eval, lambdas and protocols

2014-03-30 Thread Patrik Sundberg
In clarifying and correcting my example I found the issue. I was storing a 
lambda deep inside some data structure and later updating the lambda code 
to catch exceptions but an effectively cached lambda in my session wasn't 
updated to the changed one (the evils of state..). A fresh session where 
all code was consistent and the exception catching worked just as expected. 
The protos and laziness were coincidental to the cause of my confusion.

sorry for the noise.

On Sunday, March 30, 2014 5:12:44 PM UTC+1, Patrik Sundberg wrote:
>
> doh. that's a badly translated example by me. I'll have another go at 
> translating the actual code that isn't completely broken like attempt 1.
>
> On Sunday, March 30, 2014 2:24:38 PM UTC+1, Michał Marczyk wrote:
>>
>> The problem is that inner-lazy is a method of AProto which is 
>> implemented for ARecord, but actually called (in trigger-fn) on a 
>> vector of two ARecords. The exception thrown is an 
>> IllegalArgumentException complaining about the missing method. 
>>
>> inner-lazy2 works, because it's just a regular function. Note that it 
>> could call the-fn rather than the-fn2 -- the-fn is a method of AProto 
>> just like inner-lazy, but in this snippet it's actually called on 
>> ARecord instances, so the method lookup will be successful. 
>>
>> Cheers, 
>> Michał 
>>
>>
>> On 30 March 2014 14:18, Patrik Sundberg  wrote: 
>> > I'm trying to work out how to catch exceptions close to source in some 
>> code 
>> > with structure similar to this: 
>> > https://www.refheap.com/68851 
>> > 
>> > A doall on line 13 doesn't change the outcome. 
>> > 
>> > So not involving records and protocol a similar structure does what I 
>> expect 
>> > it to do, but with them I seem unable to catch exceptions taking place 
>> > inside the proto fns. 
>> > 
>> > So I realize I'm missing something around how exception handlers are 
>> setup 
>> > and triggered with regards to either lazy eval, lambdas or protocols 
>> (or 
>> > some combo therein). 
>> > 
>> > I'd like my toy example to calculate 20 as a result of calling 
>> (trigger-fn), 
>> > same as it does with (trigger-fn2). 
>> > 
>> > Any explanations of what's going here would be most welcome - I'd 
>> really 
>> > like to understand the exception handling logic. 
>> > 
>> > Thanks, 
>> > Patrik 
>> > 
>> > -- 
>> > You received this message because you are subscribed to the Google 
>> > Groups "Clojure" group. 
>> > To post to this group, send email to clo...@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+u...@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+u...@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: Catching exception - lazy eval, lambdas and protocols

2014-03-30 Thread Patrik Sundberg
doh. that's a badly translated example by me. I'll have another go at 
translating the actual code that isn't completely broken like attempt 1.

On Sunday, March 30, 2014 2:24:38 PM UTC+1, Michał Marczyk wrote:
>
> The problem is that inner-lazy is a method of AProto which is 
> implemented for ARecord, but actually called (in trigger-fn) on a 
> vector of two ARecords. The exception thrown is an 
> IllegalArgumentException complaining about the missing method. 
>
> inner-lazy2 works, because it's just a regular function. Note that it 
> could call the-fn rather than the-fn2 -- the-fn is a method of AProto 
> just like inner-lazy, but in this snippet it's actually called on 
> ARecord instances, so the method lookup will be successful. 
>
> Cheers, 
> Michał 
>
>
> On 30 March 2014 14:18, Patrik Sundberg > 
> wrote: 
> > I'm trying to work out how to catch exceptions close to source in some 
> code 
> > with structure similar to this: 
> > https://www.refheap.com/68851 
> > 
> > A doall on line 13 doesn't change the outcome. 
> > 
> > So not involving records and protocol a similar structure does what I 
> expect 
> > it to do, but with them I seem unable to catch exceptions taking place 
> > inside the proto fns. 
> > 
> > So I realize I'm missing something around how exception handlers are 
> setup 
> > and triggered with regards to either lazy eval, lambdas or protocols (or 
> > some combo therein). 
> > 
> > I'd like my toy example to calculate 20 as a result of calling 
> (trigger-fn), 
> > same as it does with (trigger-fn2). 
> > 
> > Any explanations of what's going here would be most welcome - I'd really 
> > like to understand the exception handling logic. 
> > 
> > Thanks, 
> > Patrik 
> > 
> > -- 
> > You received this message because you are subscribed to the Google 
> > Groups "Clojure" group. 
> > To post to this group, send email to clo...@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+u...@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+u...@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.


Catching exception - lazy eval, lambdas and protocols

2014-03-30 Thread Patrik Sundberg
I'm trying to work out how to catch exceptions close to source in some code 
with structure similar to this:
https://www.refheap.com/68851

A doall on line 13 doesn't change the outcome.

So not involving records and protocol a similar structure does what I 
expect it to do, but with them I seem unable to catch exceptions taking 
place inside the proto fns.

So I realize I'm missing something around how exception handlers are setup 
and triggered with regards to either lazy eval, lambdas or protocols (or 
some combo therein).

I'd like my toy example to calculate 20 as a result of calling 
(trigger-fn), same as it does with (trigger-fn2).

Any explanations of what's going here would be most welcome - I'd really 
like to understand the exception handling logic.

Thanks,
Patrik

-- 
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] Gorilla REPL initial release (0.1.2)

2014-02-23 Thread Patrik Sundberg
re LT: It'd be a natural thing to dig into if/when you look to move to cljs.

For the context at hand I think of an LT plugin as something that:
- is easy to edit code/text in
- has access to ways of executing "remote" code via nrepl and get back 
results
- have access to files and resources etc via node modules 
- have access to HTML UI since LT is effectively Chromium in that regard
- the plugin itself would most naturally be clojurescript

All in all sounds like it could be a nice platform. Your plugin could have 
some custom ways to execute code which means you get to intercept results 
as e.g. EDN and then do the same kind of thing you do in the current 
version - take the descriptive data and generate an HTML UI representation. 
The UI rep you could have live update inside LT a side-by-side tab to your 
input source/document for example.

(I've got some similar dreams but not sure I'll be able to dig into it 
anytime soon)

On Sunday, February 23, 2014 5:22:32 PM UTC, Jony Hudson wrote:
>
> Hi,
>
>  thanks again for the kind words and enthusiasm! Let me try and give my 
> thoughts on some of the points raised:
>
> ** Light table plugin (@Patrik) **
>
> I would like to see this, as I think LT has a lot of potential. Things 
> like file-handling UI, nice code editing ... are all difficult problems 
> that I've not really tackled in Gorilla. Light table has those already, so 
> I could see it working well. I haven't the foggiest how to do it though!
>
>
> ** Extensible (@Jeff) **
>
> Yes, it's good to say this explicitly as I think this is key. At the 
> moment it's very poor in that regard. Before it happens I think the central 
> thing to pin down and get right is ...
>
>
> ** Value rendering and interaction (@Jeff) **
>
> This, to my mind, is the place where real design decisions have to be 
> made. There are some free-floating ideas in my head, but nothing really 
> joined-up yet.
>
> If we leave aside interactivity for a minute: the one thing that is clear 
> to me is that having the back-end return plain old Clojure values is a 
> *good idea*. Things you run just produce values, and the front-end knows 
> how to present values in a way that's helpful to the user. There should be 
> no state in the front-end that can be accessed by the back-end, no 
> messaging etc. This I see as the central idea. It's what makes it possible 
> to compose plots, (and hypothetically) append tables, make a tree-diagram 
> with plots as nodes, display formulae in tables etc. Because everything 
> displayed by the front-end is just a Clojure value, and you can manipulate 
> those as you wish. 
>
> Ultimately, everything has to end up as something the browser can display. 
> At the moment, all of this conversion is happening in the browser. I had 
> resisted having this conversion happening in the back-end because I was 
> nervous about having the front-end evaluate things on the back-end that the 
> user hasn't explicitly asked for. But maybe that isn't a problem as long as 
> the rendering functions are tastefully written (i.e. side-effect free). So 
> maybe what Jeff suggests is the right idea: allow rendering on the 
> front-end or the back-end, and make these renderers easy to plug in. 
> Back-end rendering works well for extensibility too, as renderers could be 
> plugged in as needed per project. Extending the set of renderers on the 
> front end, looks less clean - either they'd be baked in, or there'd need to 
> be some way to inject them at runtime. Perhaps the preference should be for 
> back end rendering, with a small set of standardised renderers on the front 
> end? It's still unclear to me how the wiring will work - I think I probably 
> have to prototype something (maybe table rendering) and see how it looks.
>
> As for interactivity, I think this is a really tricky one. Wolfram, with 
> Mathematica, have done a _really_ nice job with this. In case you're not 
> familiar, the heart of it is a dependency-tracking, reactive variable 
> system (Dynamic[]). And on top of this they've come up with a nice language 
> for describing UI. It's extremely impressive, but it's also a pretty large 
> engineering effort I think. I wonder whether a more modest goal might not 
> be the right thing to try for (given I don't see us bringing the same 
> resources as Wolfram to bear on the problem!). I found with monkeycruncher 
> that you can get almost all of what you might want to do regarding 
> interactivity with a much more restricted mode of interaction. It had a 
> "Bret Victor" style "live mode" where you could edit the code and see the 
> results change live. It also had some neat UI (sliders, colour pickers) to 
> edit parts of the code fluidly. I found that this worked really well, and 
> it fits very well with the idea above (edit code, automatically 
> re-evaluate, generates new value, new value is rendered).
>
> I'd love to hear your thoughts on all of this :-)
>
>
> ** Implementing client in Clojurescript (

Re: [ANN] Gorilla REPL initial release (0.1.2)

2014-02-19 Thread Patrik Sundberg
This is awesome. In my head I've been planing something similar to this for 
a while now. In my head it's the ideal kind of UI for a power-user not 
scared of writing small scripts to get their work done while not losing 
visual output and feedback. More recently I was thinking of it as a 
LightTable plugin. LT to get a free decent editor to build on (giving up 
par-edit etc is a drag so rather not if I don't have to), and some of the 
nrepl etc piping "for free". When I get to this project I'll definitely 
check out gorilla more closely.


On Wednesday, February 19, 2014 9:23:02 PM UTC, Jony Hudson wrote:
>
> Hi All,
>
>  I'm pleased to announce the first release of Gorilla REPL, a rich REPL in 
> the notebook style:
>
> https://github.com/JonyEpsilon/gorilla-repl
>
> From the README:
>
> "You can think of it like a pretty REPL that can plot graphs, or you can 
> think of it as an editor for rich documents that can contain interactive 
> Clojure code, graphs, table, notes, LaTeX formulae. Whatever works for you! 
> One of the main aims is to make it lightweight enough that you can use it 
> day-to-day instead of the command-line REPL, but also offer the power to 
> perform and document complex data analysis and modelling tasks. Above all 
> else, Gorilla tries not to dictate your workflow, but rather to fit in to 
> the way you like to work, hopefully putting a bit more power to your elbow."
>
> You might like to take a look at a video introduction that shows what it 
> does better than my poor prose describes it:
>
> https://vimeo.com/87118206
>
> I hope you like it and find it useful. In particular I really hope it fits 
> in to your workflow, and if not it would be great to know why. Bear in mind 
> it is very new and hasn't had a lot of testing, so caveat evaluator. In 
> particular:
>
> * I've done very limited testing other than on Safari on Mac. I've checked 
> that it works in most of the major browsers on Windows and Mac, but that's 
> about it!
>
> * At the moment you can only open one window otherwise it breaks 
> (silently!). I'd love some help on the bug that's blocking this from 
> someone who understands nREPL better than me. 
> https://github.com/JonyEpsilon/gorilla-repl/issues/10
>
> * It relies on an internet connection at the moment, at least until it 
> caches various fonts. Need to get in touch with someone at clojars about 
> size limitations.
>
>
> I think there's a lot still to be done, and there are some areas that 
> would really benefit from feedback from clojure developers more experienced 
> than me. Directions I'd love to see explored:
>
> * More work on plotting. Still very green, and much could be improved.
>
> * Incanter integration. If I've understood correctly, Incanter can 
> generate SVG, so shouldn't be too difficult.
>
> * Content-types. Currently values are tagged to indicate they should be 
> rendered specially by the front-end. Is this the right way to do it? What 
> about tagged literals?
>
> * UI as a value. There's a lot that could be done with custom rendering of 
> values. Mathematica is particularly impressive in this regard, and it would 
> be interesting to think where this could go with clojure. I know Kovas 
> Boguta has thought about this a lot.
>
> * Clojurescript! I think this is a _really_ interesting one. I'd love to 
> see a pure-client-version that uses a clojurescript REPL server in a 
> web-worker or similar. I came to write Gorilla through thinking about this 
> angle originally, having previously messed around with javascript based 
> data analysis in the browser (see http://monkeycruncher.org - cute idea, 
> but no-one wants to use js to analyse their data!). In my opinion there's 
> some really important work to be done on opening up analysis - I'd love to 
> publish scientific papers not with a snapshot of my analysis, but with my 
> real, living, breathing analysis in them. And I love to do it on an open, 
> ubiquitous platform :-)
>
> Anyway, let me know what you think. Comments, issues and pull requests all 
> very, very welcome ;-)
>
>
> Jony
>

-- 
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/groups/opt_out.


Job - clojure development at commodities hedge fund

2014-02-19 Thread Patrik Sundberg
Hi,

We're a commodities hedge fund with most of our infrastructure being 
developed in-house using a clojure stack. Think clojure, datomic, immutant, 
pallet, looking at some UI ideas using LightTable and/or Om. If that sounds 
like your kind of thing and you want to join a small hard working team get 
in touch. We'd obviously love some finance and/or commodities background 
but that's not a hard requirement - we're happy to teach you that side of 
the business if you got the dev skills sorted. Physically we're located in 
Zug, Switzerland so the Zurich area and full-time employment is the ideal 
solution, but we're open to other arrangements for the right person (e.g. I 
am personally in London).

Get in touch by sending an email to: patrik.sundb...@tuloscapital.com and 
hoss.hauks...@tuloscapital.com

Thanks,
Patrik

-- 
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/groups/opt_out.


Re: infinite loop print out of cyclic structure at repl

2013-10-01 Thread Patrik Sundberg
This paste seems gone - anyone has it available?

I seem to get bitten by this kind of thing in emacs using nrepl and it 
pretty printing something and it gets into an infinite loop locking up my 
emacs session completely. Running the same from command line i can see same 
behavior (seems related to protocols in my case, but haven't spent much 
time on it(). Either way I'd love to work out a way to avoid the cycles and 
this paste sounds good.

On Monday, January 18, 2010 10:21:52 PM UTC, Chouser wrote:
>
> > On Jan 18, 4:22 pm, Raoul Duke  wrote:
> >> hi,
> >>
> >> hmmm, i wish there were a way (or that it was the default) to tell the
> >> repl to not continue to loop for ever over things it has already
> >> "printed" out when i eval something that is a cyclic thing. anybody
> >> have a patch, or thought on this?
>
> On Mon, Jan 18, 2010 at 4:38 PM, Mark Hamstra 
> > 
> wrote:
> > See *print-length* and *print-level* in the core API.
>
> Or if you want unlimited depth, but want to avoid printing the
> value of any reference object more than once, you can try this
> little thing I hacked together a while ago:
>
> http://paste.lisp.org/display/83647
>
> Note that it has to keep a reference to every IDeref object it
> sees while it's printing, in order to detect duplicates.
>
> --Chouser
> http://joyofclojure.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/groups/opt_out.


Re: TONIGHT at Skills Matter! The London Clojure Community:Machine Learning With Clojure

2012-11-05 Thread Patrik Sundberg
Shouldn't that be TOMORROW? Says the 6th in the link.


On Monday, November 5, 2012 11:20:17 AM UTC, Theo wrote:
>
> *The London Clojure Community:Machine Learning With Clojure
> *
>
> Machine Learning involves developing systems to process (potentially very 
> large) datasets, developing algorithms and models that can then be used to 
> make predictions of future events. Neale Swinnerton will investigate which 
> features of Clojure work well for machine learning and discuss some of the 
> limitations and how to avoid them.
>
>
>
> Learn more! http://bit.ly/Wpxlpc
>

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

Re: Some Friend documentation and regarding documentation in general

2012-10-29 Thread Patrik Sundberg


On Sunday, October 28, 2012 9:56:35 PM UTC, Patrik Sundberg wrote:
>
> On Sunday, October 28, 2012 8:14:41 PM UTC, Chas Emerick wrote:
>
>> On Oct 28, 2012, at 2:57 PM, Patrik Sundberg wrote:
>>
>> I've looked at this for a bit now. It seems there are some slight 
>> inconsistencies in how the redirect info is used:
>>
>> Where the redirect-on-autth? is being set up for the interactive-form 
>> workflow it looks to me to be assumed to be a boolean flag.
>>
>> https://github.com/sundbp/friend/blob/master/src/cemerick/friend/workflows.clj#L79
>>
>> At that point it's given as an argument when setting up the workflow 
>> (defaulting to true). 
>>
>> Then when it's being used in the generic code it's first picked out - 
>> looking like boolean flag still:
>> https://github.com/sundbp/friend/blob/master/src/cemerick/friend.clj#L145
>>
>> but then all of a sudden assumed to be a string containing the url to 
>> redirect to:
>> https://github.com/sundbp/friend/blob/master/src/cemerick/friend.clj#L149
>>
>> Given that, for the interactive-form workflow, it can only be set at the 
>> time of creating the workflow, it seems impossible to actually achieve the 
>> flow where friend "remembers" which page under authentication that user 
>> tried to access, then do auth, and finally return user to the originally 
>> requested page in a dynamic fashion. Since given at workflow creation time 
>> it can't dynamically reflect things properly I'd have assumed. I'd have 
>> expected it to not be an argument at workflow creation time, but the 
>> originally requested url being dynamically kept track of at the point 
>> friend realizes it needs to redirect the user to do authentication, then 
>> that url being used on L149 up there when the workflow sets 
>> redirect-on-auth? to true.
>>
>> Am I misunderstanding the flow or is there a mixup here? The tests only 
>> tests for boolean state, not as a string url.
>>
>>
>> You're misunderstanding.  If ::redirect-on-auth? is any truthy value 
>> (which includes strings), then `redirect-new-auth` will either:
>>
>> (a) send a redirect to the ::unauthorized-uri as captured in the session, 
>> which is only ever set if the user previously requested a resource for 
>> which they were not authorized (see 
>> https://github.com/cemerick/friend/blob/master/src/cemerick/friend.clj#L200),
>>  
>> or
>>
>> (b) redirect to the value of ::redirect-on-auth? if it is a string, or
>>
>> (c) redirect to the :default-landing-url specified in the configuration 
>> provided to `authenticate`.
>>
>> You're right that (b) will never be the case for the interactive-form 
>> workflow, fundamentally because `cemerick.friend.workflows/make-auth` 
>> merges the `auth-meta` defaults in last, rather than first.  That's a valid 
>> point of enhancement; ticket/patch welcome. :-)
>>
>> Note that ::redirect-on-auth? _is_ poorly named: it was originally 
>> expected to only be a boolean, thus the '?'.  Its name will need to change 
>> in the future to reflect its actual role.
>>
>>
> Ok - I think that's actually what my understanding was :) It just seemed 
> that in the existing workflows if it is stringy (assume make-auth patched 
> although I didn't quite get that yet) it is a fixed string rather than a 
> dynamic value of the url user tried to access. I.e. I can give "/foo" as 
> redirect-on-auth? when setting up the interactive-form workflow, but that's 
> then a fixed url to redirecct to. To redirect to whatever page the user 
> tried to access I'd have thought we need store it away from the original 
> request before we go into the auth process, to later redirect back to it 
> once successfully authenticated.
>
>
Reading the code again I now get it. The redirection I was looking for is 
there. ::unauthorized-uri is the uri I was looking for, misinterpreted the 
name to mean something else and overlooked it. I see how it fits together 
now. Will try to get to making the changes that came up in this discussion 
sometime this week.
 
Thanks

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

Re: Some Friend documentation and regarding documentation in general

2012-10-28 Thread Patrik Sundberg
On Sunday, October 28, 2012 8:14:41 PM UTC, Chas Emerick wrote:

> On Oct 28, 2012, at 2:57 PM, Patrik Sundberg wrote:
>
> I've looked at this for a bit now. It seems there are some slight 
> inconsistencies in how the redirect info is used:
>
> Where the redirect-on-autth? is being set up for the interactive-form 
> workflow it looks to me to be assumed to be a boolean flag.
>
> https://github.com/sundbp/friend/blob/master/src/cemerick/friend/workflows.clj#L79
>
> At that point it's given as an argument when setting up the workflow 
> (defaulting to true). 
>
> Then when it's being used in the generic code it's first picked out - 
> looking like boolean flag still:
> https://github.com/sundbp/friend/blob/master/src/cemerick/friend.clj#L145
>
> but then all of a sudden assumed to be a string containing the url to 
> redirect to:
> https://github.com/sundbp/friend/blob/master/src/cemerick/friend.clj#L149
>
> Given that, for the interactive-form workflow, it can only be set at the 
> time of creating the workflow, it seems impossible to actually achieve the 
> flow where friend "remembers" which page under authentication that user 
> tried to access, then do auth, and finally return user to the originally 
> requested page in a dynamic fashion. Since given at workflow creation time 
> it can't dynamically reflect things properly I'd have assumed. I'd have 
> expected it to not be an argument at workflow creation time, but the 
> originally requested url being dynamically kept track of at the point 
> friend realizes it needs to redirect the user to do authentication, then 
> that url being used on L149 up there when the workflow sets 
> redirect-on-auth? to true.
>
> Am I misunderstanding the flow or is there a mixup here? The tests only 
> tests for boolean state, not as a string url.
>
>
> You're misunderstanding.  If ::redirect-on-auth? is any truthy value 
> (which includes strings), then `redirect-new-auth` will either:
>
> (a) send a redirect to the ::unauthorized-uri as captured in the session, 
> which is only ever set if the user previously requested a resource for 
> which they were not authorized (see 
> https://github.com/cemerick/friend/blob/master/src/cemerick/friend.clj#L200), 
> or
>
> (b) redirect to the value of ::redirect-on-auth? if it is a string, or
>
> (c) redirect to the :default-landing-url specified in the configuration 
> provided to `authenticate`.
>
> You're right that (b) will never be the case for the interactive-form 
> workflow, fundamentally because `cemerick.friend.workflows/make-auth` 
> merges the `auth-meta` defaults in last, rather than first.  That's a valid 
> point of enhancement; ticket/patch welcome. :-)
>
> Note that ::redirect-on-auth? _is_ poorly named: it was originally 
> expected to only be a boolean, thus the '?'.  Its name will need to change 
> in the future to reflect its actual role.
>
>
Ok - I think that's actually what my understanding was :) It just seemed 
that in the existing workflows if it is stringy (assume make-auth patched 
although I didn't quite get that yet) it is a fixed string rather than a 
dynamic value of the url user tried to access. I.e. I can give "/foo" as 
redirect-on-auth? when setting up the interactive-form workflow, but that's 
then a fixed url to redirecct to. To redirect to whatever page the user 
tried to access I'd have thought we need store it away from the original 
request before we go into the auth process, to later redirect back to it 
once successfully authenticated.

Patrik

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

Re: Some Friend documentation and regarding documentation in general

2012-10-28 Thread Patrik Sundberg
I've looked at this for a bit now. It seems there are some slight 
inconsistencies in how the redirect info is used:

Where the redirect-on-autth? is being set up for the interactive-form 
workflow it looks to me to be assumed to be a boolean flag.
https://github.com/sundbp/friend/blob/master/src/cemerick/friend/workflows.clj#L79

At that point it's given as an argument when setting up the workflow 
(defaulting to true). 

Then when it's being used in the generic code it's first picked out - 
looking like boolean flag still:
https://github.com/sundbp/friend/blob/master/src/cemerick/friend.clj#L145

but then all of a sudden assumed to be a string containing the url to 
redirect to:
https://github.com/sundbp/friend/blob/master/src/cemerick/friend.clj#L149

Given that, for the interactive-form workflow, it can only be set at the 
time of creating the workflow, it seems impossible to actually achieve the 
flow where friend "remembers" which page under authentication that user 
tried to access, then do auth, and finally return user to the originally 
requested page in a dynamic fashion. Since given at workflow creation time 
it can't dynamically reflect things properly I'd have assumed. I'd have 
expected it to not be an argument at workflow creation time, but the 
originally requested url being dynamically kept track of at the point 
friend realizes it needs to redirect the user to do authentication, then 
that url being used on L149 up there when the workflow sets 
redirect-on-auth? to true.

Am I misunderstanding the flow or is there a mixup here? The tests only 
tests for boolean state, not as a string url.


On Thursday, October 25, 2012 2:54:49 PM UTC+1, Patrik Sundberg wrote:
>
> On Thursday, October 25, 2012 1:59:36 PM UTC+1, Chas Emerick wrote:
>
>>
>> On Oct 25, 2012, at 8:04 AM, Patrik Sundberg wrote: 
>>
>> > I've digested openid and using it with google, should have a working 
>> example to share when I have a time to put it together over weekend. 
>> > 
>> > I've got another common useage pattern I'd like to ask about: How do we 
>> accomplish automatic redirect to the "correct" page? 
>> > 
>> > Let's say user accesses /secret, isn't authenticated and gets 
>> redirected to /login by friend. once authenticated, how do we ensure we get 
>> redirected back to /secret? 
>>
>> I think that's a bug in the OpenID workflow.  Friend will do this 
>> redirection automatically if the workflow enables it: 
>>
>>
>> https://github.com/cemerick/friend/blob/master/src/cemerick/friend/workflows.clj#L79
>>  
>>
>> There are a couple of testcases in the project that verify this; 
>> unfortunately, the OpenID workflow doesn't yet accept the same 
>> configuration option as the interactive form workflow.  Please file an 
>> issue, and, if you are so bold, a patch. :-) 
>>
>>
> Got it, adding it to my weekend list. Thanks!
>
>

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

Re: Some Friend documentation and regarding documentation in general

2012-10-25 Thread Patrik Sundberg
On Thursday, October 25, 2012 1:59:36 PM UTC+1, Chas Emerick wrote:

>
> On Oct 25, 2012, at 8:04 AM, Patrik Sundberg wrote: 
>
> > I've digested openid and using it with google, should have a working 
> example to share when I have a time to put it together over weekend. 
> > 
> > I've got another common useage pattern I'd like to ask about: How do we 
> accomplish automatic redirect to the "correct" page? 
> > 
> > Let's say user accesses /secret, isn't authenticated and gets redirected 
> to /login by friend. once authenticated, how do we ensure we get redirected 
> back to /secret? 
>
> I think that's a bug in the OpenID workflow.  Friend will do this 
> redirection automatically if the workflow enables it: 
>
>
> https://github.com/cemerick/friend/blob/master/src/cemerick/friend/workflows.clj#L79
>  
>
> There are a couple of testcases in the project that verify this; 
> unfortunately, the OpenID workflow doesn't yet accept the same 
> configuration option as the interactive form workflow.  Please file an 
> issue, and, if you are so bold, a patch. :-) 
>
>
Got it, adding it to my weekend list. Thanks!

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

Re: Some Friend documentation and regarding documentation in general

2012-10-25 Thread Patrik Sundberg
I've digested openid and using it with google, should have a working 
example to share when I have a time to put it together over weekend.

I've got another common useage pattern I'd like to ask about: How do we 
accomplish automatic redirect to the "correct" page?

Let's say user accesses /secret, isn't authenticated and gets redirected to 
/login by friend. once authenticated, how do we ensure we get redirected 
back to /secret?


On Wednesday, October 24, 2012 10:12:01 AM UTC+1, Patrik Sundberg wrote:
>
> On Wednesday, October 24, 2012 3:10:52 AM UTC+1, David Della Costa wrote:
>
>> Patrik, Pierre, have you folks checked out the mock app that Chas 
>> created in the test directory?  It's not going to give you everything 
>> you're looking for but make it can help.  There is an implementation 
>> of the OpenID workflow in there, including a credential-fn example: 
>>
>>
>> https://github.com/cemerick/friend/blob/master/test/test_friend/mock_app.clj 
>>
>>
> Been digesting that and reading the OpenID workflow + the openid2java docs 
> to work out what inputs mean what. I'm not quite there yet but starting to 
> have some idea, will experiment today to get auth with Google Account up 
> and running.
>  
>
>> This may also help, regarding credential functions: 
>>
>>
>> https://github.com/cemerick/friend/blob/master/test/test_friend/credentials.clj
>>  
>>
>> I also highly recommend looking at the bcrypt-credential-fn in the 
>> credentials.clj lib, in the src of the project itself: 
>>
>>
>> https://github.com/cemerick/friend/blob/master/src/cemerick/friend/credentials.clj
>>  
>>
>>
> The credentials I grok more easily than the workflow - or more 
> specifically the openid workflow. The form based auth workflow is a lot 
> easier for me to follow, no probs there. That I find the openid workflow 
> more obtuse probably means I don't get OpenID quite yet so will do some 
> standard reading there as well.
>  
>
>> This is the default credentials function used in the mock app above, 
>> so it should help illustrate some of the concepts.  I've spent a lot 
>> of time poring over the code too, so feel free to ping me with 
>> questions too, I may be able to help. 
>>
>> > IMHO the doc is really lacking and I have to say I was expecting more 
>> > guidance in the code itself. 
>>
>> Yes, it's still hard to wrap your head around the docs.  Friend 
>> scratches an itch I have, and I think it's going to be rather 
>> important if people are trying to web apps quickly in Clojure, so I'm 
>> going to keep working on it and see how much I can clean things up and 
>> make concepts more clear.  And I know Chas is interested in this as 
>> well, from his past comments.  Any help and pull requests are welcome. 
>> ;-) 
>>
>> I'm working on some updates to everything I've been working on, I'll 
>> post updates to the list shortly (later this week probably, maybe even 
>> today). 
>>
>>
> Agreed. Happy to contribute a working google acc openid auth once I get 
> there.
>
> Patrik
>  
>
>> DD 
>>
>> 2012/10/24 Pierre R : 
>> > Thanks David for the extra doc. 
>> > 
>> > I have had a try with OpenID. Everything works kind of expected. 
>> > 
>> > I had a question about "302 redirection prior to authentication" that I 
>> > posted on github. 
>> > 
>> > Another question is how to link the concept of roles with the openid 
>> > credentials. 
>> > 
>> > IMHO the doc is really lacking and I have to say I was expecting more 
>> > guidance in the code itself. 
>> > 
>> > I guess a lot of stuff obvious to an experienced clojure developers are 
>> > still dark magic to me. 
>> > 
>> > In particular it is rather difficult to understand how to write a 
>> > crendential-fn and this link won't help you ;-) 
>> > https://github.com/cemerick/friend/blob/master/docs/credentials.md 
>> > 
>> > For "OpenId" I have blindly used the identity function without much 
>> > understanding ... 
>> > 
>> > I am using Friend to scratch a little auth server. Not sure it is the 
>> best 
>> > fit for that purpose. I will see. 
>> > 
>> > I hope Friend is going to be reviewed by an extended community of 
>> people 
>> > much more qualified than myself to talk about such matter. 
>> > 
>> > Still docs could be improve

Re: Some Friend documentation and regarding documentation in general

2012-10-24 Thread Patrik Sundberg
On Wednesday, October 24, 2012 3:10:52 AM UTC+1, David Della Costa wrote:

> Patrik, Pierre, have you folks checked out the mock app that Chas 
> created in the test directory?  It's not going to give you everything 
> you're looking for but make it can help.  There is an implementation 
> of the OpenID workflow in there, including a credential-fn example: 
>
>
> https://github.com/cemerick/friend/blob/master/test/test_friend/mock_app.clj 
>
>
Been digesting that and reading the OpenID workflow + the openid2java docs 
to work out what inputs mean what. I'm not quite there yet but starting to 
have some idea, will experiment today to get auth with Google Account up 
and running.
 

> This may also help, regarding credential functions: 
>
>
> https://github.com/cemerick/friend/blob/master/test/test_friend/credentials.clj
>  
>
> I also highly recommend looking at the bcrypt-credential-fn in the 
> credentials.clj lib, in the src of the project itself: 
>
>
> https://github.com/cemerick/friend/blob/master/src/cemerick/friend/credentials.clj
>  
>
>
The credentials I grok more easily than the workflow - or more specifically 
the openid workflow. The form based auth workflow is a lot easier for me to 
follow, no probs there. That I find the openid workflow more obtuse 
probably means I don't get OpenID quite yet so will do some standard 
reading there as well.
 

> This is the default credentials function used in the mock app above, 
> so it should help illustrate some of the concepts.  I've spent a lot 
> of time poring over the code too, so feel free to ping me with 
> questions too, I may be able to help. 
>
> > IMHO the doc is really lacking and I have to say I was expecting more 
> > guidance in the code itself. 
>
> Yes, it's still hard to wrap your head around the docs.  Friend 
> scratches an itch I have, and I think it's going to be rather 
> important if people are trying to web apps quickly in Clojure, so I'm 
> going to keep working on it and see how much I can clean things up and 
> make concepts more clear.  And I know Chas is interested in this as 
> well, from his past comments.  Any help and pull requests are welcome. 
> ;-) 
>
> I'm working on some updates to everything I've been working on, I'll 
> post updates to the list shortly (later this week probably, maybe even 
> today). 
>
>
Agreed. Happy to contribute a working google acc openid auth once I get 
there.

Patrik
 

> DD 
>
> 2012/10/24 Pierre R >: 
> > Thanks David for the extra doc. 
> > 
> > I have had a try with OpenID. Everything works kind of expected. 
> > 
> > I had a question about "302 redirection prior to authentication" that I 
> > posted on github. 
> > 
> > Another question is how to link the concept of roles with the openid 
> > credentials. 
> > 
> > IMHO the doc is really lacking and I have to say I was expecting more 
> > guidance in the code itself. 
> > 
> > I guess a lot of stuff obvious to an experienced clojure developers are 
> > still dark magic to me. 
> > 
> > In particular it is rather difficult to understand how to write a 
> > crendential-fn and this link won't help you ;-) 
> > https://github.com/cemerick/friend/blob/master/docs/credentials.md 
> > 
> > For "OpenId" I have blindly used the identity function without much 
> > understanding ... 
> > 
> > I am using Friend to scratch a little auth server. Not sure it is the 
> best 
> > fit for that purpose. I will see. 
> > 
> > I hope Friend is going to be reviewed by an extended community of people 
> > much more qualified than myself to talk about such matter. 
> > 
> > Still docs could be improved and I believe helps could come from pull 
> > requests to suggest the addition of code comments there and there. 
> > 
> > If I dig far enough in the code, I would be pleased to help. 
> > 
> > Thanks for the hard work. 
> > 
> > Cheers, 
> > 
> > Le mardi 23 octobre 2012 17:50:25 UTC+2, Patrik Sundberg a écrit : 
> >> 
> >> These are great tutorials. Thanks for publishing. 
> >> 
> >> Right now I'm looking for something similar using the OpenID workflow. 
> I 
> >> see it's there but how I use to for example create a "sign in with 
> google" 
> >> setup is less clear to me. 
> >> 
> >> Has anyone got a good OpenID example out there somewhere? 
> >> 
> >> On Saturday, October 6, 2012 4:50:05 PM UTC+1, David Della Costa wrote: 
> >>> 
> >>> Hi folks, 
> >&g

Re: Some Friend documentation and regarding documentation in general

2012-10-23 Thread Patrik Sundberg
These are great tutorials. Thanks for publishing.

Right now I'm looking for something similar using the OpenID workflow. I 
see it's there but how I use to for example create a "sign in with google" 
setup is less clear to me.

Has anyone got a good OpenID example out there somewhere?

On Saturday, October 6, 2012 4:50:05 PM UTC+1, David Della Costa wrote:
>
> Hi folks, 
>
> I've been pretty slack in communicating via the mailing list, but I 
> realized today that there is a lot of important dialogue going on here 
> so I have to make more of an effort to take part--I want to be a part of 
> this community! 
>
> In any case, I've been using Friend a lot lately, since I come from 
> Ruby-on-Rails-land, and it addresses a lot of the pain points that 
> Devise does for me. 
>
> But (as has been mentioned in other threads quite recently), 
> documentation is definitely the Clojure community's week point: it's 
> inconsistent, formatted inconsistently (Ring and Compojure, for example, 
> are wonderful exceptions), and updated erratically.  When it's good, 
> it's great; but when it's not, it puts me off from using a library.  For 
> example, I stayed away from Enlive for months before I realized what a 
> useful library it is--so I re-wrote the README to suit my tastes 
> (https://github.com/ddellacosta/enlive). 
>
> I think Chas Emerick writes much better docs than much of what 
> accompanies most Clojure libraries, but he's quite an advanced Clojure 
> developer, and he's moving very fast--so as a newbie, I had difficulty 
> even with his relatively good docs for Friend.  And I suspect you'll be 
> getting more and more folks from the web development world in the next 
> few years like me.  So it will be good to have things from the 
> perspective of someone not just trying to grok the libraries that exist, 
> but also trying to understand how Clojure works, and how the eco-system 
> fits together. 
>
> I've written some material on how to use Friend, including some OAuth2 
> resources.  I'd appreciate any feedback you can give, I'm pretty new to 
> Clojure (and Lisp in general). 
>
> In any case: 
>
> https://github.com/ddellacosta/friend-interactive-form-tutorial 
> https://github.com/ddellacosta/friend-oauth2-examples 
> https://github.com/ddellacosta/friend-oauth2 
>
> I have a bunch of other Clojure-related stuff on my github account too, 
> feedback is most welcome! 
>
> Cheers, 
> DD 
>

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

Re: Modelling for DAG with identity map - or not?

2012-09-20 Thread Patrik Sundberg


On Wednesday, September 19, 2012 10:52:26 AM UTC+1, Patrik Sundberg wrote:
>
> On Tuesday, September 18, 2012 10:10:35 PM UTC+1, hutch wrote:
>>
>>
>> On 2012-09-16, at 3:21 PM, Patrik Sundberg  wrote:
>>
>> I'm asking myself though if there's a more functional design for 
>> accomplishing the same goals? My main goals are to do things consistently 
>> so that changing a value X propagates properly, and being able to find 
>> dependencies of a given value. A DAG+identity map is my first take, but 
>> there may be something more natural for FP I'm completely missing.
>>
>>
>> Sounds like a reasonable approach to me. There's nothing wrong with 
>> state, just how you manipulate it. The STM in Clojure is really nice in 
>> this regard. You might want to have a look at Functional Reactive 
>> Programming (FRP). There's a lot of stuff available about that in the 
>> Haskell community, but usually for UIs and things like that. They sometimes 
>> use spread sheets as an example (spread sheets can be thought of as a DAG 
>> with values and computations in cells… you can see the mapping between them 
>> in your application (where the mapping doesn't work or is hard might be 
>> pointing at something quite interesting). There's also something called 
>> 'Cells' in Common Lisp that might be interesting. I'm not sure what's been 
>> done in Clojure.
>>
>>
> yeah, it's essentially a big mushy complex and persistable "spreadsheet" 
> I'm building, that's the right analogy that I tend to use myself (and 
> should have done in my post as well to make it easier to follow :)). Thanks 
> for the pointers, I'll go check those things out.
>
> btw, after started to play with it turns out records and protocols ends up 
> being the convenient way to do it, seems I don't need the flexibility of 
> multimethod dispatch + I do end up wanting some per type data to store.
>
>
Quick follow up to say thank you for putting me onto cells. That looks very 
much like the kind of solution I'm trying to create, so will study up on 
the various cells implementations for clojure that are around and 
embrace/adapt from there to suit my domain. 

If anyone happen to know the latest and greatest on which ones lived and 
which ones didn't that'd be great. I see a lot of posts in 2009 about cells 
with many implementations so would be grateful to be pointed in a good 
direction as of 2012 by the cells implementors.

Feature comments:
- Lazy evaluation a must
- Don't care so much about circular dependencies, I have good control over 
that and the domain is inherently hard to trip up in that way
- Parallel evaluation nice but not critical 

Thanks

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

Re: Modelling for DAG with identity map - or not?

2012-09-19 Thread Patrik Sundberg
On Tuesday, September 18, 2012 10:10:35 PM UTC+1, hutch wrote:
>
>
> On 2012-09-16, at 3:21 PM, Patrik Sundberg 
> > 
> wrote:
>
> I'm asking myself though if there's a more functional design for 
> accomplishing the same goals? My main goals are to do things consistently 
> so that changing a value X propagates properly, and being able to find 
> dependencies of a given value. A DAG+identity map is my first take, but 
> there may be something more natural for FP I'm completely missing.
>
>
> Sounds like a reasonable approach to me. There's nothing wrong with state, 
> just how you manipulate it. The STM in Clojure is really nice in this 
> regard. You might want to have a look at Functional Reactive Programming 
> (FRP). There's a lot of stuff available about that in the Haskell 
> community, but usually for UIs and things like that. They sometimes use 
> spread sheets as an example (spread sheets can be thought of as a DAG with 
> values and computations in cells… you can see the mapping between them in 
> your application (where the mapping doesn't work or is hard might be 
> pointing at something quite interesting). There's also something called 
> 'Cells' in Common Lisp that might be interesting. I'm not sure what's been 
> done in Clojure.
>
>
yeah, it's essentially a big mushy complex and persistable "spreadsheet" 
I'm building, that's the right analogy that I tend to use myself (and 
should have done in my post as well to make it easier to follow :)). Thanks 
for the pointers, I'll go check those things out.

btw, after started to play with it turns out records and protocols ends up 
being the convenient way to do it, seems I don't need the flexibility of 
multimethod dispatch + I do end up wanting some per type data to store.

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

Re: [lein] Depending on tools.jar

2012-09-17 Thread Patrik Sundberg
On Monday, September 17, 2012 3:05:57 PM UTC+1, Patrik Sundberg wrote:
>
> On Monday, November 28, 2011 9:52:55 PM UTC, Walter van der Laan wrote:
>>
>> You can add something like this to project.clj:
>> :resources-path "/usr/lib/jvm/java-6-sun/lib/tools.jar"
>>
>> Walter
>>
>
> I found this thread an a couple of other ones relating to the problematic 
> tools.jar and lein 2.
>
> Does anyone have a way to add tools.jar to the classpath for a lein 2 
> managed project?
>
> I'm trying to just do "lein test" for ritz, and getting 
> "java.lang.ClassNotFoundException: com.sun.jdi.VirtualMachine (jdi.clj:1)" 
> since tools.jar not on classpath.
>
> Have had no luck with :resources-path or the other suggestion of symlink 
> in ~/.lein/plugins (which I assume is more a lein1 thing).
>
> I'm on ubuntu 12.04 (openjdk 7 or oracle jdk 7). Any tips welcome!
>
>
Adding this so others can benefit from it:
hugod in the #leiningen irc channel helped me out. One way is to add 
something like this to profile:
https://www.refheap.com/paste/5113
 

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

Re: [lein] Depending on tools.jar

2012-09-17 Thread Patrik Sundberg
On Monday, November 28, 2011 9:52:55 PM UTC, Walter van der Laan wrote:
>
> You can add something like this to project.clj:
> :resources-path "/usr/lib/jvm/java-6-sun/lib/tools.jar"
>
> Walter
>

I found this thread an a couple of other ones relating to the problematic 
tools.jar and lein 2.

Does anyone have a way to add tools.jar to the classpath for a lein 2 
managed project?

I'm trying to just do "lein test" for ritz, and getting 
"java.lang.ClassNotFoundException: com.sun.jdi.VirtualMachine (jdi.clj:1)" 
since tools.jar not on classpath.

Have had no luck with :resources-path or the other suggestion of symlink in 
~/.lein/plugins (which I assume is more a lein1 thing).

I'm on ubuntu 12.04 (openjdk 7 or oracle jdk 7). Any tips welcome!

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

Modelling for DAG with identity map - or not?

2012-09-16 Thread Patrik Sundberg
Hi,

I'm a newbie at clojure and functional programming and I'm toying with the 
idea of switching a project of mine to clojure. Sorry for a long first 
post, and it may also be a bit abstract - but you never know before trying 
:)

In my previous OO prototype the domain is modelled via 2 basic principles:
1. an implicit DAG (directed acyclic graph) is created at runtime as some 
calculations are performed. i.e. calc 1 depends on values X and Y, so build 
that graph. then X depends on A and B, etc.
2. the nodes in the graph are unique, e.g. handled via an identity map. 
i.e. if calculation 1 depends on the leaf 1 and then calculation 2 also 
depends on leaf 1 they point to the same leaf 1. unique in this case means 
either via some unique ID.

The graph fulfils 2 main functions and 1 minor:
1. allows me to start from a given node X and find any nodes below that are 
of type Y (or has name Z or any other node based predicate)
2. do something to value of node X and see how that propagates through the 
graph
3. (minor) only the nodes needing refreshing gets recalculated (as a result 
of 2). i.e. graph works as an implicit and automatic cache. a nice to have 
but performance not my main goal.

My existing prototype is done in jruby via a lot of meta programming and 
voodoo. It still doesn't quite flow perfectly naturally since I can't bend 
the syntax far enough (i.e. the user has to be aware of the existence of 
nodes and distinguish between a node and it's value when I'd like to keep 
all the graph/node stuff under wraps as far as the user is concerned). I 
can see how doing it in clojure I could get all the way to the kind of user 
API I'm looking for (plus performance and java interop would probably be 
better).

The actual problem domain is modelling financial instruments if that makes 
it any more concrete. I.e. the price of security 1 depends on the price of 
security 2 to 1000, out of which half  depends (in different ways) on the 
price of security 1001, which depends on paramter X the input Y of type A. 
Find any dependencies of type A starting at price of security 1, move 
paramter X of any such dependency by epsilon and check the effect of price 
of security 1, only recalculating the parts needed (i.e. security 1001, 
half of the 2-1000 secs, and security 1).

My initial instinct is a design involving 1 graph per thread to start with 
(i.e. using a Var for graph and identity cache), the graph consisting of 
nodes and edges that can be represented as either records or maps, and 
functions attached to nodes for refreshing their values when a child has 
changed (using the values of child nodes). The graph get's created 
implicitly on first evaluation (and extended as one evaluates more nodes, 
and parts could end up rebuilding themselves if one changes some parameters 
etc). I can kind of see how I'd do it. 

A few things bothers me or are unclear:
1. There's quite a lot of state, which feels a bit unclojurey.
2. Implementing the "same" function for different types is not quite clear 
what best way to go is. Looks like multimethods perhaps. i.e. i'd like to 
just call (price secA) and (price secB) and the right thing happens even 
though completely different functions/parts of the graph get evaluated 
depending on the "type" of secA and secB. I don't think I need/want a 
record per type of security so protocols not looking like the way to go.

I'm asking myself though if there's a more functional design for 
accomplishing the same goals? My main goals are to do things consistently 
so that changing a value X propagates properly, and being able to find 
dependencies of a given value. A DAG+identity map is my first take, but 
there may be something more natural for FP I'm completely missing.

Thanks,
Patrik

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