Posts Tagged ‘Libre’

Les micro-frameworks Python : Flask, Bottle, Itty, Newf, djng et importd

dimanche, août 21st, 2016

Suite au succès phénoménal de Flask, qui a plus d’étoiles sur GitHub que Django, et à celui remarquable de Bottle, j’ai poursuivi ma réflexion personnelle sur les microframeworks. C’est un sujet auquel je m’étais fortement intéressé en 2009, il y a 7 ans donc, lors de la soudaine prolifération de microframeworks Python.

Sinatra, l’inspiration vint encore du Ruby

Tout comme Ruby on Rails a été dès 2004 le grand précurseur des frameworks web MVC de nouvelle génération, Sinatra a été dès 2007 le précurseur des microframeworks web. Sinatra a rendu l’écriture d’application web radicalement plus aisée grâce à sa syntaxe claire et concise :

require 'sinatra'

get '/' do
'Hello world!'
end

WSGI, la condition technique

Le standard Python WSGI (Web Server Gateway Interface) décrit dans la PEP 333 de 2003, mise à jour en 2010 par la PEP 3333, a proposé une interface simple permettant de découpler les frameworks web des serveurs web.

Et l’ajout du module wsgiref dans la bibliothèque standard de Python 2.5 en 2006 a permis a tout framework d’être utilisable sans aucune dépendance grâce au petit serveur WSGI qu’il fournit :

from wsgiref.simple_server import make_server

Qu’est-ce qu’un micro-framework ?

En admettant que l’on sache ce qu’est un framework, on doit s’interroger sur le sens de micro. Le Larousse précise :

Préfixe, du grec mikros, petit, indiquant que quelque chose est très petit.

Un micro-framework est donc un très petit framework. L’intérêt de cette démarche est réel pour le développeur car il est plus facile d’apprendre à utiliser un petit framework, qui de plus consomme moins de ressources et impose souvent moins de contraintes.

Il est communément admis que ces microframeworks sont surtout intéressants pour construire de petites applications, la quantité de fonctionnalités des frameworks full-stack justifiant de plus en plus leur usage avec l’augmentation de la taille et des besoins de l’application.

Le moins de lignes de code possible

Un microframework est donc un framework ayant une petite base de code, c’est-à-dire un petit nombre de lignes de code. Encore faut-il qu’il en ait suffisamment pour qu’un développeur ait un intérêt à l’utiliser.

Le minimum nécessaire n’est pas forcément facile à évaluer, mais on peut penser qu’un framework comme Newf, avec ses 114 lignes de code, était très nettement en dessous. Itty, quant à lui, est très proche de Bottle en termes de design et de fonctionnalités, mais d’une manière globalement plus – et donc finalement trop – minimaliste.

Dans les deux cas, cela s’est révélé insuffisant pour susciter un réel intérêt chez les développeurs d’applications web et donc pour créer une dynamique et fédérer une communauté autour de ces projets.

Tout le framework dans un seul fichier

La théorie de l’ingénierie logicielle a combattu cette pratique au nom d’une meilleure structuration, permettant une bonne séparation des fonctionnalités et donc un débogage et une réutilisation plus facile du code. Pourtant, mettre tout le code dans un seul fichier présente certains avantages, en particulier quand il s’agit de le distribuer. C’est une pratique qui a connu une nouvelle légitimation avec le succès des bibliothèques JavaScript côté client, facilement chargées dans le navigateur web d’une simple ligne :

<script src="https://cdn.net/lib.js"></script>

Bottle est distributed as a single file module alors que Flask est plus classiquement composé de plusieurs fichiers. Flask, le plus populaire des microframeworks Python en est-il donc vraiment un ?

Essayons d’y voir plus clair à l’aide de wc récursifs appliqués sur les répertoire contenant le code source des frameworks, et desquels j’ai retiré le code des tests :

Micro-frameworksFrameworks
NomNewfdjngimportdIttyBottleFlaskTornadoPyramidDjango
wc -l1503287919584 1796 46922 32722 641122 675
sloccount1142305336322 7212 72511 53511 31277 514
Fichiers Python1142112181193853
Étoiles GitHub501234543743 87822 00711 9032 05920 717

