miércoles, 4 de noviembre de 2015

More Hybrid Apps please!

9:43 by Rafael Flores · 0 comentarios

Finally after a couple months' work, I've finished my new Hybrid App for Android, "San Fermin Quiz"(perhaps to be published for WindowsPhone and iOS, though the "tax" Apple charges discourages me to publish a free App). As with my previous development, "CPE Tráfico", I used Apache Cordova (the open source version of Adobe Phonegap) for development. This is the third  hybrid App that I publish, and I consider it new because it is a complete re-make of the previous version of "San Fermin Quiz", though that one too used Cordova/Phonegap plus jQuery Mobile for the front-end. In this case, however, I wanted to work with Ionic Framework (instead of Onsen-UI that was my framework for "CPE Tráfico"). Both are modern presentation frameworks that use AngularJS, Google's MVW framework which I've fallen completely "in love with" after these projects. And if there is just one thing both have taught me is to run away from jQuery like the plague! :D I also learned some more details that I want to talk a bit about on this post, in case it can be of somebody's use.

So, let's start saying that IMHO it keeps gettings clearer that Hybrid Apps are the future of Apps. "Clear as water". "Wasting time" nowadays (sorry if anyone thinks I'm wrong) developing with Swift, Java or any other "mono" platform is, at least, unproductive. Cordova / Phonegap offers everything it requires to develop quality applications on any platform, and only requires JavaScript knowledge. On top of that we can add that developing with JavaScript + AngularJS grows one's toolbelt future-proof (as they have become the "de-facto standard" for any development: web server, web client, IoT, ...), so the benefit is multiplied. It is true that there are some cases that may require the development of a truly "native" App: for example, one that must interact with "intents" not covered by Cordova / Phonegap or done for a very specific device; or those in which tight control of code is a must (such as POS Apps). But what could be the percentage of such cases? 5%?... Therefore, it is very difficult to justify the extra effort to develop "native".

Regarding the use of Ionic compared Onsen-UI, I have mixed opinions. On the one hand, I liked Onsen-UI initially. Its elegance "out of the box" together with some very good examples of code that could be used straigth away in any App(read "copy & paste") to make its skeleton, were some things I quickly appreciated. When I used this framework to develop "CPE Tráfico" I felt comfortable from the start: I liked what I saw, it integrated with Cordova / Phonegap faultless, it helped me understand the basics of AngularJS... Overall I had few problems. But one thing that I found "difficult": Onsen-UI is a development of the Japanese company Monaca, and the information available on the web about this platform is scarce: the truth test is to look for the term "onsen-ui" in Stackoverflow.com which returns 1,213 hits, while searching for "ionic" returns 10,970... True, Monaca is trying to solve this with new products (Cloud Monaca, Monaca Debugger, Monaca LocalKit ...) and adding more members to its team to train and support users (for example Fran Dios @frandiox). And also if you know how to look around and search for information, everything is solved :)
But when I've used Ionic... that's activity! Among the entries in Stackoverflow, their blog and products (Ionic Lab, Ionic Market, ...) and some of the authors who are writing articles about it (Raymond Camden, Christophe Coenraets, Ashteya Biharisingh, Simon Reimler ... and many more) it is not uncommon to find information and direct solutions to any problem. Truth is there is no comparison in on this point (well, at least for now). Another difference is the way to develop a project. Ionic installs on your development machine a handy CLI which allows immediately running the development App in your own local web server, whilst monitors the code and automatically updates itself when code is changed. You can also compile the app (although I prefer to do this on my own with Phonegap Build) and deploy it on an emulator or on a physical device connected to the machine. A very good way to accelerate development times and simplify testing (Monaca has created something similar for Onsen-UI, Monaca LocalKit, but I could not test it). And something more "invisible" but ultimately helpful: Ionic CLI creates a structure of files and folders to start our project in an organized manner. With Onsen-UI this is done manually thus there can be differences between projects that can negatively impact development ("Where is the library I created for ..."). This is in Ionic side becomes clearer (though one can screw things up if wants to, of course). Something I don't like about Ionic? Well, his OOTB visual style is ugly, very weak compared with Onsen-UI where everything is more visually pleasing (plus Onsen-UI lets you use Font-Awesome icons besides Ionicons for your project, though this can also be achieved in Ionic with some effort). But apparently this is part of the business strategy of Ionic, as they have recently launched Ionic Market where you can buy themes, plugins and packages for your Ionic starter applications. Luckily I found Ionic Material which is a free and simple way to implement Material Design on my Apps.

