Estuve unas cuantas horas investigando sobre la posibilidad de desarrollar con Python sobre Android y a continuación les daré un resumen de los resultados y conclusiones que obtuve.

Acá les dejo el script que usé para probar una parte de los widgets disponibles en la API por si quieren probarlo y echarle un ojo (no me detendré a explicarlo mucho porque el código prácticamente se explica a sí mismo). Además supongo que siguieron los pasos de mi tutorial sobre ¿Cómo desarrollar para Android? y tienen configurado su entorno de desarrollo y saben cómo usar el emulador.

droid = android.Android()

tiempo = droid.dialogGetInput("Escriba la cantidad de tiempo que desea para el demo (10-100)","Tiempo:")
print tiempo

tiempo = int(tiempo[1])
if tiempo < 10: tiempo = 10 elif tiempo > 100:
tiempo = 100

droid.dialogCreateHorizontalProgress('Barra de Progreso', 'Hola, estoy progresando...', tiempo)
droid.dialogShow()
for i in range(tiempo):
time.sleep(0.5)
droid.dialogSetCurrentProgress(i)
droid.dialogDismiss()

droid.dialogCreateSpinnerProgress('Spinner de progreso', 'Mirá, mirá... estoy girando')
droid.dialogShow()
time.sleep(tiempo)
droid.dialogDismiss()

droid.notify('Test de Python' , 'Oh! puedo notificar también')

droid.dialogCreateAlert(title, message)
droid.dialogSetPositiveButtonText('Si')
droid.dialogSetNegativeButtonText('No')
droid.dialogSetNeutralButtonText('Cancelar')
droid.dialogShow()
response = droid.dialogGetResponse().result
print response
droid.makeToast('El resultado de la ejecucion del boton es: %s' %response['which'])

droid.dialogCreateAlert('Selecciona un color')
colores = ('amarillo', 'azul', 'rojo')
droid.dialogSetItems(colores)
droid.dialogShow()
respuesta = droid.dialogGetResponse().result
print respuesta
droid.makeToast('El color seleccionado es: %s' %colores[respuesta['item']])

droid.makeToast('Bueno, chao')


Para correrlo deben instalar algunos paquetes en el cel. Pueden hacerlo con el comando del SDK:

$ adb install /ruta/del/archivo.apk

con los QR que están en la página del proyecto SL4A o con el método que mejor les parezca.

Ok, las cosas a instalar son:


Luego que las instalen van al dispositivo/emulador y buscan el icono de Python For Android, tap e instalan. Eso tardará unos minutos mientras descarga unas cosas. Al terminar entonces enviamos el script de prueba al cel, podemos usar el comando:

$ adb push /ruta/del/script.py /sdcard/sl4a/scripts/

Eso lo copiará en la carpeta del SL4A. Ahora cuando ejecutemos el Python For Android veremos en la lista de scripts nuestra infame creación, tap en el script y ejecutar. Lo demás es disfrutar las ventanitas y controles :P

Conclusiones


  1. La API de SL4A es reducida, es decir si bien está bastante adelantada aún faltan muchas cosas/funciones por implementar.
  2. Python For Android a diferencia de lo que pensaba no soporta widgets gráficos en Android, solamente notificaciones, toast y cosas básicas tipo entrada de texto, selección, etc. Así que nos olvidamos de interfaces gráficas ricas en imágenes y esas cosas.
  3. Sí existen algunos issues de performance, de hecho un pana que está trabajando duro con Android me dice que los desarrolladores todos los días se matan por tratar de mejorar el rendimiento pues de por si ya es algo lento (hablo de apps nativas). Sin embargo la versión de Python es cross-compiled y corre incluso más rápido que Jython
  4. Hay formas de empaquetar scripts en .apk y aunque son algo un poco experimentales funcionan bastante bien (son, digamos, "tweaks" del método de construcción de paquetes con Java)
  5. En cuanto a estabilidad no hay mayores issues, se puede usar para aplicaciones de producción


Finalmente puedo decir (muy a mi pesar) que no podemos contar con ésta alternativa para desarrollar aplicaciones ricas en interfaces gráficas, sin embargo es una opción interesante a tener en cuenta cuando madure un poco más. Personalmente le haré seguimiento tipo ninja y esperaré con ansias que en el futuro se puedan crear aplicaciones tan buenas como se hace con Java.

