Éditeur de texte par défaut

Une technique bien connu des personnes utilisant un système Gnu/linux quotidiennement, peut-être moins des nouveaux utilisateurs. Je cherche surtout une excuse, car j’avais envie d’écrire, mais quelque chose de vraiment facile, par flemme.

Sur un système Gnu/linux lorsqu’on lance certaines applications comme crontab par exemple, nécessitant une édition, la dite application fera appel à l’éditeur configuré par défaut. Ce qui est généralement Nano donc pas génial, bien-sûr ce n’est que mon avis. Fort heureusement il est possible de modifier cela et configurer notre éditeur de texte favori, tout le monde est au courant que c’est Vim le meilleur. Pour ce faire nous allons modifier les variables d’environnement. Pour une application permanente nous éditerons le fichier $HOME/.bashrc et nous ajouterons ces quelques lignes.

EDITOR=vim
VISUAL=$EDITOR
export EDITOR VISUAL

Utilisez la commande source pour mettre à jour votre bashrc.

source $HOME/.bashrc

Utilisez la commande env ou afficher les variables avec echo pour vous assurer que cela a été pris en compte.

echo $EDITOR
echo $VISUAL

Il est préférable de bien configurer les deux variables.Viusal, est un ancien terme qui ne devrait plus être utilisé, mais certaines applications y font encore appelle. Il sera possible de configurer n’importe quel éditeur, mais il est recommandé d’en choisir un en mode texte. Il sera possible si vous le désirez de choisir un éditeur muni d’une GUI, mais n’oublier pas que cela ne fonctionnera que si X est disponible.

Gérer vos plugins Vim à la manière d’apt-get avec Vimana.

Vimana est un outil écrit en Perl par Yo-An Lin. Il vous permettra de gérer vos scripts Vim en ligne de commande à la manière d’un gestionnaire de paquet comme apt-get par exemple. Vous pourrez obtenir des informations, installer et mettre à jours vos scripts Vim1 . Selon le type du script ftplugin, plugin, syntax etc… Vimana installera les fichiers dans les répertoires correspondants. Par exemple pour un color scheme il le placera dans ~/.vim/colors/

Pour installer Vimana il vous faudra passer par le CPAN. Il est disponible que pour des systèmes de type Unix, par exemple Gnu/linux, Mac OS X, BSD etc… Il n’est pas portable sur Windows.

sudo cpan Vimana

Une fois installé vous pourrez commencer par mettre à jour l’index.

vimana update

Pour chercher un script ou un plugin.

vimana s Perl

Le résultat vous retourna donc des scripts concernant Perl2 .

Vous pourrez aussi avoir des informations sur un script.

vimana info omniperl

Pour installer un script.

Vimana i autocomplop

Si le script n’est pas disponible sur vim.org, mais qu’il utilise un repository Git il sera possible d’indiquer le chemin du repository.

vimana i git:git://path/to/git/repository

Pour finir il est aussi possible d’installer un script depuis un répertoire.

git clone git://path/to/git/repo.git
cd repo
vimana i .

Pour supprimer un script.

vimana remove autocomplop

Ou encore

vimana remove autocomplop --force

En conclusion, c’est un outil qui peut-être très pratique et faire gagner du temps, ça évitera de se rendre à chaque fois sur vim.org pour télécharger le script ou faire une recherche.

Drapeau EnVimana sur le CPAN
Drapeau EnVimana sur github
Drapeau EnBlog de Yo-An Lin

  1. Il va les chercher sur vim.org
  2. Ayant Perl dans le nom ou la description du script

Colombo 2.0

Dés qu’elle est entrée dans mon bureau, j’ai su que l’affaire ne sentait pas bon. On ne fait pas carrière dans ma branche si on ne développe pas un solide sixième sens pour flairer les problèmes. Et manifestement, mon embrouillomètre me criait que je ferais mieux de me planquer sous mon bureau la tête cachée dans une des poches de mon imper.

Malheureusement, mon vieux fauteuil donnait des signes de fatigue, la machine à café agonisait, et j’avais un besoin urgent de renflouer mes caisses. Je n’avais pas les moyens de faire le difficile.

— Thibault Jouannic, détective TMA privé ?
— Lui même, à votre service m’dame. Entez, je vous en prie.

D’un signe de main, je l’invitai à s’asseoir. Pendant qu’elle s’exécutait, je l’examinais à la dérobée. Mon boulot m’amenait plutôt à côtoyer de gros barbus aux dents jaunies par la clope et le café, et portants des tee-shirt rigolos. Aussi, cette belle brune élancée en tailleur élégant avait immédiatement éveillé mon attention. D’un point de vue professionnel, j’entends.

— Alors m’dame, que puis-je faire pour vous être utile ?

J’ai toujours pensé qu’un bon détective était comme un médecin. Pas de bon diagnostic sans connaître les symptômes. Le problème, c’est que mes clients me prenaient souvent pour une espèce de devin vaudou, et j’étais obligé de les soumettre à un interrogatoire digne d’un inquisiteur espagnol pour espérer obtenir le minimum d’indices.

— Je suis Lucie S., webmaster d’un site de petites annonces agricoles, et depuis quelques temps il semble que les performances ne soient plus au rendez-vous.
— Vous voulez dire que le site est lent ?
— En fait, ce site n’a jamais été une foudre de guerre, mais depuis deux jours, la situation est devenue catastrophique. La moindre requete nécessite 45 secondes avant d’aboutir. Quand on ne récupère pas une page blanche. Et le moteur de recherche, le cœur du site, est complètement inutilisable.

Dr Cog
Creative Commons License photo credit : Balakov

