Implementando Continuous Delivery: Visión y primeros pasos

Como comenté el lunes, estoy comenzando a trabajar con una organización en la implementación de la práctica de Continuous Delivery. La situación actual resulta por demás desafiante:

  • Varios equipos cada uno con distintos nivel de adopción de prácticas de ingeniería
  • Pasaje entre ambientes realizado prácticamente en su totalidad en forma manual
  • Necesidad concreta del negocio de poder implementar cambios en la aplicaciones de forma «inmediata»

Ufff, ¡cuantas cosas! ¿por donde empezar? Personalmente me gusta empezar explicitando la visión del proyecto para asegurar que todo el mundo esté alineado y que todo esfuerzo esté en sintonia con las necesidades. En este caso, el sponsor del proyecto fue muy explícito:

«El pasaje desde el ambiente de desarrollo hasta el ambiente de pre-producción debe ser automático«

Este es un interesante punto de partida, ya que la visión habla de ambientes, comencemos hablando de ellos. Mi propuesta default suele comenzar con 3 ambientes: desarrollo, staging y producción. Y luego ajustar en caso que el contexto requiera de algo distinto.

Otros de los puntos a trabajar es la definición de la estrategia de manejo de código, lo cual incluye no solo definir una herramienta (en este caso en particular será Git) sino también la forma en que se administrará el código (en esta caso vamos a evaluar el esquema conocido como Git Flow).

El siguiente punto que me parece muy importante definir son las condiciones que debe cumplir todo incremento entregado por los equipos de desarrollo para poder entrar al ambiente de staging: porcentaje de cobertura, cumpliendo te estándares de codificación, revisión por pares, etc, etc.

Continuará…

Proyecto CMS, Go Live and Next Steps

Hace unas dos semanas, salimos en producción. La parte pública de la aplicación está accesible aqui.

Por estos dias estamos comenzado a trabajar en el siguiente hito: liberar como open source toda la plataforma. Esto me resulta especialmente interesante, pues si bien yo ya he publicado algunos proyectos open source, en general han sido cosas pequeñas. En este caso se trata de un producto de dimensiones interesantes y el cual se espera que tenga aportes de la comunidad. En cuanto tengamos algo publicado, les contaré.

Chau 2012, hola 2013

Para mi el día termina cuando me acuesto a dormir. Suele pasarme que me encuentro despierto un domingo a las 3 de la madrugada pero para mi sigue siendo sábado ya que el cambio de fecha lo hago luego de dormir.

Algo similar me ocurre con el cambio de año, para mi el nuevo año no comienza hasta que regreso de las vacaciones. Por ello, para mi el 2013 comenzó el lunes pasado que fue cuando regresé de las vacaciones.

El 2012 fue un año muy interesante para mi ya que dí el gran paso de salir del trabajo en relación de dependencia. También destaco mi participación en el Agile Tour en Venezuela y mi zambullida en el mundo Ruby.

Para el 2013 tengo un par de objetivos interesantes:

  • Terminar las materias de la maestria y empezar a escribir la tesis
  • Terminar de escribir un libro que comencé el año pasado
  • Ayudar a mis alumnos de Fiuba, Martin y Aníbal, a terminar su trabajo final de carrera
  • Visitar Machu Pichu
  • Dictar un curso online sobre ingenieria de software
  • Volver a hacer radio

Bueno, es hora de poner manos a la obra.

Radio 3, 2, 1…

Uno de mis hobbies durante la adolescencia fue hacer radio. Aún recuerdo el día de la primera transmisión: 28 de febrero de 1995. Esa primera iniciativa duró 3 años exactos, la última transmisión fue 28 de febrero de 1998. Luego participé de otras iniciativas, más «serias»,  menos improvisadas, con más tecnologia, sobre distintas temáticas, etc. La ultima de ellas fue en 2008, pero desde entonces siempre estoy con ganas de retomar.

Hace un par de semanas un amigo, que también estuvo en aquellas andanzas radiofónicas de antaño, hizo un curso de radio que lo enloqueció e instantáneamente me contagió.

Luego de un par de averiguaciones y pruebas de concepto, finalmente estamos en condiciones de montar nuestra propia radio en internet. En este contexto tendré un espacio con mi amigo en el que hablaremos música, actualidad, etc y por otro lado tendré un espacio dedicado a cuestiones relacionadas al software. Más novedades en breve.

