<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Linux Attitude</title>
	<atom:link href="http://linux-attitude.fr/feed?age=730" rel="self" type="application/rss+xml" />
	<link>http://linux-attitude.fr</link>
	<description>Le libre est un état d&#039;esprit</description>
	<lastBuildDate>Fri, 17 Feb 2012 08:00:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Raid 10 ou raid 0+1 ?</title>
		<link>http://linux-attitude.fr/post/raid-10-ou-raid-01?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=raid-10-ou-raid-01</link>
		<comments>http://linux-attitude.fr/post/raid-10-ou-raid-01#comments</comments>
		<pubDate>Thu, 20 May 2010 16:31:50 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Disque]]></category>
		<category><![CDATA[Matériel]]></category>
		<category><![CDATA[Savoir-faire]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=886</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: Raid 10, raid 0+1, raid 5, raid 6 Lorsqu'on parle de redondance, de haute disponibilité et de disque, on parle de Raid. J'en ai déjà parlé Voici un petit aperçu des différents types de RAID, le but est ici de trouver les qualités de chacun. Un tableau final récapitule les avantage et [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: Raid 10, raid 0+1, raid 5, raid 6</p>


<p>Lorsqu'on parle de redondance, de haute disponibilité et de disque, on parle de Raid. J'en ai <a href="http://linux-attitude.fr/post/que-faire-et-ne-pas-faire-en-raid">déjà parlé</a></p>


<p>Voici un petit aperçu des différents types de RAID, le but est ici de trouver les qualités de chacun. Un tableau final récapitule les avantage et les inconvénients qu'il y a à choisir un type de raid donné.</p>


<h3>Jbod</h3>

<p>Just a bunch of disk, ce n'est pas un raid, le choix de ceux qui veulent pouvoir ajouter des disques bout à bout sans gain de performance.</p>


<p>Contrairement au raid 0 il a un avantage, la perte d'un disque n'empêche pas la récupération des données sur les disques restants par un outil de récupération tel que photorec. En effet, comme les disques sont simplement mis bouts à bout, la plupart des fichiers tiennent intégralement sur un seul des disques. Il est donc possible d'en récupérer le contenu après un crash.</p>


<p>Le jbod se fait avec du LVM sans striping ou avec le driver linear de md.</p>


<h3>Raid 0</h3>

<p>Le choix de ceux qui veulent des performances.</p>


<p>Chaque disque est découpé en bande (stripe) et les bandes sont entrelacées pour donner le disque final. Ce qui donne un gain de performance appréciable puisque les disque peuvent être lus simultanément, même pendant la lecture d'un gros fichier. Et ils peuvent être écrits simultanément pendant les écritures.</p>


<p>Le raid 0 peut être matériel, logiciel avec le driver md de linux ou logiciel avec LVM (avec striping)</p>


<p><span id="more-886"></span></p>


<h3>Raid 1</h3>

<p>Le choix de ceux qui ne veulent pas de pertes.</p>


<p>Tous les disques sont des copies intégrales. L'avantage le plus important est que lors de la perte d'un disque tout fonctionne comme si de rien n'était. On peut donc remplacer ce disque (ou pas :-).</p>


<p>Un autre avantage existe lors des lectures non séquentielles (lors de la lecture de 2 fichiers par exemple), dans ce cas il est possible d'utiliser un disque pour chaque lecture et donc d'accélérer ce type de lecture. Par contre la lecture d'un seul gros fichier n'est pas accélérée (sous linux).</p>


<p>Il n'y a en revanche aucun impact sur l'écriture, c'est le disque le plus lent qui détermine la vitesse d'écriture (la vitesse devrait être à peu près identique pour chacun).</p>


<p>Notez qu'on peut faire du raid 1 avec plus de 2 disques.</p>


<p>Le Raid 1 peut être matériel, logiciel avec le driver md ou logicielle avec LVM (support du miroring), enfin il est possible de faire du raid1 réseau avec drbd.</p>


<h3>Raid 5</h3>

<p>Le choix des économes.</p>


<p>En raid 5 chaque disque est découpé en bande, pour chaque groupe de bandes situées au même endroit des disques, une des bandes est choisie pour contenir des octets de redondance (la différence avec le 4 c'est le choix de la bande). Ainsi ce type de raid peut survivre au crash d'un des disques (la redondance permet de reconstruire la bande manquante), mais pas de plusieurs.</p>


<p>L'avantage du raid 5 est que lorsqu'on a de nombreux disques on économise des disques de redondance en n'en achetant qu'un pour la redondance et les autres pour les données.</p>


<p>Mais le raid 5 est assez limité en performances. La lecture se passe comme pour le raid 1. Par contre l'écriture nécessite la lecture de chacune des bandes d'un groupe pour écrire la bande de données, puis calculer et écrire la bande de redondance. C'est donc très lent, à éviter pour les bases de données actives.</p>


<p>D'autre part, lors du crash d'un disque, toutes bandes des disques doivent être lues pour reconstituer une bande manquante. Ce qui implique des baisses de performances énormes, auxquelles il faut ajouter la baisse de performances due à la reconstruction du disque qu'on va remettre. Comme les disque tournent à fond, il n'est pas rare de voir un autre disque exploser en vol à ce moment là -&gt; fin des données.</p>


<p>Le raid 5 peut être matériel ou logiciel avec le driver md de linux.</p>


<h3>Raid 6</h3>

<p>Le choix des très gros disques.</p>


<p>Le raid 6 fonctionne de la même façon que le raid 5 mais ajoute un deuxième disque de redondance. Ce ne sont pas simplement les données de redondance qui sont dupliquée, mais le calcul qui est différent, toutefois le concept est identique.</p>


<p>Le raid 6 soufre des mêmes inconvénients que le raid 5, il utilise même un disque de plus donc est un peu plus cher, de plus cela provoque une écriture supplémentaire pour chaque groupe de bandes.</p>


<p>Mais le raid 6 résiste au crash de 2 disques, ce qui est intéressant lorsque les disques sont assez gros et que la reconstruction du raid comment à être assez longue (et donc le risque de perte plus gros).</p>


<p>Le raid 6 peut être matériel ou logiciel avec le driver md de linux.</p>


<h3>Raid 10</h3>

<p>Le choix des riches.</p>


<p>Le raid 10 consiste à accumuler plusieurs raid 1 avec du raid 0 pour en augmenter la taille et les performances.</p>


<p>Le raid 10 offre les avantages simultanés du raid 1 et du raid 0. La perte d'un disque n'empêche pas le raid de tourner et l'utilisation de plusieurs disques en striping permet d'augmenter les performances de lectures.</p>


<p>Le seul inconvénient, c'est qu'il coûte deux fois le prix du raid 0.</p>


<p>Il peut se faire en matériel ou logiciel, md ou lvm.</p>


<h3>Raid 0+1</h3>

<p>Le mauvais choix.</p>


<p>Le raid 0+1 consiste à mettre 2 raid 0 en parallèle pour les redonder avec du raid 1. On pourrait croire que c'est la même chose que du raid 10, mais non. Et même si certains veulent vous faire croire que les performances sont meilleures, il n'en est rien.</p>


<p>Mais surtout imaginez un instant la perte d'un disque. Dans ce cas un des raid 0 sous-jacent est perdu. Il faut donc le recréer avec un nouveau disque (ce qui est à peu près instantané puisqu'on le laisse vide), puis reconstruire le raid 1 situé au dessus. Et cette deuxième partie va être longue puisqu'elle doit être faite sur la taille totale du raid 0, contrairement au raid 10 qui ne l'aurait fait que sur la taille totale du disque perdu.</p>


<h3>Petit récapitulatif</h3>

<table>
<tr>
<th>RAID</th>
<th>jbod</th>
<th>0</th>
<th>1</th>
<th>4</th>
</tr>
<tr>
<th>Quand le choisir</th>
<td>Pas d'argent, pertes partielles acceptables</td>
<td>Besoin de performances mais pertes totales acceptées</td>
<td>Pour éviter les pertes</td>
<td>Jamais</td>
</tr>
<tr>
<th>Inconvénients</th>
<td><ul><li>Pas de redondance</li><li>Pas de gain de performances</li></ul></td>
<td><ul><li>Pas de redondance</li></ul></td>
<td><ul><li>Peu de gains de performances</li><li>La taille ne peut dépasser celle du plus petit disque</li></ul></td>
<td><ul><li>Moins bon que raid 5 dans tous les domaines</li></ul></td>
</tr>
<tr>
<th>Avantages</th>
<td><ul><li>Possibilité de récupérer une parties de données après crash</li><li>Possibilité d'étendre un disque</li></ul></td>
<td><ul><li>Performances en lecture accrues</li></ul></td>
<td><ul><li>Résistance à la perte de N-1 disque</li><li>Légère amélioration des performances en lecture.</li></ul></td>
<td><ul><li>Ceux du raid 5</li></ul></td>
</tr>
</table>


<table>
<tr>
<th>RAID</th>
<th>5</th>
<th>6</th>
<th>10</th>
<th>0+1</th>
</tr>
<tr>
<th>Quand le choisir</th>
<td>Pour le prix</td>
<td>Pour les gros raid</td>
<td>Pour la sécurité et les performances</td>
<td>Jamais</td>
</tr>
<tr>
<th>Inconvénients</th>
<td><ul><li>Performances faibles en écriture</li><li>Performances en lecture faibles après un crash</li></ul></td>
<td><ul><li>Performances faibles en écriture</li><li>Performances en lecture faibles après un crash</li></ul></td>
<td><ul><li>Cher</li></ul></td>
<td><ul><li>Cher</li><li>reconstruction très longue</li></ul></td>
</tr>
<tr>
<th>Avantages</th>
<td><ul><li>Résistance à la perte d'un disque</li><li>Coût moindre par rapport aux autres raid</li></ul></td>
<td><ul><li>Résistance à la perte de 2 disques</li><li>Coût moindre par rapport aux autres raid sauf le 5</li></ul></td>
<td><ul><li>Résistance à la perte d'un certain nombre de disque</li><li>Performances en lecture accrues</li></ul></td>
<td><ul><li>Ceux du raid 10</li></ul></td>
</tr>
</table>


<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/que-faire-et-ne-pas-faire-en-raid' rel='bookmark' title='Permanent Link: Que faire et ne pas faire en raid'>Que faire et ne pas faire en raid</a></li>
<li><a href='http://linux-attitude.fr/post/lavomatic' rel='bookmark' title='Permanent Link: LaVoMatic'>LaVoMatic</a></li>
<li><a href='http://linux-attitude.fr/post/lavenir-du-disque' rel='bookmark' title='Permanent Link: L&#8217;avenir du disque'>L&#8217;avenir du disque</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/disque" title="Disque" rel="tag">Disque</a>, <a href="http://linux-attitude.fr/tag/materiel" title="Matériel" rel="tag">Matériel</a>, <a href="http://linux-attitude.fr/tag/savoir-faire" title="Savoir-faire" rel="tag">Savoir-faire</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/raid-10-ou-raid-01/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Le xml n&#8217;est pas pour les humains</title>
		<link>http://linux-attitude.fr/post/le-xml-nest-pas-pour-les-humain?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=le-xml-nest-pas-pour-les-humain</link>
		<comments>http://linux-attitude.fr/post/le-xml-nest-pas-pour-les-humain#comments</comments>
		<pubDate>Mon, 17 May 2010 17:12:36 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Scripting]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=884</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: Aujourd'hui un thème un peu polémique mais pas trop quand même. Le XML est un descendant du SGML. C'est un format structuré de données comme l'est l'ASN1 ou le LDIF. Tous ces formats ont été inventés dans une seule optique&#160;: être facile à parser par une machine. Et pourtant quand on voit [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;:</p>


<p>Aujourd'hui un thème un peu polémique mais pas trop quand même.</p>


<p>Le <a href="http://fr.wikipedia.org/wiki/Extensible_Markup_Language" hreflang="fr">XML</a> est un descendant du <a href="http://fr.wikipedia.org/wiki/Standard_Generalized_Markup_Language" hreflang="fr">SGML</a>. C'est un format structuré de données comme l'est <a href="http://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One" hreflang="en">l'ASN1</a> ou le <a href="http://fr.wikipedia.org/wiki/LDAP_Data_Interchange_Format">LDIF</a>.</p>


<p>Tous ces formats ont été inventés dans une seule optique&nbsp;: être facile à parser par une machine. Et pourtant quand on voit les subtilités du XML et les difficultés à faire un parseur, on peut avoir des doutes... Mais de ce fait ils sont peu lisibles.</p>


<p>Ne vous méprenez pas, le XML a tout à fait sa place dans les échange de données, dans la communication entre machines. Le format est bien défini et fonctionne quel que soit le type de machine. Il est d'ailleurs très utilisé car on trouve des parseurs partout, dans presque tous les langages, et dans presque tous les frameworks.</p>


<p>Mais à force d'en user on en abuse.</p>


<p>Non le XML n'est PAS fait pour les humains&nbsp;! Le xml n'est pas à sa place dans les fichiers de configuration, à moins que vous n'ayez pour objectif que l'utilisateur ne touche jamais à ces fichiers et que vous ayez le temps de développer une interface entre l'utilisateur et la modification (texte&nbsp;? graphique&nbsp;? sonore ?).</p>


<p>Le XML est pratique car il permet au développeur d'éviter l'usage de protocoles binaires incompréhensibles et mal parsés entre deux applications. Il est pratique car un autre développeur peut lire ce protocole sans l'avoir appris. Mais vous remarquerez que je ne parle que de développeurs, pas d'utilisateurs.</p>


<p>Alors par pitié arrêtez le XML dans les fichiers destinés aux HUMAINS. Il existe bien d'autres formats ayant des parseurs et tout aussi lisibles&nbsp;:</p>
<ul>
<li>le <a href="http://fr.wikipedia.org/wiki/Fichier_INI" hreflang="fr">format INI</a></li>
<li>le <a href="http://fr.wikipedia.org/wiki/Yaml" hreflang="fr">format YAML</a></li>
<li>le <a href="http://fr.wikipedia.org/wiki/Json">format JSON</a></li>
</ul>

<p>Mieux, il existe <a href="http://onlamp.com/pub/a/onlamp/2006/02/16/introducing-lua.html" hreflang="en">LUA</a> qui vous permet à la fois d'avoir un fichier de configuration simple et lisible, mais qui en plus autorise l'utilisateur à faire des choses que vous n'auriez pas prévu, comme des configuration conditionnelles&nbsp;!</p>
	Tags:<a href="http://linux-attitude.fr/tag/code" title="Code" rel="tag">Code</a>, <a href="http://linux-attitude.fr/tag/scripting" title="Scripting" rel="tag">Scripting</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/le-xml-nest-pas-pour-les-humain/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Un interpréteur fantôme</title>
		<link>http://linux-attitude.fr/post/un-interpreteur-fantome?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=un-interpreteur-fantome</link>
		<comments>http://linux-attitude.fr/post/un-interpreteur-fantome#comments</comments>
		<pubDate>Mon, 03 May 2010 16:32:31 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Curiosité]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=413</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: Maintenant que nous savons nous servir d'un interpréteur postscript, nous allons pouvoir développer. Postscript est un langage complet au sens de Turing. C'est à dire qu'on peut tout faire avec, même faire décoller une fusée. Mais bon, avant d'en arriver là, on va essayer de faire quelque chose d'utile. Pour vous présenter [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;:</p>


