ubuntu-ar Ubuntu electoral

Gabriel Patiño gepatino at gmail.com
Sun May 27 19:32:27 BST 2007


Les mando lo que escribí sobre el proyecto, publiquenlo donde y como
quieran, respetando la licencia (CC-BY-SA)

Si alguien lo quiere traducir al inglés, adelante, cualquier cosa
pasenmelo antes de publicarlo asi le pego una mirada. Si lo traducen a
otros idiomas, confío en ustedes...

Saludos,
-- 
Gabriel E. Patiño

Un amigo necesita ayuda --> http://www.ayudemosaezequiel.com.ar
------------ próxima parte ------------
Sistema de recuento de votos en Ubuntu + Python

Desde el a??o 1999 la empresa donde trabajo, MSA - Magic Software Argentina s.a.[1], fu?? seleccionada para llevar a cabo varios procesos electorales en diferentes provincias y localidades de la Republica Argentina. Recientemente algunos de estos proyectos incluyeron alguna forma de voto electr??nico, pero generalmente se trata de hacer el recuento de votos del escrutinio provisorio. 

Desde la primer elecci??n en que la empresa fu?? seleccionada, fu?? parte del equipo de dise??o y desarrollo del sistema. Inicialmente el sistema estaba basado 100% en tecnolog??as privativas. El 20 de Mayo de 2007 hicimos el primer sistema de recuento de votos basado totalmente en software libre para las elecciones provinciales de la provincia de R??o Negro, usando Ubuntu como distrubuci??n de Linux, y Python como lenguaje de programaci??n.


Introducci??n al problema

El escrutinio provisorio es el que se hace r??pidamente tomando en cuenta los datos que registran los presidentes de mesas en un formulario determinado. ??stos son los datos oficiales que generalmente est??n disponibles a la medianoche del d??a de las elecciones, y los que vamos a consultar en todos los medios de prensa al d??a siguiente. 

Para el escrutinio definitivo, el juzgado electoral resuelve algunos votos que no fueron tomados en cuenta en el escrutinio provisorio como los votos recurridos e impugnados, y determinan si son o no votos v??lidos. Como este proceso puede tardar varias semanas, es de suma importancia obtener el resultado del recuento provisorio lo antes posible para dar transparencia al acto electoral. A menos que la elecci??n haya sido muy pareja entre dos o m??s candidatos, no hay diferencias entre el escrutinio provisorio y el definitivo ya que los porcentajes de votos recurridos e impugnados son muy bajos, y generalmente no deciden ninguna elecci??n.

En base a los requerimientos impl??citos del recuento provisorio (velocidad y confiabilidad) el sistema que se encargue de tomar la informaci??n generada por los presidentes de mesa y genere los reportes ??minuto a minuto?? que van a ser consultados p??blicamente debe ser extremadamente confiable, estar dise??ado como para permitir resolver cualquier contingencia (desde cortes de luz, hasta da??os en el hardware) en menos de media hora, y como si todo esto fuera poco, tiene que ser lo suficientemente r??pido como para procesar m??s del 80% de las mesas antes de la medianoche. 


Conociendo al ping??ino

El primer proceso electoral que hicimos fu?? basado completamente en herrmientas y software privativo. Todas las m??quinas corr??an el sistema operativo de Microsoft (no recuerdo las versiones), el lenguaje de programaci??n era Magic [2](una herramienta de desarrollo post 4GL) y los reportes (html) eran generados en lotes que luego eran subidos al sitio web de publicaci??n de resultados.

En esa ??poca estaba dando mis primeros pasos en el mundo de GNU/Linux, y aunque ya hab??a utilizado sistemas AIX y SCO, no ten??a el conocimiento ni la confianza como para proponer el uso de herramientas de software libre.

R??pidamente fu?? aprendiendo a relacionarme con el ping??ino, en gran parte gracias a la comunidad de LUGAr [3] y su maravillosa lista de correos. Gracias a toda la gente que participa de la lista aprend?? mucho, primero haciendo preguntas, luego respondiendo las preguntas que estaban al nivel de mis conocimientos. 

Desde el a??o 2000, Linux empezo a acompa??arnos en los procesos electorales. Su primer colaboraci??n fu?? trabajar como generador de gr??ficos para los reportes de resultados. Inicialmente hab??amos seleccionado una herramienta que corr??a sobre Windows, pero la performance no era aceptable. Las bases de datos (Oracle) corr??an sobre HP-UX, as?? que buscamos alguna herramienta de c??digo abierto que cumpla con los requerimientos y encontramos a ploticus [4] que desde ese momento siempre nos acompa??o. La idea era compilar ploticus para que corra sobre HP-UX, ya que Linux no estaba visto como algo confiable por los ??no-t??cnicos??. Por problemas de librer??as y compiladores, no pudimos hacer compilar el programa para que corra en HP-UX, as?? que directamente nos llevamos nuestra m??quina de pruebas en Linux, y esa fue la entrada en escena del ping??ino. Se realiz?? el proceso sin problemas, y qued?? comprobado que pod??amos confiar en Linux para procesos importantes.

