Re: Who is doing something worthwhile in Clojure?

2013-12-19 Thread Phillip Lord

Rich Morin r...@cfcl.com writes:
 This makes me wonder about the number of Clojure-driven projects that
 meet Tim O'Reilly's notions of doing something worthwhile:

   “Pursue something so important that even if you fail,
the world is better off with you having tried.”


I never understood how flog books about technology came into that
category.

 Full disclojure: I'd love to find a Clojure-related position that meets
 this test.  More generally, however, I'd like to know about any projects
 that do so.  Suggestions, anyone?

I have done several things in my life where, at least, I am sure that
the world would not have been better off if I hadn't tried. I think this
is enough to hope for.

Phil

-- 
-- 
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: Who is doing something worthwhile in Clojure?

2013-12-19 Thread Daniel Higginbotham


 I have done several things in my life where, at least, I am sure that 
 the world would not have been better off if I hadn't tried. I think this 
 is enough to hope for. 


I'm fooling around with Weather Jerk (http://www.weatherjerk.com/) in my 
spare time. It uh... solves the problem of having too many friends? 
Actually, I'm pretty sure the world would have been better if I hadn't 
tried on this one.

Also, Grateful Place (http://gratefulplace.com/). Clojure w/ liberator for 
the api server, datomic for the db, angular for the frontend and writeup 
at 
http://www.flyingmachinestudios.com/programming/building-a-forum-with-clojure-datomic-angular/.
 
I've read about studies that say taking a few minutes to express gratitude 
every day is one of the easiest ways to become happier. As programmers, we 
spend a lot of time trying to find out what's broken. Taking time for 
gratitude reorients mindset to look for positive things.

My favorite post so far is this 
one, http://gratefulplace.com/#/topics/17592186047726, which expresses 
gratitude for Pedestal documentation that makes sense ;)

Daniel

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


[ANN] component 0.2.1

2013-12-19 Thread Stuart Sierra
Component: object lifecycle management  dependency injection

https://github.com/stuartsierra/component

Version 0.2.1.

in Leiningen:   [com.stuartsierra/component 0.2.1]

Changes in this release:

* Conveniences
   * Added arities to `start-system` and `stop-system`
   * Generic `system-map` for constructing systems
* More descriptive error messages
* Backwards-compatible with releases 0.2.0 and 0.1.0

-- 
-- 
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: Who is doing something worthwhile in Clojure?

2013-12-19 Thread Rich Morin
On Dec 19, 2013, at 02:36, Phillip Lord wrote:
 I never understood how flog books about technology came into that
 category.


The books are simply an artifact and technology is only one domain.
Tim has spent decades promoting the interchange of well-chosen ideas.  
For example, although Christine Peterson came up with the term Open
Source, Tim pulled together a group of key developers to discuss it,
choose it as a new meme, define talking points, etc.  He also ran a
number of industry-wide conferences (OSCON), bringing together folks
from different language communities.  He made money doing this, but
I don't hold that against him; it indicates that he was giving value.

That said, each person has to decide what things are important.  My
own career has ranged from scientific programming and documentation
to publication of free software collections.  I'm a fanboi for both
science and open source, so this fits my criteria.  YMMV.

-r

 -- 
http://www.cfcl.com/rdm   Rich Morin   r...@cfcl.com
http://www.cfcl.com/rdm/resumeSan Bruno, CA, USA   +1 650-873-7841

Software system design, development, and documentation


-- 
-- 
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: Comparing core.async and Reactive Extensions

2013-12-19 Thread Timothy Baldridge
You learn something new every day. As this always been the way that Rx
worked (the locking part)? I haven't used Rx for several years, so I may be
off in my assumptions.

Timothy


