viernes, 1 de noviembre de 2013

Patent Troll Rockstar (Microsoft, Apple & Co.) demandan a Google.

El invierno nuclear de Android: Rockstar (Microsoft, Apple & Co.) demandan a Google.

En julio del 2011, como parte del proceso de quiebra de la empresa de telefonía canadiense Nortel, se subastaron unas 6.000 patentes de la empresa. Google inicialmente ofreció 900 millones de dólares, pero, en una guerra de pujas con una misteriosa empresas llamada Rockstar (nada que ver con la empresa de videojuegos), llegó hasta los 4,4 mil millones de dólares. Finalmente Rockstar se llevó el paquete de patentes por 4,5 mil millones de dólares. 

Rockstar es una empresa "cascarón" de unos veinte empleados que se dedica a sistemáticamente comprar y hacerle la ingeniería inversa a aparatos de telefonía para ver qué patentes infringen.

O sea, es un patent-troll.

Y si te preguntas de dónde se saca un patent-troll de veinte empleados 4,5 mil millones de dólares ¿ayuda que te diga que detrás están Microsoft, Apple y Sony?

Han pasado dos años y lo que tenía que pasar, ha pasado: una vez cuidadosamente colocadas las piezas, Microsoft, Apple y Co., delegando en Rockstar, han lanzado un ataque nuclear contra Google.

http://ia601006.us.archive.org/18/items/gov.uscourts.txed.148249/gov.uscourts.txed.148249.1.0.pdf

En el ataque, se subraya la infracción a la patente referente a las "búsquedas asociativas", es decir, la funcionalidad que permite que Google devuelva en una búsqueda, aparte de los resultados requeridos por el usuarios, publicidad asociada a los términos de búsqueda. Esto es la piedra angular de los AdWords de Google, así como la publicidad asociada a apps de Android.

La batalla promete ser intensa. Google tiene su propio impresionante porfolio de patentes con las que contratacar, proveniente de, entre otros, Motorola. Rockstar, sin embargo, como buen patent-troll y fachada para MS y Apple, no tiene productos propios, por lo que Google tendrá que atacar a las empresas que hay detrás, cosa que complicará la batalla.

Un C&P...
Fuentes : http://www.linux-magazine.es/  https://www.facebook.com/linuxmagazine.es?ref=stream&hc_location=stream

jueves, 31 de octubre de 2013

Gracias Ubuntu!

Muchos niñacos idiotas no saben valorar a Ubuntu, Ubuntu no es famoso por ser la mejor distro Linux si no porque fue pionero en el escritorio. Antes tenías que compilar tus drivers, jugar con hexadecimal para apuntar al MOV,PUSH correcto, no existía ndiswrapper, tenías que compilar y a veces parchar programas, convertirlos desde alien, o tratar de normalizar tus repositorios debian/otro para tener actualizaciones. En el mejor de los casos no funcionaba el sonido, la configuración de xorg/xfree86 se hacía a mano... incluso para configurar el teclado o el mouse... Fedora pasaba por un mal momento, no había presupuesto, acortaron la vida de las distros, SUSE apenas miraba, Gentoo agonizaba, Slackware nunca había sido popular entre los usuarios comunes, Debian siempre era un LTS robusto, pero no apto para el escritorio... UBUNTU y Canonical vinieron a dar un respiro a Linux y gracias a la popularidad de Ubuntu en Escritorio es que hoy en día existen idiotas auto denominados hackers que usan Linux y odian a Ubuntu...

Gracias Ubuntu!

domingo, 22 de septiembre de 2013

Fuentes ttf para Instalar desde un .deb

Hola Linuxeros.
Si son iguales de perezosos que yo, esto le va a gustar.
Le traigo Fuentes True Type de Facil Instalación, que a continuación les enlisto:

