<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:posterous="http://posterous.com/help/rss/1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>weedo tech blog</title>
    <link>http://posterous.weedo.fr</link>
    <description>le blog technique de la team weedo</description>
    <generator>posterous.com</generator>
    <link xmlns="http://www.w3.org/2005/Atom" href="http://posterous.com/api/sup_update#cca3118f7" type="application/json" rel="http://api.friendfeed.com/2008/03#sup" />
    
    
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/weedo-technoblog" /><feedburner:info uri="weedo-technoblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://posterous.superfeedr.com/" /><item>
      <pubDate>Thu, 19 Jan 2012 09:53:00 -0800</pubDate>
      <title>Welcome Haymann Editions</title>
      <link>http://feedproxy.google.com/~r/weedo-technoblog/~3/ioJ-zqJq5_M/nouveau</link>
      <guid isPermaLink="false">http://posterous.weedo.fr/nouveau</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Un nouveau client Weedo, un site en construction :&lt;a href="http://www.haymanneditions.com/" rel="nofollow nofollow" target="_blank" style="cursor: pointer; color: #3b5998; text-decoration: none;"&gt;Haymann Editions&lt;/a&gt;, maison d'&amp;eacute;dition de meubles et objets contemporains :)&amp;nbsp;&lt;/p&gt;