On Thu, Dec 19, 2013 at 9:41 AM, Matthew Podwysocki 
matthew.podwyso...@gmail.com wrote:

 You can easily do bi-directional communication using Rx, but it's
 involving two Subjects, which are both Observables and Observers, or any
 flavor thereof Subjects whether Replay, Async, Behavior, or Buffered or
 Controlled (for backpressure coming soon).

 var subject1 = new Rx.Subject();
 var subject2 = new Rx.Subject();

 var sub1 = subject1.subscribe(subject2);
 var sub2 = subject2.subscribe(subject1);

 And yes, back to Timothy's point, it is not possible in Rx to have
 multiple people calling onNext at a single time as we have locks around
 that kind of behavior, so there is no chance for overlapping onNext calls,
 and have the strict grammar enforced of 0-N onNext calls with an optional
 onError or onCompleted but not both.  Once the onError or onCompleted calls
 have been fired, no onNext values can be fired.  You can get around that
 behavior in a number of ways with retry, catch, or even onErrorResumeNext
 so instead of terminating the entire sequence, you can go to another
 sequence or retry the current one.

 Matt


 Having used both I would agree that CSP is more general and when you
 need to do custom logic it tends to be easier, IME, than Rx. Another key
 difference is that Rx is only about one way communication within a
 single subscription.  Once you need to have bi-directional communication
 CSP is a better tool for the job.

 -Ben

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




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

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


Re: Comparing core.async and Reactive Extensions

2013-12-19 Thread Matthew Podwysocki
You can easily do bi-directional communication using Rx, but it's involving 
two Subjects, which are both Observables and Observers, or any flavor 
thereof Subjects whether Replay, Async, Behavior, or Buffered or Controlled 
(for backpressure coming soon).

var subject1 = new Rx.Subject();
var subject2 = new Rx.Subject();

var sub1 = subject1.subscribe(subject2);
var sub2 = subject2.subscribe(subject1);

And yes, back to Timothy's point, it is not possible in Rx to have multiple 
people calling onNext at a single time as we have locks around that kind of 
behavior, so there is no chance for overlapping onNext calls, and have the 
strict grammar enforced of 0-N onNext calls with an optional onError or 
onCompleted but not both.  Once the onError or onCompleted calls have been 
fired, no onNext values can be fired.  You can get around that behavior in 
a number of ways with retry, catch, or even onErrorResumeNext so instead of 
terminating the entire sequence, you can go to another sequence or retry 
the current one.

Matt


 Having used both I would agree that CSP is more general and when you 
 need to do custom logic it tends to be easier, IME, than Rx. Another key 
 difference is that Rx is only about one way communication within a 
 single subscription.  Once you need to have bi-directional communication 
 CSP is a better tool for the job. 

 -Ben 


-- 
-- 
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: Comparing core.async and Reactive Extensions

2013-12-19 Thread Matthew Podwysocki
Timothy,

Yes, it has always been this way enforced with a strict grammar with 
locking.  The only place we don't care is in JavaScript, because we're 
single threaded.

Matt

On Thursday, December 19, 2013 11:51:46 AM UTC-5, tbc++ wrote:

 You learn something new every day. As this always been the way that Rx 
 worked (the locking part)? I haven't used Rx for several years, so I may be 
 off in my assumptions. 

 Timothy


 On Thu, Dec 19, 2013 at 9:41 AM, Matthew Podwysocki 
 matthew.p...@gmail.com javascript: wrote:

 You can easily do bi-directional communication using Rx, but it's 
 involving two Subjects, which are both Observables and Observers, or any 
 flavor thereof Subjects whether Replay, Async, Behavior, or Buffered or 
 Controlled (for backpressure coming soon).

 var subject1 = new Rx.Subject();
 var subject2 = new Rx.Subject();

 var sub1 = subject1.subscribe(subject2);
 var sub2 = subject2.subscribe(subject1);

 And yes, back to Timothy's point, it is not possible in Rx to have 
 multiple people calling onNext at a single time as we have locks around 
 that kind of behavior, so there is no chance for overlapping onNext calls, 
 and have the strict grammar enforced of 0-N onNext calls with an optional 
 onError or onCompleted but not both.  Once the onError or onCompleted calls 
 have been fired, no onNext values can be fired.  You can get around that 
 behavior in a number of ways with retry, catch, or even onErrorResumeNext 
 so instead of terminating the entire sequence, you can go to another 
 sequence or retry the current one.

 Matt


 Having used both I would agree that CSP is more general and when you 
 need to do custom logic it tends to be easier, IME, than Rx. Another key 
 difference is that Rx is only about one way communication within a 
 single subscription.  Once you need to have bi-directional communication 
 CSP is a better tool for the job. 

 -Ben 

  -- 
 -- 
 You received this message because you are subscribed to the Google
 Groups Clojure group.
 To post to this group, send email to clo...@googlegroups.comjavascript:
 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 javascript:
 For more options, visit this group at
 http://groups.google.com/group/clojure?hl=en
 --- 
 You received this message because you are subscribed to the Google Groups 
 Clojure group.
 To unsubscribe from this group and stop receiving emails from it, send an 
 email to clojure+u...@googlegroups.com javascript:.
 For more options, visit https://groups.google.com/groups/opt_out.




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


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


