PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

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

dimanche 21 août 2016 à 01:31

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 que des frameworks comme Newf ou Itty n’en faisaient pas assez pour susciter un réel intérêt chez les développeurs d’applications web.

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">

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
NomNewfimportdIttyBottleFlaskTornadoPyramidDjango
Lignes de code1507919584 1796 46922 32722 641122 675
Fichiers Python12112181193853
Étoiles GitHub504543743 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, 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é.

Tweet

Gravatar de fgallaire
Original post of fgallaire.Votez pour ce billet sur Planet Libre.

Mathias : Comment sécuriser Firefox avec quelques paramètres dans about:config ?

samedi 20 août 2016 à 17:37

Il est essentiel de paramétrer finalement son navigateur afin de s’assurer un surf plus sécurisé. Je vais vous présenter les différentes options essentielles à modifier. Je n’aborderai pas l’usage de modules complémentaires (peut-être le sujet d’un prochain article).

Pour entrer dans la configuration avancée de Firefox, il suffit d’entrer dans la barre d’adresse about:config et de taper sur la touche d’entrée. Lisez bien l’alerte, puis validez (si vous êtes OK).

Firefox about:config

Puis vérifiez, les paramètres de security.tls.version afin que les valeurs soient celles-ci (min à 1 et max à 3):

security tls version firefox

security tls version firefox

 

Ensuite, modifiez :

N’oubliez pas de modifier les préférences par défaut afin d’éviter d’être pisté et d’accepter les cookies tiers inutiles.

Vous pouvez tester votre navigateur en utilisant ce site : https://panopticlick.eff.org

Je mettrai à jour cette page afin de tenir compte des évolutions de Firefox. N’hésitez pas à contribuer pour la sécurité de tous.

Historique de modifications de la page :

Autres articles à lire:

Cet article Comment sécuriser Firefox avec quelques paramètres dans about:config ? est apparu en premier sur Blog des télécoms - Par Mathias, expert et formateur rédigé par Mathias.

Gravatar de Mathias
Original post of Mathias.Votez pour ce billet sur Planet Libre.

Articles similaires

Mathias : Comment sécuriser Firefox avec quelques paramètres dans about:config ?

samedi 20 août 2016 à 17:37

Il est essentiel de paramétrer finalement son navigateur afin de s’assurer un surf plus sécurisé. Je vais vous présenter les différentes options essentielles à modifier. Je n’aborderai pas l’usage de modules complémentaires (peut-être le sujet d’un prochain article).

Pour entrer dans la configuration avancée de Firefox, il suffit d’entrer dans la barre d’adresse about:config et de taper sur la touche d’entrée. Lisez bien l’alerte, puis validez (si vous êtes OK).

Firefox about:config

Puis vérifiez, les paramètres de security.tls.version afin que les valeurs soient celles-ci (min à 1 et max à 3):

security tls version firefox

security tls version firefox

 

Ensuite, modifiez :

N’oubliez pas de modifier les préférences par défaut afin d’éviter d’être pisté et d’accepter les cookies tiers inutiles.

Vous pouvez tester votre navigateur en utilisant ce site : https://panopticlick.eff.org

Je mettrai à jour cette page afin de tenir compte des évolutions de Firefox. N’hésitez pas à contribuer pour la sécurité de tous.

Autres articles à lire:

Cet article Comment sécuriser Firefox avec quelques paramètres dans about:config ? est apparu en premier sur Blog des télécoms - Par Mathias, expert et formateur rédigé par Mathias.

Gravatar de Mathias
Original post of Mathias.Votez pour ce billet sur Planet Libre.

Articles similaires

Thuban : Utiliser anacron en tant qu'user sur OpenBSD

samedi 20 août 2016 à 10:57

Vous connaissez sûrement cron, qui permet de lancer des commandes de façon chronique. Il est très pratique pour réaliser des sauvegardes régulières par exemple. Cependant, il suppose que la machine est allumée 24h/24h, ce qui n'est souvent pas le cas pour un ordinateur de bureau.