<p>Maintenant que nous savons nous servir d'un interpréteur postscript, nous allons pouvoir développer. Postscript est un langage complet au sens de Turing. C'est à dire qu'on peut tout faire avec, même faire décoller une fusée. Mais bon, avant d'en arriver là, on va essayer de faire quelque chose d'utile.</p>


<p>Pour vous présenter le langage, je vous propose un exemple basé sur la fourmi de Langton. C'est une fourmi qui a ceci de particulier qu'elle ne sait que tourner. Son univers ressemble beaucoup à celui du jeu de la vie, c'est-à-dire une grille infinie de cases noires ou blanches. Lorsque la fourmi est sur une case noire, elle tourne à droite, lorsqu'elle est sur une case blanche, elle tourne à gauche. De plus elle inverse la couleur de la case sur laquelle elle se trouve.</p>


<p>Le concept est assez simple, et lorsqu'on lance la fourmi sur une grille blanche, son comportement a l'air aléatoire. Et pourtant au bout d'un moment elle fabrique ce qui ressemble à une autoroute.</p>


<p>Tout ça pour dire que le postscript c'est bien. C'est un langage à pile, qui fonctionne en notation inversée. Les possesseurs de <a href="http://fr.wikipedia.org/wiki/HP-48" hreflang="fr">HP48</a> et amateurs de RPL y retrouveront leurs petits (ou de vieux souvenirs). Les développeurs  <a href="http://fr.wikipedia.org/wiki/Forth_(langage)" hreflang="fr">forth</a> (faite sous savoir si vous êtes dans la salle) apprécieront aussi probablement.</p>


