mercredi 17 octobre 2012

Embarquer une image dans un script bash

Quand je programmais en perl, une fonctionnalité de ce langage me plaisait beaucoup. Il est en effet possible d'embarquer des données dans un script après le mot clef __END__. Ces données sont alors facilement accessible dans celui-ci à  l'aide du descripteur <main::DATA> Cela donne quelque chose comme cela :

#!/usr/bin/perl

while (<main::DATA>)
{
  print $_;
}

__END__
1ère ligne
2ème ligne

Il m'est venu l'envie d'avoir la même chose en bash pour pouvoir embarquer une image à  modifier dans un script[1]. Si bash ne propose pas une telle fonction par défaut, il est très facile de l'émuler avec les outils standard d'unix. Sans plus attendre, voila ce que ça donne :

#!/bin/bash

END_LINE=$( awk '/^__END__/{print NR + 1}' $0)
tail -n +$END_LINE $0 | base64 -di | display

exit 0
__END__
iVBORw0KGgoAAAANSUhEUgAAAQgAAADAAQMAAADC9G/RAAAABlBMVEX///8AAABVwtN+AAAAVUlE
QVRYhe3TwQ2AQAhFQfpvGhNNDCxSgfNu+5nrRtxlZvTOhSCIZfo4EwRRphlBEFO873priCCIjLpu
EQRRxfZrnp0giCmiRxDEFHWqvytmBPF3cQGgZ+PFvE0lDQAAAABJRU5ErkJggg==

Les explications : grà¢ce à  awk, on récupère le numéro de ligne suivant le patern __END__. Puis tail nous permet de récupérer les données à  partir de cette ligne que l'on passe à  base64 en mode décodage. L'image ainsi obtenue est envoyée simplement à  display[2]. Libre à  vous d'en faire ce que vous voulez.On n'oubliera pas le exit avant les données, sinon bash va essayer de les interpréter comme du code.

Pour intégrer l'image, on utilisera par exemple :

$> base64 si.png >> img.sh

On peut aussi pour gagner de la place garder l'image en binaire (et éviter ainsi l'encodage/décodage base64) mais comme certains éditeurs ont parfois du mal avec les fichiers contenants du binaire, je préfère le base64. Il est facile de remplacer l'image par n'importe quoi, comme par exemple un tgz pour faire un script auto-extractible.

Voila une astuce simple mais diablement utile !

Notes

[1] pour les curieux, afin d'avoir les données de ma station météo en fond d'écran

[2] d'imagemagick


Commentaires du post original

lundi 3 septembre 2012

Une table de défonceuse d'établi

Une défonceuse est un outil génial[1] mais qui a ses limitations. En particulier, dès que l'on veut travailler sur de petites pièces ou réaliser des tà¢ches en série, la mise en place devient très vite galère et répétitive. C'est pour cela qu'en général, dès que l'on à  une défonceuse portative, on cherche à  la mettre sous table. Ceci consiste à  la fixer sous un plateau, la fraise dépassant alors vers le haut. On ne bouge plus la défonceuse, mais la pièce de bois à  travailler. Comme tout le monde j'ai donc voulu faire ça :)
Il existe une quantité incroyable de plans, de discussions et de méthodes pour faire une table de défonceuse. Dans mon cas, mon cahier des charges tenait en quelques points :
  • à  poser sur un établi plutôt qu'un meuble à  part entière (portative donc)
  • relativement simple à  réaliser
  • le moins de perte de hauteur possible (évidement)
  • utiliser un peu du bois qui traà®ne et encombre mon atelier, garage, étagères, armoires ...