Fuentes para Desarrolladores Monospace : https://dl.dropboxusercontent.com/u/4009065/share/Linux/fonts.developer.pack_1.1.00_all.deb
Lista:
  • Anonymous Pro BI.ttf
  • Anonymous Pro B.ttf
  • Anonymous Pro I.ttf
  • Anonymous Pro.ttf
  • DroidSans-Bold.ttf
  • DroidSansFallback.ttf
  • DroidSansMono.ttf
  • DroidSerif-BoldItalic.ttf
  • DroidSerif-Bold.ttf
  • DroidSerif-Italic.ttf
  • DroidSerif-Regular.ttf
  • Envy Code R Bold.ttf
  • Envy Code R Italic.ttf
  • Envy Code R.ttf
  • lista.xt
  • mensch.ttf
  • TerminusBold.ttf
  • Terminus.ttf
 Fuentes para Diseñadores y entusistas: https://dl.dropboxusercontent.com/u/4009065/share/Linux/fonts.elegant.pack_1.1.00_all.deb
  • Agatha-Modern.ttf
  • Alexandra Script.ttf
  • Amadeus.ttf
  • Ampir Deco.ttf
  • Andantino script.ttf
  • Annabelle.ttf
  • Aquarelle.ttf
  • Ariston.ttf
  • Arkhive.ttf
  • Arlekino.ttf
  • Arthur Gothic.ttf
  • Artist-Modern.ttf
  • Art-Metropol.ttf
  • Art-Nouveau 1895-Contour.ttf
  • Art-Nouveau 1895.ttf
  • Art-Nouveau 1900.ttf
  • Art-Nouveau 1910.ttf
  • Art Nouveau-Bistro.ttf
  • Art Nouveau-Cafe.ttf
  • Bankir-Retro.ttf
  • Baveuse 3D.ttf
  • Belukha Capital.ttf
  • Belukha.ttf
  • Bickham Script One.ttf
  • Bickham Script Three.ttf
  • Bickham Script Two.ttf
  • BlazingItalic.ttf
  • Briolin.ttf
  • Brokgauz & Efron-Italic.ttf
  • Brokgauz & Efron-Regular.ttf
  • Calligraph.ttf
  • Cansellarist.ttf
  • Cassandra.ttf
  • champagnecyr.ttf
  • Classica One.ttf
  • Classica Two.ttf
  • Copyist.ttf
  • Cordeballet.ttf
  • Deutsch Gothic.ttf
  • DrakkarDEMO.ttf
  • Edisson.ttf
  • Egipet.ttf
  • English Script.ttf
  • Esenin script One.ttf
  • Esenin script Two.ttf
  • Favorit.ttf
  • figurny_lr.ttf
  • flibustiere.ttf
  • framdcn.ttf
  • Geisha.ttf
  • Globus.ttf
  • Gloria script.ttf
  • Heather Script One.ttf
  • Heather Script Two.ttf
  • Heinrich Text.ttf
  • Isabella-Decor.ttf
  • Kabarett Dec DEMO.ttf
  • Kabarett Simp.ttf
  • Karnac One.ttf
  • Karnac Two.ttf
  • Konkord-Retro.ttf
  • lista.xt
  • Majestic.ttf
  • Majestic X.ttf
  • Malahit.ttf
  • Margarita script.ttf
  • Markiz de Sad script.ttf
  • Marta Decor Two.ttf
  • Matilda.ttf
  • Matreshka.ttf
  • Menuet script.ttf
  • Modernist Nouveau.ttf
  • Modernist One.ttf
  • Modernist Three.ttf
  • Modernist Two.ttf
  • Moderno One.ttf
  • Moderno Three.ttf
  • Moderno Two.ttf
  • monotype.ttf
  • Monte-Carlo.ttf
  • Moonlight.ttf
  • Moonstone Stars.ttf
  • Moonstone.ttf
  • Morpheus.ttf
  • Old Comedy.ttf
  • Orpheus.ttf
  • Parisian.ttf
  • Postmodern One.ttf
  • Postmodern Two.ttf
  • Rockletter Simple.ttf
  • Rockletter Transparent.ttf
  • Romantica script.ttf
  • Rosamunda One.ttf
  • Rosamunda Two.ttf
  • Rubius.ttf
  • Scriptorama.ttf
  • Sevilla Decor.ttf
  • Topaz.ttf
  • Traktir-Modern 3-D.ttf
  • Traktir-Modern Contour.ttf
  • Traktir-Modern.ttf
  • Vera Crouz.ttf
  • Verona Gothic Flourishe.ttf
  • Verona Gothic.ttf
  • Victoriana.ttf
Fuentes de Películas y Marcas Famosas : https://dl.dropboxusercontent.com/u/4009065/share/Linux/fonts.movies.pack_1.0.00_all.deb

Otras fuentes útiles: https://dl.dropboxusercontent.com/u/4009065/share/Linux/fonts.utils.pack_1.0.00_all.deb

  • abalc.ttf .- Fuente de cómoda lectura e impresión clara.
  • Arial_Narrow.ttf Fuente cómoda para Hoja de cálculo e impresión.
  • sieder39.ttf Fuente Código de Barra EAN 9/13.
  • spranq_eco_sans_regular.ttf Fuente Ecológica en impresiones.




Saludos.
El Minion Linuxero.




Lucky Patcher. El diablo para los desarrolladores.

Desde los tiempos en que existía el mítico Oscar 2000 y yo jugaba al cracker he tenido en cuenta algo: No existe aplicación o sistema que no esté expuesto a la seguridad.
Hasta ahora no conozco sistema o aplicación que o tenga vulnerabilidades o que esté expuesto al cracking. Android no es la excepción.
Originalmente, android no tiene un sistema implícito de seguridad, tras varias versiones se ha mejorado esto... sin dejar caerse en errores.
Como Desarrollador no he puesto mucha atención en la protección de mis Aplicaciones en cuestiones de Licencias, de hecho muchas de ellas son Open Source o Gratuitas.
También tengo algo en cuenta: Si quieres combatir a tu enemigo, lo primero que debes hacer es conocerlo.
Lucky Patcher es un sistema que remueve o mejor dicho "intercepta" las APIs de Licencamiento, Ads y aplica patchs, lo que equivaldría a un patcher en Windows.
En pocas palabras : Crackea Apps.
Lo único que lo dificulta es que el móvil debe estar rooteado. En fin...
Señores desarrolladores conozcan al Enemigo:

Un Tutorial:
http://www.htcmania.com/showthread.php?t=535577
Un Video:

