Mi App Android en el Play Store: Alolan Pokédex

Recientemente he desarrollado y publicado una app muy sencilla, pero práctica para los jugadores de la más reciente entrega de Pokémon:  Sun y Moon. Se trata de una aplicación de referencia, que lista los diferentes Pokemon capturables en ambos juegos, junto con su respectivo Código QR.

Funcionalidad QR en Sun/Moon

El escanear un Código QR con la Cámara del Nintendo 3DS, permite obtener el registro del Pokemon respectivo, sin necesidad de capturarlo. Esto, entre otras cosas permite que se vea la ubicación exacta donde podemos encontrar a esa determinada especie en su forma salvaje, para poder capturar uno propio.

La idea de la aplicación surgió mientras hacia uso de esta misma característica, pero consultando desde el álbum del sitio web ImGur, donde se publicaron originalmente estos códigos. El proceso de buscar el QR deseado usando este sitio, se me apetecía tediosa y complicada: No existe manera de cargar todas las imágenes a la vez en la ventana del navegador, por lo que una búsqueda con CTRL+F no siempre arrojaba el resultado esperado.

El álbum en Imgur

Fué entonces cuando se me ocurrió descargarlas todas. Pero había un problema: Son mas de 400 imágenes y el nombre del archivo es un texto aleatorio que no sirve para identificar al Pokemon. Y el proceso de guardar manualmente 400 imágenes de internet una a una simplemente no era una opción.

Guardar uno por uno? No gracias!

Como todo buen programador, sabía que debía haber una mejor manera de hacer esta tarea, sólo hacía falta encontrar la herramienta. Fue entonces cuando pude darme cuenta de algo muy importante: El atributo ALT (descripción alternativa) de cada una de las imágenes contiene el número, seguido del nombre de cada Pokemon.  Fue entonces que lo tuve claro. Solo necesitaba una herramienta que permitiese descargar todas las imágenes de un sitio web, usando su atributo ALT como nombre de imagen.

Como se puede ver, el SRC de la imagen es un texto al azar. Pero el ALT es justo lo que necesito!

Luego de buscar en la web, me di cuenta que muchas otras personas han tenido esta necesidad en el pasado, pero sin embargo no existe en el mercado una herramienta que lo haga. Debía hacer mi propia herramienta…

Fué en este momento que encontré una extensión del navegador Google Chrome que permite descargar todas las imágenes de una página web. Y lo mejor: Es de código abierto!. Mi misión era sencilla: Modificar la extensión para que al descargar, en vez del nombre original del archivo, use el nombre del atributo ALT de la imagen en cuestión.

«Image Downloader» en la Chrome Web Store

Asi que aquí estaba, con el código fuente del proyecto original , ahora bifurcado a mi repositorio local. Tuve que aprender cómo se desarrolla una extensión para navegador: El acceso al DOM, el uso de la configuración, el manejo de las acciones, la interacción entre módulos y la instalación local en modo desarrollador, entre otros aspectos muy técnicos.

Al final, solo necesité crear un arreglo con el texto ALT de cada imagen al cual el API tiene acceso, para luego pasarlo a la función que genera las descargas automáticas, como parámetro ‘filename'.

La función que captura el atributo ALT en todas las imágenes.

Para quienes están interesados en ver todos los cambios requeridos, o descargar mi versión de esta extensión. (Que he llamado ALT Image Downloader), el código esta en mi GitHub, desde donde también se pueden ver las diferencias con la rama original.

Una vez que tuve las imágenes descargadas justo como las necesitaba, solo bastó editarlas, generar un listado, crear una base de datos, construir un API, subir todos los recursos al hosting y por supuesto: Desarrollar y publicar el App Android!. Sin embargo, esos detalles los comentaré en la entrega número dos de ésta entrada.

Captura del App: Alolan Pokedex

«Gotta catchem alljust not by hand».

Mi juego de Spaceships en CodeSkulptor

Hace bastante tiempo, termine mi primer MOOC en Coursera: Interactive Programming in Python. Lo recuerdo como uno de los mejores básicamente por la manera como los proyectos semanales crecían sobre la base del anterior.

Recientemente encontré el código usado en mi entrega final. Es nada más y nada menos que mi versión de Asteroids en CodeSkulptor. Para correrlo, solo hace falta ir aquí y hacer click en ►

Spaceship Game
Spaceship corriendo en Chrome!

Programacion Funcional en Python

Como parte de mi colaboración con el grupo de Meetup de PyData Panama, he creado una pequeña presentación a manera de introducción a los conceptos de la programación funcional que pueden ser usados en Python.

Además, como compañía, adjunto el excelente libro de Stephen Lott, «Functional Python Programming» publicado por PACKT Publishing.

Functional Python Programming – Steve Lott

GraphQL: La nueva (y mejorada) forma de construir API’s

