miércoles, noviembre 19, 2014

Podcasts/Talks 2014 30 Oct - 19 Nov

This time I have a good list of interesting talks:-)
  • Polyglot Data (Greg Young) Good tips related to persistence, entities, events... Good explanation about the information lost when we only store the actual state of an entitiy instead the stream of events of the entity. There is no "best" database, only "best database for" some use cases. The benefits of separate bounded contexts and decide wich databases are the bests for this bounded context... Separation of reads from writes (CQRS). Lot of good stuff.
  • Virtual Machines, JavaScript and Assembler (Scott_Hanselman) Very fun talk. Also gives an interesting overview of current technology (cloud, web, etc.).
  • Our Responsibility to Defeat Mass Surveillance (Erik Dörnenburg and Martin Fowler) Inspirational talk about some of our responsibilities as developers.
  • Embracing Uncertainty (Dan North) Very interesting talk to be aware of our aversion to uncertainty. We usualy make bad decisions in order to avoid the feeling of uncertainty.
  • Are We There Yet? (Rich Hickey) Talk about the functional programming using immutable data structures and the benefits if this programming for systems requiring high concurrency.
  • Consistency without consensus in production systems (Peter Bourgon) Very practical talk, about real systems using eventual consistency and a good/practical explanation about  CRDT data types.

miércoles, noviembre 12, 2014

Presentación Python Herencia vs Composición (Luke soy tu padre) PyConES 2014

Estas son las diapositivas de la charla corta que di en la PyConES 2014 (Zaragoza) sobre Herencia vs Composición en Python:

Por si alguien se pregunta por qué no hice referencia al Liskov substitution principle  o por qué no di más ejemplos, tengo que decir que la charla duraba 10 minutos y la di a toda velocidad... Tanto que no se ni si me hice entender :-)

Cualquier feedback sobre el contenido de la charla o la forma de transmitir será muy bienvenida...

Articulos relacionados:

viernes, noviembre 07, 2014

Taller Diseño modular dirigido por pruebas


Preparado por: Nestor SalcedaAlberto Perez (Apa)Jaime Gilyo mismo (eferro)
Basado en el taller creado por  Javier AceroGuillermo Pascual

Aprenderemos a crear una aplicación en la que el negocio sea el centro y que la arquitectura emerja del propio proceso de creación (por supuesto usando TDD).

Enunciado:

Vamos a desarrollar el equivalente Maño de twitter, llamado "Cós". Podéis ver el enunciado completo en: https://github.com/aleasoluciones/pycones2014

Restricciones

  • Haz lo más simple que pueda funcionar
  • Escribe el mejor código que puedas
  • No hagas más de lo que pide la funcionalidad
  • No introduzcas infraestructura si la funcionalidad no lo pide explícitamente
  • No dependas de librerías si la funcionalidad no lo pide explícitamente

Flujo

  • Evalúa el impacto de cada funcionalidad
  • Realiza los cambios que necesites para que la funcionalidad sea fácil de introducir
  • Introduce la funcionalidad

Forma de trabajo:

  • Trabajaremos en parejas, cada pareja con un portátil
  • Estaremos para ayudar/responder dudas cuatro personas
  • Haremos iteraciones

Requisitos:

  • Portátil python 2.7/3.x virtualenv pip
  • Conexión internet
Si quieres preparar el virtualenv usaremos las siguientes librerías:
  • expects
  • mamba
  • doublex (Puede no ser necesario)
  • librería http (Tornado, Flask, etc.)
  • librería para persistencia (Pickle, durus, redis, sqlite, mysql, etc.)

Ejemplos de soluciones:

(Si puedes no verlas hasta después, mejor)


Sabado 8 a las 16:00, Sala4




viernes, octubre 31, 2014

Verbos vs Nombres



Flujo análisis (continuo) en un proyecto
  • Centrar conversaciones en identificar comportamientos (behaviours). Intentamos identificar acciones, verbos, flujos, eventos. Viene fenomenal para OOP centrado en casos de uso o para un enfoque DDD y flujos de negocio complicados.
  • Centrar conversaciones en identificar comportamientos concurrentes en el sistema. Nos obliga a identificar relaciones entre esos comportamientos y nos ayuda a hacer un diseño escalable y fácilmente implementable mediante servicios independientes que encapsulan estado y que se comunican mediante mensajes (perfecto para implementaciones con Actores, Pipelines, microservicios, etc.)
Como se puede ver estos dos enfoques se centran en las interacciones de los usuarios con nuestro sistema o las acciones del propio sistema (Verbos) y  no tanto en las entidades con las que trabaja (Nombres)
Sin embargo el análisis más típico que se suele hacer en OOP (mal entendida por supuesto) se centra en identificar primero las entidades, perdiendo el contexto de las interacciones (mensajes, flujo, reglas, etc...)  derivando, no necesariamente, pero si típicamente, en modelos anémicos y pobres.

Conclusión:

Valoramos la identificación de las entidades (Nombres) con las que trabaja nuestro sistema, pero valoramos mucho más la identificación de los comportamientos (Verbos) que definen cómo interactuamos con nuestro sistema y qué tareas facilita.

Recordemos que los clientes NO quieren software/sistemas, quieren facilitar sus tareas o resolver sus problemas.

Nota adicional:

Este análisis de negocio se puede hacer a distintos niveles en el sistema, por lo que este enfoque de centrarnos en los verbos, nos puede servir para identificar servicios de nuestro sistema o eventos de negocio, o en un nivel mucho más cercano a una aplicación concreta para poder identificar los hilos de ejecución concurrentes o orientar el diseño hacia un sistema más reactivo.

Podcasts/Talks 2014 24-30 Oct

These are the most interesting talks I saw these last days:
  • Life is easy. Why do we make it so hard? Jon Jandai at TEDxDoiSuthep Inspirational talk
  • RubyRogues 178 Refactoring Ruby with Martin Fowler Quite entertaining episode with some interesting explanations/points about refactoring/reestructuring and the perverted use of the "refactoring" term.
  • The art of destroying software Greg Young Some good points about the easy evolution of a system when the services are small enough to be understandables and to be rewritten without fear. 
  • Crafted Design Sandro Mancuso Very interesting talk about architecture, general desing of an application. Very aligned with the DDD movement and the classic OOP architectures without framework coupling.
  • The Next Decade of Agile Software Development J. B. Rainsberger  Reflexive talk about the agile message, the (real) impact, the misunderstanding of the message and our attitudes and practices. An opportunity to reflect.

sábado, octubre 25, 2014

TDD/BDD práctico para aplicaciones con dominio rico / scbcn14



Este domingo en la Barcelona Software Craftmanship 2014, Nestor y yo (@eferro) llevamos una sesión en la que queriamos obtener feedback sobre el flujo de trabajo con TDD que estamos haciendo en Alea Soluciones.
La sesión es una evolución de la que presentamos en la AOS de Valladolid (de tests unitarios de clases a tests untarios de funcionalidad) y las slides de la presentación que usamos están en:
Por supuesto las slides sin contexto son un poco densas y no aportan mucho, pero se grabo la sesión por lo que en cuanto tenga el enlace actualizaré el post.

Creo que a la gente les aporto algunas cosillas y lo mejor fue que obtuvimos un feedback muy bueno y se genero un debate que nos ha enriquecido muchísimo...

Muchas gracias a todos los que participasteis, ni os imagináis lo valioso que es el feedback Gracias.

Referencias: