Sublime Text 3: comprobar errores en PHP al grabar fichero

Gracias a Juan Prada he conocido un plugin muy majo que se llama SublimeOnSaveBuild, que lo que hace es lanzar un build cada vez que se guarda un fichero. Esto nos permite configurar ese build para buscar errores en nuestro código PHP (o en cualquier otro tipo de fichero).

Vamos a ver cómo hacer esto.

Lo primero es definir el build para PHP. En el menú nos vamos a Tools->Build System->New Build System. Se nos abrirá un fichero en el que escribiremos esto:

{
"cmd": ["/usr/bin/php", "-l", "$file"],
"selector": "source.php",
"file_regex": "^Parse error: .* in (.*?) on line ([0-9]*)"
}

En el campo cmd yo he puesto la ruta que tiene el ejecutable de PHP en mi equipo (Linux Mint), si usas otro sistema operativo deberás adaptar ese valor a lo que corresponda en tu ordenador.

Guardamos este fichero con el nombre PHP.sublime-build. A continuación deberíamos instalar el plugin SublimeOnSaveBuild desde el editor de paquetes de SublimeText, pero no lo vamos a hacer.

El motivo es que si lo instalamos tal y como viene “de serie” cada vez que grabemos un fichero PHP nos aparecerá la ventana del build, incluso aunque no haya errores. Esto es un tostón, lo ideal es que la ventana solamente aparezca (y nos llame la atención) si hay algún error.

Ya se dio alguien cuenta de esto (es el issue número uno del proyecto en GitHub), pero por lo que se ve no han llegado a encontrar una solución que satisfaga a todo el mundo porque no lo han incluido en el código principal. Rebuscando un poco entre los comentarios he encontrado una solución que, por lo menos para PHP, hace lo que yo quiero. Se trata de añadir en la carpeta del plugin un fichero CustomExec.py con un código que chequea el resultado de la compilación y cierra la ventana del build si no hay errores.

Para vuestra comodidad y la del Koas del futuro, aquí está la versión de SublimeOnSaveBuild que oculta la ventana si no hay errores. Solamente hay que ir a la carpeta de plugins de Sublime Text 3 (Preferences-> Browse Packages…) y descomprimirlo ahí.

Un “gadget” mágico: el Slope de Dekke

Normalmente uso el iPad como monitor adicional para trabajar, y lo pongo en horizontal usando el soporte Smart Cover. Pero el iPad lo compré en 2009, y después de siete años de uso el Smart Cover está ya hecho unos zorros.

Así que me puse a buscar soporte para iPad, y encontré el Slope. Tiene un diseño muy sencillo y el color encima pegaba con el del iPad, pero lo mejor de todo es el sistema de agarre que tiene: una especie de microporos (al parecer inspirado en las patas de las lagartijas) que hace que se pegue a la mesa y que atrape cualquier cosa que se le ponga, manteniendo un agarre brutal y sin ningún tipo de pegamento.

Lo recomiendo 100%, es sin duda el mejor soporte que he visto o usado jamás. Y además vale para sujetar cualquier cosa, no solamente tabletas.

Abrir fichero winmail.dat con Linux

Hoy me ha llegado un correo con un adjunto winmail.dat. Se trata de un formato que utiliza Microsoft Outlook para el reenvío de emails, y para abrirlo en Linux se utiliza el programa tnef.

sudo apt-get install tnef

Así que si recibimos un fichero de estos no tenemos más que guardarlo en una carpeta y luego, a través de la línea de comandos, ir a esa carpeta y ejecutar

tnef winmail.dat

Convertir HTML a PDF por línea de comandos

Coincide que en los proyectos que tengo para dos clientes diferentes necesito hacer la misma cosa: generar un PDF con datos personalizados. En un caso son facturas y en otro contratos.

Hasta ahora cuando necesitaba hacer un PDF usaba la librería de PHP FPDF, que está bastante bien, pero hay una alternativa mucho más sencilla: wkhtml2pdf.

Es importante que si vamos a usarlo en un servidor de producción, que no tiene servidor de ventanas, nos descarguemos la versión estática. Una vez instalado el proceso es tan sencillo como:

  1. Copiar el documento HTML base para tenerlo con el nombre que queramos.
  2. Modificarlo con PHP para incluir la información personalizada.
  3. Ejecutar wkhtml2pdf fichero.html fichero.pdf

