La experiencia de desarrollar una App Android en mi tiempo libre
Después de volver de Ecuador en donde estuve trabajando intensamente en un proyecto que me absorbía casi todo el tiempo decidí tomarme un descanso. En ese tiempo pensé en empezar a aprender a desarrollar apps en Android así que me puse a hojear la documentación oficial respecto al diseño y posteriormente empecé a hacer los ejemplitos que había en la documentación técnica. Entonces me dije, ¿por qué no intentas poner en práctica todo lo que vayas aprendiendo en una aplicación que tenga una utilidad real?, y así es como nació Peak Hour.
La primera versión era realmente sencilla pero me sirvió por un lado para aprender los conceptos básicos de Android (Activities, ciclo de vida de las mismas, tantear el IDE que por entonces decidí empezar con Eclipse aunque poco después migré a Android Studio, notificaciones, etc) y por otro tantear el mercado de apps y concretamente la de gestión de Pico y Placa y transporte en general. Estuve jugando con el código un par de meses o tres y para principios de 2015 ya tenía algo que más o menos funcionaba, el problema era que desde que había empezado a trabajar en Planeta Huerto no me quedaba mucho tiempo libre por lo que no fue hasta febrero de 2015 que presenté la app a mis compañeros de Ecuador.
La primera sensación fue decepcionante, a pesar que cuando estuve en Ecuador era muy cotidiano preguntarse entre los compañeros a quién le tocaba Pico y Placa, cuando se la envié a la gente de allí casi nadie la instaló, creo que no les parecía muy útil y eso me hizo replantearme si valía la pena seguir mejorándola. Después de este chasco la tuve medio abandonada durante unos cuantos meses, 5 o 6, en los que sólo hice un par de arreglos y poco más. En esos meses aproveché para hacer un par de cursos MOOC que me ayudaron mucho a entender como está diseñado Android, aprender muchísimo sobre todo de los patrones de diseño que utiliza el sistema, y detectar los problemas que tenía mi app y ver los errores que había cometido durante mi primer abordaje. Ahí es cuando dije, vamos a hacerlo un poco mejor y así también afianzas las cosas que has aprendido en los cursos. También me planteé que si quiero que la app sea utilizada masivamente tiene que ser más flexible y soportar las reglas de más ciudades a parte de Quito y así es como surgieró la versión 0.2 en las que se añadió el soporte multi-vehículo y la versión 0.3 en la que rediseñé completamente el manejo de reglas para que fuera muy sencillo añadir nuevas ciudades.
Estos dos cambios han resultado ser fundamentales, a partir de ese momento empezamos a crecer horizontalmente o lo que es lo mismo, se empezó a utilizar la aplicación en muchos otros sitios como Colombia, Brasil, Bolivia o Costa Rica, pero sobre todo en Colombia que es actualmente el mercado principal de la app. Es muy gratificante pensar que algo que tu has creado le está siendo útil a casi 300 personas, y eso es lo que te impulsa a seguir adelante. Ya os digo yo que por el dinero no es, de momento la app da para tomarse un poleo al mes y poco más, pero saber que toda esa gente no olvida su Pico y Placa y que seguramente se ha salvado de alguna multa gracias a la app, la verdad es que te alegra el día.
¿Y qué pasará con la app en el futuro?, pues de momento tengo planificados un par de cambios que ya tengo medio implementados y dependiendo de como vaya la cosa y si tengo tiempo hay muchas ideas en una libreta que parece que va siendo hora de ir sacándolas.
Ya os iré contando.
Disponible el código fuente de Peak Hour 0.1.1
He publicado el código fuente de Peak Hour 0.1.1, lo podéis encontrar en github. En el siguiente vídeo explico los cambios que se realizaron para esta versión en el código fuente.
https://youtu.be/ihzOn1RWFwE
Recordar que tiene una licencia GPL 3.
Cómo nunca debería diseñarse una aplicación Android
He liberado el código fuente de Peak Hour 0.1 y lo pongo como ejemplo de cómo nunca debería diseñarse una aplicación Android. Para la versión 0.2 se rediseñó completamente la app pero eso ya lo veremos cuando vaya liberando las siguientes versiones.
La licencia de Peak Hour es GPL 3, podéis echarle un ojo al código en github. Os animo a que me hagáis preguntas tanto de la parte de diseño como de algún aspecto concreto del código, estaré encantado de responderos.
https://youtu.be/JmzYjVeOQ_I
Cheli
Ponencia Software Design Patterns on Android – Pedro Vicente Gómez Sánchez
Razones por las que la gente que trabaja con ordenadores parece que tengan mucho tiempo libre
Instalar App Android en Tarjeta SD Externa
https://youtu.be/TYUg4DkJboE
Recordar, los 3 valores posibles son:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:installLocation="preferExternal|auto|internalOnly"
... >
preferExternal: Se instalará en la memoria SD externa excepto en el caso que no haya espacio suficiente disponible.
auto: Se instalará en la memoria interna o externa en función de varios factores de configuración de nuestro dispositivo.
internalOnly: Es la opción por defecto. Se indica explícitamente que la aplicación se instalará en la memoria interna.
Cheli
Intent y PendingIntent en Android
Es la hora de programar
97 cosas que todo programador debería saber
Uno de esos maravillosos libros que, parafraseando el título «Cualquier Programador debería leer». Estas son las 97:
- Actúa con prudencia, por Seb Rose
- Adueñate (y Refactoriza) la compilación, por Steve Berczuk
- Antes de Refactorizar, por Rajith Attapattu
- Aplica los principios de la programación funcional, por Edward Garson
- Aprende a decir “Hola, Mundo”, por Thomas Guest
- Aprende a hacer estimaciones, por Giovanni Asproni
- Aprende un lenguaje extranjero, por Klaus Marquardt
- Aprende a usar las herramientas de línea de comandos, por Carroll Robinson
- Aprendiendo continuamente, por Clint Shank
- Automatiza el estándar de codificación, por Filip van Laenen
- Averigua qué haría el usuario (tú no eres el usuario), por Giles Colborne
- La belleza está en la simplicidad, por Jørn Ølmheim
- El camino al mejor rendimiento está lleno de sucias bombas de código, por Kirk Pepperdine
- Codificando con la razón, por Yechiel Kimchi
- Codifica en el lenguaje del dominio, por Dan North
- Codificación Ubuntu para tus amigos, por Aslam Khan
- El código es diseño, por Ryan Brush
- Comenta sólo lo que el código no dice, por Kevlin Henney
- Un comentario acerca de los comentarios, por Cal Evans
- ¿Cómo usar un Gestor de Errores?, por Matt Doar
- Conoce bien más de dos lenguajes de programación, por Russel Winder
- Conoce tu próximo Commit, por Dan Bergh Johnsson
- Conoce tu IDE, por Heinz Kabutz
- Conoce tus límites, por Greg Colvin
- La conveniencia no es una -bilidad, por Gregor Hohpe
- Cuando Programadores y Testers colaboran, por Janet Gregory
- Ten cuidado al compartir, por Udi Dahan
- Cumple tus ambiciones con Software Libre, por Richard Monson-Haefel
- Los grandes datos interconectados pertenecen a una base de datos, por Diomidis Spinellis
- Deja que tu proyecto hable por sí mismo, por Daniel Lindner
- El diseño del código sí importa, por Steve Freeman
- Distingue excepciones de Negocio de las excepciones Técnicas, por Dan Bergh Johnsson
- Dos cabezas son a menudo mejores que una, por Adrian Wible
- Dos fallos pueden hacer un acierto (y es difícil de arreglar), por Allan Kelly
- Lenguajes Específicos del Dominio (DSL), por Michael Hunger
- El mito del Gurú, por Ryan Brush
- El Programador Profesional, por Uncle Bob
- El trabajo duro no paga, por Olve Maudal
- Encapsula Comportamiento, no sólo Estado, por Einar Landre
- Escoge tus herramientas con cuidado, por Giovanni Asproni
- Escribe código como si tuvieras que mantenerlo por el resto de tu vida, por Yuriy Zubarev
- Escribe pequeñas funciones usando ejemplos, por Keith Braithwaite
- Escribe las pruebas para las personas, por Gerard Meszaros
- Evita errores, por Giles Colborne
- Haz lo invisible más visible, por Jon Jagger
- Haz mucha práctica deliberada, por Jon Jagger
- Las herramientas Unix son tus amigas, por Diomidis Spinellis
- Implementa rápido y con frecuencia, por Steve Berczuk
- Inicia con un Sí, por Alex Miller
- Instalame, por Marcus Baker
- Haz las Interfaces fáciles de usar correctamente y difíciles de usar incorrectamente, por Scott Meyers
- La comunicación entre procesos afecta el tiempo de respuesta de la aplicación, por Randy Stafford
- Lee el código, por Karianne Berg
- Lee las humanidades, por Keith Braithwaite
- El linker no es un programa mágico, por Walter Bright
- La longevidad de las soluciones provisionales, por Klaus Marquardt
- Mantén limpia la compilación, por Johannes Brodwall
- Mejora el código quitándolo, por Pete Goodliffe
- Mensaje al futuro, por Linda Rising
- No sólo aprendas el lenguaje, entiende su cultura, por Anders Norås
- No claves tu programa en la posición vertical, por Verity Stob
- No confíes en el “Aquí sucede la magia”, por AlanGriffiths
- ¡No ignores ese error!, por Pete Goodliffe
- No seas lindo con tus datos de prueba, por Rod Begbie
- No te repitas, por Steve Smith
- No tengas miedo de romper cosas, por Mike Lewis
- ¡No toques ese código!, por Cal Evans
- Los números de punto flotante no son reales, por Chuck Allison
- Oportunidades perdidas del Polimorfismo, por Kirk Pepperdine
- El paso de mensajes lleva a una mejor escalabilidad en sistemas paralelos, por Russel Winder
- Pensando en estados, por Niclas Nilsson
- Pon todo bajo Control de Versiones, por Diomidis Spinellis
- Da preferencia a tipos de Dominio Específico que los tipos primitivos, por Einar Landre
- Preocúpate por el código, por Pete Goodliffe
- El Principio de Responsabilidad Única, por Uncle Bob
- Programa en pareja y siente el flujo, por Gudny Hauknes, Ann Katrin Gagnat, y Kari Røssland
- Prueba el comportamiento requerido, no el comportamiento incidental, por Kevlin Henney
- Prueba precisa y concretamente, por Kevlin Henney
- Haz pruebas mientras duermes (y los fines de semana), por Rajith Attapattu
- Las pruebas son el rigor ingenieril del desarrollo de software, por Neal Ford
- Los registros detallados perturbarán tu sueño, por Johannes Brodwall
- La Regla Boy Scout, por Uncle Bob
- La regla de oro del diseño de API, por Michael Feathers
- Reinventa la rueda frecuentemente, por Jason P Sage
- Resiste la tentación del patrón Singleton, por Sam Saariste
- Retrocede y Automatiza, Automatiza, Automatiza, por Cay Horstmann
- Primero revisa tu código antes de buscar culpar a otros, por Allan Kelly
- Revisiones de código, por Mattias Karlsson
- La Simplicidad viene de la Reducción, por Paul W. Homer
- Sólo el código dice la verdad, por Peter Sommerlad
- Suelta el ratón y aléjate del teclado, por Cay Horstmann
- Noticias raras – Los testers son tus amigos, por Burk Hufnagel
- Toma ventaja de las herramientas de análisis de código, por Sarah Mount
- Tus clientes no quieren decir lo que dicen, por Nate Jackson
- Un binario, por Steve Freeman
- Usa el algoritmo y estructura de datos correcto, por JC van Winkel
- El WET dispersa los cuellos de botella en el rendimiento, por Kirk Pepperdine
Cheli
