[carlchenet] Liens intéressants Journal Du pirate semaine #12
[afpyro] AFPyro à Lyon - mercredi 25 mars
Un Afpyro aura lieu le mercredi 25 mars à partir de 19h au Gîte Numérique - 6 rue Saint Georges - 69005 Lyon.
Une présentation sur apetizer sera donnée par son auteur, et hôte de l’AFPyro, Nicolas Danjean. Apetizer est une librairie pour Django permettant de simplifier la création de vues, APIs, et notamment dans le cadre de création de wizards.
Pour se rendre au Gîte Numérique :
- en métro : arrêt Vieux Lyon - Cathédrale Saint Jean
- en bus : lignes C20 ou 31 arrêt Saint Georges ou Sala
- en vélo’v : stations Saint Jean / Cathédrale, Place Crépu
[sciunto] Don du mois : ipython et jupyter
Ce post s'inscrit dans la série des dons pour vous donner envie de contribuer même très modestement à des logiciels libres. Les petites pierres font les grands édifices.
C'est au tour de Ipython, une interface de type console et web pour python et d'autres langages. Le montant de ce don est de $6. Les raisons de ce soutien :
- Je l'utilise au quotidien avec Python, notamment pour les notebooks qui me facilite l'analyse et la visualisation de données. Ca a grandement amélioré mon travail.
- Ipython donne une réelle valeur ajoutée à python par une approche complémentaire pour résoudre un problème. En effet, je n'effectue pas un traitement d'images comme l'écriture d'une bibliothèque logicielle.
- Ipython a annoncé qu'il allait se découper en deux avec Jupyter, car Ipython gère aussi d'autres langages comme perl ou ruby. C'est donc un projet de très grande ampleur et qui a un fort potentiel.
- Plusieurs financements viennent aider le développement, ce qui permet d'avoir 6 développeurs à plein temps.
- L'intégration dans un navigateur en fait une solution facilement auto-hébergeable.
Pour donner à Ipython/Jupyter.
[logilab] PyconFR 2014 : jour 1, BDD, postgresql et asyncio
J'ai eu le plaisir de participer à la conférence PyconFR 2014, voici quelques notes sur les présentations auxquelles j'ai pu assister. Étant donné la longueur, je vais publier sous forme de plusieurs billets de blog.
BDD avec Behave
Le Behaviour Driven Develpment en Python peut se faire avec behave. Dans un premier temps on décrit en language "naturel" le test. Dans un deuxième temps on implémente les tests unitaires pour faire le lien avec la description behave, et on met les chaines de caractères dans un decorateur @given, puis @when puis @then.
Les scenarios behave sont utiles pour le dévelopement, pour la documentation, pour la formation des nouveaux arrivants et même pour faciliter la supervision des applications en production.
Les diapos de la présentation sont disponible sur slideshare.
Python + PostgreSQL
Stéphane Wirtle nous a présenté comment les relations étroites entre le monde de Python et celui de PostgreSQL.
Points à noter :
- FDW : Foreign Data Wrapper, dont voici une liste sur le wiki de PostgreSQL
- PL (Procedure Language) : PL/C, PL/Python, PL/v8, etc. pour étendre sa base de donnée. Les procedure language SQL sont par défault "trusted", les autres ne sont pas trusted par défaut. Dans CubicWeb, nous utilisons PL/Python pour la recherche plein texte et la lemmatisation du texte.
Pour ceux qui souhaiteraient essayer un ORM, Stéphane Wirtle conseille Peewee ORM.
Pour les migrations de schema SQLalchemy, Stéphane Wirtle nous conseille Alembic.
Parfois un ORM peut générer beaucoup de requêtes SQL et il y a de la place pour une optimisation en tapant directement du SQL. Pour évaluer la surcharge dûe à l'ORM, on peut utiliser pgBadger.
Support de présentation : https://speakerdeck.com/matrixise/python-and-postgresql-a-wonderful-wedding/
Un serveur fiable avec python 3.4
Après une petite introduction aux principes de concurrence, Martin Richard nous a présenté un retour d'expérience sur l'utilisation du module asyncio introduit dans python 3.4. Il permet de ne plus avoir à utiliser twisted ou gevent.
Les ressources et bibliothèques qui utilisent asyncio sont recensées sur http://asyncio.org/
objgraph permet de d'analyser des structures de données Python pour identifier des fuites memoire.
memoryview introduit dans python3.4 permet de faire "référence" à une structure de données sans la copier, ce qui peut être très pratique mais rend complexe la gestion de code.
Martin a utilisé @lru_cache pour mettre en cache les resultats d'un calcul en utilisant la politique de cache "Least Recently Used (LRU)".
Support de présentation : http://marti.us/t/pyconfr-2014/
Prochain épisode
Prochain épisode : 1ère journée pyconfr, frameworks web et gestion de source.
[logilab] PyconFR 2014 : jour 1, frameworks web et gestion de source
Suite de pyconfr 2014 jour 1 épisode 1.
Performance des frameworks web : Python vs the world
Ronan Amicel nous a présenté le travail de benchmark publié par TechEmpower. Ces tests et résultats sont forcement faux et biaisés, mais le code source des tests est publié en libre et il est donc possible d'apporter des corrections via le projet sur github
Pour l'instant, Python3 serait plus lent que Python2, mais on peut espérer que Python3 rattrape son retard, puisqu'il est toujours développé. La comparaison avec pypy est surprenante, celui-ci est bien plus lent, l'hypothèse étant qu'il est ralenti lorsqu'il parle au driver mysql. En revanche, pour le test pypy + tornado, les performances peuvent être meilleures que nodejs car tornado est écrit en pur python il peut être optimisé par pypy.
Dans le comparatif entre python et php, un acteur surprenant est phalcon qui a pris le parti de tout coder en C (plutôt qu'une partie seulement comme on peut le trouver dans nombre de projets python).
Support de présentation : https://speakerdeck.com/ronnix/performance-des-frameworks-web-python-vs-the-world-v1-dot-1
CubicWeb - Vos données ont du sens
Nous attendions avec impatience cette présentation, et Christophe de Vienne a très bien présenté CubicWeb, le framework web dont Logilab est à l'origine.
Après une courte introduction aux concepts du web sémantique (les URIS, les relations, le Linked Data), il a appuyé sur la nécéssité de donner du sens aux données que l'on stoque dans nos applications. Il a expliqué la finesse des réglages dans le moteur de permissions de CubicWeb.
Il a expliqué certaines fonctionnalités intéressantes selon lui dans Cubicweb :
- les hooks: équivalent des procédures stockées déclenchées par des triggers, ils sont écrits en Python et permettent de modifier des données en cascades, implémenter des règle de gestion ou générer des notifications.
- les adaptateurs : permettent de maximiser la réutilisation de code en adaptant une entité à une nouvelle interface
Selon Christophe, CubicWeb permet de développer une "base de donnée métier" strictement structurée, mais restant souple. Il a expliqué que l'interface par défaut n'est pas très sexy, mais qu'elle est néanmoins fonctionnelle comme backend d'édition.
Une petite introduction aux cubes qui sont les "plugins" ou les "extensions" dans le monde CubicWeb, ils contiennent :
- un schéma
- du code métier
- des vues
- des contrôleurs
Pour manipuler les données, CubicWeb utilise RQL, qui a été inventé avant SPARQL (langage de requête du web sémantique) et est plus pragmatique et lisible. Une fonctionnalité notable de RQL : plus besoin d'écrire des jointures SQL !
Finalement Christophe a conclu en présentant le mariage de Pyramid et Cubicweb. Selon lui, en regardant dedans, ils ont des philosophies communes. Le code permettant de développer une application Pyramid sur une base CubicWeb est publié sur la forge de CubicWeb. Christophe a aussi expliqué qu'il pousse des modifications pour que CubicWeb soit plus accessible aux développeurs habitués aux modes de développement "à la python".
Support de présentation : https://dl.dropboxusercontent.com/u/36590471/pyconfr-2014-pres-cubicweb/index.html
La gestion de version, ce problème tellement simple…
Pierre-Yves David (marmoute) nous a concocté un petit panorama des problèmes traités par les gestionnaires de source, avec des anecdotes de problèmes non-triviaux et quelques rappels historiques sur notre "science" informatique (merci les encodages!) Pierre-Yves s'est concentré sur les systèmes de gestion de version de "nouvelle génération", les outils décentralisés (hg, git, bzr). Forcément, étant donné qu'il travaille sur mercurial (et oui, celui écrit en python) il s'est concentré sur celui-là.
Quand il travaillait chez Logilab, Pierre-Yves a notamment rajouté à Mercurial la notion de changeset obsolete et de phase pour faciliter la revue de code et le travail en équipe.
Manipuler son code python avec RedBaron
baron et RedBaron sont des projets assez prometteurs (et assez dingues) de manipulation de code en utilisant du code (plutôt que des éditeurs).
Laurent Peuch est revenu sur les outils historiques du domaine : rope qui a pris la suite de bicycle repair man. Il y a aussi pyfmt par le même auteur, et autopep8 écrit par d'autres.
Un exemple qui m'a parlé : ajouter @profile sur toutes les fonctions d'un script devient faisable en 3 lignes de python, et inversement pour les enlever. À suivre...
Support de présentation : https://psycojoker.github.io/pyconfr-redbaron/presentation.html
Prochain épisode
Prochain épisode: jour 1, bus de communication, packaging et fin
[unlish] pip install -e / setup.py develop on a cube
The current layout of CubicWeb cubes is not setuptools friendly, and does not permit to use the "develop" mode. The CWEP 004, currently under discussion, aims to solve that problem, and once adopted make life easier for the developers.
Meanwhile, some people (like us at Unlish) would like to use the develop mode anyway, so that we can work on a cube without cloning the whole tree of CubicWeb requirements.
After a few experiments, it turns out we can tweak the virtualenv after pip install -e is run on the cube, and have the benefit of it.
The solution I describe below allows to work on both the cube and the unittests, importing from "cubes.thecube" and "cubes.anothercube" in a virtualenv. It can be applied to several cubes in the same virtualenv. It does *not* apply to the other cubicweb packages.
Problem 1 - the cubes path
Once pip install -e has been run the cube on which it was launched is not usable because it is not present in the cube path.We do not want to add the parent directory of our cube to CW_CUBES_PATH because:
- When importing from cubes.acube, and because "cubes" is not a proper namespace, we have issues
- The spirit of virtualenv is that where the project was checked out does not matter -> we do not want to put restriction on where it can be put in the filesystem.
Solution
From within the virtualenv :ln -s $(pwd) $VIRTUAL_ENV/share/cubicweb/cubes/thecube
Problem 2 - the python path
- pip install -e add our directory to the interpreter path. It is a problem because it pollutes the root namespace, it not masks some modules when the names match (for example in unlish we have a 'markdown.py' file).
- for some reason I did not identified, I could not import from cubes.xxx because the virtualenv cubes path is not added to the syspath like I expected it to (I may have done something wrong on this matter).
Solution
- Remove our directory from the virtualenv path
PTH=$VIRTUAL_ENV/lib/python2.7/site-packages/easy-install.pth
grep -v $(pwd) $PTH > .pth.tmp
mv .pth.tmp $PTH - Add the virtualenv cubes path to the python path
This last command has to be done each time the virtualenv is activated, it is recommended to add it to the 'activate' script, OR postactivate script if you are using virtualenvwrapper (which I recommend too).export PYTHONPATH=$VIRTUAL_ENV/share/cubicweb
Put it all together
The following script does all that for you, and has to be run after each run of pip install -e.Note that it will overwrite your postactivate script, set CW_MODE=user and define a 'ctl' alias, so you may need to modify it before using it.
#!/bin/bash
MYPATH=$(pwd)
MODNAME=$(python -c "import __pkginfo__; print __pkginfo__.modname")
if [ -z "$VIRTUAL_ENV" ]; then
exit 1
fi
if [ -n "$VIRTUAL_ENV/bin/postactivate" ]; then
cat >>$VIRTUAL_ENV/bin/activate <<EOF
. $VIRTUAL_ENV/bin/postactivate
EOF
fi
cat >$VIRTUAL_ENV/bin/postactivate <<EOF
export CW_MODE=user
export PYTHONPATH=$VIRTUAL_ENV/share/cubicweb
alias ctl=cubicweb-ctl
EOF
rm -rf $VIRTUAL_ENV/share/cubicweb/cubes/$MODNAME
ln -s $MYPATH $VIRTUAL_ENV/share/cubicweb/cubes/$MODNAME
PTH=$VIRTUAL_ENV/lib/python2.7/site-packages/easy-install.pth
grep -v $MYPATH $PTH > .pth.tmp
mv .pth.tmp $PTH
echo "Tweaked virtualenv $VIRTUAL_ENV"
echo "Don't forget to re-activate it:"
echo ""
echo " workon $(basename $VIRTUAL_ENV)"
To conclude, this is only a hackish workaround to wait for the real solution: reforming the cubes in cubicweb.
(this post was initially a mail on the cubicweb mailing-list)
[j-mad] Django 1.7 et écriture de tests, petites explorations
[carlchenet] Verify your backups… or lose them all
[carlchenet] Unverified backups are useless. Automatize the controls!
[carlchenet] On a une sauvegarde de la base de données ? Elle a 6 mois, inutilisable
[carlchenet] Liens intéressants Journal Du pirate semaine #13
[carlchenet] Liens intéressants Journal Du pirate semaine #14
[logilab] Retour sur la journée conteneurs dans le cadre de Open Source Innovation Spring
Logilab a co-organisé la demi-journée sur les conteneurs dans le cadre du Printemps de l'innovation open source (Open Source Innovation Spring). Voici une partie des choses qui y furent dites.
AlterWay a commencé par une introduction expliquant pourquoi docker est si hype en ce moment. Quelques bémols ont été placés sur les questions de sécurité et les systèmes de fichiers utilisés par défaut (AUFS n'est pas dans le kernel linux officiel, des alternatives sont à l'étude).
Une partie de l'écosystème autour de Docker a été mentionné :
Ensuite Normation a présenté la gestion de configuration et Docker, avec de grandes questions générales sur le déploiement de serveurs, leur durée de vie, leur transformation, etc.
Logilab a présenté l'utilisation conjointe de Salt Mercurial et Docker pour appliquer les bonnes pratiques du développement logiciel à la gestion d'infrastructures. Les supports de présentation sont sur http://slides.logilab.fr/osis/osis (aussi sur slideshare).
Normation a ensuite présenté les fondements techniques des conteneurs, à savoir les fonctionnalités du noyau linux qui ont permis leur essor. Petit historique sur les cgroups, avec les idées d'origine sur les processus dans Unix, mais aussi les bonnes idées apportées par Plan 9 (et qui ont ensuite été reprises par Linux). On a vu des choses sur les chroots, les namespaces, fakeroot, ip netns, les informations dans /proc/<pid>/ns, et les systèmes de fichier d'union utilisé par les conteneurs : aufs, unionfs, overlayfs, fuse.
Ensuite deux démonstrations ont été présentées :
- Utilisation de docker et docker-swarm sur amazon ec2 pour déployer une application html5 : CircleCI lit le dépôt git de l'application, construit l'image Docker et l'ajoute au hub puis pilote docker-swarm pour qu'elle soit déployée.
- Utilisation de plusieurs plate-formes de cloud (Azure, Numergy, CloudWatt) pour déployer un conteneur docker sur plusieurs clouds en parallèle.
Deux retours d'expérience par Theodo et Deliverous ont conclu la journée.
[AFPy Salt-fr] Annonce : Meetup Salt Paris chez tinyclues - avril 2015
Le meetup d'avril aura lieu dans les locaux de tinyclues au 1 rue du mail 75002, Paris, métro Bourse. Jeudi 16 avril à 19h.
Programme :
- L'utilisation de la nouvelle feature de chiffrage dans la 2014.7 par Ronan Amicel (Pocket Sensei)
- Présentation et utilisation de la Salt Mine par Damien DESMARETS (Weborama)
- Productizing and shipping Salt as a Private Cloud par Samuel Phan (DDN)
Le meetup est gratuit mais il faut s'inscrire (limité à 50 places) sur meetup.com.
View Larger Map
[carlchenet] Liens intéressants Journal Du pirate semaine #15
[tarek] DNS-Based soft releases
Firefox Hello is this cool WebRTC app we've landed in Firefox to let you video chat with friends. You should try it, it's amazing.
My team was in charge of the server side of this project - which consists of a few APIs that keep track of some session information like the list of the rooms and such things.
The project was not hard to scale since the real work is done in the background by Tokbox - who provide all the firewall traversal infrastructure. If you are curious about the reasons we need all those server-side bits for a peer-2-peer technology, this article is great to get the whole picture: http://www.html5rocks.com/en/tutorials/webrtc/infrastructure/
One thing we wanted to avoid is a huge peak of load on our servers on Firefox release day. While we've done a lot of load testing, there are so many interacting services that it's quite hard to be 100% confident. Potentially going from 0 to millions of users in a single day is... scary ? :)
So right now only 10% of our user base sees the Hello button. You can bypass this by tweaking a few prefs, as explained in many places on the web.
This percent is going to be gradually increased so our whole user base can use Hello.
How does it work ?
When you start Firefox, a random number is generated. Then Firefox ask our service for another number. If the generated number is inferior to the number sent by the server, the Hello button is displayed. If is superior, the button is hidden.
Adam Roach proposed to set up an HTTP endpoint on our server to send back the number and after a team meeting I suggested to use a DNS lookup instead.
The reason I wanted to use a DNS server was to rely on a system that's highly available and freaking fast. On the server side all we had to do is to add a new DNS entry and let Firefox do a DNS lookup - yeah you can do DNS lookups in Javascript as long as you are within Gecko.
Due to a DNS limitation we had to move from a TXT field to an A field - which returns an IP field. But converting IP to integer values is not a problem, so that worked out.
See https://wiki.mozilla.org/Loop/Load_Handling#Service_Soft_Start for all the details.
Generalizing the idea
I think using DNS as a distributed database for simple values like this is an awesome idea. I am happy I thought of this one :)
Based on the same technique, you can also set up some A/B testing based on the DNS server ability to send back a different value depending on things like a user location for example.
For example, we could activate a feature in Firefox only for people in Connecticut, or France or Europe.
We had a work week in Portland and we started to brainstorm on how such a service could look like, and if it would be practical from a client-side point of view.
The general feedback I had so far on this is: Hell yeah we want this!
To be continued...
[tarek] 5 work week tips
Our Mozilla work week just ended with an amazing evening. We had a private Mackelmore concert. Just check out Twitter with the #mozlandia tag and feel the vibe. example.
When they got on stage I must admit I did not know who Mackelmore was. yeah sorry. I live in a Spotify-curated music world and I have no TV.
At some point they played a song that got me thinking: ooohhh yeah that song, ok.
Anyways.
During some conversations a lot of folks told me that they where overwhelmed by the work week and har a very hard time to keep up with all the events. Some of them were very frustrated and felt like they were completely disconnected.
I went through this a lot in the past but things improved throughout the years. This blog post collect a few tips.
1. List the folks you want to meet
This one is a given. Before you arrive, make a list of the folks you want to meet and the topics you want to talk about with them.
Make that list short. 10, no more.
2. Do not code
This is the worst thing to do: dive into your laptop and code. It's easy to do and time will fly by once you've started to code. People that don't know you well will be afraid of disturbing you.
Coding is not something to do during your work weeks. If you need a break from the crowd that's the next tip.
3. Listen to your body
A work week is intense for your body. By the end of the week you will look like a Zombie and you will not be able to fully enjoy what's happening. If you are coming for a far place, the jetlag is going to make the problem worse. If you're a partygoer that's not going to help either. All the food and drinks are not really helping.
I've seen numerous folks getting really sick on day 3 or 4 because they had intensive days at the beginning of the event. It's hard not to burn out.
Some (young) folks are doing fine on this. I know I am not. What I did for the Portland work week was to skip everything on day 2 starting at 5pm, ate a soup and went to sleep at 8pm. Skipping on all the cookies and beers and goodies gives your body a bit of rest :)
That gave me the energy I needed for day 3.
4. Don't hang with your team all the time
You talk to those folks all the time. Meet other folks, check out other sessions, etc.
This is especially important if your native langage is not English. I got trapped many time by this problem: just hanging with a few french guys.
5. Walk away from meetings
Don't be shy of walking away from meetings that don't bring you any value. Walk out discretly and politely. You are not in a meeting to read hackernews on your laptop. You can do this at home.
People won't get offended in the context of a work week - unless this is a vital team meeting or something.
What are your tips?
[afpyro] AFPyro à Lyon - mercredi 26 novembre
Un Afpyro aura lieu le mercredi 26 novembre à partir de 19h à l’Antre Autre - 11 rue Terme - 69001 Lyon.
Cet apéro python sera l’occassion de rencontrer à nouveau les gens de l’AFUP/apéro PHP, autour d’une présentation sur Ruby. Ruby est un langage open source qui met l’accent sur la simplicité et la productivité.
L’Antre Autre est un lieu où nous pouvons discuter autour d’un verre, et, pour ceux qui le souhaitent, prendre un repas.
Pour se rendre à l’Antre Autre :
- en métro : arrêt Hôtel de Ville
- en bus : lignes C13 et C18 arrêt Mairie du 1er ou lignes 19, C14 et C3 à l’arrêt Terreaux
- en vélo’v : stations Place Sathonay, Carmélites Burdeau, Place de la paix
[AFPy-Nantes] Le meetup du 28 avril sera un barcamp
La prochaine rencontre Python Nantes sera au format BarCamp et se déroulera le mardi 28 avril, à la Cantine de Nantes.
L'idée est simplement de se retrouver et de décider sur place des sujets de discussions qui vous intéressent, de les aborder ensemble en différents groupes, puis de mettre en commun ce qui s'est dit pendant les ateliers.
Comme toujours ce meetup est ouvert à tous les amoureux ou curieux du langage Python, nous apprécions particulièrement la diversité des profils qui joignent à nous !
Ceux qui ont envie pourront prolonger la soirée autour d'un verre en centre ville de Nantes.
Si vous avez des questions ou des remarques concernant nos meetups, rejoignez-nous sur le chan IRC de l'AFPy Nantes ou inscrivez vous sur la liste de diffusion . Vous pouvez aussi nous suivre sur Twitter via notre compte @PythonNantes :)
À bientôt !
[afpyro] AFPyro à Lyon - mercredi 22 avril
Un Afpyro aura lieu le mercredi 22 avril à partir de 19h au Gîte Numérique - 6 rue Saint Georges - 69005 Lyon.
Balthazar nous emmène en balade coté backend et nous propose une visite guidée des différents types d’outils communément rencontrés dans le backend d’une application web Python (application et serveur WSGI, serveur web, base de données relationnelles et NoSQL, moteur de recherche, moteur de cache, tâches de fonds, etc...).
Les participants sont invités à ramener des boissons ou de la nourriture à partager.
Pour se rendre au Gîte Numérique :
- en métro : arrêt Vieux Lyon - Cathédrale Saint Jean
- en bus : lignes C20 ou 31 arrêt Saint Georges ou Sala
- en vélo’v : stations Saint Jean / Cathédrale, Place Crépu
Autres liens :