Joaquin Tita: Install compass in Mac Os El Capitan

So,
$ sudo gem install compass is not working?

Do you have ruby installed?
If not install it using brew:

$ sudo brew install ruby 

First try updating your gem version:

$ sudo gem update --system

Then try again installing compass:

$ sudo gem install compass

Oh... now you get a:

Fetching: compass-1.0.3.gem (100%)
ERROR:  While executing gem ... (Errno::EPERM)
    Operation not permitted - /usr/bin/compass

Run the following:

$ sudo gem install -n /usr/local/bin compass

Done.

Facundo Batista: Europython 2016, Bilbao


Aeropuertos

Estuve cinco horas en el aeropuerto de Río de Janeiro. La comida más elaborada que encontré en las dos terminales fueron sánguches de Subway y panchos. No, gracias.

El aeropuerto de Lisboa, por otro lado, era inmenso y tenía mil locales de comida. Eso sí, ni un cartel de "Bienvenido a Portugal" o similar, que busqué para mandarle foto a los peques...

El único aeropuerto con wifi libre era Aeroparque, en Argentina. El de Río y Lisboa tenían redes que podías usar si tenías contratos con empresas de ahí. En el de Bilbao también pude conseguir internet, luego de registrarme en una página que le fallaba el certificado SSL :/; pero bueno, me sirvió para avisarle a Moni que había llegado bien.


Bilbao

Luego de llegar a donde me hospedé, me pegué un baño y salí a pegar una vuelta (eran las siete y media de la tarde, así que tenía todavía más de dos horas de luz). Algo que me llamó la atención es que la gente, en los barcitos, agarran su cerveza o vino y salen a tomarlo a la calle (el clima estaba hermoso), así que veías un montón de gente super empilchada, con sus copas de tinto o blanco, sentados en los muchos banquitos que hay por todos lados...

Yo me metí un un bar que pintaba lindo, me tomé un par de cervezas con un par de pinchos, y luego arranqué la vuelta. No me fui a dormir demasiado tarde (antes de las doce y media), y habiendo dormido un poco en los dos vuelos cortos, y casi cinco horas en el vuelo largo, no esperaba dormir tanto: me levanté a la una y pico de la tarde!! Parece que el truco de no poner despertador, un oscuro casi absoluto, y no estar pendiente de niños, le aportaron mucho a lo cansadísimo que había llegado al fin de semana...

Parte del Guggenheim a la izquierda, el Puppy a la derecha

Así que me levanté, desayuné y salí a pasear. Me tomé el metro y me fuí para el casco viejo, hice un par de recorridos, saqué un par de fotos, y un par de horas después encaré para uno de los edificios de la conferencia donde se hacía el Django Girls, a saludar conocidos.

Al rato me fui para el edificio principal de la conferencia, donde desde media tarde ya uno se podía registrar, así hacía el trámite el domingo, y de paso encontraba bien el edificio, sabía por donde entrar, etc.

Ahí me encontré con gente que no conocía personalmente pero sí de redes sociales virtuales, estuvimos charlando un rato y después con Juan Luis Cano, Yamila Moreno y otra gente fuimos caminando hasta un funicular, con el que subimos una montaña para mirar la ciudad de arriba.

Desde lo alto

Después nos fuimos a cenar con otra gente a un restaurant bastante piola, comimos rico. Y ya se hicieron las doce, así que volví a donde me hospedé, revisé un rato la charla del lunes, y a dormir!


Primer día de conferencia

Es el día que más charlas tenía marcada. Hubo una plenaria apenas interesante sobre la base de "podés ganar plata haciendo lo que quieras, no tengas miedo de probar", y luego me fuí a una charla de Efficient Django, de la cual me anoté algunos puntos a investigar. Después fui a una charla que mostraba como realmente funciona mezclar AsyncIO y Cython, logrando código asincrónico rapidísimo, y después me tocó a mí.

Yo dí It's not magic: descriptors exposed, la que preparamos con Joac y dimos en la PyCon de Mendoza, pero en inglés. Es una charla difícil, pero creo que la gente se va con info nueva. Hubieron varias preguntas, y luego se me acercaron en los pasillos para seguir charlando del tema, y también me saludaron un par de veces para decirme que la charla les había gustado, así que estoy contento con como salió.

