[Survey] Clojure/Script app monitoring service
Hi everyone, I’m looking for some assistance. I’m considering building a paid service for businesses using Clojure/Script to help easily observe/monitor their production applications (things like tracing, log aggregation, performance measurement, anomaly detection, etc.). This is a problem I’ve had to tackle myself repeatedly over many years, and I’ve been repeatedly dissatisfied with the services currently available. My next step is to gather some early info from potential users, to help understand if what I have in mind might be viable. So if you or your company have a Clojure/Script application in production, please consider helping me out by taking a few minutes to answer a short survey at https://www.taoensso.com/clojure/monitoring-survey It’s 8 questions and takes about 5 minutes. If it turns out there's interest, I'll share more info later re: the specific ideas I have in mind. Thanks a lot, cheers! :-) - Peter -- 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. To view this discussion on the web visit https://groups.google.com/d/msgid/clojure/1946c04b-77c8-4ed1-be29-0b5ddb8c5d43n%40googlegroups.com.
Re: [ANN] 6x new major lib updates incl. HTTP-Kit, Sente, Timbre, Carmine
You're very welcome Brent! Cheers :-) -- 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. To view this discussion on the web visit https://groups.google.com/d/msgid/clojure/9562c16c-971f-4928-9e64-1599ede269e3n%40googlegroups.com.
[ANN] 6x new major lib updates incl. HTTP-Kit, Sente, Timbre, Carmine
Hi everyone, I managed to get an opportunity recently to spend some non-trivial time on open-source for a few days! Have cut new releases of several libraries below. In all cases a big thanks to contributors! As usual, please check the CHANGELOGs carefully and please do report any issues. Have a great week everyone, enjoy! Cheers :-) *- HTTP-Kit v2.5.0* HTTP-Kit is a simple high-performance event-driven HTTP client+server with WebSocket support for Clojure. v2.5.0 includes GraalVM Native Image compatibility, misc improvements for modern JDKs, and a couple new features. https://github.com/http-kit/http-kit/releases/tag/v2.5.0 *- Sente v1.16.0* Sente is a library for Clojure + ClojureScript to help build reliable, high-performance realtime web applications over WebSockets and Ajax. v1.16.0 includes Jetty 9 + Undertow adapters, Clojure client support, and more. https://github.com/ptaoussanis/sente/releases/tag/v1.16.0 *- Timbre v5.0.0* Timbre is a pure Clojure + ClojureScript logging library that's easily configured with plain Clojure data and fns. v5.0.0 includes per-namespace minimum log levels to match Tufte, new Syslog + UDP appenders, improved documentation, and much more. https://github.com/ptaoussanis/timbre/releases/tag/v5.0.0 *- Carmine v3.0.0* Carmine is a pure Clojure client for Redis. It includes a basic message queue. v3.0.0 includes an important security fix (via Nippy update), and significant reliability improvements to Pub/Sub. https://github.com/ptaoussanis/carmine/releases/tag/v3.0.0 *- Nippy v3.0.0* Nippy is the fastest schema-less serialization library for Clojure, and can be used as a drop-in replacement for Clojure's reader. v3.0.0 includes easier upgrading from <= v2.14, options to exclude metadata on freeze/thaw, and more. https://github.com/ptaoussanis/nippy/releases/tag/v3.0.0 *- Tufte v2.2.0* Tufte is a s simple Clojure + ClojureScript performance profiling + monitoring library. Can be used to monitor application performance in dev/staging/production/etc. v2.2.0 includes optional per-namespace minimum levels to match Timbre. https://github.com/ptaoussanis/tufte/releases/tag/v2.2.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. To view this discussion on the web visit https://groups.google.com/d/msgid/clojure/4a492a2e-6d7d-4b93-8f8c-7436c4b28cd3n%40googlegroups.com.
[Ann] Tempura, a Clj+Cljs i18n translations lib with support for React
Hi folks! So this is the 1st of 4 libs I’ve been meaning to publish for forever. Available at: https://github.com/ptaoussanis/tempura Other libs (as usual) at: https://www.taoensso.com/clojure Enjoy, cheers! :-) \- Peter Taoussanis, [@ptaoussanis](https://twitter.com/ptaoussanis) -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[ANN] http-kit 2.2.0 final is out
On Clojars, and GitHub at: https://github.com/http-kit/http-kit/releases This release was put together with the help of (23!) individual contributors. Enjoy, cheers! :-) -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [ANN] Tufte, simple profiling and performance monitoring for Clojure/Script
Thanks Gary, happy to hear that :-) -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[ANN] Tufte, simple profiling and performance monitoring for Clojure/Script
On Clojars, and GitHub at: https://github.com/ptaoussanis/tufte Basically took the weekend to clean up Timbre's old profiling ns, generalize it, and move it to its own lib. Biggest difference for most folks will probably be the new documentation. Enjoy, cheers! :-) -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [ANN] better-cond 1.0.1
Really, really like this. Thank you Mark! -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [ANN] Truss, an assertions lib for Clojure/Script
> > Wow, this feels exactly right. I am eager to start using it, and delighted > it will be so easy. > Very happy to hear that James, thanks for saying so :-) -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [ANN] Truss, an assertions lib for Clojure/Script
> Thanks Peter, I like it a lot, I mean a lot… > Heh heh, thanks mimmo - appreciate that :-) -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [ANN] Truss, an assertions lib for Clojure/Script
BTW have had some folks comment on the length of the video. This wasn't clear, so will point it out now: if you're looking for a quick overview I'd start with the Quickstart (https://github.com/ptaoussanis/truss#quickstart) and examples (https://github.com/ptaoussanis/truss#detailed-usage) rather than the talk. The lib's *really* small and takes 2 seconds to learn - the talk's mostly there to go into motivations behind the lib and its design choices. If that stuff's obvious to you (or not interesting), feel free to just dive in to the examples. Only warning: the examples are mostly for syntax, not use case. You can certainly use Truss for simple type assertions, but that's rarely where it's most interesting. Personally, I've found it most useful in verifying assumptions about application state and that sort of thing. Or for more subtle type assertions in hairy code (e.g. re: the presence of nils, blank strings, number ranges, specific collection types or counts, conditions w/in `reduce`(or transducer) calls, etc.). Sweet spot's often in larger and/or more complex code but that's largely to taste. Litmus test: if you're writing a complex piece of code and you find yourself making implementation choices based on context that's currently clear to you from your understanding of how the application works or the state it'd be in if this code is running - that context might be worth formally capturing in a Truss assertion. -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[ANN] Truss, an assertions lib for Clojure/Script
Hi all, Quick update: have published a new assertions lib today for Clojure and ClojureScript called Truss. tl;dr - can help you improve Clojure/Script error messages in high-value locations. Docs and info at: https://github.com/ptaoussanis/truss Introductory talk at: https://youtu.be/gMB4Y-EIArA Hope someone finds this useful. As usual, please feel free to ping with questions/etc. Happy Tuesday! Cheers :-) - Peter Taoussanis -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [ANN] core.async-0.2.371
Excellent \o/, much appreciated! -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: Boxed math in transducers
Sorry- that should read "a little better", not "little better" ;-) -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: Boxed math in transducers
Hey Alex, Not sure I follow. If we deref (volatile! 5), the dereffed val is a number. `(inc @(volatile! 5))` will involve boxed math but `(inc ^long @(volatile! 5))` won't. So, for example: (defn core-take ; As in clojure.core ([n] (fn [rf] (let [nv (volatile! n)] (fn ([] (rf)) ([result] (rf result)) ([result input] (let [n @nv nn (vswap! nv dec) result (if (pos? n) (rf result input) result)] (if (not (pos? nn)) (ensure-reduced result) result (defn new-take ; Without boxed math ([^long n] (fn [rf] (let [nv (volatile! n)] (fn ([] (rf)) ([result] (rf result)) ([result input] (let [^long n @nv ^long nn (vswap! nv #(dec ^long %)) result (if (pos? n) (rf result input) result)] (if (not (pos? nn)) (ensure-reduced result) result Timing on the latter is little better. Does that make sense, or am I missing something? -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Boxed math in transducers
Hi all, Just noticed some use of boxed math in a couple of the Clojure 1.7 transducers (e.g. `take`). Would there be interest in a PR to add some numerical type hints? Cheers :-) -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[ANN] Recent clj/s library updates - September 2015
*Sente - v1.7.0-beta2 / 2015 Sep 4 (2 days ago)* *==* *Realtime web comms for Clojure/Script (think Socket.IO for Clojure).* https://github.com/ptaoussanis/sente/releases Notable recent changes: * Switched to Timbre v4 for cross-platform logging * Added support for nginx-clojure server * Fixed an important issue w/ Immutant server over Ajax *Timbre - v4.1.1 / 2015 Aug 16 (21 days ago)* *==* *Pure Clojure/Script logging + profiling.* https://github.com/ptaoussanis/timbre/releases Notable recent changes: * Full ClojureScript support, incl. logging call elision in prod * Support for MDC-like contexts * `get-env`, `log-env` macros * Signf. perf improvements, code refactor *Carmine - v2.12.0-beta1 / 2015 Aug 31 (6 days ago)* *==* *Clojure Redis client + message queue.* https://github.com/ptaoussanis/carmine/releases Notable recent changes: * Added CAS swap utils: `swap`, `hswap` (these work for arbitrary vals, incl. serialized Clojure values) * Continued performance work *Nippy - v2.9.0 / 2015 June 1 (92 days ago)* *==* *High-performance Clojure binary serialization.* https://github.com/ptaoussanis/nippy/releases Notable recent changes: * Significant speed+space improvements when serializing small vals * Continued misc performance improvements *Faraday - v1.7.1 / 2015 July 4 (94 days ago)* *==* *Clojure DynamoDB client.* https://github.com/ptaoussanis/faraday/releases Notable recent changes: * Support for new DDB types (Boolean, Null, Map, List) * Bunch of minor fixes/tweaks *Tower - v3.1.0-beta4 / 2015 Jul 13 (55 days ago)* *==* *i18n and L10n library for Clojure.* https://github.com/ptaoussanis/tower/releases Notable recent changes: * Lib updates are on hold; have a pair of new libs that I'd like to replace Tower with in future, just need to find time to cut releases. *Touchstone - v2.0.2 / 2014 Mar 30 (547 days ago)* *==* *A/B testing for Clojure.* https://github.com/ptaoussanis/touchstone/releases Notable recent changes: * Stable. Planning an update to add Cljs support in future. *Encore - v2.7.0 / 2015 Sep 6 (today)* *==* *General cross-platform Clojure/Script utils.* https://github.com/ptaoussanis/encore/releases Notable recent changes: * v2.x branch has dropped support for Clojure 1.4 *Upcoming stuff* *==* Bunch of libs I'd like to try release over the next few months, just need to find time to write docs + cut releases. *Useful links* *==* Libs homepage: https://www.taoensso.com/clojure Twitter (lib announcements, etc.): https://twitter.com/ptaoussanis As usual, please feel free to ping with any questions/problems/suggestions/whatever. Happy hacking, cheers! :-) -- *Peter Taoussanis*ptaoussanis at taoensso.com -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [ANN] Clojure 1.8.0-alpha2
Seems like a bug to me. Thanks Alex, was about to open an issue but seems you beat me to it :-) For anyone interested: http://dev.clojure.org/jira/browse/CLJ-1781 -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [ANN] Clojure 1.8.0-alpha2
Hey Alex, Looks terrific, thank you! Particularly excited about CLJ-703 and tuples. Quick question: are tuples intended to implement :kv-reduce? Currently (with 1.8.0-alpha2): (reduce-kv (fn [acc idx in] acc) nil [1 2 3 4 5 6 7]) ; = nil (reduce-kv (fn [acc idx in] acc) nil [1 2]) ;; = No implementation of method: :kv-reduce of protocol: ;; #'clojure.core.protocols/IKVReduce found for class: clojure.lang.Tuple$T2 Cheers :-) -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Surprised by behaviour of `compile` vs positional constructor fns
Hi all! Ran into some behaviour today that I wasn't expecting and am wondering if someone could shed some light. Steps to reproduce (reproducible with at least Clojure 1.4.0 and 1.7.0-alpha2): 1. Setup a namespace with `(defrecord Foo [x])`. 2. Call cider's `cider-load-current-buffer` in Emacs. 3. Evaluate `(compile 'the-ns)` in that namespace. At this point, we have: (instance? Foo (Foo. bar)) = true (instance? Foo (-Foo bar)) = false I wouldn't normally call `compile` like this, but I'm curious if someone has any idea what's actually happening? The `build-positional-factory` code seems to just call the `new` constructor anyway so it's not obvious to me why the behaviour would differ. Are the class files getting out of sync somehow? Thanks a lot, cheers! :-) -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: Surprised by behaviour of `compile` vs positional constructor fns
Hi Jozef, thanks a lot for the pointer - that does seem to be the cause! Will continue to track from there. Cheers :-) -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: ClojureScript: Keyword Breaking Change Around the Corner
Sorry for digging this up, just got bit hard by this behaviour and I'm wondering what the rationale was for not defining `identical?` as `keyword-identical?` currently is, and instead adding an additional `fast-identical?`. This way Clojure/ClojureScript code using `identical?` remains portable without breaking, and `fast-identical?` could be used internally and by folks familiar with the platform-specific ramifications. Or am I missing a subtlety here? Thanks a lot, cheers! :-) -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [ANN] Taoensso library updates / 2014 September
No problem. I just wanted to check that it was an intentional change, and not some unknown bug that had crept in. Sure, appreciate that. And one had (buggy CHANGELOG) - so good that you checked ;-) I just switched my app from Om/Sablono + Sente to Reagent + Sente and I'm currently working on cleaning things up now that Reagent has allowed for quite a bit of simplification so I'm in refactoring mode at the moment... Reagent's great, can't recommend it enough. About the only thing I could ask for is IE8 compatibility :) Hmm, yeah - haven't looked into that myself. Can't think of anything off-hand that'd make it impossible, PR would absolutely be welcome. Cheers! -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [ANN] Taoensso library updates / 2014 September
Hi Sean, thank you for pinging about this. The upgrade to v1.0.0 *is* actually breaking *if* you've been reading from the client-side :ch-recv directly. Most folks use the provided router utils, so it slipped my mind to document that - I'm really sorry. Will update the README and CHANGELOG now. In the meantime, the change you need to make: Server-side :ch-recv used to receive `event-msg` maps, and still does (no change). Client-side :ch-recv used to receive `event` vectors, and now instead receives `event-msg` maps like the server. Server-side `event-msg` maps contain keys: :ch-recv, :send-fn, :connected-uids, :client-uuid, :ring-req, :event, :?reply-fn. Client-side `event-msg` maps contain keys: :ch-recv, :send-fn, :state, :event. So (:event event-msg) will get you the old event vector. Motivations behind this change: 1. Client+server :ch-recv values are now consistent (both receive `event-msg`s). 2. Client+server routing is therefore now consistent. 3. The extra data in `event-msg`s makes it easier to write functional event handlers (i.e. that don't need access to a global send-fn or ch-recv). 4. That all event handlers now take a map makes future changes easier/non-breaking (we can add extra interesting keys in time w/o needing event handlers to change, etc.). Definitely should be documented though, again - really sorry about that! Please feel free to drop me an email if you run into any more trouble. Cheers! :-) - Peter Taoussanis -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
A very short explanation of transducers (a comparison to Ring middleware)
Seems a lot of folks have been having trouble grokking Clojure 1.7's new transducers stuff, which is a pity because they're wicked cool. Figured an analogy with something familiar might be helpful, so here's a very quick comparison with Ring middleware: https://gist.github.com/ptaoussanis/e537bd8ffdc943bbbce7 (updated since yesterday with a clarification by Rich). Hope that's helpful to someone. Please feel free to suggest improvements/corrections/whatever. Cheers! :-) -- *Peter Taoussanis*ptaoussanis at taoensso.com -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [ANN] Taoensso library updates / 2014 September
Thanks Sun, appreciate all your input on v2.7 - cheers! :-) -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[ANN] Taoensso library updates / 2014 September
(All new releases are now on BreakVersioning, https://github.com/ptaoussanis/encore/blob/master/BREAK-VERSIONING.md). *Sente - v1.0.0 / 2014 Sep 2 (today)* *==* *Realtime web comms for Clojure/Script (think Socket.IO but with Transit core.async).* https://github.com/ptaoussanis/sente/releases Notable recent changes: v1 release, optional Transit support, efficiency improvements (perf+bandwidth). *Carmine - v2.7.0 / 2014 Aug 27 (-6days)* *==* *Clojure Redis client + message queue.* https://github.com/ptaoussanis/carmine/releases Notable recent changes: lock-free Apache Commons Pool 2 pooling, updated Redis commands. *Faraday - v1.5.0 / 2014 July 26 (-38days)* *==* *Clojure DynamoDB client.* https://github.com/ptaoussanis/faraday/releases Notable recent changes: allow reading of unserialized bin values written with other clients. *Nippy - v2.7.0-RC1 / 2014 Aug 27 (-6days)* *==* *High-performance Clojure binary serialization.* https://github.com/ptaoussanis/nippy/releases Notable recent changes: ~40% perf bump over v2.6.0, LZ4 compressor, id'd extension types, Fressian comparison benchmarks. *Timbre - v3.3.0 / 2014 May 8 (-4months)* *==* *Pure-Clojure logging + profiling.* https://github.com/ptaoussanis/timbre/releases Recent changes: some minor fixes, appender updates. *Tower - v3.0.0 / 2014 Aug 28 (-5days)* *==* *i18n and L10n library for Clojure.* https://github.com/ptaoussanis/tower/releases Recent changes: final ClojureScript support, a bunch of general API improvements. *Touchstone - v2.0.2 / 2014 Mar 30 (-5months)* *==* *A/B testing for Clojure.* https://github.com/ptaoussanis/touchstone/releases Recent changes: stable. *Encore - v1.7.3 / 2014 Sep 1 (yesterday)* *==* *General cross-platform Clojure/Script utils.* https://github.com/ptaoussanis/encore/releases Recent changes: nothing major- a few new utils, a few fixes. *Useful links* *==* Libs on GitHub: https://github.com/ptaoussanis?tab=repositories Libs homepage: https://www.taoensso.com/clojure-libraries Twitter (lib announcements, etc.): https://twitter.com/ptaoussanis As usual, please feel free to ping with any questions/problems/suggestions/whatever. Happy hacking/Tuesday, cheers! :-) -- *Peter Taoussanis*ptaoussanis at taoensso.com -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: Sente - is it possible to close a connection?
Hi guys, (sente/chsk-reconnect! my-chsk) to disconnect (and then reconnect) a connection. Yup, you can call `chsk-reconnect!` from the client to reset its connections. This is useful mostly for picking up possible session changes after authentication, etc. There isn't currently a client-side `disconnect!` fn, but it'd be trivial to add (GitHub issue/PR welcome). I think you can send :chsk/close: Yeah, Sam's right (thanks Sam!). The server can send a `[:chsk/close]` event to a user-id to have all of those user's connections terminated. If any clients are still active though, they'll just automatically attempt to reconnect again. You'd normally send this event during the server's normal procedure to logout+cleanup a user. It seems that both chsk-reconnect! and :chsk/close events will let the client control its connection state, but there doesn't seem to be any way for the server to do so. Note that the `[:chsk/close]` special event is issued from the server, not the client. Reason it isn't documented yet is that it's still subject to change and may actually be dropped in future. Any change to the current behaviour will be listed in the CHANGELOG though. Still, I'd like the server to be able to sever connections, although its not a big deal since I can have the server send an event to tell the client to do so. Sure. One minor clarification: Sente intentionally decouples the notion of connection status and intention. It'll never assume that a dropped connection is _intentional_ - so it'll always try to recover. Connections come and go. It's the (higher-level) channel socket that you must close to convey that you're done with all comms and don't want any more connections. The (higher-level) channel socket can only be closed intentionally, it won't ever close due to changing network conditions, etc. Clients can indicate that they're done with all comms with a `(chsk/disconnect! client-chsk)` call. To do this from the server's end, the server may send some notification event to a user's clients - and those clients may choose to honour the termination request with `(chsk/disconnect! client-chsk)` calls. Does that make sense? So it sounds like the client-side `disconnect!` fn is what you want. Again - issues/PR welcome! Otherwise will try get this in by Wednesday, just busy juggling some urgent tasks. Cheers! :-) -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [ANN] Sente - Clojure(Script) + core.async + WebSockets/Ajax
Hey Henrik, Yes, thanks for Sente, Peter! Will Sente eventually use/support Transit? :-) Good question. Haven't actually taken a proper look at Transit yet, but definitely planning to when I can find some time. Issue / PR welcome till then if you or anyone else has some specific ideas in mind :-) Cheers! -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [ANN] Sente - Clojure(Script) + core.async + WebSockets/Ajax
You're very welcome Andrew, thanks for saying so! Cheers! :-) -- *Peter Taoussanis* taoensso.com https://www.taoensso.com -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: Help Getting Sente to Work
Ok, new github issues is here https://github.com/ptaoussanis/sente/issues/58. Great, thanks - will follow up there later today! Cheers :-) -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: Help Getting Sente to Work
Hey Tim, sorry for not responding earlier - didn't notice your post till now (not often on the group). Glad you found a solution (thanks Dan, Bob!). Just to clarify one thing though - a CSRF middleware is definitely recommended, but shouldn't be _necessary_. If Sente detects that no CSRF token is present in the Ring request during handshake, it'll print a warning to the JS console - but it should still continue to function normally after that. It sounds to me like the issue you were having was with the default `chsk-url-fn`. A misconfigured CSRF middleware would result in a 403 error (forbidden), not a 404 error (not found). The change you made for Austin looks good, but you will need to make an allowance for cases where the `websocket?` argument is false (i.e. for Ajax connections). You can see the `default-chsk-url-fn` as an example: (def default-chsk-url-fn `window-location` keys: :href ; \http://www.example.org:80/foo/bar?q=baz#bang\; :protocol ; \http:\ ; Note the : :hostname ; \example.org\ :host ; \example.org:80\ :pathname ; \/foo/bar\ :search ; \?q=baz\ :hash ; \#bang\ (fn [path {:as window-location :keys [protocol host pathname]} websocket?] (str (if-not websocket? protocol (if (= protocol https:) wss: ws:)) // host (or path pathname I've also amended the relevant docstrings to hopefully make all this clearer for folks in future. Feel free to ping me here or on GitHub if I was unclear somewhere or if you've got any follow-up questions. Cheers! :-) -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: Help Getting Sente to Work
The new docstring: https://github.com/ptaoussanis/sente/blob/65fcf8d9be14bfc69a7798b5c159780d1d2a3804/src/taoensso/sente.cljx#L787 -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: Help Getting Sente to Work
Wrt the CSRF issue, I'll try running again without it. Out of curiosity, sure - but if you've already gone to the effort of setting up the CSRF I'd leave it in (better to have it) :-) Now, a port changed fixed the issue for me. But before I passed in a *chsk-url-fn*, I was still getting a 404, even when trying with a browser (ie, using the correct port). Not sure about that, may be that something in your setup is tripping up the default `chsk-url-fn`. Would appreciate a GitHub issue on it and I'll take a closer look - may be a bug. That 404 went away when I included the CSRF middleware. I still had to pass in a custom *chsk-url-fn*, but I could use it through the browser, for example. My guess is that the 404 is going away because you're passing in a custom `chsk-url-fn`, not because of the CSRF middleware. I.e. it's a broken chsk url that's causing the 404, not anything to do with the CSRF. And I'm just grokking the false `*websocket?`* allowance now. Ie, an https ajax connection would give me a sente URL of *wws://172.28.128.5:8090/chsk http://172.28.128.5:8090/chsk*. Is that right? What about plain http? The `chsk-url-fn` will be called with: 1. The path as given to the client-side `make-channel-socket!` fn (usu. /chsk). 2. A window location map of the current page. 3. A bool indicating whether Sente is requesting a WebSocket (true) or Ajax (false) connection. From these, your fn will need to produce an URL that matches your server-side channel socket route. For WebSocket connections you'll want the URL to start with ws:// (insecure) or wss:// (secure). For Ajax connections you'll want the URL to start with http://; (insecure) or https://; (secure). I wouldn't stress too much about that though - let's start with a GitHub issue since it's quite possible I can mod the default fn to cover your use-case automatically. Ideally you shouldn't need to fiddle with any of this :-) Cheers! -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [ANN] Sente - Clojure(Script) + core.async + WebSockets/Ajax
For those that might be following, have pushed `v0.10.0` so long: https://github.com/ptaoussanis/sente/releases/tag/v0.10.0 The server-side `make-channel-socket!` fn's return value now includes a `:connected-uids` atom key. You can deref that to get a realtime snapshot of all connected user-ids, or you can attach a watch to get notified of any changes as they happen. This makes something like a who's online now trivial, and is a good foundation for higher-order stuff like subscriptions, etc. Also updated the reference example to show how one would use this for a simple broadcast. -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [ANN] Sente - Clojure(Script) + core.async + WebSockets/Ajax
So yeah, I think that exposing a list will get us pretty far. The missing piece, then, would be the ability for a a client to send a connection request for a specific channel. I'll be honest I'm a little hesitant to add any kind of room/subscription facilities to Sente itself... My thinking currently goes: * Far as I can tell (?), this is always _very_ easy to do application-side. * Doing it application-side gives a lot more flexibility. For example, what if you've got multiple servers and want a distributed/db-backed subscription index? * For general hygiene I prefer keeping state (like subscriptions) separate from the comms mechanism itself. Keeping subscription info in Sente makes it tricky to get to if you want to do something unexpected with it. When you control the shape+location of the relevant data/atom(s), you're free to use it and bash on it however you like. Instead, I'd propose to just expose a set of currently-connected uids. You can then intersect that set against any subscription/channel logic you may have. Having said all that, I'm not sure what Socket.IO's rationale was when they chose to bundle subscription semantics into the core API so I might well be missing something... Does that make sense? What do you think? Is your concern more that maintaining your own subscription data will be a nuisance, or that it's difficult to do? Am definitely open to ideas I may not have thought of. -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [ANN] Sente - Clojure(Script) + core.async + WebSockets/Ajax
Hey Sam! it doesn't look like the list of all connected users is available in the API. Yeah, that's right. Have been punting on this... For the moment have left it up to applications to decide who they're interested in broadcasting to. This might be everyone that's connected, everyone that's connected with certain credentials, everyone subscribed to certain topics, etc. Basically the application's expected to keep an appropriate index of event-types - user-ids. Haven't thought much about what kind of help the core API could offer. Probably a good starting point would be a simple set of all currently connected uids. Then folks could intersect that against their own subscriptions, etc. Would that be helpful in your case? Otherwise, like I say - haven't thought much about this so ideas would be very welcome. Cheers! :-) -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
[ANN] Taoensso library updates / Apr 2014
Hi all, quick batched update on some libs that I put out. Hope someone finds these useful. As usual, API docs are available on each GitHub page. Have fun, cheers :-) *Sente - v0.9.0 / 2014 Mar 29 (NEW)* *==* *Realtime web comms for Clojure* https://github.com/ptaoussanis/sente/releases Recent changes: efficiency+performance improvements, doc improvements. *Carmine - v2.6.0 / 2014 Apr 1* *==* *Clojure Redis client + message queue* https://github.com/ptaoussanis/carmine/releases Recent changes: performance+reliability updates, prep for Redis Cluster support, HyperLogLog support. *Faraday - v1.3.0 / 2014 Mar 30* *==* *Clojure DynamoDB client* https://github.com/ptaoussanis/faraday/releases Recent changes: better DynamoDB number support, more connection options. *Nippy - v2.6.0 / 2014 Mar 30* *==* *High-performance Clojure binary serialization* https://github.com/ptaoussanis/nippy/releases Recent changes: efficiency improvements, API improvements, some new utils. Benchmarks now include Fressian comparison. Work on v2.7.0 is also underway with an additional ~40% perf bump. *Timbre - v3.1.6 / 2014 Mar 16* *==* *Pure-Clojure logging + profiling* https://github.com/ptaoussanis/timbre/releases Recent changes: some minor fixes, mostly relating to profiling. *Tower - v2.1.0 pre-release / 2014 Mar 30* *==* *i18n and L10n library for Clojure* https://github.com/ptaoussanis/tower/releases Recent changes: added ClojureScript translation support. *Touchstone - v2.0.2 / 2014 Mar 30* *==* *A/B testing for Clojure* https://github.com/ptaoussanis/touchstone/releases Recent changes: stable. ClojureScript support is in the pipeline. *Useful links* *==* Libs homepage: https://www.taoensso.com/clojure-libraries Twitter (lib announcements, etc.): https://twitter.com/ptaoussanis -- *Peter Taoussanis*ptaoussanis at gmail.com -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [ANN] Taoensso library updates / Apr 2014
You're very welcome Leif, cheers :-) -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Unexpected core.async timeout behaviour
Hi all, quick question: `(dotimes [_ 5] (go (! (async/timeout 100` runs as expected. `(dotimes [_ 5] (go (! (async/timeout (+ 50 (rand-int 100))` produces an error: ( (.size takes) impl/MAX-QUEUE-SIZE) java.lang.AssertionError: Assert failed: No more than 1024 pending takes are allowed on a single channel. It appears (?) that there's a (surprisingly low?) limit to the number of unique timeout timestamps that can be simultaneously queued. Is this the expected behaviour running Clojure 1.6.0, core.async 0.1.278.0-76b25b-alpha? Much appreciated, thanks! Cheers :-) -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: Unexpected core.async timeout behaviour
Hi Tim, thanks for the info! It's not clear to me that this is the same issue, unfortunately. (Though I may be missing something obvious). In the example I've provided above, we're actually creating a _new_ channel for each take. The problem appears to be either some interaction between the loop and core.async that I'm not aware of, or something on the _implementation-end_ that is bumping up against the referenced issue (i.e. an insufficiently-buffered channel somewhere). So there's actually no channel here that I could be buffering, since it's not my channel that's overflowing. Again, modulo me missing something obvious :-) Does that make sense? -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: Unexpected core.async timeout behaviour
Please, not at all! Appreciate any ideas :-) -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: Unexpected core.async timeout behaviour
Okay, fantastic - appreciate the detailed info Timothy! This did actually came up in staging today; reduced it to the toy example here. Now that I understand what's happening, let me think about it a little and get back to you. BTW I don't think I've ever thanked you personally for your work on core.async. It's incredible, a real game changer and a pleasure to work with - so thank you. -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: Unexpected core.async timeout behaviour
One thing I'm not clear on: if I've understood your explanation correctly, I would expect the 100ms timeout to produce this error _more_ (not less) often. So can I just confirm some things here? 1. `async/timeout` calls can (always?) get cached to the nearest TIMEOUT_RESOLUTION_MS. 2. In this tight loop example, that means that `!` is sometimes getting called against the same (cached) timeout channel. 3. It's happening sufficiently often (do to the high loop count+speed) to overflow the [unbuffered] timeout channel's implicit take buffer. Is that all right? If so, why isn't the fixed `(async/timeout 100)` channel producing the same (or worse) behaviour? Is something preventing it from being cached in the same way? -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: Clojure 1.6.0-RC1 - LAST CHANCE, PLEASE TEST
I've got RC1 running in a number of places, all working well. -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [ANN] Sente - Clojure(Script) + core.async + WebSockets/Ajax
Hi Mark, I'm trying to learn Sente using the LightTable browser connected repl. Ahh, nice. Haven't tried LightTable yet myself, but I'd think it should work okay. From the JS console, I see repeated, failed attempts to connect the server. The URL is what's tripping you up here. Is there a reason you specifically want to provide an absolute URL? At the moment `make-channel-socket!` just takes a path (like /chsk). The host and port, etc. will all be determined for you automatically. /chsk is a reasonable choice btw - it's not user-facing so doesn't need to be particularly meaningful to anyone but you. Taking a very quick look at the source for the CLJS make-channel-socket!, it seems that it tries to resolve the url using the CLJS chsk-url function which, in turn, uses encore/get-window-location. That's correct. It just grabs the host and protocol of whatever page is serving the JavaScript. HTTPS protocols will be converted to WSS, everything else goes to WS. You should be fine there, I'd think. (put! ch-chsk From client!) Note that you'll never be putting to the `ch-chsk` yourself, it's for receiving only. To send events you'll use the `chsk-send!` fn (the API is described at https://github.com/ptaoussanis/sente#now-what). I also updated the repo a couple days ago to include a working example project that you could pull into LightTable to hack on. Otherwise feel free to open a GitHub issue if you have any other questions - am happy to help. Cheers :-) - Peter -- 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] Sente - Clojure(Script) + core.async + WebSockets/Ajax
and that necessitated delivering my HTML through http-kit rather than the shortcut of reading it from the file system using file://... Yes, good catch - sorry, forgot to mention that. Once I did that, an assertion nicely documented the use of chsk-send! (thanks for that!). One small thing that tripped me up: It seems the event id must be a namespaced keyword. I haven't thoroughly rtfm yet so if that's doc'd, bad on me. It's documented but easy to miss - I'll add an extra assertion to print on malformed event ids (thanks for the feedback!). Cheers :-) -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: [ANN] clojure.test.check (previously, simple-check)
Congrats Reid, thanks a lot for all your work on this! Have only been using simple-check for a little while now, but it's already paid big dividends in production. One of the most concretely useful testing tools I've ever used. For folks that haven't tried it, I'd absolutely recommend taking a look. Great stuff. Cheers! :-) - Peter -- 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] Sente - Clojure(Script) + core.async + WebSockets/Ajax
@Base This looks great! can't wait to try it out. Well done. Much appreciated, hope it's useful :-) @edbond Thanks. Can you compare sente with chord? Sure, I can try - have never actually used Chord though (it wasn't around when I wrote Sente's predecessor) - so I can only comment superficially on what I've gleaned from the README now (would appreciate any corrections!). Similarities: * Both seem to offer edn WebSocket messages over core.async channels. * Both seem to require http-kit for the moment. Primary difference seems to be that Chord supports only WebSockets (?) whereas Sente will fall back to Ajax when WebSockets are unavailable. This has ramifications for the API where Chord seems to prefer working with the channel directly and Sente uses a send fn to wrap away some of the protocol differences. Sente's wrapping extends to allow things like optional callbacks over WebSockets (something not natively available) and broadcasting to multiple clients (e.g. when a particular user has multiple browser tabs and/or devices connected simultaneously, etc.) which I've found important in practice. Some web apps don't do this very well (even Google seems to struggle with it), so having a sensible solution baked in can be helpful. Am not sure what Chord's doing in the way of reconnects, etc. tl;dr Chord seems be a relatively close-to-the-metal mapping of WebSockets to edn channels where Sente is more like Socket.io with edn channels. I'd probably select between the two based on use-case though, again, I'm not at all familiar with Chord or other alternatives so I may well be off here. Hope that helps a little, cheers! :-) -- 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] Sente - Clojure(Script) + core.async + WebSockets/Ajax
Quick addendum: I've had a few folks ask about various security implementations. So first up - as I mention in the REAME, I have had to make some changes to the codebase for the public release so I wouldn't quite trust anything pre-1.0 in production just yet (there's likely at least minor bugs). Having said that, the general model has played out well in practice elsewhere. A few specifics that have come up: * Tools.reader's read-string is used server-side, so arbitrary code evaluation isn't an issue. * It _is_ possible for the server to receive malformed or hostile requests (as it would be via any other protocol). The implementation itself doesn't depend on the accuracy of any information provided by the client, but the usual security measures will apply server-side for code you write: only respond to well-formed requests, ensure users are authenticated+authorised where appropriate, etc. Auth stuff is beyond the scope of Sente, but it won't do anything to get in your way. * Ring session information _is_ made available server-side for all requests (including WebSocket requests), so the commonest session-based auth methods basically work out-the-box. * The client-side user-id *can* be forged, but it isn't used for anything that's security sensitive. It's there only as an optimisation to disable Ajax long-polling when a user clearly isn't logged in. If someone were to fudge the id, the only negative effect would be an the creation of an unnecessary long-polling connection that is never used (the server will never acknowledge it). * HTTPS works seamlessly, even for WebSockets. When the page is served over HTTPS, Sente will work over HTTPS. * CSRF protection is baked in, but you need to do a few things on your end to enable it. A client-side warning will be printed when no CSRF code is provided. Recommend checking out the example project for details (it includes CSRF protection). So tl;dr - there's a bit going on, but nothing that's fundamentally different from the usual Ring security model. Auth and CSRF are the responsibility of the app as usual, but Sente provides hooks in the appropriate places to plug in whatever you're using. Will try update the README later today with the info above. Hope that helps, happy Friday! :-) - Peter -- 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] Sente - Clojure(Script) + core.async + WebSockets/Ajax
Hi folks, Quick post to announce a new lib release: https://github.com/ptaoussanis/sente From the README: *Sente* is small client+server library that makes it easy to build *reliable, high-performance realtime web applications with Clojure*. * *Bidirectional a/sync comms* over both *WebSockets* and *Ajax* (auto-selecting). * *Robust*: auto keep-alives, buffering, mode fallback, reconnects. * edn rocks. So *send edn, get edn*: no json here. * *Tiny, simple API*: make-channel-socket! and you're good to go. * Automatic, sensible support for users connected with *multiple clients* and/or devices simultaneously. * *Flexible model*: use it anywhere you'd use WebSockets or Ajax. * *Fully documented, with examples* (more forthcoming). * Small: *less than 600 lines of code* for the entire client+server implementation. * *Supported servers*: currently only http-kit, but easily extended. --- Have been using something like this in production since a little after core.async came out, and wouldn't want to go back. Note that I tweaked a few things for the public release so there may be some rough edges initially. An example project's included (new as of today) and there's a Leiningen alias configured to handle all the fiddly bits like getting the Cljx and Cljs to compile: just download, `lein start-dev` at a terminal, and you're good to go. Any questions/problems/whatever, you can reach me here or on GitHub. That's it! Happy hacking, cheers! :-) - *Peter Taoussanis* https://twitter.com/ptaoussanis https://www.taoensso.com/clojure-libraries -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Clojure web server benchmarks
Thanks Jim, that's terrific! For those following, updated results now available: https://github.com/ptaoussanis/clojure-web-server-benchmarks -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Clojure web server benchmarks
Oh wow, that's fantastic! For those watching: Xfeep's fixed a number of config issues, updated all the servers, and completely updated the chart. Absolutely well worth a look if you're interested in Clojure web server performance. * Results are here: https://github.com/ptaoussanis/clojure-web-server-benchmarks * His GitHub page: https://github.com/xfeep * His nginx/clojure lib: https://github.com/xfeep/nginx-clojure Cheers! :-) -- *Peter Taoussanis* -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Clojure web server benchmarks
Hi Xfeep, Thank you, I could never understand what configuration (setting) was wrong. I do not have time to update the project now, but if you give me your GitHub user name - I can add you to the repo? You can update the tests and/or results if you want to. Thank you also for your work on nginx-Clojure! Cheers :-) -- *Peter Taoussanis* https://www.taoensso.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: Clojure web server benchmarks
You are welcome. My Github user name is xfeep. I'm glad to join the repo. Thanks for your invitation! Okay, great - I have added you. You can make any changes you like. I would be happy if you or someone else wants to maintain (update) the repo. Cheers :-) -- *Peter Taoussanis* -- -- 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] Cloact 0.1.0 - Yet another React wrapper for ClojureScript
Hi Dan, This seems like a really smart approach to me. I've been playing with a number of ways of structuring a large Cljs application recently - and the way Cloact cooperates with atom derefs is pretty inspired. It's flexible, it's fast, it's natural - and it makes transition from a non-React codebase easy (trivial in my case since I already using Hiccup). Seriously great stuff, thank you for sharing this! BTW for those looking for single-state snapshots (for undos, tooling, debugging, etc.) - all you'd need to do is merge any individual atom snapshots that constitute your full application state. It should be easy to extend Cloact (or something like Reflex https://github.com/lynaghk/reflex) to do the state tracking automatically. Cheers! :-) - Peter Taoussanis -- -- 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: [ClojureScript] [ANN] Cloact 0.1.0 - Yet another React wrapper for ClojureScript
Quite another thing is if it is a good idea to do that :-) If possible, I'd say it is better to keep state that belongs together in a single atom. Am looking at this from a performance point of view. You're marking components as dirty when there's any change in an atom being deref'ed by the component, right? But I'm guessing it's quite common for a component to be dealing with only a small subset of the data within a larger state atom. (This is what Om's cursors are addressing, it seems). In that case (please correct me if I'm wrong) - the number of needless rerenders will grow with the number of component-irrelevant bits of information in each atom. One simple way of addressing that is to use more, smaller atoms - or to use views on atoms (as Reflex does). For example instead of marking a component as dirty when @my-atom changes, we could mark it as dirty only when `(:relevant-submap @my-atom)` changes. Does that make sense, or am I misunderstanding something? -- -- 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: [ClojureScript] [ANN] Cloact 0.1.0 - Yet another React wrapper for ClojureScript
But it would probably be better to just pass (:relevant-submap @my-atom) to a sub-component. The subcomponent will only be re-rendered when its arguments (i.e the params map and possible children) changes. Ahh, gotcha. Of course, thank you! Also, React is fast enough that a few re-renderings won't even be noticeable most of the time. Unless React actually has to change the DOM the cost is very low. Okay, also good to know. Very excited to start playing with this properly soon. All the best, cheers! :-) -- -- 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: Quick library status updates (logging, Redis, i18n, etc.)
Have had some folks ask about the Carmine appender performance I quoted - the 50k/sec figure is conservative if we're talking about server hardware. If you're not logging awfully large arguments (large state maps, etc.) - you'll basically see standard [unpipelined] Redis write performance for your system. Each log entry consists of a serialization and 2 Redis ops (ZSET, HSET). Log entry garbage collection is done infrequently so the amortised cost is low. I see around 250k writes/sec on an Intel Xeon E3-1270 Quadcore Haswell. That's an upper-limit for the Redis server, the actual bottleneck will likely be the clients making the logging calls. -- *Peter Taoussanis* -- -- 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.
Quick library status updates (logging, Redis, i18n, etc.)
Hi all, quick batched update on some libs that I'm maintaining: *Timbre - v3.0.0-RC2 - 2013-12-04* == Logging profiling tools Major recent changes: * Carmine (Redis) appender that serializes log entries to length-limited, rotating lists by log level. Allows easy querying+manipulation of log as a Clojure value: the log is just a vector of ordered maps. Works great with Datomic's query engine, or regular seq fns (filter, group-by, sort-by, etc.). * Support for ad hoc logging config - no longer reliant on a global config atom (though it's still there for convenience). * Appender rate limiter has been made a lot more flexible, useful by default. https://github.com/ptaoussanis/timbre https://github.com/ptaoussanis/timbre/blob/master/CHANGELOG.md http://ptaoussanis.github.io/timbre/ - API docs *Carmine v2.4.0 - 2013-11-18* === Redis client message queue Major recent changes: * Completely rewrote message queue system - numerous big improvements, incl. important reliability improvements. * Completely rewrote reply parsing system for robustness + flexibility. * Brought Tundra out of alpha, added S3 datastore. Allows automatic data replication to a secondary data store, and an option to automatically evict cold keys from memory. Basically provides a convenient way of running Redis against much larger datasets than can fit in memory. * Big improvements to atomic operations API - everything has been unified behind a single interface. * A ton of other small improvements, including bug fixes. https://github.com/ptaoussanis/carmine https://github.com/ptaoussanis/carmine/blob/master/CHANGELOG.md http://ptaoussanis.github.io/carmine/ - API docs *Nippy v2.5.1 - 2013-12-04* = Extendable, high-performance, binary serialization Major recent changes: * Continued performance work. Think it's ballpark about as fast as it's going to get. * LZMA2 very-high-compression compressor (ahem). * New Java Serializable fallback support. Basically serializes anything you can throw at it - will select the best available method. Notably Throwables of all types are now covered. https://github.com/ptaoussanis/nippy https://github.com/ptaoussanis/nippy/blob/master/CHANGELOG.md http://ptaoussanis.github.io/nippy/ - API docs *Tower v2.0.1 - 2013-11-06* = Internationalisation (i18n) and localisation (L10n) tools Major recent changes: * Stable. https://github.com/ptaoussanis/tower https://github.com/ptaoussanis/tower/blob/master/CHANGELOG.md http://ptaoussanis.github.io/tower/ - API docs *Faraday v1.0.1 - 2013-12-04* == Amazon DynamoDB client Major recent changes: * Went 1.0, production-ready. https://github.com/ptaoussanis/faraday https://github.com/ptaoussanis/faraday/blob/master/CHANGELOG.md http://ptaoussanis.github.io/faraday/ - API docs *Touchstone v2.0.1 - 2013-11-25* = High performance, rapidly converging A/B testing tool Major recent changes: * Stable. https://github.com/ptaoussanis/touchstone https://github.com/ptaoussanis/touchstone/blob/master/CHANGELOG.md http://ptaoussanis.github.io/touchstone/ - API docs *General status* Tower still requires Clourescript dictionary support - hope to find some time to look into that in the coming weeks. Carmine's got a bunch of changes coming up to support Redis Cluster Sentinel - though I'm waiting on the specs there to get finalised first. Everything else should (hopefully) stay more or less stable from here (modulo bugs). Carmine's in good shape as of v2.4. Timbre's in good shape as of v3, though the RC will need some time to settle before I'm confident it's good for production. Ahh- yeah, nothing else I can think of. Hit me up if you have any questions/problems/wanna-say-hi/whatever. Cheers! :-) -- *Peter Taoussanis*ptaoussanis at gmail.com https://twitter.com/ptaoussanis -- -- 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: Quick library status updates (logging, Redis, i18n, etc.)
Thanks Baishampayan, Karsten - appreciate it! -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Quick library status updates (logging, Redis, i18n, etc.)
Hi Colin, Timbre looks quite cool but just a bit surprised to see it using spit. Surely thats not particularly performant or is there something I'm missing? Spit does alright in a lot of cases (certainly for prototyping, etc.). The example appenders are there mostly to show how appenders are written so the goal was brevity+clarity. In production you'll generally be writing to a db or some other form of distributed storage, so you'll be using your own appender. The Carmine appender is performant out-the-box (~50k+ writes/sec on decent hardware). -- *Peter Taoussanis* -- -- 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] Carmine (Redis client) v2, Nippy (serializer) v2 are out
Thanks Las, much appreciated! Just shout if there's anything I can assist with. - Peter -- -- 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] Carmine (Redis client) v2, Nippy (serializer) v2 are out
Hey all, quick update: just pushed *Carmine v2.0.0* and *Nippy v2.0.0* to Clojars. Carmine: GitHub https://github.com/ptaoussanis/carmine | Changeloghttps://github.com/ptaoussanis/carmine/blob/master/CHANGELOG.md| API docs http://ptaoussanis.github.io/carmine/ | [com.taousso/carmine 2.0.0.0] Nippy: GitHub https://github.com/ptaoussanis/nippy | Changeloghttps://github.com/ptaoussanis/nippy/blob/master/CHANGELOG.md | API docs http://ptaoussanis.github.io/nippy/ | [com.taousso/nippy 2.0.0.0] Thanks to all the folks that helped get these ready. Happy hacking, cheers! - Peter Taoussanis (taoensso.com https://www.taoensso.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: core.async
Oh man, how is everyone _not_ running around screaming about this right now? It seems to me that the Clojure space suffers from an unusual malady: it's busy sitting here quietly advancing half of applied computer science, and no one seems to notice the full extent of its import. Man, I'm sometimes forced to just stop for a moment and sit in awe at how lucky I've been to see this stuff develop and to get to use it. Clojure was huge. And before we're close to digesting its potential, there's protocols. And Clojurescript. Then Datomic. Reducers. Now this. And it's not about everything being necessarily _novel_, though there is often novelty. For me it's largely about the cohesiveness of the design and the consistency of the overarching vision. Everything _fits_. I feel like I'm using tools and ideas that weren't just developed with care, or cleverness, or experience, but all of those things in a kind of harmony that's vanishingly rare to find in any field. I honestly feel like I'm witnessing history being made. Thank you Rich Hickey, and everyone else in this community for making my work every day so enjoyable. - Peter Taoussanis -- -- 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: Looking for Clojure freelancers
Hi Xavi, thanks for getting in touch. Really sorry for taking forever to get back to you about this! I've got your details on file now (thanks for that!). Will get in touch if any projects come up for which I think I could use you. In that case I'll send you an email with the project details (what I need, what the timeframe is, payment info, etc.) - and you can get back to me if you're interested. All the best, cheers! On 5 June 2013 04:57, xavi xavi.caba...@gmail.com wrote: Hi Peter, (I'm going to follow your suggestion and reply publicly.) I would be interested in collaborating with you. You'll find my contact details and a summary of my experience in xavi.caballe.pro . I come from the Rails world (I'm also an ex-Objective-C, ex-Java, and ex-Perl developer). I still work with Rails but my current language of choice is Clojure. My main open-source contribution is noir-auth-app, a base web app with authentication, https://github.com/xavi/noir-auth-app . This is a byproduct of a side-project that I'm developing in Clojure. Also, recently I worked for a month in an all-Clojure shop doing the full-stack development (Clojure + ClojureScript + Datomic) of a new feature. I'm more a generalist and I am happy working both in the back-end and the front-end. As for databases, I'm comfortable with SQL, but with Clojure I've only worked with MongoDB and Datomic for now. I'm based in Barcelona and my rate is €25/hr but I'm open to negotiate it. Cheers! Xavi Caballé http://xavi.caballe.pro On Monday, June 3, 2013 1:38:20 PM UTC+2, Peter Taoussanis wrote: Hi all, From time to time I have need for one or two extra hands (or, would that be pairs of hands?) on larger projects. Specifically, am looking for Clojure developers that'd be interested in occasional adhoc/freelance development work. Most of my work is on the web application side, but it can vary. What I'd like to ask is this: if anyone's interested, drop me an email (*ptaoussanis at taoensso.com*) with some basic info including: - Contact details (would prefer an international telephone number also if possible). - Your experience / informal CV (open-source stuff is my preferred reference, especially if it's Clojure-based). - Any particular areas of interest/expertise (e.g. you especially want to work with Datomic, backend services, Clojurescript, whatever). - Your rate + how negotiable it'd be and/or how it'd scale with longer-term jobs. I can then keep your details on file and give an occasional shout if something comes up that I could potentially use you for. Whole thing'd be about as informal as it gets: terms will vary based on the particular job, but I'll include all of that in the email so you can decide if/when something grabs your fancy. Cheers! - Peter (taoensso.com https://www.taoensso.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 a topic in the Google Groups Clojure group. To unsubscribe from this topic, visit https://groups.google.com/d/topic/clojure/DNWXn8gi-Wg/unsubscribe?hl=en. To unsubscribe from this group and all its topics, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out. -- *Peter Taoussanis* ptaoussa...@gmail.com taoensso.com https://www.taoensso.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.
[ANN] Taoensso library updates (major: Carmine v2-beta1, Nippy v2-RC1)
Hey all, a bunch of (batched) library updates for today - happy Wednesday! Sorted in order of update size since last group post: *Carmine* - Redis client message queue (GitHubhttps://github.com/ptaoussanis/carmine ) Current version: *2.0.0-beta1* -* *MAJOR RELEASE (BREAKING) Clojure dependency: 1.4+ Recent changes: API improvements, integration with *Nippy v2* for pluggable compression+crypto, improved performance, additional message queue features, and *Tundra* - an API for archiving cold data to an additional datastore. (A *Faraday* DynamoDB implementation is included). Tundra is probably the most exciting change IMO, though it's still early alpha. It's easily extendable to any K/V-capable datastore. Checkout the README https://github.com/ptaoussanis/carmine#tundra for details. Thanks to Ronen (narkisr), Max Penet (mpenet), 'ToBeReplaced', and others for their help with this release. *Nippy* - serialization library (GitHubhttps://github.com/ptaoussanis/nippy ) Current version: *2.0.0-RC1 - *MAJOR RELEASE (NON-breaking) Clojure dependency: 1.4+ Recent changes: *big* performance improvement over 1.x, and the introduction of pluggable compression and encryption. Snappy and AES128 implementations are provided out-the-box. There's also a new header format that's allowed a number of API improvements including auto-detection of when frozen data is compressed, etc. Fully backwards-compatible with 1.x, though I'd test before deploying to a production env. Special thanks to Max Penet (mpenet) for his assistance with the perf work! *Faraday* - DynamoDB client (GitHub https://github.com/ptaoussanis/faraday ) Current version: *0.10.1 *Clojure dependency: 1.5+ Recent changes: A number of bug fixes and conveniences like blockable table updates, multi-request batch ops (e.g. to get past throughput limits), multi-stage throughput updates, and some new sugar for bulk ops and result destructuring. I'll have the opportunity to start rolling this into production soon, so any lingering issues should hopefully be resolved quickly and the countdown to 1.0 can start. BTW thoroughly enjoying DynamoDB so far - don't think it's seeing the kind of publicity it deserves. *Timbre* - logging profiling library (GitHubhttps://github.com/ptaoussanis/timbre ) Current version: *2.1.2 *Clojure dependency: 1.4+ Recent changes: Nothing major - bug fixes, etc. *Tower* - i18n L10n library (GitHub https://github.com/ptaoussanis/tower ) Current version: *1.7.1 *Clojure dependency: 1.4+ Recent changes: Nothing major - bug fixes, etc. *Touchstone* - A/B testing library (GitHubhttps://github.com/ptaoussanis/touchstone ) Current version: *1.0.0 *Clojure dependency: 1.4+ Recent changes: Stable. As usual, all libs available at https://www.taoensso.com/clojure-libraries.Feedback and pull-requests very welcome! Happy hacking, cheers! - Peter Taoussanis (taoensso.com https://www.taoensso.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: [ANN] Taoensso library updates (major: Carmine v2-beta1, Nippy v2-RC1)
Oh Emlyn Corrin (emlyn) just reminded me that he's also been adding some new appenders to Timbre! There's a socket appender, IRC appender, and MongoDB (Congomongo) appender (just awaiting merging now). Cheers -- -- 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: [pre-ANN] test2, the last Clojure testing framework
Ooh, okay a little off topic here, but Expectations looks fantastic. Thanks a lot Jay! -- -- 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] Library updates (Redis DynamoDB clients, logging+profiling, i18n+L10n, serialization, A/B testing)
Have had one or two people ask me about this - all libraries are under the EPL v1.0 http://www.eclipse.org/legal/epl-v10.html, the same license as Clojure itself. Cheers! - Peter -- -- 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] Library updates (Redis DynamoDB clients, logging+profiling, i18n+L10n, serialization, A/B testing)
Hi folks, just a quick update on some libraries - figure I'll do this and future updates in batches to keep from spamming the group. Hoping the formatting comes through here... *Carmine* - Redis client message queue (GitHubhttps://github.com/ptaoussanis/carmine ) Current version: *1.9.1* Clojure dependency: 1.4+ Recent changes: message queue features, distributed locks, performance improvements. Thanks to Ronen (narkisr) for most of the new features. *Faraday* - DynamoDB client (GitHub https://github.com/ptaoussanis/faraday) - NEW LIBRARY Current version: *0.5.0* Clojure dependency: 1.5+ Recent changes: full DynamoDB v2 API coverage. Thanks to James Reaves whose library (Rotary) provided the basis for Faraday. *Nippy* - serialization library (GitHubhttps://github.com/ptaoussanis/nippy ) Current version: *1.2.1* Clojure dependency: 1.3+ Recent changes: sorted set+map support, performance improvements. *Timbre* - logging profiling library (GitHubhttps://github.com/ptaoussanis/timbre ) Current version: *2.0.0 *- MAJOR RELEASE Clojure dependency: 1.4+ Recent changes: tools.logging support. *Touchstone* - A/B testing library (GitHubhttps://github.com/ptaoussanis/touchstone ) Current version: *1.0.0* - MAJOR RELEASE Clojure dependency: 1.4+ Recent changes: inherited test-config support, marked API as stable. *Tower* - i18n L10n library (GitHub https://github.com/ptaoussanis/tower ) Current version: *1.7.0* Clojure dependency: 1.4+ Recent changes: Nothing major. I've started to push new releases (like Faraday) to Clojure 1.5+ but will maintain backwards-compatibility with 1.4+ where possible. Nippy is an exception which I'll keep at Clojure 1.3+ for at least the foreseeable future. For those interested I've now setup a page at https://www.taoensso.com/clojure-libraries to keep track of the libraries I'm currently maintaining. In any event, will update the group from time to time when there's a bunch of significant changes queued like today. As always, am very happy to take ideas/comments/PRs/whatever - a lot of the recent improvements above were a result of direct/indirect input from other folks (thank you!). Have an awesome Monday, cheers! - Peter Taoussanis (taoensso.com https://www.taoensso.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.
Looking for Clojure freelancers
Hi all, From time to time I have need for one or two extra hands (or, would that be pairs of hands?) on larger projects. Specifically, am looking for Clojure developers that'd be interested in occasional adhoc/freelance development work. Most of my work is on the web application side, but it can vary. What I'd like to ask is this: if anyone's interested, drop me an email (*ptaoussanis at taoensso.com*) with some basic info including: - Contact details (would prefer an international telephone number also if possible). - Your experience / informal CV (open-source stuff is my preferred reference, especially if it's Clojure-based). - Any particular areas of interest/expertise (e.g. you especially want to work with Datomic, backend services, Clojurescript, whatever). - Your rate + how negotiable it'd be and/or how it'd scale with longer-term jobs. I can then keep your details on file and give an occasional shout if something comes up that I could potentially use you for. Whole thing'd be about as informal as it gets: terms will vary based on the particular job, but I'll include all of that in the email so you can decide if/when something grabs your fancy. Cheers! - Peter (taoensso.com https://www.taoensso.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: Looking for Clojure freelancers
Just occurs to me: it'd probably also be useful if you post some of your details here in case anyone else is also looking for devs. -- -- 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: Looking for Clojure freelancers
Hi Laszlo, Actually good point - I should clarify: all the work would be completely remote. I'll normally work through some combination of GitHub, Basecamp + Trello. Payment would be through PayPal. -- -- 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] core.rrb-vector -- RRB-Tree-based confluently persistent vectors
That looks great Michał, thanks for your work! Have use cases for something like this popping up quite regularly - definitely looking forward to a production-ready implementation. Cheers! - Peter -- -- 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: I18n
Since this thread seems to come up from time to time, just adding a quick pointer to Tower: https://github.com/ptaoussanis/tower This gives (among other things) a translation tool using standard Clojure maps for content, Markdown support, translation fallbacks, Ring localization middleware, and a dev mode with dictionary auto-reloading. Cheers! -- -- 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: Question about destructuring with :keys :or and :as
Hi Ryan, I actually run into this quite often and feel that it's something that's missing from destructuring: http://grokbase.com/t/gg/clojure/128z9e3sqj/possible-to-merge-destructuring-or-defaults-with-as Basically, I'd advocate the addition of a new `:merge-as` destructure option that functions as `:as` does now, but merges over the `:or` defaults. I get the impression that not many folks are running into this though. May be a matter of style: I tend to like destructured fn args with defaults that are transparent to the caller. - Peter Taoussanis -- -- 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] Timbre, an all-Clojure logging library
You're both very welcome, thanks for letting me know you've been enjoying the lib! BTW For those coming across this post only now, please note that the Clojars URL has changed: https://clojars.org/com.taoensso/timbre. Anyway, the newest version is always listed on GitHub: https://github.com/ptaoussanis/timbre. There've been a number of improvements since the top post, including the addition of a logging profiler and (most recently) the addition of a middleware facility for transforming and filtering log events. For the curious, one way I've been doing my logging recently is by pairing Timbre with Carmine (https://github.com/ptaoussanis/carmine) and writing a little appender fn to send logs to Redis using an index and expiring keys. With a few lines of code, that basically gives one a high-performance synchronized, distributed, query-able, rotating log. - Peter Taoussanis (taoensso.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: Possible bug with realized? and cancelled futures
Hi Alex, This is a problem because the print-method multimethod implementation for clojure.lang.IDeref assumes that if the .isRealized method returns true, it's safe to deref the instance. That's interesting. I've run into the case before where a cancelled future was throwing an exception on print, and certainly found it quite strange. Didn't think to look into it. This must be a bug, surely? -- -- 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: http-kit 2.0.0.RC2, high performance HTTP Server Client for Clojure
Quick anecdote: I've got an HTTP Kit server running in a test environment and the initial results are *very* promising. It's handling a mix of sync, async, and WebSocket requests and so far has been a pleasure to use. HTTP Kit's sweet spot seems to be quite large too: folks running high-traffic (esp. high-concurrency) web servers that are resource or performance sensitive. I would recommend running behind a reverse proxy (nginx, say) given the server's relative immaturity - but I'd normally recommend doing that anyway, and I haven't encountered any specific problems yet myself. And I haven't had a chance to use it much, but the HTTP client looks pretty great too. Exciting stuff! -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups Clojure group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Re: Clojure web server benchmarks
Hi Dmitry, Raw bench results are provided in the `results` folder: https://github.com/ptaoussanis/clojure-web-server-benchmarks/blob/master/results/20130116-01-25 There you'll find a breakdown of the times to connect, process, and wait. Also the cumulative % of requests served relative to max response time. I'd consider adding a graph if folks think these numbers are sufficiently interesting? -- -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: [ANN] Leiningen 2.0.0 released
Hey, congratulations! Thank you so much Phil and everyone else for making this happen. I still remember the pre-Leiningen 1 days with the occasional dependency-script PTSD flashback. Lein 2 is a great big step up from 1. All kinds of awesome. Well done! -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: Clojure web server benchmarks
This is very interesting. Have you tried running the Ring Jetty adapter with a larger thread pool? It's set lower than the default so as not to overload cloud hosts like Heroku. Okay, bumped the :max-threads from 50 to 100 without seeing much change to the results at these relatively low concurrency levels. May well make a difference at higher concurrency /or with better hardware (both on the cards for later). Anecdotally, I've seen http-kit happily running dozens of thousands of concurrent connections in a high-load testing environment. Would like to see how far I can push it on a 16 logical core box. -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: CollReduce and IKVReduce for nil?
Just throwing in here that I was actually bit by IKVReduce just today. I swapped a reduce with a reduce-kv, assuming the two would function similarly. And, unfortunately, they did in the testing environment: it took a trip to production before a nil came up. The current behavior is certainly unexpected, I'd say. -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: Clojure web server benchmarks
This is very interesting. Have you tried running the Ring Jetty adapter with a larger thread pool? It's set lower than the default so as not to overload cloud hosts like Heroku. You mean the :max-threads? No, I left it at the default (50, if I recall correctly?). I'll try bump it next time I run the benchmarks (probably next week). I'm just on a dual core though, so I wouldn't expect any major changes. As it is, I think the standard Jetty adapter performs remarkably well. -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: Clojure web server benchmarks
A couple folks asked for higher concurrency numbers, so I've bumped the max to 92. Many of the servers can comfortably hit 500+ on my hardware, but others begin acting erratically. Want to first eliminate the possibility that the trouble is on my end (e.g. OS TCP tuning), then I'll bump the numbers again. -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: what is js/ in clojurescript?
I would not rely on this behavior. Follow Clojure's property access conventions. Sorry to dig this up again - would just like to clarify: The idiomatic way of accessing something like `window.location.pathname` then would be (aget js/window location pathname), or nested .- accesses, correct? I know things with Cljs are developing quickly and I keep seeing the `js/window.location.pathname` form pop up (including in Clojurescript's samples/twitterbuzz/src/twitterbuzz/anneal.cljs), so just wanted to double check. Assuming the latter form is indeed incorrect, any chance of adding a compiler warning to start dissuading people from using it? Thanks! -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: what is js/ in clojurescript?
Thanks David. Ticket patch welcome. I've been lazy / holding out for the electronic CA, but I'll make a note to come back to this if no one else steps up. Cheers! -- 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
Clojure web server benchmarks
Hi all, Quick post to mention that I've put up some rough benchmarks for a number of Clojure web servers: https://github.com/ptaoussanis/clojure-web-server-benchmarks. Getting semi-reliable numbers was a real PITA, and I'm sure there's still plenty of room left for improvement (suggestions welcome!). Usual disclaimers apply: the numbers vary by hardware, by OS, by concurrency, and by the response size (among other things). The servers also vary considerably in their feature sets. Not to mention that your web server is seldom going to be the bottleneck when generating dynamic content. Tl;dr: this is all very difficult to generalize: you'll need to bench in your own environment with your own workloads to get an accurate picture. Anyway I think the numbers are interesting (and pretty impressive all-round). Nginx can almost certainly be tweaked faster (ideas?), but I wouldn't have expected something like the standard Ring Jetty adapter even to be playing in the same ballpark - so that's nice. I'll try keep this updated as servers are updated. And as I've mentioned on the GitHub page, pull-requests welcome for anything I may have missed, including other servers or mis-configurations, etc. Hopefully with some tweaking we can converge on some reasonably accurate/useful common-case numbers. Cheers! -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: [ANN] Tower, simple i18n library for Clojure
I will update and give the code a try. Thanks for the fast turnaround! No problem. As far as your first and last questions, they both sort of came from the same scenario I was pondering. I was thinking about an application made with many small dependencies and maybe several of them all were using tower to handle translations and such. But they don't about each other and, therefor, expect to work the same regardless of whether or not there are other libraries that also use tower. Each library might want a different default locale, or different mode (:dev/other), etc. I was just thinking about what happens in that case since there is but one config state in the tower namespace. Again, this isn't an issue for me I was just pondering the scenario. Hmm, let me think about this a little more. There's a number of options, the simplest of which is probably just to offer a dynamic binding for the config atom. That way each library can bind over the atom and get its own config. Regarding the separate dictionary thing, I was still talking about the centralized dictionary where the arbitrary keys allow easy separation of the dictionary parts. I was heading down the path where multiple sections of the dictionary were created by different libraries merging in different dictionaries from different resources in their own code bases (using something like load-dictionary-from-map-resource!). If one of those resources changes (in dev mode) then I think we might want to just re-merge that resource's contents into the dictionary, replacing just the parts merged from that resource while leaving the rest of the dictionary unscathed. I was wondering if a merging version of load-dictionary-from-map-resource might be useful for that situation. I'm sort of half-following what you mean here... I think between the 1.2.0 update and the dynamically-bindable config, you'll probably have what you need. Could I ask you to create an issue for this on the GitHub page, then I can come back to you when I've got something implemented? -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: [ANN] Tower, simple i18n library for Clojure
Hi Scott, Happy to hear you're enjoying the library! 1. It seems useful to have the possibility for multiple libraries/namespaces to manage their own i18n complete with unique configurations (tower/config). I'm not in this situation right now but it seems like it could come up. - Is there a better way that hasn't jumped out at me? Could you give me a better idea what kind of unique config you'd expect to want? The dictionary keys are arbitrarily nest-able, so that's quite easy to namespace as {:dictionary {:dic1 {...} :dict2 {...}}}, etc. Are you concerned about the default locale? 2. It also seems like a godd idea to be able to have code merge in a chunk of translations into the existing translation dictionary without replacing the existing contents. - If it's not there, is the merge idea valid and does it sound useful? If I've understood you correctly, you can already merge into the config atom without any trouble. Use something like this: (defn deep-merge-with [f maps] (apply (fn m [ maps] (if (every? map? maps) (apply merge-with m maps) (apply f maps))) maps)) (def deep-merge (partial deep-merge-with (fn [x y] y))) I've just added a `merge-config!` fn to the dev branch to make this easier. I've also not been using :dev mode since that can replace the dictionary with only the primary and I loose all plugins' dictionaries. I hadn't though of that. I'll tweak it now so that the dictionary gets merged in as you suggest, nice idea - thank you. (I'd image it would also change :dev mode to allow a collection of watched dictionary resources and merge them when they change or something like that) Not sure why we'd want/need multiple dictionaries though when you can just namespace within the one. Can you describe a use-case? -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: [ANN] Tower, simple i18n library for Clojure
Just pushed 1.2.0 with `merge-config!` and dictionary merging (rather than resetting) on dev-mode changes. -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: Clojure 1.5.0 RC 1
Sean, Andy: Sorry for the delay following up on this. Yes, it turns out that CLJ-932 exposes a bug in ns-tracker which is used by the standard Ring wrap-reload middleware. I'm surprised more folks haven't run into this. There's already a pull-request from last month waiting for merging: https://github.com/weavejester/ns-tracker/pull/9 Will contact James and see if he can't get the merge done, and update the dependency Ring-side. Cheers! -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: Clojure 1.5.0 RC 1
Have just pushed a temporary fork of ns-tracker for anyone else running into the same trouble with Ring's wrap-reload: https://clojars.org/com.taoensso.forks/ns-tracker If you're going to use this, remember to add `ns-tracker` to your Lein :exclusions. -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: Clojure 1.5.0 RC 1
Were any breaking changes made between alpha3 and RC1? I haven't spent much time trying to track down causes so it's very possible I'm mistaken, but I seem to be running into some weird behavior under RC1. Specifically, seem to be having trouble with `ring.middleware.reload/wrap-reload`: Exception in thread main java.lang.IllegalArgumentException: contains? not supported on type: clojure.lang.LazySeq, compiling:(routes.clj:294:3) Line 294 is where the wrap-reload is applied, and this compiles fine under alpha3. Also `lein swank` appears to be failing on Leiningen 2.0.0-preview10: Exception in thread main java.lang.IllegalArgumentException: No matching ctor found for class clojure.lang.Compiler$CompilerException, compiling:(swank/commands/basic.clj:182:24) Is anyone else having problems? -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: Clojure 1.5.0 RC 1
Both of these cases appear to relate to namespaces btw. Line 182 of swank/commands/basic.clj is the 3rd `let` form: (defslimefn load-file [file-name] (let [libs-ref @(resolve 'clojure.core/*loaded-libs*) libs @libs-ref ns-form (ns/read-file-ns-decl (java.io.File. file-name)) ns (second ns-form)] (try (when ns (destroy-ns ns)) (dosync (ref-set libs-ref #{})) (pr-str (clojure.core/load-file file-name)) (finally (dosync (alter libs-ref into libs)) -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: Clojure 1.5.0 RC 1
Just confirming: both issues are indeed present in beta1 (and RC1), but not alpha3. Will go over the changelog tomorrow and try track this down. -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: [ANN] Clojars Releases repository
Sorry for the inconvenience. No problem at all Phil. You're doing us all a huge service with all your work on this; teething issues are to be expected. Just wanted to suggest library authors proceed cautiously for now to avoid unknowingly breaking dependents in the wild. -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: [ANN] Clojars Releases repository
I'd caution anyone against trying to redeploy their libraries right now since there seems to be some serious unresolved issues. I just tried a redeploy myself and am also getting the ReasonPhrase:Forbidden error. Unfortunately this seems to leave the repo in a bad state, since dependency pull requests now come back with a Checksum validation failed. I still seem to be able to pull the library into a project and Clojars says it has been promoted (after my first successful try - with a different key / user ID). Sean, are you sure it's working if the dependency isn't already in your .m2 cache? - Peter Taoussanis -- You received this message because you are subscribed to the Google Groups Clojure group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en
Re: [ANN] Clojars Releases repository
BTW for those of you running into the ReasonPhrase:Forbidden error, it seems as if the old lein-clojars can be used to restore a repo to a working (unsigned) state. -- 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