martes, 26 de marzo de 2013

Android: Empezando con JQueryMobile + Phonegap

Empezar con algo nuevo es bastante difícil, al menos con alguien que siempre ha sido autodidacta. En este, casi, nuevo mundo del desarrollo móvil, siempre debemos de aprovecharlos, ya que es el boom actual.
Escribo lo siguiente con la finalidad de tener una idea de la oferta que tiene jquery mobile para un desarrollador novel.
Existen muchos Frameworks que dicen trabajar con Phonegap, pero antes de casarnos con uno hay que tomar en cuenta algunas cosas:

Phonegap es "Casi" lo mismo que Cordova, solo que Phonegap es una marca comercial de Adobe y Cordova es un proyecto de la Fundación Apache que trata de generar una API para todas las plataformas. Adobe donó el proyecto(Phonegap) a Apache Fundation para que sea mantenido como Open Source.

Phonegap/Cordova no es un "Frame", Phonegap es un conjunto de librerías  que busca funcionar con la misma API en todas las plataformas(bastración), esto se logra en al menos un 70%. No confundir cordova/phonegap con el servicio Phonegap Build.

Phonegap no está 100% implementado, aunque el estandar HTML5 es un hecho, todavía falta que este llegue a todas partes. Por lo que algunas cosas que funcionen en un Navegador no funcionarán en Phonegap.

Phonegap/Cordova usa una API similar a Web Storage y que por desgracia ya es no es parte del Estandar. dicho esto, hay que tener en cuenta que esta capacidad no es funcional en Windows8 y limitado en iOS (funcional con librería externa). No sabemos hasta cuando esto dejará de estar soportado.

Jquery Mobile (JQM)  es una framework escrito en javascript que funciona en la mayoría de las plataformas con el estándar HTML5, lo notorio de esto... es que JQM no se comporta de igual manera en un Navegador que en Phonegap, que es en lo que vamos a trabajar.

JQM usa la capacidad de HTML5 para extenderse a través del TAG data, como en data-lo_que_se_me_ocurra .
Aunque JQM solo depende directamente de JQuery, es independiente de otras librerías, y en su mayoría no  causa conflictos con otros.

Empecemos:

Hacks básicos:

function onDeviceReady() { //o donde inicie tu sistema
    $.mobile.allowCrossDomainPages     = true;
    $.mobile.defaultPageTransition     = 'none';
    $.mobile.pushStateEnabled          = false
}

Estructura del DOM Inicial de JQM en Phonegap.



JQM en Phonegap tiene una página principal estructurada completamente y a partir de ello, desde el START DOM hasta el END DOM, va inyectando contenido. El contenido de los scripts js declarados en este Archivo inicial serán GLOBALES. todo lo que esté fuera de los divs data-role="page" en los demás archivos no será leídos, incluidos las funciones de Javascript. La página inicial hace las veces de "contenedor", desde esta se debe llamar a las demás páginas, sucede solo en Android.
Usaremos el término DOM para  el contenido entre START DOM y END DOM.
Ejemplo de página DOM básica.


Algo que se debe tener en cuenta es que la ID del DIV data-role="page" debe ser única en todo le programa, si no es así, JQM tiende a confundir elementos del DOM.
También las funciones javascript declaradas en este DOM serán privadas. puedes hacer un vinculo a un archivo javascript pero solo pueden ser usados en este DOM.

Las páginas de cargan con:

$.mobile.changePage("midirectorio/mi_DOM_basico.html", {}, true, true);

Hasta acá, ya tendremos nuestro entono básico de trabajo.

Espero que hagan unas pruebas y comenten los resultados. A mí me ha costado algo de trabajo entenderlo, muchas veces a base de ensayo y error, es por ello que comparto esto, para que no tropiecen con la misma piedra que yó.

Saludos.

@pata_de_jaguar.

lunes, 18 de marzo de 2013

Una Mirada a ENYO, el Framework de HP.

Enyo es un Framework "patrocinado" por HP, originalmente enfocado a WebOS, pero extendido a muchas plataformas móviles. Este no es un repaso del Framework, de ello existen muchos artículos, la finalidad de esto es probar y conocer un poquito el framework.

Ventajas de Enyo:

Compatibilidad entre plataformas: La compatibilidad de Enyo entre los distintos actores moviles es mayor al 85%. El código que escribas para un SO te servirá para otro.

Características de Enyo:

Lenguaje Javascript. Casi todo es javascript, muy similar a Sencha. Las desventaja que está en que para extenderlo hay que hacerlo en Javascript.

Lenguaje Declarativo:
Crear una página:

enyo.kind({
    name: "MI_PAGINA",
    kind: enyo.Control,
    components: [

/* Aqui va los demás componentes */
]
});