<h3>La base</h3>

<h4>Les commentaires</h4>

<p>Toute ligne commençant par un % est un commentaire.
Exemple&nbsp;:</p>
<pre>
% Rien
</pre>


<h4>Les commandes</h4>

<p>Les commandes sont des mots simples. Étant donné la notation inversée, la commande se trouve après ses arguments. Par exemple une addition&nbsp;:</p>
<pre>
5 9 add
</pre>


<p>A cette notation est associée une pile. 5 pose 5 sur la pile, 9 pose 9 sur la pile, add retire les 2 derniers éléments (donc 9 et 5) puis additionne et repose le résultat sur la pile. D'où la représentation de la pile&nbsp;:</p>
<pre>
    %avant la ligne de commande
5   % 5 
5 9 % 9
    %pendant le add (invisible)
14  % après le add 
</pre>


<p>Les commandes peuvent être séparées par des espaces ou des retours à la ligne.
<span id="more-413"></span></p>


<h4>Les variables</h4>

<p>Les variables sont définie avec la commande def. Un nom de variable se pose sur la pile avec le préfixe /. Donc pour définir la variable pi</p>
<pre>
/pi 3.1415 def
</pre>


<p>Une variable se lance ou se pose sur la pile avec son nom dans préfixe. Donc pour poser pi sur la pile&nbsp;:</p>
<pre>
pi
</pre>