Más información en:

* http://code.google.com/p/android-scripting/
*http://code.google.com/p/android-scripting/wiki/FAQ
* http://code.google.com/p/android-scripting/wiki/Tutorials
* http://code.google.com/p/android-scripting/wiki/ApiReference



Actualmente me he visto en la necesidad de crear aplicaciones para Android y como no había incursionado en ese mundo, he decidido hacer una serie de artículos para documentar todo el proceso.

En ésta primera entrega explicaré los pasos que seguí para poner a punto el entorno de desarrollo. Debo resaltar que las recetas están hechas para Debian GNU/Linux, sin embargo puedes adaptarla a tu distro favorita con unos leves ajustes.

Para los que no están familiarizados con mis tutoriales les recuerdo que todas las instrucciones que comiencen con el caracter $ se ejecutan como usuario normal y las que comiencen con # se ejecutan como superusuario (root), por ejemplo:

$ ls -l (instrucción ejecutada como usuario)
# aptitude update (instrucción ejecutada como root)


Dicho esto comenzamos.

Instalar dependencias


Lo primero que debemos hacer es instalar los paquetes necesarios para el desarrollo, que básicamente son: la máquina virtual de Java (JRE) y el entorno de desarrollo (JDK). En una distribución Debian GNU/Linux bastaría con:

# aptitude update
# aptitude install sun-java6-jdk sun-java6-jre
# aptitude remove gcj-jdk


Si se dan cuenta usamos las implementaciones de SUN y removimos cualquier posible instalación del compilador GNU de Java (gcj) pues en la documentación oficial nos dicen que gcj NO es compatible con Android.

Para más información sobre los requerimientos del sistema visita: http://developer.android.com/sdk/requirements.html

Luego que instalamos los paquetes nos aseguramos de que el sistema seleccione las opciones correctas por defecto de cada ejecutable, pare eso usamos:

# update-alternatives --config javac
# update-alternatives --config java


Y en ambos casos, seleccionamos las opciones de SUN.

Instalar Ant


Ant es una herramienta que nos permite construir aplicaciones Java. En nuestro caso, nos permitirá compilar y construir archivos .apk (los instalables en Android) a partir de nuestro código fuente.

Nos vamos a la página de descargas de Ant, descargamos uno de los archivos comprimidos que se encuentran en la sección "Current Release of Ant" y lo descomprimimos en una carpeta de nuestra preferencia. En mi caso lo hice en /opt y me quedó la carpeta: /opt/apache-ant-1.8.1.

Instalar el Android SDK


Bueno, teniendo las herramientas y dependencias listas, vamos a instalar el entorno de desarrollo de Android. Nos vamos a la página del SDK de Android y descargamos la versión que corresponda a nuestra plataforma. Al igual que con Ant, descomprimimos el archivo en la carpeta de nuestra preferencia. Ésta vez también lo descomprimí en /opt, quedando en la carpeta: /opt/android-sdk-linux_x86.

Ahora editamos el archivo ~/.bashrc para agregar la ruta de los binarios al PATH del sistema y establecer las variables de entorno ANT_HOME y JAVA_HOME. Eso lo logramos agregando las siguientes líneas:

export PATH=${PATH}:/opt/android-sdk-linux_x86/tools
export PATH=${PATH}:/opt/apache-ant-1.8.1/bin
export ANT_HOME=/opt/apache-ant-1.8.1
export JAVA_HOME=/usr/lib/jvm/java-6-sun/jre


Recuerda cambiar las rutas de esas variables por las rutas donde se encuentran tus binarios. Si no sabes muy bien hacía dónde debe apuntar JAVA_HOME puedes ejecutar el comando:

# find / -name "tools.jar" | grep sun

Y entonces agrega la ruta que te arroje.

Nota: Debes cerrar las terminales abiertas y volverlas a abrir para que los cambios en las rutas surtan efecto.

Instalar plataformas de Android


¿Plataformas? ¿De qué me hablas? - Seguramente te estarás haciendo esas preguntas. Las plataformas son las "versiones" de Android disponibles (por ejemplo Android 1.6, Android 2.2) y necesitamos al menos una para poder compilar la aplicación y configurar un Android Virtual Device (AVD) para probarla.

