Instalar PIL en un virtualenv de python, y que importe correctamente las librerías de jpeg, png, etc.

PIL es una librería bastante útil en muchos casos. Se apoya en varias librerías externas para manejar diferentes formatos de imagen:

  • libjpeg para manejar imágenes JPEG (en Ubuntu 11.04 aptitude install libjpeg62 libjpeg62-dev).
  • zlib para manejar imágenes PNG (en Ubuntu 11.04 aptitude install zlib1g zlib1g-dev).
  • etc.

La manera más lógica de instalarlo debería ser instalar primero esas dependencias en el sistema, como explica aquí: http://www.eddiewelker.com/2010/03/31/installing-pil-virtualenv-ubuntu/, y luego instalar PIL con “pip install PIL”. Es necesario instalar la versión “-dev” para que incluya las cabeceras C. En una distribución tipo Debian sería:

$ sudo aptitude install libjpeg62 libjpeg62-dev
$ sudo aptitude install zlib1g-dev
$ sudo aptitude install libfreetype6 libfreetype6-dev

El problema es que el instalador tiene un algoritmo bastante cutre para localizar estas librerías en el sistema, y a menudo no las encuentra. Por ejemplo en Arch las encuentra bien, pero en Ubuntu no. Mi problema ahora mismo es instalarlo dentro de un virtualenv con pip install. El comando pip se descarga correctamente la librería y la compila bien, pero al no encontrar esas dependencias, me sale el siguiente mensaje:

--------------------------------------------------------------------
*** TKINTER support not available
*** JPEG support not available
*** ZLIB (PNG/ZIP) support not available
*** FREETYPE2 support not available
*** LITTLECMS support not available
--------------------------------------------------------------------

He visto tres soluciones, de más complicada a menos:

    1. Descargar PIL de http://effbot.org/downloads/Imaging-1.1.7.tar.gz e instalarlo manualmente con python setup.py install. Si sigue sin encontrar las librerías, trucar el setup como se explica aquí: http://effbot.org/zone/pil-decoder-jpeg-not-available.htm.(esta no la recomiendo normalmente)
    2. Instalar PIL con pip pero diciéndole que no lo compile, y luego editar el setup y compilarlo a mano, tal como explica aquí: http://ubuntuforums.org/showpost.php?p=10804763&postcount=2.(esta es la más recomendable)
       1/ Find the path where libjpeg.so is installed, with
          dpkg -L libjpeg62
          dpkg -L zlib1g
          dpkg -L libfreetype6
       2/ Call 'pip install -I pil --no-install' to download and unpack the PIL source
          into your build directory;
       3/ Get into your build directory (<virtualenv_path>/build/pil) and edit setup.py;
       4/ Find a line that says 'add_directory(library_dirs, "/usr/lib")' (line 214 here)
       5/ Add the line 'add_directory(library_dirs, "<library_path>")' afterwards;
       6/ Call 'pip install -I pil --no-download' to finish the installation.
    3. Instalar PIL globalmente en el sistema con aptitude install python-imaging (al ser un paquete de Ubuntu ya sí que resuelve todas las dependencias) y luego copiarlo o enlazarlo al virtualenv, como explica éste: http://menudoproblema.es/blog/entries/2011/04/26/soporte-para-jpeg-zlib-y-freetype2-en-pil/.(esta es una opción rápida si no funciona la anterior)
      $ cd /path/to/virtualenv
      $ ln -s /usr/lib/python2.7/dist-packages/PIL/ lib/python2.7/site-packages/

Establecer el idioma para el cliente de test de Django

Si necesitas especificar un idioma para el cliente de test de Django (django.test.client.Client), puedes hacerlo especificandolo en el settings, mediante la variable:

LANGUAGE_CODE=”en-us”

Cortes de Spotify en Ubuntu (instalado por Wine)

A mí también se me bloqueaba Spotify después de un cierto tiempo funcionando con normalidad, hasta que cambié un ajuste sencillo de audio en Wine…

Desde Ubuntu aceder a la configuración de wine y cambiar lo que sigue:

Menu/Aplicaciones/Wine/Configurar Wine:

  • Pestaña “Audio”:  Controlador Alsa (Desactivado) y Conrolador EsounD (Activado.
  • Pestaña “Aplicaciones”: Versión a Imitar:  “Windows XP”
“Aplicar” y listo.

Espero que os sirva, hasta que Spotify se digne a sacar una versión para Linux, y usuarios “No premium”.

Referencias:

http://crashbit.homelinux.com/node/1756

http://www.ubuntu-es.org/node/124169

Openbravo + Apache con un bonito ProxyPass

Pongámonos en situación:

1.- Tenemos un openbravo accesible desde http://ip_interna_y_oculta:8080/openbravo

2.- Queremos que los usuarios accedan a través de http://mi_dominio_estupendo/openbravo

Los que hayáis usado apache en otras ocasiones estaréis tentados de utilizar el típico proxypass:

    ProxyPass /openbravo http://ip_de_la_maquina:8080/openbravo
    ProxyPassReverse /openbravo http://ip_de_la_maquina:8080/openbravo

Esto a primera vista funciona, el problema es que probando un poco resulta que sigue habiendo llamadas al tomcat que no se traducen internamente de manera correcta. La solución pasa por crear un nuevo conector para tomcat en el fichero /ruta_del_tomcat_de_openbravo/conf/server.xml añadiendo algo de la forma:

<Connector port="8081" proxyPort="80" proxyName="mi_dominio_estupendo" />

o

<Connector port="8081" proxyPort="443" scheme="https" proxyName="mi_dominio_estupendo" />

si se quiere usar https

Y hacemos que el proxypass utilice el nuevo conector del puerto 8081

    ProxyPass /openbravo http://ip_de_la_maquina:8081/openbravo
    ProxyPassReverse /openbravo http://ip_de_la_maquina:8081/openbravo

Reiniciamos el tomcat y el apache y listo! :)

Acceder a PostgreSQL con cualquier usuario

Al instalar PostgreSQL en Linux, es posible que tengamos algunos problemas para entrar. ‘Fatal error’ es un mensaje que da poca información. Una de las causas de este mensaje es el que se soluciona en este post.

Resulta que la instalación por defecto de postgres obliga a que el usuario de postgres sea el mismo del sistema. Así que si creamos un usuario ‘user-postgres’ en la base de datos, tenemos que crearlo también en el sistema, y lanzar el comando psql logados como ‘user-postgres’.

Para evitar esta engorrosa configuración, hay que localizar el  fichero pg_hba.conf en la instalación de postgres (estará en un sitio u otro dependiendo de la distribución, por ejemplo: /var/lib/pgsql/data) y en la parte final del fichero, cambiar ‘ident sameuser’ por ‘trust’ en todas las líneas.

Desde este momento ya puedes lanzar postgres con el usuario que quieras, por ejemplo:

foss$ psql -U user-postgres -W

Reducir la velocidad del micro

Con las altas temperaturas del verano, mi micro estaba empezando a entrar en zonas críticas de temperatura. Para reducir la frecuencia, basta con hacer:

cpufreq-selector -c 0 -f 600
cpufreq-selector -c 1 -f 600

(dos veces, porque es un core duo, y hay que hacerlo por separado para cada núcleo)

Restringir tipos de contenido en plone!

A veces misteriosamente esta opción desaparece en el menú de añadir item en plone, en tal caso basta con asegurarse de que el usuario correspondiente tiene el permiso “Modify constrain types”.

Convertir un PDF a un TIFF de varias páginas

El paquete debian “imagemagick” tiene varias funcionalidades muy útiles para el trabajo con imágenes. Entre ellas, el siguiente comando permite convertir un pdf a un tiff de varias páginas (útil para temas de fax):

$convert documento.pdf imagen.tiff

Para visualizar un tiff de varias páginas, lo mejor que hemos visto es es el visor de documentos Evince

Plone y los iframes

Para que una página creada desde plone admita iframes nos vamos en el zmi a portal_transforms->safe_html y añadimos en valig_tags la entrada iframe con valor 1.

Seguir

Get every new post delivered to your Inbox.