mardi 14 juin 2011

Un geste pourtant simple

Une fois n'est pas coutume je ne parlerai pas informatique ou productivité.

C'est aujourd'hui la journée mondiale du don de sang.
J'ai longtemps hésité à en parler;  que dire que vous n'ayez déjà lu/entendu maintes fois :

* Les hôpitaux manquent de sang.
* Donner son sang *sauve de vies*
* Quelque soit votre emploi du temps il y a un moyen de donner près de chez soi.
(Ils travaillent même le Samedi dans la plupart des villes)
* C'est sur à 100%

Plutôt que d'essayer de vous convaincre d'une manière abstraite, allez jeter un œil sur le Blog de mon ami Loïc et sa femme Célia ("Deux expats à Seattle") :
Loïc est un ami, expatrié à Seattle, qui a découvert là bas qu'il était atteint d'une leucémie, il décrit dans son blog avec beaucoup d'humour et d'honnêteté son combat au jour le jour.

Il ne doit sa survie qu'aux donneurs de sang, et sa guérison ne se fera qu'à travers un don de moelle osseuse.

Tout ce que nous avons à faire, pour l'aider lui et des milliers d'autres, c'est de donner notre sang régulièrement et demander à être inscrit sur la liste des donneurs de moelle osseuse.

Un geste tellement simple...

vendredi 10 juin 2011

Un peu d'ordre

Après la discipline je parle d'ordre, ceux qui ne me connaissent pas doivent se poser des questions...
(et ceux qui me connaissent encore plus :-) )

Alors je vais rassurer tout le monde : Je vais commencer petit, sur mon ordinateur, dans mon répertoire .vim

Avant ma crise mon répertoire .vim ressemblait à ça : 
drwxr-xr-x 4 arnaud arnaud 4096 2011-05-19 23:30 after
drwxr-xr-x 4 arnaud arnaud 4096 2011-05-19 23:30 autoload
drwxr-xr-x 2 arnaud arnaud 4096 2011-05-19 23:30 bin
drwxr-xr-x 2 arnaud arnaud 4096 2011-05-19 23:43 colors
drwxr-xr-x 2 arnaud arnaud 4096 2011-05-19 23:30 compiler
drwxr-xr-x 2 arnaud arnaud 4096 2011-05-19 23:43 doc
drwxr-xr-x 3 arnaud arnaud 4096 2011-05-19 23:30 ftplugin
drwxr-xr-x 2 arnaud arnaud 4096 2011-05-19 23:43 indent
drwxr-xr-x 2 arnaud arnaud 4096 2011-05-19 23:43 keymap
drwxr-xr-x 2 arnaud arnaud 4096 2011-05-19 23:43 lang
drwxr-xr-x 2 arnaud arnaud 4096 2011-05-19 23:30 nerdtree_plugin
drwxr-xr-x 2 arnaud arnaud 4096 2011-05-19 23:43 plugin
drwxr-xr-x 2 arnaud arnaud 4096 2011-05-19 23:43 print
-rw-r--r-- 1 arnaud arnaud   85 2011-05-19 23:30 README
drwxr-xr-x 2 arnaud arnaud 4096 2011-05-19 23:43 record
drwxr-xr-x 2 arnaud arnaud 4096 2011-06-09 22:22 snippets
drwxr-xr-x 2 arnaud arnaud 4096 2011-05-19 23:43 spell
drwxr-xr-x 2 arnaud arnaud 4096 2011-05-19 23:30 syntax
-rw-r--r-- 1 arnaud arnaud  193 2011-05-19 23:30 test.vim
drwxr-xr-x 2 arnaud arnaud 4096 2011-05-19 23:43 tutor
-rwxr-xr-x 1 arnaud arnaud  916 2011-05-19 23:30 vim-config
-rwxr-xr-x 1 arnaud arnaud 4030 2011-05-19 23:49 vim-keys

Maintenant j'ai ça :
drwxr-xr-x 2 arnaud arnaud 4096 2011-06-09 22:39 autoload
drwxr-xr-x 8 arnaud arnaud 4096 2011-06-09 22:39 bundle
-rw-r--r-- 1 arnaud arnaud   31 2011-06-09 22:34 TODO
-rwxr-xr-x 1 arnaud arnaud  916 2011-06-09 22:39 vim-config
-rwxr-xr-x 1 arnaud arnaud 4030 2011-06-09 22:39 vim-keys

Le truc ?
C'est un plugin vim appelé pathogen.

Pathogen permet d'organiser tous les plugins dans un répertoire bundle, qui contient les plugins chacun dans leur sous répertoire plutôt que de mélanger leur contenu dans des répertoires communs (ftplugin, plugin, autoload...)

L'installation est simple :
git clone https://github.com/tpope/vim-pathogen.git
mv vim-pathogen/autoload .vim
rm -rf vim-pathogen/
cd .vim
mkdir bundle

Je recopie mes fichiers de configs habituels qui sont versionnés :
cp ../git/dotfiles/vim/vim-* .

Il suffit alors d'ajouter au ~/.vimrc les lignes suivantes au tout début de votre fichier : 
filetype off
call pathogen#runtime_append_all_bundles()

Il faut maintenant (re-)installer (dans mon cas) les plugins que le
souhaite utiliser :
cd bundle
hg clone https://bitbucket.org/ns9tks/vim-fuzzyfinder
git clone https://github.com/tpope/vim-fugitive.git
git clone https://github.com/tpope/vim-surround.git
git clone https://github.com/scrooloose/nerdtree.git
git clone https://github.com/msanders/snipmate.vim.git
hg clone https://bitbucket.org/ns9tks/vim-l9

Je récupère mes snippets perl modifiés de mon répertoire versionné :
cp ../../git/dotfiles/vim/snippets/perl.snippets snipmate.vim/snippets/

