Retrospectiva a la #PyConEs2014 (1)


Este año he tenido la suerte de asistir a la PyConEs.

En este momento estoy en el tren de vuelta a casa. Con todo reciente, os contaré cómo lo he vivido yo.

¿Qué es la PyConEs?

La PyConEs, o Python Conference España, consiste en un ciclo de conferencias sobre Python que se convoca anualmente.

Este año ha tenido lugar en Zaragoza, contando con 3 tracks y 2 días de duración. Además, los horarios han sido duros, ya que las charlas terminaban muy tarde (sobre las 20:30), lo que ha permitido un gran número de éstas.

En esta ocasión el nivel de las charlas ha sido muy alto y, como siempre después de cualquier evento de este tipo, me gusta hacer un resumen, de manera que pueda compartir mis experiencias con vosotros y dejarme una "bitácora" para recordar en el futuro.

Como han sido tantas charlas, dividiré el artículo en varios, con el fin de que no sea tan pesado de leer. Así mismo, comentaré sólo las charlas en las que estuve, como es lógico.

No evaluaré las charlas de forma individual, pero al final del todo sí realizaré una evaluación completa del evento.

Charlas

Análisis de lenguaje natural

Ivan Compañy (@pyivanc) nos estuvo contando cómo hacen en MyTaste para procesar internet y encontrar todo tipo de artículos, filtrando aquéllos que están relacionados con la cocina.

Para ello utilizan la librería python NLTK (Nautural Language ToolKit), que ayuda en todo el difícil proceso del lenguaje natural.

Este proceso consta de un preproceso, que se divide en tres pasos:

  1. Normalización: Eliminar símbolos de puntuación, pasar a minúsculas, ...
  2. Tokenize: Separar los tokens del texto, de manera que sean unidades separadas de proceso.
  3. Tagging: Etiquetado de los tokens de estableciendo su rol en la frase: Nombres, verbos, etc.

Existen numerosos problemas aquí, ya que el tagging depende del idioma, una palabra puede tener distintos usos (se utilizarán probabilidades), etc.

Con el fin de entrenar el sistema, se utilizan distintos Corpus, que son textos preprocesados e identificados bien como válidos o inválidos (pero es conocido a priori). Permite seleccionar el tipo de Corpus a utilizar y el idioma: Libros, Textos políticos,...

A continuación se realiza el postproceso, que sirve para filtrar la información útil. Para ello se utilizan refinamientos sucesivos.

Finalmente recomendó el libro Natural Language processing with Python, de O'Reilly, por si queríamos profundizar más en el tema.

Method Dispatching Techniques

Salvador de la Puente nos estuvo contando distintas cosas.

Por una parte, el sistema de llamadas internas de Python, explicando la manera de preprocesar las invocaciones a métodos. Internamente, Python llama al método __getattribute__ para obtener cualquier elemento referenciado, y en caso de que devuelva None hace fallback sobre __getattr__. Si la operación referenciada era un set, enconteces se invocará también a __setattr__.

Esto tiene un problema: ninguna de las operaciones de búsqueda recibe los parámetros, por lo que no se pueden preprocesar.

Además, estas funciones mágicas sólo se pueden implementar a nivel de clase, nunca a nivel de instancia.

A continuación nos enseñó un par de librerías que se ha creado para wrappear clases, de manera que permitan resolver typos en nombres de atributos o restringir el uso de métodos "privados". He buscado ambas y no he encontrado el código; si alguien las encuentra, que me lo haga saber para linkarlas.

Pypy

Francisco Fernández nos habló de Pypy, ése gran desconocido.

Parece que Pypy es una implementación de Python rápida. Para conseguirlo, han analizado porqué es lento, y las causas son obvias:

  • Es interpretado
  • Los tipos dinámicos y el overflow dinámico
  • Todo es dinámico
  • Introspección

Así que escribieron un programa en RPython, que es un subconjunto de Python estáticamente tipado.

RPython tiene una arquitectura por capas, y requiere que el punto de entrada devuelva un entero, como C. Estas etapas son:

  • Leer el AST generado por CPython
  • Annotator: infiere el mapeo de tipos
  • RTyper: busca los tipos de destino más adecuados.
  • Optimización
  • Análisis
  • Generación de código

(CPython) da gusto; no parece ni C.

Pypy se basa en la ley de Pareto, ya que el 20% del código se ejecuta el 80% del tiempo. Por eso, a pesar de ser un intérprete de Python escrito en Python, permite optimizar la ejecución de otros programas Python.

Desgraciadamente, no puede resolver el problema del GIL.

Lighting talks

Compartir nuestros ipython Notebooks con el mundo

Nuria Pujol (@llevaNEUS) nos contó que ipython genera archivos Json que pueden subirse a sitios como Cloud SageMath, CoLaboratory o Wakary y así compartirlos con otra gente.

