PyCON Fr 2009

Article publié dans Linux Magazine 119, septembre 2009.

Copyright © 2009 - Sébastien Aperghis-Tramoni

[+ del.icio.us] [+ Developers Zone] [+ Bookmarks.fr] [Digg this] [+ My Yahoo!]

Chapeau

[logo de la conférence]

Troisième édition du rendez-vous de la communauté Python, comme chaque année à la Cité des Sciences à Paris, les 30 et 31 mai 2009. Environ deux cents participants et une trentaine de présentations pour deux jours consacrés à ce langage.

Premier jour, samedi 30 mai

Avant le début, on prend une photo de la plupart des conférenciers avec Alain, le serpent en peluche qui fait office de mascotte officielle de l'association. Tarek Ziadé ouvre officiellement la conférence, annonce le programme, remercie les sponsors et laisse la parole à Stéphane Vincent, qui présente la société Alterway, spécialisée dans l'intégration de composants open-source. Il pense que la crise est une situation favorable pour les logiciels libres.

Kamon Ayeva - Comment Python va dominer le monde

Kamon expose quelques recettes pour améliorer la visibilité de Python, cite de vraies réussites basées sur ce langage (Plone, Django, LaunchPad, OLPC, Bungeni), et parle d'une initiative originale, le Python African Tour. Il s'agit de formations, financées par l'AFPy, d'une trentaine d'étudiants par session, dans différents pays africains. Après une première session au Maroc en décembre 2008, les prochains pays sont le Sénégal, la Zambie et le Nigéria.

[photo de Tarek Ziadé et Gaël Pasgrimaud]
Tarek Ziadé et Gaël Pasgrimaud.
photo par Alexandre Conrad

Victor Stinner - Contribuer à CPython, naissance et mort d'un ticket

Victor raconte comment sont gérés les tickets (rapport de bug ou demande de fonctionnalité) soumis sur CPython. Bien sûr, quand le ticket est accompagné d'un patch ou d'un programme de test, cela lui donne plus de chance d'être relu et traité. Entrer en contradiction avec une PEP conduit par contre à un refus rapide. Il note que la suite de test très complète de CPython (couverture à 90%) fait office de spécification validante du langage, et est pour cette raison aussi utilisée par les autres implémentations (Jython, PyPy, IronPython).

Olivier Lauzanne - PyQuery

PyQuery est une bibliothèque de manipulation des documents XML écrite par Olivier parce qu'il trouvait XPath trop lourd. Il s'est donc très fortement inspiré de jQuery et de son API CSS qu'il appréciait. Comme cela s'appuie sur lxml (libxml2), PyQuery peut aussi gérer du HTML.

Gaël Pasgrimaud - Skinner vos applications web avec Deliverance

Deliverance est un logiciel de proxying, conçu pour fournir une abstraction de l'apparence afin de l'homogénéiser sur des applications web hétérogènes. Les thèmes sont des descriptions, en XML, de règles basées sur les sélecteurs CSS pour identifier les zones à modifier. L'attribut pyref permet d'invoquer la fonction d'un module. On peut aussi utiliser PyQuery.

Deliverance est utilisé sur le site afpy.org pour que toutes les applications (Plone, Pylons, MoinMoin, etc) aient la même apparence.

Durant les questions, Gaël et Tarek précisent qu'il s'agit d'un proxy autonome, sans cache, basé sur PasteHTTP et lxml, ce qui lui permet d'avoir un faible impact (surcoût de seulement 4-5% sans utilisation de PyQuery).

Benoît Chesneau - Python et les bases de données non SQL

Benoît expose sa problématique : pour sa chaîne de restaurants créée en 1998, la difficulté est d'entrer les menus en base de données. Cela fait partie des données dénormalisées, de plus en plus nombreuses de nos jours, qu'il est difficile de faire entrer dans les modèles (UML) des bases SQL.

Après des rappels théoriques, il présente les différents types de bases de données non SQL et les moyens de les utiliser en Python :

Les questions permettent d'apprendre que CouchDB peut être accédé en mode non-ACID pour améliorer ses performances, que Zope peut maintenant s'appuyer sur une base SQL (autorisant ainsi la réplication). Benoît précise que l'utilisation de ces bases est typiquement lié au besoin de cohérence des données par l'application.

Gaël Varoquaux - Python scientifique