Lenguaje de elementos anidados.

{kind: "onyx.MI_CLASE", components: [
/* contenido nivel 1*/
            {kind: "onyx.PickerButton", content: "Pick One...", style: "width: 200px"},
            {kind: "onyx.Picker", components: [

/* Contenido nievl 2 de anidacion */
                {content: "Fixed (Principal + rate)"},
                {content: "Only Principal"},
                {content: "Only rate"}
            ]}
        ]},


Declaración de elementos HTML:
...
{tag : "br"},
{tag : "div"},
...

Declaración de Texto Cualquiera:

...
{content : "texto cualquiera"},
...

Clonacion de Objetos.
Todo elemento creado como una seudo clase es declarado como tal (una clase) y usada en cualquier contexto. En este sentido, puedes crear "plantillas" de elementos y renderizarlos donde quieras... muy bueno.

Eso es todo por ahora... igual que ustedes, iré probando y tratándome de enamorar de ENYO, antes de usarlo en un proyecto.

@pata_de_jaguar

sábado, 9 de marzo de 2013

DroidMart Android POS

Si siempre has querido tener tu negocio en la Mano, es tu oportunidad de tenerlo. literalmente...
acabo de sacar la versión 1.3 de DroidMart, un sistema de gestión para la pequeña empresa. Como que en México somos el 97% de esas pequeñas empresas y que muchas no cuentan con un control eficiente, este es la oportunidad de trabajarlo.
La Aplicación cuenta con estas características:
Módulos de Manejo de Clientes y proveedores.



 Modulos de Manejo de Productos:



Modulo de Operaciones:
Compras:

Ventas:




Listado de Facturas:

Y lo que lo hace diferente a todo software que existe en Android.
El módulo de ofertas, donde podrás parametrizar ofertas de productos, descuentos por volumen, por item o familia.

Reportes:




Y por supuesto su configuración:


Pueden descargarlo de los siguientes Markets:


Estoy trabajando para hacerlo Cloud, sin perder de vista que aquí en méxico la jugada del internet aún le falta mucho para madurar.

En esencia es el software. Les invito a probar y dar su opinión, siempre con la seguridad que cualquier sugerencia, queja o modificación será contestada:
Soporte: http://support.cosasenmetal.com
Foros: http://www.cosasenmetal.com
Página del producto: http://www.cosasenmetal.com

Saludos.

@pata_de_jaguar

miércoles, 6 de marzo de 2013

Breves Android: La propiedad HINT/Android y placeholder/HTM5

si vienes de HTML sabrás que la propiedad placeholder es usado para mostrar un texto de Fondo.

Algo así:



Equivale a :


Pues en Android y su lenguaje de descripción de Interfaces en XML, la propiedad equivalente es HINT. Algo así:


el Resultado:



Así que ya saben que agregar para que sus interfaces tengas una buena usabilidad...
Saludos

@pata_de_jaguar
P.D. Blogger es una mierda para un programador, tiene mal soporte para

 y codigo embebido.

Desarrollo Android: ¿Que Hardware requieres para Empezar?

¿Quieres empezar en la programación para Android?.
La verdad tienes muchas opciones en cuanto a software, en lo personal me gusta Linux para trabajar, ya llevo varios años con el y hasta ahora me va bien... :p

Sin embargo en la parte de Hardware es otro tema, todos dicen que con poca máquina es suficiente, pero en la práctica es otra cosa, lo único que tienes que invertir para desarrollar en Android es en Hardware.

Lo que recomiendo en este artículo es lo mínimo óptimo para trabajar Desarrollando Android, pues utilizar menos es perder tiempo en tratar de que tu hardware responda o que se comporte de forma inesperada.
Actualmente trabajo en dos máquinas, una con W7/Linux con Dual Core a 2.93 Ghz y 4GB de RAM y una Lenovo G475 donde me pongo a llorar mientras trato de trabajar.

Los ADV.
Los ADV (Android Device Emulator) son dispositivos Android emulados. Utilizan por los general las Instrucciones ARM, aunque puedes emular MIPS y x86, este ultimo impulsado por Intel y muy de moda ultimamente ;) .
Google usa como base el omnipresente Qemu, así que es recomendable que tengas algún Kernel con KVM o  los Virtual (Linux :p). de preferencia debes tener Android 2.3.x, 3.2. y 4.2 emulados, ya que son los más extendidos en el mercado. La gran presencia de distintas versiones Android hace la necesidad de emularlos, o de tener algún dispositivo físico para cada versión(?).

Los Dispositivos Físicos.
Es cualquier dispositivo (Tablet, smartphone, etc) que soporte el ADB o depurado por conexión física. Tener un dispositivo físico es esencial para aterrizar la usabilidad de App, NUNCA se comparará con la emulación. La emulación es para pruebas rápidas y el Dispositivo físico es como para sacar un Release candidate de tu app. Otra ventaja del Dispositivo físico es que al trabajar con ello le quitas carga a tu entorno de desarrollo, ya que no emulas nada.