Je rajoute un fichier pour me souvenir de la dépendance de L9 qui est requis par snipmate et qui me servira pour les dépendances à venir :
vi DEPENDENCIES

Mon répertoire bundle ressemble finalement à ça :
-rw-r--r--  1 arnaud arnaud   27 2011-06-09 22:39 DEPENDENCIES
drwxr-xr-x  6 arnaud arnaud 4096 2011-06-09 22:39 nerdtree
drwxr-xr-x 10 arnaud arnaud 4096 2011-06-09 22:39 snipmate.vim
-rw-r--r--  1 arnaud arnaud   29 2011-06-09 22:39 test.pl
drwxr-xr-x  5 arnaud arnaud 4096 2011-06-09 22:39 vim-fugitive
drwxr-xr-x  6 arnaud arnaud 4096 2011-06-09 22:39 vim-fuzzyfinder
drwxr-xr-x  6 arnaud arnaud 4096 2011-06-09 22:39 vim-l9
drwxr-xr-x  5 arnaud arnaud 4096 2011-06-09 22:39 vim-surround

Et voilà c'est fait !

Mon vim est à nouveau utilisable : j'ai mis de l'ordre dans mes plugins sans avoir à réécrire mes fichiers de configuration.

ADDITIF : Si on veut versionner cette configuration il faut agir légèrement différemment en ajoutant les plugins versionné sous git non pas par un clone mais par un git add submodule à la racine du dépôt git, par exemple :
git add submodule https://github.com/tpope/vim-fugitive.git vim/bundle/vim-fugitive

Une fois tous les submodules ajoutés il ne reste plus qu'a exécuter :
git submodule update --init 

La mise à jour d'un submodule se fait simplement dans le répertoire du submodule par un :
git pull


mercredi 8 juin 2011

Journée mondiale IPv6

"Le 8 juin 2011 l'Internet Society (ISOC) organise une journée mondiale IPv6 pendant laquelle les fournisseurs et les sites sont encouragés à tester la technologie à grande échelle. Google, Facebook, Yahoo!, Akamai et Limelight Networks ont annoncé leur participation à cet événement." -- Wikipedia

C'est aujourd'hui !!!

Pour célébrer l’événement, j'ai décidé de configurer un tunnel IPv6 pour participer moi aussi au "test à grande échelle".

Vous n'aurez probablement pas besoin des opérations suivantes, mais si comme moi vous avez désactivé IPv6 il va falloir réactiver en modifiant les lignes suivantes (pour désactiver appliquez l'opération inverse) :

/etc/hosts
# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

/etc/modprobe.d/blacklist.conf
# Uncomment to disable IPv6
#blacklist ipv6

/etc/rc.local
#Uncomment to disable ipv6
#net.ipv6.conf.all.disable_ipv6 = 1
#net.ipv6.conf.default.disable_ipv6 = 1
##net.ipv6.conf.lo.disable_ipv6 = 1

Pour ceux qui utilisent Firefox comme moi, vérifier dans about:config que network.dns.disableIPv6 est à 'false'

Ceci étant fait, un reboot plus tard, l'exécution de la commande ifconfig
fait apparaitre la ligne tant attendue :
inet6 addr: fe80::221:5dff:fe46:1070/64 Scope:Link

Ceci étant fait mon Ubuntu est maintenant revenu à son état naturel et est en mesure de gérer l'IPv6.

Mon fournisseur d'accès ne m'offrant pas d'accès IPv6 natif, il me faut encore passer par un broker pour créer un tunnel.
Un ami (merci aanriot) m'a parlé d'Hurricane Electric (http://tunnelbroker.net/) je me suis donc inscrit, créé un tunnel
en clickant sur le lien idoine et généré les instructions nécessaires à la connexion au tunnel via l'interface du site :
ifconfig sit0 up
ifconfig sit0 inet6 tunnel ::216.66.84.42
ifconfig sit1 up
ifconfig sit1 inet6 add 2001:470:1f12:8c3::2/64
route -A inet6 add ::/0 dev sit1

Voilà ! Il ne vous reste plus qu'a vérifier que ça marche sur un site dédié :
http://test-ipv6.com/
ou

http://ipv6test.google.com/

Ça marche ? Maintenant vous pouvez dire fièrement :
IPv6 day ? J'y étais...
:-)

mardi 7 juin 2011

CPAN modules you love to hate (or the contrary)

If one thing starts to bother me in the Perl universe, it's all the dependencies which force you to pull half of the CPAN each time you try to install a major module.

Don't get me wrong: I love Perl, I love CPAN, I love modules and I definitively love code reuse BUT may be we start doing it the wrong way.

Let's think why we need code reuse:
1) Because we're lazy ( as every good Perl programmer :-) ) and don't want to
rewrite an existing wheel (if a good one already exist)
2) Because it reduces the code size by factorizing common parts

The factorizing aspect is especially important to me:
_ Common parts (modules) are more tested as more users eventually use them
_ Code is easier to maintain (smaller, less heterogeneous...)
_ It forces us to think about the API, which eases enhancements
_ ...

Now if I look at the dependency mess on CPAN, I realize that what's is bothering me is not the numerous dependencies,  but rather that most of them void/lesser the benefits of code reuse.

Why must I use 3 different XML SAX parsers?
Why must I use 3 different Serializer modules?
Must I really use 2 different dispatch modules?
Can't I just use one error/handling module?

I wholeheartedly adhere to the TIMTOWTDI motto, but the more I use CPAN modules the more I get functional duplication code: My applications get globally bigger, more complex, heterogeneous, less tested than it could be...
What a paradox!

I'm calling to your wisdom : am I the only one to feel this dependency bloat?
Do you see any path to a more efficient Modules use?