Pomodoros de verdad

La última semana tuvimos el placer de acoger en las oficinas de Frogtek al freelance y experto en craftmanship Enrique Comba (@ecomba), el cual trabajó codo con codo con nosotros para ayudarnos a mejorar nuestro proceso.

Siendo un experto en la materia como es él, aprovechamos para preguntarle cómo mejorar nuestros pomodoros. La técnica del pomodoro es un método de timeboxing (administración del tiempo) para realizar tareas en periodos alternos de trabajo exhaustivo y pausas. Nosotros ya habíamos integrado esta técnica a nuestro trabajo habitual, y esto era lo que sabíamos:

  • Cada pomodoro consiste en un periodo de trabajo continuo de 25 minutos.
  • Durante ese tiempo, hay que trabajar concentrándose en la tareaevitando cualquier distracción (correo, twitter, etc.). Algunas distracciones, sin embargo, son inevitables, como otros compañeros preguntando una duda, una llamada al teléfono, etc.
  • Un pomodoro es indivisible (no existe medio pomodoro). Lo utilizamos como unidad atómica de trabajo.
  • Después de cada pomodoro, hay que tomar una pausa breve de 5 minutos.
  • Después de un cierto número de pomodoros (entre 3 y 5 en nuestro caso) hay que tomar un descanso largo, de entre 15 y 25 minutos.
  • Al principio de cada jornada de trabajo, hay que planificar los pomodoros y descansos que se van a realizar.
  • Además hay que estimar cuánto tiempo (medido en pomodoros) va a costar realizar una tarea determinada.

Sin embargo, Enrique nos dio algunos consejos sobre las pausas, que no estabamos aplicando:

  • Es muy importante levantarse del asiento e incluse hacer ejercicios para evitar contracturas.
  • Debe intentar dejarse la mente en blanco. Esto es debido a que nuestro cerebro almacena la información y crea conexiones o momentos de inactividad, como durante el sueño.
  • No vale mirar el correo o twitter. Si es necesario utilizarlo, mejor tomar un pomodoro de “comunicación” de 25 minutos para realizar este tipo de tareas.

Sobre las distracciones:

  • Cualquier distracción (tanto interna como externa) debe anotarse en un papel, indicando su procedencia.
  • Al acabar la jornada, habrá que revisar la lista de distracciones y comprobar si pueden reducirse de alguna manera. En caso contrario, intentar agruparlas dentro de un mismo pomodoro.

Para más información, recomiendo leer este PDF del propio creador de la Técnica Pomodoro, Francesco Cirillo.

Escrito en eficiencia, herramientas, metodología, programación | Etiquetado como , , , | Escribe un comentario

Produce el mejor código que puedas

Leyendo un post de Lisa Crispin he leído algo que me ha hecho recapacitar sobre el modo en que programo.

He exhorted us every day to write code that we’d be proud to take home and show our moms. He told us over and over, “I don’t care how much you get done, or whether you meet some deadline. I only care that you produce the best quality that you can.”

Traducción al español

Y ahí le doy toda la razón. Deberíamos escribir código del que estuviéramos orgullosos.  Y reconozco que yo no lo hago o no tanto como debería.

Por eso me encanta que me lo recuerden de vez en cuando. Porque si no serán los propios bugs que he generado los que me demuestren que no debería correr tanto o escribir tan pocos tests…

Escrito en miscelánea | Escribe un comentario

Empezando a usar Git

Como alguna vez hemos comentado ya, en Frogtek usamos SVN como gestor de versiones. Hace tiempo valoramos cambiar a un DCVS, Git, Mercurial o similares. Estuvimos estudiando las posibilidades e hicimos varias pruebas de concepto con algunos de ellos. Incluso llegamos a instalar y configurar Gerrit.

Al final no hicimos el cambio. Sabíamos que un cambio de arriba abajo, directo, era inviable. Pero no encontrábamos el momento para ir migrando poco a poco parte los proyectos. Siempre había User Stories que terminar u otras cosas que hacer. En resumen, la idea se quedo en eso, una idea.

