jueves, 31 de octubre de 2013

PgDay Argentina 2013



4ta Jornada intensiva sobre bases de datos PostgreSQL


http://www.postgresql.org.ar/pgday2013



El encuentro es de entrada libre y gratuita, y se realizarán el 14 de Noviembre en  el edificio de la Secretaría de Gestión y Coordinación Administrativa, Av. Roque Sáenz Peña 511 (Capital Federal), en el marco del Foro de la Agenda Digital Argentina.

Entre los disertantes contará con ponencias de expertos internacionales, autoridades nacionales y funcionarios públicos, docentes y profesionales, entre otros, brindando más de 14 actividades confirmadas (ver agenda), tanto conferencias como talleres prácticos para todos los niveles de conocimiento sobre PostgreSQL, el líder mundial en sistemas de base de datos relacionales de código abierto y software libre.

Para facilitar el ingreso y organización, recomendamos realizar la inscripción via web con anticipación:

http://www.postgresql.org.ar/pgday2013/user/register

Gacetilla de prensa con más información sobre el PgDay:


http://www.postgresql.org.ar/pgday2013/static/gacetilla.pdf

Dossier de Prensa de PostgerSQL 9.3:


http://www.postgresql.org/about/press/presskit93/es/


Desde ya agradecemos difusión por listas de correo, redes sociales o en carteleras de universidades/empresas.

Por consultas, escribir a ar@postgresql.org (contacto regional de PostgreSQL para Argentina)

martes, 22 de octubre de 2013

1er Jornada de Informática en el Instituto Blaise Pascal

El Jueves 31 de Octubre de 2013, se realizará de 18:00 a 21:30 en el Instituto Tecnológico Blaise Pascal (donde soy docente), una Jornada Anual de Informática, en la cual los alumnos compartirán experiencias y presentarán algunos proyectos trabajados en el año:

  • Domótica: Control de una vivienda con una computadora (raspberry pi) 
  • Control de asistencia con lector de códigos de barra (web2py) 
  • Monitor de Anuncios: aplicación web "TV Inteligente" (web2py) 
  • Software de manejo de matrices (python) 
  • Robótica: Robot N6 guiado para recorrer un camino / laberinto (python) 
  • Sistema de gestión académica orientado a web -trabajo final integrador- (web2py) 
También se presentarán otros proyectos sobre análisis de un sistema de orientación vocacional, mercado laboral, idiomas y estadísticas.


La mayoría de los trabajos están enmarcados en un proyecto curricular orientado al software libre que venimos trabajando desde 2009 (tecnicaturas en Análisis de Sistemas y Redes Informáticas).

Para más información sobre el instituto y las carreras, ver: http://www.institutopascal.edu.ar

Cualquier duda quedamos en contacto, desde ya todo aquel que esté interesado puede concurrir, la entrada es libre y gratuita.

Próximamente se publicarán algunos vídeos sobre la jornada.

Se agradece difusión,

jueves, 5 de septiembre de 2013

Aplicación libre para recuento de votos / escrutinio: recuento_web2py


Recientemente he liberado una aplicación web, usada originalmente para el Recuento definitivo de las elecciones provinciales de Rio Negro 2011:


En el Primer Hackaton de Datos Públicos,  que incluyó juegos de datos de elecciones pasadas, trabajé en dicha aplicación para armar y publicar el código de la misma, a modo de demostración que sirviera para procesar los resultados de distintas elecciones.

La aplicación es básica y simple, permite consultar/cargar datos de las planillas (actas / telegramas de cada mesa) y tiene una página de resultados totalizados. Está escrita en el lenguaje de programación Python (framework web2py) y utiliza PostgreSQL como base de datos.

El esquema de base de datos ha sido generalizado para que pueda ser utilizado en cualquier tipo de elección, ya que soporta diferentes cargos, listas internas / partidos, y un árbol jerárquico de ubicaciones (soportando clasificaciones variadas, por ej. en País, Provincia, Departamento, Circuito y Mesa).

Mi idea de publicar el código fuente, fue más que nada por una cuestión educativa / experimental, para poder compartirlo con alumnos y otros interesados, ya que quizás sea de utilidad para tomarlo como base para analizar resultados de elecciones, hacer pruebas de carga y rendimiento, optimización de bases de datos, etc.

Hasta el momento, se procesaron los datos públicos de dos elecciones nacionales:
Esta subido a un repositorio público bajo licencia AGPLv3+ (licencia de software libre similar a la de Linux pero con consideraciones adicionales para aplicaciones web): https://github.com/MSA-Argentina/recuento_web2py

Instalación Rápida:

  • Descargar web2py desde: http://www.web2py.com/ 
  • Descargar la aplicación en un archivo comprimido desde GitHub: master.zip
  • Descomprimir la aplicaión en la carpeta application de web2py (por ej. bajo el nombre recuento)
  • Crear una base de datos en PostgreSQL y ejecutar el esquema.sql para crear las tablas
  • Seguir los pasos siguientes de cada juego de datos (ver carga.sql y migracion.sql)
  • Configurar la cadena de conexión a la base de datos en el modelo app_settings.py

Juegos de Datos Públicos


Ultimamente trabajé en procesar los datos de las P.A.S.O. 2013 -elección primarias para senadores y diputados nacionales en las 24 provincias-, publicados en el Portal de Datos Públicos

Para más información ver carpeta 2013-primarias:
El juego de datos es bastante interesante ya que está a nivel de mesa (fuente de la información), por lo que incluye 88.463 mesas procesadas con 1.846.369 registros de resultado (votos por mesa, por cada lista para los cargos de diputados + sendadores).
Recordar que es un recuento provisorio por lo que los datos no son definitivos y no están todas las planillas cargadas (90.670 mesas habilitadas en total). El total de electores habilitado fue de 30.573.183.
Para ver los datos oficiales, dirigirse a http://www.elecciones.gov.ar/ (recuento definitivo) y http://www.resultados.gob.ar (recuento provisional).

