Los pasados 6, 7 y 8 de marzo tuve la oportunidad de asistir gracias a MadridJUG a la QCon London 2013 en representación de idealista.com dónde soy el responsable de los proyectos del api, i+d y aplicaciones móviles.
Hace tiempo que vengo siguiendo las QCon a través de infoQ, viendo charlas sueltas de los ponentes de referencia en el desarrollo de software y lo cierto es que me costó muchísimo crearme una agenda, había mucha variedad de charlas (demasiada) y algunas de las que me interesaban coincidían a la misma hora. Algo curioso de esta conferencia es la cantidad de breaks que hay, 20/30 minutos entre charlas para tomar un café, picar algo, hablar con los sponsors y, sea dicho de paso, pillar alguna camisetilla o souvenir vario de los que tenían en los stands.
Quitando el track de banking, le dí a todos los palos: alta disponibilidad, java, APIs, mobile, agile, performance... con temas tan diversos es muy difícil hacer un resumen muy completo de la QCon, así que os dejo el resumen de las charlas que me parecieron más interesantes.
Keynotes de Barbara Liskov y Ward Cunningham
Si os soy sincero, a pesar de la categoría de los ponentes y el hecho de escuchar a dos leyendas del software, lo más interesante de estas dos Keynotes fue el resumen que hizo Heather Willems (@HeatherWillems) en tiempo real, justo ahora ando leyendo un libro sobre Visual Thinking y me impresionó bastante ver como Heather iba enlazando las ideas más relevantes con sus dibujos.
Keynote: Instantly Better Presentations
Damian Conway nos demostró sus dotes comunicadoras con una ponencia excelente, muy divertida y con buenos consejos para poder mejorar nuestras presentaciones. Damian enfocó la presentación a charlas técnicas con una parte dedicada a cómo mostrar código con animaciones en tu presentación para que la audiencia lo entienda bien, por ejemplo si muestras un refactor, es mucho más fácil de comprender si lo haces con una animación entre el resultado inicial y el final.
Otros consejos que nos dio son:
-
Habla de lo que te apasiona o dominas, tienes que transmitir seguridad a la audiencia
-
Cuenta una historia para que tú y tu audiencia recordéis mejor las cosas, es muy importante saber enlazar bien todos los temas para que nadie pierda el hilo
-
Cambia el ?¿Qué debería contar?? por un ?de lo que sé, ¿Qué puedo contar??, anota todo lo que sepas del tema y selecciona lo que quieras contar
-
Haz que tus slides sean lo más simples posibles, si no la gente leerá en vez de escucharte
-
responde siempre a sus preguntas, si no te da tiempo durante la presentación hazlo después o aprovecha los breaks
-
Transforma el miedo a realizar la presentación en energía para hacerla
Web Development: You're Doing it Wrong
Stefan Tikov (@stilkov) , CEO de innoQ, nos habló de ROCA (Resource-oriented client arquitecture) una serie de recomendaciones sobre lo que se entiende por un buen o “decente” (como reza en roca style) Web frontend design.
Puedes echar un ojo o contribuir en su github
Más información | slides
Highly Available near real-time Data Distribution beyond the network edge
Si algo tuvieron en común las ponencias sobre alta disponibilidad y rendimiento es el Benchmark Driven Development o cómo hay que incluir tests de rendimiento dentro de tu batería de tests, ya sean hechos a mano (incluir tiempos de ejecución máximos en tus tests, creando bucles para hacer stress testing, test de concurrencia...) o bien incluir los tests que herramientas de terceros te proporcionan (como JMeter por ejemplo) y que se ejecuten en tu servidor de integración continua.
Darach Ennis (@darachennis) dio algunas recomendaciones para la arquitectura de sistemas distribuidos, lógicamente ninguna “receta mágica”, la principal recomendación es mantenerlo lo más simple posible, como bien dijo en esta charla “simple is hard: so relax, let it fail. Let live and let’s learn”.
Más información | slides
Functional Reactive Programming in the Netflix API
Si alguien ha tenido que enfrentarse a problemas de carga en el acceso a su API es Netflix, pero hasta que Ben Christensen (@benjchristensen) no dio cifras no me había hecho a la idea de la envergadura: han pasado de las 2 millones de peticiones por día a su API de 2010 a 2.000 millones/día (flipa!), esto deja que los cerca de 35 millones de peticiones por mes que tenemos al API de idealista.com parezcan calderilla (35 millones de peticiones de los que estoy orgulloso a pesar de este baño de humildad).
¿El secreto para aguantar esta cantidad ingente de peticiones?, su API no está basada en llamadas bloqueantes o síncronas sobre las que hay que esperar una respuesta, si no que lo hacen mediante suscripciones a llamadas concretas y respuestas asíncronas. De esta manera un cliente se hace Observer de una llamada concreta y cuando esta tiene los datos se los envía al cliente en cuestión.
Comentó dos librerías que utilizan:
-
Hystrix : librería para controlar interaciones entre sistemas distribuidos que proporciona una gran latencia y tolerancia a fallos
-
RxJava : implementación de las reactive extensions, es una librería para hacer llamadas asíncronas y programas basados en eventos utilizando secuencias observables para la máquina virtual.
Más información | slides
Performance Testing Java Applications
Al igual que en la ponencia sobre alta escalabilidad de la que os he hablado antes, Martin Thompson (@mjpt777) dejó caer un par de veces el concepto de Benchmark driven development. Estuvo hablando de los tipos de test de rendimiento que hay y de las buenas prácticas a la hora de llevarlos a cabo.
Sobre lo que hizo más hincapié es sobre la necesidad de concienciar de que todo el mundo es responsable del “performance testing”, por lo que debe incorporar a su flujo de trabajo los test (red, green, debug, profile, refactor...) o pruebas de rendimiento necesarias para que el rendimiento sea el mejor posible, rompiendo incluso el build si la aplicación no tiene un performance óptimo.
Para mí fue una de las ponencias más interesantes de la QCon, os recomiendo que veais el vídeo de la charla.
Más información | slides
New capabilities of HTML5 browsers
Esta charla la dio Maximiliano Firtman (@firt) que entiende “un poquito” sobre el tema, mantiene http://mobilehtml5.org/ ,donde muestra compatibilidades de html5 con navegadores de móviles y tablets, y ha escrito “algún que otro” libro sobre el tema.
Habló de los problemas, por todos conocidos, que tenemos para hacer que web se vea en los navegadores móviles: hay más de 200 navegadores diferentes y una ristra de versiones distintas de cada navegador, algunos no son lo que parecen (Chrome para iOS no es Chrome realmente), diferentes densidades de pantalla y resoluciones y las aplicaciones utilizan WebViews (js es 3 veces más lento en los WebViews).
Para enfrentarnos a estos problemas tenemos que apoyarnos en herramientas y buenas prácticas. Herramientas como emuladores o de debug remoto y buenas prácticas como el responsive design, mejora progresiva, no usar device detection, usar feature detection (no es lo mismo el navegador que tenía blackberry antes que el de BB10) y dedicar mucho tiempo a una buena arquitectura.
Más información | Slides
Testing iOS apps
El testing en aplicaciones es muy complicado, hay muchos factores que pueden influir en que tu aplicación falle en un momento dado: el dispositivo en el que se están ejecutando, la versión del sistema operativo que tenga el usuario instalada, si está jailbreakeao o no, la conexión, el performance de la aplicación, la memoria que usa, el almacenamiento, etc. etc. Quería saber que tipo de herramientas recomendaba el autor de Test-Driven iOS Development, Graham Lee (@secboffin)
Graham comentó que, aunque en su libró ha programado usando OCUnit, el porqué lo explica en su blog, últimamente solía usar CATCH.
Nos habló de varias herramientas para testear nuestras apps:
-
El mencionado CATCH
-
Calabash para automatizar los test de aceptación en las aplicaciones móviles, disponible para Android e iOS. Calabash soporta Cucumber, que nos permite hacer BDD usando lenguaje natural en nuestros tests
-
Automation instrument, herramienta que proporciona Apple para automatizar los test sobre nuestro interfaz.
-
Habló de las Hardware IO Tools for XCode y de como herramientas como el Network Link Conditioner nos pueden ayudar a simular escenarios reales.
Finalmente nos pasó esta perlitadentro del proyecto OWASP, para hacer aplicaciones más seguras. Más información | Video de la presentación
Como he comentado al principio, es una gran conferencia, con grandes ponentes y ponencias, pero para mi gusto con demasiado popurrí de charlas, me hubiese gustado un poco más de “foco”.
Tenéis algunas de las ponencias disponibles en infoQ, atentos porque las irán poniendo todas en su sitio web.
Sitio oficial | QCon London Más información | Agenda y slides
<p>
Dani Jiménez es responsable del área de i+d/labs y desarrollo móvil en idealista.com, dónde lleva trabajando 8 años, y cofundador y desarrollador de worldtaximeter.com, servicio creado en 2007. Lleva varios años inmerso en el desarrollo con metodologías ágiles, pasando por Scrum y Kanban.
Fruto de las tareas de innovación tecnológica ha participado activamente en la arquitectura de idealista.com, así como en el desarrollo de aplicaciones con spring framework, aplicaciones para dispositivos móviles y diversos procesos escalables.
Puedes seguirlo en Twitter: @danibto