J’ai ajouté au tableau Django, Pyramid et Tornado, les trois frameworks web Python les plus populaires, et il apparaît clairement qu’en comparaison Flask est bien un microframework, puisque s’il est 1,5 fois plus gros que Bottle, il est 3,5 fois moins gros que Tornado et Pyramid et 19 fois moins gros que Django.

Toute l’application dans un seul fichier

Lorsque l’on utilise les outils d’aide des frameworks classiques pour débuter un projet, on se retrouve devant une arborescence complexe. Par exemple avec Django, si vous évitez les bizarreries et faites les choses normalement :

$ django-admin startproject django_project
$ cd django_project
$ django-admin startapp django_app


django_project
├── django_project
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── django_app
│ ├── admin.py
│ ├── __init__.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
└── manage.py

De même avec Pyramid :

$ pcreate -s starter pyramid_project

pyramid_project
├── CHANGES.txt
├── development.ini
├── MANIFEST.in
├── production.ini
├── pyramid_project
│ ├── __init__.py
│ ├── static
│ │ ├── pyramid-16x16.png
│ │ ├── pyramid.png
│ │ ├── theme.css
│ │ └── theme.min.css
│ ├── templates
│ │ └── mytemplate.pt
│ ├── tests.py
│ └── views.py
├── README.txt
└── setup.py

Ceci est une bonne base pour un gros projet, qui sera bien structuré dès le départ, avec un bon découplage du code, et même les fichiers nécessaires à son packaging ; mais pour beaucoup de projets assez simples, c’est surtout lourd et redondant.

Tous les microframeworks ont donc comme point commun qu’ils sont conçus pour qu’une application toute entière contenue dans un seul fichier soit parfaitement fonctionnelle, et un certain nombre de frameworks qui ne prétendent pas être des microframeworks, comme Tornado, partagent la même approche.

Pas de dépendances… ou beaucoup de dépendances ?

Deux visions opposées peuvent en effet légitimement se défendre lors de la construction d’un microframework :

– pour avoir un framework léger il ne faut aucune dépendances, et se reposer exclusivement sur la bibliothèque standard de Python (Python Standard Library)
– pour avoir un framework léger il faut au contraire se reposer un maximum sur des bibliothèques existantes, fiables et populaires si possible, et se contenter d’offrir une fine couche logicielle permettant de les interfacer correctement

Newf et Itty font bien sûr partie de la première catégorie.

Bottle qui has no dependencies other than the Python Standard Library, et fournit son propre langage de template, fait donc aussi partie de la première catégorie. Mais on peut en plus lui interfacer facilement Mako, Jinja2 et Cheetah, des langages de template Python populaires, ce qui le fait alors déborder sur la deuxième catégorie.

Flask quant à lui est de la seconde catégorie, d’autant que son auteur est Armin Ronacher (mitsuhiko) qui est aussi l’auteur de ses dépendances Werkzeug et Jinja2. Mais si avoir comme dépendances une bibliothèque WSGI et un langage de template est on ne peut plus légitime pour un microframework, l’ajout de la bibliothèque d’interface de ligne de commande Click semble beaucoup plus contestable et relever plutôt du syndrome NIH (Not invented here).

Enfin, à l’initiative de djng, la seconde vision a amené à de multiples essais de microframeworks basés sur… Django, le maxi-framework du monde Python ! Et si seul importd a rencontré un certain succès parmi ces projets, je pense que cet oxymore logiciel est un concept vraiment intéressant et que son potentiel n’a probablement pas encore été totalement exploité.

Mise à jour du 10 septembre 2016 : Suite au commentaire de Stéfane Fermigier, ajout dans le tableau du comptage des lignes de code avec SLOCcount. Ajout de djng.

Mehdi Dogguy élu DPL pour 2016

dimanche, avril 17th, 2016

C’est Mehdi Dogguy qui vient d’être élu Debian Project Leader (DPL) pour l’année 2016, succédant ainsi au mandat de Neil McGovern, contre qui il avait perdu en 2015.

Mehdi Dogguy

Ce n’est bien sûr pas une surprise puisque Mehdi était le seul candidat, et qu’il n’y avait aucune raison valable de lui préférer “None of The Above” et ainsi de provoquer de nouvelles élections. Voici une représentation du résultat du scrutin qui utilise la méthode Condorcet :

Vote DPL 2016

Ce vote confirme cependant la place importante prise par la France dans le projet Debian ces dernières années, après les trois mandats de Stefano Zacchiroli et les deux mandats de Lucas Nussbaum.

