labs@habitissimo

1 de julio de 2016

Desarrollo Ágil

presentado por Jordi Lull

Jordi Llull

@JordiLlull

Trabajando en el Mundo Real(TM)

Del enunciado de una práctica a...

  • Objetivos de una empresa sin requerimientos exactos
  • Cambio constante de las necesidades
  • Nuevas herramientas y tecnologías cada día
  • Personas que no entienden los aspectos técnicos :(

De trabajar en prácticas con una o dos personas a...

  • Equipos de 5 a 8 personas
  • Decenas o cientos de personas en un mismo proyecto
  • Miles de nuevas líneas de código cada día

Para sobrevivir a este entorno necesitamos:

  • Organizarnos el trabajo para reaccionar de manera adecuada
  • Herramientas para facilitar el trabajo en equipo y ser ágiles

El enfoque "Agile"

Individuos e interacciones sobre procesos y herramientas

Producto funcionando sobre documentación exhaustiva

Colaboración con el cliente sobre negociación de contratos

Responder ante el cambio sobre seguimiento de un plan

Scrum

Roles implicados

  • Product Owner (PO)
  • Scrum Master (SM)
  • Desarrolladores

Proceso del sprint

  • 1. Planificación
  • 2. Daily scrum
  • 3. Retrospectiva

1. Planificación del sprint

  • El PO y los desarrolladores selecciona una parte del producto a realizar durante el sprint
  • El equipo de desarrollo descompone las funcionalidades en tareas y las estima

2. Daily scrum

Máximo 15 minutos en el que cada persona responde:

  • ¿Qué hice ayer para llegar al objetivo?
  • ¿Qué voy a hacer hoy para cumplir con el objetivo?
  • ¿Hay algún impedimento para llegar al objetivo?

3. Retrospectiva

Al final del sprint el equipo se reúne y reflexiona cómo fue el sprint

  • ¿Qué tenemos que parar de hacer?
  • ¿Qué tenemos que continuar haciendo?
  • ¿Qué debemos empezar a hacer?

Git & Docker

presentado por Hugo Chinchilla

Hugo Chinchilla

@ganon

Problemas que soluciona

  • compartir código
  • revisión y auditoría del código
  • backups
  • integración de cambios producidos en paralelo

Ventajas a nivel de equipo

Cada línea de código queda asociada con un autor

git blame on github

Y con un contexto

git blame on github
git blame on github

Deshacer cambios que no han funcionado


$ git revert 87a50ad
            
git blame on github

No bloqueante


$ git pull origin foo
From ssh://github.com/Habitissimo/example
 * branch            foo        -> FETCH_HEAD
First, rewinding head to replay your work on top of it...
            

Git ha sincronizado mis cambios con los de los otros programadores sin mi intervención.

Awesome

Ventajas a nivel individual

Cambios de contexto sin fricción

Experimentos de usar y tirar

Experimenta sin miedo

si al final no convence, descártalo

Usando Git

Para iniciar un repositorio

puedes

Crear un nuevo repositorio


$ cd projects/foo
$ git init
            
o

Clonar un repositorio


$ git clone https://github.com/habitissimo/labs-2016-07-01.git
$ cd labs-2016-07-01.git
            

workflow

Tu repositorio local consiste en 3 "árboles". El primero es tu directorio de trabajo, que contiene los ficheros, el segundo Index, que sirve como área de ensayo. Y HEAD que apunta a tu último commit

git trees Image from http://rogerdudler.github.io/git-guide/

add

Cuando modificas un fichero solo estás cambiando su estado dentro de tu directorio de trabajo

Puedes pasarlos a tu Index haciendo:


$ git add <nombre de fichero>
            

commit

Cuando tus cambios sean definitivos y quieras guardarlos harás un commit


$ git commit -m "Mensaje del commit"
            

push

Ahora tus cambios se han guardado de forma segura en tu repositorio, pero solo en tu copia local.

Para exportar tus cambios y ponerlos al alcance de otros desarrolladores deberás compartirlos con el repositorio remoto.


$ git push
            

ramas

Las ramas se usan para desarrollar funcionalidades de manera aislada. La rama master es la rama "por defecto" cuando creas un repositorio. Crea nuevas ramas durante el desarrollo y fusiónalas con la rama principal cuando termines.

git branches Image from http://rogerdudler.github.io/git-guide/

Más detalles en git - the simple guide http://rogerdudler.github.io/git-guide

Docker Logo

Problemas que soluciona

  • compartir entornos de trabajo
  • gestión de dependencias
  • ocultar detalles específicos
  • desplieges a producción

Ejemplo:

Vamos a crear una aplicación web

¿La web será dinámica? ¿Necesitará un almacén de datos? ¿Subir imágenes y crear miniaturas? ¿Enviar emails con notificaciones? ¿Caché? ¿Ejecución de tareas asíncronas?

Dependencias:

  • PHP
  • MySQL
  • ImageMagick
  • Exim
  • Redis
  • Beanstalkd

Mantener un entorno de desarrollo al día en lás máquinas de cada desarrollador puede ser muy complicado

Diferentes sistemas operativos, diferentes versiones de los mismos...

Docker soluciona el problema gracias a la tecnología de contenedores

FROM ubuntu:xenial
RUN apt-get update -y && apt-get install apache2 libapache2-mod-php
ADD apache.con /etc/apache2/apache.conf
CMD ["apache2", "-DFOREGROUND"]
					

Este fichero crea una imagen de ubuntu, sobre la que instala apache2, php y añade un archivo de configuración propio para apache.

El contenedor resultante se puede ejecutar sobre cualquier linux, independientemente de la distribución (debian, redhat, arch, gentoo...) también sobre OSx y Windows mediante boot2docker.

Docker-compose

Define los contenedores que forman el entorno de desarrollo, las relaciones entre ellos y las versiones requeridas de cada uno.

Crea un flujo de trabajo único para iniciar el entorno de cualquier proyecto, independientemente de las tecnologías que lo componen.


$ docker-compose up
					

Anatomía de un entorno de desarrollo

	# docker-compose.yml
	web:
	  image: habitissimo/apache:2.2.4
	  ports:
	  	- "5000:5000"
	  volumes:
	  	- .:/code
	  links:
	  	- redis

	redis:
	  image: redis:3.1
					

Petarlo en tu entrevista de trabajo

presentado por Lidia Nicolau

Lidia Nicolau

@liditanp

Entorno altamente competitivo

  • Convergencia de mercados
  • Entorno económico
  • Influencia geopolítica
  • Cambio cada vez más rápido

Tenemos que enfocar la energía en establecer una buena estrategia, leer bien la situación, establecer una táctica, entrenar y afrontar cada partido con determinación.

Curriculum Vitae

Debemos asegurarnos que se va a ver y leer lo más importante. Impacto visual.

  • Estilo
  • Orden
  • Contenido

Estilo

Que nos defina pero que nunca el continente enmascare el contenido.

Orden

A tener en cuenta a qué oferta nos estamos presentando y si estamos aplicando a una oferta o se trata de una autocandidatura.

Contenido

  • Datos de contacto
  • Experiencia: Responsabilidades, capacidades y aptitudes. No descripción de puesto pero si de competencias adquiridas o desarrolladas.
  • Menciones especiales.
  • Proyectos propios: GitHub / Portfolio!!!

Imprescindible

  • Si existen screening questions responder de forma inteligente, tomándose el tiempo necesario y aprovechándolas como punto diferencial.
  • Si es preciso carta de motivación: NO utilizar plantillas, estaremos derrochando recursos.
  • Si vamos a mandar un email: que el cuerpo del mensaje sea corto, preciso y hable de verdad sobre nosotros.

Entrevista

La hora de la verdad

  • Si existen screening questions responder de forma inteligente, tomándose el tiempo necesario y aprovechándolas como punto diferencial.
  • Si es preciso carta de motivación: NO utilizar plantillas, estaremos derrochando recursos.
  • Si vamos a mandar un email: que el cuerpo del mensaje sea corto, preciso y hable de verdad sobre nosotros.

Al recursador le gustará saber...

  • Por qué decidí ser desarrollador/a
  • Qué se me da bien / en qué soy bueno /a. Qué me apasiona.
  • Cuáles son tus objetivos / planes de carrera.
  • Qué me hace diferente / me define.
  • Por qué quiero formar parte de este equipo.
Somos sentimientos y tenemos seres humanos (Mariano Rajoy)

No te muevas de la silla si tienes algo más que decir que creas que es importante y, sobre todo... PREGUNTA.