Manejo de Imágenes de actas de mesa (telegramas / faxes):


La página de Consulta de Telegrama / Planilla permite revisar, cargar y corregir los votos por cargo por lista en cada mesa escrutada.
Para el procesamiento de las imágenes se desarrollaron dos programas auxiliares (scripts):
  • faxes.sh: para extraer las imágenes del PDF y convertirlas al formato TIFF optimizado (CCITT grupo 4) se utilizaron las herramientas pdfimages y ppm2tiff
  • faxes.py: para incorporar las imágenes a PostgreSQL (campo BYTEA), usando python, psycopg2 (adaptador BINARY) y una consulta para determinar la mesa según el nombre de archivo.
NOTA: si se utiliza una versión antigua de PIL (Python Imaging Library), es necesario convertir las imágenes a PNG, perdiendo un poco de eficiencia en la compresión, pero ganando compatibilidad.

Para mostrar las imágenes, se obtiene la misma desde la base de datos y se genera una miniatura con PIL (ver thumbnail en definitivo.py) para ser descargada por el navegador web.

El tamaño total de la base de datos, incluyendo las imágenes de las planillas, es de 6.4 GB

Consultas no triviales con el "ORM" de web2py


Gracias a características declarativas del framework web2py, se pueden realizar consultas relativamente complejas y arbitrarias, en este caso con agrupaciones, tablas anidadas y criterios de búsquedas particulares, de manera programada en Python, sin necesidad de recurrir a escribir SQL puro.
A continuación se extrae un ejemplo de código para totalizar los votos dada una ubicación (por la URL se especifican los identificadores de ubicación, cargo y estado de las planillas):

# constantes (jerarquía de ubicaciones)
CLASES = ['Pais', 'Provincia', 'Departamento', 'Circuito', 'Mesa']

# alias de tablas:       

p = msa.planillas
d = msa.planillas_det
l = msa.listas

# armo la consulta base con los criterios de búsqueda
query = p.id_planilla == d.id_planilla
query &= d.id_lista == l.id_lista
query &= p.id_estado == request.args[3]
query &= d.id_cargo == request.args[0]
query &= l.positivo == True

# armo la consulta "recursiva" (árbol) para tener las ubicaciones y planillas

# (up -> ubicación padre, uh -> ubicación hija)
# p/ el alias de cada tabla se usa el nombre de la clase (depto, mesa, etc.)
up = msa.ubicaciones.with_alias(ubicacion.clase)
query &= up.id_ubicacion == id_ubicacion
for clase in CLASES[CLASES.index(ubicacion.clase)+1:]: 
      uh = msa.ubicaciones.with_alias(clase)
      query &= uh.id_ubicacion_padre == up.id_ubicacion
      up = uh
query &= p.id_ubicacion == up.id_ubicacion
        
# campo suma total:
suma_votos = d.votos_definitivos.sum()
    
# ejecuto la consulta:
resultado = msa(query).select( 
              d.id_lista.with_alias("id_lista"),
              l.nro_lista.with_alias("nro_lista"), 
              l.descripcion.with_alias("descripcion"), 
              l.idx_fila.with_alias("idx_fila"), 
              l.descripcion_corta.with_alias("descripcion_corta"),
              l.color.with_alias("color"),
              suma_votos.with_alias("suma_votos"),
              groupby=(d.id_lista |
                        l.nro_lista | 
                        l.descripcion |
                        l.idx_fila |
                        l.descripcion_corta |
                        l.color),
              orderby= ~suma_votos | l.idx_fila
             )


La salida puede observarse en la Página de Resultados por Ubicación  que permite obtener la suma total de votos agrupada por lista y cargo, para un País / Dpto / Mesa):
Esta consulta en Python generará una consulta SQL similar a la siguiente:

SELECT planillas_det.id_lista, listas.nro_lista, listas.descripcion, 
       SUM(planillas_det.votos_definitivos) AS suma_votos 
FROM planillas, planillas_det, listas, 
     ubicaciones AS provincia, 
     ubicaciones AS departamento, 
     ubicaciones AS circuito, 
     ubicaciones AS mesa 
WHERE planillas.id_planilla = planillas_det.id_planilla
  AND planillas_det.id_lista = listas.id_lista 
  AND planillas.id_estado = 'Publicada' 
  AND planillas_det.id_cargo = 1
  AND listas.positivo = 'T' 
  AND provincia.id_ubicacion = 1 
  AND departamento.id_ubicacion_padre = provincia.id_ubicacion
  AND circuito.id_ubicacion_padre = departamento.id_ubicacion 
  AND mesa.id_ubicacion_padre = circuito.id_ubicacion 
  AND planillas.id_ubicacion = mesa.id_ubicacion
GROUP BY planillas_det.id_lista, listas.nro_lista, listas.descripcion 
ORDER BY SUM(planillas_det.votos_definitivos) DESC, listas.nro_lista;

Consultas Recursivas con PostgreSQL:


La consulta anterior, podría escribirse de manera más flexible en PostgreSQL utilizando Expresiones de Tablas Comunes (CTE) para consultas recursivas (clausula WITH).
En el siguiente ejemplo, se utiliza un termino no recursivo para obtener la ubicación base (id_ubicacion =1), unido luego con el termino recursivo que busca las ubicaciones hijas de cada padre:

WITH RECURSIVE U(id_ubicacion, descripcion, clase) AS (
    SELECT UP.id_ubicacion, UP.descripcion, UP.clase 
      FROM ubicaciones UP 
     WHERE UP.id_ubicacion = 1
  UNION ALL
    SELECT UH.id_ubicacion, UH.descripcion, UH.clase
      FROM U, ubicaciones UH 
     WHERE UH.id_ubicacion_padre = U.id_ubicacion 
  )