Bravo à toi Mehdi, et bonne chance dans la mise en œuvre de ton programme !

Quel DPL pour 2016 ?

lundi, mars 14th, 2016

Le temps passe vite, et cela fait déjà presque un an que Neil McGovern a été élu Debian Project Leader (DPL). Chaque développeur Debian pouvait donc se porter candidat entre le 6 et le 12 mars à la suite du traditionnel appel à candidatures.

Dès le 7 mars, Neil exprimait le souhait de ne pas se représenter :

Just for avoidance of doubt, I do /not/ intend on re-standing for my post. I would encourage any candidates to put themselves forward.

Malheureusement, peu de développeurs semblent motivés par la charge de DPL comme l’exprimait Lars Wirzenius :

After some serious thinking, I’ve decided not to nominate myself in the Debian project leader elections for 2016. […] Why not run? I don’t think I want to deal with the stress. I already have more than enough stress in my life, from work.

et il n’y aura donc finalement qu’un candidat cette année :

La question de la légitimité d’un scrutin avec un seul candidat a été posée par Paul Wise, mettant en avant le fait qu’il ne s’agissait pas cette fois de renouveler sa confiance à un DPL déjà en poste comme c’était le cas de Zack en 2011.

Cependant, il est important de préciser que Mehdi avait fait un très bon résultat l’année dernière en finissant deuxième pour sa première tentative, et qu’il se positionnait ainsi comme un candidat très sérieux pour cette année.

Les presque mille développeurs Debian seront libres de voter du 3 au 16 avril lors d’un vote utilisant la méthode Condorcet.

Vous pouvez retrouver tous les débats de la campagne sur la mailing list debian-vote.

[MàJ] Txt2tags en JavaScript et avec Pandoc

vendredi, février 26th, 2016

Grâce aux nombreux efforts d’Eric Forgeot, il existe maintenant txt2tags.js, une implémentation de la syntaxe de Txt2tags en JavaScript avec une démo parfaitement fonctionnelle des possibilités de rendu côté client en temps réel.

Matthew Pickering a quant à lui écrit un reader Txt2tags pour Pandoc, ce qui permet d’utiliser votre syntaxe préférée avec cet excellent logiciel.

Ces deux informations ont été ajoutées dans le tableau de classement par syntaxe de Comparaison des langages de balisage (markup) léger (lightweight) : Txt2tags, Pandoc, Docutils, AsciiDoc, Deplate, Stx2any, AFT, Markdown et Textile.

Erlang passe sous licence Apache 2.0

mardi, octobre 6th, 2015

Le langage de programmation Erlang est passé sous licence Apache 2.0, à l’occasion de la sortie de sa version 18.0 le 24 juin dernier.

Au commencement un logiciel propriétaire, Erlang avait été libéré par Ericsson en 1998 sous Erlang Public License, une version modifiée de la licence Mozilla.

L’abandon total d’un Copyleft déjà faible me semble anecdotique dans ce changement de licence. En revanche, le passage d’un important logiciel libre d’une licence spécifique à une licence très populaire participe d’un mouvement de consolidation des licences de logiciel libre, permettant une compréhension plus claire des obligations y afférentes et donc une meilleure sécurité juridique.

Pour le choix d’une licence sans Copyleft, ou “permissive”, la licence Apache 2.0 est à recommander, tout comme le fait la Free Software Foundation, car elle est plus complète que ses concurrentes, en particulier concernant les brevets.

La consolidation des licences libres est une évolution positive à mon sens, et l’exemple d’Erlang pourrait peut-être inspirer Python ou d’autres logiciels libres ayant leur propre licence…

Neil McGovern élu DPL pour 2015

mercredi, avril 15th, 2015

C’est Neil McGovern qui vient d’être élu Debian Project Leader (DPL) pour l’année 2015, succédant ainsi au double mandat de Lucas Nussbaum, contre qui il avait perdu en 2014.

Neil McGovern

Neil devance Mehdi Dogguy, qui recueille un nombre de voix très intéressant pour l’avenir, et Gergely Nagy (déjà candidat malheureux en 2004, 2012 et 2013). Voici une représentation du résultat du scrutin qui utilise la méthode Condorcet :

Vote DPL 2015

Bravo à toi Neil, et bonne chance dans la mise en œuvre de ton programme !