<h4>Les fonctions</h4>

<p>Une fonction est tout simplement un ensemble d'instruction placées entre { }. Une fonction toute seule n'a que peu d'intérêt, mais une fonction peut être mise dans une variable avec la commande def ce qui permet de la réutiliser autant de fois que voulu.</p>


<p>Exemple une fonction qui incrémente un élément de la pile de 1&nbsp;:</p>
<pre>
/incremente { 1 add } def
</pre>


<h4>Manipulation de la pile</h4>

<p>La pile étant un élément central, il existe des opérateurs pour la manipuler. Le principaux sont&nbsp;:</p>
<ul>
<li>pop&nbsp;: retire un élément de la pile</li>
<li>dup&nbsp;: duplique un élément de la pile</li>
<li>exch&nbsp;: échange les 2 derniers éléments de la pile</li>
<li>pstack&nbsp;: affiche le contenu de la pile (utile pour le debug)</li>
<li>clear&nbsp;: vide la pile</li>
</ul>


<h4>L'affichage</h4>

<p>L'affichage étant le but ultime de postscript, vous comprendrez qu'il y a beaucoup de primitives d'affichage, essentiellement vectoriel.</p>


<p>Regardez bien ça vous rappellera le <a href="http://fr.wikipedia.org/wiki/Logo_%28langage%29" hreflang="fr">logo</a>. Dessinons un carré&nbsp;:</p>
<pre>
newpath
0 0 moveto
10 0 rlineto
10 10 rlineto
0 10 rlineto
0 0 rlineto
stroke
</pre>


<p>Petite astuce si vous testez les commandes, chaque dessin doit se terminer par un showpage (ici par exemple, juste après le stroke), cela affiche le contenu du buffer sur une page et passe à la feuille suivante.</p>


<p>Quelques exemples de commande&nbsp;:</p>
<ul>
<li>setlinewidth (un paramètre&nbsp;: la largeur de trait)</li>
<li>closepath (ferme le dessin)</li>
<li>fill (remplit un chemin fermé)</li>
</ul>