Gaël montre comment utiliser Numpy pour réaliser des opérations mathématiques avancées en Python. Il s'agit principalement de calculs matriciels, et comme il est de tradition dans ce domaine, il prend comme exemple la fameuse photo de Lena, qui est d'ailleurs directement disponible par la méthode lena().

[photo de Lena Söderberg]
Lena Söderberg. © Playboy

Il montre la gestion très efficace de la mémoire par Numpy, par exemple le slicing qui réalise des vues sur les matrices, sans copie, ou le broadcasting qui permet de réaliser des opérations multidimensionnelles de manière efficace et économe grâce aux grilles vides. Gaël résume Numpy comme fondamentalement une vue structurée sur la mémoire.

Un vrai plus de Numpy est matplotlib, un environnement interactif pour visualiser les données sur lesquelles on travaille. Il présente ensuite rapidement Scipy, une bibliothèque d'algorithmes de haut niveau.

Durant les questions, Gaël explique que le monde scientifique utilisant énormément l'API C de Python, le portage de Numpy et Scipy sur Python 3 ne sera terminé avant facilement 2 ans, la nouvelle API étant différente. La migration des applications sera encore plus longue et prendra plusieurs années.

Gaël précise qu'on peut utiliser Numpy avec des tableaux d'objets Python, mais seules les références à ceux-ci sont stockées. Utile pour bénéficier de la vue structurée de la mémoire fournie par Numpy.

Jean-François Cauche - Python au cœur du projet OLPC

Jean-François rappelle ce qu'est le projet OLPC, One Laptop Per Child, dont le but est de concevoir un ordinateur à 100 $ pour le distribuer aux enfants des pays en voie de développement et leur permettre ainsi d'accéder à une éducation plus complète.

Le projet étant d'origine nord-américaine, tout est actuellement conçu en anglo-américain. L'initiative OLPC France essaye donc de développer du contenu en français et d'autres langues.

Sugar est l'IHM écrite en Python pour OLPC. Elle est monotâche, sans bureau, entièrement à base d'icônes. Les applications libres usuelles sont disponibles (Firefox, AbiWord, bientôt OpenOffice for Kids). Un accent est mis sur la programmation avec Scratch, Squeak, Logo Pippy.

Jean-François précise que Python a été retenu par sa facilité et la possibilité que cela offre aux enfants de s'approprier l'ensemble du logiciel et de l'interface.

Michael Scherer - Mettez un python dans votre poche

Michael montre quels sont les moyens possibles pour avoir un interpréteur Python dans son téléphone mobile. En résumé, sur Android et iPhone OS, il faut violer la licence et cela reste très expérimental ; sur Windows CE il faut passer par COM, ce qui est infâme ; les mobiles sous Linux ont rarement des API intéressantes. Il n'y a guère que Symbian qui propose un vrai support Python avec une API complète. Fondamentalement, cela montre qu'il est inenvisageable de vouloir faire autre chose que des petits programmes personnels.

[photo de Marie-Josée Cros]
Marie-Josée Cros.
photo par Alexandre Conrad

Marie-Josée Cros - Développement d'une plateforme web d'annotation génomique

Marie-Josée présente un retour d'expérience sur l'utilisation de Python pour le développement d'un environnement web dans lequel un biologiste peut réaliser et exploiter des analyses. Celui-ci a juste à fournir une séquence génomique et paramétrer les algorithmes de recherche. Une fois les résultats disponibles, il peut les explorer en ligne, les annoter, visualiser les alignements.

Python a été retenu pour sa simplicité d'apprentissage car le projet a principalement été dévelopé par des non programmeurs (quoique deux connaissaient déjà le langage). Par contre, le choix initial de CherryPy, là aussi pour sa simplicité, pourrait poser problème avec l'évolution du projet.

Sylvain Zimmer - Twisted

Twisted est un environnement d'exécution asynchrone, stable et bien maintenu, particulièrement conçu pour écrire des applications réseau avec gestion de plusieurs connexions en concurrence. Il illustre avec des exemples : le programme synchrone, simple au début, devient rapidement complexe s'il utilise des threads, alors que son équivalent Twisted reste compréhensible.

Sylvain indique que Twisted est utilisé pour le site Jamendo sur les serveurs de dépôt et de téléchargement pour gérer des queues de téléchargement, créer un système de fichiers FTP virtuel, générer des archives Zip à la volée. Il signale l'extension twisted.manhole qui permet de se connecter au sein d'un processus.

Jean-Marc Pouchoulon - Piloter votre infrastructure virtualisée avec Python