Ultimately both are very good frameworks, but Ionic today is much more accessible. Will this be like VHS and Beta? Who knows, maybe. I could not make a more thorough comparison that would be more appropriate to opt for one or the other (hey, I am a "one-man-shop" Apps developer using my spare-time!:) ): functionality, performance (this would be especially important to know about, so if anyone has information about this: please share!), supported platforms and versions, tests on real devices, update frequency, error resolution, future planning...

Maybe / certainly the next projects I have in mind will help me learn more: an app for Market Research, another app for Camera fans... Hybrid rules!

martes, 3 de noviembre de 2015

Más Hybrid Apps!

12:02 by Rafael Flores · 0 comentarios

Por fin tras un par de meses de trabajo, he terminado mi nueva App híbrida para Android, San Fermín Quiz (quizá la publique en WindowsPhone y iOS, aunque el "sablazo" de Apple me molesta mucho pagarlo para una App free). Como en el caso de mi desarrollo anterior, CPE Tráfico, he usado Apache Cordova (la versión open source de Adobe Phonegap) para su desarrollo. Se trata de la tercera App híbrida que publico, y la considero nueva ya que es un completo re-make de la versión anterior de San Fermín Quiz, que aunque también estaba basada en Cordova/Phonegap empleaba jQuery Mobile para el front-end. En este caso sin embargo quería trabajar con Ionic Framework (en vez de Onsen-UI que fue mi elección para CPE Tráfico). En ambos casos se trata de frameworks de presentación modernos que hacen uso de AngularJS, el framework MVW de Google del cual me he enamorado completamente tras estos proyectos. Y si algo me han enseñado ambos es a ¡huir de jQuery como de la peste! :D También he aprendido algunos detalles más que quiero comentar un poco en este post, por si es útil.

En primer lugar destacar que cada vez tengo más claro que (en mi opinión) las Apps Híbridas son el futuro de las Apps. Claro como el agua. Hoy en día "perder el tiempo" (perdón si alguien piensa que me equivoco) desarrollando con Swift, Java o cualquier otra plataforma "monocolor" es, como poco, improductivo. Cordova/Phonegap ofrece todo lo que se necesita para desarrollar aplicaciones de calidad y multiplataforma, y sólo requiere conocer JavaScript. Si a eso añadimos que al desarrollar con JavaScript+AngularJS estamos haciendo crecer nuestro abanico de herramientas de futuro (ya que es un "estándar" practicamente para cualquier desarrollo actual: web server, web client, IoT,...) el beneficio se multiplica.
Es cierto que sí hay algunos casos en los que pueda requerirse un desarrollo de App "nativas": por ejemplo las que deben interactuar con "intents" no cubiertas por Cordova/Phonegap o muy específicas de dispositivo; o aquellas en las que se quiera tener un control férreo del código (como TPVs o algunas Apps de empresa). Pero si pensamos que estos casos representarán como un ¿5%? del total de proyectos de Apps, resulta muy complicado justificar el esfuerzo extra de desarrollar "nativo".