<h4>Contrôle de flux</h4>

<p>Tous comme n'importe quel langage, le postscript permet des boucles et des if sous la forme "booléen méthode if". Par exemple&nbsp;:</p>
<pre>
% incrémente le dernier élément de la pile s'il est inférieur à 10
dup 10 lt { 1 add } if
</pre>


<p>Pour une boucle for, même topo. Exemple une somme de 1 à 10&nbsp;:</p>
<pre>
% valeur initiale
0 
% début incrément fin méthode for
1 1 10 { add } for
</pre>


<p>Voilà, je n'ai fait que survoler le langage, vous trouverez plus de détail dans ce livre <a href="http://www-cdf.fnal.gov/offline/PostScript/BLUEBOOK.PDF" hreflang="en">référence</a>.</p>


<h3>Un exemple</h3>

<p>Pour continuer, j'ai écrit un petit exemple commenté <a href="http://linux-attitude.fr/public/Code/fourmi.ps">disponible en téléchargement</a>. Vous pouvez l'ouvrir avec un éditeur de texte ou utilise ps2pdf pour le rendre affichable. Cet exemple génère 75 pages visibles en PDF, chaque page correspond à 150 itérations du mouvement de la fourmi.</p>


<p>Lisez-le vous verrez que finalement le postscript c'est pas trop compliqué quand c'est pas écrit par une machine sur une seule ligne.</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/postscript-est-un-langage-de-script' rel='bookmark' title='Permanent Link: Postscript est un langage &#8230; de script'>Postscript est un langage &#8230; de script</a></li>
<li><a href='http://linux-attitude.fr/post/torture-de-cerveau' rel='bookmark' title='Permanent Link: Torture de cerveau'>Torture de cerveau</a></li>
<li><a href='http://linux-attitude.fr/post/calculatrice-en-ligne-de-commande' rel='bookmark' title='Permanent Link: Calculatrice en ligne de commande'>Calculatrice en ligne de commande</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/code" title="Code" rel="tag">Code</a>, <a href="http://linux-attitude.fr/tag/curiosite" title="Curiosité" rel="tag">Curiosité</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/un-interpreteur-fantome/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Postscript est un langage &#8230; de script</title>
		<link>http://linux-attitude.fr/post/postscript-est-un-langage-de-script?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=postscript-est-un-langage-de-script</link>
		<comments>http://linux-attitude.fr/post/postscript-est-un-langage-de-script#comments</comments>
		<pubDate>Wed, 28 Apr 2010 17:25:46 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Commande]]></category>
		<category><![CDATA[planet-libre]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=411</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: Savez-vous vraiment utiliser postscript ? Savez-vous ce qu'est postscript&#160;? Postscript est avant tout un langage, relativement complet. Ce langage se destine à l'affichage et à l'impression. Il contient donc de nombreuses primitives pour l'affichage, principalement vectoriel. Mais rien ne vous force à l'utiliser pour ça. Il existe bien des gens qui utilisent [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;:</p>


<p>Savez-vous vraiment utiliser postscript ?<br />
Savez-vous ce qu'est postscript&nbsp;?</p>


<p>Postscript est avant tout un langage, relativement complet. Ce langage se destine à l'affichage et à l'impression. Il contient donc de nombreuses primitives pour l'affichage, principalement vectoriel. Mais rien ne vous force à l'utiliser pour ça. Il existe bien des gens qui utilisent php pour faire des scripts d'administration ...</p>


<h3>Interprétation</h3>


<p>Le postscript s'interprète, les imprimantes sont donc des interpréteurs postscript, ce qui veut dire qu'on peut les programmer comme on veut. Il existe bien des gens qui programment leur carte graphique pour faire du calcul parallèle ...</p>


<p>Apprenons donc à interpréter un fichier nommé toto.ps&nbsp;:</p>
<pre>
# technique simple pour en faire un pdf
$ ps2pdf toto.ps

# ancienne technique chamane qui passe par l'imprimante
$ gs -dSAFER -dNOPAUSE -sDEVICE=deskjet -sOutputFile=\|lpr toto.ps
</pre>


<p>Vous pouvez aussi passer par l'interface de cups à la place de lpr.</p>


<p>Notez bien qu'ici l'interpréteur est ghostscript (gs) et qu'on a du spécifier le type d'imprimante, type qu'on n'a pas choisi au hasard. Pour avoir la liste des imprimantes supportées, tapez&nbsp;:</p>
<pre>
$ gs -help
</pre>

<p>Et lisez bien la liste vous verrez des bizarreries comme jpeg, png256, bmpgray ... Ce ne sont pas vraiment des imprimantes, donc vous devinez bien qu'il est donc possible de convertir très facilement un fichier postscript en image jpeg (enfin la première page en tout cas)&nbsp;:</p>
<pre>
$ gs -dSAFER -dNOPAUSE -dBATCH -sDEVICE=jpeg -sOutputFile=fichier.jpg toto.ps
</pre>


<p>Pour avoir les autres pages et la résolution de l'image, voici la commande&nbsp;:</p>
<pre>
# scriptez le si ca vous sert
$ gs -dSAFER -dNOPAUSE -dBATCH -sDEVICE=jpeg -r72 -sOutputFile=fichier-%d.jpg toto.ps
</pre>


<p>Un peu plus de détail sur les paramètres et les sorties possibles ici&nbsp;: <a href="http://pages.cs.wisc.edu/~ghost/doc/AFPL/8.00/Devices.htm" title="http://pages.cs.wisc.edu/~ghost/doc/AFPL/8.00/Devices.htm">http://pages.cs.wisc.edu/~ghost/doc...</a> ou dans le manuel.</p>


<p>Voila, on n'a pas trop parlé de script ici, mais il en sera question dans le prochain article. D'ailleurs si vous voulez développer dès à présent, il suffit de lancer gs sans -dBATCH et sans fichier postscript pour obtenir une console interactive.</p>


<p><strong>PS</strong>&nbsp;: Notez au passage qui toutes les commandes gs fonctionnent aussi avec du PDF car ce dernier est un autre langage compris par gs.</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/m4-un-langage-de-macro' rel='bookmark' title='Permanent Link: M4, un langage de macro'>M4, un langage de macro</a></li>
<li><a href='http://linux-attitude.fr/post/ecrire-un-script-en-c' rel='bookmark' title='Permanent Link: Écrire un script en C'>Écrire un script en C</a></li>
<li><a href='http://linux-attitude.fr/post/un-seul-langage-pour-les-scripts' rel='bookmark' title='Permanent Link: Un seul langage pour les scripts'>Un seul langage pour les scripts</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/commande" title="Commande" rel="tag">Commande</a>, <a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/postscript-est-un-langage-de-script/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Snapshot temporaires</title>
		<link>http://linux-attitude.fr/post/snapshot-temporaires?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=snapshot-temporaires</link>
		<comments>http://linux-attitude.fr/post/snapshot-temporaires#comments</comments>
		<pubDate>Mon, 26 Apr 2010 17:02:51 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Disque]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Système]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=678</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: lvm snapshot J'ai déjà fait des articles sur LVM. Aujourd'hui parlons de snapshot en ram et d'une nouveauté du noyau 2.6.33, le snapshot-merge. Snapshot en RAM Tout comme il est possible de faire un LV en RAM, il est possible de faire un snapshot en RAM. Pour faire un LV (Logical Volume) [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: lvm snapshot</p>


