[Python] — Google met à jour son « Style Guide Python »

Google met (enfin…) à jour son style guide Python!

Pour celles et ceux qui lisent un peu ce site ou le livre que j’ai écrit sur Raspberry et Python, ils ont conscience que de l’importante d’avoir un code python cohérent et respectant quelques règles.
La recommandation PEP 8 qui regroupe un ensemble de consignes de formes permet d’avoir un code lisible par la plus grande partie des développeurs Python, qu’ils soient débutants ou experts.
Une autre de mes sources favorites quant aux bonnes pratiques à adopter est le google « Guide Style » qu’on trouvait anciennement ici : liens.

Les « guide style » de Google sont un regroupement d’instruction sur les bonnes pratiques à adopter selon le point de vue du géant de Mountain View pour la rédaction de code informatique. Il est à noter que les « guide style » ne sont pas seulement dédiés au langage Python, mais il en existe pour de nombreux langages, on peut par exemple citer C++, javascript…

Comme indiqué, quelques lignes plus hautes, les instructions et les exemples contenus dans les fiches permettent d’avoir une certaine cohérence lors de la création de code qu’on travaille en équipe ou seul. Pour vous illustrer ce qu’on y trouve, voici un exemple pour le nommage des différents éléments :


module_name,
package_name,
ClassName,
method_name,
ExceptionName,
function_name,
GLOBAL_CONSTANT_NAME,
global_var_name,
instance_var_name,
function_parameter_name,
local_var_name.

Function names, variable names, and filenames should be descriptive; eschew
abbreviation. In particular, do not use abbreviations that are ambiguous or
unfamiliar to readers outside your project, and do not abbreviate by deleting
letters within a word.

Always use a .py filename extension. Never use dashes.


C’est exactement le genre de convention que j’utilise lorsque je développe et lors d’une hésitation, je n’hésite pas à utiliser le Style Guide.

Bon bref… Ce billet n’est pas là pour vous convaincre du bienfait de ce genre de recommandations, mais plutôt pour vous informer que Google après de nombreuses années sans activité a mis à jour ces dépôts et que l’URL du « Style Guide Python » a changé. Vous pourrez donc le retrouver ici : liens vers le repo.

En ce qui concerne le contenu et l’organisation, la structure a l’air d’avoir changé un peu et l’on trouve de nouvelles recommandations liées aux évolutions des versions de Python 3. Vous pouvez donc avantageusement mettre à jour vos bookmark!!!

Kernel panic-not syncing ->| votre RPI n’a surement pas assez de jus

Kernel panic-not syncing

Kernel panic-not syncing, tous les utilisateurs de système Linux ont eu un jour ou l’autre cette erreur et en général ça sent la galère. Quand ça tombe sur le premier boot de votre Framboise, c’est un peu les boules!

L’erreur!

Kernel panic-not syncing: VFS: unable to mount root fs on unknown- block(179,2)

C’est la vieille erreur que m’affichait mon tout nouveau raspberry lors de son premier démarrage…
Première réaction : « Eh merde! fait chier… »

Bon on tente de rebooter. Et là même sanction : Kernel panic-not syncing… « Argh… »

Bon direction l’amis Google qui renvoie vers des posts de stackoverflow ou stackexchange ainsi que vers le forum de la fondation raspberry. Voilà ce qui m’a débloqué :

La solution

Bon si vous prenez le temps de parcourir les liens ci-dessus, vous verrez que’ comme moi en première lecture, il n’y a pas grand-chose qui semble apporter de solution…

Mais lors d’une deuxième lecture, après quelques séries de jurons qui feraient rougir le capitaine Haddock, trouve comme piste commune de ma bibliographie que la seule chose qui peut expliquer le problème est sans doute un problème électrique.

Je lis explicitement que la carte SD ne peut démarrer avec une alimentation de bonne qualité!

Alimentation? Bonne qualité? Euh, j’utilise quoi au juste???

Euh un vieux bloc d’alimentation de téléphone portable et le câble USB qui va avec… « Oh le con, à tous les coups, je ne peux pas tirer assez de jus dessus ou le signal est mal mis en forme! »

–> changement pour un un bloc d’alimentation qui délivrer jusqu’à 5A et la ça boot… « grrr… Les boules… »
Bon je ne sais pas si ce sera utile à quelqu’un, mais en cas de « Kernel panic-not syncing » sans réelle raison et bien jetez un oeil du côté de votre alimentation de Raspberry Pi.

[Astuce vim] : vim copier coller sans problème d’indentation

vim copier coller illustration

[Astuce vim] : vim copier coller sans problème d’indentation

Pour l’utilisateur vim et pour le développeur le copier coller sous Vim est au départ un peu pénible. En effet, si vous venez de n’importe quel autre système d’édition, il est très courant de copier-coller des bouts de code source pour pouvoir les tester rapidement.