Les performances ! Un grand classique. 90% de mes affaires concernaient des sites qui se trainaient comme des escargots neurasthéniques. Parfois, rajouter quelques caches rendait le problème supportable, mais la plupart du temps, la conception de base était tellement médiocre qu’il n’y avait rien à faire. Allez expliquer ça à un client désespéré.

Bref ! Cela s’annonçait comme une petite enquête de routine. Alors pourquoi mon instinct me criait-il qu’il y avait anguille sous roche ?

— Vous dites que depuis deux jours, la situation a empiré. Que s’est-il passé de spécial à ce moment là ?
— Mais justement ! Rien, rien du tout.

C’était louche. Soit elle me mentait, soit elle ignorait quelque chose, mais son histoire n’était pas crédible, et elle même ne semblait pas convaincue. Je décidai de la titiller.

— Aucune erreur dans vos tests unitaires ou fonctionnels ? Que dit votre plate-forme d’intégration continue ?
— Euh…

J’avais touché juste. Je posais la question pour la forme, j’aurais été bien surpris d’apprendre l’existence de tests automatisés. La plupart du temps, je devais m’estimer heureux si des conventions de codages étaient définies et respectées. Mais bon, la question avait le don de rendre mes clients mal à l’aise, et un client qui n’est pas droit dans ses chausettes est moins enclin à discuter mes tarifs. Et puis, ça me distrait.

— Écoutez, je vais voir ce que je peux faire. Mais il me faudra un accès au serveur de production, un compte sur le gestionnaire de source, et un dump récent de la base de données.
— Je vous communiquerai ces informations dans la journée. Il y a autre chose, me dit-elle l’air embarassée.
— Oui ?

Je masquai un petit sourire. Quand un client ne rechigne pas à vous donner l’accès à la prod, c’est qu’il y a toujours autre chose.

— Un grand salon d’agriculture a lieu dans deux jours. Une présentation publique du site est prévue. C’est un site subventionné par le ministère, vous comprenez. Et si la situation n’est pas revenue à la normale d’ici là, nous risquons de nous retrouver dans une situation délicate.

Ben voyons ! J’aimais travailler dans le stress du temps qui passe. Corriger un bug qui semblait insolvable est gratifiant, mais aucune sensation n’est plus exaltante que celle de le faire dans un délai aussi court. Et puis, ça me permet de gonfler mon tarif.

— Je prends l’affaire en main m’dame. Envoyez moi les données dont j’ai besoin, et je commence sur le champ.

Une fois qu’elle fut sortie, je m’abandonnais à une méditation contemplative. Réfléchir représente une part importante de mon temps de travail. Je dirais même que c’est la part la plus importante. Il m’est même arrivé de résoudre des affaires sans poser les mains sur mon clavier bépo.

L’ennui, avec la réflexion, c’est qu’elle passe facilement pour de l’oisiveté pour les non-inités. C’est pour ça que je prends toujours l’air affairé et soucieux quand j’attends un client. Pour avoir l’air compétent et efficace.

C’est important, les apparences, dans mon métier. Pourquoi croyez-vous que je laisse traîner toutes ces piles de dossiers poussiéreux ? Pas pour le travail, tout est numérisé. Non, c’est simplement parce qu’un détective sans imper et qui ne pue pas le tabac froid. Ça ne fait pas sérieux.

Je suis bien resté deux heures, les pieds sur mon bureau couvert de paperasse bidon, sirotant mon infusion à la verveine (que je ne bois qu’en cachette, un vrai détective est censé carburer au café noir dégueulasse), avant de parvenir à la conclusion suivante : j’étais dans une impasse. J’avais le crime, mais pas le mobile.

Quelqu’un aurait-il saboté volontairement le site pour plomber la présentation publique ? Un hacker ? Un script-kiddie ? Un concurrent ? Je n’arrivais pas à m’en persuader. Les gens regardent trop la télé. Ils s’imaginent que nous autres, détectives TMA, passont notre temps à combattre le crime virtuel organisé, sauver des demoiselles en détresse et empêcher in-extremis des fusées d’exploser. Tout ça, c’est la faute à Colombo.

La réalité est toute autre, et le quotidien d’un détective TMA est finalement assez banal. Point de grand bantitisme. Point de course poursuite effrénée dans les limbes du web. Simplement quelques corrections orthographiques par ci, un petit bug css (damn IE!) par là. Et puis, métro, popote, dodo. Comme tout le monde, finalement.

C’est justement pour cette raison que je ne parvenais pas à accepter l’idée d’un acte de piraterie. Règle n°1 du détective TMA : «  N’attribue jamais à la malveillance ce qui peut s’expliquer par l’incompétence  ». Quelqu’un avait merdé dans cette histoire, et il fallait trouver qui.

Mala Strana
Creative Commons License photo credit : Pensiero

C’est maintenant que les choses sérieuses allaient commencer. Je commençai par vérifier la justesse des informations envoyées par ma cliente, et récupérais le trunk du site. Haha ! Quelqu’un avait commité un «  Thumbs.db  » dans le dossier «  img  ». Quelle bande de newbies ! Mais !? Ils avaient également commité leur répertoire de backup, rempli de dumps sql ?! Seigneur ! Je sentis mes yeux tenter de jaillir hors de leurs orbites.

Pris d’un doute, je récupérai également en local la version de production du site. Autant vous dire qu’à ce moment, je m’attendais à tout. Pour le plaisir, j’ouvris quelques fichiers au hasard grâce à mon éditeur de geek préféré (vim, car tout le monde sait que les vrais pros n’utilisent jamais emacs). La syntaxe hasardeuse, l’indentation erratique, et les caractères de saut de lignes aléatoires me firent vite tourner la tête, le cœur au bord des lèvres.

— «  Fiston, dans la vie, on ne mélange jamais les espaces et les tabulations  », me disait souvent ma grand-mère, de son air sage et pénétrant de vétéran qui avait connu le Cobol. Il faut croire que tout le monde n’a pas eu la chance d’avoir une grand mère comme la mienne.