La Descarga.
http://lucky-patcher.netbew.com/

Atte.

El Minion de Android.

domingo, 15 de septiembre de 2013

España, Phonegap Y Android > 4.0

¿Que relación tiene estos tres elementos?... pues quizás ninguna, pero en una aplicación que programé tuve un curioso y desastroso error: no considerar la coma(,) como separador de decimales, lo anterior usado en España.
El problema viene que en los elementos "input" "number" en android > 4.0 no acepta de ninguna forma la coma como separador y después de perder el enfoque simplemente lo convierte en un integer.
Esto necesitó de un esfuerzo extra para detectarlo, pues creía que era un error mío :D. En mis entradas aceptaba cualquier carácter matemático válido y purgaba la entrada para convertirse en un float estándar. Por desgracia funcionaba bien en android 2.3 (mi mesa de pruebas), dando por bueno el sistema, aún con el reclamo de un comprador, el mío funcionaba.
Después de investigar un poco supe que era una "capacidad " del motor webkit que usa Google, la solución fue convertir esos inputs de "number" a "text" cuando el sistema detectaba un SDK >11(por si se ofrece, la diferencia entre el SDK 10 y superiores es abismal), agregando una propiedad pattern con valores matemático válidos para España.
Saludos.
@pata_de_jaguar

domingo, 23 de junio de 2013

Fix Eclipse Bug libsoup Gnome 3.8

