I just wanted to say that while amazonica is also my AWS library of choice,
and I'm so glad it exists, and "running code wins", I also run into all the
same issues that Greg listed.


On Thu, Nov 20, 2014 at 12:32 PM, 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 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