Seguimos peleando intentando dar con la mejor manera para hacer pruebas, pero por ahora parece que el ganador está siendo la combinación de RSpec con rcov que te permite medir el depender de los fixtures en Rails estamos utilizando FixtureReplacement2, aunque por ahora no tengo claro cuál sería la mejor opción pero es un buen principio y no sería demasiado complicado cambiar las pruebas a otra librería u otra metodología.

Cuando tenga más rodado todo espero poder hablar más extensamente sobre ello, pero si alguien quiere decir algo puede animarse y contar sus experiencias

Cualquiera que haya tenido que mantener tests de aplicaciones en Rails habrá llegado a soltar algún improperio al tener que mantener Fixtures (y eso que en Rails 2.0 facilitaron algo la gestión) ya que en cuanto el proyecto tiene algo de envergadura y movimiento ese sistema se vuelve inmanejable, se emplea demasiado tiempo en gestionar unos datos en unos ficheros de texto para solucionar problemas en los tests.

Sin embargo no parece que haya una alternativa ideal para los tests, hay muchas posibilidades y parece que no está clara cual es la forma más adecuada al sistema integrado en Rails. Personalmente me gusta Fixtures Replace 2 y tengo planeado echarle un vistazo a Fixture Scenarios (un interesante artículo: “Fixin’ fixtures“) pero no tengo muy claro cuál sería el mejor método. También tengo pendiente probar RSpec, pero cambiar toda la metodología de tests puede llegar a ser costoso así que me gustaría preguntar aquí ¿qué es lo que más apropiado habéis visto para usar con Rails?

Ahora mismo estoy leyendo 3 cosas que voy a describir aquí. La primera es sobre la gestión de las tipografías en Firefox 3 sobre el hinting, kerning y las ligaduras, resulta prometedor.

También estoy leyendo algo sobre la posición de Gnome en un artículo titulado Gnome in the age of decadence” (llegué a él a través de Reddit) en el que se debate sobre si Gnome ha llegado a un punto de estancamiento y decadencia. La llegada de KDE4, el estado de Gnome y la omnipresencia de la web 2.0 creo que pueden estar relacionados de alguna forma, y éste es un buen artículo (y los comentarios también en reddit) para reflexionar algo sobre ello.

Por último una reflexión sobre algunos errores al implementar REST que podemos aprender de Newsgator.

De un tiempo para acá estoy teniendo en cuenta DataMapper, un ORM para Ruby que tiene similitudes con Active Record pero se nota que es una librería posterior por muchos detalles. De las cosas interesantes que puede hacer hay algunas muy dignas de tener en cuenta.

  • Las actualizaciones parciales, que ya se encuentran disponibles en la nueva versión de Active Record en Rails 2.1
  • Actúa contra la base de datos con inteligencia, minimizando en lo posible el número de accesos a las tablas.
  • Las búsquedas son totalmente en Ruby, con lo que no hay que hacer extraños inventos para búsquedas complejas (en ActiveRecord hay que tocar el SQL para unir varias condiciones).
  • Es explícito. Al definir la clase también definimos los campos y el tipado de éstos. En ActiveRecord a veces me siento un poco desorientado ya que las propiedades de la clase se definen al conectar con la base de datos, en DataMapper se definen explícitamente en la clase.
  • Acceso directo. Si tenemos el modelo Post podemos hacer Post[3] en lugar de Post.find(3) y otras muchas más formas de encontrar lo que buscamos.
  • Paranoia. DataMapper incluye de serie el borrado lógico al definir una propiedad como property :deleted_at, ParanoidDateTime. La realidad es que casi siempre que borramos sólo queremos marcar como borrados, y que el ORM de serie incluya esta funcionalidad nos facilita mucho el trabajo. Con ActiveRecord puede conseguirse, pero no es lo mismo

No es oro todo lo que reluce y DataMapper todavía no está completo del todo (siguen trabajando en las relaciones entre objetos y algunas cosas más) pero la verdad es que para proyectos Ruby que no sean Rails puede ser una interesante opción, sobre todo si estamos probando algo como Merb con DataMapper.

No hace demasiado tiempo descubrí ionice, un comando que actualmente se ha vuelto imprescindible para mi día a día porque consigo tener un sistema más ligero.

ionice nos permite controlar con que prioridad tienen acceso los recursos de entrada y salida y el uso que le doy es poder poner en un segundo plano transferencias largas de disco a disco. Si ojeamos la página man del comando podremos ver su sencillo funcionamiento, ya que sólo hay que especificarle un tipo de prioridad al proceso. No voy a entrar en detalle del funcionamiento, ya que es muy sencillo, y me limitaré a poner un ejemplo de uso.