Primero quiero decirles que Ubuntu 13.04 es la peor basofia de distro que haya sacado canonical, cada vez son más tempranas las versiones que sacan... si por ejemplo la 12.04 LTS era una beta, 13.03 es una pre-alfa. Cada vez son más horribles las formas de trabajar en el Escritorio. tuve que instalar lubuntu y aún así los crash están a la orden del día... acabo de migrar a de Linux Mint Lisa.... :(

Entre tantos bugs uno no sabe a que atribuirle el error, estuve checando este error y no sabía si era de eclipse, de java, de Gnome, de mozilla o de ubuntu... lo que sí estaba seguro es que a la primera tecla y adiós trabajo... Editaba con gedit y compilaba con eclipse...

En fin... aqui el corte del error:


# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f34884e5009, pid=21101, tid=139864901408512
#
# JRE version: 7.0_25-b15
# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.25-b01 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C  [libsoup-2.4.so.1+0x6e009]  soup_session_feature_detach+0x19
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

---------------  T H R E A D  ---------------

Current thread (0x00007f34d0009000):  JavaThread "main" [_thread_in_native, id=21102, stack(0x00007f34d5b3d000,0x00007f34d5c3e000)]

siginfo:si_signo=SIGSEGV: si_errno=0, si_code=1 (SEGV_MAPERR), si_addr=0x0000000000000000

Registers:
RAX=0x00007f34d137cd80, RBX=0x0000000000000000, RCX=0x00007f34d0bde120, RDX=0x0000000000000000
RSP=0x00007f34d5c3a6e0, RBP=0x00007f34d0bde120, RSI=0x00007f34d0bde120, RDI=0x0000000000000000
R8 =0x00007f34d501d760, R9 =0x0000000000000002, R10=0x00007f34d5c3a4a0, R11=0x00007f34884e4ff0
R12=0x0000000000000000, R13=0x00000000d28a2570, R14=0x00007f34d5c3a7a8, R15=0x00007f34d0009000
RIP=0x00007f34884e5009, EFLAGS=0x0000000000010202, CSGSFS=0x0000000000000033, ERR=0x0000000000000004
  TRAPNO=0x000000000000000e



... bla, bla.. bla...

Mirando los bus noté que sacaban el diff para el patch pero saldrá hasta la versión 4.3 de eclipse, el problema era libsoup y la gestión de autenticación. Bajé varias versiones de eclipse y todas tienen el problema. La misma versión de eclipse (juno) me funcionaba bien en Linux Mint Lisa... que carajo!...

Lo que no noté es que la solución es simple:

Abres tu archivo eclipse.ini y agregas esta línea:

-Dorg.eclipse.swt.browser.DefaultType=mozilla

En caso de que sigan los crash agregas la siguiente línea:

-Dorg.eclipse.swt.browser.XULRunnerPath=


Quedando así:


Ejecutas eclipse y cierras los ojos rezando... suerte.

Más info: https://bugs.eclipse.org/bugs/show_bug.cgi?id=404776

@pata_de_jaguar

viernes, 21 de junio de 2013

Portando Aplicaciones Qt a Android.

Buenos antes de empezar les comento que me llevó explorar cerca de 150 aplicaciones libres y trastear con más de 60 para checar su factibilidad de migración, QT es casi un terreno abandonado, no por ello muy bueno. La documentación de ejemplos es pobre y vieja y Ministro (las Libs) apenas ha portado QTCore y QTui; Aún así han hecho un gran trabajo, estoy checando la interactividad por callbacks QT - Java, pero la muy poca información que existe no me ayuda... en fin... un enorme trabajo que espero que lo aprecien.

Les listaré las apps y su correspondiente código fuente, así como su vínculo en Google Play:

QMetro

QMetro is a great App ported from Symbian and Open Source project.

QMetro it's a simple subway map for searching stations and calculating route. About 230 maps of subways are available. Maps have an open format and can easily be edited or created. By default the package includes biggest subways of the World, and you can easy download other available maps into this app.

QMetro es una sencilla aplicación para estudiar las línea de Metro del Mundo calculando el Tiempo de Travesía o de Estación a estación. Cerca de 230 mapas están disponibles en http://qmetro.cosasenmetal.com para su uso gratuito.


Notas de la Migración: Fue básicamente sencillo, pues ya tenía una UI para symbian, lo más dificil fue adaptar la ui para android. También les quiero comentar que el proyecto necesita ayuda para mejorar los Mapas: http://pmetro.su (En ruso).

App Store: https://play.google.com/store/apps/details?id=org.opensource.qmetro
Source Code: https://dl.dropboxusercontent.com/u/4009065/share/qmetro.7z
Original Source:  http://qmetro.sf.net

Lights Off! 1.0

In this puzzle game you have to switch all 5x5 lights off. Touch a light to switch it on/off. Switching a light will also switch adjacent lights.
Try to complete all levels !
Clone of the famous "Lights Off" game on Linux Ubuntu, this Android version is ported from Desktop.

Notas de la Migración: No pude agregar sonidos ni vibración, sigo investigando con los callbacks.

App Store: https://play.google.com/store/apps/details?id=org.opensource.lightsof
Source Code: https://dl.dropboxusercontent.com/u/4009065/share/lightsoff.7z
Original Source:   http://sourceforge.net/projects/lightsoff/?source=directory

PEG-E.

Peg-E is a peg solitaire game in which you jump over pieces in order to remove them from the board, ultimately trying to eliminate all but one. The boards are randomly generated, with 100 levels of difficulty. The game auto-saves, and has undo-redo capability. Pieces can move horizontally, vertically, and diagonally.


App Store: https://play.google.com/store/apps/details?id=org.opensource.pege
Source Code: https://dl.dropboxusercontent.com/u/4009065/share/pege.7z
Original Source:   http://gottcode.org/peg-e/
Tengo otros proyectos que estoy portando (como un software contable), y estos son los problemas que me he encontrado.

- UI. No están diseñados para móvil, así que el trabajo  en bastante en este apartado. Incluso en la UX de Qt difiera mucho a la de Android y sus stylesheet deben ser bien trabajadas.

- Databases.- Ningún conector está compilado para Android, con excepción de SQLite, pero no funciona adecuadamente.

- C : Android no tiene un compilador implementado con ANSI, su NDK solo tiene soporte parcial. QT también tiene sus problemas con C, ya que algunas declaraciones como printf tienen que modificarse a std::printf.

Como nota les quiero comentar que en algunos Markets este tipo de apps son baneadas por no entender como funciona la licencia o por depender le librerías  externas, si no es con licencia comercial te vetan, incluso en Markets como Slideme que aceptan licencias libres, vetaron la app por SPAM FILES, así que en algunas me dispuse a subir Ministro II 9.5 para que no dependan de apps externas a la del propio market.

Esto me sirvió de experiencia y aprendizaje con QT y apps  nativas.
Se aceptan preguntas, críticas positivas y por supuesto ayuda. 

Un saludo.

@pata_de_jaguar

jueves, 13 de junio de 2013

El video de la Discordia: #Sebastien

Lo que se diga de Estados Unidos, pero tiene muchas cosas en común con México, y una de ellos es su población :D. Sin embargo como en todo grupo existe gente que cree ser la cima en la evolución y son ellos quienes han logrado con su actitud negativa que en pocas horas el vídeo sea visto casi 400,000 veces en un pocas horas y haya generado cerca de 4 comentarios en ese mismo periodo entre la gente que está en desacuerdo que un Latino-AMERICANO (De origen Latino y de nacimiento norteamericano) haya entonado su himno.


En fin, siempre habrá la gente racista (Duro con ellos! :P), en lo particular creo que el patriotismo se lleva en el corazón y con ello en la actitud y las acciones, no en los colores de ojos, ni de piel, ni la lengua...

Saludos.

@pata_de_jaguar

Herramientas contra PRISM

Personalmente, me importa un pito lo que haga la NSA con mi información, mientras que no sea para usar contra mí en un acto de mala fe, el escandalo de la NSA es viejo, incluso en los tiempos en que jugaba al juaker le movía a las dlls de Windows donde había un port para enviar info la NSA, eso ya varios años. Pero como suele suceder, nos resignamos a ser espiados, es casi imposible que un día salgas en alguna foto o que esta foto caiga en manos de una persona non grata. Vivir sin ser espiado solo pasa en las películas, es el costo de la tecnología.
Estados Unidos  vigila al mundo, tanto para fines "privados" como para su lucha contra el "terrorismo", a esto se le ha unido China, el otrora poderosa nación en este campo, cualquier bit que pase por China o USA, ellos tendrán copia. Pero el que tengan copia no quiere decir que lo puedan ver, habrá encriptación para ello y es un bit que no podrán estudiar (al menos de forma fácil),  algo cuiroso es que el único algoritmo que ha asustado a USA es el PGP, antecesor de GPG dado que no podían romperlo, al menos en esos años.
En fin, para quien quiera mantener su datos fuera de la vista de USA, existen alternativas libres(Eso hasta que USA tenga en manos las computadoras Cuánticas que falta poco)...
Les comparto el Link:

http://prism-break.org/


Espero les sirva, saludos.

@pata_de_jaguar

miércoles, 12 de junio de 2013

CubeSlam un juego que experimenta WEBGL + RTC

A través de un POST en un foro me encuentro con Cube Slam, un experimento Chrome que Implementa WebGL y RTC, que además es de código abierto, este divertido juego lo podrás usar si tu navegador es HTML5.



Juega  desde  su Web.
Que te diviertas.

@pata_de_jaguar

martes, 28 de mayo de 2013

Checkbox más "cools" en GroundWorkCSS u otro.

Hola que tal,
viendo lo feos que son los controles en GroundWorkCSS he decidido cambiar un poco las cosas, así que me tomé la libertad de modificar algunos controles de forms.
El primero es el checkbox, para tenerlos mejor:
CSS puro.


Y el resultado:

¿Como se usa?
Solo encierra en un DIV con el atributo class "coolCheck", el checkbox debe tener su correspodiente LABEL asociado, aunque no contenga nada.

Funciona bajo GroundWorkCSS u otro framework, en teoría.
Espero le sirva.

@pata_de_jaguar

sábado, 25 de mayo de 2013

¿Como resolver el fiasco de la actualización de Opera Mobile?

Opera Mobile es sin duda el navegador más rápido que existe para Android, me cuento entre sus admiradores... o al menos lo era.
El plan de cambiar a webkit ya estaba dado y surtió efecto: Ahora es igual o peor que otros navegadores similares... mucho peor, apuesto, que Mozilla.
En ese negro día las calificaciones de Opera Mobile bajaron y pocos los defendían.... el daño estaba hecho.
Los desarrolladores se dieron cuenta pero no lo hicieron de la forma más optima, así que dispueron y crearon otra app de Opera en el Android Market: Opera Mobile Classic.

Si eres de los que cuenta que Opera Mobile es un fiasco con webkit, puedes descargar esta versión de opera en https://play.google.com/store/apps/details?id=com.opera.browser.classic que corresponde a la versión 12.10 de nuestro navegador favorito y seguir trabajando como siempre.


suerte

@pata_de_jaguar

miércoles, 22 de mayo de 2013

Integra JPanelMenu con GroundworkCSS

Si algo no me gustó de GroundWorkCSS es su menú, pero no porque sea malo, si no porque es difícil de integrar otro más "cool". Pero eso pasa con cualquier framework, es una lata integrar componentes que no sean los que trae el mismo framework, así que me dí a la tarea de "modificar" el css de groundworkCSS para que puedas agregar el componente JPanelMenu mismo que tiene un look al estilo facebook.

Descarga desde este Link el CSS de grounworkCSS modificado.

Copia este CSS a tu hoja de estilo.

Descarga JPanelMenú.


Haz el respectivo Include dentro de tu HTML con un elemento SCRIPT.

src="jquery.jpanelmenu.min.js" type="text/javascript"

y prueba:

Reglas:
  • tiene que ser un elemento header el contenedor.
  • un elemento h1 el titulo.
  • un elemento a el boton de despligue.

y esto queda así:


Espero les sirva. Suerte.

@pata_de_jaguar

jueves, 9 de mayo de 2013

GroundworkCSS El Framework responsivo que convence.

Hoy les quiero hablar de GroudworkCSS, es un Framework relativamente nuevo, pero que me ha convencido para trabajarlo en un proyecto de gran alcance. Por lo que quiero compartir mis primeras inquietudes y observaciones sobre este Framework Javascript.

Ventajas:








Es compatible con jquery, pero no con jquerymobile. Aunque los puedes combinar, uno de ellos perderá funcionalidad. Se basa más bien en jquery.ui pero dejando un lado algunas cosas.

Es responsivo. Es muy difícil encontrar hoy en día un framework que sea 100% responsivo con pocas líneas de código, y es que si hay... pero la mayoría solo se queda con el Nombre, por mencionar algo: JQueryMobile es excelente,pero sus grids no son responsivas, al menos hasta la v 1.2 que es con la que trabajo. Por otro lado... GroundworkCSS casi lo logra, sus layout son muy variados y se antoja trabajar con ellos.

Es Ligero. Salvo sus dependencias... el código que se genera con GroudworkCSS es menor hasta en un 50% al necesitado con otros frameworks como jquerymobile (y no menciono los basados en Javascript, muchos son peores al generar código HTML ).

Es fácil de aprender: no utiliza mucho datatags especiales, su semántica class es fácil de entender algo así "mobile half" o "small button".

Es compatible con SASS: Preprocesado de css, que aunque nunca lo he usado debe ser una gran ventaja.

Componentes extras: Su UI trae componentes extras como un Slider, Tooltips y Modals. Es una ventaja porque no debes integrar código extra.

Es muy aprovechable: Menos código, menos trabajo. Con los tags adecuados puedes generar páginas 99% resposivas, y aunque no lo he probado en todos los navegadores ni en todos los OS, apuesto que va bien. El código te puede servir para todo, sin hacks o combinaciones raras.

Desventajas:

No trae Calendar: Si algo mola (encabrona) de un framework responsivo es que no traiga un calendar integrado, y si bien es cierto que el elemento input "date" es un estandar, muchos navegadores no tienen un manejador.... y con las variantes de fechas que existen en el mundo. Es un verdadero dolor de cabeza manejar y validar fechas. Y como en cada Framework que pruebo tengo que buscar un Calendar, en jquerymobile trabajé muy bien con Mobipick y en este tuve que integrar mobiscroll, que aunque muy bonito... trae un puñado de librerías que la mayoría no le doy razon de ser.

Le falta: Es de entender que es beta y pinta bien, pero hay cosas que pueden ser mejorables.

Algo Gordo: Su CSS y su JS pesan 1 MB en total, y aunque no está comprimido, debes esperar páginas de +1MB... salvo la bondad de nuestro navegador y su cache.

Arrastra Herencia. Hoy en día el Navegador que no es HTML5 es simplemente es una basofia, y mucho de esa pesada herencia lo trae este Framework, ya que trata de ser compatible con navegadores viejos. más aún eso es en todos los Frameworks, pero si bajarían de peso si fueran solo HTML5.


Actualmente trabajo este framework con Haanga, el Django para PHP, algun ORM hecho personalizado y uno que otro generador de código... y va que vuela... :)