SELECT L.id_lista, P.id_partido, L.nro_lista, L.descripcion, P.descripcion,
       SUM(PD.votos_definitivos) AS suma_lista
FROM U, planillas PL, planillas_det PD, listas L, partidos P
WHERE PL.id_ubicacion = U.id_ubicacion
  AND PL.id_planilla = PD.id_planilla
  AND PD.id_lista = L.id_lista 
  AND L.id_partido = P.id_partido
  AND PD.id_cargo = 2
GROUP BY P.id_partido, L.id_lista, L.nro_lista, L.descripcion, P.descripcion 
ORDER BY 6 DESC;

Si bien en este caso no cambia el rendimiento ni el resultado, podría ser útil para otras elecciones en que las jerarquías de ubicaciones no tengan los mismos niveles de agrupación (por ej., hay provincias que podrían estar divididas por secciones electorales, municipios, comunas, departamentos, con mayor o menor de detalle, generalmente hasta el establecimiento y mesa)

Es interesante ver con el comando EXPLAIN el análisis del plan de ejecución de la consulta para detectar posibles optimizaciones , como podría ser agregar el siguiente indice:

CREATE INDEX planillas_det_id_cargo_id_idx ON planillas_det(id_cargo, id_planilla)


Funciones de Ventana con PostgreSQL:


Otra característica de PostgreSQL que puede ser útil en estos casos, son las funciones que calculan en base a una partición de los datos (similar a un agrupamiento).
Por ejemplo, para obtener la cantidad de votos por cada partido (además de la suma de cada lista interna), se puede agregar la expresión SUM(SUM(PD.votos_definitivos)) OVER (PARTITION BY L.id_partido) AS suma_partido  a la consulta anterior:

WITH RECURSIVE U(id_ubicacion, descripcion, clase) AS (
    SELECT UP.id_ubicacion, UP.descripcion, UP.clase 
      FROM ubicaciones UP 
     WHERE UP.id_ubicacion = 1
  UNION ALL
    SELECT UH.id_ubicacion, UH.descripcion, UH.clase
      FROM U, ubicaciones UH 
     WHERE UH.id_ubicacion_padre = U.id_ubicacion 
  )
SELECT L.id_lista, P.id_partido, L.nro_lista, L.descripcion, P.descripcion,
       SUM(PD.votos_definitivos) AS suma_lista,
       SUM(SUM(PD.votos_definitivos)) OVER (PARTITION BY L.id_partido) AS suma_partido
FROM U, planillas PL, planillas_det PD, listas L, partidos P
WHERE PL.id_ubicacion = U.id_ubicacion
  AND PL.id_planilla = PD.id_planilla
  AND PD.id_lista = L.id_lista 
  AND L.id_partido = P.id_partido
  AND PD.id_cargo = 2
GROUP BY P.id_partido, L.id_lista, L.nro_lista, L.descripcion, P.descripcion 
ORDER BY 7 DESC, 6 DESC;

Cuyo resultado es:


Agradecimientos y trabajo a futuro


Esta aplicación fue posible gracias a la colaboración de la empresa MSA y al grupo de trabajo de datos públicos / software libre del foro de la Agenda Digital, por haber hecho posible la publicación del código fuente y el acceso a los datasets respectivamente.

En el futuro posiblemente publicaremos un análisis más exhaustivo, extendiendo el apunte sobre optimización de consultas y estadísticas en el sitio del Grupo de Usuarios de PostgreSQL Argentina: http://www.postgresql.org.ar/trac/wiki/OptimizarRendimiento

Seguramente se presentará el trabajo en la próxima jornada PostgreSQL: PgDay Argentina 2013, donde se preparará un taller para experimentar con los datos, analizar el rendimiento y proponer mejoras.

viernes, 21 de junio de 2013

Software Libre aplicado en materias de Analisis de Sistemas y Redes Informaticas

Asignaturas Ciclo Lectivo 2013

Este año, en el Instituto Tecnológico Blaise Pascal estoy dando las siguientes materias, en las cuales usamos software libre como eje de los contenidos:
  • Bases de datos: Modelo Entidad Relación; Modelo Relacional; Lenguajes de de consulta (SQL y Algebra Relacional). Administración y Optimización. Herramientas: PostgreSQL
  • Sistemas Operativos: conceptos básicos e interprete (shell) GNU/Linux; Sistemas de Archivos. Procesos, sincronización e intercomunicación. Manejo de Memoria. Primitivas. Herramientas: Debian/Ubuntu y Python
  • Interconectividad (Redes):  Modelos de Referencia OSI. Ethernet. Pila de Protocolos TCP/IP. Sockets. Aplicaciones. Configuración y administración de routers y gateways. Herramientas: Debian/Ubuntu y Python (entre otras)
  • Práctica Profesional (proyecto final de carrera): Gestión de proyectos. Ingeniería de Software. Herramientas: Python, Mercurial, web2py, PostgreSQL
En las páginas respectivas podrán encontrar la información completa, incluyendo un resumen de la planificación anual, programa de contenidos, referencias bibliográficas, prácticas y modelos de examen.

Las materias corresponden a la "Tecnicatura Superior en Analisis de Sistemas" (Resolución Nº5817/03) y "Tecnicatura superior en Redes Informáticas" (Resolución Nº6164/03).
Junto a otras como Programación I y II dictadas por otros profesores, se inscriben en el Proyecto Curricular Institucional orientado al software libre, en el cual venimos trabajando desde 2010 entre docentes y directivos para organizar y profundizar los contenidos teóricos y prácticos.

"Bases de Datos" no ha sufrido modificaciones significativas desde 2009.
La materia E.D.I. 3, que daba desde 2009 a 2012, se unificó en "Práctica Profesional".  Aquellos alumnos que vayan a rendir el final, por favor contactar con la nueva profesora ya que deben estudiar los contenidos de este año.

