<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>tyPouypOblOg : Tag shell, everything about shell</title>
    <link>http://www.typouype.org/tag/shell.rss</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>Libre, Ruby, Objet, OpenBSD, Programmation</description>
    <item>
      <title>Ruby vs Shell</title>
      <description>&lt;p&gt;Que je n&amp;#8217;aime pas ce genre de comparaison. Ou plut&#244;t ce que je n&amp;#8217;aime pas c&amp;#8217;est de chercher un vainqueur. En fait je voulais vous raconter une petite histoire informatique.&lt;/p&gt;


	&lt;p&gt;Un jour, chez mon actuel client, je me suis retrouv&#233; face a un &lt;em&gt;cas d&amp;#8217;&#233;cole&lt;/em&gt;: faire un programme pour r&#233;aliser une purge de la base de donn&#233;e, mais pas enti&#232;rement, juste quelque table &lt;em&gt;fonctiono-transactionnelle&lt;/em&gt;.&lt;/p&gt;


	&lt;p&gt;Une bonne chose pour moi, un programme existe d&#233;j&#224; dans le foutoir^la boite &#224; outil de l&amp;#8217;&#233;quipe en place. Ce programme va me permettre d&amp;#8217;extraire la liste des tables d&#233;pendantes de celle que je veut purger. J&amp;#8217;appel ce programme (r&#233;alis&#233; dans un langage propri&#233;taire, comme l&amp;#8217;application) en passant en param&#232;tre la table que je souhaite supprimer, et lui va aller d&#233;clencher les divers &lt;em&gt;trigger&lt;/em&gt; en interceptant les erreurs pour pouvoir faire la liste de toutes les tables d&#233;pendantes. Bien, je r&#233;p&#232;te l&amp;#8217;op&#233;ration pour toutes les tables que j&amp;#8217;ai &#224; &lt;em&gt;nettoyer&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;A la sorti je me retrouve avec un gros fichier texte, contenant plusieurs fois le m&#234;me nom de table &#224; divers endroit du fichier, pas tr&#232;s pratique. Il faut que je nettoie tout &#231;a. Apparemment mes coll&#232;gues font &#231;a &#224; la main habituellement&amp;#8230; Moi c&amp;#8217;est hors de question. L&amp;#8217;informatique c&amp;#8217;est justement fais pour faciliter le travail non ?&lt;/p&gt;


	&lt;p&gt;Alors je lance &lt;a href="http://cygwin.com/"&gt;cygwin&lt;/a&gt; (heureusement qu&amp;#8217;il est autoris&#233; chez mon client celui l&#224;, sinon j&amp;#8217;aurais pleur&#233; !!) et je regarde quelque manpage pour v&#233;rifier les commandes &#224; utiliser. Je trouve mon bonheur, et le dieu pipe va grandement m&amp;#8217;aider sur le coup:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;cat fichierlistedetables | tr A-Z a-z | sort | uniq &amp;gt; listedetableuniquetrier&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;ol&gt;
	&lt;li&gt;La commande &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=cat&amp;#38;apropos=0&amp;#38;sektion=0&amp;#38;manpath=OpenBSD+Current&amp;#38;arch=i386&amp;#38;format=html" title="1"&gt;cat&lt;/a&gt; permet de &lt;em&gt;lire&lt;/em&gt; le contenu d&amp;#8217;un fichier. &lt;/li&gt;
		&lt;li&gt;Dieu pipe va ensuite transf&#233;rer ce contenu &#224; la commande &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=tr&amp;#38;apropos=0&amp;#38;sektion=0&amp;#38;manpath=OpenBSD+Current&amp;#38;arch=i386&amp;#38;format=html" title="1"&gt;tr&lt;/a&gt; qui elle va me mettre le contenu en minuscule (c&amp;#8217;est plus pratique pour trier (c&amp;#8217;est le A-Z a-z qui pr&#233;cise le type de transformation &#224; appliquer au contenu). &lt;/li&gt;
		&lt;li&gt;Dieu pipe intervient encore pour passer ce contenu minuscule &#224; la commande &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=sort&amp;#38;apropos=0&amp;#38;sektion=0&amp;#38;manpath=OpenBSD+Current&amp;#38;arch=i386&amp;#38;format=html" title="1"&gt;sort&lt;/a&gt; qui va elle, comme sont nom l&amp;#8217;indique, trier le contenu. &lt;/li&gt;
		&lt;li&gt;Dieu pipe une derni&#232;re fois va passer le contenu minuscule tri&#233; &#224; la commande &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=uniq&amp;#38;apropos=0&amp;#38;sektion=0&amp;#38;manpath=OpenBSD+Current&amp;#38;arch=i386&amp;#38;format=html" title="1"&gt;uniq&lt;/a&gt; qui comme sont nom l&amp;#8217;indique encore, va &#233;liminer les doublons. &lt;/li&gt;
		&lt;li&gt;Dieu pipe passe la main ici &#224; la reine &amp;gt; qui va me permettre d&amp;#8217;&#233;crire le r&#233;sultat de tout &#231;a dans un fichier et non &#224; l&amp;#8217;&#233;cran.&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;Je me retrouve avec un fichier parfait pour faire ma purge.&lt;/p&gt;


	&lt;p&gt;C&amp;#8217;est bien beau, mais une question trottais dans ma t&#234;te: Comment faire cela en Ruby ? Est-ce que j&amp;#8217;y arriverais en une ligne aussi ?&lt;/p&gt;


	&lt;p&gt;Et bien comme d&amp;#8217;hab, oui c&amp;#8217;est faisable, et oui avec Ruby on peut le faire en une ligne.&lt;/p&gt;


	&lt;p&gt;Quel int&#233;r&#234;t ? Dans le mien auccun, &#224; part mon plaisir. Mais si ce script devais &#234;tre re-utilis&#233;, ou bien int&#233;grer &#224; un outil plus vaste, cela aurait tout de suite plus d&amp;#8217;int&#233;r&#234;t :)&lt;/p&gt;


	&lt;p&gt;Voil&#224; ce que &#231;a donne:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="constant"&gt;File&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;open&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&lt;span class="expr"&gt;#{ARGV[0]}&lt;/span&gt;_usorted&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;a&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;)&lt;/span&gt; &lt;span class="punct"&gt;{|&lt;/span&gt;&lt;span class="ident"&gt;content&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt; 
&lt;span class="ident"&gt;content&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="punct"&gt;((&lt;/span&gt;&lt;span class="constant"&gt;IO&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;readlines&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="constant"&gt;ARGV&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="number"&gt;0&lt;/span&gt;&lt;span class="punct"&gt;])).&lt;/span&gt;&lt;span class="ident"&gt;collect&lt;/span&gt; &lt;span class="punct"&gt;{|&lt;/span&gt;&lt;span class="ident"&gt;line&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt; &lt;span class="ident"&gt;line&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;downcase&lt;/span&gt;&lt;span class="punct"&gt;}).&lt;/span&gt;&lt;span class="ident"&gt;uniq&lt;/span&gt;
&lt;span class="punct"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;&lt;em&gt;Bon, en une ligne c&amp;#8217;est un poil abus&#233; et pas lisible c&amp;#8217;est pour cela que je le pr&#233;sente sur plusieurs :),  mais c&amp;#8217;est faisable&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;Pour faire cela, une bonne lecture des objets &lt;a href="http://www.ruby-doc.org/core/classes/Array.html"&gt;Array&lt;/a&gt;, &lt;a href="http://www.ruby-doc.org/core/classes/IO.html"&gt;IO&lt;/a&gt; et &lt;a href="http://www.ruby-doc.org/core/classes/File.html#M002602"&gt;File&lt;/a&gt; iront tr&#232;s bien :)&lt;/p&gt;</description>
      <pubDate>Wed, 05 Mar 2008 22:40:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:2b7dfafe-f2e4-468c-967b-d4bdc2df12b3</guid>
      <comments>http://www.typouype.org/2008/03/05/ruby-vs-shell#comments</comments>
      <category>Ruby</category>
      <category>shell</category>
      <category>script</category>
      <link>http://www.typouype.org/2008/03/05/ruby-vs-shell</link>
    </item>
    <item>
      <title>OpenBSD - USB Mount</title>
      <description>&lt;p&gt;Voici deux petit script shell pour les utilisateurs d&amp;#8217;OpenBSD  et autres&amp;#8230; Enfin uniquement ceux qui utilise ce genre de syst&#232;me sur leur(s) desktop(s).&lt;/p&gt;


	&lt;p&gt;Le montage/d&#233;montage (pas avec un tournevis hein, je dis &#231;a pour Terckan surtout ;-)), en fait, c&amp;#8217;est le fait de &lt;em&gt;rendre disponible un p&#233;riph&#233;rique externe sur son OS&lt;/em&gt;. Et de nos jour y&amp;#8217;en a un paquet: Clef usb, baladeur num&#233;rique, apareil photo num&#233;rique, lecteur de carte, disque dur externe, imprimante, scanner&amp;#8230;&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.openbsd.org"&gt;OpenBSD&lt;/a&gt; et d&amp;#8217;autres OS utilisent le d&#233;mons &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=hotplugd&amp;#38;sektion=8&amp;#38;arch=i386&amp;#38;apropos=0&amp;#38;manpath=OpenBSD+Current" title="8"&gt;hotplugd&lt;/a&gt; pour &lt;em&gt;surveiller&lt;/em&gt; l&amp;#8217;activit&#233; de branchement du mat&#233;riel &#224; connectique &lt;span class="caps"&gt;USB&lt;/span&gt;. Sous OpenBSD (utilisateurs d&amp;#8217;autres *nix utilisant hotplug: attention, il y a peut-&#234;tre des petites adaptations &#224; faire) on modifie le &lt;em&gt;/etc/rc.conf.local&lt;/em&gt; pour y ajouter l&amp;#8217;activation du d&#233;mon hotplug:&lt;/p&gt;