Pero hace menos de un mes, por culpa de la gente de Cachirulo Valley y gracias a @leptom, la idea resurgió.  Esta vez, de forma distinta. Una aproximación más llevadera y tranquila. En vez de modificar los proyectos, ¡¡decidimos modificar a los developers!!

Gracias a que Git dispone de un módulo que permite comunicar un repositorio Git y uno SVN , dos developers han empezado a trabajar con Git en su ordenador. Sufriendo las maldades múltiples de dicho gestor de versiones del demonio, por mucho que diga Linus que no.

La idea es ir migrando todos los clientes poco a poco. De esta forma los developers se irán familiarizando poco a poco con Git, aprendiendo sus peculiaridades y compartiendo su conocimiento. Y cuando estemos todos ya trabajando con Git en local daremos el paso final, y cambiaremos el servidor central de SVN a lo que nos apetezca o nos beneficie más.

Os iremos contando qué tal va nuestra experiencia.

 

 

 

Escrito en miscelánea | 3 comentarios

Drive, de Daniel H. Pink

Drive book

Increíble libro que ahonda en el “sistema operativo” que nos conduce. Planteando lo anticuado que se está quedando el sistema tradicional de motivación del “palo y las zanahorias” del Siglo XX con respecto al nuevo sistema del Siglo XXI, donde la motivación se basa en factores no tan extrínsecos y más intrínsecos como la autonomía, el propósito y la maestría.

Conforme iba leyendo me ha encantado ver que en nuestra empresa mucho de estos conceptos ya se están aplicando en mayor o menor medida. Y me encanta poder disfrutar de un ambiente tan positivo para crecer como persona y profesional.

Mucho de lo explicado en el libro me sonaba ya. O lo había comentado de una forma u otra con los amigos… Pero no es lo mismo hablarlo, o intuir un concepto que leer las teorías, las explicaciones, todo. He salido con muchas ideas nuevas para auto motivarme. Un libro que vale la pena mucho leerse, desde mi punto de vista.

Para aquellos más vagos, os dejo un vídeo que resume parte de sus teorías de una forma graciosa e interesante. Además también esta disponible la Ted Talk que dio Daniel Pink en 2009.

 

Escrito en eficiencia, miscelánea | Etiquetado como , , , | 1 comentario

Frogtek en la final del Vodafone Mobile Clicks 2011

No sé si quedará alguien por enterarse pero si no escribimos hace tiempo en este blog no es porque seamos unos vagos, sino porque la vuelta de las vacaciones está siendo algo más entretenida de lo habitual.

Nos están pasando muchas cosas buenas, que ójala os podamos contar pronto, y estamos trabajando a tope para llevarlas a buen puerto. Entre ellas nuestra presencia en la final europea del Vodafone Mobile Clicks 2011. ¿Aún no lo has hecho?, ¡Pues vota por nuestro proyecto aquí hasta el día 12 de Septiembre!

Vodafone Mobile Clicks

La semana que viene nos vamos para Amsterdam a defender el pabellón español en la final. ¡Ya os contaremos que tal nos va!

Escrito en miscelánea | 1 comentario

Tiendatek y sus amigos los Periféricos

Estoy seguro de que casi todos hemos visto en alguna ocasión un Sistema Punto de Venta (POS) con su correspondiente escáner de códigos de barras, impresión de recibos, pagos con tarjetas y por qué no, un lector de huellas digital. Con la demanda actual del mercado y los avances en tecnología, un POS no tendría sentido sin la ayuda de todos o parte de estos dispositivos. La realidad dicta que no es suficiente con poder registrar una venta sino que hay que hacerlo de la forma más rápida posible, a nadie nos gusta estar esperando en la cola del supermecado, porque además al cliente le gusta tener constancia de lo que ha comprado, a nadie nos gusta que nos engañen.

