Monday, July 07, 2014

Aprendiendo GoLang en la PiWeek

Este año, en el equipo estamos autogestionando nuestro presupuesto de formación por lo que cada uno que debe proponer los eventos/cursos/formaciones a las que quiere asistir al resto del equipo y entre todos se decide que es lo que se va ha hacer.

En mi caso, aparte del AOS 2014 de Valladolid, y seguramente de la PyCon.Es de Zaragoza, he decido que una buena forma de mejorar como desarrollador es aprender un nuevo lenguaje y que mejor forma de hacerlo que dentro del marco de la http://piweek.com/ organizada por Kaleidos.

Para los que no lo conozcan, la PiWeek (Personal Innovation Week) es una idea de la gente de Kaleidos que consiste en durante una semana parar de realizar trabajo "facturable" para la empresa y dedicarse a la innovación, pero desde un punto de vista personal, en el que cada uno decide sobre qué quiere trabajar.

Solo tiene dos reglas:
- Solo puedes usar software libre
- El viernes de esa semana tienes que mostrar el producto realizado durante esa semana

Así que esta semana que viene, dentro de la http://piweek.com intentaré aprender http://golang.org para la creación de servicios de red de alta concurrencia.
En concreto, voy a intentar desarrollar:


El objetivo es conseguir soltura de desarrollo en Go para entornos concurrentes y poner en práctica muchos de los patrones de concurrencia y comunicaciones vistos en Erlang, Go y los que actualmente suelo implementar en python.

Si alguien va ha participar en la http://piweek.com y comparte alguno de estos objetivos estaría encantado de que trabajásemos juntos, en los servicios propuestos u en otros, dado que el objetivo es el aprendizaje.

Otra opción podría ser un servicio de check de servicios http, pero eso dependerá de si hay alguien más interesado...

En el siguiente panel tengo la intención de gestionar los avances del producto
https://trello.com/b/JQxhbtfa/eferro-piweek2014


Gracias a Kaleidos por estas ideas geniales
 y sobre todo gracias por compartirlas....


Referencias:




Sunday, July 06, 2014

AOS 2014 Valladolid

El pasado 6 y 7 de junio asistí al AOS2014 en Valladolid, para el que no lo sepa el AOS (Agile Open Space) es una de las dos eventos a nivel nacional que realiza al año Agile Spain
Un Open Space es un formato de des-conferencia auto-organizada por los propios asistentes donde no está definida la agenda previamente.
Esta definición de Open Space que he leído en cachirulovalley deja claro que es una conferencia, en que todo lo que sucede es resultado de los propios asistentes. Por lo que aunque en este post voy a dejar mis sensaciones, cualquier cosa que refleje, para bien o para mal, es simplemente lo que tenia que pasar en ese momento y con esos asistentes.

Era mi tercer AOS, y como siempre es uno de los eventos que espero con más ilusión puesto que además de encantarme el formato de Open Space es uno de los eventos donde más se invita a interactuar y compartir y eso para mi es importante.

Resultado resumido:

Me lo pase genial. No aprendí mucho, aunque si que centre algunas ideas... Aproveche a salir un poco de mi zona de confort y apuntarme a dinámicas y sesiones en las que normalmente no me suelo apuntar.
Y también me di cuenta que cuando estoy con temas que me gustan soy bastante brasas (así que mis disculpas a los afectados :) )
Tanto el viaje, como el alojamiento fue en grupo y la experiencia fue muy enriquecedora. El alojamiento nos salio un poco rana, pero ese es otro tema.

Equipo desarrollo Alea Soluciones
(@apa42 @eferro @pasku1 @jaimegil @nestorsalceda)

Resultado un poco más pormenorizado:


  • Es el primer AOS en el que he podido disfrutar del ambiente de tarde/noche, en anteriores había viajado con un Bebe por lo que las prioridades eran otras :-)
  • Fuimos todo el equipo de desarrollo de Alea Soluciones y eso en si mismo es fantástico, por todo lo que se comparte y se debate.
  • Me gusto que al final hubiese algunas sesiones algo más técnicas y dedicadas a temas de desarrollo (aunque me sigue pareciendo que son insuficientes, cosa que me sorprende, puesto que la mayor parte de los asistentes se dedican al desarrollo de software, o eso dicen :-)  )
  • Como soy un desastre no apunte las sesiones a las que asisti, pero si que me acuerdo de las sensaciones que tuve...
  • Me gusto especialmente la sesión Daily standup el musical @giropa832 
  • También me gusto el taller sobre refactoring que organizaron @istepaniuk  @pasku1
  • Como siempre, recordé de cuanto comparto con muchos de los compañeros de profesión con los que me encuentro sistemáticamente en este tipo de eventos.
  • Por otro lado, la hospitalidad de los organizadores fue fantástica y se preocuparon de que tanto durante el evento como después del evento nos sintiésemos como en casa.
  • Presente la sesión "de test unitarios de clases a tests unitarios de funcionalidad" en la que compartimos como hacemos TDD actualmente y como fue la evolución. Creo que aporto ideas a los asistentes y por el debate generado, creo que gusto.

