Juanjo Conti: Screensaver Ninja

Este año estuve programando algo totalmente distinto a todos los programas que hice en el pasado: una aplicación de escritorio para Mac OS X. En el camino tuve que aprender un nuevo lenguaje, Swift, y adaptarme al entorno de desarrollo XCode.

La semana pasada se publicó la versión 1.0 de Screensaver Ninja, un protector de pantalla que permite mostrar páginas web e ir rotándolas, customizarlas con JavaScript y CSS y mantener las sesiones que se inicien allí aisladas de la de los otros browsers de la computadora.

Screensaver Ninja

Estoy muy contento desarrollándolo. Tanto el equipo de trabajo como el ambiente es muy bueno.

Algunas fotos de Screensaver Ninja en acción.

Manuel Kaufmann (Humitos): Make your GPX anonymous

Sometimes I want to make my .gpx files anonymous because it's data that I recover by myself using OSMTracker for Android and I don't want the whole world knows when I was there.

Yeah, maybe I'm a bit crazy. Nice to meet you ;)

Today, I found [1] a real simple solution for this: xmlstarlet

Once you have it installed, you can excecute:

xmlstarlet ed \
   -P \
   -N x=http://www.topografix.com/GPX/1/1 \
   -u '//x:time' \
   -v 1970-01-01T00:00:00Z \
   input.gpx > output-nulltime.gpx

And what will put 1970-01-01T00:00:00Z on all the <time> tags.

That's all! Now, they are ready to be uploaded to the OSM community and nobody will know where you was there :)

[1] https://help.openstreetmap.org/questions/2130/gpx-file-no-time-tag

Manuel Kaufmann (Humitos): OSMTracker on the road

Mapear mientras vas en el auto está completamente prohibido. Si bien no hay ninguna ley que lo prohiba, es altamente peligroso. Pero claro, cuando vas con un acompañante todo es mucho más fácil: esa persona puede ir mapeando.

Hasta ahí, genial. Pero luego te das cuenta que está todo el tiempo presionando el botón de "Grabar Voz" y menciona todo lo que pasa a nuestro al rededor. También, cada tanto se equivoca, presiona otro botón sin querer y así se pierde de mapear algunas cosas. Además, todo el tiempo mira el celular y también lo acerca a la boca para hablarle y así que la grabación salga mejor.

¡Eso ya es cosa del pasado!

OSMTracker soporta crear nuestros propios layouts haciendo un pequeño archivo XML muy sencillo. Así que, me puse manos a la obra y me hice un layout que lo único que tiene es un botón que ocupa toda la pantalla y que es super accible para presionar: no hay otra cosa. Entonces, es simplemente hacer tap en la pantalla.

one-big-button.thumbnail.png

Mi propio layout de un solo botón

osmtracker-on-the-road/driving.xml

<layouts>

  <layout name="root">
    <row>
      <button type="voicerec" label="Grabar audio" icon="mic.png" iconpos="bottom" />
    </row>
  </layout>

</layouts>

Este archivo hay que copiarlo en la carpeta "layouts" (hay que crearla) dentro del directorio de "osmtracker" en el celular. Luego, hay que ir a las opciones de OSMTracker para activar este layout.

Además, si a eso le sumamos unos auriculares manos libres (esos que tienen micrófono) ya te queda perfecto. No solo no tiene que mirar más el celular, sino que tampoco lo tiene que acercar a la boca para hablarle

Manuel Kaufmann (Humitos): Edición OpenStreetMap offline

Durante mis viajes con Argentina en Python una de las cosas que me gusta hacer es colaborar con la comunidad de OpenStreetMap. Siento que esto es bastante útil ya que estoy todos los días en movimiento y visitando lugares que, en su mayoría, no está correctamente mapeados o falta información.

Sin embargo, en la mayoría de los casos, la cantidad de información que tiene los mapas de OpenStreetMap es la mejor que tenemos disponible hoy en día. Incluso, mejor que Google Maps. Como todo, no es perfecto y siempre encuentro algo que falta: en mayor o menor medida.

Utilizo mucho osmtracker para realizar mis trazas GPS y añadir puntos a estas trazas. Luego, las importo en JOSM, las corrijo, las adapto y las subo a OSM.

El problema

Uno de los problemas que tengo con esto es que siempre necesito estar OnLine para hacer mis ediciones ya que, primero, necesito bajar la zona del mapa en la que necesito laburar. Eso es algo que no tiene ningún problema en realidad, pero para mí sí lo es. Esto es porque muchas veces no tengo internet (ya que suelo estar en lugares donde no es tan accesible) y, cuando tengo internet, necesito hacer otras cosas.