Pueden ver algunos proyectos de "Práctica Profesional" del año anterior en el sitio de PyCon Argentina 2012 (Póster de trabajos estudiantiles) y en el repositorio público de la materia.

Referencias bibliográficas libres

La mayoría de los materiales de consulta utilizados son libre y abiertos, pudiendo citar principalmente:
  • Máster Universitario en Software Libre (Universitat Oberta de Catalunya): Si bien es una carrera de postgrado, los contenidos seleccionados son adecuados al nivel terciario y muy bien organizados. La modalidad "virtual" a distancia de la UOC ayuda a una estructura de los documentos simple y gradual, facilitando la lectura y práctica auto-dirigida por parte del alumno, para complementar y profundizar los temas presentados en clase. Además de los contenidos básicos, incluyen lecturas adicionales muy relevantes. Los materiales docentes y programas de estudio pueden consultarse en el sitio  UOC OpenCourseWare. Licencia del sitio: CC BY-NC-SA. Licencia de los documentos: GNU FDL.
  • Proyecto Alqua.org (editorial virtual libre): "Alqua es una comunidad dedicada a la recopilación de libros y material libre. En concreto, han publicado varios libros y manuales de física, matemáticas e informática, que se pueden descargar, modificar y copiar libremente". Los libros son más que nada apuntes de algunas materias, pero lamentablemente algunos han sido retirados por no estar terminados o corregidos. Licencia de los documentos: CC BY-NC-SA
  • Luis Miguel Armendáriz (Güimi): "Elaboración propia utilizando principalmente apuntes de trabajo, de distintas asignaturas universitarias, trabajos del profesor Montañana publicados en RedIRIS y artículos de la wikipedia (http://www.wikipedia.org)". Recopilaciones muy interesantes y completas para utilizar como material de consulta. Licencia del sitio y los documentos: CC BY-SA. Ver su página de documentación para el listado completo.
  • Latinux Press: "Consorcio de Cooperación Internacional que impulsa y desarrolla soluciones basadas en Software Libre y Tecnologías Abiertas". Traducción del libro de web2py al español.
  • Grupo de Usuarios de PostgreSQL Argentina: El sitio incluye una recopilación de articulos y traducciones del manual oficial, que fuí realizando en estos años para la materia Bases de Datos. Ver sección Documentación para más información.
Adicionalmente, los siguientes recursos también han sido útiles (aunque no son usados directamente en estas materias):

Temas a futuro

  • Traducción de la Documentación oficial al Español (Python y PostgreSQL principalmente, las man pages ya están traducidas -la mayoría...-): si bien el inglés es la "lingua franca" en estos temas de tecnología, sería importante tener los manuales oficiales traducidos, sobre todo porque las materias se dan al mismo tiempo que "Inglés Técnico" y por consiguiente puede llegar a ser una complicación, mas que nada si los alumnos usan la traducción automática de google que en la mayoría de las veces es muy imprecisa. En algún momento espero poder retomar la propuesta de internacionalización par Python como punto de partida, y volver a colaborar más activamente con las iniciativas de traducción existentes para PostgreSQL.
  • En el mismo sentido, sería interesante una adaptación de algunos materiales mencionados para el lenguaje Python, unificando los contenidos ya que actualmente estan basados en Java, C o Pascal. También sería útil completar algunos temas (como normalización de bases de datos), de los cuales todavía no se encuentra documentación libre y abierta en castellano. 
  • Python y PostgreSQL tienen herramientas y entornos de desarrollo simples como IDLE y PgAdmin3. Si bien son suficientes para presentar los contenidos de la tecnicatura, posiblemente sería conveniente mejorarlos aún más para que sean más simples y útiles para otros tipos de público. En este sentido, ver el proyecto rad2py en el que busco integrar de los temas de programación (y depuración y diseño de interfases), bases de datos y práctica profesional (repositorios, calidad, etc.). 
  • En paralelo, también estoy trabajando en proyectos como gui2py (fork renovado de PythonCard para desarrollo de interfases visuales), y en seguir mejorando web2py, ambos diseñados no solo para ser utilizados con fines educativos, sino también para brindar herramientas completas más amigables para aquellos que vienen desde otros lenguajes (PHP, Visual Basic, Delphi, etc.) y quieren dar sus primeros pasos con Python.

sábado, 23 de febrero de 2013

Novedades AFIP / ANMAT: WSLPG y TrazaMedV2

AFIP:


Liquidación Primaria Electrónica de Granos:


Esta en desarrollo la interfaz para el webservice WSLPG (Liquidación Primaria de Granos):
Operaciones de compraventa de granos no destinados a la siembra.
Régimen de emisión de comprobantes.
Norma conjunta Resolución General Nº 1.593 (AFIP) y Resolución Nº 456
(ex SAGPyA), Resoluciones Generales Nº 1.415, Nº 2.205 y Nº 2.485, sus respectivas modificatorias y complementarias.
Para más información ver:
Proximamente liberaremos un instalador y la documentación actualizada  (actualmente el servidor de AFIP parece no estar completamente funcional ya que devuelve '500: Error General de Aplicacion.') 

Certificados de seguridad:


Afip ha cambiado los certificados de seguridad de los servidores de producción (webservices):

Según la Especificación Técnica WSAA 1.2.2, la aplicación que consuma los webservices debe verificar el canal de comunicación seguro usando los CA (Certifiado de las Autoridades Certificantes).
Para ello se puede usar el transporte (wrapper) pycurl, usando el archivo de informacion provisto: afip_ca_info.crt (recientemente actualizado por este cambio). Más info en la documentación.

ANMAT:


Trazabilidad de Medicamentos: Especificación Técnica v2


