<?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>Florent Gallaire&#039;s Blog</title>
	<atom:link href="http://fgallaire.flext.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://fgallaire.flext.net</link>
	<description>Free (libre) software and free (libre) culture (science and law)</description>
	<lastBuildDate>Wed, 18 Apr 2012 02:46:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Prince of Persia libéré !</title>
		<link>http://fgallaire.flext.net/prince-of-persia-libere/</link>
		<comments>http://fgallaire.flext.net/prince-of-persia-libere/#comments</comments>
		<pubDate>Wed, 18 Apr 2012 00:58:03 +0000</pubDate>
		<dc:creator>fgallaire</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Droit]]></category>
		<category><![CDATA[Jeux Vidéo]]></category>
		<category><![CDATA[Libre]]></category>
		<category><![CDATA[POP]]></category>
		<category><![CDATA[Prince of Persia]]></category>

		<guid isPermaLink="false">http://fgallaire.flext.net/?p=2163</guid>
		<description><![CDATA[Prince of Persia est un jeu vidéo culte qui a réellement marqué l'histoire des jeux vidéo, en particulier pour son innovante technique d'animation rotoscopique. Or sa version originelle, sortie sur Apple II en 1989, vient d'être libérée par Jordan Mechner.

C'est son père qui, il y a trois semaines, en faisant du rangement, a retrouvé dans un ...]]></description>
			<content:encoded><![CDATA[<p><a href="http://fr.wikipedia.org/wiki/Prince_of_Persia_(s%C3%A9rie)" target="_blank">Prince of Persia</a> est un jeu vidéo culte qui a réellement marqué l&#8217;histoire des jeux vidéo, en particulier pour son <a href="http://www.youtube.com/watch?v=gC3WEwSJoHs" target="_blank">innovante technique</a> d&#8217;<a href="http://fr.wikipedia.org/wiki/Rotoscopie" target="_blank">animation rotoscopique</a>. Or sa version originelle, sortie sur <a href="http://fr.wikipedia.org/wiki/Apple_II" target="_blank">Apple II</a> en 1989, vient d&#8217;<a href="http://jordanmechner.com/blog/2012/04/textfiles/" target="_blank">être libérée</a> par <a href="http://fr.wikipedia.org/wiki/Jordan_Mechner" target="_blank">Jordan Mechner</a>.</p>
<p style="text-align: center;"><a href="http://www.ordiretro.fr/blog/wp-content/uploads/2011/02/prince_of_persia2.gif"><img class="aligncenter" title="Prince of Persia" src="http://www.ordiretro.fr/blog/wp-content/uploads/2011/02/prince_of_persia2.gif" alt="" width="415" height="259" /></a></p>
<p>C&#8217;est son père qui, il y a trois semaines, en faisant du rangement, a retrouvé dans un carton trois vieilles <a href="http://fr.wikipedia.org/wiki/Disquette" target="_blank">disquettes</a> 3.5&#8243;, âgées de plus de 20 ans, dans lesquelles se trouvait encore <a href="http://jordanmechner.com/blog/2012/03/prince-of-persia-source-code-found/" target="_blank">le précieux code source du jeu</a>.</p>
<p style="text-align: center;"><a href="http://jordanmechner.com/wp-content/uploads/2012/03/photo.jpeg"><img class="aligncenter" title="Disquette Prince of Persia" src="http://jordanmechner.com/wp-content/uploads/2012/03/photo.jpeg" alt="" width="387" height="290" /></a></p>
<p>Le code source, qui est maintenant <a href="https://github.com/jmechner/Prince-of-Persia-Apple-II" target="_blank">disponible sur GitHub</a>, est de l&#8217;assembleur pour <a href="http://fr.wikipedia.org/wiki/MOS_Technology_6502" target="_blank">6502</a>, un processeur utilisé sur une très grande variété de machines différentes, ce qui laisse pas mal d&#8217;espoir de voir apparaître de nouveaux portages. La riche <a href="http://jordanmechner.com/wp-content/uploads/1989/10/popsource009.pdf" target="_blank">documentation technique</a>, fournie à l&#8217;époque par Jordan pour aider les développeurs effectuant les portages commerciaux, devrait alors être encore une fois d&#8217;un grand secours.</p>
<p>La disponibilité du code source rend les choses beaucoup plus simples, bien que la programmation en assembleur puisse paraître effrayante pour beaucoup de programmeurs &#8220;modernes&#8221;, et évite d&#8217;avoir recours au <a href="http://fr.wikipedia.org/wiki/R%C3%A9tro-ing%C3%A9nierie" target="_blank">reverse engineering</a> comme lors du superbe travail de portage de Prince of Persia sur <a href="http://popc64.blogspot.se/2011/10/prince-of-persia-for-commodore-64128.html" target="_blank">Commodore 64</a>, économisant ainsi beaucoup d&#8217;énergie et de talent.</p>
<p>Le choix de la licence utilisée n&#8217;est pas encore très clair, Jordan indiquant juste dans le README:</p>
<blockquote><p>We did this for fun, not profit. As the author and copyright holder of this source code, I personally have no problem with anyone studying it, modifying it, attempting to run it, etc. Please understand that this does NOT constitute a grant of rights of any kind in Prince of Persia, which is an ongoing Ubisoft game franchise. Ubisoft alone has the right to make and distribute Prince of Persia games.</p></blockquote>
<p>Je lui ai demandé des précisions sur <a href="https://twitter.com/#!/jmechner" target="_blank">son Twitter</a>, moyen de communication qu&#8217;il semble privilégier, et j&#8217;espère qu&#8217;il répondra rapidement. En attendant, vous pouvez toujours jouer au clone Flash de POP :</p>

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_prince-of-persia_1224379105"
			class="flashmovie"
			width="420"
			height="300">
	<param name="movie" value="http://91.121.199.16/1980-games/flash4/jeux-action/jeux-flash/prince-of-persia.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://91.121.199.16/1980-games/flash4/jeux-action/jeux-flash/prince-of-persia.swf"
			name="fm_prince-of-persia_1224379105"
			width="420"
			height="300">
	<!--<![endif]-->
		
<p>Flash n&#8217;est pas installé ? Tant mieux !</p>

	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p>Et ainsi réfléchir aux Ghz de CPU et aux Go de RAM que vous utilisez, alors que la version dont on a aujourd&#8217;hui le code source faisait que le Mhz du 6502 et ses quelques Ko de RAM suffisaient à obtenir le même résultat.</p>
<p>À l&#8217;époque où un jeu vidéo était une <a href="http://jordanmechner.com/wp-content/uploads/resources/POP_sample.pdf" target="_blank">œuvre indissociable de son développeur</a>, inventeur aussi bien de l&#8217;idée originale que du scénario, créateur aussi bien du code source que des graphismes ; et où chaque instruction assembleur utilisée était un trésor d&#8217;optimisation de code (<em><a href="https://fr.wikiquote.org/wiki/Linus_Torvalds" target="_blank">when men were men and wrote their own device drivers</a></em>)&#8230;</p>
<p class="wp-flattr-button"></p> <p><a href="http://fgallaire.flext.net/?flattrss_redirect&amp;id=2163&amp;md5=27138afdae18c38199631cf664e5b42e" title="Flattr" target="_blank"><img src="http://fgallaire.flext.net/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://fgallaire.flext.net/prince-of-persia-libere/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Zack 3.0</title>
		<link>http://fgallaire.flext.net/zack-3-0/</link>
		<comments>http://fgallaire.flext.net/zack-3-0/#comments</comments>
		<pubDate>Sun, 15 Apr 2012 15:46:06 +0000</pubDate>
		<dc:creator>fgallaire</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[DPL]]></category>
		<category><![CDATA[Libre]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Stefano Zacchiroli]]></category>
		<category><![CDATA[Zack]]></category>

		<guid isPermaLink="false">http://fgallaire.flext.net/?p=2143</guid>
		<description><![CDATA[Stefano Zacchiroli (Zack) vient d’être re-réélu Debian Project Leader.

Il devance très largement Wouter Verhelst (déjà candidat malheureux en 2007 et 2010) et Gergely Nagy (déjà malheureux lui en 2004) :

Zack a annoncé pendant la campagne que ce troisième mandat consécutif de DPL serait son dernier. Souhaitons qu'il se déroule aussi bien, et même encore mieux !, que ...]]></description>
			<content:encoded><![CDATA[<p><a href="http://upsilon.cc/%7Ezack/" target="_blank">Stefano Zacchiroli</a> (Zack) vient d’<a href="http://lists.debian.org/debian-vote/2012/04/msg00005.html" target="_blank">être re-réélu</a> <a href="http://www.debian.org/devel/leader" target="_blank">Debian Project Leader</a>.</p>
<p style="text-align: left;"><a href="http://lwn.net/images/conf/2010/LinuxTag/StefanoZacchiroli.jpg"><img class="aligncenter" title="Zack" src="http://lwn.net/images/conf/2010/LinuxTag/StefanoZacchiroli.jpg" alt="" width="378" height="391" /></a></p>
<p>Il devance très largement <a href="http://grep.be/" target="_blank">Wouter Verhelst</a> (déjà candidat malheureux en <a href="http://www.debian.org/vote/2007/vote_001" target="_blank">2007</a> et <a href="http://www.debian.org/vote/2010/vote_001" target="_blank">2010</a>) et Gergely Nagy (déjà malheureux lui en <a href="http://www.debian.org/vote/2004/vote_001" target="_blank">2004</a>) :</p>
<p style="text-align: left;"><a href="http://master.debian.org/~secretary/leader2012/results.png"><img class="aligncenter" src="http://master.debian.org/~secretary/leader2012/results.png" alt="" width="335" height="395" /></a></p>
<p>Zack a annoncé pendant la campagne que ce troisième mandat consécutif de DPL serait son dernier. Souhaitons qu&#8217;il se déroule aussi bien, et même encore mieux !, que les deux premiers, et que Zack puisse mettre en œuvre au mieux <a href="http://www.debian.org/vote/2012/platforms/zack" target="_blank">son programme</a>.</p>
<p class="wp-flattr-button"></p> <p><a href="http://fgallaire.flext.net/?flattrss_redirect&amp;id=2143&amp;md5=96f2c9d91a0b5a841b781682359152ef" title="Flattr" target="_blank"><img src="http://fgallaire.flext.net/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://fgallaire.flext.net/zack-3-0/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Android pour les Abribus !</title>
		<link>http://fgallaire.flext.net/android-pour-les-abribus/</link>
		<comments>http://fgallaire.flext.net/android-pour-les-abribus/#comments</comments>
		<pubDate>Thu, 05 Apr 2012 03:39:16 +0000</pubDate>
		<dc:creator>fgallaire</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Libre]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://fgallaire.flext.net/?p=2104</guid>
		<description><![CDATA[En  passant place de la Bastille à Paris (j'ai cours tout près, à l'EFB, rue de Charenton), j'ai croisé un Abribus d'un nouveau genre, aux allures de soucoupe volante, doté d'un design futuriste et de nombreux écrans :

Cet Abribus est un prototype de JCDecaux, faisant partie des 40 projets de mobilier urbain intelligent retenus par la ville de ...]]></description>
			<content:encoded><![CDATA[<p>En  passant place de la Bastille à Paris (j&#8217;ai cours tout près, à l&#8217;<a href="http://www.efb.fr/EC_presentation.html" target="_blank">EFB</a>, rue de Charenton), j&#8217;ai croisé un Abribus d&#8217;un nouveau genre, aux allures de soucoupe volante, doté d&#8217;un design futuriste et de nombreux écrans :</p>
<p style="text-align: center;"><a href="http://fgallaire.flext.net/wp-content/uploads/2012/04/2012-04-04-19.04.39.jpg"><img class="aligncenter size-large wp-image-2105" title="Abribus Android front" src="http://fgallaire.flext.net/wp-content/uploads/2012/04/2012-04-04-19.04.39-1024x768.jpg" alt="" width="450" height="337" /></a></p>
<p>Cet Abribus est un <a href="http://www.paris.fr/pratique/Portal.lut?page_id=9959&amp;document_type_id=4&amp;document_id=105585&amp;portlet_id=24868&amp;multileveldocument_sheet_id=19162" target="_blank">prototype de JCDecaux</a>, faisant partie des <a href="http://www.paris.fr/pratique/Portal.lut?page_id=9959&amp;document_type_id=4&amp;document_id=105585&amp;portlet_id=24868" target="_blank">40 projets</a> de mobilier urbain intelligent retenus par la ville de Paris. Le grand écran de 42 pouces en pleine action :</p>
<p style="text-align: center;"><a href="http://fgallaire.flext.net/wp-content/uploads/2012/04/2012-04-04-19.08.09.jpg"><img class="aligncenter size-large wp-image-2111" title="Abribus Android screen" src="http://fgallaire.flext.net/wp-content/uploads/2012/04/2012-04-04-19.08.09-1024x768.jpg" alt="" width="450" height="337" /></a></p>
<p>Les deux écrans de l&#8217;arrière :</p>
<p style="text-align: center;"><a href="http://fgallaire.flext.net/wp-content/uploads/2012/04/2012-04-04-19.05.20.jpg"><img class="aligncenter  wp-image-2113" title="Abribus Android back" src="http://fgallaire.flext.net/wp-content/uploads/2012/04/2012-04-04-19.05.20-768x1024.jpg" alt="" width="324" height="432" /></a></p>
<p>Les écrans sont tous tactiles multitouch et proposent de nombreux services que je ne détaillerai pas car là n&#8217;est pas mon propos. En effet, c&#8217;est le système d&#8217;exploitation utilisé par cet Abribus qui m&#8217;intéresse, et l&#8217;utilisateur de smartphone un peu perspicace que je suis a tout de suite reconnu <a href="http://fr.wikipedia.org/wiki/Android" target="_blank">Android</a>, un système d&#8217;exploitation libre basé sur le <a href="http://fr.wikipedia.org/wiki/Noyau_Linux" target="_blank">noyau Linux</a> !</p>
<p style="text-align: center;"><a href="http://www.sqlpac.com/referentiel/docs/images/gimp-2.6-calques-creation-vignettes-homogenes-13.png"><img class="aligncenter" title="Android logo" src="http://www.sqlpac.com/referentiel/docs/images/gimp-2.6-calques-creation-vignettes-homogenes-13.png" alt="" width="300" height="300" /></a></p>
<p>Ceci est une réelle bonne nouvelle, car jusqu&#8217;à présent JCDecaux utilise pour ses différentes bornes des solutions basées sur Microsoft Windows, ce qui présente pas mal d&#8217;inconvénients. Ainsi, tous les utilisateurs réguliers de <a href="http://fr.wikipedia.org/wiki/V%C3%A9lib'" target="_blank">Vélib&#8217;</a> ont été au moins une fois confrontés à une station totalement plantée, ce que JCDecaux résout tant bien que mal en redémarrant ses bornes toutes les nuits&#8230;</p>
<p>Si, à l&#8217;avenir, Android devait remplacer Windows, les utilisateurs y gagneraient donc des stations plus stables et plus fonctionnelles, et JCDecaux ferait des économies de licence (ce qui devrait impliquer des économies pour la Ville de Paris et donc pour les contribuables parisiens&#8230;).</p>
<p class="wp-flattr-button"></p> <p><a href="http://fgallaire.flext.net/?flattrss_redirect&amp;id=2104&amp;md5=071a376607059f59f0066c70cb3c5aa3" title="Flattr" target="_blank"><img src="http://fgallaire.flext.net/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://fgallaire.flext.net/android-pour-les-abribus/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Quel DPL pour 2012 ?</title>
		<link>http://fgallaire.flext.net/quel-dpl-pour-2012/</link>
		<comments>http://fgallaire.flext.net/quel-dpl-pour-2012/#comments</comments>
		<pubDate>Mon, 19 Mar 2012 01:51:46 +0000</pubDate>
		<dc:creator>fgallaire</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[DPL]]></category>
		<category><![CDATA[Libre]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Stefano Zacchiroli]]></category>
		<category><![CDATA[Zack]]></category>

		<guid isPermaLink="false">http://fgallaire.flext.net/?p=2076</guid>
		<description><![CDATA[Le temps passe vite, et cela fait déjà presque un an que Stefano Zacchiroli, dit Zack, a vu son mandat de Debian Project Leader (DPL) renouvelé. Sans concurrent en 2011, Zack est cette année en compétition avec Wouter Verhelst (candidat malheureux en 2007 et 2010) et Gergely Nagy (malheureux lui en 2004). Il a justifié sa nouvelle candidature par le proverbe ...]]></description>
			<content:encoded><![CDATA[<p>Le temps passe vite, et cela fait déjà presque un an que <a href="http://upsilon.cc/~zack/" target="_blank">Stefano Zacchiroli</a>, dit Zack, a vu son mandat de <a href="http://www.debian.org/devel/leader" target="_blank">Debian Project Leader</a> (DPL) <a href="http://fgallaire.flext.net/zack-2-0/" target="_blank">renouvelé</a>. Sans concurrent en 2011, Zack est cette année en compétition avec <a href="http://grep.be/" target="_blank">Wouter Verhelst</a> (candidat malheureux en <a href="http://www.debian.org/vote/2007/vote_001" target="_blank">2007</a> et <a href="http://www.debian.org/vote/2010/vote_001" target="_blank">2010</a>) et Gergely Nagy (malheureux lui en <a href="http://www.debian.org/vote/2004/vote_001" target="_blank">2004</a>). Il a justifié sa nouvelle candidature par le proverbe italien &#8220;<a href="http://it.wikipedia.org/wiki/Non_c'%C3%A8_due_senza_tre" target="_blank">Non c&#8217;è due senza tre</a>&#8220;, qui semble bien être l&#8217;équivalent de notre &#8220;Jamais deux sans trois&#8221;.</p>
<p>Le plus important est bien sûr de lire les programmes de chacun des candidats :</p>
<ul>
<li><a href="http://www.debian.org/vote/2012/platforms/zack" target="_blank">Stefano Zacchiroli</a></li>
<li><a href="http://www.debian.org/vote/2012/platforms/wouter" target="_blank">Wouter Verhelst</a></li>
<li><a href="http://www.debian.org/vote/2012/platforms/algernon" target="_blank">Gergely Nagy</a></li>
</ul>
<p>Les presque mille <a href="http://wiki.debian.org/DebianDeveloper" target="_blank">développeurs Debian</a> sont maintenant libres de faire leur choix lors d&#8217;un vote utilisant la <a href="http://fr.wikipedia.org/wiki/M%C3%A9thode_Condorcet" target="_blank">méthode Condorcet</a>. Le nombre de trois candidats est un peu inférieur à la moyenne des <a href="http://blog.liw.fi/posts/dpl-election-candidates/" target="_blank">années précédentes</a>, qui est de quatre environ, mais il permet tout de même un belle campagne qui ouvre publiquement certains débats, que chacun peut suivre sur la <a href="http://lists.debian.org/debian-vote/2012/03/threads.html" target="_blank">mailing list debian-vote</a>.</p>
<p class="wp-flattr-button"></p> <p><a href="http://fgallaire.flext.net/?flattrss_redirect&amp;id=2076&amp;md5=ff2393d2e6bf26965a99c5872c738f09" title="Flattr" target="_blank"><img src="http://fgallaire.flext.net/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://fgallaire.flext.net/quel-dpl-pour-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Complément à l&#8217;article de Carl sur SQLite et Python</title>
		<link>http://fgallaire.flext.net/complement-carl-sqlite3-sqlite-et-python/</link>
		<comments>http://fgallaire.flext.net/complement-carl-sqlite3-sqlite-et-python/#comments</comments>
		<pubDate>Tue, 14 Feb 2012 16:58:21 +0000</pubDate>
		<dc:creator>fgallaire</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Libre]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQLite]]></category>
		<category><![CDATA[sqlite3]]></category>

		<guid isPermaLink="false">http://fgallaire.flext.net/?p=2047</guid>
		<description><![CDATA[Carl vient de publier, dans le dernier Linux Pratique Hors-Série sur Python, un article sur le module sqlite3, disponible dans la bibliothèque standard depuis Python 2.5, et qui permet d'utiliser facilement SQLite.

C'est un article très didactique, qui tombait à point nommé pour moi puisque j'ai récemment eu plusieurs idées d'intégration de SQLite dans txt2tags. Je suis parti totalement ...]]></description>
			<content:encoded><![CDATA[<p><a href="http://carlchenet.wordpress.com/about/" target="_blank">Carl</a> vient de publier, dans le dernier Linux Pratique Hors-Série sur <a href="http://www.python.org/" target="_blank">Python</a>, <a href="http://carlchenet.wordpress.com/2012/02/11/du-sql-dans-vos-fichiers-le-module-sqlite3-de-python-3-2-linux-pratique-hors-serie-2/" target="_blank">un article</a> sur le module <a href="http://docs.python.org/py3k/library/sqlite3.html" target="_blank"><code>sqlite3</code></a>, disponible dans la bibliothèque standard <a href="http://docs.python.org/whatsnew/2.5.html" target="_blank">depuis Python 2.5</a>, et qui permet d&#8217;utiliser facilement <a href="http://www.sqlite.org/" target="_blank">SQLite</a>.</p>
<p>C&#8217;est un article très didactique, qui tombait à point nommé pour moi puisque j&#8217;ai récemment eu plusieurs idées d&#8217;intégration de SQLite dans <a href="http://txt2tags.org/" target="_blank">txt2tags</a>. Je suis parti totalement de zéro, puisque j&#8217;ai toujours fui aussi bien le langage <a href="http://fr.wikipedia.org/wiki/Structured_Query_Language" target="_blank">SQL</a> que la configuration des <a href="http://fr.wikipedia.org/wiki/Syst%C3%A8me_de_gestion_de_base_de_donn%C3%A9es" target="_blank">systèmes de gestion de bases de données</a>, et j&#8217;ai quelques remarques complémentaires à faire qui pourront aider les personnes dans le même situation que moi.</p>
<p><strong>Sur le shell </strong><code><strong>sqlite3</strong></code></p>
<p>Le shell <code>sqlite3</code> est très pratique pour interagir avec les bases de données SQLite, et en particulier vérifier celles générées par nos programmes Python. Cependant, l&#8217;affichage standard est un peu spartiate :</p>
<blockquote>
<pre>sqlite&gt; select * from tab;
1|gpl|3|premier test
2|linux|5|deuze</pre>
</blockquote>
<p>Pour une meilleur visualisation, on peut ajouter les noms des champs :</p>
<blockquote>
<pre>sqlite&gt; .header on
sqlite&gt; select * from tab;
id|title|length|comment
1|gpl|3|premier test
2|linux|5|deuze</pre>
</blockquote>
<p>Afficher en colonnes :</p>
<blockquote>
<pre>sqlite&gt; .mode column
sqlite&gt; select * from tab;
1           gpl         3           premier test
2           linux       5           deuze</pre>
</blockquote>
<p>Et même les deux à la fois :</p>
<blockquote>
<pre>sqlite&gt; select * from tab;
id          title       length      comment
----------  ----------  ----------  ------------
1           gpl         3           premier test
2           linux       5           deuze</pre>
</blockquote>
<p><strong>Sur la table </strong><code><strong>sqlite_master</strong></code></p>
<p>Dans l&#8217;article il est précisé comment obtenir la liste des tables d&#8217;une base de données grâce à une commande du shell <code>sqlite3</code> :</p>
<blockquote>
<pre>sqlite&gt; .tables
tab</pre>
</blockquote>
<p>Mais pas comment obtenir le même résultat d&#8217;une requête SQL que vous pouvez effectuer en Python, et qui utilise la table <code>sqlite_master</code> automatiquement créée par SQLite :</p>
<blockquote>
<pre>sqlite&gt; select name from sqlite_master;
tab</pre>
</blockquote>
<p><strong>Sur la méthode </strong><code><strong>iterdump()</strong></code></p>
<p>Deux remarques :</p>
<ol>
<li>Elle n&#8217;est disponible que depuis Python 2.6</li>
<li>C&#8217;est <a href="http://osdir.com/ml/python.db.pysqlite.user/2008-07/msg00007.html" target="_blank">selon Gerhard Hæring lui-même</a>, l&#8217;auteur du module <code>sqlite3</code>, la seule méthode pour dupliquer une base en mémoire vers une base sur disque (oui, c&#8217;est vraiment très moche qu&#8217;il n&#8217;y ai pas de manière plus élégante de le faire, mais c&#8217;est comme ça !)</li>
</ol>
<p><strong>Sur les ? et les chaînes de caractères</strong></p>
<p>Pour construire dynamiquement le contenu des requêtes SQL, Carl utilise sans le justifier des <code>?</code> et un tuple de valeurs comme second argument de la méthode <code>execute()</code>. Il est en fait très important de suivre cette manière de faire, car si vous utilisez les opérations classiques de concaténation des chaîne de caractères, vous vous exposez à des risques d&#8217;attaque par <a href="http://fr.wikipedia.org/wiki/Injection_SQL" target="_blank">injection SQL</a> !</p>
<p>L&#8217;<a href="http://carlchenet.wordpress.com/2012/02/11/du-sql-dans-vos-fichiers-le-module-sqlite3-de-python-3-2-linux-pratique-hors-serie/" target="_blank">autre article</a> de Carl sur l&#8217;utilisation du module <code>smtplib</code> est aussi très intéressant, les autres articles du Hors-Série formant en fait un gros tutoriel d&#8217;initiation au langage Python.</p>
<p class="wp-flattr-button"></p> <p><a href="http://fgallaire.flext.net/?flattrss_redirect&amp;id=2047&amp;md5=33217ee8bf6dcfc129736a343d78d29b" title="Flattr" target="_blank"><img src="http://fgallaire.flext.net/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://fgallaire.flext.net/complement-carl-sqlite3-sqlite-et-python/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Héros de jeu vidéo, dans FLARE !</title>
		<link>http://fgallaire.flext.net/heros-de-jeu-video-flare/</link>
		<comments>http://fgallaire.flext.net/heros-de-jeu-video-flare/#comments</comments>
		<pubDate>Thu, 09 Feb 2012 01:29:56 +0000</pubDate>
		<dc:creator>fgallaire</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Creative Commons]]></category>
		<category><![CDATA[Droit]]></category>
		<category><![CDATA[Flare]]></category>
		<category><![CDATA[GPL]]></category>
		<category><![CDATA[Jeux Vidéo]]></category>
		<category><![CDATA[Libre]]></category>

		<guid isPermaLink="false">http://fgallaire.flext.net/?p=1972</guid>
		<description><![CDATA[FLARE, pour Free/Libre Action Roleplaying Engine, est un jeu vidéo libre disponible sous Windows, Mac OS X et Linux. Le projet a commencé sous le nom OSARE, pour Open Source Action Roleplaying Engine, et en a changé suite à une discussion entre Clint Bellanger, le principal développeur du projet, et l'inusable Richard Stallman.

Le jeu y a ...]]></description>
			<content:encoded><![CDATA[<p><a href="http://clintbellanger.net/rpg/" target="_blank">FLARE</a>, pour Free/Libre Action Roleplaying Engine, est un jeu vidéo libre disponible sous Windows, Mac OS X et Linux. Le projet a commencé sous le nom OSARE, pour Open Source Action Roleplaying Engine, et en a changé suite à une discussion entre Clint Bellanger, le principal développeur du projet, et l&#8217;inusable <a href="http://fr.wikipedia.org/wiki/Richard_Stallman" target="_blank">Richard Stallman</a>.</p>
<p>Le jeu y a gagné un nom &#8220;éthique&#8221;, puisque défendant ouvertement nos valeurs, ainsi qu&#8217;un logo, puisque <em>flare </em>signifie en gros flamme en anglais.</p>
<p><a href="http://fgallaire.flext.net/wp-content/uploads/2012/02/flare.png"><img class="aligncenter size-full wp-image-1978" title="flare" src="http://fgallaire.flext.net/wp-content/uploads/2012/02/flare.png" alt="" width="205" height="100" /></a></p>
<p>C&#8217;est la licence <a href="http://www.gnu.org/licenses/gpl.html" target="_blank">GNU GPL version 3</a> qui est utilisée pour le code source du moteur du jeu, et la licence <a href="http://creativecommons.org/licenses/by-sa/3.0/" target="_blank">Creative Commons BY-SA 3.0</a> pour toutes les données et fichiers artistiques (desseins, textures, musique, etc.).</p>
<p><a href="http://justinnichol.blogspot.com/" target="_blank">Justin Nichol</a>, un jeune artiste qui souhaitait produire des données créatives utilisables dans FLARE , tout en finançant la fin de sa formation à la <a href="http://www.conceptdesignacad.com/" target="_blank">Concept Design Academy</a>, a donc créé en décembre 2010 le projet <a href="http://www.kickstarter.com/projects/1318318905/creative-commons-fantasy-portrait-marathon" target="_blank">Creative Commons Fantasy Portrait Marathon</a> sur le site de financement collaboratif <a href="http://www.kickstarter.com/" target="_blank">Kickstarter</a>.</p>
<p>Il a ainsi récolté 2 567 dollars auprès de 33 donateurs, ayant donné chacun entre 10 et 250 dollars. J&#8217;ai personnellement donné 100 dollars pour un pack &#8220;Spellslinger&#8221; que je me suis offert à moi-même comme cadeau de Noël, et qui ne me permet pas moins que de devenir un vrai héros de jeu vidéo !</p>
<blockquote><p>One of the characters in the set will be based on your likeness and you will have additional creative input during the painting process into the background, concept and costuming of the character. You will receive a print of the portrait.</p></blockquote>
<p>Après plus d&#8217;un an de travail, Justin vient juste de <a href="http://www.kickstarter.com/projects/1318318905/creative-commons-fantasy-portrait-marathon/posts/171991Creative%20Commons%20Fantasy%20Portrait%20Marathon" target="_blank">publier la trentaine de portraits promis</a>. En plus d&#8217;être licenciés sous Creative Commons BY-SA, ils ont été créés uniquement à l&#8217;aide de logiciels libres, principalement <a href="http://www.gimp.org/" target="_blank">GIMP</a>.</p>
<p style="text-align: center;"><a href="http://fgallaire.flext.net/wp-content/uploads/2012/02/flare_portraits.jpg"><img class="aligncenter  wp-image-1974" title="flare_portraits" src="http://fgallaire.flext.net/wp-content/uploads/2012/02/flare_portraits.jpg" alt="" width="448" height="290" /></a></p>
<p>Je trouve le rendu des portraits très concluant, et je suis en particulier très content du mien. Et un jour prochain, en étant un peu patient, je pourrai faire <code>apt-get install flare</code> (c&#8217;est-à-dire installer FLARE sur ma Debian ou ma Ubuntu) et jouer avec Moi l&#8217;<a href="http://www.wikiberal.org/wiki/L'Unique_et_sa_propri%C3%A9t%C3%A9" target="_blank">Unique</a> !</p>
<p>Je crois que ce genre d&#8217;initiative est à même de donner un sacré coup de vieux à l&#8217;énorme industrie des jeux vidéo propriétaires, que les jeux libres ont pour l&#8217;instant bien du mal à concurrencer, la disparité de moyen semblant particulièrement insurmontable (<a href="http://www.jeuxonline.info/actualite/7565/budget-record" target="_blank">les grands jeux vidéos se développent à coup de dizaines de millions d&#8217;euros</a>) .</p>
<p>En effet, les jeux vidéos sont des logiciels d&#8217;une espèce hybride, avec des spécificités très fortes qui les différencient des logiciels classiques (importance du non logiciel comme les visuels, la musique, le scénario, etc.), et on ne concurrence donc pas <a href="http://fr.wikipedia.org/wiki/World_of_Warcraft" target="_blank">World of Warcraft</a> aussi facilement que <a href="http://fr.wikipedia.org/wiki/Internet_Information_Services" target="_blank">IIS</a> si l&#8217;on est juste un bon développeur.</p>
<p>Nous avons besoin de Clint Bellanger, mais nous avons aussi besoin de Justin Nichol, l&#8217;alliance des deux permettant d&#8217;ouvrir des voies qui resteront pour toujours fermés aux jeux propriétaires, et qui pourraient donc permettre la réussite des jeux vidéo libres auprès du grand public.</p>
<p><strong>Mise à jour du 10 février 2012</strong> : Tous les portraits <a href="http://opengameart.org/content/creative-commons-portrait-marathon" target="_blank">sont maintenant disponibles</a> aux formats PNG, JPEG et <a href="http://fr.wikipedia.org/wiki/XCF" target="_blank">XCF</a> (le format natif de Gimp, à utiliser si vous souhaitez modifier les fichiers).</p>
<p class="wp-flattr-button"></p> <p><a href="http://fgallaire.flext.net/?flattrss_redirect&amp;id=1972&amp;md5=af072b82f6d044edee5e7e5da0d9b165" title="Flattr" target="_blank"><img src="http://fgallaire.flext.net/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://fgallaire.flext.net/heros-de-jeu-video-flare/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Django 1.4 passe à HTML5 ! et autres nouveautés</title>
		<link>http://fgallaire.flext.net/django-1-4-passe-a-html5-et-nouveautes/</link>
		<comments>http://fgallaire.flext.net/django-1-4-passe-a-html5-et-nouveautes/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 04:38:35 +0000</pubDate>
		<dc:creator>fgallaire</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Django-nonrel]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Framework python]]></category>
		<category><![CDATA[Framework web]]></category>
		<category><![CDATA[Libre]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://fgallaire.flext.net/?p=1935</guid>
		<description><![CDATA[Le 22 décembre dernier est sorti Django 1.4 alpha 1. Comme on peu l'imaginer pour un projet d'une telle ampleur, cette nouvelle version apporte beaucoup de nouveautés. Je me contenterai d'en détailler rapidement cinq qui me semblent particulièrement intéressantes :


	Le passage au Doctype HTML5, tous les templates fournis avec Django, en particulier ceux de ...]]></description>
			<content:encoded><![CDATA[<p>Le 22 décembre dernier est sorti <a href="https://www.djangoproject.com/weblog/2011/dec/22/14-alpha-1/" target="_blank">Django 1.4 alpha 1</a>. Comme on peu l&#8217;imaginer pour un projet d&#8217;une telle ampleur, cette nouvelle version apporte <a href="https://docs.djangoproject.com/en/dev/releases/1.4-alpha-1/" target="_blank">beaucoup de nouveautés</a>. Je me contenterai d&#8217;en détailler rapidement cinq qui me semblent particulièrement intéressantes :</p>
<ol>
<ol>
<li>Le passage au Doctype HTML5, tous les templates fournis avec Django, en particulier ceux de l&#8217;interface d&#8217;administration, utilisant donc désormais <code>&lt;!DOCTYPE html&gt;</code>. C&#8217;est un choix logique, qui permet d&#8217;utiliser toutes les nouvelles fonctionnalités de HTML5 sans plus se soucier de devoir corriger le Doctype.</li>
<li>L&#8217;abandon du support de Python 2.4, datant de 2004, mais pas le passage à Python 3. Django supporte et est testé sur Python 2.5, 2.6 et 2.7.</li>
<li>Le nouveau framework de test <a href="https://docs.djangoproject.com/en/dev/topics/testing/#django.test.LiveServerTestCase" target="_blank"><code>LiveServerTestCase</code></a>, compatible avec <a href="http://seleniumhq.org/" target="_blank">Selenium</a> et <a href="http://www.getwindmill.com/" target="_blank">Windmill</a>, pour tester l&#8217;interface de votre application web côté client (dans le navigateur web).</li>
<li>La nouvelle option <code>--template</code> pour les commandes <a href="https://docs.djangoproject.com/en/dev/ref/django-admin/#django-admin-startapp" target="_blank"><code>startapp</code></a> et <a href="https://docs.djangoproject.com/en/dev/ref/django-admin/#django-admin-startproject" target="_blank"><code>startproject</code></a>, permettant de leur spécifier aisément un template personnalisé.</li>
<li>La nouvelle <a href="https://docs.djangoproject.com/en/dev/ref/templates/builtins/#std:templatetag-if" target="_blank">clause <code>elif</code></a> pour la balise <code>if</code>. Elle permettra de ne plus avoir à imbriquer plusieurs <code>if then else</code> et autant d&#8217;indentations ou à se définir une balise personnalisée. Alors oui j&#8217;ose le dire : c&#8217;est pas trop tôt !</li>
</ol>
</ol>
<p>On voit donc qu&#8217;encore une fois Django continue d&#8217;avancer dans la bonne direction, bonifiant sans cesse une base déjà excellente. La seule chose que je regrette encore et toujours, c&#8217;est la défiance manifeste de la core team envers l&#8217;intégration de <a href="http://www.allbuttonspressed.com/projects/django-nonrel" target="_blank">django-nonrel</a>&#8230; peut-être pour Django 1.5 ?</p>
<p class="wp-flattr-button"></p> <p><a href="http://fgallaire.flext.net/?flattrss_redirect&amp;id=1935&amp;md5=ea89b8d1982d6a689a50a1ec78b72ed8" title="Flattr" target="_blank"><img src="http://fgallaire.flext.net/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://fgallaire.flext.net/django-1-4-passe-a-html5-et-nouveautes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Le Barreau !</title>
		<link>http://fgallaire.flext.net/le-barreau/</link>
		<comments>http://fgallaire.flext.net/le-barreau/#comments</comments>
		<pubDate>Wed, 28 Dec 2011 06:25:57 +0000</pubDate>
		<dc:creator>fgallaire</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Barreau]]></category>
		<category><![CDATA[Droit]]></category>

		<guid isPermaLink="false">http://fgallaire.flext.net/?p=1906</guid>
		<description><![CDATA[Ce post est un cadeau de Noël pour tous mes fans, avec bien sûr une spéciale dédicace pour Michel Houellebecq :-).

J'ai réussi à ma première tentative ce qu'il est convenu d'appeler le concours d'avocat, le concours du Barreau, ou encore le Pré-CAPA, c'est-à-dire l'examen d'entrée à l'École de Formation du Barreau, le CRFPA parisien.

Pour ...]]></description>
			<content:encoded><![CDATA[<p>Ce post est un cadeau de Noël pour tous mes fans, avec bien sûr une spéciale dédicace pour <a href="http://fr.wikipedia.org/wiki/Michel_Houellebecq" target="_blank">Michel Houellebecq</a> <img src='http://fgallaire.flext.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p>J&#8217;ai réussi à ma première tentative ce qu&#8217;il est convenu d&#8217;appeler le <strong>concours d&#8217;avocat</strong>, le <strong>concours du <a href="http://fr.wikipedia.org/wiki/Barreau" target="_blank">Barreau</a></strong>, ou encore le <strong>Pré-<a href="http://cnb.avocat.fr/Le-CAPA_a287.html" target="_blank">CAPA</a></strong>, c&#8217;est-à-dire l&#8217;examen d&#8217;entrée à l&#8217;<a href="http://fr.wikipedia.org/wiki/%C3%89cole_de_formation_professionnelle_des_barreaux_de_la_cour_d%27appel_de_Paris" target="_blank">École de Formation du Barreau</a>, le <a href="http://fr.wikipedia.org/wiki/CRFPA" target="_blank"><strong>CRFPA</strong></a> parisien.</p>
<p>Pour illustrer, une très mauvaise photo du panneau d&#8217;affichage public des notes de l&#8217;<a href="http://www.univ-paris1.fr/" target="_blank">Université Paris 1 Panthéon-Sorbonne</a>, prise le 6 décembre dernier :</p>
<p><a href="http://fgallaire.flext.net/wp-content/uploads/2011/12/crfpa-fgallaire.jpg"><img class="aligncenter size-full wp-image-1907" title="crfpa-fgallaire" src="http://fgallaire.flext.net/wp-content/uploads/2011/12/crfpa-fgallaire.jpg" alt="" width="377" height="52" /></a></p>
<p>Je commence les cours spécifiques à la profession d&#8217;avocat, comme la déontologie, à partir de janvier. Et après deux stages dont le dernier en cabinet d&#8217;avocat, <a href="http://www.maitre-eolas.fr/" target="_blank">Maître Eolas</a> devra donner du <strong>Cher Confrère</strong> à celui qu&#8217;il avait cru pouvoir définir comme <strong>un blogueur s’affirmant juriste</strong>.</p>
<p>En France, après <a href="http://www.hugot.fr/?p=26&amp;lang=fr" target="_blank">Olivier Hugot</a> chez qui j&#8217;ai effectué mon stage de Master, les logiciels libres auront donc bientôt un deuxième avocat réellement spécialisé. C&#8217;est important, car les développeurs de logiciels libres doivent pouvoir trouver des interlocuteurs compétents à qui parler, et par qui se faire représenter, y compris <a href="http://fr.wikipedia.org/wiki/Pro_bono" target="_blank">Pro-bono</a>.</p>
<p>Avec la progression inéluctable de l&#8217;utilisation des logiciels libres, le contentieux ne pourra qu&#8217;augmenter, car les licences de logiciels libres et <a href="http://creativecommons.fr/">Creative Commons</a> ne sont pas là pour faire joli, mais pour être respectées !</p>
<p class="wp-flattr-button"></p> <p><a href="http://fgallaire.flext.net/?flattrss_redirect&amp;id=1906&amp;md5=a5fad1040fb0dfb9e9d80ed734be7999" title="Flattr" target="_blank"><img src="http://fgallaire.flext.net/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://fgallaire.flext.net/le-barreau/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>La compréhension de liste en Python, une syntaxe moderne pour map() et filter()</title>
		<link>http://fgallaire.flext.net/comprehension-de-liste-en-python-map-filter/</link>
		<comments>http://fgallaire.flext.net/comprehension-de-liste-en-python-map-filter/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 02:08:29 +0000</pubDate>
		<dc:creator>fgallaire</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Compréhension de liste]]></category>
		<category><![CDATA[Libre]]></category>
		<category><![CDATA[Programmation fonctionnelle]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://fgallaire.flext.net/?p=1787</guid>
		<description><![CDATA[La compréhension de liste est un syntactic sugar pour les fonctions classiques de la programmation fonctionnelle que sont map() et filter(). Disponible depuis Python 2.0, la compréhension de liste devrait à terme amener à la disparition des fonctions map() et filter() du langage Python, ce que Guido van Rossum avait déjà envisagé pour Python ...]]></description>
			<content:encoded><![CDATA[<p>La <a href="http://fr.wikipedia.org/wiki/Liste_en_compr%C3%A9hension" target="_blank">compréhension de liste</a> est un <a href="http://en.wikipedia.org/wiki/Syntactic_sugar" target="_blank"><em>syntactic sugar</em></a> pour les fonctions classiques de la programmation fonctionnelle que sont <code>map()</code> et <code>filter()</code>. Disponible <a href="http://docs.python.org/dev/whatsnew/2.0.html" target="_blank">depuis Python 2.0</a>, la compréhension de liste devrait à terme amener à la disparition des fonctions <code>map()</code> et <code>filter()</code> du langage Python, ce que <a href="http://fr.wikipedia.org/wiki/Guido_van_Rossum" target="_blank">Guido van Rossum</a> avait déjà <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=98196" target="_blank">envisagé pour Python 3</a>.</p>
<p>Ainsi, si vous avez du &#8220;vieux code&#8221; utilisant ces fonctions, je vous encourage à le porter vers cette nouvelle syntaxe beaucoup plus lisible et plus pythonique. J&#8217;espère que cet article pourra aider certains à éviter les pièges qui pourraient apparaître devant eux lors de cette démarche.</p>
<p><strong>map()</strong><br />
Commençons d&#8217;abord par la fonction <code>map()</code>, dont la syntaxe est <code>map(fonction, liste)</code>. Prenons un exemple très simple, avec une fonction anonyme <code>lambda</code> qui à tout <code>x</code> élément de la liste des chiffres de <code>0</code> à <code>9</code> associe <code>2</code> fois <code>x</code>.</p>
<blockquote><p><code>&gt;&gt;&gt; map(lambda x: 2*x, range(10))</code><br />
<code>[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]</code></p></blockquote>
<p>On obtient l&#8217;équivalent de la fonction <code>map()</code> avec une compréhension de liste de la forme <code>[fonction(x) for x in liste]</code>, ce qui donne pour notre exemple :</p>
<blockquote><p><code>&gt;&gt;&gt; [2*x for x in range(10)]</code><br />
<code>[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]</code></p></blockquote>
<p><strong>filter()</strong><br />
La syntaxe de la fonction <code>filter()</code> est <code>filter(fonction, liste)</code>. Prenons ici aussi un exemple très simple, avec une fonction anonyme <code>lambda</code> qui n&#8217;est <code>Vrai</code> pour chaque <code>x</code> élément de la liste des chiffres de <code>0</code> à <code>9</code> que s&#8217;il est strictement supérieur à <code>5</code>.</p>
<blockquote><p><code>&gt;&gt;&gt; filter(lambda x: x&gt;5, range(10))</code><br />
<code>[6, 7, 8, 9]</code></p></blockquote>
<p>On obtient l&#8217;équivalent de la fonction <code>filter()</code> avec une compréhension de liste de la forme <code>[x for x in liste if fonction(x)]</code>, et donc notre exemple devient :</p>
<blockquote><p><code>&gt;&gt;&gt; [x for x in range(10) if x&gt;5]</code><br />
<code>[6, 7, 8, 9]</code></p></blockquote>
<p>Un des grands intérêts des fonctions est de pouvoir être composées. Cependant, cette opération de composition n&#8217;est pas anodine, et il faut bien envisager les différents cas pour ne pas commettre d&#8217;erreur.</p>
<p><strong>map o filter()</strong><br />
La composition notée <code>map o filter()</code> revient à <code>map(filter())</code>, c&#8217;est-à-dire à appliquer d&#8217;abord la fonction <code>filter()</code>, puis la fonction <code>map()</code>. Si nous combinons nos deux premiers exemples, nous obtenons :</p>
<blockquote><p><code>&gt;&gt;&gt; map(lambda x: 2*x, filter(lambda x: x&gt;5, range(10)))</code><br />
<code>[12, 14, 16, 18]</p></blockquote>
<p></code><br />
On obtient l&#8217;équivalent de la composition de fonction <code>map o filter()</code> avec une compréhension de liste de la forme <code>[fonction_map(x) for x in liste if fonction_filter(x)]</code>, ce qui donne ici :</p>
<blockquote><p><code>&gt;&gt;&gt; [2*x for x in range(10) if x&gt;5]</code><br />
<code>[12, 14, 16, 18]</code></p></blockquote>
<p>La composition de fonction <code>map o filter()</code> <strong>ne pose pas de problème</strong>.</p>
<p>On remarque que plus l&#8217;on compose des fonctions <code>map()</code> et <code>filter()</code>, plus l&#8217;avantage syntaxique de lisibilité et de compréhensibilité des compréhensions de liste augmente. </p>
<p><strong>filter o map()</strong><br />
Mais qu&#8217;en est-il de la composition notée <code>filter o map()</code>, qui revient à <code>filter(map())</code>, c&#8217;est-à-dire à appliquer d&#8217;abord la fonction <code>map()</code>, puis la fonction <code>filter()</code>. Si nous combinons ici aussi nos deux premiers exemples, nous obtenons :</p>
<blockquote><p><code>&gt;&gt;&gt; filter(lambda x: x&gt;5, map(lambda x: 2*x, range(10)))</code><br />
<code>[6, 8, 10, 12, 14, 16, 18]</code></p></blockquote>
<p>Le résultat retourné est différent de celui obtenu à l&#8217;exemple précédent avec une compréhension de liste de la forme <code>[fonction_map(x) for x in liste if fonction_filter(x)]</code>. En fait, la bonne compréhension de liste est :</p>
<blockquote><p><code>&gt;&gt;&gt; [2*x for x in range(10) if 2*x&gt;5]</code><br />
<code>[6, 8, 10, 12, 14, 16, 18]</code></p></blockquote>
<p>Nous voyons que la composition de fonction <code>filter o map()</code> <strong>pose des problèmes</strong>, et qu&#8217;il faudra y porter une attention particulière en cas de conversion de vieux code fonctionnel en compréhensions de liste.</p>
<p><strong>filter o filter()</strong><br />
La composition notée <code>filter o filter()</code> revient à <code>filter(filter())</code>, c&#8217;est-à-dire à appliquer deux fois de suite la fonction <code>filter()</code>. Nous allons donc rajouter une deuxième condition à notre premier exemple de <code>filter()</code>, qui sera que chaque élément <code>x</code> devra en plus être strictement inférieur à <code>8</code>.</p>
<blockquote><p><code>&gt;&gt;&gt; filter(lambda x: x&lt;8, filter(lambda x: x&gt;5, range(10)))</code><br />
<code>[6, 7]</code></p></blockquote>
<p>Le même résultat est obtenu en inversant l&#8217;ordre des deux conditions :</p>
<blockquote><p><code>&gt;&gt;&gt; filter(lambda x: x&gt;5, filter(lambda x: x&lt;8, range(10)))</code><br />
<code>[6, 7]</code></p></blockquote>
<p>La composition <code>filter o filter()</code> <strong>est commutative</strong>, et peut en fait facilement se factoriser sous la forme :</p>
<blockquote><p><code>&gt;&gt;&gt; filter(lambda x: x&gt;5 and x&lt;8, range(10))</code><br />
<code>[6, 7]</code></p></blockquote>
<p>On obtient l&#8217;équivalent de la composition de fonction <code>filter o filter()</code> avec une compréhension de liste de la forme <code>[x for x in liste if fonction_filter_1(x) and fonction_filter_2(x)]</code>, ce qui donne ici :</p>
<blockquote><p><code>&gt;&gt;&gt; [x for x in range(10) if x&gt;5 and x&lt;8]</code><br />
<code>[6, 7]</code></p></blockquote>
<p>La composition de fonction <code>filter o filter()</code> <strong>ne pose pas de problème</strong>.</p>
<p><strong>map o map()</strong><br />
Mais qu&#8217;en est-il de la composition notée <code>map o map()</code>, qui revient à <code>map(map())</code>, c&#8217;est-à-dire à appliquer deux fois de suite la fonction <code>map()</code> ? Rajoutons une deuxième fonction à notre premier exemple de <code>map()</code>, qui à chaque <code>x</code> associera <code>x</code> plus <code>1</code>. </p>
<blockquote><p><code>&gt;&gt;&gt; map(lambda x: x+1, map(lambda x: 2*x, range(10)))</code><br />
<code>[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]</code></p></blockquote>
<p>et</p>
<blockquote><p><code>&gt;&gt;&gt; map(lambda x: 2*x, map(lambda x: x+1, range(10)))</code><br />
<code>[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]</code></p></blockquote>
<p>ne donnent pas les mêmes résultats. La composition <code>map o map()</code> <strong>n&#8217;est pas commutative</strong>. On obtient l&#8217;équivalent de la composition de fonction <code>map o map()</code> avec une compréhension de liste de la forme <code>[fonction_map_2(x) for x in [fonction_map_1(x) for x in liste]]</code>, ce qui donne ici :</p>
<blockquote><p><code>&gt;&gt;&gt; [x+1 for x in [2*x for x in range(10)]]</code><br />
<code>[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]</code></p></blockquote>
<p>et</p>
<blockquote><p><code>&gt;&gt;&gt; [2*x for x in [x+1 for x in range(10)]]</code><br />
<code>[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]</code></p></blockquote>
<p>Il est possible de factoriser les deux fonctions <code>map()</code> comme nous l&#8217;avons fait pour les fonctions <code>filter()</code>, mais il faut faire très attention à l&#8217;ordre de composition des fonctions. Dans le premier cas on a <code>(2*x)+1 = 2*x+1</code> qui donne :</p>
<blockquote><p><code>&gt;&gt;&gt; [2*x+1 for x in range(10)]</code><br />
<code>[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]</code></p></blockquote>
<p>et dans le deuxième cas on obtient <code>2*(x+1) = 2*x+2</code> qui produit :</p>
<blockquote><p><code>&gt;&gt;&gt; [2*x+2 for x in range(10)]</code><br />
<code>[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]</code></p></blockquote>
<p>Nous voyons que la composition de fonction <code>map o map()</code> <strong>pose des problèmes</strong>.</p>
<p>Pour ne pas tomber dans des pièges, il suffit de retenir que toutes les compositions de fonctions qui commencent par une fonction <strong>map() sont dangereuses</strong>, alors que celles commençant par une fonction <strong>filter() sont sans danger</strong>.</p>
<p>Pour mon plus grand bonheur, la syntaxe de compréhension de liste rend particulièrement pythonique et centrale au langage Python une partie de la sémantique de la programmation fonctionnelle qui y était jusqu&#8217;à présent mal intégrée et mal aimée. Encore une fois, et même si certains de mes professeurs d&#8217;informatique ne l&#8217;ont jamais accepté, <em>sans une bonne syntaxe, une sémantique géniale n&#8217;est rien</em>.</p>
<p class="wp-flattr-button"></p> <p><a href="http://fgallaire.flext.net/?flattrss_redirect&amp;id=1787&amp;md5=ae2ac2b716233828f1b9f08019ce4b2e" title="Flattr" target="_blank"><img src="http://fgallaire.flext.net/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://fgallaire.flext.net/comprehension-de-liste-en-python-map-filter/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Steve Jobs est mort, un pionnier de l&#8217;informatique disparaît</title>
		<link>http://fgallaire.flext.net/steve-jobs-est-mort-un-pionnier-de-linformatique-disparait/</link>
		<comments>http://fgallaire.flext.net/steve-jobs-est-mort-un-pionnier-de-linformatique-disparait/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 02:49:26 +0000</pubDate>
		<dc:creator>fgallaire</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iMac Tournesol]]></category>
		<category><![CDATA[Libre]]></category>
		<category><![CDATA[NeXT]]></category>
		<category><![CDATA[NeXTstation]]></category>
		<category><![CDATA[NeXTSTEP]]></category>
		<category><![CDATA[Steve Jobs]]></category>
		<category><![CDATA[Window Maker]]></category>

		<guid isPermaLink="false">http://fgallaire.flext.net/?p=1742</guid>
		<description><![CDATA[Steve Jobs est mort hier, seulement un mois et demi après s'être retiré de son poste de CEO d'Apple. Il aura donc mené sa passionnante vie jusqu'à la toute dernière limite de ses possibilités physiques.

En tant qu'informaticien, et en tant que simple utilisateur d'ordinateur, je le remercie d'être allé voler les idées géniales et ...]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.apple.com/stevejobs/">Steve Jobs est mort</a> hier, seulement un mois et demi après s&#8217;être retiré de son poste de CEO d&#8217;Apple. Il aura donc mené sa passionnante vie jusqu&#8217;à la toute dernière limite de ses possibilités physiques.</p>
<p>En tant qu&#8217;informaticien, et en tant que simple utilisateur d&#8217;ordinateur, je le remercie d&#8217;être allé voler les idées géniales et inexploitées d&#8217;interfaces graphiques et de souris au PARC, le <a href="http://fr.wikipedia.org/wiki/Palo_Alto_Research_Center">Palo Alto Research Center</a> de Xerox, dont la photo orne toujours la porte de ma chambre.</p>
<p style="text-align: center;"><a href="http://img.x-drivers.ru/articles/33/xerox_parc.jpg"><img class="aligncenter" title="Xerox PARC" src="http://img.x-drivers.ru/articles/33/xerox_parc.jpg" alt="" width="400" height="199" /></a></p>
<p>Et d&#8217;en avoir conçu en 1983 le premier ordinateur personnel utilisable par une personne normale, nommé <a href="http://fr.wikipedia.org/wiki/Apple_Lisa">Lisa</a> (le prénom de sa fille).</p>
<p style="text-align: center;"><a href="http://www.macgeek.org/museum/applelisa1/apple1_00.jpg"><img class="aligncenter" title="Apple Lisa" src="http://www.macgeek.org/museum/applelisa1/apple1_00.jpg" alt="" width="410" height="307" /></a></p>
<p>Quand il fut viré d&#8217;Apple par <a href="http://fr.wikipedia.org/wiki/John_Sculley" target="_blank">John Sculley</a> en 1985, il fonda une entreprise nommée <a href="http://fr.wikipedia.org/wiki/NeXT" target="_blank">NeXT</a>. Le nom de domaine que j&#8217;utilise, FLeXT, y fait directement référence.</p>
<p>Avec <a href="http://fr.wikipedia.org/wiki/NeXTSTEP" target="_blank">NeXTSTEP</a>, il créa le premier <a href="http://fr.wikipedia.org/wiki/Unix" target="_blank">Unix</a> doté d&#8217;une interface graphique innovante tant d&#8217;un point de vue technique qu&#8217;ergonomique, que l&#8217;on connaît encore aujourd&#8217;hui sous le nom de Mac OS X (avec un look un peu plus eye candy), et dont le projet <a href="http://www.gnustep.org/" target="_blank">GNUstep</a> est une réimplémentation libre des APIs.</p>
<p style="text-align: center;"><a href="http://upload.wikimedia.org/wikipedia/en/3/3b/NeXTSTEP_desktop.jpg"><img class="aligncenter" title="NeXTSTEP" src="http://upload.wikimedia.org/wikipedia/en/3/3b/NeXTSTEP_desktop.jpg" alt="" width="405" height="316" /></a></p>
<p>J&#8217;ai très longtemps utilisé exclusivement <a href="http://windowmaker.org/" target="_blank">Window Maker</a>, un gestionnaire de fenêtre libre pour X11 réimplémentant l&#8217;ergonomie de NeXTSTEP.</p>
<p style="text-align: center;"><a href="http://cltb.ojuba.org/images/wmaker.jpg"><img class="aligncenter" title="Window Maker" src="http://cltb.ojuba.org/images/wmaker.jpg" alt="" width="403" height="302" /></a></p>
<p>Merci à toi Steve d&#8217;avoir été à l&#8217;origine de certains des plus beaux designs de l&#8217;histoire de l&#8217;informatique, comme la première version de la <a href="http://fr.wikipedia.org/wiki/NeXTstation" target="_blank">NeXTstation</a>, avec son écran noir et blanc NeXT MegaPixel de 17&#8243; dont un exemplaire est encore stocké dans ma cave, alors qu&#8217;une NeXTstation TurboColor est toujours présente sur mon bureau pour rehausser mon écran ;</p>
<p style="text-align: center;"><a href="http://www.old-computers.com/museum/photos/Next_Station_Side_s1.jpg"><img class="aligncenter" title="NeXT Station" src="http://www.old-computers.com/museum/photos/Next_Station_Side_s1.jpg" alt="" width="365" height="389" /></a></p>
<p>comme l&#8217;Apple Cube dans l&#8217;esprit duquel, avec l&#8217;aide de Philou, j&#8217;ai essayé de réaliser un boîtier en plexiglas pour une carte mère <a href="http://fr.wikipedia.org/wiki/ITX" target="_blank">mini-ITX</a> ;</p>
<p style="text-align: center;"><a href="http://www.memoclic.com/4-1212-600x450/fond-ecran-cube-apple.jpg"><img class="aligncenter" title="Apple Cube" src="http://www.memoclic.com/4-1212-600x450/fond-ecran-cube-apple.jpg" alt="" width="432" height="324" /></a></p>
<p>et bien sûr comme le sublime iMac Tournesol, dont je serais très heureux de récupérer un modèle 20&#8243; !</p>
<p style="text-align: center;"><a href="http://www.aventure-apple.com/ordis/images/07imactournesol.jpg"><img class="aligncenter" title="iMac Tournesol" src="http://www.aventure-apple.com/ordis/images/07imactournesol.jpg" alt="" width="479" height="207" /></a></p>
<p>&nbsp;</p>
<p>Merci aussi d&#8217;avoir longtemps été l&#8217;un des seuls à tenir tête à Bill Gates et à son empire de médiocrité informatique nommé Microsoft. Bravo pour avoir eu l&#8217;intelligence technique d&#8217;<a href="http://www.apple.com/opensource/" target="_blank">utiliser massivement les logiciels libres</a>, qui sont la composante principale des systèmes <a href="http://opensource.apple.com/release/mac-os-x-1071/" target="_blank">Mac OS X</a> et iOS diffusés par Apple, même si tu n&#8217;en as pas compris la puissance politique.</p>
<p>Alors bien sûr, l&#8217;Apple d&#8217;aujourd&#8217;hui, première valorisation boursière mondiale, l&#8217;Apple des bobos, des <a href="http://www.defectivebydesign.org/" target="_blank">DRM</a> et des iBidules, très peu pour moi comme pour tous les libristes. Mais Steve Jobs a fait bien d&#8217;autres choses que cela, c&#8217;est un exceptionnel pionnier de l&#8217;informatique qui nous a quitté hier.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p class="wp-flattr-button"></p> <p><a href="http://fgallaire.flext.net/?flattrss_redirect&amp;id=1742&amp;md5=ec3d03b082e4f448e9955be65bc7ce9e" title="Flattr" target="_blank"><img src="http://fgallaire.flext.net/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://fgallaire.flext.net/steve-jobs-est-mort-un-pionnier-de-linformatique-disparait/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

