Re: I18n

2013-05-26 Thread Peter Taoussanis
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: [ANN] core.rrb-vector -- RRB-Tree-based confluently persistent vectors

2013-06-01 Thread Peter Taoussanis
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.




[ANN] Library updates (Redis & DynamoDB clients, logging+profiling, i18n+L10n, serialization, A/B testing)

2013-06-03 Thread Peter Taoussanis
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 
(GitHub<https://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 (GitHub<https://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 
(GitHub<https://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 
(GitHub<https://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

2013-06-03 Thread Peter Taoussanis
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 )

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

2013-06-03 Thread Peter Taoussanis
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

2013-06-03 Thread Peter Taoussanis
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] Library updates (Redis & DynamoDB clients, logging+profiling, i18n+L10n, serialization, A/B testing)

2013-06-04 Thread Peter Taoussanis
Have had one or two people ask me about this - all libraries are under the EPL 
v1.0 , 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.




Re: [pre-ANN] test2, the last Clojure testing framework

2013-06-09 Thread Peter Taoussanis
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.




[ANN] Taoensso library updates (major: Carmine v2-beta1, Nippy v2-RC1)

2013-06-26 Thread Peter Taoussanis
 

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 
(GitHub<https://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 (GitHub<https://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 
(GitHub<https://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 
(GitHub<https://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)

2013-06-26 Thread Peter Taoussanis
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: Looking for Clojure freelancers

2013-06-28 Thread Peter Taoussanis
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  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.




Re: core.async

2013-06-29 Thread Peter Taoussanis
 

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.




[ANN] Carmine (Redis client) v2, Nippy (serializer) v2 are out

2013-07-22 Thread Peter Taoussanis
Hey all, quick update: just pushed *Carmine v2.0.0* and *Nippy v2.0.0* to 
Clojars.

Carmine: GitHub <https://github.com/ptaoussanis/carmine> | 
Changelog<https://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> | 
Changelog<https://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: [ANN] Carmine (Redis client) v2, Nippy (serializer) v2 are out

2013-07-22 Thread Peter Taoussanis
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.




Re: [ANN] Clojure 1.8.0-alpha2

2015-07-19 Thread Peter Taoussanis
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.


Re: [ANN] Clojure 1.8.0-alpha2

2015-07-20 Thread Peter Taoussanis
> 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: Help Getting Sente to Work

2014-07-27 Thread Peter Taoussanis
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

2014-07-27 Thread Peter Taoussanis
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

2014-07-28 Thread Peter Taoussanis

>
> 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 
> *". 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: Help Getting Sente to Work

2014-07-30 Thread Peter Taoussanis

>
> Ok, new github issues is here 
>> .
>>
>
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: [ANN] Sente - Clojure(Script) + core.async + WebSockets/Ajax

2014-08-15 Thread Peter Taoussanis
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: [ANN] Sente - Clojure(Script) + core.async + WebSockets/Ajax

2014-08-17 Thread Peter Taoussanis
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: Sente - is it possible to close a connection?

2014-08-24 Thread Peter Taoussanis
Hi guys,

> (sente/chsk-reconnect! ) 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! )` 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! )` 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.


[ANN] Taoensso library updates / 2014 September

2014-09-02 Thread Peter Taoussanis
(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: [ANN] Taoensso library updates / 2014 September

2014-09-03 Thread Peter Taoussanis
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.


A very short explanation of transducers (a comparison to Ring middleware)

2014-09-04 Thread Peter Taoussanis
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

2014-09-06 Thread Peter Taoussanis
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 ) 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.


Re: [ANN] Taoensso library updates / 2014 September

2014-09-06 Thread Peter Taoussanis

>
> 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: ClojureScript: Keyword Breaking Change Around the Corner

2014-09-17 Thread Peter Taoussanis
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.


Surprised by behaviour of `compile` vs positional constructor fns

2014-09-21 Thread Peter Taoussanis
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 ')` 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

2014-09-22 Thread Peter Taoussanis
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.


[ANN] 6x new major lib updates incl. HTTP-Kit, Sente, Timbre, Carmine

2020-09-22 Thread Peter Taoussanis
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.


Re: [ANN] 6x new major lib updates incl. HTTP-Kit, Sente, Timbre, Carmine

2020-09-23 Thread Peter Taoussanis
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.


[Survey] Clojure/Script app monitoring service

2023-08-10 Thread Peter Taoussanis
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] better-cond 1.0.1

2016-07-02 Thread Peter Taoussanis
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.


[ANN] Tufte, simple profiling and performance monitoring for Clojure/Script

2016-07-11 Thread Peter Taoussanis


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] Tufte, simple profiling and performance monitoring for Clojure/Script

2016-07-11 Thread Peter Taoussanis
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] http-kit 2.2.0 final is out

