Article publié dans Linux Magazine 119, septembre 2009.
Copyright © 2009 - Sébastien Aperghis-Tramoni
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.
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 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.
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).
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.
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 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 :
base de données clé-valeur : Memcached, Tokyo Cabinet / Tyrant / Tokyo Distopia, REDIS
bases de données orientées documents : CouchDB, MongoDB
base de données orientées colonnes : HBase (Hadoop Database), Cassandra (mélange de Dynamo et BigTable), Hypertable
base de données orientées objets : Zope
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 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()
.
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 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 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.
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.
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 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 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.
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 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 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.
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 ;-)
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 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.
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.
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.
PyCON Fr 2009 - http://pycon.fr/
Les vidéos des présentations - http://video.pycon.fr/videos/
One Laptop Per Child - http://www.laptop.org
RNA Space, la plateforme d'analyse génomique et d'annotation des ARN non codants - http://rnaspace.org/
Martin Vidberg, Loi contre la téléportation illégale - http://vidberg.blog.lemonde.fr/2009/05/25/loi-contre-la-teleportation-illegale/
Copyright © Les Mongueurs de Perl, 2001-2011
pour le site.
Les auteurs conservent le copyright de leurs articles.