<p>J'ai déjà <a href="http://linux-attitude.fr/post/la-vraie-magie">fait</a> des <a href="http://linux-attitude.fr/post/Les-Vauriens-M-admirent">articles</a> sur <a href="http://linux-attitude.fr/post/lavomatic">LVM</a>.
Aujourd'hui parlons de snapshot en ram et d'une nouveauté du noyau 2.6.33, le snapshot-merge.</p>


<h3>Snapshot en RAM</h3>

<p>Tout comme il est possible de faire un LV en RAM, il est possible de faire un snapshot en RAM.</p>


<p>Pour faire un LV (Logical Volume) en RAM&nbsp;: il suffit d'utiliser un ramdisk comme PV(Physical Volume).</p>
<pre>
$ pvcreate /dev/rd0
$ vgcreate myvg /dev/rd0
$ lvcreate -l 100%FREE -n mylv myvg
</pre>



<p>Pour faire un snapshot en RAM&nbsp;:</p>
<pre>
$ pvcreate /dev/rd0
$ vgextend myvg /dev/rd0
$ lvcreate -L 100M -s -n mysnapshot /dev/myvg/mylv
</pre>


<p>Mais pour quoi faire&nbsp;? Pour la même chose qu'un livecd&nbsp;: transformer un périphérique en lecture seule en périphérique lecture-écriture qui perdra toutes ses modifications au prochain reboot.</p>


<p>Seul inconvénient, les ramdisk ont une taille prédéfinie au démarrage du noyau (ramdisk_size=).</p>


<p>Mais j'ai gardé le meilleur pour la suite.
<span id="more-678"></span></p>


<h3>Snapshot de test</h3>

<p>Maintenant qu'une nouvelle fonctionnalité a été ajoutée au noyau vous allez enfin pouvoir faire les snapshot dont vous aviez toujours rêvé.</p>


<p>Avant il y avait le snapshot qu'on pouvait créer, puis détruire. Selon que l'on travaillait sur le snapshot ou sur la partition originale la destruction nous ramenait à la nouvelle version ou à l'ancienne sans possibilité de choisir entre les 2 une fois le premier octet écrit. Maintenant avec le <a href="http://www.mjmwired.net/kernel/Documentation/device-mapper/snapshot.txt" hreflang="en">snapshot merge</a>, il est possible de supprimer un snapshot en réimportant les données qu'il contenait dans la partition originale. Ce qui veut dire qu'on peut choisir.</p>


<p>Prenons un exemple parce que là j'ai franchement mal expliqué.</p>


<p>Toto est un sysadmin prudent, il ne fait jamais de mise à jour du système sans être sûr que ça ne posera pas de problème. Aujourd'hui on lui demande de faire une mise à jour importante, mais il ne sait pas quelles en seront les conséquences. En bon sysadmin il a déjà un noyau à jour et par chance son système est tout en LVM. Hop une synchro (rsync), un snapshot (ou plusieurs, il a bien séparé ses partitions ...), on prévient que ca peut casser et c'est parti, upgrade&nbsp;!</p>


