Instalar MCrypt en Ubuntu

[linux] [programación]

En un artículo anterior ya hable de como instalar MCrypt en Max OSX. En ubuntu el proceso también es sencillo.

1. Instalamos MCrypt:

sudo apt-get install php5-mcrypt

2. Indicamos a PHP que puede usar el módulo. Editamos el fichero php.ini:

sudo gedit /etc/php5/cli/php.ini

3. Al final de la sección de Dynamic Extensions añadimos esta línea y guardamos el fichero:

extension=mcrypt.so

¡Y ya está! Fácil 😉

phpunit con CIUnit no hace nada

[linux] [programación]

Ejecución de phpunit sin salida por consola

Este es otro claro ejemplo de problema en informática al que dedicas un montón de tiempo y te vuelves loco para resolverlo, y al final resulta ser una chorrada. El problema es el siguiente: yo hago mis tests para CodeIgniter utilizando CIUnit y en mi anterior sistema todo funcionaba (MacOSX). Cambio de sistema a un Linux Ubuntu, y cuando lanzo los tests no ocurre nada. No hay mensajes, no hay errores, no hay nada de nada.

Así que tras muchos días de pruebas, en mi desesperación me pongo a añadir mensajes de debug por todo el código de la librería CIUnit y el core de CodeIgniter para encontrar en que momento se para la ejecución, hasta llegar a esta línea:

return @mysql_pconnect($this->hostname, $this->username, $this->password);

Esta línea en el fichero /system/database/drivers/mysql/mysql_driver.php es donde salimos de CodeIgniter para entrar en el core de PHP y es donde la ejecución está fallando. Y a algún “genio” se le ocurrió que sería una buena idea silenciar los errores…

Al quitar el silencio, PHP nos informa de que no puede conectarse a la base de datos porque no tiene el driver de mysql instalado, lo cual podemos solucionar fácilmente con:

sudo apt-get install php5-mysql

Aquí dejo un listado de comandos que me han sido útiles en la resolución del problema:

Comprobar si tienes un módulo instalado:

php -i | grep nombre_del_modulo

Por ejemplo:

php -i | grep mysql

Obtener el listado de módulos que podemos instalar:

apt-cache search php5-

Recomendaciones de anime – Temporada de primavera 2014

[anime]

Anime de la temporada de primavera 2014

Otra temporada con poquito que recomendar. Algunas series decentes que terminarán la temporada que viene, pero poco que destacar en la actual.

Ping Pong THE ANIMATION

De nuevo los japoneses demuestran que son capaces de hacer anime sobre cualquier tema. En este caso tratan del ping pong, aunque lo realmente interesante es la historia y la relaciones entre los personajes. En el apartado artístico, me recuerda mucho a Tekkonkinkreet pero con peor dibujo y animación. Pero tampoco quiero decir que sea mala animación, es simplemente un tanto experimental con los recursos de los que disponían.

Establecer Fish como shell por defecto en Ubuntu

[linux]

Por fin tengo equipo nuevo en el trabajo, un precioso portátil HP con su flamante Windows 8 … que ha durado como 5 minutos hasta que lo he sustituido por un Ubuntu 😛

Así que de nuevo tengo que ver como sustituir el aburrido bash por Fish:

1. Instalamos Fish. Lo cual es tremendamente sencillo ya que se instala a través del Centro de software de Ubuntu. Mejor si descargamos el paquete de la web que tendrá una versión más reciente.

2. Abrimos el terminal, y tecleando fish ya nos lanza el nuevo shell. Pero mejor si esto es automático. Para ello tenemos que añadir el comando fish en uno de estos dos ficheros: .bashrc o .bash_profile, ambos en la carpeta home del usuario. La diferencia fundamental es que .bashrc se lanza si la shell es “interactiva” mientras que .bash_profile se lanza si es una shell de “login”. En esta página tenéis una explicación más detallada de las diferencias entre los ficheros.