Jean-marc explique que la virtualisation des systèmes conduit à leur prolifération, et il devient encore plus nécessaire de les inventorier de manière automatisée. Il présente les fondamentaux des API VMware, disponibles en Perl, Java, .NET mais pas Python. Il a donc utilisé IronPython pour piloter des machines via le Vi-SDK, puis le Vi-Toolkit, plus simple d'emploi, et récupérer leur état dans Resolver One, un tableur développé en IronPython.

Il signale l'API CIM Smash, disponible sur VMware ESX, qui ne permet que de l'interrogation en WBEM, mais fournit un module Python.

Carl Chenet - De la qualité dans un projet en Python

Carl donne des conseils pour bien gérer un projet en Python, d'abord assez génériques comme conseiller d'internationaliser au plus tôt avec gettext et d'utiliser dès le début un SCM (Git, Mercurial, Bazaar). Puis il présente les outils pour détecter statiquement les erreurs (Pylint, Pyflakes, Pychecker), les doublons (CloneDigger), les problèmes de sécurité (RATS). Il faut bien évidemment écrire des tests unitaires et conseille pour cela doctest pour valider les exemples de la documentation, fusil pour du test aléatoire sur les entrées, et Buildbot pour la compilation continue.

Second jour, dimanche 31 mai

Thomas Paviot, Jelle Feringa - PythonOCC, une plateforme de développement agile d'application CAO

Thomas explique l'utilisation croissante l'ingénierie numérique pour la conception des produits, le but étant d'éviter la réalisation d'un prototype physique, coûteux, pour utiliser à la place une version virtuelle. Les produits complexes (voitures, avions) sont constitués de milliers de composants différents, fournis par des centaines de sous-traitants utilisant des logiciels différents. D'où des problèmes d'interopérabilité.

Malheureusement, l'offre libre est très pauvre, et les logiciels propriétaires n'offrent que du scripting par VBA, et l'accès à l'API (souvent en C++) coûte cher. OpenCascade est la seule bibliothèque libre de niveau industrielle, mais elle est en C++. PythonOCC est le support Python/SWIG pour OpenCascade, mais fournit une vision de plus haut niveau par des modules additionnels (Twisted, Traits, support réseau).

Il illustre avec des écrans de logiciels de démonstration, comme Emmentaler qui perce des trous dans un volume, ou un couple client-serveur en XML-RPC, ce qui permet de déporter les calculs sur une machine différente de celle qui affiche. Il précise que le but n'est pas de concurrencer Dassault Systèmes, mais de répondre à des besoins de niche. De plus, il y a un vrai intérêt par des acteurs comme la NASA pour les logiciels libres et les standards ouverts, pour éviter de dépendre d'un seul acteur économique.

Gaël Varoquaux - Comment j'utilise Python pour chercher des modèles statistiques de l'activité cérébrale

