Posts by grosshat

Linus Torvalds, ‘Nobel’ de tecnología

21 de abril, 2012 - por | | Just for fun, Noticias

Linus Torvalds Nobel de tecnología

Acaban de concederle a Linus Torvalds el galardón que se conoce como ‘Nobel’ de tecnología. Lo otorga la Academia tecnológica de Finlandia a aquellas personas cuyo trabajo ha marcado de alguna forma la tecnología contemporánea.

Me alegra mucho el premio. Soy fan de Torvalds, así que cuando veo cualquier reconocimiento público hacia él, lo comparto totalmente y me hace muy feliz ver que otras personas reconocen en su trabajo cosas verdaderamente innovadoras, no siempre relacionadas con el código y el diseño de programas.

Torvalds ha conseguido liderar el mayor proyecto de código abierto, y al mismo tiempo iniciar otro que va camino de convertirse en algo tan estable y eficiente como el primero. Lo ha hecho siempre siguiendo principios sencillos y pragmáticos, y manteniendo un buen humor envidiable. Hay un montón de hilos de discusión con participaciones suyas que son ya literatura clásica del desarrollo del software, y que deberían enseñarse en las facultades de ingeniería (especialmente en metodología del software, donde se suele pecar de excesiva teoría). Su divertido libro Just for Fun debería ser libro de cabecera de cualquier persona que se dedique profesionalmente al mundo del software.

Torvalds es el gran maestro del siglo XX de cómo organizar, hacer productivos y eficientes programas de código abierto, dejando, a partir de ahí, que se generen las líneas de negocio oportunas. Al mismo tiempo ha conseguido crear ese espacio único, donde los desarrolladores crean por el simple gusto de crear y de divertirse, sin estar únicamente guiados por planes de negocio y objetivos de marketing.

Escribo ésto sobre WordPress, otro proyecto de código abierto de gran éxito, que ha conseguido convertirse en una herramienta diaria para un montón de gente. Linus es el padre espiritual de todo ese mundo de programas de código abierto, en constante evolución, y sobre los que se construyen en nuestros días la mayor parte de los proyectos.

Es mucho. Es un montón de diversión. Es la gran prueba de que las fuentes abiertas son el camino para solucionar los problemas.

¡Felicidades Linus! :)

Gracias a vuestros ojos, los errores se hacen obvios

17 de noviembre, 2011 - por | | Just for fun

Animales gregarios, como nosotros, acicalándose, forjando relaciones y estrechando lazos.

En Grosshat tenemos la suerte de contar con muchos amigos que nos avisan de los errores que se van encontrando cuando navegan nuestro sitio, o cualquiera de los proyectos en los que estamos.

Los proyectos open source han aprovechado este tipo de acciones, volviendo en beneficio lo que en otros muchos entornos sigue siendo percibido hoy como debilidad. No hace falta decir que ahora ya hay todo tipo de tendencias que explotan estas líneas de acciones con palabras de moda en las que todo empieza por “crowd”.

Es un lujo recibir emails avisándote de cosas que funcionan mal, acompañándolas de descripciones, e incluso de capturas. Este post es un homenaje a todos esos ojos que nos ayudan diariamente a funcionar mejor. ¡Muchas gracias! :)

Tests para formularios HTML con Watir

25 de agosto, 2011 - por | 2 comentarios | Desarrollo, QA

Modelar nos ayuda a adelantar problemas futuros. Es igual que lo hagamos con plastilina, madera o tests.

Aunque nosotros no tenemos una orientación fuerte hacia los tests, en el sentido de considerarlos una parte esencial de cualquiera de nuestros proyectos, sí que los incorporamos cuando entendemos que nos vienen bien. Ésto ocurre sobre todo en proyectos de larga duración, con múltiples funcionalidades, y en constante crecimiento.

Cuando se dan esas ocasiones, utilizamos las siguientes herramientas:

  • el framework PHPUnit para código PHP
  • el framework unittest para código Python
  • el framework Watir para tests basados en el navegador

Hoy queremos hablar un poco del último, ofreciendo un ejemplo de cómo lo utilizamos.

Instalar Watir (Web Application Testing in Ruby)

Watir es una gema de Ruby, por lo que lo primero que tienes que tener funcionando en tu máquina es Ruby. Tienes toda la información necesaria en la página oficial de Ruby.

Con Ruby funcionando, en un entorno Linux como el nuestro, la instalación de Watir requiere primero tener instaladas las rubygems. A partir de ahí, instalamos Watir:


sudo gem install watir-webdriver

Para cualquier otro entorno, o ver más información sobre detalles de la instalación, consulta la documentación oficial de Watir (en inglés).

Test para un formulario HTML

Un caso habitual en los tests basados en el navegador son los formularios. Por ejemplo, piensa en el siguiente formulario, que es una captura de uno de nuestros proyectos.

Captura del formulario sobre el que se hace el test.

En este típico formulario hay 2 campos (‘Title’ ‘Comment’) y un botón de envío (‘send’). Con Watir podemos montar un test sencillo que compruebe, por ejemplo, que el proceso de añadir un comentario está funcionando correctamente.

Cuando escribes un test basado en el navegador, tus 2 recursos principales son la URL y el HTML. Con la primera obtienes la página que quieres testear, y con todo el documento HTML de esa página puedes empezar a establecer las evaluaciones que quieres probar. En nuestro ejemplo, la parte que nos interesa del HTML, es la que afecta al formulario que acabamos de mostrar. Así que una aproximación razonable sería rellenar ese formulario con datos de prueba y realizar el envío.

Creamos un fichero, lo nombramos como test_review_form.rb, y lo iniciamos con el siguiente código.


