<?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>La Case de l&#039;Oncle Tom &#187; apache</title>
	<atom:link href="http://case.oncle-tom.net/tag/apache/feed/" rel="self" type="application/rss+xml" />
	<link>http://case.oncle-tom.net</link>
	<description>Développement Web, bonnes pratiques et performances</description>
	<lastBuildDate>Sun, 25 Dec 2011 19:33:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="search"
           href="http://case.oncle-tom.net/opensearch"
           type="application/opensearchdescription+xml"
           title="Content Search" />		<item>
		<title>Rencontres Mondiales du Logiciel Libre : appel à conférences</title>
		<link>http://case.oncle-tom.net/2010/rmll-2010-appel-conferences/</link>
		<comments>http://case.oncle-tom.net/2010/rmll-2010-appel-conferences/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 07:00:10 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[call for paper]]></category>
		<category><![CDATA[conférences]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[jabber]]></category>
		<category><![CDATA[lighttpd]]></category>
		<category><![CDATA[logiciels libres]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[rmll]]></category>
		<category><![CDATA[xmpp]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=1492</guid>
		<description><![CDATA[Les Rencontres Mondiales du Logiciel Libre (RMLL) sont un cycle de conférences autour du logiciel libre. Ces rencontres se déroulent en 2010 à Bordeaux du 6 au 11 juillet. Je co-organise les sessions <em>Internet</em> avec <a href="http://prendreuncafe.com/">Nicolas Perriault</a>. Nous sommes ouvert à vos propositions de sujets, en français ou en anglais.]]></description>
			<content:encoded><![CDATA[<p>Les <a href="http://rmll.info/">Rencontres Mondiales du Logiciel Libre</a> (RMLL) sont un cycle de conférences autour du logiciel libre. Ces rencontres se déroulent en 2010 à Bordeaux du 6 au 11 juillet. Je co-organise les sessions <em>Internet</em> avec <a href="http://prendreuncafe.com/">Nicolas Perriault</a>. C&#8217;est dans ce cadre que je relaie l&#8217;appel à conférences. Et puis tant qu&#8217;à faire, histoire de présenter cet évènement réunissant plus de 5000 visiteurs.</p>
<p>Pour cette édition 2010, il y a 2 thématiques transversales : le développement durable et l&#8217;accessibilité.</p>
<p><img class="aligncenter size-full wp-image-1496" title="Tux" src="http://case.oncle-tom.net/images/2010/01/1264010146_tux.png" alt="Tux" width="128" height="128" /></p>
<p><span id="more-1492"></span></p>
<h3>Les thèmes des RMLL</h3>
<p>Les logiciels libres sont un vaste domaine, couvrant de multiples aspects de notre vie ordinaire &#8230; et de l&#8217;informatique. C&#8217;est pourquoi ce cycle est composé de thèmes, regroupés sur 2 jours chacun :</p>
<ul>
<li>Technique</li>
<li> Loisirs, Culture, Arts, libre diffusion</li>
<li> Économie sociale et solidaire – Développement durable</li>
<li> Accessibilité et handicap</li>
<li> Sciences, Éducation, Éducation populaire</li>
<li> Entreprises et Logiciel Libre</li>
<li> Collectivités, administrations, politiques publiques</li>
</ul>
<p>Chacune de ces thématiques comporte ensuite des sessions. Ces sessions agissent comme des sous-thèmes, afin d&#8217;affiner et guider le visiteur au sein de la centaine de conférences réparties sur 5 jours.</p>
<h3>La session Internet</h3>
<p><a href="http://prendreuncafe.com/">Nicolas</a> et moi-même nous occupons de la session Internet, sous-thème de « Technique ». Le <a href="http://2009.rmll.info/-Internet-et-communication-.html">programme 2009</a> est à disposition si cela peut vous donner des idées.<br />
Allez, quelques pistes :</p>
<ul>
<li>Firefox</li>
<li>WordPress</li>
<li>eZ Publish</li>
<li>Drupal</li>
<li>Apache, Nginx, Lighttpd &amp; cie</li>
<li>Zend Framework, Symfony, CodeIgniter</li>
<li>Jabber/XMPP/PubSubHubbub</li>
<li>OpenStreetMap</li>
<li>Licences − CreativeCommons etc.</li>
</ul>
<p>Soyez créatifs, proposez des sujets <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Internet != Web</h3>
<p>À titre de précision : si le Web fait partie de l&#8217;Internet ; l&#8217;Internet est bien plus que le Web. Cela concerne aussi bien <acronym title="Internet Relay Chat">IRC</acronym>, le transport de mails, les protocoles de transport que l&#8217;infrastructure permettant à ce nuage d&#8217;exister.</p>
<p>Donc n&#8217;hésitez pas à avoir une vision large et de ne pas vous restreindre qu&#8217;au Web − aussi bien soit-il.</p>
<h3>Pour en savoir plus</h3>
<p>Le site Web de l&#8217;édition 2010 des RMLL est en ligne à l&#8217;adresse permanente <a href="http://2010.rmll.info">http://2010.rmll.info</a>. On y trouve, entre autre, d&#8217;autres <a href="http://2010.rmll.info/Appel-a-conferences.html">informations sur l&#8217;appel à  conférences</a>.<br />
<strong>Vous avez jusqu&#8217;au début du mois de mars pour y songer</strong>.</p>
<p>Si vous avez « juste » peur d&#8217;être timide, établissez au moins le contact pour obtenir des informations.<br />
Nous sommes également passés par là donc on pourra vraisemblablement vous assister.</p>
<p>Un email vers <span class="gI"><a href="mailto:internet@listes2010.rmll.info">internet@listes2010.rmll.info</a> fera l&#8217;affaire. On vous guidera le reste du processus.</span></p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">http://2010.rmll.info/Appel-a-conferences.html</div>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2010/rmll-2010-appel-conferences/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Configuration d&#8217;Apache, MySQL et PHP à base de liens symboliques</title>
		<link>http://case.oncle-tom.net/2008/configuration-apache-mysql-php-symlinks/</link>
		<comments>http://case.oncle-tom.net/2008/configuration-apache-mysql-php-symlinks/#comments</comments>
		<pubDate>Thu, 11 Dec 2008 06:00:50 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[apparmor]]></category>
		<category><![CDATA[bonne pratique]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[logiciels libres]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[symlink]]></category>
		<category><![CDATA[ubuntu]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=1198</guid>
		<description><![CDATA[J&#8217;ai récemment passé mon poste de développement de Debian Testing vers Ubuntu 8.10. Comme toute installation from scratch, il faut passer par la case configuration. J&#8217;ai déjà expliqué comment modifier l&#8217;emplacement des données d&#8217;un serveur MySQL mais cette fois-ci on va aller encore plus loin : on ne va pas toucher aux fichiers de configuration [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai récemment passé mon poste de développement de Debian Testing vers Ubuntu 8.10. Comme toute installation <em>from scratch</em>, il faut passer par la case configuration.</p>
<p><img class="aligncenter size-full wp-image-1247" title="Configuration PHP personnalisée" src="http://case.oncle-tom.net/images/2008/12/php-custom.png" alt="" width="499" height="64" /></p>
<p>J&#8217;ai déjà expliqué comment <a href="http://case.oncle-tom.net/2008/05/04/modifier-emplacement-donnees-serveur-mysql/">modifier l&#8217;emplacement des données d&#8217;un serveur MySQL</a> mais cette fois-ci on va aller encore plus loin :</p>
<ul>
<li>on ne va pas toucher aux fichiers de configuration par défaut</li>
<li>on va pouvoir conserver toute notre configuration sur une partition séparée</li>
<li>on va être tranquille pour les éventuelles futures réinstallations</li>
</ul>
<p>C&#8217;est pas très compliqué à mettre en œuvre et au final, tout le monde y gagne !</p>
<p><span id="more-1198"></span></p>
<h3>Organisation du répertoire /home</h3>
<p>Le titre de l&#8217;article le suggère bien, cet article se consacre à la configuration des serveurs et programmes suivants :</p>
<ul>
<li>Apache 2</li>
<li><acronym title="Pre-Hypertext Processing">PHP</acronym> 5</li>
<li>MySQL 5</li>
<li>AppArmor (installé et activé par défaut depuis Ubuntu 8.04)</li>
</ul>
<p>Pour des raisons évidentes de facilité, j&#8217;ai donc créé un répertoire qui rassemble toutes mes configurations spécifiques. En voici son arborescence :</p>
<ul>
<li><strong>~/config</strong>
<ul>
<li>/<em>apache2</em>
<ul>
<li>sites-available
<ul>
<li>000-default-custom</li>
<li>local.monprojet.com</li>
<li>etc.</li>
</ul>
</li>
</ul>
</li>
<li>/<em>apparmor</em>
<ul>
<li>usr.sbin.mysqld-custom</li>
</ul>
</li>
<li>/<em>mysql</em>
<ul>
<li>my-custom.cnf</li>
</ul>
</li>
<li>/<em>php5</em>
<ul>
<li>php-custom.ini</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>Nous écrirons dans ces fichiers uniquement les points de configuration que l&#8217;on souhaite adapter. C&#8217;est plus simple à maintenir. Qui plus est, si les fichiers de configuration sont mis à jour par leur serveur respectif, nos fichiers resteront à l&#8217;abri.</p>
<p>Un des <em>moto</em> de Debian c&#8217;est la <strong>configuration à base de fichiers</strong>. Vous trouverez régulièrement des répertoires ayant un nom suivant le motif <em>application.d</em>. Donc plutôt que d&#8217;avoir 1 seul fichier de configuration, on a 1 fichier initial plus des configurations additionnelles dans ces fameux répertoires &laquo;&nbsp;.d&nbsp;&raquo;.</p>
<h3>Configuration d&#8217;Apache</h3>
<p><img class="aligncenter size-full wp-image-1246" title="Logo Apache" src="http://case.oncle-tom.net/images/2008/12/apache-logo.gif" alt="" width="248" height="70" /></p>
<p>Pour Apache la démarche est la suivante :</p>
<ol>
<li>créer les <em>Virtual Host</em> dans son répertoire personnel</li>
<li>lier les fichiers dans <em>sites-available</em></li>
<li>activer les sites à l&#8217;aide de la commande <em>a2ensite</em></li>
<li>recharger Apache</li>
</ol>
<p>La seule étape par rapport à d&#8217;habitude c&#8217;est qu&#8217;on ne crée par les <em>Virtual Host</em> directement dans /etc/apache2/sites-available et qu&#8217;on les lie depuis notre répertoire personnel.<br />
Admettons que je souhaite créer un <em>Virtual Host</em> pour une instance locale de mon blog. Je vais procéder ainsi :</p>
<ol>
<li><kbd>gedit ~/conf/apache2/sites-available/local.case.oncle-tom.net</kbd><br />
J&#8217;y ai placé une configuration somme toute minimaliste :</p>
<pre><code class="text">&lt;VirtualHost *:80&gt;
ServerName local.case.oncle-tom.net
DocumentRoot /home/oncletom/workspace/case.oncle-tom.net
ErrorLog /var/log/apache2/error.case.oncle-tom.net.log
LogLevel warn
CustomLog /var/log/apache2/access.case.oncle-tom.net.log combined
ServerSignature On
&lt;/VirtualHost&gt;</code></pre>
</li>
<li><kbd>sudo ln -s ~/conf/apache2/sites-available/local.case.oncle-tom.net /etc/apache2/sites-available/local.case.oncle-tom.net</kbd></li>
<li><kbd>sudo a2ensite local.case.oncle-tom.net</kbd></li>
<li><kbd>sudo service apache2 reload</kbd></li>
</ol>
<p>On se fendra de l&#8217;ajout d&#8217;un hôte local dans le fichiers <em>hosts</em> pour coller au plus près à l&#8217;instance de production. Toutefois je ne connais pas d&#8217;autre moyen que de modifier le fichier d&#8217;origine :-/ Si vous avez une solution je suis preneur.</p>
<h3>Configuration de MySQL</h3>
<p><img class="aligncenter size-full wp-image-744" title="Logo MySQL" src="http://case.oncle-tom.net/images/2007/08/powered-by-mysql-167x86.png" alt="" width="167" height="86" /></p>
<p>Pour MySQL c&#8217;est un peu plus compliqué car on va également en profiter pour déplacer l&#8217;emplacement par défaut des données. Pourquoi ? Pour les placer sur une partition qui ne craindra pas les formattages et les réinstallation système.<br />
Si vous aviez déjà suivi ma <a href="http://case.oncle-tom.net/2008/05/04/modifier-emplacement-donnees-serveur-mysql/">procédure de déplacement des données MySQL</a> : oubliez là. Celle-ci est largement plus aboutie.</p>
<p>Avant de se jeter à corps perdu dans les manipulations, voici la démarche entreprise :</p>
<ol>
<li>créer le fichier de configuration MySQL</li>
<li>créer le répertoire qui accueillera les données MySQL</li>
<li>lier la base <em>mysql</em> d&#8217;origine</li>
<li>modifier la configuration d&#8217;AppArmor</li>
<li>recharger la configuration des serveurs AppArmor et MySQL</li>
</ol>
<p>C&#8217;est déjà un peu plus long mais là encore, il n&#8217;y a pas grand chose à faire en fin de compte :</p>
<ol>
<li><kbd>gedit ~/conf/mysql/my-custom.cnf</kbd><br />
On y indique le nouvel emplacement de ses données MySQL :</p>
<pre><code class="text">[mysqld]
datadir            = /home/oncletom/Apps/mysql</code></pre>
</li>
<li><kbd>mkdir /home/oncletom/Apps/mysql<br />
sudo chown mysql:mysql /home/oncletom/Apps/mysql</kbd></li>
<li><kbd>ln -s /var/lib/mysql/mysql /home/oncletom/Apps/mysql/mysql</kbd></li>
<li><kbd>sudo gedit /etc/apparmor.d/usr.bin.mysql</kbd><br />
J&#8217;y ai remplacé</p>
<pre><code class="text">/var/lib/mysql/ r,
/var/lib/mysql/** rwk,</code></pre>
<p>par l&#8217;ancien chemin + le nouvel emplacement des données MySQL</p>
<pre><code class="text">/var/lib/mysql/ r,
/var/lib/mysql/** rwk,
/home/oncletom/Apps/mysql/ r,
/home/oncletom/Apps/mysql/** rwk,</code></pre>
</li>
<li><kbd>sudo service apparmor reload &amp;&amp; sudo service mysql reload</kbd></li>
</ol>
<p>Si vous avez bien suivi toutes mes explications, vous vous demanderez pourquoi j&#8217;ai modifié le profil existant de MySQL dans AppArmor au lieu de lier un nouveau profil ?<br />
Je me suis rendu compte qu&#8217;au démarrage de l&#8217;<acronym title="Operating System">OS</acronym>, <strong>AppArmor ne chargeait pas le profil personnalisé</strong> et bloquait le démarrage de MySQL. J&#8217;ai créé un <a href="http://ubuntuforums.org/showthread.php?t=977830">sujet sur Ubuntu Forums</a> après une lecture de la <a href="https://help.ubuntu.com/community/AppArmor">documentation AppArmor</a> mais pas de nouvelles. Là aussi je suis preneur car en relançant les serveurs à la main, tout fonctionne.</p>
<p>Ensuite à vous de repeupler vos bases de données à partir d&#8217;un dump. Si vous procédez à un déplacement des répertoires, n&#8217;oubliez pas de tout préserver : propriétaire et permissions ! Ça se passe avec l&#8217;option <em>-a</em> de <em>cp</em> par exemple.</p>
<h3>Configuration de <acronym title="Pre-Hypertext Processing">PHP</acronym></h3>
<p><img class="aligncenter size-full wp-image-1245" title="Logo PHP" src="http://case.oncle-tom.net/images/2008/12/php.gif" alt="" width="120" height="67" /></p>
<p>Fort heureusement pour <acronym title="Pre-Hypertext Processing">PHP</acronym> c&#8217;est plus simple puisqu&#8217;il n&#8217;y a qu&#8217;un seul petit lien symbolique à faire.<br />
À noter que la configuration modifiée sera répercutée sur toutes les configurations de <acronym title="Pre-Hypertext Processing">PHP</acronym>, que ça soit pour Apache, en CLI ou <acronym title="Common Gateway Interface">CGI</acronym>.</p>
<ol>
<li><kbd>gedit ~/conf/php/my-custom.ini</kbd><br />
J&#8217;ai ai mis par exemple :</p>
<pre><code class="text">memory_limit = 64M</code></pre>
</li>
<li><kbd>sudo ln -s ~/conf/php/my-custom.ini /etc/php5/conf.d/my-custom.ini</kbd></li>
</ol>
<p>Et voilà c&#8217;est tout pour <acronym title="Pre-Hypertext Processing">PHP</acronym>. Il faut bien entendu recharger votre serveur Web (Apache ou Lighttpd par exemple) pour qu&#8217;ils prennent en compte la modification.</p>
<h3>Conclusion</h3>
<p>J&#8217;ai déjà appliqué cette méthode par 2 fois et que dire si ce n&#8217;est que tout va plus vite ainsi !<br />
Vos fichiers de configuration restent accessibles depuis votre gestionnaire de fichiers (pas besoin de passer en <em>sudo</em> pour sauvegarder les changements). Ils sont préservés de toute réinstallation impromptue.</p>
<p><strong>Vous ne touchez que de manière minimaliste aux fichiers de configuration d&#8217;origine</strong> :</p>
<ul>
<li>/etc/hosts pour ajouter un nom d&#8217;hôte (utile seulement si vous ne souhaitez pas utiliser <em>localhost</em>)</li>
<li>/etc/apparmor.d/usr.bin.mysql pour la raison évoquée plus haut &#8230; sinon on s&#8217;en serait passé</li>
</ul>
<p>J&#8217;ai cherché à faire pareil avec <em>phpmyadmin</em> mais il ne semble pas y avoir de mécanisme de ce type. Dommage.</p>
<p>J&#8217;imagine qu&#8217;il doit y avoir des moyens similaires avec d&#8217;autres serveurs et d&#8217;autres langages. Vous procédez à un reparamétrage systématique ou bien vous utilisez une technique de ce genre ?</p>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2008/configuration-apache-mysql-php-symlinks/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>High Performance Web Sites</title>
		<link>http://case.oncle-tom.net/2008/high-performance-web-sites/</link>
		<comments>http://case.oncle-tom.net/2008/high-performance-web-sites/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 05:00:15 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[bonnes pratiques]]></category>
		<category><![CDATA[critique]]></category>
		<category><![CDATA[firebug]]></category>
		<category><![CDATA[gzip]]></category>
		<category><![CDATA[livre]]></category>
		<category><![CDATA[logiciels libres]]></category>
		<category><![CDATA[mod_deflate]]></category>
		<category><![CDATA[mod_expires]]></category>
		<category><![CDATA[mod_gzip]]></category>
		<category><![CDATA[optimisation]]></category>
		<category><![CDATA[oreilly]]></category>
		<category><![CDATA[yahoo]]></category>
		<category><![CDATA[yslow]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=943</guid>
		<description><![CDATA[High Performance Web Site, sous-titré Essential Knowledge for Frontend Engineers, est ce genre de livre à lire au moins une fois à défaut de le posséder. Il résume en à peu près 120 pages 14 points d&#8217;optimisation d&#8217;un site Web. C&#8217;est d&#8217;autant plus intéressant que l&#8217;approche se base sur les mécanismes et non sur de [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-944" title="High Performance Web Sites (couverture)" src="http://case.oncle-tom.net/images/2008/07/livre-high-performance-web-sites.jpg" alt="High Performance Web Sites (couverture)" width="240" height="240" /></p>
<p><a href="http://www.amazon.fr/dp/0596529309/">High Performance Web Site</a>, sous-titré <em>Essential Knowledge for Frontend Engineers</em>, est ce genre de <strong>livre à lire au moins une fois</strong> à défaut de le posséder. Il résume en à peu près 120 pages 14 points d&#8217;optimisation d&#8217;un site Web.</p>
<p>C&#8217;est d&#8217;autant plus intéressant que l&#8217;<strong>approche se base sur les mécanismes</strong> et non sur de l&#8217;optimisation de code. Ainsi dans la plupart des cas, vous n&#8217;aurez &laquo;&nbsp;que&nbsp;&raquo; du paramétrage serveur à faire.</p>
<p><span id="more-943"></span></p>
<p>Ce livre fait étrangement penser aux <a href="http://developer.yahoo.com/performance/">conseils de haute performance</a> prodigués par le <a href="http://developer.yahoo.com">Yahoo! Developer Network</a> et repris par l&#8217;extension <a href="http://getfirebug.com">Firefox pour Firebug</a>, j&#8217;ai nommé <a href="http://developer.yahoo.com/yslow/">YSlow</a>.<br />
C&#8217;est normal : ce livre est écrit par un ingénieur de Yahoo!, probablement un de ceux qui ont participé à la rédaction du guide de performances.</p>
<h3>Pourquoi acheter High Performance Web Sites ?</h3>
<p>On serait tenté de ne pas acheter le livre puisqu&#8217;une bonne partie de ses conseils sont repris sur le guide de haute performance cité plus haut.</p>
<p>Sachez toutefois que <strong>cet ouvrage va plus loin dans le détail</strong>, prend bien le temps de présenter ses tests de performance pour illustrer et de justifier l&#8217;application de leurs méthodes. La plupart des relevés de mesure sont effectués sur une dizaine de sites allant de Google à Amazon.</p>
<p>J&#8217;achèterais ce livre si j&#8217;étais :</p>
<ul>
<li>un <strong>administrateur système</strong> chargé d&#8217;héberger 1 ou plusieurs sites Web</li>
<li>un <strong>technicien/webmaster</strong> en charge d&#8217;un site à plus ou moins fort trafic</li>
<li>un <strong>développeur Web</strong> soucieux des performances de ses productions</li>
<li>toute personne avare en kilo-octets superflus</li>
<li>toute personne voulant <strong>accélérer les temps de réponse</strong> de son ou ses sites Web</li>
</ul>
<p style="text-align:center"><a href="http://case.oncle-tom.net/images/2008/07/yslow-emunova-components.png"><img class="size-medium wp-image-945 aligncenter" title="YSLow sur Emu Nova : les composants" src="http://case.oncle-tom.net/images/2008/07/yslow-emunova-components-300x81.png" alt="YSLow sur Emu Nova : les composants" width="300" height="81" /></a></p>
<h3>Les 14 points d&#8217;optimisation</h3>
<p>High Performance Web Sites axe son discours sur 14 points :</p>
<ol>
<li><a href="http://developer.yahoo.com/performance/rules.html#num_http">Limiter le nombre de requêtes <acronym title="HyperText Transfer Protocol">HTTP</acronym></a></li>
<li><a href="http://developer.yahoo.net/blog/archives/2007/04/high_performanc_1.html">Utiliser un Content Delivery Network (CDN)</a></li>
<li><a href="http://developer.yahoo.net/blog/archives/2007/05/high_performanc_2.html">Utiliser une entête Expires</a></li>
<li><a href="http://developer.yahoo.net/blog/archives/2007/07/high_performanc_3.html">Compresser les composants avec Gzip ou Deflate</a></li>
<li><a href="http://developer.yahoo.net/blog/archives/2007/07/high_performanc_4.html">Placer les feuilles de style en début de page</a></li>
<li><a href="http://developer.yahoo.net/blog/archives/2007/07/high_performanc_5.html">Placer les scripts JavaScript en bas de page</a></li>
<li><a href="http://developer.yahoo.net/blog/archives/2007/07/high_performanc_6.html">Éviter les expressions <acronym title="Cascading Style Sheets">CSS</acronym></a> (Internet Explorer)</li>
<li><a href="http://developer.yahoo.net/blog/archives/2007/07/rule_8_make_jav.html">Placer les scripts JavaScript et les feuilles de style dans des fichiers externes</a></li>
<li><a href="http://developer.yahoo.com/performance/rules.html#dns_lookups">Réduire le nombre d&#8217;appels à des <acronym title="Domain Name Server">DNS</acronym> différents</a></li>
<li><a href="http://developer.yahoo.net/blog/archives/2007/07/rule_8_make_jav.html">Minifier le JavaScript et les <acronym title="Cascading Style Sheets">CSS</acronym></a></li>
<li><a href="http://developer.yahoo.com/performance/rules.html#redirects">Éviter les redirections</a></li>
<li><a href="http://developer.yahoo.net/blog/archives/2007/07/high_performanc_10.html">Supprimer les doublons de scripts</a></li>
<li><a href="http://developer.yahoo.net/blog/archives/2007/07/high_performanc_11.html">Configurer ETags</a></li>
<li><a href="http://developer.yahoo.com/performance/rules.html#cacheajax">Permettre la mise en cache des appels Ajax</a></li>
</ol>
<p>Il prend cependant le soin de bien expliquer les <strong>mécanismes d&#8217;<acronym title="HyperText Transfer Protocol">HTTP</acronym></strong> et les intérêts à améliorer les performances <em>frontend</em>.</p>
<p>Le livre termine sur un comparatif des 14 points sur 10 sites, notation YSLow comprise, dont Amazon, Google, CNN, eBay, Wikipédia et Yahoo!.</p>
<h3>La mise en pratique</h3>
<p>J&#8217;étais déjà sensibilité à presque tous les points pour avoir lu ces fameuses 14 règles en utilisant l&#8217;<a href="http://case.oncle-tom.net/2007/12/25/bonnes-pratiques-firebug-developpement-web/">extension YSlow et Firebug</a>. Cependant après la lecture du livre j&#8217;ai eu davantage de clés et des exemples probants pour me convaincre de les mettre en œuvre.</p>
<p>On peut <strong>appliquer la majorité des points et les points pertinents en 1 heure</strong>. En effet, tout site ne peut se permettre d&#8217;utiliser un CDN pour accélérer les temps de réponse autour du globe.</p>
<p>Personnellement j&#8217;ai mis en place une <strong>compression Gzip directement au niveau d&#8217;Apache</strong> au lieu d&#8217;utiliser une compression effectuée en <acronym title="Pre-Hypertext Processing">PHP</acronym> (avec Gzip aussi). J&#8217;ai couplé cet effort avec la <strong>minification JavaScript</strong> et la <strong>désactivation des ETags</strong>.</p>
<p>J&#8217;avais déjà au préalable externalisés mes <acronym title="Cascading Style Sheets">CSS</acronym> et JavaScript, placé au bon endroit (mais seulement les appels externes au <acronym title="Domain Name Server">DNS</acronym> principal en bas de page) et sans doublon.</p>
<p>C&#8217;est bête à dire mais <strong>le résultat s&#8217;est vraiment senti avec des chargements de page incroyablement plus rapides</strong>. <em>YSlow</em> est effectivement un compagnon idéal pour la mise en application de ces éléments avec son analyse des performances et des composants.</p>
<p style="text-align: center;"><img class="size-full wp-image-946" title="YSLow sur Emu Nova : les statistiques" src="http://case.oncle-tom.net/images/2008/07/yslow-emunova-stats.png" alt="YSLow sur Emu Nova : les statistiques" width="402" height="379" /></p>
<h3>Conclusion</h3>
<p>J&#8217;ai dévoré <strong>High Performance Web Sites</strong> grâce à sa simplicité de rédaction, les nombreux exemples et surtout, les explications enrichissantes. Elles sont mises en application sur Yahoo! et certes, même si on peut se dire qu&#8217;on n&#8217;a pas de site de leur envergure, leurs conseils sont toujours bons à prendre.</p>
<p><strong>High Performance Web Sites</strong> est un concentré de bonnes pratiques, simples à mettre en œuvre. Pourquoi s&#8217;en priver ?</p>
<p>Ces optimisations ne sont évidemment pas les seules à mettre en place pour que tout fonctionne bien : il faut aussi produire du code <acronym title="HyperText Markup Language">HTML</acronym> propre, du JavaScript optimisé, du code application qui ne soit pas redondant.</p>
<p><strong>C&#8217;est un bon début et des pratiques à généraliser</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2008/high-performance-web-sites/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Configurer Apache pour de multiples dépôts Subversion</title>
		<link>http://case.oncle-tom.net/2007/configurer-apache-pour-de-multiples-depots-subversion/</link>
		<comments>http://case.oncle-tom.net/2007/configurer-apache-pour-de-multiples-depots-subversion/#comments</comments>
		<pubDate>Thu, 24 May 2007 18:40:41 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[httpd]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[trac]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/2007/05/24/configurer-apache-pour-de-multiples-depots-subversion/</guid>
		<description><![CDATA[J&#8217;ai commencé à faire joujou avec Subversion dans le but de versionner mes développements et y adjoindre l&#8217;excellent Trac pour gérer les projets, les incidents et la documentation. Seulement voilà, je pars dans une optique où chaque projet dispose de son propre dépôt Subversion pour me faciliter la vie dans les fusions et autres manipulations [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai commencé à faire joujou avec <a href="http://subversion.tigris.org/">Subversion</a> dans le but de versionner mes développements et y adjoindre l&#8217;excellent <a href="http://trac.edgewall.org/">Trac</a> pour gérer les projets, les incidents et la documentation. Seulement voilà, je pars dans une optique où chaque  projet dispose de son <em>propre dépôt Subversion</em> pour me faciliter la vie dans les fusions et autres manipulations amenant à croiser de nombreux fichiers.</p>
<p>S&#8217;il me paraissait logique de créer chaque dépôt manuellement dans <em>Subversion</em>, ça l&#8217;était en revanche beaucoup moins pour le serveur Web <a href="http://httpd.apache.org/">Apache</a>. Je souhaite en effet disposer d&#8217;un accès <acronym title="HyperText Transfert Protocol"><acronym title="HyperText Transfer Protocol">HTTP</acronym></acronym>, pour tester les différents protocoles <abbr title="SubVersioN"><acronym title="Subversion">SVN</acronym></abbr> entre autre. Flemme oblige, je n&#8217;avais vraiment pas envie de configurer également des alias et configurations de répertoires pour chaque dépôt.</p>
<p>Une fois de plus, <strong>la flemme a vaincu</strong>.<br />
<span id="more-635"></span><br />
Après avoir lu des billets intéressants sur l&#8217;<a href="http://www.prendreuncafe.com/blog/post/2006/09/05/489-installer-et-configurer-apache2-trac-et-subversion-sur-ubuntu">installation de Subversion sur Ubuntu</a> ainsi que l&#8217;<a href="http://www.beroot.org/Configurations/installation-subversion-trac-debian-ubuntu">installation de Subversion sur Ubuntu ou Debian</a>, je devais me rendre à l&#8217;évidence : pour chaque dépôt créé, il faut également modifier (à la main) le fichier de configuration d&#8217;Apache.</p>
<h3>Directive DirectoryMatch</h3>
<p>J&#8217;ai tenté de contourner le problème en utilisant la <a href="http://httpd.apache.org/docs/2.0/mod/core.html#directorymatch">directive DirectoryMatch d&#8217;Apache</a> mais impossible de récupérer le résultat du masque.<br />
Si vous comptiez faire ceci, oubliez de suite, ce n&#8217;est pas possible :</p>
<pre><code class="txt">&lt;directorymatch "/chemin/vers/racine/svn/([a-z0-9-]*)&gt;
 DAV svn
 SVNPath /chemin/vers/racine/svn/$1
 ...
&lt;/directorymatch&gt;
</code></pre>
<p>En effet, <code>DIrectoryMatch</code> ne fait que vérifier l&#8217;existence d&#8217;un chemin par rapport à un masque ; il n&#8217;en récupère pas le contenu pour une exploitation ultérieure. C&#8217;est bien dommage.</p>
<h3>Solution : SVNParentPath</h3>
<p>Heureusement tout a été prévu (mais rarement mentionné). Au lieu d&#8217;utiliser <code>SVNPath</code> pour renseigner le chemin <em>d&#8217;un seul dépôt</em>, il vaut mieux utiliser <code>SVNParentPath</code> qui, lui, spécifie la racine des dépôts Subversion. En gros, tous les répertoires enfants à <code>SVNParentPath</code> sont considérés comme étant des dépôts (référentiels) indépendants.</p>
<p>Exactement ce qu&#8217;il me fallait.</p>
<p>Au final, après avoir cherché à <a href="http://svn.nuxeo.org/trac/pub/wiki/TracOnWindows">configurer Subversion pour Windows</a>, voici ce que j&#8217;ai rajouté dans ma config Apache :</p>
<pre><code class="txt">&lt;Location /svn&gt;
  DAV svn
  # any /svn/foo <acronym title="Uniform Resource Locator">URL</acronym> will map to a repository D:/svn/foo
  SVNParentPath D:/svn
  #AuthType Basic
  #AuthName "Subversion repository"
  #AuthUserFile d:/svn/.<span class="searchword0">htaccess</span>
  #Require valid-user
&lt;/Location&gt;</code></pre>
<p><em>Je ferai très probablement d&#8217;autres billets sur Subversion</em>. Depuis le temps que je voulais m&#8217;y mettre, apprendre ses rouages et sa rigueur ne sont pas forcément faciles.</p>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2007/configurer-apache-pour-de-multiples-depots-subversion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Migrer un flux RSS vers Feedburner</title>
		<link>http://case.oncle-tom.net/2007/migrer-un-flux-rss-vers-feedburner/</link>
		<comments>http://case.oncle-tom.net/2007/migrer-un-flux-rss-vers-feedburner/#comments</comments>
		<pubDate>Sat, 17 Mar 2007 12:00:31 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[atom]]></category>
		<category><![CDATA[bonnes pratiques]]></category>
		<category><![CDATA[feedburner]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[xml]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/2007/03/17/migrer-un-flux-rss-vers-feedburner/</guid>
		<description><![CDATA[Pour mesurer l&#8217;utilisation des flux RSS d&#8217;Emu Nova, j&#8217;ai décidé d&#8217;utiliser Feedburner dans sa version gratuite. Je l&#8217;utilise déjà pour ce blog et j&#8217;en suis très satisfait, que ce soit pour les données fournies, les personnalisations possibles ou encore la qualité du service. La problématique du jour : comment utiliser Feedburner sur des flux RSS [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:center"><img id="image510" src="http://case.oncle-tom.net/images/2007/03/feedburner-logo.gif" alt="Feedburner logo" /></p>
<p>Pour mesurer l&#8217;utilisation des <a href="http://www.emunova.net/infos/outils/">flux <acronym title="Really Simple Syndication">RSS</acronym> d&#8217;Emu Nova</a>, j&#8217;ai décidé d&#8217;utiliser <a href="http://www.feedburner.com/">Feedburner</a> dans sa version gratuite. Je l&#8217;utilise déjà pour ce blog et j&#8217;en suis très satisfait, que ce soit pour les <em>données fournies</em>, les <em>personnalisations possibles</em> ou encore la <em>qualité du service</em>.</p>
<p><em>La problématique du jour</em> : <strong>comment utiliser Feedburner sur des flux <acronym title="Really Simple Syndication">RSS</acronym> déjà existants</strong> ? Le changement doit être transparent pour les utilisateurs.<br />
<span id="more-511"></span></p>
<h3>Créer son flux Feedburner</h3>
<p>Avant de faire quoi que ce soit, il convient de créer son flux Feedburner à partir d&#8217;un flux déjà existant (qu&#8217;on souhaite rediriger tant qu&#8217;à faire). L&#8217;étape la plus simple.</p>
<p style="text-align:center"><img id="image512" src="http://case.oncle-tom.net/images/2007/03/feedburner-create-feed.png" alt="Création d'un flux Feedburner" /></p>
<h3>Modifier les liens vers les flux</h3>
<p>Une fois le flux créé, pensez à mettre à jour <strong>tous vos liens</strong> pointant vers ce fichier (balises &lt;link /&gt;, liens hypertextes, boutons personnalisés etc.). Ceci a pour but d&#8217;unifier toute les adresses et éviter qu&#8217;il y aient plusieurs adresses visibles pour accéder à la même information.</p>
<h3>Rediriger les flux existants</h3>
<p>Arrivé à ce stade, il faut bien comprendre que nous avons 2 cas de figure :</p>
<ul>
<li><strong>les anciens abonnés</strong> : ceux qui ont souscrit au flux avant que la modification précédente n&#8217;ait eu lieu. Le changement doit être transparent pour eux et ils ne doivent pas avoir à modifier la configuration de leurs agrégateurs actuels</li>
<li><strong>les nouveaux abonnés</strong></li>
</ul>
<p>L&#8217;intérêt est d&#8217;auditer <em>tous les abonnés</em> et donc pas seulement les nouveaux. C&#8217;est là que la redirection s&#8217;avère indispensable.<br />
On est bien d&#8217;accord qu&#8217;il faudrait créer une redirection renvoyant l&#8217;ancienne adresse du flux vers la nouvelle adresse (celle fournie par Feedburner).</p>
<p>Le plus simple consiste à créer un fichier <code>.htaccess</code> (ou d&#8217;éditer directement les directives de votre serveur virtuel) dans le même répertoire que celui du fichier <acronym title="eXtensible Markup Language">XML</acronym>. Il contiendrait ce code :</p>
<pre><code>RewriteEngine on
RewriteRule ^<strong>votreFlux</strong>\.xml$ http://feeds.feedburner.com/<strong>votreFluxFeedburner</strong> [R=301,L]</code></pre>
<p>On teste, ça marche. Un peu trop bien puisqu&#8217;en suivant ce principe, quiconque appelle la véritable <acronym title="Uniform Resource Locator">URL</acronym> de votre flux sera redirigé vers le flux Feedburner. Si en soi ça ne pose pas problème majeur, <em>ça l&#8217;est pourtant pour le robot d&#8217;indexation Feedburner</em> qui, lui, a besoin d&#8217;accéder au véritable flux pour en extraire les informations.</p>
<p>Feedburner ayant bien fait les choses, leur robot d&#8217;indexation se signale en envoyant une entête <a href="http://forums.feedburner.com/viewtopic.php?t=707"><em>User Agent</em> <code>FeedBurner/1.0 (http://www.FeedBurner.com)</code></a>. Ca tombe bien, il existe un <a href="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond">filtre <code>RewriteCond</code> dans le module <em>mod_rewrite</em></a>. Ce dernier va nous servir à <strong>exclure le robot Feedburner de notre redirection</strong> précédente.</p>
<p>Juste au-dessus de notre <code>RewriteRule</code>, il suffit d&#8217;insérer la ligne suivante :</p>
<pre><code>RewriteCond %{HTTP_USER_AGENT} !FeedBurner</code></pre>
<p>L&#8217;utilisation de cette condition est d&#8217;ailleurs la seule raison pour laquelle une règle de réécriture a été employée en lieu et place d&#8217;un <code>RedirectPermanent</code>.<br />
<strong>Attention cependant</strong>, le <code>RewriteCond</code> est à spécifier à <em>chaque règle de réécriture</em>. La documentation est assez explicite à ce sujet : <strong>la condition n&#8217;est effective que pour une seule règle de réécriture</strong>.</p>
<h3>Le résultat final</h3>
<p>Et plutôt qu&#8217;un long discours, voici le résultat final obtenu pour <a href="http://www.emunova.net/">Emu Nova</a>. Les fichiers <acronym title="Really Simple Syndication">RSS</acronym> étaient placés dans le répertoire <code>go/rss/</code>. J&#8217;y ai donc placé un fichier <code>.htaccess</code> contenant le code suivant :</p>
<pre><code>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !FeedBurner
RewriteRule ^news\.xml$ http://feeds.feedburner.com/emunovaNews [R=301,L]
RewriteCond %{HTTP_USER_AGENT} !FeedBurner
RewriteRule ^veda\.xml$ http://feeds.feedburner.com/emunovaVedaTests [R=301,L]
RewriteCond %{HTTP_USER_AGENT} !FeedBurner
RewriteRule ^veda_commentaires\.xml$ http://feeds.feedburner.com/emunovaVedaCommentaires [R=301,L]
</code></pre>
<p>Pas difficile et tellement pratique <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2007/migrer-un-flux-rss-vers-feedburner/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>