A la tarde estuvo más tranquilo. Una charla que me gustó bastante fue la The Report of Twisted's Death, dada por Amber Brown, una Twisted core developer (y también release manager) que contó en qué estaban, los planes con respecto a asyncio, qué pasaba con Tornado, etc.

An open space in the conference

También me enganché con unos acertijos que te daban en una empresa, algo estilo el pythonchallenge, donde resolver un problema te da la info para encontrar el próximo, y así. La realidad es que era medio buggy, en el segundo acertijo al flaco le marqué dos bugs, y en el último caso le dije que no se podía resolver, y lo hostigué hasta que me pasó la solución y le mostré como no había forma de llegar, :). Así que me gané el premio (una boludez, un hub usb), más que nada por mostrarles a ellos dónde tenían el problema :p.

Como frutilla del postre de la tarde, nos regalaron a todos los asistentes una micro:bit!!! Si no la conocen, una micro:bit es una pequeñísimo hardware que corre Python, que la BBC le regaló a todos los estudiantes de 7 años en el Reino Unido para que jueguen y aprendan. Ahora tengo que ver qué cosas se puede hacer para ponernos con Felipe :D (aunque creo que es un poco más para el año que viene...).

Luego vinieron las lightning talks, y ya se terminó el día!

Manuel Kaufmann (Humitos): PyCon España: ¡allá vamos!

¡De no creer! Los sueños se cumplen, los milagros existen, la gente te quiere más de lo que creés, "lo creés, lo obtenés", vos confiá...

A fines de Septiembre me voy a España. Sí, a España. Y encima voy a ser Keynote Speaker de la PyCon 2016 en Almería. Obviamente que todavía no lo puedo creer y que ya empecé a pensar/preparar la charla porque estoy muy nervioso.

Este año se cumplieron 10 años desde que conocí Python en el PyDay Santa Fe 2006 que organizaron mis compañeros de la Universidad de esa época (entre ellos Juanjo Conti y Mariano Galán -dos personas con las que hoy trabajo todos los días) y donde hubo charlas de Facundo Batista y Lucio Torre. Mis pastores desde ese día.

Durante los días siguientes a ese evento pensaba: "quiero ser como estos tipos" y obviamente, nunca llegué y ni llegaré a ser como ellos; pero sí logré ser como soy yo.

Hace casi 3 años soñé un proyecto de enseñanza, educación, descentralización del conocimiento, difusión, amistad de programadores (ni idea lo que soñaba, estaba delirando)... Un proyecto tirado de los pelos, en el que nadie creía cuando decía "voy a hacer..." pero que cuando empecé y pasaba semanas durmiendo dentro del auto, la gente decía "lo está haciendo, este tipo esta loco, pero qué groso" y comenzó a apoyarme emocionalmente, con dinero, con un espacio en su hogar, con comida y con un sin fin de etcéteras. Conocí una infinidad de gente. Muchísima gente demasiado buena y confiada. Aprendí a creer en la gente desconocida nuevamente, a entregarle todo sin un comprobante. También conocí gente mala, dañina, con malas intenciones que casi me arruina todo. Organizamos decenas de eventos por año y le mostramos "la magia de la programación" a gente que nunca lo imaginó. Estuve muy enfermo, tuve accidentes de tránsito y casi pierdo la vida en más de una oportunidad en la ruta. "No siempre la culpa es del otro", he cometido infracciones de forma inconsciente y por ser un pelotudo también.

3 años... de esto y mucho más voy a hablar en esta Keynote de PyCon España 2016 en Almería. A la cual, por cierto, estoy super cagado de ir.

¡Gracias a los organizadores por confiar en mí!

Manuel Kaufmann (Humitos): PyCon España: ¡allá vamos!

¡De no creer! Los sueños se cumplen, los milagros existen, la gente te quiere más de lo que creés, "lo creés, lo obtenés", vos confiá...

A fines de Septiembre me voy a España. Sí, a España. Y encima voy a ser Keynote Speaker de la PyCon 2016 en Almería. Obviamente que todavía no lo puedo creer y que ya empecé a pensar/preparar la charla porque estoy muy nervioso.

