<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Humitos</title><link>https://elblogdehumitos.com/</link><description>el blog de Manuel Kaufmann -- comunicando mi vida a la sociedad</description><atom:link href="https://elblogdehumitos.com/rss.xml" rel="self" type="application/rss+xml"></atom:link><language>es</language><lastBuildDate>Fri, 03 Dec 2021 17:09:47 GMT</lastBuildDate><generator>https://getnikola.com/</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>docs.python.org en Español</title><link>https://elblogdehumitos.com/posts/docspythonorg-en-espanol/</link><dc:creator>Manuel Kaufmann</dc:creator><description>&lt;div&gt;&lt;p&gt;La semana publiqué un artículo comentando que estábamos trabajando en traducir la documentación
oficial de Python al Español. Hoy, tenemos una noticia increíble:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;¡Esta traducción es la documentación oficial de Python en su sitio&lt;/strong&gt; &lt;a class="reference external" href="https://docs.python.org/es/3.8/"&gt;https://docs.python.org/es/3.8/&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Venimos con muy buen ritmo traduciendo y coordinando el proyecto. El grupo está muy bien consolidado y nos
estamos ayudando entre todos en muchos puntos diferentes:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;utilización de las herramientas&lt;/li&gt;
&lt;li&gt;discusión sobre términos y traducciones en general&lt;/li&gt;
&lt;li&gt;coordinación del equipo&lt;/li&gt;
&lt;li&gt;onboarding a las nuevas personas que se suman&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Además, la variedad cultural que tiene el proyecto hace que se armen algunas conversaciones interesantes
--que nada tienen que ver con Python ni con la traducción, pero suman mucho a la dinámica del equipo; y
que le agregan ese aroma de diversidad en el cual tanto estamos tratando de trabajar a nivel mundial.&lt;/p&gt;
&lt;p&gt;En fin. Estoy contento por varias razones con este proyecto y espero que continúe con la misma energía que
tiene hasta el momento.&lt;/p&gt;
&lt;p&gt;Si te interesa sumarte para colaborar en este proyecto, puedes leer cómo hacerlo en
&lt;a class="reference external" href="https://python-docs-es.readthedocs.io/page/CONTRIBUTING.html"&gt;https://python-docs-es.readthedocs.io/page/CONTRIBUTING.html&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><category>documentación</category><category>español</category><category>proyectos</category><category>pycampes</category><category>python</category><guid>https://elblogdehumitos.com/posts/docspythonorg-en-espanol/</guid><pubDate>Sun, 24 May 2020 17:32:49 GMT</pubDate></item><item><title>Documentación oficial de Python en Español</title><link>https://elblogdehumitos.com/posts/documentacion-oficial-de-python-en-espanol/</link><dc:creator>Manuel Kaufmann</dc:creator><description>&lt;div&gt;&lt;p&gt;Hace exactamente 2 semanas y 2 días empezamos a trabajar en la traducción al Español de la documentación oficial de Python.
El proyecto lo empezó &lt;a class="reference external" href="https://twitter.com/raulcumplido/"&gt;Raúl&lt;/a&gt; con &lt;a class="reference external" href="https://mavignau.gitlab.io/blog/"&gt;Marian&lt;/a&gt; el año pasando en los sprints de la PyCon USA. Crearon la estructura base
siguiendo los &lt;a class="reference external" href="https://www.python.org/dev/peps/pep-0545/"&gt;lineamientos que se requieren&lt;/a&gt; desde la PSF para que pueda ser una traducción oficial y aparecer en &lt;a class="reference external" href="https://docs.python.org/"&gt;https://docs.python.org/&lt;/a&gt;,
además de traducir algunas partes del Tutorial.&lt;/p&gt;
&lt;p&gt;Lamentablemente luego de ese sprint, el proyecto no tuvo más movimiento y creo que muy pocas personas estaban al tanto
de que se estaba intentando coordinar este esfuerzo. Como Raúl tenía ganas de empujar este proyecto,
lo propuso para que trabajemos en él durante el &lt;a class="reference external" href="https://pycamp.es/"&gt;PyCamp España 2020&lt;/a&gt;. Lamentablemente, por el COVID-19, el PyCamp tuvo que ser
cancelado y no se iba a poder llevar adelante el proyecto propuesto por Raúl.&lt;/p&gt;
&lt;p&gt;Sin embargo, &lt;strong&gt;el mismo día que empezaba el PyCamp&lt;/strong&gt;, hicimos una reunión para hablar de este proyecto,
porque &lt;em&gt;casualmente&lt;/em&gt; hubo gente interesada en la esta traducción a raíz del &lt;a class="reference external" href="https://remote.python.pizza/"&gt;PyPizza Remote&lt;/a&gt;,
en dónde &lt;em&gt;creo&lt;/em&gt; que un Brasilero mostró lo que habían hecho ellos con la traducción al Portugués,
lo cuál generó interés en la audiencia. Entre la audiencia estaba &lt;a class="reference external" href="https://twitter.com/gilgamezh"&gt;Gilgamezh&lt;/a&gt;, que me preguntó a mí si sabía de algo así,
y me pasó el contacto de &lt;a class="reference external" href="https://twitter.com/cheshireminima"&gt;Claudia&lt;/a&gt; que también había estado en el PyPizza Remote, estaba interesada en la traducción y vivía en España.
La idea era ver si podíamos coordinar para hacer algo juntos.&lt;/p&gt;
&lt;p&gt;Finalmente, Gilgamezh organizó una reunión para "el viernes en que empezaba el PyCamp" y hablamos de cómo podíamos coordinar el trabajo.
Nos pusimos algunos objetivos: migrar la traducción del tutorial que había hecho Python Argentina al nuevo formato,
hacer pasar el build de Travis y configurarlo para que funcione bien, y ser parte de la documentación oficial a la brevedad.&lt;/p&gt;
&lt;p&gt;Nos pusimos trabajar en eso, escribimos una guía explicando &lt;a class="reference external" href="https://python-docs-es.readthedocs.io/page/CONTRIBUTING.html"&gt;como colaborar&lt;/a&gt; e hicimos un poco de difusión por redes sociales.
¡Ahora ya somos un grupo de 45 personas trabajando un montón para sacarlo adelante! Aún así, necesitamos mucha más gente para poder
realizar y revisar las traducciones, como así mantenerla actualizada una vez terminemos con la primera etapa.&lt;/p&gt;
&lt;p&gt;Entonces, como no podía ser de otra forma, te animo a que leas la &lt;a class="reference external" href="https://python-docs-es.readthedocs.io/page/CONTRIBUTING.html"&gt;guía rápida para colaborar en la traducción&lt;/a&gt; y nos ayudes
a llevar Python a muchísimas más personas del mundo hispano que no dominan en el inglés. ¡Te esperamos!&lt;/p&gt;
&lt;p&gt;Si sos de las personas que prefieren ver videos, te recomiendo este streaming que hice hace una semana explicando todo
el proceso que necesitas saber para sumarse al proyecto:&lt;/p&gt;
&lt;iframe width="200" height="113" src="https://www.youtube.com/embed/HcGZvHNZoWk?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;</description><category>documentación</category><category>español</category><category>proyectos</category><category>python</category><guid>https://elblogdehumitos.com/posts/documentacion-oficial-de-python-en-espanol/</guid><pubDate>Sun, 17 May 2020 17:19:35 GMT</pubDate></item><item><title>Me vi obligado a delinquir: pagué coima</title><link>https://elblogdehumitos.com/posts/me-vi-obligado-a-delinquir-pague-coima/</link><dc:creator>Manuel Kaufmann</dc:creator><description>&lt;div&gt;&lt;div class="admonition note"&gt;
&lt;p class="first admonition-title"&gt;Note&lt;/p&gt;
&lt;p class="last"&gt;Este artículo fue escrito el 18 de Agosto de 2018 a las 21:25:58 UTC-03:00.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Nunca en mi vida pagué una coima. Bueno, nunca en mi vida &lt;em&gt;había
pagado&lt;/em&gt; una coima, para ser literalmente correcto. No lograba entender
el objetivo de pagarla. Tenía varias razones en mente, pero como nunca
había estado en una situación similar, tampoco había tenido
oportunidad de ponerlas a prueba.&lt;/p&gt;
&lt;p&gt;"Si cometí una infracción, debo pagarla. ¿Porqué no lo haría?"
-pensaba.&lt;/p&gt;
&lt;p&gt;Hace 6 años me compré mi primer auto, un Fiat 147 todo destartalado
con el que fui hasta Uruguay. Años más tarde, me compré mi segundo
auto. Un Peugeot 206, con el que llevo más de 3 años viajando por toda
Argentina y latino américa. Me han parado tantas veces como te puedas
imaginar en las rutas, en las aduanas de todas las fronteras y
&lt;em&gt;siempre&lt;/em&gt; he tenido todos los papeles en regla.&lt;/p&gt;
&lt;p&gt;Sin embargo, también he recibido algunas multas en mi
domicilio. Algunas me han llegado desde la provincia de Corrientes, al
noreste de Argentina, por exceso de velocidad en zona urbana. Estas
multas me han llamado la atención porque soy muy cuidadoso en la ruta
y casi siempre (para no mentir) respeto los límites de
velocidad. Luego de una pequeña investigación, encontré en varios
sitios de Internet que la Municipalidad de estas pequeñas comunas
envían cartas a los dueños de los vehículos que &lt;em&gt;pasan&lt;/em&gt; por esa zona
intimándolos a que paguen; aunque no hayan cometido ninguna
infracción. Lo que en mi barrio se conoce como "un chantaje".&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;p&gt;¡Miento! Una vez sí cometí una infracción y pagué la multa
correspondiente. Era una tarde soleada en la que me dirigía al Parque
Nacional Quebrada de los Condoritos, en la provincia de Córdoba cerca
de Cura Brochero. Llevaba, en al asiento trasero, a uno de mis amigos
nuevos del Hostel en el que estaba parando cuando la Policía de
Córdoba me detiene. Me solicita todos los papeles del auto. Los
entrego. A los pocos minutos me informa que el pasajero que llevaba en
el asiento trasero no contaba con el cinturón de seguridad y por lo
tanto debía hacerme una multa por tal infracción. Expliqué mi
situación haciendo incapié que en la provincia de Entre Ríos (donde
obtuve mi licencia de conducir) solo es obligatorio el cinturón de
seguridad para los pasajeros de la parte delantera del vehículo.&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;En vano. Firmé la multa y seguí adelante.&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;3500 pesos, de aquella época.&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;Pagué, años más tarde, desde Cochabamba, Bolivia.&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;Luego de estos años en las rutas, de todos los colores y sabores, he
ido incrementando mi sistema de seguridad personal e incomodidad al
volante cuando la seguridad interna de alguno de los pasajeros se ve
afectada. Así me he convertido en el dueño del auto insoportable que
cada vez que te subís a su auto te vuelve a decir lo mismo: "Ponete el
cinturón", "No me tapes la ventanilla que no veo", "Corré la cabeza" y
otras frases más.&lt;/p&gt;
&lt;p&gt;Hoy me encuentro en Cuenca, Ecuador con mi Peugeot 206 que, como no
podía ser de otra manera, cuenta con todos los papeles reglamentarios
para poder circular por todo el territorio Ecuatoriano de forma
legal. En principio, cuando un auto ingresa a la mayoría de los países
de latino ameríca se le otorga un permiso de turismo por 3 meses (que
no tiene ninguna relación con el permiso migratorio otorgado a su
conductor, ya que son dos entidades completamente diferentes: Aduana y
Migraciones). Sabiendo que iba a permanecer más tiempo que 3 meses,
realicé una extensión por 2 años presentando toda la documentación
correspondiente y pagando los gastos de la misma.&lt;/p&gt;
&lt;p&gt;Como decía, &lt;em&gt;siempre&lt;/em&gt; he tenido todos los papeles al día por tres
motivos. El primero, me hace circular tranquilo. El segundo, me evita
todo tipo de problemas. El tercero, me evita &lt;em&gt;tener que&lt;/em&gt; pagar coimas.&lt;/p&gt;
&lt;p&gt;Ahora, ¿qué pasa si por algún motivo la situación cambia? Llevás el
auto a un taller mecánico que se encuentra en una ciudad diferente a
la que vivís. Luego de 2 semanas, volvés a retirar el auto. Viajando
de regreso a tu ciudad, encontrás un desperfecto en el auto que te
impide llegar a tu destino y decidís volver al taller y dejar el
vehículo para que lo revisen. Pasan los días y explicás tu situación:
"En dos días viajo fuera del país. Por lo tanto, si no me entregás el
vehículo antes de esa fecha, lamentablemente te lo voy a tener que
dejar aquí 3 semanas hasta que vuelva." El agente te informa que no
hay ningún inconveniente con eso, pero lo que sí iba a necesitar son
todos los papeles del auto ya que hay varias pruebas que se hacen en
ruta y por lo tanto puede ser que la policía le solicite los mismos.&lt;/p&gt;
&lt;p&gt;¿Qué hacés?&lt;/p&gt;
&lt;p&gt;Pensás.&lt;/p&gt;
&lt;p&gt;"Claro. Yo no le puedo dejar a este tipo los originales, ya que
cualquier inconveniente que tenga con ellos a mí me perjudica
muchísimo siendo que no estoy en mi país." -te da vuelta por la
cabeza.&lt;/p&gt;
&lt;p&gt;"¡Eso! Dejo los originales en mi casa y le llevo una copia para que
pueda tener en el auto. ¡Listo!" -comentás en voz alta a la nada
misma.&lt;/p&gt;
&lt;p&gt;Continuará...&lt;/p&gt;&lt;/div&gt;</description><category>auto</category><category>cuenca</category><category>ecuador</category><category>multa</category><category>viaje</category><guid>https://elblogdehumitos.com/posts/me-vi-obligado-a-delinquir-pague-coima/</guid><pubDate>Fri, 24 Apr 2020 21:12:58 GMT</pubDate></item><item><title>pytest.el custom runner</title><link>https://elblogdehumitos.com/posts/pytest-el-custom-runner/</link><dc:creator>Manuel Kaufmann</dc:creator><description>&lt;div&gt;&lt;p&gt;I started using &lt;a class="reference external" href="https://spacemacs.org/"&gt;Spacemacs&lt;/a&gt; some weeks ago, and there is not too much more to add
than what I wrote in the &lt;a class="reference external" href="https://github.com/humitos/emacs-configuration"&gt;README&lt;/a&gt; of my Emacs' configuration&lt;/p&gt;
&lt;blockquote class="epigraph"&gt;
&lt;p&gt;I used to have a very customized Emacs configuration with lot of packages, hotkeys, custom variables and a lot of things.
Then, one day, I met Spacemacs. Basically, it is exactly what I had but better and maintained by other people.&lt;/p&gt;
&lt;p class="attribution"&gt;—me&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;We have a very custom way to run tests:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;use a specific virtualenv&lt;/li&gt;
&lt;li&gt;we run the test inside docker&lt;/li&gt;
&lt;li&gt;we use a docker-compose wrapper made with &lt;a class="reference external" href="http://docs.pyinvoke.org/"&gt;invoke&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;we use &lt;a class="reference external" href="https://tox.readthedocs.io/"&gt;tox&lt;/a&gt; to run pytest&lt;/li&gt;
&lt;li&gt;filepath of test file in host does not exist in the container&lt;/li&gt;
&lt;li&gt;etc&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Basically, we need a very specific command to run the test and, of course that &lt;a class="reference external" href="https://github.com/ionrock/pytest-el"&gt;pytest.el&lt;/a&gt; won't know what to do here,
and it will fail even trying to guess hard. So, I needed a way to customize what is the command that pytest.el is going to execute.
Fortunately, the author already thought on some variables that helped me to make me happy -but there is one function that can't be
replaced using a customizable variable. I had to &lt;em&gt;override&lt;/em&gt; it.&lt;/p&gt;
&lt;ol class="arabic"&gt;
&lt;li&gt;&lt;p class="first"&gt;Define the variables I need in &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;.dir-locals.el&lt;/span&gt;&lt;/tt&gt;, so it only affects the project I want&lt;/p&gt;
&lt;pre class="code lisp"&gt;&lt;a id="rest_code_9390fbd47a2b427188cdc2753a8ed2e0-1" name="rest_code_9390fbd47a2b427188cdc2753a8ed2e0-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;python-mode&lt;/span&gt;
&lt;a id="rest_code_9390fbd47a2b427188cdc2753a8ed2e0-2" name="rest_code_9390fbd47a2b427188cdc2753a8ed2e0-2"&gt;&lt;/a&gt;  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;pytest-cmd-flags&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s"&gt;"-x"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_9390fbd47a2b427188cdc2753a8ed2e0-3" name="rest_code_9390fbd47a2b427188cdc2753a8ed2e0-3"&gt;&lt;/a&gt;  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;pytest-global-name&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s"&gt;"~/.pyenv/versions/readthedocs.org/bin/inv docker.test -a"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_9390fbd47a2b427188cdc2753a8ed2e0-4" name="rest_code_9390fbd47a2b427188cdc2753a8ed2e0-4"&gt;&lt;/a&gt;  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;pytest-cmd-format-string&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s"&gt;"cd '%s' &amp;amp;&amp;amp; %s '-e py36 -- %s %s'"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_9390fbd47a2b427188cdc2753a8ed2e0-5" name="rest_code_9390fbd47a2b427188cdc2753a8ed2e0-5"&gt;&lt;/a&gt;  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;pytest-remove-path&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s"&gt;"/home/humitos/rtfd/code/readthedocs.org/readthedocs/"&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;  &lt;span class="c1"&gt;;; Extra variable added by myself&lt;/span&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Override pytest.el &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;pytest-cmd-format&lt;/span&gt;&lt;/tt&gt; function&lt;/p&gt;
&lt;pre class="code lisp"&gt;&lt;a id="rest_code_75ccc282a1e34c13ad72e5203f679b55-1" name="rest_code_75ccc282a1e34c13ad72e5203f679b55-1"&gt;&lt;/a&gt;&lt;span class="c1"&gt;;; .emacs.d/private/local/docker-tox-pytest.el&lt;/span&gt;
&lt;a id="rest_code_75ccc282a1e34c13ad72e5203f679b55-2" name="rest_code_75ccc282a1e34c13ad72e5203f679b55-2"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;defcustom&lt;/span&gt; &lt;span class="nv"&gt;pytest-remove-path&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;
&lt;a id="rest_code_75ccc282a1e34c13ad72e5203f679b55-3" name="rest_code_75ccc282a1e34c13ad72e5203f679b55-3"&gt;&lt;/a&gt;  &lt;span class="s"&gt;"Path to remove from pytest test-names variable"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_75ccc282a1e34c13ad72e5203f679b55-4" name="rest_code_75ccc282a1e34c13ad72e5203f679b55-4"&gt;&lt;/a&gt;
&lt;a id="rest_code_75ccc282a1e34c13ad72e5203f679b55-5" name="rest_code_75ccc282a1e34c13ad72e5203f679b55-5"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;with-eval-after-load&lt;/span&gt; &lt;span class="ss"&gt;'pytest&lt;/span&gt;
&lt;a id="rest_code_75ccc282a1e34c13ad72e5203f679b55-6" name="rest_code_75ccc282a1e34c13ad72e5203f679b55-6"&gt;&lt;/a&gt;  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;defun&lt;/span&gt; &lt;span class="nv"&gt;pytest-cmd-format&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;format-string&lt;/span&gt; &lt;span class="nv"&gt;working-directory&lt;/span&gt; &lt;span class="nv"&gt;test-runner&lt;/span&gt; &lt;span class="nv"&gt;command-flags&lt;/span&gt; &lt;span class="nv"&gt;test-names&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_75ccc282a1e34c13ad72e5203f679b55-7" name="rest_code_75ccc282a1e34c13ad72e5203f679b55-7"&gt;&lt;/a&gt;    &lt;span class="s"&gt;"Override default function to remove local path."&lt;/span&gt;
&lt;a id="rest_code_75ccc282a1e34c13ad72e5203f679b55-8" name="rest_code_75ccc282a1e34c13ad72e5203f679b55-8"&gt;&lt;/a&gt;    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;format&lt;/span&gt; &lt;span class="nv"&gt;format-string&lt;/span&gt; &lt;span class="nv"&gt;working-directory&lt;/span&gt; &lt;span class="nv"&gt;test-runner&lt;/span&gt; &lt;span class="nv"&gt;command-flags&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;replace-regexp-in-string&lt;/span&gt; &lt;span class="nv"&gt;pytest-remove-path&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="nv"&gt;test-names&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;a id="rest_code_75ccc282a1e34c13ad72e5203f679b55-9" name="rest_code_75ccc282a1e34c13ad72e5203f679b55-9"&gt;&lt;/a&gt;  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Load my &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;docker-tox-pytest.el&lt;/span&gt;&lt;/tt&gt; file from Spacemacs&lt;/p&gt;
&lt;pre class="code lisp"&gt;&lt;a id="rest_code_060d2c40cf8b4c3284a00cb9edb8e2ab-1" name="rest_code_060d2c40cf8b4c3284a00cb9edb8e2ab-1"&gt;&lt;/a&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;load&lt;/span&gt; &lt;span class="s"&gt;"~/.emacs.d/private/local/docker-tox-pytest.el"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That's all!&lt;/p&gt;
&lt;p&gt;Now a simple &lt;tt class="docutils literal"&gt;SPC m t t&lt;/tt&gt; somewhere in the function that I want to test will call the command I need and will execute &lt;strong&gt;only&lt;/strong&gt; that test.&lt;/p&gt;&lt;/div&gt;</description><category>emacs</category><category>pytest</category><category>spacemacs</category><category>test</category><guid>https://elblogdehumitos.com/posts/pytest-el-custom-runner/</guid><pubDate>Fri, 24 Apr 2020 20:51:18 GMT</pubDate></item><item><title>Modifying a Django setting could be a nightmare</title><link>https://elblogdehumitos.com/posts/modifying-a-django-setting-could-be-a-nightmare/</link><dc:creator>Manuel Kaufmann</dc:creator><description>&lt;div&gt;&lt;p&gt;I've been working at Read &lt;em&gt;the&lt;/em&gt; Docs for four months more or less at
this time. Although I've been using Django for a decade now, there are
many things that I never used, forget or don't know how they work
internally.&lt;/p&gt;
&lt;p&gt;During the last three or four weeks I worked in a new feature for the
corporate site of Read the Docs (&lt;a class="reference external" href="https://readthedocs.com/"&gt;https://readthedocs.com/&lt;/a&gt;) and I had a
lot of different problems: mainly because I didn't know the full
codebase, but also because I never used some pieces of technology
involved to make this feature.&lt;/p&gt;
&lt;p&gt;So, what do you do when you are afraid of breaking everything? You
write many test to cover your ass! That's what I did and I felt very
comfortable when I started writing the logic of the feature
itself --of course, to write the tests I had to ask many questions to
my team to be sure the tests were accurate regarding what they were
testing.&lt;/p&gt;
&lt;p&gt;Finally, the PR was tested for some members of the team, everything
worked as expected, the code was merged and deployed. Successful
story, right?&lt;/p&gt;
&lt;p&gt;One of two days later, I started seeing one of my tests related to that
PR failing locally. I did a simple PR to run the test in CircleCI and
it also failed there. "WTF? This doesn't make sense" -I thought. I did
the manual QA locally and the code worked as expected but the test
were failing but... It didn't make sense because the initial tests
under CircleCI before merging the PR were passing and now &lt;em&gt;without any
change at all&lt;/em&gt; this specific test wasn't passing. I was very
confused.&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;p&gt;I went to the code of my tests to find something strange and after
taking a look at this code I didn't find anything that called my
attention directly but I found that I was mixing &lt;cite&gt;@override_settings&lt;/cite&gt;
and &lt;cite&gt;@modify_settings&lt;/cite&gt; as decorators of the class. "That may be a
reason... Really? Why?" -I was confused. I went to the documentation,
search at Google to see if the first results could give some clue and
after a couple of hours reading, thinking and shouting alone I
realized that I was using &lt;em&gt;both&lt;/em&gt; options of the &lt;a class="reference external" href="https://docs.djangoproject.com/en/1.9/topics/testing/tools/#django.test.SimpleTestCase.modify_settings"&gt;@modify_settings&lt;/a&gt;
decorator: &lt;cite&gt;append&lt;/cite&gt; &lt;strong&gt;and&lt;/strong&gt; &lt;cite&gt;remove&lt;/cite&gt; which, in theory, is not a
problem.&lt;/p&gt;
&lt;div class="admonition note"&gt;
&lt;p class="first admonition-title"&gt;Note&lt;/p&gt;
&lt;p class="last"&gt;What is the difference between &lt;cite&gt;@override_settings&lt;/cite&gt; and
&lt;cite&gt;@modify_settings&lt;/cite&gt;? Well, one allows you to replace the setting
completely and the other one allows you to append, prepend or
remove values from the current value of the setting.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;As I wanted to modify the &lt;cite&gt;MIDDLEWARE_CLASSES&lt;/cite&gt; to inject a new one &lt;em&gt;in
the middle&lt;/em&gt; of the others, I needed to &lt;em&gt;remove&lt;/em&gt; the ones that go
&lt;em&gt;after&lt;/em&gt; the one I wanted to inject and then add mine (the new one)
plus the ones that I had removed. Am I right?&lt;/p&gt;
&lt;blockquote class="epigraph"&gt;
I'm sure that at this point I'm wrong and there should be a much
better way of doing this, but I'm already writing the post :)&lt;/blockquote&gt;
&lt;p&gt;So, my code looks something like:&lt;/p&gt;
&lt;pre class="code python"&gt;&lt;a id="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-1" name="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-1"&gt;&lt;/a&gt;&lt;span class="nd"&gt;@modify_settings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MIDDLEWARE_CLASSES&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a id="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-2" name="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-2"&gt;&lt;/a&gt;    &lt;span class="s1"&gt;'append'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;a id="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-3" name="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-3"&gt;&lt;/a&gt;        &lt;span class="s1"&gt;'readthedocsinc.middleware.MyOwnMiddleware'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-4" name="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-4"&gt;&lt;/a&gt;        &lt;span class="s1"&gt;'externallib.middleware.ExternalMiddleware'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-5" name="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-5"&gt;&lt;/a&gt;    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-6" name="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-6"&gt;&lt;/a&gt;    &lt;span class="s1"&gt;'remove'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;a id="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-7" name="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-7"&gt;&lt;/a&gt;        &lt;span class="s1"&gt;'externallib.middleware.NoNeededMiddleware'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-8" name="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-8"&gt;&lt;/a&gt;        &lt;span class="s1"&gt;'externallib.middleware.ExternalMiddleware'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-9" name="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-9"&gt;&lt;/a&gt;    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-10" name="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-10"&gt;&lt;/a&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;a id="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-11" name="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-11"&gt;&lt;/a&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FooBar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TestCase&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;a id="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-12" name="rest_code_e26a11f8a85342c8952f46cb0bd6ac0e-12"&gt;&lt;/a&gt;    &lt;span class="c1"&gt;# ...&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;In my case, &lt;cite&gt;NoNeededMiddleware&lt;/cite&gt; wasn't needed for the tests and it
had to be completely removed. &lt;cite&gt;ExternalMiddleware&lt;/cite&gt; was needed but
&lt;cite&gt;MyOwnMiddleware&lt;/cite&gt; should precede it; that's why I needed to first
remove it and then append it -in another position in the list, though.&lt;/p&gt;
&lt;p&gt;Anything wrong up to here? No. Well, yes. Oh... "No, the test are
passing", or in a better way "The tests were passing right before the
deploy but now there is one that it's not passing anymore"&lt;/p&gt;
&lt;p&gt;At this point, I did what I learnt from my first boss in my
professional career: I went to the &lt;a class="reference external" href="https://github.com/django/django/blob/2.0.3/django/test/utils.py#L471-L482"&gt;Django source code of
@modify_settings&lt;/a&gt;
and I found the issue: it removes everything from &lt;cite&gt;remove&lt;/cite&gt; key and
appends everything from &lt;cite&gt;append&lt;/cite&gt; key. Makes sense.&lt;/p&gt;
&lt;p&gt;Now, which operation is executed first? AHA! Well, it depends since
dictionaries don't have order (&amp;lt; Python 3.6), sometimes it could be
&lt;cite&gt;remove&lt;/cite&gt; and sometimes it could be &lt;cite&gt;append&lt;/cite&gt;. So, I'd say that all the
planets were aligned to pass all the tests locally and in CircleCI
&lt;em&gt;before&lt;/em&gt; merging, and after merging they got unaligned and the order
started behaving in the other way :)&lt;/p&gt;
&lt;p&gt;What I did? I just used &lt;cite&gt;collections.OrderedDict&lt;/cite&gt; and put &lt;cite&gt;remove&lt;/cite&gt; as
the first element in the dictionary, and then &lt;cite&gt;append&lt;/cite&gt;. That way, I'm
100% sure that first I'm removing the middlewares I don't need and
then I'm adding the ones that I'm interested in the proper order.&lt;/p&gt;
&lt;p&gt;The final code looks like this:&lt;/p&gt;
&lt;pre class="code python"&gt;&lt;a id="rest_code_260bf9b9be0d4351947930aff6388113-1" name="rest_code_260bf9b9be0d4351947930aff6388113-1"&gt;&lt;/a&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;collections&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OrderedDict&lt;/span&gt;
&lt;a id="rest_code_260bf9b9be0d4351947930aff6388113-2" name="rest_code_260bf9b9be0d4351947930aff6388113-2"&gt;&lt;/a&gt;&lt;span class="nd"&gt;@modify_settings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MIDDLEWARE_CLASSES&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;OrderedDict&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
&lt;a id="rest_code_260bf9b9be0d4351947930aff6388113-3" name="rest_code_260bf9b9be0d4351947930aff6388113-3"&gt;&lt;/a&gt;    &lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_260bf9b9be0d4351947930aff6388113-4" name="rest_code_260bf9b9be0d4351947930aff6388113-4"&gt;&lt;/a&gt;        &lt;span class="s1"&gt;'remove'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_260bf9b9be0d4351947930aff6388113-5" name="rest_code_260bf9b9be0d4351947930aff6388113-5"&gt;&lt;/a&gt;        &lt;span class="p"&gt;[&lt;/span&gt;
&lt;a id="rest_code_260bf9b9be0d4351947930aff6388113-6" name="rest_code_260bf9b9be0d4351947930aff6388113-6"&gt;&lt;/a&gt;            &lt;span class="s1"&gt;'externallib.middleware.NoNeededMiddleware'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_260bf9b9be0d4351947930aff6388113-7" name="rest_code_260bf9b9be0d4351947930aff6388113-7"&gt;&lt;/a&gt;            &lt;span class="s1"&gt;'externallib.middleware.ExternalMiddleware'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_260bf9b9be0d4351947930aff6388113-8" name="rest_code_260bf9b9be0d4351947930aff6388113-8"&gt;&lt;/a&gt;        &lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_260bf9b9be0d4351947930aff6388113-9" name="rest_code_260bf9b9be0d4351947930aff6388113-9"&gt;&lt;/a&gt;    &lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;a id="rest_code_260bf9b9be0d4351947930aff6388113-10" name="rest_code_260bf9b9be0d4351947930aff6388113-10"&gt;&lt;/a&gt;    &lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_260bf9b9be0d4351947930aff6388113-11" name="rest_code_260bf9b9be0d4351947930aff6388113-11"&gt;&lt;/a&gt;        &lt;span class="s1"&gt;'append'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_260bf9b9be0d4351947930aff6388113-12" name="rest_code_260bf9b9be0d4351947930aff6388113-12"&gt;&lt;/a&gt;        &lt;span class="p"&gt;[&lt;/span&gt;
&lt;a id="rest_code_260bf9b9be0d4351947930aff6388113-13" name="rest_code_260bf9b9be0d4351947930aff6388113-13"&gt;&lt;/a&gt;            &lt;span class="s1"&gt;'readthedocsinc.middleware.MyOwnMiddleware'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_260bf9b9be0d4351947930aff6388113-14" name="rest_code_260bf9b9be0d4351947930aff6388113-14"&gt;&lt;/a&gt;            &lt;span class="s1"&gt;'externallib.middleware.ExternalMiddleware'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_260bf9b9be0d4351947930aff6388113-15" name="rest_code_260bf9b9be0d4351947930aff6388113-15"&gt;&lt;/a&gt;        &lt;span class="p"&gt;],&lt;/span&gt;
&lt;a id="rest_code_260bf9b9be0d4351947930aff6388113-16" name="rest_code_260bf9b9be0d4351947930aff6388113-16"&gt;&lt;/a&gt;    &lt;span class="p"&gt;),&lt;/span&gt;
&lt;a id="rest_code_260bf9b9be0d4351947930aff6388113-17" name="rest_code_260bf9b9be0d4351947930aff6388113-17"&gt;&lt;/a&gt;&lt;span class="p"&gt;]))&lt;/span&gt;
&lt;a id="rest_code_260bf9b9be0d4351947930aff6388113-18" name="rest_code_260bf9b9be0d4351947930aff6388113-18"&gt;&lt;/a&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FooBar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TestCase&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;a id="rest_code_260bf9b9be0d4351947930aff6388113-19" name="rest_code_260bf9b9be0d4351947930aff6388113-19"&gt;&lt;/a&gt;    &lt;span class="c1"&gt;# ...&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;I think this should be clearly detailed in the Django documentation of
&lt;cite&gt;@modify_settings&lt;/cite&gt; since the behaviour is way different and can cause
a lot of time lost because of this --even worse if you are working
with Python 2 which will randomly do one or the other first.&lt;/p&gt;&lt;/div&gt;</description><category>cuenca</category><category>django</category><category>ecuador</category><category>python</category><category>read the docs</category><guid>https://elblogdehumitos.com/posts/modifying-a-django-setting-could-be-a-nightmare/</guid><pubDate>Fri, 16 Mar 2018 01:55:53 GMT</pubDate></item><item><title>Diversidad, inclusión y todo eso</title><link>https://elblogdehumitos.com/posts/diversidad-inclusion-y-todo-eso/</link><dc:creator>Manuel Kaufmann</dc:creator><description>&lt;div&gt;&lt;p&gt;Atención, este artículo puede ser difícil de leer y fácil de
juzgar. Sin embargo, me gustaría desahogarme y que podamos hablar de
"lo prohibido" para que entre todos podamos construir una
sociedad/comunidad mejor, sin prejuicios y en el que todos podamos
hablar libremente sin ofender a los demás: entendiendo a todas las
partes involucradas.&lt;/p&gt;
&lt;p&gt;Como muchos sabrán, hace tiempo que venimos trabajando en "todo esto
de la diversidad e inclusión" en el mundo de la programación. Sin
embargo, yo, quien fue uno de los que empezó a impulsar esta idea
entre mis conocidos (incluso &lt;em&gt;antes&lt;/em&gt; de que Django Girls existiese)
tengo un montón de dudas y problemas con este tema que es tan
sensible.&lt;/p&gt;
&lt;p&gt;Sí, &lt;em&gt;dudas y problemas&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Luego de la &lt;a class="reference external" href="http://2017.pythonbrasil.org.br/"&gt;PyConBr 13&lt;/a&gt; hablé
bastante con &lt;a class="reference external" href="http://2017.pythonbrasil.org.br/"&gt;@turicas&lt;/a&gt;, a quien
considero una persona sumamente abierta con la que se puede hablar sin
problemas de los temas que nos molestan y de los problemas que
tenemos.  Él, luego de su charla en la que mencionó "Género y Número",
me ayudó muchísimo a reflexionar sobre todo esto y a tratar de
comprender un poco más la situación.&lt;/p&gt;
&lt;p&gt;Es por eso que hoy me gustaría escribir todo lo que me quedó dando
vueltas en la cabeza.&lt;/p&gt;
&lt;p&gt;Me gustaría remontarme un poco a mi infancia, al lugar en el que fui
criado y que me ayuden a entender un poquito porqué yo, entre tantas
otras personas que queremos cambiar este mundo, tenemos estos
problemas.&lt;/p&gt;
&lt;p&gt;Nací en un barrio "normal" de Paraná, Entre Ríos, Argentina a una
cuadra del río Paraná y rodeado por el mismo. El barrio tenía una
única salida hacia "el centro" y había que caminar 5 cuadras para
llegar a "la civilización" donde pasaban los buses, taxis y cualquier
medio de transporte. En fin, yo pagaba $5 (en ese entonces ~USD 5) de
taxi para llegar a ese lugar en vez de ir a pie por el miedo que tenía
a que algo me ocurriese en el camino. El barrio, estaba "bien" en mi
cuadra, pero esas otras 5 eran muy desoladas y rodeadas de "villas".&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;p&gt;Ahí pasé toda mi infancia escuchando a los vecinos decir "estos negros
de mierda" cuando a algunos de mis amigos &lt;em&gt;cualquier persona&lt;/em&gt; le
robaba las zapatillas, la bicicleta, la billetera o incluso nuestra
pelota de fútbol (en general, la mayoría de los robos que hemos
experimentado en mi barrio no han sido violentos). También, en
reiteradas oportunidades nos entraron a robar a mi casa e incluso en
una de ellas nosotros estábamos adentro.&lt;/p&gt;
&lt;p&gt;Esas veces, "negros de mierda" era una expresión que se quedaba
corta -según vecinos y familiares. En Paraná, donde nací yo, esta
expresión tiene una connotación negativa y pésima que lamentablemente
&lt;em&gt;vive&lt;/em&gt; dentro de mí ya que me crié con esto.&lt;/p&gt;
&lt;p&gt;En fin, lo que quiero decir en este punto es que incluso gente con la
mente un poco abierta, que está a favor de la inclusión y la
diversidad (como yo me considero) aún tiene este tipo de
problemas. ¿Cuál es exactamente el problema? No estoy del todo seguro,
pero al menos sé que ni siquiera nos sabemos expresar correctamente.&lt;/p&gt;
&lt;p&gt;Personalmente, no tengo amigos de piel negra. Pero no es porque no
quiera, al contrario. Sino que supongo que es simplemente porque en el
lugar en el que yo nací "no es común": la mayoría de la gente es
blanca leche (como yo) o de piel morena (esos a los que pésimamente le
hemos llamado "negros de mierda" durante muchos años); pero de piel
negra no hay.&lt;/p&gt;
&lt;p&gt;¿Hasta acá, cómo vamos? Ya me odian. Espero que no. Todavía quiero
seguir escribiendo sobre los problemas que tengo con respecto a "todo
esto".&lt;/p&gt;
&lt;p&gt;Pasemos al tema de la "diversidad de género". Anteriormente comenté un
poco el trabajo que venimos haciendo organizando talleres Django Girls
en diferentes países de Latinoamérica con el fin de acercar mujeres al
mundo de la tecnología/programación y que se sientan cómodas. ¿Bien?
Bueno, eso sería "diversidad de sexo" pero no de género, en
realidad. Sexos hay solo 2, pero géneros hay algunos más. Hablemos un
poco de eso.&lt;/p&gt;
&lt;p&gt;Nuevamente me gustaría remontarme a la infancia. En esas épocas
mientras estábamos jugando al fútbol si alguien te iba muy fuerte y a
vos te dolía, la mayoría de los niños te decían cosas como: "ah, no
seas mamita", "qué puto que sos", "maricón", "parecés mi hermana" y
cosas similares. Eso, durante años.&lt;/p&gt;
&lt;p&gt;Este tipo de frases, denotando una debilidad en el sexo femenino o
burlándose de los homosexuales y demás va tomando su lugar en tu
cabeza, en tu memoria... y ese tipo de expresiones pasan a ser una
especie de "muletilla inconsciente" en ocasiones similares en tu
adolescencia o madurez.&lt;/p&gt;
&lt;p&gt;Lo mismo aquí. No tengo ningún amigo homosexual ni tampoco
transexual. Resumiendo, no tengo ningún amigo que su sexo no coincida
con su género o que no encaje en los "estándares religiosamente
tradicionales". Pienso que probablemente haber vivido inmerso en este
tipo de situaciones desde pequeño han hecho que frente a la
posibilidad de ser parte de un grupo diverso, me distancie de estas
personas (quizás consciente o quizás inconscientemente -hoy no lo sé)&lt;/p&gt;
&lt;p&gt;Sigamos adelante, pero volvamos a lo que nos concierne: ¡queremos
diversidad e inclusión en el ambiente en el que nos desenvolvemos!
(¿verdad?) Bueno, en principio, creo que toda la gente que nos
consideramos "abierta" necesitamos pensar bastante en esto nuevamente;
pero más aún, creo que &lt;em&gt;necesitamos pertenecer a estos grupos&lt;/em&gt; de las
minorías y aprender de ellos. Una de las preguntas que les hago a las
chicas que alcanzo a conocer un poquito más en los talleres de Django
Girls o en las conferencias a las que asisto es: "¿Cómo es ser mujer
en este evento/comunidad?" y "¿Has vivido alguna situación en la que
te hayan dejado de lado en un trabajo o que ni siquiera te lo asignen
por ser mujer? ¿Cómo fue? ¿Cómo se siente?".&lt;/p&gt;
&lt;p&gt;Lamentablemente, incluso haciendo estas preguntas cuando tengo la
oportunidad y &lt;em&gt;creo&lt;/em&gt; que no voy a ofender a la otra persona, siento
que sigo teniendo nada de información y todavía me cuesta comprender
el problema. En varias oportunidades esto me hace pensar que quiero
"ayudar a resolver" un problema que ni siquiera entiendo y al final
del día me lo cuestiono y creo que estoy equivocado en el camino que
estoy tomando.&lt;/p&gt;
&lt;p&gt;En los últimos años he visitado varios países y he estado involucrado
en diferentes comunidades y "siento" (quizás porque es la que más viví
de cerca) que Argentina es el país con más discriminación, el país de
la burla, del chiste fácil, del hacer quedar mal al otro en todo
momento y en la mayoría de las veces, sin importar si le hacemos daño
a la otra persona o no.&lt;/p&gt;
&lt;p&gt;Hoy en día, creo que la gente "de grande" se está ubicando un poco más
pero, ¿qué hacemos con todo eso que tenemos dentro de nuestra cabeza,
en nuestra memoria y que muchas veces sale "sin querer"? Esto no es
una excusa para llevarse todo por delante sin importar nada, al
contrario, creo que lo que necesitamos es aprender de los demás (de
los grupos diversos) a comportarnos, a expresarnos y crecer
humanamente juntos: siendo parte.&lt;/p&gt;
&lt;p&gt;Personalmente creo que esto es un problema de todos (inclusión y
diversidad como un todo -lo otro aún no lo entiendo: no tengo idea lo
que se siente ser parte de las minorías aún y quizás nunca lo logre
sentir) y que todos necesitamos trabajar juntos. Juntos de verdad. No
nosotros haciendo Django Girls por aquí, la gente de Afro Python
haciendo eventos por allá y la comunidad Trans por otro lado. Eso creo
que ayuda mucho, pero creo que &lt;em&gt;lo ideal&lt;/em&gt; sería que empecemos a
mezclarnos. Yo lo necesito. Yo, que quiero impulsar esto, lo
necesito. Necesito esto porque necesito aprender de las
minorías. Necesito verme forzado a cuidar mi lenguaje, a no
discriminar, a bloquear toda esa infancia que llevo dentro y poder
&lt;em&gt;naturalmente&lt;/em&gt; hablar con todas las personas con respeto.&lt;/p&gt;
&lt;p&gt;En fin, creo que para empezar a resolver la problemática de la
diversidad y la inclusión lo que debemos hacer es justamente eso:
participar de grupos diversos e inclusivos. Aunque eso suene
tonto. Sin embargo, creo que si las personas que pertenecemos a los
grupos de las mayorías, si no nos abrimos mentalmente y los grupos de
las minorías nos aceptan, nos va a tomar mucho más tiempo poder seguir
avanzando en erradicar esta problemática.&lt;/p&gt;
&lt;p&gt;Estoy seguro que este artículo puede molestarle a algunas personas y
pido disculpas anticipadamente por eso. Además, acepto un "sos un
pelotudo" en los comentarios pero no sin una lección que me
enseñe/ayude a entender el problema, me haga cuestionar mis
pensamientos y me de pautas sobre como seguir creciendo.&lt;/p&gt;&lt;/div&gt;</description><category>comunidad</category><category>diversidad</category><category>inclusión</category><category>python</category><guid>https://elblogdehumitos.com/posts/diversidad-inclusion-y-todo-eso/</guid><pubDate>Tue, 17 Oct 2017 21:05:03 GMT</pubDate></item><item><title>Navegar en internet en aeropuertos</title><link>https://elblogdehumitos.com/posts/navegar-en-internet-en-aeropuertos/</link><dc:creator>Manuel Kaufmann</dc:creator><description>&lt;div&gt;&lt;p&gt;Una de las mejores cosas de saber cómo funcionan las cosas es que "a
veces" podés utilizar ese conocimiento para tomar atajos.&lt;/p&gt;
&lt;p&gt;Hoy tengo un ejemplo concreto de esto. En mi viaje por sudamérica creé
un proyecto llamado &lt;a class="reference external" href="https://github.com/humitos/pyfispot"&gt;PyFi Spot&lt;/a&gt; que básicamente es un portal cautivo
escrito en Python que ejecuta comandos de iptables para permitir o
denegar el acceso a internet de las personas que se conecta a una red
abierta.&lt;/p&gt;
&lt;p&gt;¿No les suena familiar? Esos bares, restaurantes o aeropuertos que te
dicen que tenés 30 minutos gratis para navergar y luego se
termina. OK, algunos aeropuertos te permiten pagar (nunca entedí dónde
se compra ese usuario/contraseña que te pide al web) y podés seguir
navegando durante el tiempo que has pagado. Pero hay otros, que ni
siquiera tienen esa opción y entonces en una espera de 5 horas (como
la mia de hoy) solo tenés 30 minutos y te querés matar.&lt;/p&gt;
&lt;p&gt;Acá entran en juego &lt;a class="reference external" href="https://wiki.archlinux.org/index.php/MAC_address_spoofing#Method_2:_macchanger"&gt;macchanger&lt;/a&gt; y &lt;a class="reference external" href="https://wiki.archlinux.org/index.php/NetworkManager#Configuring_MAC_Address_Randomization"&gt;NetworkManager&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;"Mmm... macchanger, eso me suena a algo", estarás pensando. Sí, la
posta de este tipo de servicios es que bloquean a los dispositivos
(teléfonos, laptops, etc) por el número de MAC de la placa de red de
ese dispositivo que es único en el mundo. Entonces, esta es la forma
que los portales tienen de saber quiénes están accediendo a su red y
filtran el acceso a internet por ese número (que va incrustado en los
paquetes de red).&lt;/p&gt;
&lt;p&gt;Claro, ¿porqué sé esto? Porque me hice un programa que hace
exactamente eso y le dediqué un par de semanas a estudiar como
funcionaban estos bichos.&lt;/p&gt;
&lt;p&gt;¿Entonces? ¿Cuál es la solución? Y claro, cada 29 minutos cambiar la
MAC de tu placa de red y volverte a conectar utilizando la nueva
MAC. El portal cautivo cree que sos una persona totalmente nueva
y... ¡ADELANTE!&lt;/p&gt;
&lt;p&gt;¿Cómo hago para cambiar la MAC? Utilicé Network Manager que hace todo
esto sea muy fácil:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Click derecho en el ícono del systray&lt;/li&gt;
&lt;li&gt;"Editar las conexiones..."&lt;/li&gt;
&lt;li&gt;Elegís la conexión que tiene el nombre de la red del aeropuerto&lt;/li&gt;
&lt;li&gt;Vas a la pestaña "Inalámbrica"&lt;/li&gt;
&lt;li&gt;Y donde dice "Dirección MAC clonada", le ponés "Aleatorio"&lt;/li&gt;
&lt;li&gt;Guardás todo, cerrás, volvés a conectar y listo!&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="admonition admonition-cookies-en-juego"&gt;
&lt;p class="first admonition-title"&gt;Cookies en juego&lt;/p&gt;
&lt;p&gt;Te recomiendo iniciar la sesión en el portal cautivo utilizando una
pestaña privada, para así evitar que se guarden las cookies en tu
máquina y que luego el sistema nos reconozca como que hemos vencido
nuestro tiempo.&lt;/p&gt;
&lt;p class="last"&gt;Si ya "la has cagao", borrando las cookies del navegador solucionás
este problema.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="admonition note"&gt;
&lt;p class="first admonition-title"&gt;Note&lt;/p&gt;
&lt;p class="last"&gt;A "macchanger" no lo usé al final, ya que si bien funcionó, al
volverme a conectar a la red mediante "network manager" este me volvía
a poner la MAC de mi placa de red original.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</description><category>aeropuerto</category><category>linux</category><category>mac</category><category>network</category><category>viaje</category><guid>https://elblogdehumitos.com/posts/navegar-en-internet-en-aeropuertos/</guid><pubDate>Wed, 04 Oct 2017 18:57:22 GMT</pubDate></item><item><title>Embajador de Python de la Python Software Foundation</title><link>https://elblogdehumitos.com/posts/embajador-de-python-de-la-python-software-foundation/</link><dc:creator>Manuel Kaufmann</dc:creator><description>&lt;div&gt;&lt;p&gt;Lo que comenzó hace más de tres años como una locura, como un sueño de
adolescente, como un viaje muy arriesgado, como un proyecto en el que
nadie creía... Llegó a lo más lejos que alguna vez podría haber
llegado e incluso cruzó esa frontera ficticia impuesta por nosotros
mismos y fue más allá.&lt;/p&gt;
&lt;p&gt;El pasado 19 de Diciembre de 2016 -casualmente el día de mi
cumpleaños, la Python Software Foundation, &lt;a class="reference external" href="https://www.python.org/psf/records/board/resolutions/"&gt;me declaró Emabajador de
Python en Latino América&lt;/a&gt;. Un título
que me queda grande por donde lo mires. Sin embargo, luego de todo el
esfuerto que hemos venido realizando durante los últimos años, esta
noticia me pone muy contento y hace nuevamente que me vuelva a
lenvantar de las cenizas. Si siguen la historia de este proyecto,
sabrán que hemos tenido momentos muy feos y la hemos pasado muy
mal. Así y todo, son estas cosas -y otras mucho más pequeñas también,
las que nos hacen seguir adelante y nos demuestran que la gente cree,
confía, apoya y valora nuestro esfuerzo.&lt;/p&gt;
&lt;blockquote&gt;
RESOLVED, that the Python Software Foundation approve the Python
Ambassador program for South America as outlined
&lt;a class="reference external" href="https://mail.python.org/mailman/private/psf-board/2016-November/041096.html"&gt;https://mail.python.org/mailman/private/psf-board/2016-November/041096.html&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;Este título que me han asignado me pone muy contento, pero más
contento aún me hace sentir que "no soy yo solamente" sino que estamos
abriendo la puerta dentro de la misma Python Software Foundation para
que esto sea un rol nuevo dentro de la fundación y que haya más
personas en el mundo que puedan ser Embajadores de Python en su región
y así ayudar en que las comunidades que tienen cerca crezcan y
desarrollen, además de colaborar y empujar la creación de las mismas.&lt;/p&gt;
&lt;p&gt;A principios del 2016, la misma PSF, me declaró Emabajdor de Python
"en prueba" por un período de 3 meses para &lt;em&gt;probar&lt;/em&gt;, justamente, como
sería la dinámica, el manejo del dinero, los objetivos del rol -que
tenían que definirse, y luego de ese período junto con Nick Colghan y
Ewa Jodlowska escribimos un reporte sobre esta experiencia, qué
creíamos que significa ser Embajador de Python, cuáles las expectivas,
los objetivos a cumplir, cómo debería ser el seguimiento, varias cosas
relacionadas al manejo del dinero y demás. Fue una tarea bastante
compleja y llevó varios meses, incluso una vez terminado ese período
de prueba. ¡Ese esfuerzo valió la pena!&lt;/p&gt;
&lt;p&gt;Ahora, durante todo el 2017 &lt;em&gt;el loco&lt;/em&gt; que en PyCon Argentina 2013 dijo:&lt;/p&gt;
&lt;blockquote&gt;
Yo, humitos, voy a recorrer toda la Argentina en mi auto y voy
organizar un evento de Python en cada una de las ciudades que
visite con la idea de descentralizar el conocimiento.&lt;/blockquote&gt;
&lt;p&gt;cuenta con un presupuesto pre-autorizado por la Python Software
Foundation para desarrollar actividades de educación, inclusión,
diversidad, empoderar las pequeñas comunidades, difundir, motivar a la
gente a estudiar y desarrollarse en el mundo de la tecnología. Además,
con la idea de dejar asentado el trabajo realizado durante todo este
año y proponer la apertura oficial del rol &lt;em&gt;Embajador de Python&lt;/em&gt; al
resto del mundo.&lt;/p&gt;
&lt;p&gt;Recordá que vos también podés cambiar el mundo de a poquito. Recordá
que tu mínima colaboración en la comunidad puede cambiar el
mundo. Recordá que aunque creas que tu aporte es mínimo, no lo
es. Recordá que tu conocimiento es muy valioso y que podés
transmitirlo a otros. Recordá que no estás solo y que has aprendido
mucho de los demás. Valorá eso, y ayudá a devolverlo.&lt;/p&gt;
&lt;blockquote&gt;
Hoy hiciste la traducción de un párrafo, que leyó un niño que en
el futuro uso para escribir el software que nos llevó a otro
planeta.&lt;/blockquote&gt;
&lt;p&gt;Gracias por leer.&lt;/p&gt;&lt;/div&gt;</description><category>argentina en python</category><category>psf</category><category>python</category><category>viajes</category><guid>https://elblogdehumitos.com/posts/embajador-de-python-de-la-python-software-foundation/</guid><pubDate>Sat, 11 Mar 2017 05:48:36 GMT</pubDate></item><item><title>10 años no es nada</title><link>https://elblogdehumitos.com/posts/10-anos-no-es-nada/</link><dc:creator>Manuel Kaufmann</dc:creator><description>&lt;div&gt;&lt;p&gt;Ayer tuve uno de mis primeros, "¿Pero esto no es lo mismo que nosotros
hacíamos hace 10 años atrás?"&lt;/p&gt;
&lt;p&gt;Cuando estaba en Perú, en uno de los peores hospedajes (¡y ciudades!)
que he estado en mi "corta vida" estuve estudiando un poco de &lt;em&gt;Docker&lt;/em&gt;
porque ya lo había escuchado mucho y nunca me había puesto de
verdad. Así que &lt;em&gt;me hice el tiempo&lt;/em&gt; para dedicarle unas cuantas
horas. Aprendí poco la verdad. Hice el tutorial y terminé con muchas
dudas.&lt;/p&gt;
&lt;p&gt;Hace 2 semanas lo empecé a mirar un poco más en profundidad ya que en
el trabajo lo empezamos a usar y justamente tuvimos tiempo para
experimentar y jugar un poco con casos reales. ¿Viste como es? Uno
aprende mucho más rápido cuando trabaja sobre un problema real que
cuando estudia &lt;em&gt;porque sí&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;El fin de semana estuve haciendo mi imagen de Docker para la
configuración de mi emacs y quedó de lujo:&lt;/p&gt;
&lt;blockquote&gt;
&lt;a class="reference external" href="https://hub.docker.com/r/humitos/emacs-x11-alpine/"&gt;https://hub.docker.com/r/humitos/emacs-x11-alpine/&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;Durante los días del fin de semana le estaba contando a Johanna lo
contento que estaba por haber hecho esto (ya que mi primera versión
para compartir la config de emacs fue un script de bash &lt;cite&gt;tryit.sh&lt;/cite&gt; que
hacía mucha magia loca y fea). Lo primero que le pregunté era si
conocía Docker, para ver desde dónde empezamos a hablar, y me dijo que
había visto algo pero que lo tenía que estudiar mejor: "Es como meter
pequeñas máquinas dentro de la tuya, ¿no?". Y, sí, generalizando es
exactamente eso.&lt;/p&gt;
&lt;p&gt;Entonces, cuando le empecé a explicar porqué estaría bueno que lo
miremos juntos -tener todo instalado para que en los talleres sea
súper fácil y compatible de configurar todos los sistemas
tradicionales, me dije: "¿Pero esto no es lo mismo que nosotros
hacíamos hace 10 años atrás con César y vserver?"&lt;/p&gt;
&lt;p&gt;¡Pucha, me estoy poniendo viejo! -pensé&lt;/p&gt;
&lt;p&gt;Luego de leer un poco, no mucho la verdad, encontré que la principal
diferencia está en la implementación de "la cosa", digamos. Docker usa
LXC que es una forma nativa por parte del Kernel de Linux de realizar
la virtualización y vserver hace algo parecido pero en su propia
modificación del Kernel.&lt;/p&gt;
&lt;p&gt;Por lejos, creo que la mejor explicación que encontré viene de &lt;a class="reference external" href="https://www.reddit.com/r/docker/comments/3bzalq/how_is_dockerlxc_different_from_linuxvservers/"&gt;este
post de reddit&lt;/a&gt;
y mi conclusión es que &lt;em&gt;le pusieron un lindo logo&lt;/em&gt; simpático y con una
sonrisa.&lt;/p&gt;
&lt;p&gt;Ah, y ¡mucho marketing!&lt;/p&gt;&lt;/div&gt;</description><guid>https://elblogdehumitos.com/posts/10-anos-no-es-nada/</guid><pubDate>Mon, 30 Jan 2017 01:38:37 GMT</pubDate></item><item><title>Emacs fácil</title><link>https://elblogdehumitos.com/posts/emacs-facil/</link><dc:creator>Manuel Kaufmann</dc:creator><description>&lt;div&gt;&lt;p&gt;Lo primero que hay que preguntarse es, ¿se puede?&lt;/p&gt;
&lt;p&gt;Sí, hay una forma de configurar emacs y que sea sencillo. ¿Cómo?
Usando el trabajo que los otros han estado haciendo :) . El mismísimo
mundo se basa en eso, entonces, ¿porqué no hacerlo nosotros también?&lt;/p&gt;
&lt;p&gt;Una de mis preocupaciones con Emacs era encontrar una forma fácil de
compartir mi configuración para que otro la pruebe sin que re rompa la
cabeza. En principio creé un repo git para eso, pero no fue
suficiente. Es cierto que yo demoré bastante hasta entender cómo
funcionan estas cosas.&lt;/p&gt;
&lt;p&gt;Luego pensé en hacer un paquete con mi config, pero al final de cuenta
también ya necesitás un nivel de conocimiento de emacs.&lt;/p&gt;
&lt;p&gt;Después escribí un script &lt;cite&gt;tryit.sh&lt;/cite&gt; basándome en la idea de los que
escribieron &lt;cite&gt;helm&lt;/cite&gt; (un plugin de emacs). Básicamente, bajás el repo
mio de git, ejecutás &lt;cite&gt;tryit.sh&lt;/cite&gt; y ya haría todo lo necesario para que
funcione. Sin embargo, mantenerlo y hacer que funcione en diferentes
versiones de Linux fue complicado. Abandoné rápido por no tener una
forma fácil de probarlo.&lt;/p&gt;
&lt;p&gt;Hoy está de moda Docker, así, ¿porqué no dockerizarlo?&lt;/p&gt;
&lt;p&gt;Hice una primera prueba con Ubuntu y la imagen terminó pesando 1.2 GB,
lo cuál no tiene sentido para mí. Así que busqué otras alternativas y
llegué a Alpine Linux (3.8 MB).&lt;/p&gt;
&lt;p&gt;Luego de probar algunas cositas, llegué a la primera configuración e
imagen lista para ser corrida (~350 MB). Entonces, si tenés docker
instalado en tu máquina hacé:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
docker run --rm -it -e DISPLAY -v $(pwd):/src -v /tmp/.X11-unix:/tmp/.X11-unix:ro -v $XAUTHORITY:/root/.Xauthority --net=host humitos/emacs-x11-alpine
&lt;/pre&gt;
&lt;p&gt;Esperá unos 5 minutos que baje la imagen y probalo!&lt;/p&gt;
&lt;p&gt;Referencia: &lt;a class="reference external" href="https://github.com/humitos/emacs-configuration"&gt;https://github.com/humitos/emacs-configuration&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><category>emacs python programación cuenca ecuador</category><guid>https://elblogdehumitos.com/posts/emacs-facil/</guid><pubDate>Sat, 28 Jan 2017 00:34:54 GMT</pubDate></item><item><title>No cumplas tu sueño, es una trampa</title><link>https://elblogdehumitos.com/posts/no-cumplas-tu-sueno-es-una-trampa/</link><dc:creator>Manuel Kaufmann</dc:creator><description>&lt;div&gt;&lt;p&gt;Para la &lt;a class="reference external" href="http://2016.es.pycon.org/en/keynoters-speakers/"&gt;charla Keynote que di en PyCon España&lt;/a&gt; me preparé con
&lt;a class="reference external" href="https://www.facebook.com/paulfernandoromeroespinoza"&gt;Nando&lt;/a&gt;, un profesor de historia del arte/teatro en la UDA (Universidad
de Azuay), músico, actor, Ingeniero en Sistemas, director de teatro y
por sobre todo, muy buena persona.&lt;/p&gt;
&lt;p&gt;Llegué a él gracias a Belén Abad, una chica que conocimos en las
Meetups de Python que organizamos aquí en Cuenca, Ecuador cuando vi
una &lt;a class="reference external" href="https://www.youtube.com/watch?v=RVaGYgUm4yI"&gt;charla que dio en TEDx Cuenca que me gustó mucho&lt;/a&gt;. Debido a eso, le
pregunté con quién se había preparado y me pasó el contacto de Nando.&lt;/p&gt;
&lt;p&gt;El primero de los días de nuestras juntadas tomó lugar en la misma
cantina de la UDA, donde luego de presentarnos y hablar un poco de
nosotros, nos pusimos a trabajar juntos en el motivo que nos unía: la
Keynote de PyCon España.&lt;/p&gt;
&lt;p&gt;¿Porqué busqué una persona que me ayude a preparar mi charla? La
respuesta corta es porque tenía mucho miedo.&lt;/p&gt;
&lt;p&gt;La verdad es que no tenía muy claro porqué me habían ofrecido a mí dar
una plenaria en una conferencia fuera de mi país, donde nadie me
conoce. ¿Qué podría ofrecerle yo a esa gente? En España, que el
movimiento de Python es muy grande. En el primer mundo, donde el
acceso a la tecnología y la educación es muy fuerte. Yo. Miraba para
atrás, y lo único que veía eran "un par de eventos que habíamos
organizado &lt;em&gt;por ahí&lt;/em&gt;" y que, realmente, cualquiera lo hubiese podido
haber hecho.&lt;/p&gt;
&lt;p&gt;Además, tenía la experiencia de haber participado como disertante en
PyCaribbean unos meses antes. Mi primera participación como disertante
en una conferencia fuera de mi país y habiendo sido invitado
justamente para compartir la experiencia de &lt;a class="reference external" href="https://argentinaenpython.com/"&gt;Argentina en
Python&lt;/a&gt;. Sin embargo, habiendo preparado con mucha fuerza esa charla,
no me fue tan bien. Incluso, antes de emprender viaje desde Perú a
República Dominicana, Johanna ya me había dicho que la charla estaba
"Ni". No le había llegado a transmitir mucho (casi nada) y que me
había olvidado de decir muchas cosas importantes las veces que la
practiqué.&lt;/p&gt;
&lt;p&gt;¡Eso! Puntualmente el problema de olvidarme cosas importantes era lo
que más quería trabajar con Nando, y que me ayude a poder manejarlo
para esta nueva charla que yo consideraba muy importante y que no
quería defraudar a la gente de allá. Con Johanna decíamos, "Si vamos a
España es para &lt;em&gt;romperla&lt;/em&gt; y dejar a la gente con la boca
abierta. Sino, nada de esto tiene sentido".&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;p&gt;Luego de la primera reunión, casi llegando al final y habiendo hablado
mucho de "la vida" y bastante del proyecto, Nando me dijo algo así
como: "Tu historia es maravillosa. Lo tiene todo. Y además, no tenés
los miedos típicos de hablar en público. No entiendo qué necesitás de
mí." Expliqué mis razones, mis miedos y mis experiencias: "No quiero
que me vuelva a pasar eso".&lt;/p&gt;
&lt;p&gt;Luego de la primera reunión yo hice un viaje a México por 3
semanas. En ese tiempo tenía que resolver una pequeña tarea: "escribir
una frase que quiero que la gente se lleve grabada en la frente al
salir de mi charla".&lt;/p&gt;
&lt;p&gt;Luego de mi viaje, nos juntamos una vez por semana aproximadamente
durante un mes y medio. Tuvimos al rededor de 5 o 6 encuentros, no
recuerdo bien. En esas juntadas hablé con él desde el día -30 del
proyecto (antes que inicie y más allá) hasta el día de &lt;em&gt;hoy&lt;/em&gt; que
estaba sentado ahí con él. Fue una experiencia muy enriquecedora y me
hizo ver un poco quién era, qué había hecho y le dio mucho sentido al
encuentro con él y &lt;em&gt;estar sentado ahí&lt;/em&gt; hablando de esto. Fue un repaso
completísimo de todos los éxitos y fracasos durante los últimos 3
años, pero con lujo de detalles. Nando quería saberlo todo, y eso fue
muy nutritivo para mí.&lt;/p&gt;
&lt;p&gt;Uno de los días que nos juntamos, ya casi llegando al final de
nuestros encuentros, llegué preocupado, angustiado, triste... no sabía
muy bien lo que me pasaba, pero había algo en mí que no estaba
bien. Hablamos un poco de eso y...&lt;/p&gt;
&lt;blockquote class="epigraph"&gt;
&lt;p&gt;Cumpliste tu sueño. Lo superaste. Llegaste más lejos de lo que alguna
vez habías imaginado y ahora estás un poco perdido. Necesitás un
nuevo desafío.&lt;/p&gt;
&lt;p class="attribution"&gt;—Nando&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Luego de escuchar eso, me quedé helado. Tenía razón. Cuando entré a
Python Argentina soñé dar una charla en un PyDay (de la misma forma
que conocí Python) y lo cumplí. Luego estaba dando tres charlas en la
primera PyCon Argentina en 2009. Soñé con llevar Python a cada rincón
del país, y lo cumplí con &lt;a class="reference external" href="https://argentinaenpython.com/"&gt;Argentina en Python&lt;/a&gt;. Y no solo eso, sino
que lo llevé adelante en otros países... Ni siquiera había soñado dar
una charla en una PyCon de otro país, y lo cumplí en Santo Domingo.&lt;/p&gt;
&lt;p&gt;Estaba en un momento de mucha adrenalina, pero de tristeza
también. Pensaba que en pocos días iba a estar en España cumpliendo un
sueño que ni siquiera había soñado pero que ya se estaba haciendo
realidad.&lt;/p&gt;
&lt;p&gt;"¿Y luego qué?" -me preguntaba a mí mismo.&lt;/p&gt;
&lt;p&gt;Viajé a España, conocí gente maravillosa, di mi charla en PyCon España
y me encantó ese momento. Aún me cuesta creer que todo salió demasiado
bien, y no sólo eso, sino que me sentí bien arriba del escenario.&lt;/p&gt;
&lt;p&gt;Hoy estoy nuevamente en Cuenca, Ecuador pensando en todo lo que me ha
pasado y me doy cuenta que Nando tenía mucha razón. Perdí el
norte. Cumplí muchos sueños personales y todo ha pasado muy rápido, a
tal punto que a veces siento que ni siquiera tuve tiempo de
disfrutarlos.&lt;/p&gt;
&lt;p&gt;Hoy estoy más avocado a descansar en Cuenca. A tomarme un tiempo para
pensar. Enfocado en el trabajo (quiero ser un mejor profesional). Sin
embargo, tengo muchas ganas de seguir trabajando en formar un
comunidad aquí en Ecuador -aunque me estoy tropezando más de lo que me
gustaría.&lt;/p&gt;
&lt;p&gt;Aunque por otro lado, el no tener en mente nada increíblemente loco
por cumplir en el futuro me hace sentirme estancado y no dejo de
preguntarme:&lt;/p&gt;
&lt;blockquote class="epigraph"&gt;
¿Cuál será ese &lt;em&gt;nuevo desafío&lt;/em&gt; que está por venir?&lt;/blockquote&gt;
&lt;!-- File to be included at the final of every post to share all the
links and do not have to write them again every time.

