PyConEs 2017 Cáceres

Quizá llegues aquí de rebote y no sepas lo que es PyConEs, así que voy a hacer un breve resumen. PyConEs es la conferencia del lenguaje de programación Python más importante de España. Se celebra una vez al año en una ciudad distinta y en ella se juntan amantes de este lenguaje. La comunidad de Python, además de ser enorme y estar llena de apasionados pythonistas, es una comunidad inclusiva y abierta. Es un evento totalmente recomendable repleto de charlas interesantísimas.

Es mi tercera PyConEs. Por lo visto, y sin buscarlo, sólo asisto a las PyConEs impares, así que asistí a la de 2013 en Madrid, a la de 2015 en Valencia y a la de Cáceres este año, del 22 al 24 de septiembre de 2017. En la primera a la que fui, en mi universidad, no tenía ni idea de python. Acababa de ponerme con el lenguaje y apenas sabía algo de su sintaxis y bondades. Pero había algo en él que me atraía poderosamente. Me pagaban por trabajar en otro lenguaje de programación, con otras tecnologías bastante más antediluvianas. Hoy, 5 años después, puedo decir que tengo un trabajo python-based, así que quizá PyConEs fue el punto de ruptura que me hizo decir «Eh, yo quiero trabajar en esto«.

Y ahora, llega el momento del despelleje. Esta vez no me voy a extender mucho sobre cada punto, sólo haré un breve repaso sobre los pros y contras que he encontrado en esta edición. Todos los comentarios son hechos desde el respeto y desde mi opinión personal.

Lo bueno

Casi todo. Cáceres es una ciudad preciosa, que pude disfrutar un poco al salir de las charlas (¡Con concierto de rock incorporado!). El complejo cultural San Francisco es un sitio bien dotado para las charlas. Estaba cerca del centro, así que pudimos ir andado, pero además tenía un parking amplio por si el alojamiento estaba más lejos.

Los temas de las charlas y la cantidad de ellas entre las que elegir estuvieron muy bien. Mucha variedad de una comunidad que se ve que cada vez está más madura. Sobre los talleres del viernes no puedo opinar, ya que no llegué a tiempo: cosas de hacerse el mismo día el viaje Viena-Madrid-Cáceres…

Hubo tanta variedad y calidad que tengo apuntadas un montón de charlas a las que no pude ir porque estaba en otro track.

Y como no, lo mejor, la gente. Siempre. Como dijo acertadamente Naomi Ceder en la apertura «Vine por el lenguaje, me quedé por la comunidad«. Yo no soy persona de comunidades, pero en esta me siento muy a gusto. Y eso es un gran avance son respecto a otras convenciones a las que he ido una vez y no repetiría ni como proyecto sociológico.

Lo no tan bueno (Polite mode ON)

Desde mi punto de vista lo peor ha sido el nuevo formato de charlas de 25 minutos. Se mascaba cierto estrés en ponentes que no estaban acostumbrados a un formato tan corto. Aunque algunos ponentes usaron su tiempo de forma muy eficiente, no fue el caso de la mayoría. En el momento en que había un problema técnico y se atrasaba la charla 5 minutos, era imposible recuperarse y había que robarle tiempo al coffee break o a la hora de la comida. Es una opción para acomodar más charlas en el mismo tiempo, pero sé de primera mano que ponentes lo pasaron mal con el tiempo, iban atropellados, casi hablando concurrentemente. A mí no me gustó, me quedo con un formato más largo, aunque haya menos charlas. ¿Se podría votar esto para el año que viene? Yo lo dejo ahí por si este artículo cae en manos de alguien que pueda hacer algo para cambiarlo. 🙂

La comida fue otro punto flaco de PyConEs Cáceres. No hubo variedad suficiente para atender las necesidades alimentarias de la gente. Y no sólo eso, sino que el catering me pareció excesivo. Prefiero que me entreguen una cajita con un bocadillo, postre y bebida, que tener que esperar a que me sirvan el rancho en un bol minúsculo para guarnición y tener que comer de pie algo que no está preparado para ello. El segundo día sí dieron más variedad de comida, pero igualmente no me pareció la mejor opción. Para un picoteo, sí, para comer, definitivamente no.

Como detalles menores hubo una charla en la que tuvimos que ir al coro de la sala principal y no se oía nada de nada. No nos dejaron entrar por abajo, y entre la lejanía, los barrotes y la mala acústica, fue una charla perdida que veré en vídeo. Y algún que otro caos organizativo (bolsas, emplazamiento de los stands), pero nada reseñable.

