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