The coding zone

De un tiempo a esta parte se lleva popularizando entre las bitácoras de desarrolladores el compartir lo que cada uno define como su “coding zone”, su entorno de trabajo ideal para tener sesiones de programación lo más productivas posibles.

En mi caso, mi entorno ideal se compone de cuatro pilares fundamentales.

Buena música

No lo puedo evitar, me encanta la música. Y a la hora de trabajar me ayuda a concentrarme en las tareas que tengo que realizar.

En mi caso a la hora de programar no tengo predilección en especial por géneros musicales. Lo que sí que suelo optar es mucho por la escucha de directos (El Alchemy de Dire Straits es uno de mis favoritos).

No suelo optar por escuchar playlists autogeneradas por parte de iTunes o Spotify. En ambas plataformas tengo listas de varios géneros compuestas poquito a poco a lo largo de estos años que me evitan tener que perder el foco al encontrarme con una canción que no me guste.

Tanto estos últimos años de trabajo en remoto, como anteriormente cuando trabajaba en oficinas con más gente, unos buenos cascos siempre me han acompañado. Hay momentos en los que necesitas ese aislamiento.

Sin interrupciones

Procuro concentrar las reuniones que tenga que mantener o a primera hora o a última. Así minimizo en gran medida el cambio de contexto que supone volver a la resolución de la tarea en la que me encuentre enfrascado en ese momento.

También procuro que sean lo más breves posibles. Una reunión de media hora por Skype en realidad es un tiempo de al menos una hora de programación perdida. Los 15 minutos previos a la reunión en los que estás ya pensando en la reunión más que en la tarea, la reunión propiamente dicha, y otros 15 minutos para volver a concentrarte al 100% en la tarea que tenías entre manos.

Sobre todo en épocas donde nos marcamos deadlines ajustados, las notificaciones las reduzco al mínimo. Móviles en modo silencio o modo avión, correo cerrado, y otras aplicaciones solo con las notificaciones más importantes activadas (por ejemplo, en HipChat solo las menciones directas).

Organización

Tres componentes definen este área:

  • Todas las historias que componen el proyecto en el que trabajo están gestionadas a través de Pivotal Tracker. Una pestaña fija en el navegador.
  • Mantengo en Evernote una libreta donde voy almacenando artículos técnicos que voy necesitando (bendito Web Clipper).
  • Things recopila todas las tareas, tanto del trabajo como asuntos personales, que debo atacar. Todas las acciones que supongan más que una respuesta rápida de menos de unos pocos minutos queda anotada por aquí, y dos veces al día el Inbox es revisado.

Motivación por lo que haces

Esto es básico. Es imposible ser productivo en tu trabajo si no sientes cada mañana cuando te pones delante de la pantalla que te espera un día interesante, cargado de retos.

¿De qué se compone tu “coding zone”?

Clases curiosas en Rails

Por muchos años que lleves utilizando Rails, siempre te encontrarás navegando por la documentación con clases de lo más útiles y que probablemente estés usando de forma indirecta sin conocerlo.

Intentaré a lo largo de una serie de entradas como ésta ir contando cosas sobre algunas de las más importantes “en la sombra”.

ActiveSupport::StringInquirer

Introducida en la versión 2.2, y dando un uso curioso a method_missing, esta clase es la que está detrás de la “magia” de que:

Rails.env == "production"

también se pueda escribir como:

Rails.env.production?

En una clase real podríamos hacer algo como:

class Video
  def initialize(title)
    @title = title
  end

  def title
    ActiveSupport::StringInquirer.new(@title)
  end
end

v = Video.new("awesome")
v.title.radical? # => false
v.title.awesome? # => true
ActiveSupport::MessageVerifier

Esta clase nos acompaña desde Rails 2.3. Al igual que la clase anterior, es raro que la hayas utilizado de forma directa, pero seguro que más de una vez en tu código has escrito algo como

cookies.permanent.signed[:remember_me] = [current_user.id, current_user.salt]