Esto es muy simple, basta con abrir una terminal y ejecutar:

$ android

Nos aparecerá una aplicación (AVD Manager) como la que se muestra a continuación y allí nos vamos a la sección Available Packages, actualizamos el repositorio y seleccionamos la(s) plataforma(s) que deseamos instalar.


Finalmente creamos un nuevo dispositivo virtual en la sección Virtual Device. Hacemos clic en el botón New..., le asignamos un nombre, seleccionamos una plataforma y hacemos clic en Create AVD.


Para probar nuestro flamante dispositivo lo seleccionamos y hacemos clic en Start.... Luego clic en Launch y al cabo de unos segundos tendremos el emulador corriendo una instancia de Android :)


Desarrollo


Ahora viene la parte divertida, crear la aplicación. En las próximas entregas estaré hablando sobre el desarrollo, por los momentos pueden jugar creando un Hello World y pueden leer sobre cómo desarrollar con Eclipse y cómo desarrollar con otros IDEs

Compilar y construir el ejecutable


Luego de que tengamos nuestra aplicación lista debemos crear el instalador. Eso es tan simple como navegar hasta la carpeta raíz del proyecto (código fuente) y ejecutar:

$ ant debug

Si nuestro proyecto se llama "HelloAndroid" esto generará un archivo HelloAndroid-debug.apk y ese será nuestro instalador.

Probar en el emulador


Finalmente, una de las partes más esperadas. ¿Cómo se verá nuestra aplicación en un dispositivo? Pues fácil, en una consola ejecutamos:

$ android

E iniciamos nuestro dispositivo virtual. Luego que el dispositivo esté funcionando ejecutamos en otra consola:

$ adb install /ruta/de/nuestro/instalador/HelloAndroid-debug.apk

Y con eso enviaremos la aplicación al dispositivo. La buscamos en el menú y voilá! A jugar :D

Espero que les haya sido de utilidad éste tutorial. Próximamente seguiré documentando mis travesías en el mundo de Android. Cambio y fuera.

De Anthrax en Venezuela

Ayer 13 de noviembre de 2010 asistí al Forum de Valencia a presenciar un concierto de Anthrax, Banda originaria de Nueva York y una de los 4 pilares fundamentales del Thrash Metal (Junto a Metallica, Slayer y Megadeth). Llegué a Valencia en horas del medio día acompañado de unos panas de Punto Fijo (Gracias al tour de “Vive tu Concierto”), desde ese momento nos dispusimos a hacer nuestra cola y a pesar de la lluvia la pasamos muy bien.

Cerca de las 7pm se aperturaron las puertas y logramos entrar al recinto. Nos ubicamos en la parte media de las tribunas del forum y con una vista espectacular esperamos por el inicio del concierto. Para calentar los motores se montó la banda Gillman en tarima estrenando su nueva formación. Sobre este punto quiero hacer una pausa para hacer un comentario… El Sr. Paul Gillman es un guerrero y quizas una de las pocas leyendas del Rock Nacional, soy fanatico de su música (Poseo toda su discografia) y estoy de acuerdo con la iniciativa de los Gillmanfest. Sin embargo, debo decir que la banda Gillman no debió abrir este concierto. Pienso que hay muchas bandas del genero que merecian estar ahí (Natastor, Blasphemy entre otros). Gillman no es thrash y sin duda la baja respuesta de publico se notó debido a esto.

Gillman tocó un set con gran parte de sus clásicos: Dr. Kanoche, Anticristo III, El regreso del Guerrero, Vanderdecker, Asesino, El Tirano Aguirre, El Poema Negro, El Hachador y Resistire.

A las 9pm Anthrax se montó en escena y se entregó al público como muy pocas bandas saben hacerlo. Los moshpits (Popularmente conocidas como ollas) brotaron a mas no poder en la árena del forum. Debo decir que en ninguno de los conciertos a los que he asistido he visto pogos como los que se formaron en este.

Acá les muesto el setlist de Anthrax:

Among the Living
Caught in a Mosh
Got the Time (Joe Jackson cover)
Madhouse
A.I.R.
Antisocial (Trust cover)
Indians
Medusa
Only
Metal Thrashing Mad
Be All, End All
Efilnikufesin (N.F.L.)
I Am The Law

Anthrax es una banda genial que dejó todo en esa tarima, Scott Ian prometió regresar el proximo año cuando esté listo el nuevo disco. la unica nota negativa de la banda fue que Joey Belladonna nos confundió con Argentina y se equivocó un par de veces al anunciar las canciones. Sin embargo la entrega de este frontman a su pulbico y su versatilidad hicieron olvidar rápidamente los incidentes.

De Anthrax en Venezuela

Debo felicitar e Emporio Group por la organización de este evento, el trato fué genial. Nada de policias matraqueros, nada de ballenas, nada de peinillas… simplemente la seguridad del forum (gente educada que no ofendió a nuestra manada). Como Metalero les digo: “así se organizan los conciertos de metal“, simplemente 20 Puntos. Luego de haber asistido a Dream Theater en 2008 y a este concierto les digo que no hay mejor locación para conciertos que el Forum de Valencia.

Gente de Emporio… sigan haciendo shows de Metal, y si no es mucho pedir… mantengan al Forum de Valencia como locación!

Pueden ver algunas fotos aca.. hasta otro próximo concierto \m/