Re: Parsing large XML files

2013-12-19 Thread Peter Ullah
Thank you everyone for your advice, I found it useful and think that I am 
part-way to a solution using clojure.data.xml/source-seq as suggested by 
dannue.

I'll post what I have done so far in the hope it might help someone else... 
comments on style welcome.

*Solution*:

Given the following XML,

head
  titleThis is some text/title
  body
 h1This is a header/h1
  /body
/head

data.xml/source-seq will return a lazy seq of data.xml.Event items 

#clojure.data.xml.Event{:type :start-element, :name :head, :attrs nil, :str 
nil}
#clojure.data.xml.Event{:type :characters, :name nil, :attrs nil, :str nil}
#clojure.data.xml.Event{:type :start-element, :name :title, :attrs nil, 
:str nil}
#clojure.data.xml.Event{:type :characters, :name nil, :attrs nil, :str This 
is some text}
#clojure.data.xml.Event{:type :end-element, :name :title, :attrs nil, :str 
nil}
#clojure.data.xml.Event{:type :start-element, :name :body, :attrs nil, :str 
nil}
#clojure.data.xml.Event{:type :start-element, :name :h1, :attrs nil, :str 
nil}
#clojure.data.xml.Event{:type :characters, :name nil, :attrs nil, :str This 
is a header}
#clojure.data.xml.Event{:type :end-element, :name :h1, :attrs nil, :str nil}
#clojure.data.xml.Event{:type :end-element, :name :body, :attrs nil, :str 
nil}
#clojure.data.xml.Event{:type :end-element, :name :head, :attrs nil, :str 
nil}

This is perfect for finding elements with a particular name, but completely 
useless if I want to find an element based on its location. So I maintain a 
stack where each :start-element causes the element name to be pushed, and 
each :end-element to invoke a pop.

(filter (fn [x] (complement (nil? x)))
  (let [stack (atom []) 
search-pattern vmware/collectionHost/Object/Property/Property] 

(doseq[x (take 100 xml)] ; just test with the first 100 elements in seq.
  (do 
(cond 
  (= (:type x) :start-element) (swap! stack conj (name (get x 
:name)))
  (= (:type x) :end-element) (swap! stack pop) 
)   
(when (= search-pattern (clojure.string/join / @stack)) (println 
(clojure.string/join / @stack)))
  )   
)   
  )
)

This is a work in progress and does not take account of attributes on the 
elements, but I would appreciate any comments.

Thanks

Pete



On Wednesday, December 18, 2013 7:23:21 AM UTC, danneu wrote:

 Good question. Every lib that came to mind when I saw 
 clojure.data.xml/parse's
 tree of Elements {:tag _,
 :attrs _, :content _} only works on zippers which apparently sit in memory.

 One option is to use `clojure.data.xml/source-seq` to get back a lazy 
 sequence
 of Events {:type _, :name _, :attrs _, :str _} where the event :name is 
 either
 :start-element, :end-element, or :characters.

 For example, strongHello/strong would parse into the events
 [:start-element strong], [:characters Hello], [:end-element strong]. 
 You
 could use loop/recur to manage state as your consume the sequence.

 That's actually how I'm used to working with SAX parsers anyways. Here are 
 some
 naive Ruby examples if it's new to you: 
 https://gist.github.com/danneu/3977120.

 Of course, I imagine the ideal solution would involve some way to express 
 selectors on the
 Element tree like I'm used to doing with raynes/laser on zippers: 
 https://github.com/Raynes/laser/blob/master/docs/guide.md#screen-scraping.


 On Tuesday, December 17, 2013 4:57:32 AM UTC-6, Peter Ullah wrote:


 Hi all, 

 I'm attempting to parse a large (500MB) XML, specifically I am trying to 
 extract various parts using XPath. I've been using the examples presented 
 here: 
 http://clojure-doc.org/articles/tutorials/parsing_xml_with_zippers.html
 and all was going when tested against small files, however now that I am 
 using the larger file Fireplace/Vim just hangs and my laptop gets hot then 
 I get a memory exception.

 I've been playing around with various other libraries such as 
 clojure.data.xml and and found that the following works perfectly well for 
 parsing... but when I come to search inside root, things start to snarl up 
 again.

 (ns example.core
   (:require [clojure.java.io :as java.io] 
 [clojure.data.xml :as data.xml]
 ))  

 (def large-file /path-to-large-file)

 ;; using clojure.data.xml returns quickly with no problems whereas 
 clojure.xml/parse from the link above causes problems..
 (def root 
   ( - large-file
java.io/input-stream
data.xml/parse
))  

 (class root) ;clojure.data.xml.Element

 Does anyone know a way of searching within root that won't consume the 
 heap?

 Forgive me, I'm new to Clojure and these forums, I've searched through 
 previous posts but not managed to answer my own question.

 Thanks in advance.



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

