Delirios de un Informático

Aumentar el tamaño del lienzo de un bloque de imágenes

Me acabo de topar con una enorme cantidad de imágenes que tienen todas un tamaño distinto pero que tienen una proporción entre sí. Debido a que deben mostrarse en un espacio de tamaño fijo, el aplicar las mismas dimensiones a todas provoca distorsiones por lo que lo ideal sería disponer de todas las imágenes con un tamaño idéntico, pero requiere aumentar el lienzo o fondo de la imagen al tamaño de la más grande y centrarla. Por ejemplo, para una imagen de 18x28px habría que aumentarla a 32x32px dejando 7px a izquierda y derecha y 2 arriba y abajo.

Como siempre en los casos que tengo que tratar imágenes en bloque, he recurrido a Imagemagick:

convert img.png -background transparent -gravity center -extent 32x32 ext-img.png

Este comando extiende una única imagen, centrándola y forzando el fondo transparente. Para un bloque de imágenes bastaría con:

for i in *.png; do convert "$i" -gravity center -extent 32x32 "ext-$i"; done;

Pueden verse más opciones en la documentación de Imagemagick :).

Code Igniter Reactor 2.0.0 y la línea de comandos

Una de las novedades de Code Igniter 2.0 es la incorporación de compatibilidad para su uso a través de la línea de comandos (antes había que recurrir a chapuzas). Se añade un intérprete que permite llamar a los métodos de los controladores a través de los parámetros de un script. Para eso, hay que definir el siguiente elemento en la configuración:

$config['uri_protocol'] = 'CLI';.

De este modo podremos realizar una llamada del tipo ./cli.php controlador parametro1 parametro2, lo que equivaldría a una dirección web como http://host/controlador/parametro1/parametro2. Mi recomendación es que el script ejecutado sea una copia del index.php en donde se añada la citada configuración (utilizando la nueva variable $assign_to_config), así como un #!/usr/bin/php -q en la primera línea para facilitar la ejecución directa.

Una vez dentro del código puede detectarse si la ejecución se realiza a través de línea de comandos simplemente determinando si se ha definido la constante STDIN, así como con la comprobación del elemento uri_protocol de la configuración de Code Igniter.

Por otro lado, puede ser necesario determinar quién está ejecutando el script para otorgar o no privilegios. Eso puede hacerse gracias a la variable superglobal $_ENV, en donde se define el elemento USERNAME. Por ejemplo, para comprobar si el script se ejecuta con privilegios de administrador (bien siendo root o mediante sudo) basta con el siguiente codigo:

$auth = (getenv('USERNAME') == 'root');

PHP, CLI, STDOUT & STDERR

Suelo utilizar PHP como lenguaje para programar ciertos scripts que me faciliten muchas tareas, porque es el lenguaje que más conozco y por lo tanto el más rápido para desarrollarlos. Estos scripts pueden ejecutarse en línea de comandos como cualquier archivo Bash o Python y muchas veces requieren el uso de comandos del sistema que pueden llamarse a través de las funciones exec() o shell_exec(). El problema es que a veces estos comandos muestran una serie de datos que interesa capturar para procesarlos desde PHP y que no logran capturarse mediante estas funciones. Por eso, he rebuscado y encontrado el modo de solucionarlo:

$cmd = "/usr/bin/comando --parametros";
exec("$cmd 2>&1", $out, $err);

De este modo toda la salida de datos se pasa a PHP sin mostrarlo por pantalla :).

Cómo evitar el cambio de fuente en el arranque de Linux

Desde que instalé el kernel 2.6.29, la fuente con la que se muestran los mensajes de arranque cambia automáticamente con el mensaje setting up console font. Para mí, que en el portátil uso bastante la consola sin entorno gráfico, es un incordio ya que la letra me parece horrible. Tras curiosear un poco en los scripts de inicio, dí con la solución. Basta editar el archivo /etc/default/console-setup y dejar vacías las dos siguientes opciones:

# Set FONTFACE and FONTSIZE to an empty string if you want setupcon to
# set up the keyboard but to leave the console font unchanged.
FONTFACE=""
FONTSIZE=""

Y asunto arreglado, no más cambio de fuente al arrancar :).

clear en consola de MySQL

Un tip rápido y sencillo: cuando se trabaja con la consola de MySQL (comando mysql en línea de comandos) se muestra mucha información por pantalla, y personalmente me irrita tener la pantalla llena de datos. Para limpiar la pantalla es necesario recurrir al comando clear del sistema, ejecutando:

mysql> \! clear

NOTA: el cliente para Windows no soporta la ejecución de comandos del sistema, por lo que no funciona en Windows.