En dernier recours, je décidai de jeter un coup d’œil à l’historique svn. En parcourant rapidement les derniers messages de commits, quelque chose attira mon regard. Serait-il possible que… Quelques diffs plus tard, j’étais fixé. Les mains derrière la tête, je me laissai aller en arrière, un sourire sur les lèvres. Voilà une affaire rondement menée.

Le cœur léger, je décrochai le téléphone, et appelai ma cliente.

— Allo ?
— Thibault Jouannic, détective TMA à l’appareil. J’ai quelque chose qui peut vous intéresser.
— Vous avez trouvé ?
— Pas par téléphone. Écoutez, je veux que vous réunissiez l’équipe de développement au complet, dans vos locaux, demain 9h. Assurez-vous que tout le monde soit présent. Et amenez des croissants.

Van Williams & Bruce Lee
Creative Commons License photo credit : Elmo Alves

Sans attendre sa réponse, je raccrochai. Pour ma peine, je décidai de me préparer une autre infusion. Demain promettait d’être une belle journée.

Le lendemain, je me rendis au siège de S… S.A., dans ma vielle guibarde fumante. J’ai l’habitude de me déplacer en vélo, mais pour les rencontres avec mes clients, ça me donne un genre.

Quand j’arrivai à la réunion, tout le monde était déjà présent, et à l’heure, preuve s’il en est de la gravité de la situation. Les croissants étaient chauds, le café finissait de glouglouter dans le percolateur, les choses s’annonçaient bien.

Je m’emparai d’une viennoiserie, et demandai à chacun de se présenter.

— Frédéric B., chef de projet
— Solange C., développeuse
— Alfred D., designer / intégrateur
— Anatole P., développeur stagiaire
— Pierre Z, développeur
— Lucie S., webmaster

Après ce petit tour de table, je leur tournai le dos, et m’approchai de la fenêtre, faignant de contempler le paysage bétonneux des alentours d’un air inspiré. Dans mon métier, il faut savoir ménager ses effets. Lorsque je jugeai la tension nerveuse suffisante, je me retournai, et commençai mon numéro.

— Comme vous le savez, j’ai été contacté hier par Lucie S., ici présente, pour élucider un cas mystérieux. Depuis 2 jours, le site www.….com semble rencontrer des problèmes de lenteur anormale. Est-ce exact ?
— Tout à fait.
— Cet évenement survient juste avant une importante présentation publique du site. Si l’anomalie n’est pas résolue, sa réputation sera ruinée, et par exension celle de l’agence web qui l’a conçu et réalisé, n’est-ce-pas ?
— En effet.
— Comme vous, j’ai pensé à un acte malveillant. La vile démarche d’un concurrent amer et jaloux d’avoir été éconduit lors de l’appel d’offre. Aussi ai-je analysé en détails les différents logs de votre serveur de production. J’ai vite découvert que je faisais fausse route. Je n’ai rien remarqué d’anormal. En revanche, je peux vous dire une chose.

Je les parcourus tous de mon regard de détective pénétrant. La tension était à son comble, chacun était pendu à mes lèvres, retenant son souffle.

— Mesdames, messieurs, il s’agit d’un acte interne. Qui plus est, j’affirme que le coupable se trouve dans cette pièce !

L’annonce fit son effet. Des exclamations d’indignation éclatèrent, des cafés furent renversés, certains manquèrent s’étouffer avec leur croissant. J’attendis, inflexible, que le calme revienne, et imposai le silence de mon œil de lynx (la bestiole, pas le navigateur).

— Lucie S., vous m’avez annoncé lors de notre premier entretien qu’aucun changement n’étais survenu sur l’application au moment du début des anomalies. Et bien, madame S., vous vous êtes trompée. Il y a bel et bien eu une livraison ce jour là.

Le chef de projet bondit alors de sa chaise, en renversant son café, hurlant presque.

— Mensonge ! Calomnies ! Aucune livraison n’a été déployée en production depuis 10 jours. Vérifiez le svn, le dernier tag date de plus d’une semaine. Et aucun ticket n’est passé en état «  cloturé  » durant cette période ! Vous mentez !
— Croyez-moi bien, j’ai vérifié ces éléments. Et comme vous le dite, aucune livraison n’a été déployée en utilisant votre procédure de livraison officielle. — J’appuyais sur le terme — En revanche, il y a bien eu une livraison sans passer par votre procédure de déploiement !
— C’en est trop, rugit le chef de projet. Comment pouvez-vous l’affirmer ?
— C’est simple, j’ai eu l’occasion de comparer la version svn des sources, avec ce qu’on peut trouver sur vos serveurs de production et préproduction. Le résultat fut trés instructif, je dois dire.

Pens in light
Creative Commons License photo credit : maistora

Je les observai d’un air amusé, avant de reprendre.

— J’ai en effet pu constater que ces trois environnements n’étaient pas synchronisés. Il ne peut y avoir qu’une seule explication. Quelqu’un n’a pas respecté votre procédure de déploiement.

L’assistance resta muette. Des murmures incrédules se firent entendre. Le chef de projet, hagard, bafouilla.

— Mais… Qui ? Qui pourrait faire une chose pareille ?
— Voyez-vous, j’ai eu l’occasion d’analyser les logs svn de votre application. Quelque chose a attiré mon attention. Quelque chose qui n’aurait pas du se trouver là.

Suspense. J’observai une pause théâtrale, avant de m’écrier :

— Votre log svn est en effet truffé de messages de commits vides !

Stupeur dans l’auditoire. Le chef de projet, le souffle coupé, retomba sur sa chaise, effondré. Je m’emparai d’un croissant, leur laissant le temps de reprendre leurs esprits avant de continuer.