Seguir los pasos escrupulosamente, no me responsabilizo de posibles daños en tu teléfono. Este proceso es para teléfonos nuevos, si has flasheado alguna ROM antes quizás te sobre algún paso.   Descargar herramientas necesarias Fastboot . Android SDK  (necesitamos el adb) ROM y Google APPS  (ACTUALMENTE update-cm-6.1.0-RC1-N1-signed.zip y gapps-hdpi-20101025-signed.zip) Radio en versión zip FRF50-radio-4_06_00_12_7.zip Recovery 1.8.0.1 recovery-RA-nexus-v1.8.0.1-aw.img   Descomprimimos el zip del fastboot y el SDK (copiar el binario adb de la carpeta tools) y arrancamos el teléfono en modo fastboot (power+trackball) Desde consola ejecutamos sudo ./fastboot devices (deberá salir un número de serie HTXXXXXXXX y luego la palabra fastboot) Desbloqueamos el terminal (con esto se pierde la garantía) sudo ./fastboot oem unlock En el teléfono aparece (muy bien explicado lo que estamos haciendo) pulsar Vol Up y después Power para desbloquear. Ahora volvemos a arrancar en modo fastboot (Power + Trackball) para instalar el recovery sudo ./fastboot flash recovery recovery-RA-nexus-v1.8.0.1-aw.img Dejamos que reinicie y volvemos a entrar a fastboot para pasar al BOOTLOADER->RECOVERY (Vol Down y Power) (Recovery se verá en verde) Ahora deberíamos ver algo parecido a GRUB con varios menus, tenemos que copiar en la SDCARD la nueva radio sudo ./adb devices (se tiene que ver nuestro teléfono) sudo ./adb push FRF50-radio-4_06_00_12_7.zip /sdcard/ sudo ./adb shell ls /sdcard/*zip (tenemos que ver el archivo que acabamos de copiar) Desde el teléfono con el trackball bajamos hasta la opción "Flash zip from sdcard", buscamos el zip del radio y pulsamos el trackball para actualizar el radio, cuando termine reiniciamos y volvemos al recovery siguiendo los mismos pasos del punto 6. Copiamos la ROM de Cyanogen y las Google APPS. sudo ./adb devices (deberíamos ver el teléfono) sudo ./adb push update-cm-6.1.0-RC1-N1-signed.zip /sdcard/ sudo ./adb push gapps-hdpi-20101025-signed.zip /sdcard/ sudo ./adb shell ls /sdcard/*zip (deben verse estos 2 archivos) Desde el teléfono vamos al menú "Flash zip from sdcard" e instalamos PRIMERO el zip update-cm-6.1.0-RC1-N1-signed.zip, cuando termine y sin reiniciar el otro gapps-hdpi-20101025-signed.zip. Antes de reiniciar hacemos wipe (volver a datos de fábrica) desde el menú del teléfono, Wipe -> Wipe data/factory reset, wipe cache, wipe dalvik-cache y reiniciamos. El primer arranque es un poco más largo de lo normal, podemos ver como se van configurando por primera vez las aplicaciones con este comando: sudo ./adb logcat

Una vez mas Evenpro se burla de los fanaticos del metal en Venezuela. La banda Iron Maiden ha anunciado las nuevas fechas de su gira: AROUND THE WORLD IN 66 DAYS, he aquí las fechas:

FEBRUARY
Fri 11  Moscow, RUSSIA    Olympiski
Tue 15  Singapore     Singapore Indoor Stadium
Thu 17 Jakarta, INDONESIA   Stadium Utama Gelaro Bung Karno Senayan
Sun 20 Bali, INDONESIA    Garuda Wisnu Kencana
Wed 23 Melbourne, AUSTRALIA  Hisense Arena
Thu 24 Sydney, AUSTRALIA    Entertainment Centre
Sat 26 Brisbane, AUSTRALIA    Showgrounds (SOUNDWAVE FEST)
Sun 27 Sydney, AUSTRALIA    Eastern Creek Raceway (SOUNDWAVE FEST)

MARCH
Fri 4 Melbourne, AUSTRALIA    Showgrounds (SOUNDWAVE FEST)
Sat 5  Adelaide, AUSTRALIA    Bonython Park (SOUNDWAVE FEST)
Mon 7  Perth, AUSTRALIA    Steel Blue Oval (SOUNDWAVE FEST)
Thu 10 Seoul, KOREA      Chamsil Gymnasium
Sat 12  Tokyo, JAPAN     Super Arena
Sun 13 Tokyo, JAPAN     Super Arena
Thu 17 Monterrey, MEXICO    Banamex Theatre
Fri 18 Mexico City, MEXICO    Foro Sol
Sun 20 Bogota, COLOMBIA    CEC Aposentos Club Sopo
Wed 23 Lima, PERU     Estadio San Marcos
Sat 26 Sao Paulo, BRAZIL   Morumbi Stadium
Sun 27 Rio De Janeiro, BRAZIL   HSBC Arena
Wed 30 Brasilia, BRAZIL     Nilson Nelson Parking Lot

APRIL
Fri 1 Belem, BRAZIL    Parque De Exposicoes
Sun 3 Recife, BRAZIL    Parque De Exposicoes
Tue 5 Curitiba, BRAZIL     Expotrade
Fri 8 Buenos Aires, ARGENTINA   Velez Sarsfield
Sun 10 Santiago, CHILE     Estadio Nacional
Wed 14 San Juan, Puerto Rico, USA  Coliseo De Puerto Rico
Sat 16 Sunrise, Florida, USA   Bank Atlantic Center
Sun 17 Tampa, Florida  USA   St Pete Times Forum

Como pueden ver Venezuela no aparece en esta ruta (Tal y como sucedió en 2008), ¿En qué estará pensando Evenpro (Empresa con sede en Caracas encargada de organizar el tour por gran parte de America Latina)?, ¿qué no demostramos el 05/03/2009 y el 12/03/2010 que hay publico metalero?, Mas bien demuestren ustedes que si pueden complacer a ese público como es debido.

Hay una campaña en twitter para hacer un ultimo intento para que esta gente cambie de opinión y no agreguen en la gira:

http://twitition.com/st88g

Sigan a @MaidenVenezuela

Metaleros demostremos a Evenpro que somos un publico de calidad y que merecemos buena música de la mano de los mejores artistas.

\m/ \m/

Tal como lo dice el titulo, sin preámbulos. Alguien me podría donar esa arduino? tengo tiempo buscando un juguete y creo que ese es el apropiado. Quien quita que pueda poner a correr orvtech.com y linuxevolution.org en un miniclusters de arduinos.

[caption id="attachment_167" align="aligncenter" width="473" caption="Make esta vendiendo este combo por un monto muy barato"]La Arduino One y un libro instructivo[/caption]

Links:

UPDATE: Debido a mi ultimo inconveniente con paypal, no puedo recibir donaciones monetarias por esa vía. Cualquier ayuda, colaboración es bienvenida. Puedes colaborar haciendo click en mis patrocinantes o donar el monto que quieras a travez de google checkout.

$