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).
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
Danielle nos demuestra lo que puede dar de sí la librería pyig presente en la librería pygraph.
La verdad, tiene de todo esta librería, ¿por qué nos complicamos la vida con otras cosas?
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
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 |
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
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.
¿Qué nos ofrece AppEngine?
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.
http://www.appdate.it
http://www.freesoftwarepact.eu
http://www.softwarelibero.it
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
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
¿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
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.
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.