You can include them using this sintax:

.. include:: links.rst

Note: this file should be places in the same directory than
"conf.py" --&gt;
&lt;!-- Twitter accounts --&gt;
&lt;!-- Software --&gt;
&lt;!-- Blogs --&gt;
&lt;!-- PEP --&gt;&lt;/div&gt;</description><category>argentina en python</category><category>cuenca</category><category>ecuador</category><category>españa</category><category>pycones</category><category>python</category><category>viajes</category><guid>https://elblogdehumitos.com/posts/no-cumplas-tu-sueno-es-una-trampa/</guid><pubDate>Sun, 06 Nov 2016 17:48:07 GMT</pubDate></item><item><title>Creatividad: uno de los beneficios del tercer mundo</title><link>https://elblogdehumitos.com/posts/creatividad-uno-de-los-beneficios-del-tercer-mundo/</link><dc:creator>Manuel Kaufmann</dc:creator><description>&lt;div&gt;&lt;p&gt;De niño quería ser "inventor", pero cuando me preguntaron "¿qué querés
estudiar después de la secundaria?" contesté con una contrapregunta:
"¿existe la carrera de inventor?". Luego de una respuesta muy corta,
"No", mi sueño se derrumbó.&lt;/p&gt;
&lt;p&gt;Al final de cuenta, pasaron más de 30 años y por una cosa o la otra,
"no soy nada". Ah, ¡y me encanta!&lt;/p&gt;
&lt;p&gt;Hace unos 7 u 8 meses que estamos viviendo en Cuenca, Ecuador y hemos
estado teniendo algunos problemas de salud. Si bien no son nada grave,
son molestos y claro, no es bueno. Luego hacer algunas pruebas y
experimentos, tenemos nuestros primeros indicios de que el agua de
esta ciudad no nos cae bien y finalmente llegamos a hacer el
experimento que mejor ha funcionado (aunque pasaron varias cosas en el
medio): empezamos a comprar bidones de 20 litros de agua.&lt;/p&gt;
&lt;p&gt;Esta &lt;em&gt;técnica ancestral&lt;/em&gt; ya la veníamos practicando en Bolivia y en
Perú ya que ni siquiera la misma gente de las diferentes ciudades
donde parábamos bebían el agua de la canilla. ¿Qué pasa aquí en Cuenca
con estos bidones? ¡No traen piquito dispenser como en Bolivia y Perú!
Por lo tanto, se necesita un soporte sí o sí (o bien, levantar cerca
de 20kg cada vez que te querés servir un vaso).&lt;/p&gt;
&lt;p&gt;¿El problema? ¡El precio! Incluso &lt;em&gt;antes&lt;/em&gt; de comprar el bidón ya
habíamos visto en el supermercado que el precio de estos dispenser
ronda entre los USD ~15 (los que son solo un soporte con pico) y los
USD ~150 (los que se dispensan agua fría y caliente). Vamos,
cualquiera de los dos extremos me parecían caros. Los más baratos
tiene un recipiente de porcelana (como un balde) y un pico: ¡nada más!&lt;/p&gt;
&lt;div class="figure"&gt;
&lt;a class="reference external image-reference" href="https://elblogdehumitos.com/posts/creatividad-uno-de-los-beneficios-del-tercer-mundo/IMG_20161105_183845.jpg"&gt;&lt;img alt="IMG_20161105_183845.thumbnail.jpg" src="https://elblogdehumitos.com/posts/creatividad-uno-de-los-beneficios-del-tercer-mundo/IMG_20161105_183845.thumbnail.jpg"&gt;&lt;/a&gt;
&lt;p class="caption"&gt;Soporte con base de porcelana y pico: USD 17.50&lt;/p&gt;
&lt;/div&gt;
&lt;!-- TEASER_END --&gt;
&lt;p&gt;Para nuestra suerte, luego de un tiempo encontramos otro modelo. Uno
revolucionario. Uno que usa años de estudios en el campo de la física
para generar presión dentro del bidón y así hacer subir el agua que se
encuentra dentro y dispensarla por un pico:&lt;/p&gt;
&lt;div class="figure"&gt;
&lt;a class="reference external image-reference" href="https://elblogdehumitos.com/posts/creatividad-uno-de-los-beneficios-del-tercer-mundo/IMG_20161105_195701.jpg"&gt;&lt;img alt="IMG_20161105_195701.thumbnail.jpg" src="https://elblogdehumitos.com/posts/creatividad-uno-de-los-beneficios-del-tercer-mundo/IMG_20161105_195701.thumbnail.jpg"&gt;&lt;/a&gt;
&lt;p class="caption"&gt;Bomba dispenser para bidón: USD 3.47&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;El precio lo dice todo: tenés que matarte bombeando para obtener medio
vaso de agua. Y lo peor, a medida que el bidón está cada vez más
vacío, más tenés que bombear porque necesita más presión.&lt;/p&gt;
&lt;p&gt;La verdad es que con este de 3 dólares y pico, me clavé. Cuando me lo
compré estaba re entusiasmado porque me parecía una buena idea, simple
y que ajustable a la mayoría de picos que andan dando vueltas en el
mercado. Una pena que me haya defraudado.&lt;/p&gt;
&lt;p&gt;Por otro lado, una de las cosas que me gusta de Ecuador es que se
encuentran repuestos para &lt;em&gt;casi cualquier cosa&lt;/em&gt;. ¿Te acordás como era
la Argentina hace mucho tiempo que vos le pedías el "cuchufluco del
goyete que va en el goyetómetro" al tipo de la ferretería y lo tenía?
¡Así! Bueno, en el supermercado vimos que venden por separado los
picos de esos soporte de porcelana de USD 17 (que por cierto, son los
mismos repuestos para las licuadoras con dispenser) y... ¿sabés cuánto
sale?: USD 0.53&lt;/p&gt;
&lt;p&gt;A ver, tenemos la pieza más complicada de conseguir (para mí): el pico
dispenser. Ahora, ¿qué nos falta?. "¿Y si probamos comprar esto y
ponemos el bidón dentro del balde?" -le pregunto a Johanna, que me
mira con una cara de "sos un mugriento". Lo cazo al vuelo, y le digo:
"Bueh, pero compramos uno nuevo &amp;lt;guiño&amp;gt; &amp;lt;guiño&amp;gt;".&lt;/p&gt;
&lt;p&gt;Damos unas vueltas más en el supermercado y vamos a la sección de
plásticos y &lt;em&gt;voilá&lt;/em&gt;. Vemos un hermoso recipiente similar a un cilindro
a unos hermosos USD 2.51. Unos resistentes 30cm de altura, en forma de
cónica, naranja, delicioso... Un tacho de basura de oficina: un
papelero.&lt;/p&gt;
&lt;p&gt;"Estos son los mejores momentos de la vida para mí" -le digo a
Johanna. "Prefiero comprar ambas piezas, probarlo y equivocarme; pero
al menos lo intenté. ¡Vamos a comprarlo y lo hacemos!"&lt;/p&gt;
&lt;p&gt;Volvimos al sector de los dispensers de porcelana, analizamos la
situación, miramos atentamente cómo era la estructura y &lt;em&gt;cómo
funcionaban&lt;/em&gt;. Tiramos unas ideas sobre si "nuestro invento" iba a
funcionar, hablamos de la presión, de los límites de la gravedad, del
fú y el fá -la gente nos miraba raro- y dijimos: "sí, no hay forma de
que falle".&lt;/p&gt;
&lt;div class="figure"&gt;
&lt;a class="reference external image-reference" href="https://elblogdehumitos.com/posts/creatividad-uno-de-los-beneficios-del-tercer-mundo/IMG_20161105_191514.jpg"&gt;&lt;img alt="IMG_20161105_191514.thumbnail.jpg" src="https://elblogdehumitos.com/posts/creatividad-uno-de-los-beneficios-del-tercer-mundo/IMG_20161105_191514.thumbnail.jpg" style="height: 429px;"&gt;&lt;/a&gt;
&lt;p class="caption"&gt;Basurero y pico dispenser: USD 2.51 + USD 0.53&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Exitados por el hecho, volvemos a casa y nos ponemos manos a la obra.&lt;/p&gt;

