Automágica: durante 2017 estoy trabajando bastante en Automágica, mi software para editar libros: Más información - Posts relacionados

Audio de la entrevista en Recreo Diario sobre mi artículo sobre el escrutinio en las elecciones Santa Fe 2015

Luego de publicar el post Jugando con los datos del escrutinio provisorio me contactaron de radio Continental Santa Fe para participar del programa Recreo Diario contando lo que hice.

Luego de mi entrevista siguió una con Pepito Cybrian y Cecilia Milone. Me saqué una foto con ellos y la usé para ilustrar el audio.

https://www.youtube.com/watch?v=axwJ-_mXtQc


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:

    <li>Baja el archivo XML con los datos de la categoría Gobernador correspondiente a cada mesa.</li>
    
    <li>Lee los archivos XML para obtener, para cada mesa, la cantidad de votos de los 3 partidos dominantes.</li>
    
    <li>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.


Video de mi charla Ruby para programadores Python

Hoy encontré que los organizadores de PyConAr 2014 habían subido el video de mi charla Ruby para programadores Python. Se que subir todos los videos de una conferencia lleva tiempo y es mucho trabajo. Muchas gracias!

https://www.youtube.com/watch?v=NdvTsh_eYe8


Reactivé el bot @jjsaer

Saer en Twitter

Desde hace algunos años mantengo un bot en Twitter que cita a Juan José Saer.

Hace algunas semanas, cuando la notebook que servía de servidor para esta aplicación se rompió, Saer dejó de twittear.

Hoy aproveché el día para acomodar un poco su código fuente y moverlo a un servidor de verdad.

La lista completa de las citas que va posteando está en saertweets.txt. ¡Se aceptan nuevas citas para agregar! Incluso, cualquiera puede usar este pequeño programa para crear un bot de cualquier escritor o de cualquier cosa. Si no son programadores y necesitan ayuda para hacerlo funcionar, me avisan.


Se viene la PyConAr 2014

La conferencia de Python más grande del país se va a llevar a cabo en un par de semanas en Rafaela. Imperdible para la gente de Santa Fe y zona que quiera conocer o profundizar en este lenguaje.

pyconar2014


Twitter: Dejar de seguir a los que no me siguen

Para cierta cuenta de Twitter que administro, necesitaba dejar de seguir a todos los usuarios que no me seguían.

Busqué si había alguna web que diera el servicio y las que encontré (NotFollow y JustUnfollow) solo se limitaban a listar a quienes no te seguían y permitirte ir eliminándolos de a uno. Un chiste. (JustUnfollow te deja eliminar solo 50 usuarios por día si no te pasás a la cuenta premium, paga, o twitteas haciéndoles propaganda).

Tenía que eliminar a casi 2000 usuarios y no tenía ganas de que me diera tendinitis en el dedo índice derecho de tanto hacer click.

Como siempre, dada la herramienta correcta, un trabajo a primera vista tedioso o complicado puede resultar extremadamente fácil. Utilizando la librería Python Twitter Tools hice este script que, luego de la danza de OAuth para autenticarse en Twitter, consta de 7 líneas. Tomen community managers, se los regalo:

following = twitter.friends.ids()

followingIds = following['ids']

followers = twitter.followers.ids()

followersIds = followers['ids']

for id in followingIds:

if id not in followersIds:

    twitter.friendships.destroy(user_id=id)</pre>

PS: para los amantes del code golfing, ahí va la versión en una línea:

[twitter.friendships.destroy(user_id=id) for id in twitter.friends.ids()['ids'] if id not in twitter.followers.ids()['ids']]

Nota: para dejar de seguir unos 1900 usuarios tardo una media hora en mi notebook.

Tarea para el lector: escribir un script para seguir a todos los seguidores que no estamos siguiendo.


Visión robótica