ANN: Om, a ClojureScript binding to Facebook's React

2013-12-19 Thread David Nolen
Enjoy,
http://swannodette.github.io/2013/12/17/the-future-of-javascript-mvcs/

David

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

2013-12-19 Thread Thomas Heller
Hey David,

looks really interesting although I have to be a little critical of your 
benchmarks. Add a download of 200 todos via xhr and then do the render, you 
will most certainly lose to other JS Framework out there (especially if you 
choose EDN over JSON) cause of the extra overhead associated with going 
from mutable-persistent. I quite like react/om and will certainly play 
with it although I have some worries concerning deeply nested data, since 
Clojure isn't exactly performant in that situation. Happy to be proven 
wrong though.

Anyways, nice work. Curious to see/hear more.

Cheers,
/thomas

PS: Found a Bug: add 2 items, delete the first, double click the last 
remaining. 

On Thursday, December 19, 2013 8:12:12 PM UTC+1, David Nolen wrote:

 Enjoy, 
 http://swannodette.github.io/2013/12/17/the-future-of-javascript-mvcs/

 David


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

2013-12-19 Thread James Reeves
Thank you for taking the time to write such a detailed explanation. That
clears up my understanding of the library considerably.

- James


On 19 December 2013 03:45, Micha Niskin micha.nis...@gmail.com wrote:

 Ah, yes. There are some gaps in the docs that need to be fixed. To answer
 your questions:


1. The main thing that Hoplon does is unify the DOM and the dynamic
environment (the JS environment). This makes it possible to refer to things
from the dynamic environment in your markup. Normally you can reference
things in the DOM from JavaScript, but not the other way around. So in a
unified environment that includes both JavaScript and the DOM there needs
to be a way to develop both of them in the same page. A Hoplon page has 3
parts: the page declaration, a number of optional top-level forms, and
finally the DOM markup. So yes, the Hoplon compiler selects the last
expression in the file as the DOM markup.
2. The primitive HTML5 elements (div, span, etc.) are, in fact
ClojureScript functions in the tailrecursion.hoplon namespace. These
functions return new DOM elements of the appropriate type. However, the
Element type is extended to implement the IFn protocol such that they
maintain the HTML semantic. That is, function application means append
child / set attribute. So yes, div and span etc. are functions, but they
return DOM elements that implement IFn, so they return functions, in a way,
too.
3. Everything is generated on the fly, pretty much. The entire
document is replaced with the result of evaluating the DOM markup when the
page loads. In other words, when the page loads the last expression in the
source file is evaluated in the browser, and document is replaced with the
result. Since the DOM markup is just a ClojureScript expression that is
evaluated as ClojureScript, you can create your own custom tags. All you
have to do is define functions that abide by the HTML semantic. There are
examples of this in the Getting Started page, especially the Creating a
tabs abstraction section.
4. Sorry, I should have put a link in the docs there to 
 Javelinhttp://github.com/tailrecursion/javelin,
