Profil urxvt

comments

2015-09-27T23:30:00

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.

comments

2015-09-14T14:56:00

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

comments

2014-03-20T22:30:00

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

comments

2014-01-27T22:50:00

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

Contrôler le son depuis le clavier avec qtile.

comments

2014-01-19T23:45:00

Introduction

Pour rester sur le ton de qtile, un petit article assez rapide, il est pratique de pouvoir contrôler le son depuis son clavier.

Configuration

C'est encore une fois dans le fichier de configuration qtile qui se trouve dans le répertoire utilisateur .config/qtile/config.py qu'il faut se rendre et ajouter quelques lignes:

Key([], 'XF86AudioRaiseVolume',
    lazy.spawn('amixer -c 0 -q set Master 2dB+')),
Key([], 'XF86AudioLowerVolume',
    lazy.spawn('amixer -c 0 -q set Master 2dB-')),
Key([], 'XF86AudioMute',
    lazy.spawn('amixer -c 0 -q set Master toggle'))

Si le clavier possède des touches multimédia, il n'est pas utile d'indiquer une touche ou un couple de préfixe il est donc possible de laisser le premier paramètre vide, pour le deuxième paramètre on indique le nom de la touche, utiliser la commande xev pour vérifier. Pour finir on fait appel à la commande amixer l'option c permet d'indiquer la carte à utiliser, l'option q est pour ne pas afficher le résultat des modifications, set est le mixeur il faut indiquer en premier paramètre la sortie auquel appliquer l'opération.

Conclusion

Un petit article rapide qui permet d'indiquer comment gérer le son depuis le clavier avec qtile, ce qui est pratique.

 

First page: First page Next page: 2 Last page: Last page