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

<channel>
	<title>blog.thomashourdel &#187; geek</title>
	<atom:link href="http://blog.thomashourdel.com/category/geek/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.thomashourdel.com</link>
	<description>Un blog... comme les autres.</description>
	<lastBuildDate>Mon, 18 May 2009 16:37:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>ThePirateBay support</title>
		<link>http://blog.thomashourdel.com/2009/05/18/thepiratebay-support/</link>
		<comments>http://blog.thomashourdel.com/2009/05/18/thepiratebay-support/#comments</comments>
		<pubDate>Mon, 18 May 2009 16:37:11 +0000</pubDate>
		<dc:creator>Chman</dc:creator>
				<category><![CDATA[geek]]></category>

		<guid isPermaLink="false">http://blog.thomashourdel.com/?p=263</guid>
		<description><![CDATA[Une simple image pour tout expliquer :

Il est classe, il est doux, il est à la bonne taille. Un peu cher, mais ça vaut le coup.  Pour les intéressés, c&#8217;est par ici.
]]></description>
			<content:encoded><![CDATA[<p>Une simple image pour tout expliquer :</p>
<p style="text-align: center;"><a href="http://blog.thomashourdel.com/wp-content/uploads/2009/05/tpb1-photo.jpg"><img class="alignnone size-full wp-image-264" title="tpb1-photo" src="http://blog.thomashourdel.com/wp-content/uploads/2009/05/tpb1-photo.jpg" alt="tpb1-photo" width="360" height="346" /></a></p>
<p>Il est classe, il est doux, il est à la bonne taille. Un peu cher, mais ça vaut le coup.  Pour les intéressés, c&#8217;est <a href="http://www.bytelove.com/tpb/">par ici</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thomashourdel.com/2009/05/18/thepiratebay-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>histoire de casse couille</title>
		<link>http://blog.thomashourdel.com/2009/02/13/histoire-de-casse-couille/</link>
		<comments>http://blog.thomashourdel.com/2009/02/13/histoire-de-casse-couille/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 18:01:06 +0000</pubDate>
		<dc:creator>Chman</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[vie]]></category>

		<guid isPermaLink="false">http://blog.thomashourdel.com/?p=209</guid>
		<description><![CDATA[Chez Ankama, prendre un congé est souvent accompagné des taquineries les plus folles. En gros, on se fait chambrer, parfois même à l&#8217;excès. Mais lorsque la personne vient nous charrier le matin-même de son week end prolongé, un pas est franchi et une vengeance terrible se met en place.
On avait pour habitude de débrancher la [...]]]></description>
			<content:encoded><![CDATA[<p>Chez Ankama, prendre un congé est souvent accompagné des taquineries les plus folles. En gros, on se fait chambrer, parfois même à l&#8217;excès. Mais lorsque la personne vient nous charrier le matin-même de son week end prolongé, un pas est franchi et une vengeance terrible se met en place.<span id="more-209"></span></p>
<p>On avait pour habitude de débrancher la bécane du concerné ou d&#8217;y brancher une seconde souris pour y mettre des coups tout au long de la journée, de répartir son fauteuil en pièces détachées à chaque coin de l&#8217;open space, de pourrir sa session windows de toutes les façons existantes, bref, les idées ne manquaient pas. Mais cette fois, la décision fut de pourrir son espace de travail.</p>
<p>Dans les faits, on obtient ça :</p>
<p style="text-align: center;"><a href="http://blog.thomashourdel.com/wp-content/uploads/2009/02/aasimar_desktop1.jpg"><img class="alignnone size-thumbnail wp-image-210" title="aasimar_desktop1" src="http://blog.thomashourdel.com/wp-content/uploads/2009/02/aasimar_desktop1-112x150.jpg" alt="aasimar_desktop1" width="112" height="150" /></a> <a href="http://blog.thomashourdel.com/wp-content/uploads/2009/02/aasimar_desktop2.jpg"><img class="alignnone size-thumbnail wp-image-211" title="aasimar_desktop2" src="http://blog.thomashourdel.com/wp-content/uploads/2009/02/aasimar_desktop2-112x150.jpg" alt="aasimar_desktop2" width="112" height="150" /></a></p>
<p style="text-align: center;"><a href="http://blog.thomashourdel.com/wp-content/uploads/2009/02/aasimar_desktop3.jpg"><img class="alignnone size-thumbnail wp-image-212" title="aasimar_desktop3" src="http://blog.thomashourdel.com/wp-content/uploads/2009/02/aasimar_desktop3-150x112.jpg" alt="aasimar_desktop3" width="150" height="112" /></a> <a href="http://blog.thomashourdel.com/wp-content/uploads/2009/02/aasimar_desktop4.jpg"><img class="alignnone size-thumbnail wp-image-213" title="aasimar_desktop4" src="http://blog.thomashourdel.com/wp-content/uploads/2009/02/aasimar_desktop4-150x112.jpg" alt="aasimar_desktop4" width="150" height="112" /></a></p>
<p>Évidemment, les photos (d&#8217;une qualité douteuse) ne rendent pas hommage au travail de maître et à toutes les petites choses cachées, mais vous comprenez l&#8217;idée. Et puis&#8230; Il faut bien garder quelques surprises pour la personne qui, lundi matin, nous aidera à bien commencer la semaine.</p>
<p>C&#8217;est beau le monde du travail&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thomashourdel.com/2009/02/13/histoire-de-casse-couille/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Buddhabrot</title>
		<link>http://blog.thomashourdel.com/2009/01/09/buddhabrot/</link>
		<comments>http://blog.thomashourdel.com/2009/01/09/buddhabrot/#comments</comments>
		<pubDate>Fri, 09 Jan 2009 19:45:50 +0000</pubDate>
		<dc:creator>Chman</dc:creator>
				<category><![CDATA[art]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[geek]]></category>

		<guid isPermaLink="false">http://blog.thomashourdel.com/?p=130</guid>
		<description><![CDATA[Pour faire suite à ce ticket, voici la dernière version de mon générateur de buddhabrot suivie d&#8217;un rendu de 196Mpix (résolution de 14000&#215;14000). Les sources C sont disponibles ici-même (license BSD) accompagnées du SConstruct qu&#8217;il faudra surement modifier pour s&#8217;aligner sur votre architecture, à supposer bien sûr que vous utilisez SCons et GCC. Par défaut [...]]]></description>
			<content:encoded><![CDATA[<p>Pour faire suite à <a href="http://blog.thomashourdel.com/2008/12/20/maths-art/">ce ticket</a>, voici la dernière version de mon générateur de buddhabrot suivie d&#8217;un rendu de 196Mpix (résolution de 14000&#215;14000). Les sources C sont disponibles <a href="http://blog.thomashourdel.com/wp-content/uploads/2009/01/buddhabrot.tar">ici-même</a> (license BSD) accompagnées du SConstruct qu&#8217;il faudra surement modifier pour s&#8217;aligner sur votre architecture, à supposer bien sûr que vous utilisez SCons et GCC. Par défaut :</p>
<pre>-march=core2 -fomit-frame-pointer -O3 -pipe -Wall -m64</pre>
<p>Quant à l&#8217;image&#8230;</p>
<p>J&#8217;ai cherché un moment une solution pour afficher une image haute définition sans passer par l&#8217;api Google Maps ou un serveur de traitement d&#8217;image (<a href="http://iipimage.sourceforge.net/">IIPImage</a> aurait été parfait dans le cas contraire). Je suis tombé sur plusieurs projets plus ou moins aboutis, quelques modules flash peu pratiques, pour finalement tomber sur <a href="http://livelabs.com/seadragon/">Seadragon</a> de&#8230; Microsoft. Non-libre, simplement gratuit pour le moment (bien qu&#8217;ayant croisé quelques threads sur le forum du lab concernant un passage à l&#8217;une de leurs licenses open source) mais il fait son boulot et le fait bien ! Ou presque&#8230; Comme vous le verrez, c&#8217;est assez lent en plein écran.<span id="more-130"></span></p>
<p>Seadragon est la technologie de traitement d&#8217;image de masse développée chez Microsoft qui fait beaucoup parler d&#8217;elle en ce moment. On la retrouve sur Surface (leur table multi-touch) et sur l&#8217;iPhone (!) sous le nom de <a href="http://www.itunes.com/app/Seadragonmobile">Seadragon Mobile</a>, disponible gratuitement sur l&#8217;Appstore. Petite note concernant la version iPhone, elle est tout bonnement impressionnante et d&#8217;une fluidité exemplaire, à tel point que Maps semble se trainer à côté.</p>
<p>Une version javascript est donc disponible pour afficher ses propres images hautes-defs sur son site. Sans plus attendre et en guise d&#8217;exemple, la buddhabrot (déplacement à la souris et zoom à l&#8217;aide de la molette) :</p>
<p><script src="http://seadragon.com/ajax/0.8/seadragon-min.js" type="text/javascript"></script><script type="text/javascript">
var viewer = null;
function init()
{
    viewer = new Seadragon.Viewer("container");
    viewer.openDzi("http://blog.thomashourdel.com/wp-content/uploads/2009/01/buddhabrot.xml");
    Seadragon.Config.maxZoomPixelRatio = 1;
    Seadragon.Config.minZoomDimension = 256;
}
Seadragon.Utils.addEvent(window, "load", init);
</script></p>
<div align="center">
<div id="container" style="background-color: #000; width: 430px; height: 320px; text-align: left;"></div>
</div>
<p>Note pour les impatients : si l&#8217;image semble de basse qualité lors d&#8217;un zoom violent, attendez quelques secondes qu&#8217;elle se charge correctement.</p>
<p>Son intégration au sein d&#8217;un site est très aisée et se résume à quelques lignes de javascript que l&#8217;on trouve dans la doc. Le problème se pose lors de la génération des tiles. Microsoft fournit un outil nommé Deep Zoom Composer. Dans l&#8217;absolu, c&#8217;est de la merde. Impossible de charger correctement une image de quelques dizaines de megabytes, quelque soit le format&#8230; Une petite recherche Google a finalement abouti sur <a href="http://blog.kapilt.com/2008/11/30/sharing-large-images-openlayers-gsiv-modestmaps-deepzoom-and-python/">un script Python</a> automatisant toute la procédure. Alors évidemment, pour des images de plusieurs centaines de Mpix, mieux vaut s&#8217;équiper en ram et utiliser la version 64bits de Python.</p>
<p>Concernant mon morceau de code, il est possible de l&#8217;optimiser de différentes façons. Par exemple, pour générer une image en noir et blanc, il suffit de se contenter d&#8217;un seul canal de couleur, ce qui, au passage, permet de diviser par trois l&#8217;usage en ram. En parlant de mémoire, générer une image de 400Mpix sera impossible avec 4Gb de ram sans swapper énormément. Pour cela, il est préférable de calculer chaque canal séparément et de les merger à la main sous Photoshop ou Gimp. Pour les geeks qui veulent s&#8217;amuser avec le code, pensez à modifier les valeurs suivantes :</p>
<pre>const uint width = 14000, height = 14000;
const ullong iterations = 50000000;

const int red_threshold = 50;
const int green_threshold = 600;
const int blue_threshold = 5500;</pre>
<p>Oh, et bonne année à ceux que je n&#8217;ai pas déjà vu.</p>
<p><strong>(10.01.09) Edit :</strong> Pour ceux qui veulent, voilà un <a href="http://blog.thomashourdel.com/wp-content/uploads/2009/01/buddhabrot_196mpix.jpg">jpeg</a> de la buddhabrot complète. Je conseille de faire un clique-droit/sauvegarder, l&#8217;image étant excessivement lourde.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thomashourdel.com/2009/01/09/buddhabrot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Illuminated keyboard</title>
		<link>http://blog.thomashourdel.com/2008/12/29/illuminated-keyboard/</link>
		<comments>http://blog.thomashourdel.com/2008/12/29/illuminated-keyboard/#comments</comments>
		<pubDate>Mon, 29 Dec 2008 13:29:21 +0000</pubDate>
		<dc:creator>Chman</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[hardware]]></category>

		<guid isPermaLink="false">http://blog.thomashourdel.com/?p=114</guid>
		<description><![CDATA[Je fais partie des gens ayant un esprit d&#8217;écureuil, à savoir que je conserve les choses le plus longtemps possible. Non pas par radinerie, mais par attachement (et accessoirement parce que je ne suis pas Crésus). Preuve en est avec ma souris Logitech que je traine depuis&#8230; Le collège. Pourquoi la changer ? Très précise, [...]]]></description>
			<content:encoded><![CDATA[<p>Je fais partie des gens ayant un esprit d&#8217;écureuil, à savoir que je conserve les choses le plus longtemps possible. Non pas par radinerie, mais par attachement (et accessoirement parce que je ne suis pas Crésus). Preuve en est avec ma souris Logitech que je traine depuis&#8230; Le collège. Pourquoi la changer ? Très précise, ergonomique, que demander de plus ? Alors oui, à l&#8217;heure des souris laser sans fil avec whatmille boutons, avoir une simple souris cablée à boule fait quelque peu rétro. Mais j&#8217;aime le rétro&#8230;<span id="more-114"></span></p>
<p>Pourtant, j&#8217;ai dut me séparer de mon clavier qui commençait à prendre l&#8217;âge (un Logitech Ultra FlatX). Sa frappe devenait assez dure et la moitié des touches étaient effacées, ce qui donnait l&#8217;impression de taper sur un clavier invisible. Après moultes recherches, je suis finalement tombé sur l&#8217;<a href="http://www.logitech.com/index.cfm/keyboards/keyboard/devices/4740&amp;cl=fr,fr#" target="_blank">Illuminated Keyboard</a>, toujours chez Logitech (on ne change pas une équipe qui gagne). Très récent (sortit le 7 décembre en Europe), il n&#8217;a pas été facile de se le procurer : tous les marchands ont été livrés le 24 décembre.</p>
<p style="text-align: center;"><a href="http://blog.thomashourdel.com/wp-content/uploads/2008/12/logitech_illuminated_01.jpg"><img class="alignnone size-thumbnail wp-image-115" src="http://blog.thomashourdel.com/wp-content/uploads/2008/12/logitech_illuminated_01-150x100.jpg" alt="" width="150" height="100" /></a> <a href="http://blog.thomashourdel.com/wp-content/uploads/2008/12/logitech_illuminated_02.jpg"><img class="alignnone size-thumbnail wp-image-116" src="http://blog.thomashourdel.com/wp-content/uploads/2008/12/logitech_illuminated_02-150x100.jpg" alt="" width="150" height="100" /></a></p>
<p>Alors que dire&#8230; Ce clavier est parfait. Très sobre, ultra fin, rétroéclairage variable. Mais le plus impressionnant reste l&#8217;aisance de frappe et son silence. Il s&#8217;agit d&#8217;un clavier dit &laquo;&nbsp;plat&nbsp;&raquo; comme ceux des portables ou celui d&#8217;Apple, à la différence que les touches sont ce que j&#8217;appelle semi-souples. Une touche frappée légèrement repoussera le doigts afin de donner une sensation d&#8217;élasticité qui apporte énormément en confort et en rapidité de frappe. Il est difficile d&#8217;en expliquer le principe, le mieux est de le tester.</p>
<p>Son layout et la taille des touches sont aussi très bien pensés. Par exemple, la touche Suppr est doublée, supprimant l&#8217;affreux Insert qui se retrouve planqué en haut du clavier à côté du Print Screen. De même pour les indicateurs d&#8217;états qui sont en général représentés par d&#8217;horribles LEDs en haut du clavier (Numlock, Caps Lock etc), ceux-ci sont directement intégrés dans la coque sous le pavé numérique, à la façon des claviers Apple dernières générations. Ainsi, un indicateur éteint sera purement invisible.</p>
<p>Pleins de petites choses par-ci par-là qui font de ce clavier une référence&#8230; Il peut paraître un peu cher, mais croyez-moi, il vaut clairement son prix, d&#8217;autant plus qu&#8217;il en ressort une impression de solidité.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thomashourdel.com/2008/12/29/illuminated-keyboard/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Maths art</title>
		<link>http://blog.thomashourdel.com/2008/12/20/maths-art/</link>
		<comments>http://blog.thomashourdel.com/2008/12/20/maths-art/#comments</comments>
		<pubDate>Sat, 20 Dec 2008 13:44:31 +0000</pubDate>
		<dc:creator>Chman</dc:creator>
				<category><![CDATA[art]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.thomashourdel.com/?p=74</guid>
		<description><![CDATA[J&#8217;ai toujours aimé connaitre le fonctionnement des choses et d&#8217;en faire des prototypes ou des tests sans pour autant que cela ne me serve à quoique ce soit (toute blague au gout douteux est à proscrire, merci). Je suis légèrement geek, c&#8217;est comme ça, j&#8217;assume. J&#8217;aime bien réfléchir à la façon dont est codé chaque [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai toujours aimé connaitre le fonctionnement des choses et d&#8217;en faire des prototypes ou des tests sans pour autant que cela ne me serve à quoique ce soit (toute blague au gout douteux est à proscrire, merci). Je suis légèrement geek, c&#8217;est comme ça, j&#8217;assume. J&#8217;aime bien réfléchir à la façon dont est codé chaque logiciel que j&#8217;utilise au quotidien, notamment ceux liés à l&#8217;imagerie numérique.</p>
<p>C&#8217;est en faisant joujou avec les matrices de convolution, filtres et autres méthodes de traitement d&#8217;image que j&#8217;en suis arrivé à m&#8217;intéresser à deux choses en particulier : les attracteurs chaotiques et les fractales.<span id="more-74"></span></p>
<p>Les premiers sont des <a href="http://en.wikipedia.org/wiki/Dynamical_system" target="_blank">systèmes dynamiques</a> simples à implémenter (une fois la formule connue) et donnent des résultats visuels assez intéressants. Prenons l&#8217;équation de Peter De Jong définit de la manière suivante :</p>
<p style="text-align: center;"><img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_983_955c804c3cd26139e7491b8a3d7e19fd.png" style="vertical-align:-17px; display: inline-block ;" alt="x_{n+1}=sin(ay_{n})-cos(bx_{n})" title="x_{n+1}=sin(ay_{n})-cos(bx_{n})"/></p>
<p style="text-align: center;"><img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_983_d076314c618f5aad3da6ebab30da804e.png" style="vertical-align:-17px; display: inline-block ;" alt="y_{n+1}=sin(cx_{n})-cos(dy_{n})" title="y_{n+1}=sin(cx_{n})-cos(dy_{n})"/></p>
<p>Où <img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_ed20a959d410ccd843d9e1dfcee04228.png" style="vertical-align:-6.5px; display: inline-block ;" alt="a" title="a"/>, <img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_2afd410e2e5b23dad6f18513b2f72d0d.png" style="vertical-align:-6.5px; display: inline-block ;" alt="b" title="b"/>, <img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_5c385d6d334ea0a9301bd28ea067aba7.png" style="vertical-align:-6.5px; display: inline-block ;" alt="c" title="c"/> et <img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_209014ef5d519d8f9e9ab107d554e96b.png" style="vertical-align:-6.5px; display: inline-block ;" alt="d" title="d"/> sont des constantes décimales. Le point (<img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_137b8dad9acade63b507e67878d3b94b.png" style="vertical-align:-6.5px; display: inline-block ;" alt="x" title="x"/>,<img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_f15df4ceab77f403bc3fed686a8c8edf.png" style="vertical-align:-6.5px; display: inline-block ;" alt="y" title="y"/>) va alors se déplacer de façon chaotique au cours du temps. L&#8217;image obtenue sera en fait une carte de probabilité pour que le point se trouve dans la zone définie par chaque pixel.</p>
<p>Il existe une variante de Clifford Pickover :</p>
<p style="text-align: center;"><img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_983_0adda3f2b84684c3ef1ca11d234594f2.png" style="vertical-align:-17px; display: inline-block ;" alt="x_{n+1}=sin(ay_{n})-c*cos(ax_{n})" title="x_{n+1}=sin(ay_{n})-c*cos(ax_{n})"/></p>
<p style="text-align: center;"><img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_983_437848107317707d4dab806f6889a849.png" style="vertical-align:-17px; display: inline-block ;" alt="y_{n+1}=sin(bx_{n})-d*cos(cy_{n})" title="y_{n+1}=sin(bx_{n})-d*cos(cy_{n})"/></p>
<p>On trouve dans la même catégorie l&#8217;attracteur de Tinkerbell :</p>
<p style="text-align: center;"><img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_fcbd00bdb8e89b6294b41b32bf595a34.png" style="vertical-align:-14.5px; display: inline-block ;" alt="x_{n+1}={x_{n}}^2-{y_{n}}^2+ax_{n}+by_{n}" title="x_{n+1}={x_{n}}^2-{y_{n}}^2+ax_{n}+by_{n}"/></p>
<p style="text-align: center;"><img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_d08f1e6c3f533f82da5ecdececeff582.png" style="vertical-align:-14.5px; display: inline-block ;" alt="y_{n+1}=2x_{n}y_{n}+cx_{n}+dy_{n}" title="y_{n+1}=2x_{n}y_{n}+cx_{n}+dy_{n}"/></p>
<p>Ou encore la Hénon map qui ne dépend que deux paramètres et qui a pour particularité de n&#8217;être purement chaotique pour les valeurs <img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_7adabc7cb4fdad11a6cddc451dc1aca7.png" style="vertical-align:-6.5px; display: inline-block ;" alt="a=1.4" title="a=1.4"/> et <img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_a74abe1c9e4ad6dbaad099a96a726a4e.png" style="vertical-align:-6.5px; display: inline-block ;" alt="b=0.3" title="b=0.3"/>. Ne me demandez pas de l&#8217;expliquer, cela sort de mes compétences.</p>
<p style="text-align: center;"><img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_4ed8a83ed1038ec6f1aeaa95c08740f4.png" style="vertical-align:-14.5px; display: inline-block ;" alt="x_{n+1}=y_{n}+1-a{x_{n}}^2" title="x_{n+1}=y_{n}+1-a{x_{n}}^2"/></p>
<p style="text-align: center;"><img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_7efa48c5246bb0fa3eeece7e9ecbd66c.png" style="vertical-align:-14.5px; display: inline-block ;" alt="y_{n+1}=bx_{n}" title="y_{n+1}=bx_{n}"/></p>
<p>Histoire d&#8217;illustrer le tout, voici quelques rendus obtenus à l&#8217;aide d&#8217;un script Python bien lent (disponible ci-dessous) :</p>
<p style="text-align: center;"><a href="http://blog.thomashourdel.com/wp-content/uploads/2008/12/peterdejongmap1.png"><img class="size-full wp-image-91 alignnone" src="http://blog.thomashourdel.com/wp-content/uploads/2008/12/peterdejongmap1th.png" alt="" width="150" height="150" /></a> <a href="http://blog.thomashourdel.com/wp-content/uploads/2008/12/peterdejongmap2.png"><img class="size-full wp-image-101 alignnone" src="http://blog.thomashourdel.com/wp-content/uploads/2008/12/peterdejongmap2th.png" alt="" width="150" height="150" /></a></p>
<p style="text-align: center;"><a href="http://blog.thomashourdel.com/wp-content/uploads/2008/12/cliffordmap1.png"><img class="alignnone size-full wp-image-95" src="http://blog.thomashourdel.com/wp-content/uploads/2008/12/cliffordmap1th.png" alt="" width="150" height="150" /></a> <a href="http://blog.thomashourdel.com/wp-content/uploads/2008/12/cliffordmap2.png"><img class="alignnone size-full wp-image-97" src="http://blog.thomashourdel.com/wp-content/uploads/2008/12/cliffordmap2th.png" alt="" width="150" height="150" /></a></p>
<p style="text-align: center;"><a href="http://blog.thomashourdel.com/wp-content/uploads/2008/12/henonmap.png"><img class="alignnone size-full wp-image-99" src="http://blog.thomashourdel.com/wp-content/uploads/2008/12/henonmapth.png" alt="" width="150" height="150" /></a> <a href="http://blog.thomashourdel.com/wp-content/uploads/2008/12/tinkerbellmap.png"><img class="alignnone size-full wp-image-103" src="http://blog.thomashourdel.com/wp-content/uploads/2008/12/tinkerbellmapth.png" alt="" width="150" height="150" /></a></p>
<p style="text-align: center;">Code source : <a href="http://blog.thomashourdel.com/wp-content/uploads/2008/12/ChaoticMaps.py">ChaoticMaps.py</a></p>
<p>Passons maintenant à quelque chose de visuellement plus stimulant. Toute personne connaissant de prêt ou de loin le terme &laquo;&nbsp;fractal&nbsp;&raquo; pensera immédiatement à l&#8217;ensemble de Mandelbrot. Il en existe une variante nommée Buddhabrot permettant d&#8217;obtenir, comme son nom l&#8217;indique, un visuel relativement proche de certaines représentations de Buddha. L&#8217;ensemble de base de Mandelbrot est définit de la façon suivante :</p>
<p>Soit <img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_5c385d6d334ea0a9301bd28ea067aba7.png" style="vertical-align:-6.5px; display: inline-block ;" alt="c" title="c"/> un nombre complexe et <img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_8039b4e0e6fe78bee7d3e5cfbfa343f0.png" style="vertical-align:-6.5px; display: inline-block ;" alt="f" title="f"/> une fonction définie par :</p>
<p style="text-align: center;"><img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_990.5_e8eb4bf7a0e3eb8c80a3cc28b82d44e7.png" style="vertical-align:-9.5px; display: inline-block ;" alt="f(z)=z^2+2" title="f(z)=z^2+2"/></p>
<p>Si <img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_c198758da71d3c57f860a46bf455cfea.png" style="vertical-align:-14.5px; display: inline-block ;" alt="z_{0}=0" title="z_{0}=0"/>, on peut alors définir une suite récurrente par :</p>
<p style="text-align: center;"><img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_983_c401a996971cc45b07e7c1ec009b8625.png" style="vertical-align:-17px; display: inline-block ;" alt="z_{n+1}=f(z_{n})" title="z_{n+1}=f(z_{n})"/></p>
<p>L&#8217;ensemble de Mandelbrot est alors l&#8217;ensemble des <img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_5c385d6d334ea0a9301bd28ea067aba7.png" style="vertical-align:-6.5px; display: inline-block ;" alt="c" title="c"/> tels que la suite <img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_f3368568f1383db27e68c891882e8432.png" style="vertical-align:-14.5px; display: inline-block ;" alt="z_{n}" title="z_{n}"/> ne tende pas vers l&#8217;infini.</p>
<p>Plutôt que d&#8217;expliquer en détail le fonctionnement de la Buddhabrot, je vais me contenter de citer un très bon résumé de <a href="http://fr.wikipedia.org/wiki/Buddhabrot" target="_blank">wikipedia</a> :</p>
<blockquote><p>Pour obtenir le Buddhabrot, on utilise un tableau à deux dimensions, chaque case représentant un pixel. Pour des points <img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_5c385d6d334ea0a9301bd28ea067aba7.png" style="vertical-align:-6.5px; display: inline-block ;" alt="c" title="c"/> choisis au hasard (ou, alternativement, régulièrement espacés) dans le plan, si ces points s&#8217;échappent après un certain nombre d&#8217;itérations (donc n&#8217;appartiennent pas à l&#8217;ensemble de Mandelbrot), on incrémente le tableau aux points correspondant aux valeurs successives de <img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_993.5_1cfd85b4b16bd74555013b09a732afbd.png" style="vertical-align:-6.5px; display: inline-block ;" alt="z" title="z"/> prises par la suite <img src="http://blog.thomashourdel.com/wp-content/plugins/wpmathpub/phpmathpublisher/img/math_985.5_f3368568f1383db27e68c891882e8432.png" style="vertical-align:-14.5px; display: inline-block ;" alt="z_{n}" title="z_{n}"/> (on &laquo;&nbsp;suit&nbsp;&raquo; le parcours des points). Après un certain nombre d&#8217;itérations, l&#8217;image obtenue en affectant une couleur à chaque point du tableau se stabilise sur le Buddhabrot.</p></blockquote>
<p>Voici le résultat de deux rendus (tolérances de couleurs différentes) effectués dans la nuit. La sortie d&#8217;origine est de 4096&#215;4096 pixels mais a évidemment été réduite pour un affichage web. Les versions haute-définitions sont toujours en cours de calcul, je les posterai à l&#8217;occasion pour ceux qui veulent zoomer et apprécier le niveau de détail (croyez-moi, les deux petites images ci-dessous ne rendent pas honneur à la beauté de la chose).</p>
<p style="text-align: center;"><a href="http://blog.thomashourdel.com/wp-content/uploads/2008/12/buddhabrot1.jpg"><img class="alignnone size-thumbnail wp-image-109" src="http://blog.thomashourdel.com/wp-content/uploads/2008/12/buddhabrot1-150x150.jpg" alt="" width="150" height="150" /></a> <a href="http://blog.thomashourdel.com/wp-content/uploads/2008/12/buddhabrot2.jpg"><img class="alignnone size-thumbnail wp-image-110" src="http://blog.thomashourdel.com/wp-content/uploads/2008/12/buddhabrot2-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p style="text-align: center;">Code source : <a href="http://blog.thomashourdel.com/wp-content/uploads/2008/12/buddhabrot.tar">buddhabrot.tar</a></p>
<p style="text-align: justify;">Les sources contiennent une version Python et une version C. Si vous le pouvez, favorisez évidemment la version C qui est 30 à 40 fois plus rapide.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thomashourdel.com/2008/12/20/maths-art/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python wtf</title>
		<link>http://blog.thomashourdel.com/2008/11/27/python-wtf/</link>
		<comments>http://blog.thomashourdel.com/2008/11/27/python-wtf/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 19:37:08 +0000</pubDate>
		<dc:creator>Chman</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.thomashourdel.com/?p=29</guid>
		<description><![CDATA[Il arrive quelque fois qu&#8217;un codeur passe des heures à se tirer les cheveux sur un bug farfelue bien caché, voir introuvable. Lorsqu&#8217;il s&#8217;agit d&#8217;un bug d&#8217;implémentation propre au langage et que l&#8217;on s&#8217;en rend compte après une heure à tripatouiller les lignes de code une par une, un certain sentiment de haine se met [...]]]></description>
			<content:encoded><![CDATA[<p>Il arrive quelque fois qu&#8217;un codeur passe des heures à se tirer les cheveux sur un bug farfelue bien caché, voir introuvable. Lorsqu&#8217;il s&#8217;agit d&#8217;un bug d&#8217;implémentation propre au langage et que l&#8217;on s&#8217;en rend compte après une heure à tripatouiller les lignes de code une par une, un certain sentiment de haine se met en place et des envies de meurtre surgissent du plus profond de soi.</p>
<p>Les gens proches de moi connaissent mon amour grandissant du Python (fabuleux langage, soit-dit en passant). Il n&#8217;est pourtant pas sans défaut. Si quelqu&#8217;un pouvait m&#8217;apporter sur un plateau d&#8217;argent la tête de la personne responsable du typage dynamique du langage en question, je lui en serais reconnaissant. En effet, le typage faible a pour vocation première de ne pas prendre la tête du développeur et de gérer lui-même les casts (bien que je sois partisan du typage statique, j&#8217;aime bien avoir le contrôle complet de mon code). Et pourtant, en Python, cela foire dans certains cas.<span id="more-29"></span></p>
<p>Petite démonstration, voulez-vous ?</p>
<pre> ~: python
Python 2.5.2 [...]
&gt;&gt;&gt; import math
&gt;&gt;&gt; 3/4 * math.pi
0.0</pre>
<p>Ah, tiens, grande nouvelle ! Depuis quand trois quarts de π est égal à 0 ? Un doute commence à germer dans mon esprit&#8230; Testons le même calcul différemment :</p>
<pre>&gt;&gt;&gt; 3 * math.pi / 4
2.3561944901923448</pre>
<p>Ainsi donc je ne suis pas fou. Au fond, c&#8217;est déjà ça&#8230; En réalité, ce qu&#8217;il se passe est que Python va définir un type par nombre et non pas un type global pour l&#8217;opération entière. Donc forcément, trois divisé par quatre sera arrondi à l&#8217;entier inférieur. D&#8217;ailleurs au passage, si l&#8217;arrondi était correct j&#8217;aurais eu tendance à expecter 1 plutôt que 0, mais bon passons. Le seul moyen d&#8217;éviter ça et de forcer le typage d&#8217;une façon ou d&#8217;une autre :</p>
<pre>&gt;&gt;&gt; 3./4 * math.pi
2.3561944901923448
&gt;&gt;&gt; 3/float(4) * math.pi
2.3561944901923448</pre>
<p>Après quelques recherches sur mon ami Google, il apparait que ce &laquo;&nbsp;problème&nbsp;&raquo; est connu et ne sera plus présent dans la version 3 de Python. Franchement, la prochaine fois, merci de préciser ce défaut d&#8217;implémentation en grosses capitales en pleins milieu du site officiel, ça m&#8217;évitera de perdre une heure à chercher pourquoi un algo plante.</p>
<p><strong>(04.12.08) </strong><strong>Edit :</strong> je confirme qu&#8217;avec la version 3 de Python fraichement sortie ce matin, le problème ne se pose plus.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thomashourdel.com/2008/11/27/python-wtf/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
