Re: get rid of reflection in proxy-super?

2013-12-26 Thread Colin Fleming
I see. The problem is that you can't tell in advance which methods might be
called with proxy-super, so you'd have to generate proxy-super methods for
all non-public superclass methods. It's an interesting idea. I suspect it's
a fairly tricky change since you'd have to change the method resolution for
the dot form to cope with it, since currently it searches methods in the
superclass - the proxy class is not available at compile time (actually,
I'm not 100% sure on this, I'd need to check the code).

Honestly, I think given that level of hackery and given the requirement to
modify the compiler anyway, I'd go straight for a more sane extend-class
form.


On 27 December 2013 17:49, Cedric Greevey  wrote:

> On Thu, Dec 26, 2013 at 6:57 PM, Colin Fleming <
> colin.mailingl...@gmail.com> wrote:
>
>> The problem is that your approach requires creating the proxy class with
>> the method bodies actually compiled into the body of the proxy class
>> method, they can't be in fns in a proxy map as they are now. This is ok in
>> the case where a method body is just the proxy-super call, but most aren't
>> - they call proxy-super as part of a much larger method. Changing that is a
>> fundamental change to the way proxies work, and IMO would be better served
>> by creating a new form (extend-class or something similar) which would
>> behave in a more similar way to reify but would allow extension.
>>
>
> If you read my previous post carefully, it says that *the proxy-super
> call* (if any) would need to go into the method body. Think something like
> this.
>
> Java:
>
> public class Whatever extends SomeClass {
> public int someMethod (int x, String y) {
> x = fred(x,42);
> int foo = super.someMethod(x, y); // someMethod protected in
> SomeClass
> return mumble(foo, thingy.frotz(x));
> }
> }
>
> proxy (now) (byte code equivalent of):
>
> public class Whatever extends SomeClass {
> public Map proxyMap = ;
>
> public int someMethod (int x, String y) {
> return proxyMap.get("someMethod").invoke(this, x,y);
> }
>
> // And a similar thingy for each additional public-or-protected method
> in SomeClass
> }
>
> public class WhateverSomeMethodVersion1 implements IFn {
> public Object invoke (Whatever th1s, Object x, Object y) {
> x = th1s.fred((int)(Integer)x,42);
>  int foo = Class.forName("SomeClass")
> .getMethod("someMethod", Integer.TYPE, String.class)
> .invoke(th1s, (int)(Integer)x, (String)y); // Eww, reflection,
> slow slow slow
> return th1s.mumble(foo, thingy.frotz((int)(Integer)x));
> }
> }
>
> proxy (proposed) (byte code equivalent of):
>
> public class Whatever extends SomeClass {
> public Map proxyMap = ;
>
> public int proxySuperSomeMethod (Object x, Object y) {
> super.someMethod((int)(Integer)x, (String)y); // Needs .! or
> whatever to emit
> }
>
> // And a similar thingy for each additional protected method in
> SomeClass
>
> public int someMethod (int x, String y) {
> return proxyMap.get("someMethod").invoke(this, x,y);
> }
>
> // And a similar thingy for each additional public-or-protected method
> in SomeClass
> }
>
> public class WhateverSomeMethodVersion1 implements IFn {
> public Object invoke (Whatever th1s, Object x, Object y) {
> x = th1s.fred((int)(Integer)x,42);
> int foo = th1s.proxySuperSomeMethod(x, y);
> return th1s.mumble(foo, thingy.frotz((int)(Integer)x));
> }
> }
>
>
>>  I've considered writing such a thing myself due to the limitations and
>> idiosyncrasies of proxy/genclass but I've not investigated whether it's
>> even possible without hacking the compiler - I suspect it's not.
>>
>
> Not without implementing ".!" (or whatever name you prefer), or adding
> another bytecode emitter specialized to produce proxySuperSomeMethods. I
> guess every proxied class will need a proxy-hook subclass with
>
> --
> --
> 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.
>

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

Re: Is Clojure right for me?

2013-12-26 Thread Sean Corfield
On Thu, Dec 26, 2013 at 8:32 AM, Massimiliano Tomassoli
 wrote:
> Thank you, Malcolm. I'm completely new to LISP and its dialects and I'm a
> little bit worried about the absence of support for OOP in Clojure.

I'm a little late to this thread (it's been one of those days!) but
having read over your posts, I didn't get a good sense of why you are
worried about the absence of support for OOP in Clojure?

Like you, I have 20+ years of OOP experience - including eight years
where I worked on the ANSI C++ Standards Committee - and I've worked
with C++, Java, Groovy, Scala and a few other OOP languages during
that time. I've developed and worked with static analysis tools and
been able to look at millions of lines of code (mostly C++), and seen
all sorts of horrors committed in the name of OOP :)

Before that I worked on C and COBOL compilers, and various C and
assembler projects. And before that I did FP, albeit in an academic
context. For the last three years I've worked increasingly in Clojure.
My team is slowly migrating from an OOP language and a 90Kloc system
to Clojure (where we already have 16Kloc). Adjusting to FP from OOP
can be hard - I've seen a number of Java developers really struggle
with the transition. You might find Prof. Grossman's "Programming
Languages" course (on Coursera) to be illuminating: it starts with
Standard ML, then moves on to Racket, and then finishes with Ruby.
Part of the course looks closely at what both FP and OOP bring to the
table and how they can be viewed as complementary, orthogonal, and in
some ways simply equivalent.

> How do you decompose large systems in Clojure?

I'm curious as to why you think only OOP allows you to decompose large
systems? Between namespaces, protocols, multimethods, ad hoc
hierarchies, and higher order functions, Clojure has a lot of tools
for organizing code...
-- 
Sean A Corfield -- (904) 302-SEAN
An Architect's View -- http://corfield.org/
World Singles, LLC. -- http://worldsingles.com/

"Perfection is the enemy of the good."
-- Gustave Flaubert, French realist novelist (1821-1880)

-- 
-- 
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: get rid of reflection in proxy-super?

2013-12-26 Thread Cedric Greevey
On Thu, Dec 26, 2013 at 6:57 PM, Colin Fleming
wrote:

> The problem is that your approach requires creating the proxy class with
> the method bodies actually compiled into the body of the proxy class
> method, they can't be in fns in a proxy map as they are now. This is ok in
> the case where a method body is just the proxy-super call, but most aren't
> - they call proxy-super as part of a much larger method. Changing that is a
> fundamental change to the way proxies work, and IMO would be better served
> by creating a new form (extend-class or something similar) which would
> behave in a more similar way to reify but would allow extension.
>

If you read my previous post carefully, it says that *the proxy-super call*
(if any) would need to go into the method body. Think something like this.

Java:

public class Whatever extends SomeClass {
public int someMethod (int x, String y) {
x = fred(x,42);
int foo = super.someMethod(x, y); // someMethod protected in
SomeClass
return mumble(foo, thingy.frotz(x));
}
}

proxy (now) (byte code equivalent of):

public class Whatever extends SomeClass {
public Map proxyMap = ;

public int someMethod (int x, String y) {
return proxyMap.get("someMethod").invoke(this, x,y);
}

// And a similar thingy for each additional public-or-protected method
in SomeClass
}

public class WhateverSomeMethodVersion1 implements IFn {
public Object invoke (Whatever th1s, Object x, Object y) {
x = th1s.fred((int)(Integer)x,42);
int foo = Class.forName("SomeClass")
.getMethod("someMethod", Integer.TYPE, String.class)
.invoke(th1s, (int)(Integer)x, (String)y); // Eww, reflection,
slow slow slow
return th1s.mumble(foo, thingy.frotz((int)(Integer)x));
}
}

proxy (proposed) (byte code equivalent of):

public class Whatever extends SomeClass {
public Map proxyMap = ;

public int proxySuperSomeMethod (Object x, Object y) {
super.someMethod((int)(Integer)x, (String)y); // Needs .! or
whatever to emit
}

// And a similar thingy for each additional protected method in
SomeClass

public int someMethod (int x, String y) {
return proxyMap.get("someMethod").invoke(this, x,y);
}

// And a similar thingy for each additional public-or-protected method
in SomeClass
}

public class WhateverSomeMethodVersion1 implements IFn {
public Object invoke (Whatever th1s, Object x, Object y) {
x = th1s.fred((int)(Integer)x,42);
int foo = th1s.proxySuperSomeMethod(x, y);
return th1s.mumble(foo, thingy.frotz((int)(Integer)x));
}
}


> I've considered writing such a thing myself due to the limitations and
> idiosyncrasies of proxy/genclass but I've not investigated whether it's
> even possible without hacking the compiler - I suspect it's not.
>

Not without implementing ".!" (or whatever name you prefer), or adding
another bytecode emitter specialized to produce proxySuperSomeMethods. I
guess every proxied class will need a proxy-hook subclass with

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread Steven D. Arnold

On Dec 26, 2013, at 9:32 AM, Massimiliano Tomassoli  wrote:

> Thank you, Malcolm. I'm completely new to LISP and its dialects and I'm a 
> little bit worried about the absence of support for OOP in Clojure. How do 
> you decompose large systems in Clojure?

That seems like a very intelligent question.  I didn't see that anyone in the 
thread mentioned Brian Marick's book, Functional Programming for the 
Object-Oriented Programmer.  In the book, Marick emulates object-oriented 
programming in Clojure, which not only helps you see the greater flexibility 
you get with Clojure, but also helps you be a better OOP programmer when 
dealing with OOP languages.  I'd definitely recommend the book.

Another book worth checking out is Dmitri Sotnikov's Web Development with 
Clojure, which is a good survey of Clojure web development using Ring and 
Compojure.  It illustrates well the idea of selecting the components you need 
for your web application and pulling them together, as opposed to the idea of a 
single overarching framework.

I am a professional Rails developer and I like Rails.  But I think the 
criticisms leveled against the single-framework model are very legitimate.  If 
you want to do something the framework is not built for, you can spend a lot of 
time trying to work around the framework instead of using it.  The easy things 
are really magically easy, but the hard things are pretty hard.