Hace un par de noches me escribió mi amigo Joel. Es licenciado en Filosofía y está haciendo un doctorado. Me cuenta que está leyendo un libro llamado How the Mind Works, de Steven Pinker, quien actualmente se desempeña en la cátedra de psicología del MIT y es uno de los principales referentes de la psicología evolucionista.

En el libro, contrastando con lo que muestran los directores de cine en las películas, Steven dice:

Si pudiéramos ver el mundo con los ojos de un robot, su aspecto no se parecería al fotograma de una película a base de crucecillas, sino que se asemejaría más a esto:

225 221 216 219 219 214 207 218 219 220 207 155 136 135

213 206 213 223 208 217 223 221 223 216 195 156 141 130

206 217 210 216 224 223 228 230 234 216 207 157 136 132

211 213 221 223 220 222 237 216 219 220 176 149 137 132

221 229 218 230 228 214 213 209 198 224 161 140 133 127

220 219 224 220 219 215 215 206 206 221 159 143 133 131

221 215 211 214 220 218 221 212 218 204 148 141 131 130

214 211 211 214 220 218 221 212 218 204 148 141 131 130

211 208 223 213 216 226 231 230 241 199 153 141 136 125

200 224 219 215 217 224 232 241 240 211 150 139 128 132

204 206 208 205 233 241 241 252 242 192 151 141 133 130

200 205 201 216 232 248 255 246 231 210 149 141 132 126

191 194 209 238 245 255 249 235 238 197 146 139 130 132

189 199 200 227 239 237 235 236 247 192 145 142 124 133

198 196 209 211 210 215 236 240 232 177 142 137 135 124

198 203 205 208 211 224 226 240 210 160 139 132 129 130

216 209 214 220 210 231 245 219 169 143 148 129 128 136

211 210 217 218 214 227 244 221 162 140 139 129 133 131

215 210 217 218 214 227 244 221 162 140 139 129 133 131

219 220 211 208 205 209 240 217 154 141 127 130 124 142

229 224 212 214 220 229 234 208 151 145 128 128 142 122

252 224 222 224 233 244 228 213 143 141 135 128 131 129

255 235 230 249 253 240 228 193 147 139 132 128 136 125

250 245 238 245 246 235 235 190 139 136 134 135 126 130

240 238 233 232 235 255 246 168 156 144 129 127 136 134

Cada número representa la luminosidad de una de las millones de manchas que forman el campo visual. Los números menores corresponden a las manchas más oscuras, y los mayores, a las más claras.

Joel me preguntaba si se me ocurría una forma sencilla de convertir estos números en una imagen. El ejercicio es válido y un buen ejemplo de la biblioteca PIL.

from PIL import Image

image = Image.new('L', (14,25))

imageMap = image.load()

f = open('vision1.txt')

lines = f.readlines()



for i, l in enumerate(lines):

    for j, v in enumerate(l.split()):

        n = int(v)

        imageMap[j, i] = n



image.save('vision1.gif')

image.show()

Y esto es (ampliado) lo que está mirando el robot de Steven:

Visión robótica con PIL (ampliada)

update: la versión de Milton usando Octave:

matriz = dlmread('vision1.txt');

matrizNormalizada = matriz ./ max(max(matriz));

imshow(matrizNormalizada);

Visión robótica generado con Octave

update 2:

Joel implementó una solución muy ingeniosa utilizando una planilla de cálculos:

Visión Robótica con planilla de cálculo


Lighting talks en PyConAr 2011 - día 2

Ayer publiqué el resumen de las lighting talks del primer día. Estas son las del segundo.

24 de septiembre de 2011

Mariano Reingart – gui2py

http://code.google.com/p/gui2py/

Una idea: usar web2py para hacer aplicaciones de escritorio usando wx.html.HtmlWindow.

Gabriel – Tornado y Hadoop, integración en el mundo real – Mercadolibre

Tornado: servidor web Python asincrónico

Redis: sort of memcache

Apache Hadoop

