title: Python & JavaScript
slug: python-javascript
date: 2013-06-15
chapo: Compte-rendu des expérimentations faites pour la conférence Web-5

J'ai co-présenté avec [Vincent](http://vinyll.scopyleft.fr/) des [expérimentations utilisant Python et JavaScript](https://github.com/scopyleft/webfive-pyjs) lors de la conférence [Web-5](http://web-five.org/) qui se tenait à Béziers ces 2 derniers jours. C'était l'occasion de comprendre un peu mieux JavaScript et les *frameworks*/*bibliothèques* récentes dans les 2 langages et ça m'a presque réconcilié avec JavaScript. Au programme, il y avait :

* [Django](http://djangoproject.com/) & [React](http://facebook.github.io/react/) : une simple réalisation du tutoriel, peut-être l'exemple le moins intéressant (on ne l'a même pas montré faute de temps) mais le concept de mettre directement son html dans le js me rappelle les belles années de PHP :-) ;
* [Node](http://nodejs.org/) & [Brython](http://brython.info/) : ce qui était à la base un gros troll (JS côté serveur et Python côté client) s'est révélé être ludique puis prise de tête suite à mes déboires avec le *parsing* JSON de Brython qui est manifestement cassé à l'heure actuelle, en tout cas ça ne m'a pas donné envie d'aller creuser plus loin ;
* [RapydScript](https://bitbucket.org/pyjeon/rapydscript) : digne successeur de Pyjamas et déniché par Vincent la veille de notre intervention. La lisibilité du code JavaScript généré à partir d'un code utilisant des classes et de l'héritage côté Python m'a vraiment bluffé ;
* Python 3.3 avec [Tulip](https://code.google.com/p/tulip/) + [websockets](https://github.com/aaugustin/websockets) & [AngularJS](http://angularjs.org/) : pas grand chose à dire sur Angular si ce n'est qu'il intègrera vraisemblablement Polymer (voir la suite) dans une future version. Par contre l'utilisation de Python 3.3 avec les websockets a été douloureuse, surtout en raison de mon incompétence sur le sujet mais j'ai finalement réussi à faire tourner un exemple minimaliste ;
* [Tornado](http://tornadoweb.org/) & [Polymer](http://polymer-project.org/) : toujours un plaisir de servir des websockets avec Tornado, dans ce cas précis il renvoyait des données du CPU récupérées via [psutil](https://code.google.com/p/psutil/) pour tracer un graphe dynamique en temps-réel. La bonne surprise de toute la grappe de technologies utilisées c'est vraiment Polymer qui implémente les [Web Components](http://www.w3.org/TR/components-intro/) comme le fait [x-tags](http://x-tags.org/) par exemple mais en étant plus complet et en tentant de standardiser une certaine logique dans les *templates* pour avoir plus de flexibilité avec le *Shadow DOM* de manière native. **Si vous considérez votre application web comme une série de composants réutilisables et indépendants** (voir l'exemple du *dashboard*) **ça devient vraiment puissant !**

Vous retrouverez l'ensemble de ces exemples codés à l'arrache sur [le dépôt dédié à la session](https://github.com/scopyleft/webfive-pyjs) mais agrémentés d'un `README` dédié à chaque exemple qui devrait vous aider à comprendre. N'hésitez pas à bidouiller et à proposer vos améliorations !