Espero le hechen un vistazo y compartan sus opiniones.

Suerte.

@pata_de_jaguar

lunes, 6 de mayo de 2013

Android Dev: android.permission un Arma de doble filo.

Quizás me pasa por andar de confiado, o quizás mis muchas visitas a foros de consulta como Stackoverflow no haya notado ese detalle... pero acabo de subir tres versiones al mismo tiempo de mi aplicación puesto que he perdido compatibilidad con nada menos que 300 Dispositivos... vaya... y eso que aumente la compatibilidad de mi API bajandola de la 2.3 a la 2.2 y agregando el SDK 17.
No había notado de la pérdida hasta que intenté probar mi app en un ZTE v791 Android v 2.3.6, menudo susto... había desaparecido del Google Play y no me lo explicaba, siendo una App phonegap se toca muy poco de código nativo...

Caray... algo malo habré hecho. Lo único nuevo en cuanto a prestaciones es que había agregado los siguientes Permission:

  • android.permission.BLUETOOTH
  • android.permission.BLUETOOTH_ADMIN
  • android.permission.FLASHLIGHT

y sin querer, sin notar, sin saber.... había pedido dos requisitos más a los dispositivos:

  1. Bluetooth.
  2. flashlight.

Creía equivocadamente que estos requisitos solo se piden con la etiqueta:

uses-feature

Pero nó!!!!!!.... al crear un permiso nuevo, solicitas al Android Market que los dispositivos a los que puedan instalarse tengan esos requisitos.

No necesariamente debes declararlo.... afortunadamente me he dado  una googleada y después de unos minutos encontré la solución: Hacerlo opcional.

Cuando haces un : android.permission.BLUETOOTH solicitas el requisitos, esto lo debes contrarrestar con una anotación uses-feature : uses-features android:name="android.hardware.bluetooth" android:required="false" así le dices al Android Market (Google Play) que pides el permiso para utilizar ese hardware, pero que no es necesario que el Dispositivo lo tenga.

Lo peor que pueda pasar es que tengas que validar la existencia del Hardware antes de usarlo... cosa que debes hacer.

Mi App quedó así:

Con 800 dispositivos más... opcional pero funcional.... :D

Eso es todo y como siempre les deseo mucha suerte en la carrera por el mercado móvil.
@pata_de_jaguar




martes, 30 de abril de 2013

¿A donde se dirige Phonegap?

Con el último lanzamiento de Phonegap/cordova 2.6 y el cambio radical de filosofía que sucedió en la versión 2.x me hace replantearme algo ¿Phonegap es en realidad Multiplataforma?.
En los últimos días me he dedicado a buscar el origen de un crash de mi app en dispositivos físicos con versiones < 11 de Android (2.3 por ejemplo) y que me ha llevado días metido en buscar errores en lugar de desarrollar mi aplicación... algo bastante frustante. Es frustante saber que cordova/Phonegap para Android cambia de filosofía.

En Agosto de 2013 serán eliminadas las Clases Plugin y DroidGap en ventaja de las clases CordovaWebView y CordovaPlugin, lo que es llamado el Native Mode. Sé de antemano que es para bien y uno de sus ventajas será la rapidez de la Aplicación, pero ¿que sucederá con la aplicaciones que no corra con esta filosofía?, lo digo porque probé el Native Mode, implementando el CordovaWebView y muchas de la interacción con mi aplicación se había ido al diablo. No sé exactamente a qué se deba, al ver que la interacción se perdió deshice los cambios  y volví al estado anterior... a veces vale malo por conocido que bueno por conocer. Sé de antemano que la Clase DroidGap en Cordova 2.6 implementa un CordovaWebView pero por alguna razón no funciona igual...