Conclusión

Un año más he disfrutado muchísimo de la PyConEs. Las otras dos veces fui por amor al lenguaje, esta vez he ido, además de por placer, por trabajo (¡Gracias Openshine!). Bueno «por trabajo» no es la mejor frase, he ido por placer con gente del trabajo. Como punto personal me faltó mucha gente con la que suelo ir. Espero el año que viene reencontrarnos de nuevo.

Yo ya estoy esperando PyConEs Málaga 2018, además de porque Málaga es una de mis ciudades favoritas del mundo mundial, junto con mi Madrid natal, porque me lo paso muy bien y aprendo mogollón.

Por último quería agradecer a toda la gente que forma parte de esta comunidad (sí, a ti que me estás leyendo) que exista algo tan fabuloso como PyConEs. ¡Gracias! Nos vemos el año que viene, porque espero romper el hechizo que sólo me deja ir en años impares.

Si tienes algo que decirme, puedes hacerlo en los comentarios o a través de mi twitter @davyria.

Instalar Mendeley Desktop en Ubuntu 16.04

Buenas tardes,

Si tenéis problemas para ejecutar Mendeley en vuestra Ubuntu 16.04 después de haberlo instalado, lo más probable es que os falte un par de librerías.

Si entráis en la terminal y veis algo como esto:

Unable to use Qt libraries in /usr/lib/x86_64-linux-gnu. Some components are missing:
	/usr/lib/x86_64-linux-gnu/libQtSvg.so.4.8.7
	/usr/lib/x86_64-linux-gnu/libQtWebKit.so.4
To run Mendeley Desktop you may need to install the QtWebKit and QtSvg packages provided by your Linux distribution.
Using bundled SSL runtime libraries
/usr/bin/../../opt/mendeleydesktop/bin/mendeleydesktop: error while loading shared libraries: libgstapp-0.10.so.0: cannot open shared object file: No such file or directory

Entonces tiene toda la pinta de que os faltan. La solución es tan fácil como instalarlas a golpe de apt:

$ sudo apt-get install libqtsvg4-perl libqtwebkit4

Espero que ahora os funcione. Si no, ya sabéis, ahí tenéis la sección de comentarios. ¡¡Saludos a todos!!

Solucionar un ataque xmlrpc en nginx

«Oye que nekotek no funciona» han sido las palabras que han dinamitado un ratito divertido para solucionar un fabuloso ataque DDoS que está ahora muy de moda (sobre todo en Rusia y China 🙂 ).

La idea es atacar blogs con wordpress que tengan activo XML-RPC, intentando acceder a xmlrpc.php. Que además viene activado por defecto. Algunos optan por renombrar el fichero xmlrpc, que sería una solución fácil y a la par inútil tras actualizaciones.

En nginx podemos limitar el acceso añadiendo a la configuración de nuestros servidores lo siguiente:

server {
  location ~ xmlrpc.php {
    deny all;
    allow 127.0.0.0/24;
    allow ::1/128;
  }
}

Además podemos añadir al fichero functions.php de nuestro tema de wordpress lo siguiente:

add_filter( 'xmlrpc_methods', 'remove_xmlrpc_pingback_ping' );
function remove_xmlrpc_pingback_ping( $methods ) {
   unset( $methods['pingback.ping'] );
   return $methods;
} ;

PyConEs Valencia 2015 desde el patio de butacas

Este fin de semana he asistido a la edición PyConEs 2015 en Valencia. Daré mi opinión sobre la organización, charlas y talleres, desde un punto de vista totalmente subjetivo y sesgado 🙂

PyConEs Valencia 2015

Es mi segunda PyConEs. La primera, en 2013, fue en mi universidad: la Escuela Universitaria de Informática de la Universidad Politécnica de Madrid. En 2014 no pude asistir a Zaragoza, así que no puedo comparar las tres.

Organización y Ñam-ñam

Lo primero, la organización: Brutal. De buena. Han sabido llegar al público objetivo, mantenernos informados en todo momento y han hecho un gran trabajo. Es difícil como asistente saber todo el esfuerzo que hay detrás. Los asistentes sólo percibimos que todo ha funcionado bien, como una máquina bien engrasada. Normalmente la gente se queja sobre las cosas malas, pero cuando no hay nada malo y todo es como debería ser, no se dice nada. En este caso, enhorabuena por el trabajo bien hecho.

