Instalar SUMO en OSX Yosemite

SUMO (Simulation of Urban MObility, en http://goo.gl/W8r9Vz) es un micro-simulador de tráfico distribuido bajo licencia GPL v3 disponible para Windows, GNU/Linux y OSX.

Screen Shot 2015-04-26 at 11.00.41 PM

Este fin de semana lo he instalado en una máquina Windows, y sin problema (doble click y arreando), en una GNU/Linux y lo mismo (un poco más porque había que compilar los fuentes, pero fácil siguiendo el tutorial), pero al llegar a OSX, no había manera. Como me ha costado un poco, dejo la receta aquí abajo para quien tenga la necesidad, que lo pueda compilar y hacer funcionar rápido.

  1. Instalar las command-line-tools. Si tenéis Xcode instalado, no hay problema. Si no, para instalarlas es tan fácil como invocar un comando que venga incluido en ellas, como por ejemplo git.
  2. Instalar Homebrew. Paquete esencial para tener los mínimos quebraderos de cabeza posibles. Como dicen en la página principal, se instala lanzando el comando ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)".
  3. Instalar las dependencias de SUMO. Con el comando brew install Caskroom/cask/xquartz homebrew/x11/fox gdal xerces-c.
  4. Exportar las variables de entorno CPPFLAGS y LDFLAGS. Para compilar los fuentes y enlazar los compilados: export CPPFLAGS="$CPPFLAGS -I/usr/local/include/python2.7 -I/usr/local/include -I/opt/X11/include -I/usr/X11/include/freetype2" y export LDFLAGS="$LDFLAGS -lpython2.7 -L/usr/local/lib -L/usr/X11/lib"
  5. Descargar los fuentes de SUMO y descomprimirlos. Algo hay que compilar, ¿no? pues eso, wget http://www.dlr.de/ts/en/Portaldata/16/Resources/sumo/sumo-src-0.23.0.zip (o la versión que corresponda) y descomprimirlo (vamos a suponer que está descomprimido en /Users/neko/Downloads/sumo-0.23.0). Si no tenemos wget instalado, basta con instalarlo a través de brew (brew install wget) o descargar el fichero de cualquier otra forma.
  6. Compilar los fuentes. Para ello, accedemos al directorio (cd /Users/neko/Downloads/sumo-0.23.0), preparamos los fuentes con el comando ./configure --with-fox-config=/usr/local/Cellar/fox/1.6.49/bin/fox-config -with-proj-gdal=/opt/local --with-xerces=/opt/local --prefix=/opt/sumo, compilamos con el comando make -j4 e instalamos con sudo make install sudo porque lo queremos instalar en /opt/sumo, tal y como pone en el parámetro --prefix del comando configure.

Si todo ha ido correcto, SUMO estará instalado en /opt/sumo. Para lanzarlo, los ejecutables serán /opt/sumo/bin/sumo y /opt/sumo/bin/sumo-gui, dependiendo de si queremos lanzar la simulación sin o con gráficos respectivamente.

Al lanzar el entorno gráfico de simulación puede salir el siguiente error:

FXApp::openDisplay: unable to open display :0.0

No pasa nada, es simplemente que el servidor de las X tiene que estar corriendo. Estará dentro de /Applications/Utilities, pero con escribir X11 en spotlight lo encontrará sin problemas.

Espero que os haya servido de mucho. ¡Que disfrutéis con vuestras simulaciones!

Instalando PredictionIO en OS X

predictionio logoPredictionIO es una aplicación (concretamente un servidor) que implementa una serie de algoritmos de recomendación para ofrecer servicios de filtrado de información a otros sistemas.

Llevaba tiempo queriendo hincarle el diente para ver qué tal se comporta, y hoy he tenido mi oportunidad. Sin embargo, la documentación para instalar el servidor en mi máquina de desarrollo me ha resultado un poco escasa. Seguramente todo esté ahí, pero no he encontrado un tutorial-receta donde me expliquen paso por paso qué hacer para poder conectarme con mi cliente al servidor.

Una de las cosas que más gracia me ha hecho ha sido el Quick Start. Éste comienza diciendo «para que probéis los clientes, vamos a partir de un servidor ya instalado y configurado». Claro que sí, como somos principiantes, ya hemos instalado el servidor con el comando del poder.

