Catégorie : linux

vim howto : comment installer un plugin

J’ai vu cet exceptionnel exemple de plugin ici.
Petite parenthèse : regardez d’ailleurs le site vimcasts.org, c’est vraiment un site exceptionnel pour tous ceux qui veulent apprendre des astuces géniales de vim.

Donc, comment installer un plugin ? Moi, habitué de Windows © je me suis dit « ça doit être très compliqué, je vais chercher sur la toile ».
Mais… c’est tellement simple que j’avais beau chercher partout, je n’ai pas trouvé de réponse !
Voilà en pratique comment j’ai fait.
Le plugin génial que j’ai vu ici, se trouve là : https://github.com/godlygeek/tabular

Je vais donc à cette adresse :
Page Internet du plugin Tabularize

Je le télécharge, et voici les fichiers que je trouve dedans :
Fichiers dans le plugin Tabularize

Je me dis « bon sang comment l’installer dans vim ? ».
En pratique, rien de plus simple. Très souvent, dans votre répertoire « home » (auquel vous accédez en tapant le tilde en ligne de commande : ~), concernant vim, il y a un dossier caché qui commence par un point : « .vim » (n’oubliez pas le point au début).
Allez dans ce dossier et regardez s’il y a un sous-dossier plugin. S’il n’y en a pas, créez le. Moi qui suis sous Windows, et qui m’en éloigne de plus en plus jour après jour, j’ai installé cygwin et mon « home » est dans C:\cygwin\home\Olivier. Voilà ce que ça donne après avoir crée le bon dossier :
Fichiers dans le plugin Tabularize
Ensuite il vous suffit de copier simplement les dossiers du plugin dans le répertoire « ~/.vim/plugin » et… tout fonctionne (dans mon cas c’est donc C:\cygwin\home\Olivier\.vim\plugin) !
Copier les fichiers du plugin Tabularize dans le répertoire plugin de vim

Si vous avez des suggestions n’hésitez pas !

scp : comment résoudre le problème C0644

Il arrive parfois que lorsqu’on fait un scp, ça ne fonctionne pas, et on peut lire quelque chose comme :

>> scp root@olivierpons.fr:/var/www/html/pysoko.tar.bz2 .
root@olivierpons.fr's password:
C0644 129502 pysoko.tar.bz2
>>

Dans cet exemple, je veux récupérer le fichier :
pysoko.tar.bz2
qui est sur le PC distant dans le répertoire
/var/www/html/
sachant que le PC distant est nommé :
olivierpons.fr.
En fait le problème est super simple : lorsque le programme scp se connecte pour faire la copie, un shell du distant nommé olivierpons.fr est ouvert, et par conséquent tout ce qu’il y a dans la configuration du shell est exécuté, donc tout ce qu’il y a dans le fichier de configuration du shell .bashrc.
Pour faire simple, si vous avez fait un « echo » quelque part dans le fichier de configuration du shell .bashrc, changez le par tty -s && echo ".
L’explication est dans ce site génial, qui explique tout sur le SCP, encore mieux que mon article, qui sort pourtant numéro un sur google France lorsqu’on tape scp linux

Le monde est injuste !

shell : remplacer un retour chariot par un espace

Super facile : l’outil tr.
Exemple concret : je veux lister les fichiers d’un répertoire et tous les passer à vim, par exemple pour y appliquer une macro.

Je les liste à la main du genre :

~/ # find ws -type f
ws/jsDecision.php
ws/jsDossierDocuments.php
ws/jsInfosEmprunt.php
ws/jsInternetDocumentDossierEditer.php
ws/jsListeFormulesGaranties.php
ws/jsLogin.php

Il suffit d’ajouter | tr '\r\n' ' ' (qui signifie « transforme tous les retours chariots en espaces ») :

~/ # find ws -type f | tr '\r\n' ' '
ws/jsDecision.php ws/jsDossierDocuments.php ws/jsInfosEmprunt.php ws/jsInternetDocumentDossierEditer.php ws/jsListeFormulesGaranties.php ws/jsLogin.php

Ubuntu : installation du serveur JACK : comment faire

Voilà le résumé :

  • Je suis sous Ubuntu 10.04 ;
  • J’ai un piano avec deux prises MIDI (in et out) ;
  • J’ai acheté un adaptateur LogiLink USB Cable pour pouvoir transférer les informations de mon piano à mon PC et vice versa ;