Personalmente agradezco a la organización de PyConEs y a los patrocinadores porque sin ellos este año no podríamos haber asistido. Y es que hacen mucho porque las diferentes brechas sean mitigadas para que todos podamos asistir.

La Escuela Técnica Superior de Informática de la Universidad Politécnica de Valencia es un sitio bien dotado y bastante cómodo para asistir a un evento como PyConEs. El welcome pack estuvo bien, bolis, regalitos, bolsas de tela y camisetas!

La comida en la cafetería fue variada. Alguien dijo que había demasiado dulce en los coffee breaks y poca comida sana. Por el precio de la entrada, esa cantidad de charlas, comida y dos coffee breaks creo que son más que suficientes.

Charlas plenarias, el sandwich perfecto.

Los oradores plenarios, Yamila en la apertura y Víctor en el cierre, dieron dos grandes charlas, cada uno con su estilo particular. Ambos se merecen todo el respeto y un aplauso virtual por subirse al escenario y contarnos una historia.

Python, Plutarco y Yamila

Yamila Moreno, en su charla de apertura nos habló sobre Plutarco, Python, la diversidad y, básicamente actuó como defensora de la inclusión de minorías para heterogeneizar un mundillo ampliamente representado por el hombre blanco cisgénero entre 20 y 40 años. Toma frase.

Si bien me gustó mucho lo que contó y cómo lo contó, con su historia de su amiga inmigrante Roxana, y la sorpresa que nos dio al final sobre que no todo es lo que parece, no estuvo exenta de polémica. Mucho se habló esa noche sobre el tema en las PyBirras en el bar Olhöps. Por supuesto, al yo ser parte de una de esas minorías como mujer, tuve que dar mi opinión unas cuantas veces. No es que mi opinión sea más o menos importante, simplemente es la mía. Creo que hay que cambiar las cosas desde el principio, con la educación. A día de hoy, cuando en informática ya hay menos tituladas que titulados, menos inmigrantes que españoles, menos personas con recursos que personas con ellos, no se puede pretender que haya por ejemplo equipos técnicos de 50% mujeres y 50% hombres, porque no se acerca a la cifra en el mundo real, es decir, hacer discriminación positiva no es una buena idea. Pero tampoco es buena idea tener que convertirte en algo que no eres para mimetizarte con el entorno.

Como ella, soy también de la opinión de la guerra de guerrillas. Quizá yo sola no pueda cambiar la sociedad, pero sí podré ayudar a cambiar mi entorno. El detalle de la Pepa y cómo nos dio un pequeño toque de lo mucho que nos queda aún por mejorar, me encantó. Pero curiosamente el problema no somos nosotros, un colectivo bastante tolerante. El problema, como digo, creo que viene de antes, de la educación y de la propia sociedad.

Sobre Víctor Terrón (Pyctor) decir que me pareció un gran ponente. Hizo una charla muy amena, divertida y a la vez educativa. Y eso para la charla de cierre, cuando ya estábamos todos cansados, es genial. Habló sobre Dijkstra, la complejidad de los algoritmos y el uso del heap para calcular distancias en un grafo, entre otras cosas. Casi nada.

Y por último, ponerse a programar ahí en frío para hacer el sorteo final es de ser un valiente. Todos en la soledad de nuestros escritorios somos capaces de hacer un par de ranges para seleccionar aleatoriamente dos números. Pero en un escenario, con un Mac casi sin batería y el efecto demo intentando atacar, creo que es toda una proeza. A ver cuántos pueden hacer un sorteo en 2 minutos con su lenguaje de programación favorito, sin anestesia ni nada.

El core: Las charlas

Charlas de PyConEs

Este es el alma de la PyConEs: las charlas. Para quien no pudo asistir, comentaré que había tres tracks: básico, avanzado y científico. En algunos casos me hubiera gustado tener un clon, porque había horarios en los que me interesaban dos e incluso tres charlas simultáneas. Por suerte podré ver los vídeos y presentaciones a las que no pude asistir. También hubo momentos en los que me pasó lo contrario, no podía elegir ninguna porque no sentía que ninguna fuera de mi interés, pero bueno, nunca llueve a gusto de todos…

La dificultad de las charlas a veces no tenía que ver con el track asignado: asistí a charlas básicas en el track avanzado y viceversa. Entiendo que ha sido un trabajo difícil seleccionarlas, casi de encaje de bolillos. Pero este podría ser un punto a mejorar en futuras ediciones.