2016-07-11 Thread Peter Taoussanis
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.


[Ann] Tempura, a Clj+Cljs i18n translations lib with support for React

2016-10-25 Thread Peter Taoussanis
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] Recent clj/s library updates - September 2015

2015-09-06 Thread Peter Taoussanis
*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.


Boxed math in transducers

2015-09-22 Thread Peter Taoussanis
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.


Re: Boxed math in transducers

2015-09-23 Thread Peter Taoussanis
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.


Re: Boxed math in transducers

2015-09-23 Thread Peter Taoussanis
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: [ANN] core.async-0.2.371

2015-10-28 Thread Peter Taoussanis
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.


[ANN] Truss, an assertions lib for Clojure/Script

2016-01-12 Thread Peter Taoussanis
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] Truss, an assertions lib for Clojure/Script

2016-01-12 Thread Peter Taoussanis
 

> 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

2016-01-12 Thread Peter Taoussanis
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.


Re: [ANN] Truss, an assertions lib for Clojure/Script

2016-01-16 Thread Peter Taoussanis

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


[ANN] Sente - Clojure(Script) + core.async + WebSockets/Ajax

2014-02-26 Thread Peter Taoussanis
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: [ANN] Sente - Clojure(Script) + core.async + WebSockets/Ajax

2014-02-27 Thread Peter Taoussanis
@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

2014-02-27 Thread Peter Taoussanis
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.


Re: [ANN] clojure.test.check (previously, simple-check)

2014-02-28 Thread Peter Taoussanis
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

2014-03-02 Thread Peter Taoussanis
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

2014-03-02 Thread Peter Taoussanis

>
> 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: Clojure 1.6.0-RC1 - LAST CHANCE, PLEASE TEST

2014-03-18 Thread Peter Taoussanis
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.


Unexpected core.async timeout behaviour

2014-03-27 Thread Peter Taoussanis
Hi all, quick question:

`(dotimes [_ 5] (go ( 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

2014-03-28 Thread Peter Taoussanis
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

2014-03-28 Thread Peter Taoussanis
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

2014-03-28 Thread Peter Taoussanis
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

2014-03-28 Thread Peter Taoussanis
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 `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

2014-04-07 Thread Peter Taoussanis
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

2014-04-07 Thread Peter Taoussanis
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.


Re: [ANN] Sente - Clojure(Script) + core.async + WebSockets/Ajax

2014-04-15 Thread Peter Taoussanis
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.


Re: [ANN] Sente - Clojure(Script) + core.async + WebSockets/Ajax

2014-04-16 Thread Peter Taoussanis

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

2014-04-17 Thread Peter Taoussanis
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.


Quick library status updates (logging, Redis, i18n, etc.)

2013-12-04 Thread Peter Taoussanis
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.)

2013-12-04 Thread Peter Taoussanis
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.)

2013-12-04 Thread Peter Taoussanis
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: Quick library status updates (logging, Redis, i18n, etc.)

2013-12-05 Thread Peter Taoussanis
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.


Re: [ANN] Cloact 0.1.0 - Yet another React wrapper for ClojureScript

2014-01-11 Thread Peter Taoussanis
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

2014-01-11 Thread Peter Taoussanis

> 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

2014-01-11 Thread Peter Taoussanis

> 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: Clojure web server benchmarks

2014-01-12 Thread Peter Taoussanis
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

2014-01-12 Thread Peter Taoussanis
>
> 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: Clojure web server benchmarks

2014-01-14 Thread Peter Taoussanis
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

2014-01-20 Thread Peter Taoussanis
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: [ANN] Leiningen 2.0.0 released

2013-01-19 Thread Peter Taoussanis
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

2013-01-25 Thread Peter Taoussanis
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: http-kit 2.0.0.RC2, high performance HTTP Server & Client for Clojure

2013-02-03 Thread Peter Taoussanis
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: Possible bug with realized? and cancelled futures