Otra de las cosas al que veo inconveniente es que tendrás que hacer un Activity por cada página para aprovechar el "Native Mode", pero ¿Como se comunicará cada página HTML con otra?... pues si pensaste que por intents... acertaste! pero que carajo!... esto haría que tu app pierda interacción propia del HTML y que en otras plataformas como WP8, Tizen o Blackberry tengas que revisar concienzudamente (o peor: Reescribir) tú codigo.... ¡al diablo la multiplataforma!.

¿Y el soporte?... supongamos que, por estabilidad, uso una versión antigua de Phonegap... pero ¿Que pasará con las versiones nuevas de Android?... todos estamos concientes que Google saca versiones de Android como los hace con Chrome... demasiado rápido... y muchas de estas versiones traen cambios muy tajantes como lo hizo en la versión 11 respecto a la diez y anteriores. ¿Será compatible Phonegap 1.9 con Android 5.0?... ¿Que pasará con la nuevas tecnologías?...¿Donde está el soporte LTS?... tendremos que pagar 20,000 USD por año para corregir fallos... o tendremos que hacerlo nosotros mismos. Sé por experiencia propia que la comunidad no dejará que muera este soporte, pero también me preocupa en que haya fork tras fork sin control, tal como las distros Linux.


Tengo fe en el Proyecto Apache Cordova, pero me preocupa los cambios de filosofía, que por bién que traiga, nos dejará muchos en el camino.

@pata_de_jaguar

lunes, 15 de abril de 2013

He perdido mis Bitcoins

Hace ya unos años, cuando el proyecto Bitcoin estaba empezando, me bajé el generador de Bitcoins, en ese tiempo en fase beta. Lo leí en alguna entrada de los muchas cosas que leo a diario, lo que me llamó la atención fue la idea del Bitcoin : Una Moneda que no es controlada por nadie, la moneda de Internet. En esos momento me llevó algunos minutos generar cerca de 50 bitcoins.
A decir soy curioso, pero realista. Las monedas tienen valor en el país en que está, este país se sustenta con valores materiales propios y reservas internacionales ¿Pero que le da valor al Bitcoin?... en una economía normal, el valor del dinero puede ser respaldado en material, al bitcoin lo único que le veo como valor es que es una Identidad única, cada Bitcoin se supone que es único, y quien lo posea en ese momento tendrá el valor de mercado... una moneda relativamente nueva, con un valor volátil.
Lo único que tiene de valor el Bitcoin es la especulación y que pinta a convertirse en la moneda estándar de Internet...

Lo sorprendente de esto es lo que ha pasado, Bitcoin ha subido de  menos de un centavo de dolar a 260 Dolares (Cuando escuché esto casi me suicido [Jugando hasta morir claro], imaginen si desde hace años me hubiese centrado en minar bitcoins :( ), aún así, creo que el futuro del Bitcoin pinta a:

  • Se estabilizará el precio hasta que llegue al límite de Bitcoins.
  • Los Gobiernos regularizarán o en el peor de los casos prohibirán el Bitcoin.
  • Habrán Instituciones o personas que tratarán de monopolizar en Bitcoin.
  • Bitcoin será la moneda preferida de Internet (si no es que ya lo es) .
  • Habrá límites de posesión de Bitcoins, para evitar el Blanqueo de Capitales.

La verdad me siento apenado por no tener fe en estos proyectos muy futuristas en su momento, creo que por ahora me estuviera gastando 100 o 500 bitcoins en cervezas... :p

Quizás ustedes no dejen pasar la oportunidad, Bitcoin será la moneda del futuro e invertir tiempo en algunas es bueno, al menos para invertir en internet.


Suerte

@pata_de_jaguar

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

lunes, 25 de febrero de 2013

Android Developer. Yandex el Nuevo App Market.

Si seguramente leíste mi anterior entrada de los Android Market alternativos, esto te gustará:

Yandex, el otrora gigante ruso de la búsquedas, ha plantado cara a google y ha puesto en marcha su App Store, compitiendo directamente con google.

A nosotros como desarrolladores no nos importa quien venda, pero que se venda, así que es una alternativa antojable hasta que, en lo particular, pueda entrar a Baidu Developer. En lo particular, me llevó menos de 10 minutos en publicar mi app... eso es un éxito completo! =).

El alta de tu App, aparentemente, depende de Google Play. Al menos en mi caso. Pero estoy seguro que al querer ser la competencia de google, no habrá limitantes... :)

Tips:
- Trata de publicar su descripción en Ruso.

Link: https://developer.store.yandex.com/


suerte.

@pata_de_jaguar

domingo, 24 de febrero de 2013

Las Cinco Formas de ser un Desarrollador Blackberry.

Como mencioné antes, Blackberry se ha abierto a muchas opciones, una gran ventaja para todos.
¿Como convertirse en un Desarrollador Blackberry?

La primera forma: C/C++

Blackberry tiene una opción para los añejos hackers de C/C++ con el plus de contar con un gran aliado : QML, el Qt supervitamidado (Para los desarrolladores .net, imaginen que es como la combinacion de XAML y LINQ XD), ellos lo llaman Cascade. En fin... esto es el Native SDK, compatible con PlayBook y BB10.
La ventaja del NDK es que practicamente no existe limitantes para explotar las cualidades de los dispositivos Blackberry.