<p>Maintenant 2 choix sont possibles&nbsp;:</p>
<ul>
<li>Ça marche&nbsp;! Alors il suffit de supprimer le snapshot et on n'entendra plus parler de l'ancienne version.</li>
<li>Ça merde&nbsp;! Hop un petit snapshot-merge et on revient à l'ancienne version comme si de rien n'était. (lvconvert --merge)</li>
</ul>

<p>Et voilà&nbsp;! Maintenant vous pouvez faire vos mises à jour en toute sérénité&nbsp;! En fin presque&nbsp;: on parle de la racine et donc de nombreux fichiers en cours d'utilisation sur la partition en question, ce qui veut dire reboot pour pouvoir terminer le merge.
Mais le merge peut quand même se faire en live (vous pouvez déjà utiliser la partition pendant que le merge se termine en arrière plan). Il est donc possible de lancer la commande de merge, modifier son fstab si besoin et de rebooter.</p>


<p>Enfin n'oubliez pas une chose, les snapshot lvm ne fonctionnent qu'au niveau block device, c'est-à-dire en dessous du système de fichiers. C'est comme si vous enleviez le disque sans éteindre la machine, il se peut que le système de fichier ne soit pas au mieux de sa forme au moment ou vous le lancez, ayez au moins un système journalisé pour éviter les surprises et jouez du <a href="http://linux.die.net/man/8/sync" hreflang="en">sync</a> pour un peu plus de garanties.</p>


