hara.concurrent.procedure "2.2.13" - parameterised control of current execution

2015-12-18 Thread zcaudate
Hey guys.

I've been playing with this idea for the last 6 months. Really excited to 
have finally written it up. Hope to get some feedback!

blog:
http://z.caudate.me/parameterised-execution-hara-concurrent-procedure/

docs:
http://docs.caudate.me/hara/hara-concurrent-procedure.html

Chris.

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

2015-09-04 Thread zcaudate
We make sure the components we build know how to restart themselves. This 
avoids the use of start/stop.

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

2015-09-04 Thread zcaudate

gulfstream (https://github.com/helpshift/gulfstream) is a library with 
similar functionality to https://github.com/aysylu/loom and 
https://github.com/ztellman/rhizome

Built on top of graphstream(http://graphstream-project.org), it's main 
advantage lies in rapid visualisation, interaction and styling of the 
directed graph.

The documentation is at http://helpshift.github.io/gulfstream/

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

2015-08-25 Thread zcaudate
Hey Richard,

Great work on the project! I'd love to see the final generated output if 
you have time to do so. Also, we at Helpshift are working on a similar 
project here - https://github.com/helpshift/hydrox. It'll be great to get 
your input to see how the two libraries compare, what each one potentially 
solves and whether there is synergy for solving the documentation problem.

Chris.


On Wednesday, August 19, 2015 at 1:37:56 PM UTC+5:30, Richard Möhn wrote:
>
> This project was announced three months ago as a ‘Common Clojure Source 
> Metadata Model’. You might also have read about it 
>  
> in the Clojure Gazette. It is now called Grenada 
>  and can be described 
> vaguely as a Clojure metadata build and distribution system. Features:
>
>- for library authors: assemble and publish (API) documentation 
>packages similar to Javadoc JARs, but containing well-defined data instead 
>of HTML.
>- for developers: provide structured information in addition to doc 
>strings. Annotate Clojure objects that don't support doc strings with 
>easily accessible documentation (to be implemented).
>- for documentation editors: jazz up the documentation of existing 
>Clojure libraries; assemble documentation and examples from different 
>sources.
>- for toolsmiths: build on a rigorously flexible model of metadata 
>about things in the Clojure ecosystem
>
> (Taken from the project home page 
> .)
>
> Notable products of the project:
>
>- a data model 
> 
>(can be understood as a draft)
>- lib-grenada , 
>implementing the model and providing convenience
>- the concept of Datadoc JARs – like Javadoc JARs, but instead of HTML 
>containing EDN files with documentation and arbitrary other data 
>- a Leiningen plugin  
>producing and deploying such JARs for your project
>
> Status:
>
>- Everything is usable, though not very convenient at times. If you've 
>read the example of Dorothy the Documenter in the Clojure Gazette 
>interview: what is described there works 
>
>.
>- The documentation is fairly extensive, though not well-organized.
>- The auxiliary library Jolly  
>can be used to convert Grimoire  data to Datadoc JARs 
>.
>- I would be happy if you use the Leiningen plugin to deploy Datadoc 
>JARs for your libraries to Clojars. – Some day there might be an 
>application which displays those data in a way similar to Autodoc or 
> Codox. 
>– The plugin has some issues, though, so don't get wound up.
>
> There's still plenty to do 
> , but 
> I'd be happy if you take a look. Code and history can be found under the 
> Grenada 
> organization  on GitHub.
>
>
> Richard
>

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

2015-07-29 Thread zcaudate
 

James: For sure. To be honest, I haven’t really thought too much about best 
practices. The code just naturally evolved in this way. Let me have a think 
about this over the weekend and come up with something.


Lawrence: I see what you are saying… and again, I need some time to think 
about the implications. It’s interesting for me to be able look at this in 
hindsight and really question the value of why I did this in a certain 
way.. 

As context, I didn’t start with the pattern and tried to fit things to it… 
I wrote a code bunch of code, refactored it a couple of times, and found 
commonalities in design that I was able to extract into what is now being 
discussed. So it’s really a case of tomaYtos, toMAAtos - a question of 
taste - and I think we are really lucky that clojure allows for all types =)



>>>

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

2015-07-28 Thread zcaudate
This is so cool =)

Can you put up a video?

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

2015-07-28 Thread zcaudate
The example in the article is probably the smallest example I can come up 
with.

http://z.caudate.me/the-abstract-container-pattern

The code for the concrete implementations speaks for itself I think, it is 
about 10 lines to hook in jetty and http-kit to the framework.

if we think about how much code an interface/abstract/concrete design 
pattern can potentially reduce over a strict interface/concrete design 
pattern in the java, then it's exactly the same with clojure.

One particular benefit of this particular pattern that I am exploiting is 
the fact that you can then specify exactly what you want in the config. I'm 
a big fan of making everything explicitly clear within the config itself so 
if we have a system with some a component-style dependency injection model 
(see http://docs.caudate.me/hara/hara-component.html), you can easily do 
something like this to get a jetty server up:

{:server {:type :jetty
   :port 8080}

and if you want a :http-kit server, you just change the config as such:

{:server {:type :http-kit
   :port 8080}

I've done this quite a bit with mocking... for example, here - 
https://github.com/MyPost/cassius/blob/master/src/cassius/component.clj

changing

{:db {:type :database}}

to

{:db {:type :mock}}

will work exactly the same way, irrespective of dependency injection 
framework - in this case, I'm using the stuartsierra/component framework.





On Tuesday, July 28, 2015 at 9:34:46 PM UTC+5:30, James Reeves wrote:
>
> What are the benefits of designing an "abstract class" in this way, 
> compared to, say, using a protocol and normal functions? Could you provide 
> a small example?
>
> - James
>
> On 28 July 2015 at 10:09, zcaudate > wrote:
>
>> Hey guys,
>>
>> Thanks for the feedback and your very insightful comments.
>>
>> Yep... this is OO alright =)
>>
>> I realised only after I wrote the article that I was implementing a 
>> Lifecycle clone with IRunnable example. However, the concept I am 
>> mentioning is much more general than components in terms of its scope:
>>
>> A similar `abstract class` for a reflective functional dispatch mechanism 
>> is defined here:
>> https://github.com/zcaudate/iroh/blob/master/src/iroh/types/element.clj
>>
>> and extended by the `concrete classes' here:
>> https://github.com/zcaudate/iroh/tree/master/src/iroh/element
>>
>> In the case of iroh... if I had used strictly multimethods, I would have 
>> been very confused. If I had used strictly protocols... well I couldn't for 
>> a number of reasons.. but if I did, I would have been even more confused 
>> because of the number of subconditions that I had to implement. iroh was 
>> the first library that I had built that used this pattern and it was so 
>> successful that I've been repeating the process over and over again since.
>>
>> What I wanted to achieve was to have the equivalent of an `abstract 
>> class` - the concept of code with abstract functionality that provides a 
>> framework for the heavy lifting to be done. `Concrete classes` can just 
>> extend aforementioned `abstract class` with minimal code and get all of the 
>> benefits. 
>>
>> I've used this pattern with great success in many, many times and it 
>> provides a counter balance to the functional paradigm in terms of packaging 
>> up functionality. Clojure doesn't force us into one paradigm or the other 
>> and sometimes it is just more stylish to use the OO paradigm. The whole 
>> point of OO, multimethods and protocols is to do polymorphic dispatch, 
>> which is just a way to break a large cond statement into pieces that can 
>> then also be further extended. 
>>
>> Please also note that not all OO frameworks are equal. Java uses a class 
>> inheritence approach whereas javascript uses a prototype model. The 
>> `abstract container` pattern that I was describing is probably closer to 
>> the JS model but to be honest, I don't really know what it is. Ultimately, 
>> it adds a middle tier of functionality in systems that have a plugin type 
>> mechanism. I'm sure there are equivalent functional contructs... but that 
>> was not the point of the pattern. This pattern has been very useful for me; 
>> clojure's protocols and multimethods were not enough to do what I needed to 
>> do - but combination of the two works wonders =)
>>
>> Since the article, the pattern has been codified here:
>>
>> https://github.com/zcaudate/hara/blob/master/src/hara/extend/abstract.clj#L196
>>
>> Hope that helps in clarifying the motivation behind the article and the 
>> pattern
>&g

Re: a question about Chris Zheng's "Abstract Container Pattern"

2015-07-28 Thread zcaudate
Hey guys,

Thanks for the feedback and your very insightful comments.

Yep... this is OO alright =)

I realised only after I wrote the article that I was implementing a 
Lifecycle clone with IRunnable example. However, the concept I am 
mentioning is much more general than components in terms of its scope:

A similar `abstract class` for a reflective functional dispatch mechanism 
is defined here:
https://github.com/zcaudate/iroh/blob/master/src/iroh/types/element.clj

and extended by the `concrete classes' here:
https://github.com/zcaudate/iroh/tree/master/src/iroh/element

In the case of iroh... if I had used strictly multimethods, I would have 
been very confused. If I had used strictly protocols... well I couldn't for 
a number of reasons.. but if I did, I would have been even more confused 
because of the number of subconditions that I had to implement. iroh was 
the first library that I had built that used this pattern and it was so 
successful that I've been repeating the process over and over again since.

What I wanted to achieve was to have the equivalent of an `abstract class` 
- the concept of code with abstract functionality that provides a framework 
for the heavy lifting to be done. `Concrete classes` can just extend 
aforementioned `abstract class` with minimal code and get all of the 
benefits. 

I've used this pattern with great success in many, many times and it 
provides a counter balance to the functional paradigm in terms of packaging 
up functionality. Clojure doesn't force us into one paradigm or the other 
and sometimes it is just more stylish to use the OO paradigm. The whole 
point of OO, multimethods and protocols is to do polymorphic dispatch, 
which is just a way to break a large cond statement into pieces that can 
then also be further extended. 

Please also note that not all OO frameworks are equal. Java uses a class 
inheritence approach whereas javascript uses a prototype model. The 
`abstract container` pattern that I was describing is probably closer to 
the JS model but to be honest, I don't really know what it is. Ultimately, 
it adds a middle tier of functionality in systems that have a plugin type 
mechanism. I'm sure there are equivalent functional contructs... but that 
was not the point of the pattern. This pattern has been very useful for me; 
clojure's protocols and multimethods were not enough to do what I needed to 
do - but combination of the two works wonders =)

Since the article, the pattern has been codified here:
https://github.com/zcaudate/hara/blob/master/src/hara/extend/abstract.clj#L196

Hope that helps in clarifying the motivation behind the article and the 
pattern


Chris







On Monday, July 27, 2015 at 11:42:21 PM UTC+5:30, Colin Yates wrote:
>
> I think his last sentence gives you the answer:
>
> "A warm shoutout to Tushar, Lyndon, Dean, Alan, Hank, Derek, and all the 
> guys at clj-melb that gave feedback and helped flesh out this rehash of *OO 
> design*.” (my emphasis)
>
> He wanted an OO approach and has implemented one; specifically behaviour 
> and state coupled together. I think neither Typed Clojure nor Contracts 
> would have achieved this guy’s goal as they are about enforcing a contract 
> (either the shape of data or effects of a fn) in the ‘functional’ paradigm; 
> this guy clearly wanted something in the OO paradigm. 
>
> Is there a ‘functional’ implementation which gives the same benefits; 
> sure, but that isn’t what he wanted. Are there a bunch of ‘upgrades’ that I 
> am sure we could all apply; sure, but again it seems like he was setting 
> out with a very specific goal in mind and has achieved that. 
>
> On 27 Jul 2015, at 18:37, Lawrence Krubner  > wrote:
>
> I have a question about this: 
>
> "Servers that are running on a particular port can be tracked and stopped. 
> I have to say, this was the feature that I wanted the most, which motivated 
> the framework's design. The annoying thing about development in emacs is 
> that I have to be careful of not losing the reference to the server. Since 
> there was no way of stopping it unless the repl is restarted. I wanted to 
> implement a registery for references to running servers to be saved."
>
> http://z.caudate.me/the-abstract-container-pattern/
>
> I have the impression that he's going over the same territory as that 
> covered by Stuart Sierra, though Zheng doesn't mention "Component" nor 
> "Sierra". But he offers this as an example of what he's after: 
>
> (defprotocol IRunnable (start! [system]) (stop! [system]) (restart! 
> [system]) (started? [system]) (stopped? [system]))
>
> That much seems similar to Sierra's system. Zheng seems to add an 
> additional layer by simulating an abstract class above his protocols. As he 
> says: 
&g

Re: Howto Use isComponent with Adi

2014-08-08 Thread zcaudate
Hey Tim,

adi's been neglected by me for a while now so it needs a bit of love... 
Though I'm surprised that it won't let you create a schema. Can you open an 
issue with an example of a failure and I'll see if I can fix that.

On Monday, August 4, 2014 3:35:18 PM UTC+10, frye wrote:
>
> Hey, 
>
> I'm playing around with adi, and it looks pretty cool. 
>
> But I can't seem to get isComponent to work in my adi schema. It's failing 
> when I try to use a boolean, which was my first guess as to it's usage (see 
> wiki <https://github.com/zcaudate/adi/blob/master/wiki/schema.md>, source 
> <https://github.com/zcaudate/adi/blob/master/src/adi/schema.clj#L40>). 
>
> Are there any examples out there, of how to use this feature? 
>
>
> Thanks 
>
> Tim Washington 
> Interruptsoftware.com <http://interruptsoftware.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.


[ANN: cassius 0.1.14] - Cassandra as a Big Nested Map

2014-07-25 Thread zcaudate
I'm happy to announce that the team at MyPost (https://*digitalmailbox*
.com.au/) has decided to release a library that we have been working on for 
the past couple of months.