Tiendatek ha conocido a diferentes amigos conforme ha ido creciendo, apartándose de aquellos que no le convenían y que le retrasaban su aprendizaje. Cuando tan solo iba a la guardería conoció a un pequeño sistema de lectura de códigos de barras a través de la propia cámara del teléfono y cuyo nombre es ZXING. Una tarea que aparentemente puede parecer sencilla, al final resultaba desesperante para el tendero, debido a su baja eficiencia. Enseguida se dio cuenta de que tenía que encontrar a alguien que de verdad estuviese diseñado para ese fin. Así, cuando empezó la primaria conoció a un lector bluetooth llamado CipherLab quién además de bonito era barato. Se podía decir, que hasta el momento, el lector es y ha sido su mejor amigo. De esas relaciones donde nada cambia con el paso de los años.

Ya en la secundaria, Tiendatek y LectorTek, hicieron nuevos amigos. En esta ocasión se trataba de una linda y joven impresora de recibos vía bluetooth. Desde el primer día supo como seducirlos tanto a ellos como a los tenderos pasando por los programadores y el “product owner” de Tiendatek. Apenas han pasado unos meses, pero a simple vista se ve que existe química entre ellos.

 

Todavía les queda mucho camino que recorrer y periféricos que conocer pero ¿por qué no?, ¿veremos algún día a Tiendatek saliendo a bailar con un lector de pagos con tarjeta y/o sistema de identificación por huella digital en el día de su graduación?

Escrito en android, programación | 2 comentarios

Lanzar un Job de Jenkins desde Google App Engine

La semana pasada estuve dándole vueltas a este problema, después de varios intentos fallidos llegué, con la ayuda de Julio, a la solución que planteo en el título del post.

Para empezar tenemos que ir al job en Jenkins que queramos lanzar desde fuera y activar la opción de “Lanzar ejecuciones remotas”

Por motivos de seguridad, Jenkins nos obliga a usar un Token que será usado al llamar al Job desde fuera.

El código que usaremos en GAE (en Python) será el siguiente:

import urllib2, base64, httplib
from urllib2 import URLError, HTTPError
from django.http import HttpResponse
 
def call_mlp_generator(request):
 
    theurl = 'JENKINS_JOB_URL?token=TOKEN'
    username = 'USERNAME'
    password = 'PASSWORD'
 
    request = urllib2.Request(theurl, None)
    base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
    request.add_header("Authorization", "Basic %s" % base64string)
    try:
        urllib2.urlopen(request)
        response = str(httplib.OK)
    except HTTPError, e:
        response = str(e.code)
    except URLError, e:
        response = str(e.code)
 
    return HttpResponse(response)

Bastante simple, sólo había que saber tocar las teclas adecuadas.

Escrito en gae, integración continua, programación, python | Escribe un comentario

¿Por qué usar Maven?

A raíz de mi grata visita a PocketWidget, en nuestro Desk-Surfing más reciente, he revisado la configuración de Maven que nos permite construir nuestros entregables.

Al volver sobre ella con Francho, repasarla y volver a aplicarla en otros proyectos, me he dado cuenta de lo potente que es y lo difícil que sería la vida sin ella.

Aparte de todas las bondades que su propia página web resalta, personalmente, me quedo con dos de ellas.

  • La herencia entre los archivos de configuración. Permitiendo eliminar duplicidades en las configuraciones y facilitando la configuración de multiples proyectos similares partiendo de una configuración padre-base.
  • Su extensibilidad mediante plugins. Los hay de todos los tipos y si no encuentras uno que se cuadre a tus necesidades, puedes desarrollarlo y usarlo fácilmente. Nosotros el que más usamos es el de Android. No ha estado siempre a la última, pero la comunidad que hay detrás es impresionante y en su última versión beta (2.9) ya soporta los Library Projects.

Solo usamos Maven en el entorno de integración continua, porque durante desarrollo con el plugin de Eclipse ADT para Android, no solemos tener problemas. Pero a la hora de automatizar, la elección ha sido clara: Maven sobre Ant.

Escrito en android, integración continua | Etiquetado como , , , , | Escribe un comentario