Y ahora para poder expresar las cosas que creo que son mejorables, el "juego de la perfección". 
Yo a este AOS 2014, le doy un 8, y para ser un 10, creo que debería mejorar lo siguiente:
  • El segundo día, el tiempo de las presentaciones de las sesiones se fue de las manos, por lo que fue un lio de votación.
  • Me falto la retrospectiva final y quizás alguna dinámica de cierre (aunque soy consciente lo difícil que es hacerlo con tanta gente). Pero un evento ágil sin retrospectiva, me resulta raro.
  • La comida de los dos días de picnic fue exactamente igual (un poco aburrido). Aunque me encanto la posibilidad del picnic que ayuda mucho a juntarse y charlar.
  • En algunos momentos el barullo era molesto, sobre todo cuando se intentaron hacer varias sesiones en el espacio principal.
  • Me faltaron más sesiones sobre técnicas de desarrollo, profesión, desarrollo de software, etc. (No solo de abrazar arboles vive el agilista :-) )

Muchísimas gracias a todos los organizadores 



Me quedo esperando con ganas al AOS del año que viene... 
Nos vemos por Asturias...







Thursday, June 05, 2014

De Test Unitarios de clases a Tests Unitarios de funcionalidad, un gran paso

Actualización:
He usado este post como base para una sesión en el AOS2014 y he actualizado el post para tener en cuenta alguno de los comentarios recibidos.

La aplicación se desarrolla usando TDD excepto en ciertas partes que tenemos identificadas y que cubrimos de otra forma. Durante este proceso hemos ido evolucionando en la forma de hacer TDD.

Antes tests unitarios considerando aislamiento por clases y a veces incluso testeando por métodos de esas clases... Mucho mock. Requiere tener algo claro el diseño, pero requiere poco "poder" cerebral :-)

Ejemplos:
test_detect_bridge_profile
test_detect_catv
test_deprovision_raise_error_when_snmp_exception_was_raised
test_deprovision_service_ports_with_provisioned_ont_from_repository
test_provision_raise_error_when_snmp_exception_was_raised
test_provision_service_ports

A este tipo de tests les llamamos Test Unitarios de clase.

Hemos evolucionado a tests unitarios mas centrados en las funcionalidades de negocio y que pueden usar una o mas clases. Al igual que los Tests Unitarios de clase, estos tests son independientes unos de otros y no tienen ningún tipo de dependencia externa (BD, Red, Eventos, etc).
A este tipo de tests les llamamos Test Unitarios de funcionalidad.

Ejemplos:
CPE status
  CPE Events History
    Acknowledge CPE status events
      ✓ it acknowledges cpe status events
    CPE Events with errors
      when ask for all the cpe status events with error
        ✓ it returns all the events with error
      when ask for the number of events with error of a cpe
        ✓ it returns the number of errors of the cpe
    Remove CPE status event history
      ✓ it removes the status history of a cpe
    history event recieved
      ✓ it registers the event
    when ask for events history returns only event limit
      ✓ it returns events bases to limit option
    when cpe goes offline
      ✓ it creates history events only when cpe status changed
      ✓ it removes cpe status
    when voip changes status
      ✓ it creates history events only when voip status changed
...

A continuación podemos ver un extracto de la implementación de estos tests:

Como se puede ver intentan en todo momento reflejar términos de negocio, en nuestro caso referidos a telecomunicaciones  y al estado de un CPE (Customer-premises equipment)

La entrada de este test es la lógica de negocio (cpe_status_service) que implementa el estado del CPE, para el que hemos usado dobles de pruebas sólo para los ports (Sistema de credenciales SIP (SipCredentials), Repositorios de persistencia (que en este caso están implementados en memoria (InMemoryCPEStatusRepository, InMemoryCPEStatusEventHistoryRepository)), y el reloj del sistema (Clock) que aunque no se suele tener en cuenta es claramente un port del sistema).