Gonzalo – SugarLabs Argentina

http://ar.sugarlabs.org

Sugar es un entorno de actividades que corren en las OLPC. 95% Python. Mañana y pasado se juntan a programar y a enseñar en Junín.

Alan Etkin – math2py

http://sourceforge.net/projects/math2py/

Aplicación web para matemáticas sobre web2py. Entre las herramientas incluye: resolver sistemas lineales, funciones matemáticas, gráficos con resultados.

TeMiro?

http://temiro.tv

Hagamos un Cuevana que no necesite ni flash ni extensiones. Usan videoJS, que permite que los navegadores sin soporte para HTML 5 puedan ver videos igualmente. info@devecoop

Nico César – El futuro de Python

Nos contó sobre la biblioteca mindread. (un poco de humor, si no vinieron a verlo, se lo perdieron).

Sorteo

Se sorteó un un Cuchillo de PyConAr entre las personas que viajaron más de 1000 kms para participar. Adolfo de Santiago de Chile, Manuel de España, uno de Rusia, Ezequiel de Tucumán, Guillermo de La Rioja, Pablo de Montevideo (casi 1000), y otros mas...

random.choice(lista_con_los_nombre)

Damián Avila – Tradeo de pares con Python

Python para resolver problemas de finanzas. Modelos matemáticos con base probabilística. 2 series financieras y cointegración.

Diego MascialinoCDPedia

http://python.org.ar/pyar/Proyectos/CDPedia

Un proyecto que busca que Wikipedia pueda ser visto en lugardes sin acceso a Internet. Este año se resolvió el problema de tener dumps actualizados de la enciclopedia. Salió la versión 0.7 que es distribuida por Educ.ar.

Guillermo Narvaja – ISO 9001 menos burocrática

Implementaron ISO 9001 en la empresa Fierro. En lugar de documentos impresos usaron documentos de texto, rst, con revisión de versiones y otras herramientas de Software Libre.

Juan Pablo y Pedro – Onapsis Bizploit

http://www.onapsis.com/

Una startup orientada a la seguridad en aplicaciones críticas de negocios. Fork de sapyto, primer framework para hacer penetration tests de SAP. Está desarrollado como prueba de concepto para demostrar la existencia de riesgos.

La arquitectura consiste en un core con plugins: discoveres, exploiters.

Ricardo Kirkner – ConfigGlue

https://launchpad.net/configglue

Es una librería para mantener la configuración de un programa. Código Python, por lo que permite validar tipos, heredar, standares xdg. Integra ConfigParser y OptionParser.

Manuel Quiñones - Fork de MyPaint

Le agrega a MyPaint la posibilidad de editar animación.

Fotos por César Portela:

[gallery link="file" orderby="title"]


Lighting talks en PyConAr 2011 - día 1

Las lighting talks, ya clásica en las conferencias de Python, son charlas de 5 minutos. Los disertantes se anotan en un papal fuera del aula unos minutos antes del comienzo. Lo bueno de la modalidad es lo siguiente: en 5 minutos podés enterarte de algo muy interesante, ¿y que pasa si que el que habla es un plomo? No importa, en menos de 5 minutos se va.

Estas son notas rápidas tomadas mientras los disertantes hablaban.

23 de septiembre de 2011

Natalia Bidart – Ubuntu One en el desktop

https://launchpad.net/ubuntuone

Ubuntu one tiene UI en GTK (la distribuida hoy en los Cds de Ubuntu) y en QT (reemplazará a la versión actual). En el código fuente se puede ver como tener en el mismo repositorio el soporte para ambos toolkits.

Diego Sarmentero – Ninja IDE

http://ninja-ide.org/

A partir del 22 de octubre estará abierto el primer concurso de plug-ins para Ninja IDE. Primer premio 250 u$s.

Facundo Batista – Cómo generar un ejecutable con sistema Python