Entonces, la mayoría de las veces que tengo tiempo disponible para colaborar con OpenStreetMap es cuando no tengo internet.

Hoy, en la Python Paraguay #1 Meetup aprendí a cortar los mapas de OSM en pedazos utilizando osmconvert y aproveché ese conocimiento que adquirí para resolver este problema.

La solución

Básicamente lo que hago es, cuando tengo internet:

  1. Bajo los mapas de Latino América del mirror geofabrik

    wget -c http://download.geofabrik.de/south-america-latest.osm.pbf
    
  2. Descargo el archivo .poly del país en el que me interesa trabajar utilizando esta web: http://polygons.openstreetmap.fr/


Cuando no tengo internet:

  1. Abro el archivo .poly con JOSM.

    visualizar-poly.thumbnail.jpg

    paraguay.poly abierto en JOSM

  2. Creo una capa nueva.

  3. Dibujo un cuadrado con la herramienta "Dibujar nodos (A)" cubriendo la zona en la que me interesa trabajar dentro de ese país.

    zona-a-trabajar.thumbnail.jpg

    Cuadrado dibujado para trabajar offline en esa zona

  4. Guardo esa capa como .poly

  5. Utilizo osmconvert para recortar el mapa de South America utilizando el archivo de polígonos que acabo de crear:

    ./osmconvert \
           south-america.osm.pbf \
           -B=paraguay.poly \
           --out-osm \
           -o=south-america-my_region.osm
    
  6. Abro el archivo south-america-my_region.osm desde el JOSM y trabajo offline con los GPX que guardé con osmtracker.

    zona-offline.thumbnail.jpg

    Zona para trabajar offline (recortada del archivo de mi pc -sin conexión)

  7. Una vez finalizado el trabajo, lo guardo.


Cuando vuelvo a tener internet:

  1. Abro con JOSM el archivo que guardé.
  2. Voy a Archivo -> Actualizar Datos (Control + U)
  3. Subo los datos de la capa que agregué yo

Los agradecimientos

Esto me permite trabajar cómodo desde cualquier lado y offline sin preocuparme si voy a tener internet o no cuando llegue a un lugar donde esté cómodo y pueda trabajar tranquilo escuchando música y tomando mates :)

Por favor, dejá un comentario con feedback sobre los pro- y cons- de esta forma de trabajo y otras alternativas en caso de que conozcas.

Gracias a @51114u9, a @proyectosbeta por el apoyo de siempre en todo lo referido a OpenStreetMap y a toda la comunidad de @PythonParaguay ya que esta idea salió en la Meetup de hoy ;)

Juanjo Conti: Tarta de frutilla

Este post lleva en borrador años. Cada vez que queremos hacer esta tarta o la torta bombón o la torta de merengue, tenemos que entrar a buscar la receta de la masa. Le doy publicar así me facilito el camino para la próxima.

Esta noche hicimos con Ceci tarta de frutilla. Es la primera vez que hacemos este postre y como armamos la receta sacando ideas de varios lados, la subimos al blog para poder buscarla la próxima vez (esta era la idea original evidentemente).

Ingredientes:

  • Para la masa
    • 100 g. de manteca
    • 100 g. de azúcar
    • 1 huevo
    • esencia de vainilla
    • 250 g. de harina
  • Para el relleno
    • 1 pote grande de crema de leche
    • 5 cucharadas soperas de azúcar
    • 1/2 kg. de frutillas en lo posible del mismo tamaño.
    • 1 sobre chico (4 porciones) de gelatina

Pasos previos:

  1. Lavar las frutillas y sacarles el cabito.
  2. Cortarlas al medio y colocarlas en un bol espolvoreadas con azúcar.
  3. Guardarlas en la heladera.

Preparación de la base:

  1. Enmantecar y enharinar una tartera (usamos una de 36 cm. de diámetro).
  2. Pisar la manteca (si no está a temperatura ambiente), incorporar el azúcar y batir.
  3. Agregar el huevo y una cucharadita de esencia de vainilla. Volver a batir.
  4. Incorporar el harina y mezclar con espátula.
  5. Armar un bollo de masa.
  6. Poner el bollo entre dos films.
  7. Estirar la masa con un palo de amasar hasta superar el diámetro de la tartera.
  8. Retirar el film de arriba y dar vuelta la masa sobre el molde.
  9. Acomodar los bordes y utilizar el palo de amasar para cortar los bordes sobrantes.
  10. Retirar el film.
  11. Pinchar toda la superficie con un tenedor y marcar los bordes.
  12. Dejar reposar en la heladera media hora.
  13. Prender el horno a fuego máximo. Cuando esté caliente, poner la tartera y dejarla entre 10 y 15 minutos.
  14. Va a estar lista cuando se haya dorado. Se puede probar clavándole un escarbadientes y verificando que salga limpio.
  15. Sacar la tartera y dejar enfriar.