The Rules goes live!

Hoy finalmente salimos en producción con The Rules luego de 3 intensas semanas de trabajo. Una aplicación no demasiado compleja pero un proyecto por demás interesante:

  • Equipo de proyecto distribuido en diversas ciudades alrededor del mundo: New York (US), Austin (US), Chennai (India) y Buenos Aires (Argentina)
  • Contenido en 5 idiomas, modificable en cualquier momento por un editor
  • Integración con varios sistemas externos (CMS, PayPal, SendGrid, etc)
  • Y lo más dificil (a mi parecer), crear la interface gráfica de la aplicación en base a las ideas de diseñadores expresadas en PhotoShop, menos mal que en el equipo estaba Gabriel C, un capo con cuestiones de HTML/CSS.

Como infraestura de desarrollo utilizamos GitHub y Jenkins. En Jenkins contamos  con 4 jobs: integración contínua, integración, deploy a staging y deploy a producción. Para las comunicaciones utilizamos GoToMeeting y Campfire. Esta última herramienta la podria describir como una sala de chat que donde va quedando guardada la historia de conversaciones y que permite insertar imágenes Nos resultó especialmente útil para hacer troubleshooting de algunas cuestiones. Resultaba interesante ver como a la gente en distintos usos horarios iba entrando y saliendo acorde avanzaba el día. En cuanto a la infraestructura de staging y producción corremos sobre Heroku.

El primer hito está completo, ahora tenemos un par de semanas más hasta el próximo release.

Aventura gráfica made in Argentina (ex-FIUBAs)

La semana pasada me llego un mail de compañero de Francisco Saenz contandome del lanzamiento de Reversion, una aventura gráfica desarrollada por un conjunto de alumnos de Fiuba: Francisco (mi compañero), Fernando y Facundo.

Estos tres muchachos se conocieron en su época de estudiantes en Fiuba, luego de un par de años fundaron la empresa 3F Soluciones en el contexto de la cual desarrollaron este juego. El año pasado, Francisco y Fernando estuvieron de invitados en mi materia en UNQ donde contaron sobre el surgimiento de la empresa, su forma de trabajo y el proceso de desarrollo de este juego. Todos quedamos facinados con la presentación y muy expectantes al lanzamiento del juego que se llamaria Reversion.

Bien, finalmente el momento llegó, desde hace unos está disponible para descarga el primer capítulo de Reversion. Tal vez lo más llamativo del juego es que está ambientado en Argentina y pueden reconocerse en las distintas pantallas escenas inconfundibles de pasajes de Buenos Aires.

Dado que los juegos no son mi fuerte, les dejo el link al anuncio escrito por los creadores y para quienes les interes el backstage, les recomiendo ver el blog que escribe el equipo de desarrollo.

Mis felicitaciones al equipo de 3F y ojala les vaya muy bien con esta iniciativa, chau, ¡ me voy a jugar!

Acceso a ACM para gente Fiuba

ACM (Association for Computing Machinery) es una organización que nuclea profesionales y científicos de la computación y «colabora»* en la difusión de conocimiento en este área. En este sentido la ACM tiene una seria de publicaciones periódicas entre las que se destaca la revista Communications of ACM, que ha sido portadora de famosos artículos como GoTo Statement Considered Harmful de Dijkstra.

La buena noticia es que ahora los alumnos de fiuba pueden acceder a los recursos de ACM en forma totalmente gratuita. Para ello simplemente tienen que configurar sus exploradores para usar el proxy de revistas de fiuba**. Para conectar a este proxy es necesario contar con una cuenta de correo de fiuba (@fi.uba.ar).

¡Que lo disfruten!

* Colabora es una forma de decir, pues si bien ACM concentra muchas publicaciones en la denominada ACM Digital Library, el acceso a la misma es restringido.

** No publico la dirección del proxy por cuestiones de seguridad, los interesados pueden contactarme en privado o bien contactar directamente a soporte Fiuba.

Herramientas de oficina en la nube

Un de los utilitarios que aún no logré encontrar a gusto en Ubuntu es un editor de diagramas. He probado varios (Dia incluido) pero por una u otra cosa, ninguno me vino bien. Por eso celebré cuando encontré Gliffy, una aplicación web para hacer diagramas. Simplemente excelente, soporta casi todos los mismos diagramas que Visio (organigrama, red, uml, flujos, etc.).