https://github.com/MyPost/cassius

Apparently its `also only the second release of open source software by a 
public sector organisation in Australia`
 (http://www.andykelk.net/tech/open-sourcing-our-work-why-were-doing-it)


Overview

Cassius is a clojure wrapper around cassandra's thrift interface. It treats 
cassandra as a big mutable nested hashmap and provides the following 
abstractions:

   - cassandra data and schema can be represented as values and clojure 
   maps.
   - keyspaces, column families, rows and columns can be abstracted as 
   nested map layers
   - supercolumns are just one extra level of nesting

The library has been used for both mocking and for higher level 
abstractions on top of cassandra. An ORM has been built and used internally 
at MyPost 
 to 
deal with legacy cassandra data.
Motivation

The library was motivated by an inability to reason about what changes the 
existing monolithic system was doing to the underlying database. In order 
to move away from the existing system into more agile architecture, the 
team had to be careful about reworking features without breaking 
functionality. The typical work of code migration would end up looking 
something like this:

   1. Get the current state of the DB
   2. Run some legacy code (java)
   3. See what has changed in the DB
   4. Rewrite that change in clojure

cassius was designed as a tool for developers to reason about and test 
changes to cassandra. It also has the following features:

   - Written in thrift in order to support supercolumns in the legacy 
   system.
   - Abstracts the database in such a way that tests are easy to write and 
   easy to read.
   - Uses of conditional restarts for more control of error states.
   - Option to use the component/Lifecycle framework. Mock DB is included 
   for testing purposes.
   - Uses the Hashmap as a protocol, defined in cassius.protocols/IMap.
  - Methods: put-in, peek-in, keys-in, drop-in, set-in, select-in and 
  mutate-in
   


The repo is here: https://github.com/MyPost/cassius

Please have a play!

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

2014-07-23 Thread zcaudate
Overview

Korra is a library for introspection of maven packages. The library 
provides mappings between different representations of the same jvm concept.

   - maven coordinate and the jar file
   - a 'resource' and its related jar and jar entry under a given context
  - the resource can be:
 - a symbol representing a clojure namespace
 - a path to a resource
 - a java class
  - the context can be:
 - the jvm classloader classpath
 - a single jar
 - a list of jars
 - a maven coordinate
 - a list of maven coordinates
 - the entire maven local-repo
  
Check out the repo and the blog:
   https://github.com/zcaudate/iroh 
   http://z.caudate.me/representation-and-reflection/

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

2014-04-10 Thread zcaudate
Please use 0.1.10 update. clojure 1.6 does not load clojure.walk and 
clojure.set automatically anymore.

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

2014-04-10 Thread zcaudate
A library for hacking and exploring the jvm:
Whats New <https://github.com/zcaudate/iroh#019>0.1.9
   
   - .> macro now supports both .accessors and :accessor calls
   - delegate added for better object support

<https://github.com/zcaudate/iroh#016>0.1.6

Changed syntax:

   - .$ to .> (threading macro)
   - .> to .%> (display class hierachy)
   - Added .% (display class info)
   - Now .?, .% and .%> works both on classes and instances

<https://github.com/zcaudate/iroh#installation>Installation

Add to project.clj dependencies:

[im.chit/iroh "0.1.9"]

For working in the repl or emacs, inject the core functionality into your 
clojure.core namespace using vinyasa <https://github.com/zcaudate/vinyasa> by 
adding the following to your ~/.lein/profiles.clj file:

{:user {:dependencies [[im.chit/iroh "0.1.8"]
   [im.chit/vinyasa "0.2.0"]]
 :injections [(require 'vinyasa.inject)
  

  (vinyasa.inject/inject 'clojure.core
'[[iroh.core delegate >ns >var .> .? .* .% .%>]])

  ]}}


--


delegate - Transparent Bean

Delegate does what bean does but it actually allows field access to the 
underlying object. This way, one can set and get values from the object :

(def a "hello")a  ;;=> "hello" 
(def >a (delegate a))>a ;;=> }>
@>a  ;;=> {:hash 99162322, :hash32 0, :value #}(keys >a);;=> (:value :hash :hash32)(>a :hash)   ;;=> 
99162322(:hash32 >a) ;;=> 0  (>a :value (char-array "world")) ;;=> "world"
a ;;=> "world" (But I thought string where immutable!)



.> - Threading

A shorthand way of accessing private field is done by using .>:

(def a "hello")(.> a :value) ;=> #(.> a (:value (char-array 
"world")))a ;;=> "world"







More on the website - https://github.com/zcaudate/iroh

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

2014-04-03 Thread zcaudate

Update to Vinyasa - https://github.com/zcaudate/vinyasa
Whats New? <https://github.com/zcaudate/vinyasa#020>0.2.0

vinyasa has now been repackaged <https://github.com/zcaudate/lein-repack>. 
Functionality can now be accessed via seperate dependencies:

[im.chit/vinyasa.inject "0.2.0"][im.chit/vinyasa.pull 
"0.2.0"][im.chit/vinyasa.lein "0.2.0"][im.chit/vinyasa.reimport "0.2.0"]