2013-02-19 Thread Peter Taoussanis
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] Timbre, an all-Clojure logging library

2013-03-15 Thread Peter Taoussanis
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: Question about destructuring with :keys :or and :as

2013-05-04 Thread Peter Taoussanis
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: Clojure for large programs

2011-07-06 Thread Peter Taoussanis
Don't know if it counts as "large", but I'm running a 20,000+ LOC
project for a 100%-Clojure web app at www.wusoup.com.

My 2c: I'm not an experienced developer by any stretch of the
imagination; this is something I'm working on completely alone, and
yet I've so far found the whole thing incredibly manageable. I'd
attribute that largely to Clojure.

Then again, I only noticed this thread because of its relation to the
"unknown constant tag" one ;p

I'd like to open-source the whole app at some stage (or at least some
large parts of it), but I'm also always happy to answer any questions
from the perspective of someone using exclusively Clojure for a small
(but hopefully growing) "production" application.

One of the things I've most enjoyed about Clojure (and it being
functional) is the ease with which I can bash on a function in the
REPL during development: testing it with all sorts of weird/nil input,
making sure that it'll be well behaved even if something else along
the way gets confused.

The modularity I can get with "functional" functions is reassuring for
me as a lone developer since once I've written something and it's gone
through that "bashing" stage- I'm normally pretty confident that it's
more or less "right". I very rarely end up needing to come back to fix
problems related to unexpected input, etc.

Most of the time when I need to "fix" a function it's because I simply
had the wrong idea about what it actually needed to do, rather than
because it was doing it wrong. If that makes any sense.


For a large project I think you probably need to be more disciplined
with something like Clojure than, say, Java. But that's the whole
"with great power" thing again: I think you get something valuable in
return for being asked to exercise some discipline.

Can't really comment on how easily Clojure works for large groups of
developers as such. The flexibility thing might start losing it's
charm when you have 10 different coding styles competing with one
another under time constraints, etc. (where discipline starts to go
out the window in favour of "getting stuff done").

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

2011-07-24 Thread Peter Taoussanis
Just want to throw in on this real quick. I am -dumbfounded- by how
cool ClojureScript is.

It was about 2AM my time when I first heard the announcement and I
stayed up another 3 hours after that watching Rich's talk and playing
with the samples. As I see it right now, this is a Big Deal. For lots
of reasons. And I suspect it might take some time for the whole
concept and its wide ramifications to fully digest for everyone.