Having said all that, here's what I really love about Clojure.  Like Ruby and 
Rails, you can start off with an amorphous, ill-defined idea that you are 
prototyping.  You can put it together, realize you had a lot of misconceptions 
(about the problem, the product, what people want, etc), and easily shift your 
assumptions.

But Clojure shifts from Ruby and Rails when your idea matures and the 
invariants of your application settle.  Clojure's tools give you more assurance 
of correctness when your app increasingly takes shape.  Functional programming 
and immutability save you from whole classes of really fun state problems.  
Pure functions give you testability and transparency that are rarely seen in 
Rails apps.  You can gradually add types to your arguments and return values 
(https://github.com/clojure/core.typed), thereby gaining much of the safety of 
statically-typed languages.  You can use contracts 
(https://github.com/clojure/core.contracts) to ensure that your assumptions are 
always met, both regarding parameters and results of your functions.  You can 
elegantly address all the possible cases of a set of parameters using matching 
(e.g. matchjure, https://github.com/dcolthorp/matchure/).  Argument 
pattern-matching and destructuring is a fabulous tool and you really have to 
use it a little to realize how handy it is.

In short, Clojure gives you all you need for prototyping, and when your idea 
jells out, you can tighten it down tremendously and expect fewer late-night 
phone calls where the app is breaking.  Your software is simply more stable and 
correct, with less effort.  Yet, you didn't have to pay the static-typing toll 
up front, when you needed the freedom and flexibility to try different things.

I don't know if Clojure is ultimately right for you.  But I can say with no 
doubt that learning Clojure will grow you as a software developer, and you 
won't be sorry you spent the time to get to know the language and the Clojure 
way of thinking.

Good luck,
steven

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread Mark Engelberg
One reason it might not be clear what I'm driving it is that in trying to
create a minimalist example, I used grid dimensions, and in reality, you'd
probably know right away to put something like that in a data structure,
and pass it around to all your functions.

Try to imagine that at the beginning of your project, you really do believe
that you're only going to ever be working with 3x4 grids, and then later,
you realize that's not the case.

In the early phase, it's very easy to construct a bunch of functions that
all refer to those shared vars (in my example `rows` and `cols`).  Later,
when you realize rows and cols can change, making those names parameters is
a major overhaul to the codebase.  I believe that most Clojurians try to
delay the refactoring by using `binding` to alter those vars.  But that's a
fragile strategy, and eventually the code typically needs to be rewritten.



On Thu, Dec 26, 2013 at 7:04 PM, Mark Engelberg wrote:

> Does this OO pseudocode help clarify at all?
> https://gist.github.com/Engelberg/8142000
>
> On Thu, Dec 26, 2013 at 6:27 PM, Stuart Halloway <
> stuart.hallo...@gmail.com> wrote:
>
>> Hi Mark,
>>
>> I am not following your example.  Can you post (pseudocode fine) what a
>> good OO impl would look like, and why Clojure's defrecords can't do
>> something similar?
>>
>> Stu
>>
>>

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread Mark Engelberg
Does this OO pseudocode help clarify at all?
https://gist.github.com/Engelberg/8142000

On Thu, Dec 26, 2013 at 6:27 PM, Stuart Halloway
wrote:

> Hi Mark,
>
> I am not following your example.  Can you post (pseudocode fine) what a
> good OO impl would look like, and why Clojure's defrecords can't do
> something similar?
>
> Stu
>
>

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread Stuart Halloway
Hi Mark,

I am not following your example.  Can you post (pseudocode fine) what a
good OO impl would look like, and why Clojure's defrecords can't do
something similar?

Stu



On Thu, Dec 26, 2013 at 9:08 PM, Mark Engelberg wrote:

> I do like the way Clojure steers you away from all sorts of unnecessary
> OO-nonsense, and provides most of the raw capabilities of OO in other forms.
>
> However, even if you avoid mutable state, inheritance, and polymorphism,
> Classes/objects make great namespaces, and Clojure's namespaces can't do
> everything classes can do, for example, cyclic dependencies.  This was the
> subject of my blog post yesterday.  Take a look at the following gist code
> for one of the scenarios that frequently drives me up a wall:
>
> https://gist.github.com/Engelberg/8141352
>
> I'd love to hear any tricks you guys use to deal with situations like this
> in your own code.
>
> --
> --
> 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.
>

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread Mark Engelberg
I do like the way Clojure steers you away from all sorts of unnecessary
OO-nonsense, and provides most of the raw capabilities of OO in other forms.

However, even if you avoid mutable state, inheritance, and polymorphism,
Classes/objects make great namespaces, and Clojure's namespaces can't do
everything classes can do, for example, cyclic dependencies.  This was the
subject of my blog post yesterday.  Take a look at the following gist code
for one of the scenarios that frequently drives me up a wall:

https://gist.github.com/Engelberg/8141352

I'd love to hear any tricks you guys use to deal with situations like this
in your own code.

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread Luc Prefontaine
This depends strictly on your learning speed which I will
not comment here :)

It took me three months full time to start to feel at ease with
Clojure writing production code and I was around 45 years
old at the time.

Learning is never inefficient... when you want to learn.

Luc P 


> On Thursday, December 26, 2013 11:04:00 PM UTC+1, Luc wrote:
> >
> > Ok I'll drop the subject. Still cannot understand why people cannot 
> > try something new w/o sticking to the stuff they know already until they 
> > are 
> > totally immersed in the new thing. And by that I mean use the new thing as 
> > it was intended. 
> >
> > Then you can generate useful conclusions and get some benefits from 
> > this learning process. 
> >
> 
> Learning every single language just to find the right one is not very 
> time-efficient.
> 
> -- 
> -- 
> 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.
> 
--
Luc Prefontaine 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/groups/opt_out.


Re: Clojure can't import some Java classes

2013-12-26 Thread Colin Fleming
In case anyone is interested in a workaround for this, I managed to "fix"
my compilation by stubbing out the problematic classes and putting the
stubs ahead of the real classes in the classpath when I compile. Where
those stubs return other objects that are required during static
initialisation, I create those classes with Mockito. I feel dirty all over
but it does work.

I'm also tinkering with a fork of Clojure in the background that uses ASM
Types instead of Class objects. It's still a long way from done but it's
looking like that might provide a solution for compilation, at least. I'll
report back if I ever get it working.


On 15 December 2013 14:05, Colin Fleming wrote:

> I've just spent some time today looking at the compiler code, and
> unfortunately I think the answer is "no". When a symbol is imported,
> Clojure currently instantiates the Class object using Class.forName() and
> stores that in the namespace's mapping. At the point the Class is
> instantiated, static initializers are run. So the only way to avoid that is
> not instantiate the Class and store something else in the mapping.
>
> Alex's suggestion above to store the string representing the class name
> and load the class on demand might work for REPL style development but
> won't work for AOT compilation since reflection is used to find fields,
> methods etc on the class during compilation. The only solution that I can
> see that would work for AOT would be to store some sort of class wrapper
> object which reads the class bytecode to get that information without
> instantiating the class.
>
> However both of these suggestions break a fairly fundamental assumption -
> that importing a class creates a mapping from its name to a Class object. I
> have no idea what sort of code might be out there making that assumption,
> but it's probably fair to assume there could be a lot of it. At some point
> I might look into creating a fork of Clojure I just use to AOT compile.
>
>
> On 12 December 2013 03:41, Robin Heggelund Hansen wrote:
>
>> Is this something that is fixable?
>>
>> --
>> --
>> 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.
>>
>
>

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread Massimiliano Tomassoli
On Thursday, December 26, 2013 10:00:46 PM UTC+1, James Reeves wrote:
>
> On 26 December 2013 19:53, Massimiliano Tomassoli 
> 
> > wrote:
>>
>> Why implicit? Objects communicate through well-defined channels. OOP can 
>> certainly be misused but it served me well for over 20 years (C++/C#). And 
>> Scala proves that FP and OOP are orthogonal paradigms. I can't see how the 
>> lack of OOP is a good thing for Clojure, honestly. I'm willing to give up 
>> mutability because I never programmed that way and I believe it can be a 
>> good thing (after I get used to it), but giving up OOP means going back to 
>> something I already know and I don't like.
>>
>
> Clojure provides all the functionality of OOP, but separated into 
> specialised tools.
>
> For grouping functions, we have namespaces. For polymorphism, we have 
> multimethods and protocols. For encapsulation there are closures, and for 
> inheritance we have the "derive" and "isa?" functions.
>
> I've worked with OOP systems for over a decade, but it wasn't until I 
> started using Clojure that really started to understand the separate pieces 
> of functionality that OOP bundles together. I found that there were some 
> pieces I used regularly (such as namespaces), some pieces I used 
> occasionally (polymorphism), and some pieces I didn't use at all 
> (encapsulation and inheritance).
>
> Clojure emphasises "simplicity", which in this case means should aim for 
> tools that perform specific tasks, rather than tools that attempt to tackle 
> everything at once. This is why Clojure doesn't have OOP, because Clojure 
> prefers having a diverse toolbox of individual tools, rather than a single 
> generic tool that acts as a swiss army knife.
>
> Clojure also rejects the idea that we should hide data structures behind 
> an API (i.e. encapsulation). This is the opposite of OOP doctrine, which 
> suggests that data structures need to be hidden to prevent constant 
> refactoring. In practise, I find I need to refactor *less* with Clojure, 
> while at the same time avoiding the need to hide information, and the 
> repetition that comes with having to re-implement part of the functionality 
> of a map, every time I build an object.
>
> When I started using Clojure, I almost started on an OOP system for it. 
> Within a few weeks, I began to understand that wasn't necessary. After 5 
> years, I'm very much sold on Clojure's methodology.
>
> I suspect I'm not alone in this, otherwise there would be at least a dozen 
> OO systems for Clojure. To my knowledge, there are zero so far. 
>

OK, I'll give Clojure a try. Thanks for your time.

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread James Reeves
On 27 December 2013 00:16, Massimiliano Tomassoli wrote:

> On Thursday, December 26, 2013 11:04:00 PM UTC+1, Luc wrote:
>>
>> Ok I'll drop the subject. Still cannot understand why people cannot
>> try something new w/o sticking to the stuff they know already until they
>> are
>> totally immersed in the new thing. And by that I mean use the new thing
>> as
>> it was intended.
>>
>> Then you can generate useful conclusions and get some benefits from
>> this learning process.
>>
>
> Learning every single language just to find the right one is not very
> time-efficient.
>

There are a lot of programming languages, but you can get a good overview
from just few. If I had to pick just four to provide a reasonable spread of
ideas, I'd suggest Scheme, C, Smalltalk and Haskell. In my very subjective
estimation, Clojure sits somewhere between Scheme and Haskell.

However, assuming you don't want to spend several months researching
interesting programming languages, let me see if I can make an argument
against OOP that requires a little less background reading :)

Clojure has been around for over six years now, and has all the components
necessary to construct an object system. It would take maybe a few hours to
build a library for Clojure that provide support for OOP. To the best of my
knowledge, however, no-one has. If OOP was a particularly useful paradigm,
why the lack of interest in reproducing it in Clojure? Perhaps it's worth
investigating how Clojure manages without it?

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


Re: Is Clojure right for me?

2013-12-26 Thread Massimiliano Tomassoli
On Thursday, December 26, 2013 10:04:21 PM UTC+1, Luc wrote:
>
> a) encapsulation of unmutable state ? What for ? 
> b) inheritance ? see a) 
> c) polymorphism ? Multimethods (which are more flexible) or protocols 
>
> Nice words but not much else. 
>
> Comparing C versus C++ is fair but this comparison does not relate at all 
> to 
> Clojure, it's like answering "blue" to the question 
> "which even number sits between 1 and 3 ?" 
>
> I am still waiting for an answer to my previous post btwy... 
>
 