Or all of them together:

[im.chit/vinyasa "0.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.
For more options, visit https://groups.google.com/d/optout.


[ANN] - lein-repack 0.1.0 - Repack your project for deployment and distribution

2014-04-02 Thread zcaudate

lein-repack

Repack your project for deployment and distribution
<https://github.com/zcaudate/lein-repack#motivation>Motivation

lein-repack was written to solve a problem I had with utilities and general 
purpose libraries. In my experience, clojure libraries are much better when 
they are distributed in small packages. However, functionality is much 
easier to develop when the project is big: when we try to build our general 
purpose libaries in small packages, they become a nightmare to test and 
deploy.

lein-repack redistributes your code base into managable, deployable chunks 
and analyses your source files to automatically resolve internal and 
external dependencies. It this way, a big clojure project can now be broken 
up into sub-packages for deployment and redistribution.

The plugin will:

   - Create sub-projects for all sub-namespaces in a project
   - Will look through source files and figure out project dependencies
   - Will repackage a project into many smaller artifacts for easier 
   deployment and distribution


--
Walkthrough

For example, if there were a project called lama at version 0.1.0 and the 
files were organised like this:

- src
   - lama
   - weapons
  - gun.clj
   - food
  - prepare.clj
   - food.clj
   - core.clj

Running lein repack install will split the project into four jars and 
install them in maven.

lama-0.1.0.jar
lama-core-0.1.0.jar
lama-food-0.1.0.jar
lama-weapons-0.1.0.jar

Running lein repack deploy will deploy all four artifacts to clojars.

Once the artifacts are installed/deployed, they are now ready to be used. 
For example, if only the functionality for lama.weapons were required for 
another project, it can be imported individually in the project by adding 
[lama.weapons 
"0.1.0"] to project dependencies. The entire project can be imported my 
adding [lama "0.1.0"] to project dependencies.

-

More on the github page - https://github.com/zcaudate/lein-repack

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


Strange behaviour for proxy when two abstract classes are passed in

2014-03-31 Thread zcaudate
I know this is a silly example but I am curious to know what is happening 
with the proxy method.

I have set up two calls to proxy:

1.
  (def cp
(proxy [java.util.AbstractMap clojure.asm.ClassVisitor] []))

2.
  (def cp
(proxy [clojure.asm.ClassVisitor java.util.AbstractMap] []))


The first call is fine and it return cp.  The second call gives me an 
exception.

clojure.lang.Compiler$CompilerException: 
java.lang.IncompatibleClassChangeError: Implementing class, 
compiling:(/private/var/folders/dd/qfdy6sbn3mlgk20vcxc3j0ljnpxsqr/T/form-init4780219965491827451.clj:2:5)
 java.lang.IncompatibleClassChangeError: Implementing class
java.lang.ClassLoader.defineClass1 
ClassLoader.java  
 java.lang.ClassLoader.defineClass 
ClassLoader.java:  800
 java.lang.ClassLoader.defineClass 
ClassLoader.java:  643
   clojure.lang.DynamicClassLoader.defineClass 
 DynamicClassLoader.java:   46
  clojure.core/get-proxy-class 
  core_proxy.clj:  262


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


Request for Mentors for GSoC Projects

2014-03-09 Thread zcaudate
I'm happy to mentor the Typed Clojure Beginner Tutorial, Annotations & Error 
Messages and/or the typed Clojurescript Annotations

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


Request for Mentors for GSoC Projects

2014-03-09 Thread zcaudate
I'm happy to mentor the Typed Clojure Beginner Tutorial, Annotations & Error 
Messages and/or the typed Clojurescript Annotations

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

2014-03-01 Thread zcaudate
I'm also looking for collaborators as it is getting to a stage where I'm 
having trouble managing it by myself.

 if anybody is interested. Please send me a message

Chris

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from 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] iroh 0.1.5 - Simple Java Reflection (Still SNAPSHOT but comments would be welcome)

2014-02-13 Thread zcaudate
Okay, 

v0.1.5 is out: http://z.caudate.me/jvm-class-reflection-made-simple/

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


Re: How to invoke java method obtained using clojure.reflect

2014-02-13 Thread zcaudate
Try my new library. It makes reflection really easy to use
http://github.com/zcaudate/iroh

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from 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: [vinyasa 0.1.5] - dynamic reloading of java code without repl restart

2014-01-02 Thread zcaudate

I've added a new functionality for vinyasa 0.1.5 - a much needed function 
for reloading java code

the repo is here: https://github.com/zcaudate/vinyasa

Enjoy!

---
reimport

Don't you wish that you could make some changes to your java files and have 
them instantly loaded into your repl without restarting? Well now you can!

For example, in project.clj, you have specified your :java-source-paths

(defproject .
   :source-paths ["src/clojure"]
   :java-source-paths ["src/java"]
   )

and you have a file src/java/testing/Dog.java

package testing;public class Dog{
  public int legs = 3;  
  public Dog(){};}

You can load it into your library dynamically using reimport