La CPU.
El punto más crítico. Es requerido de al menos dos núcleos físicos con velocidad superior a 1.8 Ghz. Uno que esté dedicado a emular ARM, este núcleo practicamente queda inhabilitado para su uso. El segundo se dedicará a eclipse y sus herramientas de desarrollo. Tener un dispositivo físico conectado a ADB tal como una Tablet o Smartphone hace más rápido tu entorno de trabajo, pues le quita al sistema la emulación ARM. Cabe notar que tanto la Emulación ARM/MIPS como la x86 son igual de pesadas, aunque es lógico que por la traducción de instrucciones ARM-x86, ARM cobre más factura. Es muy recomendable (por no decir indispensable) que tu CPU tenga capacidades de Virtualización aunque sirva de poco en traducciones ARM/x86.

La RAM.
Lo recomendable para trabajar son más de 3GB en RAM, ya que entre el sistema, por su propia naturaleza, consume muchos recursos en RAM, por decir que si emulas una máquina Android 4.2 con un mínimo de 512 de RAM, estos recursos serán tomados de la máquina host. Otra vez cabe aclarar que los dispositivos físicos permiten eliminar esa necesidad. sin embargo no debemos descartar que los recursos como Java y tu navegador favorito, consumen al menos unos 750 MB de RAM.

El espacio en disco.
Bueno, en este caso debemos de estar sobrados, pues bastaría con unos 5 GB libres para trabajar con máquinas virtuales (3 tal vez, el SDK de Android, cache, y Eclipse).

El GPU con RAM Dedicada.
Tener un GPU dedicado es altamente recomendable, ya que versiones modernas de Android en emuladores pueden sacar jugo a esto. Además que un GPU le quita carga al CPU, al no tener que renderizar nada... otrora la RAM que integra la GPU.

Internet:
Haaa!!! Que es la Vida sin Internet?... no hay nada más que decir...

Bueno, hasta aqui este pequeño aporte, de novato a novato... que tengas suerte.

@pata_de_jaguar

martes, 5 de marzo de 2013

Problemas con Apps Phonegap Android y Admob/AirPush

En los últimos meses he estado haciendo pruebas para tratar de mi Monetizar mi app hecha con Phonegap/Cordova. Hasta ahora no he buscado la forma más adecuada para hacerlo, ya que los distintos SDKs tienen algo en común: Trabajan con un Layout XML.
Phonegap/Cordova trabaja con su "propia" implementación de Layout, no haciendo posible la personalización del Ad en tu aplicación.
Estos SDKs que he probado son:
  • AdMob.
  • AirPush.
  • inMobi Android.
  • inMobi javascript.
  • Amazon Ad network SDK.

MobFox: En el caso de Android se requiere de un R y layout personalizados, que como sabemos Phonegap no Usa.
Amazon Ad: El mismo caso que Mobfox.
inMobi Android: El mismo caso de MobFox.
inMobi javascript: En la actualidad, he estado probando con inMobi javascript en la propia app, pero el problema sigue siendo el mismo: El contexto de trabajo Phonegap.
AdMob : Probado con algunos problemas.
AirPush: Probado con serios problemas, que trataremos.
Otros: Ni lo he intentado, ya que SDKs como StartApp son DEMASIADOS intrusivos, llegando a instalar varios iconos y cambiar muchas cosas en el sistema, propias de cualquier virus.

Todos estos SDKs no tendría ni un problema si la App fuera nativa, le problema principal radica en que es Phonegap/Cordova.

El caso de AdMob:

Sus problemas con AdMob radica es que los dos están basados en el Navegador del sistema y AdMob hace peticiones AJAX para cargar el Ad. Empecé a notar problemas con la versión 2.3 de Phonegap cuando las peticiones no llegaban, reduciendo hasta en un %80 las Impresiones del Ad.
También hace un 30% más lenta tu aplicación y en algunos casos la congela.
Otro Grave problema con AdMob, el SDK 6.2.1 y Phonegap 2.5 esel contexto del manejo de la base de datos, cada uno utiliza sqlite de android, Admob para "cachear" sus peticiones y por lógicas razones sabemos para que lo usa, o lo usamos con phonegap.

Aqui la muestra:

03-05 22:47:18.401: E/SQLiteQuery(3441): exception: constraint failed; query: INSERT INTO productos (producto, nombre, medida, nombre_completo, stock_minimo, stock, familia, icono, codigo_de_barras, precio, tipo_de_precio, modificador_de_precio, impuesto_al_consumo, impuesto_especial, synctime) VALUES ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
03-05 22:47:18.401: W/System.err(3441): android.database.sqlite.SQLiteConstraintException: constraint failed
03-05 22:47:18.410: W/System.err(3441):     at android.database.sqlite.SQLiteQuery.nativeFillWindow(Native Method)
03-05 22:47:18.410: W/System.err(3441):     at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:86)
03-05 22:47:18.420: W/System.err(3441):     at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:164)
03-05 22:47:18.420: W/System.err(3441):     at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:156)
03-05 22:47:18.420: W/System.err(3441):     at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:161)
03-05 22:47:18.420: W/System.err(3441):     at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:201)
03-05 22:47:18.420: W/System.err(3441):     at org.apache.cordova.Storage.processResults(Storage.java:214)
03-05 22:47:18.430: W/System.err(3441):     at org.apache.cordova.Storage.executeSql(Storage.java:174)
03-05 22:47:18.430: W/System.err(3441):     at org.apache.cordova.Storage.execute(Storage.java:83)
03-05 22:47:18.430: W/System.err(3441):     at org.apache.cordova.api.CordovaPlugin.execute(CordovaPlugin.java:61)
03-05 22:47:18.430: W/System.err(3441):     at org.apache.cordova.api.PluginManager.exec(PluginManager.java:220)
03-05 22:47:18.430: W/System.err(3441):     at org.apache.cordova.ExposedJsApi.exec(ExposedJsApi.java:44)
03-05 22:47:18.440: W/System.err(3441):     at android.webkit.WebViewCore.nativeTouchUp(Native Method)
03-05 22:47:18.453: W/System.err(3441):     at android.webkit.WebViewCore.nativeTouchUp(Native Method)
03-05 22:47:18.460: W/System.err(3441):     at android.webkit.WebViewCore.access$3900(WebViewCore.java:55)
03-05 22:47:18.460: W/System.err(3441):     at android.webkit.WebViewCore$EventHub$1.handleMessage(WebViewCore.java:1378)
03-05 22:47:18.460: W/System.err(3441):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-05 22:47:18.470: W/System.err(3441):     at android.os.Looper.loop(Looper.java:137)
03-05 22:47:18.470: W/System.err(3441):     at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:728)
03-05 22:47:18.470: W/System.err(3441):     at java.lang.Thread.run(Thread.java:856)
03-05 22:47:18.480: I/System.out(3441): Storage.executeSql(): Error=constraint failed



El Caso AirPush:

Probé con AirPush porque según ellos ofrecen un eCPM mucho mayor, lo cual me parece una mentira, ya que por el tiempo que trabajé con AdMob y AirPush, obtuvieron los mismo ingresos.
AirPush ha sido catalogado como una de las Ad Network más intrusivas he incluso como virus y existen muchas apps para su detección y remoción.
Sin embargo lo decidí probar, pues a diferencia de similares como StartApp tienen una elegancia en su Ads, no pareciendo que el sistema se afecte con ello. Además de tener la forma de desactivarlo por completo.
Tiene los mismos problemas que AdMob en cuanto a la base de datos, con el plus de que es más intrusivo y hace tu programa más lento.

Renders de Phonegap 2.5 + Jquery Mobile:
Sin Ad:


Con Ad:


Bases de datos sin Ad:


Bases de datos con Ad:


 Bases de Datos con admob y airpush...



No en todas las versiones de android pasa lo mismo, de hecho tal vez sea problema de Phonegap, cosa que me deja muy decepcionado pues no tengo ningun ingreso de esto :(...
Cosa curiosa que por la versión que no obtengo ingresos me cueste más trabajo...

Por el momento me queda reportar estos errores y esperar que resuelven, si alguien tiene alguna sugerencia... soy todo droídos...

suerte:

@pata_de_jaguar


Phonegap Breves: connection to the server was unsuccessful Phonegap 2.5

Si por alguna razón, al actualizar a la versión de phonegap 2.5 the sucede esto:

connection to the server was unsuccessful (file://...



Es porque el poner valores enteros del código java en android :

Ha sido depreciado, y ya no es válido para la versión 2.5.


Tambien quiero comentarle que para versiones anteriores, este error es corregible desde java y que este problema sucede por ejecutar el emulador en máquinas lentas.



La solución para versiones >= 2.5 de phonegap es declararlo en el config.xml.

Actualización : En windows con el último ADT con procesador > 2.93 sucede el timeout sin el código Java, así que tuve que agregarle ambos para funcionar.

más info: https://build.phonegap.com/docs/config-xml

Actualización del 06Abril2012:
Este Bug en propio de la version 2.5, corregido en la 2.6, sin embargo la versión recomendable de phonegap es la 2.4.

suerte:


@pata_de_jaguar