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

<channel>
	<title>Blog d'un développeur multi-support</title>
	<atom:link href="http://www.oni-ecchi.info/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://www.oni-ecchi.info/blog</link>
	<description>[DIM] pour les intimes :)</description>
	<lastBuildDate>Sun, 14 Feb 2010 16:01:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Iphone &amp; UITableView &amp; UISearchBar</title>
		<link>http://www.oni-ecchi.info/blog/iphone/iphone-uitableview-uisearchbar.html</link>
		<comments>http://www.oni-ecchi.info/blog/iphone/iphone-uitableview-uisearchbar.html#comments</comments>
		<pubDate>Sun, 14 Feb 2010 10:50:44 +0000</pubDate>
		<dc:creator>Guillaume chave</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[astuce]]></category>
		<category><![CDATA[découverte]]></category>
		<category><![CDATA[objective c]]></category>
		<category><![CDATA[tutoriel]]></category>
		<category><![CDATA[UISearchBar]]></category>

		<guid isPermaLink="false">http://www.oni-ecchi.info/blog/?p=514</guid>
		<description><![CDATA[Bonjour, je recommence à développer sur iphone après quelques mois  d&#8217;arrêt, j&#8217;en profite aussi pour tester l&#8217;Ipad (sur simulateur :p).
Cette  semaine j&#8217;ai cherché à faire fonctionner une UISearchBar avec le  controller qui va bien et j&#8217;ai eu quelque souci. Si techniquement c&#8217;est  assez simple à mettre en place, graphiquement j&#8217;ai eu [...]]]></description>
			<content:encoded><![CDATA[<p>Bonjour, je recommence à développer sur iphone après quelques mois  d&#8217;arrêt, j&#8217;en profite aussi pour tester l&#8217;Ipad (sur simulateur :p).</p>
<p>Cette  semaine j&#8217;ai cherché à faire fonctionner une UISearchBar avec le  controller qui va bien et j&#8217;ai eu quelque souci. Si techniquement c&#8217;est  assez simple à mettre en place, graphiquement j&#8217;ai eu quelque souci.</p>
<h3>Mon architecture :</h3>
<p>Mon application a une UITabBar, puis sur une des sous vue j&#8217;ai une  liste de résultat avec la SearchBar. Cet écran n&#8217;est pas  directement  une UITableView, c&#8217;est un navigation controller qui contient une UITableView.</p>
<p><img src="http://www.oni-ecchi.info/blog/wp-content/uploads/2010/02/Capture-decran-2010-02-14-à-09.15.34.png" alt="Mon archi" border="0" width="480" height="128" /></p>
<p>Ma UITableView est crée directement en code et est à hauteur fixe, et mes cellules ont une hauteur de 60:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p514code4'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p5144"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code" id="p514code4"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>viewDidLoad <span style="color: #009900;">&#123;</span>  
	CGRect frame <span style="color: #339933;">=</span> CGRectMake<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">75</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">320</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">262</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">// Initialise une table view.</span>
	myTableView <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>UITableView alloc<span style="color: #009900;">&#93;</span> initWithFrame<span style="color: #339933;">:</span>frame<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	myTableView.<span style="color: #202020;">rowHeight</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">60</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Ajout la tableView à l'écran et autres par la suite</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h4> Mes soucis </h4>
<p>﻿Les soucis viennent quand j&#8217;utilise la barre de recherche:</p>
<ul>
<li>
		Les cellules sont bien réutilisées mais la hauteur est celle par défaut du coup tout mes items sont mal 		placés. Joli bug graphique.
	</li>
<li>
		Mes résultats sont bien filtrés, mais il est impossible de scroller. La liste revient toujours en haut. Comme si ma liste avait une hauteur tellement grande que le scroll était inefficace.
	</li>
</ul>
<h4> Solutions</h4>
<p>Bon, j&#8217;en suis pas vraiment fier, ça tient plus de hooks qu&#8217;autres choses mais ça a le mérite de marcher et ça n&#8217;a pas l&#8217;air trop lourd en terme de performance sur mon 3GS.</p>
<p>En fait c&#8217;est simple, à chaque fois il faut refixer les hauteurs au moment oppertun.</p>
<ul>
<li> Pour les cellules, c&#8217;est à leur initialisation :

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p514code5'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p5145"><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p514code5"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span>CGFloat<span style="color: #009900;">&#41;</span> tableView<span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span>UITableView <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span> tableView heightForRowAtIndexPath<span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span>NSIndexPath <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span> indexPath
<span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #0000dd;">60</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

</li>
<li>
		Pour la liste, c&#8217;est quand on lance une recherche :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p514code6'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p5146"><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code" id="p514code6"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>filterContentForSearchText<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSString<span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>searchText scope<span style="color: #339933;">:</span><span style="color: #009900;">&#40;</span>NSString<span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>scope
<span style="color: #009900;">&#123;</span>
	CGRect frame <span style="color: #339933;">=</span> CGRectMake<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">75</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">320</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">262</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#91;</span>self searchDisplayController<span style="color: #009900;">&#93;</span> searchResultsTableView<span style="color: #009900;">&#93;</span> setFrame<span style="color: #339933;">:</span>frame<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// faire sa recherche ensuite</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

</li>
</ul>
<p>Donc en terme de performance y doit y avoir moyen de fixer ses tailles une fois pour toute mais je n&#8217;ai pas trouvé comment. Si quelqu&#8217;un a la solution je suis preneur.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oni-ecchi.info/blog/iphone/iphone-uitableview-uisearchbar.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symfony &amp; Doctrine &amp; schema.yml</title>
		<link>http://www.oni-ecchi.info/blog/decouverte-php/symfony-doctrine-schema-yml.html</link>
		<comments>http://www.oni-ecchi.info/blog/decouverte-php/symfony-doctrine-schema-yml.html#comments</comments>
		<pubDate>Mon, 01 Feb 2010 19:00:35 +0000</pubDate>
		<dc:creator>Guillaume chave</dc:creator>
				<category><![CDATA[Découverte PHP]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[astuce]]></category>
		<category><![CDATA[découverte]]></category>

		<guid isPermaLink="false">http://www.oni-ecchi.info/blog/?p=504</guid>
		<description><![CDATA[J&#8217;espère que vous utilisé Doctrine car ce mini article pourrait vous plaire ! Quand vous débutez un projet, la partie conception BDD et création du fichier yml prennent du temps et on aimerait pouvoir faire tout d&#8217;un coup.
Personnellement je fais ma conception sur Workbench puis je repart &#171;&#160;from scratch&#160;&#187; pour faire mon (mes) fichier(s) yml. [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;espère que vous utilisé Doctrine car ce mini article pourrait vous plaire ! Quand vous débutez un projet, la partie conception BDD et création du fichier yml prennent du temps et on aimerait pouvoir faire tout d&#8217;un coup.</p>
<p>Personnellement je fais ma conception sur Workbench puis je repart &laquo;&nbsp;from scratch&nbsp;&raquo; pour faire mon (mes) fichier(s) yml. (Oui oui on peut en avoir plusieurs de yml :p). </p>
<p>Quand j&#8217;étais sur Propel J&#8217;avais perdu quelque cheveux quand j&#8217;avais essayé l&#8217;autre méthode (cad de générer le fichier SQL, l&#8217;insérer en base, et laisser faire symfony pour du reverse engineirng). Le souci du reverse c&#8217;est que ça produisait trop de code inutile (sur les foreign key par exemple) et au final repasser derrière pour arranger le model m&#8217;avait fait perdre pas mal de temps.</p>
<p>Hors ce soir j&#8217;ai trouvé, je ne sais comment, un plugin pour Workbench pour écrire  le fichier yml directement à partir de celui ci, adieu les étapes &laquo;&nbsp;insertion bdd, reverse&nbsp;&raquo;. Et en plus sur les (mini) tests que j&#8217;ai fait tout à l&#8217;air propre, les conventions doctrines sont respectés, tout est bien indiqué. Il suffit de suivre la marche à suivre suivante : <a href="http://code.google.com/p/mysql-workbench-doctrine-plugin/wiki/WorkbenchPreparationForDoctrinePlugin">http://code.google.com/p/mysql-workbench-doctrine-plugin/wiki/WorkbenchPreparationForDoctrinePlugin</a></p>
<p>Bref, en un mot c&#8217;est bon plugin Workbench bien utile :p</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oni-ecchi.info/blog/decouverte-php/symfony-doctrine-schema-yml.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Iphone &amp; C#, drole de mariage</title>
		<link>http://www.oni-ecchi.info/blog/iphone/iphone-c-drole-de-mariage.html</link>
		<comments>http://www.oni-ecchi.info/blog/iphone/iphone-c-drole-de-mariage.html#comments</comments>
		<pubDate>Sun, 31 Jan 2010 08:22:12 +0000</pubDate>
		<dc:creator>Guillaume chave</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[découverte]]></category>

		<guid isPermaLink="false">http://www.oni-ecchi.info/blog/?p=508</guid>
		<description><![CDATA[Aujourd&#8217;hui je suis tombé sur l&#8217;article de PC Inpact comme quoi une société propose un kit de développement (SDK) pour développer en C# des application native iphone, son nom MonoTouch
De ce que j&#8217;ai compris, il faut quand même un mac, on code toujours sur Xcode, mais au lieu d&#8217;apprendre l&#8217;objective-c on le fait en C#. [...]]]></description>
			<content:encoded><![CDATA[<p>Aujourd&#8217;hui je suis tombé sur l&#8217;article de <a href="http://www.pcinpact.com/actu/news/53020-apple-iphone-mono-novell-xcode.htm">PC Inpact</a> comme quoi une société propose un kit de développement (SDK) pour développer en C# des application native iphone, son nom <a href="http://monotouch.net/">MonoTouch</a></p>
<p>De ce que j&#8217;ai compris, <strong>il faut quand même un mac</strong>, on code <strong>toujours sur Xcode</strong>, mais au lieu d&#8217;apprendre l&#8217;objective-c on le fait en C#. On utilise toujours Interface builder, on a toujours besoin d&#8217;une licence Apple&#8230; bref c&#8217;est tout pareil, sauf qu&#8217;on<strong> change de langage de programmation.</strong></p>
<p>Je viens de regarder un tutoriel <a href="http://monotouch.net/">monotouch</a> pour créer un lecteur de flux RSS (quasi un des premier tuto que l&#8217;on fait en objective C) à cette <a href="http://www.alexyork.net/blog/post/UINavigationController-with-MonoTouch-Building-a-simple-RSS-reader-Part-1.aspx">adresse</a>. J&#8217;ai été bluffé, ca a l&#8217;air presque trop simple :p</p>
<p>Mais bon, ceux que j&#8217;oublie de dire c&#8217;est qu&#8217;il faut mettre la main au portefeuille pour avoir ce kit, <strong>les prix vont de $399 à $3,999 PAR AN</strong> :/ </p>
<p>Ça à l&#8217;air vraiment pas mal, mais bon à titre personnel je pense qu&#8217;à ce prix là je préfèrerais re-apprendre l&#8217;objective-C. Un bon développeur ne doit il pas être capable de changer de langage de programmation comme de chemise ? </p>
<p>ps : Ça ressemble à un bon cheval de troie pour les développeurs Microsoft, un peu comme l&#8217;est le kit Adobe dans la suite CS5 pour développer en Flash des applications natives. Tout le monde veut sa part du gâteau de l&#8217;App Store on dirait..  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.oni-ecchi.info/blog/iphone/iphone-c-drole-de-mariage.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>APE Project &#8211; Mysql</title>
		<link>http://www.oni-ecchi.info/blog/sql/ape-project-mysql.html</link>
		<comments>http://www.oni-ecchi.info/blog/sql/ape-project-mysql.html#comments</comments>
		<pubDate>Sat, 30 Jan 2010 21:55:27 +0000</pubDate>
		<dc:creator>Guillaume chave</dc:creator>
				<category><![CDATA[APE Project]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.oni-ecchi.info/blog/?p=489</guid>
		<description><![CDATA[Bonjour, j&#8217;ai eu un souci sur APE avec Mysql et comme je suis fier de ma solution je vous la propose :
Le souci c&#8217;est quand vous faites une requête SQL qui peut retourner des valeurs null dans vos colonnes, ben ça plante. Vous avez l&#8217;erreur &#171;&#160;segmentation fault&#171;&#160;. Normallement l&#8217;erreur devrait être corriger dans les prochaines [...]]]></description>
			<content:encoded><![CDATA[<p>Bonjour, j&#8217;ai eu un souci sur APE avec Mysql et comme je suis fier de ma solution je vous la propose :</p>
<p>Le souci c&#8217;est quand vous faites une requête <a class="zem_slink" href="http://en.wikipedia.org/wiki/SQL" title="SQL" rel="wikipedia">SQL</a> qui peut retourner des valeurs null dans vos colonnes, ben ça plante. Vous avez l&#8217;erreur &laquo;&nbsp;<a class="zem_slink" href="http://en.wikipedia.org/wiki/Segmentation_fault" title="Segmentation fault" rel="wikipedia">segmentation fault</a>&laquo;&nbsp;. Normallement l&#8217;erreur devrait être corriger dans les prochaines versions d&#8217;APE mais en attendant voici le fix.</p>
<blockquote><p>La fonction IFNULL de Mysql !</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p489code8'); return false;">View Code</a> SQL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p4898"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p489code8"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> IFNULL<span style="color: #66cc66;">&#40;</span>champ1<span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">as</span> champ1<span style="color: #66cc66;">,</span> IFNULL<span style="color: #66cc66;">&#40;</span>champ2<span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">as</span> champ2 <span style="color: #993333; font-weight: bold;">FROM</span> matable</pre></td></tr></table></div>

</blockquote>
<p>Et ouais, ça suffit à contourner le bug. Vous aurez des 0 au lieu de la valeur null, à vous d&#8217;adapter votre code en fonction !</p>
<p>Simple &amp; court !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oni-ecchi.info/blog/sql/ape-project-mysql.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>APE Project &#8211; Présentation</title>
		<link>http://www.oni-ecchi.info/blog/ape-project/ape-project-presentation.html</link>
		<comments>http://www.oni-ecchi.info/blog/ape-project/ape-project-presentation.html#comments</comments>
		<pubDate>Thu, 28 Jan 2010 10:00:52 +0000</pubDate>
		<dc:creator>Guillaume chave</dc:creator>
				<category><![CDATA[APE Project]]></category>
		<category><![CDATA[astuce]]></category>
		<category><![CDATA[découverte]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.oni-ecchi.info/blog/uncategorized/ape-project-presentation.html</guid>
		<description><![CDATA[Depuis quelques semaines je travaille sur la création d&#8217;un chat conçu sur APE Project (http://www.ape-project.org/ajax-push.html).
Pour faire simple c&#8217;est un serveur temps réel conçu pour fonctionner simplement avec du Javascript. En gros on code le serveur et le client directement en Javascript, le moteur se chargeant de transformer notre code serveur en instruction C. Du coup [...]]]></description>
			<content:encoded><![CDATA[<p>Depuis quelques semaines je travaille sur la création d&#8217;un chat conçu sur APE Project (<a rel="nofollow" href="http://www.ape-project.org/ajax-push.html">http://www.ape-project.org/ajax-push.html)</a>.</p>
<p>Pour faire simple c&#8217;est un serveur temps réel conçu pour fonctionner simplement avec du <a class="zem_slink" title="JavaScript" rel="wikipedia" href="http://en.wikipedia.org/wiki/JavaScript">Javascript</a>. En gros on code le serveur et le client directement en Javascript, le moteur se chargeant de transformer notre code serveur en instruction C. Du coup ça pulse et c&#8217;est léger.</p>
<p>En fait tout le fonctionnement est à base d&#8217;événement, comme on pourrait le faire en <a class="zem_slink" title="Adobe Flash" rel="homepage" href="http://www.adobe.com/products/flash/flashpro/">Flash</a> avec Red5 ou autre. C&#8217;est à dire que le serveur envoie des évent (appelé raw), le client les reçoit, en renvoie  &#8211; on peut créer nos propres évènements (appelé commande).</p>
<p>Le système est souple et au final on n&#8217;a pas besoin de serveur Flash ou de client Flash pour des besoins simple (comme un tchat). Je vous l&#8217;accorde, les serveurs Flash son bien plus complet (vidéo notamment), mais pour ce genre de besoin,pas la peine de prendre le marteau pour écraser la mouche.</p>
<p>Au final il est assez simple a prendre en main bien qu&#8217;il faut avoir le déclic à un moment pour synthétiser toute leur doc assez disparate. En effet la doc est sur le google group, le wiki, sur une page doc, sur les channels <a class="zem_slink" title="Internet Relay Chat" rel="wikipedia" href="http://en.wikipedia.org/wiki/Internet_Relay_Chat">IRC</a> .. Bref pas évident de s&#8217;y retrouver au début.</p>
<p>Loin de moi l&#8217;idée de faire des tutoriels pour le prendre en main, mais je vais essayer de faire des articles sur des points précis concernant des fonctionnalités que j&#8217;ai développé et des soucis que j&#8217;ai rencontré.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oni-ecchi.info/blog/ape-project/ape-project-presentation.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Symfony 1.2, behavior doctrine en actions</title>
		<link>http://www.oni-ecchi.info/blog/decouverte-php/symfony-1-2-behavior-doctrine-en-actions.html</link>
		<comments>http://www.oni-ecchi.info/blog/decouverte-php/symfony-1-2-behavior-doctrine-en-actions.html#comments</comments>
		<pubDate>Sat, 03 Oct 2009 21:49:46 +0000</pubDate>
		<dc:creator>Guillaume chave</dc:creator>
				<category><![CDATA[Découverte PHP]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[découverte]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tutoriel]]></category>

		<guid isPermaLink="false">http://www.oni-ecchi.info/blog/?p=478</guid>
		<description><![CDATA[J&#8217;ai (re)découvert un truc vraiment sympathique au boulot c&#8217;est le système de behavior doctrine intégré à symfony.
Hein ? Mais à quoi ça sert ?
Ce que j&#8217;en retiens c&#8217;est que cela peut permettre d&#8217;automatiser certaines actions (répétitives) à l&#8217;enregistrement en base, et donc d&#8217;enrichir son modèle et deux coup de cuillère à pot.
Prenons un exemple, vous [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai (re)découvert un truc vraiment sympathique au boulot c&#8217;est le système de <strong>behavior doctrine</strong> intégré à symfony.</p>
<p><strong>Hein ? Mais à quoi ça sert ?</strong></p>
<p>Ce que j&#8217;en retiens c&#8217;est que cela peut permettre d&#8217;<strong>automatiser certaines actions</strong> (répétitives) à l&#8217;enregistrement en base, et donc d&#8217;enrichir son modèle et deux coup de cuillère à pot.</p>
<p><strong>Prenons un exemple,</strong> vous devez faire un site basé sur la créations de contenus par vos utilisateurs. Ils peuvent écrire des billets, commenter, s&#8217;envoyer des messages privés, gérer un annuaire .. bref un site où l&#8217;on doit quasiment tout relié à un utilisateur. Chaques tables auraient donc au moins un &laquo;&nbsp;user_id&nbsp;&raquo; comme clée étrangère ce qui implique dans vos actions d&#8217;associer l&#8217;utilisateur courant à l&#8217;objet pour le sauvegarder .. et ce pour chaque table &#8230; lourd non ?</p>
<p>Hé bien grâce aux behaviors vous pouvez sortir ce comportement générique dans des classes et avec seulement de la configuration au niveau de votre schéma, vous pouvez associer ce comportement à n&#8217;importe quel table. L&#8217;exemple que j&#8217;ai pris est tiré du behavior &laquo;&nbsp;<em>Signable</em>&nbsp;&raquo; du plugin <span><em>sfDoctrineActAsSignablePlugin</em>.</span></p>
<h3>Configuration</h3>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p478code14'); return false;">View Code</a> YML</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p47814"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code" id="p478code14"><pre class="yml" style="font-family:monospace;">Item:
  actAs:
    Signable:
  columns:
    id:
      type:             integer
      primary:          true
      autoincrement:    true
    champ1:             string(255</pre></td></tr></table></div>

<h3>Comment ça marche ?</h3>
<p>Donc si on résume, il faut dire à Doctrineque l&#8217;on va rajouter des colonnes .. et que l&#8217;on veut être prévénu lors de l&#8217;insertion en base pour associé nos actions. Donc avec seulement 2 classes, une de définition et une d&#8217;écoute, on peut s&#8217;en sortir et crée notre behavior.</p>
<p>Lors de la configuration, en rajoutant &laquo;&nbsp;actAs : Signable&nbsp;&raquo;, Doctrine va chercher une classe de définition qui ira  étendre une classe Doctrine_Template. Par convention il ira chercher une classe nommé Doctrine_Template_Signable. Le rôle de cette classe est de déclarer ses colonnes et de rajouter une écoute, un listener, vers l&#8217;autre classe d&#8217;actions.</p>
<p>Pour mon exemple, je vais volontairement raccourcir les classes du sfDoctrineActAsSignablePlugin et prendre pour acquis que vos utilisateurs sont gérés via sfGuardDoctrinePlugin.</p>
<h3>Doctrine_Template</h3>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p478code15'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p47815"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
</pre></td><td class="code" id="p478code15"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Doctrine_Template_Signable <span style="color: #000000; font-weight: bold;">extends</span> Doctrine_Template <span style="color: #009900;">&#123;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// Définitions des relations</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setUp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">// Bim rajoute une clée étrangère sur sfGuard</span>
  <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasOne</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'sfGuardUser as Author'</span><span style="color: #339933;">,</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span>
            <span style="color: #0000ff;">'local'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'created_by'</span><span style="color: #339933;">,</span>
            <span style="color: #0000ff;">'foreign'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'id'</span>
            <span style="color: #009900;">&#41;</span>
            <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
 <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setTableDefinition<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// Bim une colonne en plus</span>
  <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasColumn</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'created_by'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'integer'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span>
          <span style="color: #0000ff;">'type'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'integer'</span><span style="color: #339933;">,</span>
          <span style="color: #0000ff;">'length'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'4'</span><span style="color: #339933;">,</span>
     <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// Lien avec notre 2eme classe .. on passe le nom de la colonnette rajouté</span>
  <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addListener</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Doctrine_Template_Listener_Signable<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'created_by));
  }
}</span></pre></td></tr></table></div>

<p>Là pour l&#8217;exemple aucune configuration au niveau du schéma n&#8217;est possible mais c&#8217;est facile à rajouter via d&#8217;un tableau d&#8217;options et le constructeur suivant :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p478code16'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p47816"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p478code16"><pre class="php" style="font-family:monospace;">  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><a href="http://www.php.net/array"><span style="color: #990000;">array</span></a> <span style="color: #000088;">$options</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_options <span style="color: #339933;">=</span> Doctrine_Lib<span style="color: #339933;">::</span><span style="color: #004000;">arrayDeepMerge</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_options<span style="color: #339933;">,</span> <span style="color: #000088;">$options</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h3>Doctrine_Template_Listener</h3>
<p>Nous avons vu que notre Template rajoute un listener vers notre 2e classe en lui passant la colonne à surveiller (dans la vrai vie, un tableau d&#8217;options ..). Le rôle de notre listener de pouvoir agir avant/après l&#8217;insertion/édition d&#8217;un objet .. facile :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p478code17'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p47817"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
</pre></td><td class="code" id="p478code17"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Doctrine_Template_Listener_Signable <span style="color: #000000; font-weight: bold;">extends</span> Doctrine_Record_Listener <span style="color: #009900;">&#123;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$_colonette</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;created_by&quot;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$colonne</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_colonette <span style="color: #339933;">=</span> <span style="color: #000088;">$colonne</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> preInsert<span style="color: #009900;">&#40;</span>Doctrine_Event <span style="color: #000088;">$event</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #000088;">$createdName</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_colonette<span style="color: #339933;">;</span>
&nbsp;
      <span style="color: #666666; font-style: italic;">// recupère l'objet appellant :</span>
      <span style="color: #000088;">$objet</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$event</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getInvoker</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
      <span style="color: #666666; font-style: italic;">// Affectation de valeur</span>
       <span style="color: #000088;">$objet</span><span style="color: #339933;">-&gt;</span><span style="color: #000088;">$createdName</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getUserId</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getUserId<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #666666; font-style: italic;">// Echappe le mode cli</span>
     <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span> <span style="color: #339933;">!=</span> <a href="http://www.php.net/strncasecmp"><span style="color: #990000;">strncasecmp</span></a><span style="color: #009900;">&#40;</span>PHP_SAPI<span style="color: #339933;">,</span> <span style="color: #0000ff;">'cli'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
       <span style="color: #666666; font-style: italic;">// L'user courant</span>
       <span style="color: #b1b100;">return</span> sfContext<span style="color: #339933;">::</span><span style="color: #004000;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getUser</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getAttribute</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'user_id'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'sfGuardSecurityUser'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
     <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> preUpdate<span style="color: #009900;">&#40;</span>Doctrine_Event <span style="color: #000088;">$event</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> postUpdate<span style="color: #009900;">&#40;</span>Doctrine_Event <span style="color: #000088;">$event</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> postInsert<span style="color: #009900;">&#40;</span>Doctrine_Event <span style="color: #000088;">$event</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// A tester : public function Delete(Doctrine_Event $event) ..</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p> Vous n&#8217;avez plus qu&#8217;a rebuilder votre model et magie ça doit marcher !! </p>
<p> Vu que l&#8217;on a fait une relation de type One-to-many sur sfGuard vous pouvez accéder à l&#8217;utilisateur sfGuard via la propriété Author sur n&#8217;importr quel table marqué comme &laquo;&nbsp;Signable&nbsp;&raquo; </p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p478code18'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p47818"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p478code18"><pre class="php" style="font-family:monospace;">  <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$objet</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Author</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">id</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Voilà .. simple au final  non ? Ah vous de créez le votre, :p</p>
<p>Comme on dirait au boulot &laquo;&nbsp;Amaaziiiing !!&nbsp;&raquo;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oni-ecchi.info/blog/decouverte-php/symfony-1-2-behavior-doctrine-en-actions.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Symfony 1.2 &amp; Personnalisation des pages 404 &amp; 500</title>
		<link>http://www.oni-ecchi.info/blog/decouverte-php/symfony-1-2-personnalisation-des-pages-404-500.html</link>
		<comments>http://www.oni-ecchi.info/blog/decouverte-php/symfony-1-2-personnalisation-des-pages-404-500.html#comments</comments>
		<pubDate>Fri, 25 Sep 2009 14:14:55 +0000</pubDate>
		<dc:creator>Guillaume chave</dc:creator>
				<category><![CDATA[Découverte PHP]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[astuce]]></category>
		<category><![CDATA[framework]]></category>

		<guid isPermaLink="false">http://www.oni-ecchi.info/blog/?p=471</guid>
		<description><![CDATA[Voici un petit tips sorti tout droit de jobeet pour personnaliser ses pages 404 &#38; 500 sur Symfony 1.2. C&#8217;est bête comme chou comme truc mais faut le savoir quoi.
Page 404 :
Pour la page 404 c&#8217;est dans le fichier settings de votre application
/apps/front/config/setting.yml
Il faut tout simplement rajouter ces deux directives

?View Code YML1
2
3
all:
  error_404_module: home
 [...]]]></description>
			<content:encoded><![CDATA[<p>Voici un petit tips sorti tout droit de jobeet pour personnaliser ses pages 404 &amp; 500 sur <a class="zem_slink" href="http://www.symfony-project.org/" title="Symfony" rel="homepage">Symfony</a> 1.2. C&#8217;est bête comme chou comme truc mais faut le savoir quoi.</p>
<h3>Page 404 :</h3>
<p>Pour la page 404 c&#8217;est dans le fichier settings de votre application<br />
/apps/front/config/setting.yml</p>
<p>Il faut tout simplement rajouter ces deux directives</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p471code21'); return false;">View Code</a> YML</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p47121"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p471code21"><pre class="yml" style="font-family:monospace;">all:
  error_404_module: home
  error_404_action: error404</pre></td></tr></table></div>

<p>Du coup quand vous aurez une erreur 404 cela sera votre page qui sera affiché, vous pourrez donc dans votre action vous ajoutez une petite ligne pour vous envoyer un mail quand y a un souci. (Le plugin nahoMail est vraiment top d&#8217;ailleurs). Du monitoring pas cher quoi.</p>
<h3>Page 500 :</h3>
<p>Vous croyez qu&#8217;il aurait fallu mettre</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p471code22'); return false;">View Code</a> YML</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p47122"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p471code22"><pre class="yml" style="font-family:monospace;">all:   
   error_500_module: home 
   error_500_action: error500</pre></td></tr></table></div>

<p>Et bien ça ne marche pas du tout comme ça. Pour personnaliser cette page vous devez placer un fichier &laquo;&nbsp;error.html.php&nbsp;&raquo; dans le répertoire &laquo;&nbsp;apps/front/config/error&nbsp;&raquo; (crée le au besoin). Et c&#8217;est tout.</p>
<p>Mais du coup voilà, nous ne sommes pas dans une action .. donc cette page n&#8217;est pas inclu dans votre layout, on ne peut non plus utiliser les classes Symfony.. et oui <strong>la page d&#8217;erreur 500 est complétement statique. </strong>Adieu le monitoring pour cette page.</p>
<p>Si vous connaissez un moyen de customiser cette page et de pouvoir profiter du framework en même temps je suis preneur :p</p>
<p>Sur ceux, à bientôt pour de nouvelles astuces Symfony</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oni-ecchi.info/blog/decouverte-php/symfony-1-2-personnalisation-des-pages-404-500.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Spip c&#8217;est le mal</title>
		<link>http://www.oni-ecchi.info/blog/decouverte-php/spip-cest-le-mal.html</link>
		<comments>http://www.oni-ecchi.info/blog/decouverte-php/spip-cest-le-mal.html#comments</comments>
		<pubDate>Wed, 16 Sep 2009 06:48:57 +0000</pubDate>
		<dc:creator>Guillaume chave</dc:creator>
				<category><![CDATA[About me :)]]></category>
		<category><![CDATA[Découverte PHP]]></category>

		<guid isPermaLink="false">http://www.oni-ecchi.info/blog/uncategorized/spip-cest-le-mal.html</guid>
		<description><![CDATA[Répétez après moi : Spip c&#8217;est le mal.
Spip c&#8217;est le mal.
Spip c&#8217;est le mal.
Spip c&#8217;est le mal.
Spip c&#8217;est le mal.
Pourquoi ? parce que.
]]></description>
			<content:encoded><![CDATA[<p>Répétez après moi : Spip c&#8217;est le mal.<br />
Spip c&#8217;est le mal.<br />
Spip c&#8217;est le mal.<br />
Spip c&#8217;est le mal.<br />
Spip c&#8217;est le mal.</p>
<p>Pourquoi ? parce que.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oni-ecchi.info/blog/decouverte-php/spip-cest-le-mal.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Retour de vacances</title>
		<link>http://www.oni-ecchi.info/blog/guillaume-chave/retour-de-vacances.html</link>
		<comments>http://www.oni-ecchi.info/blog/guillaume-chave/retour-de-vacances.html#comments</comments>
		<pubDate>Fri, 28 Aug 2009 08:08:37 +0000</pubDate>
		<dc:creator>Guillaume chave</dc:creator>
				<category><![CDATA[About me :)]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[moi]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.oni-ecchi.info/blog/?p=466</guid>
		<description><![CDATA[Me voici de retour,
Je préviens que ce blog risque de ne pas être mis à jour pendant encore un moment. J&#8217;emménage à Lyon, je change de job, et je n&#8217;aurais plus de mac pour développez sur iphone tout de suite. Donc pour les lecteurs &#171;&#160;iphone&#160;&#187; du blog désolé mais c&#8217;est chômage technique en vue.
C&#8217;est con, [...]]]></description>
			<content:encoded><![CDATA[<p>Me voici de retour,</p>
<p>Je préviens que ce blog risque de ne<strong> pas être mis à jour</strong> pendant encore un moment. J&#8217;emménage à <a class="zem_slink" title="Lyon" rel="geolocation" href="http://maps.google.com/maps?ll=45.7669444444,4.83416666667&amp;spn=0.1,0.1&amp;q=45.7669444444,4.83416666667%20%28Lyon%29&amp;t=h">Lyon</a>, je change de job, et je n&#8217;aurais plus de mac pour développez sur iphone tout de suite. Donc pour les lecteurs &laquo;&nbsp;iphone&nbsp;&raquo; du blog désolé mais c&#8217;est chômage technique en vue.</p>
<p>C&#8217;est con, j&#8217;aurais bien aimer tester la réalité augmenté sur iphone grâce à <a rel="nofollow" href="http://code.google.com/p/iphonearkit/" target="_blank">http://code.google.com/p/iphonearkit</a>. L&#8217;avez vous tester cette libraire vous ? Mais bon, je n&#8217;ai pas d&#8217;iphone 3GS non plus. D&#8217;ailleurs si vous avez un mac, un iphone 3GS que vous voulez me donner, y a pas de souci je prend :p</p>
<p><strong>Petite annonce iphone : </strong>Je suis à la recherche de dev iphone sur Lyon, débutant ou confirmé. N&#8217;hesitez pas à vous signaler par mail, je ne mord pas.</p>
<p>Par contre, pour ceux qui viennent pour du <strong><a class="zem_slink" title="PHP" rel="homepage" href="http://php.net/">PHP</a> et pour <a class="zem_slink" title="Symfony" rel="homepage" href="http://www.symfony-project.org/">Symfony</a> </strong>vont être content. Mon nouveau job m&#8217;en fera faire 8h par jour, je parie que je vais découvrir pleins de trucs que je posterais sur ce blog. :p</p>
<p><strong>Adieu objective-c, welcome PHP</strong>. (La tendance est de faire l&#8217;inverse, mais moi je ne suis pas comme les autres ;p)</p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><img class="zemanta-pixie-img" style="border: medium none; float: right;" src="http://img.zemanta.com/pixy.gif?x-id=b86059c6-fcb8-4624-aed9-8f314c839d9b" alt="" /><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.oni-ecchi.info/blog/guillaume-chave/retour-de-vacances.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nouveauté du site</title>
		<link>http://www.oni-ecchi.info/blog/guillaume-chave/nouveaute-du-site.html</link>
		<comments>http://www.oni-ecchi.info/blog/guillaume-chave/nouveaute-du-site.html#comments</comments>
		<pubDate>Sat, 25 Jul 2009 10:51:09 +0000</pubDate>
		<dc:creator>Guillaume chave</dc:creator>
				<category><![CDATA[About me :)]]></category>
		<category><![CDATA[moi]]></category>

		<guid isPermaLink="false">http://www.oni-ecchi.info/blog/?p=447</guid>
		<description><![CDATA[Comme c&#8217;est à la mode, j&#8217;ai succombé à FriendFeed. J&#8217;ai donc remodelé ce blog en fonction.
A la place de l&#8217;encadré &#171;&#160;ma veille quotidienne&#160;&#187; où je vous donnais tous mes flux que je suivais et qui au final n&#8217;était pas très intéressant je l&#8217;ai remplacé par mon flux d&#8217;activité delicious/google reader. Il y aura donc en [...]]]></description>
			<content:encoded><![CDATA[<p>Comme c&#8217;est à la mode, j&#8217;ai succombé à <a class="zem_slink" title="FriendFeed" rel="wikipedia" href="http://en.wikipedia.org/wiki/FriendFeed">FriendFeed</a>. J&#8217;ai donc remodelé ce blog en fonction.</p>
<p>A la place de l&#8217;encadré &laquo;&nbsp;ma veille quotidienne&nbsp;&raquo; où je vous donnais tous mes flux que je suivais et qui au final n&#8217;était pas très intéressant je l&#8217;ai remplacé par mon flux d&#8217;activité delicious/google reader. Il y aura donc en temps réel une sélection d&#8217;article qui me semble intéressant.</p>
<p>A propos des commentaires de mes articles je laisse le système par défaut, mais je donne en plus la possibilité de voir les réactions sur FriendFeed et si vous avez un compte vous pourrez directement réagir à partir de la page. Peut être qu&#8217;avec deux systèmes il y aura deux fois plus d&#8217;activité (ou pas ^^).</p>
<p>A oui, et mon compte FriendFeed est : <a rel="nofollow" href="http://friendfeed.com/guillaumechave">http://friendfeed.com/guillaumechave</a>. Pour les raleurs qui diront &laquo;&nbsp;ouais mais tu connais personne la looze&nbsp;&raquo;, je leur dirait &laquo;&nbsp;je viens de m&#8217;inscrire et je t&#8217;emm***&nbsp;&raquo; :p</p>
<div class="zemanta-img zemanta-action-dragged" style="margin: 1em; display: block;">
<div>
<dl class="wp-caption alignright" style="width: 210px;">
<dt class="wp-caption-dt"><a href="http://www.crunchbase.com/company/friendfeed"><img title="Image representing FriendFeed as depicted in C..." src="http://www.crunchbase.com/assets/images/resized/0000/1096/1096v1-max-450x450.png" alt="Image representing FriendFeed as depicted in C..." width="200" height="56" /></a></dt>
<dd class="wp-caption-dd zemanta-img-attribution" style="font-size: 0.8em;">Image via <a href="http://www.crunchbase.com">CrunchBase</a></dd>
</dl>
</div>
</div>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><img class="zemanta-pixie-img" style="border: medium none; float: right;" src="http://img.zemanta.com/pixy.gif?x-id=a7236c72-9d9f-4d0d-abc5-8454cbfa7dec" alt="" /><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.oni-ecchi.info/blog/guillaume-chave/nouveaute-du-site.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
