Estudio de radio casero al alcance de tu mano

La tecnologia ha evolucionado y los costos han bajado radicalmente, permitiendo que cualquier hijo del vecino pueda hacer su propia radio por internet. La infraestructura más básica consisten en:

  • Una computadora con placa de sonido con entrada para microfono
  • Una conexión de banda a ancha de internet
  • Un micrófono

A nivel de software necesitaremos:

  • Windows XP o superior
  • Zara Radio (programa gratuito para operación de radio)
  • Winamp con el plugin Shoutcast (también gratuito)

Finalmente, el último componente es el servicio de streaming, el cual se encarga de tomar nuestra transmisión y ponerla disponible en el ciberespacio. El costo de estos servicios varia según la capacidad de streamming deseada. En la actualidad uno puede comenzar con un servicio con capacidad para 100 oyentes simultáneos por alrededor de $ 100 (pesos argentinos).

La forma en que todos estos componentes interactuan es:

  1. El micrófono se conecta a la computadora que a su vez está conectada a internet
  2. Se ejecuta Zara Radio que permite elegir las canciones/audios a reproducir y también permite activar el micrónofo
  3. Se ejecuta Winamp con el mencionado plugin, que tomará la salida de audio generada por Zara Radio y la enviará al proveedor de steamming.
  4. El proveedor de streamming tomará nuestra señal y la pondrá disponible para los usuarios en una URL de su propiedad

Esto es todo, 1, 2, 3, ¡al aire!

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á…

Continuous Delivery en ascenso

En los últimos 2 meses me he visto involucrado en 3 iniciativas de Continuous Delivery y hoy comienzo un nuevo proyecto para ayudar a una empresa a implementar esta práctica.

En la mayoría de estos últimos casos en los que he participado, partimos de un contexto donde ya estaba implementada la práctica de integración contínua, lo cual facilita en gran parte las cuestiones técnicas. Al mismo tiempo me he encontrado que uno de los principales desafios al intentar implementar la práctica de Continuous Delivery se encuentra a nivel organizacional, ya que require de la participación de otros sectores más allá de equipo de desarrollo.

La herramienta que suelo recomendar es Jenkins con el agregado del plugin Build Pipeline, aunque tengo en mi backlog de experimentos hace un spike usando Travis para aplicaciones hosteados en Heroku.

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.

Proyecto CMS, flujo diario de trabajo

Alrededor de las 8 de la mañana, enciendo la máquina, inicio sesión y lo primero que hago es ver las novedades, pues dado que tenemos un equipo en India que trabaja a contrahorario es muy común iniciar el día con noticias de progreso. Entonces abro el cliente de correo y un navegador para loguearme en Campfire, la herramienta de chat colectivo. La ventana de Campfire queda abierta todo el dia. Voy leyendo los correos del proyecto, si es que hay alguno y voy contestando.

Una vez al tanto de las novedades, abro una terminal y actualizo mi repositorio local: git pull. Abro otra ventana del navegador para ver que todo esté en orden en el build server (Jenkins). En otra ventana del explorador abro la herramienta de gestión (Chili).

Con esto ya estoy listo para empezar a codear, inicio Rubymine y manos a la obra.

A las 10 de la mañana, inicio sesión en Vydeo para conectarme a la stand up global del proyecto, la cual dura entre 10 y 15 minutos. Luego  inicio GoToMeeting para hablar  con mi sub-equipo, esta reunión suele durar un poco más pues hablamos algunas cuestiones de diseño o hacemos troubleshooting de algún impedimento. Al finalizar esta reunión, ya tengo en claro el trabajo de mi dia, asi que envio un mail a la lista de proyecto contando brevemente mis compromisos.

El resto del día transcurre como una seguidilla de Pomodoros interrumpida solamente por 40 minutos para el almuerzo. Dependiendo de las funcionalidades en desarrollo, puede que hagamos una sesión de pair programming usando Google Hangout. Las funcionalidades en general las desarrollo haciendo TDD. Cada vez que termino una funcionalidad, corro todas las pruebas unitarias (que son alrededor de 1500) y si todo está bien, subo el código al repositorio común lo cual dispara el proceso de integración. Si la integración es exitosa, entonces disparo un despligue a al ambiente de preview para que quien guste pueda ver la nueva funcionalidad agregada. Finalmente actualizo el estado de la funcionalidad en la herramienta de gestión.

Si la funcionalidad desarrollada requirió algún cambio de impacto relevante en el resto de la aplicación (un cambio en la base de datos por ejemplo) envio un mail a la lista de proyecto avisando de esto y si corresponde también documento el tema en la wiki del proyecto.

Al final del día, envio un mail a la lista de proyecto resumiendo el estado de los compromisos asumidos para el día y comentando también mis siguientes pasos.

Proyecto CMS, día #17 – Fin

Era el gran día: la salida en producción, pero no fué. El producto está listo, ha pasado las pruebas, pero el cliente ha decido posponer la salida en producción por cuestiones de negocio.

De forma simplificada podemos decir que el sistema construido reemplaza a un sistema existente y que en este momento el negocio está cerrando un ciclo. El cliente ha considerado conveniente que el ciclo de negocio actual se complete con el sistema «viejo» y recien poner en funcionamiento el sistema nuevo al finalizar el ciclo. Dado que el ciclo de negocio termina la semana próxima, el aplazo de la salida en producción no debiera ser mayor a una semana.

Más allá de esto, mañana haremos el cierre formal del release.

Dado que estamos cerrando una etapa, es un momento apropiado para hacer un retrospectiva, pero resulta un contexto un tanto complejo dada la distribución del equipo. Asi que siguiendo la recomendación de @jgabardini, he propuesto que cada sub-equipo haga su propia retrospectiva y luego compartamos los resultados y coordinemos los action items.

De ahora en más ya no escribiré los avances diarios, sino sólo los hechos relevantes como la salida en producción, los resultados de la retrospectiva, etc.

Espero hayan disfrutado de este relato de un proyecto real. Fin.

Webcast AgilVen: Interesante experiencia

Como habia mencionado anteriormente, ayer hicimos un webcast con la comunidad ágil de Venezuela (agilven). Entre los moderadores estuvimos RickC, yo y los locales GustavoB y PabloLis.

La experiencia me resulto muy interesante. La dinámica fue simple: previo al evento habilitamos un espacio para preguntas (basado en google moderator) y luego durante el evento fuimos respondiente dichas preguntas. Al mismo tiempo la audiencia podia postear más preguntas vía Twitter utilizando el #agilven. Hablamos sobre TDD, CI, relaciones con los clientes, motivación y restrospectivas entre otros.

Un detalle no menor, es que el webcast lo hicimos con Google Hangout + Streamming via YouTuve, lo permitió que toda la sesión quedara publicada y disponible para todo el mundo: http://www.youtube.com/embed/Hzq9-B1jBuU.

Fue mi primera vez en una experiencia de este tipo y me gustó tanto que ya hablamos con Rick de repetirla periódicamente con distintas comunidades.

Proyecto CMS, día #15 y #16

Ayer Diego, un compañero de equipo, regresó de vacaciones asi que trabajamos en casa gran parte del día haciendo pairing. El foco estuvo en prueba y estabilización.

Hoy implementamos algunos cambios de último momento y fixes menores y empezamos a ver algunas cuestiones relacionadas a la funcionalidades del próximo release. Mañana es el gran día: salida a producción.

Continuará…