<p>Rien ne vaudra jamais les snapshot au niveau du système de fichier comme chez <a href="http://en.wikipedia.org/wiki/ZFS" hreflang="en">ZFS</a> ou le futur <a href="https://btrfs.wiki.kernel.org/index.php/Main_Page" hreflang="en">BTRFS</a>.</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/snapshot-de-snapshot' rel='bookmark' title='Permanent Link: Snapshot de snapshot'>Snapshot de snapshot</a></li>
<li><a href='http://linux-attitude.fr/post/les-vauriens-m-admirent' rel='bookmark' title='Permanent Link: Les Vauriens M&#8217;admirent'>Les Vauriens M&#8217;admirent</a></li>
<li><a href='http://linux-attitude.fr/post/la-carte-du-peripherique' rel='bookmark' title='Permanent Link: La carte du périphérique'>La carte du périphérique</a></li>
</ol>
	Tags:<a href="http://linux-attitude.fr/tag/disque" title="Disque" rel="tag">Disque</a>, <a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/systeme" title="Système" rel="tag">Système</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/snapshot-temporaires/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Power of choice</title>
		<link>http://linux-attitude.fr/post/power-of-choice?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=power-of-choice</link>
		<comments>http://linux-attitude.fr/post/power-of-choice#comments</comments>
		<pubDate>Wed, 21 Apr 2010 17:18:54 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Paul et Mickey]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=427</guid>
		<description><![CDATA[Lorsqu'on aborde le libre, on ne le voit pas du tout de la même façon selon qu'on est un utilisateur expérimenté ou non. Un utilisateur expérimenté commencera par explorer cet univers et découvrira à chaque fois une nouvelle façon de faire, une solution plus ou moins adaptée à ses besoins. Progressivement, il se forgera un [...]]]></description>
			<content:encoded><![CDATA[<p>Lorsqu'on aborde le libre, on ne le voit pas du tout de la même façon selon qu'on est un utilisateur expérimenté ou non.</p>


<p>Un utilisateur expérimenté commencera par explorer cet univers et découvrira à chaque fois une nouvelle façon de faire, une solution plus ou moins adaptée à ses besoins. Progressivement, il se forgera un opinion sur les logiciels qu'il rencontre (emacs c'est bien, vim c'est mal). Celle-ci peut varier au cours du temps et des nouvelles technologies qu'il rentre.</p>


<p>Cette possibilité de choisir est une composante essentielle du logiciel libre et on constate que dans la plupart des domaines des centaines de choix vous sont proposés. Le site <a href="http://distrowatch.com/" hreflang="en">distrowatch</a> est un exemple de la diversité des distributions, sa page de statistiques compte 297 distributions.</p>


<p>C'est une bonne chose, mais maintenant plaçons-nous dans la peau d'un novice. La première chose qu'il voit est la même&nbsp;: un choix gigantesque et permanent. Quelle distribution&nbsp;? Quel éditeur de texte&nbsp;? Quel navigateur&nbsp;? Tout ce choix tue le choix.</p>


<p>Devoir choisir est difficile pour trois raisons. La première est que lorsqu'on est nouveau <strong>on ne connait pas du tout</strong> le domaine ni les critères de choix. Rien ne nous indique pourquoi choisir telle ou telle solution. Il faut alors aller chercher l'information et comparer les différentes possibilités soi-même.</p>


<p>La deuxième est qu'il faut <strong>disposer de temps</strong> pour faire ce choix. Mais le temps est une richesse qu'on ne veut pas nécessairement dépenser. Une personne riche de son temps peut le dépenser à tout va, mais cette richesse se fait de plus en plus rare et nombreux sont ceux qui préfèreront dépenser leur temps à pêcher ou à partir à la chasse au kangourou.</p>


<p>La troisième est la <strong>pression</strong> psychologique <strong>du choix</strong>. Ai-je fait le bon choix&nbsp;? N'y avait-il pas un meilleur choix&nbsp;? C'est quelque part une bonne chose pour une personne expérimentée qui va passer son temps à se demander s'il n'y a pas mieux et à sauter sur la moindre occasion d'améliorer les choses. Mais la plupart des gens risquent de trouver cet excès de choix trop difficile.</p>



<p><strong>Conclusion</strong>&nbsp;: Trop de choix tue le choix&nbsp;!</p>


<p><strong>Conclusion 2</strong>&nbsp;: Il faut faire les choix à la place des débutants.</p>Aucun tag pour cet article.]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/power-of-choice/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Tout n&#8217;est pas fichier</title>
		<link>http://linux-attitude.fr/post/tout-nest-pas-fichier?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=tout-nest-pas-fichier</link>
		<comments>http://linux-attitude.fr/post/tout-nest-pas-fichier#comments</comments>
		<pubDate>Mon, 19 Apr 2010 16:53:00 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=24</guid>
		<description><![CDATA[Niveau&#160;: &#160;&#160;&#160;&#160;&#160; Résumé&#160;: syscall Il paraît que sous unix tout est fichier. Vous allez voir que ce n'est pas tout à fait vrai. La seule interface du noyau avec ses processus est la table des appels systèmes, dont voici la liste pour linux (et les prototypes en C). Vous y trouverez en gros 3 catégories&#160;: [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="s">&nbsp;</span><span class="e">&nbsp;</span><span class="e">&nbsp;</span><br />
<strong>Résumé</strong>&nbsp;: syscall</p>


<p>Il paraît que sous unix tout est fichier. Vous allez voir que ce n'est pas tout à fait vrai.</p>


<p>La seule interface du noyau avec ses processus est la table des appels systèmes, dont voici <a href="http://lxr.linux.no/#linux+v2.6.33/arch/x86/kernel/syscall_table_32.S" hreflang="en">la liste</a> pour linux (et les <a href="http://lxr.linux.no/#linux+v2.6.33/include/linux/syscalls.h" hreflang="en">prototypes en C</a>). Vous y trouverez en gros 3 catégories&nbsp;: les appels liés aux fichiers, les appels liés aux processus, les appels liés au temps. Dans les fichiers on trouve entre autre le réseau, et dans les processus on trouve entre autre la gestion de la mémoire et des signaux. Donc sous unix tout est <strong>fichier</strong> ou <strong>processus</strong> ou <strong>temps</strong> (souvenez-vous du temps où on l'appelait <a href="http://cm.bell-labs.com/cm/cs/who/dmr/cacm.html" hreflang="en">time sharing system</a>).</p>


<p>Malgré leur grand nombre, les appels système ne font finalement que peu de choses. Quelques opérations de base, et puis c'est tout. En fait la grande majorité du code de linux est appelé à travers des lectures/écritures sur des fichiers.</p>


<p>Le code du driver de votre disque dur est appelé lors de la lecture d'un répertoire. Le code de nombreux drivers est appelé lors de l'utilisation d'un fichier dans /dev, le code de configuration de linux est appelé lors de l'utilisation de /sys ... Ce qui est beau dans cette histoire c'est qu'on ne s'en rend pas compte, les méthodes utilisées sont toujours les mêmes (open, read, write ...)</p>


<p>Notez quand même que tout cela forme une API du noyau un peu plus vaste que les appels systèmes&nbsp;: les numéros de bloc dans /dev, les noms dans /sys, le format de fichier dans /proc, ne sont pas interchangeables. C'est une API au dessus de l'API fichier. C'est à cause ou plutôt grâce à elle qu'on dit que tout est fichier.</p>


<p>Mais retenez surtout ceci&nbsp;: tout est <strong>fichier</strong> ou <strong>processus</strong> ou <strong>temps</strong>.</p>

<p></p><p>Si vous avez aimé, il y a aussi : </p><ol><li><a href='http://linux-attitude.fr/post/gestion-des-attributs-d-un-fichier' rel='bookmark' title='Permanent Link: Gestion des attributs d&#8217;un fichier'>Gestion des attributs d&#8217;un fichier</a></li>
<li><a href='http://linux-attitude.fr/post/fichier-sorti-du-chapeau' rel='bookmark' title='Permanent Link: Fichier sorti du chapeau'>Fichier sorti du chapeau</a></li>
<li><a href='http://linux-attitude.fr/post/coup-de-fil-pour-le-noyau' rel='bookmark' title='Permanent Link: Coup de fil pour le noyau'>Coup de fil pour le noyau</a></li>
</ol>Aucun tag pour cet article.]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/tout-nest-pas-fichier/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced (Requested URI contains query)
Database Caching 21/85 queries in 0.309 seconds using apc
Object Caching 1625/1692 objects using apc
Content Delivery Network via N/A

Served from: linux-attitude.fr @ 2012-05-21 23:23:51 -->