&lt;div class="fotorama" data-nav="thumbs" data-ratio="16/9" data-keyboard="true" data-thumbwidth="150" data-thumbheight="150" data-allowfullscreen="native"&gt;
    &lt;a href="https://elblogdehumitos.com/posts/creatividad-uno-de-los-beneficios-del-tercer-mundo/IMG_20161105_191720.jpg"&gt;&lt;img src="https://elblogdehumitos.com/posts/creatividad-uno-de-los-beneficios-del-tercer-mundo/IMG_20161105_191720.thumbnail.jpg"&gt;&lt;/a&gt;
    &lt;a href="https://elblogdehumitos.com/posts/creatividad-uno-de-los-beneficios-del-tercer-mundo/IMG_20161105_191750.jpg"&gt;&lt;img src="https://elblogdehumitos.com/posts/creatividad-uno-de-los-beneficios-del-tercer-mundo/IMG_20161105_191750.thumbnail.jpg"&gt;&lt;/a&gt;
    &lt;a href="https://elblogdehumitos.com/posts/creatividad-uno-de-los-beneficios-del-tercer-mundo/IMG_20161105_193320.jpg"&gt;&lt;img src="https://elblogdehumitos.com/posts/creatividad-uno-de-los-beneficios-del-tercer-mundo/IMG_20161105_193320.thumbnail.jpg"&gt;&lt;/a&gt;
    &lt;a href="https://elblogdehumitos.com/posts/creatividad-uno-de-los-beneficios-del-tercer-mundo/IMG_20161105_193727.jpg"&gt;&lt;img src="https://elblogdehumitos.com/posts/creatividad-uno-de-los-beneficios-del-tercer-mundo/IMG_20161105_193727.thumbnail.jpg"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Y con ustedes, señoritas y señoritos, el primer dispenser que lleva