# Test for Biz Review
require 'rubygems'
require 'watir-webdriver'
b = Watir::Browser.new :firefox
b.goto 'http://mistones.dev/hdz-granite-dallas/review'
b.text_field(:name, 'title').set('Great stock and fast service')
b.text_field(:name, 'comment').set('
        Both my husband and I are pretty happy with the job the
        guys at HDZ Granite have done in our kitchen and our
        master bath. Fair price, helpful, informative and on time.
')
b.button(:value, 'send').click

Bastante claro, ¿no? Le decimos a Watir que abra una URL. Que dentro del documento HTML de esa URL rellene los campos, cuyos atributos name son ‘title’ y ‘comment’, con los datos que le pasamos. Y que a continuación pulse el botón cuyo atributo value es ‘send’.

Nos falta añadir la evaluación. En nuestro caso, vamos a evaluar si existe cierto contenido en el documento HTML, contenido que sabemos que sólo existe en la página posterior a un envío correcto.


if b.text.include? 'Your Review has been Published'
        puts 'Test passed. Test review successful.'
else
        puts 'Test failed. Test review was not successful.'
end

Con ésto ya tenemos un test completo. Podemos probarlo llamándolo:


ruby test_review_form.rb

A continuación, Watir abre el navegador instanciado en el test y ejecuta los pasos indicados. Cuando termina, devuelve los mensajes de ‘passed’ o ‘failed’.

Una vez que cuentas con este tipo de tests, dependiendo de tus gustos, filosofía, metodología, estilo, etc. puedes automatizarlos con herramientas de integración continua, o crearte tu propio proceso de comprobación, o sencillamente correrlos cada cierto tiempo para asegurarte de que las cosas siguen funcionando.

Página de mantenimiento con nginx

11 de agosto, 2011 - por | | Sistemas, Tips

En varios de nuestros proyectos utilizamos nginx como servidor HTTP. A veces solo, y otras como proxy de Apache sirviendo únicamente contenidos estáticos (mira este otro post para ver las ventajas de hacer ésto).

En cualquier sitio web te ves obligado en algún momento a poner el sitio offline: por tareas de mantenimiento de sistemas, por nuevas versiones del código, por cambios en la infraestructura, etc. Puesto que debes informar siempre al usuario de lo que pasa en tu sitio, debes tener preparada para todas esas ocasiones una página que indique que el servicio no está disponible.

En nginx eso se consigue colocando en el fichero de configuración lo siguiente:


server {
        error_page 503 @maintenance;
        location @maintenance {
                rewrite ^(.*)$ /503.html break;
        }
}

El nombre del fichero puede ser cualquiera que tú elijas. Lo que hace nginx es que siempre que existe ese fichero (en el $document_root), redirige cualquier petición que le llega a esa página. Y lo hace, además, devolviendo un código de estado 503. Puedes comprobar ésto en el Header de la página con cualquier herramienta popular tipo Firebug (documentación en inglés).

Instalar SSH2 para PHP 5.3 en CentOS

10 de agosto, 2011 - por | 1 comentario | Desarrollo, Sistemas

En el proceso de instalación de SSH2 para PHP 5.3 sobre CentOS hay un primer paso que sigue funcionando igual de bien que anteriormente:


yum install gcc php53-devel libssh2 libssh2-devel

Sin embargo, PHP 5.3 sobre CentOS aún no ha incorporado el paquete correspondiente para:


php53-pear

necesario para manejar la instalación de la extensión SSH2 mediante PECL. Es un bug ya apuntado en el Bugzilla de Redhat, pero que aún está pendiente de resolución.

Hay dos métodos principales para resolver este problema. Uno que consiste en utilizar el repositorio IUS, que ofrece paquetes php53 y extensiones más actualizados, junto con un php53-pear. Si te decides por este método, este post de Eric London te explica los pasos principales (en inglés).

El segundo método consiste en conservar el paquete tradicional php-pear y forzar su actualización mediante los siguientes comandos:


pear upgrade --force Console_Getopt
pear upgrade --force pear
pear upgrade-all

Una vez que tienes instalados los paquetes mencionados, ya puedes instalar la extensión SSH2:


pecl install -f ssh2

Una vez que esté instalada, verás que al final del proceso de instalación te indica como siempre la línea que debes añadir al fichero php.ini:


extension=ssh2.so

Reinicias tu servidor HTTP y compruebas que la extensión está cargada y funcionando:


php -m | grep ssh2

Actualizar WordPress por SSH

10 de agosto, 2011 - por | | Sistemas, Tips

Tenemos que ir más allá de nuestros límites corporales para conseguir muchas cosas.

WordPress incluye desde hace tiempo la posibilidad de actualizar directamente desde el admin tanto el core, como los plugins y los temas. Es decir, los 3 componentes principales. Para nosotros, que manejamos múltiples WordPress, es la forma más cómoda de mantenerlos actualizados.

La lástima es que la interfaz del admin sólo menciona la posibilidad de hacerlo por FTP, cuando en realidad también existe la alternativa de hacerlo por SSH. Lo único que hace falta es que tengas instalada y funcionando en tu servidor la extensión SSH2 para PHP; una vez la tienes corriendo, verás cómo WordPress te enseña en la misma pantalla de actualización la posibilidad de hacerlo por SSH.

Si te mueves en Linux, en la mayoría de las distribuciones recientes instalar la extensión SSH2 para PHP es muy fácil: no te exige compilar nada, como hace unos años. Por ejemplo, para Debian/Ubuntu este post de Kevin van Zonneveld te lo resuelve todo (en inglés).

Ahora bien, si te mueves en CentOS, y te has animado a probar PHP 5.3 sobre esa plataforma, la cosa desgraciadamente se complica un poco. Si estás interesado en ésto, te lo explicamos en este otro post.