the dataflow library we use for the cells. That page explains in detail,
but the basic premise is that there are two kinds of cells in spreadsheets,
input cells that you update manually, and formula cells that update
themselves reactively according to a formula that might refer to other
cells. So defc is equivalent to def and cell, and that defines an input
cell. Likewise, defc= is equivalent to def and cell=, and that defines a
formula cell.
5. All cells, both input cells and formula cells, contain values. The
difference is in how those values are updated. In order to obtain the value
contained in any cell you may dereference the cell. So both types of cell
can be dereferenced like atoms. However, only input cells can be updated
using swap! or reset!. Formula cells will update themselves automatically,
and it's an error to try to do it directly using those functions.
6. The difference between a cell and an atom with watchers attached is
that cells guarantee consistency. That is to say that the evaluation
mechanism ensures that a formula cell is never updated until all of the
cells it depends on have been updated, that the formula is evaluated at
most one time, and that the cell's formula is evaluated only when the value
of a cell it depends on has changed. A cool property here is that the
entire graph of cells updates atomically and consistently, even though the
individual cells are updating themselves one at a time. The consistency
guarantee ensures that each cell sees the world as if it updates
atomically; no cell can ever see other cells in a half-evaluated state;
each cell acts as if it were the last cell to update. You can think of the
entire graph as a single value.



 On Wednesday, December 18, 2013 7:50:58 PM UTC-5, James Reeves wrote:

 I wasn't expecting an overview of the syntax to be under Getting
 Started. The documentation there makes things clearer, but I still have a
 few questions:

 1. What differentiates the top-level page definition from DOM objects
 returned from functions? Is the compiler just looking for the last
 expression in the source file?
 2. Do the HTML forms (div, span, etc.) act like functions, or more like
 macros?
 3. Are the HTML forms generated on the fly, or is there a fixed list of
 tags available?
 4. Is defc equivalent to def and cell? And defc= equivalent to def and
 cell=?
 5. What's the difference between cell and cell=? Is one like an atom, and
 the other like a reactive function?
 6. What's the difference between a cell an an atom?

 - James


 On 18 December 2013 21:02, Micha Niskin micha@gmail.com wrote:

 There is a section in the Getting Started page, 

Re: Who is doing something worthwhile in Clojure?

2013-12-19 Thread Bruno Kim Medeiros Cesar
Being acquired by Monsanto does not invalidate The Climate Corporation's 
work, which I find extremely exciting and valuable. In fact, why would 
their work be worthwhile by your worthiness definition? They are just 
insurance sellers, after all.

Clojure itself is the ultimate worthwhile project. Even if it fails, by 
some measure of failure, the world is better with a sufficiently-functional 
language, an inspiration for future Lisp users, and a target for future JVM 
languages to aim.

On Thursday, December 19, 2013 2:49:37 AM UTC-2, Rich Morin wrote:

 I found Doug Selph's talk at Clojure/conj to be quite inspiring, in 
 that he is clearly (IMHO) doing something that is of great potential 
 value to humanity.  I used to have similar feelings about The Climate 
 Corporation, but their recent acquisition by Monsanto troubles me. 

 This makes me wonder about the number of Clojure-driven projects that 
 meet Tim O'Reilly's notions of doing something worthwhile: 

   “Pursue something so important that even if you fail, 
the world is better off with you having tried.” 

 Full disclojure: I'd love to find a Clojure-related position that meets 
 this test.  More generally, however, I'd like to know about any projects 
 that do so.  Suggestions, anyone? 

 -r 

  -- 
 http://www.cfcl.com/rdm   Rich Morin   
 r...@cfcl.comjavascript: 
 http://www.cfcl.com/rdm/resumeSan Bruno, CA, USA   +1 650-873-7841 

 Software system design, development, and documentation 




-- 
-- 
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: Who is doing something worthwhile in Clojure?

2013-12-19 Thread Ben Wolfson
Why is a programming language---which one would think is in itself neutral,
being a tool that can be put to a variety of uses---more obviously
worthwhile (let alone the ultimate worthwhile thing!) than sellers of
insurance, who, after all, do, if they're honest, insulate people from what
would otherwise be inconvenient-to-catastrophic events (and thereby make
certain risks more feasible)?


