Hi,
Thanks for the replies. Some responses are inline.
---
Yavuz Selim Yilmaz
SUNY at Buffalo
Computer Science and Engineering
PhD Candidate
On Jun 5, 2013, at 2:28 AM, Matthias Wessendorf <matzew(a)apache.org> wrote:
Hello Yavuz,
thanks for the interest in AeroGear and sharing your feedback with our community!
We are for sure interested in how we can improve the experience. We really appreciate
your comments!
A few comments in-line!
On Wed, Jun 5, 2013 at 12:04 AM, Yavuz Selim YILMAZ <yavuzsel(a)buffalo.edu> wrote:
Hi All,
I am trying out the AeroGear libraries to get a sense of them. As a newbie to the
libraries, I took some notes about my first experience, and would like to share my notes
with you. Comments, directions and suggestions are most welcome.
General:
- It's not clear if I can use the client libraries with my own server side, or if I
can use the AeroGear controller without using the client libraries.
So, my initial thought was, I definitely need the AeroGear controller to integrate my
AeroGear powered client app with my RESTful backend.
As you (probably) noticed, they can be used individually. Do you think we should phrase
that different on the side, or in the docs ?
I started using AeroGear with the knowledge of there exist an open source library which
makes mobile to REST API communication easier. But once I saw the AeroGear controller
while reading through
aerogear.org, I thought mobile libraries communicate with REST APIs
through this controller on the server side (as the controller is there and is not a client
library, i thought like this. it's maybe my misunderstanding though). And I found no
explanation on my iOS API trial path which states the opposite (i.e. I don't need
AeroGear controller, or better to say the library directly communicates with REST API).
Once I get to know more and more about AeroGear, then it becomes clear (like checking more
docs, playing with the example apps etc.). But if I choose to try quickly and pick a
mobile lib, then it's harder to figure the things out.
- Maybe it is because the external libraries/tools used in the documentation apps
releases new versions so fast, but getting the example app from github, running it on my
machine and then modifying the app to play with it was harder than creating a new app and
using AeroGear libs in them directly.
That's an interesting comment. You are basically say the demos apps where broken? Or
update too often ? If the too often, please have in mind that we are early stage, and that
things are changing on a fast pace
Here is my example: aerogear-android-todo app (versionCode=1) does not compile on my
eclipse (it does if I compile on terminal). I think if and when the libs used in the
example apps changed (i saw recent updates or bug reports), it sometimes (as in my case)
causes problems. (probably my problem is related to a recent update on m2eclipse or
android-sdk-deployer or something else, as the project shows error on pom.xml file. or
maybe, even if I followed the links you provided to install those, I could not do it
correctly - but on the contrary, it works well if I create a maven android project on
eclipse and then add AeroGear dependency to pom.xml and use the AeroGear in my project).
iOS:
- iOS API Cookbook is a really nice doc to get to know about how to use AeroGear iOS
API.
- It is not clear enough how the backend side should be designed to work with client
libraries, and this is problem if you start using AeroGear with client side libraries (a
mobile developer will probably start so, like I did).
The backend should be pretty independent. For iOS, we do have integration tests against
different cloud services (not only against our backend):
- World Of Warcraft:
https://github.com/aerogear/aerogear-ios-integration/blob/master/AeroGear...
- Github's GIST API:
https://github.com/aerogear/aerogear-ios-integration/blob/master/AeroGear...
- Twitter's Search:
https://github.com/aerogear/aerogear-ios-integration/blob/master/AeroGear...
We do not even know what they used for writing these backends. Do you think the different
client libs should state more clearly that they can be used independently?
This would be an awesome solution I believe. As I started with a client library (while
just knowing that there is an AeroGear controller), I was confused about server side. If
that client lib's guide was talking a little bit about the server side, I think I
could've got it quickly.
If an iOS developer wants to use the library, she should go through AeroGear Controller
docs to know how the server side should be. And here "AeroGear Controller User
Guide" is not enough to figure the things out. Therefore, one needs to go through
aerogear-controller-demo on github to understand the details (e.g. after struggling with
how the server side APIs should be, it turned out that REST API itself was what i was
looking for - so easy if it was stated clearly [see general section above for why I find
this difficult]).
Looks like the controller guide needs some improvements? Or being more clearly on the
REST API (which is what you really need). Feel free to suggest changes to our docs! We are
more than happy to improve, especially based on user feedback
I think my confusion was about client side libs (about what should be the server side
specs). So your previous suggestion (libs guides state about backend side) would work
awesome (and for the controller guide, as I am not familiar to Java backend (not as much
as I do to iOS and Android), maybe it was hard specifically for me, so leaving that
part).
- xCode template is a really nice start, as it makes getting the first app running quick.
But template creates a part of todo app which doesn't have authentication and
therefore the app isn't functional.
I am sorry to hear, but that has been changed recently - So I guess you are a
"victim" of this fast pace here. Have a look at the template's "login
code":
https://github.com/aerogear/aerogear-ios-xcode-template/blob/master/AeroG...
Good news. :)
Android:
- Unlike iOS development, developing Android apps and compiling them has many different
alternatives. But as a maintainer of Android, Google puts Eclipse + ADT option in the
first place. So, I think at least there should be an option for AeroGear to use it with
Eclipse + ADT setup.
You mean integrated into the Eclipse Tooling? We do have guides for Eclipse for
instance:
http://aerogear.org/docs/guides/aerogear-android/
I integrated maven to eclipse and now using it. But my point is coming into scene
considering this flow:
- I started to develop for Android, so followed the documentation/guidelines that Google
provides. Google recommends (and follows on the guidelines) using Eclipse and provides ADT
plugin which takes care of the compilation. So, going through that docs, one does not need
maven at all. So, I was expecting to have an option for AeroGear, which will work with my
setup (i.e. Eclipse + ADT). But AeroGear requires me to use maven.
Especially using community tools to build is initially harder for newbies (e.g. I tried
to get maven running on eclipse using m2eclipse, and todo app does not compile on my
eclipse while it does on terminal). Some bugs and configuration changes in maven,
maven-android, android-sdk-deployer and m2eclipse slowed down the initial steps, i.e. it
was not as quick and straightforward as AeroGear iOS API to get the first app running.
Is that because on the documentation ?
I think this goes to the same explanation with the previous one. As I was not using maven
for developing Android apps, it was not as quick as iOS. (not because of documentation,
but because it was requiring me to use new tools)
- Sending query parameters to server side is slightly different on iOS and Android (or
maybe I couldn't find the same way, but Android sends where clause as JSON object,
while iOS sends key-value pairs as HTTP GET query parameters). So, I needed to update my
server side (which i developed for iOS) to use it for Android (or I could build my where
clause in iOS manually).
in iOS the idea was to have a generic "parameter provider", since the
"where" is pretty much dependent on the server. So configure your own
"params and their values" was the idea behind in iOS. I think that the
"where" is gone (or going away) in Android land as well
HTML5:
- As AeroGear.js uses AJAX to connect to the backend, and in my case (also I believe in
most cases) as my RESTful endpoint was not residing on the same host with my app, I needed
to use jsonp data type, which requires different response format. Therefore I needed to
update my server side (again - it was designed for iOS and updated for Android).
CORS support is available in the AG-js library, but yeah that's something your
backend needs to "setup" as well.
- When I create a pipe, I specify the baseURL and my endpoint, but I needed to specify
the data type when I was actually reading from the pipe. I felt like if I know what my
endpoint returns in terms of its data and application type, then I should be able to set
data type while creating my pipe.
- Although documentation is not complete yet, AeroGear.js file is well commented (going
through the comments, it's easy to understand what and how to do).
Hybrid with Cordova:
- The documentation for converting HTML5 + REST apps to Hybrid apps uses some directory
names (e.g. "ios") which causes confusion (when I read, I got confused about
whether the directory named "ios" is what I can choose its name or it is
something Cordova or Xcode creates and so it is a required name or directory in all
apps).
Cordova names their supported platforms that way (ios, android) - we can not do much
about this, also I think it does make sense (since they generate the bindings and
abstraction for that particular platform (e.g. iOS or Android or whatnot :))
- HTML5 documentation and example app employs modernizr for feature detection (mobile or
desktop) and to load appropriate libraries accordingly. However, modernizr does not load
fast in hybrid app (though hybrid app is for sure mobile, I first kept all the
implementation as it is to make it "implement once and use for all builds -HTML5, iOS
hybrid and Android hybrid-", but it didn't work). After removing modernizr from
HTML5 implementation and loading only mobile libs, it required no more effort to make
html5 app hybrid (it just did work).
You are talking about the Kitchensink example, right ? I think that is generally a bit
older now... I will have Luke/Kris comment on the future directions there :-)
Yes, the kitchensink app.
I also have a question, and your answers and/or directions are appreciated in advance.
- For now, I created some simple REST API's in PHP to try the mobile side libs.
that's perfectly ok!
What is your recommendation of building server side (which uses existing database
let's say) if it is going to be used with AeroGear? I mean, is it OK to go with PHP to
provide REST API,
if your backend devs are PHP guys -> go that route
and then add another layer using AeroGear controller? Or should I go with Java
implementation from the start?
Not needed. If you feel comfortable with Java, feel free to use the AG-Controller or
straight JAX-RS. It's up to you. See the integration test examples I shared above: We
basically have no details about the backened - we just leverage their REST APIs
So, to restate and simplify: my AeroGear controller needs to connect to an existing LDAP
instance. What's the AeroGear recommended approach for this?
Good question :-) Do you mind starting a new thread for the LDAP connection issue?
Thanks for your time to read (and respond). Cheers,
Yavuz, thanks again for trying AeroGear and giving such a detailed analysis! We truly
appreciate it!! I hope some given answers make sense. Let us know if you need more, or
feel free to suggest improvements.
Thanks!!!
-Matthias
---
Yavuz Selim Yilmaz
SUNY at Buffalo
Computer Science and Engineering
PhD Candidate
_______________________________________________
aerogear-dev mailing list
aerogear-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/aerogear-dev
--
Matthias Wessendorf
blog:
http://matthiaswessendorf.wordpress.com/
sessions:
http://www.slideshare.net/mwessendorf
twitter:
http://twitter.com/mwessendorf
_______________________________________________
aerogear-dev mailing list
aerogear-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/aerogear-dev