Regarding releases, the lein release function gives you good defaults for 
releasing Clojure projects, it handles tagging, commit messages, and 
versioning. 
https://github.com/technomancy/leiningen/blob/master/doc/DEPLOY.md#releasing-simplified
 has details. 

--
Daniel

> On 21/11/2014, at 1:08 pm, Michael Cohen <mcohe...@gmail.com> wrote:
> 
> Hi Greg,
> 
> I think all of your criticisms are very valid, and I think I've seen
> most of them voiced by others at various times. I wrote it in about 3
> weeks in March of 2013, when I was very new to Clojure, so I'm sure I
> made lots of mistakes. I was using some Java with AWS and some
> Clojure, with James Weaver's rotary library, and when you look at the
> Javadocs, it almost seems like the Java SDK could be generated. So
> that leads one to think....and off I went.
> 
> As far as the problem areas you identified:
> 
> - shitty docs
> What can I say, guilty as charged. Sorry. I tried to do a decent job
> with the examples, although I laughed when I heard Stu Halloway slag
> off "documentation by example" in some tech talk. Oops. What else
> could I do? I looked at trying to generate some more codox type docs
> from the Java SDK, but I just wasn't going to endure that pain. So,
> yeah, I hear you. It's a trade off though. I'm sure there's a few
> folks out there that would have to use Java interop and the Java SDK
> (and pour through those same Javadocs) in order to use one of the less
> popular AWS services if Amazonica didn't exist, because nothing else
> would exist in the Clojure world for that particular AWS service. Man,
> when I wrote this I don't even think there was a decent Clojure lib
> for ec2.
> 
> - dynamically generated api
> Yeah, the code is not as straightforward and reflection is expensive.
> The counterpoint to that I guess would be, once you have it well
> sorted, you don't really need to edit core.clj too much. And with most
> of the AWS api, the cost of reflection is negligible compared to the
> network hop. You're also probably not that concerned with latency at
> all for those use cases. But again, it's a trade off. Buy one get 20
> was worth a little reflection to me.
> 
> - Functions are both variadic and dispatch on argument type
> Again, guilty as charged. I would do things differently today.
> 
> - There are no releases or tags on github
> Again, I didn't really know what I was doing here, and never really
> changed the approach. What do people expect, a snapshot release for
> current development, and periodic version bumps and releases (less
> frequently than Amazonica currently bumps the version numer)?
> 
> Mike
> 
> 
>> On 11/20/14, Greg Mitchell <metroidphr...@gmail.com> wrote:
>> Thanks for creating this library, Michael. Your solutions for writing the
>> library are creative for sure, and this library has helped with developing
>> with AWS. However, I've been using the amazonica library to communicate
>> with AWS components in an enterprise-scale project for about a year now,
>> and I've come to believe that some of the design choices in the library and
>> 
>> its maintenance are big anti-patterns. All of these are things I've
>> struggled with in developing against Amazonica:
>> 
>> * The documentation is sparse and the code is not self-documenting.
>> Clojure in general tends to have worse and less documentation than Java.
>> This is usually mitigated in well-designed Clojure libraries by being able
>> to break into the source and read short, comprehensible functions with
>> descriptive names. Amazonica is in the worst of both worlds by having no
>> documentation in source, sparse documentation on github, and using
>> dynamically generated code. Specific improvements to documentation I'd love
>> 
>> to see: a comprehensive list of keys that credential maps and functions
>> take as well as their valid values. The one or two examples per API on
>> Github are insufficient for different combinations of functionality in
>> real-world use cases. Pointing to AWS javadoc is not sufficient because
>> Amazonica does name-munging and unwrapping - in order to understand the
>> Amazonica input/output, you have to be an expert with the library and look
>> at the implementation for name-munging. It is effectively a new API. A
>> comprehensive list of functions would be nice, but finding them at the repl
>> 
>> is a reasonable work around.
>> 
>> * Dynamically generating an API doesn't save anyone time
>> This is an extension of the previous point. You have almost 800 lines of
>> code, mostly dedicated to reflection and interning methods. It's impressive
>> 
>> that the whole thing works as well as it does, but doesn't actually save
>> time vs. explicitly targeting an API with small wrapper functions. That has
>> 
>> the benefit of being very obvious and easy to understand (as described
>> above). It does mean you have to do some work when the Java SDK changes or
>> you add a client, but I see there is already some nasty logic to switch on
>> the client class if it has a different interface. There's a performance
>> cost in reflection too.
>> 
>> * Functions are both variadic and dispatch on argument type
>> Especially without clear javadoc style documentation for function
>> arguments, types, and keys, having functions that take a smorgasborg of
>> different arguments is incredibly confusing. I think the root of this
>> problem is the choice to make the client methods variadic, because then
>> there can't be well-specified arities for the various cases (no credentials
>> 
>> or arguments, credential map, just arguments, credential map and
>> arguments), using repl. If the functions instead had 0, 1, and 2 arities
>> that took nothing, an argument map, or a credential map and an argument
>> map, it would be so much clearer. Also argument maps are generally a little
>> 
>> easier to work with than destructuring the rest.
>> 
>> * There are no releases or tags on github
>> My company has a tedious process for importing third-party packages into
>> source control. It's not ideal, but I'm sure it's not unique. It would be
>> great to be able to pull in a stable release built against well-specified
>> versions of dependencies.
>> 
>> I hope this doesn't come across as harsh, that's not my intent. I really do
>> 
>> appreciate you writing this library, and I realize that given how mature it
>> 
>> is, completely changing the implementation is probably unfeasible. I just
>> want to raise these concerns and see whether other people share them. If
>> so, maybe they can serve as patterns or anti-patterns for future libraries.
>> 
>> -Greg Mitchell
>> 
>>> On Monday, March 25, 2013 2:51:42 PM UTC-7, Michael Cohen wrote:
>>> 
>>> Curious to hear opinions on this:
>>> 
>>> https://github.com/mcohen01/amazonica
>> 
>> --
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clojure@googlegroups.com
>> Note that posts from new members are moderated - please be patient with your
>> first post.
>> To unsubscribe from this group, send email to
>> clojure+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>> ---
>> You received this message because you are subscribed to a topic in the
>> Google Groups "Clojure" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/clojure/QcGi4lPYi1s/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> clojure+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
> 
> -- 
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your 
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> --- 
> You received this message because you are subscribed to the Google Groups 
> "Clojure" group.
> To unsubscribe from 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.

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

Reply via email to