Este año se cumplieron 10 años desde que conocí Python en el PyDay Santa Fe 2006 que organizaron mis compañeros de la Universidad de esa época (entre ellos Juanjo Conti y Mariano Galán -dos personas con las que hoy trabajo todos los días) y donde hubo charlas de Facundo Batista y Lucio Torre. Mis pastores desde ese día.

Durante los días siguientes a ese evento pensaba: "quiero ser como estos tipos" y obviamente, nunca llegué y ni llegaré a ser como ellos; pero sí logré ser como soy yo.

Hace casi 3 años soñé un proyecto de enseñanza, educación, descentralización del conocimiento, difusión, amistad de programadores (ni idea lo que soñaba, estaba delirando)... Un proyecto tirado de los pelos, en el que nadie creía cuando decía "voy a hacer..." pero que cuando empecé y pasaba semanas durmiendo dentro del auto, la gente decía "lo está haciendo, este tipo esta loco, pero qué groso" y comenzó a apoyarme emocionalmente, con dinero, con un espacio en su hogar, con comida y con un sin fin de etcéteras. Conocí una infinidad de gente. Muchísima gente demasiado buena y confiada. Aprendí a creer en la gente desconocida nuevamente, a entregarle todo sin un comprobante. También conocí gente mala, dañina, con malas intenciones que casi me arruina todo. Organizamos decenas de eventos por año y le mostramos "la magia de la programación" a gente que nunca lo imaginó. Estuve muy enfermo, tuve accidentes de tránsito y casi pierdo la vida en más de una oportunidad en la ruta. "No siempre la culpa es del otro", he cometido infracciones de forma inconsciente y por ser un pelotudo también.

3 años... de esto y mucho más voy a hablar en esta Keynote de PyCon España 2016 en Almería. A la cual, por cierto, estoy super cagado de ir.

¡Gracias a los organizadores por confiar en mí!

Manuel Kaufmann (Humitos): Herramientas de estilo en Python

Hoy se cumplen oficialmente tres meses que hace que trabajo en Mozio. El principio fue complicado porque me tuve que adaptar luego de más de un año de no programar profesionalmente a tiempo completo. Entre todas las actividades de adaptación, la lectura, el estudio a día completo, volver a hablar/chatear en inglés y un sin fin de cosas más; tuve que configurar mi editor de texto: Emacs.

Una de las cosas que me gustó de Mozio es que tienen una wiki con toda la guía de estilo de código de cada lenguaje en el que se programa. Entonces, obviamente, había una para Python. Luego de leerla y comenzar a seguirla (obviamente sigue PEP8, pero también tiene algunas particularidades) me di cuenta que "yo no me tengo que preocupar por eso, yo tengo que codear y lindo". Pero claro, "lindo" es relativo, está muy ligado a los gustos personales y para eso se creó la wiki: para ponerse de acuerdo.

Entonces, había decisiones sobre diferentes cosas de PEP8 y PEP257 en las que los developer de Mozio tomaron una decisión. Ahí es donde se empieza a complicar la cosa ya que necesitás recordar cuáles fueron esas decisiones que incluso pueden ir en contra de tus gustos.

Me puse a investigar cómo seguir todas estas reglas y llegué a una convinación de:

  • isort: ordena los imports
  • autopep8: fuerza al código a cumplir con PEP8
  • docformatter: aplica las reglas de PEP257 sobre los docstrings
  • unify: coherencia entre comillas dobles y simples

¿Qué hice? Como estaba configurando violentamente mi Emacs, busqué un plugin para cada uno de ellos y para el que no estaba, docformatter, me lo creé yo mismo copiando en 99% el código de autopep8.

Ahora, cada vez que guardo un archivo en Emacs se me corren todos estos pequeños programas por detrás y se me formatea todo automáticamente para cumplir con las reglas específicas de Mozio.

Por otro lado, la convención que se tomó para los docstring (en uno de los casos) por los desarrolladores no es la que la PEP257 recomienda y por lo tanto docformatter no cubría ese caso. ¿Qué hice? Lo implementé en este Pull Request y el autor, que por cierto trabaja en la NASA, lo mergió a los pocos minutos.

Nota