Como ya lo he conseguido, incluyo aquí el paso a paso para quien lo necesite. He de adelantar que uso brew en OS X, así que quien no lo tenga, tendrá que apañárselas para instalar los programas de otra forma. Eso sí, si le apetece ponerlo en los comentarios, genial para todos.

  1. PredictionIO necesita de MongoDB para funcionar (Hadoop no es un requisito, así que no lo incluyo). Para ello, instalamos ambos paquetes a golpe de brew:
    brew install mongo
    brew install predictionio
    
  2. Una vez instalados, hay que arrancar primero el servidor de MongoDB:
    mongod &
    
  3. Lanzamos el script de inicialización de PredictionIO. Suponiendo que se ha instalado la versión 0.7.3 y bajo /usr/local/Cellar/predictionio/, la sentencia será la siguiente:
    /usr/local/Cellar/predictionio/0.7.3/bin/setup.sh
    
  4. Creamos un usuario administrador:
    /usr/local/Cellar/predictionio/0.7.3/bin/users
    
  5. Ya podemos arrancar el servidor como nos dice el tutorial:
    /usr/local/Cellar/predictionio/0.7.3/bin/predictionio-start-all.sh
    

Una vez realizado este último paso, el servidor quedará arrancado y se podrá acceder a la administración a través de http://localhost:9000/ desde el navegador. Si a vosotros, como a mí, no os aparece ningún motor de recomendación a la hora de seleccionar uno, el problema seguramente es porque habéis obviado el paso 3, donde se incluye dentro de MongoDB la información relativa a los motores y sus algoritmos.

Espero que ahora, todos aquellos que quieran comenzar a usar PredictionIO, puedan hacerlo de verdad. ¡Un saludo a todos!

MySQL, Python, MacOSX Mountain Lion y sus problemas

Muy buenas a todos,

En esta entrada voy a hablar de una vendetta personal que tengo contra python: MySQL. No entiendo muy bien por qué siempre acabo teniendo problemas para instalar el conector y, como unas cuantas entradas más, esta es la solución que he encontrado por si alguien se encuentra en mi misma situación (incluido yo mismo).

Para ello partiremos de dos supuestos: el primero, que somos unos destroyers sin entornos virtuales y el segundo que no lo somos y tenemos cada entorno del proyecto en un entorno virtual aparte.

Sin entornos virtuales

Tanto si eres un amante del efecto dominó de la actualización de la librería X_v0.9.11 (sí, Tastypie, te estoy mirando a ti) como si sólo tienes un proyecto o directamente no te apetece configurar entornos virtuales, habrás llegado a un punto donde no hay manera de que se instale el puñetero mysql-python a golpe de pip en tu flamante MacOSX Mountain Lion. No desesperes y prueba esta otra receta a ver qué tal te va:

Primero debemos añadir al PATH de la consola el directorio de instalación de MySQL. Para ello editamos el fichero $HOME/.bash_profile añadiendo la siguiente línea:

export PATH=/usr/local/mysql/bin:$PATH

En nuestro caso la ruta es /usr/local/mysql/bin, así que echad un ojo por si acaso no es así y está instalado en cualquier otra ruta).

Segundo, para que no falle la instalación con pip, hay que enlazar el directorio de lib de MySQL así como la librería dinámica:

sudo ln -s /usr/local/mysql/lib /usr/local/mysql/lib/mysql
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

De nuevo, hay que echar un ojo a las rutas para asegurarnos de que sean correctas. Finalmente, instalamos el módulo con pip:

pip install mysql-python

Y rezamos para que no nos dé de nuevo el temido error de mysql-config not found. Si algo ha salido raro, ahí están los comentarios para contar vuestros casos. Así, entre todos intentaremos solucionarlos.

Con entornos virtuales

Realmente habiendo hecho el cambio anterior, la instalación desde la línea de comandos en un entorno virtual debería funcionar exactamente igual. Sin embargo, si como es mi caso, usáis como entorno de desarrollo PyCharm os encontraréis con que no funciona, saliendo el mensaje del terror, mysql-config not found. Por lo que me he encontrado parece que al usar un entorno virtual por alguna razón no coge bien el PATH (por favor, si alguien sabe por qué que nos ilumine).

La solución que hemos encontrado es la de la edición del script de arranque del entorno virtual. Esto es, si tenemos el entorno virtual bajo la ruta ~/.venvs/virtual/, habrá que editar el fichero ~/.venvs/virtual/bin/activate, localizando las siguientes líneas:

_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH

Y modificándolas para que queden como sigue:

_OLD_VIRTUAL_PATH="$PATH"
PATH="$PATH:/usr/local/mysql/bin/"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH

Una vez hecho esto existen dos opciones, o reiniciar PyCharm e intentar instalar desde el propio entorno o bien entrar en el entorno virtual e instalar mysql-python a golpe de pip:

source ~/.venvs/virtual/bin/activate
pip install mysql-python
deactivate

Y eso es todo por hoy. Cualquier duda, aclaración o lo que queráis, ahí están los comentarios. Cualquier modificación o mejora es bienvenida. Buen día!