Archivo de la categoría: Proyectos

Desarrollando The Time Box, mi primera aplicación para Android

El ecosistema Android ha ido madurando de manera muy acelerada en los últimos años, y lo que comenzó como un proyecto piloto se ha convertido en el segundo jugador (o primero según el mercado) móvil a nivel mundial, y aprender a desarrollar para él de manera nativa puede ser una opción interesante, sobre todo si ya hemos trabajado en plataformas como Windows Phone o iOS.

Esto me llevó a hacer el año pasado un curso de Coursera sobre Desarrollo de aplicaciones para Android, y, con lo aprendido, hacer mi primera aplicación. En este artículo cuento mi experiencia desarrollando la misma, así como las herramientas y los recursos utilizados en este primer viaje por el ecosistema Android.

Descarga The Time Box desde Google Play

La aplicación

The Time Box es una mezcla entre lista de tareas y cronómetro, con opción de poder agregar manualmente las horas y minutos transcurridos de la actividad deseadas. Este es el aspecto que ha tenido desde la primera vez que tuve algo “depurable” hasta la versión actualmente disponible en la tienda:

Presentation1

Tras la primera versión, Sergio Moya, compañero de aventuras, me sugirió utilizar material design, y gracias a las guías disponibles y a las opciones de compatibilidad con terminales antiguos, pude adaptar la mayor parte del diseño sin demasiados problemas.

Lenguaje

Para programar en android podemos utilizar Java, o desde algunas versiones C++ para trabajo intensivo de procesador, como juegos. También podemos utilizar otros lenguajes que compilen a la VM como es el caso de Clojure, Scala o Kotlin de Jetbrains, siendo este último una alternativa interesante, ya que se trata de un lenguaje de más alto nivel, orientado a objetos y dinámico. Tras probarlo durante un par de iteraciones volví a Java, aunque no descarto utilizarlo en un futuro.

Arquitectura

architecture_app

La aplicación cuenta con tres vistas (actividades como se denominan en Android), un controlador de tabs, dos fragmentos personalizados y varias clases auxiliares para el manejo de los datos.

Componentes externos

La aplicación emplea dos componentes adicionales:

  • Joda-time: Aporta una mejor gestión de fechas y horas a las clases existentes de Java
  • SugarORM: Un mapper relacional muy sencillo que permite tener una pequeña base de datos sqlite donde almacenar los datos, que además cuenta con soporte para migraciones.

Testing

Actualmente el proyecto cuenta con algunos tests unitarios, y la idea es que los tests vayan aumentando a medida que se necesite más funcionalidad para evitar pruebas manuales, que al final son las que más tiempo consumen.

Herramientas

Las herramientas para el desarrollo Android también han mejorado mucho últimamente, podemos utilizar Eclipse con el plugin ADT, o también podemos emplear Android Studio, basado en InteliJ IDEA y soportado oficialmente por Google.

Para poder depurar nuestra aplicación, lo mejor y más rápido es contar con un dispositivo físico, o varios, ya que hemos de probar con diferentes versiones. Podemos además recurrir a emuladores como Genymotion, que al estar basado en VirtualBox, nos proporciona una máquina virtual muy rápida y fluida, lejos del pobre rendimiento que proporciona el emulador oficial.

Publicación y subida

Para poder publicar en Google Play (de momento no he considerado otros marketplaces como el de Amazon, aunque están en mi lista) necesitamos pagar la cuota de inscripción, que son $25 y que nos dan acceso permanente, sin necesidad de renovar. Como la aplicación es gratuita y (de momento) no usa publicidad, el proceso de registro es bastante simple. Una vez que tenemos la aplicación lista, basta con generar el APK desde nuestro editor, subirlo a la plataforma y llenar la información relativa al título, descripción, así como algunas imágenes.

Una de las cosas más interesantes que ofrece la plataforma son las opciones de Alpha y Beta, ya que podemos tener hasta tres versiones subidas de la aplicación al mismo tiempo para tres grupos distintos de usuarios sin tener que recurrir a servicios externos.

Conclusiones

Esta pequeña utilidad que espero seguir mejorando con el tiempo me ha permitido tener un primer contacto con la plataforma y reencontrarme con Java después de varios años. Es una experiencia muy interesante y aporta una visión adicional si trabajas con varias plataformas.