&lt;pre&gt;
hotplugd_flags="" 
&lt;/pre&gt;

	&lt;p&gt;Voil&#224;, avec &#231;a, le d&#233;mon nous remontera des infos sur la connexion de notre mat&#233;riel. Dans le dmesg sous OpenBSD &#231;a donne &#231;a:&lt;/p&gt;


&lt;pre&gt;
umass0 at uhub1 port 1 configuration 1 interface 0 "USB 2.0 Flash Disk" rev 2.00/1.00 addr 2
umass0: using SCSI over Bulk-Only
scsibus2 at umass0: 2 targets
sd1 at scsibus2 targ 1 lun 0: &amp;lt;USB 2.0, Flash Disk, 5.00&amp;gt; SCSI2 0/direct removable
sd1: 4052MB, 516 cyl, 255 head, 63 sec, 512 bytes/sec, 8300032 sec total
&lt;/pre&gt;

	&lt;p&gt;Et dans le log d&amp;#8217;activit&#233; des d&#233;mons (&lt;em&gt;/var/log/daemon&lt;/em&gt;):&lt;/p&gt;


&lt;pre&gt;
Feb  1 20:27:39 libellule hotplugd[18399]: sd1 attached, class 2
Feb  1 20:27:39 libellule hotplugd[18399]: scsibus2 attached, class 0
Feb  1 20:27:39 libellule hotplugd[18399]: umass0 attached, class 0
&lt;/pre&gt;

	&lt;p&gt;&lt;em&gt;hotplug&lt;/em&gt; va donc appeler un script lors du branchement d&amp;#8217;apareil, et un lors du d&#233;branchement: &lt;em&gt;/etc/hotplug/attach&lt;/em&gt;  pour le branchement et &lt;em&gt;/etc/hotplug/detach&lt;/em&gt; pour le d&#233;branchement. Ces deux scripts ne sont en g&#233;n&#233;ral pas fourni, &#224; chacun de ce les concocter.&lt;/p&gt;


	&lt;p&gt;On en trouve plusieurs sur le net, moi je suis parti d&amp;#8217;un trouv&#233; sur &lt;a href="http://undeadly.org/"&gt;undeadly&lt;/a&gt; que j&amp;#8217;ai un peu modifier. Vous les trouverez dans ma zone: &lt;a href="http://zone.typouype.org/attach"&gt;zone.typouype.org/attach&lt;/a&gt; et &lt;a href="http://zone.typouype.org/detach"&gt;zone.typouype.org/detach&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Je risque tr&#232;s certainement de les retoucher encore (aahh le refactoring, quel plaisir ! :)), je tacherais de vous le signaler (si vous d&#233;cid&#233; de les utiliser, &#231;a pourrais servir. D&amp;#8217;ailleurs n&amp;#8217;h&#233;sitez pas &#224; me signaler les am&#233;liorations diverses que vous pourriez apporter dessus hein ! :)&lt;/p&gt;


	&lt;p&gt;En gros, ces scripts &lt;em&gt;monte&lt;/em&gt; la ressources branch&#233; dans &lt;em&gt;/mnt&lt;/em&gt; puis cr&#233;e un lien dans le &lt;em&gt;/home&lt;/em&gt; de l&amp;#8217;utilisateur actuellement connect&#233; au syst&#232;me (faudrais voir avec plusieurs personne loggu&#233; ce que &#231;a donne :-/) dans un repertoire &lt;em&gt;/home/${user}/mount&lt;/em&gt;.&lt;/p&gt;


	&lt;p&gt;J&amp;#8217;aimerais bien changer certaines chose rapidement comme les droits des fichiers ainsi disponible, les points de montages, et bien d&amp;#8217;autres chose que je n&amp;#8217;ai pas en t&#234;te.&lt;/p&gt;


	&lt;p&gt;Amusez vous bien :)&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;edit: Correction des blockquote textile. Merci Zifro de m&amp;#8217;avoir signal&#233; les &amp;#8220;bq.&amp;#8221; qui trainait.&lt;/em&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 01 Feb 2008 20:17:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:7ff4cb8b-f7a1-4a08-8ac8-b11f358e2278</guid>
      <comments>http://www.typouype.org/2008/02/01/openbsd-usb-mount#comments</comments>
      <category>OpenBSD</category>
      <category>Hotplug</category>
      <category>hotplugd</category>
      <category>shell</category>
      <category>usb</category>
      <category>mount</category>
      <link>http://www.typouype.org/2008/02/01/openbsd-usb-mount</link>
    </item>
  </channel>
</rss>