I did answer to your post.

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread Massimiliano Tomassoli
On Thursday, December 26, 2013 11:04:00 PM UTC+1, Luc wrote:
>
> Ok I'll drop the subject. Still cannot understand why people cannot 
> try something new w/o sticking to the stuff they know already until they 
> are 
> totally immersed in the new thing. And by that I mean use the new thing as 
> it was intended. 
>
> Then you can generate useful conclusions and get some benefits from 
> this learning process. 
>

Learning every single language just to find the right one is not very 
time-efficient.

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread Massimiliano Tomassoli
On Thursday, December 26, 2013 10:26:11 PM UTC+1, Gary Trakhman wrote:
>
> "If I were to implement something (complex enough) in C and C++ the 
> differences between my implementations would be far from superficial."
>
> Those are both inexpressive in different ways.  In my opinion java is 
> closer to lisp than C++, given garbage collection, closures (even faked by 
> objects), reflection (code-as-data), classloading (eval).
>

You can do metaprogramming in C++ (with templates, which are 
Turing-complete) and now it supports closures and many other things. 
Unfortunately, it's become too complex. D would be a better choice if only 
it was more popular.

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread Alexander Hudek
You can define vars to be private to a namespace in clojure, thus 
preventing (1). In practice, I've found that (2) never comes up. 
Ultimately, you won't truly appreciate what is being said in this 
conversation without giving it a chance and trying it out. 

On Thursday, December 26, 2013 4:02:49 PM UTC-5, Massimiliano Tomassoli 
wrote:
>
> On Thursday, December 26, 2013 9:18:06 PM UTC+1, Luc wrote:
>>
>> Now you could create un mutable 
>> objects but then why bother 
>> creating classes with hidden 
>> behaviours if there is no hidden 
>> state ? 
>>
>
> The state is still hidden. Even if the state is immutable:
> 1) other code could access it and, thus, changing the inner working of 
> your class would break that code;
> 2) other code could create a new instance of your class with inconsistent 
> internal state.
> As you can see, immutability is totally orthogonal to object orientation. 
> Encapsulation is still useful, as are inheritance and polymorphism.
>

-- 
-- 
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: get rid of reflection in proxy-super?

2013-12-26 Thread Colin Fleming
The problem is that your approach requires creating the proxy class with
the method bodies actually compiled into the body of the proxy class
method, they can't be in fns in a proxy map as they are now. This is ok in
the case where a method body is just the proxy-super call, but most aren't
- they call proxy-super as part of a much larger method. Changing that is a
fundamental change to the way proxies work, and IMO would be better served
by creating a new form (extend-class or something similar) which would
behave in a more similar way to reify but would allow extension. I've
considered writing such a thing myself due to the limitations and
idiosyncrasies of proxy/genclass but I've not investigated whether it's
even possible without hacking the compiler - I suspect it's not.


On 27 December 2013 11:20, Cedric Greevey  wrote:

> I'd suggest instead amending the core language to add a special form,
> maybe named .!, that works like . except it sees protected methods (and
> will cause an IllegalAccessError if it calls a protected method from
> outside of a subclass), and amend proxy to use .! for proxy-super (and put
> the proxy-super call in the method body and not in the fn that the rest of
> the proxy body goes into, which will avoid IllegalAccessError but make it
> so that on-the-fly modification of the proxy can't change the proxy-super
> part).
>
>
> On Wed, Dec 25, 2013 at 3:04 PM, Colin Fleming <
> colin.mailingl...@gmail.com> wrote:
>
>> Right, it doesn't fix your original problem of the reflection warning.
>> Thinking about it, there's no way to get rid of that warning since in the
>> end all interop (unless it uses a built in form) must expand to the dot
>> form, which has no way to call a protected method. The only solution I can
>> see would be to derive a Java class from JPanel and just override
>> paintComponent and make it public, then you can proxy that class.
>>
>>
>> On 25 December 2013 23:14, Jim - FooBar();  wrote:
>>
>>>  Thanks Colin, I did vote for it but its title implies something
>>> different...something  restoring original binding on exception...
>>>
>>> Jim
>>>
>>>
>>>
>>> On 25/12/13 04:06, Colin Fleming wrote:
>>>
>>> That is indeed the same issue, and it even includes a patch with a test!
>>> I've voted for this one, please consider doing the same if this issue has
>>> caught you. Link: http://dev.clojure.org/jira/browse/CLJ-983
>>>
>>>
>>> On 25 December 2013 13:22, Matching Socks  wrote:
>>>
 (Re Colin's note that a proxy gets damaged if super throws - goodness
 gracious!  Is it the same matter as Clojure Jira issue No.983?  It's marked
 as "minor" and affecting Clojure 1.3, and no one has voted for it.)


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

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

Re: Is Clojure right for me?

2013-12-26 Thread Alex Baranosky
http://preview.getprismatic.com/news/home


On Thu, Dec 26, 2013 at 2:42 PM, john walker wrote:

> clojurekoans.com uses Joodo.
>
> https://github.com/slagyr/joodo
>
> What are some other cool sites powered by Clojure?
>
>
> On Wednesday, December 25, 2013 4:06:20 PM UTC-5, Massimiliano Tomassoli
> wrote:
>>
>> Hi,
>> I'm not sure if Clojure is the right language for me. I'd like to use
>> Clojure mainly for web development but I don't know if it's already mature
>> enough to be productive. For instance, Scala has Play, Groovy has Grails,
>> etc... If I'm not wrong, Clojure doesn't have a well-established framework
>> for web development. I'm intrigued by Clojure because I like functional
>> programming, but I need to be productive and, alas, I don't have time to
>> learn Clojure just for my pleasure.
>>
>  --
> --
> 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.
>

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread john walker
clojurekoans.com uses Joodo.

https://github.com/slagyr/joodo

What are some other cool sites powered by Clojure?

On Wednesday, December 25, 2013 4:06:20 PM UTC-5, Massimiliano Tomassoli 
wrote:
>
> Hi,
> I'm not sure if Clojure is the right language for me. I'd like to use 
> Clojure mainly for web development but I don't know if it's already mature 
> enough to be productive. For instance, Scala has Play, Groovy has Grails, 
> etc... If I'm not wrong, Clojure doesn't have a well-established framework 
> for web development. I'm intrigued by Clojure because I like functional 
> programming, but I need to be productive and, alas, I don't have time to 
> learn Clojure just for my pleasure.
>

-- 
-- 
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: get rid of reflection in proxy-super?

2013-12-26 Thread Cedric Greevey
I'd suggest instead amending the core language to add a special form, maybe
named .!, that works like . except it sees protected methods (and will
cause an IllegalAccessError if it calls a protected method from outside of
a subclass), and amend proxy to use .! for proxy-super (and put the
proxy-super call in the method body and not in the fn that the rest of the
proxy body goes into, which will avoid IllegalAccessError but make it so
that on-the-fly modification of the proxy can't change the proxy-super
part).


On Wed, Dec 25, 2013 at 3:04 PM, Colin Fleming
wrote:

> Right, it doesn't fix your original problem of the reflection warning.
> Thinking about it, there's no way to get rid of that warning since in the
> end all interop (unless it uses a built in form) must expand to the dot
> form, which has no way to call a protected method. The only solution I can
> see would be to derive a Java class from JPanel and just override
> paintComponent and make it public, then you can proxy that class.
>
>
> On 25 December 2013 23:14, Jim - FooBar();  wrote:
>
>>  Thanks Colin, I did vote for it but its title implies something
>> different...something  restoring original binding on exception...
>>
>> Jim
>>
>>
>>
>> On 25/12/13 04:06, Colin Fleming wrote:
>>
>> That is indeed the same issue, and it even includes a patch with a test!
>> I've voted for this one, please consider doing the same if this issue has
>> caught you. Link: http://dev.clojure.org/jira/browse/CLJ-983
>>
>>
>> On 25 December 2013 13:22, Matching Socks  wrote:
>>
>>> (Re Colin's note that a proxy gets damaged if super throws - goodness
>>> gracious!  Is it the same matter as Clojure Jira issue No.983?  It's marked
>>> as "minor" and affecting Clojure 1.3, and no one has voted for it.)
>>>
>>>
>>>   --
>>> --
>>> 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.
>>>
>>
>>  --
>> --
>> 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.
>>
>>
>>  --
>> --
>> 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.
>>
>
>  --
> --
> 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.
>

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