Desde mi humilde posición pediría un esfuerzo mayor en la selección de las charlas, quizá permitiendo una votación abierta de los asistentes. Nadie mejor que nosotros para saber a qué queremos asistir ¿No? No por eso digo que estuvieran mal, pero me da mucha curiosidad saber cuáles se quedaron en el tintero.

Hubo algunas salas que se llenaron hasta el punto de tener que verlas de pie, hombro con hombro, donde no cabía ni un alfiler. Quizá si hubiera habido una consulta previa de asistencia, no vinculante, se hubiera podido dimensionar mejor.

Otra cosa a mejorar es la forma de dar las charlas en sí. Por ejemplo, el uso de colores con poco contraste en las presentaciones. Si no sabes si azul sobre verde se va a ver bien, utiliza negro sobre blanco, que siempre funciona y está de moda :D. Puede que no quede precioso, pero es preferible la legibilidad sobre tener una presentación cromáticamente rica, que no bonita. Otro punto a mejorar es evitar poner 100 líneas de código en la pantalla o mucho texto. No se lee, no se ve y en muchos casos no se entiende y no sirve para nada. Pero sobre todo y lo más importante es prepararse la charla. No es que todos tengamos que ser unos comunicadores excelentes recién salidos de TED. Pero si hay gente que viene a ver lo que tienes que decir, qué menos que se vayan con la sensación de que has dedicado un tiempo a prepararte la presentación. He de decir que esto último no pasó mucho, y que quizá los nervios nos hagan pasar malos momentos.

En todas las charlas he aprendido algo, puede ser una nueva herramienta, algo que desconocía de Python o simplemente cómo hacer o no hacer las cosas. Lo mejor ha sido la variedad de charlas y temas, que para tratarse «sólo de Python» es increíble. Ha habido mucho nivel. Muchas gracias a todos los ponentes por tener la valentía de subiros allí y contarnos cómo hacéis las cosas. ¡El mundo necesita a más gente como vosotros!

Asistentes, networking y sinergias

Asistentes en PyConEs 2015

Lo que más me gusta de PyConEs es el buen ambiente que se respira. Dos días de conferencias sobre algo que te gusta es el perfecto ecosistema para sentirte a gusto. Desde luego no sufrimos mucho. 🙂

Para mí PyConEs es una oportunidad de aprender y una inyección de positivismo.

Peeeeero… Aquí es donde me voy a dar un poco de cera a mí misma. Desde Madrid, Blazaid y yo ya sabíamos que nos íbamos a encontrar con antiguos compañeros de la universidad o ex-compañeros de trabajo (y fervientes amantes de Python), así que al llegar nos unimos a ellos. También nos relacionamos con gente desconocida, pero he de decir que sobre todo estuvimos con el mismo círculo. Con lo cual el networking fue escaso. Tampoco es que yo tenga un gran don de gentes (Blazaid sí, además de ser compositor de chistes), pero imagino que cuando alguien te ve en un grupo grande es más difícil acercarse a ti.

No pude entablar conversación con los 400 asistentes y no sé si los demás tendrán esa misma sensación de los inevitables mini-grupos. Cuando fuimos a las PyBirras seguimos con los conocidos y fuimos a cenar con ellos. Fue uno de los mejores momentos de todo el fin de semana, nos reímos mucho, a pesar del frío. Pero eso es otra historia… Casi un documental de National Geographic.

Quizá se pueda fomentar de alguna manera conocer a otras personas allí, sin tener que darte de alta en un servicio y publicitarte a modo muro de facebook.

Conclusiones de PyConEs

Para resumir, la sensación que me ha dejado PyConEs ha sido positiva. Podría dar una nota de 1 a 10, con dos decimales incluso, pero creo que en este caso no sirve de mucho. Prefiero decir que me ha gustado y que repetiré, mientras pueda. La balanza se inclina hacia lo positivo. Si alguien que le guste python me pregunta si le recomiendo ir, le diría que sí. No porque sepa que le va a gustar, sino porque es mejor hacerse una idea de primera mano que hacerle caso a alguien que no sabes si tiene los mismos gustos que tú.

Siempre hay hueco para mejorar, y eso es lo que me gusta de esto, que el año que viene seguramente sea mejor.

