<?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; svn</title>
	<atom:link href="http://case.oncle-tom.net/tag/svn/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>WordPress en tant que dépendance SVN</title>
		<link>http://case.oncle-tom.net/2008/wordpress-svn-external/</link>
		<comments>http://case.oncle-tom.net/2008/wordpress-svn-external/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 06:00:59 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[bonne pratique]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[codex]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[logiciels libres]]></category>
		<category><![CDATA[optimisation]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[wordpress mu]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=1237</guid>
		<description><![CDATA[Mettre à jour WordPress était pénible jusqu&#8217;à l&#8217;arrivée de la version 2.7. On bénéficie désormais de la mise à jour automatique : un clic, ça télécharge et ça déploie. Il existe cependant une méthode alternative reposant sur Subversion (SVN). C&#8217;est la méthode idéale pour tout développeur WordPress ou gestionnaire de blogs. C&#8217;est celle que j&#8217;emploie [...]]]></description>
			<content:encoded><![CDATA[<p>Mettre à jour WordPress était pénible jusqu&#8217;à l&#8217;arrivée de la version 2.7. On bénéficie désormais de la mise à jour automatique : un clic, ça télécharge et ça déploie.</p>
<p><img class="aligncenter size-full wp-image-912" title="Logo WordPress" src="http://case.oncle-tom.net/images/2008/05/wordpress-logo.png" alt="" width="273" height="66" /></p>
<p>Il existe cependant une <strong>méthode alternative reposant sur Subversion</strong> (<acronym title="Subversion">SVN</acronym>). C&#8217;est la méthode idéale pour tout développeur WordPress ou gestionnaire de blogs. C&#8217;est celle que j&#8217;emploie depuis la version 2.6 grâce notamment à la constante WP_CONTENT.</p>
<p>Explications et application concrète.</p>
<p><span id="more-1237"></span></p>
<p>Avant toute chose, sachez que <strong>ce tutorial est optimisé pour les personnes qui versionnent entièrement leur projet</strong>. Il n&#8217;est pas question ici d&#8217;avoir une arborescence libre et de procéder à des <em>checkout</em> un peu partout. C&#8217;est possible mais pas du plus grand intérêt.</p>
<p>L&#8217;avantage évident ici est de pouvoir déployer son blog n&#8217;importe où en un rien de temps.</p>
<h3>Structure des fichiers</h3>
<p>Installer WordPress en tant que dépendance <acronym title="Subversion">SVN</acronym> revient à mélanger 2 techniques :</p>
<ul>
<li><a href="http://codex.wordpress.org/Giving_WordPress_Its_Own_Directory">Installer WordPress dans son propre répertoire<br />
</a></li>
<li><a href="http://codex.wordpress.org/Installing_WordPress_With_Clean_Subversion_Repositories">Installer WordPress proprement depuis <acronym title="Subversion">SVN</acronym></a></li>
</ul>
<p>Je suis pénible donc je n&#8217;ai pas spécialement envie de modifier un fichier <em>core</em> ou autre chose que <em>wp-config.php</em>. Tout le contraire de ce qu&#8217;indique la première méthode.</p>
<p>La seconde explication m&#8217;a toutefois posé légèrement problème puisqu&#8217;un peu brutale et posant soucis chez OVH.</p>
<img class="size-full wp-image-1254" title="Arborescence fichier avec WordPress SVN" src="http://case.oncle-tom.net/images/2008/12/wordpress-svn-basic-filetree.png" alt="Arborescence fichier avec WordPress SVN" width="329" height="298" />
<p>Celles et ceux qui voient la capture d&#8217;écran ci-dessus peuvent constater que <em>tout WordPress</em> a été déplacé dans un sous-répertoire <em>wordpress</em> au même niveau que wp-content.<br />
On ne garde à la racine que le fichier <em>.htaccess</em> et <em>wp-config.php</em>.</p>
<p>Sur le répertoire racine, j&#8217;ai appliqué ces propriétés pour WordPress 2.7 :</p>
<ul>
<li><kbd>svn:ignore</kbd> :<kbd><br />
</kbd></p>
<pre><code class="svn">wp-config.php</code></pre>
</li>
<li><kbd>svn:externals</kbd> :<kbd><br />
</kbd></p>
<pre><code class="svn">wordpress http://svn.automattic.com/wordpress/branches/2.7</code></pre>
</li>
</ul>
<p>Je ne versionne volontairement pas le fichier wp-config.php car c&#8217;est le seul fichier susceptible de changer d&#8217;une instance à une autre. Je le récupère depuis wordpress/wp-config-sample.php et je le personnalise selon mes besoins.<br />
Et puis versionner des mots de passe &#8230; qui y tient ?</p>
<h3>Configuration</h3>
<p>Après cette restructuration, on aura toutefois besoin de configurer 2-3 bricoles. Vraiment rien de méchant promis.</p>
<h4>Le .htaccess</h4>
<p>Voici ma configuration. Elle peut être aisément déportée dans votre déclaration de <em>Virtual Host</em> pour des raisons de performance. Sur un serveur mutualisé vous n&#8217;avez en général pas accès à ce dernier type de configuration.</p>
<pre><code>&lt;IfModule mod_rewrite.c&gt;
Options -Multiviews -Indexes +FollowSymlinks
RewriteEngine On
RewriteBase /
# Moving to dependency
RewriteRule ^(index.php|wp-[a-z0-9-]+\.php|xmlrpc.php)?$ wordpress/$1 [L]
RewriteRule ^(wp-admin|wp-includes)/(.*)$ wordpress/$1/$2 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . wordpress/index.php [L]
&lt;/IfModule&gt;
# BEGIN WordPress
# END WordPress</code></pre>
<p>Ce fichier est très inspiré de la <a href="http://codex.wordpress.org/Installing_WordPress_With_Clean_Subversion_Repositories">configuration <acronym title="Subversion">SVN</acronym> proposée sur le Codex WordPress</a>. Seulement voilà, cette renvoie tout sur <em>index.php</em> &#8230; et omet ainsi tous les accès aux fichiers situés à la racine, avec entre autre :</p>
<ul>
<li>wp-cron.php</li>
<li>wp-link-opml.php</li>
<li>wp-trackback.php</li>
<li>xmlrpc.php</li>
</ul>
<p>Je vous fais grâce des contrôleurs de flux (Atom, <acronym title="Really Simple Syndication">RSS</acronym> &amp; cie) et des appels en directs à <em>index.php</em> effectués par certains plugins.</p>
<p>Donc non on ne peut pas vraiment se passer de ces fichiers. D&#8217;où ces 2 règles :</p>
<ul>
<li>
<pre><code>RewriteRule ^(index.php|wp-[a-z0-9-]+\.php|xmlrpc.php)?$ wordpress/$1 [L]
</code></pre>
<p>On capte tous les fichiers <acronym title="Pre-Hypertext Processing">PHP</acronym> (les contrôleurs) originellement situés à la racine de WordPress.</li>
<li>
<pre><code>RewriteRule ^(wp-admin|wp-includes)/(.*)$ wordpress/$1/$2 [QSA,L]</code></pre>
<p>Et là c&#8217;est pour le confort de conserver les adresses initiales &#8230; mais aussi pour éviter de modifier un bout de paramétrage dans l&#8217;admin. Le jour où vous décidez de rebasculer à l&#8217;ancien système, ça se fera sans douleur <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
</ul>
<p>Enfin, pourquoi avoir poussé les commentaires WordPress vers le bas ? Tout simplement pour <strong>éviter que nos règles personnalisées soient écrasées par WordPress</strong> lors d&#8217;une mise à jour des permaliens. Nos règles primeront toujours ainsi.</p>
<h4>Le fichier wp-config.php</h4>
<p>Dans le fichier <em>wp-config.php</em>, nous n&#8217;allons rien modifier. Nous allons juste ajouter forcer 2 paramètres. Ils indiqueront à WordPress où se trouve le véritable répertoire <em>wp-content</em> (renommable mais je ne jouerai pas avec).</p>
<img class="size-full wp-image-1262" title="wp-config.php modifié pour WordPress SVN" src="http://case.oncle-tom.net/images/2008/12/wordpress-svn-wpconfig.png" alt="wp-config.php modifié pour WordPress SVN" width="600" height="266" />
<h4>Le blog</h4>
<p>Bon j&#8217;ai menti un peu toute à l&#8217;heure en indiquant qu&#8217;on ne toucherait qu&#8217;à <em>wp-config.php</em>. Cependant la modification est on ne peut plus mineure et ne concerne que l&#8217;upload de medias.</p>
<p>En effet si on ne touche pas à l&#8217;emplacement des fichiers envoyés, WordPress considère qu&#8217;ils sont uploadés dans wordpress/wp-content/uploads. C&#8217;est fort gênant mais heureusement, en préfixant le chemin par ../ ou en tapant un chemin absolu tout rentrera dans l&#8217;ordre.</p>
<img class="size-full wp-image-1261" title="Correction de chemin pour WordPress SVN" src="http://case.oncle-tom.net/images/2008/12/wordpress-svn-file-uploads-fix.png" alt="Correction de chemin pour WordPress SVN" width="600" height="74" />
<p>À noter qu&#8217;il s&#8217;agit du <strong>seul paramétrage hors d&#8217;un fichier</strong>. Si j&#8217;avais pu m&#8217;en passer je l&#8217;aurais fait.</p>
<h3>Dépendance <acronym title="Subversion">SVN</acronym> pour la traduction</h3>
<p>C&#8217;est en tombant sur un autre <a href="http://sunfox.org/blog/2007/05/28/installation-svn-de-wordpress-et-de-ses-plugins/">article traitant de svn:externals pour WordPress</a> que j&#8217;ai été interpelé sur la prise en charge des langues via <acronym title="Subversion">SVN</acronym> également.<br />
Le système n&#8217;est pas parfait puisqu&#8217;on ne peut gérer qu&#8217;une seule langue par ce biais là. Ça ne conviendra donc pas aux blogs multilingues.</p>
<img class="size-full wp-image-1260" title="Dépendance SVN pour les traductions WordPress" src="http://case.oncle-tom.net/images/2008/12/wordpress-i18n-svn-external.png" alt="Dépendance SVN pour les traductions WordPress" width="550" height="104" />
<p>La technique consiste à transformer <code>wp-content/languages</code> en <kbd>svn:externals</kbd>.<br />
Ça donnerait ceci pour la version française de WordPress 2.7, au niveau du <kbd>svn:externals</kbd> du répertoire <code>wp-content</code> :</p>
<pre><code class="svn">languages http://svn.automattic.com/wordpress-<acronym title="internationalisation">i18n</acronym>/fr_FR/branches/2.7/messages/</code></pre>
<p><strong>Simple et efficace</strong> mais ça reste encore de la bricole.</p>
<h3>Cas particulier : plugins et <acronym title="internationalisation">i18n</acronym></h3>
<p>Je vous expose le problème mais malheureusement vous ne pourrez pas y faire grand chose. Par contre ami développeurs, pour rendre votre code de plugin 100% portable, merci de prendre note <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Le chargement des traductions s&#8217;effectue à l&#8217;aide de la fonction load_plugin_textdomain(). Elle prenait seulement 2 paramètres jusqu&#8217;à l&#8217;arrivée de WordPress 2.6. Ça n&#8217;a pas été crié sur les toits mais elle prend désormais 3 &#8230; et c&#8217;est du 3ème argument qu&#8217;il faut utiliser désormais :</p>
<ol>
<li><code class="php">$domain</code> : l&#8217;espace de nom des traduction (inchangé)</li>
<li><code class="php">$abs_rel_path</code> : chemin relatif par rapport à l&#8217;emplacement de WordPress (déprécié, on y mettait <code>PLUGINDIR.'/'.dirname(plugin_basename(__FILE__))</code> en général)</li>
<li><code class="php">$plugin_rel_path</code> :  chemin relatif par rapport à l&#8217;emplacement des plugins (c&#8217;est qui nous intéresse ; <code>dirname(plugin_basename(__FILE__))</code> nous suffira désormais)</li>
</ol>
<p>Vous trouverez un <a href="http://codex.wordpress.org/Writing_a_Plugin#Internationalizing_Your_Plugin">exemple sur le Codex, du côté de l&#8217;internationalisation des plugins</a>.<br />
Un exemple de code pérenne :</p>
<pre><code class="php">load_plugin_textdomain('votreplugin', dirname(plugin_basename(__FILE__)), dirname(plugin_basename(__FILE__)));</code></pre>
<p>Et si jamais vous utilisez votre plugin en lien symbolique ça ne fonctionnera pas &#8230; mais on s&#8217;éloigne du sujet <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Et pour WordPress Mu ?</h3>
<p>Je ne m&#8217;attarderai pas dessus mais les manipulations sont sensiblement les mêmes. Je n&#8217;ai pas encore eu l&#8217;occasion d&#8217;essayer mais j&#8217;ose imaginer qu&#8217;il n&#8217;y a pas tant de différences que ça <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h3>Conclusion</h3>
<p>Le jour où vous souhaitez migrer vers une autre version majeure de WordPress, c&#8217;est simple :<strong> il suffit de changer les externals vers le tag adéquat</strong>.</p>
<p>Pourquoi ne pas utiliser le <em>trunk</em> directement me demanderez-vous ? Le trunk de WordPress est plutôt instable puisque c&#8217;est là que se construit la prochaine version de manière systématique. L&#8217;utilisation des <strong>branches permet de bénéficier des correctifs</strong> sans avoir à modifier le moindre external.<br />
Si vous avez un grand besoin de stabilité, alors utilisez les <em>tags</em> qui sont en principe figés.</p>
<p>On remarquera aussi que malgré son âge, <strong>WordPress commence à peine à proposer des solutions d&#8217;industrialisation</strong>.<br />
Les liens symboliques sont en effet très mal gérés. Tentez d&#8217;utiliser un seul répertoire source pour plusieurs blogs avec des liens symboliques et tout s&#8217;effondre.</p>
<p>La preuve en est aussi avec le <strong>manque de ressources disponibles sur le Web</strong> et traitant ce sujet. Ça m&#8217;étonnerait d&#8217;être le premier à vouloir déployer du WordPress via <acronym title="Subversion">SVN</acronym>.<br />
Les choses s&#8217;améliorent mais pour le côté <cite>code is poetry</cite>, on en est encore loin.</p>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2008/wordpress-svn-external/feed/</wfw:commentRss>
		<slash:comments>8</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>Livres : Javascript, Subversion, CSS</title>
		<link>http://case.oncle-tom.net/2007/livres-javascript-subversion-css/</link>
		<comments>http://case.oncle-tom.net/2007/livres-javascript-subversion-css/#comments</comments>
		<pubDate>Tue, 24 Apr 2007 11:00:53 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Standards du Web]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[livres]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[svn]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/2007/04/24/livres-javascript-subversion-css/</guid>
		<description><![CDATA[Je vous l&#8217;annonce, depuis janvier 2007 je suis boulimique. Boulimique mais d&#8217;informations, de connaissances et de savoir. S&#8217;il y a bien un univers qui ne pardonne pas à ceux qui se contentent des acquis, c&#8217;est bien celui d&#8217;Internet. Donc en plus des 300 brèves quotidiennes que je lis, je viens de passer commande de trois [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:center"><img id="image578" src="http://case.oncle-tom.net/images/2007/04/ppk-javascript-css-mastery-subversion.png" alt="Ppk on Javascript / CSS Mastery / Subversion" /></p>
<p>Je vous l&#8217;annonce, depuis janvier 2007 <em>je suis boulimique</em>. Boulimique mais d&#8217;informations, de connaissances et de savoir. S&#8217;il y a bien un univers qui ne pardonne pas à ceux qui se contentent des acquis, c&#8217;est bien celui d&#8217;Internet. Donc en plus des 300 brèves quotidiennes que je lis, je viens de passer commande de trois livres :</p>
<ul>
<li><a href="http://www.quirksmode.org/book/">Ppk on Javascript</a> (<em>New Riders Publishing</em>, en anglais)</li>
<li><a href="http://www.cssmastery.com/"><acronym title="Cascading Style Sheets">CSS</acronym> Mastery</a> (<em>Friends of ED</em>, en anglais)</li>
<li><a href="http://www.editions-eyrolles.com/Livre/9782212119190/subversion">Subversion : Pratique des projets collaboratifs avec <acronym title="Subversion">SVN</acronym></a> (<em>Eyrolles</em>, en français)</li>
</ul>
<p><span id="more-579"></span><br />
Au début de l&#8217;année j&#8217;avais jeté mon dévolu sur trois autres références pour voir où j&#8217;en étais, ce que j&#8217;avais encore à apprendre (beaucoup) et ce qui pouvait me faciliter la vie :</p>
<ul>
<li><strong><acronym title="Pre-Hypertext Processing">PHP</acronym> 5 avancé</strong> (<em>Eyrolles</em>) que j&#8217;avais trouvé moyen car davantage débutant qu&#8217;avancé</li>
<li><strong>Maîtriser MySQL 5</strong> (<em>O&#8217;Reilly</em>) que je n&#8217;ai pas encore terminé mais intéressant bien que pas assez complet à mon goût au niveau des fonctions utiles</li>
<li><strong>Gestion de projets avec Subversion</strong> (<em>O&#8217;Reilly</em>) que je n&#8217;ai pas non plus terminé, très technique et instructif mais il me manquait les bases pour bien comprendre <em>comment bien utiliser Subversion</em></li>
</ul>
<p>D&#8217;ailleurs peut-être que ça en intéresse certains d&#8217;avoir une critique de plus sur ces ouvrages. Faites signe (ou canard) <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>C&#8217;est finalement en relisant un article fort intéressant concernant <a href="http://www.biologeek.com/journal/index.php/installer-un-depot-subversion-sous-ubuntu">l&#8217;installation d&#8217;un dépôt Subversion sous Ubuntu</a> que j&#8217;ai décidé de passer à l&#8217;acte.</p>
<h3>Subversion : Pratique des projets collaboratifs avec <acronym title="Subversion">SVN</acronym></h3>
<p><strong>Subversion</strong> est un formidable outil de gestion et d&#8217;archivage de fichiers très utilisé dans les projets informatiques. Il est performant, efficace et permet le travail simultané de plusieurs personnes sur un même projet. Je souhaitais coupler cet outil avec l&#8217;<strong>interface en ligne TRAC</strong> pour gérer des tickets d&#8217;incidents ainsi que les feuilles de route. <em>Pour ne plus jamais oublier un bug à corriger ou une fonctionnalité à rajouter</em>.</p>
<h3>Ppk on Javascript</h3>
<p>J&#8217;ai découvert le site de l&#8217;auteur bien avant qu&#8217;il écrive son livre et je le trouvais déjà fort bien renseigné concernant les différences de comportement entre les différents navigateurs Web concernant Javascript. Egalement de bonnes explications à propos de la gestion des objets, des évènements et les manipulations du <acronym title="Document Object Model">DOM</acronym>. Ce livre très orienté sur la pratique et l&#8217;expérience de son auteur (le plus important à mes yeux) aborde les manipulations de <acronym title="Cascading Style Sheets">CSS</acronym>, les incompatibilités des navigateurs, bien déboguer son code ainsi que des cas pratiques avec des exemples concrets. Pour que <code>Thomas = { 'taille' : 183, 'feignant' : true }</code> ne soit plus un mystère pour vous <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3><acronym title="Cascading Style Sheets">CSS</acronym> Mastery</h3>
<p>La même chose que <em>Ppk on Javascript</em> mais avec des <acronym title="Cascading Style Sheets">CSS</acronym> ! Pour bien comprendre les différents bugs des navigateurs, les histoires de DOCTYPE et de mode navigateur, les bonnes pratiques pour maintenir son code <acronym title="Cascading Style Sheets">CSS</acronym>, les hacks, les filtres et tout ce qui est recommandé ou pas. Bref ça me paraît être un bon choix.</p>
<p>Rendez-vous dans quelques temps : on verra bien si ça me servira <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2007/livres-javascript-subversion-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