J'ai donc retenu ces quelques solutions :
  • un morceau de plan de travail de cuisine (de l'aglo mélaminé épais, cela restera rigide et plat dans le temps)
  • un piètement en contreplaqué de 22 qui me reste des étagères de la cuisine
  • une plaque support pour perdre un minimum de hauteur en garantissant la rigidité (le seul achat)
  • un guide simple en CP basé sur le même principe que pour ma perceuse à  colonne
On commence donc par tracer la plaque support sur le plan de travail puis réaliser une rainure ayant comme profondeur l'épaisseur de la plaque. Comme la précision est importante à  ce point, l'aide d'un gabarit droit est très utile[2]. Il suffit ensuite de découper le surplus intérieur à  l'aide d'une scie sauteuse.

Étape suivante, le piètement. Facile, 3 morceaux de CP et 3 bouts de tasseaux. Un montage à  blanc pour tester, un petit chanfrein pour le plaisir et voila. Reste une opération importante, percer deux[3] trous dans la plaque support pour fixer la semelle de la défonceuse dessous. C'est la partie la plus critique. Il ne faut pas que les vis de fixation dépassent de la plaque et la défonceuse doit être bien maintenue.

On pourrait s'arrêter la. Un tasseau bien droit et 2 serre-joints pour le guide et ça marche ! Mais bon, pourquoi bouder son plaisir ? Allons un peu plus loin !
Comme les tables de défonceuses, les guides pour celles-çi sont multiples. Du simple tasseau (dégauchi) évoqué ci-dessus jusqu'au guide à  réglage micrométrique. Restons simples[4] : deux morceaux de CP tenus en angle droit avec des équerres, une découpe pour passer la fraise et une cage avec un trou derrière pour l'aspiration. Sitôt dit (presque)sitôt fait. On s'appliquera bien pour que le guide soit d'équerre par rapport au plan de travail et bien poncé pour que les pièces glissent bien dessus[5]. Pour le régler, très simple: un point de pivot d'un coté[6] et une pince de l'autre.

Tant qu'on est lancés, on va faire une petite boà®te pour stocker les fraises et autres petits trucs. Quitte à  avoir une défonceuse, autant l'utiliser, donc rainures et feuillures[7] nous donnent un boà®te qui ne se défera pas de sitôt :)

Enfin, on termine par les très importants poussoirs qui éloigneront les mains de cet engin somme toute très dangereux. La encore, on fait dans la récup, morceau de parquet et vieux bout de tasseaux. L'anti-dérapant est coupé dans un tapis acheté il y a des années au bricotruc du coin.

Et voila, enfin, je peux rendre fixe ma défonceuse mobile :)

Blague à  part, je ne regrette pas le temps passé, c'est super pratique. Le temps de montage/démontage est très raisonnable (quelques minutes), le réglage est assez facile (je sort la défonceuse de sous la table).
Edit: Comme je n'ai pas été très clair à  propos de l'utilisation du guide, voici quelques précisions. Tout d'abord, un plan :

On voit qu'il y a une rainure traversante découpée dans la base du guide. Positionnée en face d'un trou dans la table, elle permet à  l'aide d'un boulon de faire un point de pivot. L'autre coté peut ainsi bouger d'avant en arrière pour régler la distance entre le guide et la fraise. Le guide n'a pas besoin d'être parallèle au bords de la table[8] Le pivot est un simple trou dans la table, mais doit (dans mon cas) être une rainure dans le guide. Cela permet de déplacer le guide dans l'autre sens (de droite à  gauche) pour aligner la lumière d'aspiration avec la fraise (et aussi garder le coté proche du bord de la table pour coincer avec ma pince).

Notes

[1] Je renvoi ceux qui ne connaissent pas vers Wikipedia
[2] On pensera aussi à  préparer des butées pour éviter de dépasser des traits comme moi.
[3] ou trois selon votre défonceuse
[4] mais pas trop :)
[5] j'envisage aussi de le cirer
[6] un boulon qui traverse la table et le guide
[7] on peut même les faire avec la table nouvellement réalisée \o/
[8] ou à  l'outil, contrairement à  un guide pour scie circulaire par exemple


Commentaires du post original