nuestro nombre:&lt;/p&gt;
&lt;div class="figure"&gt;
&lt;a class="reference external image-reference" href="https://elblogdehumitos.com/posts/creatividad-uno-de-los-beneficios-del-tercer-mundo/IMG_20161105_195823.jpg"&gt;&lt;img alt="IMG_20161105_195823.thumbnail.jpg" src="https://elblogdehumitos.com/posts/creatividad-uno-de-los-beneficios-del-tercer-mundo/IMG_20161105_195823.thumbnail.jpg"&gt;&lt;/a&gt;
&lt;p class="caption"&gt;El resultado final, funcionado en perfectas condiciones.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Estamos pensando en montar un negocio, si existe "El Rey de la Goma",
¿porqué no "Dispenser el Rey del Humo"? ...&lt;/p&gt;&lt;/div&gt;</description><category>agua</category><category>artefacto</category><category>basurero</category><category>cuenca</category><category>ecuador</category><guid>https://elblogdehumitos.com/posts/creatividad-uno-de-los-beneficios-del-tercer-mundo/</guid><pubDate>Sun, 06 Nov 2016 00:54:44 GMT</pubDate></item><item><title>¡No más Ads en Spotify!</title><link>https://elblogdehumitos.com/posts/no-mas-ads-en-spotify/</link><dc:creator>Manuel Kaufmann</dc:creator><description>&lt;div&gt;&lt;p&gt;En Febrero probé Spotify en mi máquina por primera vez. No entré en
Premium ni nada, simplemente me creé un usuario como buen hijo de
vecino y empecé a ver qué era eso de lo que la gente tanto
hablaba. Busqué mis discos favoritos y empecé a utilizarlo de la misma
forma que lo hacía con mi música offline.&lt;/p&gt;
&lt;p&gt;Un mes después: nada del otro mundo. Simplemente abría el cliente de
Linux, seleccionaba algún disco de los que tenía guardado y lo
reproducía de forma completa. Sin embargo, tenía una desventaja con
respecto a la música offline que yo tenía en mi computadora: ¡las
publicidades!. Cada 3 o 4 canciones del disco que estaba escuchando,
me aparecía una publicidad que &lt;em&gt;nada que ver&lt;/em&gt; con lo que a mi me puede
gustar. Probapagandas de telefonías, recitales de reggaetón y demás
cosas que &lt;em&gt;teniendo mis gustos musicales&lt;/em&gt; en su base de datos, no
tenían ningún sentido hacerme escuchar eso a mí.&lt;/p&gt;
&lt;p&gt;Durante unos días pensé que podría pagar para quitar esos
anuncios. Investigué un poco y vi que pagando, además de quitar los
anuncios te dejaban tener música offline y también más opciones para
la aplicación del celular. Ninguna de las cosas &lt;em&gt;extras&lt;/em&gt; me llamaron
la atención.&lt;/p&gt;
&lt;p&gt;A la semana siguiente, me cansé de escuchar esa basura y sin pensarlo
me fui a comprar el servicio Premium. Intenté usar PayPal y tuve un
problema. Itenté de nuevo unas horas más tarde y lo mismo. Pensé un
rato... pero nada vino a mi mente.&lt;/p&gt;
&lt;p&gt;Pasaron algunos días, y cada vez que salía una publicidad pensaba en
algo. Me tomaba esos 30 segundos de cada publicidad para encontrar una
solución...&lt;/p&gt;
&lt;blockquote&gt;
El 5 de Abril tuve una idea: quería &lt;em&gt;realmente&lt;/em&gt; quitar los
anuncios, pero ahora &lt;em&gt;sin pagar&lt;/em&gt; ya que por ese camino no había
tenido suerte y no iba a parar hasta lograrlo. Estaba decidido.&lt;/blockquote&gt;
&lt;p&gt;Hice un &lt;em&gt;brainstorming solo&lt;/em&gt; y llegué a &lt;a class="reference external" href="http://audiodiff.readthedocs.org/"&gt;audiodiff&lt;/a&gt;, una librería en
Python para comparar archivos de audio. La idea parecía ser simple al
principio: escuchar lo que viene de Spotify y cada vez que se detecte
un silencio (el que hay entre tema y tema -o tema y anuncio) comparar
a máxima velocidad lo que empieza a reproducirse con todos los
anuncios que previamente había guardado en disco. Ese día &lt;a class="reference external" href="https://twitter.com/reydelhumo/status/717459145205612544"&gt;le escribí
un tuit a fisa&lt;/a&gt; porque
pensé que le podría interesar.&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;p&gt;Mucho tiempo después, a fines de Agosto, hice mis primeras pruebas con
esta librería. Si bien es extremadamente fácil de usar, es
increíblemente lenta. Además, solo trabaja sobre archivos y no
encontré la forma de pasarle un streaming directamente. Entonces,
pensé que podría crear un buffer de unos 45 segundos e ir trabajando
sobre eso, cortar los audios, analizarlos, ver qué tienen y decidir si
reproducirlo o no dependiendo de si es una publicidad. Tiré un par de
horas ahí y no llegué a nada útil.&lt;/p&gt;
&lt;p&gt;Daba vueltas y pensaba opciones. Pensé en ver si yo podría ser capaz
de escribir algo más rápido que &lt;cite&gt;audiodiff&lt;/cite&gt; utilizando &lt;a class="reference external" href="http://www.numpy.org/"&gt;numpy&lt;/a&gt; quizás,
y de paso era una buena excusa para aprenderlo...&lt;/p&gt;
&lt;p&gt;En esos días &lt;em&gt;me dí cuenta&lt;/em&gt; que cada vez que el cliente de Spotify de
Linux cambiaba de tema, utilizaba el nombre de esa canción/artista
como título de la ventana del programa, y que además también lo hacía
para los anuncios. &lt;em&gt;¡Voilá!, acá está la papa&lt;/em&gt; -me dije.&lt;/p&gt;
&lt;blockquote&gt;
Voy a comprobar el título de la ventana cada segundo, analizarlo y
compararlo contra los artistas que escucho normalmente y si no
está dentro mi lista: ¡silencio!&lt;/blockquote&gt;
&lt;p&gt;La idea era excelentemente simple. Simple de verdad, no como la
primera. Me puse manos a la obra, y en menos de 30 minutos tenía el
primer prototipo y funcionaba para la mayoría de los casos. Durante
las primeras horas de prueba encontré algunos patrones en los nombres
de las publicidades y también de las canciones que escuchaba.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;muchas publicidades están TODAS EN MAYÚSCULAS&lt;/li&gt;
&lt;li&gt;otras tantas tienen una sola palabra&lt;/li&gt;
&lt;li&gt;la mayoría de las canciones se muestran como "Artista - Canción"&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Implementé estas pequeñas reglas y retoqué un poco lo que había hecho
anteriormente y llegué a una versión muy estable y que funciona en el
95% de los casos. ¿Porqué en un 95%? Esto es debido a que hay discos
en vivo o de múltiples artistas donde la última regla de las
anteriores no se cumple. Por ejemplo, "Soda Stereo - Persiana
Americana - Gira Me Verás Volver".&lt;/p&gt;
&lt;p&gt;A raíz de esto creé:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;una lista blanca con los artistas que &lt;em&gt;siempre&lt;/em&gt; quiero escuchar&lt;/li&gt;
&lt;li&gt;una lista negra con algunos nombres de publicidades que no cumplen
las reglas básicas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El resultado de esto es este pequeño programa escrito en Python
(&lt;a class="reference external" href="https://gist.github.com/humitos/bfc241857b1f87576ca6355ab7653ad0"&gt;spotify-noads.py&lt;/a&gt;)
que no hace ni más ni menos que eso que mencioné antes: si detecta una
publicidad, pone mute en tu sistema de audio, cuando termina la
publicidad y empieza una canción, lo quita.&lt;/p&gt;
&lt;p&gt;Luego de las primeras horas de probarlo, lo quise dar a conocer y
escuchar algunas opiniones. Para eso, &lt;a class="reference external" href="https://twitter.com/reydelhumo/status/775374606400122883"&gt;publiqué este tuit&lt;/a&gt; y recibí
diferentes opiniones. Algunos a favor, otros en contra, otros que
primero estaban a favor y luego se dieron cuenta que "le estamos
cagando el modelo de negocio a Spotify" y demás.&lt;/p&gt;
&lt;p&gt;Personalmente, tengo opiniones encontradas. No estoy cien por ciento
seguro de estar de un lado o del otro. Algunos pensamientos:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;hemos descargado música utilizando torrent y p2p anteriormente&lt;/li&gt;
&lt;li&gt;hemos rippeado cd's de nuestros amigos&lt;/li&gt;
&lt;li&gt;si las publicidades tuvieran algo que ver conmigo...&lt;/li&gt;
&lt;li&gt;utilizamos bloqueadores de ads en las webs&lt;/li&gt;
&lt;li&gt;escuchar heavy metal y que salte un reggaeton, nah&lt;/li&gt;
&lt;li&gt;pagar por múltiples características cuando necesitás/querés solo una&lt;/li&gt;
&lt;li&gt;frente a un TV ponemos mute cuando viene la publicidad&lt;/li&gt;
&lt;li&gt;la publicidad para Spotify se sigue mostrando/escuchando&lt;/li&gt;
&lt;li&gt;de esta forma Spotify me sigue poniendo publicidades visuales en mi cliente &lt;a class="footnote-reference" href="https://elblogdehumitos.com/posts/no-mas-ads-en-spotify/#footnote-1" id="footnote-reference-1"&gt;[1]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Además de dar a conocer este pequeño script, me gustaría que utilicen
los comentarios de este post para mostrar su postura (en contra o a
favor) sobre esta metodología y expliquen sus razones.&lt;/p&gt;
&lt;table class="docutils footnote" frame="void" id="footnote-1" rules="none"&gt;
&lt;colgroup&gt;&lt;col class="label"&gt;&lt;col&gt;&lt;/colgroup&gt;
&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td class="label"&gt;&lt;a class="fn-backref" href="https://elblogdehumitos.com/posts/no-mas-ads-en-spotify/#footnote-reference-1"&gt;[1]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;el helado en palito que venden acá en Ecuador es buenísimo ;)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;</description><category>ads</category><category>python</category><category>spotify</category><guid>https://elblogdehumitos.com/posts/no-mas-ads-en-spotify/</guid><pubDate>Sun, 30 Oct 2016 01:12:47 GMT</pubDate></item><item><title>¡pysenteishon está que arde!</title><link>https://elblogdehumitos.com/posts/pysenteishon-esta-que-arde/</link><dc:creator>Manuel Kaufmann</dc:creator><description>&lt;div&gt;&lt;p&gt;¡Hoy se liberó una nueva versión de &lt;em&gt;pysenteishon&lt;/em&gt; que agrega dos
características muy buenas!&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Opción para indicar que no queremos que el celular apague la
pantalla mientras estamos dando la conferencia. De esta forma, la
pantalla quedará siempre encendida y el teléfono no se bloqueará.&lt;/li&gt;
&lt;li&gt;Posibilidad de mostrar un pequeño Touchpad en el navegador que nos
permite mover el mouse en la computadora y poder hacer click.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="admonition admonition-nota"&gt;
&lt;p class="first admonition-title"&gt;Nota&lt;/p&gt;
&lt;p class="last"&gt;La opción de Touchpad no ha sido probada en MacOSX debido a que no
tenemos esa posibilidad. Por favor, si tienes un Mac y quieres
ayudarnos a investigar cómo se hace esto, estaremos encantados! :D&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;La nueva versión es la 1.1.0 y, como siempre, lo podés ejecutar con
&lt;cite&gt;fades&lt;/cite&gt; en una línea:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
fades -d pysenteishon -x pysenteishon
&lt;/pre&gt;
&lt;p&gt;¿Todavía no sabés qué vas a utilizar para pasar tus slides en la
próxima PyCon?&lt;/p&gt;&lt;/div&gt;</description><category>pysenteishon python x-ip</category><guid>https://elblogdehumitos.com/posts/pysenteishon-esta-que-arde/</guid><pubDate>Tue, 25 Oct 2016 01:01:11 GMT</pubDate></item><item><title>#PyConES16: El abrazo de Siro</title><link>https://elblogdehumitos.com/posts/pycones16-el-abrazo-de-siro/</link><dc:creator>Manuel Kaufmann</dc:creator><description>&lt;div&gt;&lt;p&gt;Pasaron los nervios. Quedó la alegría.&lt;/p&gt;
&lt;p&gt;A fines de Septiembre fuimos con Johanna a Madrid, España para
participar de la PyConES16 como &lt;a class="reference external" href="https://elblogdehumitos.com/posts/pycon-espana-alla-vamos/"&gt;habíamos adelantado
anteriormente&lt;/a&gt; y volvimos más contentos que
nunca en nuestras vidas. ¡Nos pasó de todo!&lt;/p&gt;
&lt;p&gt;Sabíamos que no iba a ser un viaje fácil de realizar debido a que
íbamos a tener que hacer muchos trámites para que a Johanna le
permitan la entrada sin complicaciones en la Unión Europea, todo iba a
ser muy costoso (por eso &lt;a class="reference external" href="http://argentinaenpython.com/donaciones/avanza-30-casilleros/"&gt;realizamos una campaña de donaciones&lt;/a&gt;), yo
nunca había utilizado mi pasaporte Italiano y además estábamos muy
nerviosos por la charla plenaria de cierre que estaba a cargo mío.&lt;/p&gt;
&lt;p&gt;Siempre nos gusta tomar algunos recaudos en estas situaciones, por eso
salimos un día antes de Cuenca hacia Guayaquil y ese mismo día fuimos
a retirar la carta de invitación que Juanlu nos había enviado. Luego
nos fuimos para el hotel y esperamos la hora de salida del primero de
los vuelos (el de Johanna). Vamos juntos a la madrugada y ya notamos
algo sospechoso al despachar su equipaje: su maleta la dejaron a un
costado sin darnos ninguna explicación. Vuelvo al hotel y ella se
queda esperando la salida de su vuelo.&lt;/p&gt;
&lt;p&gt;Una vez que llego al hotel y pasados algunos minutos recibo una
llamada de Johanna diciendo que la había llamado desde la oficina de
antinarcóticos, que la habían tratado re mal, le habían revisado
completamente todo su equipaje y que encima no le habían dejado volver
a ponerle el plástico. Estábamos un poco asustados en ese momento. Por
suerte, finalmente no pasó nada "más grave".&lt;/p&gt;
&lt;p&gt;Por la tarde, ese mismo día, voy nuevamente al aeropuerto para tomar
mi vuelo y otra vez al momento de despachar la maleta me la dejan a un
costado. Esta vez, pregunto porqué habían tomado esa decisión y me
dicen: "Porque es un bulto no convencional. Es decir, está envuelto en
film y no puedo ver qué es. No se entiende si es una maleta, un bolso
o qué. Son nuestras medidas de seguridad". Así que, me quedé esperando
que me llamen por el altoparlante para pasar a antinarcóticos, al
igual que Johanna, aunque eso finalmente nunca sucedió por suerte.&lt;/p&gt;
&lt;!-- TEASER_END --&gt;
&lt;p&gt;Sin embargo, un detalle. Al llegar a España noté que una caja de
preservativos que llevaba dentro de mi equipaje estaba perforada como
si fuese con un punzón o algo así. No me gustó eso, me hizo dar qué
pensar sobre qué hacen con las maletas de uno.&lt;/p&gt;
&lt;p&gt;Finalmente, todo lo que siguió fue viento en popa. Llegué a Madrid y
al momento de hacer migraciones presento mi pasaporte Italiano y el
señor me dice: "Bienvenido Manuel. Adelante". "¿Cómo? ¿No me va poner
el sellito ni nada?". Me sorprendió que no me hayan hecho &lt;em&gt;ningún&lt;/em&gt;
control. De hecho, puedo decir que al ingresar a la Unión Europea
tengo menos controles que para ingresar al país en el que nací. De no
creer.&lt;/p&gt;
&lt;p&gt;Voy caminando hacia la salida del aeropuerto y ahí ya los veo a
Johanna y a Juanlu que me estaban esperando. Me sentí casi como una
estrella de rock :)&lt;/p&gt;
&lt;p&gt;Inmediatamente fuimos a la casa de Juanlu en taxi y al momento de
llegar confirmamos que la mala onda de los taxistas es algo
internacional. Parece que hay una única academia a nivel
mundial. Igual, escuchar a dos españoles discutir &lt;em&gt;zeziando&lt;/em&gt; fue muy
gracioso; así que a mi modo de ver la situación, no me pareció tan
mal.&lt;/p&gt;
&lt;p&gt;Tiramos todas los bultos en la casa y nos fuimos a pasear por
diferentes lugares de Madrid, sacamos algunas fotos y hablamos a más
no poder con Jualu (era algo que nos debíamos luego de aquella SciPyLA
2015). Escuchamos muchos acentos en la calle, muchos idiomas, muchas
formas de vestirse, mucha gente diferente, mucho de todo pero sin que
eso nos estorbe. Nos sentimos muy bien y ya nos empezábamos a dar
cuenta que Madrid podría ser una ciudad en la que nos guste vivir en
algún momento.&lt;/p&gt;
&lt;p&gt;Los días pasaron, empezamos a conocer a los amigos del círculo cercano
de Juanlu los que pasaron a ser nuestros amigos
inmediatamente. Paseamos por diferentes lugares con Johanna y
aprovechamos que los precios de muchas cosas son extremadamente más
bajos que en Ecuador para realizar algunas compras y chequeos médicos.&lt;/p&gt;
&lt;p&gt;El día de la PyConES16 se acercaba y los nervios aumentaban, pero sin
embargo no encontraba el lugar adecuado para sentarme en la máquina a
terminar las 5 slides que me quedaban pendientes: algunas fotos
puntuales y tipografías. Le pedí ayuda a Johanna con eso ya llegando
al día anterior de la partida hacia Almería. Terminé eso, pero claro,
todavía me faltaba hacer una pequeña práctica ya que tenías más de 120
diapositivas y estaba muy preocupado por el tiempo -aunque por otro
lado pensaba: "Pero... muchas de estas duran menos de 5
segundos. Debería estar bien".&lt;/p&gt;
&lt;p&gt;Llegó el día del viaje para Almería. Nosotros habíamos coordinado para
ir con Carla en su auto (a quien habíamos conocido una o dos noches
antes y ya nos parecía una genia) y también con Ángeles (a quién
pasamos a buscar por Jaén a mitad de camino). Para encontrarnos con
Carla nos tomamos un tren, y para llegar a la estación de trenes
utilizamos MyTaxi. Al subirnos al tren, a esto de las 5 de la mañana,
ya empecé a pensar que MyTaxi no existe en Ecuador, y que además el
servicio de transporte público (bus) a las 18hs deja de pasar por mi
barrio. Con Johanna íbamos anotando porotos para Madrid.&lt;/p&gt;
&lt;p&gt;Nos encontramos con Carla en las afueras de Madrid y nos subimos todos
al auto. 5 horas por delante nos esperaban en la ruta. Nosotros súper
contentos porque íbamos a poder ir viendo el paisaje y conocer un poco
más la geografía de España. Además, ¡manejaba otro! En el viaje
hablamos de un montón de cosas, me encantó ser parte de esas charlas y
también poder dormir un rato en las que no entendía :D&lt;/p&gt;
&lt;p&gt;Durante el viaje, y pensando en la semana que habíamos vivido en
Madrid, ya empezamos a notar algunos de los problemas del primer mundo
que nos parecían muy graciosos: el tacho de basura de la calle está
lleno de basura, hay un bache/pozo en una ruta de 400Km de longitud,
algunos no ponen guiño/direccionales para cambiarse de carril, etc. Y
sí, a nosotros nos daba risa, pero cuando eso es lo único que conocés
o incluso peor, conocés otros lugares donde las cosas funcionan mejor,
tiene mucho sentido quejarse. Hablamos bastante de esto con los
chicos. Estuvo bueno.&lt;/p&gt;
&lt;p&gt;Llegamos a Almería y nos fuimos derecho para el departamento que
habíamos alquilado. La PyConES se acercaba y en mi cabeza lo único que
había era la preocupación de no haber podido practicar la
charla. Además, seguía pensando "¿Qué le voy a ir a decir yo a esta
gente? ¿Para qué me invitaron? ¿Para qué dije que sí?". Las horas
pasaban y los nervios aumentaban.&lt;/p&gt;
&lt;p&gt;Al día siguiente de llegar a Almería nos vamos bien temprano para la
Universidad ya que Carla iba a participar del taller de Django Girls y
Johanna y yo íbamos a ser mentores. Teníamos muchas expectativas para
ver cómo era un workshop organizado por otras personas (nunca habíamos
ido a un taller que no sea organizado por nosotros). En términos
generales, me parece que estuvo muy bien organizado y gestionado el
taller. Creo que fue muy humano. Yo participé como meta-guía y me
estuve paseando por todas las mesas ayudando a los diferentes guías a
resolver los problemas a los cuales no le encontraban
solución. También estuve charlando con los organizadores y las
participantes en los tiempos muertos. Personalmente, lo disfruté mucho
y estuve muy relajado al no formar parte de la organización :)&lt;/p&gt;
&lt;p&gt;¡Empezó la PyConES16! Había un track entero con una orientación más
científica (¡genial esa idea!) y otros dos tracks más de Python en
general. Yo estuve paseando por los tres tracks y viendo un poco de
todo. Algunas charlas me dejaron mucho, otras nada, otras no me
gustaron directamente. Había de todo y para todos los gustos. Como
para que te des una idea, hasta hubo un tipo regaló "plátanos/bananas"
en su charla.&lt;/p&gt;
&lt;p&gt;Llegando al final del primer día, yo seguía sin haber encontrado un
tiempo para practicar mi charla, pero ya me había anotado para dar una
Ligtning Talk sobre "fades + pysenteishon". Llegó el momento del
éxito. Ahí estábamos sentados con Johanna en el escenario principal
junto a otros disertantes más (un punto llamativo: Johanna fue la
única mujer en dar una LT). Empieza la primera y quedamos impactados
de lo bien preparada que estaba. La segunda, ¡también!. La tercera,
¡increíble!. Todos los slides perfectos, los tiempos justos, las
palabras adecuadas. Incluso puedo decir que esas LT tenían mucha más
preparación que algunas charlas que habíamos visto durante el
día. Nosotros, con Johanna, nos mirábamos y ya teníamos vergüenza de
estar sentados ahí -incluso sin haber hecho nada todavía.&lt;/p&gt;
&lt;p&gt;Llega mi turno. Yo simplemente tenía que hacer 3 o 4 preguntas sobre
virtualenv, explicar un poco para qué servía, como había evolucionado
con virtualenvwrapper y finalmente mostrar fades utilizando
pysenteishon como ejemplo y "de paso" cambiar los slides con el
celular. Era súper simple. Pero claro, siempre y cuando mi máquina se
digne a clonar la pantalla hacia el proyecto. Lamentablemente, como
eso no sucedió y tuve que "extender a derecha", luego de hacer las
preguntas e intentar tipear algo en la máquina salió todo mal, el
tiempo corría y yo no daba a las teclas adecuadas mientras quebraba el
cuello para mirar la proyección. La gente empezó a aplaudir y yo
seguía intentando descifrar como escribir "-d" en la terminal. Fue un
fiasco mi LT.&lt;/p&gt;
&lt;p&gt;Inmediatamente después de mí, siguió Johanna. Empezó a hablar de la
comunidad de Python Argentina, dar a conocer la PyConAR 2016 y otras
cosas más. No sé muy bien cómo fue la situación, pero a los 2 minutos
aproximadamente dijo algo que hizo emocionar a la gente que la empezó
a aplaudir, ella también se emocionó, se puso nerviosa y se fue del
escenario sin más. Le quedaron varias cosas por decir y 3 minutos de
sobre :P&lt;/p&gt;
&lt;p&gt;Luego del cierre del primer día nos fuimos a cenar todos en
grupo. Estuvo buenísimo, hablé con mucha gente y me hice amigo de
algunos casi tan locos como nosotros. Había mucha gente interesante en
la conferencia. A mí me gustó particularmente que se organice un track
científico ya que hizo que asista mucha gente que "nada que ver con la
programación" por decirlo de alguna forma. Entonces, había una buena
diversidad de opiniones, puntos de vista y mucho para discutir.&lt;/p&gt;
&lt;p&gt;Llegó el Día. Domingo. Tenía que dar la charla plenaria de cierre. Sí,
yo. Aún no lo podía creer. Además, seguía sin haber practicado ni
siquiera 3 minutos mi charla. Misteriosamente, no estaba
nervioso. Aunque tampoco estaba tranquilo, digamos.&lt;/p&gt;
&lt;p&gt;Vamos a la conferencia, me paseo entre todos los tracks. Otra vez,
algunas charlas muy interesantes y otras no tanto. Sin embargo, cada
vez que hablaba con Johanna me decía que había visto cosas muy
interesantes en el track científico. Eso me ponía contento porque
muchas de esas charlas yo no estaba a la altura para poder evaluarlas.&lt;/p&gt;
&lt;p&gt;En uno de esos encuentros con Johanna pactamos un horario para hacer
una pequeña prueba de lo que iba a ser mi charla dentro de unas
horas. Sí, para este momento ya tenía el PDF listo y estaba seguro del
contenido, pero nunca lo había practicado y cada vez que miraba los
más de 120 slides temblaba...&lt;/p&gt;
&lt;p&gt;Luego del almuerzo, la practicamos y tuvimos decenas de interrupciones
en el lugar que elegimos para hacerlo. A tal punto que decidimos
alejarnos lo más que pudimos y volver a empezar. Así y todo seguíamos
con interrupciones de gente que estaba por el lugar y demás. Entre
miedo, bronca y nervios yo ya estaba de mal humor a esa altura. No
estaba pudiendo meterme de lleno en la charla, aunque por otro lado
tenía en la cabeza todo lo que quería decir.&lt;/p&gt;
&lt;p&gt;¡Llegó el momento! Me subo al escenario y configuro todo. Miro el
proyector y dice: "Argentina en Python", una foto de una vía y yo con
un perro. Me miro. Estoy en el escenario, estoy en el
proyector... "¡Mierda. Es mi charla. Vamos a ponerle todas las pilas!"
Me presentan y... ¡vamos al ataque!&lt;/p&gt;
&lt;blockquote class="epigraph"&gt;
&lt;p&gt;Como ultimamente he estado viajando mucho, siempre estoy preparado
para emprender un nuevo viaje. Es por eso que hoy vine con mi maleta y
la voy a ubicar por aquí&lt;/p&gt;
&lt;p class="attribution"&gt;—dije mientras salía de atrás del telón&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Como siempre en mis charlas, utilicé pysenteishon, pero esta vez lo
había configurado para que la pantalla dure encendida 5 minutos, así
no tenía el problema de que se me bloqueaba mientras quería pasar los
slides.&lt;/p&gt;
&lt;p&gt;Durante la charla estuve relajado. Empecé bien y siguió bien. Estaba
tranquilo. Estaba seguro. Los pocos chistes que iba haciendo
funcionaban. Eso me daba más seguridad. No lloré; y eso me ayudó mucho
a seguir con el ritmo adecuado y estar atento y concentrado. "Me
desnudé" en el escenario. Saqué todo desde lo más profundo de mí...&lt;/p&gt;
&lt;p&gt;... mientras tanto, el celular que estaba usando con pysenteishon no
dejaba de vibrar y no entendía muy bien lo que pasaba...&lt;/p&gt;
&lt;p&gt;Mientras contaba mi historia y me preguntaba, y les preguntaba, "¿Qué
catso hacía yo como Keynote Speaker en PyConES16?"; desde la mitad del
salón gritaron: "¡Te lo merecés!". Me quedé helado. La gente empezó a
aplaudir y mi &lt;em&gt;heladéz&lt;/em&gt; pasó desapercibida.&lt;/p&gt;
&lt;p&gt;Llegué al final de la charla y mi celular no había parado de vibrar ni
un segundo. Llegué muy emocionado pero pudiendo controlar las ganas de
llorar. No había terminado aún y yo ya estaba muy eufórico y contento
con lo que había estado viviendo durante este tiempo (que ya no sabía
hace cuánto que estaba ahí). Muestro la diapositiva que dice "Gracias"
y la mayoría de la gente explotó en un aplauso de pié. Otros
explotaron en el llanto (¡literal!). La emoción y la energía que había
en ese momento fue tan grande que yo estaba completamente desorientado
y no sabía que hacer. Recordé lo que Nando siempre me dijo: "Vos
siempre mantené la calma. Si la gente aplaude, no hables, no hagas
nada. Esperá que terminen". Y así fue, me quedé callado con lágrimas
en los ojos, mirando a la gente a la cara y escuchando esos aplausos
maravillosos. Nunca en la vida me había sentido igual.&lt;/p&gt;
&lt;p&gt;Saludo a Juanlu en el escenario y me voy a sentar en el primer lugar
que encuentro. No podía creer lo que acababa de suceder. No creía que
la persona que había estado en el escenario había sido yo. Todavía no
lo creo. Necesito ver el video de la charla para terminar de
convencerme. Miro el celular y tenía más de 100 notificaciones en
Twitter. Estaba atónito.&lt;/p&gt;
&lt;p&gt;Luego vino el cierre de la PyConES16, los sorteos y demás.&lt;/p&gt;
&lt;p&gt;Al momento de abandonar el auditorio se me acerca mucha gente, me
felicita, me pide por favor que siga adelante, me dice que fue muy
motivadora la charla, me dicen que quieren trabajar conmigo en un
proyecto similar en España, me ofrecen su ayuda para lo que necesite,
etc. Fue un momento hermoso, aunque yo no sabía que decir más que
"Gracias. Muchas gracias". Estaba como abombado, digamos.&lt;/p&gt;
&lt;p&gt;Mientras íbamos saliendo del auditorio camino al auto para emprender
nuestra vuelta a Madrid, empiezo a saludar a los amigos más cercanos
de Juanlu y despedirme: "hasta la próxima visita". Hay un momento de
esa despedida que tuvo mucha fuerza, mucha energía y que me va a
costar mucho olvidar: el abrazo de Siro.&lt;/p&gt;&lt;/div&gt;</description><category>argentina en python</category><category>comunidad</category><category>españa</category><category>pybonacci</category><category>python</category><category>viajes</category><guid>https://elblogdehumitos.com/posts/pycones16-el-abrazo-de-siro/</guid><pubDate>Sat, 22 Oct 2016 22:06:45 GMT</pubDate></item></channel></rss>