Así mismo, con nbconvert permite transformarlos a PDF, HTML o el formato que necesitemos.

Django Sample Data Helper

Jesús Espino explicó una librería que utilizan en Kaleidos para generar datos aleatorios en sus bases de datos para Django.

La librería se llama Django Sample Data Helper y permite generarlos parametrizando el idioma. Además dispone de un generador automático de imágenes, aunque también podemos proporcionarle un directorio con las imágenes a utilizar.

Realmente no está acoplada a Django, pero se puede configurar muy fácilmente desde este framework.

Muy útil para prototipar o generar datos para pruebas de estrés.

PyLadies: Y Eva dominó a la serpiente

Las chicas presentaron el grupo PyLadies, que junto con DjangoGirls y AgileGirls pretenden animar a otras chicas a seguir perfiles técnicos.

Realizan distintas actividades, como motivación en ciclos de FP, donde hay un alto grado de abandonos; "Chicas a programar"; "Hacker garden", que son sprints de contribución en proyectos de software libre.

Podéis seguirlas en @pyladies_es.

Fabric más allá de lo básico

Alejandro Enrique Brito nos contó sus experiencias con Fabric, usándolo en la administración de sistemas.

Si eres un fundamentalista de la orquestación, te pareceerá que Fabric es como de la edad de piedra.

Algunos trucos permiten un mejor uso, tal como crear módulos, ya que después se referencian las acciones como modulo.action, permitiendo agrupaciones.

Fabric puede utilizarse tanto en línea de órdenes, que es lo habitual, o como una bibilioteca. En este caso hay que tener cuidado, ya que Fabric mantendrá las conexiones y el programa no terminará; hay que forzarlas con disconnect_all.

Programación funcional con Python

Jesús Espino (@jespinog) nos mostró los puntos fuertes de los lenguajes funcionales:

  • Tratan los programas como meras funciones matemáticas.
  • Son funciones puras, es decir, que ante una misma entrada siempre se genera la misma salida. Esto se consigue gracias a la:
  • Ausencia de estado.
  • Inmutabilidad: Los objetos no se modifican nunca.

Los efectos laterales siempre deben quedar controlados y acotados.

¿Qué nos permite esto?:

  • Paralelización
  • Facilitar el tésting y el monkey testing
  • Reusabilidad
  • Depuración más fácil
  • Estado muy controlado

El principal requisito para la mayor parte de estas características es que el lenguaje trate a las funciones como ciudadanos de primera clase.

Para ello, los lenguajes funcionales disponen de:

  • Estructuras inmutables eficientes
  • Funciones de órdenes superior
  • Pattern matching
  • TCO: Tail Call Optimizations
  • Aplicación parcial y currying

Que pueden simularse con el uso de la librería fn.py.

Torque: Python y análisis de datos

Javier Santana nos contó cómo usan Torque en CartoDB para el procesamiento de datos.

Realmente... no contó nada. Nos contó que se habían digitalizado los datos de bitácora encontrados de todos los barcos, y se podían ver datos curiosos como la evolución de la temperatura de los océanos con el tiempo.

Para todo esto, utilizan mapas, que se componen de tails. Si se representaran todos los datos a la vez, sólo se vería ruido, así que tienen que eliminar redundancia.

Un 3% de muchos datos... son muchos también

Utilizan MathPlotLib y Tornado.

Los ciclos de datos de almacenamiento y recuperación son:

Lightning Talks

BrithonMagic

Kiko Correoso nos contó una extensión de ipython que ha escrito y que permite cargar Brython en un ipython notebook.

Brython es un compilador de Python a JavaScript.

Su presentación fue sue ejemplo, y podéis descargarlo de BrythonMagic

Continuous delivery para proyectos Python

Jaime Gil nos contó algo muy sencillo e interesante: que a la hora de probar un paquete Python, probamos todo menos su instalación.

Sin embargo, con una pequeña alteración en el archivo .travis.yaml podríamos probarlo igualmente:

python setup.py sdist
pip install dist/library.tar.gz

en lugar del típico:

python setup.py develop

Como véis, la idea es instalar el paquete para realizar las pruebas.

Usuarios finales y GitHub: Evitando versiones obsoletas

Victor Terrón tenía un problema: Tiene un colaborador, pero estaba utilizando una versión obsoleta del repositorio. Así que ideó un sistema para evitar esta situación: github_sync.

Lead rating

Miquel Camprodon e Israel Saeta nos contaron sobre los lead ratings, que consisten en información de un contacto que demuestra interés en uno de nuestros productos. Su empresa evalúa la propensión de cada lead a realizar una compra.

Para ello utilizan Seyren, Graphite y StatsD con un backend Whisper.

Continuará...

En cuanto saque tiempo, continuaré con la segunda jornada. Creo que ya ha sido suficiente para un único post.

Además, añadir tantos enlaces lleva su tiempo :D


Comentarios

Comments powered by Disqus