$ cp -fr /media/dvd/* . &
$ sudo ionice -c 3 -p $!

Con estas 2 líneas inicio el proceso de copia del contenido del DVD y después uso ionice para especificar que el proceso especificado en $! (bash lo expande al último comando ejecutado) pase a tener prioridad 3, que es IDLE, de forma que sólo se procesará la entrada y salida cuando el sistema esté libre y no tendremos ninguna penalización en el resto del funcionamiento del sistema. El proceso de copia si llevará más tiempo pero en los casos en los que ese tiempo no nos afecte merece la pena por la suavidad con la que queda el sistema.


$ sudo ionice -c 3 cp -fr /media/dvd/* .

El anterior ejemplo es prácticamente lo mismo sólo que mostrando como se ejecuta un comando directamente en vez de aplicar el cambio de prioridad a un proceso ya corriendo.

Creo que todos deberíamos tener este nice de entrada y salida en nuestro arsenal para el día a día del trabajo con los sistemas Linux ya que, sobre todo en los sistemas de escritorio, puede ayudarnos a hacer mucho más agradable el trabajo mientras estamos moviendo grandes cantidades de datos.

Iba a hablar sobre el artículo “Task management usign vim” sobre gestión de tareas con VIM pero me he dado cuenta de que en la portada de programming.reddit.com hay varios artículos sobre vim además del mencionado anterior, como por ejemplo uno sobre usar VIM como IDE para Python y una pregunta sobre porqué usar VIM: Can someone explain the advantages of emacs/vim/nano over more GUI-intenvie editors like GEdit/Notepad++/Programmer’s Notepad?.

Debo confesar que a pesar de los años en los que llevo utilizando VIM no me considero un usuario experto, a pesar de que lo tengo configurado, hice algún script y procuro sacarle el máximo provecho. ¿Con qué tipo de editor soléis trabajar? ¿por alguna razón en particular?

En Creating constraints el autor nos cuenta su experiencia con el proceso que lleva para realizar el trabajo. De los 5 días laborables el autor dedica 2 a trabajos “interrumptivos”: contacto con clientes, pequeñas tareas, reuniones y demás trabajos, mientras que los otros 3 días los dedica a realizar aquellos trabajos que requieren de más atención. No explica qué hace para llevar el control de qué hacer o cómo priorizar, pero la idea subyacente es aislar las interrupciones del trabajo intensivo, evitando así que nos coma el día a día. Evidentemente no en todos los trabajos hacer algo así es posible, pero debo admitir que me ha parecido interesante.

Tarde o temprano nos encontramos con problemas de organización del tiempo, lo que nos dificultan ser productivos y conseguir aprovechar el tiempo. Por ello han surgido numerosas formas de organizar las tareas y el tiempo que sugieren métodos de trabajo o de vida personal, posiblemente la que más ‘buzz’ tenga sea GTD (“Tener las cosas hechas”) que cuenta con varias implementaciones, además de que podemos ver la enorme cantidad de listas TODO, calendarios y gestores de tareas que han ido apareciendo.

Realmente la gestión del tiempo propio es tarea difícil, en muchos casos la realidad puede inmiscuirse en lo que tengamos planeado y por ello necesitaremos algún proceso flexible y que se pueda ajustar a la vida real, no sólo que quede bien sobre el papel. Personalmente utilizo una aproximación a GTD pero alguna vez he llegado a probar algo parecido a lo que se cuenta en el artículo (con las limitaciones impuestas por el día a día del trabajo), y creo que podría ser una forma muy hábil de trabajar en los casos en los que pueda ser así.

Cada cierto tiempo me gusta mencionar algunas extensiones que hacen mejor mi experiencia de navegador y esta vez le toca a una que acabo de instalar estos días: Taboo.

Se trata de una especie de gestor de marcadores pero que muestra unas pequeñas capturas y permite navegar por las fechas. La diferencia con los marcadores es que está pensado para usar y tirar, ya que agregar un enlace es cuestión de hacer click en el icono adecuado y el borrado está a un click también Ya ha empezado a utilizarlo para guardar enlaces para leer en el futuro.

Así es Taboo

Personalmente incluiría a Taboo en la misma categoría que Scrapbook, un gestor ‘offline’ de favoritos que permite capturar, editar y ordenar páginas y sitios web.

Desde hace algunas semanas estoy utilizando Prism, uno de los proyectos de Mozilla con el objetivo de trabajar de una forma distinta con las aplicaciones web. Se trata de una sencilla aplicación que ejecuta un navegador empotrado, con las características de que se trata de una versión muy reducida ya que no tiene los controles habituales (ni barra de dirección, ni botón atrás/alante).

Prism intenta satisfacer a todas aquellas personas que utilizan aplicaciones web con frecuencia y permite integrarlas de forma que parezcan una aplicación web. En un futuro quizás ofrezcan más funcionalidades como archivo de datos local, posibilidades de trabajo sin conexión o uso de componentes de escritorio, pero por ahora es una aplicación bastante sencilla.

El uso que le doy principalmente es separar alguna aplicación web del resto de la navegación y trabajo que pueda hacer en el navegador. De esta forma consigo que en caso de malfuncionamiento del navegador (nada excepcional hoy en día) puedo reiniciar o colgar el navegador con la tranquilidad de seguir teniendo la aplicación web corriendo en otro sitio.

Además ahora es más fácil instalarlo ya que en la reciente Ubuntu 8.04 está el paquete Prism (e incluye otros como Google Analytics, Twitter y más).

En Slashdot publican un artículo titulado “Do the Blind Deserve More Effort on the Web?” en el que se plantean los problemas que tienen las personas con problemas de visión para usar la web. Desgraciadamente parece ser que la Web 2.0 no le da importancia a la accesibilidad, una gran mayoría de sitios se usa AJAX sin ofrecer una alternativa y Flash sigue teniendo gran terreno (sobre todo en el vídeo, sin ofrecer subtítulos ni transcripciones).

No voy a pretender dar lecciones de nada a nadie, ya que a pesar de mi interés por la accesibilidad todavía no he conseguido que la accesibilidad forme parte de mi proceso de trabajo cuando lo hago en la web, y realmente es complicado, pero quizás es bueno preguntarse ¿estamos haciendo lo suficiente?.