Desde hace algunos días tenemos conocimiento y estamos trabajando en  una nueva versión del webservice de trazabilidad de medicamentos (TrazaMed), que  incluye los siguientes métodos (capacidades) nuevos:
  • SendConfirmaTransacc(..., p_ids_transac, f_operacion): Confirma la  recepción de un medicamento 
  • SendAlertaTransacc(..., p_ids_transac_ws): Alerta un medicamento,  acción contraria a “confirmar la transacción”. 
  • GetTransaccionesNoConfirmadas(...): Trae un listado de las  transacciones que no están confirmadas 
Esto se suma a SendCancelacTransacc, SendMedicamentosDHSerie y  SendMedicamentosFraccion que se habían agregado con anterioridad.

Pueden ver los nuevos cambios en la documentación:

http://www.sistemasagiles.com.ar/trac/wiki/TrazabilidadMedicamentos

Los ajustes iniciales al código fuente ya están publicados:

https://code.google.com/p/pyafipws/source/browse/trazamed.py

Según comentarios, esta nueva operatoria sería obligatoria a partir  del 1 de Marzo de 2013.

La próxima semana estaremos publicando una nueva versión de los  instaladores y ejemplos.
En cuanto tengamos más información ampliaremos comunicandolo por la lista de correo

jueves, 31 de enero de 2013

PyCon Argentina 2012: how-to y comentarios

Cerrando la organización de PyCon Argentina 2012, escribo esta entrada principalmente para sintetizar mis comentarios personales a las sedes que se han postulado para el 2013, y espero que sirva como resumen a modo de guía, por si alguno quiere organizar un evento similar (recordar que existe el reporte final y balance de la conferencia para mayor información, y pueden ver una entrada en mi blog previa sobre pyconus2012 para una perspectiva más detallada).

Objetivos: ¿PyDay o PyCon?

El principal punto es definir: ¿para que organizar una conferencia? ¿cual va a ser el público?

En principio, se puede organizar un evento "chico" por ej. un PyDay (jornada de Python de 1 día, usualmente de carácter local, sin invitados internacionales ni mucha más complicación). Esto es lo más recomendable para aquellos que nunca organizaron un evento, ya que es más informal, con menos responsabilidades y ayuda a afianzar una comunidad local con perspectivas a realizar un evento más grande.

Si bien los PyDays son muy interesantes, a mi criterio tienen ciertas limitaciones en cuanto a los recursos y posibilidades. Suelen ser una buena opción para los principiantes y aquellos que ya tienen una experiencia intermedia en el lenguaje, pero pueden no ofrecer la profundidad necesaria para los usuarios más avanzados. Por lo general, tampoco logran reunir participantes a nivel regional o nacional, siendo su ámbito de acción y posibilidades de difusión mucho más acotadas. Como además  generalmente son de 1 solo día, pueden no justificar el viaje para personas que viven lejos del evento.

Para ir un poco más allá, creo que se necesitan eventos más "grandes": por ej una PyCon (usualmente varios días de conferencias, entrenamientos y reuniones de desarrollo, para todos los niveles, desde nuevos usuarios hasta desarrolladores del lenguaje). Este tipo de evento tiene en general un carácter nacional, regional o internacional, usualmente nucleando un público más diverso (incluyendo disertantes internacionales), con mayor posibilidades y recursos. Las actividades técnicas se complementan con eventos sociales y turísticos (happy hour, fiestas, city tours, etc.)

Incluso armar eventos especiales en paralelo ayuda a traer disertantes, participantes y facilitar la organización. Por ej., este año, se armó una Jornada de PostgreSQL en paralelo a los Sprints: PgDay Argentina 2012. No solo se compartieron disertantes, sino que también un 25% de los participantes aproximadamente asistieron a ambos eventos.
Creo que es una idea bastante buena, sobre todo viendo que este año en PyCon US 2013 se organizan varios eventos en paralelo, como un PyPgDay y PyData
Tampoco habría que descartar participar en eventos mayores (conferencias de software libre o similares).

¿Por que se necesitan conferencias y entrenamientos más avanzados?


En diciembre pasado estuve en las de Jornadas de Agenda Digital, donde se planteó en un panel "Debate abierto sobre Software Libre en el Estado".
Uno de los disertantes, Jorge Linskens – Consultor quien fuera encargado de modernizar los sistemas informáticos de AFIP  – comentó que le fue posible implementar software libre porque tenia 4 "gurues de java". También señaló un caso negativo, donde la falta de soporte local hizo fracasar un proyecto, cuestionando que las ventajas del software libre se pierden si para solucionar un problema se debe contratar y traer un experto desde el exterior (con un costo de cientos de miles de dólares).
En el ámbito privado, se puede citar una búsqueda laboral de Intel, donde uno de los requisitos era la participación activa en Django, web2py, cherrypy o web.py (además de otros temas avanzados).

Esto no es algo nuevo o específico, recuerdo que en 2009, en la reunión informal luego de la conferencia PgCon Brasil 2009, comentaban sobre que las empresas estatales brasileñas solo contrataban "expertos" que hubieran contribuido fehacientemente al proyecto (o sea, haber enviado correcciones o mejoras que fuesen aceptados y listados en el historial de cambios).
Siguiendo esa linea, en dicha conferencia hubo varias charlas para fomentar nuevos desarrolladores, con una Sala VIP dedicada a estos temas avanzados, tratando como hacer extensiones o lograr que te aprueben un parche (esta última, muy motivadora, sobre todo la parte de experiencia personal del autor, remarcando que el esfuerzo de contribuir al software libre al principio puede ser abrumador, pero que a la larga se aprecian sus beneficios).

Además de fomentar el crecimiento de nuevos colaboradores, eventos de capacitación más avanzados posibilitan acercar la experiencia completa relacionada al software libre a mayor numero de interesados, quienes de otra forma tendrían que ir a los países centrales para conocer, capacitarse y conectarse con la comunidad internacional (cosa que, al menos desde Argentina, es algo económicamente costoso y hasta burocrático por el tema de visas y similares).

