Hobbestigrou

Just another python and perl developer

Peau neuve.

perl django planet-libre python

10 juil. 2016 | hobbestigrou | comments

Introduction

il y a un moment qu'il n'y a pas eu d'activité ici pour diverse raison. Pour ce retour, j'ai décidé d'apporter un peu de changement. Notamment dans l’apparence mais pas uniquement. Ce qui n'est pas visible est aussi différent car maintenant ce blog utilise Python et Django, petit projet que j'ai développé.

Pourquoi développer un moteur de blog ?

Une question intéressante qui mérite d'être posé. Il existe déjà beaucoup de moteur et même en Python aujourd'hui. J'ai fais ce choix pour diverse raison, mais la première et qui a principalement motivé de le faire est que ça fait maintenant un peu plus deux dans ans que j'utilise Django et je n'avais pas encore de projet public avec ce dernier. Ce qui est déjà une raison suffisante à mes yeux. Une autre raison est que je n'ai pas trouvé un moteur qui répondait pleinement à ce que je recherche.

Ouverture du code

Le code n'est pas encore disponible. J'aimerai peaufiner encore un peu certain détail avant. Il devrait être disponible sur github dimanche prochain.

Changement de flux

L'url du flux a changé, pour le moment l'ancienne est encore disponible, mais je vais prochainement la supprimer.

Conclusion

Je me vois pas grand chose de plus à ajouter. J'apprécie ce changement. Ce n'est pas la première que je le dis, mais je vais tenter de publier plus souvent.

Profil urxvt

xprop terminal emulateur urxvt

27 sep. 2015 | hobbestigrou | comments

Introduction

Il est intéressant de pouvoir gérer plusieurs profils. Par exemple, un par environnement, avoir un fond différent pour pouvoir identifier en un coup d'oeil et éviter d'exécuter une commande sensible.

Configuration

Il faut éditer le fichier de configuration .Xdefaults:

irc*background: black
irc*foreground: white
prod*background: #E32636
prod*foreground: black
urxvt*background: black
urxvt*foreground: green
urxvt*transparent: true
urxvt*shading: 30
urxvt*tint: black
URxvt*font: xft:Envy Code R:pixelsize=10
URxvt*lineSpace: 8

L'exemple permet de lancer urxvt avec un fond de couleur différent pour son client irc et pour un environnement de production, les autres terminaux sont avec un fond transparent. Par défaut le terminal lancé contient le nom de l'émulateur de terminal1 dans la classe name, pour que la configuration de la partie irc soit prise en compte, il faut lancer urxvt avec l'option name:

urxvt -name irc

Le fond sera noir donc noir. Le URxvt est le nom de la classe commun à tous les terminaux urxvt. Lancé la commande xprop pour s'assurer du nom de la classe:

xprop

Avec i3 ajouter un raccourci:

bindsym $mod+i exec urxvt -name irc

Par exemple pour lancer un terminal avec le nom irc.

Conclusion

Un petit article qui je pense peut servir. Comme je l'ai dis il est pratique de pouvoir avoir un rappel visuel, ça permet de minimiser les erreurs d'innattention.


  1. Dans le cas présent urxvt 

Bonne pratique de développement.

langage tests documentation sphinx

14 sep. 2015 | hobbestigrou | comments

Introduction

J'aime écrire du code, je ne me vois pas faire autre chose un jour et j'espère pouvoir toujours continuer. Certaines personnes pensent qu'il est vraiment difficile d'être développeur. Je pense que c'est un métier simple et accessible et que tout le monde peut l'être. En revanche, il n'est pas facile, il y a un investissement à fournir et il faut un peu de passion.

Documentation

Quelque soit le langage c'est une des choses les plus importante1. Un projet bien documenté permet aux personnes intéressées par le projet de commencer à regarder comment il fonctionne sans avoir besoin de toute de suite se plonger dans la lecture du code. De plus dans un premier temps c'est plus agréable à lire et peut donner des détails ou astuces. Autre avantage ça permet de donner une visibilité au projet. Utile aussi pour le développeur du projet après une pause, permet de plus facilement retravailler dessus. Je recommande de commencer au moins en partie par la documentation, ce qui permet de structurer et clarifier ses idées. En Python, je recommande d'utiliser le projet sphinx, pour Perl le format pod est très bien et il sera directement affiché sur la page du module. Pour tout autre langage sphinx ou pandoc, l'avantage de sphinx est la publication sur la plateforme readthedocs. Une documentation à jour et bien maintenu est donc importante.

Test