Crear ventana de Chrome sin interfaz de usuario

Cuando estoy desarrollando para hive.ly me viene muy bien tener dos usuarios para comprobar interacciones, notificaciones, etc… Uno de ellos lo tengo en la ventana oficial de Chrome, a pantalla completa y con las herramientas de desarrollador en el otro monitor. El otro usuario lo tengo con una ventana de incógnito (para no interferir con las credenciales del usuario oficial) y no quiero que ocupe mucho, con un tamaño como el de un móvil pequeño me sirve.

En estos casos lo ideal es que la ventana de Chrome no tenga la barra de direcciones, ni las pestañas ni nada de nada, así ocupa lo mínimo imprescindible. Para conseguir esto abro la consola y escribo:

/opt/google/chrome/chrome --app=http://hivo --incognito

Con esto se consigue una ventana de Chrome sin interfaz de usuario, que puedo redimensionar y dejar en una esquina siempre visible.

Eliminar el cansino mensaje “Token mismatch” en phpMyAdmin

ATENCIÓN: esto solamente debe hacerse en instalaciones de phpMyAdmin de desarrollo local, nunca en un phpMyAdmin en un servidor de producción.

En el servidor local que uso para desarrollo tengo instalado phpMyAdmin y estaba ya hasta el gorro del mensaje “Error: token mismatch” que aparece cuando pasa un tiempo sin que hagas ninguna operación con él.

La solución más rápida que he encontrado para esto es abrir el fichero /libraries/common.inc.php (en mi equipo instalé phpMyAdmin con apt-get y está en /usr/share/phpmyadmin/libraries/common.inc.php), buscar este código

$token_mismatch = true;
if (PMA_isValid($_REQUEST['token'])) {
    $token_mismatch = ($_SESSION[' PMA_token '] != $_REQUEST['token']);
}

y cambiarlo por:

$token_mismatch = false;
/*if (PMA_isValid($_REQUEST['token'])) {
    $token_mismatch = ($_SESSION[' PMA_token '] != $_REQUEST['token']);
}*/

Así, a lo burro. Pero como es un servidor local al que no se puede acceder desde fuera el riesgo de seguridad que conlleva se puede asumir.

Recompilar gnome-screenshot para quitar los dos puntos del nombre del fichero de captura

gnome-screenshot es el programa para hacer capturas de pantalla en Linux Mint, pero tiene un problema: los ficheros que genera se guardan con un nombre que contiene la hora, minutos y segundos separados por : y esto da problemas si se quieren utilizar en Windows.

No hay ninguna opción en el programa para configurar esto, pero por suerte estamos en el mundo del código libre, donde si algo no te gusta de un programa puedes modificar el código fuente y dejarlo a tu gusto. Así que este es el proceso para recompilar gnome-screenshot y cambiar el nombre de los ficheros que genera.

Instalamos unos paquetes que nos harán falta para poder compilar:

sudo apt-get install gnome-common libxext-dev libcanberra-gtk3-dev

Descargamos el código fuente y lo descomprimimos:

wget https://git.gnome.org/browse/gnome-screenshot/snapshot/gnome-screenshot-3.4.1.tar.gz
tar -xf gnome-screenshot-3.4.1.tar.gz

Nos vamos al fichero src/screenshot-filename-builder.c, línea 126, y la cambiamos por esta:

timestamp = g_date_time_format (d, "%Y-%m-%d_%H-%M-%S");

Y lo recompilamos. Desde la raíz de la carpeta del código ejecutamos (quizá haya algún paso innecesario o duplicado, pero prefiero copiar todo lo que hice y me funcionó):

./configure
autoreconf --install
intltoolize --force
autoreconf
./configure
make
sudo make install

Os doy permiso… ¿O no?

Hoy he recibido un email de una conocida red social. Sí, voy a ser tan pedante como los informativos de la tele. Resulta que han seleccionado unas fotos de las que subí en su día a esa cosa y han hecho un “vídeo” con lo que llaman el “Día de la amistad”.

Dejando a un lado la cursilería repulsiva del vídeo en cuestión y la música totalmente opuesta a mis gustos, supongo que cuando me dí de alta autoricé a esta gente a generar aberraciones como la que me proponen.

FML… Por suerte queda poco para hive.ly…