On Thu, Dec 19, 2013 at 4:02 PM, Bruno Kim Medeiros Cesar 
brunokim...@gmail.com wrote:

 Being acquired by Monsanto does not invalidate The Climate Corporation's
 work, which I find extremely exciting and valuable. In fact, why would
 their work be worthwhile by your worthiness definition? They are just
 insurance sellers, after all.

 Clojure itself is the ultimate worthwhile project. Even if it fails, by
 some measure of failure, the world is better with a sufficiently-functional
 language, an inspiration for future Lisp users, and a target for future JVM
 languages to aim.

 On Thursday, December 19, 2013 2:49:37 AM UTC-2, Rich Morin wrote:

 I found Doug Selph's talk at Clojure/conj to be quite inspiring, in
 that he is clearly (IMHO) doing something that is of great potential
 value to humanity.  I used to have similar feelings about The Climate
 Corporation, but their recent acquisition by Monsanto troubles me.

 This makes me wonder about the number of Clojure-driven projects that
 meet Tim O'Reilly's notions of doing something worthwhile:

   “Pursue something so important that even if you fail,
the world is better off with you having tried.”

 Full disclojure: I'd love to find a Clojure-related position that meets
 this test.  More generally, however, I'd like to know about any projects
 that do so.  Suggestions, anyone?

 -r

  --
 http://www.cfcl.com/rdm   Rich Morin   r...@cfcl.com
 http://www.cfcl.com/rdm/resumeSan Bruno, CA, USA   +1 650-873-7841

 Software system design, development, and documentation


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




-- 
Ben Wolfson
Human kind has used its intelligence to vary the flavour of drinks, which
may be sweet, aromatic, fermented or spirit-based. ... Family and social
life also offer numerous other occasions to consume drinks for pleasure.
[Larousse, Drink entry]

-- 
-- 
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: Who is doing something worthwhile in Clojure?

2013-12-19 Thread Rich Morin
On Dec 19, 2013, at 16:02, Bruno Kim Medeiros Cesar wrote:
 Being acquired by Monsanto does not invalidate The Climate
 Corporation's work, which I find extremely exciting and
 valuable.  In fact, why would their work be worthwhile by
 your worthiness definition?  They are just insurance sellers,
 after all.

I have no argument with The Climate Corporation's business model;
my problems are with Monsanto.  That said, I don't want to dive
off into that discussion.  In fact, my comment about them should
probably have been left out of my initial posting.

Can we get back to talking about folks who are using Clojure to
make a positive impact?

-r

 -- 
http://www.cfcl.com/rdm   Rich Morin   r...@cfcl.com
http://www.cfcl.com/rdm/resumeSan Bruno, CA, USA   +1 650-873-7841

Software system design, development, and documentation


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


[ANN] Example async TCP echo client/server using Java 7 NIO.2.

2013-12-19 Thread David James
An asynchrononous TCP echo client/server in Clojure using Java 7 NIO.2.
https://github.com/bluemont/clj-async-tcp-echo-nio.2

As I've been diving into async libraries in Java and Clojure, I thought it
would be nice to make a simple example with the Java 7 NIO.2 async classes.
I'm sure there is room for improvement, so please let me know if you have
feedback or suggestions.

I find this Clojure version easier to follow than existing Java examples,
largely because `proxy` makes the callbacks more compact.

I intentionally kept the callbacks at the top-level, thus avoiding a lot of
nesting, which led to some minor callback hell. The scoping is clearer that
way, even if the program flow is not. I would expect that different people
would have different preferences.

I would be interested to see other ways of handling it (like core.async,
perhaps?).

--
David James
http://bluemontlabs.com

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


Re: Who is doing something worthwhile in Clojure?

2013-12-19 Thread Sean Corfield
On Thu, Dec 19, 2013 at 5:19 PM, Rich Morin r...@cfcl.com wrote:
 I have no argument with The Climate Corporation's business model;
 my problems are with Monsanto.  That said, I don't want to dive
 off into that discussion.  In fact, my comment about them should
 probably have been left out of my initial posting.

If you think that discussion is inappropriate for this list (and I
agree - it is), then why do you think this discussion is appropriate:

 Can we get back to talking about folks who are using Clojure to
 make a positive impact?

It seems to me this is bound to be a political or at least a very
subjective one based on people's own moral compass and their ideology?
As such I don't think it's a particularly useful discussion on what is
primarily a technical list. Perhaps post the question on Quora? That
seems to be very friendly toward political / moral discussions...
-- 
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: [ANN] Hoplon: web applications in Clojure and ClojureScript

