<?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>Blackotine</title>
	<atom:link href="http://www.blackotine.fr/feed" rel="self" type="application/rss+xml" />
	<link>http://www.blackotine.fr</link>
	<description>Blog d&#039;un intégrateur et développeur Web</description>
	<lastBuildDate>Tue, 24 May 2011 22:50:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Pied d&#8217;écran vertical en Lego</title>
		<link>http://www.blackotine.fr/divers/pied-decran-vertical-en-lego</link>
		<comments>http://www.blackotine.fr/divers/pied-decran-vertical-en-lego#comments</comments>
		<pubDate>Tue, 24 May 2011 22:01:20 +0000</pubDate>
		<dc:creator>nico</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[diy]]></category>
		<category><![CDATA[écran]]></category>
		<category><![CDATA[lego]]></category>
		<category><![CDATA[pied]]></category>

		<guid isPermaLink="false">http://www.blackotine.fr/?p=213</guid>
		<description><![CDATA[Pour changer un petit post Do It Yourself. Je l&#8217;ai fait en septembre dernier mais comme je n&#8217;avais rien posté depuis longtemps, c&#8217;est l&#8217;occasion. La problématique, un écran que je voulais passer en orientation verticale pour l&#8217;utiliser en écran secondaire dédié au développement. En effet cette orientation est beaucoup plus pratique pour coder, il suffit de [...]]]></description>
			<content:encoded><![CDATA[<p>Pour changer un petit post Do It Yourself. Je l&#8217;ai fait en septembre dernier mais comme je n&#8217;avais rien posté depuis longtemps, c&#8217;est l&#8217;occasion.<br />
<strong> La problématique</strong>, un écran que je voulais passer en <strong>orientation verticale</strong> pour l&#8217;utiliser en écran secondaire dédié au développement. En effet cette orientation est beaucoup plus pratique pour coder, il suffit de l&#8217;utiliser pour l’adopter !<br />
Le problème c&#8217;est que je ne voyais pas comment faire (à moindre coût, voire sans aucune dépense).</p>
<p>Mais la solution me vint de l&#8217;ami Babozor dans son podcast <a href="http://www.lagrottedubarbu.com">LaGrotteDuBarbu</a>, épisode <a href="http://www.lagrottedubarbu.com/2010/08/19/lagrottedubarbu-saison-03-episode-07-legopiedecranvertical/">Saison 03 Episode 07 – LegoPiedEcranVertical</a>.</p>
<p>Mais oui bien sûr, les Lego ! Bon j&#8217;ai bien entendu comme tout le monde,j&#8217;ai eu un doute sur la solidité de l&#8217;ensemble mais poussé par la curiosité et par mon âme d&#8217;enfant je me suis dit que j&#8217;allais essayer.<br />
J&#8217;ai profité de la visite d&#8217;amis et de la parfaite coincidence du fait que je venais de retrouver ma vielle boite de Lego (bon d&#8217;accord ma mère m&#8217;a dit &laquo;&nbsp;Tu les prends ou je les jette&nbsp;&raquo;, donc forcément je les avaient ramenés chez moi sans trop savoir ce que j&#8217;allais en faire)<br />
Le truc important, comme le remarque Babozor, c&#8217;est le système de répartition de masse (avec la forme en triangle). Et c&#8217;est vrai que cela marche vraiment bien.<br />
Au départ tout le monde m&#8217;a dit que c&#8217;était n&#8217;importe quoi mais au final tout le monde est parti dans sa petite construction.</p>
<p>En conclusion, on est parti un peu en live et au final la structure est quelque peu noyée sous le reste. Mais bon on s’est bien éclaté à faire ça et maintenant mon bureau a trop la classe !</p>
<p><a href="http://www.blackotine.fr/wp-content/uploads/2011/05/img1009n.jpg" rel="lightbox"><img class="alignleft size-medium wp-image-215" title="img1009n" src="http://www.blackotine.fr/wp-content/uploads/2011/05/img1009n-201x300.jpg" alt="" width="201" height="300" /></a><a href="http://www.blackotine.fr/wp-content/uploads/2011/05/img1007j.jpg" rel="lightbox"><img class="alignleft size-medium wp-image-214" title="img1007j" src="http://www.blackotine.fr/wp-content/uploads/2011/05/img1007j-256x300.jpg" alt="" width="256" height="300" /></a></p>
<a href='http://twitter.com/share?url=http%3A%2F%2Fwww.blackotine.fr%2F%3Fp%3D213&count=horizontal&related=&text=Pied%20d%26%23039%3B%C3%A9cran%20vertical%20en%20Lego' class='twitter-share-button' data-text='Pied d&#039;écran vertical en Lego' data-url='http://www.blackotine.fr/?p=213' data-counturl='http://www.blackotine.fr/divers/pied-decran-vertical-en-lego' data-count='horizontal' data-via='scarpopo'></a>]]></content:encoded>
			<wfw:commentRss>http://www.blackotine.fr/divers/pied-decran-vertical-en-lego/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Avec Free tout est compris, sauf l’assistance</title>
		<link>http://www.blackotine.fr/non-classe/avec-free-tout-est-compris-sauf-lassistance</link>
		<comments>http://www.blackotine.fr/non-classe/avec-free-tout-est-compris-sauf-lassistance#comments</comments>
		<pubDate>Wed, 07 Apr 2010 16:40:57 +0000</pubDate>
		<dc:creator>nico</dc:creator>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[assistance]]></category>
		<category><![CDATA[free]]></category>

		<guid isPermaLink="false">http://www.blackotine.fr/?p=198</guid>
		<description><![CDATA[La mauvaise réputation Tout le monde le sait. Même si des efforts ont pu être observés : compte Twitter @LALIGNEDEFREE, Angélique BERGE (Directrice de la Relation Abonnés) très présente et active, allant parfois jusqu&#8217;à intervenir pour débloquer des situations, des chiffres tentant de montrer que le S.A.V. de Free est au top&#8230; Sur le terrain, [...]]]></description>
			<content:encoded><![CDATA[<h2>La mauvaise réputation</h2>
<p>Tout le monde le sait. Même si des efforts ont pu être observés : compte Twitter <a href="http://twitter.com/LALIGNEDEFREE">@LALIGNEDEFREE</a>, Angélique BERGE (Directrice de la Relation Abonnés) très présente et active, allant parfois jusqu&#8217;à intervenir pour débloquer des situations, des chiffres tentant de montrer que le S.A.V. de Free est au top&#8230;<br />
Sur le terrain, ceux qui ont malheureusement dû faire appel à la hotline savent de quoi je parle. Les rares fois ou cela se déroule à peu près sans encombres, on reste étonnement surpris. Ce qui me semble tout de même assez illogique.</p>
<p>J&#8217;ai décidé de partager mon expérience avec l&#8217;opérateur Free au sujet d&#8217;une coupure de ligne ayant pour cause l&#8217;utilisation d&#8217;un numéro de téléphone qui ne m&#8217;appartenait pas.<br />
Si on ne le sait pas et qu&#8217;on utilise le numéro de l&#8217;ancien locataire mais que celui n&#8217;a pas résilié son abonnement voilà ce qui peut arriver.</p>
<p>J&#8217;écris cet article, parce que :</p>
<ul>
<li>Je sais que beaucoup de personne on eu des problèmes avec leur abonnement.</li>
<li>Peut-être aurai-je de bons conseils pour faire avancer mon dossier.</li>
<li>Ça soulage (un peu) de l&#8217;écrire.</li>
</ul>
<h2>Résumé de l&#8217;incident</h2>
<p>- <strong>15/09/2009</strong> : Déménagement dans le nouveau logement et demande d&#8217;ouverture de la ligne (via la procédure de déménagement sur internet car j&#8217;étais déjà abonné Free) avec le numéro de téléphone fourni par les anciens locataires. Ce numéro devait correspondre précisément au numéro de la ligne résiliée auprès de France Telecom précédemment et qui arrivait dans ce logement. Je m&#8217;aperçus plus tard que ce n&#8217;était malheureusement pas le cas.</p>
<p>- <strong>21/09/2009</strong> : Ouverture de la ligne. Jusqu&#8217;ici tout va bien</p>
<p>- <strong>11/02/2010</strong> : Coupure de la ligne. La Freebox ne se synchronise plus. J&#8217;appelle la hotline et apprends que le numéro a été réalloué à une autre ligne. J&#8217;apprends également que le numéro ne m&#8217;appartenait pas, que tout ça est donc normal car j&#8217;ai commis une erreur en faisant une demande d&#8217;inscription avec ce numéro. Il faut donc &laquo;&nbsp;reconstruire&nbsp;&raquo; la ligne avec un nouveau numéro.<br />
Deux choix me sont proposés : immédiatement avec facturation (90€) ou bien dans un délai de 10 à 15 jours mais gratuitement.<br />
La différence de prix correspond, me dit-on, au fait que si Free se charge de l&#8217;opération cela sera immédiat, sinon c&#8217;est France Télécom et aucune garantie sur le délai ne peut m&#8217;être fournie.<br />
Je me dis, à tord, que 90€ c&#8217;est une somme et qu&#8217;un sevrage de 15 jours devra être supportable et choisis donc d&#8217;attendre un peu plus longtemps.</p>
<p>- <strong>08/03/2010</strong> : Presqu&#8217;un mois sans nouvelle. J&#8217;estime avoir été assez patient. Je rappelle. Je m&#8217;aperçois assez rapidement qu&#8217;il n&#8217;y a pas de suivi client et je me vois forcé de raconter la même histoire de nouveau. Apparemment j&#8217;ai bien fait d&#8217;appeler, dixit mon interlocuteur. Il se charge de relancer France Télécom. Je n&#8217;ai toujours rien a payer, mais on me propose tout de même de le faire pour aller plus vite. J&#8217;hésite mais je garde (naïvement) confiance en Free. Je recevrai un SMS pour dès que ma ligne sera activée, tout est merveilleux, cela devrai prendre à peine 15 jours (encore?!)</p>
<p>- <strong>07/04/2010</strong> : Un mois plus tard : RIEN ! Je regarde le chenillard tourner en rond indéfiniment et je rappelle la hotline. &laquo;&nbsp;Bonjour , je voudrai avoir des nouvelles quant à l&#8217;avancer des &laquo;&nbsp;travaux&nbsp;&raquo; sur ma ligne.&nbsp;&raquo; Bon bien sûr je rêve, il n&#8217;y a toujours pas de suivi client ou plutôt si, il y en a bien un, mais j&#8217;ai l&#8217;impression qu&#8217;il n&#8217;est disponible que si le client s&#8217;efforce de tout répéter avant car miraculeusement après avoir fini mon &laquo;&nbsp;histoire&nbsp;&raquo; l&#8217;opératrice me confirme tous mes dires. Je ne comprends pas vraiment mais je reste calme.<br />
Elle contacte un responsable technique qui l&#8217;informe que ma ligne a été ouverte sur un numéro qui ne m&#8217;appartenait pas. C&#8217;est pas vrai ! Alors ça pour une info ! Il faut refaire une inscription&#8230; Je ne vous cache pas que là j&#8217;ai légèrement péter les plombs. Je me suis vu tel Bill Murray dans <em>Un jour sans fin</em>.<br />
Mais le comble c&#8217;est que maintenant je n&#8217;ai plus le choix, je dois payer ! Le tarif est passé a 62€ (aucune explication). La gratuité a apparemment été refusée et mon dossier était donc en attente. En attente de rien, mais en attente.<br />
Lorsque je demande pourquoi personne ne m&#8217;a contacté j&#8217;ai le droit à un magnifique &laquo;&nbsp;Il n&#8217;est pas indiqué dans votre dossier que vous avez demandé à être rappelé&nbsp;&raquo;.<br />
Donc voilà, j&#8217;ai donné mon autorisation pour être facturé pour les &laquo;&nbsp;travaux&nbsp;&raquo; sur ma ligne et je dois attendre encore 15 jours.</p>
<p>En résumé ce qu&#8217;on entends un peu partout est vrai : <strong>Free tant que ça marche, c&#8217;est la meilleure offre, sinon, &laquo;&nbsp;Bonne chance !&nbsp;&raquo;</strong></p>
<a href='http://twitter.com/share?url=http%3A%2F%2Fwww.blackotine.fr%2F%3Fp%3D198&count=horizontal&related=&text=Avec%20Free%20tout%20est%20compris%2C%20sauf%20l%E2%80%99assistance' class='twitter-share-button' data-text='Avec Free tout est compris, sauf l’assistance' data-url='http://www.blackotine.fr/?p=198' data-counturl='http://www.blackotine.fr/non-classe/avec-free-tout-est-compris-sauf-lassistance' data-count='horizontal' data-via='scarpopo'></a>]]></content:encoded>
			<wfw:commentRss>http://www.blackotine.fr/non-classe/avec-free-tout-est-compris-sauf-lassistance/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Corriger la largeur des options d’une liste select dans IE et afficher le contenu masqué</title>
		<link>http://www.blackotine.fr/javascript/corriger-la-largeur-des-options-dune-liste-select-dans-ie-et-afficher-le-contenu-masque</link>
		<comments>http://www.blackotine.fr/javascript/corriger-la-largeur-des-options-dune-liste-select-dans-ie-et-afficher-le-contenu-masque#comments</comments>
		<pubDate>Wed, 17 Feb 2010 20:00:30 +0000</pubDate>
		<dc:creator>nico</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[select]]></category>

		<guid isPermaLink="false">http://www.blackotine.fr/?p=183</guid>
		<description><![CDATA[Voici un petit javascript permettant de corriger un bug d&#8217;Internet Explorer (qui a dit &#171;&#160;Un de plus !&#160;&#187; ?) . Il s&#8217;agit du cas où les options d&#8217;une liste à choix multiples d&#8217;un formulaire, sont trop longues pour rentrer dans la taille de cet élément select lorsqu&#8217;on a fixé sa taille en CSS. Dans un [...]]]></description>
			<content:encoded><![CDATA[<p>Voici un petit javascript permettant de corriger un bug d&#8217;Internet Explorer (qui a dit &laquo;&nbsp;Un de plus !&nbsp;&raquo; ?) .</p>
<p>Il s&#8217;agit du cas où les options d&#8217;une liste à choix multiples d&#8217;un formulaire, sont trop longues pour rentrer dans la taille de cet élément select lorsqu&#8217;on a fixé sa taille en CSS. Dans un navigateur moderne, quand on visualise les choix disponibles, la taille de la liste est adaptée (la taille de l&#8217;élément parent select n&#8217;est pas modifiée). Dans ce cher IE, la liste garde la même taille que le select et on ne voit donc pas la totalité des options, n&#8217;ayant que les n premiers caractères affichés.</p>
<p>Les images valant mieux qu&#8217;un long discours, en voici deux pour illustrent ce problème. Ici, j&#8217;ai fixé la largeur à 300px :</p>
<p><strong>Avec Firefox, Safari, Chrome, Opéra&#8230; : </strong><br />
<img class="alignnone size-full wp-image-192" src="http://www.blackotine.fr/wp-content/uploads/2010/02/select_ff.png" alt="Avec Firefox, Safari, Chrome, Opéra..." width="548" height="96" /></p>
<p><strong>Avec Internet Explorer toutes versions confondues : </strong><br />
<img class="size-full wp-image-187 alignnone" src="http://www.blackotine.fr/wp-content/uploads/2010/02/select_ie.png" alt="Avec Firefox, Safari, Chrome, Opéra..." width="310" height="95" /></p>
<p>Comme on peut le voir, avec IE, si les contenus des options sont long, ils sont tronqués, ce qui n&#8217;est pas très pratique.<br />
Pour corriger ce problème un petit javascript qui ne sera executé que sous Internet Explorer.<br />
Le principe est le suivant : On recherche tous les champs select (on peut être plus précis sur le sélecteur si besoin). On passe la largeur en auto le temps de récupérer la largeur nécessaire pour un affichage correct. Lors de l&#8217;ouverture de la liste, on applique cette largeur.<br />
Pour ne pas modifier la mise en page, j&#8217;ai choisi de passer la liste en positionnement absolu lorsque sa taille est modifiée. C&#8217;est un choix qui pourrait avoir des conséquence sur votre mise en page. A vous de modifier ou de proposer une meilleure solution.</p>
<p>P.S : C&#8217;est à base de <a href="http://mootools.net/">Mootools</a>, mais adaptable à d&#8217;autres frameworks si besoin.</p>
<pre class="brush: javascript">
if(Browser.Engine.trident){
function adjustWidth(el,m){
el.setStyle(&#039;width&#039;,m+&#039;px&#039;);
el.setStyle(&#039;position&#039;,&#039;absolute&#039;);
}
function reinitWidth(el,s,p){
el.setStyle(&#039;width&#039;,s);
el.setStyle(&#039;position&#039;,p);
}
$$(&#039;form select&#039;).each(function(cb){
var initsize = cb.getStyle(&#039;width&#039;),initposition = cb.getStyle(&#039;position&#039;),maxsize = 0;
cb.setStyle(&#039;width&#039;,&#039;auto&#039;);
maxsize=cb.offsetWidth;
cb.setStyle(&#039;width&#039;,initsize);
if (maxsize &gt; initsize.substring(0,initsize.length-2)) {
cb.addEvent(&#039;mousedown&#039;,function(e){adjustWidth(cb,maxsize);});
window.document.addEvent(&#039;click&#039;, function(e) {if(e.target != cb) reinitWidth(cb,initsize,initposition);});
cb.addEvent(&#039;change&#039;,function(e){reinitWidth(cb,initsize,initposition);});
}
});
}
</pre>
<a href='http://twitter.com/share?url=http%3A%2F%2Fwww.blackotine.fr%2F%3Fp%3D183&count=horizontal&related=&text=Corriger%20la%20largeur%20des%20options%20d%E2%80%99une%20liste%20select%20dans%20IE%20et%20afficher%20le%20contenu%20masqu%C3%A9' class='twitter-share-button' data-text='Corriger la largeur des options d’une liste select dans IE et afficher le contenu masqué' data-url='http://www.blackotine.fr/?p=183' data-counturl='http://www.blackotine.fr/javascript/corriger-la-largeur-des-options-dune-liste-select-dans-ie-et-afficher-le-contenu-masque' data-count='horizontal' data-via='scarpopo'></a>]]></content:encoded>
			<wfw:commentRss>http://www.blackotine.fr/javascript/corriger-la-largeur-des-options-dune-liste-select-dans-ie-et-afficher-le-contenu-masque/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Label et input, syntaxe et accessibilité</title>
		<link>http://www.blackotine.fr/divers/label-et-input-syntaxe-et-accessibilite</link>
		<comments>http://www.blackotine.fr/divers/label-et-input-syntaxe-et-accessibilite#comments</comments>
		<pubDate>Thu, 18 Jun 2009 19:39:57 +0000</pubDate>
		<dc:creator>nico</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[accessibilite]]></category>
		<category><![CDATA[ergonomie]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[input]]></category>
		<category><![CDATA[label]]></category>
		<category><![CDATA[syntaxe]]></category>

		<guid isPermaLink="false">http://www.blackotine.fr/?p=165</guid>
		<description><![CDATA[L&#8217;élément label permet de rattacher une information à un contrôle par le biais d&#8217;une étiquette. En clair, cliquer sur le texte à l&#8217;intérieur d&#8217;un élément label permet de place le curseur sur l&#8217;élément correspondant du formulaire. Il est à la fois question d&#8217;ergonomie et d&#8217;accessibilité. Il est donc primordial d&#8217;ajouter un élément label pour chaque [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;élément <em>label</em> permet de rattacher une information à un contrôle par le biais d&#8217;une étiquette.<br />
En clair, cliquer sur le texte à l&#8217;intérieur d&#8217;un élément <em>label</em> permet de place le curseur sur l&#8217;élément correspondant du formulaire. Il est à la fois question d&#8217;ergonomie et d&#8217;accessibilité.<br />
Il est donc primordial d&#8217;ajouter un élément <em>label</em> pour chaque champs d&#8217;un formulaire.</p>
<h2>Syntaxe</h2>
<p>Deux méthodes existent, pour lier un <em>label</em> au champ correspondant, la relation peut être explicite ou implicite.</p>
<h3>Relation explicite :</h3>
<p>L&#8217;étiquette est définie par l&#8217;attribut <em>for</em> dans <em>label</em> et identifiée grâce à l&#8217;attribut <em>id</em> du champ de formulaire ciblé.</p>
<pre class="brush: html">&lt;label for=&quot;nom&quot;&gt;Nom &lt;/label&gt;
&lt;input id=&quot;nom&quot; name=&quot;firstname&quot; type=&quot;text&quot; /&gt;</pre>
<h3>Relation implicite :</h3>
<p>Il s&#8217;agit d&#8217;imbriquer le champ dans la balise label, il n&#8217;est donc plus nécessaire de renseigner les attributs <em>for</em> de label et <em>id</em> du champ.</p>
<pre class="brush: html">
&lt;label&gt;
Nom
&lt;input name=&quot;firstname&quot; type=&quot;text&quot; /&gt;
&lt;/label&gt;</pre>
<p>Ces deux méthodes sont détaillés dans la <a href="http://www.w3.org/TR/html401/interact/forms.html#h-17.9.1">documentation du W3C</a></p>
<h2>Accessibilité</h2>
<p>Cependant la solution des labels implicites, bien qu&#8217;étant parfaitement valide, n&#8217;est plus admise car elle n&#8217;est <strong>pas reconnue</strong> par tous les dispositifs d&#8217;accessibilité, elle est d&#8217;ailleurs <strong>proscrite par les <a href="http://www.w3.org/TR/2004/WD-WCAG20-HTML-TECHS-20041119/#label-implicit">normes d&#8217;accessibilité WCAG2.0</a> </strong></p>
<p>Voilà, il n&#8217;y a donc en fait qu&#8217;<strong>une seule solution</strong>, <strong>la relation explicite</strong>, et l&#8217;autre, bien que fonctionnant, ne doit <strong>jamais être utilisée</strong>.</p>
<a href='http://twitter.com/share?url=http%3A%2F%2Fwww.blackotine.fr%2F%3Fp%3D165&count=horizontal&related=&text=Label%20et%20input%2C%20syntaxe%20et%20accessibilit%C3%A9' class='twitter-share-button' data-text='Label et input, syntaxe et accessibilité' data-url='http://www.blackotine.fr/?p=165' data-counturl='http://www.blackotine.fr/divers/label-et-input-syntaxe-et-accessibilite' data-count='horizontal' data-via='scarpopo'></a>]]></content:encoded>
			<wfw:commentRss>http://www.blackotine.fr/divers/label-et-input-syntaxe-et-accessibilite/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mise à jour WordPress 2.8 et message qui refuse de disparaitre</title>
		<link>http://www.blackotine.fr/divers/mise-a-jour-wordpress-2-8-message-refuse-disparaitre</link>
		<comments>http://www.blackotine.fr/divers/mise-a-jour-wordpress-2-8-message-refuse-disparaitre#comments</comments>
		<pubDate>Mon, 15 Jun 2009 09:30:12 +0000</pubDate>
		<dc:creator>nico</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[message]]></category>
		<category><![CDATA[mise a jour]]></category>
		<category><![CDATA[notification]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.blackotine.fr/?p=154</guid>
		<description><![CDATA[Les personnes ayant effectué une mise à jour de leur blog WordPress vers la version 2.8 ont peut-être eu un souci avec le message &#171;&#160;WordPress 2.8 est disponible ! Pensez à faire une mise à jour.&#160;&#187; qui reste affiché une fois la mise à jour faite. Ce problème vient de d&#8217;un bug lors de la [...]]]></description>
			<content:encoded><![CDATA[<p>Les personnes ayant effectué une mise à jour de leur blog WordPress vers la version 2.8 ont peut-être eu un souci avec le message &laquo;&nbsp;WordPress 2.8 est disponible ! Pensez à faire une mise à jour.&nbsp;&raquo; qui reste affiché une fois la mise à jour faite.</p>
<p>Ce problème vient de d&#8217;un bug lors de la génération des packs localisés et d&#8217;une variable manquante dans le fichier versions.php</p>
<p><a href="http://www.wordpress-fr.net/blog/wordpress/nouvelle-version-du-pack-francais">La solution</a> est assez simple, il suffit d&#8217;éditer ce fichier (wp-includes/version.php)  et d&#8217;ajouter à la fin la ligne :<br />
<strong>$wp_local_package = &#8216;fr_FR&#8217;;</strong></p>
<a href='http://twitter.com/share?url=http%3A%2F%2Fwww.blackotine.fr%2F%3Fp%3D154&count=horizontal&related=&text=Mise%20%C3%A0%20jour%20Wordpress%202.8%20et%20message%20qui%20refuse%20de%20disparaitre' class='twitter-share-button' data-text='Mise à jour Wordpress 2.8 et message qui refuse de disparaitre' data-url='http://www.blackotine.fr/?p=154' data-counturl='http://www.blackotine.fr/divers/mise-a-jour-wordpress-2-8-message-refuse-disparaitre' data-count='horizontal' data-via='scarpopo'></a>]]></content:encoded>
			<wfw:commentRss>http://www.blackotine.fr/divers/mise-a-jour-wordpress-2-8-message-refuse-disparaitre/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Coins arrondis en css et javascript</title>
		<link>http://www.blackotine.fr/javascript/coins-arrondis-en-css-et-javascript</link>
		<comments>http://www.blackotine.fr/javascript/coins-arrondis-en-css-et-javascript#comments</comments>
		<pubDate>Wed, 25 Mar 2009 11:00:45 +0000</pubDate>
		<dc:creator>nico</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[coins]]></category>
		<category><![CDATA[coins arrondis]]></category>
		<category><![CDATA[mootools]]></category>

		<guid isPermaLink="false">http://www.blackotine.fr/?p=137</guid>
		<description><![CDATA[Récemment, j&#8217;ai du découper un design comportant de nombreux coins arrondis, de tout styles, avec ou sans bordures, couleur de fond etc&#8230; J&#8217;ai donc cherché un script simple à mettre en place et très modulable et comme je n&#8217;ai pas trouvé quelque chose qui correspondait exactement à mes besoins, j&#8217;ai décidé de créer mon propre [...]]]></description>
			<content:encoded><![CDATA[<p>Récemment, j&#8217;ai du découper un design comportant de nombreux coins arrondis, de tout styles, avec ou sans bordures, couleur de fond etc&#8230;</p>
<p>J&#8217;ai donc cherché un script simple à mettre en place et très modulable et comme je n&#8217;ai pas trouvé quelque chose qui correspondait exactement à mes besoins, j&#8217;ai décidé de créer mon propre script.</p>
<p>Avant tout, je suis contient que le fait de devoir créer des éléments supplémentaires juste pour satisfaire un besoin de mise en page est une technique à proscrire car cela n&#8217;a aucun sens. Tout devrait pouvoir se faire directement dans le CSS. Oui mais voilà, le CSS 3 et sa gestion native des bords arrondis (-moz-border-radius et -webkit-border-radius pour Firefox et Safari) est loin d&#8217;être implanté sur tous les navigateurs et nous sommes, malheureusement, dans l&#8217;obligation de ruser.</p>
<p>Ce que je voulais :</p>
<ul>
<li>Les balises ne servant qu&#8217;à la mise en page et n&#8217;ayant aucune portée sémantique sont générées en javascript.</li>
<li>Un javascript non obstrusif, une mise en page non dégadée si le javascipt n&#8217;est pas activé / installé. Dans ce cas là, les coins restent simplement droits.</li>
<li>Utilisation des images pour les coins pour un meilleur rendu et une plus grande modularité.</li>
<li>Un script léger, syntaxe de l&#8217;appel simple mais paramétrable.</li>
<li>Entièrement personnalisable via CSS.</li>
<li>Conserve le DOM  et génère du XHTML et du CSS valide.</li>
<li>Rapide !</li>
</ul>
<p>Pour commencer, voici <a href="http://www.blackotine.fr/corners/">une démo</a> du script en action et <a href="http://www.blackotine.fr/corners/index_nojs.html">une deuxième</a> avec un bouton pour lancer le script.</p>
<p>Le script s&#8217;appuie sur le framework Javascript Mootools.<span id="more-137"></span></p>
<h2>Documentation</h2>
<p><strong>class corners</strong></p>
<h3>Arguments</h3>
<p><strong>element </strong>: L&#8217;élément sur lequel vous voulez les coins arrondis<br />
<strong>options </strong>: un objet, voir ci-dessous</p>
<h3>Options</h3>
<p><strong>elementType </strong>: Le type des élément générés (défaut: div)<br />
<strong>className </strong>: préfixe des classes des élément générés (défaut: corner)</p>
<h2>Utilisation</h2>
<p>L&#8217;élément modifié va être entouré par huit éléments permettant d&#8217;appliquer des styles CSS spécifiques sur chacun d&#8217;entre eux et correspondent aux cotés et aux coins répartis comme ceci (avec le préfixe par défaut, &laquo;&nbsp;corner&nbsp;&raquo;) :</p>
<ul>
<li>cornerT : Le bord supérieur</li>
<li>cornerB : Le bord inférieur</li>
<li>cornerR : Le bord droit</li>
<li>cornerL : Le bord gauche</li>
<li>cornerBL : Le coin inférieur gauche</li>
<li>cornerBR : Le coin inférieur droit</li>
<li>cornerTL : Le coin supérieur gauche</li>
<li>cornerTR : Le coin supérieur droit</li>
</ul>
<p>Ainsi, il ne reste plus qu&#8217;à appliquer les règles CSS adéquates pour ajouter les éléments de décoration voulus (coins arrondis, ombres, etc&#8230;)</p>
<p>Deux versions  du script :</p>
<ul>
<li><a href="http://www.blackotine.fr/corners/corners.js">non compressé</a> (4143 octets)</li>
<li><a href="http://www.blackotine.fr/corners/corners-yui-compressed.js">compressé</a> avec YUI Compressor  (1615 octets)</li>
</ul>
<h2>Allez plus loin</h2>
<p>Je suis conscient que ce script peut alourdir les pages et donc ralentir leur chargement alors que l&#8217;on pourrait directement écrire ces balises dans la page sans passer par javascript. Mais ce sont les limitations de CSS 2 et les multiples incompatibilités des navigateurs qui nous forcent à insérer des balises inutiles et n&#8217;ayant aucun sens sémantiquement parlant. Ce javascript, ne touche pas à la structure du document et offre un rendu quasi similaire lorsqu&#8217;il est non activé.</p>
<p>En résumé, je ne suis pas entièrement convaincu de la pertinence et de l&#8217;utilité de ce script en terme de performance et d&#8217;optimisation mais son utilisation simple et efficace me semble toutefois interessante. On pourrait même trouver des applications diverses autres que les coins arrondis comme par exemple les ombres, dégradés complexes etc&#8230;</p>
<a href='http://twitter.com/share?url=http%3A%2F%2Fwww.blackotine.fr%2F%3Fp%3D137&count=horizontal&related=&text=Coins%20arrondis%20en%20css%20et%20javascript' class='twitter-share-button' data-text='Coins arrondis en css et javascript' data-url='http://www.blackotine.fr/?p=137' data-counturl='http://www.blackotine.fr/javascript/coins-arrondis-en-css-et-javascript' data-count='horizontal' data-via='scarpopo'></a>]]></content:encoded>
			<wfw:commentRss>http://www.blackotine.fr/javascript/coins-arrondis-en-css-et-javascript/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Les fichiers .htaccess, exemples et astuces</title>
		<link>http://www.blackotine.fr/apache/exemples-htaccess</link>
		<comments>http://www.blackotine.fr/apache/exemples-htaccess#comments</comments>
		<pubDate>Sun, 08 Feb 2009 23:39:02 +0000</pubDate>
		<dc:creator>nico</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[htaccess]]></category>

		<guid isPermaLink="false">http://www.blackotine.fr/?p=130</guid>
		<description><![CDATA[Les fichiers .htaccess sont de puissants outils permettant de modifier la configuration du serveur web Apache de manière localisée, pour un site voire, pour un répertoire. Voici quelques exemples utiles à utiliser sur vos sites. Attention toutefois, car la moindre erreur de syntaxe provoquera une erreur interne sur le serveur et rendra votre site indisponible. [...]]]></description>
			<content:encoded><![CDATA[<p>Les fichiers <a href="http://fr.wikipedia.org/wiki/Htaccess"><strong>.htaccess</strong></a> sont de puissants outils permettant de modifier la configuration du <a href="http://fr.wikipedia.org/wiki/Apache_(logiciel)">serveur web Apache</a> de manière localisée, pour un site voire, pour un répertoire.</p>
<p>Voici quelques exemples utiles à utiliser sur vos sites.<br />
Attention toutefois, car la moindre erreur de syntaxe provoquera une erreur interne sur le serveur et rendra votre site indisponible.  Pensez donc à toujours garder une copie de sauvegarde permettant de revenir en arrière.<span id="more-130"></span></p>
<h3>Création du fichier :</h3>
<p>Il suffit de créer un fichier avec n&#8217;importe quel éditeur de texte et de le nommer <em>.htaccess</em>, sans extension. Sous Windows, il est impossible de créer un fichier .htaccess. Si vous avez des difficultés, vous pouvez utiliser un autre explorateur de fichier comme, par exemple, un logiciel de transfert FTP du type <a href="http://www.filezilla.fr/">Filezilla</a></p>
<p>Ensuite, il faudra mettre ce fichier à la racine d&#8217;un répertoire pour que les règles qu&#8217;il contient s&#8217;appliquent à tous les sous-répertoires.</p>
<h3>Créer une page d&#8217;erreur personnalisée</h3>
<p>Bien souvent, on néglige ces pages par manque de temps ou d&#8217;intérêt. Elles sont pourtant très importantes car elles permettent aux visiteurs de rester sur  le site. On peut alors, par exemple, choisir de le réorienter par le biais d&#8217;un plan de site.</p>
<p>Dans le fichier .htaccess il suffit d&#8217;inscrire ces lignes</p>
<pre class="brush: sql">ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php
ErrorDocument 500 /error/500.php
</pre>
<h3>Comment faire pour configurer le fuseau horaire sur votre serveur</h3>
<pre class="brush: sql">SetEnv TZ Europe/Paris</pre>
<h3>Bloquer des adresses IP</h3>
<p>Permet d&#8217;empêcher certaines adresses IP d&#8217;accéder à la totalité de votre site ou un répertoire.</p>
<pre class="brush: sql">allow from all
deny from 145.186.14.122
deny from 124.15</pre>
<p>Quand quelqu&#8217;un essaiera d&#8217;accéder à votre site à partir de l&#8217;IP interdite, il verra un message d&#8217;erreur 403 &laquo;&nbsp;accès interdit&nbsp;&raquo;.</p>
<h3>Redirections permanentes</h3>
<p>Très utilisées pour la <acronym title="Search Engine Optimization" lang="uk">SEO</acronym>, les redirections permanentes 301 pour les mauvais ou anciens liens déplacés ou supprimés.</p>
<pre class="brush: sql">Redirect 301 /mapage.html http://www.monsite.com/manouvellepage.html</pre>
<h3>Redirections de domaine</h3>
<p>Pour rediriger chacune des pages d&#8217;un domaine vers la même page sur un autre domaine.</p>
<pre class="brush: sql">RewriteCond %{HTTP_HOST} ^www\.mon-site\.com [NC]
RewriteRule ^(.*)$ http://www.mon-site.fr/$1 [QSA,R=301]</pre>
<h3>E-mail de l&#8217;administrateur du serveur</h3>
<p>Utiliser ce code, pour spécifier l&#8217;adresse e-mail par défaut de l&#8217;administrateur du serveur.</p>
<pre class="brush: sql">ServerSignature EMail
SetEnv SERVER_ADMIN monadresse@monsite.com</pre>
<h3>Protéger ses images</h3>
<p>Utile pour empêcher qu&#8217;une personne ne fasse un lien direct de son site pour afficher des images hébergées sur votre propre serveur. Bien souvent aucune autorisation n&#8217;est demandée et cela pose donc des problèmes de droits, sans compter qu&#8217;il utilise la bande passante de votre serveur.<br />
Le code suivant peut empêcher cela.</p>
<pre class="brush: sql">
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?monsite\.com/ [nc]
RewriteRule .*\.(gif|jpg|png)$ http://www.monsite.com/images/images-de-substitution.jpg [nc]
</pre>
<h3>Rendre tout un site indisponible pour maintenance</h3>
<p>Il est intéressant de pouvoir à tout moment basculer un site en maintenance et être le seul à pouvoir naviguer sur celui-ci.</p>
<pre class="brush: sql">
RewriteEngine on
RewriteRule maintenance\.html - [L]
RewriteCond %{REMOTE_ADDR} !82.288.56.587
RewriteRule .* /maintenance.html [L]
</pre>
<h3>Empêcher le listage des répertoires</h3>
<p>Habituellement, si votre site ne dispose pas d&#8217;une page d&#8217;index par défaut tous les fichiers de ce répertoire sont accessibles aux visiteurs. Pour éviter cela utilisez le code suivant.</p>
<pre class="brush: sql">
Options All -Indexes
</pre>
<h3>Page par défaut</h3>
<p>Vous pouvez définir la page par défaut d&#8217;un répertoire comme vous le souhaitez. Par exemple, dans ce code, la page par défaut est contact.html au lieu de index.html</p>
<pre class="brush: sql">
DirectoryIndex contact.html
</pre>
<h3>Protéger vos répertoires et fichiers</h3>
<p>Vous pouvez créer une demande d&#8217;authentification pour l&#8217;accès à certains fichiers et répertoires. Voici deux exemples de protection par mot de passe, un pour un fichier et l&#8217;autre pour un répertoire. Le fichier .htpasswd est un fichier texte devant contenir sur chacune des ses lignes un nom d&#8217;utilisateur suivi de deux points (:), puis du mot de passe crypté (solution recommandée) ou en clair. Pour crypter le mot de passe, Apache fournit un outil, l&#8217;utilitaire htpasswd accessible dans le sous-répertoire bin d&#8217;Apache. Il est également recommandé de placer ce fichier en dehors de l&#8217;arborescence du site.</p>
<pre class="brush: sql">
# Protéger un  fichier

AuthType Basic
AuthName &amp;quot;Accès restreint&amp;quot;
AuthUserFile /home/path/.htpasswd
Require valid-user

# Protéger un répertoire
AuthType basic
AuthName &amp;quot;Accès restreint&amp;quot;
AuthUserFile /home/path/.htpasswd
AuthGroupFile /dev/null
Require valid-user
</pre>
<h3>Masquer ou afficher les erreurs php</h3>
<p>Par défaut, le valeur du paramètre PHP &laquo;&nbsp;display_errors&nbsp;&raquo; est &laquo;&nbsp;on&nbsp;&raquo;. La plupart du temps ces messages d&#8217;erreurs contiennent des informations sensibles qu&#8217;il est préférable de masquer sur un site en production. Pour masquer les erreurs, ajouter simplement :</p>
<pre class="brush: sql">
php_flag display_errors off
</pre>
<h3>Pour Conclure</h3>
<p>Ce petit fichier est extrêmement pratique et puissant. Le nombre d&#8217;applications possibles est important. Ainsi, j&#8217;éditerai ce billet régulièrement pour y ajouter des exemples utiles. N&#8217;hésitez donc pas à proposer les vôtres.</p>
<a href='http://twitter.com/share?url=http%3A%2F%2Fwww.blackotine.fr%2F%3Fp%3D130&count=horizontal&related=&text=Les%20fichiers%20.htaccess%2C%20exemples%20et%20astuces' class='twitter-share-button' data-text='Les fichiers .htaccess, exemples et astuces' data-url='http://www.blackotine.fr/?p=130' data-counturl='http://www.blackotine.fr/apache/exemples-htaccess' data-count='horizontal' data-via='scarpopo'></a>]]></content:encoded>
			<wfw:commentRss>http://www.blackotine.fr/apache/exemples-htaccess/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Iphone et téléphonie sur IP avec Siphon</title>
		<link>http://www.blackotine.fr/divers/iphone-et-telephonie-sur-ip-avec-siphon</link>
		<comments>http://www.blackotine.fr/divers/iphone-et-telephonie-sur-ip-avec-siphon#comments</comments>
		<pubDate>Tue, 06 Jan 2009 02:54:31 +0000</pubDate>
		<dc:creator>nico</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[3G]]></category>
		<category><![CDATA[edge]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[sip]]></category>
		<category><![CDATA[wifi]]></category>

		<guid isPermaLink="false">http://www.blackotine.fr/?p=116</guid>
		<description><![CDATA[Une nouvelle version de Siphon vient de sortir. Il s&#8217;agit de la version 2.0 bêta 16. Très attendu, celle-ci permet en effet de téléphoner via le réseau Edge/3G, et surtout vous pourrez enfin téléphoner normalement sans être obligé d&#8217;utiliser le casque comme avec les versions précédentes. Le but est donc de pouvoir utiliser un compte [...]]]></description>
			<content:encoded><![CDATA[<p>Une nouvelle version de <a href="http://thebigboss.org/2009/01/04/siphon-20-is-out-for-cydia/">Siphon</a> vient de sortir. Il s&#8217;agit de la version 2.0 bêta 16.</p>
<p>Très attendu, celle-ci permet en effet de téléphoner via le réseau <strong>Edge/3G</strong>, et surtout vous pourrez enfin téléphoner normalement sans être obligé d&#8217;utiliser le casque comme avec les versions précédentes.</p>
<div id="attachment_102" class="wp-caption alignleft" style="width: 160px"><a href="http://www.blackotine.fr/wp-content/uploads/2009/01/dialpad.png" rel="lightbox"><img class="size-thumbnail wp-image-102" title="dialpad" src="http://www.blackotine.fr/wp-content/uploads/2009/01/dialpad-150x150.png" alt="dialpad" width="150" height="150" /></a><p class="wp-caption-text">Interface de Siphon</p></div>
<p>Le but est donc de pouvoir utiliser un compte SIP comme, par exemple, un compte <strong>Freephonie</strong>, (disponible pour tous les abonnés <strong>Free</strong>) pour <a href="http://www.free.fr/adsl/telephone.html">téléphoner en illimités</a> vers les fixes de 70 destinations et bénéficier de tarifs attractifs vers les autres destinations et les mobiles. Et ça, de n&#8217;importe où, de chez vous via le wifi ou dans la rue via Edge/3G.</p>
<p>A première vue, cette bêta semble <strong>beaucoup plus réactive</strong> et la <strong>qualité d’écoute</strong> a largement été améliorée.</p>
<p style="clear:both;">
<div id="attachment_103" class="wp-caption alignright" style="width: 160px"><a href="http://www.blackotine.fr/wp-content/uploads/2009/01/settingssiphon.png" rel="lightbox"><img class="size-thumbnail wp-image-103" title="settingssiphon" src="http://www.blackotine.fr/wp-content/uploads/2009/01/settingssiphon-150x150.png" alt="settingssiphon" width="150" height="150" /></a><p class="wp-caption-text">Paramètres de Siphon</p></div></p>
<p>Vous devez avoir un Iphone jailbraké avec, au minimum, le firmware 2.1 d’Apple.</p>
<p>Vous pouvez télécharger gratuitement Siphon via <strong>Cydia</strong>, en ajoutant le repository de <strong>BigBoss </strong>(http://apt.bigboss.us.com/repofiles/cydia).</p>
<p>Attention cependant car certains opérateurs brident voire interdisent l&#8217;usage des services SIP<br />Il semble donc préférable de se renseigner avant de subir d&#8217;éventuels sanctions !</p>
<a href='http://twitter.com/share?url=http%3A%2F%2Fwww.blackotine.fr%2F%3Fp%3D116&count=horizontal&related=&text=Iphone%20et%20t%C3%A9l%C3%A9phonie%20sur%20IP%20avec%20Siphon' class='twitter-share-button' data-text='Iphone et téléphonie sur IP avec Siphon' data-url='http://www.blackotine.fr/?p=116' data-counturl='http://www.blackotine.fr/divers/iphone-et-telephonie-sur-ip-avec-siphon' data-count='horizontal' data-via='scarpopo'></a>]]></content:encoded>
			<wfw:commentRss>http://www.blackotine.fr/divers/iphone-et-telephonie-sur-ip-avec-siphon/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compression, cache et optimisation des fichiers javascript et css</title>
		<link>http://www.blackotine.fr/javascript/compression-cache-et-optimisation-des-fichiers-javascript-et-css</link>
		<comments>http://www.blackotine.fr/javascript/compression-cache-et-optimisation-des-fichiers-javascript-et-css#comments</comments>
		<pubDate>Thu, 30 Oct 2008 17:38:25 +0000</pubDate>
		<dc:creator>nico</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[compression]]></category>
		<category><![CDATA[gzip]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[http requests]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.blackotine.fr/?p=66</guid>
		<description><![CDATA[Comment optimiser l&#8217;utilisation de JavaScript en termes de compression, cache, vitesse de chargement sans pour autant se retrouver avec des fichiers illisibles car, sans indentation, sans espaces voire obfusqués. (plusieurs méthodes existent) Garder un fichier lisible est, selon moi, indispensable pour maintenir son application à jour, la modifier, la corriger et cela d&#8217;autant plus lorsqu&#8217;on [...]]]></description>
			<content:encoded><![CDATA[<p>Comment optimiser l&#8217;utilisation de JavaScript en termes de compression, cache, vitesse de chargement sans pour autant se retrouver avec des fichiers illisibles car, sans indentation, sans espaces voire obfusqués. (<a href="http://www.webinventif.fr/jus-presse/">plusieurs méthodes existent</a>)</p>
<p>Garder un fichier lisible est, selon moi, indispensable pour maintenir son application à jour, la modifier, la corriger et cela d&#8217;autant plus lorsqu&#8217;on travaille en équipe.</p>
<p>Une des solutions est de garder une version non compressée mais cela sous-entend de jongler sans cesse entre plusieurs versions, ce qui n&#8217;est définitivement pas pratique.</p>
<h3>Combine</h3>
<p>La solution qui me semble la plus intéressante est la classe PHP <a href="http://rakaz.nl/extra/code/combine">Combine</a>, simple à utiliser, fiable, gérant la combinaison, la <strong>compression</strong>, la <strong>mise en cache</strong> et les <strong>dates d&#8217;expiration</strong>.<br />
<span id="more-66"></span><br />
Tout d&#8217;abord, Combine <strong>concatène</strong> tous vos fichiers javascript et/ou css et les sert comme un gros fichier. Cela dans le but de <strong>réduire le nombre de requêtes au serveur</strong>.</p>
<p>Il gère également <strong>la compression</strong> en détectant si votre navigateur supporte la compression gzip, si oui, il gzip les données et renvoie la version compressée.  En général, ceci permet de <strong>réduire considérablement la taille du fichier</strong>.</p>
<p>Si vous avez créé un répertoire cache, il va stocker la version gzip générée de vos données. Ainsi pour les futures demandes, il récupére simplement la version mise en cache zippé au lieu de générer le contenu de l&#8217;archive gzip à la volée. Ceci permet de <strong>réduire la charge du serveur</strong>.</p>
<p>Enfin, il vérifie les changements effectués. En effet, la date, l&#8217;heure et la taille du fichier mis en cache est rapidement vérifiée et, si il y a un changement, il sera automatiquement régénéré. Il gère donc parfaitement les en-têtes ce qui permet de mettre ces fichiers à jour et d&#8217;être certain que chacun des visiteurs du site se verra servir la même version du fichier.</p>
<h3>Mise en place</h3>
<p><strong>L&#8217;utilisation est très simple.</strong></p>
<p>Vous devez d&#8217;abord <a href="http://rakaz.nl/projects/combine/combine.phps">télécharger</a> et configurer le script combine.php.</p>
<p>Par défaut, ce script regarde dans les répertoires racines javascript et css de votre site Web, mais si vous utilisez des répertoires différents, vous pouvez changer ces valeurs en haut de combine.php.<br />
Transférer le fichier combine.php à la racine de votre site Web.</p>
<p>Deuxièmement, vous devez créer un répertoire &laquo;&nbsp;cache&nbsp;&raquo; accessible en écriture. Encore une fois, par défaut, ce script va chercher dans le répertoire racine du site Web, mais vous pouvez modifier cette valeur dans combine.php.</p>
<p>Enfin, il vous faut créer ou modifier un fichier .htaccess. Si vous n&#8217;avez pas de .htaccess vous pouvez le créer à la racine de votre site Web et ajouter les lignes suivantes.<br />
Si vous avez déjà un .htaccess vous pouvez simplement ajouter les lignes suivantes dans le fichier :</p>
<pre class="brush: sql">RewriteEngine On
RewriteBase /
RewriteRule ^css/(.*\.css) /combine.php?type=css&amp;amp;files=$1
RewriteRule ^js/(.*\.js) /combine.php?type=javascript&amp;amp;files=$1</pre>
<p>Pour finir, dans vos pages remplacez tous vos appels javascript de la forme :</p>
<pre class="brush: jscript">&lt;script src=&quot;js/mootools-1.2-core.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/mootools-1.2-more.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>par :</p>
<pre class="brush: jscript">&lt;script src=&quot;js/mootools-1.2-core.js,mootools-1.2-more.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>Idem pour le css, remplacer :</p>
<pre class="brush: css">
&lt;link href=&quot;css/reset.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;
&lt;link href=&quot;css/layout.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;</pre>
<p>par :</p>
<pre class="brush: css">
&lt;link href=&quot;css/reset.css,layout.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;</pre>
<p>Et voilà ! Plutôt simple et terriblement efficace.<br />
Par contre, un petit désavantage, si vous avez l&#8217;habitude d&#8217;utiliser <a href="http://getfirebug.com/">Firebug</a> pour débugger, forcement, le numéro de ligne indiqué pour les propriétés css, par exemple, ne correspond à rien dans votre fichier local, puisque tous les fichiers css sont combinés.<br />
Je pense que l&#8217;installation de cette solution doit donc intervenir en fin de production, juste avant livraison.</p>
<h3>Autres solutions</h3>
<p>Il existe une autre classe qui semble assez similaire, <a href="http://code.google.com/p/minify/">Minify!</a>, elle permet en plus de la gestion du cache et de la compression, de supprimer les espaces blancs et les commentaires.</p>
<p>Si vous avez plus d&#8217;infos sur Minify ou sur d&#8217;autres solutions, n&#8217;hésitez pas !</p>
<a href='http://twitter.com/share?url=http%3A%2F%2Fwww.blackotine.fr%2F%3Fp%3D66&count=horizontal&related=&text=Compression%2C%20cache%20et%20optimisation%20des%20fichiers%20javascript%20et%20css' class='twitter-share-button' data-text='Compression, cache et optimisation des fichiers javascript et css' data-url='http://www.blackotine.fr/?p=66' data-counturl='http://www.blackotine.fr/javascript/compression-cache-et-optimisation-des-fichiers-javascript-et-css' data-count='horizontal' data-via='scarpopo'></a>]]></content:encoded>
			<wfw:commentRss>http://www.blackotine.fr/javascript/compression-cache-et-optimisation-des-fichiers-javascript-et-css/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Quel ordre pour les valeurs de la propriété background ?</title>
		<link>http://www.blackotine.fr/css/quel-ordre-pour-les-valeurs-de-la-propriete-background</link>
		<comments>http://www.blackotine.fr/css/quel-ordre-pour-les-valeurs-de-la-propriete-background#comments</comments>
		<pubDate>Thu, 21 Aug 2008 13:04:39 +0000</pubDate>
		<dc:creator>nico</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[background]]></category>
		<category><![CDATA[ordre]]></category>
		<category><![CDATA[raccourci]]></category>
		<category><![CDATA[shorthand]]></category>

		<guid isPermaLink="false">http://www.blackotine.fr/?p=49</guid>
		<description><![CDATA[La propriété background La propriété raccourcie background est très utile. Elle permet de définir en une ligne toutes les propriétés d&#8217;arrière-plan d&#8217;un élément (background-color, background-image, background-repeat, background-attachment, et background-position) Un peu d&#8217;ordre ! Est-ce que l&#8217;ordre dans lequel on place les valeurs de cette propriété a une importance ? Normalement non. Mais, des navigateurs obsolètes [...]]]></description>
			<content:encoded><![CDATA[<h3>La propriété background</h3>
<p>La propriété raccourcie <em>background </em>est très utile. Elle permet de définir en une ligne toutes les propriétés d&#8217;arrière-plan d&#8217;un élément (<em>background-color</em>, <em>background-image</em>, <em>background-repeat</em>, <em>background-attachment</em>, et <em>background-position</em>)</p>
<h3>Un peu d&#8217;ordre !</h3>
<p>Est-ce que l&#8217;ordre dans lequel on place les valeurs de cette propriété a une importance ?<br />
Normalement non. Mais, des navigateurs obsolètes ou pointilleux, peuvent mal interpréter ces valeurs si elles ne respectent pas l&#8217;ordre indiqué par le <a href="http://www.w3.org/TR/CSS21/colors.html#propdef-background"><abbr>W3C</abbr></a>, soit :</p>
<pre class="brush: css">background:color image repeat attachment position;</pre>
<p><span id="more-49"></span><br />
On peut cependant s&#8217;attarder sur la propriété background-position qui accepte deux valeurs et que l&#8217;on voit écrit un peu dans tous les sens. Une valeur correspond à la position horizontale et l&#8217;autre à la position verticale. Je les appellerai respectivement X et Y dans la suite de l&#8217;article.</p>
<p>Le W3C indique :</p>
<blockquote><p>&laquo;&nbsp;If at least one value is not a keyword, then the first value represents the horizontal position and the second represents the vertical position.&nbsp;&raquo;</p></blockquote>
<p>Que l&#8217;on pourrait traduire par : Si au moins une valeur n&#8217;est pas un mot-clé, alors la première valeur représente la position horizontale et le deuxième représente la position verticale.<br />
Les mots-clé étant (left, top, right, bottom et center).</p>
<p><strong>Le bon ordre est donc &laquo;&nbsp;X Y&nbsp;&raquo;, valeur horizontale puis verticale</strong>, même si, dans le cas d&#8217;utilisation de mots-clé, l&#8217;ordre n&#8217;a finalement pas d&#8217;importance.</p>
<p>Cependant il me semble assez logique de toujours garder le même ordre quelque soit les valeurs utilisés, sinon on risque fortement de ce mélanger les pinceaux. D&#8217;accord, peut être pas sur le coup, mais en revenant des  mois plus tard ou bien si une autre personne doit modifier votre feuille de style&#8230;</p>
<p>Pour conclure voici quelques exemples de propriétés background aux valeurs correctement ordonnées :</p>
<pre class="brush: css">background:#000 url(image.gif) no-repeat;
background:#ff0000 url(image.gif) no-repeat left top;
background:transparent url(image.gif) no-repeat fixed 10px 5px;
background:url(image.gif) no-repeat scroll 1% 50%;
background:#DDD url(image.gif) no-repeat 2em .2em;
background:#CCC url(image.gif) repeat-x left 20%;
background:url(image.gif) repeat-y right 0;
background:#000;
</pre>
<a href='http://twitter.com/share?url=http%3A%2F%2Fwww.blackotine.fr%2F%3Fp%3D49&count=horizontal&related=&text=Quel%20ordre%20pour%20les%20valeurs%20de%20la%20propri%C3%A9t%C3%A9%20background%20%3F' class='twitter-share-button' data-text='Quel ordre pour les valeurs de la propriété background ?' data-url='http://www.blackotine.fr/?p=49' data-counturl='http://www.blackotine.fr/css/quel-ordre-pour-les-valeurs-de-la-propriete-background' data-count='horizontal' data-via='scarpopo'></a>]]></content:encoded>
			<wfw:commentRss>http://www.blackotine.fr/css/quel-ordre-pour-les-valeurs-de-la-propriete-background/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