En procesos posteriores, fuimos incorporando gradualmente m??s Linux y software libre dentro del sistema. Configuramos nuestros propios servidores web (Apache), hicimos la generaci??n de reportes con PHP, las bases de datos Oracle fueron instaladas sobre RedHat, de a poco ??bamos ganando conocimiento (y confianza) en la utilizaci??n de herramientas libres. 

Muchas veces la selecci??n de las herramientas libres estaba limitada a las herramientas no libres que tamb??en formaban parte del sistema. Generalmente usabamos RedHat como distribuci??n ya que Oracle s??lo brindaba soporte para esa distribuci??n, para el m??dulo de ingreso de datos segu??amos utilizando Magic sobre Windows.


Al final, Python y Ubuntu

En el a??o 2006 hicimos una experiencia con voto electr??nico para la Municipalidad de Rosario. Ese fue un punto de inflexi??n ya que utilizamos por primera vez un ambiente de desarrollo abierto para desarrollar las interfases de usuario. La soluci??n utilizada se basaba en LiveCDs de Ubuntu modificados para contener el software de voto que usaban los electores. Dado que Magic no tiene un cliente GUI para Linux, decidimos utilizar Python + Gtk. 

La combinaci??n funcion?? a la perfecci??n, y nos sirvi?? para sentar precedentes que no solo las distribuciones comerciales son estables y confiables. Ubuntu corriendo desde un LiveCD fu?? sumamente confiable, y s??lo tuvimos problemas con los m??dulos de un touch screen cuyo fabricante s??lo nos facilit?? una versi??n beta de los mismos.

Por otro lado comprobamos que Python es un lenguaje de programaci??n extremadamente poderoso. Sin la velocidad de programaci??n que brinda Python, no hubieramos tenido tiempo de hacer un m??dulo especialmente dise??ado para que puedan votar las personas con capacidades de visi??n disminu??das, utilizando 'festival' para que asista al elector durante el proceso de emisi??n del voto (gracias a Marcelo Fern??ndez)

En base a la experiencia recogida en la ciudad de Rosario, para el proceso de recuento provisorio de las elecciones de R??o Negro, el 20 de Mayo de 2007, quer??amos utilizar la misma plataforma (Ubuntu + Python) pero se impon??a el problema de que Oracle s??lo brinda soporte si se ejecuta sobre Red Hat Enterprise Linux. 

Para el sistema de reportes y el sistema de carga de datos, ya hab??amos seleccionado Ubuntu como plataforma, dado que es la distribuci??n que usamos para trabajar diariamente. Si todo el software era desarrollado y probado en una plataforma, no era muy convincente cambiar de distribuci??n par el d??a del proceso. La base de datos podr??a haber corrido sobre un RHEL, pero necesitabamos que los dos servidores principales puedan cumplir con las funciones del otro en caso de una ca??da inesperada. Tener un RHEL por un lado y un Ubuntu por el otro no nos permit??a estar totalmente seguros que la aplicaci??n se comporte igual, y si hab??a que levantar el Oracle en Ubuntu, no ibamos a tener soporte.

Dado que los tiempos estaban muy ajustados, no pod??amos hacer pruebas de compatibilidad de la aplicaci??n en diferentes distribuciones, con diferentes librer??as y versiones de programas. Entonces se tom?? la decisi??n que tanto tiempo tardamos en tomar. Dado que Oracle no soporta Ubuntu, y necesitamos Ubuntu en los dos servidores principales, seleccionamos a PostgreSQL[5] como base de datos.

Luego de un par de pruebas r??pidas, quedamos totalmente convencidos que era lo que necesitabamos. La instalaci??n fue m??s simple de lo que pensabamos: un simple 'apt-get install'. Para la configuraci??n no tuvimos que tocar demasiados parametros ya que el volumen de datos no era demasiado grande. Lo importante era que los 'inserts' y las consultas sean r??pidos, y consistentes.