En la configuración de mi Emacs encontrás los archivos de configuración y parámetros que le paso a cada comando para realizar lo que yo necesito de forma adecuada.

Manuel Kaufmann (Humitos): Herramientas de estilo en Python

Hoy se cumplen oficialmente tres meses que hace que trabajo en Mozio. El principio fue complicado porque me tuve que adaptar luego de más de un año de no programar profesionalmente a tiempo completo. Entre todas las actividades de adaptación, la lectura, el estudio a día completo, volver a hablar/chatear en inglés y un sin fin de cosas más; tuve que configurar mi editor de texto: Emacs.

Una de las cosas que me gustó de Mozio es que tienen una wiki con toda la guía de estilo de código de cada lenguaje en el que se programa. Entonces, obviamente, había una para Python. Luego de leerla y comenzar a seguirla (obviamente sigue PEP8, pero también tiene algunas particularidades) me di cuenta que "yo no me tengo que preocupar por eso, yo tengo que codear y lindo". Pero claro, "lindo" es relativo, está muy ligado a los gustos personales y para eso se creó la wiki: para ponerse de acuerdo.

Entonces, había decisiones sobre diferentes cosas de PEP8 y PEP257 en las que los developer de Mozio tomaron una decisión. Ahí es donde se empieza a complicar la cosa ya que necesitás recordar cuáles fueron esas decisiones que incluso pueden ir en contra de tus gustos.

Me puse a investigar cómo seguir todas estas reglas y llegué a una convinación de:

  • isort: ordena los imports
  • autopep8: fuerza al código a cumplir con PEP8
  • docformatter: aplica las reglas de PEP257 sobre los docstrings
  • unify: coherencia entre comillas dobles y simples

¿Qué hice? Como estaba configurando violentamente mi Emacs, busqué un plugin para cada uno de ellos y para el que no estaba, docformatter, me lo creé yo mismo copiando en 99% el código de autopep8.

Ahora, cada vez que guardo un archivo en Emacs se me corren todos estos pequeños programas por detrás y se me formatea todo automáticamente para cumplir con las reglas específicas de Mozio.

Por otro lado, la convención que se tomó para los docstring (en uno de los casos) por los desarrolladores no es la que la PEP257 recomienda y por lo tanto docformatter no cubría ese caso. ¿Qué hice? Lo implementé en este Pull Request y el autor, que por cierto trabaja en la NASA, lo mergió a los pocos minutos.

Nota

En la configuración de mi Emacs encontrás los archivos de configuración y parámetros que le paso a cada comando para realizar lo que yo necesito de forma adecuada.

Facundo Batista: Europython, otra vez


La semana que viene se hace la mayor conferencia de Python de Europa, la Europython. Esta vez es en Bilbao.

Es larga. El domingo hay un día de tutoriales y cursos para principiantes. La conferencia en sí es de lunes a viernes. Y sábado y domingo de la otra semana hay sprints. Pueden ver el schedule online.

alt

Lo que más me entusiasma de esta edición de la conferencia es que voy a ir, :). No es la primera vez que voy, sin embargo; vuelvo luego de once (sí, 11) años de ausencia!!

No sé si me sorprende más eso o que mi blog ya es tan viejo que tengo registro de eso que pasó hace tanto: en estos cuatro posts.

Ahora que lo pienso, hace *años* que tampoco voy a una PyCon US (la default, digamos)...

La frutilla del postre es que esta vez voy a presentar dos charlas, en dos idiomas. En castellano va mi repetidísima "Entendiendo Unicode" (el público se renueva, me dicen algunos; dejá de robar, me dicen otros). Y en inglés la versión anglosajona de la charla que preparamos con joac para la PyCon pasada: "No es magia: Descriptores al desnudo".

Ya les iré reportando como va todo :)

Marcos Dione: importing-single-osm-changesets-to-a-non-updatable-rendering-database

A few weeks ago an interesting PR for osm-carto landed in the project's GitHub page. It adds rendering for several natural relief features, adding ridges, valleys, aretes, dales, coulouirs and others to cliffs, peaks and mountain passes, which were already being rendered. I decided to try it in Elevation (offline for the moment).

I sync'ed the style first with the latest release, applied the patch and... not much. My current database is quite old (re-importing takes ages and I don't have space for updates), so I don't have much features like that in the region I'm interested in. In fact, I went checking and the closest mountain range around here was not in the database, so I added it.