— Plus intéressant. J’ai également remarqué que ces commits félons se sont multipliés depuis quelque temps.

Je pointai alors un doigt vengeur vers l’un de mes auditeurs.

— Monsieur Anatole P. Pourriez vous nous indiquer à quel moment vous avez commencé à travailler sur ce projet ?!

Le pauvre stagiaire, au comble de l’embarras, parvint à peine à bredouiller une réponse intelligible.

— Une… une semaine environ. Mon stage a débuté au début du mois.
— Monsieur Anatole P. N’est-il-pas vrai que vous avez, au cours de cette semaine, réalisé des développements sur le site dont nous parlons ?
— Oui, mais…
— Et n’est-il-pas vrai qu’au cours de ces travaux, vous avez modifié l’un des fichiers de configuration de l’application ?
— Peut-être bien que oui.
— Et bien monsieur Anatole P., lorsque vous avez livré vos travaux directement sur le serveur de production, vous avez écrasé un fichier de configuration avec les paramètres de la plate-forme d’intégration. Cela a eu pour action de désactiver tous les caches de la production !

Not getting Involved
Creative Commons License photo credit : TarikB

Dans la folie qui s’ensuivit, le chef de projet, rouge de colère, tonna.

— Anatole ! Je vous jure que vous allez…
— Un instant ! — J’avais usé de toute mon autorité pour l’interrompre — J’affirme qu’il n’y a qu’un seul coupable dans cette pièce. Et ce coupable n’est pas Anatole.

Stupéfaction.

— Monsieur Frédéric B., chef de projet du site www.….com, je vous accuse d’avoir confié les accès de votre plate-forme de production à un stagiaire inexpérimenté. Je vous accuse de l’avoir laissé travailler sur un projet sans l’avoir formé à vos méthodes. Je vous accuse de ne pas avoir mis en place de procédure systématique de vérification ni de validation de son travail par ses pairs plus expérimentés. Enfin, au nom d’Ada, sainte patronne des geeks et codeurs, je vous accuse de contribuer à la médiocrité logicielle générale, en omettant de mettre en place et de promouvoir des bonnes pratiques de développements. Arrêtez-le !

Deux gorilles de la sécurité se saisirent du félon, et l’emmenérent tandis que ses cris de rage et menaces de vengeances raisonnaient dans les couloirs.

Quand le silence revint, je savourai les regards admiratifs qui se posaient sur moi. Ma cliente ne put s’empêcher de me demander :

— Mais comment avez-vous su ? Pour la livraison en production ?
— C’est simple, ma chère. Lorsque j’ai réalisé que certains fichiers n’étaient pas synchrones entre les différents environnements, j’ai fouillé pour en découvrir l’origine. J’ai remarqué que certaines modifications apportées récemments sur le svn se trouvaient bien sur la préproduction, mais jamais sur la production. En revanche, d’autres commits avaient été directement reportés sur la production, mais étaient absent de la production. Et il se trouve que ces commits anormaux avaient tous un même auteur : Monsieur Anatole P., ici présent.

En remontant dans l’historique, j’ai tout de suite vu que ses premières contributions étaient trés récentes. J’ai évidemment pensé à un stagiaire.
— Votre analyse est limpide.
— Élémentaire, même. Cette affaire prouve une fois de plus l’une des Grandes Lois Immuables des TIC.
— Laquelle ?
— Il n’existe pas d’anomalie, quelle qu’elle soit, dans laquelle aucun stagiaire ne soit impliqué.
— Écoutez, monsieur Jouannic. Vous nous avez démontré que vous êtes un homme capable. Nous avons une place de chef de projet à pourvoir. Seriez-vous disponible ?
— Désolé, m’dame, mais ça ne m’intéresse pas. Indépendant je suis, indépendant je reste. Vous savez, détective freelance, ce n’est pas un métier, c’est un mode de vie.
— Bon. Si vous changez d’avis, n’hésitez pas à me contacter.
— J’y penserai. Je vous enverrai ma facture d’ici demain.

Tout en m’installant derrière le volant ma fidèle guibarde, je sortis mon agenda et vérifiai mon emploi du temps du reste de la semaine. Rien. Parfait, j’allais pouvoir partir en vacances quelques jours. Je l’avais bien mérité.

– FIN –

Bonnes résolutions 2010

Le titre n’est pas forcément le mieux choisi. Oui, cela me fait toujours rire cette tradition des bonnes résolutions, lorsqu’une nouvelle année débute. C’est un peu comme remettre les choses à demain. Pourquoi attendre qu’une nouvelle année démarre, pour prendre de bonnes résolutions ; pourquoi repousser les choses que l’on pourrait faire aujourd’hui à dans 8 mois. C’est tout au long de l’année que j’essaie d’évoluer, progresser, avoir de bonnes résolutions. Comme certains le savent, j’ai parfois de très longue journée, et j’ai toujours beaucoup de choses à faire. Ne serait-ce qu’assouvir ma soif d’apprendre, me demande beaucoup de temps. J’ai donc tout au long de l’année, essayé d’optimiser un peu mon temps.
J’ai tout de même pris de bonne résolution pour l’année 2010, en fait, j’ai eu et fait des découvertes quelques jours avant la nouvelle année, ça tombait donc bien.

A la base, je ne suis pas forcément quelqu’un de super organisé. Par conséquent je savais toujours ce que j’avais à faire, mais je ne notais pas ces choses. J’étais donc perdu, je savais ce que je devais faire, mais ne me fixant pas d’objectifs pour la journée, je m’affolais et prenais peur par toutes les choses que j’avais à faire. Au final, je n’avançais pas beaucoup, car je ne savais pas par ou commencer. Ce qui était très frustrant, puis je me disais toujours “bon je vais commencer par faire ça, puis non ça me soule, en fait, je vais plutôt faire ceci, ah peut-être bien cela, finalement, j’ai trop de choses à faire je ne vais pas m’en sortir”. Généralement, je finissais par aller glander sur la toile, ou à faire des choses que je n’avais pas prévu.
J’ai fait la découverte de deux outils, le premier est pal un agenda en mode texte simple et efficace, le deuxième est devtodo, un gestionnaire de todo lui aussi est simple et efficace. Les deux forment un très bon complément au final. L’une de mes résolutions est donc d’être plus organisé. Ce que je fais, c’est que je me fixe des objectifs pour chaque journée dans pal, et devtodo me sers plus de pense-bêtes lorsque j’ai des choses à faire, mais que je ne sais pas encore quand est-ce que je souhaite les faire, je les mets dans devtodo, avec un ordre de priorité. J’ai commencé à m’en servir, il y a quelques jours et je peux déjà assurer que ça fonctionne bien, je suis d’ailleurs assez étonné de voir ce que je suis capable d’accomplir en une journée. Je remercie donc pal et devtodo, mes sauveurs. Une autre de mes bonnes résolutions est de continuer à lire beaucoup mais de façon plus sérieuse. C’est-à-dire tant-que je n’ai pas compris un passage je le relis, réaliser tous les exemples du livre, s’il y a des exercices tenter de tous les faire, prendre d’une façon un peu plus structuré des notes de passage qui me semble important, avec bien entendu ma propre vision, avec ma réflexion. Pratiquer plus, en ayant plus de projets personnels, en étant plus sérieux, avec ces dit projets, et de manière constante et régulière. Apprendre de nouveau langage, et notamment Erlang que j’ai commencé, il y a quelques jours. Essayer de moins me laisser distraire par des choses sans importance, être plus concentrer à ce que je fais. Trouver une alternative à Google pour les recherches pour plusieurs raisons que j’expliquerai peut-être plus tard. Poster plus souvent sur ce blog, pour être précis, une fois par semaine, tous les dimanches. Si l’article me demande un long travail de lecture, de documentation et de pratique sur une technologie que je connais pas, il se peut qu’il y est un délai un peu plus long. Je me suis tout de même fixé comme objectif que cela ne doit pas dépasser une semaine. Ce qui signifie au pire, un article une fois sur deux, ce qui fait au moins un, deux articles dans le mois. Pour finir participer plus régulièrement à vim-fr.org que j’ai cofondé avec istaz. J’ai d’autres résolutions que ce soit au niveau technique ou personnel, mais je ne vais pas non plus tout vous raconter, cela ne serait point amusant, et risquerai de rapidement vous souler.

Je ne vais pas vous faire un bilan de mon année 2009. Simplement, vous dire que malgré une très grosse baisse de régime et de fatigue au mois de décembre, ce fut globalement une très bonne année. Je suis surtout très fier et heureux d’une chose que je n’aurai besoin de préciser ici. Ce que j’attends pour l’année 2010, continuer à progresser et apprendre des choses en informatique, et j’espère du fond du coeur avoir une belle progression au niveau du développement, car pour le moment c’est pas toujours ça. Peut-être aussi avoir un peu plus de lecteurs pour ce blog, car ça fait toujours plaisir de savoir que lorsqu’on écrit, des personnes nous lisent. Je vais donc tenter d’écrire des choses plus intéressantes. Réussir à être reconnu par les autres barbus, pour mon travail, comme quelqu’un de passionné, qui travaille sérieusement, qui fait en sorte d’évoluer et de progresser et qui fait du bon travail cela va donc avec la progression dans ma façon de coder c’est tout de même mon métier après tout.
En conclusion je vais tenter de mettre en application, ces dites bonnes résolutions pour l’année 2010. Pour certaines résolutions, c’est déjà le cas et cela me semble assez bien parti, alors j’espère que cela va continuer. Je vais donc tout faire pour, car c’est à moi de fournir le travail, il n’y a personne qui peut m’aider à ça. J’ai toutes les cartes en main à moi de ne pas les gâcher.

Color(i)er les fonctions dans vim

Bon je suis pas mort, c'est juste qu'à l'UTC 18h/jour semble être la dose minimale de travail à fournir pour réussir (et ça reste un bien grand mot...).

Fin bref passons aux choses intéressantes. Je vous préviens va falloir mettre les mains dans le camboui. Commençons par le rendu final :

vim-2009-11-19

Comme vous pouvez le constatez mes fonctions sont coloriées.
Pour m'imiter c'est très simple. Admettons que l'on veuille colorier les fonctions d'un fichier C/C++.

1ère étape : rappatriez le fichier par défault dans son .vim :

cd ~/.vim/syntax
cp $VIMRUNTIME/syntax/c.vim . 
#$VIMRUNTIME = /usr/share/vim/vim72 chez moi

2ème étape : éditer le fichier c.vim.
Ajoutez ce qui suit avant le let b:current_syntax = "c"

"Pour les fontions
"Le dernier contains est à enlever si vous utilisez un langage "non poo"
syn match    cCustomParen    "(" contains=cParen contains=cCppParen
syn match    cCustomFunc     "\w\+\s*(" contains=cCustomParen
 
"Pour les classes
syn match    cCustomScope    "::"
syn match    cCustomClass    "\w\+\s*::" contains=cCustomScope
 
"Classe de couleur pour les fonctions
hi def link cCustomFunc MyFunction
"Classe de couleur pour les classes
hi def link cCustomClass MyFunction

3ème étape : définir la couleur. Editez donc votre colorscheme préféré et ajoutez-y :

hi MyFunction       guifg=NONE        guibg=NONE        gui=NONE      ctermfg=green       ctermbg=NONE        cterm=NONE