Encore une fois ce n'est pas dépendant du langage2. Un projet bien testé est important. Permet de faciliter l'ajout de nouvelles fonctionnalités, d'amélioration du code, sans avoir une goute de sueur glissant le long du front. Un projet bien testé garantit la non régréssion. C'est aussi un bon exemple d'utilisation dans le cas d'une biblothèque par exemple. Idéalement, il faut écrire le test avant le code, essayer d'être le plus complet possible et prévoir tous les cas. En revanche, il faut essayer de ne pas en écrire trop et faire du test qui doit être testé par le module déjà lorsque il y a une dépendance. Lorsque qu'il faut tester une méthode qui utilise une API qui fait de l'écriture ou des méthodes dynamiques, utiliser mock mais éviter autant que possible.

Code

La partie principale arrive. Respecter les recommandations et conventions du langage en Python par exemple il existe la pep 8 que je recommande de lire. Avoir des fonctions ou méthodes qui ne fassent qu'une chose et qui soient limitées en nombre de lignes. Limiter aussi le nombre de lignes pour une classe, et éviter d'avoir une classe qui fasse plusieurs choses. Limiter la taille d'un fichier à mille lignes c'est bien, ne pas hésiter à découper le code. Rester simple que ce soit pour l'implémentation ou l'architecture il est important de rester simple, un code lisible et clair sera toujours mieux qu'un code très compressé et obscure qui ne fait gagner qu'un très peu. Toujours penser que le code est fait pour évoluer et que certainement d'autres développeurs vont travailler sur le projet. En général lorsque je commence à m'intéresser et utiliser un projet, je commence par lire entièrement la documentation et le code pour me faire une idée de ce qu'il est possible de faire et de l'implémentation. Ensuite je lis regulièrement les choses dont j'ai besoin sur le moment, je pense que c'est une bonne pratique et ça permet d'avoir un éventail assez complet et je pense que lire le code est un bon complément.

Faire de la veille

L'informatique évolue rapidement, beaucoup de choses voient le jour. Il ne faut pas foncer tête baissée sur la dernière nouveauté, mais en revanche il est important de voir ce qui se fait, ne pas hésiter à regarder et tester un nouveau projet pour faire son idée. Lire le code du projet qui nous intéresse, de pas oublier qu'écrire du code est aussi beaucoup de pastiche et il ne faut pas hésiter à s'inspirer.

Poser des questions

Ce n'est pas grave d'être lent et ne pas assimiler un nouveau concept. Il ne faut pas avoir peur de poser des questions et ne pas rester bloqué. Je pose beaucoup de questions, souvent trop, mais je pense que c'est utile pour tout le monde. En revanche, avant de poser une question ou de chercher sur internet, je recommande de d'abord lire la documentation ainsi que le code.

Conclusion

J'ai présenté ce que j'essaie de respecter au quotidien qui sont des recommandations reconnues et respectées par beaucoup, je n'ai rien inventé. Je pense que respecter les différentes étapes permet de gagner du temps sur le long terme et d'être plus serein.


  1. Dit DDD pour Documentation Driven Development 

  2. Dit TDD pour Test driven development 

Monter un support usb automatiquement

planet-libre qtile mount udev wm usb

20 mars 2014 | hobbestigrou | comments

Introduction

Lorsqu'on utilise un gestionnaire de fenêtre sans environnement de bureau, il y a des actions qu'on a pas1, comme par exemple des notifications quand on branche un support de type usb. Depuis quelques temps c'est une opération qui m'arrive de réaliser assez régulièrement pour diverse raison. J'en avais un peu marre de devoir gérer le montage à la main, il faut dire que c'est pas une action super amusante surtout lorsqu'on est pressé. Je suis donc parti à la recherche d'un outil gérant ça de manière automatique, j'ai demandé sur l'un des sites stackexchange et j'ai finalement trouvé mon bonheur grâce à z3bra que je remercie, le projet est ldm est il est disponible sur github.

Installation

Le projet utilise udev, il dépend donc de libudev-dev et libmount-dev. Pour l'installer sous Debian et dérivés il n'y a pas de paquet disponible, il faut donc passer par les sources:

sudo apt-get install libudev-dev libmount-dev
git clone https://github.com/LemonBoy/ldm.git
cd ldm
make
sudo make install

Tout simplement. J'ai aussi fais un petit script avec le module fab pour pouvoir déployer rapidement une nouvelle machine, il y a une commande pour installer ldm.

Usage

Ensuite l'usage est très simple, il y a une option pour le lancer en mode daemon si ce n'est pas déjà géré par le système via systemd par exemple:

export USERID=`id -u`
export GROUPID=`id -g`
sudo ldm -d -u $USERID -g $GROUPID

L'option -d permet de lancer la commande en mode daemon, l'option -u et -g permettent respectivement de spécifier l'uid et le gid à utiliser pour monter le support. Dans l'exemple ci-dessus on utilise la commande id pour récupérer les informations de l'utilisateur courant. Par défaut le support sera monté dans le répertoire racine du système /mnt qu'il est possible de changer avec l'option -p, et l'option -c permet d'indiquer le chemin vers un exécutable qui sera appelé à chaque fois qu'une clé sera monté.

Lancer la commande à l'ouverte de la session

Dans qtile pour lancer la commande au démarrage:

@hook.subscribe.startup
def startup():
    execute_once("automount")

Il faut avoir ajouté la fonction execute_once dans votre fichier de configuration.

Mettre les lignes ci-dessous dans /usr/local/bin/automount, par exemple:

export USERID=`id -u`
export GROUPID=`id -g`
sudo ldm -d -u $USERID -g $GROUPID

Puis rendre le script exécutable.

Conclusion

Une commande simple et légère qui fait bien son travail et pas plus.

Drapeau En Dépôt sur github


  1. En tous les cas pas de base 

Plus de souris avec urxvt

planet-libre wm tilling souris

27 jan. 2014 | hobbestigrou | comments

Introduction

Utilisant un tilling et depuis peu ayant recommencer à utiliser firefox avec l'extension pentadactyl, il est tout naturel de chercher à utiliser un peu moins la souris. Certains un peu mauvaise langue diront que c'est encore un meilleur moyen de perdre un peu plus de temps, mais je ne suis pas d'accord, c'est une habitude à prendre une fois prise le clavier reste ce qu'il y a de plus rapide et surtout de moins fatigant pour le poignet, car moins de mouvements. J'ai découvert trois scripts pour urxvt qui permettre de se séparer de la souris. Merci à Mo0O pour m'en avoir parlé.

Installation

Il y a un dépôt git avec les scripts, il suffit donc de cloner le dépôt puis de copier les fichiers dans /usr/lib/urxvt/perl/:

git clone https://github.com/muennich/urxvt-perls
cp clipboard keyboard-select url-select /usr/lib/urxvt/perl/

Une autre solution est de placer les fichiers dans un répertoire et d'ajouter une ligne dans son fichier de configuration Xdefaults pour lui indiquer ou chercher les scripts:

urxvt.perl-lib: /path/du/repertoire

Keyboard-select

Le premier script est keyboard-select, il permet d'utiliser le clavier pour copier et coller du texte de son terminal, ajouter les lignes dans votre Xdefaults:

urxvt*perl-ext-common:        default,keyboard-select
urxvt.keysym.Control-p:       perl:keyboard-select:activate

La première ligne permet d'activer le plugin. La deuxième permet d'indiquer que pour passer en mode copie il faut utiliser ctrl-p. Ensuite pour les déplacements c'est comme dans Vim, je vous laisse regarder la documentation pour avoir plus de détail.

Url-select

Le deuxième plugin est url-select, il est un remplaçant de l'extension par défault matcher, ça se passe toujours dans le même fichier, c'est Xdefaults:

urxvt*perl-ext-common:        default,url-select
urxvt.keysym.Control-u:       perl:url-select:select_next

Encore une fois on active le plugin, puis on indique que ctrl-u permet de se rendre sur le premier lier matché, puis la touche entré permet de l'ouvrir dans son navigateur. Encore une fois, je renvois vers la documentation pour plus de détail

Clipboard

Puis pour finir le dernier permet de gestion de la copie dans presse-papier et pouvoir ensuite coller le contenu:

urxvt*perl-ext-common:        default,clipboard
urxvt.keysym.S-C-V:           perl:clipboard:paste
urxvt.clipboard.autocopy:     true

Une fois n'est pas coutume on active le plugin. Une fois ceci fait shift-ctrl-v permet de paster, mais je ne l'utilise pas. L'option autocopy permet de mettre à jour automatiquement le presse-papier si il la selection primaire change.

Pour activer les trois plugins ajouter cette ligne dans votre Xdefaults:

urxvt*perl-ext-common: default,url-select,keyboard-select,tabbedex,clipboard

Plus les différentes lignes de configuration indiqué plus haut pour chaque plugin.

Conclusion

Ces trois plugins sont vraiment très bien puis il permettre surtout de se séparer de la souris, ce qui est fort agréable. Au début, ça peut être un peu pertubant, mais une fois à l'aise c'est vraiment génial.

Drapeau En Dépôt sur github