python-logo.gif p3_twitter.png
Los días 8,9 y 10 de Mayo de 2009 se ha desarrollado una conferencia de Python en Italia.
http://www.pycon.it
Había ciertas sesiones plenarias y otras que discurrían en tres sesiones paralelas: Descubrir Python, Difundir Python y Aprender Python.
Yo me apunté a la que me pareció mejor según la aplicabilidad en el trabajo y mi interés particular.
También hubo actividades sociales: una cena pyFiorentina y una pyBirra.

Viernes


Evento de apertura


A parte de las cosas logísticas necesarias, aparece Laura, del comité organizador de Europython, indicándonos que se se realizará la conferencia este julio en Birmingham.
http://www.europython.eu

Guido van Rossum (el inventor, en adelante GvR), A retrospective of how the community helped build Python 3.0

GvR está el 50% de su tiempo con Python y el otro 50% en GoogleAppEngine.
La versión 3 de python es incompatible con la versión 2 pero existe una herramienta 2to3.py que nos transforma el código.
Aunque en junio sale la 3.1 se espera una versión 2.7.
Nos cuenta toda la mecánica de cómo se aceptan las cosas que se van pidiendo, se basa en unos PEP: http://www.python.org/dev/peps
Habla también algo de las prestaciones y con un sencillo ejemplo, iterando con itertools, demuestra que se pueden acelerar bastante.
Para hacer la medida usa python -mtimeit xxx.py
También habla de twisted (ver http://www.twistedmatrix.com).

Alex Martelli (Google Inc.), Lo Zen e l'Arte della Manutenzione delle Astrazione

Hay una ley que dice que todas las abstracciones hacen agua. Nos cuenta ejemplos del porqué (como por ejemplo ta torre IP que no tuvo en cuenta la seguridad).
Un buen Softwarero debe poder estar considerando hasta 3 niveles de abstracción diferentes.
Al final, creo yo, es la inteligencia lo que vale, es tener la capacidad de pensamiento abstracto.
http://defcraft.blogspot.com/2009/04/notes-from-alex-martellis-talk-pycon.html
http://www.aleax.it/itpyc_abst.pdf

Sábado

Daniele Zambelli, La geometria interattiva con Python e pyig

Danielle nos demuestra lo que puede dar de sí la librería pyig presente en la librería pygraph.

Ariya Hidayat, Advanced Graphics Programming with PyQt

La verdad, tiene de todo esta librería, ¿por qué nos complicamos la vida con otras cosas?

Lorenzo Mancini, Grafica 3D con OpenGL su Python

Conceptos:
Vertex: (x,y,z) (r,g,b)
Polygon: v1, v2, v3 (triangolo)
Object
World
Camera


Steps:
   World Transformation (matrix operations) (x,y,z) => (x',y',z')
   Project on the screen (Projection) (x', y', z') -> (x", y")
   Fill polygons


Las tarjetas hacen polígonos desde1996
Las tarjetas hacen Transformation & lighting since 2000
Implementaciones Mesa e TinyGL funcionan solamente en la CPU
ICD (installable client driver)
Context memoriza el estado actual de la máquina OpenGL
wglCreateContext(Windows)
glXCreateContext(Xorg)
or use PyQt
PyOpenGL 3.0.0 released Apr2009
Autogenerated, array support: numpy, ctypes...
pyglet
Multimedia functions
less friendly
OpenGL.FULL_LOGGING
Performance:
OpenGL.ERROR_CECKING = False
OpenGL.ERROR_ON_COPY = True
from OpenGL.raw.GL import * => se complica un poco
2 modos de diseñar:
a)command based
b)array-based
a)glGenList(), glCallList ejecutamos una lista de comandos de golpe
Las listas se pueden anidar
b)Array of vertices, mucho detalle, VertexBufferObject estça en el HW:
vb = vbo.VBO(numpy.array(vertices,'f'))
vbo pueden ser hetereogeneous (color+vertex), son mutables
VBO en opengl > 3.0, not available on older hardware
OpenGL = Core + Extensiones
A veces estamos en v1.4 y tenemos VBO como extensión
from OpenGL.GL.ARB.draw_instanced import *
Reescibir en C la parte que queramos
Ver transparencia como hace los fuentes
Wrapper overhead (no hay mucho):
PyOpenGL 3.x 12fps
PyOpenGL 3.x raw 21fps
sipGL 50fps
cythonGL 50fps

Stefano Cotta Ramusino, Tecniche di scraping in Python

Lo básico para hacer scraping es usar las expresiones regulares: import re, es simple y potente. También puede usarse el HTMParser.
Habla también de Atom y RSS, dice que es el futuro, aunque yo no lo veo (o no lo entendí).
Pero hay otras librerías muy interesantes:

Beatiful Soup python puro, nos hace un ejemplo
mechanize perl
lxml de la www.org, se debe compilar
html5lib lo que usa el navegador opera
scrapemark algún problema...
pyquery acceso veloz al xml
scrapy incompleto
http://www.crummy.com/software/BeautifulSoup
http://www.whitone.tk

Raymond Hettinger, Easy AI with Python