Por último, no olvidar que eventos más abarcativos posibilitan encontrarse con personas de distintos orígenes e intereses, y se generan interesantes discusiones, charlas, talleres o reuniones de trabajo no programadas que de otra forma serían dificil de concretar.
Esto se conoce como "Hallway track" (charlas de pasillo durante los intervalos),  y es uno de las mejores oportunidades que brindan estos eventos para socializar y conocer otros pythonistas.
Tampoco olvidar otras actividades menos formales como los espacios abiertos, sala de exposición, etc., que también ayudan a conectarte con disertantes, auspiciantes y público en general.

Disertantes Internacionales


Retomando el tema anterior, en Python Brasil 2012 (y por consiguiente, en parte también para PyCon Argentina 2012), se buscaron disertantes internacionales para facilitar la formación de nuevos "core developers". Con un eje avanzado y charlas en inglés, se buscaba atraer a la conferencia a otros disertantes y participantes internacionales. 

En general, los disertantes reconocidos pueden llegar a solicitar a su empleador que les cubra el costo del pasaje (uno de los gastos principales de este tipo de eventos). Esto hay que sugerirlo con tiempo, ya que sus jefes deben evaluarlo y hacer los tramites necesarios. En estos casos debe ofrecerse un reconocimiento como sponsor o similar, y garantizar que las actividades a desarrollar van a ser relevantes y justificarán el viaje.
Puede ofrecerseles alojamiento sin cargo, sobre todo para facilitarle la jornada a a aquellos disertantes con varias actividades, pero recordar que usalmente las grandes compañias también cubren la estancia en hoteles de mayor categoría a las que puede cubrir un evento de software libre en estas latitudes, por lo que se les puede recomendar un hotel oficial al que pueden cambiarse a su cargo si asi lo desean.
Si no se consigue cubrir estos gastos, se pueden solicitar fondos a la PSF para cubrir pasajes de avión de los invitados internacionales, y se evita el papeleo para recibir la transferencia internacional (ver Financiación y Sponsors abajo).

Recordar aclarar estos temas para que no haya malos entendidos, por ej. recibimos una contestación de un posible invitado que solicitaba le cubrieramos el pasaje, estadía y comida (esto es usual en otras conferencias, pero puede ser complicado en nuestro caso). 
También aclarar que la participación es ad-honorem, o sea, no se paga por las capacitaciones (a diferencia de, por ej. PyCon US, que paga alrededor de USD $1500 por presentar un tutorial).

Los disertantes internacionales pueden llegar a pedir sus vacaciones para poder venir (incluso con sus parejas), por lo que también debería ofrecerse alternativas turísticas para hacer más atractiva y amena su estadía.

También se puede explorar un "Tour" o gira de los disertantes internacionales, que recorran los diversos países de la región, como por ej. se hizo en "Gira Ruby Sur 2011". Proyectos similares para Python incluyen el "Python African Tour"

Por último, es recomendable contestar los emails en tiempo y forma (máximo 24hs), y proveer por anticipado detalles sobre la organización general (duración de charlas, slots, alojamiento y transporte, gastos aproximados -comida, bebida, etc.-). Estas son cosas que tienen en cuenta los disertantes internacionales, y la sola falta de respuesta puede afectar la seriedad del evento y hacer que desistan de viajar hacia la conferencia.

Revisión y Selección de charlas - Diversidad 


En principio, debe armarse un Llamado a ponencias, detallando las actividades que pueden ser propuestas. En general, luego se forma  un comité de selección de charlas que evalua las propuestas, pide aprueba/rechaza las propuestas y asigna los horarios (ver Llamado a Revisores)

El problema es que generalmente se reciben más charlas de las que pueden ser ubicadas en la grilla y surgen los inconvenientes. Lo fundamental es mantener la transparencia del proceso (para evitar decisiones que pueden ser consideradas "arbitrarias"), y posibilitar a los autores que realicen las correcciones necesarias antes de que sea demasiado tarde.
Lo ideal sería recibir un paper tentativo (documento usualmente de entre 10 y 25 hojas) para asignarle expertos y evaluarlo en profundidad, pero la realidad es que esto es bastante difícil para este tipo de conferencias de software, y lamentablemente la disponibilidad de expertos es limitada. 

Por eso, creo que una buena opción seguir abriendo la selección de charlas a la comunidad (y así también aumentar la participación de los futuros asistentes al evento). Para PyCon Argentina 2012 el público pudo votar sus preferencias, pero se limito la cantidad de revisores por temor a que el proceso se salga de control (sobre todo en las reuniones). 
Quizás se debería incluso simplificar aún más el proceso de revisión, para que más gente pueda revisar las charlas y así poder mejorar la calidad antes de la votación y selección final. 
Tanto EuroPython como PythonBrasil usan un sistema de votación totalmente abierto a la comunidad.

También debe balancearse las posibilidades de la organización, recursos, disertantes internacionales, etc. Por ejemplo, en EuroPython combinan las charlas de invitados internacionales y sponsors, en adición a las propuestas seleccionadas por la comunidad.

En este sentido creo que es fundamentar seguir políticas de diversidad que aseguren la participación de los distintos grupos y proyectos, generalmente minoritarios o emergentes, para que tengan cierta visibilidad, ya que si simplemente se evalúa su popularidad, quedarían excluidos por no ser "mainstream". Esta pluralidad favorece las interconexiones y compartir experiencias para enriquecer el software libre con otros casos de uso, soluciones y puntos de vista.

Además, recordar que en general se termina decidiendo en unos pocos minutos basado en un párrafo de texto y la experiencia del autor, por lo que los autores conocidos tienen más posibilidades. Por eso puede ser interesante reservar lugares para fomentar la diversidad, por ej en PHP tek13 comentan que: "el proceso de selección es altamente competitivo. Pero También, tenemos una política para asegurar que varias de nuestras charlas sean de nuevos disertantes, o al menos sobre nuevos temas, así que no dejes que la competencia te desanime."