Había empresas buscando talento pythónico, un montón de proyectos chulos y toneladas de información condensada en dos días y poco. Tengo una hoja llena de garabatos sobre cosas que tengo que mirar, ideas interesantes, para mí y para mis proyectos y charlas que tengo que ver o repasar cuando suban los vídeos. Eso creo que es el mejor cumplido para la gente que ha participado: inspirar a otros.

Y es que… ¡Python mola mucho!

¡Gracias a todos y espero veros el año que viene en PyConEs 2016!

Para cualquier cosa, no dudéis en dejar un comentario o preguntarme por twitter.

Robo Wunderkind – Un «lego» para desarrollar robots

¡Construye, programa, juega, crea el futuro!

Hoy he leído acerca de este proyecto en Kickstarter. Robo Wunderkind (algo así como robot-niño prodigio) es un kit modular para construir robots a base de juntar bloques variados con sus sensores, sus actuadores y su lenguaje de programación.

3aca895f2fc0ccfe1939f77b6deec6fa_original

Para no repetir la información una y otra vez de todos los blogs que habrán hablado ya del proyecto, os pongo el enlace a la página del proyecto en Kickstarter, muy completa y con toda la información sobre los distintos pledges en función de la financiación. Ah, por cierto, ya está financiado (a 28 días del final de la campaña).

¡Buenos días y feliz viernes!

Cómo crear un Instalador USB para OS X El Capitan

OS X El Capitán ya está disponible para descargar e instalar de manera gratuita en todos aquellos dispositivos con OS X Yosemite así que, si tienes un trastorno obsesivo-compulsivo por las instalaciones desde 0 como yo, aquí te doy las pautas para crear tu USB de arranque para instalar «El Capitán».

osx-capitan

Lo primero y principal, entra en la App Store y descárgalo. No sigas leyendo, dale ya a descargar porque tienes para rato. Te espero en el siguiente párrafo.

De acuerdo, lo siguiente es el material necesario para crear el USB:

  1. Acceso de administrador en tu Mac. Si es tuyo, supongo que lo tendrás, pero no está de más avisar porque en una parte del proceso necesitarás ejecutar un comando con permisos de administración.
  2. Un pincho USB (obviamente). Debe ser de 8GB o superior. Además, a poder ser, USB3 porque si no la instalación va a ser muuuuuy larga. Lo sé por experiencia.
  3. El instalador de OS X El Capitán (también obvio). Ahora mismo se estará descargando y va a estar así durante un buen rato.
  4. Y ya :D.

Lo bueno: no se necesita demasiado. Lo malo: se tarda mucho en descargar esta versión de OS X.

Una vez descargado OS X El Capitán viene el primer paso esencial: NO CERRÉIS EL INSTALADOR. Cerrarlo lo borra del disco, por lo que habría que volver a descargarlo (¿genial eh?).

El segundo paso es tener preparado el disco USB para que sirva como dispositivo de arranque. Para ello hacemos los siguiente:

  1. Conectamos el USB al Mac y arrancamos la utilidad de discos. Seleccionamos el dispositivo USB (no ninguna partición) y le damos a la pestaña «Erase» (lo siento, no tengo el Mac en castellano). Hecho esto, formateamos la partición como «Mac OS Extended (Journaled)».

    Utilidad de discos. En la pantalla de Erase formateamos en Mac OS
    Utilidad de discos. En la pantalla de Erase formateamos en Mac OS Extended Journaled.
  2. Nos vamos a la pestaña «Partition» y en el apartado «Partition Layout» seleccionamos «1 Partition», es decir, queremos crear una nueva partición.

    Configuración de particiones.
    Configuración de particiones.
  3. Luego debajo, en el botón «Options», seleccionamos el esquema de particionado «GUID Partition Table». Aceptamos y le damos a aplicar los cambios y ¡enhorabuena!, ya está preparado el USB.

    Selección de esquema de particionado.
    Selección de esquema de particionado.

Si habéis seguido los pasos tal y como están aquí escritos, seguramente El Capitán siga descargándose. Armaos de paciencia y esperad, que es lo que toca. Un café en estos casos siempre viene bien, pero igual no son horas. Yo, por si acaso, me voy a preparar uno.

Una vez descargado El Capitán y con la pantalla del instalador abierta abriremos una terminal. Sí, sé que existen herramientas visuales, pero la terminal es cómoda y eficiente y no me gusta descargar aplicaciones para todo. Con la terminal abierta escribiremos el siguiente comando:

$ sudo /Applications/Install OS X El Capitan.app/Contents/Resources/createinstallmedia --volume /Volumes/Untitled --applicationpath /Applications/Install OS X El Capitan.app --nointeraction

Tardará unos minutos (pero ni de lejos lo que ha tardado la descarga). Mientras se va creando, explico un poco este comando. Lo primero, se está lanzando el programa createinstallmedia que está bajo ese directorio tan largo como administrador (de ahí el sudo) sobre el volumen que hemos creado. Si habéis seguido los pasos que he puesto, se llamará «Untitled», así que de ahí el /Volumes/Untitled. Después se indica qué es lo que se va a meter en el disco, /Applications/Install OS X El Capitan.app y que lo queremos desatendido, --nointeraction.

Una vez termine, ¡ya tenéis vuestro USB con El Capitán, desde el cual podréis realizar una instalación limpia sin necesidad de tirar de los servidores de Apple o usar como disco de recuperación en casos extraños.

Cualquier duda/pregunta/aclaración es bienvenida en los comentarios. ¡Un saludo!

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!

Añadir a git los ficheros migrate de django en pycharm

Pycharm doesn't love django + git

Si usas el IDE pycharm y django ≥ 1.7 (o < 1.7 con south) y como gestor de versiones usas git, probablemente te ha pasado que haces un commit y se te olvida añadir (git add) los ficheros de las migraciones. Pycharm hace «git add» automáticamente a todos los ficheros creados, salvo a los creados tras hacer un makemigrations. Para saberlo, pycharm nos los muestra en rojo en lugar de en verde.
¿Por qué este comportamiento? Realmente lo desconozco, pero imagino que porque no ha sido una acción hecha directamente por el usuario, sino como consecuencia de un migrate.

A mí me pasa a menudo que hago un commit y luego otro como un comentario «los migrates del anterior commit». Cuando esto no sólo te pasa a ti, sino que es algo común en los demás compañeros empiezas a preguntarte cómo solucionarlo, y ya de paso convertirte en el héroe que evita el 1×2 en los commits. Depende de la manera de trabajar que tengas, el tipo de integración de las ramas que hagas y demás, esto puede serte útil o no, pero nunca está de más probar algo desconocido.

Para ello podemos usar los hooks de git, que son pequeños scripts que se ejecutan cuando ocurre algún evento, como commit, push, receive. Podemos crear un hook de tipo pre-commit, que se ejecutará antes de hacer un commit, para que no nos deje hacer commit si tenemos algún fichero sin añadir.

Los hooks se instalan en la carpeta .git/hooks del repositorio de git que queramos. Cuando inicializamos un repositorio ya nos crea el directorio con algunos ejemplos.

De acuerdo con la respuesta correcta de este hilo de stackoverflow, podemos crear meter el siguiente código en el fichero pre-commit hook:

ud=`git status -u | grep '^Untracked files:$'`
 
if [ -n "$ud" ];
then 
    cat < <EOF 
¡Cuidado! Hay ficheros que no se han añadido al repositorio
EOF
    exit 1
fi

Este script lo único que hace es ver si al ejecutar git status -u existe la frase ‘Untracked files’. Si es así nos avisa con un bonito texto y no efectúa el commit. De esta manera nos dará un aviso antes de efectuar el commit y podremos subsanarlo sin tener que añadir posteriormente un commit separado.

Si aún así queremos dejar ficheros sin subir, podemos usar git commit --no-verify para que no ejecute el hook.

Más sobre git hooks:

http://git-scm.com/book/es/v2/Customizing-Git-Git-Hooks
http://githooks.com/
https://www.atlassian.com/git/tutorials/git-hooks/

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!

Instalar Django 1.6 en Windows 7

No me gustan mucho los tutoriales eternos, así que pongo aquí los pasos concisos para instalar Python 2.7 y Django 1.6 en Windows 7.

Para más información u otras configuraciones: https://docs.djangoproject.com/en/1.6/intro/install/

 

  1. Instalar Python 2.7.8
  2. Añadir al Path de Windows esta línea: «C:Python27;C:Python27Scripts»
  3. Instalar SetupTools para Windows 7 y ejecutar en línea de comandos «python ~ruta/ez_setup.py»
  4. Instalar Pip, desde línea de comandos escribir «easy_install pip»
  5. Instalar Django, desde línea de comandos: «pip install django»

Si tenéis cualquier duda, podéis preguntar en los comentarios.