Al igual que Prezzi, es una aplicación Flash (por si no lo conocen, Prezi es una herramienta para realizar presentaciones, funcionalmente es un competidor/reemplazo de PowePoint, pero tiene un enfoque diferente, muy recomendado).

Un detalle no menor de Gliffy es que no es gratuito, ofrece un trail gratuito por 30 dias (que es lo que estoy usando actualmente) y luego tiene un costo de alrededor de 5 dólares mensuales por cuenta.

Instalación de Ruby (la posta para mi)

En los últimos meses instalé Ruby en al menos 4 máquinas distintas (mi máquina personal, mi desktop del trabajo, una máquina virtual y mi build server). En todos los casos intenté seguir el mismo procedimiento, pero en todos me encontré con distintos issues, estimo que debido a que los ambientes eran levemente distintos (pero todos eran Ubuntu).

Cuando hablo de instalación de Ruby, no estoy hablando de la instalación base de ruby para hacer un «Hola  mundo», sino una instalación como para crear una aplicación «de verdad» (básicamente aplicación web, con conexión a internet, manejo de xml, pruebas y build automatizado).

Habiendo seteado el contexto paso a describir los pasos comunes que logré identificar en todas las instalación que realicé y que voy a seguir la próxima vez que tenga que preparar un ambiente.

Vamos a comenzar por instalar Ruby usando apt-get, no importa si luego queremos utilizar otra versión, yo me inclino por comenzar instalando ruby con apt-get pues eso se encargará de hacer varios seteos. Entonces abrimos una terminal y ejecutamos

sudo apt-get install ruby

Si no tenemos instalado Git aún, es un buen momento para instalarlo.

sudo apt-get install git

Luego vamos a instalar Ruby Version Manager (rvm). Esta herramienta nos va permitir instalar y administrar distintas versiones de Ruby en una misma máquina. Pero para instalar RVM primero tendremos que instalar git y curl, entonces:

sudo apt-get install curl
bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )
echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bashrc

Cuando finalice la instalación de estos componentes cerramos la terminal.

Ahora instalaremos ruby 1.9.2 usando RVM, para ello abrimos una nueva terminal y ejecutamos

rvm install 1.9.2

El siguiente paso es installar RubyGem, un administrador de paquetes (que en ruby se llaman gemas). La instalación de esta herramienta consisten en descargar el paquete desde http://rubygems.org/pages/download , descomprimirlo y ejecutar setup.rb (ruby setup.rb). Con esto ya estamos en condiciones de comenzar a installar gemas, pero resulta que algunas gemas en su proceso de instalación incluyen un proceso de compilación de código C, el cual puede requerir de la existencia de ciertas librerías nativas en nuestro ambiente. Por suerte las mismas pueden instalarse fácilmente utilizando apt-get.

sudo apt-get install libmysqlclient-dev libpq-dev libsqlite3-dev zlib1g-dev libreadline5-dev libssl-dev libxml2-dev libopenssl-ruby libxslt1-dev

Ahora  si, podemos proceder a la instalación de dos gemas fundamentales: rake (ruby make) y bundler (un administrador de dependencias en un punto similar a Maven).

gem install rake
gem install bundler

Con esto estamos listos para comenzar, cuando creemos nuestras aplicaciones tendremos un archivo llamado Gemfile en el cual especificaremos las dependencias de nuestra aplicación (las gemas) y con solo ejecutar bundle install, bundler se encargará de instalar las gemas especificadas.

Espero que esto les resulte útil.

Sueldos IT (version 2011)

La semana pasada en iinfo (la lista de correo de ingeniría informática de la UBA) surgió un hilo de discusión sobre este tema. Un dato importante mencionado durante la discusión por GuidoDeB es que la Cámara Cámara de Empresas de Software & Servicios Informáticos de la República Argentina (CESSI), a través de su Observatorio Permanente de la Industria del Software y Servicios Informáticos (OPSSI), elabora un informe sobre la evolución salarial semestral dentro de las empresas del sector, socias de la cámara.

A continuación les dejo algunos de los links que se compartieron durante la discusión.