Re: How to go about 'proving' why dynamically typed languages are better.

2013-12-26 Thread Cedric Greevey
On Tue, Dec 24, 2013 at 12:23 PM, Rich Morin  wrote:

> On Dec 24, 2013, at 02:09, Cedric Greevey wrote:
> > On Mon, Dec 23, 2013 at 7:37 PM, Rich Morin  wrote:
> >   Media for Thinking the Unthinkable:
> >   Designing a new medium for science and engineering
> >   http://worrydream.com/MediaForThinkingTheUnthinkable/
> >
> > Is this available in a form that is skimmable, is greppable, is cheap
> for mobile users, can be perused at leisure, fits on a thumb drive, is
> convertible for Kindle use, and doesn't require installing and enabling
> notoriously insecure browser plugins to view, or is it only available as
> video? :(
>
> There is a video presentation, which could be downloaded and watched
> at leisure (eg, on a smart phone).  I don't think this presents any
> security issues.
>

Oh, I don't doubt that the *video* doesn't present any security issues.
It's the Flash plugin needed to watch it that presents security issues.

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread Softaddicts
Ok I'll drop the subject. Still cannot understand why people cannot
try something new w/o sticking to the stuff they know already until they are
totally immersed in the new thing. And by that I mean use the new thing as
it was intended.

Then you can generate useful conclusions and get some benefits from
this learning process.

I was just teasing a bit :) If I were to be combative, it would be much worse :)

Luc P.


> On 26 Dec 2013 21:04, "Softaddicts"  wrote:
> >
> > a) encapsulation of unmutable state ? What for ?
> > b) inheritance ? see a)
> > c) polymorphism ? Multimethods (which are more flexible) or protocols
> >
> > Nice words but not much else.
> >
> > Comparing C versus C++ is fair but this comparison does not relate at all
> to
> > Clojure, it's like answering "blue" to the question
> > "which even number sits between 1 and 3 ?"
> >
> > I am still waiting for an answer to my previous post btwy...
> 
> Let's be nice. We're supposed to have a welcoming community, not a
> combative one :)
> 
> - 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/groups/opt_out.
> 
--
Softaddicts sent by ibisMail from my ipad!

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread Gary Trakhman
"If I were to implement something (complex enough) in C and C++ the
differences between my implementations would be far from superficial."

Those are both inexpressive in different ways.  In my opinion java is
closer to lisp than C++, given garbage collection, closures (even faked by
objects), reflection (code-as-data), classloading (eval).


On Thu, Dec 26, 2013 at 9:15 AM, James Reeves  wrote:

>
> On 26 Dec 2013 21:04, "Softaddicts"  wrote:
> >
> > a) encapsulation of unmutable state ? What for ?
> > b) inheritance ? see a)
> > c) polymorphism ? Multimethods (which are more flexible) or protocols
> >
> > Nice words but not much else.
> >
> > Comparing C versus C++ is fair but this comparison does not relate at
> all to
> > Clojure, it's like answering "blue" to the question
> > "which even number sits between 1 and 3 ?"
> >
> > I am still waiting for an answer to my previous post btwy...
>
> Let's be nice. We're supposed to have a welcoming community, not a
> combative one :)
>
> - 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/groups/opt_out.
>

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread James Reeves
On 26 Dec 2013 21:04, "Softaddicts"  wrote:
>
> a) encapsulation of unmutable state ? What for ?
> b) inheritance ? see a)
> c) polymorphism ? Multimethods (which are more flexible) or protocols
>
> Nice words but not much else.
>
> Comparing C versus C++ is fair but this comparison does not relate at all
to
> Clojure, it's like answering "blue" to the question
> "which even number sits between 1 and 3 ?"
>
> I am still waiting for an answer to my previous post btwy...

Let's be nice. We're supposed to have a welcoming community, not a
combative one :)

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


Re: Is Clojure right for me?

2013-12-26 Thread Softaddicts
a) encapsulation of unmutable state ? What for ?
b) inheritance ? see a)
c) polymorphism ? Multimethods (which are more flexible) or protocols

Nice words but not much else.

Comparing C versus C++ is fair but this comparison does not relate at all to 
Clojure, it's like answering "blue" to the question 
"which even number sits between 1 and 3 ?"

I am still waiting for an answer to my previous post btwy...

Luc P.

> On Thursday, December 26, 2013 9:01:56 PM UTC+1, HamsterofDeath wrote:
> >
> > exactly which part of OOP is missing in clojure that you would like to use?
> > if you took my java code and ported it to clojure, the main difference 
> > would be (a b) instead of b.a , but the main design would be similar
> >
> 
> How can that be? What about encapsulation, inheritance and polymorphism? 
> OOP is not just syntactic sugar.
> If I were to implement something (complex enough) in C and C++ the 
> differences between my implementations would be far from superficial.
> 
> -- 
> -- 
> 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.
> 
--
Softaddicts sent by ibisMail from my ipad!

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread Massimiliano Tomassoli
On Thursday, December 26, 2013 9:18:06 PM UTC+1, Luc wrote:
>
> Now you could create un mutable 
> objects but then why bother 
> creating classes with hidden 
> behaviours if there is no hidden 
> state ? 
>

The state is still hidden. Even if the state is immutable:
1) other code could access it and, thus, changing the inner working of your 
class would break that code;
2) other code could create a new instance of your class with inconsistent 
internal state.
As you can see, immutability is totally orthogonal to object orientation. 
Encapsulation is still useful, as are inheritance and polymorphism.

-- 
-- 
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: [ANN] Clojure.Joda-Time 0.1.0

2013-12-26 Thread dm3

>
>
> It looks good, though can you explain the rationale for having a separate 
> library? It seems from my perspective as if the objective of exposing all 
> the good Joda functionality for Clojure consumption would be more readily 
> achieved by extending the existing clj-time library.


I chose to write it as a separate library because the approach to wrapping 
JodaTime API is quite different from clj-time. Clj-time is opinionated in 
the sense that it puts DateTimes in the UTC time zone at the center of the 
API. Clojure.joda-time on the other hand doesn't force time zones in 
date-times and provides a rich support for partials 
(LocalDate/LocalDateTime) which should be used when time zones are 
irrelevant.

I agree that having one JodaTime wrapper would be quite enough, but 
clojure.joda-time grew out of my frustration with a couple of bugs I got 
while using clj-time (yes, I didn't expect date-times in the UTC time zone 
by default, and yes, I know that I should be blamed for not reading the 
documentation :)).

In any case, having released the thing, I would be interested in unifying 
the APIs with clj-time and merging into a single project.

I think your usage of simple check is interesting.  What bugs did 
> simple-check find inside Joda and can you speak about that process in 
> general?


Simple-check found a bunch of bugs with Partials, mainly concerning the 
rarely used DateTimeFieldTypes such as era, yearOfCentury, weekyear, etc. Also 
a couple of edge cases with DateTime properties.

Interestingly, the bugs were found not in the properties themselves, as 
properties checked the code I wrote which is quite simple, but in the 
generators. And let me say, debugging generators is a PITA. 

The process of writing properties is quite simple, just think of a property 
and write it in code :) The harder part is defining generators for the data 
fed into the properties. Now that I think of it, it would probably be 
useful to clean up the generators and publish them separately to enable 
people writing more simple-check specifications when interacting with 
JodaTime...

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread James Reeves
On 26 December 2013 19:53, Massimiliano Tomassoli wrote:
>
> Why implicit? Objects communicate through well-defined channels. OOP can
> certainly be misused but it served me well for over 20 years (C++/C#). And
> Scala proves that FP and OOP are orthogonal paradigms. I can't see how the
> lack of OOP is a good thing for Clojure, honestly. I'm willing to give up
> mutability because I never programmed that way and I believe it can be a
> good thing (after I get used to it), but giving up OOP means going back to
> something I already know and I don't like.
>

Clojure provides all the functionality of OOP, but separated into
specialised tools.

For grouping functions, we have namespaces. For polymorphism, we have
multimethods and protocols. For encapsulation there are closures, and for
inheritance we have the "derive" and "isa?" functions.

I've worked with OOP systems for over a decade, but it wasn't until I
started using Clojure that really started to understand the separate pieces
of functionality that OOP bundles together. I found that there were some
pieces I used regularly (such as namespaces), some pieces I used
occasionally (polymorphism), and some pieces I didn't use at all
(encapsulation and inheritance).

Clojure emphasises "simplicity", which in this case means should aim for
tools that perform specific tasks, rather than tools that attempt to tackle
everything at once. This is why Clojure doesn't have OOP, because Clojure
prefers having a diverse toolbox of individual tools, rather than a single
generic tool that acts as a swiss army knife.

Clojure also rejects the idea that we should hide data structures behind an
API (i.e. encapsulation). This is the opposite of OOP doctrine, which
suggests that data structures need to be hidden to prevent constant
refactoring. In practise, I find I need to refactor *less* with Clojure,
while at the same time avoiding the need to hide information, and the
repetition that comes with having to re-implement part of the functionality
of a map, every time I build an object.

When I started using Clojure, I almost started on an OOP system for it.
Within a few weeks, I began to understand that wasn't necessary. After 5
years, I'm very much sold on Clojure's methodology.

I suspect I'm not alone in this, otherwise there would be at least a dozen
OO systems for Clojure. To my knowledge, there are zero so far.

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


Re: Is Clojure right for me?

2013-12-26 Thread Gary Trakhman
Encapsulation:
a) I don't miss it.
b) Functions/private-namespaces/maps/deftypes can serve this purpose.

Inheritance:
Clojure provides ad-hoc hierarchies, which give you the desired tree
structure of a type-hierarchy, but it is decoupled from implementation
details.  You can inherit implementations in lots of ways in clojure.  The
simplest conceptually in my mind is simply a hash-map of keys to functions.
 Once you start doing it, the question shifts to "do you need a 'this'