Je vous laisse mettre les valeurs qui vous font envie.

Voilà c'est fini. N'oubliez pas qu'il faut refaire cette manip pour chaque fichier syntax utilisé. Et attention il faut modifier cette ligne :

syn match    cCustomParen    "(" contains=cParen,cCppParen

Et remplacer cParen par nomSyntaxParen. Ainsi pour javascript.vim vous aurez javascriptParen.

Si quelqu'un a une solution propre ou générique qu'il n'hésite pas à me l'envoyer.

Article inspiré de : http://stackoverflow.com/questions/736701/class-function-names-highlighting-in-vim

Gmail, IMAP et mutt (MÀJ)

Si Gmail possède un excellent webmail, j’ai été tenté d’utiliser mutt pour lire et envoyer mes mails depuis mon interface préférée : un terminal.

Avant tout, activez le support de l’IMAP pour votre compte Gmail dans les options sur gmail.com. Ça y est, vous venez d’utiliser le webmail pour la dernière fois :mrgreen: .

Ensuite, eh bien vous installez mutt, et vous copiez ceci dans ~/.muttrc :

  1. # ~/.muttrc
  2. # AddiKT1ve <the.addikt1ve@gmail.com>
  3.  
  4. # Identification
  5. set imap_user = "LOGIN@gmail.com"
  6. set imap_pass = "PASSWORD"
  7. # Configuration Compte
  8. set smtp_url = "smtp://LOGIN@smtp.gmail.com:587/"
  9. set smtp_pass = "PASSWORD"
  10. set from = "LOGIN@gmail.com"
  11. set realname = "LOGIN"
  12. # Configuration Gmail
  13. set folder = "imaps://imap.gmail.com:993"
  14. set spoolfile = "+INBOX"
  15. set postponed="+[Gmail]/Drafts"
  16. # Utilisation du cache
  17. set header_cache=~/.mutt/cache/headers
  18. set message_cachedir=~/.mutt/cache/bodies
  19. set certificate_file=~/.mutt/certificates
  20. set record="~/.mutt/sent"
  21. # Une signature
  22. set signature="~/.mutt/.signature"
  23.  
  24. set move = no
  25.  
  26. set sort = ‘threads’
  27. set sort_aux = ‘last-date-received’
  28. set imap_check_subscribed
  29.  
  30. ignore "Authentication-Results:"
  31. ignore "DomainKey-Signature:"
  32. ignore "DKIM-Signature:"
  33. hdr_order Date From To Cc
  34.  
  35. # Heures et dates françaises
  36. set locale="fr_FR.UTF-8"
  37. set charset="utf-8"     # character set for your terminal
  38. set assumed_charset="utf-8"
  39. set send_charset="utf-8:iso-8859-15:us-ascii"
  40. set date_format="%A %d %b %Y à %H:%M:%S (%Z)"
  41. # Meilleure lisibilité des citations
  42. set attribution="Le %d, %n a écrit :"
  43. set forward_format="[Fwd: %s]"
  44. set forward_quote
  45.  
  46. # GPG (optionnel)
  47. set pgp_decode_command="gpg %?p?–passphrase-fd 0? –no-verbose –batch –output – %f"
  48. set pgp_verify_command="gpg –no-verbose –batch –output – –verify %s %f"
  49. set pgp_decrypt_command="gpg –passphrase-fd 0 –no-verbose –batch –output – %f"
  50. set pgp_sign_command="gpg –no-verbose –batch –output – –passphrase-fd 0 –armor –detach-sign –textmode %?a?-u %a? %f"
  51. set pgp_clearsign_command="gpg –no-verbose –batch –output – –passphrase-fd 0 –armor –textmode –clearsign %?a?-u %a? %f"
  52. set pgp_encrypt_only_command="pgpewrap gpg –batch –quiet –no-verbose –output – –encrypt –textmode –armor –always-trust –encrypt-to 0xVOTRECLEF_ID — -r %r — %f"
  53. set pgp_encrypt_sign_command="pgpewrap gpg –passphrase-fd 0 –batch –quiet –no-verbose –textmode –output – –encrypt –sign %?a?-u %a? –armor –always-trust –encrypt-to 0xVOTRECLEF_ID — -r %r — %f"
  54. set pgp_import_command="gpg –no-verbose –import -v %f"
  55. set pgp_export_command="gpg –no-verbose –export –armor %r"
  56. set pgp_verify_key_command="gpg –no-verbose –batch –fingerprint –check-sigs %r"
  57. set pgp_list_pubring_command="gpg –no-verbose –batch –with-colons –list-keys %r"
  58. set pgp_list_secring_command="gpg –no-verbose –batch –with-colons –list-secret-keys %r"
  59. set pgp_autosign=yes
  60. set pgp_sign_as=0xVOTRECLEF_ID
  61. set pgp_replyencrypt=yes
  62. set pgp_timeout=1800
  63. set pgp_good_sign="^gpg: Good signature from"
  64.  
  65. # Couleurs (meilleure lisibilité)
  66. color attachment magenta default            # attachments
  67. color body brightred default "(ftp|http)://[^ ]+"       # point out URLs
  68. color body brightcyan default [-a-z_0-9.]+@[-a-z_0-9.]+ # e-mail addresses
  69. color bold brightblue default               # boldface text
  70. color error brightwhite red                 # error messages
  71. color hdrdefault magenta default            # default color of message header
  72. color header brightmagenta default ^(From): # From and Subject header
  73. color header brightwhite default ^(Subject): # From and Subject header
  74. color header brightwhite default ^(Date): # Date header
  75. color header white default ^(In-Reply-To):
  76. color indicator brightred default                   # indicator bar
  77. color markers brightblue default            # wrapped line markers (+)
  78. color message brightblack green             # status messages
  79. color normal default default                # default
  80. color quoted yellow default                 # quoted text, 1st quote level
  81. color quoted1 green default                 # quoted text, 2nd quote level
  82. color quoted2 brightblue default            # quoted text, 3rd quote level
  83. color quoted3 blue default                  # quoted text, 4th quoet level
  84. color search black yellow                   # matched search patterns in pager
  85. color signature red default                 # the signature (after sigdashes)
  86. color status default blue                   # status lines
  87. color tilde brightblue default              # « ~ » used to pad blank lines
  88. color tree green default                    # thread tree in the index menu
  89. color underline brightgreen default         # underlined text
  90.  
  91. # Binding
  92. bind index "^" imap-fetch-mail
