Histórico de febrero de 2009

10.lines do: Limpiando comentarios HTML

25.02.2009 0

Otra nueva sección. Esta dedicada a esos pequeños truquillos que vas aplicando con el tiempo en tus proyectos, que no llegan a tener la entidad suficiente como para ser algo liberable en forma de proyecto, pero que seguro que a alguien más le puede resultar igual de útil que te resultó a ti en su momento.

La mayoría de la gente que se ha enfrentado a los “editores WYSIWYG” incrustados en una web se ha encontrado ante el caso en que los editores que lo han utilizado han copiado texto directamente desde Word y similares. Estos programas, en especial los de Microsoft, tienen la manía de insertar junto con el código que copias una ristra de comentarios HTML con definiciones de estilo, que al ser tratados por las diferentes funciones tanto del editor visual como del gestor de contenidos generan un alto riesgo de que el HTML resultante no valide o no cierre como es debido.

La solución que llevo aplicando durante un tiempo en mis proyectos consta de dos partes. La primera es extender la clase String para dotarla de un método que elimine los comentarios HTML

class String
  def strip_html_comments!
    self.gsub!(/\<![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\>/, '')
  end
end

Podéis comprobar desde irb que funciona:

>> "<!-- foo -->bar<!-- baz -->".strip_html_comments!
=> "bar"

La segunda parte es incorporar en nuestro modelo un método al que llamar antes de que se produzca el guardado de nuestro registro (ya sea en la creación o en la actualización) que aplique el filtro que acabamos de definir sobre los campos que nos interesen. Por ejemplo:

class Article < ActiveRecord::Base
  before_save :filter_bad_html

  private
    def filter_bad_html
      [excerpt, content].each(&:strip_html_comments!)
    end
end

En este caso estaría filtrando los campos excerpt y content del modelo Article.

Hay gente que suele hacer este filtrado en el controlador en vez de en el modelo. Personalmente prefiero el tan repetido “Fat model, skinny controller” que más de uno habréis oído. Los filtros before_* y after_* que incorpora ActiveRecord son unas herramientas bastante potentes que nos pueden ayudar a hacer una aplicación mucho más legible, más sencilla y más mantenible.

Aunque el código que hemos visto sea Ruby y utilice cosas de Rails, es bastante sencillo extrapolarlo a otros lenguajes como PHP (por ejemplo usando preg_replace).

Espero que esto os resulte de utilidad :)

On The Air: Beyoncé y su “Single Ladies”

08.02.2009 1

Otra de las novedades de esta nueva etapa es la sección On The Air. Esta sección girará entorno a uno de los temas que más me ha apasionado desde siempre, la música. Y lo hará unas veces comentando alguna anécdota sobre un tema musical o un grupo, otras (como en este caso) tirando un poco de videoteca para buscar el lado cómico… Puede dar lugar a mil variantes distintas de entradas en la bitácora :P

Para estrenarla he elegido un tema que está sonando bastante en las últimas semanas: Single Ladies de Beyoncé. Sí, lo se, es la típica canción “porque yo lo valgo”, no deja de ser un tema de lo más comercial, y de un género para las masas. Pero tiene su puntejo.

Como todo tema de masas, aparte de los vídeos oficiales, al cabo de un tiempo la red se empieza a plagar de versiones del mismo, algunas serias, o algunas como las que iremos viendo un tanto… surrealistas.

Para ponernos en contexto, mostraremos el videoclip oficial:

Imagen de previsualización de YouTube

Esta coreografía, que no deja de resultar bastante sosa, en directo tiene una fuerza impresionante. No hay más que ver la actuación en directo en los American Music Awards de 2008:

Imagen de previsualización de YouTube

Tampoco podía faltar la parodia de esta canción que sacaron en el Saturday Night Live (el original, no la patraña de Cuatro), con la propia Beyoncé y un Justin Timberlake vestido con la misma indumentaria que las bailarinas que acompañan a Beyoncé en el videoclip:

Imagen de previsualización de YouTube

No podía faltar la versión friki, protagonizada por Cubby y que a este paso va a tener más éxito que el propio videoclip oficial:

Imagen de previsualización de YouTube

Para cerrar este repaso por Youtube no podía faltar la parodia española:

Imagen de previsualización de YouTube

Paco, Paco, Paco…

Instalando Ruby 1.9 en Mac OS X

01.02.2009 13

Ruby 1.9 ya está aquí. Y por lo que podemos ver en el changelog, hay muchas novedades respecto de la rama 1.8 que nos lleva acompañando desde el año 2003. Aunque creo que lo que casi todos estábamos esperando era poder usar YARV en producción :P

Si todavía no habías visto ninguna comparativa de rendimiento de las diferentes máquinas virtuales, te recomiendo que eches un vistazo a The Great Ruby Shootout.

Paso 0: Requisitos previos

Antes de seguir, es básico que tengamos instalado XCode, para lo cual o bien lo hacemos desde nuestro DVD de instalación de Leopard o bien nos vamos al Mac Dev Center de la Apple Developer Connection y nos lo bajamos.

Todo lo que vamos a escribir lo haremos en un terminal. Mi recomendación es usar iTerm, aunque hay gente que está más habituada a utilizar la propia applicación Consola. A vuestra propia elección.

Comienza la diversión ;)

Paso 1: Descarga de Ruby 1.9

Si no existiese, crearemos una carpeta src desde la que funcionaremos a lo largo de todo este tutorial:

mkdir ~/src
cd ~/src

A continuación procedemos a la descarga y desempaquetado de Ruby 1.9:

curl -O ftp://ftp.ruby-lang.org/pub/ruby/ruby-1.9.1-p129.tar.bz2
tar xfj ruby-1.9.1-p129.tar.bz2
cd ruby-1.9.1-p129/

Ya estamos listos para compilar.

Paso 2: Compilación e instalación

Ya que en Leopard tenemos instalada una versión de Ruby 1.8, para no generar conflictos y poder funcionar con ambas versiones haremos que todos los binarios de Ruby 1.9 vayan con un 19 al final del nombre (ruby19, gem19, etc). Otra cosa que haremos es que todo Ruby 1.9 se instale dentro de /usr/local, para no mezclar estos binarios con los binarios propios del sistema:

autoconf
./configure --program-suffix=19 --prefix=/usr/local

Ya estamos listos para compilar:

make

Y por último, instalar:

sudo make install

Con esto ya tenemos Ruby 1.9 perfectamente operativo en nuestro sistema. Ahora nos tocará ir mirando con gem list las gemas que ya teníamos instaladas en el sistema y volverlas a instalar, esta vez usando gem19, por ejemplo sudo gem19 install rails.

¡A disfrutar!