Descarga The Time Box desde Google Play

Recursos

Material Design

Trilo: Viaja como un hacker

View this post in english here

Reconozco que me encanta viajar, y me encanta programar cosas interesantes (aunque inútiles). Tenía desde hace tiempo la idea de hacer un blog sobre viajes. Sin embargo, hacer una cuenta en WordPress.com para hacer “otro blog sobre viajes” parecía algo aburrido, así que, con la tarde del domingo por delante, me hice un pequeño esquema de qué quería:

  • Tener una lista de los países visitados, mostrar las banderas y mostrar para cada país el número de ciudades vistas.
  • Para cada país, tener en el mapa las ciudades en las que he estado.
  • Para cada ciudad, tener una lista de los sitios recomendados, y mostrarlos (como no) en un mapa.

El resultado de esto es Trilo:
trilo_home

La pagina inicial está formada por dos conjuntos de mapas, uno mundial y otro a escala europea. Estos mapas están creados usando Google Chart Tools.

Las banderas, por otra parte, se obtienen de un servicio web a partir del código de dos dígitos


Para ello necesitamos las iniciales de los países, que nos servirán además de categoría.

trilo_country

En la página de países, se muestra la bandera obtenida anteriormente, un mapa ampliado con cada una de las ciudades, y los enlaces a las mismas.

trilo_city

A nivel de ciudad, se genera un mapa estático con la API de Google Maps a partir del nombre de la misma y de los elementos recomendados. Además se enlaza con TripAdvisor y la Wikipedia para más enlaces.

El sistema está basado en Jekyll, un sistema escrito en Ruby que permite generar páginas estáticas a partir de plantillas, código y un poquito de magia. Además, ha resultado interesante acceder a algunos servicios y salirse un poco de algo relacionado con informática.

El proyecto está disponible (y alojado) en http://rlbisbe.github.com/trilo/

TinyBmp, un pequeño programa para generar imágenes

View this post in english here

En la oficina compramos una pantalla LED (como las que nos podemos encontrar en el metro que nos anuncia un nuevo tren) para controlar el estado de las releases y saber cual es la última publicada.

La pantalla es una matriz de 21×7, asi que tampoco da para demasiado. Soporta imágenes BMP, así que tras algunas pruebas con Paint.net ví que lo mejor era hacer una aplicación para ello, y es lo que puedes encontrar en TinyBmp:

Contiene 3 proyectos en C#, una biblioteca de clases, una aplicación windows y una aplicación de consola, para poder automatizar también la generación de estas imágenes cada vez que publiquemos una release.

Este es el aspecto de la herramienta:

TinyBmpSample

Y este es el aspecto de la imagen generada, 21×7 en formato de mapa de bits (bmp):

foo

Se pueden generar imágenes con C# a partir de texto, pero es una estrategia que no funciona demasiado bien a baja resolución ya que se distorsionan los números, por ello he generado los números a mano, teniendo para ello una matriz de 2×4 para cada número (sí, pixel a pixel :) ), por ello pasan cosas como que el 0 y el 8 están representados por el mismo caracter, aunque sigo buscando alguna manera de solucionarlo.

El código está disponible en: https://github.com/rlbisbe/tinybmp bajo licencia MIT.

Se aceptan críticas, sugerencias y pull requests.

Nuevo proyecto: MVCTask

Hoy he empezado mi primera contribución a CodePlex, un gestor de tareas bastante simplón, y (por el momento) monousuario, aunque personalmente me resuelve mis problemas ;).

Motivación:

Quiero una manera sencilla de gestionar mis tareas, sé que hay soluciones en el mercado muy buenas y muy completas, pero quería hacer algo para mí, y además, era una buena oportunidad para grear un proyecto en Codeplex, aprovechar el Team Foundation Server que proporciona la plataforma, y aprender más ASP.net que es el objetivo último.

Detalles:

La primera versión publicada (0.1) tiene la siguiente estructura:

Tareas

  • Descripcion
  • Detalles
  • Categoría
  • Estado

Tanto las categorías como los estados son plenamente configurables por el usuario, y cualquier crítica o características adicionales será agradecida.

La aplicación está escrita en ASP.net, y el código fuente está disponible en http://mvctask.codeplex.com/