pointer"? 'this' makes a first argument to a pure function implicit. In
most cases, you don't need it.  If you do need it, deftypes or records can
fill in the gap.  Records and deftypes also participate in protocols, which
provides...

Polymorphism:
Single-dispatch is a degenerate case of more generalized multiple dispatch,
which we have via multi-methods.  It turns out that JVMs are pretty good at
it, but conceptually I think of 'dispatching on the type' as an
implementation detail or optimization, not something to build a language
around (java, C++, ...).  Protocols give this kind of fast-implementation
polymorphism back to you in a decoupled form.  Reify/proxy are just so
darned convenient, both with JVM interfaces and clojure protocols.

There's nothing missing here, it's just disassembled and presented back to
you in pieces as part of a practical and philosophical argument.  This is
the 'design by decoupling' thought.

What _is_ missing here is an actually helpful static type-system (there's
WIP), but immutable data is the best glue for a dynamic one, in my opinion,
as it provides easy isolation of components.  I don't miss java's, that's
for sure.

Some things that didn't look like syntactic sugar will start to look like
syntactic sugar once you get deep into compiler internals and macros :-).
 Lisp broke me in this way, but I like it.


On Thu, Dec 26, 2013 at 8:32 AM, Massimiliano Tomassoli
wrote:

> On Thursday, December 26, 2013 9:01:56 PM UTC+1, HamsterofDeath wrote:
>>
>> exactly which part of OOP is missing in clojure that you would like to
>> use?
>> if you took my java code and ported it to clojure, the main difference
>> would be (a b) instead of b.a , but the main design would be similar
>>
>
> How can that be? What about encapsulation, inheritance and polymorphism?
> OOP is not just syntactic sugar.
> If I were to implement something (complex enough) in C and C++ the
> differences between my implementations would be far from superficial.
>
> --
> --
> 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.
>

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread Massimiliano Tomassoli
On Thursday, December 26, 2013 9:01:56 PM UTC+1, HamsterofDeath wrote:
>
> exactly which part of OOP is missing in clojure that you would like to use?
> if you took my java code and ported it to clojure, the main difference 
> would be (a b) instead of b.a , but the main design would be similar
>

How can that be? What about encapsulation, inheritance and polymorphism? 
OOP is not just syntactic sugar.
If I were to implement something (complex enough) in C and C++ the 
differences between my implementations would be far from superficial.

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread Luc Prefontaine
Agree, classes are not simple
structures, they carry internal
mutable state and hidden behaviours.

Compounding mutable objects
creates a huge brittled context were 
system state at any given point in 
time is untraceable by a normal 
human brain except in simplistic
systems.

Now you could create un mutable
objects but then why bother
creating classes with hidden 
behaviours if there is no hidden
state ?

Please explain then the advantage
of using classes in this context
versus name spaces to delimit
concerns with high order functions ?

How can you stick to both things
at the same time ?

Luc P.

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


Re: Is Clojure right for me?

2013-12-26 Thread Jeff Heon


On Thursday, December 26, 2013 11:32:51 AM UTC-5, Massimiliano Tomassoli 
wrote:
>
> Thank you, Malcolm. I'm completely new to LISP and its dialects and I'm a 
> little bit worried about the absence of support for OOP in Clojure. How do 
> you decompose large systems in Clojure?
>

This presentation has been really helpful in that regard for me:
Clojure in the 
Large
 

Even though Clojure is not OOP in the way Java is, you can go a long way 
with Protocols and namespaces, imho.

-- 
-- 
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: Clojure.org: Concurrency screencast 404

2013-12-26 Thread Alex Miller
Which page had the link?

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread Dennis Haupt
exactly which part of OOP is missing in clojure that you would like to use?
if you took my java code and ported it to clojure, the main difference
would be (a b) instead of b.a , but the main design would be similar


2013/12/26 Massimiliano Tomassoli 