Para la parte de carga de datos, ten??amos que instalar la aplicaci??n en doce m??quinas alquiladas para la ocasi??n. Si bien nos permit??an hacer una instalaci??n e instalar Ubuntu en todas las m??quinas, hacer esto nos hubiera llevado un par de horas largas. Para resolver el problema, configuramos un LTSP [6] sobre Ubuntu, y utilizamos las m??quinas como clientes delgados. En consecuencia la instalaci??n de la aplicaci??n s??lo se hizo en una m??quina, y el resto fue arrancar las m??quinas desde la red.


Descripci??n de la soluci??n utilizada

El funcionamiento del sistema es, en forma sint??tica, el siguiente:
 - Luego de hacer el recuento manual de votos, el presidente de mesa llena un formulario con los resultados del recuento para esa mesa.
 - Los formularios son enviados f??sicamente al juez de paz m??s cercano.
 - Los jueces de paz son los responsables de transmitir los formularios por fax al centro de computos de la ciudad de Viedma.
 - Tres equipos Cisco reciben los faxes y los env??an a un servidor de correos dentro de la red local.
 - Un proceso en python se encarga de desempaquetar las im??genes y procesarlas para que puedan ser utilizadas en el resto del circuito.
 - Mediante una aplicaci??n GUI, varios operadores confirman que los faxes recibidos sean ver??dicos, legibles, etc.
 - Las imagenes aprobadas son transmitidas a traves de una VPN al centro de computo de Buenos Aires.
 - Los dataentries ven las imagenes en un programa que muestra la im??gen y los campos para ingresar los votos.
 - Las im??genes son cargadas por dos personas distintas, si los datos de las dos cargas no coinciden, se resuelve la incidencia en la ciudad de Viedma mediante un sistema de carga web (apache + mod_python) que s??lo es accesible mediante la VPN.
 - Las planillas que fueron cargadas correctamente son publicadas en el sitio web de reportes p??blicos (apache + python)

En la ciudad de Viedma, se utilizaron las siguientes herramientas:
 - Ubuntu 7.04 (mailserver, aprobaci??n de faxes)
 - postfix
 - Python + Imagemagick (proceso de imagenes)
 - Python + pygtk + glade
 
En la ciudad de Buenos Aires:
 - Ubuntu 6.10 (servidor de base de datos, servidor web, servidor LTSP)
 - PostgreSQL 8.1
 - Python + pygtk + glade (programa de carga de datos)
 - Apache 2.2 + mod_python (consulta de estado de proceso y resoluci??n de incidencias)
 - Apache 2.2 + python (cgi de generaci??n de reportes p??blicos)
 - ploticus (generaci??n de gr??ficos para los reportes)

Algunas im??genes: http://picasaweb.google.com/gepatino/EleccionesRioNegro2007


Conclusi??n

Generalmente se piensa que las herramientas de software libre mantenidas por la comunidad no son 100% confiables en aplicaciones de misi??n cr??tica, y se termina recurriendo a distribuciones comerciales, bases de datos propietarias, etc. Durante el desarrollo de este proceso, no s??lo pudimos comprobar que esta visi??n es erronea, sino que en algunos casos se imcrementa la productividad. 

Usar Ubuntu como ??nica distribuci??n nos facilit?? muchisimo la instalaci??n y configuraci??n de los m??ltiples servidores que participaron del proceso. El sistema de paquetes apt-get (y sus derivados) son una ayuda invaluable, y en los repositorios pudimos encontrar todas las herramientas que necesitamos. No necesitamos bajar programas o librer??as de sitios no oficiales, y no fu?? necesario (re)compilar ni un s??lo programa.

En cuanto a la programaci??n, Python nos brind?? todo lo que necesitamos, y al momento de necesitar instalar algunas librerias en particular, siempre las encontramos en los repositorios de Ubuntu. Python, al ser tan potente y r??pido para el desarrollo, nos permiti?? desarrollar el sistema completo solamente entre dos personas (Marcelo y yo). Cuando us??bamos otras herramientas de deasarrollo nunca fuimos menos de cuatro desarrolladores. 

En definitiva, las herramientas libres mantenidas por la comunidad, por lo menos las utilizadas en este proyecto, son totalmente confiables en aplicaciones de misi??n cr??tica como el caso presentado. Si son confiables para este tipo de procesos tan delicados, ??por qu?? no usarlas en su empresa? ;)


Gabriel Ernesto Pati??o
https://launchpad.net/~gepatino


Publicado bajo la licencia Creative Commons Attribution-Share Alike 3.0 (http://creativecommons.org/licenses/by-sa/3.0/)



Enlaces

[1] http://www.msa.com.ar
[2] http://www.magicsoftware.com
[3] http://www.linux.org.ar
[4] http://ploticus.sourceforge.net
[5] http://www.postgresql.org
[6] http://www.ltsp.org


More information about the Ubuntu-ar mailing list