Por otro lado, existen otros tests, realizados también con TDD para cubrir implementaciones de los ports identificados (repositorios, SipCredentials, etc).


Actualmente todo el sistema esta cubierto por los siguientes test:
Tests unitarios
- Test Unitarios de clases 672 / 0.9s
- Test Unitarios de funcionalidad 135 / 0.45s

Test integracion:
- Total 166 12.89s
- De contrato 45 10s

Intentamos desarrollar siguiendo este orden
  1. Lógica de negocio
  2. Adaptadores
  3. Deliveries (servicio rest, interface cli, publicación/recepción de eventos y mensajes asíncronos)
Para desarrollar Lógica de negocio
  • Identificamos ports
  • TDD funcionalidades (dobles de pruebas/implementaciones simples para los ports) 
  • TDD sobre adaptadores (implementaciones de esos ports)
  • Test de contrato de librerías / tecnologías  (usados por esos adaptadores)
Evidentemente todo esto puede estar salpicados de spikes cuando queremos probar librerías, hacer bosquejos de adaptadores o cualquier otro tipo de prueba

Ahora mismo los deliveries no los probamos demasiado.

Conclusiones:

Ventajas de los Tests unitarios de funcionalidad con respecto a Test unitarios de clases
  • Nos cuesta mucho menos mantener el código (refactors mucho mejores)
  • Menor tendencia al sobre diseño
  • El código refleja mejor el dominio
  • Tenemos antes una solución completa que vamos refinando paulatinamente
Desventajas
  • Algunas veces cuesta identificar los ports y cuesta un poco empezar una funcionalidad
Para paliar esta desventaja,  algunas veces creamos mocks y tests de menor alcance que solo nos valen para ayudarnos a encajar las piezas (andamiaje) luego los borramos.

Podemos concluir que este cambio ha sido un gran avance para el equipo y ahora siempre que tenemos que añadir funcionalidades en una parte que tiene los tests unitarios por clases, lo primero que nos planteamos es si hacer nuevos tests por funcionalidades. A veces lo hacemos, otra veces no, depende del ROI.

Referencias:


Tuesday, May 06, 2014

Auto notas para explicar agilidad


Algunas veces compañeros de profesión me preguntan qué es eso de la agilidad, el scrum y esas otras cosas que han escuchado y muchas veces es difícil de explicar su esencia. 
Hace unos días vi en el blog de Henrik Kniberg una de las presentaciones que mejor describen la esencia de la agilidad.

Comparto aquí algunas de las slides como auto nota para cuando alguien me vuelva a hacer la pregunta :-)

Desarrollo Interactivo e Incremental


Construimos productos evolucionandolos


Equipos autogestionados y alineados con una visión


Fallamos, aprendemos, nos adaptamos



Y está forma de trabajar (y de ser) se basa en:


Lo importante son:
  • Los Principios
  • Los Valores
  • Cultura


Desconfia de cualquiera que te hable de agilidad y no comience por estos puntos :-)




Thursday, November 28, 2013

Conferencia PyConES 2013



Este fin de semana (23-24 Noviembre) pasado se ha celebrado PyConES, la primera edición de la versión en España de la PyCon

Una conferencia dedica en exclusiva al lenguaje Python, con tres tracks en paralelo (básico, avanzado, ciencia). Sin lugar a dudas ha tenido un éxito brutal, las entradas se agotaron según salieron y la organización ha sido impecable.

Ya esperando la PyConES 2014 :-)

Este año, nos hemos liado la manta a la cabeza y el equipo en el que trabajo preparamos/presentamos dos charlas para la conferencia. Por el "retorno" que hemos tenido de la gente, parece que han aportado valor y que han suscitado algo de debate :-D

Aquí tenéis los enlaces de las presentaciones que usamos:


Las presentaciones las creamos entre todo el equipo de desarrollo @apa42 @pasku1 @nestorsalceda y yo mismo @eferro


Por otro lado, Alea Soluciones, la empresa en la que trabajamos, se porto de lujo y patrocino la conferencia. :-D

Actualización:
Con unos cuantos meses de retraso (superándome a mi mismo), dejo aquí los enlaces a los vídeos:

Posts Relacionados:

Monday, August 26, 2013

Album Fotos / Pineta - Llanos de Lalarri 22/8/2013


Aprovechando las vacaciones he andado pateando un poco el valle del Chistau y cercanías, en los Pirineos Oscenses

Aquí tenéis la primera entrega de fotos...

Pineta - Llanos de Lalarri 22/8/2013