> On Thursday, December 26, 2013 7:51:39 PM UTC+1, James Reeves wrote:
>
>> On 26 December 2013 16:32, Massimiliano Tomassoli wrote:
>>
>>> Thank you, Malcolm. I'm completely new to LISP and its dialects and I'm
>>> a little bit worried about the absence of support for OOP in Clojure. How
>>> do you decompose large systems in Clojure?
>>>
>>
>> You write functions. To quote Alan J. Perlis:
>>
>> It is better to have 100 functions operate on one data structure than to
>>> have 10 functions operate on 10 data structures.
>>>
>>
> Classes or objects are not simple data structures.
>
>
>> IMO, OOP just makes it harder to build modular systems, because OOP
>> involves a lot of implicit connections between components. Clojure, and
>> other functional languages, tend to emphasise isolation more.
>>
>
> Why implicit? Objects communicate through well-defined channels. OOP can
> certainly be misused but it served me well for over 20 years (C++/C#). And
> Scala proves that FP and OOP are orthogonal paradigms. I can't see how the
> lack of OOP is a good thing for Clojure, honestly. I'm willing to give up
> mutability because I never programmed that way and I believe it can be a
> good thing (after I get used to it), but giving up OOP means going back to
> something I already know and I don't like.
>
> --
> --
> 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.
>

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread Massimiliano Tomassoli
On Thursday, December 26, 2013 7:51:39 PM UTC+1, James Reeves wrote:
>
> On 26 December 2013 16:32, Massimiliano Tomassoli 
> 
> > wrote:
>
>> Thank you, Malcolm. I'm completely new to LISP and its dialects and I'm a 
>> little bit worried about the absence of support for OOP in Clojure. How do 
>> you decompose large systems in Clojure?
>>
>
> You write functions. To quote Alan J. Perlis:
>
> It is better to have 100 functions operate on one data structure than to 
>> have 10 functions operate on 10 data structures.
>>
>
Classes or objects are not simple data structures.
 

> IMO, OOP just makes it harder to build modular systems, because OOP 
> involves a lot of implicit connections between components. Clojure, and 
> other functional languages, tend to emphasise isolation more.
>

Why implicit? Objects communicate through well-defined channels. OOP can 
certainly be misused but it served me well for over 20 years (C++/C#). And 
Scala proves that FP and OOP are orthogonal paradigms. I can't see how the 
lack of OOP is a good thing for Clojure, honestly. I'm willing to give up 
mutability because I never programmed that way and I believe it can be a 
good thing (after I get used to it), but giving up OOP means going back to 
something I already know and I don't like.

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread James Reeves
On 26 December 2013 16:32, Massimiliano Tomassoli wrote:

> Thank you, Malcolm. I'm completely new to LISP and its dialects and I'm a
> little bit worried about the absence of support for OOP in Clojure. How do
> you decompose large systems in Clojure?
>

You write functions. To quote Alan J. Perlis:

It is better to have 100 functions operate on one data structure than to
> have 10 functions operate on 10 data structures.
>

IMO, OOP just makes it harder to build modular systems, because OOP
involves a lot of implicit connections between components. Clojure, and
other functional languages, tend to emphasise isolation more.

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


Re: [ANN] Clojure.Joda-Time 0.1.0

2013-12-26 Thread Ghadi Shayban
I think your usage of simple check is interesting.  What bugs did 
simple-check find inside Joda and can you speak about that process in 
general?

On Wednesday, December 25, 2013 6:19:18 AM UTC-5, dm3 wrote:
>
> Hello,
>
> I would like to announce the first release of 
> Clojure.Joda-Time - 
> an ambitiously named wrapper for the Joda-Time date and time library.
>
> Main goals of Clojure.Joda-Time:
>
> * Provide a consistent API for common operations with instants, 
> date-times, periods, partials and intervals.
> * Provide an escape hatch from Joda types to clojure datastructures and 
> back where possible.
> * Avoid reflective calls (this is a problem, because many types in 
> Joda-Time have similar functionality hidden under similarly named and 
> overloaded methods with no common interfaces).
> * Provide an entry point into Joda-Time by freeing the user from importing 
> most of the Joda-Time classes.
>
> Compared to clj-time , this library 
> is not DateTime-centric. If you tend to use local dates in most of your 
> projects, meaning you don't care about time zones, there's no purpose in 
> using DateTime at all. You should be using various Partials provided by 
> Joda-Time, most common being LocalDate and LocalDateTime. This also means 
> that date-times created through Clojure.Joda-Time are not converted to the 
> UTC timezone by default, as they are in clj-time.
>
> There's quite a comprehensive README on github: 
> https://github.com/dm3/clojure.joda-time
> as well as the API-docs: http://dm3.github.io/clojure.joda-time/
>
> This is pretty much an experiment, albeit a very elaborate one (and time 
> consuming). Feel free to suggest improvements/rant about deficiencies :)
>
> Fun facts:
> * first release may be treated as a Christmas present
> * while testing the library with simple-check ~10 bugs were identified 
> (most of them already fixed) in the Joda-Time itself
> * library contains an implementation partial intervals (e.g. interval of 
> LocalDates)
>

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread Massimiliano Tomassoli
On Thursday, December 26, 2013 7:55:05 AM UTC+1, Devin Walters (devn) wrote:
>
>  http://hoplon.io/#/home/ 
> http://caribou.github.io/caribou/docs/outline.html
>
> On Thursday, December 26, 2013 at 12:26 AM, tao wrote:
>
>  http://pedestal.io/
> http://www.luminusweb.net/
>
> Why so many frameworks? It's difficult to decide which one to use and 
> you'll find fewer people that use the same framework and can answer your 
> questions.
>

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread tao
Yes, I feel framework is a patch to a language. Use framework can do some thing 
productively, but also limit you do some thing poorly. 
Prefer Libraries to Frameworks

http://blog.getprismatic.com/blog/2012/4/5/software-engineering-at-prismatic.html


-- 
tao
Sent with Sparrow (http://www.sparrowmailapp.com/?sig)


On Thursday, December 26, 2013 at 9:52 PM, Malcolm Sparks wrote:

> Hi Massimiliano.
> 
> The absence of a well-established framework for web development in Clojure is 
> not a sign of its immaturity (rather the opposite). Web frameworks can give 
> you some increased productivity to begin with, but as soon as you need to do 
> something that isn't naturally supported by your chosen web framework you're 
> in trouble, and that's when productivity drops off a cliff as you struggle to 
> bend the web framework to your requirements. For example, you choose a web 
> framework with good REST support, then find out later you need to add web 
> sockets.
> 
> I've written and deployed about a dozen serious web applications using 
> Clojure. My opinion is the best strategy that guarantees long-term 
> productivity is to build your system from a set of smaller components that 
> you choose 'a la carte'. That way, if your requirements change you can swap 
> in and out other components as you need to. I would guess that the vast 
> majority of Clojure web applications are written this way, which is why you 
> don't see widescale adoption of a particular web 'framework' by the Clojure 
> community. Instead, Clojure developers pick from a set of constituent parts: 
> Jetty, http-kit, Ring, Compojure, Hiccup, Enlive, Stencil, Liberator, domina, 
> dommy, C2, Om, bidi, and so on and so on. 
> The fact that these components all fit together so well is one of the truly 
> outstanding features of the Clojure platform. Few languages come close to 
> this level of integration, which is why they actively curate frameworks.
> 
> Investing time in Clojure is both pleasurable and productive. It's a question 
> of whether you want 'short-term' productivity to meet a particular project 
> goal (choose a web framework), or sustainable productivity to deliver value 
> to your users over the longer term (choose to learn, understand and utilize a 
> set of components from the wide pool that the Clojure community has created).
> 
> Regards,
> 
> Malcolm
> 
> 
> 
> 
> 
> On Wednesday, December 25, 2013 9:06:20 PM UTC, Massimiliano Tomassoli wrote:
> > Hi,
> > I'm not sure if Clojure is the right language for me. I'd like to use 
> > Clojure mainly for web development but I don't know if it's already mature 
> > enough to be productive. For instance, Scala has Play, Groovy has Grails, 
> > etc... If I'm not wrong, Clojure doesn't have a well-established framework 
> > for web development. I'm intrigued by Clojure because I like functional 
> > programming, but I need to be productive and, alas, I don't have time to 
> > learn Clojure just for my pleasure.
> -- 
> -- 
> 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 
> (mailto: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 
> (mailto: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 
> (mailto:clojure+unsubscr...@googlegroups.com).
> For more options, visit https://groups.google.com/groups/opt_out.

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread Massimiliano Tomassoli
On Thursday, December 26, 2013 11:16:07 AM UTC+1, James Reeves wrote:
>
> What sort of web development were you planning to do?
>
>
I'd like to build websites. What kind depends on what my clients need.

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread Massimiliano Tomassoli
Thank you, Malcolm. I'm completely new to LISP and its dialects and I'm a 
little bit worried about the absence of support for OOP in Clojure. How do 
you decompose large systems in Clojure?

On Thursday, December 26, 2013 2:52:26 PM UTC+1, Malcolm Sparks wrote:
>
> Hi Massimiliano.
>
> The absence of a well-established framework for web development in Clojure 
> is not a sign of its immaturity (rather the opposite). Web frameworks can 
> give you some increased productivity to begin with, but as soon as you need 
> to do something that isn't naturally supported by your chosen web framework 
> you're in trouble, and that's when productivity drops off a cliff as you 
> struggle to bend the web framework to your requirements. For example, you 
> choose a web framework with good REST support, then find out later you need 
> to add web sockets.
>
> I've written and deployed about a dozen serious web applications using 
> Clojure. My opinion is the best strategy that guarantees long-term 
> productivity is to build your system from a set of smaller components that 
> you choose 'a la carte'. That way, if your requirements change you can swap 
> in and out other components as you need to. I would guess that the vast 
> majority of Clojure web applications are written this way, which is why you 
> don't see widescale adoption of a particular web 'framework' by the Clojure 
> community. Instead, Clojure developers pick from a set of constituent 
> parts: Jetty, http-kit, Ring, Compojure, Hiccup, Enlive, Stencil, 
> Liberator, domina, dommy, C2, Om, bidi, 
> and so on and so on. The fact that these components all fit together so 
> well is one of the truly outstanding features of the Clojure platform. Few 
> languages come close to this level of integration, which is why they 
> actively curate frameworks.
>
> Investing time in Clojure is both pleasurable and productive. It's a 
> question of whether you want 'short-term' productivity to meet a particular 
> project goal (choose a web framework), or sustainable productivity to 
> deliver value to your users over the longer term (choose to learn, 
> understand and utilize a set of components from the wide pool that the 
> Clojure community has created).
>
> Regards,
>
> Malcolm
>
>
>
>
>
> On Wednesday, December 25, 2013 9:06:20 PM UTC, Massimiliano Tomassoli 
> wrote:
>>
>> Hi,
>> I'm not sure if Clojure is the right language for me. I'd like to use 
>> Clojure mainly for web development but I don't know if it's already mature 
>> enough to be productive. For instance, Scala has Play, Groovy has Grails, 
>> etc... If I'm not wrong, Clojure doesn't have a well-established framework 
>> for web development. I'm intrigued by Clojure because I like functional 
>> programming, but I need to be productive and, alas, I don't have time to 
>> learn Clojure just for my pleasure.
>>
>

-- 
-- 
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: Good resources on dataflow based programming

2013-12-26 Thread Daniel Kersten
*"Given an infinite number of cores, the time to process a set of dataflow
functions is equivalent to the the time that the longest function took to
do its processing."*

It sounds like you've just discovered Amdahls Law :-D
https://en.wikipedia.org/wiki/Amdahl%27s_law

As for the articles, the hierarchies one is interesting to me mainly
because a dataflow network is basically a flat hierarchy: the network will
still run if you remove, exchange or add to parts of it. I noticed this a
lot when I did some Max/MSP development and it changed how I approached
problems. It was a very exploratory approach, but the difference to using a
REPL is that its easy to change code deeply integrated in other code and
re-evaluate whichever parts you want to test (actually, I do this in
Clojure by evaluating my code from my editor rather than in a REPL, but it
still feels different from rewiring a visual language).

In Pedestal, you can see this when you remove, exchange or add, eg,
transform functions - this does not affect the rest of the dataflow at all
as they are independent and isolated. I find this a very powerful and
pleasant way to program, which is why I linked that article.

The other article obviously doesn't apply in pedestal-app's because
javascript cannot run the code in parallel, but I found that conceptually
it has helped me understand how and why to isolate code and how it all fits
together. I also envision that the pedestal dataflow system will eventually
become part of pedestal-service (they ported it to use core.async, I'm
assuming this was to make this a possibility), in which case, it actually
can run in parallel and pipelined.

I hope the articles made things clearer and not more confusing!


On 25 December 2013 02:40, Stephen Cagle  wrote:

> Just a quick thought I had as I was walking home.
>
> Given an infinite number of cores, the time to process a set of dataflow
> functions is equivalent to the the time that the longest function took to
> do its processing. The efficiency is the (sum of time that all the dataflow
> functions took) / ( (count of the dataflow functions) * (the time of the
> longest running dataflow function) ). Given this, optimization is really
> simple. Take the longest running dataflow function, and see if you can
> somehow split it into smaller functions. Nothing profound here, but I
> thought it was interesting how "evident" optimizations might be when you
> use a dataflow processing model.
>
> On Tuesday, December 24, 2013 3:50:43 PM UTC-8, Stephen Cagle wrote:
>>
>> One thing that I am seeing on a re-read is that I conflated the notion of
>> the data flow function and the paths. I was sort of thinking that the data
>> flow functions "sit" at a particular path location. Similar to how a value
>> "sits" in a location in memory. It is more appropriate to say that the data
>> flow function is associated (referred isn't quite right) with a particular
>> path location.
>>
>> Taking this a bit further, a data flow function DOES NOT actually know
>> who its inputs are. It only knows that it takes input values in/of a
>> certain form. The schema that specifies how one set of paths map to another
>> path are possibly separate from the schema that specifies which dataflow
>> function is associated with which path.
>>
>> On Tuesday, December 24, 2013 1:36:16 PM UTC-8, Stephen Cagle wrote:
>>>
>>> Thank you. I only read the last two articles so far; some notes.
>>>
>>> http://my.opera.com/Vorlath/blog/2008/01/06/simple-
>>> example-of-the-difference-between-imperative-functional-and-data-flow
>>>
>>> I realized that I really wasn't getting what dataflow was about. I was
>>> viewing dataflow paths as a sort of hook that I could hang values on. I had
>>> never externalized the fact that each path only refers to the things it
>>> inputs upon. Specifically, I was modeling some of the patterns like path A
>>> passes a value to B, B does some computation, and puts the result on path
>>> A. This isn't neccessarily wrong, but it appears that I was using dataflow
>>> paths in a way similar to function evaluation.
>>>
>>> He makes a big deal out of not needing to know where his inputs come
>>> from, as well as not needing to invoke a function to create his inputs, but
>>> it still seems he must have a reference to his inputs.
>>>
>>> The effectively automatic parallellization of the code is pretty neat.
>>> Not so much because it is parallelized (which can be done in other
>>> systems), but mostly because it required no forethought or synchronization.
>>> It is automatically parallelized and pipelined. Neato. Of course, we aren't
>>> going to get much of that in js without some work.
>>>
>>> The second to last paragraph was another head turner. I had previously
>>> viewed every dataflow node/path as a loop that just waits for a change in
>>> its inputs and computes a new value when one of them changes. However, in
>>> his system recursive calls are also parallelized and pipelined. I am not
>>> qu

Re: [ANN] Clojure.Joda-Time 0.1.0

2013-12-26 Thread Mikera
Thanks for sharing!

It looks good, though can you explain the rationale for having a separate 
library? It seems from my perspective as if the objective of exposing all 
the good Joda functionality for Clojure consumption would be more readily 
achieved by extending the existing clj-time library.

If there isn't a good technical reason, can I suggest rolling all the 
features into clj-time, rather than developing a new library?

On Wednesday, 25 December 2013 11:19:18 UTC, dm3 wrote:
>
> Hello,
>
> I would like to announce the first release of 
> Clojure.Joda-Time - 
> an ambitiously named wrapper for the Joda-Time date and time library.
>
> Main goals of Clojure.Joda-Time:
>
> * Provide a consistent API for common operations with instants, 
> date-times, periods, partials and intervals.
> * Provide an escape hatch from Joda types to clojure datastructures and 
> back where possible.
> * Avoid reflective calls (this is a problem, because many types in 
> Joda-Time have similar functionality hidden under similarly named and 
> overloaded methods with no common interfaces).
> * Provide an entry point into Joda-Time by freeing the user from importing 
> most of the Joda-Time classes.
>
> Compared to clj-time , this library 
> is not DateTime-centric. If you tend to use local dates in most of your 
> projects, meaning you don't care about time zones, there's no purpose in 
> using DateTime at all. You should be using various Partials provided by 
> Joda-Time, most common being LocalDate and LocalDateTime. This also means 
> that date-times created through Clojure.Joda-Time are not converted to the 
> UTC timezone by default, as they are in clj-time.
>
> There's quite a comprehensive README on github: 
> https://github.com/dm3/clojure.joda-time
> as well as the API-docs: http://dm3.github.io/clojure.joda-time/
>
> This is pretty much an experiment, albeit a very elaborate one (and time 
> consuming). Feel free to suggest improvements/rant about deficiencies :)
>
> Fun facts:
> * first release may be treated as a Christmas present
> * while testing the library with simple-check ~10 bugs were identified 
> (most of them already fixed) in the Joda-Time itself
> * library contains an implementation partial intervals (e.g. interval of 
> LocalDates)
>

-- 
-- 
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: How do I serve clojure pages with nginx

2013-12-26 Thread Justin Smith
java -jar is fine in production. Jetty, Tomcat, or Immutant will offer some 
conveniences but are not necessary. What is needed (for security reasons) 
is an nginx proxy.

On Wednesday, December 25, 2013 3:42:00 AM UTC-8, Zeynel wrote:
>
> Ok, I worked through the tutorial referenced 
> http://clojure-doc.org/articles/tutorials/basic_web_development.html#build-and-run-itand
>  I created a jar file and ran it with $ java -jar -my-webapp.jar. This 
> works. But my understanding is that this is would not work for production. 
> I need to use nginx as proxy to jetty (or immutant?). I am trying to figure 
> out the correct configuration for jetty and nginx. Each tutorial appears to 
> be different and so far I couldn't make it work.
>
> On Friday, December 20, 2013 9:39:07 AM UTC-4, David Della Costa wrote:
>>
>> Hi Zeynel, 
>>
>> I don't know if setting things up the way I've laid out there is such a 
>> great idea.  What I would do instead is set the port and whatnot in the 
>> jetty configuration inside of ring, assuming that's what you're using 
>> (this assumes a lot about how your app is set up, so let me know if this 
>> doesn't match your setup): 
>>
>> http://ring-clojure.github.io/ring/ring.adapter.jetty.html 
>>
>> Then, I would compile an uberjar with lein, like so: 
>>
>> $ lein uberjar 
>>
>> In your startup script, as Curtis laid out, call the jar file using 
>> something like: 
>>
>> /path/to/java -jar /path/to/uberjar 
>>
>> That will be much simpler than what I have in my tutorial...which I 
>> should really update, now that you mention it! 
>>
>> DD 
>>
>> (2013/12/19 9:28), Zeynel wrote: 
>> > I am following your tutorial, but I am stuck with Jetty configuration. 
>> > My installation does not seem to have a /contexts directory. Where is 
>> it? 
>> > 
>> > On Tuesday, December 17, 2013 9:02:19 AM UTC-4, David Della Costa 
>> wrote: 
>> > 
>> > I have not done this specifically with Nginx but I suspect you 
>> probably 
>> > want something like what I set up with Apache + Jetty: 
>> > 
>> > 
>> https://github.com/ddellacosta/Clojure-under-Jetty-and-Apache#setting-up-jetty-with-apache-httpd
>>  
>> > <
>> https://github.com/ddellacosta/Clojure-under-Jetty-and-Apache#setting-up-jetty-with-apache-httpd>
>>  
>>
>> > 
>> > 
>> > That is, set up Nginx to act as a proxy for Jetty: 
>> > 
>> > http://nginx.org/en/docs/beginners_guide.html#proxy 
>> >  
>> > 
>> > One difference with how I would do it these days (vs. what I wrote 
>> in 
>> > the piece above) is that I would probably simply push out an 
>> uberjar 
>> > with lein which I would run with Java via an init script--for 
>> example, 
>> > if using Ubuntu: 
>> > 
>> > http://upstart.ubuntu.com/cookbook/#run-a-java-application 
>> >  
>> > 
>> > So, I would imagine the basic construction would be something like: 
>> > ring 
>> > app w/jetty or http-kit, packaged as an uberjar (lein uberjar), 
>> then 
>> > set 
>> > up to run via an init script (via upstart in your case) on an 
>> > alternative port, which is proxied by Nginx as in the link above. 
>> > 
>> > Hope this helps-- 
>> > 
>> > DD 
>> > 
>> > (2013/12/17 21:44), Zeynel wrote: 
>> > > I've set up a home server with ubuntu and nginx and I can serve 
>> > static 
>> > > pages. Now I want to add clojure but I am not sure what I need to 
>> > do. I 
>> > > asked the same question in StackOverflow but for some reason it 
>> is 
>> > voted 
>> > > to be 
>> > > closed: 
>> > 
>> http://stackoverflow.com/questions/20632987/how-to-serve-clojure-pages-with-nginx
>>  
>> > <
>> http://stackoverflow.com/questions/20632987/how-to-serve-clojure-pages-with-nginx>
>>  
>>
>> > 
>> > > 
>> > > Can you please direct me to documentation where I can read about 
>> > this? 
>> > > Some issues that I don't understand are: how do I tell nginx that 
>> > I am 
>> > > using clojure? Where do I install clojure, in the server? Where 
>> do I 
>> > > create the clojure files? Thanks. 
>> > > 
>> > > -- 
>> > > -- 
>> > > 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. 
>

Re: Is Clojure right for me?

2013-12-26 Thread Malcolm Sparks
Hi Massimiliano.

The absence of a well-established framework for web development in Clojure 
is not a sign of its immaturity (rather the opposite). Web frameworks can 
give you some increased productivity to begin with, but as soon as you need 
to do something that isn't naturally supported by your chosen web framework 
you're in trouble, and that's when productivity drops off a cliff as you 
struggle to bend the web framework to your requirements. For example, you 
choose a web framework with good REST support, then find out later you need 
to add web sockets.

I've written and deployed about a dozen serious web applications using 
Clojure. My opinion is the best strategy that guarantees long-term 
productivity is to build your system from a set of smaller components that 
you choose 'a la carte'. That way, if your requirements change you can swap 
in and out other components as you need to. I would guess that the vast 
majority of Clojure web applications are written this way, which is why you 
don't see widescale adoption of a particular web 'framework' by the Clojure 
community. Instead, Clojure developers pick from a set of constituent 
parts: Jetty, http-kit, Ring, Compojure, Hiccup, Enlive, Stencil, 
Liberator, domina, dommy, C2, Om, bidi, 
and so on and so on. The fact that these components all fit together so 
well is one of the truly outstanding features of the Clojure platform. Few 
languages come close to this level of integration, which is why they 
actively curate frameworks.

Investing time in Clojure is both pleasurable and productive. It's a 
question of whether you want 'short-term' productivity to meet a particular 
project goal (choose a web framework), or sustainable productivity to 
deliver value to your users over the longer term (choose to learn, 
understand and utilize a set of components from the wide pool that the 
Clojure community has created).

Regards,

Malcolm





On Wednesday, December 25, 2013 9:06:20 PM UTC, Massimiliano Tomassoli 
wrote:
>
> Hi,
> I'm not sure if Clojure is the right language for me. I'd like to use 
> Clojure mainly for web development but I don't know if it's already mature 
> enough to be productive. For instance, Scala has Play, Groovy has Grails, 
> etc... If I'm not wrong, Clojure doesn't have a well-established framework 
> for web development. I'm intrigued by Clojure because I like functional 
> programming, but I need to be productive and, alas, I don't have time to 
> learn Clojure just for my pleasure.
>

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread James Reeves
On 26 December 2013 12:24, Massimiliano Tomassoli wrote:

> On Thursday, December 26, 2013 11:16:07 AM UTC+1, James Reeves wrote:
>>
>> What sort of web development were you planning to do?
>>
>>
> I'd like to build websites. What kind depends on what my clients need.
>

My recent Clojure web development has revolved around web services, either
internally as part of a larger system, or as an external-facing API.
Clojure is well-equipped in this area.

I can offer less advice around the classic RoR use-case of a form-based
website with a SQL back end. Most of the things I work on doesn't overlap
much with that architecture.

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


Re: How do I serve clojure pages with nginx

2013-12-26 Thread Malcolm Sparks
Here's an article I wrote that takes you through the full process of 
running nginx and and a Clojure web app.

https://juxt.pro/articles/manual-clojure-deployment.html

On Tuesday, December 17, 2013 12:44:34 PM UTC, Zeynel wrote:
>
> I've set up a home server with ubuntu and nginx and I can serve static 
> pages. Now I want to add clojure but I am not sure what I need to do. I 
> asked the same question in StackOverflow but for some reason it is voted to 
> be closed: 
> http://stackoverflow.com/questions/20632987/how-to-serve-clojure-pages-with-nginx
>
> Can you please direct me to documentation where I can read about this? 
> Some issues that I don't understand are: how do I tell nginx that I am 
> using clojure? Where do I install clojure, in the server? Where do I create 
> the clojure files? 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/groups/opt_out.


Re: [ANN] Reagi 0.7.0 with ClojureScript support

2013-12-26 Thread James Reeves
Let's reduce duplication and discuss this issue solely on Github (for
reference, https://github.com/weavejester/reagi/pull/3).

I suspect there's another way of solving this, but I'll need to know more
about the problem you have.

- James




On 26 December 2013 11:24, Ruslan Prokopchuk  wrote:

> It was my fault to start discussion in two places, sorry for duplication.
> So, I suppose event buses is one of use cases for reagi's event streams.
> If I want to pass all data inside application through reagi/events and hold
> its state in them then ability to plug/unplug existing streams looks
> natural for me. But if you point me alternate solution for this case which
> emphasizes immutability, I will be happy.
>
>
> On Thursday, December 26, 2013 12:14:51 PM UTC+2, James Reeves wrote:
>
>> Reagi's event streams are not dissimilar to Clojure's seqs, in that while
>> their content may come from a side-effectful source, seqs and streams
>> themselves are immutable. It therefore doesn't make a lot of sense to add
>> an protocol for back-door mutation - in fact, excluding this was a
>> deliberate design decision.
>>
>> May I ask in what context you found yourself wanting mutation? There
>> might be a better way of achieving what you want.
>>
>> - James
>>
>>
>> On 26 December 2013 07:35, Ruslan Prokopchuk  wrote:
>>
>>> I've just posted pull request to make streams pluggable, allowing to
>>> plug another stream as source to current. What are caveats of doing things
>>> in such way? I ask this question in general, not only as related to reagi
>>> functionality. May be it makes streams <>?
>>>
>>>
>>> четверг, 26 декабря 2013 г., 1:15:57 UTC+2 пользователь James Reeves
>>> написал:
>>>
 Happy Holidays and Merry Christmas,

 Reagi 0.7.0 has been released, now with support for ClojureScript.

 Reagi is an FRP library that introduces two new reference types:
 behaviors and event streams. Behaviors model continuous change, and work a
 little like delays, while events represent discrete changes, and work a
 little like promises. More information is available on the project page:

   https://github.com/weavejester/reagi

 It's my opinion that Reagi provides a very clean and idiomatic
 implementation of FRP for Clojure. It's only dependency is core.async, so
 it doesn't need to make the compromises that a wrapper of an existing Java
 or Javascript library might need.

 I've been using Reagi for Clojure for a while now, but the
 ClojureScript code is still rather new, and may exhibit problems I haven't
 anticipated.

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


Re: [ANN] Reagi 0.7.0 with ClojureScript support

2013-12-26 Thread Ruslan Prokopchuk
It was my fault to start discussion in two places, sorry for duplication.
So, I suppose event buses is one of use cases for reagi's event streams. If 
I want to pass all data inside application through reagi/events and hold 
its state in them then ability to plug/unplug existing streams looks 
natural for me. But if you point me alternate solution for this case which 
emphasizes immutability, I will be happy.

On Thursday, December 26, 2013 12:14:51 PM UTC+2, James Reeves wrote:
>
> Reagi's event streams are not dissimilar to Clojure's seqs, in that while 
> their content may come from a side-effectful source, seqs and streams 
> themselves are immutable. It therefore doesn't make a lot of sense to add 
> an protocol for back-door mutation - in fact, excluding this was a 
> deliberate design decision.
>
> May I ask in what context you found yourself wanting mutation? There might 
> be a better way of achieving what you want.
>
> - James
>
>
> On 26 December 2013 07:35, Ruslan Prokopchuk 
> > wrote:
>
>> I've just posted pull request to make streams pluggable, allowing to plug 
>> another stream as source to current. What are caveats of doing things in 
>> such way? I ask this question in general, not only as related to reagi 
>> functionality. May be it makes streams <>?
>>
>>
>> четверг, 26 декабря 2013 г., 1:15:57 UTC+2 пользователь James Reeves 
>> написал:
>>
>>> Happy Holidays and Merry Christmas,
>>>
>>> Reagi 0.7.0 has been released, now with support for ClojureScript.
>>>
>>> Reagi is an FRP library that introduces two new reference types: 
>>> behaviors and event streams. Behaviors model continuous change, and work a 
>>> little like delays, while events represent discrete changes, and work a 
>>> little like promises. More information is available on the project page:
>>>
>>>   https://github.com/weavejester/reagi
>>>
>>> It's my opinion that Reagi provides a very clean and idiomatic 
>>> implementation of FRP for Clojure. It's only dependency is core.async, so 
>>> it doesn't need to make the compromises that a wrapper of an existing Java 
>>> or Javascript library might need.
>>>
>>> I've been using Reagi for Clojure for a while now, but the ClojureScript 
>>> code is still rather new, and may exhibit problems I haven't anticipated.
>>>
>>> - 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/groups/opt_out.


Re: Is Clojure right for me?

2013-12-26 Thread Alex Baranosky
I'm still partial to Ring.


On Thu, Dec 26, 2013 at 2:16 AM, James Reeves  wrote:

> What sort of web development were you planning to do?
>
> - James
>
>
> On 25 December 2013 21:06, Massimiliano Tomassoli wrote:
>
>> Hi,
>> I'm not sure if Clojure is the right language for me. I'd like to use
>> Clojure mainly for web development but I don't know if it's already mature
>> enough to be productive. For instance, Scala has Play, Groovy has Grails,
>> etc... If I'm not wrong, Clojure doesn't have a well-established framework
>> for web development. I'm intrigued by Clojure because I like functional
>> programming, but I need to be productive and, alas, I don't have time to
>> learn Clojure just for my pleasure.
>>
>> --
>> --
>> 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.
>>
>
>  --
> --
> 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.
>

-- 
-- 
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: Is Clojure right for me?

2013-12-26 Thread James Reeves
What sort of web development were you planning to do?

- James


On 25 December 2013 21:06, Massimiliano Tomassoli wrote:

> Hi,
> I'm not sure if Clojure is the right language for me. I'd like to use
> Clojure mainly for web development but I don't know if it's already mature
> enough to be productive. For instance, Scala has Play, Groovy has Grails,
> etc... If I'm not wrong, Clojure doesn't have a well-established framework
> for web development. I'm intrigued by Clojure because I like functional
> programming, but I need to be productive and, alas, I don't have time to
> learn Clojure just for my pleasure.
>
> --
> --
> 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.
>

-- 
-- 
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: [ANN] Reagi 0.7.0 with ClojureScript support

2013-12-26 Thread James Reeves
Reagi's event streams are not dissimilar to Clojure's seqs, in that while
their content may come from a side-effectful source, seqs and streams
themselves are immutable. It therefore doesn't make a lot of sense to add
an protocol for back-door mutation - in fact, excluding this was a
deliberate design decision.

May I ask in what context you found yourself wanting mutation? There might
be a better way of achieving what you want.

- James


On 26 December 2013 07:35, Ruslan Prokopchuk  wrote:

> I've just posted pull request to make streams pluggable, allowing to plug
> another stream as source to current. What are caveats of doing things in
> such way? I ask this question in general, not only as related to reagi
> functionality. May be it makes streams <>?
>
>
> четверг, 26 декабря 2013 г., 1:15:57 UTC+2 пользователь James Reeves
> написал:
>
>> Happy Holidays and Merry Christmas,
>>
>> Reagi 0.7.0 has been released, now with support for ClojureScript.
>>
>> Reagi is an FRP library that introduces two new reference types:
>> behaviors and event streams. Behaviors model continuous change, and work a
>> little like delays, while events represent discrete changes, and work a
>> little like promises. More information is available on the project page:
>>
>>   https://github.com/weavejester/reagi
>>
>> It's my opinion that Reagi provides a very clean and idiomatic
>> implementation of FRP for Clojure. It's only dependency is core.async, so
>> it doesn't need to make the compromises that a wrapper of an existing Java
>> or Javascript library might need.
>>
>> I've been using Reagi for Clojure for a while now, but the ClojureScript
>> code is still rather new, and may exhibit problems I haven't anticipated.
>>
>> - 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/groups/opt_out.


Re: Clojure.org: Concurrency screencast 404

2013-12-26 Thread abhi
 That's the one I was looking for. Thanks!

Is there a place I can file this as an issue so that the website points to
the right one?


On Tue, Dec 17, 2013 at 1:48 AM, Alex Miller  wrote:

> blip.tv killed the Clojure account. Many of the videos were moved to
> YouTube under the ClojureTV account:
>
> http://www.youtube.com/user/ClojureTV
>
> I suspect this is the talk you're referring to:
>
> http://www.youtube.com/watch?v=dGVqrGmwOAw
>
>
> On Monday, December 16, 2013 2:44:53 AM UTC-6, Abhijith wrote:
>>
>> Hello,
>>Concurrency screencast link to blip.tv is throwing a 404. Is this a
>> temporary thing or has it moved permanently?
>>
>> > Most of this is covered in more detail in the concurrency 
>> > screencast
>> .
>>
>> --
>> Queer little twists and quirks go into the making of an individual. To
>> suppress them all and follow clock and calendar and creed until the
>> individual is lost in the neutral gray of the host is to be less than
>> true to our inheritance Life, that gorgeous quality of life, is
>> not accomplished by following another man's rules. It is true we have
>> the same hungers and same thirsts, but they are for different things
>> and in different ways and in different seasons Lay down your own
>> day, follow it to its noon, your own noon, or you will sit in an outer
>> hall listening to the chimes but never reaching high enough to strike
>> your own.
>>- Angelo Patri
>>
>  --
> --
> 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.
>



-- 
Queer little twists and quirks go into the making of an individual. To
suppress them all and follow clock and calendar and creed until the
individual is lost in the neutral gray of the host is to be less than
true to our inheritance Life, that gorgeous quality of life, is
not accomplished by following another man's rules. It is true we have
the same hungers and same thirsts, but they are for different things
and in different ways and in different seasons Lay down your own
day, follow it to its noon, your own noon, or you will sit in an outer
hall listening to the chimes but never reaching high enough to strike
your own.
   - Angelo Patri

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