Respecto al uso de Ionic comparado con Onsen-UI, tengo opiniones encontradas. Por un lado, Onsen-UI me gustó mucho inicialmente. Su elegancia "out of the box" unido a unos ejemplos de código en su página muy utilizables (léase "copy & paste") para hacer un esqueleto de App en poco tiempo fueron de agradecer. Cuando utilicé este framework para desarrollar CPE Tráfico me resultó cómodo desde el principio: me gustaba lo que veía, se integraba con Cordova/Phonegap sin fallos, me ayudaba a entender lo básico de AngularJS,... En general tuve pocos problemas. Pero una cosa sí que me resultó algo difícil... Onsen-UI es el desarrollo de la empresa japonesa Monaca, y la información disponible en la web sobre esta plataforma es escasa: la prueba del algodón es buscar el término "onsen-ui" en Stackoverflow.com que devuelve 1.213 resultados, mientras que buscar "ionic" devuelve 10.970... Es cierto que Monaca está intentando solucionar esto, con nuevos productos (Monaca Cloud, Monaca Debugger, Monaca LocalKit...) y añadiendo más miembros a su equipo para divulgar y dar soporte a los usuarios (por ejemplo Fran Dios @frandiox), y que sabiendo buscar y programar un poco todo se soluciona :)
Pero cuando he usado Ionic... ¡menuda actividad! Entre las entradas en Stackoverflow, su blog y productos (Ionic Lab, Ionic Market,... ) y algunos de los autores que tienen escribiendo artículos para ellos (Raymond Camden, Cristophe Coenraets, Ashteya Biharisingh, Simon Reimler... y muchos más) lo raro es no encontrar información y soluciones a cualquier problema. La verdad es que en esto no hay comparación (por ahora). Otras cosas distintas son la manera de desarrollar el proyecto. Ionic instala en la máquina de desarrollo un CLI muy útil, con el que ejecutar de manera inmediata en tu propio servidor web local la aplicación que estemos desarrollando, y que además monitoriza el código y se actualiza automáticamente cuando hay cambios. También puede compilar la App (aunque yo esto lo prefiero hacer por mi cuenta con Phonegap Build) y desplegarla en un emulador o en un dispositivo conectado a la máquina. Una manera muy buena de agilizar nuestros tiempos de desarrollo y simplificar las pruebas. (Monaca tiene algo parecido para Onsen-UI, Monaca LocalKit, pero no he podido probarlo). Y algo más "invisible" pero que a la larga ayuda: Ionic crea una estructura de archivos y carpetas para comenzar nuestros desarrollos de manera organizada. Esto con Onsen-UI se realiza de manera "manual" con lo que podemos tener más diferencias entre un proyecto y otro que pueden complicar el desarrollo ("¿dónde está aquella librería que creé para...?") mientras que en Ionic la cosa está más clara. ¿Algo que no me guste de Ionic? Bueno, su estilo visual ootb es malo, muy flojo comparado con Onsen-UI donde todo resulta más agradable visualmente ( y Onsen-UI permite usar iconos de Font-Awesome también, además de los de Ionicons, aunque esto también se puede conseguir en Ionic con algo de esfuerzo). Pero según parece esto es parte de la estrategia comercial de Ionic, ya que recientemente han lanzado Ionic Market donde se pueden comprar temas, plugins y paquetes starter para nuestras aplicaciones Ionic. Por suerte yo encontré Ionic Material que es una manera gratis y simple de implementar Material Design.

En definitiva cosas buenas en ambos frameworks, pero puestos a elegir Ionic tiene a día de hoy mucha más información accesible. ¿Será esto como VHS y Beta? Quién sabe, puede que sí. No he podido hacer una comparativa más exhaustiva "al uso" que sería lo adecuado para poder decantarse por una u otra: funcionalidades, rendimientos (esto sobre todo sería importante conocer, si alguien tiene información al respecto por favor que la comparta), plataformas soportadas y versiones, tests en dispositivos reales, frecuencia de actualización y de resolución de errores, plan de futuro... Al fin y al cabo, soy un "one-man-shop" desarrollando Apps en part-time!

Quizá/seguro que con los siguientes proyectos que tengo en mente aprenda mucho más: algo para Estudio de Mercado que en el Marketing se invierte mucho, algo para los aficionados a las Cámaras,... Hybrid rules!