By the way, the range is mostly concurrent with a part of an administrative boundary, but SomeoneElse and SK53 suggested to make a new line. Even when other features are nearby (there's a path close to the crest and it's also more or less the limit between a forest and a bare rock section), which already makes the region a little bit crowded with lines, it makes sense: boundaries, paths, forest borders and ridges change at different time scales, so having them as separate lines makes an update to any of those independent of the rest.

Now I wanted to export this feature and import it in my rendering database, so I can actually see the new part of the style. This is not an straightforward process, only because when I imported my data I used osm2pgsql --drop, which removes the much needed intermediate tables for when one wants to update with osm2pgsql --append. Here's a roundabout way to go.

First you download the full feature (thanks RichardF!). In this case:

http://www.openstreetmap.org/api/0.6/way/430573542/full

This not only exports the line (which is a sequence of references to nodes) with its tags, but the nodes too (which are the ones storing the coords). The next step is to convert it to something more malleable, for instance, GeoJSON. For that I used ogr2ogr like this:

ogr2ogr -f GeoJSON 430573542.GeoJSON 430573542.xml lines

The last parameter is needed because, quoting Even Rouault (a.k.a. José GDAL): «you will always get "points", "lines", "multilinestrings", "multipolygons" and "other_relations" layers when reading a osm file, even if some are empty», and the GeoJSON driver refuses to create layers for you:

ERROR 1: Layer lines not found, and <span class="createlink">CreateLayer</span> not supported by driver.

But guess what, that not the easiest way :) At least we learned something. In fact postgis already has a tool called shp2pgsql that imports ESRIShapeFiles, and ogr2ogr produces by default this kind of file. It creates a .shp file for each layer as discussed before, but again, we're only interested in the line one. So:

ogr2ogr 430573542 430573542.xml lines
shp2pgsql -a -s 900913 -S 430573542/lines.shp > 430573542.sql

We can't use this SQL file directly, as it has a couple of problems. First, you can't tell shp2pgsql the names of the table where you want to insert the data or the geometry column. Second, it only recognizes some attributes (see below), and the rest it tries to add them as hstore tags. So we have to manually edit the file to go from:

INSERT INTO "lines" ("osm_id","name","highway","waterway","aerialway","barrier","man_made","z_order","other_tags",geom)
    VALUES ('430573542','Montagne Sainte-Victoire',NULL,NULL,NULL,NULL,NULL,'0','"natural"=>"ridge"','010500002031BF0D[...]');

into:

INSERT INTO "planet_osm_line" ("osm_id","name","z_order","natural",way)
    VALUES ('430573542','Montagne Sainte-Victoire','0','ridge','010500002031BF0D[...]');

See? s/lines/planet_osm_line/, s/other_tags/"natural"/ (with double quotes, because natural is a keyword in SQL, as in natural join), s/geom/way/ and s/'"natural"=>"ridge"'/'ridge'/ (in single quotes, so it's a string; double quotes are for columns). And I also removed the superfluous values and the ANALIZE line, as I don't care that much. Easy peasy.

A comment on the options for shp2pgsql. -s 900913 declares the SRID of the database. I got that when I tried without and:

ERROR:  Geometry SRID (0) does not match column SRID (900913)

-S is needed because shp2pgsql by default generated MultiLineStrings, but that table in particular has a LineString way column. This is how I figure it out:

ERROR:  Geometry type (MultiLineString) does not match column type (LineString)

Incredibly, after this data massacre, it loads in the db:

$ psql gis < 430573542.sql
SET
SET
BEGIN
INSERT 0 1
COMMIT

Enjoy!


openstreetmap gdal postgis

Damián Avila: How to pin Conda

One interesting advance feature in Conda is the capacity to pin packages from your environments so they can not be updated at all. If you are interested in that specific version of some package and not the next one because it breaks your work completely or for some other reason, you are probably pinning that package. If you are adding the specific version in every command you run instead of pinning the package, you are doing it wrong and you should keep reading ;-)

But, is it possible to pin Conda itself so it does not get updated every time you try to install/update something else?

Read more… (2 min remaining to read)