<?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>XGBlog</title>
	<atom:link href="http://www.xaviergodart.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.xaviergodart.com/blog</link>
	<description>Planète Web et musique extrême</description>
	<pubDate>Mon, 04 May 2009 11:54:53 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Construire un tableau de bord efficace</title>
		<link>http://www.xaviergodart.com/blog/2009/05/04/construire-un-tableau-de-bord-efficace/</link>
		<comments>http://www.xaviergodart.com/blog/2009/05/04/construire-un-tableau-de-bord-efficace/#comments</comments>
		<pubDate>Mon, 04 May 2009 11:51:50 +0000</pubDate>
		<dc:creator>Xavier</dc:creator>
		
		<category><![CDATA[Développement]]></category>

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

		<category><![CDATA[Méthodologie]]></category>

		<category><![CDATA[Qualité]]></category>

		<category><![CDATA[Tableau de bord]]></category>

		<guid isPermaLink="false">http://www.xaviergodart.com/blog/?p=54</guid>
		<description><![CDATA[On retrouve des tableaux de bord partout : dans un avion, une voiture, une machine à laver ou un système d’information. Son rôle est à chaque fois le même : il apporte une aide à la décision au gestionnaire du système. Il se doit donc de transmettre des informations pertinentes sur l’état et la performance du système à l’instant présent.]]></description>
			<content:encoded><![CDATA[<p><em>Ce billet a été initialement publié sur le blog de <a href="http://www.clever-age.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.clever-age.com');">Clever Age</a> dans <a href="http://www.clever-age.com/veille/blog/construire-un-tableau-de-bord-efficace.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.clever-age.com/veille/blog/construire-un-tableau-de-bord-efficace.html');">Construire un tableau de bord efficace</a>.</em></p>
<div class="chapo">On retrouve des tableaux de bord partout : dans un avion, une voiture, une machine à laver ou un système d’information. Son rôle est à chaque fois le même : il apporte une aide à la décision au gestionnaire du système. Il se doit donc de transmettre des informations pertinentes sur l’état et la performance du système à l’instant présent.</div>
<p><span id="more-54"></span></p>
<div>
<h3 class="spip">Le tableau de bord : une photographie du système</h3>
<p class="spip">Bien trop souvent les tableaux de bord ne sont utilisés ou conçus que comme outil de constat. Le gestionnaire y observe l’état de son système et peut en déduire deux choses :</p>
<ul class="spip">
<li class="spip"> « Ma décision était la bonne, je suis trop fort »</li>
<li class="spip"> « Ma décision était la mauvaise, j’ai fait n’importe quoi »</li>
</ul>
<p class="spip">Imaginez que le tableau de bord d’un avion soit conçu de cette manière. L’avion n’a plus de carburant. Le pilote à le choix de se rendre soit l’aéroport 1 soit à l’aéroport 2. Il choisit le premier mais arrivé sur place, les conditions météo ne permettent pas d’atterrir. L’avion s’écrase. Mauvaise décision.<br />
Pourtant sur le tableau de bord, l’information météo était présente, dans le coin en bas à droite. Mais elle n’a pas été mise en avant.
</p>
<p class="spip" style="text-align: center;"><span class="spip_document_959 spip_documents spip_documents_center"> <img class="aligncenter" style="height: 380px; width: 450px;" src="http://www.clever-age.com/veille/blog/local/cache-vignettes/L450xH380/dashboard-avion-0756d.jpg" alt="" width="450" height="380" /> </span></p>
<p class="spip">Votre système d’information n’est probablement pas aussi critique en terme de vies humaines qu’un avion, mais cela n’empêche pas d’appliquer un certain nombre de bonnes pratiques à vos tableaux.</p>
<p class="spip">Un tableau de bord doit être un système de pilotage permettant l’aide à la décision, tout en ayant conscience du contexte, notamment des risques encourus. Le gestionnaire doit pouvoir agir en connaissance de cause et donc pouvoir faire marche arrière en cas d’erreur.</p>
<p class="spip"><strong class="spip">Le tableau de bord est donc une photographie du système</strong>. Il doit présenter des indicateurs pertinents et mettre en avant les données renseignant un risque (la météo par exemple).</p>
<h3 class="spip">La conception d’un tableau de bord</h3>
<p class="spip">La conception d’un tableau de bord efficace passe par une longue étape de réflexion, notamment en termes d’ergonomie d’interface.</p>
<p class="spip"><strong class="spip">4 étapes me paraissent essentielles</strong> :</p>
<ol class="spip">
<li class="spip"> Identification de la stratégie à adopter et des objectifs à atteindre</li>
<li class="spip"> Définition de l’activité</li>
<li class="spip"> Sélection des données à utiliser</li>
<li class="spip"> Choix des indicateurs</li>
</ol>
<p class="spip">Afin d’illustrer tout ça, prenons un exemple. Je vais être gestionnaire d’un site qui gère des petites annonces :</p>
<ul class="spip">
<li class="spip"> L’utilisateur peut poster des petites annonces</li>
<li class="spip"> L’utilisateur peut laisser des commentaires sur chaque annonce</li>
<li class="spip"> Les petites annonces ainsi que les commentaires sont soumis à validation</li>
<li class="spip"> Les utilisateurs peuvent se noter entre eux (façon eBay) et peuvent soumettre une plainte contre un utilisateur</li>
</ul>
<p class="spip">Gardez à l’esprit que le tableau de bord final ne comportera qu’entre 5 et 10 indicateurs maximum. Il sera matérialisé généralement sur la page d’accueil de l’interface d’administration (appelée également <em class="spip">backend</em> ou <em class="spip">backoffice</em>), pour un site Web tout du moins.</p>
<h3 class="spip">Stratégie et objectifs</h3>
<p class="spip">La première étape est donc d’identifier clairement la stratégie que l’on veut employer. De quel manière vais-je gérer mon système ?</p>
<p class="spip">Dans notre exemple, la stratégie est la suivante :</p>
<ul class="spip">
<li class="spip"> je veux limiter au maximum les annonces et les commentaires abusifs afin que le site gagne en crédibilité. Pour cela, je veux un système de validation</li>
<li class="spip"> je veux pouvoir également supprimer les comptes des personnes malhonnêtes en étudiant les plaintes déposées par les utilisateurs</li>
<li class="spip"> je veux monétiser mon site avec des publicités et je prévois de les déplacer sur chaque page en fonction des zones qui attirent l’œil du visiteur (les fameuses zones chaudes)</li>
</ul>
<p class="spip">Avec cette stratégie, je veux atteindre les objectifs suivants en une année :</p>
<ul class="spip">
<li class="spip"> Un revenu publicitaire de 3000 euros par mois.</li>
<li class="spip"> 400 000 pages vues par mois.</li>
</ul>
<p class="spip">Notez ici que les objectifs doivent <em class="spip">toujours</em> être quantifiables.</p>
<h3 class="spip">Définition de l’activité</h3>
<p class="spip">Quelles vont être les actions effectuées durant l’activité de gestion du site ?</p>
<p class="spip">Il ne faut pas hésiter à découper l’activité en tâches bien distinctes. Dans notre exemple, le gestionnaire :</p>
<ul class="spip">
<li class="spip"> consulte la liste des petites annonces en attente</li>
<li class="spip"> consulte les commentaires en attente</li>
<li class="spip"> consulte puis valide ou invalide une annonce</li>
<li class="spip"> consulte le nombre de clics pour une zone publicitaire donnée</li>
<li class="spip"> etc.</li>
</ul>
<p class="spip">Il faut également réfléchir à la manière dont le gestionnaire va organiser son activité dans le temps.<br />
Dans notre exemple, on peut supposer que son travail de modération se fera pendant les heures de pointe, c’est à dire les moments où un grand nombre d’annonces sera soumis. Le reste du temps, il s’occupera de l’optimisation de la monétisation.
</p>
<p class="spip">Afin qu’il organise son temps, le tableau de bord devra être capable de lui fournir des statistiques de l’utilisation du site en fonction des heures de la journée.</p>
<h3 class="spip">Sélection des données à utiliser</h3>
<p class="spip">Pour chacune des tâches identifiées, il faut à présent lister toutes les informations requises. C’est une étape particulièrement importante et critique qui influera grandement sur l’utilisabilité du résultat final.<br />
En effet, on a généralement tendance à vouloir toutes les informations disponibles. Or cela n’a pour seul effet que de surcharger cognitivement le gestionnaire. Sa décision n’en sera que moins bonne. Une bonne décision ne peut être prise qu’avec un <strong class="spip">minimum de données mais très pertinentes</strong>.
</p>
<p class="spip">On va ensuite récupérer ces informations depuis la base de données du site. De quelles tables ai-je besoin ? De quels champs ? Ai-je besoin de plusieurs champs pour obtenir une des données souhaitées ?</p>
<h3 class="spip">Choix des indicateurs</h3>
<p class="spip">Il va maintenant falloir donner forme à ces données. C’est là qu’interviennent les indicateurs : ils peuvent prendre la forme de graphiques, de jauges, de listes, de nombres, d’alertes etc.<br />
L’idéal est qu’ils tiennent sur une seule page.
</p>
<p class="spip" style="text-align: center;"><span class="spip_document_960 spip_documents spip_documents_center"> <img class="aligncenter" style="height: 300px; width: 400px;" src="http://www.clever-age.com/veille/blog/local/cache-vignettes/L400xH300/dashboard-indicateurs-2e865.jpg" alt="" width="400" height="300" /> </span></p>
<p class="spip">Il n’existe pas vraiment de nombre d’indicateurs idéal. Il faut juste savoir qu’en dessous de 5, les informations peuvent être trop légères pour prendre une décision, et qu’au dessus de 10, elles seront trop nombreuses.</p>
<p class="spip">Le tableau de bord doit être structuré. Les indicateurs doivent donc être groupés par secteur. Dans notre exemple, on pourrait faire des groupes « gestion des revenus publicitaires » et « modération ».</p>
<p class="spip" style="text-align: center;"><span class="spip_document_963 spip_documents spip_documents_center"> <img class="format_png aligncenter" style="height: 366px; width: 470px;" src="http://www.clever-age.com/veille/blog/local/cache-vignettes/L470xH366/png_dashboard-exemple-89a0a.png" alt="" width="470" height="366" /> </span></p>
<p class="spip">Dans l’exemple ci-dessus, les indicateurs sont correctement groupés mais leur nombre est bien trop important. Lorsque nous tombons sur un grand nombre d’informations, nous construisons automatiquement un système mental de queue avec l’ordre des éléments à vérifier en fonction de leur priorité.<br />
Un bon tableau de bord devrait faire ce travail à notre place en ne présentant que les informations prioritaires et en permettant d’aller dans le détail si nécessaire (mais on sort du cadre du tableau de bord).</p>
<p class="spip">Le choix de leur forme est également à réfléchir méticuleusement. On peut représenter chaque donnée différemment mais certaines formes seront plus pertinentes que d’autres dans un contexte donné.<br />
Il faut également éviter de tomber dans le piège de l’esthétique. Vouloir rendre son tableau de bord <em class="spip">fashion</em>-tendance est légitime, à condition que cela serve sa compréhension.
</p>
<p class="spip" style="text-align: center;"><span class="spip_document_962 spip_documents spip_documents_center"> <img class="aligncenter" style="height: 386px; width: 410px;" src="http://www.clever-age.com/veille/blog/local/cache-vignettes/L410xH386/dashboard-graphique-b9b4d.jpg" alt="" width="410" height="386" /> </span></p>
<p class="spip">Dans cet exemple, le graphique est en 3D. C’est peut-être joli mais ça n’améliore en aucun cas sa lisibilité : la perspective empêche de comparer la hauteur des pics du mois de mai et du mois de novembre.</p>
<p class="spip">Retournons à notre exemple de petites annonces, les indicateurs resteront relativement simples :</p>
<ul class="spip">
<li class="spip"> le nombre de petites annonces soumises</li>
<li class="spip"> le nombre de commentaires à valider</li>
<li class="spip"> le nombre de plaintes</li>
<li class="spip"> un graphique présentant les statistiques sur le nombre de petites annonces soumises par tranche horaire</li>
<li class="spip"> le récapitulatif des clics sur chaque zone publicitaire avec leur tendance représentée par des flèches</li>
<li class="spip"> une alerte sur les personnes faisant l’objet de plusieurs plaintes</li>
</ul>
<p class="spip" style="text-align: center;"><span class="spip_document_988 spip_documents spip_documents_center"> <img class="format_png aligncenter" style="height: 277px; width: 470px;" src="http://www.clever-age.com/veille/blog/local/cache-vignettes/L470xH277/png_dashboardfinal-fe14e.png" alt="" width="470" height="277" /> </span></p>
<p class="spip">Bien sûr il s’agit d’une solution parmi d’autres. L’essentiel est de se rendre bien compte qu’elle est adaptée à la stratégie définie.</p>
<h3 class="spip">Pour aller plus loin&#8230;</h3>
<p class="spip">Ca y est, votre tableau de bord est prêt !</p>
<p class="spip">Tout a été pensé pour vous. Votre activé de gestion du site est optimisée au maximum. Mais bien sûr, ça n’était qu’un exemple simple. Dans le cas d’un site avec plus de paramètres à prendre en compte, ainsi que plusieurs gestionnaires, la situation peut se compliquer assez rapidement.</p>
<p class="spip">En effet, un même tableau peut convenir à un profil de personne mais pas à une autre. Nous avons tous des manières différentes de nous organiser et de percevoir les choses. L’idéal dans ces cas serait de prévoir une banque d’indicateurs correspondant aux données disponibles et de laisser le soin à chacun d’ajouter ou supprimer des indicateurs ainsi que de les déplacer à l’écran. Avec un système de personnalisation, on anticipe également une évolution de la stratégie.</p>
<p class="spip">Dans le cas où le site est déjà géré de longue date par une même personne, il peut être intéressant de capitaliser ses connaissances sur l’activité de gestion du site. Cette opération permettra de mettre en avant certains points de la gestion n’apparaissant pas forcément comme évidents.</p>
<h3 class="spip">Et tout ça pour quoi ?</h3>
<p class="spip">&#8230; parce que c’est bien beau de se torturer les méninges mais tout ça,  ça a un prix !</p>
<p class="spip">Et à ça je répondrai : oui et non. Sur des gros systèmes, l’étude des tableaux de bord est une étape obligatoire. Une équipe d’ergonomes se penchera dessus. À long terme, ce coût sera compensé par le gain en efficacité des opérateurs.</p>
<p class="spip">Pour un site Web comme celui de notre exemple, le <em class="spip">webdesigner</em> pourra s’en occuper. Il lui suffira juste de repenser à ces quelques conseils et de les appliquer, au même titre que les règles de base en ergonomie ou le respect des normes d’accessibilité.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.xaviergodart.com/blog/2009/05/04/construire-un-tableau-de-bord-efficace/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Custom filters dans l&#8217;Admin Generator de Symfony 1.2</title>
		<link>http://www.xaviergodart.com/blog/2009/03/26/custom-filters-dans-ladmin-generator-de-symfony-12/</link>
		<comments>http://www.xaviergodart.com/blog/2009/03/26/custom-filters-dans-ladmin-generator-de-symfony-12/#comments</comments>
		<pubDate>Thu, 26 Mar 2009 12:29:48 +0000</pubDate>
		<dc:creator>Xavier</dc:creator>
		
		<category><![CDATA[Développement]]></category>

		<category><![CDATA[Admin Generator]]></category>

		<category><![CDATA[Symfony 1.2]]></category>

		<guid isPermaLink="false">http://www.xaviergodart.com/blog/?p=36</guid>
		<description><![CDATA[Lorsque que les filtres par défaut ne suffisent pas, il arrive parfois que l'on ai besoin d'en créer de nouveaux pour l'admin generator. Pour un projet, j'ai eu besoin de filtrer les ID des objets entre deux valeurs. Il était donc nécessaire d'insérer deux champs dans la zone des filtres.]]></description>
			<content:encoded><![CDATA[<p>Lorsque que les filtres par défaut ne suffisent pas, il arrive parfois que l&#8217;on ai besoin d&#8217;en créer de nouveaux pour l&#8217;admin generator. Pour un projet, j&#8217;ai eu besoin de filtrer les ID des objets entre deux valeurs. Il était donc nécessaire d&#8217;insérer deux champs dans la zone des filtres.<span id="more-36"></span></p>
<p>Dans le fichier <em>lib/filter/MaClasseFormFilter.class.php</em>, on va commencer par ajouter les nouveaux champs dans la fonction <em>configure</em> :</p>

<div class="wp_syntax"><div class="code"><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> configure<span style="color: #009900;">&#40;</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><span style="color: #004000;">widgetSchema</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id_debut'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> sfWidgetFormFilterInput<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'with_empty'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">widgetSchema</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id_fin'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> sfWidgetFormFilterInput<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'with_empty'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">validatorSchema</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id_debut'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> sfValidatorPass<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'required'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">validatorSchema</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id_fin'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> sfValidatorPass<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'required'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>On ajoute deux nouveaux Widget Input ainsi que leurs validateurs associés.</p>
<p>On va à présent surcharger la fonction <em>getFields</em> qui retourne les champs au formulaire :</p>

<div class="wp_syntax"><div class="code"><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> getFields<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">return</span> <span style="color: #990000;">array_merge</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
      <span style="color: #0000ff;">'id_debut'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'IdDebut'</span><span style="color: #339933;">,</span>
      <span style="color: #0000ff;">'id_fin'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'IdFin'</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> parent<span style="color: #339933;">::</span><span style="color: #004000;">getFields</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>L&#8217;Admin Generator génère pour chaque filtre une fonction <em>addNomDuChampsColumnCriteria</em> qui contient les critères pour la requête de filtrage. On va donc lui fournir deux nouvelles fonctions pour nos deux nouveaux champs. A noter ici que j&#8217;utilise <strong>Propel</strong>. Pour <strong>Doctrine</strong>, les paramètres de la fonction doivent être différents.</p>

<div class="wp_syntax"><div class="code"><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> addIdDebutColumnCriteria<span style="color: #009900;">&#40;</span>Criteria <span style="color: #000088;">$criteria</span><span style="color: #339933;">,</span> <span style="color: #000088;">$field</span><span style="color: #339933;">,</span><span style="color: #000088;">$values</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$values</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'text'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #0000ff;">''</span> <span style="color: #339933;">!=</span> <span style="color: #000088;">$values</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'text'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$criteria</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addAnd</span><span style="color: #009900;">&#40;</span>MaClassePeer<span style="color: #339933;">::</span><span style="color: #004000;">ID</span><span style="color: #339933;">,</span> <span style="color: #000088;">$values</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'text'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> Criteria<span style="color: #339933;">::</span><span style="color: #004000;">GREATER_EQUAL</span><span style="color: #009900;">&#41;</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> addIdFinColumnCriteria<span style="color: #009900;">&#40;</span>Criteria <span style="color: #000088;">$criteria</span><span style="color: #339933;">,</span> <span style="color: #000088;">$field</span><span style="color: #339933;">,</span><span style="color: #000088;">$values</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$values</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'text'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #0000ff;">''</span> <span style="color: #339933;">!=</span> <span style="color: #000088;">$values</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'text'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$criteria</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addAnd</span><span style="color: #009900;">&#40;</span>MaClassePeer<span style="color: #339933;">::</span><span style="color: #004000;">ID</span><span style="color: #339933;">,</span> <span style="color: #000088;">$values</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'text'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> Criteria<span style="color: #339933;">::</span><span style="color: #004000;">LESS_EQUAL</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>En clair, on complète simplement le <strong>criteria</strong> de la requête de filtrage. La valeur du champs est contenue dans <em>$values['text']</em>.</p>
<p>Il ne reste plus qu&#8217;à ajouter nos champs dans le <em>generator.yml</em> de votre module :</p>
<pre>
filter:
  display: [ id_debut, id_fin ]
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.xaviergodart.com/blog/2009/03/26/custom-filters-dans-ladmin-generator-de-symfony-12/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Nouveau départ</title>
		<link>http://www.xaviergodart.com/blog/2008/12/29/nouveau-depart/</link>
		<comments>http://www.xaviergodart.com/blog/2008/12/29/nouveau-depart/#comments</comments>
		<pubDate>Mon, 29 Dec 2008 16:10:10 +0000</pubDate>
		<dc:creator>Xavier</dc:creator>
		
		<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.xaviergodart.com/blog/?p=31</guid>
		<description><![CDATA[Et hop, un nouveau site et un nouveau blog. Je profite de cette prériode de transition (la fin des études) pour tenter une nouvelle fois l&#8217;expérience du blogging.
J&#8217;essaierais de poster régulièrement (c&#8217;est dans ma liste des bonnes résolutions 2009). Mes deux passions, le web et la musique, y seront les plus représentées.
A très vite et [...]]]></description>
			<content:encoded><![CDATA[<p>Et hop, un nouveau site et un nouveau blog. Je profite de cette prériode de transition (la fin des études) pour tenter une nouvelle fois l&#8217;expérience du blogging.</p>
<p>J&#8217;essaierais de poster régulièrement (c&#8217;est dans ma liste des bonnes résolutions 2009). Mes deux passions, le web et la musique, y seront les plus représentées.</p>
<p>A très vite et bonnes fêtes !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xaviergodart.com/blog/2008/12/29/nouveau-depart/feed/</wfw:commentRss>
		</item>
		<item>
		<title>MAO sous linux</title>
		<link>http://www.xaviergodart.com/blog/2008/04/18/mao-sous-linux/</link>
		<comments>http://www.xaviergodart.com/blog/2008/04/18/mao-sous-linux/#comments</comments>
		<pubDate>Fri, 18 Apr 2008 12:26:19 +0000</pubDate>
		<dc:creator>Xavier</dc:creator>
		
		<category><![CDATA[Musique]]></category>

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

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

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

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

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

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

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

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

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

		<guid isPermaLink="false">http://xavontheweb.wordpress.com/?p=12</guid>
		<description><![CDATA[Pour beaucoup de professionnels de la musique, le passage à linux est difficile car des logiciels majeurs (Cubase, Protools, Reason etc&#8230;) ne sont disponibles que sous Windows ou MacOS.
Il existe cependant aujourd&#8217;hui des outils libres, disponibles sous linux qui n&#8217;ont rien à leur envier et je vais vous présenter ici ceux que j&#8217;ai adopté.
Sur ma [...]]]></description>
			<content:encoded><![CDATA[<p>Pour beaucoup de professionnels de la musique, le passage à linux est difficile car des logiciels majeurs (Cubase, Protools, Reason etc&#8230;) ne sont disponibles que sous Windows ou MacOS.</p>
<p>Il existe cependant aujourd&#8217;hui des outils libres, disponibles sous linux qui n&#8217;ont rien à leur envier et je vais vous présenter ici ceux que j&#8217;ai adopté.<span id="more-12"></span></p>
<p>Sur ma ubuntu gutsy, j&#8217;utilise les logiciels suivant :</p>
<ul>
<li><strong>Jack</strong> : serveur de son qui permet de connecter les entrées/sorties du hardware et du software comme on veut.</li>
<li><strong>Ardour</strong> : Enregistreur, mixeur, sequenceur multipiste très proche de protools</li>
<li><strong>Hydrogen</strong> : Boîte à rythme virtuelle (pour remplacer son batteur&#8230;)</li>
<li><strong>Jamin</strong> : Logiciel de mastérisation (pour les dernière ajustement)</li>
</ul>
<p>Pour installer tout ce joyeux bordel, suivez les étapes suivantes :</p>
<ul>
<li> Installez jack et activez le temps réel en suivant <a href="http://doc.ubuntu-fr.org/jackd" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://doc.ubuntu-fr.org/jackd');">cette procédure</a>.</li>
<li>Installez le reste avec la commande suivante :<br />
<blockquote><p>sudo apt-get install ardour-i686 ubuntustudio-audio-plugins hydrogen hydrogen-drumkits jamin qjackctl</p></blockquote>
</li>
</ul>
<p>Pour utiliser tout ça, il faut commencer par lancer jack (ourvrez jack et cliquez sur start). Ensuite vous pourrez lancer les autres programmes comme bon vous semble. Dans jack, le bouton connexion vous permet de relier les entrées/sorties de chaque programme comme vous le voulez.<br />
<strong><br />
Quelques choses à savoir :</strong></p>
<ul>
<li>Pleins de kits pour Hydrogen sont mis à disposition par les utilisateurs sur le <a href="http://www.hydrogen-music.org/forum/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.hydrogen-music.org/forum/');">forum du site officiel</a>.</li>
<li>Les plugins LDASPA sont plus ou moins des équivalents libres aux plugins VST. Ils sont très nombreux et devraient satisfaire les plus grand nombre. Toutefois, il est possible d&#8217;utiliser les VST avec Ardour à condition de le <a href="http://doc.ubuntu-fr.org/ardour" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://doc.ubuntu-fr.org/ardour');">compiler soit même</a>.</li>
<li>Enfin si comme moi vous venez de Cubase, vous risquez de chercher un moment comment on utilise les plugins sur Ardour&#8230; (ou alors je suis vraiment nul). Il faut en fait aller dans la console de mixage (alt-M), clic droit sur la piste où l&#8217;on désire ajouter le plugin et &#8220;Nouveau plugin&#8230;&#8221;.</li>
</ul>
<p><strong>Un petit exemple :</strong></p>
<p>Je vous mets un petit sample enregistré vite fait.<br />
<a href="http://www.xaviergodart.com/blog/wp-content/uploads/2008/04/exemple.mp3" >sample</a><br />
La batterie a été faite avec Hydrogen et un kit bien rock trouvé sur le net. L&#8217;enregistrement a été fait sur Ardour avec ma PRS CE24 branchée dans un vieux zoom 707 II (je sais, c&#8217;est un sacrilège mais je n&#8217;avais que ça sous la main&#8230;) lui même relié directement dans l&#8217;entrée micro de ma carte son (intégrée à la carte mère de mon pc). Vraiment pas du gros matos en somme&#8230; J&#8217;ai ajouté 4 pistes sur ardour, une pour la batterie, deux pour les guitares (equalisations différentes, une à gauche, l&#8217;autre à droite),  et une dernière encore pour la guitare (pour les petits plans en tapping). Pour les effets : EQ + compresseur sur toutes les pistes, et un petit chorus pour la dernière piste.</p>
<p style="text-align:center;"><a href="http://xavontheweb.files.wordpress.com/2008/04/ardour.png" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://xavontheweb.files.wordpress.com/2008/04/ardour.png');"><img class="alignnone size-medium wp-image-13" src="http://xavontheweb.files.wordpress.com/2008/04/ardour.png?w=400" alt="" width="579" height="361" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xaviergodart.com/blog/2008/04/18/mao-sous-linux/feed/</wfw:commentRss>
<enclosure url="http://xavier.godart64.free.fr/perso/demo.mp3" length="457722" type="audio/mpeg" />
<enclosure url="http://xavier.godart64.free.fr/perso/demo.mp3" length="457722" type="audio/mpeg" />
<enclosure url="http://www.xaviergodart.com/blog/wp-content/uploads/2008/04/exemple.mp3" length="457722" type="audio/mpeg" />
		</item>
		<item>
		<title>Tuxguitar, la partition libre</title>
		<link>http://www.xaviergodart.com/blog/2008/03/03/tuxguitar-la-partition-libre/</link>
		<comments>http://www.xaviergodart.com/blog/2008/03/03/tuxguitar-la-partition-libre/#comments</comments>
		<pubDate>Mon, 03 Mar 2008 13:01:35 +0000</pubDate>
		<dc:creator>Xavier</dc:creator>
		
		<category><![CDATA[Musique]]></category>

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

		<category><![CDATA[guitar pro]]></category>

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

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

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

		<category><![CDATA[tux guitar]]></category>

		<guid isPermaLink="false">http://xavontheweb.wordpress.com/?p=7</guid>
		<description><![CDATA[Le format le plus courant de partitions / tablatures pour guitaristes et bassistes est sans conteste le format Guitar Pro. Et ça n&#8217;est pas étonnant. Le logiciel permet l&#8217;édition de partitions multipistes et la lecture en midi pour écouter le résultat. C&#8217;est génial pour l&#8217;apprentissage et la composition à plusieurs.
Le problème ? Guitar Pro coute [...]]]></description>
			<content:encoded><![CDATA[<p>Le format le plus courant de partitions / tablatures pour guitaristes et bassistes est sans conteste le format Guitar Pro. Et ça n&#8217;est pas étonnant. Le logiciel permet l&#8217;édition de partitions multipistes et la lecture en midi pour écouter le résultat. C&#8217;est génial pour l&#8217;apprentissage et la composition à plusieurs.</p>
<p>Le problème ? Guitar Pro coute 60 euros et ne tourne que sous Windows.<span id="more-7"></span> Pour se le procurer, deux méthodes :</p>
<ul>
<li>On sort 60 euros de sa poche.</li>
<li>On récupère Guitar Pro illégalement.</li>
</ul>
<p>Heureusement, il existe dans le monde du libre un équivalent, compatible avec le format Guitar Pro et multiplateforme (Windows, MacOS et Linux), j&#8217;ai nommé <a href="http://www.tuxguitar.com.ar" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.tuxguitar.com.ar');">TuxGuitar</a>.</p>
<p>Pour l&#8217;instant, j&#8217;ai réussi à ouvrir tous mes fichiers .gp4 et .gp5 sans problème. Avant l&#8217;installation, vérifiez que vous avez bien les librairies java installées. Sur ubuntu (dépôts Universe et Multiverse) :</p>
<blockquote><p><strong>sudo aptitude install sun-java5-jre libswt3.2-gtk-jni libswt3.2-gtk-java</strong></p></blockquote>
<p>Et ensuite, c&#8217;est par <a href="http://www.tuxguitar.com.ar/download.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.tuxguitar.com.ar/download.html');">là</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xaviergodart.com/blog/2008/03/03/tuxguitar-la-partition-libre/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Cartographiez vos idées</title>
		<link>http://www.xaviergodart.com/blog/2008/02/29/cartographiez-vos-idees/</link>
		<comments>http://www.xaviergodart.com/blog/2008/02/29/cartographiez-vos-idees/#comments</comments>
		<pubDate>Fri, 29 Feb 2008 13:35:11 +0000</pubDate>
		<dc:creator>Xavier</dc:creator>
		
		<category><![CDATA[Divers]]></category>

		<category><![CDATA[cartes heuristiques]]></category>

		<category><![CDATA[gestion des connaissances]]></category>

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

		<category><![CDATA[organisation du travail]]></category>

		<guid isPermaLink="false">http://xavontheweb.wordpress.com/?p=6</guid>
		<description><![CDATA[Les cartes heuristiques (ou mindmaps) sont à la mode en ce moment. Ce n&#8217;est pourtant pas qu&#8217;un simple effet de masse, puisqu&#8217;elles s&#8217;avèrent réellement utiles pour peu qu&#8217;on les utilise correctement.
Mais c&#8217;est quoi d&#8217;abord, ces cartes ?
Leur objectif est simplement  d&#8217;organiser des idées, des concepts sous la forme d&#8217;un schéma avec des nœuds, des [...]]]></description>
			<content:encoded><![CDATA[<p>Les cartes heuristiques (ou mindmaps) sont à la mode en ce moment. Ce n&#8217;est pourtant pas qu&#8217;un simple effet de masse, puisqu&#8217;elles s&#8217;avèrent réellement utiles pour peu qu&#8217;on les utilise correctement.<span id="more-6"></span></p>
<h3>Mais c&#8217;est quoi d&#8217;abord, ces cartes ?</h3>
<p>Leur objectif est simplement  d&#8217;organiser des idées, des concepts sous la forme d&#8217;un schéma avec des nœuds, des sous nœuds, des icônes, des notes etc&#8230; un peu comme on veut.  Comme un exemple vaut mieux qu&#8217;un long discours, <a href="http://sebsauvage.net/logiciels/exemple_mm/xml.png" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://sebsauvage.net/logiciels/exemple_mm/xml.png');">voici une carte trouvée par google image sur le format XML.</a></p>
<h3>Qu&#8217;est-ce que ça apporte concrètement ?</h3>
<p>Il faut savoir que quand notre mémoire à long terme stocke une information, elle stocke également tout le contexte relatif à cette information, dont entre autres, sa forme. Si cette information est stockée avec une représentation formelle et spatiale particulière, son accès sera bien plus aisé. <strong>En clair, on retient mieux et on se souvient mieux.</strong></p>
<h3>Quand les utiliser ?</h3>
<p>Un peu quand on veut au final, lors d&#8217;une scéance de brainstorming, pendant les révisions, pour apprendre à maitriser un sujet mal connu, pour faire des &#8220;to do list&#8221; etc&#8230;</p>
<p>Personnellement, je m&#8217;en sert pour réviser mes cours avant les exams. Je prends les tartines de textes que je suis sensé apprendre et je prends des notes sous forme de carte heuristique que je peux relire jusqu&#8217;au dernier moment. Je trouve que je retiens beaucoup mieux le cours avec cette technique. Je pourrais prendre directement mon cours sous forme de mindmap comme le font certains dans mon entourage, mais en cours j&#8217;ai envi de tout noté et ça donne des choses assez illisibles. Je m&#8217;en sert également pour faire des &#8220;to do list&#8221; (ou liste de choses à faire) pour m&#8217;aider à ne rien oublier.</p>
<h3>Quels logiciels utiliser ?</h3>
<p>Tout d&#8217;abord rien ne vous empêche d&#8217;utiliser du papier et un crayon, ça reste des schémas après tout.  Mais sinon, deux logiciels sortent du lot, à savoir <a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://freemind.sourceforge.net/wiki/index.php/Main_Page');">Freemind</a> (gratuit, compatible Windows et linux) que j&#8217;utilise et qui suffira largement pour beaucoup de gens, et <a href="http://www.mindjet.com/fr/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.mindjet.com/fr/');">MindManager</a>, beaucoup plus complet mais assez cher cette fois.</p>
<p>Pour ce qui est des applications en ligne (qui ont l&#8217;avantage de proposer des options de travail collaboratif), j&#8217;ai testé <a href="http://www.mindmeister.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.mindmeister.com/');" target="_blank">Mindmeister</a>, vraiment très bien fait mais demandera une petite contribution financière pour accéder aux options pratiques (import/export de fichier Freemind ou MindManager par exemple). <a href="http://www.mind42.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.mind42.com/');" target="_blank">Mind42</a> lui est gratuit, mais je ne l&#8217;ai pas testé encore.</p>
<p>EDIT : Après un test rapide, je trouve l&#8217;interface de Mind42 moins jolie que celle de MindMeister. La représentation des cartes est moins lisible, notamment sur les plus grandes. Cela dit, les fonctionnalités principale sont là, avec un bon point sur la fonction de travail collaboratif qui permet d&#8217;inviter des personnes via Google Talk ou Skype. Le tout reste gratuit.</p>
<p>Pour en savoir plus sur les cartes heuristiques :</p>
<p><a href="http://www.petillant.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.petillant.com');" target="_blank">http://www.petillant.com</a><a href="http://www.pierrepilon.com/" target="_blank"><br />
</a><a href="http://www.pierrepilon.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.pierrepilon.com');" target="_blank"> http://www.pierrepilon.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xaviergodart.com/blog/2008/02/29/cartographiez-vos-idees/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