Like many (I'm guessing), my first question was: will it work with
jQuery? I'd never even heard of Google Closure. Suffice it to say it
didn't take much time looking into it to get me excited. And for it to
click just how smart this whole approach seems it might just be.


I am, literally, deploying this to my web app right now. I've got a
Compojure route setup for a the resulting output of memoized
ClojureScript compile call. I can work on the ClojureScript directly
from my project. When something changes, I re-evaluate the memoized fn
on my dev box (or on the production server through an SSH tunnel) and
boom: I have a fully-optimized script going out to users. Add in a
content-hash of the compiled script to automatically expire the old
resource, and I have a workflow that I couldn't imagine being much
better.

Client-side side stuff I've wanted to do with my app but couldn't even
begin to have the patience to implement- now suddenly seem trivial in
principle. Having access to the reader for transmitting native data
structures between the server and client... I don't even have the
words.


And this is just the stuff that touches me directly and that's
obvious. I can't wait to see what people are going to do with this in
time.


Thank you: awesome job, guys. And what an awesome surprise!

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


Re: ClojureScript

2011-07-25 Thread Peter Taoussanis
> I would also love to know how you set this up in a little more detail. It 
> really sounds like an excellent approach…

Sure: it's not complicated! I'm writing this in a hurry though- so
hope it's still clear.

Basically I just define a memoized "dynamic scripts" function that
returns a map with a text/javascript Ring response, along with a hash
of that response.

So something like (def dynamic-scripts (memoize (function []
{:response foobar :hash (make-hash foobar)}))

Then I've got a Compojure route configured to serve requests like so:
(GET "/dynamic-stuff/:hash/scripts.js" {} (:response (dynamic-
scripts)))

This'll just send back the memoized script response anytime a request
is made for /dynamic-stuff/whatever/scripts.js

The /whatever/ is important since it let's me automatically include
the current hash in any script tags in the HTML with URI (str "/
dynamic-stuff/" (:hash (dynamic-scripts)) "/scripts.js").


Now all I need to do when I want to tweak the scripts is reevaluate
the namespace they're in and it'll re-hash, meaning that all future
requests for scripts.js go to the new resource - avoiding any possible
caching issues.


What I've described so far doesn't necessitate anything ClojureScript.
But with ClojureScript, the dynamic-scripts function can be easily
modified to produce it's response by compiling ClojureScript source.
This is awesome since it means I can keep everything in one
environment, and compilation happens automatically any time there is a
change to the underlying source. The scripts.js is always optimized,
always up-to-date, and always hashed to avoid caching problems.

When I want to test a change to the scripts, I just reevaluate the ns
then refresh my browser and the changes are live. If there's a major
compile-time bug in the scripts, it'll get caught before any changes
take affect.

BTW if the devs are listening, it'd be nice if cljsc/build could one
day also support input/output directly via strings :) That'd make all
this absolutely trivial(er).

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


Re: ANN: Optimized Pattern Matching Library for Clojure

2011-08-09 Thread Peter Taoussanis
This is great stuff: thank you! I can totally see this being the kind
of thing like destructuring, where once you've used it you won't want
to go back :)

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


[ANN] Carmine, a new Redis client for Clojure

2012-05-23 Thread Peter Taoussanis
Hi all!

Quick announcement: I've been working on bringing together the best 
features from the current crop of Clojure Redis clients, and filling in 
some of the remaining holes.

It's on GitHub (https://github.com/ptaoussanis/carmine) and Clojars (
http://clojars.org/carmine).

Since I'm NOT using it in production anywhere yet, I'd caution anyone to 
treat it as "still experimental" for now. The goal, however, is to head 
toward something very much production-ready by the time 1.0 rolls around.

Features (taken from the readme):
* A high-performance, all-Clojure client.
* Modern targets: Redis 2.0+ (with full 2.6 support), Clojure 1.3+, 
Leiningen 2.
* Connection pooling.
* Complete and accurate command definitions with full documentation.
* Composable, first-class command functions.
* Flexible, high-performance binary-safe serialization.
* Full support for Lua scripting, Pub/Sub, etc.
* Command helpers (sort*, etc.).

Any comments/pull-requests/whatever very welcome!

- Peter Taoussanis (@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

Re: ANN Welle 1.0 final

2012-05-23 Thread Peter Taoussanis
Looks great - well done! I passed over Riak a while back because of the 
lack of a good client- might be time to take a real look at it again.

Love the ClojureWerkz pages btw.

- 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] Carmine, a new Redis client for Clojure

2012-05-24 Thread Peter Taoussanis
Thanks Baishampayan, appreciate it.

Just shout if you run into any problems or have any requests!

- 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

[ANN] Timbre, an all-Clojure logging library

2012-05-28 Thread Peter Taoussanis
Hi everyone,

I recently lost it after spending 5+ hours trying to figure out why Log4j 
had suddenly started swallowing all my messages [again]. Anyway, decided 
it'd be infinitely saner to write something simple for my own purposes. I'm 
posting it here in case someone else might find it useful.

It's on Github (https://github.com/ptaoussanis/timbre) and Clojars 
(https://clojars.org/timbre).

Features (taken from the readme):
* Small, uncomplicated all-Clojure library.
* Map-based config: no arcane XML or properties files.
* Decent performance (low overhead).
* Flexible fn-centric appender model.
* Sensible built-in appenders including simple email appender.
* Tunable flood control.
* Asynchronous logging support.

As always, any comments/pull-requests/whatever very welcome!

Cheers!

- Peter Taoussanis (@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

Re: [ANN] Timbre, an all-Clojure logging library

2012-05-28 Thread Peter Taoussanis
Done!

Having said that, I don't suggest anyone really edit their config 
line-by-line like this. What I do is create a map of everything I need 
during environment config and just merge it over the Timbre defaults with 
something like this:

(defn deep-merge-with ; From clojure.contrib.map-utils 

   
  "Like 'merge-with' but merges maps recursively, applying the given fn 

  
  only when there's a non-map at a particular level.   

   


  
  (deepmerge + {:a {:b {:c 1 :d {:x 1 :y 2}} :e 3} :f 4}   

   
   {:a {:b {:c 2 :d {:z 9} :z 3} :e 100}}) 

   
  -> {:a {:b {:z 3, :c 3, :d {:z 9, :x 1, :y 2}}, :e 103}, :f 4}"   

  
  [f & maps]   

   
  (apply   

   
   (ƒ m [& maps]   

   
 (if (every? map? maps) 

  
   (apply merge-with m maps)   

   
   (apply f maps))) 

  
   maps))   

  


  
(defn deep-merge   

   
  "Partial of 'deep-merge-with'."   

  
  [& maps] 

   
  (apply deep-merge-with (ƒ [x y] y) maps))  

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

[ANN] Tower, simple i18n library for Clojure

2012-06-14 Thread Peter Taoussanis
Hi all,

Just put up an early release of a little i18n library that some of you 
might find useful.

It's on Github (https://github.com/ptaoussanis/tower) and Clojars (
https://clojars.org/tower).

Features (taken from the readme):
* Consistent, lightweight wrappers for standard Java localization functions.
* Rails-like, all-Clojure translation function.
* Simple, map-based translation dictionary format. No XML or resource files!
* Seamless markdown support for translators.
* TODO: export/import to allow use with industry-standard tools for 
translators.
* TODO: Ring middleware for rapidly internationalizing web apps.

As always, any and all feedback very welcome!

Cheers!

- Peter Taoussanis (@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

Re: ANN: lambic v. 0.1.0

2012-06-15 Thread Peter Taoussanis
I don't know the first thing about logic programming so can't say whether 
something like this would be practical to implement or not - but boy what a 
neat idea!

I'm constantly needing to restructure bits of data and while it's not 
exactly tough to do in Clojure, something like this would certainly be 
welcome.

I hope you can figure out a way of making this work. I'll try take a look 
again once you've got some examples up to see if there's anything I could 
contribute.

Cheers!

- Peter Taoussanis (@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

[ANN] Nippy, a fast Clojure serializer and drop-in reader replacement

2012-07-07 Thread Peter Taoussanis
 

Hey everyone! First of two library releases today...

Github: https://github.com/ptaoussanis/nippy
Clojars: https://clojars.org/com.taoensso/nippy

Features (taken from readme):
* Simple, high-performance all-Clojure de/serializer.
* Comprehensive, extensible support for all major data types.
* Reader-fallback for difficult/future types.
* Full test coverage for every supported type.
* Snappy integrated de/compression for efficient storage and network 
transfer.

Cheers!

- Peter Taoussanis (@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

[ANN] Update: Timbre 0.6.0, a (sane) logging library for Clojure

2012-07-07 Thread Peter Taoussanis
 

Hi - second promised release for today!

Github: https://github.com/ptaoussanis/timbre
Clojars: https://clojars.org/com.taoensso/timbre

Changes:
* Now supports namespace black/whitelist filtering with wildcards.
* Now includes a logging-level aware logging profiler based on the old 
Contrib profiler.

Cheers!

- Peter Taoussanis (@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

Re: [ANN] Nippy, a fast Clojure serializer and drop-in reader replacement

2012-07-07 Thread Peter Taoussanis
Hi Brent,

Tagged literals are supported: Nippy falls back to the reader whenever it 
encounters something it doesn't know how to serialize:

(def my-uuid (java.util.UUID/randomUUID))
=> #uuid "c463d8d3-49f4-4e40-9937-8a9699b1af1d"

(thaw-from-bytes (freeze-to-bytes my-uuid))
=> #uuid "c463d8d3-49f4-4e40-9937-8a9699b1af1d"

There isn't an example in the reference data set since I'm targeting 1.3+, 
but I'll make a note about this!

No Clojurescript support unfortunately since the lib relies on JVM 
features. It's an interesting question... I haven't personally seen a need 
(yet?) for fast binary serialization script-side since the reader 
performance (usually?) isn't as much of an issue there.

What I'd normally do for example is serialize server-side to and from the 
db, then communicate with the CLJS client through the reader. This could 
still be a bottleneck under certain circumstances though, so I'll try think 
about it...

If any CLJS gurus have comments, I'd be very happy to hear them! 

In real world use, are people hitting reader performance limits client-side?

-- 
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] Nippy, a fast Clojure serializer and drop-in reader replacement

2012-07-07 Thread Peter Taoussanis
Hi Sun,

Can't wait to test it out. 
>

Great- thank you! Let me know how it goes and if you run into any problems.
 

> By the way, do you have a performance comparison between Nippy and 
> carbonite(the one wraps kryo) ?
>

Not yet, but plan to. I should probably also compare to JSON and a few 
others. I would expect Carbonite to be faster since Kryo is faster than 
standard Java serialization (which is basically what Nippy uses).

The goal for Nippy isn't outright speed but a particular balance of speed, 
simplicity, and usability that I was looking for for some of my own 
applications. Actually, come to think of it, I will add links to some 
alternatives like Kryo.

-- 
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] Nippy, a fast Clojure serializer and drop-in reader replacement

2012-07-10 Thread Peter Taoussanis
Hey Frank,

Thanks for getting in touch!

With the tag literal support of 1.4+, is that kind of the idiomatic way of 
> the future to structure protocols for serialized clojure data/code? 
>

Sorry, could you clarify what you're asking here - I'm not sure if I follow 
what you mean by "structure protocols"? I'm not familiar with the 
implementation details of the tagged literal support btw, so someone else 
should probably chime in if that's the domain.

When you say that Nippy is much faster than the reader, are there ways to 
> improve on or optimize the reader? 
> (guess the speed improvement is only achieved for true data (?)) 
>

Well again not knowing much about the particular implementation, my general 
inclination would be to say that the reader's performance doesn't seem 
especially bad given all that it's doing and its flexibility. Optimizing it 
for speed at this point is, I'd guess, a low priority. Though I'm curious 
to see what impact if any Datomic will have on Clojure core, since I'm 
assuming they're likely to start butting into some of these performance 
edge-cases eventually.

Naturally, these things are a trade-off. The Java serialization libs are a 
good example of this: each brings its own particular opinion about the 
correct simplicity/flexibility/speed balance. Given that context, it 
probably makes sense to let the reader focus on simplicity+flexibility, and 
to outsource to a lib when you (really+rarely) need the extra speed and 
where you have a knob to choose how much flexibility you're prepared to 
give up.

Not sure what you mean by "true data" btw, so it's possible I've completely 
missed what you're getting at ^^

-- 
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] ClojureC - A Clojure to C compiler - Work in Progress

2012-07-10 Thread Peter Taoussanis
Man- the day there's a mature, production-ready C(something) compiler, I'm 
going to flip out. Can't wait.

Thank you for working on this!

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

Re: [ANN] Nippy, a fast Clojure serializer and drop-in reader replacement

2012-07-10 Thread Peter Taoussanis
Hi Alex,

Thanks for your input (and all your work on Carbonite)- much appreciated!

1) buffer reuse - reusing cached ThreadLocal byte[] for converting from 
> data to bytes is a nice trick and made possible in most serialization libs 
> but I don't that's possible in the current code.
>

I experimented with a number of different buffering approaches, including a 
reusable ByteBuffer. Didn't see as big of a performance boost as I was 
expecting, so elected to keep it simple for the moment. It's very possible 
I missed something or tested incorrectly: I'll certainly check out your 
approach!
 

> 2) transients while deserializing collections (in coll-thaw!) - I found 
> this to be the only way to get anywhere close to Java serialization while 
> benchmarking.
>

I'm relying on `into` when possible, which is using transients 
under-the-hood. The notable exception is for maps - but that was because 
the only approaches I could think of that'd allow transients actually 
turned out to be slower in practice due to other overhead. A 
transient-based zipmap was the best perf I could get, but it was only ~10% 
faster and it incurred some other effects I didn't like.

3) more efficient primitive writing - this is the main reason I wrapped 
> Kryo - there are lots of well-known tricks for writing chars, ints, etc. 
>  Thrift, Protobuff, Kryo, and others have made these pretty standard and 
> they make a huge difference vs the basic DataInputStream serialization.
>

This I'm completely unfamiliar with and it sounds interesting: I'll 
definitely check it out as well, thank you!

 

> I found the use of transients in deserializing collections to be the only 
> way I could get anywhere close to Java serialization performance - they are 
> critical.
>

To be honest, performance for Nippy was actually a relatively low priority 
for me since in its current/obvious form, it's already fast enough that it 
ceases to be the bottleneck in any practical contexts in which I would be 
using it (mostly DB-related). That's to say, I haven't spent an awful lot 
of effort tweaking for performance and there's probably lots of low-hanging 
fruit.

I'll start by checking out what you've suggested, and I'm very open to 
input if you (or anyone else) thinks of other ideas!

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

  1   2   >