En http://code.activestate.com/recipes/576647 aparece el código de cómo solucionar el problema de las 8 reinas.
Se hace uso de las permutaciones que nos ofrece la librería itertools.
Los problemas alfaméticos también se solucionan parecidamente y con muy pocas líneas de código.
El uso de redes neuronales para el Data-Minig parece super sencillo y muy útil: 496908
En una base de datos, los valores únicos de los campos son neuronas, las filas son conexiones y las columnas son conexiones inhibitorias. Total que unas 100 líneas de código en python modelan cualquier base de datos como una red neuronal.
from itertools import product, ésto lo usa para solucionar el juego mastermind.
Llama la atención también el motor bayesiano, http://www.divmod.org/trac/wiki/DivmodReverend, o buscar en google "reverend thomas python".
Utiliza from reverend.thomas import bayes
También podemos buscar por "hettinger puzzle" ern google.
Hay un resolvedor genérico de puzzles en http://users.rcn.com/python/download/puzzle.py

Fabio Rotondo, PyHP - The Python Hypertext Preprocessor

El PyHP es como el PHP pero para python, en una página html se incluye código python así:
<?pyhp
  código python: conexiones, post, get, cookies, session, uploads...
?>
Para que el servidor entienda ésto tenemos que intarlar el módulo PyHP al apache.
Esta gente también ha desarrollado un SCRUM project manager, poniendo toda la metodología en una aplicación web.

GvR, Google App Engine

¿Qué nos ofrece AppEngine?

Hay un helloworld para empezar
Usan bastante django
http://appengine.google.com

Domingo

Francesco Merlo, Grok: un megaframework web... per cavernicoli

http://grok.zope.org

GvR, Q&A Session

Preguntas que hacían los asistentes, como ¿por qué el print no era antes una función y ahora sí?. No tomé nota de nada porque no me parecieron muy trascendentales.

Lighting talks

http://www.appdate.it
http://www.freesoftwarepact.eu
http://www.softwarelibero.it

Fredrik Lundh, On improving the air-speed velocity of a Python

http://www.jaiku.com  Es un microblog en python
http://code.google.com/p/rietveld  Herramienta para revisión de código
El servicio de youtube es prácticamente al 100% en python.
Están trabajando para ver que hacer con el GIL (Global Interpreter Lock) que es lo que impide hacer uso de multicore / multiprocessor.
Lo primero, tunean la implementación actual (1Q2009).
Ahora mismo lo están probando con aplicaciones como Mercurial (que es un sistema de control de versiones python total), django y Spitfire.
Luego lo van a compilar en llvm
http://llvm.org
Ahora mismo se está usando el psyco.
http://psyco.sourceforge.net  Extensión para mejorar la velocidad.
Al final se va a generar mejor código con lo de desenrollar bucles y quizás liberarse del GIL.
unladen-swallow es el nombre del producto acelerado que están haciendo, para bajarlo:
svn co http://unladen-swallow.googlecode.com/svn

Alan Franzoni, Perspective Broker: Real Programming Comfort

Habla de un libro que se llama Foundations of Network Programming.
Habla de los @inlineCallbacks, que es el código instrumentalizado para hacer este middlware. Recalca que es síncrono y muy fácil de usar, que de hecho lo están utilizando mucho sin problemas.
http://www.lothar.com/tech/papers/PyCon-2003/pb-pycon/pb.html

Raymond Hettinger, Descriptor Tutorial

¿Cuál es la diferencia entre A.x y A.__dict__['x']?
Un descriptor es cualquier objeto que tenga un método __get__ o __set__ o __delete__ El dot provoca invocación, el __dict__ no. Nos cuenta lo que es un descriptor, una property y el tema del __getattr__ (ver ejemplo de máquina de estados). Nos cuenta la "magia" de todo esto con varios ejemplos.
Lo mejor es buscar el tutorial de descriptors de python y leérselo.
http://users.rcn.com/python/download/Descriptor.htm

Luca Mezzalira, Come far interagire Python con Flex ed AIR!

Flash Platform = Flash + Flex + Air + Flash Lite ...
Silverlight ba de baja (qué va a decir si es de la competencia de ellos).
FlexBuilder es el de pago pero no cuesta mucho, son plugins de eclipse.
MXML = Macromedia XML
Para empezar con Flex, ver el "Tour de Flex"
Action Script 3 = AS3, es el lenguaje de scripting que se usa, si alguien me pudiera decir la diferencia con mxml...
AS3 es fácil para la gente que ya sabe java.
AS3 se puede utilizar con Flash.
¿Para qué sirve FLEX? Rapid prototyping, Rich internet applications, SW ligado al mundo de la empresa.
AIR pasa a Desktop lo que es para web (Flex / Flash / AS3 / Html / CSS / Ajax / PDF).
AIR tiene un runtime que se debe cargar (como pasa con el flash player).
Hay 4 posibilidades de integración: XML, Webservice, Socket y PYAMF. Nos enseña un ejemplo con sockets con una openSocketConnection en mxml.
Comenta que el futuro es el flashcatalyst.

Otros Enlaces

http://www.python.org
http://www.djangoproject.com/

Conclusiones

Los ponentes eran los de primer nivel en Python, desde al propio GvR hasta quien creó la librería de imágenes PIL o las itertools, o quien escribió el libro gordo de Python de O'Reilly (Alex).
Lo que he hablado personalmente con ellos me corrobora lo que ya sabía: que python se creó pensando en la rapidez del programador en conseguir los resultados.
Hay otros lenguajes interesantes, pero las librerías como numpy hacen destacar a python.
La respuesta a la pregunta de que hay que hacer para organizar una conferencia de python en España es: 5 o 6 voluntarios y empezar a ayudar a la organización de europython.