Mutt + Gmail + IMAP

Mutt + Gmail + IMAP

Et puis, quel plus grand plaisir que celui d’écrire ses mails avec vim ?

Un vim mignon tout plein

Commençons par vous donner l'eau à la bouche :

Mon vim

Mon vim

Pour cette recette vous aurez besoin :

  1. D'un terminal en 256 couleurs, je vous recommande rxvt-unicode-256color (disponible dans community pour les archers) *
  2. De la police Bitstream Vera sans Mono (également disponible sous archlinux : ttf-bitstream-vera)

Si vous voulez vérifier que votre terminal supporte 256 couleurs, vous pouvez lancer ce script perl : color.pl.

color.pl

256 couleurs

Si vous n'aimez pas trop mon colorscheme sachez qu'il en existe énormément sur vim.org. En pas trop moche on peut citer glade, xoria256, zenburn et desert256.

A partir de maintenant c'est du copier coller :

  1. ~/.Xdefaults
  2. ~/.vimrc
  3. ~/.vim/colors/glade.vim
  4. ~/.vim/macros/num.vim

Voilà c'est fini, vous avez un vim pas trop moche avec des options de base.

Accéder rapidement aux chiffres sous vim

Si :

  1. Vous avez un clavier azerty (-1%)
  2. Vous utilisez vim (-95%)
  3. Vous n'avez pas de pavé numérique (-45%)
  4. Vous en avez marre d'appuyer sur shift pour accéder aux chiffres en mode normal (hum là personne ne devrais nous quitter)

Alors cet article est fait pour vous !

