<?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>Ze Technology &#187; Astuce</title>
	<atom:link href="http://www.ze-technology.com/category/astuce/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ze-technology.com</link>
	<description>Ze Blog qui parle de Ze Technology. Univers du libre, programmation, société, business...</description>
	<lastBuildDate>Sat, 17 Dec 2011 08:35:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Lister des fichiers en python&#8230; avec les fonctions POSIX !</title>
		<link>http://www.ze-technology.com/2010/12/17/lister-des-fichiers-en-python-avec-les-fonctions-posix/</link>
		<comments>http://www.ze-technology.com/2010/12/17/lister-des-fichiers-en-python-avec-les-fonctions-posix/#comments</comments>
		<pubDate>Fri, 17 Dec 2010 20:37:47 +0000</pubDate>
		<dc:creator>Adrien Mogenet</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Tutoriaux]]></category>

		<guid isPermaLink="false">http://www.ze-technology.com/?p=711</guid>
		<description><![CDATA[Je me suis mis depuis quelques mois à Python. Il y a énormément de choses très appréciables dans le langage et sa logique. À vrai dire, plus le temps passe, et moins je lui trouve de points faibles. Sûrement le début d&#8217;une longue série d&#8217;articles, de tous niveaux. Mais en attendant, je vais ici relater [...]]]></description>
			<content:encoded><![CDATA[<p>Je me suis mis depuis quelques mois à Python. Il y a énormément de choses très appréciables dans le langage et sa logique. À vrai dire, plus le temps passe, et moins je lui trouve de points faibles. Sûrement le début d&#8217;une longue série d&#8217;articles, de tous niveaux.</p>
<p>Mais en attendant, je vais ici relater mon premier bout de code un petit peu &laquo;&nbsp;tricky&nbsp;&raquo;. Python propose un lot de méthodes pour accéder aux répertoires/fichiers : os.listdir, walk&#8230;  Mais ces méthodes ont le défaut de retourner une liste construite des éléments. Du coup, lorsque le temps de traitement devient critique, on aimerait bien pouvoir itérer directement sur les descripteurs de fichiers sans attendre une liste de potentiellement 10 000 éléments. Bref, la possibilité d&#8217;accéder aux fonctions Posix <span style="font-family: courier">opendir()</span> et <span style="font-family: courier">readdir()</span>.</p>
<p>Le soucis ? Python ne propose pas ces fonctions. Mais il y a la possibilité d&#8217;accéder à des API du langage C, et dans un environnement Unix, on y retrouve nos chères fonctions si convoitées ! Après avoir étudié cette piste, voilà un snippet fort utile :</p>
<pre class="brush: python; title: ; notranslate">
#!/usr/bin/python
from ctypes import CDLL, c_char_p, c_int, c_long, c_ushort, c_byte, c_char
from ctypes import Structure, POINTER
from ctypes.util import find_library

class c_dir(Structure):
    &quot;&quot;&quot; Defined C struct DIR &quot;&quot;&quot;
    pass

class c_dirent(Structure):
    &quot;&quot;&quot; Directory entry structure equivalent &quot;&quot;&quot;
    _fields_ = (
        ('d_ino', c_long),  # inode number
        ('d_off', c_long),  # offset to the next dirent
        ('d_reclen', c_ushort), # length of this record
        ('d_type', c_byte),  # type of files; os specific
        ('d_name', c_char * 4096) # filename
        )

c_dirent_p = POINTER(c_dirent)
c_dir_p = POINTER(c_dir)
c_lib = CDLL(find_library(&quot;c&quot;))

opendir = c_lib.opendir
opendir.argtypes = [c_char_p]
opendir.restype = c_dir_p

readdir = c_lib.readdir_r
readdir.argtypes = [c_dir_p]
readdir.restype = c_dirent_p

closedir = c_lib.closedir
closedir.argtypes = [c_dir_p]
closedir.restype = c_int

def listdir(path):
    &quot;&quot;&quot;
    A generator to return the names of files in the directory passed in
    &quot;&quot;&quot;
    dir_p = opendir(&quot;.&quot;)
    try:
        while True:
            p = readdir(dir_p)
            if not p:
                break
            yield p.contents.d_name
    finally:
        closedir(dir_p)
</pre>
<p>Attention, <span style="font-family: courier">listdir()</span> retournera les répertoires &laquo;&nbsp;.&nbsp;&raquo; et &laquo;&nbsp;..&nbsp;&raquo; ! Notez l&#8217;utilisation du <span style="font-family: courier">yield</span> pour définir ici un générateur (sujet d&#8217;un autre article). De ce fait, notre fonction s&#8217;utilise comme cela :</p>
<pre class="brush: python; title: ; notranslate">
if __name__ == &quot;__main__&quot;:
    for name in listdir(&quot;.&quot;):
        print name
</pre>
<p>En espérant que ça puisse servir à quelqu&#8217;un d&#8217;autre&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ze-technology.com/2010/12/17/lister-des-fichiers-en-python-avec-les-fonctions-posix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Supprimer toutes les Foreign Keys non nommées</title>
		<link>http://www.ze-technology.com/2009/12/05/supprimer-toutes-les-foreign-keys-non-nommees/</link>
		<comments>http://www.ze-technology.com/2009/12/05/supprimer-toutes-les-foreign-keys-non-nommees/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 23:45:34 +0000</pubDate>
		<dc:creator>Adrien Mogenet</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[Mysql]]></category>

		<guid isPermaLink="false">http://www.ze-technology.com/?p=529</guid>
		<description><![CDATA[Aux débuts de Piwam, les relations décrites dans le fichier schema.yml n&#8217;étaient pas nommées explicitement. Du coup, lors de la génération du schmilblick par Propel (Model + SQL), c&#8217;est InnoDB qui s&#8217;occupait de trouver un nom à ces relations. Aujourd&#8217;hui, j&#8217;écris le script permettant de migrer de Piwam 1.1.2 vers Piwam 1.2, script qui nécessite [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-530" title="fk_breaker" src="http://www.ze-technology.com/wp-content/uploads/2009/12/fk_breaker.jpg" alt="fk_breaker" width="600" height="100" /></p>
<p>Aux débuts de <a href="http://www.piwam.org">Piwam</a>, les relations décrites dans le fichier schema.yml n&#8217;étaient pas nommées explicitement. Du coup, lors de la génération du <em>schmilblick</em> par <a href="http://propel.phpdb.org/">Propel</a> (Model + SQL), c&#8217;est <a href="http://www.innodb.com/">InnoDB</a> qui s&#8217;occupait de trouver un nom à ces relations.</p>
<p>Aujourd&#8217;hui, j&#8217;écris le script permettant de migrer de <a href="http://www.piwam.org">Piwam</a> 1.1.2 vers <a href="http://www.piwam.org">Piwam</a> 1.2, script qui nécessite d&#8217;effectuer des opérations sur des <a href="http://fr.wikipedia.org/wiki/Cl%C3%A9_%C3%A9trang%C3%A8re"><em>foreign keys</em></a>, en l&#8217;occurence les supprimer&#8230; Comment diable alors faire référence à une clé étrangère dont on ne connait pas le nom ? Après avoir farfouillé partout sur la toile, il apparaît qu&#8217;il n&#8217;y a pas moult solutions pour arriver à mes fins. On se retrouve ainsi soit à écrire des procédures, soit à faire appel à l&#8217;<span style="font-family: courier">information_schema</span>. Enfin, certains proposent une utilisation de <span style="font-family: courier">SHOW TABLE</span> avec les arguments qui vont bien, puis parser la sortie pour récupérer les noms des contraintes. J&#8217;ai pu par ailleurs découvrir la version <a href="http://fr.wikipedia.org/wiki/Firebird_%28SGBDR%29">Firebird</a> :</p>
<p><code>SELECT RDB$CONSTRAINT_NAME<br />
FROM RDB$RELATION_CONSTRAINTS<br />
WHERE RDB$CONSTRAINT_NAME LIKE 'FK%' AND<br />
RDB$RELATION_NAME='MATABLEAMOI'<br />
ORDER BY RDB$CONSTRAINT_NAME</code></p>
<p>Ne pouvant exécuter de requêtes propres à Firebird, ni même de procédures (<a href="http://www.piwam.org">Piwam</a> tourne sous trop de types de serveurs différents aux configurations et autorisations bien différentes), j&#8217;ai finalement opté pour une solution ma foi fort simple. Accrochez-vous, c&#8217;est du SQL de très <span style="text-decoration: line-through;">haut</span> niveau (hum&#8230;).</p>
<p><code>CREATE TABLE ma_table_copy AS SELECT * FROM ma_table;</code></p>
<p>Une copie réalisée de la sorte a pour effet de ne copier que la structure et la table, en omettant indexes et contraintes. Lent, mais <strong>portable</strong> (je ne sais pas si l&#8217;adjectif est vraiment adapté) et <strong>pratique</strong>. Tout ça pour dire, bordel, une bonne fois pour toutes, n&#8217;oubliez pas de nommer vos contraintes <strong>explicitement</strong>, ça facilite grandement la maintenance !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ze-technology.com/2009/12/05/supprimer-toutes-les-foreign-keys-non-nommees/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MacOSX : Affichage des dossiers dans Quick Look</title>
		<link>http://www.ze-technology.com/2009/10/01/macosx-affichage-des-dossiers-dans-quick-look/</link>
		<comments>http://www.ze-technology.com/2009/10/01/macosx-affichage-des-dossiers-dans-quick-look/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 08:17:01 +0000</pubDate>
		<dc:creator>Adrien Mogenet</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[MacOSX]]></category>

		<guid isPermaLink="false">http://www.ze-technology.com/?p=342</guid>
		<description><![CDATA[Petite astuce trouvée récemment, certainement pas vitale mais toujours pratique, pour les utilisateurs de MacOSX &#62;= 10.5. Pour avoir un affichage un peu plus classe des répertoires par Quick Look, ouvrez un terminal et tapez les 2 commandes suivantes : &#62; defaults write com.apple.finder QLEnableXRayFolders 1 &#62; killall Finder Voilà de quoi s&#8217;affranchir du simpliste [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-343" title="Quicklook" src="http://www.ze-technology.com/wp-content/uploads/2009/10/Capture-d’écran-2009-10-01-à-10.10.46.png" alt="Quicklook" width="599" height="348" />Petite astuce trouvée récemment, certainement pas vitale mais toujours pratique, pour les utilisateurs de MacOSX &gt;= 10.5. Pour avoir un affichage un peu plus classe des répertoires par Quick Look, ouvrez un terminal et tapez les 2 commandes suivantes :<br />
<code>&gt; defaults write com.apple.finder QLEnableXRayFolders 1<br />
&gt; killall Finder</code><br />
Voilà de quoi s&#8217;affranchir du simpliste affichage par défaut !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ze-technology.com/2009/10/01/macosx-affichage-des-dossiers-dans-quick-look/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Corriger l&#8217;effet &#171;&#160;Rolling Shutter&#160;&#187; des Nikon D300s, D90, Canon 5D&#8230;</title>
		<link>http://www.ze-technology.com/2009/08/24/corriger-leffet-rolling-shutter-des-nikon-300s-d90-canon-5d/</link>
		<comments>http://www.ze-technology.com/2009/08/24/corriger-leffet-rolling-shutter-des-nikon-300s-d90-canon-5d/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 06:00:26 +0000</pubDate>
		<dc:creator>Adrien Mogenet</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Photo]]></category>

		<guid isPermaLink="false">http://www.ze-technology.com/?p=170</guid>
		<description><![CDATA[Chase Jarvis a eu la bonne idée de présenter des outils adapté à la correction d&#8217;un phénomène bien trop visible lorsque des enregistrement de vidéos sur les appareils munis de capteurs CMOS. Ce phénomène est dû au fonctionnement de l&#8217;enregistrement, qui se fait verticalement, ligne par ligne. De ce fait, filmer un objet ou une [...]]]></description>
			<content:encoded><![CDATA[<p>Chase Jarvis a eu la bonne idée de présenter des outils adapté à la correction d&#8217;un phénomène bien trop visible lorsque des enregistrement de vidéos sur les appareils munis de capteurs CMOS.</p>
<p>Ce phénomène est dû au fonctionnement de l&#8217;enregistrement, qui se fait verticalement, ligne par ligne. De ce fait, filmer un objet ou une scène en mouvement donne un rendu étrange, comme si le vidéaste en herbe filmait après avoir descendu une bonne bouteille.</p>
<p style="text-align: center;"><img class="size-full wp-image-173  aligncenter" title="Rolling Shutter" src="http://www.ze-technology.com/wp-content/uploads/2009/08/Rolling-Shutter.png" alt="Le Rolling Shutter en action" width="447" height="182" /></p>
<p>La solution présentée ici permet, vous allez le voir, de corriger cet effet sur une scène globale, ou d&#8217;appliquer cette correction à seulement un objet, déterminé comme un mouvement par rapport à une scène globale.</p>
<p style="text-align: center;">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/Zt0u9hsPuZY&amp;hl=fr&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/Zt0u9hsPuZY&amp;hl=fr&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object>
</p>
<p><a href="http://blog.chasejarvis.com/blog/2009/08/correct-rolling-shutter-from-nikon.html">Source</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ze-technology.com/2009/08/24/corriger-leffet-rolling-shutter-des-nikon-300s-d90-canon-5d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Augmenter la taille d&#8217;un disque VDI sous VirtualBox</title>
		<link>http://www.ze-technology.com/2009/08/16/augmenter-la-taille-dun-disque-vdi-sous-virtualbox/</link>
		<comments>http://www.ze-technology.com/2009/08/16/augmenter-la-taille-dun-disque-vdi-sous-virtualbox/#comments</comments>
		<pubDate>Sat, 15 Aug 2009 22:17:18 +0000</pubDate>
		<dc:creator>Adrien Mogenet</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Sun]]></category>

		<guid isPermaLink="false">http://www.ze-technology.com/?p=156</guid>
		<description><![CDATA[Si vous utilisez VirtualBox, et que vous avez besoin de plus d&#8217;espace pour votre système émulé puisse évoluer correctement, vous avez sans doute constater que non, il n&#8217;y a pas de resizer automagique permettant d&#8217;augmenter la taille du disque virtuel VDI. Il existe néanmoins une petite astuce qui sert de solution, et qui se résume [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-158" title="VBoxManage clonevdi" src="http://www.ze-technology.com/wp-content/uploads/2009/08/Screenshot-15_08_2009-23_56_45.png" alt="VBoxManage clonevdi" width="546" height="177" /></p>
<p>Si vous utilisez <em>VirtualBox</em>, et que vous avez besoin de plus d&#8217;espace pour votre système émulé puisse évoluer correctement, vous avez sans doute constater que non, il n&#8217;y a pas de <em>resizer</em> automagique permettant d&#8217;augmenter la taille du disque virtuel VDI.</p>
<p>Il existe néanmoins une petite astuce qui sert de solution, et qui se résume en 2 étapes :</p>
<ol>
<li>Créez un nouveau disque virtuel, plus grand</li>
<li>Clonez l&#8217;ancien disque VDI dans le nouveau, grâce à l&#8217;outil &laquo;&nbsp;VBoxManage&nbsp;&raquo;. Concrêtement, la commande ressemble à cela :</li>
<pre>VBoxManage clonevdi /path/to/firstDisk.vdi --existing /path/to/bigDisk.vdi</pre>
</ol>
<p>Et voilà, il ne vous reste plus qu&#8217;à virtualo-brancher votre nouveau grand disque ! N&#8217;oubliez pas cependant que pour le système virtualisé, la taille de la <strong>partition </strong>(et non du disque) est toujours la même, il vous faudra donc sûrement agrandir la dite partition.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ze-technology.com/2009/08/16/augmenter-la-taille-dun-disque-vdi-sous-virtualbox/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Chez Philips, qui peut le moins&#8230; peut le moins !</title>
		<link>http://www.ze-technology.com/2009/07/19/chez-philips-qui-peut-le-moins-peut-le-moins/</link>
		<comments>http://www.ze-technology.com/2009/07/19/chez-philips-qui-peut-le-moins-peut-le-moins/#comments</comments>
		<pubDate>Sun, 19 Jul 2009 21:24:37 +0000</pubDate>
		<dc:creator>Adrien Mogenet</dc:creator>
				<category><![CDATA[Astuce]]></category>

		<guid isPermaLink="false">http://www.ze-technology.com/?p=131</guid>
		<description><![CDATA[Propriétaire d&#8217;un téléviseur LCD de marque Philips, je constate que ce dernier possède un port USB sur le côté. &#171;&#160;Chouette !&#160;&#187;, je dis-je, &#171;&#160;je vais pouvoir aisément regarder mes vidéos sans brancher le PC&#171;&#160;.  Sauf que&#8230; Sauf qu&#8217;une fois le disque dur branché, le menu propose seulement &#171;&#160;pictures&#160;&#187; et &#171;&#160;music&#171;&#160;. Pas de menu &#171;&#160;videos&#160;&#187; ou [...]]]></description>
			<content:encoded><![CDATA[<p>Propriétaire d&#8217;un téléviseur LCD de marque <em>Philips</em>, je constate que ce dernier possède un port USB sur le côté. &laquo;&nbsp;<em>Chouette </em>!&nbsp;&raquo;, je dis-je, &laquo;&nbsp;<em>je vais pouvoir aisément regarder mes vidéos sans brancher le PC</em>&laquo;&nbsp;.  Sauf que&#8230;</p>
<p><img class="aligncenter" title="Téléviseur Philips" src="http://g-ecx.images-amazon.com/images/G/08/products/electronics/misc/page_produits/Philips2-42PFL7603H.gif" alt="" width="300" height="303" />Sauf qu&#8217;une fois le disque dur branché, le menu propose seulement &laquo;&nbsp;<em>pictures</em>&nbsp;&raquo; et &laquo;&nbsp;<em>music</em>&laquo;&nbsp;. Pas de menu &laquo;&nbsp;<em>videos</em>&nbsp;&raquo; ou &laquo;&nbsp;<em>movies</em>&laquo;&nbsp;. Curieux&#8230; Après quelques recherches, il apparaît qu&#8217;il existe une astuce&#8230;  La plupart des récents modèles de TV LCD de la marque sont en effet capables de lire des vidéos au format <em>MPEG-1</em> et<em> MPEG-2</em>, mais <em>Philips </em>a semble-t-il décidé que ce n&#8217;était pas bon d&#8217;en faire profiter les utilisateurs.</p>
<p>Comment diable contourner cette restriction ? Customiser le firmware ? Peut être. Mais il existe une astuce beaucoup plus simple. Plus qu&#8217;une astuce, c&#8217;est un véritable <em>easter-egg</em>. Un de ces trucs cachés qui vous rendent fou. Il suffit en effet de nommer le fichier vidéo à lire (encodé en <em>MPEG</em>) avec le nom de fichier <span style="font-family: courier">SuperShopDemo.mpg</span> (respectez les majuscules). Une fois le périphérique USB branché sur le téléviseur, la magie opère&#8230; la vidéo se lance automatiquement. Une fonctionnalité sûrement laissée à l&#8217;intention des vendeurs, dont on ne souhaiterait pas faire profiter les acheteurs&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ze-technology.com/2009/07/19/chez-philips-qui-peut-le-moins-peut-le-moins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Le saviez-vous ? Google Reader &#171;&#160;Light&#160;&#187;</title>
		<link>http://www.ze-technology.com/2009/07/05/le-saviez-vous-google-reader-light/</link>
		<comments>http://www.ze-technology.com/2009/07/05/le-saviez-vous-google-reader-light/#comments</comments>
		<pubDate>Sun, 05 Jul 2009 12:50:12 +0000</pubDate>
		<dc:creator>Adrien Mogenet</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://www.ze-technology.com/?p=91</guid>
		<description><![CDATA[Et oui&#8230; il existe maintenant une version light du lecteur de flux RSS de Google. Ce dernier se résume à une chose : lire les news. Pour tester cette version, un petit tour sur google.com/reader/lite/]]></description>
			<content:encoded><![CDATA[<p>Et oui&#8230; il existe maintenant une version <em>light</em> du lecteur de flux RSS de Google. Ce dernier se résume à une chose : lire les news. Pour tester cette version, un petit tour sur <a href="http://www.google.com/reader/lite/">google.com/reader/lite/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ze-technology.com/2009/07/05/le-saviez-vous-google-reader-light/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tests fonctionnels avec Symfony : gérer l&#8217;identification</title>
		<link>http://www.ze-technology.com/2009/06/05/tests-fonctionnels-avec-symfony-gerer-lidentification/</link>
		<comments>http://www.ze-technology.com/2009/06/05/tests-fonctionnels-avec-symfony-gerer-lidentification/#comments</comments>
		<pubDate>Fri, 05 Jun 2009 18:49:00 +0000</pubDate>
		<dc:creator>Adrien Mogenet</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://adrien.frenchcomp.net/blog/?p=44</guid>
		<description><![CDATA[Ça y&#8217;est, vous êtes en train d&#8217;écrire vos tests fonctionnels pour votre application symfony. MAIS votre application &#8211; ou une partie &#8211; nécessite une identification de la part de l&#8217;utilisateur. Il y a bien sûr la solution qui consiste à systématiquement remplir le formulaire dans chaque fichier de test. Je vous présente ici une solution [...]]]></description>
			<content:encoded><![CDATA[<p>Ça y&#8217;est, vous êtes en train d&#8217;écrire vos  tests fonctionnels pour votre application <a href="http://symfony-project.com">symfony</a>. MAIS votre application &#8211; ou une partie &#8211; nécessite une identification de la part de l&#8217;utilisateur. Il y a bien sûr la solution qui consiste à systématiquement remplir le formulaire dans chaque fichier de test.</p>
<p>Je vous présente ici une solution pour palier à cela. La solution consiste à étendre la classe <span style="font-family:courier new;">sfTestFunctional </span>du framework. Ce qui donne, par exemple :</p>
<pre class="brush: php; title: ; notranslate">class sfGuardTestFunctional extends sfTestFunctional
{
 public function __construct($browser, $lime = null, $testers = array())
 {
   parent::__construct($browser, $lime, $testers);
   $this-&gt;signin(array('username' =&gt; 'foo', 'password' =&gt; 'bar'));
 }

 /**
  * Perform user authentication
  *
  * @param   array of String         $user_data
  * @return  sfGuardTestFunctional   $this
  */
 public function signin($user_data)
 {
   return $this-&gt;info(sprintf('Login as &quot;%s&quot;', $user_data['username']))-&gt;
          get('/admin/login')-&gt;
          click(&quot;S'identifier&quot;, array('login' =&gt; $user_data))-&gt;

          with('form')-&gt;begin()-&gt;
            hasErrors(false)-&gt;
          end()-&gt;

          with('user')-&gt;begin()-&gt;
            isCulture('fr_FR')-&gt;
            isAuthenticated(true)-&gt;
          end()-&gt;

          with('request')-&amp;gt;begin()-&gt;
            isParameter('module', 'admin')-&gt;
            isParameter('action', 'login')-&gt;
          end()-&gt;

         isRedirected()-&gt;
         followRedirect();
 }
}
</pre>
<p>De cette manière, dans votre fichier de test il vous suffira d&#8217;instancier votre browser avec votre nouvelle classe :</p>
<pre class="brush: php; title: ; notranslate">$browser = new sfGuardTestFunctional(new sfBrowser('my_vhost'));</pre>
<p>Et voilà, vous pouvez vous considérer comme identifié et écrire directement vos tests fonctionnels ! La solution présentée ici est minimale, la mise en forme du code PHP avec Blogspot n&#8217;étant pas des meilleure et votre motivation étant sans doute plus grande à déchiffrer 20 lignes de code plutôt que 42.</p>
<p><a href="http://1.bp.blogspot.com/_usAVPNOHnaM/SilvxD1h7QI/AAAAAAAAACA/znbCD1oQxNI/s1600-h/Image+11.png"><img id="BLOGGER_PHOTO_ID_5343925321485905154" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 203px;" src="http://1.bp.blogspot.com/_usAVPNOHnaM/SilvxD1h7QI/AAAAAAAAACA/znbCD1oQxNI/s400/Image+11.png" border="0" alt="" /></a>Une petite mise en oeuvre de ce cette classe, mise en place au sein de <a href="http://www.piwam.org">Piwam</a>. L&#8217;exemple est destiné à la version <span style="font-family:courier new;">1.2</span> du framework..</p>
<ul>
<li><a href="http://www.symfony-project.org/jobeet/1_2/Propel/en/09">Tests fonctionnels avec <a href="http://symfony-project.com">symfony</a> 1.2 et Propel</a></li>
<li><a href="http://www.symfony-project.org/jobeet/1_2/Doctrine/en/09">Tests fonctionnels avec <a href="http://symfony-project.com">symfony</a> 1.2 et Doctrine</a></li>
<li><a href="http://www.symfony-project.org/api/1_2/sfTestFunctional">API <a href="http://symfony-project.com">symfony</a> : sfTestFunctional</a></li>
<li><a href="http://www.symfony-project.org/book/1_2/15-Unit-and-Functional-Testing">Tests unitaires et fonctionnels avec <a href="http://symfony-project.com">symfony</a> 1.2</a></li>
</ul>
<div class="blogger-post-footer"><img src="https://blogger.googleusercontent.com/tracker/1394095790770446638-2611139542033561586?l=ze-technology.blogspot.com" alt="" width="1" height="1" /></div>
]]></content:encoded>
			<wfw:commentRss>http://www.ze-technology.com/2009/06/05/tests-fonctionnels-avec-symfony-gerer-lidentification/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Les champs de type DECIMAL dans Symfony</title>
		<link>http://www.ze-technology.com/2009/06/01/les-champs-de-type-decimal-dans-symfony/</link>
		<comments>http://www.ze-technology.com/2009/06/01/les-champs-de-type-decimal-dans-symfony/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 21:57:00 +0000</pubDate>
		<dc:creator>Adrien Mogenet</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://adrien.frenchcomp.net/blog/?p=43</guid>
		<description><![CDATA[C&#8217;est un point très mal explicité dans la documentation de symfony. Lorsque vous être en train de concevoir votre schéma au sein du fichier eponyme &#8211; schema.yml -, vous aimeriez bien avoir le contrôle de vos champs de type DECIMAL, non ? La documentation n&#8217;étant pas très bavarde, peut être comme moi vous contentiez vous [...]]]></description>
			<content:encoded><![CDATA[<p>C&#8217;est un point très mal explicité dans la documentation de <a href="http://symfony-project.com">symfony</a>. Lorsque vous être en train de concevoir votre schéma au sein du fichier eponyme &#8211; <span style="font-family:courier new;">schema.yml</span> -, vous aimeriez bien avoir le contrôle de vos champs de type <span style="font-family:courier new;">DECIMAL</span>, non ?</p>
<p>La documentation n&#8217;étant pas très bavarde, peut être comme moi vous contentiez vous d&#8217;indiquer :</p>
<pre class="code">amount:   { type: decimal }</pre>
<p>Pour exécuter ensuite des requêtes SQL bien placées pour modifier ce ce champ et lui affecter par exemple un stockage de 3 chiffres après la virgule. Je n&#8217;avais pas trouvé la réponse immédiatement, mais après un petit tour <span style="font-style: italic;">On Ze Ouaib</span>, j&#8217;ai enfin déniché ce qui me manquait :</p>
<pre class="code">amount:  { type : decimal, size: 8, scale: 2 }</pre>
<p>Pour un champ de type <span style="font-family:courier new;">DECIMAL(8,2)</span>. Reste plus qu&#8217;à compléter la documentation <a href="http://symfony-project.com">symfony</a>&#8230;
<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1394095790770446638-1615237902093902739?l=ze-technology.blogspot.com'/></div>
]]></content:encoded>
			<wfw:commentRss>http://www.ze-technology.com/2009/06/01/les-champs-de-type-decimal-dans-symfony/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Des raccourcis qui ne s&#8217;Eclipse pas&#8230;</title>
		<link>http://www.ze-technology.com/2009/05/26/des-raccourcis-qui-ne-seclipse-pas/</link>
		<comments>http://www.ze-technology.com/2009/05/26/des-raccourcis-qui-ne-seclipse-pas/#comments</comments>
		<pubDate>Tue, 26 May 2009 16:39:00 +0000</pubDate>
		<dc:creator>Adrien Mogenet</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Sun]]></category>

		<guid isPermaLink="false">http://adrien.frenchcomp.net/blog/?p=39</guid>
		<description><![CDATA[Eclipse est un outil fabuleux. Complet. Rapide. Puissant. Ne faîtes pas attention au mot rayé. Bien utililsé, cet IDE libre peut rapidement montrer une puissance décuplée. Je ne pense pas utiliser Eclipse à 100%, ni même à 75%, néanmoins j&#8217;utilise un certain nombre de raccourcis, et je suis surpris de voir que bon nombre de [...]]]></description>
			<content:encoded><![CDATA[<p>Eclipse est un outil fabuleux. Complet. <strike>Rapide</strike>. Puissant. Ne faîtes pas attention au mot rayé. Bien utililsé, cet IDE libre peut <span style="font-style: italic;font-family:georgia;" >rapidement</span> montrer une puissance décuplée. Je ne pense pas utiliser Eclipse à 100%, ni même à 75%, néanmoins j&#8217;utilise un certain nombre de raccourcis, et je suis surpris de voir que bon nombre de personnes ne s&#8217;en servent pas &#8211; sûrement par méconnaissance.</p>
<p><a href="http://2.bp.blogspot.com/__k3GJNKh0Jk/SToo-VSc8eI/AAAAAAAAAMc/mR6MkqlczoQ/s320/eclipse_ide.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 222px; height: 146px;" src="http://2.bp.blogspot.com/__k3GJNKh0Jk/SToo-VSc8eI/AAAAAAAAAMc/mR6MkqlczoQ/s320/eclipse_ide.jpg" alt="" border="0" /></a>Une petite compilation de mes combinaisons de touches préférées :</p>
<ul>
<li><span style="font-weight: bold; color: rgb(153, 51, 153);">Ctrl</span><span style="color: rgb(153, 51, 153);"> (ou Pomme) + </span><span style="font-weight: bold; color: rgb(153, 51, 153);">Shift + R</span><span style="color: rgb(153, 51, 153);"> : Ouvrir une ressource</span><br />
C&#8217;est la combinaison que j&#8217;utilise toutes les 30 secondes. Un panneau s&#8217;ouvre, et vous pouvez accéder à vos différents fichiers, plutôt que d&#8217;aller chercher une souris, de cliquer partout pour ouvrir le bon répertoire puis enfin de double cliquer sur un nom de fichier (avec un peu de chance, pas le bon).</p>
</li>
<li><span style="font-weight: bold; color: rgb(153, 51, 153);">Ctrl + Shift + F</span><span style="color: rgb(153, 51, 153);"> : Formatter le code source</span><br />
Quoi ? Vous ne connaissiez pas ? Impossible&#8230;  Un petit coup de <span style="font-style: italic;">formatter</span> magique, et hop, un code tout propre ! Dans la pratique, je trouve le formattage HTML un peu étrange, même une fois personnalisé. Mais pour ce qui est des autres langages, c&#8217;est du bonheur. Si vous n&#8217;aimez pas le <span style="font-style: italic;font-family:georgia;" >formatter </span>par défaut, il est bien sûr configurable !</p>
</li>
<li><span style="font-weight: bold; color: rgb(153, 51, 153);">Alt + Entrée</span><span style="color: rgb(153, 51, 153);"> : Afficher les propriétés</span><br />
À effectuer sur une ressource (dans l&#8217;onglet explorer typiquement). Vous permet d&#8217;afficher le volet de propriétés de la ressource sélectionnée. Fini les clics droits qui mènent à un menu contextuel infiniment long.</p>
</li>
<li><span style="font-weight: bold; color: rgb(153, 51, 153);">Ctrl + M</span><span style="color: rgb(153, 51, 153);"> : Maximiser / Réduire</span><br />
Un raccourci surtout utile pour ceux qui utilisent un petit Netbook, ou pour ceux qui travaillent sur des fichiers larges, dépassant allègrement disons les 120 colonnes. Une combinaison assez simple qui peut rendre le développement plus agréable.</p>
</li>
<li><span style="font-weight: bold; color: rgb(153, 51, 153);">Ctrl + H</span><span style="color: rgb(153, 51, 153);"> : Le super chercheur de la mort</span><br />
Sûrement le plus connu de tous&#8230; (?) Une sorte de <span style="font-style: italic;font-family:georgia;" >Ctrl + F</span> magique, un mega-chercheur-trouveur. Vous permet d&#8217;effectuer une recherche sur une ressource complète (projet, repertoire, seulement certains fichiers, etc&#8230;)</li>
</ul>
<p>J&#8217;espère que cette courte liste sera à même de vous servir au quotidien. Si vous utilisez vous même d&#8217;autres raccourcis non mentionnés faîtes le savoir !
<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1394095790770446638-1799693084102662209?l=ze-technology.blogspot.com'/></div>
]]></content:encoded>
			<wfw:commentRss>http://www.ze-technology.com/2009/05/26/des-raccourcis-qui-ne-seclipse-pas/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