Malheureusement si vous faites un ctrl-C à l’endroit de la copie et un CTRL-SHT-V dans vim en mode insertion, vous obtiendrez bien un copier-coller mais l’indentation du code initiale sera complète détruite.
Pour le développeur python, c’est une catastrophe puisque l’indentation permet de délimiter des blocs de code comme les fonctions, les classes, les boucles ou encore les tests conditionnels.

Il existe cependant une astuces pour permettre ce genre de manipulation.

En effet, il suffit d’activer le mode paste avant de réaliser l’action de collage. Pour activer ce mode il faut saisir l’instruction suivante :

:set paste

Attention à cependant désactiver ce mode après avoir fini votre ou vos séries de copier-coller. Pour cela, rien de plus simple, il faut saisir l’instruction complémentaire :

:set nopaste

Utilisation un peu plus automatiser

Enfin, on peut rendre l’usage un peu plus ergonomique en ajout un ajoutant un bouton qui permettant de basculer et de revenir de ce mode. Pour cela, il faut ajouter à votre fichier .vimrc, la ligne suivante :

set pastetoggle=<F2>

Dans ce cas, la pression de la touche F2 me permet de basculer ou revenir de ce mode Paste.

Démo en vidéo

Le vidéo ci-dessous, vous montre un screencast la manipulation a effectué pour avoir un copier-coller propre après vous avoir montrer les limites d’un système de base.

?
Alors est ce que ça palie à vos problèmes de vim copier coller?

Pour aller plus loin

Mes fichiers de configuration dont le vimrc sont disponibles sur github

Source

Les informations proviennent de cette questions visible sur stackoverflow : visible ici

UART USB : un port série supplémentaire pour mon Raspberry Pi

UART USB RPi

UART USB : un port série supplémentaire pour mon Raspberry Pi

Votre Raspberry Pi possède quelques soit sa version un port série.
Ce port permet de prendre le contrôle de votre Raspberry Pi mais, ça reste une utilisation marginale.
En effet, ce port est à coup sûre plus utile dans les communications entre processeurs et d’autres microcontroleurs que ce soit des arduino ou des micro plus classiques comme les ARM.

Cependant si vous utilisez le port série de votre GPIO, cela vous prive de 2 broches IO de votre Framboise.
De plus, co porte peut ne pas être disponible. En effet, si vous utiliser un Hat, votre port GPIO n’est plus aisement accessible.

Pourtant, il existe des solution simple.

Le port RS232 n’est plus accessible! Une solution simple

En effet, des modules complémentaires à brancher existent. Il suffit les brancher sur le port USB pour transformer votre pour USB en un port RS232 virtuel.
On nomme ces modiles UART – USB.
Dans mon cas, j’utilise un modèle à moins 10€ qu’on peut trouver sur amazon.
Ce module m’est utile pour debugger la sortie RS232 d’un ARM (STN32L432KC), plus particulièrement ça me permet de voir si les données envoyées sur le port RS232 sont bien celles attendues.

UART USB RPi

Je vais vous montrer comment réaliser cette tâche.

Mise en pratique

Vous allez voir, c’est très très simple :

  • On branche le module sur le port USB du RPI. Il est détecté automatiquement. Nul besoin d’installer qqch. Pour ceux qui on pratiquer le port USB à ses débuts, je peux vous dire que c’est le bonheur.
  • On va utiliser un utilitaire pour lire le pors RS232 émuler sur USB.

Pour cela :

grabserial -v -d "/dev/ttyUSB0" -b 115200 -w 8 -p N -s 1 -e 30

Cette commande signifie que vous allez exécuter un grab, une lecture, du port /dev/ttyUSB0 (le port série émulé) avec le formalisme RS232 suivant :

  • 115200 bauds de vitesse
  • 8 bits de données
  • Parité pair
  • 1 bit de stop

le tout pour une durée de 30sec.

Le résultat de cette lecture est affiché dans la fenêtre de votre console. Si vous voulez logger les données dans un fichier il suffit de rediriger le flux vers un fichier.
De cette façon :

grabserial -v -d "/dev/ttyUSB0" -b 115200 -w 8 -p N -s 1 -e 30 >> mon_fichier.log

#Et pour écrire sur ce port?

L’application grabserial permet de rapidement faire un log. Pour des applications de lecture et d’écriture spécifique vous serez obliger d’écrire votre propre code.
A mon sens le plus simple étant d’utiliser Python et la libraire pyserial.

Alors prêt à manipuler une UART USB.

Bouton reset raspberry

reset, start raspberry

Bouton reset raspberry

Quelques lignes pour pour montrer comment solutionner le problème de reset du Rpi afin d’éviter le «vieux unplug à chaud et bien dégueulasse» qu’on est tenter de faire si on conserve la configuration du raspberry.

En effet, débrancher et rebrancher votre raspberry pi à chaud risque d’endommager de façon définitive le système d’extension. De plus d’un point électriques, vous mettez à mal l’intégrité de votre nano-ordinatteur.

Mais, il existe des solution. Voyons en délais.
Cas du raspberry Zero 1.3 et Zero W

Le raspberry Zéro (1.2, 1.3 et w) possède juste coté du port GPIO, 2 broches intitulés «run» (voir photo). En fermant le circuit au niveau de ces broches, vous faites un reset de votre Rpi. Pour réaliser cette fermeture de circuit, c’est très simple : il suffit d’ajouter un bouton poussoir qui est à l’état ouvert par défaut 1.

reset, start raspberry
Près du GPIO les bornes «run» permettant de réaliser un reset

Attention cependant, un reset de type hard n’est pas vraiment meilleur. Je vous conseille donc de réaliser :

sudo reboot

autant que faire se peut avant d’employer l’arme nucléaire!

De la même façon, ce bouton permet de démarrer le Rpi après l’avoir éteint à l’aide de la commande système :

sudo halt

Pour finir une petite démo en vidéo :

Cas du raspberry pi 3

Pour le raspberry Pi 3 (et pour le 2 également), vous pouvez réaliser cette manip/modification en connectant le bouton poussoir sur le RPi a l’aide des broches nommées P16 que vous pouvez trouver au dos de la carte de votre mini-ordinateur.

Vous trouverez ICI un article détaillé et publié sur le site framboise314.fr
Et si on le commandait électronique ce bouton?

Il faudra être patient c’est dans les tiroirs car je dois solutionner ce problème pour redémarrer de façon périodique mon RPi qui est en charge des acquisitions de données météo de la maison!

Patience ça viendra dans quelques semaines.

Bon alors prêt à ajouter ce bouton sur votre raspberry?


  1. Ce serait bête de devoir maintenir le bouton enfoncer pour que votre Rpi reste allumé… 

pdftk : Extraire des pages d’un documents PDF

pdftk : un utilitaire simple et puissance

On se trouve souvent en face d’un documents pdf dont on voudrait extraire une page pour en faire un documents autonome à proprement parler.
Sous windows, il existe de nombreuses solutions soit payantes (comme souvent) soit demandant de nombreuses manipulation d’interfaçage graphique alors que sous un système Unix ou linux, il existe un utilitaire qui ne requière qu’une seule ligne de commande!
Le binaire pdftk (la page principale de pdftk), pour pdf toolkit, permet de faire ce genre de manipulation aisément et gratuitement.

Installation de pdftk

Très simple à l’aide d’apt

sudo apt-get install pdftk

Et comment on s’en sert?

Pour extraire les pages de 12 à 15 d’un document c’est très siimple :

pdftk full-pdf.pdf cat 12-15 output outfile_p12-15.pdf

Voilà une ligne et c’est plié!

Vous ne regretterez pas de ne pas avoir à investir plusieurs centaines d’euros dans une licence d’Adobe!

NB : Ce genre de manipulation est également possible sous windows

Pour aller plus loin :

D’autres trucs et astuces : liens vers la catégorie

Augmenter la swap de votre Raspberry Pi

Augmenter la swap de votre Raspberry Pi

Pour des applications, le plus souvent serveur, la taille de votre swap peut limiter les performances de votre application. C’est le cas pour gitlab par exemple.
Pour augmenter cette valeur, il faut éditer le fichier /etc/dphys-swapfile avec la commande suivante :

sudo nano /etc/dphys-swapfile

Il vous faut modifier la ligne

CONF_SWAPFILE=100

en remplaçant la valeur 100 par la valeur en Mo dont vous avez besoin. Si vous avez besoin d’une valeur supérieur à 2.048 GO, il faut modifier la limite en modifiant la dernière ligne du fichier du fichier.

Pour aller plus loin :

La mémoire swap

NB : testé et validé sur Raspbian Jessy

Modifier l’url par défaut de Gitlab

Si vous avez installé votre forge Gitlab en local sur un Raspberry P, il y a fort a parier que vous  vouliez garder le RPi dans votre réseau privée.

Cependant, vous voudrez sans doute le rendre accessible depuis extérieure. Pour cela, vous devrez donc faire pointez une URL vers un votre Box internet qui routera le port 80 vers votre RPi.

Jusque là rien que du bien classique. Malheureusement, à l’usage vous remarquerez que l’adresse par défaut de vos projets ne sont pas utilisable depuis l’extérieur. En effet,  quand vous récupérer l’adresse pour faire un clone d’un projet vous aurez l’adresse suivante :

http://localhost/monuser/mon-projet.git ou http://nomdelamachine/monuser/mon-projet.git

Pour corriger cela, il est nécessaire d’éditer le fichier de config :

nano /etc/gitlab/gitlab.rb

et de modifier la ligne suivante :

external_url 'http://gitlab.example.com'

par

external_url 'http://monurl.com'

 

Plus d’informations ici