3. (Opcional) Para muchas tareas (en mi caso todo lo que use Ruby), es necesario que el terminal se lance en modo “login”, ya que RVM define su path en .bash_profile.  Podemos lanzar la shell de login con el comando /bin/bash --login, pero entonces tendríamos que volver a lanzar fish. Lo ideal es indicar al terminal que se lance en modo “login”. Para ello, En el menú del terminal, vamos a Editar -> Perfiles… Seleccionamos uno (puede ser el Default o creamos uno nuevo) y le damos a Editar. En la pestaña Título y comando, seleccionamos la opción Ejecutar el comando como un intérprete de conexión.

Establecer fish como shell por defecto en Mac OSX

[mac]

El otro día vi Fish en funcionamiento y me sorprendió la cantidad de automatismos que ofrece y que deberían estar incluidos en el terminal a estas alturas, pero no lo están. La instalación es sencilla, pero hay un par de pasos que he tenido que investigar, así que aquí está el listado. Lo instalaremos usando Homebrew del que ya he hablado anteriormente.

1. Instalamos con Homebrew

brew install fish

2. Habilitamos la escritura del fichero /etc/shells

sudo chmod +w /etc/shells

3. Editamos el fichero /etc/shells y añadimos fish a la lista de shells permitidos

sudo vi /etc/shells
/usr/local/bin/fish

4. Establecemos fish como shell por defecto

chsh -s /usr/local/bin/fish

‘curl: (6) Couldn’t resolve host’ en un servidor con Plesk

[linux]

En el servidor que uso en el trabajo tenemos dos tareas programadas en el Cron. Ejecutando crontab -l podíamos ver la configuración establecida:

SHELL=/opt/psa/bin/chrootsh
MAILTO=""
0 9 * * * /usr/bin/curl http://myweb.com/mytask

0 3 * * 0 /path/to/a/script/script.sh

Sin embargo ninguna de las dos tareas se estaba ejecutando. Tras investigar un poco, pruebo a utilizar el Shell que se especifica en el Cron descubriendo dos cosas:

1. La nueva raíz de directorio para este SHELL es distinta, y por tanto la ruta hasta el script.sh no existe.

2. Curl no es capaz de resolver la URL.

La solución al primer problema es sencilla, únicamente debemos corregir la ruta para que cumpla con la nueva raíz del shell. La segunda no es tan inmediata, y probablemente se deba a un fallo en la configuración de los DNS. En cualquier caso, y como solución rápida, elimino esa primera línea indicando el SHELL, ya que por lo que veo no está aportando nada excepto problemas. Tras realizar esa acción, curl empieza a funcionar correctamente.

Instalar PHP con MCrypt en Mac OSX Mountain Lion

[programación]

En el servidor de producción no tenía ningún problema, pero al montar el servidor en local para lanzar pruebas con el PHPUnit me saltaron estos errores:

Fatal error: Call to undefined function mcrypt_encrypt

Fatal error: Call to undefined function hex2bin

El primero ocurre porque el XAMPP no trae la librería MCrypt instalada por defecto. El segundo ocurre porque la función hex2bin se incluye en PHP 5.4 y yo estaba trabajando con la 5.3. Por tanto, la solución consiste en instalar PHP 5.4 con MCrypt integrado.

La forma más sencilla de hacer esto es utilizar Homebrew. La documentación para instalarlo está en su web y es tan sencilla como copiar una línea en el terminal. Una vez instalado hacemos lo siguiente:

brew update
brew install php54-mcrypt

A continuación debemos añadir el nuevo PHP a nuestro PATH. Cuando termina la instalación, brew nos dice donde lo ha instalado, pero la ruta será similar a esta: /usr/local/Cellar/php54/5.4.28/

Abrimos el fichero .bash_profile en el directorio de nuestro usuario y añadimos estas dos líneas:

export MCRYPT_PHP=/usr/local/Cellar/php54/5.4.28/bin
export PATH="$MCRYPT_PHP:$PATH"

Reiniciamos el terminal y ya podremos utilizar PHPUnit con el nuevo PHP instalado.

CIUnit: Errores y soluciones para empezar a funcionar