La implementación de cookies.signed se basa en el uso de MessageVerifier, una clase especializada en generar mensajes firmados con una clave (en el caso de las cookies, ActionController::Base.cookie_verifier_secret). Para MessageVerifier un mensaje puede ser tanto una cadena de texto como cualquier cosa susceptible de ser serializada.

>> @verifier = ActiveSupport::MessageVerifier.new("nuestra-clave-secreta")
=> #<ActiveSupport::MessageVerifier:0x007fe10cb32438 @secret="nuestra-clave-secreta", @digest="SHA1", @serializer=Marshal>
>> @verifier.generate(["Hola", "Mundo"])
=> "BAhbB0kiCUhvbGEGOgZFVEkiCk11bmRvBjsAVA==--f2c2e657ec1501c984d8c44154b398a3a2ac9cbc"
>> mensaje_cifrado = @verifier.generate(["Hola", "Mundo"])
=> "BAhbB0kiCUhvbGEGOgZFVEkiCk11bmRvBjsAVA==--f2c2e657ec1501c984d8c44154b398a3a2ac9cbc"
>> @verifier.verify(mensaje_cifrado)
=> ["Hola", "Mundo"]

Dentro de la serialización por defecto se utiliza Marshall, pero si por ejemplo preferimos utilizar YAML podríamos hacer algo como:

@verifier.serializer = YAML

Y hasta aquí por hoy. ¿Qué otras clases curiosas te has encontrado utilizando Rails en tu día a día?

Actualizando a Mountain Lion

Es inevitable cada vez que actualizas de versión de sistema operativo que durante los primeros días tengas que lidiar con pequeños detalles. Ocurre en Windows, en Linux y por supuesto en OS X.

La actualización a Mountain Lion fue igual de sencilla que pasar a Lion: descarga desde la App Store, lanzar el instalador y esperar a que concluya el proceso. Todas las aplicaciones seguían funcionando correctamente (incluyendo cosas como VMWare o Hear), pero algunas herramientas de desarrollo para Ruby daban algún pequeño error.

Afortunadamente siempre hay gente que sabe más que tú, y gente que ya había estado trabajando con las versiones beta, con lo cual tras una pequeña búsqueda en Google encontré soluciones a dichos problemas, los cuales paso a listar.

XCode

En anteriores versiones del sistema operativo podías encontrar XCode dentro del DVD de instalación en una carpeta aparte. Hace ya bastantes meses que XCode se encuentra como una descarga gratuita dentro de la App Store, así que no tenemos más que entrar en ella y descargarlo. Procuraremos que sea la versión 4.4 como mínimo.

Una vez descargado, abrimos XCode y nos vamos a XCode -> Preferences -> Downloads. Dentro de esta pestaña instalamos las “Command Line Tools”.

Arreglando Homebrew

Durante el proceso de actualización del sistema operativo el instalador cambiará el permiso de las carpetas bajo /usr/local a root. Esto afectará nuestra instalación existente de homebrew, así que para corregirlo no tenemos más que ejecutar en un terminal el siguiente commando:

sudo chown -R `whoami` /usr/local

A continuación procedmos a actualizar homebrew:

brew update

Recuperando GCC

Puede que se te presente el caso de que trabajes con proyectos cuya versión de Ruby sea anterior a la 1.9.3. En ese caso te encontrarás en la necesidad de instalar GCC 4.2, el cual venía en versiones anteriores de XCode dentro de las Command Line Tools.

Homebrew de serie no trae ninguna fórmula que nos permita compilar gcc por nosotros mismos, pero sí incluye en el repositorio homebrew-dupes algunos paquetes que vienen o venían antes de serie con el sistema operativo. Para habilitar dicho repositorio no tenemos más que ejecutar lo siguiente:

brew tap homebrew/dupes
brew install apple-gcc42

Con eso ya tendremos GCC 4.2 de nuevo operativo en nuestra máquina.

Recuperando las X11

Puede que para instalar algún paquete con homebrew, como es el caso de ImageMagick, se nos mencione que ya no viene incluido con Mountain Lion las tradicionales X11 de Unix. Si nos encontramos en esta situación no tenemos más que ir a la web de XQuartz e instalarlo. Cualquier versión a partir de la 2.7.2 ya es compatible con Mountain Lion.