Delirios de un Informático

Instalar Phalcon en el PHP “nativo” de Mac OS X

Phalcon es un excelente framework para PHP con la particularidad de estar programado en C como una extensión del lenguaje. Ha evolucionado muchísimo y se ha convertido, en mi opinión, en uno de los frameworks más completos e interesantes después de Laravel.

La instalación en Mac puede realizarse con Homebrew pero realiza la instalación de una versión de PHP aparte de la versión nativa de Mac OS X. Si queremos compilar la extensión de Phalcon sin más dependencias, los pasos a seguir difieren un poco de las instrucciones oficiales:

brew install gettext
brew link --force gettext
git clone https://github.com/phalcon/cphalcon
cd cphalcon/build/64bits
git checkout 1.3.4
phpize
./configure --enable-phalcon
make
sudo cp modules/phalcon.so /usr/lib/php/extensions/no-debug-non-zts-20121212

Siguiendo las instrucciones de la web oficial, nos encontramos con dos problemas: el primero es que no localiza el archivo libintl.h (de ahí el uso de Homebrew para instalar GetText) y el segundo es un fallo con _libintl_setlocale en ciertas versiones, que provoca el siguiente error:

dyld: lazy symbol binding failed: Symbol not found: _libintl_setlocale
  Referenced from: /usr/lib/php/extensions/no-debug-non-zts-20100525/phalcon.so
  Expected in: flat namespace

dyld: Symbol not found: _libintl_setlocale
  Referenced from: /usr/lib/php/extensions/no-debug-non-zts-20100525/phalcon.so
  Expected in: flat namespace

Este error se evita haciendo el checkout a la última versión publicada.

Dash & Zeal: navegadores de documentación para programadores

Dash (para Mac OS X) y Zeal (Windows y Linux) son dos programas imprescindibles para cualquier programador: unifican en una única interfaz la documentación de más de 100 lenguajes, frameworks, librerías y diverso software. Los docsets se actualizan automáticamente y disponen de integración con todo tipo de editores.

Cómo listar todos los correos “catch all” utilizados en un dominio

Llevo utilizando Google Apps con mi dominio prácticamente desde que se lanzó de forma gratuíta (hoy en día no lo es) porque una de las mejores características es el uso del catch all, es decir, el poder direccionar todas los correos electrónicos que no existan en tu dominio a un único correo centralizado.

El problema es que, pasados los años, uno se olvida de todas las direcciones utilizadas y el spam empieza a llegar a cientos de direcciones inexistentes, por lo que lo mejor es anular el catch all y crear los alias correspondientes. Pero, ¿cómo listar todas las direcciones utilizadas?. Es necesario procesar todos los correos recibidos y extraer las direcciones y eso es posible utilizando un cliente de correo electrónico que tire de IMAP y guarde los correos en disco. He optado por utilizar Apple Mail (aunque serviría Mozilla Thunderbird):

find ~/Library/Mail -name '*.emlx' | xargs egrep '^Delivered-To:' | awk '{print $2}' > mails.txt
sort mails.txt | uniq -c | sort -n -r

Estos dos comandos escanearán todos los correos extrayendo la dirección de destino y ordenando por las más usadas. De este modo, resulta fácil ver las direcciones utilizadas para crear los alias y también localizar los correos recibidos para dar de baja o modificar el correo asociado a cada servicio.

Cómo traducir nombres de directorios en Mac

Mac tiene una lista de directorios de sistema que se traducen automáticamente, como ~/Pictures, que se traduce a Imágenes en Finder. La lista de directorios y sus traducciones se encuentra en el siguiente archivo:

/System/Library/CoreServices/SystemFolderLocalizations/es.lproj/SystemFolderLocalizations.strings

Este archivo puede editarse para añadir nuevos elementos, pero está en formato binario, por lo que para editarlo hay que convertirlo previamente:

plutil -convert xml1 SystemFolderLocalizations.strings
vim SystemFolderLocalizations.strings
plutil -convert binary1 SystemFolderLocalizations.strings

Una vez añadidas las traducciones (o modificadas las traducciones existentes) es necesario que dentro de cada directorio traducido exista el archivo vacío .localized, para que Finder entienda que ese directorio tiene traducción. Hecho esto, hay que matar Finder (killall Finder) para que los cambios se apliquen.

Kindle: sincronizar última página leída de libros no comprados en Amazon

Llevo años utilizando el lector de libros electrónicos de Amazon. Tras la muerte de mi Kindle 3 me hice con un Kindle Paperwhite, pero nunca he hecho demasiado uso de las capacidades de sincronización (Whispersync) que proporciona Amazon para mantener el punto de lectura entre dispositivos, principalmente porque nunca me había parado a curiosear si era posible.

Sí es posible sincronizar la última página leída de libros no comprados en Amazon, gracias a que Amazon permite enviar documentos personales a cualquiera de los dispositivos asociados a una cuenta (ya sean dispositivos físicos o aplicaciones). Estos documentos personales deben estar en un formato admitido como .mobi (para la conversión, nada mejor que Calibre) y se almacenarán automáticamente en la Kindle Personal Document Service (con una capacidad de 5GB).

¿Y cómo se pueden enviar estos documentos personales?. De dos modos:

  • Mediante el correo electrónico único de cada dispositivo: puede obtenerse desde Gestionar mi Kindle
  • Mediante la aplicación Send to Kindle: disponible para Mac y Windows

Todos los documentos almacenados de este modo se sincronizarán automáticamente a todos los dispositivos y aplicaciones asociados a la cuenta, así como los puntos de lectura, marcadores y anotaciones de cada documento. Si se avanza en la lectura en un dispositivo, al abrir el libro en otro dispositivo se mostrará un mensaje preguntando si se desea avanzar hasta esa posición.

También es interesante destacar que la estructura de carpetas (colecciones) también se sincroniza, por lo que si en un dispositivo se crea una colección y se guardan ahí ciertos documentos, esta estructura se creará automáticamente en el resto de dispositivos….