4 étapes :

  1. Créer un dossier sources : mkdir -p ~/.vim/macros
  2. Y éditer le fichier num.vim : vim num.vim
  3. Ajouter :
    noremap &amp; 1
    noremap 1 &amp;
    noremap &amp; 1
    noremap 1 &amp;
    noremap é 2
    noremap 2 é
    noremap " 3
    noremap 3 "
    noremap ' 4
    noremap 4 '
    noremap ( 5
    noremap 5 (
    noremap - 6
    noremap 6 -
    noremap è 7
    noremap 7 è
    noremap _ 8
    noremap 8 _
    noremap ç 9
    noremap 9 ç
    noremap à 0
    noremap 0 à
  4. Editer son .vimrc et y ajouter : source ~/.vim/macros/num.vim

Désormais en mode normal la touche 1 renvoit un 1 et shift + 1 un '

Enjoy :)

Découverte de Git

Aujourd’hui je vais vous présenter Git, et les commandes de bases pour la création de dépôt, les commits en local et quelques commandes de bases. Je n’irai pas plus loin, car plutôt que de faire une très longue pages qui serait fatigante à lire je préfère couper cela en plusieurs parties. La prochaine sera réservé à la découverte du fonctionnement des branches, puis une autre sera réservé aux différentes interface graphique disponible pour lire les journaux des commits etc…

Git est un logiciel de gestion de versions décentralisé écrits par Linus Torvalds. Pour la petite histoire Git a été initialement écrit pour remplacer BitKeeper 1 qui avait décidé d’arrêter de fournir la version gratuite en 2005. L’arrêt aurait été à cause de Andrew Tridgell qui avait développé un logiciel open-source permettant d’afficher certaines informations qui n’était pas disponibles dans la version gratuite de BitKeeper. Git signifie connard dans l’argot en anglais. Linus aurait dit “je ne suis qu’un égocentrique, donc j’appelle tous mes projets d’après ma propre personne. D’abord Linux, puis git.”

La grande force de Git est donc d’être décentralisé bien-sur ce n’est pas le seul il en existe d’autres comme, Mercurial écrit Python, Bazaar écrit en Python également et sponsorisé par Canonical, Darcs, et certainement d’autres encore. Mais Git semble être celui qui ce démarque le plus, il est déjà un petit peu plus rapide que Mercurial ou Bazaar et il est très certainement plus complet même si on utilisera généralement pas Git à plus de 5% de ces capacités.

Contrairement à Subversion Git ne travail pas avec des numéros de révisions mais avec des hash SHA1. Cela peut certainement dérouter au début mais on s’y habitue. Cela permet à Git de gérer ces objet avec des identifiant unique, il n’est pas possible d’avoir deux fichiers avec un contenu différent ayant le même hash. Tant qu’un fichier n’est pas modifié le hash reste inchangé et n’est stocké qu’une seul fois. En revanche si le fichier est modifié les deux versions sont stocké sur le disque.

Pour installer Git sur une distribution Debian ou un de ses dérivées il faudra installer le paquet git-core, git tout court correspond à un outil gitfm pour Gnu Interactive Tools File Manager. Ce qui n’a rien a voir.

sudo apt-get install git-core

Une fois Git installé nous allons pouvoir le configurer un petit peu. Lorsque je dis configurer c’est un bien grand mot, il s’agit simplement d’indiquer des information sur vous votre nom, mail qui seront indiqué dans les journaux de Git, et l’éditeur que vous préférez qui sera ouvert lors des commits pour indiquer le message.

git config --global user.name "Votre nom ou pseudo"
git config --global user.email mail@mail.com
git config --global core.editor vim

On indique Vim parce-que Vim c’est le meilleur de tous les éditeurs. Non, non je ne lance pas de troll.

Je risque très certainement d’en décevoir plus d’un, mais finalement utiliser Git n’est pas si compliqué que ça, du moins pour utilisation basique. J’aurai même envie de dire qu’il est plus naturel, dans le sens où Git va vous pousser à utiliser des branches2. Vous pourrez par exemple créer une branche unstable qui serait les commits récent pas encore tester, puis une fois que le code aura été testé le merger dans master. Ceci n’est qu’un exemple bête je n’ai rien trouvé d’autres, mais c’est simplement pour expliquer que svn vous a fait prendre de mauvaise habitude à travailler directement sur trunk, et que contrairement à svn la gestion des branches en Git est très agréable et facile. Alors j’aurai simplement envie de dire abuser des branches.

Pour créer un dépôt Git il vous faudra vous placer dans le répertoire cible qui sera votre répertoire de travail par la suite et nous allons initialiser le dépôt.

git init

Le répertoire .git est maintenant créé vous pourrez le constater avec un ls -a. Globalement c’est comme un .svn, il va contenir des informations notamment l’historique. Le dépôt est pour le moment vide et ne contient pas encore les fichiers du projet. Il va donc falloir ajouter les fichiers au dépôt. Si votre répertoire contient déjà les fichiers vous pouvez utiliser le joker.

git add *

Si vous souhaitez simplement ajouter un fichier en particulier il vous suffit de préciser son nom.

git add essai.pl

Si vous n’avez pas encore de fichier créé un fichier d’essai. Pour vous exercer.

touch essai.pl

De la même façon qu’avec Subversion il vous est possible de connaître l’état des fichiers du dépôt.

git status

Maintenant que le fichier a été ajouté on peut faire un premier commit.

git commit -m "Ceci est mon premier commit avec Git, c'est trop génial."

Nous allons maintenant nous amuser à modifier un peu le fichier.

echo "Un essai de modification. Juste histoire de s'amuser un peu pour découvrir Git." >> essai.pl

Si vous faite de nouveau un git status vous verrez que votre fichier a été modifié, mais qu’il n’a pas été mis à jour. Dans le fonctionnement cela signifie que Git ne considère pas les modifications d’un fichier comme un fichier à commiter ce qui n’est pas plus mal finalement, même si cela peut surprendre la première fois. Il va donc nous falloir ajouter le fichier dans le cache prêt à être commiter.

git add essai.pl

On peut visualiser ce qui sur le point d’être commité.

git diff --cached

Vous pouvez maintenant commiter votre fichier.

git commit

Si vous souhaitez commiter tous les fichiers qui ont été modifié vous pouvez vous passer de l’étape d’ajout de fichier.

git commit -a

L’option pour all.

En conclusion pour le moment nous avons pu constater que git n’est pas si difficile que cela de prise en main dans une utilisation basique qui est suffisante pour débuter un projet, et avoir une historique des modifications. Nous avons aussi constaté que Git offrer des avantages certains à Subversion, il est très rapide de créer un dépôt, il est tellement rapide et facile de créer un dépôt que vous allez prendre l’habitude de créer des dépôts pour tout et n’importe quoi même pour des petits scripts, fichier de conf, rapport LaTeX etc… Ce qui est une très bonne habitude. Vous ne dépendait pas d’un serveur, vous n’avez donc pas besoin de réseau pour commiter il vous sera donc possible de commiter depuis n’importe où, avion, train, fin fond de la montagne, ou je ne sais où encore. Git va clairement changer votre façon de travailler, vous allez être moins retissant à l’idée de créer un dépôt, vous allez faire des commits beaucoup plus régulièrement, vous aller être plus organiser et travailler avec des branches et pleins de bonne chose encore je pense. Git fut pour moi une révélation, et en un mot je dirai que Git est génial. Alors n’hésiter pas à l’adopter pour vous faire votre propre idée. Dans un prochain article nous verrons les push sur un dépôt, et la création des branches.

Comme je sais que je ne suis pas forcément un des meilleurs pédagogue, que je n’exprime forcément très bien les idées de Git, et que je ne suis pas parfait tout simplement. Je vais vous faire partager une liste d’article que j’ai trouvé sur la toile. Bien-oui, car il y a de nombreuses personnes déjà qui ont parlé de Git en français.

Drapeau FrGit sur wikipedia
Drapeau FrDécouvrir Git
Drapeau FrUne comparaison de Git vs SVN
Drapeau FrUne autre manière d’utiliser Git
Drapeau FrUtiliser Git avec Github
Drapeau FrUn tutorial Git
Drapeau FrUn autre tutorial
Drapeau FrUn dernier pour la route

  1. un logiciel de gestion de versions décentralisé aussi mais propriétaire
  2. C’est aussi une des force de Git la puissance des branches

Lire les pages de manuel avec vim c'est possible !

Je ne présente plus cet éditeur de texte ultime qui est sans aucuns doute le seul éditeur de texte valable dans ce bas monde.

Si vous codez un petit script shell ou encore un programme en C, les pages de manuel sont souvent indispensable (et même parfois en Français o/). Alors au lieu de les lire avec la veille commande man , ayez le réflexe vim et lisez là directement dans votre session vim.

Il faut lancer le runtime dans votre vimrc

runtime ftplugin/man.vim

La commande Vim pour lire la page de setenv par exemple :

:Man setenv

Pour les feignant comme moi, un petit mapping à mettre dans votre vimrc qui permet d'avoir la page de man de la commande qui se trouve en dessous du curseur avec la touche K (en mode normal).

nnoremap K :Man <cword><CR>