Preparación de la crema chantilly:

  1. Batir un poco la crema para airearla.
  2. Agregar el azúcar.
  3. Seguir batiendo hasta lograr el punto.

Final:

  1. Cubrir la base con la crema chantilly.
  2. Distribuir prolijamente las frutillas sobre la crema. Hacerlo en forma concéntrica, de afuera hacia adentro.
  3. Preparar la gelatina según las instrucciones de la caja y ponerla en el freezer aproximadamente 5 minutos.
  4. Cuando tenga cuerpo revolver bien para que quede pareja y no se endurezca y distribuirla con una cuchara sobre la tarta.
  5. Llevar a heladera.

Facundo Batista: Releases por dos: Encuentro y fades


Estos últimos días se liberaron nuevas versiones de dos proyectos en los que estoy involucrado activamente.

A principio de mes lancé Encuentro 3.1 (como ya sabrán, este programa permite buscar, descargar y ver contenido del Canal Encuentro, Paka Paka, BACUA, Educ.ar y otros).

La versión 3.1 trae los siguientes cambios con respecto a la versión anterior:

  • Vuelve a funcionar luego de los cambios de backend de Encuentro y Conectate
  • Ahora con CTRL-F se va directamente al campo de filtro (gracias Emiliano)
  • Se rehizo el manejo de la lista de episodios: ahora verlos y filtrarlos es muchísimo más rápido
  • Mejoras en el empaquetado, debería funcionar para muchas (todas?) las versiones de Debian/Ubuntu (gracias Adrián Alves). 
  • Varias mejoras al encontrar nuevos episodios de los distintos backends, y correcciones en general. 

Más info y cómo descargarlo, instalarlo, etc, en la página oficial.

Por otro lado, ayer se lanzó fades 3 (un proyecto orientado a desarrolladores Python, en contraposición a Encuentro que está pensado para el usuario final), que desarrollamos principalmente Nico Demarchi y yo.

fades (en inglés: FAst DEpendencies for Scripts) es un sistema que maneja automáticamente los virtualenvs en los casos simples que uno normalmente encuentra al escribir scripts o programas pequeños.  Crea automáticamente un nuevo virtualenv (o reusa uno creado previamente) instalando las dependencias necesarias, y ejecutando el script dentro de ese virtualenv.

¿Qué hay de nuevo en esta release?

  • Podés usar diferentes versiones del intérprete: simplemente pasá --python=python2 o lo que te convenga.
  • Las dependencias pueden especificarse en la linea de comando: no hay necesidad de cambiar el script para una prueba rápida, simplemente especificá la dependencia necesaria con --dependency.
  • Modo interactivo: es la manera más rápida de probar una nueva biblioteca. Sólo hacé fades -d <dependencia> y te abrirá un intérprete interactivo dentro de un venv con esa dependencia.
  • Soporta tomar argumentos desde el shellbang. De esta manera podés crear un script y poner al principio del mismo algo como: #!/usr/bin/env fades -d <dependencia> --python=python2.7
  • Puede parsear requerimientos desde un archivo. No hay necesidad de ningún cambio si ya tenés un archivo requirements.txt: simplemente indicalo con --requirement.
  • Si no se especifica el repo, toma PyPI por defecto, lo que resulta en código más limpio y simple.
  • Tiene una base de datos integrada para conversiones típicas de nombres: de esta manera se puede marcar con fades un "import bs4" incluso si ese no es el nombre del paquete en PyPI.
  • Otros cambios y correcciones menores.

Toda la info, en la página de PyPI del proyecto.

Manuel Kaufmann (Humitos): Ciencia express en Isla Alta

Ya parece ser una moneda corriente, y cada vez estamos más atentos, pero sin embargo, el viaje no deja de sorprendernos una y otra vez cuando menos lo esperamos.

Llegamos a Isla Alta, Paraguarí, Paraguay a través de José de San Ignacio Guazú. Un chico que conocimos por la comunidad de CouchSurfing y con quien realizamos el Taller Express de Python en su ciudad, junto a Jorge (quien nos hospedó) y otros chicos más de la Universidad.