En la última conferencia de desarrolladores de GitHub, la empresa hizo un gran anuncio: Su nueva API GraphQL, la cual ha sido publicada para su acceso a través del programa de acceso temprano. En este post, hago un esfuerzo por explicar qué es GraphQL y por qué es importante para la comunidad.

"Un lenguaje de consultas para tus API's"
«Un lenguaje de consultas para tus API’s»

Primero, un poco de historia.

GraphQL fue creado en Facebook y liberado como un proyecto Open-Source, de igual manera que React.js. La idea original era permitir que los clientes de los servicios Rest pudieran decidir qué información le interesa en un particular end-point.  Quienes han trabajado desarrollando servicios REST, sabrán que muchas veces la cantidad de información que termina devolviendo un end-point particular es enorme, y no todos los casos de uso la consumen en su totalidad.

¿Por qué importa?

¿Por qué si los servicios REST de GitHub son tan alabados en la industria, ahora se mudan a GraphQL?. Por la misma razón que otros gigantes de la industria han comenzado a adoptarlo. Los detalles están en su anuncio, pero el resumen es el siguiente:

  • REST requiere varias consultas, GraphQL requiere solo una.
  • Con REST, se consulta o mucha o muy poca data. Con GraphQL se consulta exactamente lo que se necesita.
  • REST por lo general se convierte en un laberinto de endpoints mal documentados. GraphQL es altamente tipado y auto-documentado.

En las palabras del equipo responsable de la plataforma en GitHub:

GraphQL representa un masivo salto en el desarrollo de API’s. Tipado seguro, introspección, documentación generada y respuestas predecibles, van a beneficiar tanto a los desarrolladores como a los consumidores de nuestra plataforma. Ansiamos una nueva era de plataformas respaldadas por GraphQL y esperamos que ustedes también.

¿Cómo se ve?

Si se firma el acuerdo de pre-release, tendremos acceso al explorador de API’s. Es básicamente GraphiQL, un IDE para explorar API’s GraphQL.

La primera consulta de prueba.
La primera consulta de prueba.

Después de un par de segundos experimentando, mi primera consulta me devuelve una respuesta –Funciona!. Se puede consultar la documentación del API para saber cuáles mutaciones o consultas se pueden hacer. Es básicamente lo esperado: Se pueden buscar usuarios, organizaciones y obtener información de nuestra propia cuenta GitHub.

Obteniendo información de mis Repos
Obteniendo información de mis Repos…

Y claro, también realicé un comentario desde el API!:

Comentar desde el API? Hell yeah!
Comentar desde el API? Hell yeah!

¿Cómo Aprender?

Si GraphQL te emociona como a mi, entonces probablemente estarás preguntándote la mejor manera de implementarlo en tus proyectos. Acá dejo algunos recursos y tutoriales para comenzar.

Tutoriales:

Recursos:

Spark y Project Tungsten

Sin duda alguna, Spark es el nuevo gran protagonista en la escena Big Data. La meta de Spark siempre ha sido ofrecer una plataforma unica donde los usuarios puedan obtener los mejores algoritmos distribuidos para cualquier tarea de procesamiento de datos.spark-logo-trademarkPara hacer esto, Spark cuenta con una herramienta llamada RDD, o Resilient Distributed Dataframe. Sin embargo los RDD’s han sido completamente mejorados con Project Tungsten. Los beneficios de Tungsten podran verse a partir de Spark V 1.6+ y lo mejor: Cloudera Manager lo tiene disponible desde la version 5.8.

Acceder data en HDFS desde Python

Cuando se trabaja con Big Data, independientemente de si usamos Spark o trabajos Map-Reduce, generalmente nos encontraremos con el sistema de archivos distribuidos de Hadoop, HDFS.

El problema con HDFS siempre ha sido que acceder/modificar la data es un proceso tedioso, que casi siempre involucra realizar comandos dfs en una consola. Esto dificulta muchísimo automatizar scripts (a excepción de shell scripts) para realizar nuestras consultas.  Por esta razón, el equipo de Hadoop creó HttpFs, el cual es un portal hacia HDFS haciendo uso de servicios Rest que corren en el Namenode.

hdfsstatus

Para Python, les recomiendo el excelente proyecto Open-Source HdfsCLIEl mismo no es más que una atadura al propio servicio de HttpFS (y WebHDFS) que provee la mayoría de los métodos relevantes a través de un API y una interfaz de CLI.

La documentación está disponible en: https://hdfscli.readthedocs.io/en/latest/

Toma la mejor clase de Harvard en Realidad Virtual!.

Desde hace un tiempo, la que es considerada la mejor y mas popular clase en Harvard, Computer Science 50 (CS50 ) ha estado disponible online para los alumnos de la institución, o para el mundo a través de EDX, donde es por mucho la clase mas popular, CS50x.