Una medida para 2012 fue la de limitar a una charla por autor por track -eje- (en PyCon US se limita a dos charlas en total por cada autor), buscando mayor diversidad de temas y mejor calidad (ya que preparar más de una charla o repetirla la otros años puede ser contraproducente para el autor y la conferencia).
También se deben dejar algunas charlas de respaldo, ya que a último momento puede que algunos disertantes desistan de participar, y es útil tener un pack de charlas para reemplazar los espacios vacantes. Es recomendable que estas charlas de backup sean preferentemente de disertantes locales o conocidos para que la confirmación sea rápida y evitar mayores complicaciones y demoras.

Para resumir, cito a Diana Clarke -coordinadora general de PyCon CA 2012, y creo próxima de PyCon Norteamerica 2014-: "No necesitas apegarte a un sistema de votación estricto (que usualmente refuerza el status quo). ... Si quieres que el 20% de las disertantes sean mujeres: haz que ocurra! ... Si queres que el 20% de las charlas sean academicas: haz que ocurra! ... Si haces tu tarea, buscando grandes disertantes de grupos que de otro modo son poco representados, ninguno de esos disertantes seran "indignos". Obviamente, no debes solo poner tus amigos y auspiciantes sobre el escenario,  pero debes decidir como un equipo cuales son tus metas y trabajar hacia ellas" (ver mensaje completo en la lista de Conferencias)

Financiación y Sponsors

Para aquellos que quieran organizar una evento relacionado a Python, la Python Software Fundation tiene un Programa de Subvenciones, usualmente de 5.50 dólares por participante (aunque el importe final puede ser menor). Cabe aclarar que a partir de este año, la PSF requiere que la conferencia tenga un código de conducta.

Es recomendable hacer la solicitud los antes posible, recordar que estos tramites demoran por la transferencia internacional (hicimos el pedido el 4 de abril, lo aprobaron el 30 de abril, nos notificaron el 5 de mayo, lo depositaron el 11 de septiembre y se acreditó en la cuenta el 21 de noviembre, 4 días después de la conferencia...). Incluso hubo que presentar varios comprobantes en el banco para que habiliten los fondos. Otro auspicio internacional que se inició en Agosto, termino acreditándose el 22 de enero de este año (dos meses después de la conferencia).

Para este año se usó una propuesta de auspicio segmentada y diferenciada, siguiendo las bases del llamado a sponsors de PyCon US que distingue entre empresas grandes y pequeñas (menos de 25 empleados) con un descuento del 50%. Para sponsors previos se mantuvo el precio del año anterior, con un ajuste del 25% por el aumento de costos.

Viendo las dificultades que tuvimos para cobrar los fondos de los sponsors internacionales (incluyendo comisiones bancarias importantes, gastos de notarios por certificaciones y hasta una posible retención del 35% por impuestos de EEUU), quizás sería conveniente mantener la propuesta pero limitar los descuentos solo a empresas locales, excluyendo a las multinacionales que tienen otras posibilidades y generalmente contemplan los importes internacionales para este tipo de conferencias.
La mayoría de los sponsors fueron locales (empresas de desarrollo de software buscando programadores) y hubo varios por "canje" de productos o servicios.

Si bien haber tenido varias fuentes de ingreso ayudó a tener un flujo de caja más predecible,  igualmente hubo que cubrir algunos gastos (adelanto de la filmación y hotel) con dinero propio de los organizadores, hasta que se iban acreditando los ingresos.

Organización Formal


Es un tema para tener en cuenta, sobre todo si no se tiene una organización formal (asociación, fundación o similar) para manejar los fondos y se depende de terceros.
Armar una ONG o similar también ayudaría a los temas administrativos, con metas y responsabilidades más claras, facilitando armar planes de acción más concretos y perdurables.
Se debe encontrar un balance entre las necesidades y sugerencias de la comunidad, contrastándolo con las posibilidades reales, sobre todo si se arman debates o discusiones  que pueden ser constructivos pero si no aportan recursos para llevarlo a cabo (voluntarios, tiempo, fondos, etc.), suelen convertirse en un ruido no deseable.

Se pueden explorar otras formas, ver el manual de Big Kahuna (Python Brasil) para más información sobre modelos de organización comunitario, mixto o profesional (comercial). Se puede mencionar también que PyCon US es una conferencia comunitaria producida por la Python Software Fundation (ONG sin fines de lucro), pero también hay otras como DjangoCon que son producidas por empresas privadas, pero llevadas a cabo por la comunidad.
Si para organizar se colaborará con una ONG existente dedicada a promover el software libre, ver por anticipado que no haya problemas con los posibles sponsors (PyConUSPSF).

Entrada Gratuita, Bono contribución y Becas

La mayoría de los PyDays son de entrada gratuita, pero la mayoría de las PyCons son pagas. 

Por ej., PyCon US cuesta desde USD $100 para estudiantes, aprox. USD $350 para individuos, y hasta USD $750 para empleados corporativos (entre $500 y $3750 pesos argentinos, sin contar adicionales como los tutoriales, que se pagan aparte). 
Otros eventos más cercanos como Latinoware cuestan entre R$ 70 y R$ 110 (alrededor de $300 pesos argentinos al día de hoy).  PythonBrasil[8] costó entre R$150 y R$450 (de $400 a $1200 pesos argentinos al día de hoy). Los aranceles de las 41 Jornadas Argentinas de Informática arrancaron en $160 para estudiantes, $260 para docentes y $430 para los no-socios (realizadas por una ONG sin fines de lucro y en una Universidad Pública).

