1. Estetoscopio
Envía mensajes de depuración a tu móvil desde
tus aplicaciones
Una aplicación nativa android desarrollada durante el curso
Developing Android Apps - GDD Tenerife - 2015
https://www.udacity.com/course/developing-android-apps--ud853
Juan Ignacio Rodríguez de León
@jileon en twitter
2. ¿Qué hace?
Muestra en pantalla mensajes
enviados por UDP
Los mensajes tienes niveles, al
estilo de los mensajes de Log
Los mensajes están pensados
para ayudar en la depuración de
código, cuando no puedes
hacer un print (Por ejemplo,
desarrollo en servidores)
4. Niveles de mensajes
Mensajes de tipo informativo (INFO)
Nivel de amenaza inexistente
Mensajes de aviso (WARNING)
Nivel de amenaza indeterminado: Puede que sea un
problema para ti, o quizá no. Tranquilidad
5. Niveles de mensajes
Mensajes de tipo informativo (INFO)
Nivel de amenaza inexistente
Mensajes de aviso (WARNING)
Nivel de amenaza indeterminado: Puede que sea un
problema para ti, o quizá no. Tranquilidad
Mensajes de error (ERROR)
La cosa pinta mal. Hay un problema y casi seguro
que es culpa tuya.
6. Niveles de mensajes
Mensajes de tipo informativo (INFO)
Nivel de amenaza inexistente
Mensajes de aviso (WARNING)
Nivel de amenaza indeterminado: Puede que sea un
problema para ti, o quizá no. Sigamos tranquilos
Mensajes de error (ERROR)
La cosa pinta mal. Hay un problema y casi seguro
que es culpa tuya.
Mensajes de pánico (PANIC)
Problemón. Algo ha ido catastróficamente mal.
Ponte las pilas.
7. ¿Cómo lo hace? (1/2)
• Instala un servicio. El servicio usa un Thread
para oír datagramas UDP en el puerto 31416
• Cuando llega un mensaje el servidor lo
almacena en una base de datos SQLite
• El servidor notifica a la actividad principal que
ha llegado un nuevo mensaje usando
LocalBroadcast
8. ¿Cómo lo hace? (2/2)
• En la actividad principal hay un
Adapter que vincula una
ListView con la base de datos
• Hay un CustomView que
muestra gráficamente la
proporción entre los niveles de
los mensajes que han llegado
Demasiado rojo
mala señal
9. A la hora de vincular el socket UDP, Android
te vincula a la dirección IP local, por lo que
no acepta conexiones desde otras máquinas.
Problemas encontrados
10. A la hora de vincular el socket UDP, Android
te vincula a la dirección IP local, por lo que
no acepta conexiones desde otras máquinas.
Problemas encontrados
Solución: Hay que indicar la dirección 0.0.0.0
cuando vinculamos el socket, para que este oiga
en cualquiera de las interfaces de red.
11. Pensaba que podía superarlo…
La verdad es que Odio a muerte no acabo de estar
cómodo programando en Java. Es un
inconveniente importante para desarrollar
aplicaciones Android
El auténtico problema
13. No hay razones de peso para que no se pueda
usar otros lenguajes que funcionen en la JVM.
Al principio probé con Scala como reemplazo.
Es posible hacerlo pero resulta complicado.
Conseguí compilar y ejecutar un “Hola, mundo”,
pero acabé a la una de la mañana, no muy
seguro de cómo lo había conseguido.*
La solución
* Estoy seguro de que personas más inteligentes que yo tendrán una experiencia
diferente y podrán hacerlo con facilidad. Scala es un lenguaje excelente. No se le
puede culpar por mi torpeza.
14. Con Groovy fue mucho más fácil. De hecho, la
aplicación está desarrollada enteramente en Groovy.
Groovy es un lenguaje con capacidad funcional,
dinámico y con muchísimas virtudes. Se integra muy
bien con Java. Mucho más cercano a mi experiencia,
que ahora mismo en un 90% de desarrollo en Python y
un 10% en Javascript.
Como en todo, hay ventajas e inconvenientes.
Groovy
15. Ventajas de Groovy
Casi* un superconjunto de Java. Los desarrolladores de
java tienen una curva de aprendizaje suave. Pueden usar
las nuevas capacidades poco a poco.
* Como siempre, el diablo está en los detalles. Pero son pocas las diferencias.
16. Ventajas de Groovy
Mucho más avanzado que Java: Clausuras, Intents,
programación funcional, dinámico vs estático,
metaclases, funciones virtuales y muchas cosas más
* Como siempre, el diablo está en los detalles. Pero son pocas las diferencias.
Casi* un superconjunto de Java. Los desarrolladores de
java tienen una curva de aprendizaje suave. Pueden usar
las nuevas capacidades poco a poco.
17. Ventajas de Groovy
Mucho más avanzado que Java: Clausuras, Intents,
programación funcional, dinámico vs estático,
metaclases, funciones virtuales y muchas cosas más
* Como siempre, el diablo está en los detalles. Pero son pocas las diferencias.
Casi* un superconjunto de Java. Los desarrolladores de
java tienen una curva de aprendizaje suave. Pueden usar
las nuevas capacidades poco a poco.
Relativamente fácil de conseguir que funcione con
Android Studio. Solo hay que tocar un fichero .gradle
18. Ventajas de Groovy
Mucho más avanzado que Java: Clausuras, Intents,
programación funcional, dinámico vs estático,
metaclases, funciones virtuales y muchas cosas más
* Como siempre, el diablo está en los detalles. Pero son pocas las diferencias.
Casi* un superconjunto de Java. Los desarrolladores de
java tienen una curva de aprendizaje suave. Pueden usar
las nuevas capacidades poco a poco.
Relativamente fácil de conseguir que funcione con
Android Studio. Solo hay que tocar un fichero .gradle
Menos niveles de abstracción. Menos código. Menos
objetos y clases. Más legibilidad.
19. Inconvenientes de Groovy
Hay un plugin de integración con Android Studio. Está
bien pero con algún defecto. Nada importante.
20. Inconvenientes de Groovy
Hay un
bien pero con algún defecto. Nada importante.
Al final es una librería más, así que aumentará el tamaño
del programa. Existen herramientas para esto.
21. Inconvenientes de Groovy
Hay un
bien pero con algún defecto. Nada importante.
Al final es una librería más, así que aumentará el tamaño
del programa. Existen herramientas para esto.
Hay que superar los límites mentales impuestos por
Java. Esto en realidad tendría que ir en ventajas
22. Inconvenientes de Groovy
Hay un
bien pero con algún defecto. Nada importante.
Al final es una librería más, así que aumentará el tamaño
del programa. Existen herramientas para esto.
Hay que superar los límites mentales impuestos por
Java. Esto e
El tipado dinámico puede ser una fuente de nuevos
errores (Pero programas usando tests, ¿Verdad?)
23. Inconvenientes de Groovy
Hay un
bien pero con algún defecto. Nada importante.
Al final es una librería más, así que aumentará el tamaño
del programa. Existen herramientas para esto.
Hay que superar los límites mentales impuestos por
Java. Esto e
El tipado dinámico puede ser una fuente de nuevos
errores (Pero programas usando tests, ¿Verdad?)
El logo de Groovy es horrible. No, en serio. ¿En qué
estaban pensando?
24. Inconvenientes de Groovy
Hay un plugin de integración con Android Studio. Está
bien pero con algún defecto. Nada importante.
Al final es una librería más, así que aumentará el tamaño
del programa. Existe herramientas para esto.
Hay que superar los límites mentales impuestos por
Java. Esto e
El tipado dinámico puede ser una fuente de nuevos
errores (Pero programas usando tests, ¿Verdad?)
El logo de Groovy es horrible. No, en serio. ¿En qué
estaban pensando?
25. Qué he aprendido
Groovy Mola. Mucho.
Android (4%) (Antes: 2%)
Groovy (33%) (Antes: 0%)
El desarrollo en Android es muy lento, por
culpa de tener que probar todo en un
emulador.
Todo lo que puedas desarrollar y testear fuera
del emulador va en tu beneficio (Pero no es fácil)