Preparación para el taller exploratorio de tcr

Preparación para el taller exploratorio de tcr

El jueves próximo en el contexto de la semana de la agilidad voy a estar haciendo un taller exploratorio de la dinámica tcr (test && commit || revert). Para ejercitar esta dinámica resulta muy conveniente tener algún mecanismo de file watching que (cada vez que modificamos un archivo) se encargue de correr los test y hacer commit o revert dependiendo del resultado.

Durante el taller yo voy a trabajar con Ruby pero el taller se puede seguir perfectamente con cualquier lenguaje, solo es necesario tener Git y un algún framework de automatización de tests (algo de la familia xUnit es suficiente).

Para quienes quieran trabajar con Ruby, armé un setup con una configuración Guard para correr el flujo trc. Está disponible GitHub.

Running background jobs on Ubuntu

Some time ago I mentioned a project I was working on to move an application from Heroku to a virtual server running on Rackspace. One of the challenges I faced in that project was setting up some background jobs.

Given that we were using Ubuntu we decided to use Upstart to manage the jobs.

Here is a summary of the procedure I followed:

  1. Create an specific user for the jobs to run (useradd worker)
  2. Create a config file to make upstart manage each job. These files should be placed under /etc/init/. These files should include some generic information for upstart (like the user that will run the service) and also some specific information related to job (like how to start it). Here you can find and example to configure Clockwork (a cron replacement app built on Ruby).
  3. Now to manage the job you can use this command
    sudo service clockwork {start|status|stop|restart}
  4. The log file of the job will be placed under /var/log/upstart and the file name will be <job_name>.log

Hope you find it useful.

Ubuntu + Jenkins + RVM

Not sure if this is the best procedure but is what worked for me.

  1. Install Jenkins with the native package manager: sudo apt-get install jenkins
  2. Switch to jenkins user: sudo su – jenkins
  3. Install RVM following the single user installation procedure

Hope this helps you.

Ubuntu update

Técnicamente no es updated, sino que simplemente decidí reemplazar mi ubuntu de 64 bits por uno de 32 bits debido a que no estaba contento con el rendimiento de mi máquina. Entonces me bajé el ISO correspondiente a 11.04, lo “quemé” en un pendrive y pisé mi antigua instalación. Luego de haber completado todo el setup, noto una leve mejora en el desempeño de mi máquina, pero nada demasiado relevante.

Les paso a contar ahora las yerbas complementarias que instalé una vez finalizada la instalación del sistema base.

Primero actualicé los repositorios utilizados por apt-get

sudo apt-get update

Lo primero a instalar es Gnome-Do una aplicación que permite lanzar la ejecución de un programa tipeando su nombre en un ventana de dialogo.

sudo apt-get install gnome-do

Continuando con los fundamentales, el siguientes paso fue instalar una extension del  explorador Nautilus para tener un menú contextual para abrir una teminal.

sudo apt-get install nautilus-open-terminal

A mi me gustan la fuentes de Microsoft, entonces:

sudo apt-get install msttcorefonts

Un utilitario infaltable es el Gimp:

sudo apt-get install gimp 

El siguiente paso es instalar Chrome, para lo cual seguí el procedimiento sugerido por Google.

Momento de instalar algunos utilitarios que funcionan como add-ons de Firefox: FireBug y FireFTP.

Llega la hora de las herramientas de desarrollo. Comenzado por Java aparece la diyuntiva de si instalar la version OpenJDK o la de Oracle. En teoría ambas siguen la misma especificación, pero la realidad es que hay reportadas menores diferencias. La buena noticia es que ambas versiones pueden convivir. Por una cuestión de simplicidad instalé OpenJDK que se instala fácilmente via apt-get

sudo apt-get install openjdk-6-jdk

Luego bajé un Eclipse classic de la página de Eclipse.

El siguiente items es el entorno Ruby, para cuya instalación me baso en el post que escribí hace un par de semanas.

Para Pharo, bajé el Zip correspondiente con la última versión de la máquina virtual y restauré mi imagen favorita desde mi pendrive.

Bien, estoy es todo para comenzar a trabajar.

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.