Admettons que vous souhaitez sauvegarder vos documents tous les jours à 21h. Cependant, après une grosse journée de travail, vous allez vous écrouler dans votre lit à 20h30 avec les enfants. La sauvegarde ne sera alors pas réalisée. C'est ici qu'intervient l'outil anacron, qui détectera lors du prochain allumage de l'ordinateur que certaines tâches sont à effectuer.

Ce dernier est souvent utilisé en tant que superutilisateur. On rajoute dans ce cas les tâches à effectuer dans le fichier /etc/anacrontab puis on le lance à chaque démarrage avec une nouvelle entrée dans /etc/rc.local :

/usr/local/sbin/anacron -ds

Ce n'est pas très intéressant sur une machine de bureau où l'on peut vouloir lancer des commandes spécifiques aux utilisateurs (pour utiliser les clés ssh par exemple).

Voyons donc comment faire.

On crée un dossier ''~/.anacron'' dans lequel on crée le fichier ''anacrontab'' :

$ mkdir -p ~/.anacron/
$ vi ~/.anacron/anacrontab

On écrit dans ce fichier sur chaque ligne les tâches à lancer régulièrement :

# period  delay  job-identifier  command


# sauvegarde des cours
#    
1   10  educ /home/xavier/geek/bin/sauvegarde/synccours

# sauvegarde des documents
7   10  backup /home/xavier/geek/bin/sauvegarde/backup_home

#sauvegarde du serveur web
7   10  webbackup /home/xavier/geek/bin/sauvegarde/savewww

Notez qu'inscrire ''1'' en premier revient à écrire ''@daily'' pour lancer la commande chaque jour, et ''7'' à ''@weekly'' pour la lancer de façon hebdomadaire.

Afin d'avoir les droits de lancer anacron en tant qu'utilisateur et écrire dans la file d'attente, on peut s'ajouter dans le groupe ''wheel''. Il existe peut-être une meilleure solution, comme définir un emplacement de file d'attente différent que celui par défaut, mais je ne l'ai pas encore trouvé.

# usermod -G wheel jdoe

On donne les droits pour le groupe wheel d'écrire dans la liste d'attente :

# chmod g+xrw /var/spool/anacron

Enfin, pour lancer anacron à chaque démarrage, on peut mettre dans le fichier ~.profile ceci :

/usr/local/sbin/anacron -s -t ~/.anacron/anacrontab -d 

Cet article a été recopié sans vergone sur le wiki d'obsd4*

Gravatar de Thuban
Original post of Thuban.Votez pour ce billet sur Planet Libre.

Okki : Mise à jour du micrologiciel des contrôleurs de jeu 8Bitdo

vendredi 19 août 2016 à 15:07
Contrôleur de jeu 8Bitdo SFC30

Depuis quelques temps, Logiciels est désormais capable de mettre à jour, par le biais du projet fwupd, le micrologiciel des différents périphériques de l’utilisateur. Malheureusement, tous les fabricants n’utilisant pas les différents standards, tels que DFU pour les périphériques USB, il faut parfois faire de la rétro-ingénierie pour pouvoir implémenter les différents formats de fichiers et protocoles de mises à jour.

Après le Raspberry Pi ou certains modèles du fabricant Dell, c’est donc désormais au tour de 8Bitdo de voir ses périphériques totalement pris en charge. Lors de la publication d’une nouvelle version du micrologiciel, l’utilisateur sera notifié et pourra effectuer la mise à jour le plus simplement du monde. Ceux d’entre nous qui devaient autrefois disposer d’un Windows pour effectuer ce type de mise à jour, salueront l’avancée :p

Pour l’anecdote, à force de les harceler de questions, 8Bitdo a finit par publier les sources de ses outils de mise à jour Windows et macOS :D

Gravatar de Okki
Original post of Okki.Votez pour ce billet sur Planet Libre.