La segunda forma: HTML5 o WebWorks

Muchos de los programadores actuales tenemos conocimiento en HTML5 y sus compinches : Javascript y CSS3. Para nosotros, Blackberry tiene una plataforma a la que conoce como WebWorks, compatible con BB10 y PlayBook, también es la plataforma en la que se basan los chicos de Phonegap para trabajar con Blackberry.
Sus compilados .vmx (Adobe AIR like) es una especie de lenguaje intermedio tipo CLR, por lo cual tiene un rendimiento semejante al interpretado. También cabe mencionar, tema que se ampliará adelante, que sus API están limitadas por las otorgadas por Blackberry, no pudiendo ampliarla fácilmente con librerías de terceros. Aún con esto existe el WebWorks Commmunity API, una integración de terceros.
Lo único feo es que no traiga un SDK para Linux :( , pues solo está disponible para MacOS y Windows.
Este será el tema siguiente.

La tercera Forma: Apps AIR.

Si ya tienes una aplicación hecha en Adobe AIR solo basta con "compilarla"... desconozco el alcance de compatibilidad, pero no debe ser dificil su implementación.

La Cuarta forma : Java.

Quien no incluye a Java entre sus compatibilidades, se está perdiendo de mucho (principal lenguaje según el Indice TIOBE, descarta C/C++ porque este lenguaje es eterno XD).
Blackberry pone a su dispocisión un Framework Java y un entorno llamado JDE, Java es el lenguaje más llevado entre las plataformas Blackberry (Incluyendo el Smartphone que no mencioné, pero igual). cabe mencionar que JDE, el IDE Java para Blackberry no tiene larga vida, así que es mejor descargarse el gordo plugin de Eclipse que apenas pesa <>517MB.

La Quinta Forma: Android runtime.
Android runtime es la panacea de los flojos :), aqui puedes convertir tu apk android con ciertas condiciones. Aunque no esta muy pulida, promete mucho. de hecho, ha sido el camino que han tomado los desarrolladores android hacia blackberry.
Para transformar tu app android existen tres formas:
1.- Online.
2.- A través de unos binarios standalone.
3.- A través de un plugin de eclipse llamado Nature.

Será un tema que ampliaremos en adelante.

Bueno, espero les haya servido este artículo.

suerte.

@pata_de_jaguar

viernes, 22 de febrero de 2013

SQLite. La Clausula condicional CASE.

Retomando la importancia que tiene sqlite, ya que es el Motor de Base de datos más usado en dispositivos móbiles y sistemas embebidos.

¿Como operar con columnas según condiciones en SQLite?

A veces nos encontramos que queremos operar(SUM, COUNT) con algunos campos de la misma forma en que se hace con Engines con una mayor implementación. En el caso de SQLite no existe la clausula IF en SELECT, así que usaremos la clausula CASE.


CASE WHEN x > y THEN a ELSE b END.

Se lee.

CUANDO_EL_CASO_SEA valorX ES_MAYOR_A valorY ENTONCES DEVOLVER valorA SINO DEVOLVER valorB FIN.

Mucho más simple: cuando el valor de X sea mayor que Y, entonces devuelve A, sino devuelve B.

Sean esto los datos:

Haremos una consulta, donde crearemos dos columnas con sumas condicionadas con  otro campo. Para efectos de este ejemplo, el tipo 1 son ventas, 0 son descuentos. Agruparemos los datos por vendedor.

SELECT nombre, SUM(CASE WHEN tipo=1 THEN monto ELSE 0 END) AS 'ventas',

SUM(CASE WHEN tipo=0 THEN monto ELSE 0 END) AS 'devoluciones'

FROM ventas

GROUP BY nombre


Iremos por partes:

SELECT nombre,


/* Sumar (seleccionar monto cuando tipo sea igual a 1) = ventas */ 

SUM(CASE WHEN tipo=1 THEN monto ELSE 0 END) AS 'ventas',


/* Sumar (seleccionar monto cuando tipo sea igual a 0) = devoluciones */  

SUM(CASE WHEN tipo=0 THEN monto ELSE 0 END) AS 'devoluciones' 
 
 /* desde la tabla ventas */

FROM ventas

/* Agruparlos por nombre */ 

GROUP BY nombre

 El Resultado es:

También podremos obtener el resultados con varios SELECT, pero lo óptimo es de esta forma.

Algo más complejo:

SELECT MAX([recibos].[fecha]) AS 'mes',

COUNT([recibos].[codigo]) AS 'conteo',

UM(CASE WHEN [recibos].[tipo] = -1 THEN ([recibos].[total]) ELSE 0 END) AS 'ventas',

SUM(CASE WHEN [recibos].[tipo] = 1 THEN [recibos].[total] ELSE 0 END) AS 'compras'

FROM [recibos]

WHERE  [recibos].[fecha] >= date('now','start of year')

GROUP BY strftime(\"%m\", [recibos].[fecha]) ORDER BY [recibos].[fecha]

Más info  : http://www.sqlite.org/lang_expr.html

Pero la explicación lo dejamos para después.

Suerte.

@pata_de_jaguar