&lt;p&gt;David Haymann vous invite &amp;agrave; d&amp;eacute;couvrir la premi&amp;egrave;re collection de sa maison d'&amp;eacute;dition de meubles et objets contemporains, con&amp;ccedil;ue par le designer Toni Grilo au Salon Maison et Objet du 20 au 24 janvier 2012, Paris Nord Villepinte&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://posterous.weedo.fr/nouveau"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://posterous.weedo.fr/nouveau#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7P4vGrJnVZOzQgcs0bAJ-mEL_S4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7P4vGrJnVZOzQgcs0bAJ-mEL_S4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7P4vGrJnVZOzQgcs0bAJ-mEL_S4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7P4vGrJnVZOzQgcs0bAJ-mEL_S4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/weedo-technoblog/~4/ioJ-zqJq5_M" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/212993/karim-cassam-chenai-profil-posterous.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36K9ZbJ24NnH</posterous:profileUrl>
        <posterous:firstName>ka</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>weedo</posterous:nickName>
        <posterous:displayName>ka</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://posterous.weedo.fr/nouveau</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 02 Dec 2011 01:12:02 -0800</pubDate>
      <title>Caractères interdits dans la variable xtpage d'un tag Xiti</title>
      <link>http://feedproxy.google.com/~r/weedo-technoblog/~3/GlUxQwO1MxQ/caracteres-interdits-dans-la-variable-xtpage</link>
      <guid isPermaLink="false">http://posterous.weedo.fr/caracteres-interdits-dans-la-variable-xtpage</guid>
      <description>&lt;p&gt;
	Extrait de la documentation Xiti :&lt;p /&gt;La variable xt_page permet de renseigner le nom de la page et de créer les chapitres XiTi. Les libellés qui y &lt;br /&gt;sont renseignés ne doivent contenir que des caractères suivants : &lt;br /&gt;   Les lettres abcdefghijklmnopqrstuvwxyz en majuscules ou minuscules &lt;br /&gt;  Les chiffres 123467890 &lt;br /&gt;  Les points . &lt;br /&gt;  Les slashs / &lt;br /&gt;  Les moins - &lt;br /&gt;  Les underscores _ &lt;br /&gt;  Les tildes ~ &lt;p /&gt;Il est donc nécessaire d’effectuer un retraitement des noms si l’affichage est fait dynamiquement, afin de &lt;br /&gt; nettoyer les caractères interdits lors du remplissage de cette variable. &lt;p /&gt;Voici une petite fonction qui permet de le faire :&lt;p /&gt; function cleanStringForXiti($string,$replace){&lt;br /&gt;        &lt;br /&gt;        return  preg_replace(&amp;quot;#[^a-zA-Z0-9_/\.~-]#&amp;quot;,$replace, $string);&lt;br /&gt;         &lt;br /&gt; }&lt;p /&gt;On remplace chaque caractère interdit trouvé par un caractère au choisi.
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://posterous.weedo.fr/caracteres-interdits-dans-la-variable-xtpage"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://posterous.weedo.fr/caracteres-interdits-dans-la-variable-xtpage#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Vv95DmNzHjt3GxpzWyLvprZKzMA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Vv95DmNzHjt3GxpzWyLvprZKzMA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Vv95DmNzHjt3GxpzWyLvprZKzMA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Vv95DmNzHjt3GxpzWyLvprZKzMA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/weedo-technoblog/~4/GlUxQwO1MxQ" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://posterous.weedo.fr/caracteres-interdits-dans-la-variable-xtpage</feedburner:origLink></item>
    <item>
      <pubDate>Wed, 27 Jul 2011 16:10:00 -0700</pubDate>
      <title>SQLSTATE[HY000]: General error: 2006 MySQL server has gone away</title>
      <link>http://feedproxy.google.com/~r/weedo-technoblog/~3/5-VYVsViIL0/sqlstatehy000-general-error-2006-mysql-server</link>
      <guid isPermaLink="false">http://posterous.weedo.fr/sqlstatehy000-general-error-2006-mysql-server</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Avoir accès à un objet PDO n'est pas suffisant pour être certain d'avoir une connexion à une bdd. Il arrive de passer une requête et d'obtenir l'erreur :&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;&lt;span class="co"&gt;Fatal&lt;/span&gt; error: &lt;span class="co"&gt;Uncaught&lt;/span&gt; &lt;span class="pc"&gt;exception&lt;/span&gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;PDOException&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt; with message &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;SQLSTATE[HY000]: General error: 2006 MySQL server has gone away&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt; in…&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Pour obtenir cette erreur, vous pouvez faire le test suivant :&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;&lt;span class="lv"&gt;$pdo&lt;/span&gt; = &lt;span class="r"&gt;new&lt;/span&gt; &lt;span class="co"&gt;PDO&lt;/span&gt;(&lt;span class="lv"&gt;$dsn&lt;/span&gt;, &lt;span class="lv"&gt;$user&lt;/span&gt;, &lt;span class="lv"&gt;$password&lt;/span&gt;);
&lt;span class="pd"&gt;echo&lt;/span&gt; &lt;span class="pd"&gt;get_class&lt;/span&gt; (&lt;span class="lv"&gt;$pdo&lt;/span&gt;);
&lt;span class="c"&gt;// On a bien un objet PDO&lt;/span&gt;
&lt;span class="lv"&gt;$pdo&lt;/span&gt;-&amp;gt;query(&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;select 1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;);
&lt;span class="c"&gt;// ça passe&lt;/span&gt;
&lt;span class="pd"&gt;sleep&lt;/span&gt;(&lt;span class="i"&gt;20&lt;/span&gt;);
&lt;span class="c"&gt;// Vous avez 20 secondes pour killer manuellement la connexion mysql. Faites-le pour les besoins du tests, &lt;/span&gt;
&lt;span class="pd"&gt;echo&lt;/span&gt; &lt;span class="pd"&gt;get_class&lt;/span&gt; (&lt;span class="lv"&gt;$pdo&lt;/span&gt;);
&lt;span class="c"&gt;// On a toujours un objet PDO, mais cet objet n'est pas informé que la connexion correspondante a été killée, ce qu'on va voir tout de suite : &lt;/span&gt;
&lt;span class="lv"&gt;$pdo&lt;/span&gt;-&amp;gt;query(&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;select 1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;);
&lt;span class="c"&gt;// !! ça casse : Erreur MySQL server has gone away. Pourtant, on avait bien un objet PDO&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Les raisons possibles de cette erreurs sont nombreuses : &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/gone-away.html"&gt;http://dev.mysql.com/doc/refman/5.0/en/gone-away.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En plus de/plutôt que/en attendant de résoudre le problème, j'ai trouvé 2 méthodes (assez proche) pour contourner le problème : On tente la connexion avec notre vieille connexion pdo, et si on obtient une erreur, on créé un nouvel objet pdo tout neuf.&lt;/p&gt;

&lt;p&gt;Méthode 1&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;&lt;span class="lv"&gt;$sql&lt;/span&gt; = &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;SELECT count(*) FROM `TABLE`;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;;
&lt;span class="r"&gt;for&lt;/span&gt; (&lt;span class="lv"&gt;$i&lt;/span&gt; = &lt;span class="i"&gt;1&lt;/span&gt;; &lt;span class="lv"&gt;$i&lt;/span&gt; &amp;lt;= &lt;span class="i"&gt;2&lt;/span&gt;; &lt;span class="lv"&gt;$i&lt;/span&gt;++) {
    &lt;span class="r"&gt;try&lt;/span&gt; {
        &lt;span class="lv"&gt;$nb&lt;/span&gt; = &lt;span class="lv"&gt;$pdo&lt;/span&gt;-&amp;gt;query(&lt;span class="lv"&gt;$sql&lt;/span&gt;)-&amp;gt;fetchColumn();
        &lt;span class="r"&gt;if&lt;/span&gt; (&lt;span class="pd"&gt;is_int&lt;/span&gt;(&lt;span class="lv"&gt;$nb&lt;/span&gt;)) {
            &lt;span class="c"&gt;// C'est bon, ma vieille connexion a fonctionné.&lt;/span&gt;
            &lt;span class="r"&gt;break&lt;/span&gt;;
        }
    } &lt;span class="r"&gt;catch&lt;/span&gt; (&lt;span class="co"&gt;PDOException&lt;/span&gt; &lt;span class="lv"&gt;$e&lt;/span&gt;) {
    &lt;span class="c"&gt;//Oups, j'ai une erreur de connexion&lt;/span&gt;
        &lt;span class="r"&gt;if&lt;/span&gt; (&lt;span class="lv"&gt;$i&lt;/span&gt; == &lt;span class="i"&gt;1&lt;/span&gt;) {
            &lt;span class="c"&gt;// C'est la première fois ? OK, je recréé une connexion.&lt;/span&gt;
            &lt;span class="lv"&gt;$pdo&lt;/span&gt; = &lt;span class="r"&gt;new&lt;/span&gt; &lt;span class="co"&gt;PDO&lt;/span&gt;(&lt;span class="lv"&gt;$dsn&lt;/span&gt;, &lt;span class="lv"&gt;$user&lt;/span&gt;, &lt;span class="lv"&gt;$password&lt;/span&gt;);
        } &lt;span class="r"&gt;else&lt;/span&gt; {
            &lt;span class="c"&gt;// C'est la 2eme fois ? OK, c'est mort.&lt;/span&gt;
            &lt;span class="lv"&gt;$nb&lt;/span&gt; = &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;(nombre inconnu)&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;;
            &lt;span class="pd"&gt;echo&lt;/span&gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;PDO Connection failed: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt; . &lt;span class="lv"&gt;$e&lt;/span&gt;-&amp;gt;getMessage().&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;. &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;;
        }
    }
}&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Méthode 2&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;&lt;span class="c"&gt;// Je test si ma vieille connexion est OK avec une requête toute simple&lt;/span&gt;
&lt;span class="r"&gt;try&lt;/span&gt; {
    &lt;span class="lv"&gt;$pdo&lt;/span&gt;-&amp;gt;query(&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;select 1;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;)
    &lt;span class="c"&gt;//C'est bon;&lt;/span&gt;
} &lt;span class="r"&gt;catch&lt;/span&gt; (&lt;span class="co"&gt;PDOException&lt;/span&gt; &lt;span class="lv"&gt;$e&lt;/span&gt;) {
    &lt;span class="c"&gt;//Oups, j'ai une erreur de connexion&lt;/span&gt;
    &lt;span class="c"&gt;// Je recréé une connexion.&lt;/span&gt;
    &lt;span class="lv"&gt;$pdo&lt;/span&gt; = &lt;span class="r"&gt;new&lt;/span&gt; &lt;span class="co"&gt;PDO&lt;/span&gt;(&lt;span class="lv"&gt;$dsn&lt;/span&gt;, &lt;span class="lv"&gt;$user&lt;/span&gt;, &lt;span class="lv"&gt;$password&lt;/span&gt;);
}
&lt;span class="c"&gt;// Ici j'ai plus de chance d'avoir un objet pdo viable que si je n'avais pas fait le petit try/catch au-dessus =&amp;gt; Je fais ma requête&lt;/span&gt;
&lt;span class="lv"&gt;$sql&lt;/span&gt; = &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;SELECT count(*) FROM `TABLE`;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;;
&lt;span class="lv"&gt;$nb&lt;/span&gt; = &lt;span class="lv"&gt;$pdo&lt;/span&gt;-&amp;gt;query(&lt;span class="lv"&gt;$sql&lt;/span&gt;)-&amp;gt;fetchColumn();&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Comme d'hab, si quelqu'un a mieux, ce que j'espère, je suis preneur !&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://posterous.weedo.fr/sqlstatehy000-general-error-2006-mysql-server"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://posterous.weedo.fr/sqlstatehy000-general-error-2006-mysql-server#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/WLyOBgeooF5P_9JjVMR2TsPOqWA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WLyOBgeooF5P_9JjVMR2TsPOqWA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/WLyOBgeooF5P_9JjVMR2TsPOqWA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WLyOBgeooF5P_9JjVMR2TsPOqWA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/weedo-technoblog/~4/5-VYVsViIL0" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/212993/karim-cassam-chenai-profil-posterous.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36K9ZbJ24NnH</posterous:profileUrl>
        <posterous:firstName>ka</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>weedo</posterous:nickName>
        <posterous:displayName>ka</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://posterous.weedo.fr/sqlstatehy000-general-error-2006-mysql-server</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 22 Jul 2011 07:42:00 -0700</pubDate>
      <title>De la bonne utilisation de header location en php</title>
      <link>http://feedproxy.google.com/~r/weedo-technoblog/~3/CnD3OtqQadM/de-la-bonne-utilisation-de-header-location-en</link>
      <guid isPermaLink="false">http://posterous.weedo.fr/de-la-bonne-utilisation-de-header-location-en</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Après un&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;&lt;span class="pd"&gt;header&lt;/span&gt;(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Location: &lt;/span&gt;&lt;span class="lv"&gt;$url&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Si vous ne voulez pas que la suite du php s'exécute, il faut le préciser, en mettant un &lt;code&gt;exit&lt;/code&gt; juste derrière par exemple.&lt;/p&gt;

&lt;p&gt;Sinon, le script php continue de s'exécuter et la page est redirigée à la fin de l'exécution du script.&lt;/p&gt;

&lt;p&gt;Voici une démo :&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;&lt;span class="c"&gt;// Le fichier toto.txt va être créé et écrit, et ce n'est qu'au bout des 10 sec d'exécution du script que le navigateur va être redirigé.&lt;/span&gt;
&lt;span class="pd"&gt;header&lt;/span&gt;(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Location:http://www.weedo.fr&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
&lt;span class="lv"&gt;$f&lt;/span&gt; = &lt;span class="pd"&gt;fopen&lt;/span&gt;(&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;toto.txt&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;w&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
&lt;span class="r"&gt;for&lt;/span&gt; (&lt;span class="lv"&gt;$i&lt;/span&gt; = &lt;span class="i"&gt;1&lt;/span&gt;; &lt;span class="lv"&gt;$i&lt;/span&gt; &amp;lt;= &lt;span class="i"&gt;10&lt;/span&gt;; &lt;span class="lv"&gt;$i&lt;/span&gt;++) {
    &lt;span class="pd"&gt;sleep&lt;/span&gt;(&lt;span class="i"&gt;1&lt;/span&gt;);
    &lt;span class="pd"&gt;fwrite&lt;/span&gt;(&lt;span class="lv"&gt;$f&lt;/span&gt;, &lt;span class="lv"&gt;$i&lt;/span&gt;.&lt;span class="pc"&gt;PHP_EOL&lt;/span&gt;);
}&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Jusqu'à maintenant je pensais que le header+location faisait un exit implicite, ce qui, après réflexion, n'est pas logique.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://posterous.weedo.fr/de-la-bonne-utilisation-de-header-location-en"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://posterous.weedo.fr/de-la-bonne-utilisation-de-header-location-en#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uFqYUraaeIpWRllbMZykgheO2h8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uFqYUraaeIpWRllbMZykgheO2h8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uFqYUraaeIpWRllbMZykgheO2h8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uFqYUraaeIpWRllbMZykgheO2h8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/weedo-technoblog/~4/CnD3OtqQadM" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/212993/karim-cassam-chenai-profil-posterous.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36K9ZbJ24NnH</posterous:profileUrl>
        <posterous:firstName>ka</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>weedo</posterous:nickName>
        <posterous:displayName>ka</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://posterous.weedo.fr/de-la-bonne-utilisation-de-header-location-en</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 19 Jul 2011 03:38:00 -0700</pubDate>
      <title>Permettre la création de sous-domaine dynamique</title>
      <link>http://feedproxy.google.com/~r/weedo-technoblog/~3/7aNrsDrNetI/permettre-la-creation-de-sous-domaine-dynamiq</link>
      <guid isPermaLink="false">http://posterous.weedo.fr/permettre-la-creation-de-sous-domaine-dynamiq</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Je n'ai pas encore testé cette astuce, je l'ai simplement vu sur un serveur (appelons le exemple.com) :&lt;/p&gt;

&lt;p&gt;L'admin a mis la règle suivant dans le fichier vhosts.conf (CentOS) :&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;# more  vhosts.conf

RewriteEngine On
RewriteMap lowercase int:tolower
RewriteRule ^/(.*)$ /home/${lowercase:%{SERVER_NAME}}/$1&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Ainsi, les utilisateurs créent des dossiers .exemple.com dans le dossier home, ce qui créé dynamiquement les sous domaine.&lt;/p&gt;

&lt;p&gt;Par exemple, si un utilisateur crée un dossier foo.exemple.com, les fichiers dans le dossier seront disponibles à l'adresse foo.exemple.com&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://posterous.weedo.fr/permettre-la-creation-de-sous-domaine-dynamiq"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://posterous.weedo.fr/permettre-la-creation-de-sous-domaine-dynamiq#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aaylK14VFbcY-FAQVm_McpePqMk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aaylK14VFbcY-FAQVm_McpePqMk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aaylK14VFbcY-FAQVm_McpePqMk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aaylK14VFbcY-FAQVm_McpePqMk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/weedo-technoblog/~4/7aNrsDrNetI" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/212993/karim-cassam-chenai-profil-posterous.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36K9ZbJ24NnH</posterous:profileUrl>
        <posterous:firstName>ka</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>weedo</posterous:nickName>
        <posterous:displayName>ka</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://posterous.weedo.fr/permettre-la-creation-de-sous-domaine-dynamiq</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 12 Jul 2011 06:06:00 -0700</pubDate>
      <title>12 astuces pour récupérer de l'espace disque sur un système Mac OS X 10.6 Snow Leopard</title>
      <link>http://feedproxy.google.com/~r/weedo-technoblog/~3/I9dcyW5sTy4/4-astuces-pour-recuperer-de-lespace-disque-su</link>
      <guid isPermaLink="false">http://posterous.weedo.fr/4-astuces-pour-recuperer-de-lespace-disque-su</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Mis à jour le 12 juillet 2011.&lt;/p&gt;

&lt;p&gt;Attention : A utiliser avec précaution.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vider dossier ~/Library/PubSub/ : &lt;a href="http://discussions.info.apple.com/thread.jspa?threadID=2174894"&gt;http://discussions.info.apple.com/thread.jspa?threadID=2174894&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Vider dossier ~/Library/Preferences/Macromedia/&lt;/li&gt;
&lt;li&gt;Supprimer des fichiers mail qui ne servent plus : &lt;a href="http://support.apple.com/kb/TA23076"&gt;http://support.apple.com/kb/TA23076&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Supprimer les langues que vous n'utilisez jamais : &lt;a href="http://monolingual.sourceforge.net/"&gt;http://monolingual.sourceforge.net/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Vider le contenu du dossier cache de votre dossier utilisateur : ~/Library/Caches/&lt;/li&gt;
&lt;li&gt;Rechercher tous les fichiers de type &amp;lsquo;Archive&amp;rsquo;, et supprimer ceux qui sont inutiles, en commençant par les plus gros.&lt;/li&gt;
&lt;li&gt;Rechercher tous les fichiers de type &amp;lsquo;Image disque&amp;rsquo;, et supprimer ceux qui sont inutiles, en commençant par les plus gros.&lt;/li&gt;
&lt;li&gt;Autre ressource : &lt;a href="http://www.macworld.com/article/158659/2011/03/springclean.html"&gt;Spring Clean chez MacWorld&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Utiliser un logiciel de détection de doublons. Je conseille Tidy Up.

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.hyperbolicsoftware.com/TidyUp.html"&gt;Tidy Up!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://furry-rodents.com/"&gt;Chipmunk&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Spécial bonus passage à Mac OS Lion : Supprimer vos applis Classic et PowerPC. &lt;a href="http://www.macworld.com/article/160626/2011/06/native_not.html"&gt;Par ici pour les repérer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;L'application MobileMe Backup est obsolète (&lt;a href="http://support.apple.com/kb/dl1025)"&gt;http://support.apple.com/kb/dl1025)&lt;/a&gt;, supprimer le dossier /Users/ka/Library/Application Support/Backup&lt;/li&gt;
&lt;li&gt;Le dossier est backup d'iPhone se trouve ici : /Users/ka/Library/Application Support/MobileSync/Backup. Garder ce dossier de côté, faire un backup frais des iBidules et supprimer le dossier&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Combien avez-vous gagné d'espace disque en utilisant ces astuces ?&lt;br /&gt;
Partagez vos astuces dans les commentaires !&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://posterous.weedo.fr/4-astuces-pour-recuperer-de-lespace-disque-su"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://posterous.weedo.fr/4-astuces-pour-recuperer-de-lespace-disque-su#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-85nnsrW5ntzsbRk1nTb3s_3uTY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-85nnsrW5ntzsbRk1nTb3s_3uTY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-85nnsrW5ntzsbRk1nTb3s_3uTY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-85nnsrW5ntzsbRk1nTb3s_3uTY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/weedo-technoblog/~4/I9dcyW5sTy4" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/212993/karim-cassam-chenai-profil-posterous.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36K9ZbJ24NnH</posterous:profileUrl>
        <posterous:firstName>ka</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>weedo</posterous:nickName>
        <posterous:displayName>ka</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://posterous.weedo.fr/4-astuces-pour-recuperer-de-lespace-disque-su</feedburner:origLink></item>
    <item>
      <pubDate>Sat, 02 Jul 2011 08:25:00 -0700</pubDate>
      <title>Snippet pour rendre une méthode applicable à une collection d'éléments</title>
      <link>http://feedproxy.google.com/~r/weedo-technoblog/~3/2b_B4D-qd-w/snippet-pour-rendre-une-methode-applicable-a</link>
      <guid isPermaLink="false">http://posterous.weedo.fr/snippet-pour-rendre-une-methode-applicable-a</guid>
      <description>&lt;p&gt;
	&lt;h4&gt;Snippet pour rendre myFunction applicable à une collection&lt;/h4&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;&lt;span class="c"&gt;/*
 * myFunctionArray function.      
 * Replace 'myFunction' with the name of the function you want to use. Keep the quotes.      
 * @param array $array, collection of elements to pass to the function      
 * @return array of elements which have been processed by the function      
 */&lt;/span&gt;

&lt;span class="r"&gt;function&lt;/span&gt; &lt;span class="fu"&gt;myFunctionArray&lt;/span&gt;(&lt;span class="pd"&gt;array&lt;/span&gt; &lt;span class="lv"&gt;$array&lt;/span&gt;) {
    &lt;span class="r"&gt;return&lt;/span&gt; &lt;span class="pd"&gt;array_map&lt;/span&gt;(&lt;span class="pd"&gt;array&lt;/span&gt;(&lt;span class="lv"&gt;$this&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;myFunction&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;), &lt;span class="lv"&gt;$array&lt;/span&gt;);
}&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h4&gt;Snippet d'une fonction qui rend n'importe quelle méthode de l'objet applicable à une collection, en passant le nom de la fonction en paramètre&lt;/h4&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;&lt;span class="c"&gt;/*
 * anyFunctionArray function.
 * Pour une méthode static, remplacer `$this` par `self`
 * @param string $functionName, Name of the function to call
 * @param array $array, collection of elements to pass to the function
 * @return array of elements which have been processed by the function
 */&lt;/span&gt;

&lt;span class="r"&gt;function&lt;/span&gt; &lt;span class="fu"&gt;anyFunctionArray&lt;/span&gt;(&lt;span class="lv"&gt;$functionName&lt;/span&gt;, &lt;span class="pd"&gt;array&lt;/span&gt; &lt;span class="lv"&gt;$array&lt;/span&gt;) {
    &lt;span class="r"&gt;return&lt;/span&gt; &lt;span class="pd"&gt;array_map&lt;/span&gt;(&lt;span class="pd"&gt;array&lt;/span&gt;(&lt;span class="lv"&gt;$this&lt;/span&gt;, &lt;span class="lv"&gt;$functionName&lt;/span&gt;), &lt;span class="lv"&gt;$array&lt;/span&gt;);
}&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;On peut aussi utiliser une boucle foreach, mais c'est moins élégant.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://posterous.weedo.fr/snippet-pour-rendre-une-methode-applicable-a"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://posterous.weedo.fr/snippet-pour-rendre-une-methode-applicable-a#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Fp22FzJXzOq91yR1UllvdxvAP4E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Fp22FzJXzOq91yR1UllvdxvAP4E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Fp22FzJXzOq91yR1UllvdxvAP4E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Fp22FzJXzOq91yR1UllvdxvAP4E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/weedo-technoblog/~4/2b_B4D-qd-w" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/212993/karim-cassam-chenai-profil-posterous.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36K9ZbJ24NnH</posterous:profileUrl>
        <posterous:firstName>ka</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>weedo</posterous:nickName>
        <posterous:displayName>ka</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://posterous.weedo.fr/snippet-pour-rendre-une-methode-applicable-a</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 30 Jun 2011 07:35:00 -0700</pubDate>
      <title>bug php pdo prepare execute query</title>
      <link>http://feedproxy.google.com/~r/weedo-technoblog/~3/YFKyrtEm7vU/bug-php-pdo-prepare-execute-query</link>
      <guid isPermaLink="false">http://posterous.weedo.fr/bug-php-pdo-prepare-execute-query</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Je suis tombé sur un bug PDO qui m'a fait perdre beaucoup de temps :&lt;/p&gt;

&lt;p&gt;J'avais cette requête :&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;&lt;span class="lv"&gt;$query&lt;/span&gt; = &lt;span class="lv"&gt;$pdo&lt;/span&gt;-&amp;gt;prepare(&lt;span class="lv"&gt;$sql&lt;/span&gt;);
&lt;span class="lv"&gt;$result&lt;/span&gt; = &lt;span class="lv"&gt;$query&lt;/span&gt;-&amp;gt;execute();
&lt;span class="r"&gt;if&lt;/span&gt; (&lt;span class="lv"&gt;$result&lt;/span&gt; === &lt;span class="pc"&gt;false&lt;/span&gt;) {
    &lt;span class="pd"&gt;var_dump&lt;/span&gt;(&lt;span class="lv"&gt;$result&lt;/span&gt;);
    &lt;span class="pd"&gt;echo&lt;/span&gt; &lt;span class="lv"&gt;$pdo&lt;/span&gt;-&amp;gt;errorCode();
    &lt;span class="pd"&gt;var_dump&lt;/span&gt;(&lt;span class="lv"&gt;$pdo&lt;/span&gt;-&amp;gt;errorInfo());
}&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;J'obtenais :&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;(&lt;span class="pt"&gt;bool&lt;/span&gt;)&lt;span class="pc"&gt;false&lt;/span&gt;
&lt;span class="i"&gt;00000&lt;/span&gt;
&lt;span class="pd"&gt;Array&lt;/span&gt;() &lt;span class="c"&gt;/* c'est à dire tableau vide, pas de message d'erreur */&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;code&gt;execute()&lt;/code&gt; échouait mais sans code ni message d'erreur&lt;/p&gt;

&lt;p&gt;J'ai remplacé mon code par :&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;&lt;span class="lv"&gt;$result&lt;/span&gt; = &lt;span class="lv"&gt;$pdo&lt;/span&gt;-&amp;gt;query(&lt;span class="lv"&gt;$sql&lt;/span&gt;);
&lt;span class="r"&gt;if&lt;/span&gt; (&lt;span class="lv"&gt;$result&lt;/span&gt; === &lt;span class="pc"&gt;false&lt;/span&gt;) {
    &lt;span class="pd"&gt;var_dump&lt;/span&gt;(&lt;span class="lv"&gt;$result&lt;/span&gt;);
    &lt;span class="pd"&gt;echo&lt;/span&gt; &lt;span class="lv"&gt;$pdo&lt;/span&gt;-&amp;gt;errorCode();
    &lt;span class="pd"&gt;var_dump&lt;/span&gt;(&lt;span class="lv"&gt;$pdo&lt;/span&gt;-&amp;gt;errorInfo());
}&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Et là j'ai eu mon message erreur :&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;(&lt;span class="pt"&gt;bool&lt;/span&gt;)&lt;span class="pc"&gt;false&lt;/span&gt;
&lt;span class="i"&gt;00000&lt;/span&gt;
[&lt;span class="i"&gt;0&lt;/span&gt;] =&amp;gt; &lt;span class="i"&gt;42&lt;/span&gt;&lt;span class="co"&gt;S02&lt;/span&gt;
[&lt;span class="i"&gt;1&lt;/span&gt;] =&amp;gt; &lt;span class="i"&gt;1146&lt;/span&gt;
[&lt;span class="i"&gt;2&lt;/span&gt;] =&amp;gt; &lt;span class="co"&gt;Table&lt;/span&gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;xxxx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt; doesn&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;t exist&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Conclusion, si votre &lt;code&gt;prepare()/execute()&lt;/code&gt; ne fonctionne pas sans message d'erreur, remplacez le temporairement par un &lt;code&gt;query()&lt;/code&gt; qui sera peut-être plus bavard.&lt;/p&gt;

&lt;p&gt;[EDIT] Ce bug est le même que celui décrit ici : &lt;a href="https://bugs.php.net/bug.php?id=37285"&gt;https://bugs.php.net/bug.php?id=37285&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;K.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://posterous.weedo.fr/bug-php-pdo-prepare-execute-query"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://posterous.weedo.fr/bug-php-pdo-prepare-execute-query#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5BqNq4CT7nrMig1gYSUIhdlUjm8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5BqNq4CT7nrMig1gYSUIhdlUjm8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5BqNq4CT7nrMig1gYSUIhdlUjm8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5BqNq4CT7nrMig1gYSUIhdlUjm8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/weedo-technoblog/~4/YFKyrtEm7vU" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/212993/karim-cassam-chenai-profil-posterous.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36K9ZbJ24NnH</posterous:profileUrl>
        <posterous:firstName>ka</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>weedo</posterous:nickName>
        <posterous:displayName>ka</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://posterous.weedo.fr/bug-php-pdo-prepare-execute-query</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 10 Jun 2011 06:05:00 -0700</pubDate>
      <title>variables dans les templates html -&gt; back to basic</title>
      <link>http://feedproxy.google.com/~r/weedo-technoblog/~3/YkbfeV5KVjg/variables-dans-les-templates-html-back-to-bas</link>
      <guid isPermaLink="false">http://posterous.weedo.fr/variables-dans-les-templates-html-back-to-bas</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Lorsque vous utilisez des variables dans des vues html, il faut faire attention aux caractères spéciaux html : quote, double quote, &amp;lt; &gt;, etc., qui pourraient être contenus dans la variable et interférer avec le html&lt;/p&gt;

&lt;p&gt;Exemple, cas réel :
&lt;code&gt;a href = '$variable'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;avec &lt;code&gt;$variable&lt;/code&gt; qui contient &lt;code&gt;COTE D'AZUR&lt;/code&gt;&amp;hellip; =&gt; #fail (cas réel).&lt;/p&gt;

&lt;p&gt;Donc, au niveau de la vue :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Passez toujours vos variables dans la fonction &lt;code&gt;htmlspecialchars($variable, ENT_COMPAT ,'UTF-8')&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Utilisez toujours UTF-8 quand c'est possible.&lt;/li&gt;
&lt;li&gt;Préférez les double quotes dans la vue : &lt;code&gt;a href = "$variable"&lt;/code&gt; plutôt que &lt;code&gt;a href = '$variable'&lt;/code&gt; car les doubles quotes sont moins fréquents dans l'écrit (en français en tout cas). Cela permet aussi d'utiliser htmlspecialchars ou htmlentities avec le deuxième paramètre par défaut.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Snippet :&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;&lt;span class="lv"&gt;$converted&lt;/span&gt; = &lt;span class="pd"&gt;htmlspecialchars&lt;/span&gt;(&lt;span class="lv"&gt;$variable&lt;/span&gt;, &lt;span class="pc"&gt;ENT_COMPAT&lt;/span&gt; ,&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;UTF-8&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;link :&lt;a href="http://php.net/manual/en/function.htmlspecialchars.php"&gt;php.net/htmlspecialchars&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;K.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://posterous.weedo.fr/variables-dans-les-templates-html-back-to-bas"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://posterous.weedo.fr/variables-dans-les-templates-html-back-to-bas#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/F0wu3miff3mwBtppnsZyIxi6XyE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F0wu3miff3mwBtppnsZyIxi6XyE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/F0wu3miff3mwBtppnsZyIxi6XyE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F0wu3miff3mwBtppnsZyIxi6XyE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/weedo-technoblog/~4/YkbfeV5KVjg" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/212993/karim-cassam-chenai-profil-posterous.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36K9ZbJ24NnH</posterous:profileUrl>
        <posterous:firstName>ka</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>weedo</posterous:nickName>
        <posterous:displayName>ka</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://posterous.weedo.fr/variables-dans-les-templates-html-back-to-bas</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 09 Jun 2011 09:40:00 -0700</pubDate>
      <title>A simpler email address validator for Zend</title>
      <link>http://feedproxy.google.com/~r/weedo-technoblog/~3/UCRNokX2bOM/a-simpler-email-address-validator-for-zend</link>
      <guid isPermaLink="false">http://posterous.weedo.fr/a-simpler-email-address-validator-for-zend</guid>
      <description>&lt;p&gt;
	&lt;p&gt;I wrote a simpler email validator for Zend. Here it is :&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;&lt;span class="r"&gt;namespace&lt;/span&gt; &lt;span class="co"&gt;Weedo&lt;/span&gt;\&lt;span class="co"&gt;Validate&lt;/span&gt;;

&lt;span class="c"&gt;/**
 * Weedo EmailAddress Validator class.
 *
 * @author http://twitter.com/kaweedo
 */&lt;/span&gt;

&lt;span class="r"&gt;class&lt;/span&gt; &lt;span class="cl"&gt;EmailAddress&lt;/span&gt; &lt;span class="r"&gt;extends&lt;/span&gt; \&lt;span class="co"&gt;Zend_Validate_Abstract&lt;/span&gt;
{
    &lt;span class="r"&gt;const&lt;/span&gt; &lt;span class="co"&gt;INVALID&lt;/span&gt; = &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;emailAddressInvalid&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;;

    &lt;span class="r"&gt;protected&lt;/span&gt; &lt;span class="lv"&gt;$_messageTemplates&lt;/span&gt; = &lt;span class="pd"&gt;array&lt;/span&gt;(
        &lt;span class="pc"&gt;self&lt;/span&gt;::&lt;span class="co"&gt;INVALID&lt;/span&gt; =&amp;gt; &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;Email is not valid&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
    );

     &lt;span class="c"&gt;/**
     * isValid function.
     * Defined by Zend_Validate_Interface
     *
     * Returns true if and only if $value is a valid email address
     * according to RFC2822
     *
     * @access public
     * @link   http://php.net/manual/en/function.filter-var.php
     * @param  string $value
     * @return boolean
     */&lt;/span&gt;

    &lt;span class="r"&gt;public&lt;/span&gt; &lt;span class="r"&gt;function&lt;/span&gt; &lt;span class="fu"&gt;isValid&lt;/span&gt;(&lt;span class="lv"&gt;$value&lt;/span&gt;)
    {
        &lt;span class="r"&gt;if&lt;/span&gt;(filter_var(&lt;span class="lv"&gt;$value&lt;/span&gt;, &lt;span class="co"&gt;FILTER_VALIDATE_EMAIL&lt;/span&gt;) === &lt;span class="pc"&gt;false&lt;/span&gt;) {
            &lt;span class="lv"&gt;$this&lt;/span&gt;-&amp;gt;_error(&lt;span class="pc"&gt;self&lt;/span&gt;::&lt;span class="co"&gt;INVALID&lt;/span&gt;);
            &lt;span class="r"&gt;return&lt;/span&gt; &lt;span class="pc"&gt;false&lt;/span&gt;;
        } &lt;span class="r"&gt;else&lt;/span&gt; {
            &lt;span class="c"&gt;// We only check the presence of a dot on the domain part&lt;/span&gt;
            &lt;span class="lv"&gt;$components&lt;/span&gt; = &lt;span class="pd"&gt;explode&lt;/span&gt;(&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;@&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="lv"&gt;$value&lt;/span&gt;);
            &lt;span class="lv"&gt;$domain&lt;/span&gt; = &lt;span class="lv"&gt;$components&lt;/span&gt;[&lt;span class="i"&gt;1&lt;/span&gt;];

            &lt;span class="r"&gt;if&lt;/span&gt; (&lt;span class="pd"&gt;strpos&lt;/span&gt;(&lt;span class="lv"&gt;$domain&lt;/span&gt;, &lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;.&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;) === &lt;span class="pc"&gt;false&lt;/span&gt;) {
                &lt;span class="lv"&gt;$this&lt;/span&gt;-&amp;gt;_error(&lt;span class="pc"&gt;self&lt;/span&gt;::&lt;span class="co"&gt;INVALID&lt;/span&gt;);
                &lt;span class="r"&gt;return&lt;/span&gt; &lt;span class="pc"&gt;false&lt;/span&gt;;
            }

            &lt;span class="r"&gt;return&lt;/span&gt; &lt;span class="pc"&gt;true&lt;/span&gt;;
        }
    }
}&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Usage example :&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;&lt;span class="lv"&gt;$emailAddressValidator&lt;/span&gt; = &lt;span class="r"&gt;new&lt;/span&gt; &lt;span class="co"&gt;Weedo&lt;/span&gt;\&lt;span class="co"&gt;Validate&lt;/span&gt;\&lt;span class="co"&gt;EmailAddress&lt;/span&gt;();
&lt;span class="c"&gt;/* $emailAddressValidator = new Zend_Validate_EmailAddress(); too complicated */&lt;/span&gt;

&lt;span class="lv"&gt;$this&lt;/span&gt;-&amp;gt;addElement(
        &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;,
        &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;,
        &lt;span class="pd"&gt;array&lt;/span&gt;(
            &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;placeholder&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;     =&amp;gt; &lt;span class="pd"&gt;ucfirst&lt;/span&gt;(&lt;span class="lv"&gt;$this&lt;/span&gt;-&amp;gt;getTranslator()-&amp;gt;translate(&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;Your email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;)).&lt;span class="s"&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,
            &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;required&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;  =&amp;gt; &lt;span class="pc"&gt;true&lt;/span&gt;,
            &lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;validators&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt; =&amp;gt; 
            &lt;span class="pd"&gt;array&lt;/span&gt;(
                &lt;span class="pd"&gt;array&lt;/span&gt;(&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;NotEmpty&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="pc"&gt;true&lt;/span&gt;, &lt;span class="pd"&gt;array&lt;/span&gt;(&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;messages&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class="lv"&gt;$this&lt;/span&gt;-&amp;gt;getTranslator()-&amp;gt;translate(&lt;span class="s"&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="k"&gt;Email is mandatory&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/span&gt;))),
                &lt;span class="pd"&gt;array&lt;/span&gt;(&lt;span class="lv"&gt;$emailAddressValidator&lt;/span&gt;,&lt;span class="pc"&gt;true&lt;/span&gt;),
            ),
        )
    );&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;source :
&lt;a href="http://www.electrictoolbox.com/php-email-validation-filter-var/"&gt;http://www.electrictoolbox.com/php-email-validation-filter-var/&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://php.net/manual/en/function.filter-var.php"&gt;http://php.net/manual/en/function.filter-var.php&lt;/a&gt;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://posterous.weedo.fr/a-simpler-email-address-validator-for-zend"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://posterous.weedo.fr/a-simpler-email-address-validator-for-zend#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7YFrn3O8ULVRpOb_EthpyShkQZ4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7YFrn3O8ULVRpOb_EthpyShkQZ4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7YFrn3O8ULVRpOb_EthpyShkQZ4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7YFrn3O8ULVRpOb_EthpyShkQZ4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/weedo-technoblog/~4/UCRNokX2bOM" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/212993/karim-cassam-chenai-profil-posterous.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36K9ZbJ24NnH</posterous:profileUrl>
        <posterous:firstName>ka</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>weedo</posterous:nickName>
        <posterous:displayName>ka</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://posterous.weedo.fr/a-simpler-email-address-validator-for-zend</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 07 Jun 2011 05:24:50 -0700</pubDate>
      <title>Zend : Utiliser le router dans une classe (form/entity) sans avoir besoin de lui passer la vue</title>
      <link>http://feedproxy.google.com/~r/weedo-technoblog/~3/G9fCtd1maz4/zend-utiliser-le-router-dans-une-classe-forme</link>
      <guid isPermaLink="false">http://posterous.weedo.fr/zend-utiliser-le-router-dans-une-classe-forme</guid>
      <description>&lt;p&gt;
	&lt;a href="http://stackoverflow.com/questions/3288901/zend-form-setaction-using-named-routes"&gt;http://stackoverflow.com/questions/3288901/zend-form-setaction-using-named-ro...&lt;/a&gt; &lt;p /&gt; // in your form &lt;br /&gt;public function init() &lt;br /&gt;{ &lt;br /&gt; $router = Zend_Controller_Front::getInstance()-&gt;getRouter(); &lt;br /&gt; $url = $router-&gt;assemble( &lt;br /&gt; array( &lt;br /&gt; 'paramterName0' =&gt; 'parameterValue0', &lt;br /&gt; 'paramterName1' =&gt; 'parameterValue1', &lt;br /&gt; ), &lt;br /&gt; 'routeName' &lt;br /&gt; ); &lt;p /&gt;  $this-&gt;setAction($url); &lt;br /&gt; ... &lt;br /&gt;} &lt;p /&gt; ou &lt;p /&gt; // in your form public function init() &lt;br /&gt;{ &lt;br /&gt; $url = Zend_Layout::getMvcInstance()-&gt;getView()-&gt;url(array(), 'routeName'; &lt;br /&gt; $this-&gt;setAction($url); &lt;br /&gt; ... &lt;br /&gt;}
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://posterous.weedo.fr/zend-utiliser-le-router-dans-une-classe-forme"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://posterous.weedo.fr/zend-utiliser-le-router-dans-une-classe-forme#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1k9vgxgJhEg-n2EuYxS2Q7AITqg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1k9vgxgJhEg-n2EuYxS2Q7AITqg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1k9vgxgJhEg-n2EuYxS2Q7AITqg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1k9vgxgJhEg-n2EuYxS2Q7AITqg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/weedo-technoblog/~4/G9fCtd1maz4" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/212993/karim-cassam-chenai-profil-posterous.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36K9ZbJ24NnH</posterous:profileUrl>
        <posterous:firstName>ka</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>weedo</posterous:nickName>
        <posterous:displayName>ka</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://posterous.weedo.fr/zend-utiliser-le-router-dans-une-classe-forme</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 05 May 2011 02:20:00 -0700</pubDate>
      <title>Weedo recrute un développeur web LAMP/symfony/zend/jquery/html/css en CDD de 6 mois</title>
      <link>http://feedproxy.google.com/~r/weedo-technoblog/~3/IaniUkf4bfw/weedo-recrute-un-developpeur-web-lampsymfonyz</link>
      <guid isPermaLink="false">http://posterous.weedo.fr/weedo-recrute-un-developpeur-web-lampsymfonyz</guid>
      <description>&lt;p&gt;
	&lt;h2&gt;Mission&lt;/h2&gt;

&lt;p&gt;Vous prendrez en charge la conception et la réalisation de projets Web.&lt;/p&gt;

&lt;p&gt;Dans le cadre de la mission, les techniques utilisées seront :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;php5 (orientée objet)&lt;/li&gt;
&lt;li&gt;frameworks PHP Zend et Symfony&lt;/li&gt;
&lt;li&gt;CMS WordPress&lt;/li&gt;
&lt;li&gt;mysql, doctrine&lt;/li&gt;
&lt;li&gt;html, css, javascript (ajax, jquery)&lt;/li&gt;
&lt;li&gt;administration de serveurs web Unix&lt;/li&gt;
&lt;li&gt;administration de BDD MySQL&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;Profil&lt;/h2&gt;

&lt;p&gt;Vous êtes passionné par le développement web, rigoureux, autonome, réactif, courageux.&lt;/p&gt;

&lt;h2&gt;Ce que nous faisons&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Nous développons des sites web pour des clients.&lt;/li&gt;
&lt;li&gt;Notre priorité est de fournir un travail de haute qualité, en respectant les budgets et les délais.&lt;/li&gt;
&lt;li&gt;Notre objectif est de fidéliser nos clients.&lt;/li&gt;
&lt;li&gt;Nous sommes une entreprise ouverte aux nouvelles idées et aux nouvelles techniques.&lt;/li&gt;
&lt;li&gt;Nous améliorons notre savoir-faire et nos pratiques en permanence.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Voir l'annonce sur &lt;a href="http://fr.lolix.org/search/offre/offre.php?id=14282"&gt;lolix&lt;/a&gt;&lt;br /&gt;
Voir l'annonce sur &lt;a href="http://emploi.alsacreations.com/offre-336700-Developpeur-web.html"&gt;alsacreations&lt;/a&gt;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://posterous.weedo.fr/weedo-recrute-un-developpeur-web-lampsymfonyz"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://posterous.weedo.fr/weedo-recrute-un-developpeur-web-lampsymfonyz#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5wj-AgH6IIjg8m73w_ylgskpgQI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5wj-AgH6IIjg8m73w_ylgskpgQI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5wj-AgH6IIjg8m73w_ylgskpgQI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5wj-AgH6IIjg8m73w_ylgskpgQI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/weedo-technoblog/~4/IaniUkf4bfw" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/212993/karim-cassam-chenai-profil-posterous.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36K9ZbJ24NnH</posterous:profileUrl>
        <posterous:firstName>ka</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>weedo</posterous:nickName>
        <posterous:displayName>ka</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://posterous.weedo.fr/weedo-recrute-un-developpeur-web-lampsymfonyz</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 29 Apr 2011 03:27:00 -0700</pubDate>
      <title>Mac OS X 10.6 : Mémento des étapes d'une migration manuelle</title>
      <link>http://feedproxy.google.com/~r/weedo-technoblog/~3/n1gdczLgtbA/mac-os-x-106-memento-des-etapes-dune-migratio</link>
      <guid isPermaLink="false">http://posterous.weedo.fr/mac-os-x-106-memento-des-etapes-dune-migratio</guid>
      <description>&lt;p&gt;
	&lt;p&gt;&lt;em&gt;Dans la plupart des cas, sous Mac OS X, pour changer de machine ou de disque dur, il est inutile de faire une migration manuelle et il suffit d'utiliser l'Assistant de Migration dans le dossier Utilitaires. Ce mémento s'adresse à ceux qui souhaitent faire une migration manuellement sans passer par l'Assistant de Migration.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Débrancher les DD externes&lt;/li&gt;
&lt;li&gt;Installer Mac OS X 10.6 à partir du DVD, clé USB Apple ou de votre disque d'installation Apple.&lt;/li&gt;
&lt;li&gt;Renseigner votre  identifiant Apple (utilisé pour iTunes ou Mobile me)&lt;/li&gt;
&lt;li&gt;Aller dans Préférences Système/Économie d'énergie et modifier le réglage Ordinateur en veille : régler sur &amp;lsquo;Jamais&amp;rsquo;&lt;/li&gt;
&lt;li&gt;Faire la mise à jour combo (&amp;ndash;&gt; 10.6.last)&lt;/li&gt;
&lt;li&gt;Configurer les préférences du Finder&lt;/li&gt;
&lt;li&gt;Configurer le nom de la machine dans les préférences systèmes/partage&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;PIM : Comme pour l'iPhone, ces données sont gérables sur le cloud. Ne pas les migrer donc, configurer simplement vos comptes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Carnet d'adresses : Mon carnet d'adresse est sur mon compte gmail =&gt; Préférences Synchroniser avec Google&lt;/li&gt;
&lt;li&gt;iCal : Préférences, ajouter un compte google&lt;/li&gt;
&lt;li&gt;Mail : Créer votre compte google (IMAP). Supprimer les RSS créés automatiquement&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Mots de passe (keychain access/trousseau d'accès)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ouvrir votre disque de sauvegarde à cette adresse: &lt;code&gt;Nom_du_disque_de_sauvegarde/Utilisateurs/votredossier/Bibliothèque/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Glisser le dossier &amp;ldquo;Keychains&amp;rdquo; sur le bureau.&lt;/li&gt;
&lt;li&gt;Ouvrir votre disque cible tout neuf et glisser le dossier &amp;ldquo;Keychains&amp;rdquo; à cet endroit : &lt;code&gt;Nom_du_disque_tout_neuf/Utilisateurs/votredossier/Bibliothèque/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Copier/coller le contenu des dossiers du compte&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;~/Bureau&lt;/li&gt;
&lt;li&gt;~/Documents&lt;/li&gt;
&lt;li&gt;~/Images&lt;/li&gt;
&lt;li&gt;~/Musique&lt;/li&gt;
&lt;li&gt;~/Videos&lt;/li&gt;
&lt;li&gt;~/Sites&lt;/li&gt;
&lt;li&gt;/Users/Shared/&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;iTunes&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;vérifier ou choisir dossier itunes music&lt;/li&gt;
&lt;li&gt;Choisir Fichier/Bibliothèque/Organiser&lt;/li&gt;
&lt;li&gt;&lt;p&gt;lire &lt;a href="http://support.apple.com/kb/HT1449?viewlocale=fr_FR"&gt;http://support.apple.com/kb/HT1449?viewlocale=fr_FR&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Activer Time Machine&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Applis : Comme sur iphone, les applis qui avaient été installées avec l'app store devraient être téléchargeables gratuitement si vous avez bien gardé votre compte en ligne App Store. : là aussi, on est dans le cloud
Quelques applis indispensables :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;iPhoto : J'avais la version 8. Plutot que de réinstaller une vieille version, j'ai installé la version 9.1.1 avec l'App Store&lt;/li&gt;
&lt;li&gt;Dropbox, configuer le compte, les fichiers se synchronisent&lt;/li&gt;
&lt;li&gt;1password, faire le lien avec son fichier keychain (1password + dropbox fonctionnent très bien ensemble)&lt;/li&gt;
&lt;li&gt;Spotify, configurer son compte&lt;/li&gt;
&lt;li&gt;Installer easyfind&lt;/li&gt;
&lt;li&gt;Installer airfoil&lt;/li&gt;
&lt;li&gt;Configurer iChat&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Rebrancher les DD externes.&lt;/p&gt;

&lt;p&gt;Sources :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.procata.com/blog/archives/2007/02/16/how-to-transfer-mac-os-x-application-data-between-computers/"&gt;http://www.procata.com/blog/archives/2007/02/16/how-to-transfer-mac-os-x-appl...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cuk.ch/articles/3230"&gt;http://cuk.ch/articles/3230&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://posterous.weedo.fr/mac-os-x-106-memento-des-etapes-dune-migratio"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://posterous.weedo.fr/mac-os-x-106-memento-des-etapes-dune-migratio#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zo69Bw818grCvHYVJVF1ZQbgjAU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zo69Bw818grCvHYVJVF1ZQbgjAU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zo69Bw818grCvHYVJVF1ZQbgjAU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zo69Bw818grCvHYVJVF1ZQbgjAU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/weedo-technoblog/~4/n1gdczLgtbA" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/212993/karim-cassam-chenai-profil-posterous.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36K9ZbJ24NnH</posterous:profileUrl>
        <posterous:firstName>ka</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>weedo</posterous:nickName>
        <posterous:displayName>ka</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://posterous.weedo.fr/mac-os-x-106-memento-des-etapes-dune-migratio</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 14 Apr 2011 04:46:00 -0700</pubDate>
      <title>Weedo recrute un développeur web LAMP/symfony/zend/jquery/html/css en stage ou contrat en alternance.</title>
      <link>http://feedproxy.google.com/~r/weedo-technoblog/~3/WKouAw1lxh4/weedo-cherche-un-developpeur-web-lamphtmlcssj</link>
      <guid isPermaLink="false">http://posterous.weedo.fr/weedo-cherche-un-developpeur-web-lamphtmlcssj</guid>
      <description>&lt;p&gt;
	&lt;p&gt;14 avril 2011 :&lt;br /&gt;
Weedo cherche un développeur web en stage ou contrat en alternance.&lt;br /&gt;
Nous cherchons un développeur pour faire de la création et de l'intégration de sites web.&lt;/p&gt;

&lt;p&gt;Les compétences techniques indispensables sont :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;php (programmation orientée objet)&lt;/li&gt;
&lt;li&gt;mysql, doctrine&lt;/li&gt;
&lt;li&gt;javascript (ajax, jquery)&lt;/li&gt;
&lt;li&gt;html&lt;/li&gt;
&lt;li&gt;css&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Un niveau avancé dans ces technologies est demandé.&lt;/p&gt;

&lt;p&gt;Une bonne connaissance des frameworks PHP Zend et Symfony est appréciée.&lt;br /&gt;
Une bonne connaissance du CMS WordPress est appréciée.&lt;br /&gt;
Des compétences en administration de serveurs web Unix sont appréciées.&lt;br /&gt;
Des compétences en administration de BDD MySQL sont appréciées.&lt;/p&gt;

&lt;p&gt;Expérience : Le candidat devra avoir une expérience significative dans le développement web.&lt;/p&gt;

&lt;p&gt;Le candidat doit avoir les qualités suivantes :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Passionné par le développement web.&lt;/li&gt;
&lt;li&gt;Intéressé, travailleur, rigoureux, autonome, adaptable, très motivé.&lt;/li&gt;
&lt;li&gt;Déterminé à faire aboutir les taches confiées dans le temps imparti.&lt;/li&gt;
&lt;li&gt;Courageux dans le traitement des problèmes.&lt;/li&gt;
&lt;li&gt;Curieux et capable d'apprendre rapidement.&lt;/li&gt;
&lt;li&gt;Capable de travailler en équipe.&lt;/li&gt;
&lt;li&gt;Très bonne expression orale et écrite.&lt;/li&gt;
&lt;li&gt;Excellente maitrise de l'anglais écrite et orale.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Nous développons des sites web pour des clients.&lt;br /&gt;
Notre priorité est de fournir un travail de haute qualité, en respectant les budgets et les délais.&lt;br /&gt;
Notre objectif est de fidéliser nos clients.&lt;br /&gt;
Nous sommes une entreprise ouverte aux nouvelles idées et aux nouvelles techniques.&lt;br /&gt;
Nous améliorons notre savoir-faire et nos pratiques en permanence.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://posterous.weedo.fr/weedo-cherche-un-developpeur-web-lamphtmlcssj"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://posterous.weedo.fr/weedo-cherche-un-developpeur-web-lamphtmlcssj#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pyDktSmOHyOpwYG19oYQ7UF5RqA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pyDktSmOHyOpwYG19oYQ7UF5RqA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pyDktSmOHyOpwYG19oYQ7UF5RqA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pyDktSmOHyOpwYG19oYQ7UF5RqA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/weedo-technoblog/~4/WKouAw1lxh4" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/212993/karim-cassam-chenai-profil-posterous.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36K9ZbJ24NnH</posterous:profileUrl>
        <posterous:firstName>ka</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>weedo</posterous:nickName>
        <posterous:displayName>ka</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://posterous.weedo.fr/weedo-cherche-un-developpeur-web-lamphtmlcssj</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 08 Apr 2011 06:25:00 -0700</pubDate>
      <title>Installer PHPUnit pour l'utiliser avec MAMP</title>
      <link>http://feedproxy.google.com/~r/weedo-technoblog/~3/fbtPD7MJf2M/installer-phpunit-pour-lutiliser-avec-mamp</link>
      <guid isPermaLink="false">http://posterous.weedo.fr/installer-phpunit-pour-lutiliser-avec-mamp</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Voici une check-list de ressources pour installer un package PEAR/PHP (exemple de PHPUnit) pour l'utiliser avec MAMP/MAC OS X.
Le nombre d'infos qu'il faut connaitre pour faire ça est assez incroyable. Je pense avoir rassemblé ici la liste des ressources d'informations que j'ai utilisé.&lt;/p&gt;

&lt;h4&gt;Comment installer PHPUnit&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.phpunit.de/manual/current/en/installation.html"&gt;http://www.phpunit.de/manual/current/en/installation.html&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;Comment mettre à jour pear&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://serverfault.com/questions/184741/upgrading-pear-from-1-9-0-to-1-9-1-fails"&gt;http://serverfault.com/questions/184741/upgrading-pear-from-1-9-0-to-1-9-1-fails&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;Comment installer pear (prérequis : l'exécutable php de MAMP)&lt;/h4&gt;

&lt;p&gt;Attention, ce n'est pas précisé dans la doc, mais il faut se mettre dans le bon dossier !
&lt;a href="http://pear.php.net/manual/en/installation.getting.php"&gt;http://pear.php.net/manual/en/installation.getting.php&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;Comment vérifier la config de pear&lt;/h4&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;pear config-show&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h4&gt;Comment savoir quelle version de php j'utilise&lt;/h4&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;$ which php&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h4&gt;Comment pointer vers l'exécutable php et pear de MAMP via la variable $path&lt;/h4&gt;

&lt;p&gt;Editer le fichier de setup du shell utilisé (Le fichier de setup shell est le shell appelé au moment du login) . Par exemple, pour tcsh, il s'agira de .tcshrc :&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;setenv PATH /usr/local/bin:$PATH
set path=($path /Developer/Tools)
set path=(/Applications/MAMP/bin/php5.3/bin $path)&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;exemple, pour bash, il peut s'agir de .bash :&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;export PATH=/Applications/MAMP/bin/php5.3/bin:$PATH&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="http://docstore.mik.ua/orelly/unix3/upt/ch03_03.htm"&gt;http://docstore.mik.ua/orelly/unix3/upt/ch03_03.htm&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.kitebird.com/csh-tcsh-book/csh-intro.pdf"&gt;http://www.kitebird.com/csh-tcsh-book/csh-intro.pdf&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;Comment pointer vers l' exécutable php de MAMP via lien symbolique (préférer la méthode ci-dessus, utilisant la variable $path)&lt;/h4&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;$ cd /usr/bin
$ cp php php.bak (Backup the old version)
$ ln -s /Applications/MAMP/bin/php5.3/bin/php (link to the version of MAMP php)&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h4&gt;Comment s'assurer que les scripts dans /Applications/MAMP/bin/php5.3/bin/php sont exécutables&lt;/h4&gt;

&lt;p&gt;Cas d'obtention du message&lt;br /&gt;
&lt;code&gt;/Applications/MAMP/bin/php5.2/bin/php: Permission denied.&lt;/code&gt;&lt;br /&gt;
ou&lt;br /&gt;
&lt;code&gt;/Applications/MAMP/bin/php5.3/bin/php: Permission denied.&lt;/code&gt;&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;$ sudo chmod 0554 /Applications/MAMP/bin/php5.3/bin/* (makes all the scripts executable)&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h4&gt;Comment lire les variables d'environnement du shell&lt;/h4&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;$ set&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h4&gt;Logs, Message d'erreur&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Problème Failed opening required /Filter.php

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Log&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;PHP Fatal error:  require_once(): Failed opening required 'PHP/CodeCoverage/Filter.php' (include_path='.:/Applications/MAMP/bin/php5.3/lib/php') in /Applications/MAMP/bin/php5.3/bin/phpunit on line 38&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Solution&lt;br /&gt;
Modifier php.ini :&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;

; UNIX: &amp;quot;/path1:/path2&amp;quot;  
include_path = &amp;quot;.:/Applications/MAMP/bin/php5.3/lib/php&amp;quot;
include_path = &amp;quot;.:/Applications/MAMP/bin/php5.3/lib/php/PEAR&amp;quot;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://posterous.weedo.fr/installer-phpunit-pour-lutiliser-avec-mamp"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://posterous.weedo.fr/installer-phpunit-pour-lutiliser-avec-mamp#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8zGghg2y206kiOsmrGlsSazRtkc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8zGghg2y206kiOsmrGlsSazRtkc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8zGghg2y206kiOsmrGlsSazRtkc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8zGghg2y206kiOsmrGlsSazRtkc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/weedo-technoblog/~4/fbtPD7MJf2M" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/212993/karim-cassam-chenai-profil-posterous.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36K9ZbJ24NnH</posterous:profileUrl>
        <posterous:firstName>ka</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>weedo</posterous:nickName>
        <posterous:displayName>ka</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://posterous.weedo.fr/installer-phpunit-pour-lutiliser-avec-mamp</feedburner:origLink></item>
    <item>
      <pubDate>Wed, 06 Apr 2011 07:42:35 -0700</pubDate>
      <title>Empêcher l'accès direct à un fichier php</title>
      <link>http://feedproxy.google.com/~r/weedo-technoblog/~3/06zXqGZKbEs/empecher-lacces-direct-a-un-fichier-php</link>
      <guid isPermaLink="false">http://posterous.weedo.fr/empecher-lacces-direct-a-un-fichier-php</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Si vous voulez qu'un fichier php ne soit jamais appelé directement via un navigateur mais seulement par des include par exemple, vous pouvez utiliser la solution suivante :&lt;/p&gt;

&lt;p&gt;Définir une fonction :&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;function forbidDirectAccess($file) {
    $self = getcwd().&amp;quot;/&amp;quot;.trim($_SERVER[&amp;quot;PHP_SELF&amp;quot;], &amp;quot;/&amp;quot;);
    (substr_compare($file, $self, -strlen($self)) != 0) or die('Restricted access');
}&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Appeler la fonction depuis le fichier à protéger :&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;forbidDirectAccess(__FILE__);&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Cette solution a l'avantage d'être 100% php, invariable &amp;amp; autonome et compatible http et cli.&lt;/p&gt;

&lt;p&gt;Pour approfondir : &lt;a href="http://stackoverflow.com/questions/409496/prevent-direct-access-to-a-php-include-file"&gt;http://stackoverflow.com/questions/409496/prevent-direct-access-to-a-php-incl...&lt;/a&gt;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://posterous.weedo.fr/empecher-lacces-direct-a-un-fichier-php"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://posterous.weedo.fr/empecher-lacces-direct-a-un-fichier-php#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SxH_2TfexTxwvJqXmOB3qOCcxso/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SxH_2TfexTxwvJqXmOB3qOCcxso/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SxH_2TfexTxwvJqXmOB3qOCcxso/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SxH_2TfexTxwvJqXmOB3qOCcxso/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/weedo-technoblog/~4/06zXqGZKbEs" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/212993/karim-cassam-chenai-profil-posterous.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36K9ZbJ24NnH</posterous:profileUrl>
        <posterous:firstName>ka</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>weedo</posterous:nickName>
        <posterous:displayName>ka</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://posterous.weedo.fr/empecher-lacces-direct-a-un-fichier-php</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 05 Apr 2011 06:55:00 -0700</pubDate>
      <title>La création d'un site web pour les non développeurs (gratuitement et rapidement) [Maj. 2011-04-05]</title>
      <link>http://feedproxy.google.com/~r/weedo-technoblog/~3/OPi1wrRctkA/la-creation-dun-site-web-pour-les-non-develop</link>
      <guid isPermaLink="false">http://posterous.weedo.fr/la-creation-dun-site-web-pour-les-non-develop</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Pour créer un site web en quelques minutes avec 0€ et sans compétence technique, vous pouvez choisir l'une de ces plateformes, qui s'adressent notamment aux non développeurs :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Orienté site web &amp;ldquo;statique&amp;rdquo;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://weebly.com/"&gt;http://weebly.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://orbs.com/"&gt;http://orbs.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://sites.google.com/"&gt;http://sites.google.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://roxer.com/"&gt;http://roxer.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Orienté blog :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://posterous.com/"&gt;http://posterous.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tumblr.com/"&gt;http://tumblr.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogger.com/"&gt;http://blogger.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://twitter.com/"&gt;http://twitter.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Maj : &lt;a href="http://flavors.me/"&gt;Flavors.me&lt;/a&gt; est probablement la meilleur solution. En tout cas, c'est celle que j'ai utilisé pour mon site.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Conclusion : Ne dérangez les agences web que pour des sites à valeur ajoutée et que vous ne pouvez pas faire vous-mêmes :)&lt;/p&gt;

&lt;p&gt;Vos retours d'expériences dans les commentaires de ce post sont les bienvenus.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://posterous.weedo.fr/la-creation-dun-site-web-pour-les-non-develop"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://posterous.weedo.fr/la-creation-dun-site-web-pour-les-non-develop#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RBbWlWFR4yHFBPFAaDAM56x5wVg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RBbWlWFR4yHFBPFAaDAM56x5wVg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RBbWlWFR4yHFBPFAaDAM56x5wVg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RBbWlWFR4yHFBPFAaDAM56x5wVg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/weedo-technoblog/~4/OPi1wrRctkA" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/212993/karim-cassam-chenai-profil-posterous.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36K9ZbJ24NnH</posterous:profileUrl>
        <posterous:firstName>ka</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>weedo</posterous:nickName>
        <posterous:displayName>ka</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://posterous.weedo.fr/la-creation-dun-site-web-pour-les-non-develop</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 17 Mar 2011 07:07:08 -0700</pubDate>
      <title>Où placer le code javascript dans une page html ?</title>
      <link>http://feedproxy.google.com/~r/weedo-technoblog/~3/xyQRSpHcDyE/ou-placer-le-code-javascript-dans-une-page-ht</link>
      <guid isPermaLink="false">http://posterous.weedo.fr/ou-placer-le-code-javascript-dans-une-page-ht</guid>
      <description>&lt;p&gt;
	&lt;p&gt;En bref, pour des questions de performance, il faut placer le code javascript le plus bas possible.&lt;/p&gt;

&lt;p&gt;Lire :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://developer.yahoo.com/performance/rules.html#js_bottom"&gt;http://developer.yahoo.com/performance/rules.html#js_bottom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/196702/where-to-place-javascript-in-a-html-file"&gt;http://stackoverflow.com/questions/196702/where-to-place-javascript-in-a-html...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/4647806/where-should-i-put-my-javascript-code"&gt;http://stackoverflow.com/questions/4647806/where-should-i-put-my-javascript-code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://stevesouders.com/blog/2010/12/06/evolution-of-script-loading/"&gt;http://stevesouders.com/blog/2010/12/06/evolution-of-script-loading/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/436411/where-is-the-best-place-to-put-script-tags-in-html-markup"&gt;http://stackoverflow.com/questions/436411/where-is-the-best-place-to-put-scri...&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://posterous.weedo.fr/ou-placer-le-code-javascript-dans-une-page-ht"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://posterous.weedo.fr/ou-placer-le-code-javascript-dans-une-page-ht#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/05vMTqqsjlFK_ct3yOFiD85srig/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/05vMTqqsjlFK_ct3yOFiD85srig/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/05vMTqqsjlFK_ct3yOFiD85srig/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/05vMTqqsjlFK_ct3yOFiD85srig/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/weedo-technoblog/~4/xyQRSpHcDyE" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/212993/karim-cassam-chenai-profil-posterous.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36K9ZbJ24NnH</posterous:profileUrl>
        <posterous:firstName>ka</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>weedo</posterous:nickName>
        <posterous:displayName>ka</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://posterous.weedo.fr/ou-placer-le-code-javascript-dans-une-page-ht</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 27 Jan 2011 03:08:00 -0800</pubDate>
      <title>Empêcher la selection d'un élément HTML</title>
      <link>http://feedproxy.google.com/~r/weedo-technoblog/~3/Z8TdwqKw0Uo/empecher-la-selection-dun-element-html</link>
      <guid isPermaLink="false">http://posterous.weedo.fr/empecher-la-selection-dun-element-html</guid>
      <description>&lt;p&gt;
	&lt;p style="padding-left: 30px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;Souvent, lorsque l'on utilise des &amp;eacute;l&amp;eacute;ments d'interface graphique venant de librairies javascript telles que jQuery UI, on peut se retrouver confront&amp;eacute; &amp;agrave; des probl&amp;egrave;mes de s&amp;eacute;lection :&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: medium;"&gt;Par exemple avec &lt;a href="http://sorgalla.com/jcarousel/"&gt;jcarousel&lt;/a&gt;, si on double-clique sur les boutons de navigation, les images sont s&amp;eacute;lectionn&amp;eacute;es,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: medium;"&gt;Lorsque l'on utilise une barre de d&amp;eacute;filement, le m&amp;ecirc;me probl&amp;egrave;me peut appara&amp;icirc;tre.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;Pour l'emp&amp;ecirc;cher, il suffit d'une simple r&amp;egrave;gle css : (ici on emp&amp;ecirc;che uniquement la s&amp;eacute;lection d'image)&lt;/span&gt;&lt;/p&gt;
&lt;blockquote class="posterous_medium_quote"&gt;img{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;user-select: none;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;-khtml-user-select: none;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;-o-user-select: none;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;user-select: none;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;-moz-user-select: -moz-none;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;-webkit-user-select: none;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;Le soucis est que les navigateurs ne se comportent pas de la m&amp;ecirc;me fa&amp;ccedil;on face &amp;agrave; la s&amp;eacute;lection par double-clic ou par d&amp;eacute;filement, et vous aurez &amp;agrave; adapter vos r&amp;egrave;gles pour interdire la s&amp;eacute;lection des &amp;eacute;l&amp;eacute;ments qui vous int&amp;eacute;ressent.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;Dans mon cas (emp&amp;ecirc;cher une s&amp;eacute;lection lors du clic sur les boutons de navigation), j'ai simplement fait :&lt;/span&gt;&lt;/p&gt;
&lt;blockquote class="posterous_medium_quote"&gt;html{&lt;br /&gt;/* safari s&amp;eacute;lectionne &amp;eacute;galement */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;-webkit-user-select: none;&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;p /&gt;img{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;user-select: none;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;-khtml-user-select: none;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;-o-user-select: none;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;user-select: none;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;-moz-user-select: -moz-none;&lt;br /&gt;}&lt;/blockquote&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&amp;agrave; cause de safari, qui s&amp;eacute;lectionnait des divs &amp;eacute;galement.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline; font-size: x-large;"&gt;Pour info :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;span style="font-size: medium;"&gt;faire un&lt;/span&gt;&lt;/p&gt;
&lt;blockquote class="posterous_short_quote"&gt;
&lt;p&gt;html{&lt;br /&gt; -moz-user-select: -moz-none;&lt;br /&gt; }&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;n'emp&amp;egrave;che pas firefox de s&amp;eacute;lectionner certaines portions de texte sur un CTRL+a&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;Le code permettant de ne rien s&amp;eacute;lectionner ( le clic droit est toujours disponible) est :&lt;/span&gt;&lt;/p&gt;
&lt;blockquote class="posterous_medium_quote"&gt;
&lt;p&gt;html{&lt;br /&gt;&amp;nbsp;&amp;nbsp; -moz-user-select: -moz-none;&lt;br /&gt;&amp;nbsp;&amp;nbsp; -khtml-user-select: none;&lt;br /&gt;&amp;nbsp;&amp;nbsp; -webkit-user-select: none;&lt;br /&gt;&amp;nbsp;&amp;nbsp; -o-user-select: none;&lt;br /&gt;&amp;nbsp;&amp;nbsp; user-select: none;&lt;br /&gt;}&lt;p /&gt;&lt;br /&gt;::selection { background: transparent;color:inherit; }&lt;br /&gt;::-moz-selection { background: transparent;color:inherit; }&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;Le deuxi&amp;egrave;me bloc est surtout destin&amp;eacute; &amp;agrave; FF, mais il reste un point g&amp;ecirc;nant :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;Certains morceaux de texte peuvent encore &amp;ecirc;tre s&amp;eacute;lectionn&amp;eacute;s, m&amp;ecirc;me si &amp;ccedil;a ne se voit pas, et lorsque vous cliquez dans la barre d'URL, le background des zones s&amp;eacute;lectionn&amp;eacute;es devient gris.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;D'apr&amp;egrave;s mes recherches, il s'agit d'une propri&amp;eacute;t&amp;eacute; client, mais si vous savez comment r&amp;eacute;soudre ce probl&amp;egrave;me, &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;n'h&amp;eacute;sitez pas &amp;agrave; partager !&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://posterous.weedo.fr/empecher-la-selection-dun-element-html"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://posterous.weedo.fr/empecher-la-selection-dun-element-html#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/oNu5IqjkeRBJAj1gdWVWrHpO0Ok/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oNu5IqjkeRBJAj1gdWVWrHpO0Ok/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/oNu5IqjkeRBJAj1gdWVWrHpO0Ok/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oNu5IqjkeRBJAj1gdWVWrHpO0Ok/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/weedo-technoblog/~4/Z8TdwqKw0Uo" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1185435/n607095630_722399_25322.jpg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/1l1m42slOKnn</posterous:profileUrl>
        <posterous:firstName>Stevan</posterous:firstName>
        <posterous:lastName>Gaillard</posterous:lastName>
        <posterous:nickName>Stevan</posterous:nickName>
        <posterous:displayName>Stevan Gaillard</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://posterous.weedo.fr/empecher-la-selection-dun-element-html</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 04 Jan 2011 04:03:00 -0800</pubDate>
      <title>How to auto-check people with svn using svn+ssh</title>
      <link>http://feedproxy.google.com/~r/weedo-technoblog/~3/cofJ6w4gYD8/how-to-auto-check-people-with-svn-using-svnss</link>
      <guid isPermaLink="false">http://posterous.weedo.fr/how-to-auto-check-people-with-svn-using-svnss</guid>
      <description>&lt;p&gt;
	&lt;p&gt;It can be interesting to have his author name attributed by the svn server (particularly when using the same login to connect on the svn server over ssh). This post will show you how that can be done.&lt;/p&gt;

&lt;p&gt;This tutorial has been made and used to configure a multi-user svn environment on a OVH shared host (hébergement mutualisé).&lt;br /&gt;
The source guide is available here : &lt;a href="http://help.ovh.co.uk/SVNMutu"&gt;http://help.ovh.co.uk/SVNMutu&lt;/a&gt; (in english) and here : &lt;a href="http://guides.ovh.com/SVNMutu"&gt;http://guides.ovh.com/SVNMutu&lt;/a&gt; (in french). We push things a bit forward as we explain how to have access both by svn+ssh and by ssh and we resolve a common problem described here : &lt;a href="http://forum.ovh.com/showthread.php?t=48610."&gt;http://forum.ovh.com/showthread.php?t=48610.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We simplify a bit this tutorial by not using ssh config file, but we&amp;rsquo;ll try to use ssh config files in another version. If you want more information on ssh config file, type &lt;code&gt;man ssh_config&lt;/code&gt; in you terminal or google it.&lt;/p&gt;

&lt;p&gt;As always, feedbacks/comments appreciated.&lt;/p&gt;

&lt;p&gt;Let&amp;rsquo;s go !&lt;/p&gt;

&lt;h3&gt;1) Generating 2 rsa private/public key&lt;/h3&gt;

&lt;p&gt;Before configuring server, we need to generate 2 rsa private/public key, one for ssh protocol and one for ssh+svn protocol.&lt;/p&gt;

&lt;p&gt;To do so, do the following on your computer terminal.&lt;/p&gt;

&lt;p&gt;We generate :
* a rsa key with the default name (id_rsa) to use it for ssh+svn protocol.
* a rsa key with another name (id_rsa_hostname for example) to use it for ssh protocol. This second key is optional but recommended.&lt;/p&gt;

&lt;p&gt;So you&amp;rsquo;ll have to do that twice :&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;prompt$ ssh-keygen -t rsa&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Terminal will answer:&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;You can enter a new filepath if you want to store the key to another location or with an other name. We suggest having a different key for each host you connect to and giving a meaningful name to your file. Example : &lt;code&gt;/home/user/.ssh/id_rsa_server_name&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Enter passphrase (empty for no passphrase):
Enter same passphrase again:&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;Your identification has been saved /home/user/.ssh/in id_rsa_server_name.
Your public key has been saved in id_rsa_server_name.pub.
The key fingerprint is:
5e:13:8c:62:f7:45:12:4g:x6:fd:67:r5:68:s5:78:k4 user@computername
The key's randomart image is:
+--[ RSA 2048]----+
|  . =..+D o      |
|   . .*=o*       |
|  . L . .+. .    |
|   *  .o.+.o     |
|        X .o     |
|          .      |
|                 |
|                 |
|                 |
+-----------------+&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;2) Copy public key files to server&lt;/h3&gt;

&lt;p&gt;To configure the server you will need the public key you generated previously, so copy it from local to server. To do that you can use &lt;code&gt;scp&lt;/code&gt;.&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;prompt$ scp path_to_public_key_file login_for_server@server_name:path_you_want_to_copy_file&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;3) Connection to server hosting svn&lt;/h3&gt;

&lt;p&gt;Launch a terminal and connect to server like that:&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;prompt$ ssh yourlogin@yourserver&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;You should find the public key files you copy before in the path you specified to &lt;code&gt;scp&lt;/code&gt; command.&lt;/p&gt;

&lt;h3&gt;4) Configuring server&lt;/h3&gt;

&lt;p&gt;First go into folder &lt;code&gt;.ssh&lt;/code&gt; located in your home path or create it if not exist.&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;yourlogin@yourserver# cd .ssh&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;In the folder, open file &lt;code&gt;authorized_keys2&lt;/code&gt; with an editor (&lt;code&gt;emacs&lt;/code&gt;, &lt;code&gt;nano&lt;/code&gt;, &lt;code&gt;vi&lt;/code&gt;, &lt;code&gt;ee&lt;/code&gt;).
Add the following sentence at the end, replace &lt;code&gt;svnserve_bin_path&lt;/code&gt; by the path to svnserve binary (&lt;code&gt;/usr/bin/svnserve&lt;/code&gt; ?), &lt;code&gt;home_path&lt;/code&gt; by your home path (&lt;code&gt;/homez.XXX/yourlogin&lt;/code&gt; ?), &lt;code&gt;root_path&lt;/code&gt; by the path you want to be the root for the ssh connection, login_you_want by the login you want svn server attributes to you.&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;command=&amp;quot;svnserve_bin_path --root=home_path/root_path --tunnel --tunnel-user=login_you_want&amp;quot;,no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;After that add the public key to the same line, you can type this command.&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;yourlogin@yourserver# cat path_to_public_key_with_default_name &amp;gt;&amp;gt; authorized_keys2&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Check that the public key has been inserted on the same line with a space as separator that what you added previously to the file.&lt;/p&gt;

&lt;p&gt;For the other public key (the one with the non default name, just copy it on a new line :&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;yourlogin@yourserver# cat path_to_public_key_2 &amp;gt;&amp;gt; authorized_keys2&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;5) Errors when connecting with command &lt;code&gt;ssh&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Now that you configured the server to attribute author name to one person using svn, if you try to connect to the server over normal &lt;code&gt;ssh&lt;/code&gt; connection, you will encounter problems.&lt;/p&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;PTY allocation request failed on channel 0
( success ( 1 2 ( ANONYMOUS EXTERNAL ) ( edit-pipeline svndiff1 absent-entries ) ) ) Connection to yourserver closed.&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If you did not make rsa key :
To avoid this error, just launch &lt;code&gt;ssh&lt;/code&gt; command with -i with an other identifying file path or nothing.
  ssh -i . yourlogin@yourserver
The password will be asked.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you made a rsa key :
  ssh -i path_to_private_key_2 yourlogin@yourserver
The password won&amp;rsquo;t be asked.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;6) Multi-user&lt;/h3&gt;

&lt;p&gt;To auto-attribute author name for other people, repeat this operation.
Only one author name can be attributed for the same public key.&lt;/p&gt;

&lt;h3&gt;7) Multiple repositories&lt;/h3&gt;

&lt;p&gt;You can manage repositories for multiple projects on the same shared host. We ourselves manage 2 multi-users projects on the same shared host.&lt;/p&gt;

&lt;h3&gt;8) Test&lt;/h3&gt;