Desde la semana pasada, sin embargo, el Canal de Harvard en Youtube ha estado subiendo las clases en formato VR 360. Esto significa que las mismas pueden ser visualizadas con la ayuda de un Google Cardboard, un Oculus Rift, un Samsung Gear VR o cualquier otro dispositivo similar y sentir que estás en el aula, en primera fila. Ya no hay excusas para entrar en Harvard…

Por cierto, que las mismas fueron capturadas con una cámara Nokia Ozo de $45000, que proporciona videos en perfecto 3D, y un sonido espacial que ofrecen altos grados de inmersión.

La cámara VR de Nokia
La cámara VR de Nokia

Herramientas para ahorrar tiempo en el desarrollo.

Les presento una pequeña colección de las herramientas mas útiles para ahorrar tiempo en el desarrollo para diversas tecnologías y lenguajes.  Si tienes un proyecto con tiempos de entrega cortos, te interesará ver que hay en la lista para tu necesidad.

developertools_icon

Prototipado (Mockups)
Marvel – https://marvelapp.com/
Invisionapp – http://invisionapp.com/
Origami (Facebook) – https://facebook.github.io/origami/
Codiqa – https://codiqa.com/
Precursor – https://precursorapp.com/
Flinto – https://www.flinto.com/
Framer – http://framerjs.com/

Móvil
PhoneGap – http://phonegap.com/
Ionic – http://ionicframework.com/

iOS
Framework7 – http://www.idangero.us/framework7/

Front-end
Twitter Bower – http://bower.io/
Twitter Bootstrap – http://twitter.github.com/bootstrap/
HTML5 boilerplate – http://html5boilerplate.com/
ReactJS – http://facebook.github.io/react/
AngularJS – http://angularjs.org/
JQueryUI – http://jqueryui.com/
JQuery – http://jquery.com/
EmberJS – http://emberjs.com/
Backbonejs – http://backbonejs.org/
CanJS – http://canjs.com/
YUI library – http://yuilibrary.com/
Gumby framework – http://gumbyframework.com/
xchema xtyle – http://xtyle.xchema.com
NinjaUI – http://ninjaui.com/
CoffeeScript – http://coffeescript.org/
Less css – http://lesscss.org/
SaSS css – http://sass-lang.com/
Cappuccino – http://cappuccino.org/
Jasmine – http://pivotal.github.com/jasmine/
Mocha – http://visionmedia.github.com/mocha/
QUnit –http://qunitjs.com/
CodeKit – http://incident57.com/codekit/
Grunt – https://github.com/cowboy/grunt
Yeoman – http://yeoman.io/
ComponentJS – http://component.io/
TodoMVC – http://todomvc.com/
SpaceBase – http://spacebase.space150.com/

Servidores y Redes
Vagrant (virtualizacion) – http://vagrantup.com/
Puppet (automatizacion) – http://puppetlabs.com/
ZeroMQ (sockets) – http://www.zeromq.org/
RabbitMQ (mensajes) – http://www.rabbitmq.com/

PHP
Laravel Framework – http://laravel.com/
CodeIgniter Framework – http://codeigniter.com/
Wordpress Framework – http://wordpress.org/
Joomla Framework – http://www.joomla.org/

JavaScript
nodeJS – http://nodejs.org/
Express Framework – http://expressjs.com/
Socket.io – http://socket.io/
Meteor – http://www.meteor.com/
Derby – http://derbyjs.com/
TowerJS – http://towerjs.org/
Geddy – http://geddyjs.org/

Python
Flask – http://flask.pocoo.org/
Django – https://www.djangoproject.com/

Ruby
Rails – http://rubyonrails.org/
Sinatra – http://www.sinatrarb.com/

Java
Hibernate (ORM)- http://www.hibernate.org/
Play framework – http://www.playframework.org/

Panama PyData 2: Spark vs Pandas Dataframes

Comparto con los asistentes al Meetup del 24 de Septiembre de PyData Panama, la presentación que acompaña mi taller: Pandas vs Spark Dataframes – Una introducción a las arquitecturas distribuidas.

Los notebooks de iPython que acompañaron el taller están disponibles en mi repo en GitHub: https://github.com/sansagara/Panama-PyData

PySpark Talk
PySpark Talk

Los invito entonces a unise al grupo  http://meetu.ps/e/C15vZ/xHDxP/f

Cómo ser un Hacker en 5 minutos.

Primero, una renuncia de responsabilidad: El título de este post se supone que sea una broma. Si es que su absurdidad no es obvia.  Es una burla de todos esos libros, cursos y material que prometen enseñarnos a <inserte skill técnico aquí> en 1 semana.

Sin embargo, estoy seguro que http://hackertyper.net/ realmente los hará sentir como un hacker sin el menor esfuerzo! Una vez dentro, solo se debe teclear lo más rápido posible. ¡Y reír un poco!

Sin esfuerzo!
Sin esfuerzo!