(reimport '[testing.Dog]);;=> 'testing.Dog' imported from 
/target/reload/testing/Dog.class
(.legs (Dog.));; => 3

You can then change legs in testing.Dog from 3 to 4, save and go back to 
your repl:

(reimport '[[testing Dog]]) ;; supports multiple classes;;=> 'testing.Dog' 
imported from /target/reload/testing/Dog.class
(.legs (Dog.));; => 4

If you have more files, ie. copy your Dog.java file to Cat.java and do a 
global replace:

(reimport) ;; will load all classes into your namespace;;=> 'testing.Dog' 
imported from /target/reload/testing/Dog.class;;   'testing.Cat' 
imported from /target/reload/testing/Cat.class
(.legs (Cat.));; => 4

Now the pain associated with mixed clojure/java development is gone!


---
installation

inject allows easy customisation of your clojure.core namespace by allowing 
injecting of the functions that you have always wanted to have in your 
profiles.clj file. Here is an example taken from myprofiles.clj.

{:user {:plugins [...]
 :dependencies [[spyscope "0.1.4"]
[org.clojure/tools.namespace "0.2.4"]
[io.aviso/pretty "0.1.8"]
[leiningen "2.3.4"]
[im.chit/vinyasa "0.1.5"]]
 :injections [(require 'spyscope.core)
  (require 'vinyasa.inject)
  (vinyasa.inject/inject 'clojure.core
'[[vinyasa.inject inject]
  [vinyasa.pull pull]
  [vinyasa.lein lein]
  [vinyasa.reimport reimport]])
  (vinyasa.inject/inject 'clojure.core '>
'[[cemerick.pomegranate add-classpath get-classpath 
resources]
  [clojure.tools.namespace.repl refresh]
  [clojure.repl apropos dir doc find-doc source pst 
[root-cause >cause]]
  [clojure.pprint pprint]
  [clojure.java.shell sh]])]}}

I have now imported the following vars into clojure.core and they will stay 
with me as I am coding in emacs:

   - from vinyasa:
   - inject as #'clojure.core/inject
  - pull as #'clojure.core/pull
  - lein as #'clojure.core/lein
  - reimport as #'clojure.core/reimport
   - from tools.namespace:
  - refresh as #'clojure.core/refresh
   - from clojure.repl:
   - apropos as #'clojure.core/>apropos
  - dir as #'clojure.core/>dir
  - doc as #'clojure.core/>doc
  - find-doc as #'clojure.core/>find-doc
  - root-cause as #'clojure.core/>cause`
  - pst as #'clojure.core/>pst
   - from clojure.pprint:
  - pprint as #'clojure.core/>pprint
   - from clojure.java.shell:
  - sh as #'clojure.core/>sh
   - from cemerick.pomegranate:
  - add-classpath as #'clojure.core/>add-classpath
  - get-classpath as #'clojure.core/>get-classpath
  - resources as #'clojure.core/>resources
   
<https://github.com/zcaudate/vinyasa#license>

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

2014-01-01 Thread zcaudate
I've updated the lib to version 0.1.1

Also, for people having issues with the library. The minimum leiningen 
version required for vinyasa is 2.3.4. Please do an upgrade of leiningen 
before using 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: ANN - [vinyasa 0.1.0] - Give your clojure workflow more flow

2013-12-31 Thread zcaudate
I've done a write up of my workflow here:

http://z.caudate.me/give-your-clojure-workflow-more-flow/

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

2013-12-31 Thread zcaudate
I've been rethinking my clojure workflow and came up with this little 
library, allowing sweet customisations of the clojure.core namespace for 
development purposes:

https://github.com/zcaudate/vinyasa

It has three functions - pull, lein, inject - and their uses are described 
below.


Chris.

-
vinyasa

Give your clojure workflow more flow.
<https://github.com/zcaudate/vinyasa#installation>Installation

Add vinyasa to your profile.clj:

{:user {:plugins [...]   
:dependencies [
   [im.chit/vinyasa "0.1.0"]
   ]
}
:injections [...
 (require '[vinyasa.inject :as inj])
 (inj/inject 'clojure.core
   '[[vinyasa.inject inject]
 [vinyasa.pull pull]
 [vinyasa.lein lein]])
     ...]
  }

<https://github.com/zcaudate/vinyasa#usage>Usage:

If you are in emacs and are in a clojure project, you can run nrepl-jack-in and 
use the added functionality straight away. If you are running lein repl and 
are in the user namespace, reload the user namespace before using:

> (ns user)> (lein)> (pull hiccup)

<https://github.com/zcaudate/vinyasa#pull>pull

How many times have you forgotten a library dependency for project.clj and 
then had to restart your nrepl?pull is a convienient wrapper around the 
pomegranate library:

> (require 'hiccup.core);; => java.io.FileNotFoundException: Could not locate 
> hiccup/core__init.class or hiccup/core.clj on classpath:
> (require 'hiccup.core)> (pull 'hiccup);; => {[org.clojure/clojure "1.2.1"] 
> nil, ;; [hiccup "1.0.4"] #{[org.clojure/clojure "1.2.1"]}}
> (use 'hiccup.core)> (html [:p "hello World"]);; => "hello World"
> (pull 'hiccup "1.0.1");; => {[org.clojure/clojure "1.2.1"] nil, ;; 
> [hiccup "1.0.1"] #{[org.clojure/clojure "1.2.1"]}}

<https://github.com/zcaudate/vinyasa#lein>lein

Don't you wish that you had the power of leiningen within the repl itself? 
lein is that entry point. You don't have to open up another terminal window 
anymore, You can now run your commands in the repl!

> (lein);; Leiningen is a tool for working with Clojure projects. Several 
> tasks are available:;; check   Check syntax and warn on 
> reflection.;; classpath   Write the classpath of the current project 
> to output-file.;; clean   Remove all files from paths in 
> project's clean-targets.;; cljsbuild   Compile ClojureScript source 
> into a JavaScript file.  .;;  .
> (lein javac)   ;; Compile java classes
> (lein install) ;; Install to local maven repo
> (lein uberjar) ;; Create a jar-file
> (lein push);; Deploy on clojars I still use lein-clojars 

<https://github.com/zcaudate/vinyasa#inject>inject

I find that when I am debugging, there are additional functionality that is 
needed which is not included in clojure.core. The most commonly used 
function is pprint and it is much better if the function came with me when 
I was debugging.

The best place to put all of these functions in in the clojure.core
 namespace inject is used to add additional functionality to namespaces so 
that the functions are there right when I need them. Inject also works with 
macros and functions (unlike intern which only works with functions):

> (inject 'clojure.core '[[clojure.repl dir]]);; => will intern 
> #'clojure.repl/dir to #'clojure.core/dir
> (clojure.core/dir clojure.core);; *;; *';; *1;; *2;; *3;; *agent*;; 
> *allow-unresolved-vars*;; *assert* ...;; ...

inject can also work with multiple entries:

> (inject 'clojure.core '[[clojure.repl doc source]]);; => will create the var 
> #'clojure.core/doc and #'clojure.core/source

inject can also take a prefix:

> (inject 'clojure.core '>> '[[clojure.repl doc source]]);; => will create the 
> var #'clojure.core/>>doc and #'clojure.core/>>source

inject can use vector bindings to directly specify the name

> (inject 'clojure.core '>> '[[clojure.repl doc [source source]]]);; => will 
> create the var #'clojure.core/>>doc and #'clojure.core/source

<https://github.com/zcaudate/vinyasa#inject---installation>inject - 
installation

inject allows easy customisation of your clojure.core namespace by allowing 
injecting of the functions that you have always wanted to have in your 
profiles.clj file. Here is an example taken from myprofiles.clj.

{:user {:plugins [...]
:dependencies [[spyscope "0.1.4"

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

2013-12-20 Thread zcaudate
@philip lord.

Where would mutant elephants and the elephant god Ganesha fit in that 
classification?

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

2013-11-06 Thread zcaudate
I've since realised the other reason why I like posting on the clojure 
group
>
>  
- The clojurescript group for whatever reason does not take html format... 
it makes the post look super ugly.

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from 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] purnam 0.1.8 - native javascript essentials for clojurescript (documentation out!!!)

2013-11-06 Thread zcaudate
I'm really happy that I have finish documenting my new-ish clojurescript 
library.

You can find it here: 

http://docs.caudate.me/purnam/

-

purnam

is a *clojurescript* library designed to provide better 
clojurescript/javascript interop, testing and documentation tools to the 
programmer. It also has very comprehensive modules for 
angular.js<http://angularjs.org/>
 applications.

Current projects requiring interface with external javascript libraries 
will greatly benefit from this library. 'Pure' clojure/clojurescript 
libraries will also benefit with its unit-testing and documentation 
workflows. The library was written to solve a number of pain points that I 
have experienced in clojurescript development:
Better JS Interop

The first pain point was having to deal with the clojurish (.dot syntax) for 
javascript interop as well as a lack of functionality when working with 
native js objects. This made it especially hard for working with any 
external js library. Purnam offers:

   - purnam.cljs <http://docs.caudate.me/purnam/#purnam-cljs> - functions 
   for native objects and arrays
   - purnam.js <http://docs.caudate.me/purnam/#purnam-js> - a set of macros 
   allowing javascript-like syntax for better interop
   - purnam.types <http://docs.caudate.me/purnam/#purnam-types> - clojure 
   protocols for native objects and arrays

In-Browser Testing

The second pain point was the lack of testing tools that worked within the 
browser. Even though testing withphantom.js <http://phantomjs.com/> was 
fine for non-browser code, I wanted something with more debugging power and 
so unit testing is integrated with the karma<http://karma-runner.github.io/> 
test 
runner using two different test styles:

   - purnam.test <http://docs.caudate.me/purnam/#purnam-test> - testing 
   using jasmine <http://pivotal.github.io/jasmine/> syntax
   - purnam.test.sweet <http://docs.caudate.me/purnam/#purnam-test-sweet> - 
   testing using midje <https://github.com/marick/Midje> syntax (compatible 
   with midje-doc <https://www.github.com/zcaudate/lein-midje-doc>)

Angularjs on Clojurescript

The third pain point was the code bloat I was experiencing when developing 
and testing *angular.js* code using javascript. It was very easy to 
complect modules within large *angular.js*applications and I wanted to use 
clojure syntax so that my code was smaller, more readable and easier to 
handle. Purnam offers:

   - purnam.angular <http://docs.caudate.me/purnam/#purnam-angular> - a 
   simple dsl for eliminating boilerplate*angular.js*
   - purnam.test.angular<http://docs.caudate.me/purnam/#purnam-test-angular> - 
   testing macros for eliminating more boilerplate test code for services, 
   controllers, directives and filters

Integrated Documentation

The fourth pain point was the lack of documentation tools for clojurescript 
as well as clojure. purnam is compatible 
withmidje-doc<https://www.github.com/zcaudate/lein-midje-doc> so 
that the integrated testing and 
documentationworkflow<http://z.caudate.me/combining-tests-and-documentation/> 
can 
be also used in clojurescript.

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


Testing with Angular.js, Clojurescript and Purnam - Code and Part 1

2013-11-05 Thread zcaudate
Code:  https://github.com/zcaudate/purnam-angular-example
Demo: http://docs.caudate.me/purnam-angular-example/
Article: http://z.caudate.me/purnam-angular-js-testing-part-1-services/



Even with the karma <http://karma-runner.github.io/> test runner, testing 
in angularjs is painful. It's one thing to be able to write a 
*angular.js*controller, 
its another to be able to test them. Making it more difficult is the sheer 
complexity of the framework. There are different strategies of testing 
controllers, directives, filters and injectables (values, services, 
factories and providers)

There are two excellent articles about testing in angular.js by Year of 
Moo. 
Here<http://www.yearofmoo.com/2013/09/advanced-testing-and-debugging-in-angularjs.html>
 and 
Here<http://www.yearofmoo.com/2013/01/full-spectrum-testing-with-angularjs-and-karma.html>.
 
However, my eyes start hurting when I look at the test code. It is modular, 
it is brilliantly thought out, it is *very* complete... but it is seriously 
hard to get my head around. An example of controller testing can be found 
here<https://github.com/yearofmoo-articles/AngularJS-Testing-Article/blob/master/test/unit/controllers/controllersSpec.js>

It took me about a couple of days to summon up the courage to even attempt 
to read the code. Then I realised that the tests weren't doing that much at 
all. Most of it was boilerplate and not that interesting. Out of about 5 
lines of test code, something interesting only happened in one of them. I 
abstracted out all the angular.js testing code into 
macros<https://github.com/zcaudate/purnam/wiki/Api---purnam-test-angular>
.

The point I've been making on previous 
post<http://z.caudate.me/if-you-cant-beat-them/> is 
that clojurescript rocks if we really embrace javascript libraries through 
macros. With macros for *angular.js*, working with angular.js is so much 
clearer than in javascript.

I have put together an example 
project<https://github.com/zcaudate/purnam-angular-example> that 
shows how one may go about doing a simple app with tests. I'm going to take 
a couple of posts to explain how purnam.angular, purnam.test and
purnam.test.angular work together.


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


Testing Clojurescript Code with the Karma Test Runner

2013-10-29 Thread zcaudate

I thought this may also be of interest to those that are not subscribed to 
planet clojure.. 

>From http://z.caudate.me/testing-clojurescript-code-with-karma/



The karma <http://karma-runner.github.io/0.10/index.html> test runner is an 
amazingly fully featured testing platform. Its lead developer Vojta Jina, 
is an integral part of google's the angular.js <http://www.angularjs.org/> team 
and it is the default test runner for*angular.js* projects. Karma also 
works without *angular.js* and can also be used as a standalone tool for 
testing code on multiple browsers.

purnam <https://github.com/zcaudate/purnam> includes *clojurescript* testing 
using jasmine <http://pivotal.github.io/jasmine/> and 
karma<http://karma-runner.github.io/0.10/index.html>. 
I updated the library to version 0.1.5 and a couple of examples from the 
wiki<https://github.com/zcaudate/purnam/wiki/Your-First-Project#a2-creating-a-karma-configuration-for-tdd>
 has 
gone out of date.

I thought that it'll be much easier for everyone if I provided a sample 
project <https://github.com/zcaudate/puram-karma-testing> and a quick 
video<http://www.youtube.com/watch?v=mhBqjJUYY6w>to 
get people started on cljs testing using this fantastic framework: 
[image: ScreenShot] <http://www.youtube.com/watch?v=mhBqjJUYY6w>

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

2013-10-17 Thread zcaudate
Would it be possible to put up a video of a typical workflow example with 
pedestal. It's quite difficult for me to piece everything together just by 
reading the documentation.

Chris

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

2013-10-16 Thread zcaudate
okay... 0.0.15 is up
 
On Wednesday, October 16, 2013 11:48:56 PM UTC+11, frye wrote:
>
> Oh nice one. I saw where Raynes 
> responded<https://github.com/Raynes/conch/issues/7>pretty quickly. That's 
> awesome. Let me know when I can retry 
> lein-midje-doc. It would very cool to have that functionality. 
>
>
> Tim Washington 
> Interruptsoftware.ca / Bkeeping.com 
>  
>
> On Tue, Oct 15, 2013 at 4:56 PM, zcaudate  >wrote:
>
>> Hi Tim.
>>
>> I've lodged the issue with Raynes here:
>> https://github.com/Raynes/conch/issues/7
>>
>> Chris.
>>
>>

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


Generating schema maps

2013-10-15 Thread zcaudate
I'm wondering if there are any good tools around for generating schema maps.

I'm looking for a example that can generate the picture from codeq - 
https://github.com/downloads/Datomic/codeq/codeq.pdf

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

2013-10-15 Thread zcaudate
Hi Tim.

I've lodged the issue with Raynes here:
https://github.com/Raynes/conch/issues/7

Chris.

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

2013-10-15 Thread zcaudate
Hi Tim.

I've lodged the issue with Raynes here:
https://github.com/Raynes/conch/issues/7

Chris.

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

2013-10-13 Thread zcaudate
Also.. What version of clojure are you using? I'll try with that and see if I 
can reproduce the error.

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

2013-10-13 Thread zcaudate
Hi Tim.

That is a strange message. I am using conch to shell out to pygments which does 
the syntax highlighting. I'm not sure why that library is not compiling. What 
operating system are you using?

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


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

2013-10-05 Thread zcaudate
I'm a little bit miffed over this current craze of `types` and 
`correctness` of programs. It smells to me of the whole `object` craze of 
the last two decades. I agree that types (like objects) have their uses, 
especially in very well defined problems, but they have got me in trouble 
over and over again when I am working in an area where the goal is unclear 
and requirements are constantly changing. 

BTW... This is no means a criticism of all the type system work that is 
going on in the clojure community. I am a huge fan of Ambrose's Typed 
Clojure project because it gives me the *option *of using types... not 
shoving it down my throat. I like the freedom to choose.

My experience of programming in clojure has freed me from thinking about 
types and hierarchies and this article rings so true: 
http://steve.yegge.googlepages.com/is-weak-typing-strong-enough.

However, everywhere I look, there are smug type-weenies telling me that my 
dynamically typed program is bad because it cannot be `proven correct` and 
not `checked by the compiler`. This question on SO really makes me 
angry 
http://stackoverflow.com/questions/42934/what-do-people-find-so-appealing-about-dynamic-languages
 
because no one is defending dynamic languages on there. The reason is very 
simple. because we don`t have a theory to back us up!

I do want to put up an counter argument against this barrage of abuse 
against dynamic languages. And I want to put some academic weight behind 
this. The only counter I could come up with was to use Godel's 
incompleteness theorem. For those that don't know... here is an 
introduction to the man and his theory. 
http://www.youtube.com/watch?v=i2KP1vWkQ6Y. Godel's theorem, invalidated 
Principia Mathematica as a complete system of description. Principia 
Mathematica btw  effectively led to Type Theory.


According to http://en.wikipedia.org/wiki/Type_theory. "The types of type 
theory were invented by Bertrand Russell in response to his discovery that 
Gottlob Frege's version of naive set theory was afflicted with Russell's 
paradox. This theory of types features prominently in Whitehead and 
Russell's Principia Mathematica. It avoids Russell's paradox by first 
creating a hierarchy of types, then assigning each mathematical (and 
possibly other) entity to a type. Objects of a given type are built 
exclusively from objects of preceding types (those lower in the hierarchy), 
thus preventing loops."

I'm hoping to collect a few more `proofs` from the clojure community... for 
example... if there is a paper on "why are type systems so bad at 
classifying animals"... then please forward it on. 

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

2013-10-05 Thread zcaudate
what about teaching them how to use the tools - like emacs and light table.

i find it easier to demonstrate the value of something by just using it... And 
explaining the language constructs as you go along... Like writing a simple web 
app - say with the ring stack, or doing some animations with quil.

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

2013-09-30 Thread zcaudate

Thanks everybody for your feedback and suggestions on the last post.

Version 0.3.1 has the following updates: 

The `finally` clause is supported on `manage` 
- http://z.caudate.me/ribol/#finally as well as all the hook forms 
- http://z.caudate.me/ribol/#hooks

`raise-on` and `raise-on-all` have been updated to work better with thrown 
clojure.lang.ExceptionInfo objects

I've also put in a section on how code can be reused using restarts - 
http://z.caudate.me/ribol/#unlucky-numbers

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

2013-09-30 Thread zcaudate
Fantastic! Congratulations on the great work.

On Monday, September 30, 2013 4:43:59 PM UTC+10, Nicolas Modrzyk wrote:
>
> Hi Everyone,
>
> Myself and a friend have just finished a book related to the Clojure 
> ecosystem:
>
> http://www.amazon.co.jp/dp/4774159913
>
> We are focusing not on the core language itself, although we do at times, 
> but we focus on all the tools and the different frameworks that can help 
> make a project being effective and fun at the same time. 
>
> The book is in Japanese, but we have been helped by dozens of people from 
> the global Clojure community to be able to complete it, so we thought it 
> was a small way to contribute back. 
>  
> Kind Regards, 
> Arigatou- 
>
> Nicolas, 
>

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

2013-09-29 Thread zcaudate
I've re-visited an old library of mine, upgrading the code as well as 
documenting its features and usage:

http://z.caudate.me/cronj/
This library was built to support testing and repl development of scheduled 
tasks (which is quite difficult to test in general). In addition to being 
able to schedule tasks, the novel features are:

  - task management (http://z.caudate.me/cronj/#task-management)
  - simulating running tasks 
(http://z.caudate.me/cronj/#running-simulations)


Github page is:
https://github.com/zcaudate/cronj

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from 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]: ova 0.9.6 - the bestest mutable array ever! (with lots of documentation)

2013-09-29 Thread zcaudate


http://z.caudate.me/ova/

ova has been designed especially for dealing with shared mutable state in 
multi-threaded applications. Clojure uses refs and atoms off the shelf to 
resolve this issue but left out methods to deal with arrays of shared 
elements. ova has been specifically designed for the following use case:


   - Elements (usually clojure maps) can be added or removed from an array
   - Element data are accessible and mutated from several threads.
   - Array itself can also be mutated from several threads.

Github:

https://github.com/zcaudate/ova

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

2013-09-27 Thread zcaudate
I just thought of another feature that I want - persistence... Like saving the 
rules into some file and loading them back again.

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from 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] ribol "v0.2.1" - comprehensive document on conditional restart systems

2013-09-27 Thread zcaudate
Hi Dima,
>
>
I've push v0.2.3 to clojars... an example can be seen 
here: http://z.caudate.me/ribol/#raise-on

(raise-on [[NumberFormatException ArithmeticException] :divide-by-zero
   Throwable :throwing]
  (throw (Throwable. "oeuoeu"))
  (finally (println 1)))
=> (raises-issue {:throwing true}) ;; prints 1

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

2013-09-25 Thread zcaudate
Hi Ryan!

Great work. Can normal clojure maps can be used instead of records?

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


Video: Generating Beautiful (and Correct) Documentation from Unit Tests Files

2013-09-25 Thread zcaudate
I've put up a video of a new documentation plugin for leiningen

Project Page:
https://github.com/zcaudate/lein-midje-doc

Youtube Video:
http://www.youtube.com/watch?v=8FjvhDPIUWE&feature=youtu.be


Sample Generated Documentation:
http://z.caudate.me/lein-midje-doc/
http://z.caudate.me/ribol/
http://z.caudate.me/ova/


Any Comments or Feedback would be 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/groups/opt_out.


Re: [ANN] ribol "v0.2.1" - comprehensive document on conditional restart systems

2013-09-25 Thread zcaudate
Hi Dima,

You can now put 'finally' clause in v0.2.2, just loaded onto clojars. 

I haven't done an example on the readme yet

but the following should print a hello and return [1 2 :A]:

(manage  ;; L2
 [1 2 (manage;; L1
   (raise :A);; L0
   (on :A [] :A))]   ;; H1A
 (on :B [] :B) (finally (print "hello")))

Chris.



On Thursday, September 26, 2013 1:26:37 AM UTC+10, Dima Sabanin wrote:
>
> Hi Chris!
>
> Great library! I'm trying to apply this to a project I'm working on, but 
> I'm somewhat new to the conditional restarts theory. What would I use 
> instead of Clojure's finally block to properly free up the resources on 
> error escalation?
>
> -- 
> Thanks,
> Dima Sabanin
> http://twitter.com/dimasabanin
>
>
> On Wed, Sep 25, 2013 at 3:14 AM, zcaudate  >wrote:
>
>> I've done a pretty comprehensive guide on conditional restart systems in 
>> clojure with diagrams to show why it is much more flexible over try/catch 
>> mechanism
>>
>> Project:
>> https://github.com/zcaudate/ribol
>>
>> Generated Documentation:
>> http://z.caudate.me/ribol/
>>
>>
>>
>>  -- 
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clo...@googlegroups.com
>> Note that posts from new members are moderated - please be patient with 
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+u...@googlegroups.com 
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to clojure+u...@googlegroups.com .
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>
>
>
> -- 
> Best regards,
> Dima Sabanin
> http://twitter.com/dimasabanin 
>

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from 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] ribol "v0.2.1" - comprehensive document on conditional restart systems

2013-09-25 Thread zcaudate
Hi Dima,

That's actually a really good question. I don't think it possible currently :)

I think I do need to support a finally clause But can you give a code 
example of how you might want to write such a thing?

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from 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] ribol "v0.2.1" - comprehensive document on conditional restart systems

2013-09-25 Thread zcaudate
I've done a pretty comprehensive guide on conditional restart systems in 
clojure with diagrams to show why it is much more flexible over try/catch 
mechanism

Project:
https://github.com/zcaudate/ribol

Generated Documentation:
http://z.caudate.me/ribol/



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

2013-09-23 Thread zcaudate
Ooops! Really sorry guys. the resource directory was not included in the 
v0.0.9 jar file... it is now fixed in v0.0.10.

lein-midje-doc

lein-midje-doc fixes the problem of incorrectly documented examples by 
bridging the gap between writing tests and writing documentation.
<https://github.com/zcaudate/lein-midje-doc#features>Features:
   
   1. To generate .html documentation from a .clj test file.
   2. To express documentation elements as clojure datastructures.
   3. To render clojure code and midje facts as code examples.
   4. To allow tagging of elements for numbering and linking.

<https://github.com/zcaudate/lein-midje-doc#benefits>Benefits:
   
   1. All documentation errors can be eliminated.
   2. Removes the need to cut and copy test examples into a readme file.
   3. Entire test suites can potentially be turned into nice looking 
   documentation with relatively little work.



On Monday, September 23, 2013 2:22:08 PM UTC+10, zcaudate wrote:
>
> Hi Everyone.
>
> I've just pushed a new documentation library for midje tests to clojars. 
> Its very experimental and a bit of a hack but I'm finding it super useful. 
> Hope to get some feedback on this library.
>
> Github Page - https://github.com/zcaudate/lein-midje-doc
>
> Generated Documentation - http://z.caudate.me/lein-midje-doc/
>
>
> Chris
>

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

2013-09-22 Thread zcaudate
Hi Everyone.

I've just pushed a new documentation library for midje tests to clojars. 
Its very experimental and a bit of a hack but I'm finding it super useful. 
Hope to get some feedback on this library.

Github Page - https://github.com/zcaudate/lein-midje-doc

Generated Documentation - http://z.caudate.me/lein-midje-doc/


Chris

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

2013-08-11 Thread zcaudate
Hi All,

I've updated the library from 0.1.5 version with new features:

 - handlers now can branch depending on exception data

(on :error [data]
   (if (> data 5)
 (escalate :too-big)
 (continue data)))

 - a additional `fail` handler for short-circuiting default behaviour
 - a 
strategies<https://github.com/zcaudate/ribol/blob/master/test/ribol/test_ribol_strategies.clj>
 document that show different ways of controlling program flow beyond 
try/catch

--

I'd love for some feedback.

Chris

_

ribol

ribol is a conditional restart library for clojure inspired by errorkit, 
having a more readable syntax, and designed with the base 
clojure.lang.ExceptionInfo type in mind.
<https://github.com/zcaudate/ribol#installation>Installation:

In project.clj, add to dependencies:

 [im.chit/ribol "0.2.1"]

<https://github.com/zcaudate/ribol#introduction>Introduction

ribol provides a conditional restart system. It can also be thought of as 
an issue resolution system ortry++/catch++. The library provides an 
alternative channel for resolving 'issues' (we use 'issues' here to 
differentiate from 'exceptions', although they are pretty much the same 
thing). It models a management structure, in which issues are reported to 
management, who then what course of action to take depending upon the issue 
and their own level of expertise:

   - 
   
   When circumstances arise that need the attention of higher level 
   processes, an 'issue' would be raised that can be managed by any higher 
   level process.
   - 
   
   An issue must have data as well as additional information attached:
   - options that can be taken to resolve the issue
  - a default option if there is no management intervention.
   - 
   
   Issues are managed through handlers that check for the nature of the 
   issue and come up with the proper resolution process. There are six ways 
   that a manager can deal with a raised issue:
   - directly (same as try/catch)
  - using continue to keep going with a specified value
  - using choose to specify an option
  - using escalate to notify higher level managers
  - using default to allow the issue to resolve itself
  - using fail to throw an exception
   
Using these six different different issue resolution commands, a programmer 
has the richness of language beyond the simple 'try/catch' statement at 
his/her command to be able to craft very complex process control flow 
strategies without mixing logic handling code in the middle tier. It can 
also create new ways of thinking about the problem beyond the standard 
throw/catch mechanism and offer more elegant ways to build programs.

Apart from the tutorial, interested users can peruse the 
strategies<https://github.com/zcaudate/ribol/blob/master/test/ribol/test_ribol_strategies.clj>
 document 
(still a work in progress) to go through common restart strategies.
<https://github.com/zcaudate/ribol#other-libraries>Other Libraries

There are three other conditional restart libraries for clojure - 
errorkit<https://github.com/richhickey/clojure-contrib/blob/master/src/main/clojure/clojure/contrib/error_kit.clj>
, swell <https://github.com/hugoduncan/swell> and 
conditions<https://github.com/bwo/conditions>

   - 
   
   errorkit provided the guiding architecture for ribol. However, ribol 
   updates errorkit with more options for controlling exceptions, uses 
   ex-info which is part of core and has an updated and more understandable 
   syntax.
   - 
   
   swell and conditions are written to work with 
slingshot<https://github.com/scgilardi/slingshot>
and try+/catch+.
   
<https://github.com/zcaudate/ribol#novel-features>Novel Features
   
   - In addition to the other conditional restart Libraries, ribol offers 
   three more ways of handling error:escalate, fail and default. As of 
   version 0.2 of ribol, handlers are now much more flexible. As far as I 
   can tell, it is the only library that allows this type of resolution 
   switching (having an 'if' form in the 'on' handler to switch between 
   escalate and continue depending on the value of data:

(manage (manage
   (mapv (fn [n]
   (raise [:error {:data n}]))
 [1 2 3 4 5 6 7 8])
   (on :error [data]
   (if (> data 5)
 (escalate :too-big)
 (continue data
  (on :too-big [data]
  (continue (- data
  [1 2 3 4 5 -6 -7 -8])


   - Additionally, the follow macros raise-on, raise-on-all and anticipate 
offer 
   ways to hook into the java exceptions. Its use can be seen here: integer 
   division <https://github.com/zcaudate/ribol/wiki/Robust-Integer-Divide>

-- 
-- 
You received this message because you are subscribed to the Google
Groups 

ANN: Ribol 0.1.5 - Conditional Restart Library for Clojure

2013-08-08 Thread zcaudate


Check out the Tutorial and Examples here:

https://github.com/zcaudate/ribol
ribol

ribol is a conditional restart library for clojure inspired by errorkit, 
having a more readable syntax, and designed with the base 
clojure.lang.ExceptionInfo type in mind.
<https://github.com/zcaudate/ribol#installation>Installation:

In project.clj, add to dependencies:

 [im.chit/ribol "0.1.5"]

<https://github.com/zcaudate/ribol#provides>Provides
   
   - Issue (exception) handling using maps for data as opposed to typed 
   classes
   - Passing data along with exceptions
   - Tight integration with ex-info and ex-data
   - Five different issue handlers - catch, continue, choose, escalate and 
   default

Comparison with other Libraries

There are two other conditional restart libraries for clojure - errorkit
 and swell

   - 
   
   errorkit provided the guiding architecture for ribol. However, ribol 
   updates errorkit with more options for controlling exceptions, uses 
   ex-info which is part of core and has an updated and more understandable 
   syntax.
   - 
   
   swell was written specifically to work with the slingshot try+/catch+ 
packages 
   and I thought that the two together carried too much baggage. ribol has 
   no such dependencies.
   


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

2013-05-28 Thread zcaudate
oh cool!

did you write your own compiler?

On Wednesday, May 29, 2013 3:51:51 PM UTC+10, Hoàng Minh Thắng wrote:
>
>
> You can give ChlorineJS a try:
>> http://plnkr.co/edit/gist:5469561?p=preview
>>
> Please note there's currently a bug with Plunker and some versions of 
> Firefox so in the mean time you should check it with other browsers.
>

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from 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 - adi 0.1.5 (user friendly syntax for datomic)

2013-05-28 Thread zcaudate


6. Insertion of `arbitrarily` formatted data:
a - books containing users:

(adi/insert! ds [{:book {:name "Charlie and the Chocolate Factory"
 :author "Roald Dahl"
 :accounts #{{:user "adi3" :password "hello3" :credits 
100}
 {:user "adi4" :password "hello4" :credits 
500}
 {:user "adi5" :password "hello5" :credits 
500
 {:book {:name "The Book and the Sword"
 :author "Louis Cha"
 :accounts users}}])


 b. users containing books

(adi/insert! ds
 [{:account {:user "adi1" :password "hello1"}}
  {:account {:user "adi2" :password "hello2"
 :books #{{:name "The Count of Monte Cristo"
   :author "Alexander Dumas"}
  {:name "Tom Sawyer"
   :author "Mark Twain"}
  {:name "Les Misérables"
   :author "Victor Hugo"])


7. Expressive Search

;; Full expressiveness on searches:;;(->> ;; Find the teacher that teaches a 
student called Harry
 (adi/select class-datastore {:teacher/teaches/students/name "Harry"})
 (map #(-> % :teacher :name))) ;=> ("Mr. Anderson" "Mr. Carpenter" "Mr. Blair")
(->> ;; Find all students taught by Mr Anderson
 (adi/select class-datastore {:student/classes/teacher/name "Mr. Anderson" })
 (map #(-> % :student :name))) ;=> ("Ivan" "Bobby" "Erin" "Kelly"
   ;;   "David" "Harry" "Francis" "Jack")
(->> ;; Find all the students that have class with teachers with fish
 (adi/select class-datastore {:student/classes/teacher/pets :fish })
 (map #(-> % :student :name)) sort);=> ("Anna" "Charlie" "David" "Francis" 
"Harry" "Ivan" "Jack" "Kelly")

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from 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 - adi 0.1.5 (user friendly syntax for datomic)

2013-05-28 Thread zcaudate
I've pushed out a significant update for adi, along with quite a long 
readme @ https://github.com/zcaudate/adi

Some highlights:

1. Required keys

(adi/insert! ds {:account {:credits 10}});; => (throws Exception "The following 
keys are required: #{:account/user :account/password}")


2. Schema checking

(adi/insert! ds {:account {:user "adi" :password "hello1" :type :vip}});;=> 
(throws Exception "(:type :vip) not in schema definition")

3. Restrictions

(adi/insert! ds {:account {:user "adi" :password "hello"}});;=> (throws 
Exception "The value hello does not meet the restriction: password needs an 
integer to be in the string")


4. Search constraints 

(adi/select ds {:account/credits '(> 10)} :first :hide-ids);;=> {:account 
{:user "adi3", :password "hello3", :credits 1000, :type :account.type/free}}


5. Data views

(adi/select ds {:account/user "adi1"} :first :hide-ids :view {:account/books 
:follow});;=> {:account {:user "adi1", :password "hello1", :credits 0,;;
  :books #{{:author "Louis Cha", :name "The Book and the Sword"}}, :type 
:account.type/free}}
(adi/select ds {:account/user "adi1"} :first :hide-ids :view {:account/books 
:follow
  :account/user 
:hide
  :account/password 
:hide
  :account/credits 
:hide
  :account/type 
:hide});;=> {:account {:books #{{:author "Louis Cha", :name "The Book and the 
Sword"


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

2013-05-13 Thread zcaudate
I'm guilty of this... But I really don't know what to do I still find 
myself thinking... Hmmm this library provides about 50% of what I want... This 
library has 2 functions that I like And I don't like the way something is 
implemented here... If only i can combine this, this, and this... Oh screw it! 
I'm going to write my own ;)

Any suggestions?

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from 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] - adi 0.1.1 - a `document` database grafted onto Datomic

2013-05-13 Thread zcaudate
I'm extremely happy to announce to the clojure community what I have been 
working on for the past couple of months. I'm calling it `adi`, sanskrit 
for `beginning`, acronym - (A) (D)atomic (I)nterface. 

Get it here: https://github.com/zcaudate/adi

For the more technical minded, these are  features of adi:

   - The Scheme Map and Datomic Schema Emission
   - Key Directory Paths as Map Accessors
   - The Datastore
   - Data Representation and Datomic Data Emission
   - Query Representation and Datomic Query Emission
   - Data Views as Faux `Documents`

For the more airy-fairy, here is the heart-warming version:


adi

adi, rhyming with 'hardy' stands for the acronym (a) (d)atomic (i)nterface.

The concept is simple. adi is a Document Database onto grafted on Datomic. 
It makes use of a map/object notation to interface with a Logical Query 
Engine.

Datomic began something brand new for data, and adi leverages that 
incredible flexiblility with a syntax that is simple to understand. It 
converts flat, record-like arrays to tree-like objects and back again so 
that the user can interface with datomic the way datomic was designed to do.

The key to understanding adi lies in understanding the power of a schema. 
The schema dictates what you can do with the data. Instead of limiting the 
programmer, the schema should exhance him/her.

Using adi once a schema for an application has been defined, the data can 
be inserted in any shape, as long as it follows the coventions specified 
within that schema. Fundamentally, there should be no difference in the 
data-structure between what the programmer asks for and what the programmer 
is getting. We shouldn't have to play around turning objects into records, 
objects into logic queries... etc...

Well... Not anymore...

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from 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] - purnam 0.0.9 (javascript.dot.notation language extensions for cljs)

2013-05-12 Thread zcaudate
Thanks Rich,

I couldn`t have said it any better =) Do you have the link for the proposal?

On Monday, May 13, 2013 8:42:41 AM UTC+10, Rich Morin wrote:
>
> On May 12, 2013, at 12:42, Michael Klishin wrote: 
> > If you had to describe your library in one sentence, what would it be? 
> > I'd be happy to tweet about it but currently can't really understand 
> > what it is, seems to be like 3 things mashed together. 
>
> It seems a bit like ClojureScript and HotCocoa (for MacRuby), in that: 
>
>   It provides a streamlined way to deal with the underlying language. 
>
>   The syntax is concise, but not necessarily idiomatic Clojure/Ruby. 
>
> I like ClojureScript's capabilities, but don't love the syntax.  This 
> is a useful experiment (at least!) in making ClojureScript prettier. 
> It has already prompted an enhancement by David Nolen and may promote 
> some interesting discussions about idiomatic use and language design. 
>
> -r 
>
>  -- 
> http://www.cfcl.com/rdmRich Morin 
> http://www.cfcl.com/rdm/resume r...@cfcl.com  
> http://www.cfcl.com/rdm/weblog +1 650-873-7841 
>
> Software system design, development, and documentation 
>
>
>

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




Re: [ANN] - purnam 0.0.9 (javascript.dot.notation language extensions for cljs)

2013-05-12 Thread zcaudate
I've updated the read me with more `practical` examples at the top and made 
another announcement =)

But regarding the language extensions:

@David. These are a set of optional extensions. But having said that, I 
really do hope that that you put  `def.n` macro and `obj` into the main 
clojurescript library itself (and maybe somehow merge `!` with `set!`). It 
does compliment the existing cljs functions, work will with namespaces, and 
will be great for getting javascript/clojurescript guys onboard!



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

2013-05-12 Thread zcaudate
I had a vague description for purnam 0.0.9:
https://groups.google.com/forum/?fromgroups=#!topic/clojure/AgZ_wVtdUFI

Its the same code with a different read me... 

Get it here:  https://github.com/zcaudate/purnam

Excerpt:

 Features
Purnam has three main components:

1. Angular Language Extensions
2. Jasmin Language Extensions for TDD with Karma
3. Clojurescript Language Extensions (which the previous two are built upon)

 Why not use lispyscript/coffeescript/clang?
I like each of the languages for their own features:

   - coffeescript for its succinctness
   - lispyscript for its syntax and macros
   - clang for its sheer brilliance and audacity

However, in using each language I did find some weaknesses

   - coffeescript and its ambiguous syntax that changes meaning with 
whitespace
   - lispyscript is too new for me and not widely adopted
   - clang is to ambitious in what it is trying to do (make angular work 
with clojure) and I think there are definite performance implications in 
doing so.

The goal of this project is to provide opt-in language extensions for 
clojurescript to have the same sort of succintness when working with 
angular and all other javascript 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] - purnam 0.0.9 (javascript.dot.notation language extensions for cljs)

2013-05-12 Thread zcaudate
Thanks Michael and everyone for their feedback

Let me have a think about it and `rebrand`.

On Monday, May 13, 2013 5:42:59 AM UTC+10, Michael Klishin wrote:
>
>
> 2013/5/12 zcaudate >
>
>> Additional features are listed
>
>
> If you had to describe your library in one sentence, what would it be? I'd 
> be happy to tweet about it
> but currently can't really understand what it is, seems to be like 3 
> things mashed together.
>
> Thanks!
>
> -- 
> MK
>
> http://github.com/michaelklishin
> http://twitter.com/michaelklishin
>  

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from 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] - purnam 0.0.9 (javascript.dot.notation language extensions for cljs)

2013-05-12 Thread zcaudate
Additional features are listed. Also, I`ve discovered a really easy way of 
automating TDD using karma, which quickens the compilation/testing 
dramatically and the jasmin macros where built for that:
functions

When f.n and def.n are used for function definitions, there is no need to 
write ?, ?> and !> within the form as it is handled automatically. 
Actually, the short hand is avaliable Within any of the macro forms.

Typing:

   - a.b.c is the same as typing (? a.b.c):
   - (inc a.b.c 1) is the same as typing (?> inc a.b.c 1):
   - (a.call arg1 arg2) is the same as typing (!> a.call arg1 arg2):
   - Only the setter function (! a.b.c (new value)) remains the same.

Example:

(def.n set-static-breadcrumbs [app v]
  (js/console.log "Setting breadcrumbs")
  (! app.layout.breadcrumbs
 (let [arr (array)]
   (doseq [i v.trail] ;; Dot notation
 (arr.push app.static.|i|)) ;; Note the javascript-ish accessor
   (arr.push v) ;; Dot function call
   arr)))

<https://github.com/zcaudate/purnam#other-libraries>Other 
Libraries<https://github.com/zcaudate/purnam#angularjs>
angularjs

Angularjs macros help alleviate the amount of callback functions that one 
has to write

(def.module app [ui ui.bootstrap ui.compat])
(def.config app [$locationProvider]
  (doto $locationProvider (.hashPrefix "!")))

(def.config app [$routeProvider]
  (doto $routeProvider
(.when "" (obj :redirectTo "/home"
(def.controller app.MainCtrl [$scope $state App AppFn]
  (! $scope.app App)
  (! $scope.fn AppFn)
  (! $scope.state $state)
  ($state.transitionTo "home"))

jasmin

Jasmin macros for clearer tests. The .cljs tests are defined using jasmin 
macros (which are really kinda cool)

(describe
 "objs contain js arrays"
 [o1 (obj :array [1 2 3 4])] 
 (*do.n*
   (it "describes something"
 (is o1.array.0 1)
 (is o1.array.1 2)
 (is o1.array.2 3)
 (is o1.array.3 4)
 (is o1.array.4 js/undefined

<https://github.com/zcaudate/purnam#jasmin>

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from 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] - purnam 0.0.9 (javascript.dot.notation language extensions for cljs)

2013-05-12 Thread zcaudate
Thanks Michael. I really didn't know how to 'sell' it because there's quite a 
bit of thought in there about how to make it work with existing javascript 
libraries so that the clojure syntax does not get in the way and it's difficult 

Maybe I have started talking def.n or about TDD first. I posted on the 
clojurescript group about that but the post it hasn't been moderated yet.

@David: i never knew that you can add more parameters to aget. However, the 
only problem i found with using aget was that if I have a nested object and one 
of the keys are missing, then I get an undefined error. Where as I want it to 
fail with a nil. I'm not really that interested in promoting my ! and ? 
operators and comparing forms, but how entire libraries of code can be written. 
There's a code transformer macro that take an entire form and rewrites all of 
the dotted symbols.  So that could be changed to take advantage of the 
efficient inlining.

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from 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] - purnam 0.0.9 (javascript.dot.notation language extensions for cljs)

2013-05-12 Thread zcaudate
Well... This is strictly for working with js objects. The syntax is a wrapper 
around the functions 'aget-in' and 'aset-in' which I wrote. I just assumed that 
get-in doesn't work because you have to use aget for js objects... so they were 
an attempt to mimic that with js-objects.

The .. Operator does make it much more concise but it's still ugly :)

The purnam.js syntax also supports dot notation function calls... which is more 
than what getters and setters do. You can see examples of this on my GitHub:

Eg 
def.n set-static-breadcrumbs [app v]
  (js/console.log "Setting breadcrumbs")
  (! app.layout.breadcrumbs
 (let [arr (array)]
   (doseq [i v.trail]
 (arr.push app.static.|i|))
   (arr.push v)
   arr)))


-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from 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] - purnam 0.0.9 (javascript.dot.notation language extensions for cljs)

2013-05-12 Thread zcaudate
This is a quick and dirty release for interested parties. I found it very 
useful when working with angularjs. The syntax should not change that much 
but there will be more documentation in the future. I would love to have 
some input into additional features that could be added.

Excerpt from Github: https://github.com/zcaudate/purnam

Installation

In your project file, add

[purnam "0.0.9"]

Why?

Because the javascript dot-notation is awesome and the 
javascript/clojurescript interop (aget aset, . and .-accessors) 
make for really ugly code. Using the language-extension macros, 
clojurescript becomes more than twice as concise when working with existing 
javascript libraries (I'm mainly working with angularjs).

So the use case can be seen below:
<https://github.com/zcaudate/purnam#getters>Getters:

## javascript (12 keystrokes):
object.a.b.c

## clojurescript (45 keystrokes):
(-> object
  (aget "a")
  (aget "b")
  (aget "c"))

## clojurescript + purnam (16 keystrokes):
(? object.a.b.c)

<https://github.com/zcaudate/purnam#setters>Setters:

## javascript (17 keystrokes):
object.a.b.c = 10

## clojurescript (48 keystrokes):
(-> object
  (aget "a")
  (aget "b")
  (aset "c" 10))

## clojurescript + purnam (19 keystrokes):
(! object.a.b.c 10)

<https://github.com/zcaudate/purnam#functions>Functions:

These are really bad examples of code but its what usually happens when 
working with existing javascript libraries. Using the dot-notation can save 
alot of screen and head space:

## javascript (~100 chars):
var bad_code = function(obj, val){
  obj.inner.number = 10;
  val.inner.count = obj.inner.count + 10;}

## clojurescript (~180 chars):
(defn bad-code [obj val]
  (-> obj (aget "inner") (aset "number" 10))
  (-> val 
  (aget "inner") 
  (aset "count"
(+ 10 (-> obj (aget "inner") (aget "count")
  nil)

## clojurescript + purnam (~110 chars):
(def.n bad-code [obj val]
  (! obj.inner.number 10)
  (! val.inner.count 
 (+ 10 obj.inner.count)) 
  nil)

<https://github.com/zcaudate/purnam#installation>

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

2012-10-10 Thread zcaudate

>
> okay... the readme is now updated =)

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from 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: math

2012-10-10 Thread zcaudate
The apache commons library - http://commons.apache.org/math/ is really rock 
solid.


all the utilities can be found in:
http://commons.apache.org/math/apidocs/org/apache/commons/math3/util/FastMath.html

see 
http://stackoverflow.com/questions/12327120/finding-all-the-power-roots-in-clojure

for a complex example

On Wednesday, October 10, 2012 1:38:20 PM UTC+11, Brian Craft wrote:
>
> I need some basic math functions, e.g. floor. I see there are some in 
> contrib, but I'm unable to figure out the status of contrib. Seems like 
> it's deprecated, or in transition, or 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

Re: ANN: cronj - task scheduling

2012-10-08 Thread zcaudate

>
> thanks! I'll make the change

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from 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: cronj - task scheduling

2012-10-08 Thread zcaudate
cronj
This is another cron-inspired task-scheduling library. I have found
many scheduling libraries for clojure:

 - quartzite
 - cron4j
 - clj-cronlike
 - at-at
 - monotony

The first three all follow the cron convention. The "task" (also
called a "job") can only be scheduled at whole minute intervals. at-at
has milli-second resolution, but was limited in the number of threads
that have to be predetermined. It was good for looking after tasks
that did not overlap between calls but not for tasks that may take an
arbitarily long time. monotony uses core.logic, which is something
that I am yet to understand.

cronj is little different due to design requirements in the project
that I am working on:
  - starts scheduled tasks at a per-second interval having high system-
time accuracy without wasting system resourcs.

  - would spawn as many threads as needed, so that tasks started at
earlier intervals could exist along side tasks started at later
intervals.

  - an additional design requirement required that task handlers are
passed a date-time object, so that the handler itself is aware of the
time when it was initiated.

it can be found at:
https://github.com/zcaudate/cronj

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from 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: sigmund - systems analytics for clojure

2012-10-08 Thread zcaudate

Sigmund is friendly clojure wrapper around the Hyperic SIGAR API
http://www.hyperic.com/products/sigar. It can tell you all sorts of
information about your currently executing process as well as the
system that you are working on. It provides quite a bit more
information than JMX:

   os: information, processes, memory, swap, resource limits, uptime
and logins.

   cpu: information, per cpu and average usage.

   jvm: runtime information for jvm.

   filesystem: mounted devices, disk usage, filesystem properties and
usage.

   network: usage, bandwidth, gateways, interface, routes and
connection status.

   process: per process information for cpu, memory, environment,
credentials, arguments and other information.

It can be found at:
https://github.com/zcaudate/sigmund

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from 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: sigmund - systems analytics for clojure

2012-10-08 Thread zcaudate
Sigmund is friendly clojure wrapper around the Hyperic SIGAR API
http://www.hyperic.com/products/sigar. It can tell you all sorts of
information about your currently executing process as well as the
system that you are working on. It provides quite a bit more
information than JMX:

   os: information, processes, memory, swap, resource limits, uptime
and logins.

   cpu: information, per cpu and average usage.

   jvm: runtime information for jvm.

   filesystem: mounted devices, disk usage, filesystem properties and
usage.

   network: usage, bandwidth, gateways, interface, routes and
connection status.

   process: per process information for cpu, memory, environment,
credentials, arguments and other information.

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


how do we go about promoting new clojure libraries?

2012-09-25 Thread zcaudate
is there some sort of categorised list/wiki that we can add to for new 
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