&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;svn checkout svn+ssh://yourlogin@yourserver/repository_folder&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;(You must not mention here the full path (home_path/root_path), because it is taken from the command parameters in the authorized_keys file.)&lt;/p&gt;

&lt;h3&gt;9) Other information resources&lt;/h3&gt;

&lt;p&gt;in french : &lt;a href="http://doc.fedora-fr.org/wiki/SSH"&gt;http://doc.fedora-fr.org/wiki/SSH&lt;/a&gt;&lt;em&gt;:&lt;/em&gt;Authentification_par_cl%C3%A9
in english : &lt;a href="http://www.debuntu.org/ssh-key-based-authentication"&gt;http://www.debuntu.org/ssh-key-based-authentication&lt;/a&gt;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://posterous.weedo.fr/how-to-auto-check-people-with-svn-using-svnss"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://posterous.weedo.fr/how-to-auto-check-people-with-svn-using-svnss#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1f3v3aCnaEm9Lbq2sCF1c5pVhC4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1f3v3aCnaEm9Lbq2sCF1c5pVhC4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1f3v3aCnaEm9Lbq2sCF1c5pVhC4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1f3v3aCnaEm9Lbq2sCF1c5pVhC4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/weedo-technoblog/~4/cofJ6w4gYD8" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://posterous.com/images/profile/missing-user-75.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/YC7vHbhXH9L</posterous:profileUrl>
        <posterous:firstName />
        <posterous:lastName />
        <posterous:nickName>fix</posterous:nickName>
        <posterous:displayName>fix</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://posterous.weedo.fr/how-to-auto-check-people-with-svn-using-svnss</feedburner:origLink></item>
  </channel>
</rss>