José nos puso en contacto con Alex de San Miguel, quien nos puso en contacto con Juli de La Colmena, quien finalmente nos puso en contacto con Nick de Isla Alta. Todos ellos pertenecen al Cuerpo de Paz y son muy buena, pero muy buena onda. Nos hospedaron y nos dieron un montón de indicaciones para llegar a El Salto Cristal que era nuestro objetivo al visitar La Colmena.

Sin embargo, una vez en la casa de Nick, ya habiendo visitado el salto y a punto de irnos a dormir, le comentamos lo que hacemos y él se re copó con la idea y le preguntó a Johanna si podíamos hacer una jornada al día siguiente en la escuela en la que trabaja él como voluntario: nos miramos, y "Daaaale!". Así que organizamos todo para al día siguiente levantarnos temprano e ir a la escuela con todos los materiales.

IMG_20150616_091526.thumbnail.jpg

Johanna explicando la dinámica de la jornada ciencia "Jugando al científico loco"

Yo personalmente no estuve mucho tiempo dentro del aula en la que se realizó la jornada, pero lo que pude ver estuvo buenísimo. Más bien, yo me dediqué a hacer un mini-documental de esa escuela rural que se encuentra en el medio de la nada y que tiene muchísimas y mejores actividades que otras escuelas que lo tienen todo. Ellos, sin embargo, con nada hacen un montón de cosas todos los días.

IMG_20150616_111417.thumbnail.jpg

Una parte del grupo que asistió a la jornada de Ciencia

Este es el resultado de todos los micro videos que grabé durante mi paso por el Colegio Nacional Dr. Moises Santiago Bertoni el día de la jornada de ciencia express organizada por Nick y Johanna.

Juanjo Conti: Jugando con los datos del escrutinio provisorio

Anoche estuve jugando un poco con los datos (publicados) del escrutinio provisorio de las elecciones a gobernador en la provincia de Santa Fe.

La misma noche de las elecciones, cuando los resultados provisorios no lo favorecieron, Miguel del Sel y los partidarios del PRO en general empezaron a instalar una sospecha de fraude. No tardaron en hacerse eco en las redes sociales distinto tipo de usuarios: obsecuentes, tira bombas, paranoicos, ingenuos.

En distintos medios, Del Sel mostró como “prueba” del fraude errores producidos al realizar la carga manual de datos durante el escrutinio provisorio, es decir durante el proceso humano de mirar una planilla completada a mano e ingresar (tipeando) los valores en el sistema.

De los tipos de errores, voy a tomar uno, el primero que mostró (1, 2): el candidato figura con 0 votos en el sitio web, pero en la planilla tiene X votos.

Mi objetivo es ver cuantas veces se da este error y como afecta a los distintos candidatos.

Programé un pequeño script que hace lo siguiente:

  1. Baja el archivo XML con los datos de la categoría Gobernador correspondiente a cada mesa.
  2. Lee los archivos XML para obtener, para cada mesa, la cantidad de votos de los 3 partidos dominantes.
  3. Encuentra las mesas en las que cada partido tiene 0 votos.
    1. Si en una mesa los 3 candidatos tienen 0 votos, se asume que se trata de una mesa con telegrama desestimado.

Luego revisé los archivos PDF de los telegramas de estas mesas. Arribé a lo siguiente:

Partido Nº de mesa Votos
PRO 1725 0
PRO 270 73
PRO 5351 0 *
Total votos faltantes PRO 73
FPV 1478 0
FPV 7591 0
FPV 5545 0
FPV 4912 0
FPV 7601 0
FPV 1845 0
FPV 4950 0
FPV 4729 85
FPV 6555 0
FPV 6333 0 *
Total votos faltantes FPV 85
FPCS 6852 0 *
FPCS 1478 0
FPCS 134 0
FPCS 7591 0
FPCS 5485 82
FPCS 4501 75
FPCS 6555 0
FPCS 1845 0
Total votos faltantes FPCS 157
* la casilla estaba en blanco en el telegrama

Se pueden analizar otros tipos de errores en la carga, pero con uno me alcanza para demostrar mi punto: esto no es prueba ni de fraude ni del accionar de un cracker, solo errores humanos distribuidos uniformemente.

Es decir, este tipo de error ocurrió una vez para el PRO (a quien se le deben contabilizar 73 votos más), una vez para el FPV (a quien se le deben contabilizar 85 votos más) y 2 veces para el FPCS (a quien se le deben contabilizar 157 votos más).

Los datos y las herramientas están disponibles para periodistas y entusiastas que quieran seguir explorando el espectro de los votos mientras el tribunal sigue contando.

Finalmente, como esto se puso muy serio, cierro con un poco de humor, uno de los mejores Eameos:

MI-DA-CHIActualización: audio disponible.