2013-12-19 Thread Murtaza Husain
Hi,

Thanks for the great framework. I am loving it and will give it a try in a 
pet project. A few nitpicks - 

1. Why not use hiccup data structure for representing DOM, instead of the 
custom fns and macros. This provides several advantages where your DOM is 
just data and you can manipulate it like data. 

2. The destructing and looping used within the DOM forms is custom. Why 
cant we have regular clojure all the way ? Introduction of a another syntax 
for templating is not very appealing. So a regular 'map' or 'for' could be 
used instead of 'loop-tpl'

3. String interpolation for the bindings - '~{x}' . Cant we use something 
more idiomatic, either the var itself or atleast a symbol :x ?

4. It will also be helpful to have a leiningen example for the project. 
Nothing against boot, however it will be easy to get started, and also 
IDE's are already configured to work with project.clj

Thanks,
Murtaza





On Friday, December 20, 2013 3:40:41 AM UTC+5:30, James Reeves wrote:

 Thank you for taking the time to write such a detailed explanation. That 
 clears up my understanding of the library considerably.

 - James


 On 19 December 2013 03:45, Micha Niskin micha@gmail.com javascript:
  wrote:

 Ah, yes. There are some gaps in the docs that need to be fixed. To answer 
 your questions:


1. The main thing that Hoplon does is unify the DOM and the dynamic 
environment (the JS environment). This makes it possible to refer to 
 things 
from the dynamic environment in your markup. Normally you can reference 
things in the DOM from JavaScript, but not the other way around. So in a 
unified environment that includes both JavaScript and the DOM there needs 
to be a way to develop both of them in the same page. A Hoplon page has 3 
parts: the page declaration, a number of optional top-level forms, and 
finally the DOM markup. So yes, the Hoplon compiler selects the last 
expression in the file as the DOM markup. 
2. The primitive HTML5 elements (div, span, etc.) are, in fact 
ClojureScript functions in the tailrecursion.hoplon namespace. These 
functions return new DOM elements of the appropriate type. However, the 
Element type is extended to implement the IFn protocol such that they 
maintain the HTML semantic. That is, function application means append 
child / set attribute. So yes, div and span etc. are functions, but they 
return DOM elements that implement IFn, so they return functions, in a 
 way, 
too. 
3. Everything is generated on the fly, pretty much. The entire 
document is replaced with the result of evaluating the DOM markup when 
 the 
page loads. In other words, when the page loads the last expression in 
 the 
source file is evaluated in the browser, and document is replaced with 
 the 
result. Since the DOM markup is just a ClojureScript expression that is 
evaluated as ClojureScript, you can create your own custom tags. All you 
have to do is define functions that abide by the HTML semantic. There are 
examples of this in the Getting Started page, especially the Creating 
 a 
tabs abstraction section. 
4. Sorry, I should have put a link in the docs there to 
 Javelinhttp://github.com/tailrecursion/javelin, 
the dataflow library we use for the cells. That page explains in detail, 
but the basic premise is that there are two kinds of cells in 
 spreadsheets, 
input cells that you update manually, and formula cells that update 
themselves reactively according to a formula that might refer to other 
cells. So defc is equivalent to def and cell, and that defines an input 
cell. Likewise, defc= is equivalent to def and cell=, and that defines a 
formula cell. 
5. All cells, both input cells and formula cells, contain values. The 
difference is in how those values are updated. In order to obtain the 
 value 
contained in any cell you may dereference the cell. So both types of cell 
can be dereferenced like atoms. However, only input cells can be updated 
using swap! or reset!. Formula cells will update themselves 
 automatically, 
and it's an error to try to do it directly using those functions. 
6. The difference between a cell and an atom with watchers attached 
is that cells guarantee consistency. That is to say that the evaluation 
mechanism ensures that a formula cell is never updated until all of the 
cells it depends on have been updated, that the formula is evaluated at 
most one time, and that the cell's formula is evaluated only when the 
 value 
of a cell it depends on has changed. A cool property here is that the 
entire graph of cells updates atomically and consistently, even though 
 the 
individual cells are updating themselves one at a time. The consistency 
guarantee ensures that each cell sees the world as if it updates 
atomically; no cell can ever see other cells in a 