Entorno de desarrollo de Google App Engine en Fedora 15

Me parece interesante contar la experiencia que tuve ayer al configurar el entorno de desarrollo de GAE en una máquina Linux (Fedora 15 en este caso), sobre todo por si puede ayudar a otros desarrolladores y evitar algunos dolores de cabeza.

Aquellos que trabajen con GAE han de saber que hasta nueva orden, el sistema necesita Python 2.5 para poder funcionar correctamente. Google así lo recomienda, aunque recuerdo haberlo hecho funcionar sobre Python 2.6 en mi anterior vida (cuando era Ubuntu).

Voy a intentar reconstruir el camino correcto a seguir para configurar el entorno de desarrollo de GAE sobre un Fedora 15 (ya que di muchas idas y venidas).

La última versión de Fedora tiene por defecto Python 2.7, y si intentaba arrancar el proyecto en local usando esta versión de Python, tenía serios problemas de incompatibilidades de módulos, por ello me bajé Python 2.5.

Por otro lado instalé un par de librerías que necesitaría más adelante (esto tardé varias horas en hacerlo funcionar, por el orden en que hacía las cosas):

sudo yum install openssl openssl-devel -y
sudo yum install sqlite-devel

Una vez instaladas estas librerías era el momento de compilar el código de Python 2.5 e instalarlo. Antes de nada, hay que modificar el fichero <python-folder>/Modules/Setup.dist y descomentar las siguientes líneas:

# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
SSL=/usr/local/ssl
_ssl _ssl.c \
	-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
	-L$(SSL)/lib -lssl -lcrypto

(Líneas 206-209)

De esta forma habilitamos el módulo de SSL cuando construyamos Python.

Es hora de construir Python:

su
./configure
make
make altinstall

Con el make altinstall lo que hacemos es instalar Python en una ruta diferente y no machacar la versión actual que tengamos instalada en el sistema.

Si todo ha ido bien, ahora podremos usar

python2.5 dev_appserver.py --port 8080 RutaDeTuAplicación

Si compilamos Python 2.5 sin haber instalado las librerías arriba mencionadas o sin haber habilitado los módulos de SSL podríamos encontrarnos problemas como estos a la hora de arrancar el proyecto:

AttributeError: 'module' object has no attribute 'HTTPSHandler'

o

ImportError: No module named _sqlite3

(Dependiendo de lo complejo que sea vuestro proyecto, claro.)

Espero que esta pequeña guía sirva de ayuda para aquellos que tengan los mismos problemas que tuve en su momento.

Compartir es poder.

Escrito en gae, programación, python | Escribe un comentario

Desk-Surfing

La semana pasada tuvimos a @francho_lab en la oficina, no voy a entrar en detalles de lo interesante que fue su visita porque soy el menos indicado para hacerlo y porque cualquiera de los programadores lo hará mucho mejor que yo. Pero sí que me gustaría ensalzar las virtudes de este tipo de intercambios informales y de la web que se montó con ese objetivo, Desk-Surfing.Org, después de la última Agile Open Spain 2011 de Pamplona.

Para nosotros éste ha sido el cuarto intercambio/visita. Anteriormente hemos tenido el honor de tener a @carlosble, @hell03610 (Emma) y a @rubenbpv. Además Pedro estuvo tres días en Biko2 y Julio ha estado 2 en PocketWidget. Todas y cada una de las visitas han sido fuente de innumerables mejoras. El mero hecho de salir y ver un entorno diferente o recibir a una persona de otra empresa hace que te replantees la forma de trabajar, aprendas nuevas técnicas o procesos.

Son estas cosas, junto con la asistencias a eventos como las AOS o la CAS, las que nos dan los empujones necesarios para seguir mejorando continuamente. Por eso Frogtek se registro en la web Desk-Surfing.Org y por eso continuaremos acogiendo y enviando ingenieros en el futuro. ¡Os animamos a todos a probar la experiencia!.

Escrito en agile | Etiquetado como , , , | 2 comentarios