Tenemos un paquete con un módulo con una función. 3 líneas de código sirven como prueba de concepto, es lo mismo si tuviésemos un sistema muy grande. Se necesita un main.py que ejecute el sistema. Hacemos un zip con todo.

( echo '#!/usr/bin/env python' ; cat foo.zip) > saludo

chmod +x saludo

Y listo! Podemos ejecutarlo con:

./foo

Idea original de John Lenton.

Joaquin Sorelliano – Cooperativismo

Hay varias cooperativas que producen Software Libre en el país: Elvex, Devecoop, Unixono, Gcoop y otras.

Juan Bautista Cabral – Revista PET

http://revista.python.org.ar/

La revista pretende documentar los eventos La revista tiene ISSN, lo cual la hace citable.

Margarita Manterola – Por qué no usar OpenERP

Es un ERP o un framework para desarrollar sistemas de gestión. Se presenta como una tentación, multi todo, muchos módulos, usado por muchas empresas, hecho en Python y es Software Libre.

La verdad: es chico, usa un ORM horrible, no se pueden hacer búsquedas por JOIN, los objetos no se actualizan y hay que releerlos de la BD, la herencia está mal implementada. Muchos dolores de cabeza. El cliente GTK tiene que estar todo el tiempo conectado al servidor para redibujarse. La interfaz de usuario está mal diseñada. El equipo de desarrollo elimina características de una versión a otra, con documentación desactualizada, “comunidad” poco amigable (no acepta parches) y el código es lo peor.

Tryton, fork de OpenERP. No segura de que sea una alternativa. Empezar uno desde cero? Si, pero no cada uno el propio, juntémosnos.

Manuel Quiñones - Animación Quebracho

http://animacionquebracho.org.ar/

Un dibujo animado que se está desarrollando con financiamiento de la provincia de Santa Fe. Cuenta la historia de la provincia, será CC y está hecho con Software Libre.

Evgeny Fadeev (from Russia) – Python @ StartupChile

http://www.startupchile.org

Programa del gobierno chileno. Le da a cada equipo 40000 u$s. Le da Visa a extranjeros. Les presenta empresarios chilenos y otros beneficios. Les dan oficinas gratis en Santiago.

Primero hubo 110 proyectos. Luego 154 nuevos proyectos de 33 países. Muchos de los proyectos están hechos en Python. Hay empresas contratando.

El proyecto de Evgeny es AskBot, un sitio de Q&A.

Apply. La próxima ronda empieza en octubre.

Martín Gaitán – PyQuery

http://pypi.python.org/pypi/pyquery

jquery-like library. Más simple y potente que BeautifulSoup para scrappear la web.

Martín y Juan Catalano – Streema

http://streema.com/

Es una startup, un sitio web, una red social para escuchar radios de todo el mundo. Hecho con Django y Eventlet. La empresa tiene 4 años y hace poquito se hizo rentable.

Kragen Javier Sitager

Presentación de la charla del día siguiente: Utilizando PyGame para instalaciones artísticas interactivas. No se pudo hacer por problemas técnicos.

Ale Cura – PyCamp

http://python.org.ar/pyar/PyCamp/

Un “campamento" en dónde los Pythonistas argentinos se juntan a trabajar en el medio de la naturaleza.

Fotos por César Portela:

[gallery link="file" orderby="title"]


Razones para ir a PyConAr 2011

PyConAr es la conferencia de Python en habla hispana más grande del mundo y la edición 2011 se va a llevar a cabo en Junín, Buenos Aires, el próximo viernes y sábado. Vas?

Para convencerse a ir, además de mirar en el sitio oficial el listado de charlas (que incluye 5 speakers internacionales) y el mapa donde se ve de todos los lugares que vamos, no dejes de pasar por el blog oficial de la organización: en especial los posts en los que cada verso del Zen de Python.

En este detalle se refleja todo lo que han trabajado para organizar este evento. No dudo que va a estar muy bueno.