Quel DPL pour 2015 ?

vendredi, mars 20th, 2015

Le temps passe vite, et cela fait déjà presque un an que Lucas Nussbaum a été réélu Debian Project Leader (DPL). Chaque développeur Debian pouvait donc se porter candidat entre le 4 et le 10 mars à la suite du traditionnel appel à candidatures.

Dès le 12 février, anticipant quelque peu sur le calendrier, Lucas avait exprimé le souhait de ne pas se représenter :

But I also think that switching release cycles is a good opportunity to align other changes, and starting a fresh release cycle with a fresh DPL might be a good idea. Put differently: no, I will not run for re-election.

Il y aura finalement cette année trois candidats :

Les presque mille développeurs Debian seront libres de faire leur choix du 1er au 14 avril lors d’un vote utilisant la méthode Condorcet.

Vous pouvez retrouver tous les débats de la campagne sur la mailing list debian-vote.

La CNIL dans MISC, la fuite des données sur Internet

jeudi, décembre 25th, 2014

Un petit peu au dernier moment, je voudrais signaler un excellent article dans le n°76 de novembre-décembre de MISC, le magazine français de référence concernant la sécurité informatique.

« Analyse d’une inscription en ligne : comment vos données fuitent sur Internet » a été écrit par Stéphane Labarthe et Benjamin Vialle, le principal développeur de MarkUs, un logiciel libre d’annotation de code et de travaux.

Tous deux sont contrôleurs au sein de la  CNIL, la Commission nationale de l’informatique et des libertés, et les exemples qu’ils donnent s’inspirent donc de situations bien réelles auxquelles ils ont été confrontés au cours de leur travail.

L’article a l’avantage d’être très didactique, donnant les outils et les méthodes pour inspecter soi-même le parcours des données personnelles et des cookies que l’on est bien obligé de transmettre sur Internet, par exemple quand l’on veut commander des cadeaux (en passant Joyeux Noël à tous !).

Et si à cette occasion l’on détecte des fuites de données inappropriées, on peut saisir la CNIL qui s’est vu attribuer des prérogatives de contrôle en ligne par la loi Hamon du 17 mars 2014, dont l’article 105 a modifié l’article 44-III de la loi Informatique et libertés.

 

 

Lucas 2.0

mardi, avril 15th, 2014

Lucas Nussbaum vient d’être réélu Debian Project Leader.

Comme on peut le constater sur ce graphe, il a obtenu 47 voix de plus que Neil McGovern :

Une analyse plus précise des votes permet d’en calculer une représentation plus “classique” du point de vue des habitudes électorales, et donc plus compréhensible pour la majorité des gens :

Lucas Nussbaum : 56,5%
Neil McGovern : 43,5%

C’est bien une large victoire de Lucas, mais aussi une défaite très honorable pour Neil, qui se positionne donc comme un prétendant sérieux à la victoire l’année prochaine.

Quel DPL pour 2014 ?

vendredi, avril 4th, 2014

Le temps passe vite, et cela fait déjà presque un an que Lucas Nussbaum a été élu Debian Project Leader (DPL). Chaque développeur Debian pouvait donc se porter candidat entre le 3 et le 9 mars à la suite du traditionnel appel à candidatures.

Dès le 13 février, anticipant quelque peu sur le calendrier, Lucas avait exprimé le souhait de se représenter :

As it has been done by other DPLs in the past, I think that it makes sense for the DPL to announce his/her plans way before the next DPL election.

So, let’s do that now: I will run for reelection.

Après ses précédentes tentatives infructueuses de 2004, 2012 et 2013, Gergely Nagy s’était représenté, mais il a finalement dû se résoudre à retirer sa candidature :

Due to unexpected events, my plans and life got turned upside down (for the better) in the past few days, and because of that, I have to scale down a number of things. Unfortunately, running for DPL is one such thing.[…] Therefore, after a lot of thought, I’m withdrawing from the Debian Project Leader elections of 2014.

Le seul concurrent de Lucas est donc finalement Neil McGovern. Le plus important est bien sûr de lire les programmes de chacun des candidats :

Les presque mille développeurs Debian sont libres de faire leur choix depuis le 31 mars et jusqu’au 13 avril lors d’un vote utilisant la méthode Condorcet.

Vous pouvez retrouver tous les débats de la campagne sur la mailing list debian-vote.