PyCon Argentina 2012 fue de entrada gratuita (costo = $0) para posibilitarle el acceso a la mayor cantidad de interesados, y se implementó un bono contribución opcional que tenía importes sugeridos entre $75 y $250 pesos argentinos (USD $15 a USD $50 dependiendo del tipo de cambio), principalmente para cubrir el costo de remeras, artículos promocionales y catering.
Si bien el logramos cubrir varios temas, faltó contemplar el almuerzo de los días de tutoriales y conferencias (jueves, viernes y sábado), lo que hubiera significado incrementar el costo en $150.- (el catering es uno de los temas más caros y complicados para organizar, pero es muy beneficioso para no dispersar a los participantes y facilitarles las actividades, sin estirar los horarios de almuerzo como nos ha pasado).

Para disertantes, hubo un descuento especial del 50% (por debajo de los costos) y los sponsors obtenían acreditaciones sin cargo dependiendo del importe de patrocinio pagado.

La categoría más económica de patrocinio, alrededor de $1000 para empresas grandes y $500 para empresas pequeñas, no tuvo ningún interesado y directamente fue eliminada. Por el contrario, hubo varias cooperativas y trabajadores particulares que aportaron con el bono contribución profesional (incluso más que el importe básico sugerido).

El bono contribución no solo ayudo a poder mejorar algunos aspectos de la conferencia, sino que también brindó efectivo para poder pagar las becas y otros gastos (parte de la filmación y temas menores) mientras estábamos esperando que se acrediten los importes de los sponsors internacionales.

Respecto a las becas, para ayudar a aquellos que no podían cubrir los costos de viaje, se simplificó el trámite (ver instrucciones), con un tope de $1500. El proceso de análisis y otorgamiento se simplificó para hacerlo más rápido y expeditivo.

Para cerrar este tema, dejo una cita mencionada en un artículo periodístico: "Universidad para algunos"  Revista Veintitres del 31-1-2012: “Quienes abogan dogmáticamente por la tradicional gratuidad generalizada no están aportando efectivamente a la vigencia de una nueva situación con más igualdad en la acumulación del capital humano, por la sencilla razón de que bloquean la posibilidad de un financiamiento solidario

Sitio web

Sobre este tema no voy a profundizar, ya que pueden leer lo escrito en el reporte final (postmortem) y en el blog ("Historia y como colaborar").
Solo voy a agregar que no es un tema menor, pueden ver que el sitio de PyCon US 2011 costó en principio USD 15.000 (ver http://www.python.org/psf/records/board/resolutions/) y tampoco fue exento de inconvenientes, luego de haber intentado un primer desarrollo comunitario, para pasar a uno más comercial.
Un consejo en este punto sería tratar de balancear los requerimientos, con un diseño más profesional, pero un desarrollo comunitario perdurable en el tiempo y reutilizable en otras conferencias.
Ver nuevamente el mail de Diana Clarke (que recomienda no construir algo nuevo solo por diversión), aunque recomienda el software web symposion basado en pinax, que creo es más complejo que web2conf, hecho en web2py y más facil de usar y mantener, el cual recomiendo ya que lo venimos usando estos años  ;-)

YMMV


viernes, 9 de noviembre de 2012

PyCon Argentina 2012 es la próxima semana!

¡La conferencia de Python comienza el próximo Lunes 12, y se extiende hasta el Sábado 17!

http://ar.pycon.org/2012

Por mi parte, más allá de los temas generales, estaré coordinando una reunión de desarrollo de PyAfipWs (acérquense si están interesados en el tema de factura electrónica) y presentando un poster sobre Rad2Py.

Otras reuniones de desarrollo interesantes incluyen "Core Python"  (para colaborar con el desarrollo del lenguaje) y "web2py" (marco de trabajo web para desarrollo rápido, fácil y simple). Hay muchas más reuniones y actividades, pueden ver lista completa de Proyectos para Sprints, Pósters y Charlas Aceptadas.

Este año también hay talleres y seminarios prácticos para sumergirse más profundamente en estas tecnologías  sin perder de vista las charlas para tradicionales y charlas "extremas" mucho más enfocadas en temas particulares, junto con un eje de Ciencia para usos de Python en Educación, Ingeniería e Investigación.

Las actividades especiales incluyen una Jornada Intensiva de PostgreSQL, un SugarDay y un Desafío "Aprendiendo a programar con Python y Robots".

Por último, no se pierdan los eventos sociales, ya que son una oportunidad única de conocer otros desarrolladores e interconectarse con la comunidad, en un ambiente más informal y ameno.

La agenda completa en: http://ar.pycon.org/2012/schedule

La entrada es libre y gratuita, la inscripción online cierra hoy (http://ar.pycon.org/2012/user/register), útil para evitar demoras y contratiempos, pero igualmente podrán acercarse e inscribirse manualmente en el sitio si lo desean.

Los esperamos

Licencia y Aviso Legal

CC BY-SACopyright (C) 2009 - 2013 Mariano Reingart reingart@gmail.com - Visite el sitio http://reingart.blogspot.com/ para novedades. Salvo indicación contraria, el texto de esta página está disponible bajo la Licencia Creative Commons Atribución Compartir Igual 3.0 Unported; podrían ser aplicables cláusulas adicionales.

Se solicita mantener el aviso de copyright (enlazando al texto original), compartir las obras derivadas bajo la misma licencia, y si es, posible comunicando al autor cualquier mejora. No utilizar logotipos ni marcas sin la debida autorización de sus titulares.

Toda información es proporcionada a Titulo Informativo y se entrega como está, sin garantías explícitas ni implicitas de ningún tipo, incluyendo sin limitación, pérdida de ganancias, interrupción de negocios, pérdida de programas u otros datos en sistemas de computación o cualquier otro reclamo. Al usarla acepta hacerlo bajo su propia responsabilidad, conociendo la normativa y reglamentaciones existentes. En caso de controversias respecto del presente, usted acepta presentarlas y resolverlas exclusivamente en la jurisdicción de los Tribunales Ordinarios Civiles y Comerciales del Departamento Judicial de Morón, Provincia de Buenos Aires, Argentina, renunciando expresamente a cualquier otro fuero que pudiere corresponder.