Mon objectif est simple : faire en sorte que, quand j’appuie sur les touches du piano, ça se voie sur l’ordinateur.
Lancez le gestionnaire de paquets Synaptic.
Tapez « jack » dans « Recherche rapide ».
Une fois la liste affichée, sélectionnez pour l’installation : jackd, jack-tools, et celui auquel on ne pense pas mais qui est aussi important que le reste, j’ai nommé : qjackctl.

Voilà, une fois que tout est installé, il y a une nouvelle application qui est apparue dans le menu Applications => Sons et Video : c’est JACK Control.

La plupart des ordinateurs récents sous Linux ont un programme pour gérer le son qui est « PulseAudio ». Malheureusement il n’est pas compatible avec le serveur JACK. Donc il faut ajouter « /usr/bin/pasuspender — » qui va suspendre le programme « PulseAudio », pendant que le serveur JACK est actif. Bien sûr, dès que vous arrêterez le serveur, automatiquement le programme « PulseAudio » reprendra sa place de manière transparente. Que la vie est belle !
Ce qui suit ne concerne donc que les gens qui ont « PulseAudio », mais c’est la grande majorité.
Lancez le programme JACK Control (Applications => Sons et Video => JACK Control), et cliquez immédiatement sur le bouton « Réglages ».
Là, allez dans « Chemin du serveur », effacez tout et mettez :
/usr/bin/pasuspender -- /usr/bin/jackd

Voilà pour la première étape de « base ». Ensuite, je vais décrire comment compiler à la main une version plus récente du serveur JACK, afin de profiter des toutes dernières améliorations.

vim : l'efficacité par la preuve directe

Depuis que j’ai vu ces vidéos, je sors avec plein de femmes, j’ai plein d’argent, et je suis aimé de la France entière.

Si vous parlez couramment l’Anglais, il faut absolument que vous voyez les vidéos de ce qu’il est possible de faire avec vim et qu’on n’a pas forcément en tête.

http://vimcasts.org/

Laissez d’autre sites en commentaire si vous avez des liens intéressants. Je n’hésiterai pas à les valider !

vim : expressions régulières rechercher remplacer (mémo)

Ci-suit une série d’expressions régulières qui fonctionnent sous vim, et dont j’ai fait la traduction en langue Française, afin que vous puissiez comprendre les subtilités :

  • /^ \+$ : rechercher toutes les lignes qui commencent et finissent par une suite de minimum un ou plus d’espaces (un antislash avant le « + »)
  • /^ *$ : rechercher toutes les lignes qui commencent et finissent par une suite de minimum zéro ou plus d’espaces (pas d’antislash avant le « * »)
  • /^ \*$ : rechercher toutes les lignes qui commencent par un espace et finissent par le caractère « * » (un antislash avant le « * »)
  • /^ \{1,1\}$ : rechercher toutes les lignes qui contiennent un et un seul espace (ne pas oublier l’antislash avant les « {} »)

Et maintenant une expression complexe qui m’a été très utile :
Si vous tapez exactement cela :

:%s/\($this->[a-z]\+\)\(_\)\(.\)/\1\u\3/g

Vous aurez tous les ordres du type :

$this->Sejour_deb

Qui seront transformés en :

$this->SejourDeb

Très très utile.
Explication :

:%s/\($this->[a-z]\+\)\(_\)\(.\)/\1\u\3/g
: = exécuter un ordre ;
% = appliquer sur la totalité du document ;
s = appliquer sur la chaine (ici ligne par ligne) ;
\($this->[a-z]\+\) = groupe qui a $this-> puis une série de lettres ;
\(_\) = groupe qui a un tiret bas ;
\(.\) = groupe qui contient un caractère quel qu’il soit ;
On voit qu’il y a trois groupes, ils sont accessibles via antislash puis le numéro du groupe, exemple : »\1« , et le cas concret :
/ = remplacer par… ;

  • \1 le groupe numéro 1 ;
  • \u mettre en majuscule ;
  • \3 le groupe numéro 3 ;

/g faire toutes les occurrences trouvées.

Shell et tilde avec 'home' ou 'end' : la solution

Le solution a été trouvée ici.
Je vous la traduis en Français :
Il vous faut créer un fichier nommé .inputrc dans votre répertoire personnel, puis y ajouter les lignes suivantes :
set meta-flag on
set input-meta on
set convert-meta off
set output-meta on


"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[3~": delete-char
"\e[2~": quoted-insert
"\e[5C": forward-word
"\e[5D": backward-word

Linux mount : erreur 12. Solution à appliquer.

C’est la traduction d’un article trouvé ici.

Ci-suit comment appliquer un patch sur l’erreur assez commune « mount error 12 = Cannot allocate memory ».