[programación]

Poco a poco me voy concienciando de la importancia de realizar tests unitarios, pero entre unas cosas y otras, y siempre un poco de perrería, nunca me había dignado a montar tests unitarios con mis aplicaciones en CodeIgniter.

Por fin ayer, aprovechando un rediseño de la estructura de la aplicación, me decidí a incluir tests unitarios en CodeIgniter. Tras buscar un poco encontré una implementación para integrar PHPUnit con CodeIgniter, llamada CIUnit.

La documentación es un tanto escasa y confusa, pero tres buenos sitios donde buscar son:

Tras seguir los pasos de la instalación (en un Mac OS X Mountaion Lion), y lanzar PHPUnit desde consola, me saltaron varios errores que detallo a continuación:

Error

[CIUnit] PHP Error: Warning - require_once(PHPUnit/Autoload.php): failed to open stream: No such file or directory File Path: CIUnit/bootstrap_phpunit.php (line: 259)

Fatal error: require_once(): Failed opening required 'PHPUnit/Autoload.php' (include_path='.:') in /project_path/application/third_party/CIUnit/bootstrap_phpunit.php on line 259

Solución

Si estás usando la última versión de PHPUnit tengo entendido que no es necesario cargar ninguna librería, por lo que podemos ir al fichero bootstrap_phpunit.php y comentar o borrar la línea 259.

Error

[CIUnit] PHP Error: Notice - Undefined index: REMOTE_ADDR File Path: core/Input.php (line: 351)
PHPUnit 4.0.14 by Sebastian Bergmann.

Solución

Cuando lanzamos una aplicación PHP desde consola (en este caso PHPUnit) evidentemente no tendremos una REMOTE_ADDR, por lo que debemos añadir una comprobación.

Sustituimos:

$this->ip_address = $_SERVER['REMOTE_ADDR'];

Por lo siguiente:

if(isset($_SERVER['REMOTE_ADDR']))
    $this->ip_address = $_SERVER['REMOTE_ADDR'];
else
    $this->ip_address = '127.0.0.1';

Error

[CIUnit] Error: 500 Message: Unable to connect to your database server using the provided settings. Filename: core/Loader.php Line Number: 346

Solución

Tal como explican en esta página, no podemos usar localhost como hostname, por lo que lo cambiamos por 127.0.0.1 en application/config/testing/database.php:

$db['default']['hostname'] = '127.0.0.1';

Recomendaciones de anime – Temporada de invierno 2014

[anime]

Anime de la temporada de invierno 2014

Esta ha sido una temporada entretenida, con una buena variedad de anime que se deja ver, aunque no hay mucho que recomendar.

KILL la KILL

Esta es la primera serie creada por el estudio Trigger, compuesto por ex-miembros de Gainax, y nos trae esa acción trepidante y locura que tanto se echaba de menos. Sí, se nota el bajo presupuesto, y la historia hace aguas de vez en cuando, y el desarrollo de personajes se queda un poco corto… pero da igual, es entretenimiento del bueno, y aunque no llega al nivel de Tengen Toppa Gurren Lagan, destroza a casi todo lo que se hace de acción últimamente.

Gin no Saji: Silver Spoon Second Season

Seguimos con las andanzas de Hachiken criando cerditos, vacas y caballos, y mantiene el buen nivel de la primera temporada. Me han sorprendido los temas que se han tratado en esta temporada, bastante serios para un anime de este estilo, y me han dejado con ganas de más. ¡Ojalá se animen con una tercera temporada!

Valencia en Fallas, ciudad sin Ley

[reflexiones]

Podría escribir 5 páginas con todas las barbaridades que se hacen en Valencia en Fallas, las innumerables muestras de incivismo, y la permisividad de las instituciones con estos comportamientos. Pero no lo voy a hacer, no quiero aburrir a nadie.

Lo que sí haré es una declaración de intenciones. De ahora en adelante, buscar un plan que me mantenga fuera de Valencia durante estos días pasa a tener prioridad absoluta.