[photo montrant la visualisation d'un graphe dans MayaVi]
Visualisation d'un graphe dans MayaVi.

Gaël explique que dans le cadre de l'IRM fonctionnelle, il fait face d'une part à des problèmes algorithmiques (normalisation des données sur un sujet moyen, définition de zones cohérentes et diagrammes de fonctionnement du cerveau) et d'autre part des problèmes médicaux (compréhension du fonctionnement du cerveau). Pour cela, il produit des algorithmes de manière interactive en s'appuyant très fortement sur les données.

Outre Numpy et Scipy, il utilise aussi Nipy (algorithmes de neuroimagerie), NetworkX (graphes et réseaux), et Matplotlib et MayaVi pour la visualisation.

Il regrette le syndrome du NIH (Not Invented Here), mais le logiciel représentant un genre de pouvoir, chaque laboratoire veut voir son nom attaché à sa création, là où il faudrait mutualiser les efforts et faciliter le déploiement chez les autres.

Nicolas Chauvat - CubicWeb pour publier DBpedia et OpenLibrary

Nicolas rappelle comment le web a évolué pour maintenant devenir sémantique, pouvant être vu comme une base de données globale dont les clés sont les URL, s'appuyant sur des formats comme RDF et OWL, avec le langage de requête SPARQL. CubicWeb s'appuie sur la modélisation des données et propose un langage de requête (RQL, mais l'intégration de SPARQL est en cours) pour proposer les résultats sous forme de vues.

C'est fondamentalement une méta-base de données, qui s'appuie sur les logiciels existants (SQL, LDAP, VCS, etc) et qui permet de mettre en relation des modèles disjoints. Les résultats sont ensuite rendus disponibles à la fois dans des formats de présentation (HTML) et sous forme de vues sémantiques (OWL, FOAF, SIOC, DOAP et autres microformats). Il montre un exemple d'application avec DBpédia, une base de données des infobox de Wikipédia.

Michael Scherer - Oubliez le SQL avec SQLAlchemy

Avec des images aussi subtiles que « l'ORM est à la base de données ce que la matrice est au monde réel », Michael rappelle les bases des ORM, et présente SQLAlchemy, un ORM en Python utilisé par le logiciel Trac ou les sites Reddit et Virgin Charter.

Il explique que SQLAlchemy permet de corriger les défauts qu'ont d'autres ORM, comme exécuter des requêtes SQL, voir le SQL généré, autoriser certains types spécifiques (PgInet). Au niveau des performances, les résultats peuvent être chargés au plus tôt ou au plus tard, suivant les besoins, et un pool de requêtes permet de mieux gérer la concurrence.

SQLAlchemy peut utiliser Pickle pour stocker des objets Python en base et intègre un support du sharding (répartition des données sur plusieurs bases) et un mécanisme pour faciliter la migration des schémas. Michael signale Elixir, une couche déclarative au-dessus de SQLAlchemy, qui permet des abstractions de niveau supérieur comme la gestion automatique du versionnement des objets.

Quelqu'un du public explique que les ORM sont pour lui un retour en arrière sur les bases de données objets, inventées il y a plus de 10 ans, et que du point de vue théorique, cela ne marche pas. Mais on lui fait remarquer que toujours du point de vue théorique, les langages dynamiques non plus ;-)

Gaël Pasgrimaud - Développement rapide avec FormAlchemy

Complétant la précédente présentation, Gaël présente FormAlchemy, qui permet d'automatiser la génération des widgets de formulaires web, en particulier grâce à des extensions qui vont chercher les informations dans les schémas de SQLAlchemy, CouchDB, Zope, etc, pour associer le type d'une donnée au widget à utiliser. Il supporte la validation des entrées avec affichage des erreurs en ligne et le dépôt de fichiers.

Victor Stinner - Comprendre les erreurs Unicode

Victor rappelle les notions fondamentales d'Unicode : un caractère est identifié par un code et représenté graphiquement par un glyphe. Le code se sérialise en octets.

En Python 2, le type str est en réalité une suite d'octets, et le type unicode permet de représenter des caractères (au sens Unicode).

    "abc"   # type str
    u"def"  # type unicode

    "abc" + u"def"      # u"abcdef"
    "ab\xe9"  +u"def"   # erreur

En Python 3, les types ont changés : bytes (b"...") remplace" l'ancien str et str remplace l'ancien unicode. Les syntaxes usuelles de déclaration de caractères (\xXX, \uXXXX, \N{name}) sont reconnues. Une bibliothèque io a été ajoutée pour gérer l'encodage sur les fichiers. Concernant le code source, l'encodage par défaut passe de ASCII pour Python 2 à UTF-8 pour Python 3.

Victor conseille bien sûr de décoder au plus tôt ses données, et de les encoder au plus tard, pour éviter les problèmes, et conseille chardet, un module inspiré de ce que fait Mozilla, pour une détection de l'encodage.

Distribution de cadeaux

La fin de la conférence se termine par une distribution de cadeaux sur un mode originale : les places sont numérotées et un programme doit tirer des numéros au hasard (en théorie). Seront ainsi distribués une quinzaine d'exemplaire du livre de Tarek Ziadé, Programmation Python, des t-shirts de l'association, deux badges « collector » et une impression en format A2 de la planche de Martin Vidberg sur « la loi contre la téléportation illégale ».

Olivier Grisel présente la future conférence OSDC.fr, co-organisée par les associations Perl, Python et Ruby. Tarek remercie tout le monde de s'être déplacé pour cette troisième conférence Python et espère voir un public aussi nombreux l'an prochain.

Conclusion

Cette première conférence Python m'a permit de découvrir un peu ce langage, ses utilisateurs (n'en étant pas un moi-même) et plus généralement sa communauté. Bravo aux organisateurs pour cette conférence réussie qui montre la progression de Python et de son utilisation dans des domaines variés.

Liens

Auteur

Sébastien Aperghis-Tramoni, Sophia.pm, <sebastien@aperghis.net>

[IE7, par Dean Edwards] [Validation du HTML] [Validation du CSS]