Re: Who is doing something worthwhile in Clojure?

2013-12-19 Thread Alex Baranosky
Yep, positive impact is pretty much entirely opinion-based.


On Thu, Dec 19, 2013 at 6:15 PM, Sean Corfield seancorfi...@gmail.comwrote:

 On Thu, Dec 19, 2013 at 5:19 PM, Rich Morin r...@cfcl.com wrote:
  I have no argument with The Climate Corporation's business model;
  my problems are with Monsanto.  That said, I don't want to dive
  off into that discussion.  In fact, my comment about them should
  probably have been left out of my initial posting.

 If you think that discussion is inappropriate for this list (and I
 agree - it is), then why do you think this discussion is appropriate:

  Can we get back to talking about folks who are using Clojure to
  make a positive impact?

 It seems to me this is bound to be a political or at least a very
 subjective one based on people's own moral compass and their ideology?
 As such I don't think it's a particularly useful discussion on what is
 primarily a technical list. Perhaps post the question on Quora? That
 seems to be very friendly toward political / moral discussions...
 --
 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.


-- 
-- 
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: Who is doing something worthwhile in Clojure?

2013-12-19 Thread John Wiseman
Suggestions of endeavors using clojure for something worthwhile itself
seems like an entirely worthwhile discussion if people can resist the
temptation to debate what worthwhile means and to disagree with other
people's concept of worthwhile.  For example, here's a recipe for a useful
discussion: If you know of activity X that you in good faith believe is
worthwhile or, more specifically, (and I'm guessing at RIch's original
intention so I could be wrong) philanthropic then post about X.  If you
disagree with a poster about whether X is worthwhile, do not post.

John



On Thu, Dec 19, 2013 at 6:15 PM, Sean Corfield seancorfi...@gmail.comwrote:

 On Thu, Dec 19, 2013 at 5:19 PM, Rich Morin r...@cfcl.com wrote:
  I have no argument with The Climate Corporation's business model;
  my problems are with Monsanto.  That said, I don't want to dive
  off into that discussion.  In fact, my comment about them should
  probably have been left out of my initial posting.

 If you think that discussion is inappropriate for this list (and I
 agree - it is), then why do you think this discussion is appropriate:

  Can we get back to talking about folks who are using Clojure to
  make a positive impact?

 It seems to me this is bound to be a political or at least a very
 subjective one based on people's own moral compass and their ideology?
 As such I don't think it's a particularly useful discussion on what is
 primarily a technical list. Perhaps post the question on Quora? That
 seems to be very friendly toward political / moral discussions...
 --
 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.


-- 
-- 
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: Who is doing something worthwhile in Clojure?

2013-12-19 Thread Alex Baranosky
Fair enough :)


On Thu, Dec 19, 2013 at 10:09 PM, John Wiseman jjwise...@gmail.com wrote:

 Suggestions of endeavors using clojure for something worthwhile itself
 seems like an entirely worthwhile discussion if people can resist the
 temptation to debate what worthwhile means and to disagree with other
 people's concept of worthwhile.  For example, here's a recipe for a useful
 discussion: If you know of activity X that you in good faith believe is
 worthwhile or, more specifically, (and I'm guessing at RIch's original
 intention so I could be wrong) philanthropic then post about X.  If you
 disagree with a poster about whether X is worthwhile, do not post.

 John



 On Thu, Dec 19, 2013 at 6:15 PM, Sean Corfield seancorfi...@gmail.comwrote:

 On Thu, Dec 19, 2013 at 5:19 PM, Rich Morin r...@cfcl.com wrote:
  I have no argument with The Climate Corporation's business model;
  my problems are with Monsanto.  That said, I don't want to dive
  off into that discussion.  In fact, my comment about them should
  probably have been left out of my initial posting.

 If you think that discussion is inappropriate for this list (and I
 agree - it is), then why do you think this discussion is appropriate:

  Can we get back to talking about folks who are using Clojure to
  make a positive impact?

 It seems to me this is bound to be a political or at least a very
 subjective one based on people's own moral compass and their ideology?
 As such I don't think it's a particularly useful discussion on what is
 primarily a technical list. Perhaps post the question on Quora? That
 seems to be very friendly toward political / moral discussions...
 --
 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.


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