[snip]
La bonne chose c’est que je l’ai corrigé, d’un point de vue Linux.
Et on est dans un groupe de discussion Linux.
Je vais donc être un bon citoyen (euh… « Internetoyen ») et expliquer comment j’ai fait afin d’aider éventuellement d’autres personnes qui se retrouveraient face à ce problème.
Il y a vraiment très peu de chose sur Internet, concernant ce sujet.

[snip]

Je fais mon article ici pour tous les autres qui pourraient être déstabilisés par cette erreur mount  :

mount error 12 = Cannot allocate memory

Ok, c’est qu’il devait sûrement y avoir quelque chose de mauvais dans la ligne de commande ou avec le système mount.cifs. C’est une erreur classique qui s’affiche sous Linux, lorsque vous tentez de monter un partage Windows XP, 2000, ou NT share et que ça ne fonctionne pas :

mount error 12 = Cannot allocate memory

Ce n’est pas un problème Linux… on s’en doute (sourire). Le problème vient de la machine Windows : c’est elle qui cause ce problème et qui refuse d’autoriser le « mount ». J’ai trouvé ce problème en faisant sous un terminal, tourner tail sur la liste des messages système d’un côté, et sous un autre terminal, tenter le mount pour voir quelles étaient les erreurs générées par la ligne de commande.

La commande qui génère l’erreur est :

[root@ohmster ~]# mount -t cifs //missy/ohmster_music /mnt/test -o username=my_user,password=my_password,rw
mount error 12 = Cannot allocate memory
Refer to the mount.cifs(8) manual page (e.g.man mount.cifs)
[root@ohmster ~]#

Les résultats du tail qui m’ont montré l’erreur :

[root@ohmster samba]# tail -f /var/log/messages
Oct 23 21:15:40 ohmster kernel: CIFS VFS: cifs_mount failed w/returncode = -12
Oct 23 21:19:43 ohmster kernel: Status code returned 0xc0000205 NT_STATUS_INSUFF_SERVER_RESOURCES
Oct 23 21:19:43 ohmster kernel: CIFS VFS: cifs_mount failed w/return code = -12
[root@ohmster samba]#

Le message NT_STATUS est suffisamment explicite, c’est bel et bien la machine Windows qui est la cause du problème, pas la machine Linux.

Ci-suit comment appliquer un patch. Le patch Windows, bien sûr.

The Solution !

Regardez le log des Events sur la machine Windows machine qui pose problème. Cherchez une croix rouge, et le mot « Error » ou « Erreur ». La source est « Srv ». L’erreur ressemblera à :

The server's configuration parameter "irpstacksize" is too small for the server to use a local device. Please increase the value of this parameter.

Si vous avez cette erreur système sur la machine Windows, alors faites ce qui suit.

Modifiez (ou créez si nécessaire) la clé de registre :

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanServer\Parameters\IRPStackSize

Si la clé n’est pas présente, créez une clé de type DWORD, appelez la IRPStackSize. Validez.

Ensuite, qu’elle soit présente, ou que vous l’ayez crée, la procédure est la même :

  • Double-cliquez dessus pour l’éditer ;
  • Mettez le bouton radio sur Décimal afin d’être sur que c’est une valeur décimale (et non pas hexadécimale) ;
  • Entrez la valeur 15 ;
  • Redémarrez la machine.
  • Si cela ne fonctionne toujours pas :
    • Montez la valeur à 18 ;
    • Redémarrez la machine une nouvelle fois.

Le problème est résolu. Allez faire vos montages partagés Samba l’esprit tranquille.


~Ohmster

Si vous avez des commentaires / suggestions, n’hésitez pas à laisser un message !

Librairie gd et gdImageStringFT() : la libération à faire

Il n’est précisé nulle part, que lorsque vous utilisez des fonctions d’écriture telle que gdImageStringFT(), il faut toujours appeler gdFontCacheShutdown() à la fin du programme pour libérer les allocations faites. C’est valgrind qui m’a montré que ce n’était pas correctement libéré. Vive valgrind !

Linux : astuces bashrc

Lorsqu’on lance un nouveau shell sous Linux, il exécute un fichier ~/.bashrc.
Dans ce fichier, on peut y mettre des choses intéressantes, notamment :

export HISTCONTROL=erasedups
export HISTSIZE=10000
shopt -s histappend

Cela signifie :

  • effacer les lignes de commande en double ;
  • se souvenir au plus de 10000 lignes de commande (on n’en a jamais assez en fait) ;
  • dire au shell d’ajouter tout cela au fichier historique existant (et non pas ré-écrire par dessus (ce qui est fait par défaut)).