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

<channel>
	<title>Guillaume Moigneu</title>
	<atom:link href="http://guillaume.moigneu.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://guillaume.moigneu.net</link>
	<description>Pérégrinations d'un consultant IT dans le monde du web</description>
	<pubDate>Sat, 25 Apr 2009 07:53:13 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>[Symfony] Générer les fixtures à partir de la DB</title>
		<link>http://guillaume.moigneu.net/2009/04/symfony-generer-les-fixtures-a-partir-de-la-db/</link>
		<comments>http://guillaume.moigneu.net/2009/04/symfony-generer-les-fixtures-a-partir-de-la-db/#comments</comments>
		<pubDate>Sat, 25 Apr 2009 07:53:13 +0000</pubDate>
		<dc:creator>Guillaume Moigneu</dc:creator>
		
		<category><![CDATA[Articles]]></category>

		<category><![CDATA[data-dump]]></category>

		<category><![CDATA[dump]]></category>

		<category><![CDATA[fixtures]]></category>

		<category><![CDATA[propel]]></category>

		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://guillaume.moigneu.net/?p=22</guid>
		<description><![CDATA[J'ai toujours eu l'habitude de créer mex fixtures propremement à la main mais il peut arriver que vous souhaitiez cependant extraire le contenu actuel de la base pour générer un fichier de fixtures complet.]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai toujours eu l&#8217;habitude de créer mex fixtures propremement à la main mais il peut arriver que vous souhaitiez cependant extraire le contenu actuel de la base pour générer un fichier de fixtures complet. Cela peut être utile si vous avez besoin de plusieurs jeux de données ou si des enregistrements ont été rajoutés par l&#8217;application (cron, logs d&#8217;utilisation, etc.).</p>
<p>Pour cela, l&#8217;utilitaire symfony met à votre disposition la commande <strong>propel:data-dump</strong>. En ligne de commande :</p>
<p>symfony propel:data-dump &gt; data/fixtures/fixtures.yml</p>
<p>Cette commande exporte tout le contenu de la base de données vers un fichier de fixtures qui sera automatiquement rechargé au prochain load. Si toute fois vous souhaitez n&#8217;exporter qu&#8217;un ou plusieurs modèles, vous pouvez les préciser en paramètres :</p>
<p>symfony propel:data-dump &#8211;classes=&#8221;BlogPost,BlogComment&#8221; frontend  &gt; data/fixtures/blog.yml</p>
<p>Petit rappel pour charger les fixtures :</p>
<p>symfony propel:data-load &amp;&amp; symfony cc</p>
<p class="fbconnect_share"><fb:share-button class="url" href="http://guillaume.moigneu.net/2009/04/symfony-generer-les-fixtures-a-partir-de-la-db/" /></p>]]></content:encoded>
			<wfw:commentRss>http://guillaume.moigneu.net/2009/04/symfony-generer-les-fixtures-a-partir-de-la-db/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ajouter des onglets (tabs) à Putty !</title>
		<link>http://guillaume.moigneu.net/2009/04/ajouter-des-onglets-tabs-a-putty/</link>
		<comments>http://guillaume.moigneu.net/2009/04/ajouter-des-onglets-tabs-a-putty/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 06:11:54 +0000</pubDate>
		<dc:creator>Guillaume Moigneu</dc:creator>
		
		<category><![CDATA[Articles]]></category>

		<category><![CDATA[putty]]></category>

		<category><![CDATA[puttycm]]></category>

		<category><![CDATA[ssh]]></category>

		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://guillaume.moigneu.net/?p=19</guid>
		<description><![CDATA[Développant principalement sur Mac, il m&#8217;arrive cependant de travailler sur PC (malheureusement). Dans ces durs moments, il est toujours nécessaire d&#8217;avoir un client SSH sous la main que ce soit pour utiliser le générateur de Symfony ou pour administrer des serveurs d&#8217;hébergement. Pour cela, j&#8217;utilise comme 90% des gens le logiciel Putty qui, il est [...]]]></description>
			<content:encoded><![CDATA[<p>Développant principalement sur Mac, il m&#8217;arrive cependant de travailler sur PC (malheureusement). Dans ces durs moments, il est toujours nécessaire d&#8217;avoir un client SSH sous la main que ce soit pour utiliser le générateur de Symfony ou pour administrer des serveurs d&#8217;hébergement. Pour cela, j&#8217;utilise comme 90% des gens le logiciel <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/" target="_blank">Putty</a> qui, il est vrai, remplit parfaitement sa mission.<span id="more-19"></span></p>
<p>Il devient cependant difficile d&#8217;utiliser plusieurs sessions de Putty simultanément et ce n&#8217;est pas rare que je me retrouve avec 5 ou 6 fois le logiciel de lancé. Et c&#8217;est là que <a href="http://puttycm.free.fr" target="_blank">Putty Connection Manager</a> intervient.</p>
<p>PuttyCM permet de lancer plusieurs instances de Putty et des les organiser au sein d&#8217;une interface commune.</p>
<p><em>&#8220;the approach we&#8217;d prefer is a separate application that can swallow instances of PuTTY and provide the tabbing interface&#8221;</em> (PuTTY&#8217;s team)</p>
<p>Un petit bijou à installer de suite : <a href="http://puttycm.free.fr/" target="_blank">http://puttycm.free.fr/</a></p>
<p><a href="http://puttycm.free.fr/" target="_blank"></a><a href="http://puttycm.free.fr/images/puttycm.JPG"><img class="aligncenter size-full wp-image-20" title="puttycm_small" src="http://guillaume.moigneu.net/wp-content/uploads/2009/04/puttycm_small.jpg" alt="puttycm_small" width="450" height="314" /></a></p>
<p class="fbconnect_share"><fb:share-button class="url" href="http://guillaume.moigneu.net/2009/04/ajouter-des-onglets-tabs-a-putty/" /></p>]]></content:encoded>
			<wfw:commentRss>http://guillaume.moigneu.net/2009/04/ajouter-des-onglets-tabs-a-putty/feed/</wfw:commentRss>
		</item>
		<item>
		<title>[Symfony] Créer et utiliser un fichier de log</title>
		<link>http://guillaume.moigneu.net/2009/04/symfony-creer-et-utiliser-un-fichier-de-log/</link>
		<comments>http://guillaume.moigneu.net/2009/04/symfony-creer-et-utiliser-un-fichier-de-log/#comments</comments>
		<pubDate>Sun, 19 Apr 2009 21:25:10 +0000</pubDate>
		<dc:creator>Guillaume Moigneu</dc:creator>
		
		<category><![CDATA[Articles]]></category>

		<category><![CDATA[log]]></category>

		<category><![CDATA[logger]]></category>

		<category><![CDATA[sfFileLogger]]></category>

		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://guillaume.moigneu.net/?p=17</guid>
		<description><![CDATA[Il vous est sans doute déjà arriver de vouloir écrire un fichier de log bien à vous dans votre application sans vouloir forcément passer par les fichiers existants du frameworks. Les développeurs de Symfony ont pensez à vous et vous proposent l'utilisation de la classe sfFileLogger. Voici un exemple.]]></description>
			<content:encoded><![CDATA[<p>/!\ Ce code est utilisable à partie de Symfony 1.1 et est compatible 1.2 /!\</p>
<p>Il vous est sans doute déjà arriver de vouloir écrire un fichier de log bien à vous dans votre application sans vouloir forcément passer par les fichiers existants du frameworks. Les développeurs de Symfony ont pensez à vous et vous proposent l&#8217;utilisation de la classe sfFileLogger. Pour cela, rien de plus simple, ajoutez dans votre code :</p>
<p>$logger = new sfFileLogger(sfContext::getInstance()-&gt;getEventDispatcher(), array(&#8217;file&#8217;=&gt; dirname(__FILE__).&#8217;/../log/testlog.log&#8217;));</p>
<p>Vous pouvez ensuite utiliser l&#8217;objet $logger comme bon vous semble pour y ajouter des lignes :</p>
<p>$logger-&gt;log(&#8221;[".date('Y-m-d H:i:s')."] Test de Emerg&#8221;, 0);<br />
$logger-&gt;log(&#8221;[".date('Y-m-d H:i:s')."] Test de Alert&#8221;, 1);<br />
$logger-&gt;log(&#8221;[".date('Y-m-d H:i:s')."] Test de Crit&#8221;, 2);<br />
$logger-&gt;log(&#8221;[".date('Y-m-d H:i:s')."] Test de Err&#8221;, 3);<br />
$logger-&gt;log(&#8221;[".date('Y-m-d H:i:s')."] Test de Warning&#8221;, 4);<br />
$logger-&gt;log(&#8221;[".date('Y-m-d H:i:s')."] Test de Notice&#8221;, 5);<br />
$logger-&gt;log(&#8221;[".date('Y-m-d H:i:s')."] Test de Info&#8221;, 6);</p>
<p>Le code ci-dessus crée les lignes suivantes dans le fichier log/testlog.log :</p>
<p>niels@devbox:/var/www/roidusexe/dev$ cat log/testlog.log<br />
Apr 14 03:17:42 symfony [emerg] [2009-04-14 03:17:42] Test de Emerg<br />
Apr 14 03:17:42 symfony [alert] [2009-04-14 03:17:42] Test de Alert<br />
Apr 14 03:17:42 symfony [crit] [2009-04-14 03:17:42] Test de Crit<br />
Apr 14 03:17:42 symfony [err] [2009-04-14 03:17:42] Test de Err<br />
Apr 14 03:17:42 symfony [warning] [2009-04-14 03:17:42] Test de Warning<br />
Apr 14 03:17:42 symfony [notice] [2009-04-14 03:17:42] Test de Notice<br />
Apr 14 03:17:42 symfony [info] [2009-04-14 03:17:42] Test de Info</p>
<p>Comme vous pouvez le voir, le deuxième paramètre de la méthode log() correspond au level de la ligne :</p>
<ol>
<li>Emarg</li>
<li>Alert</li>
<li>Crit</li>
<li>Err</li>
<li>Warning</li>
<li>Notice</li>
</ol>
<p class="fbconnect_share"><fb:share-button class="url" href="http://guillaume.moigneu.net/2009/04/symfony-creer-et-utiliser-un-fichier-de-log/" /></p>]]></content:encoded>
			<wfw:commentRss>http://guillaume.moigneu.net/2009/04/symfony-creer-et-utiliser-un-fichier-de-log/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Comment bloquer les alertes w00tw00t.at.ISC.SANS</title>
		<link>http://guillaume.moigneu.net/2009/04/comment-bloquer-les-alertes-w00tw00tatiscsans/</link>
		<comments>http://guillaume.moigneu.net/2009/04/comment-bloquer-les-alertes-w00tw00tatiscsans/#comments</comments>
		<pubDate>Sun, 19 Apr 2009 21:11:24 +0000</pubDate>
		<dc:creator>Guillaume Moigneu</dc:creator>
		
		<category><![CDATA[Articles]]></category>

		<category><![CDATA[apache2]]></category>

		<category><![CDATA[dfind]]></category>

		<category><![CDATA[iptables]]></category>

		<category><![CDATA[w00t]]></category>

		<guid isPermaLink="false">http://guillaume.moigneu.net/?p=14</guid>
		<description><![CDATA[Si vous êtes administrateur d'un ou plusieurs serveurs web, vous avez sans doute déjà croiser ces messages qui semblent assez désagréables dans vos logs : w00tw00t.at.ISC.SANS.DFind. Voici comment les bloquer !]]></description>
			<content:encoded><![CDATA[<p>Si vous êtes administrateur d&#8217;un ou plusieurs serveurs web, vous avez sans doute déjà croiser ces messages qui semblent assez désagréables dans vos logs (exemple avec Apache2) :</p>
<p>[Sun Apr 19 06:40:36 2009] [error] [client 85.25.17.43] client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind</p>
<p>Ces requêtes proviennent d&#8217;un scanner de failles nommé DFind. Pour les bloquer rien de plus simple. Ajoutez une règle de blocage à <strong>iptables</strong> :</p>
<p>iptables -I INPUT -d 94.23.12.185 -p tcp &#8211;dport 80 -m string &#8211;to 70 &#8211;algo bm &#8211;string &#8216;GET /w00tw00t.at.ISC.SANS.&#8217; -j DROP</p>
<p>Toutes ces requêtes seront bloquées ce qui pourrait ampêcher la détection d&#8217;une faille sur votre serveur web.</p>
<p class="fbconnect_share"><fb:share-button class="url" href="http://guillaume.moigneu.net/2009/04/comment-bloquer-les-alertes-w00tw00tatiscsans/" /></p>]]></content:encoded>
			<wfw:commentRss>http://guillaume.moigneu.net/2009/04/comment-bloquer-les-alertes-w00tw00tatiscsans/feed/</wfw:commentRss>
		</item>
		<item>
		<title>[Symfony] L&#8217;Admin Generator et les jointures</title>
		<link>http://guillaume.moigneu.net/2009/04/symfony-ladmin-generator-et-les-jointures/</link>
		<comments>http://guillaume.moigneu.net/2009/04/symfony-ladmin-generator-et-les-jointures/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 07:09:22 +0000</pubDate>
		<dc:creator>Guillaume Moigneu</dc:creator>
		
		<category><![CDATA[Articles]]></category>

		<category><![CDATA[admin generator]]></category>

		<category><![CDATA[join]]></category>

		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://guillaume.moigneu.net/?p=9</guid>
		<description><![CDATA[Etant en cours de réalisation de plusieurs projets PHP avec le framework Symfony, je tenais à vous partager les astuces et les bonnes pratiques de ce framework.
Nous commençons donc par le générateur d&#8217;administration (admin generator) et son option peer_method.
Imaginons le schéma de données suivant :
sponsor:
id:             ~
name:           { type: varchar(255), required: true, index: unique }
url:            { [...]]]></description>
			<content:encoded><![CDATA[<p>Etant en cours de réalisation de plusieurs projets PHP avec le framework <a title="Symfony Project" href="http://www.symfony-project.org/" target="_blank">Symfony</a>, je tenais à vous partager les astuces et les bonnes pratiques de ce framework.</p>
<p>Nous commençons donc par le <strong>générateur d&#8217;administration</strong> (admin generator) et son option <strong>peer_method</strong>.<span id="more-9"></span></p>
<p>Imaginons le schéma de données suivant :</p>
<p>sponsor:<br />
id:             ~<br />
name:           { type: varchar(255), required: true, index: unique }<br />
url:            { type: varchar(255), required: true }<br />
&#8230;</p>
<p>website:<br />
id:             ~<br />
sponsor_id:     { type: integer, foreignTable: sponsor, foreignReference: id, required: true }<br />
category_id:    { type: integer, foreignTable: category, foreignReference: id, required: true }<br />
name:           { type: varchar(255), required: true, index: unique }<br />
url:            { type: varchar(255), required: true }<br />
&#8230;</p>
<p>category:<br />
id:             ~<br />
name:           { type: varchar(255), required: true, index: unique }</p>
<p>Un site (website) appartient à une catégorie et à un sponsor. Pour l&#8217;exemple, six sites sont saisis. Si l&#8217;on utilise le générateur par défaut pour afficher le module website du backend, la page provoque 17 requêtes en base.</p>
<p>Cinq sont nécessaires :</p>
<p># Définit l&#8217;encodage des caractères<br />
SET NAMES &#8216;utf8&#8242;<br />
# Compte le nombre total de sites pour la pagination<br />
SELECT COUNT(*) FROM `website`<br />
# Récupère toutes les données des sponsors (liste déroulante)<br />
SELECT sponsor.ID, sponsor.NAME, sponsor.URL, sponsor.LANGUAGE, sponsor.ACCOUNT, sponsor.PASSWORD, sponsor.TRACKING FROM `sponsor`<br />
# Récupère toutes les données des catégories (liste déroulante)<br />
SELECT category.ID, category.NAME FROM `category`<br />
# Récupère toutes les données des 20 premiers sites (tableau de résultat)<br />
SELECT website.ID, website.SPONSOR_ID, website.CATEGORY_ID, website.NAME, website.URL, website.LANGUAGE FROM `website` LIMIT 20</p>
<p>Le problème est que nous avons ensuite<strong> deux requêtes par ligne de résultats</strong> pour récupérer les données des sponsors et des catégories :</p>
<p>SELECT sponsor.ID, sponsor.NAME, sponsor.URL, sponsor.LANGUAGE, sponsor.ACCOUNT, sponsor.PASSWORD, sponsor.TRACKING FROM `sponsor` WHERE sponsor.ID=1 LIMIT 1<br />
SELECT category.ID, category.NAME FROM `category` WHERE category.ID=49 LIMIT 1</p>
<p>Ces requêtes supplémentaires peuvent être gênantes sur des sites à fort traffic ou sur une administration possédant de nombreux objets en base. On peut les réduire en réalisant une seule requête composée de jointures ce qui ramène le nombre de requêtes au total à 5:</p>
<p>SELECT website.ID, website.SPONSOR_ID, website.CATEGORY_ID, website.NAME, website.URL, website.LANGUAGE, sponsor.ID, sponsor.NAME, sponsor.URL, sponsor.LANGUAGE, sponsor.ACCOUNT, sponsor.PASSWORD, sponsor.TRACKING, category.ID, category.NAME FROM `website` LEFT JOIN sponsor ON (website.SPONSOR_ID=sponsor.ID) LEFT JOIN category ON (website.CATEGORY_ID=category.ID) LIMIT 20</p>
<p>Pour cela, il suffit dans le <em>generator.yml</em> du module <em>website</em> de rajouter :</p>
<p>list:<br />
peer_method: doSelectJoinAll</p>
<p>Pourquoi la valeur <strong>doSelectJoinAll</strong> ? Car nous souhaitons joindre toutes les tables liées au modèle website. Vous avez en effet le choix sur les jointures à réaliser. Il suffit de saisir le nom de la classe que vous souhaitez joindre (si bien sur le modèle est conscient de la relation entre ces tables). On aurait donc pu utiliser seulement : peer_method: doSelectJoinCategory ou peer_method: doSelectJoinSponsor.</p>
<p>Au niveau performances, on observe une baisse de <strong>10% sur le temps de chargement global</strong> de la page sur un environnement virtualisé en mode développement.</p>
<p class="fbconnect_share"><fb:share-button class="url" href="http://guillaume.moigneu.net/2009/04/symfony-ladmin-generator-et-les-jointures/" /></p>]]></content:encoded>
			<wfw:commentRss>http://guillaume.moigneu.net/2009/04/symfony-ladmin-generator-et-les-jointures/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Le domaine Wat.tv non renouvelé</title>
		<link>http://guillaume.moigneu.net/2009/04/le-domaine-wattv-non-renouvele/</link>
		<comments>http://guillaume.moigneu.net/2009/04/le-domaine-wattv-non-renouvele/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 08:29:03 +0000</pubDate>
		<dc:creator>Guillaume Moigneu</dc:creator>
		
		<category><![CDATA[Articles]]></category>

		<category><![CDATA[wat.tv]]></category>

		<guid isPermaLink="false">http://guillaume.moigneu.net/?p=3</guid>
		<description><![CDATA[Depuis hier après-midi, le nom de domaine wat.tv, propriété de TF1, est en parking.

Comment un projet de cette envergure peut échouer sur quelque chose d&#8217;aussi bête, surtout quand on voit le prix d&#8217;un domaine à l&#8217;année !
Je plains le chef de projet qui risque de se retrouver à la porte pour faute grave. Messieurs il [...]]]></description>
			<content:encoded><![CDATA[<p>Depuis hier après-midi, le nom de domaine <a href="http://www.wat.tv" target="_blank">wat.tv</a>, propriété de TF1, est en parking.</p>
<p><a><img class="aligncenter size-full wp-image-6" title="wattv" src="http://guillaume.moigneu.net/wp-content/uploads/2009/04/wattv.jpg" alt="wattv" width="300" height="206" /></a></p>
<p>Comment un projet de cette envergure peut échouer sur quelque chose d&#8217;aussi bête, surtout quand on voit le prix d&#8217;un domaine à l&#8217;année !</p>
<p>Je plains le chef de projet qui risque de se retrouver à la porte pour faute grave. Messieurs il ne vous reste plus qu&#8217;à enlever tous les embed wat.tv que vous aviez sur vos sites.</p>
<p class="fbconnect_share"><fb:share-button class="url" href="http://guillaume.moigneu.net/2009/04/le-domaine-wattv-non-renouvele/" /></p>]]></content:encoded>
			<wfw:commentRss>http://guillaume.moigneu.net/2009/04/le-domaine-wattv-non-renouvele/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
