<?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>Olivier Balais</title>
	<atom:link href="http://blog.overnetcity.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.overnetcity.com</link>
	<description>OvernetCity, blog d&#039;un auto-entrepreneur passionné par le développement Web et les NTIC</description>
	<lastBuildDate>Thu, 26 Jan 2012 13:08:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>Failed opening required &#8216;phar://&#8230;</title>
		<link>http://blog.overnetcity.com/25-01-2012/failed-opening-required-phar/</link>
		<comments>http://blog.overnetcity.com/25-01-2012/failed-opening-required-phar/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 20:32:52 +0000</pubDate>
		<dc:creator>Olivier Balais</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[behat]]></category>
		<category><![CDATA[exception]]></category>
		<category><![CDATA[include]]></category>
		<category><![CDATA[ioncube]]></category>
		<category><![CDATA[phar]]></category>

		<guid isPermaLink="false">http://blog.overnetcity.com/?p=513</guid>
		<description><![CDATA[Chez PMSIpilot, nous commençons à utiliser Behat pour nos tests fonctionnels. Je ne vais pas m&#8217;étendre sur toutes les belles choses que ce framework de bdd apportera au testing de votre projet, il vous suffit de vous rendre sur leur site officiel et de lire leur introduction rapide pour vous en persuader. Le problème auquel [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F25-01-2012%2Ffailed-opening-required-phar%2F' data-shr_title='Failed+opening+required+%27phar%3A%2F%2F...'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F25-01-2012%2Ffailed-opening-required-phar%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F25-01-2012%2Ffailed-opening-required-phar%2F' data-shr_title='Failed+opening+required+%27phar%3A%2F%2F...'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Chez <a href="http://www.pmsipilot.org/" title="Blog du service technique de PMSIpilot" target="_blank">PMSIpilot</a>, nous commençons à utiliser Behat pour nos tests fonctionnels.<br />
Je ne vais pas m&#8217;étendre sur toutes les belles choses que ce framework de bdd apportera au testing de votre projet, il vous suffit de vous rendre sur leur <a href="http://behat.org/" target="_blank">site officiel</a> et de lire leur <a href="http://docs.behat.org/quick_intro.html" target="_blank">introduction rapide</a> pour vous en persuader.</p>
<p>Le problème auquel j&#8217;ai immédiatement fait face en tentant d&#8217;inclure le Phar de Behat est le suivant :</p>
<p><code>Fatal error: require(): Failed opening required 'phar:///[...]/lib/vendor/behat/behat.phar'</code></p>
<p>La ligne incriminée ne pouvait pas être plus simple :</p>
<p><code>include 'phar:///[...]/lib/vendor/behat/behat.phar';</code></p>
<p>Après avoir interrogé dans toutes les langues et sous toutes les formes mon moteur de recherché préféré, difficile de trouver une explication rationnelle.<br />
Comme souvent, la réponse est venue par l&#8217;intermédiaire d&#8217;un collègue (merci <a href="https://fr.twitter.com/#!/jubianchi" target="_blank">@jubianchi</a> et <a href="https://fr.twitter.com/#!/ratibus" target="_blank">@ratibus</a> !) et il s&#8217;avère que c&#8217;est l&#8217;extension ioncube qui était en cause sur mon poste. Si vous avez ce problème, c&#8217;est donc peut-être une piste à suivre.</p>
<p>Pour tester si <a href="http://www.ioncube.com/" target="_blank">ioncube </a>est activé :</p>
<p><code>$ php -i | grep -i ioncube<br />
    with the ionCube PHP Loader v4.0.5, Copyright (c) 2002-2011, by ionCube Ltd., and<br />
ionCube Loader<br />
</code></p>
<p>Chez moi c&#8217;était la version ioncube <strong>4.0.5</strong> qui posait problème. Rassurez-vous néanmoins, une fois la dernière version de ioncube installée, plus de problème à noter ! Apparemment le problème est réglé au moins depuis la version 4.0.9.</p>
<p>Le lien direct pour télécharger la dernière version stable pour une distrib linux 32 bits : <a href="http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86.tar.gz">http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86.tar.gz</a></p>
<p>Une fois l&#8217;extension décompressée et placée au bon endroit, l&#8217;include passe sans encombre.</p>
<p><code>$ php -i | grep -i ioncube<br />
    with the ionCube PHP Loader v4.0.12, Copyright (c) 2002-2011, by ionCube Ltd., and<br />
ionCube Loader</code></p>
<div class="shr-publisher-513"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F25-01-2012%2Ffailed-opening-required-phar%2F' data-shr_title='Failed+opening+required+%27phar%3A%2F%2F...'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F25-01-2012%2Ffailed-opening-required-phar%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F25-01-2012%2Ffailed-opening-required-phar%2F' data-shr_title='Failed+opening+required+%27phar%3A%2F%2F...'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://blog.overnetcity.com/25-01-2012/failed-opening-required-phar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comment trouver la version de son Ubuntu ?</title>
		<link>http://blog.overnetcity.com/23-01-2012/comment-trouver-la-version-de-son-ubuntu/</link>
		<comments>http://blog.overnetcity.com/23-01-2012/comment-trouver-la-version-de-son-ubuntu/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 12:41:20 +0000</pubDate>
		<dc:creator>Olivier Balais</dc:creator>
				<category><![CDATA[Non classé]]></category>

		<guid isPermaLink="false">http://blog.overnetcity.com/?p=506</guid>
		<description><![CDATA[Il est souvent utile de connaître la version de son système d&#8217;exploitation. Et si il est assez évident de connaître sa version de Windows tant les changements d&#8217;interface sont importants, c&#8217;est parfois moins évident d&#8217;une distribution Ubuntu à l&#8217;autre. La commande magique pour répondre à ce besoin est tout simplement la suivante : > lsb_release [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F23-01-2012%2Fcomment-trouver-la-version-de-son-ubuntu%2F' data-shr_title='Comment+trouver+la+version+de+son+Ubuntu+%3F'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F23-01-2012%2Fcomment-trouver-la-version-de-son-ubuntu%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F23-01-2012%2Fcomment-trouver-la-version-de-son-ubuntu%2F' data-shr_title='Comment+trouver+la+version+de+son+Ubuntu+%3F'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Il est souvent utile de connaître la version de son système d&#8217;exploitation. Et si il est assez évident de connaître sa version de Windows tant les changements d&#8217;interface sont importants, c&#8217;est parfois moins évident d&#8217;une distribution Ubuntu à l&#8217;autre.<br />
La commande magique pour répondre à ce besoin est tout simplement la suivante :</p>
<p><code>> lsb_release -a<br />
No LSB modules are available.<br />
Distributor ID:	Ubuntu<br />
Description:	Ubuntu 10.10<br />
Release:	10.10<br />
Codename:	maverick<br />
</code></p>
<p>Vous obtenez ainsi votre numéro de version mais aussi son nom de code, Maverick pour moi. Oui je sais, il faut que j&#8217;upgrade !</p>
<div class="shr-publisher-506"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F23-01-2012%2Fcomment-trouver-la-version-de-son-ubuntu%2F' data-shr_title='Comment+trouver+la+version+de+son+Ubuntu+%3F'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F23-01-2012%2Fcomment-trouver-la-version-de-son-ubuntu%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F23-01-2012%2Fcomment-trouver-la-version-de-son-ubuntu%2F' data-shr_title='Comment+trouver+la+version+de+son+Ubuntu+%3F'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://blog.overnetcity.com/23-01-2012/comment-trouver-la-version-de-son-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Passer de SVN à Git en préservant son historique de commits</title>
		<link>http://blog.overnetcity.com/14-11-2011/passer-de-svn-a-git-en-preservant-son-historique-de-commits/</link>
		<comments>http://blog.overnetcity.com/14-11-2011/passer-de-svn-a-git-en-preservant-son-historique-de-commits/#comments</comments>
		<pubDate>Mon, 14 Nov 2011 09:24:59 +0000</pubDate>
		<dc:creator>Olivier Balais</dc:creator>
				<category><![CDATA[Développement Web]]></category>

		<guid isPermaLink="false">http://blog.overnetcity.com/?p=483</guid>
		<description><![CDATA[Subversion (SVN) a eu une belle carrière parmi les outils de versionning mais il est aujourd&#8217;hui largement supplanté par Git. Plus souple, plus rapide, plus puissant, nombreux sont les développeurs qui souhaitent migrer leurs dépôts vers Git. Mais il serait dommage de perdre l&#8217;historique de son projet, surtout quand celui-ci remonte sur plusieurs mois / [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F14-11-2011%2Fpasser-de-svn-a-git-en-preservant-son-historique-de-commits%2F' data-shr_title='Passer+de+SVN+%C3%A0+Git+en+pr%C3%A9servant+son+historique+de+commits'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F14-11-2011%2Fpasser-de-svn-a-git-en-preservant-son-historique-de-commits%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F14-11-2011%2Fpasser-de-svn-a-git-en-preservant-son-historique-de-commits%2F' data-shr_title='Passer+de+SVN+%C3%A0+Git+en+pr%C3%A9servant+son+historique+de+commits'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Subversion (SVN) a eu une belle carrière parmi les outils de versionning mais il est aujourd&#8217;hui largement supplanté par Git. Plus souple, plus rapide, plus puissant, nombreux sont les développeurs qui souhaitent migrer leurs dépôts vers Git. Mais il serait dommage de perdre l&#8217;historique de son projet, surtout quand celui-ci remonte sur plusieurs mois / années.</p>
<p>Le sujet a déjà largement été abordé sur différents blogs, forums et mailing-list mais je vais simplement compléter les étapes classiques par celles que j&#8217;ai dû ajouter pour pouvoir migrer mes propres dépôts SVN qui n&#8217;avaient pas tous une structure standard (pas de Trunk par exemple&#8230;).<br />
Nous utiliserons la commande par défaut git-svn. Si besoin : <code>sudo apt-get install git-svn</code></p>
<p>Quelques étapes indispensables (pour plus de détails, se rendre à <a href="http://help.github.com/import-from-subversion/">cette adresse</a>, ou à <a href="http://www.albin.net/git/convert-subversion-to-git">celle-ci</a>) :</p>
<h2>Récupérer les différents commiters sur son dépôt SVN</h2>
<p><code>svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > commiters.txt</code></p>
<p>Il suffit ensuite de transformer chaque ligne du fichier généré vers quelque chose du genre :</p>
<p>obalais = Olivier Balais &lt;obalais@server.com&gt;</p>
<h2>Cloner votre dépôt SVN</h2>
<p>Ici on spécifie l&#8217;url de son dépôt SVN, le fichier à utiliser pour les logs de commit et un dossier dans lequel cloner le dépôt. L&#8217;option no-metadata supprime les notes que git-svn ajoute à chaque message de commit par défaut.</p>
<p><code>git svn clone URL_DEPOT --no-metadata -A commiters.txt --stdlayout ~/mon_depot</code></p>
<p>Certains de mes dépôts avaient une structure non standard. Par exemple, certains projets simples n&#8217;avaient tout simplement pas de trunk, branches et tags mais directement la structure du projet commitée à la racine du dépôt (oui c&#8217;est moche&#8230;). Pour se sortir de ce genre de galères on peut utiliser les options -T, -t et -b pour spécifier les URI des Trunk, Tag et Branches. Dans mon cas, j&#8217;ai utilisé la commande suivante :</p>
<p><code>git svn clone URL_DEPOT --no-metadata <strong>-T</strong> / -A authors.txt --stdlayout ~/mon_depot</code></p>
<p>Sur un projet, j&#8217;ai également souhaité récupérer tous les commits excepté le dernier. Pour cela, il suffit d&#8217;ajouter l&#8217;option <code>-r initial_revision:final_revision</code>. Exemple :</p>
<p><code>git svn clone URL_DEPOT --no-metadata -T / <strong>-r 1:99</strong> -A authors.txt --stdlayout ~/mon_depot</code></p>
<h2>Créer un dépôt vide pour y pusher le contenu de son ancien dépôt SVN</h2>
<p><code>git init --bare ~/mon_projet.git<br />
cd ~/mon_projet.git<br />
git symbolic-ref HEAD refs/heads/trunk</code></p>
<p>Pusher le contenu en faisant :</p>
<p><code>cd ~/mon_depot<br />
git remote add bare ~/mon_projet.git<br />
git config remote.bare.push 'refs/remotes/*:refs/heads/*'<br />
git push bare</code></p>
<p>Il ne reste désormais plus qu&#8217;à renommer la branche trunk en master&#8230;</p>
<h2>Renommer son trunk en master</h2>
<p><code>cd ~/mon_projet.git<br />
git branch -m trunk master</code></p>
<p>And you&#8217;re done!</p>
<div class="shr-publisher-483"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F14-11-2011%2Fpasser-de-svn-a-git-en-preservant-son-historique-de-commits%2F' data-shr_title='Passer+de+SVN+%C3%A0+Git+en+pr%C3%A9servant+son+historique+de+commits'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F14-11-2011%2Fpasser-de-svn-a-git-en-preservant-son-historique-de-commits%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F14-11-2011%2Fpasser-de-svn-a-git-en-preservant-son-historique-de-commits%2F' data-shr_title='Passer+de+SVN+%C3%A0+Git+en+pr%C3%A9servant+son+historique+de+commits'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://blog.overnetcity.com/14-11-2011/passer-de-svn-a-git-en-preservant-son-historique-de-commits/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ray Kurzweil &#8211; Quelques pistes concernant notre avenir</title>
		<link>http://blog.overnetcity.com/03-10-2011/ray-kurzweil-quelques-pistes-concernant-notre-avenir/</link>
		<comments>http://blog.overnetcity.com/03-10-2011/ray-kurzweil-quelques-pistes-concernant-notre-avenir/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 12:03:56 +0000</pubDate>
		<dc:creator>Olivier Balais</dc:creator>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[avenir]]></category>
		<category><![CDATA[bioinformatique]]></category>
		<category><![CDATA[body 2.0]]></category>
		<category><![CDATA[ray kurzweil]]></category>

		<guid isPermaLink="false">http://blog.overnetcity.com/?p=475</guid>
		<description><![CDATA[Quelques vidéos de Raymond Kurzweil ont été publiées sur Arte.tv. La description que fait Kurzweil de notre futur correspond assez bien à celle du monde dans lequel je pense que nous vivrons dans quelques années. Un bon moyen de mettre facilement des mots sur mes pensées&#8230; Qu&#8217;est-ce que la Singularité ? &#8220;En 2029 l&#8217;intelligence des [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F03-10-2011%2Fray-kurzweil-quelques-pistes-concernant-notre-avenir%2F' data-shr_title='Ray+Kurzweil+-+Quelques+pistes+concernant+notre+avenir'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F03-10-2011%2Fray-kurzweil-quelques-pistes-concernant-notre-avenir%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F03-10-2011%2Fray-kurzweil-quelques-pistes-concernant-notre-avenir%2F' data-shr_title='Ray+Kurzweil+-+Quelques+pistes+concernant+notre+avenir'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Quelques vidéos de Raymond Kurzweil ont été publiées sur Arte.tv.<br />
La description que fait Kurzweil de notre futur correspond assez bien à celle du monde dans lequel je pense que nous vivrons dans quelques années. Un bon moyen de mettre facilement des mots sur mes pensées&#8230;</p>
<p>Qu&#8217;est-ce que la Singularité ?</p>
<p>&#8220;En 2029 l&#8217;intelligence des ordinateurs sera égale à celle des humains. En 2045 les ordinateurs seront tellement plus puissants que nos petits 100 milliards de neurones qu&#8217;on ne peut absolument pas prévoir ce qu&#8217;il va se passer.&#8221;</p>
<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" id="playerArte" allowScriptAccess="always" width="450" height="303" ><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="quality" value="high"><param name="movie" value="http://videos.arte.tv/videoplayer.swf?admin=false&#038;autoPlay=true&#038;localizedPathUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2F&#038;mode=prod&#038;configFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2Fconfig%2Exml&#038;videoId=4157746&#038;lang=fr&#038;videorefFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Ffr%2Fdo%5Fdelegate%2Fvideos%2Fray%5Fkurzweil%5Fqu%5Fest%5Fce%5Fque%5Fla%5Fsingularite%5F%2D4157746%2Cview%2CasPlayerXml%2Exml&#038;embed=true&#038;autoPlay=false"><embed src="http://videos.arte.tv/videoplayer.swf?admin=false&#038;autoPlay=true&#038;localizedPathUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2F&#038;mode=prod&#038;configFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2Fconfig%2Exml&#038;videoId=4157746&#038;lang=fr&#038;videorefFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Ffr%2Fdo%5Fdelegate%2Fvideos%2Fray%5Fkurzweil%5Fqu%5Fest%5Fce%5Fque%5Fla%5Fsingularite%5F%2D4157746%2Cview%2CasPlayerXml%2Exml&#038;embed=true&#038;autoPlay=false" width="450" height="303" allowFullScreen="true" name="playerArte" quality="high" allowScriptAccess="always" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed></object></p>
<p>Lève-toi et marche :</p>
<p>&#8220;Ray kurzweil a stocké tous les bibelots, mèches de cheveux et autres souvenirs de feu son père, et il compte bien sur l&#8217;intelligence artificielle pour le faire revenir à la vie !&#8221;</p>
<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" id="playerArte" allowScriptAccess="always" width="450" height="303" ><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="quality" value="high"><param name="movie" value="http://videos.arte.tv/videoplayer.swf?admin=false&#038;autoPlay=true&#038;localizedPathUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2F&#038;mode=prod&#038;configFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2Fconfig%2Exml&#038;videoId=4157738&#038;lang=fr&#038;videorefFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Ffr%2Fdo%5Fdelegate%2Fvideos%2Fray%5Fkurzweil%5Fleve%5Ftoi%5Fet%5Fmarche%5F%2D4157738%2Cview%2CasPlayerXml%2Exml&#038;embed=true&#038;autoPlay=false"><embed src="http://videos.arte.tv/videoplayer.swf?admin=false&#038;autoPlay=true&#038;localizedPathUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2F&#038;mode=prod&#038;configFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2Fconfig%2Exml&#038;videoId=4157738&#038;lang=fr&#038;videorefFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Ffr%2Fdo%5Fdelegate%2Fvideos%2Fray%5Fkurzweil%5Fleve%5Ftoi%5Fet%5Fmarche%5F%2D4157738%2Cview%2CasPlayerXml%2Exml&#038;embed=true&#038;autoPlay=false" width="450" height="303" allowFullScreen="true" name="playerArte" quality="high" allowScriptAccess="always" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed></object></p>
<p>Body 2.0 :</p>
<p>&#8220;Ray Kurzweil nous propose de remplacer nos organes déficients par des répliques artificielles beaucoup plus puissantes et résistantes.&#8221;</p>
<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" id="playerArte" allowScriptAccess="always" width="450" height="303" ><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="quality" value="high"><param name="movie" value="http://videos.arte.tv/videoplayer.swf?admin=false&#038;autoPlay=true&#038;localizedPathUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2F&#038;mode=prod&#038;configFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2Fconfig%2Exml&#038;videoId=4157742&#038;lang=fr&#038;videorefFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Ffr%2Fdo%5Fdelegate%2Fvideos%2Fray%5Fkurzweil%5Fbody%5F2%5F0%2D4157742%2Cview%2CasPlayerXml%2Exml&#038;embed=true&#038;autoPlay=false"><embed src="http://videos.arte.tv/videoplayer.swf?admin=false&#038;autoPlay=true&#038;localizedPathUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2F&#038;mode=prod&#038;configFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2Fconfig%2Exml&#038;videoId=4157742&#038;lang=fr&#038;videorefFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Ffr%2Fdo%5Fdelegate%2Fvideos%2Fray%5Fkurzweil%5Fbody%5F2%5F0%2D4157742%2Cview%2CasPlayerXml%2Exml&#038;embed=true&#038;autoPlay=false" width="450" height="303" allowFullScreen="true" name="playerArte" quality="high" allowScriptAccess="always" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed></object></p>
<p>Ray Kurzweil &#8211; Coup de foudre avec un droïde :</p>
<p>&#8220;Selon Kurzweil, à partir de 2029, les robots seront tellement &#8220;convaincants&#8221; qu&#8217;on pourra très bien avoir le béguin pour Terminator&#8221;</p>
<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" id="playerArte" allowScriptAccess="always" width="450" height="303" ><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="quality" value="high"><param name="movie" value="http://videos.arte.tv/videoplayer.swf?localizedPathUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2F&#038;lang=fr&#038;configFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2Fconfig%2Exml&#038;mode=prod&#038;videoId=4159120&#038;autoPlay=true&#038;admin=false&#038;videorefFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Ffr%2Fdo%5Fdelegate%2Fvideos%2Fray%5Fkurzweil%5Fcoup%5Fde%5Ffoudre%5Favec%5Fun%5Fdroide%2D4159120%2Cview%2CasPlayerXml%2Exml&#038;embed=true&#038;autoPlay=false"><embed src="http://videos.arte.tv/videoplayer.swf?localizedPathUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2F&#038;lang=fr&#038;configFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2Fconfig%2Exml&#038;mode=prod&#038;videoId=4159120&#038;autoPlay=true&#038;admin=false&#038;videorefFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Ffr%2Fdo%5Fdelegate%2Fvideos%2Fray%5Fkurzweil%5Fcoup%5Fde%5Ffoudre%5Favec%5Fun%5Fdroide%2D4159120%2Cview%2CasPlayerXml%2Exml&#038;embed=true&#038;autoPlay=false" width="450" height="303" allowFullScreen="true" name="playerArte" quality="high" allowScriptAccess="always" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed></object></p>
<p>Ray Kurzweil &#8211; de l&#8217;immortalité :</p>
<p>&#8220;Adepte de la médication anti-vieillissement, Ray Kurzweil explique que la mort est loin d&#8217;être une fatalité, puisque la clé de l&#8217;immortalité est entre nos mains.&#8221;</p>
<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" id="playerArte" allowScriptAccess="always" width="450" height="303" ><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="quality" value="high"><param name="movie" value="http://videos.arte.tv/videoplayer.swf?localizedPathUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2F&#038;lang=fr&#038;configFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2Fconfig%2Exml&#038;mode=prod&#038;videoId=4157744&#038;autoPlay=true&#038;admin=false&#038;videorefFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Ffr%2Fdo%5Fdelegate%2Fvideos%2Fray%5Fkurzweil%5Fde%5Fl%5Fimmortalite%2D4157744%2Cview%2CasPlayerXml%2Exml&#038;embed=true&#038;autoPlay=false"><embed src="http://videos.arte.tv/videoplayer.swf?localizedPathUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2F&#038;lang=fr&#038;configFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2Fconfig%2Exml&#038;mode=prod&#038;videoId=4157744&#038;autoPlay=true&#038;admin=false&#038;videorefFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Ffr%2Fdo%5Fdelegate%2Fvideos%2Fray%5Fkurzweil%5Fde%5Fl%5Fimmortalite%2D4157744%2Cview%2CasPlayerXml%2Exml&#038;embed=true&#038;autoPlay=false" width="450" height="303" allowFullScreen="true" name="playerArte" quality="high" allowScriptAccess="always" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed></object></p>
<p>Ray Kurzweil &#8211; Vivre 500 ans ?</p>
<p>&#8220;Vivre 500 ans, c&#8217;est un peu long ? Pas d&#8217;après Kurzweil qui nous rappelle que d&#8217;ici là, on pourra changer de corps comme de chemise et vivre une multitude de vies trépidantes.&#8221;</p>
<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" id="playerArte" allowScriptAccess="always" width="450" height="303" ><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="quality" value="high"><param name="movie" value="http://videos.arte.tv/videoplayer.swf?localizedPathUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2F&#038;lang=fr&#038;configFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2Fconfig%2Exml&#038;mode=prod&#038;videoId=4157740&#038;autoPlay=true&#038;admin=false&#038;videorefFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Ffr%2Fdo%5Fdelegate%2Fvideos%2Fray%5Fkurzweil%5Fvivre%5F500%5Fans%5F%2D4157740%2Cview%2CasPlayerXml%2Exml&#038;embed=true&#038;autoPlay=false"><embed src="http://videos.arte.tv/videoplayer.swf?localizedPathUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2F&#038;lang=fr&#038;configFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2Fconfig%2Exml&#038;mode=prod&#038;videoId=4157740&#038;autoPlay=true&#038;admin=false&#038;videorefFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Ffr%2Fdo%5Fdelegate%2Fvideos%2Fray%5Fkurzweil%5Fvivre%5F500%5Fans%5F%2D4157740%2Cview%2CasPlayerXml%2Exml&#038;embed=true&#038;autoPlay=false" width="450" height="303" allowFullScreen="true" name="playerArte" quality="high" allowScriptAccess="always" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed></object></p>
<p>Ray Kurzweil &#8211; Objectif Mars ?</p>
<p>&#8220;Selon Kurzweil, l&#8217;humanité manquant de ressources, nous enverrons des robots dans l&#8217;espace d&#8217;ici 2045.&#8221;</p>
<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" id="playerArte" allowScriptAccess="always" width="450" height="303" ><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="quality" value="high"><param name="movie" value="http://videos.arte.tv/videoplayer.swf?localizedPathUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2F&#038;lang=fr&#038;configFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2Fconfig%2Exml&#038;mode=prod&#038;videoId=4159122&#038;autoPlay=true&#038;admin=false&#038;videorefFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Ffr%2Fdo%5Fdelegate%2Fvideos%2Fray%5Fkurzweil%5Fobjectif%5Fmars%5F%2D4159122%2Cview%2CasPlayerXml%2Exml&#038;embed=true&#038;autoPlay=false"><embed src="http://videos.arte.tv/videoplayer.swf?localizedPathUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2F&#038;lang=fr&#038;configFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Fcae%2Fstatic%2Fflash%2Fplayer%2Fconfig%2Exml&#038;mode=prod&#038;videoId=4159122&#038;autoPlay=true&#038;admin=false&#038;videorefFileUrl=http%3A%2F%2Fvideos%2Earte%2Etv%2Ffr%2Fdo%5Fdelegate%2Fvideos%2Fray%5Fkurzweil%5Fobjectif%5Fmars%5F%2D4159122%2Cview%2CasPlayerXml%2Exml&#038;embed=true&#038;autoPlay=false" width="450" height="303" allowFullScreen="true" name="playerArte" quality="high" allowScriptAccess="always" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed></object></p>
<div class="shr-publisher-475"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F03-10-2011%2Fray-kurzweil-quelques-pistes-concernant-notre-avenir%2F' data-shr_title='Ray+Kurzweil+-+Quelques+pistes+concernant+notre+avenir'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F03-10-2011%2Fray-kurzweil-quelques-pistes-concernant-notre-avenir%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F03-10-2011%2Fray-kurzweil-quelques-pistes-concernant-notre-avenir%2F' data-shr_title='Ray+Kurzweil+-+Quelques+pistes+concernant+notre+avenir'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://blog.overnetcity.com/03-10-2011/ray-kurzweil-quelques-pistes-concernant-notre-avenir/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Problème avec PHP et ksort / asort / sort sur les strings représentant de grands entiers</title>
		<link>http://blog.overnetcity.com/06-07-2011/probleme-avec-php-et-ksort-asort-sort-sur-les-strings-representant-de-grands-entiers/</link>
		<comments>http://blog.overnetcity.com/06-07-2011/probleme-avec-php-et-ksort-asort-sort-sur-les-strings-representant-de-grands-entiers/#comments</comments>
		<pubDate>Wed, 06 Jul 2011 16:53:27 +0000</pubDate>
		<dc:creator>Olivier Balais</dc:creator>
				<category><![CDATA[Non classé]]></category>

		<guid isPermaLink="false">http://blog.overnetcity.com/?p=454</guid>
		<description><![CDATA[La semaine passée, en essayant de trier des tableaux avec la fonction sort de PHP, je suis tombé sur un résultat assez surprenant : php&#62; $array = array(&#039;90000000000000000001&#039;, &#039;90000000000000000003&#039;, &#039;90000000000000000002&#039;); php&#62; var_dump($array); array(3) { [0]=&#62; string(20) &#34;90000000000000000001&#34; [1]=&#62; string(20) &#34;90000000000000000003&#34; [2]=&#62; string(20) &#34;90000000000000000002&#34; } php&#62; sort($array); php&#62; var_dump($array); array(3) { [0]=&#62; string(20) &#34;90000000000000000002&#34; [1]=&#62; string(20) [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F06-07-2011%2Fprobleme-avec-php-et-ksort-asort-sort-sur-les-strings-representant-de-grands-entiers%2F' data-shr_title='Probl%C3%A8me+avec+PHP+et+ksort+%2F+asort+%2F+sort+sur+les+strings+repr%C3%A9sentant+de+grands+entiers'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F06-07-2011%2Fprobleme-avec-php-et-ksort-asort-sort-sur-les-strings-representant-de-grands-entiers%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F06-07-2011%2Fprobleme-avec-php-et-ksort-asort-sort-sur-les-strings-representant-de-grands-entiers%2F' data-shr_title='Probl%C3%A8me+avec+PHP+et+ksort+%2F+asort+%2F+sort+sur+les+strings+repr%C3%A9sentant+de+grands+entiers'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetTop Automatic --><p>La semaine passée, en essayant de trier des tableaux avec la fonction <strong><a href="http://www.php.net/manual/fr/function.sort.php">sort</a></strong> de PHP, je suis tombé sur un résultat assez surprenant :</p>
<pre class="brush: php; ">

php&gt; $array = array(&#039;90000000000000000001&#039;, &#039;90000000000000000003&#039;, &#039;90000000000000000002&#039;);

php&gt; var_dump($array);
array(3) {
  [0]=&gt;
  string(20) &quot;90000000000000000001&quot;
  [1]=&gt;
  string(20) &quot;90000000000000000003&quot;
  [2]=&gt;
  string(20) &quot;90000000000000000002&quot;
}

php&gt; sort($array);

php&gt; var_dump($array);
array(3) {
  [0]=&gt;
  string(20) &quot;90000000000000000002&quot;
  [1]=&gt;
  string(20) &quot;90000000000000000003&quot;
  [2]=&gt;
  string(20) &quot;90000000000000000001&quot;
}
</pre>
<p>Dans la trace ci-dessus, on constate que mon tableau contient trois chaînes <strong>&#8217;90000000000000000001&#8242;, &#8217;90000000000000000003&#8242; et &#8217;90000000000000000002&#8242;</strong> qui devraient donc, a priori, être triées dans cet ordre après un appel à <strong>sort</strong> :</p>
<ol>
<li>&#8217;90000000000000000001&#8242;</li>
<li>&#8217;90000000000000000002&#8242;</li>
<li>&#8217;90000000000000000003&#8242;</li>
</ol>
<p>Ce n&#8217;est malheureusement absolument pas le cas :</p>
<ol>
<li>&#8217;90000000000000000002&#8242;</li>
<li>&#8217;90000000000000000003&#8242;</li>
<li>&#8217;90000000000000000001&#8242;</li>
</ol>
<p>Pire, si on re-exécute un sort sur ce tableau, on obtient un ordonnancement différent : </p>
<ol>
<li>&#8217;90000000000000000001&#8242;</li>
<li>&#8217;90000000000000000003&#8242;</li>
<li>&#8217;90000000000000000002&#8242;</li>
</ol>
<p>Il s&#8217;avère en fait que PHP interpréte cette chaîne comme un entier. Et étant donné que PHP gère assez mal les <em>large numbers</em>, il se retrouve en fait à faire, dans le cas présent, un sort sur les valeurs suivantes :</p>
<ol>
<li>9.0E+19</li>
<li>9.0E+19</li>
<li>9.0E+19</li>
</ol>
<p>Les trois chaînes du tableau sont donc converties en entier puis arrondies et PHP les considèrent dès lors comme identiques. Ce qui explique le sorting foireux !<br />
La solution dans ce genre de cas est de forcer PHP à interpréter les valeurs de ce tableau comme des chaînes et non pas comme des entiers. Pour cela :</p>
<pre class="brush: php; ">

php&gt; sort($array, SORT_STRING);
</pre>
<p>Mais encore faut-il qu&#8217;on sache exactement à l&#8217;avance, le type de valeurs qu&#8217;on veut trier&#8230;</p>
<p>Une autre solution apportée par <a href="http://blog.mageekbox.net/">@mageekguy</a> est d&#8217;utiliser la fonction <strong><a href="http://php.net/manual/fr/function.natsort.php">natsort</a></strong> qui répondrait plus correctement au présent problème :</p>
<pre class="brush: php; ">

php&gt; $array = array(&#039;90000000000000000001&#039;, &#039;90000000000000000003&#039;, &#039;90000000000000000002&#039;);

php&gt; var_dump($array);
array(3) {
  [0]=&gt;
  string(20) &quot;90000000000000000001&quot;
  [1]=&gt;
  string(20) &quot;90000000000000000003&quot;
  [2]=&gt;
  string(20) &quot;90000000000000000002&quot;
}

php&gt; natsort($array);

php&gt; var_dump($array);
array(3) {
  [0]=&gt;
  string(20) &quot;90000000000000000001&quot;
  [1]=&gt;
  string(20) &quot;90000000000000000002&quot;
  [2]=&gt;
  string(20) &quot;90000000000000000003&quot;
}
</pre>
<div class="shr-publisher-454"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F06-07-2011%2Fprobleme-avec-php-et-ksort-asort-sort-sur-les-strings-representant-de-grands-entiers%2F' data-shr_title='Probl%C3%A8me+avec+PHP+et+ksort+%2F+asort+%2F+sort+sur+les+strings+repr%C3%A9sentant+de+grands+entiers'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F06-07-2011%2Fprobleme-avec-php-et-ksort-asort-sort-sur-les-strings-representant-de-grands-entiers%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F06-07-2011%2Fprobleme-avec-php-et-ksort-asort-sort-sur-les-strings-representant-de-grands-entiers%2F' data-shr_title='Probl%C3%A8me+avec+PHP+et+ksort+%2F+asort+%2F+sort+sur+les+strings+repr%C3%A9sentant+de+grands+entiers'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://blog.overnetcity.com/06-07-2011/probleme-avec-php-et-ksort-asort-sort-sur-les-strings-representant-de-grands-entiers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Equivalent de svn:externals avec Git &#8211; Comment intégrer un dépôt externe à son propre projet</title>
		<link>http://blog.overnetcity.com/13-06-2011/equivalent-de-svnexternals-avec-git-comment-integrer-un-depot-externe-a-son-propre-projet/</link>
		<comments>http://blog.overnetcity.com/13-06-2011/equivalent-de-svnexternals-avec-git-comment-integrer-un-depot-externe-a-son-propre-projet/#comments</comments>
		<pubDate>Mon, 13 Jun 2011 19:20:32 +0000</pubDate>
		<dc:creator>Olivier Balais</dc:creator>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[dépôt]]></category>
		<category><![CDATA[externals]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[tiers]]></category>

		<guid isPermaLink="false">http://blog.overnetcity.com/?p=449</guid>
		<description><![CDATA[N&#8217;utilisant Git que depuis quelques mois, je n&#8217;en connais pas encore tous les aspects, loin de là ! Aujourd&#8217;hui j&#8217;ai eu un besoin très simple, intégrer à mon dépôt Git un autre dépôt Git. En gros, l&#8217;équivalent d&#8217;un bon vieux svn:externals. Je n&#8217;ai pas trouvé immédiatement comment faire donc je partage ici la commande magique [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F13-06-2011%2Fequivalent-de-svnexternals-avec-git-comment-integrer-un-depot-externe-a-son-propre-projet%2F' data-shr_title='Equivalent+de+svn%3Aexternals+avec+Git+-+Comment+int%C3%A9grer+un+d%C3%A9p%C3%B4t+externe+%C3%A0+son+propre+projet'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F13-06-2011%2Fequivalent-de-svnexternals-avec-git-comment-integrer-un-depot-externe-a-son-propre-projet%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F13-06-2011%2Fequivalent-de-svnexternals-avec-git-comment-integrer-un-depot-externe-a-son-propre-projet%2F' data-shr_title='Equivalent+de+svn%3Aexternals+avec+Git+-+Comment+int%C3%A9grer+un+d%C3%A9p%C3%B4t+externe+%C3%A0+son+propre+projet'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetTop Automatic --><p>N&#8217;utilisant Git que depuis quelques mois, je n&#8217;en connais pas encore tous les aspects, loin de là !<br />
Aujourd&#8217;hui j&#8217;ai eu un besoin très simple, intégrer à mon dépôt Git un autre dépôt Git. En gros, l&#8217;équivalent d&#8217;un bon vieux <strong>svn:externals</strong>. Je n&#8217;ai pas trouvé immédiatement comment faire donc je partage ici la commande magique :</p>
<p><code>git submodule</code></p>
<p>L&#8217;utilisation est donc très simple. Au lieu de faire un <code>git clone</code> dans un sous-dossier de son projet, il suffit de faire à la racine du dépôt :</p>
<p><code>git submodule add repo_url ./your_folder/</code></p>
<p>Un nouveau dossier caché est créé. Il vous suffit donc de le versionner dans votre propre dépôt pour que la référence soit prise en compte.</p>
<p>Si vous clonez votre dépôt depuis un nouvel emplacement, il vous faut utiliser la commande <code>git submodule init</code> pour récupérer les dépôts externes référencés.<br />
Et ensuite, un <code>git submodule update</code> pour mettre à jour régulièrement les sous-projets.</p>
<p>Aussi simple que ça !</p>
<p>Plus d&#8217;infos sur cette commande à l&#8217;adresse suivante : <a href="http://www.kernel.org/pub/software/scm/git/docs/git-submodule.html">http://www.kernel.org/pub/software/scm/git/docs/git-submodule.html</a></p>
<div class="shr-publisher-449"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F13-06-2011%2Fequivalent-de-svnexternals-avec-git-comment-integrer-un-depot-externe-a-son-propre-projet%2F' data-shr_title='Equivalent+de+svn%3Aexternals+avec+Git+-+Comment+int%C3%A9grer+un+d%C3%A9p%C3%B4t+externe+%C3%A0+son+propre+projet'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F13-06-2011%2Fequivalent-de-svnexternals-avec-git-comment-integrer-un-depot-externe-a-son-propre-projet%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F13-06-2011%2Fequivalent-de-svnexternals-avec-git-comment-integrer-un-depot-externe-a-son-propre-projet%2F' data-shr_title='Equivalent+de+svn%3Aexternals+avec+Git+-+Comment+int%C3%A9grer+un+d%C3%A9p%C3%B4t+externe+%C3%A0+son+propre+projet'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://blog.overnetcity.com/13-06-2011/equivalent-de-svnexternals-avec-git-comment-integrer-un-depot-externe-a-son-propre-projet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Premiers pas avec Node.js &#8211; Installation de Node et Express</title>
		<link>http://blog.overnetcity.com/19-05-2011/premiers-pas-avec-node-js-installation-de-node-et-express/</link>
		<comments>http://blog.overnetcity.com/19-05-2011/premiers-pas-avec-node-js-installation-de-node-et-express/#comments</comments>
		<pubDate>Thu, 19 May 2011 12:03:01 +0000</pubDate>
		<dc:creator>Olivier Balais</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[express]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[serveur]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.overnetcity.com/?p=400</guid>
		<description><![CDATA[Chez PMSIpilot, à chaque fin de Sprint, les équipes techniques organisent et participent à ce qu&#8217;on appelle les &#8220;ateliers&#8221;. Comme tout bon geek qui se respecte, j&#8217;ai une soif insatiable d&#8217;apprendre de nouvelles choses et je participe donc en général au plus grand nombre possible de ces ateliers. Un de ceux qui m&#8217;ont le plus [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F19-05-2011%2Fpremiers-pas-avec-node-js-installation-de-node-et-express%2F' data-shr_title='Premiers+pas+avec+Node.js+-+Installation+de+Node+et+Express'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F19-05-2011%2Fpremiers-pas-avec-node-js-installation-de-node-et-express%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F19-05-2011%2Fpremiers-pas-avec-node-js-installation-de-node-et-express%2F' data-shr_title='Premiers+pas+avec+Node.js+-+Installation+de+Node+et+Express'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetTop Automatic --><p><img src="http://blog.overnetcity.com/wp-content/uploads/2011/05/logo.png" alt="" title="Node.js" width="420" height="111" class="alignnone size-full wp-image-402" /></p>
<p>Chez <a href="http://www.pmsipilot.org/2011/02/02/les-pmsiateliers/">PMSIpilot</a>, à chaque fin de Sprint, les équipes techniques organisent et participent à ce qu&#8217;on appelle les &#8220;ateliers&#8221;. Comme tout bon geek qui se respecte, j&#8217;ai une soif insatiable d&#8217;apprendre de nouvelles choses et je participe donc en général au plus grand nombre possible de ces ateliers. Un de ceux qui m&#8217;ont le plus marqué est sans aucun doute celui qui présentait le fonctionnement et l&#8217;utilisation de <strong>Node.js</strong>.</p>
<p>Je vais donc profiter de ce blog pour faire un retour au fur et à mesure de ma découverte de Node.js et de son écosystème.<br />
Ce premier billet résume l&#8217;installation de Node et Express et me servira de mémo pour retrouver facilement les commandes qui vont bien.</p>
<p>Node.js est un framework très en vogue qui consiste à utiliser le langage Javascript avec le moteur V8 de Google côté serveur pour servir les requêtes HTTP reçues.</p>
<p>Parmis les intérêts majeurs de ce type d&#8217;approche on retient notamment :</p>
<ul>
<li>L&#8217;approche évènementielle du framework (entrées / sorties non bloquantes&#8230;)</li>
<li>La possibilité d&#8217;utiliser un seul langage côté serveur et côté client pour les applications Full JS</li>
</ul>
<p>Ainsi, grâce à sa légèreté et à ses I/O non bloquants, Node.js permet de développer une application web capable de recevoir et de répondre à un nombre de requêtes infiniment plus conséquent qu&#8217;une même application développée avec une pile LAMP classique.<br />
C&#8217;est toute la philosophie du développement web qui se voit bouleversée par cette approche évènementielle.</p>
<p>Pour plus d&#8217;informations à ce sujet, je vous invite à lire les articles suivants :</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Nodejs">http://en.wikipedia.org/wiki/Nodejs</a></li>
<li><a href="http://anders.janmyr.com/2011/05/not-very-short-introduction-to-nodejs.html">http://anders.janmyr.com/2011/05/not-very-short-introduction-to-nodejs.html</a></li>
<li><a href="http://nodejs.org">http://nodejs.org</a></li>
</ul>
<p>Let&#8217;s get started!</p>
<p>Première étape, télécharger et installer Node.js. Pour se faire RDV sur le site officiel pour télécharger la dernière release en date : <a href="http://nodejs.org/#download">http://nodejs.org/#download</a>. Décompressez l&#8217;archive, rendez-vous dans le dossier et exécutez les commandes suivantes une par une :</p>
<p><code>mkdir ~/local<br />
./configure --prefix=$HOME/local/node<br />
make<br />
make install<br />
export PATH=$HOME/local/node/bin:$PATH<br />
</code></p>
<p>La commande make prend un certain temps à s&#8217;exécuter donc il faut s&#8217;armer de patience. Ensuite le reste est trivial.<br />
A noter que si au moment du lancement de <code>configure</code>, vous avez une erreur du type <code>Could not autodetect OpenSSL support. Make sure OpenSSL development packages are installed</code>, c&#8217;est qu&#8217;il vous manque la lib OpenSSL.<br />
Dans ce cas, un petit apt-get résoud le problème : </p>
<p><code>sudo apt-get install libssl-dev</code></p>
<p>Dans le même ordre d&#8217;idée, il se peut qu&#8217;un message vous avertisse qu&#8217;il manque un compilateur du type g++ / c++. Dans ce cas :</p>
<p><code>sudo apt-get install g++</code></p>
<p>Voilà une bonne chose de faite. Testez l&#8217;installation en exécutant la commande suivante :</p>
<p><code>obalais@server:~$ node -v<br />
v0.4.7</code></p>
<p>Même s&#8217;il est possible de créer une application web complète juste avec Node.js, nous allons installer des plugins qui vont nous faciliter le développement. Un framework MVC (<strong>Express</strong>) par exemple me semble plus que nécessaire, un moteur de template (<strong>Jade</strong>) ainsi qu&#8217;un ORM pour la base de données (<strong>Mongoose</strong> si on utilise une base MongoDb).<br />
Nous avons de la chance puisqu&#8217;un gestionnaire de paquets spécifique à Node.js est devenu plus ou moins un standard pour récupérer facilement les plugins qui existent, à savoir <strong>NPM</strong>.</p>
<p>Si vous n&#8217;avez pas curl :</p>
<p><code>sudo apt-get install curl</code></p>
<p>Ensuite, l&#8217;installation de NPM est on ne peut plus simple puisqu&#8217;il suffit d&#8217;une seule ligne :</p>
<p><code>curl http://npmjs.org/install.sh | sh</code></p>
<p>Et une fois de plus, vous pouvez tester si l&#8217;installation s&#8217;est bien déroulée en lançant la commande suivante :</p>
<p><code>obalais@server:~$ npm -v<br />
1.0.6<br />
</code></p>
<p>Nous allons tout de suite mettre à profit NPM en installant <a href="http://expressjs.com/">Express</a>, le framework de développement web le plus abouti actuellement pour Node.js.</p>
<p><img src="http://blog.overnetcity.com/wp-content/uploads/2011/05/express.png" alt="" title="Express" width="217" height="69" class="alignnone size-full wp-image-409" /></p>
<p>Voici la liste de ses features, directement récupérée depuis le site officiel :</p>
<ul>
<li>Robust routing</li>
<li>Redirection helpers</li>
<li>Dynamic view helpers</li>
<li>Application level view options</li>
<li>Content negotiation</li>
<li>Application mounting</li>
<li>Focus on high performance</li>
<li>View rendering and partials support</li>
<li>Environment based configuration</li>
<li>Session based flash notifications</li>
<li>Built on Connect</li>
<li>Executable for generating applications quickly</li>
<li>High test coverage</li>
</ul>
<p>Grâce à NPM, l&#8217;installation se fait encore une seule ligne toute simple :</p>
<p><code>npm install express</code></p>
<p>N&#8217;oubliez pas de rajouter express à votre PATH et de tester le résultat de l&#8217;installation :</p>
<p><code>obalais@server:~$ export PATH=$HOME/node_modules/express/bin:$PATH<br />
obalais@server:~$ express --version<br />
2.3.4<br />
</code></p>
<p><img src="http://blog.overnetcity.com/wp-content/uploads/2011/05/Jade1.png" alt="" title="Jade" width="600" height="341" class="alignnone size-full wp-image-430" /></p>
<p>Maintenant installez <a href="http://jade-lang.com/">Jade</a> :</p>
<p><code>npm install jade</code></p>
<p>Tout est en place. Il ne reste plus qu&#8217;à créer notre serveur avec Node.js + Express. Pour cela, créez un fichier helloworld.js contenant le code suivant :</p>
<pre class="brush: javascript; ">

var app = require(&#039;express&#039;).createServer();

app.get(&#039;/&#039;, function(req, res){
  res.send(&#039;&lt;h1&gt;another hello world&lt;/h1&gt;&#039;);
});

app.listen(3000);
</pre>
<p>On lance le serveur node.js avec la commande suivante :</p>
<p><code>node helloworld.js</code></p>
<p>Et on teste si tout fonctionne correctement en se rendant via son navigateur sur son localhost sur le port 3000.</p>
<p><img src="http://blog.overnetcity.com/wp-content/uploads/2011/05/hello_world.png" alt="" title="hello_world" width="790" height="332" class="alignnone size-full wp-image-417" /></p>
<p>Nous verrons dans un prochain article quels sont les principes fondamentaux du développement avec Express et Node.js.<br />
En attendant, je vous laisse visiter le site officiel d&#8217;Express qui contient toute la documentation nécessaire pour se lancer dans l&#8217;utilisation du Framework. Faites un tour sur <a href="http://expressjs.com/guide.html">cette page pour commencer</a>.</p>
<div class="shr-publisher-400"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F19-05-2011%2Fpremiers-pas-avec-node-js-installation-de-node-et-express%2F' data-shr_title='Premiers+pas+avec+Node.js+-+Installation+de+Node+et+Express'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F19-05-2011%2Fpremiers-pas-avec-node-js-installation-de-node-et-express%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F19-05-2011%2Fpremiers-pas-avec-node-js-installation-de-node-et-express%2F' data-shr_title='Premiers+pas+avec+Node.js+-+Installation+de+Node+et+Express'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://blog.overnetcity.com/19-05-2011/premiers-pas-avec-node-js-installation-de-node-et-express/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>sfForms et valeurs par défaut. Pourquoi est-ce que getDefault me renvoie null ?</title>
		<link>http://blog.overnetcity.com/11-05-2011/sfforms-et-valeurs-par-defaut-pourquoi-est-ce-que-getdefault-me-renvoie-null/</link>
		<comments>http://blog.overnetcity.com/11-05-2011/sfforms-et-valeurs-par-defaut-pourquoi-est-ce-que-getdefault-me-renvoie-null/#comments</comments>
		<pubDate>Wed, 11 May 2011 16:15:32 +0000</pubDate>
		<dc:creator>Olivier Balais</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[bug symfony]]></category>
		<category><![CDATA[default values]]></category>
		<category><![CDATA[null]]></category>
		<category><![CDATA[sfForms]]></category>

		<guid isPermaLink="false">http://blog.overnetcity.com/?p=353</guid>
		<description><![CDATA[Les formulaires de symfony ont quelquefois des comportements surprenants pour le développeur. Tout le monde pense immédiatement aux embed forms mais ce n&#8217;est pas de ces derniers dont je vais parler ici. Je suis tombé sur le problème suivant : pourquoi après avoir passé une valeur par défaut à un des widgets de mon formulaire, [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F11-05-2011%2Fsfforms-et-valeurs-par-defaut-pourquoi-est-ce-que-getdefault-me-renvoie-null%2F' data-shr_title='sfForms+et+valeurs+par+d%C3%A9faut.+Pourquoi+est-ce+que+getDefault+me+renvoie+null+%3F'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F11-05-2011%2Fsfforms-et-valeurs-par-defaut-pourquoi-est-ce-que-getdefault-me-renvoie-null%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F11-05-2011%2Fsfforms-et-valeurs-par-defaut-pourquoi-est-ce-que-getdefault-me-renvoie-null%2F' data-shr_title='sfForms+et+valeurs+par+d%C3%A9faut.+Pourquoi+est-ce+que+getDefault+me+renvoie+null+%3F'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Les formulaires de symfony ont quelquefois des comportements surprenants pour le développeur. Tout le monde pense immédiatement aux <strong>embed forms </strong>mais ce n&#8217;est pas de ces derniers dont je vais parler ici.</p>
<p>Je suis tombé sur le problème suivant : pourquoi après avoir passé une valeur par défaut à un des widgets de mon formulaire, je ne parviens pas à la récupérer dans mon action ou dans mon template ? L&#8217;appel à la méthode getDefault du sfForm me renvoie <em>null,</em> tout simplement.</p>
<p>Cas typique :</p>
<pre class="brush: php; ">

// Dans le code de mon formulaire :
$this-&gt;setWidgets(array(
  ...
  &#039;my_field&#039; =&gt; new sfMyWidget(array(&#039;default&#039; =&gt; &#039;my_value&#039;)),
));

// Dans le code de mon action :
if ($my_form-&gt;getDefault(&#039;my_field&#039;) == &#039;some_value&#039;)
{
  ...
}
</pre>
<p>Dans ce cas, la méthode getDefault() appelée sur mon formulaire me renvoie null alors que j&#8217;ai explicitement donné une valeur par défaut à mon widget. Pourtant, en lisant la doc de symfony sur le sujet je retiens ceci :</p>
<blockquote><p>The setDefault(), getDefault(), setDefaults(), and getDefaults() methods manages the default values for the embedded widgets. <span style="text-decoration: underline;">They are proxy methods </span>for the getDefault() and setDefault() widget methods.</p></blockquote>
<p>Les méthodes setDefault() et getDefault() au niveau de la classe sfForm sont censées êtres des raccourcis pour les méthodes setDefault() et getDefault() de la classe sfWidgetForm().</p>
<p>En fait il s&#8217;avère que ce n&#8217;est absolument pas le cas et que la méthode getDefault() du formulaire ne fait jamais appel à la méthode getDefault() du widget associé.</p>
<p>L&#8217;appel à <strong>$my_form-&gt;getDefault(&#8216;my_field&#8217;)</strong> n&#8217;est donc pas équivalent à <strong>$my_form['my_field']-&gt;getWidget()-&gt;getDefault()</strong>.</p>
<p>Par conséquent, il est important de bien comprendre quelle méthode appeler et dans quel cas.</p>
<p>A savoir, <strong>$my_form-&gt;getDefault(&#8216;my_field&#8217;)</strong> quand le setDefault a été utilisé<strong> au niveau du formulaire</strong>. Exemple :</p>
<pre class="brush: php; ">

// Valeurs passées dans mon formulaire :
$this-&gt;setWidgets(array(
  ...
  &#039;my_field&#039; =&gt; new sfMyWidget(),
));
$this-&gt;setDefault(&#039;my_field&#039;, &#039;my_value&#039;);

// Ou alors valeurs passées dans mon action :
$my_form = new myFormClass(array(
  ...
  &#039;my_field&#039; =&gt; &#039;my_value&#039;,
));
</pre>
<p>Et, <strong>$my_form['my_field']-&gt;getWidget()-&gt;getDefault()</strong> quand le setDefault() a été utilisé <strong>au niveau du widget</strong>. Exemple :</p>
<pre class="brush: php; ">

// Dans le code de mon formulaire :
$this-&gt;setWidgets(array(
  ...
  &#039;my_field&#039; =&gt; new sfMyWidget(array(&#039;default&#039; =&gt; &#039;my_value&#039;)),
));
</pre>
<p>Voilà, désormais vous êtes prévenus&#8230;</p>
<div class="shr-publisher-353"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F11-05-2011%2Fsfforms-et-valeurs-par-defaut-pourquoi-est-ce-que-getdefault-me-renvoie-null%2F' data-shr_title='sfForms+et+valeurs+par+d%C3%A9faut.+Pourquoi+est-ce+que+getDefault+me+renvoie+null+%3F'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F11-05-2011%2Fsfforms-et-valeurs-par-defaut-pourquoi-est-ce-que-getdefault-me-renvoie-null%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F11-05-2011%2Fsfforms-et-valeurs-par-defaut-pourquoi-est-ce-que-getdefault-me-renvoie-null%2F' data-shr_title='sfForms+et+valeurs+par+d%C3%A9faut.+Pourquoi+est-ce+que+getDefault+me+renvoie+null+%3F'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://blog.overnetcity.com/11-05-2011/sfforms-et-valeurs-par-defaut-pourquoi-est-ce-que-getdefault-me-renvoie-null/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Les ressources utiles du mois de Février (et +)</title>
		<link>http://blog.overnetcity.com/09-03-2011/les-ressources-utiles-du-mois-de-fevrier-et/</link>
		<comments>http://blog.overnetcity.com/09-03-2011/les-ressources-utiles-du-mois-de-fevrier-et/#comments</comments>
		<pubDate>Wed, 09 Mar 2011 12:32:41 +0000</pubDate>
		<dc:creator>Olivier Balais</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery Mobile]]></category>
		<category><![CDATA[Ressources Utiles]]></category>

		<guid isPermaLink="false">http://blog.overnetcity.com/?p=315</guid>
		<description><![CDATA[Et ben&#8230; Moi qui pensais rédiger chaque mois un article regroupant les meilleur liens sur lesquels je tombe, je viens de constater que le dernier (et aussi le premier) posté dans cette rubrique date de&#8230; Juillet. Allez j&#8217;ai une excuse, pendant ce temps, je suis parti plusieurs mois en roadtrip à l&#8217;autre bout du monde&#8230; [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F09-03-2011%2Fles-ressources-utiles-du-mois-de-fevrier-et%2F' data-shr_title='Les+ressources+utiles+du+mois+de+F%C3%A9vrier+%28et+%2B%29'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F09-03-2011%2Fles-ressources-utiles-du-mois-de-fevrier-et%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F09-03-2011%2Fles-ressources-utiles-du-mois-de-fevrier-et%2F' data-shr_title='Les+ressources+utiles+du+mois+de+F%C3%A9vrier+%28et+%2B%29'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Et ben&#8230; Moi qui pensais rédiger chaque mois un article regroupant les meilleur liens sur lesquels je tombe, je viens de constater que le dernier (et aussi le premier) posté dans cette rubrique date de&#8230; Juillet.<br />
Allez j&#8217;ai une excuse, pendant ce temps, je suis parti plusieurs mois en roadtrip à l&#8217;autre bout du monde&#8230;</p>
<p>Depuis mon retour en France, j&#8217;ai repris les choses sérieuses et ai de nouveau le loisir de glaner ci et là de bonnes ressources pour le boulot (et pour ma culture).</p>
<p>Voici donc ma sélection pour le mois de Février.</p>
<h2>Isotope</h2>
<p><a href="http://blog.overnetcity.com/wp-content/uploads/2011/03/Isotope.png"><img title="Isotope" src="http://blog.overnetcity.com/wp-content/uploads/2011/03/Isotope-300x65.png" alt="" width="300" height="65" /></a></p>
<p>Isotope est un plugin jQuery fantastique. Il permet de réorganiser à la volée l&#8217;affichage d&#8217;éléments au sein d&#8217;une page Web en fonction de différents critères qu&#8217;il suffit au développeur de définir (ordre, type, taille de l&#8217;écran&#8230;).</p>
<p>Je vais très prochainement l&#8217;intégrer à l&#8217;un de mes projets pour faire un joli filtrage dynamique d&#8217;items.</p>
<p><strong>URL : </strong><a href="http://isotope.metafizzy.co/" target="_blank">http://isotope.metafizzy.co/</a></p>
<h2>Osez créer un site HTML5 et CSS3</h2>
<p><a href="http://blog.overnetcity.com/wp-content/uploads/2011/03/logo-alsacreations-com.png"><img title="Logo Alsacréations" src="http://blog.overnetcity.com/wp-content/uploads/2011/03/logo-alsacreations-com.png" alt="" width="290" height="80" /></a></p>
<p>Raphael Goetter du site Alsacréations nous démontre dans un très bon article qu&#8217;il est possible aujourd&#8217;hui de développer un site en HTML5 et CSS3. Il explique quels compromis il a dû faire pour les anciens navigateurs et quelles sont les parades pour ne pas rendre son site complètement inaccessible sur ces derniers.</p>
<p>Pour ma part, c&#8217;est cet article qui m&#8217;a convaincu de développer ma prochaine appli web en HTML5, malgré la part encore très importante de personnes utilisant IE6, 7 et 8.</p>
<p><strong>URL : </strong><a href="http://www.alsacreations.com/article/lire/947-osez-creer-site-html5-css3.html" target="_blank">http://www.alsacreations.com/article/lire/947-osez-creer-site-html5-css3.html</a></p>
<h2>Jquery Mobile DateBox</h2>
<p><a href="http://blog.overnetcity.com/wp-content/uploads/2011/03/jQuery-DateBox.png"><img title="jQuery Mobile DateBox" src="http://blog.overnetcity.com/wp-content/uploads/2011/03/jQuery-DateBox-300x83.png" alt="" width="300" height="83" /></a></p>
<p>Enfin, et parce que je m&#8217;intéresse tout particulièrement à l&#8217;actualité concernant jQuery Mobile, je vous signale l&#8217;apparition d&#8217;un petit widget pour vos webapp mobiles, vous permettant de renseigner un champs date de manière simple et efficace.</p>
<p>Une simple ligne de code dans votre template et le tour est joué :</p>
<p><code>&lt;input name="somedate" type="date" /&gt;</code></p>
<p><strong>URL : </strong><a href="http://dev.jtsage.com/jQM-DateBox/" target="_blank">http://dev.jtsage.com/jQM-DateBox/</a></p>
<h2>Formalize</h2>
<p><a href="http://blog.overnetcity.com/wp-content/uploads/2011/03/Capture.png"><img class="size-medium wp-image-324 alignnone" title="Formalize" src="http://blog.overnetcity.com/wp-content/uploads/2011/03/Capture-300x99.png" alt="" width="300" height="99" /></a></p>
<p>Formalize est un plugin jQuery (également disponible pour d&#8217;autres frameworks JS (Dojo, ExtJS, MooTools, Prototype et YUI) qui facilite la tâche du développeur lors de la création et de la mise en forme des formulaires. Il offre une mise en page standardisée sur tous les navigateurs de vos forms et offre le support de certaines propriétés CSS3 non implémentées dans les anciens navigateurs.</p>
<p><strong>URL</strong> : <a href="http://formalize.me/" target="_blank">http://formalize.me/</a></p>
<p><strong>Démo</strong> : <a href="http://formalize.me/demo.html" target="_blank">http://formalize.me/demo.html</a></p>
<h2>Quovolver</h2>
<p><a href="http://blog.overnetcity.com/wp-content/uploads/2011/03/quovolver_logo.png"><img title="Logo QUOVOLVER" src="http://blog.overnetcity.com/wp-content/uploads/2011/03/quovolver_logo.png" alt="" width="326" height="46" /></a></p>
<p><a href="http://blog.overnetcity.com/wp-content/uploads/2011/03/banner_img.png"><img title="Quote QUOVOLVER" src="http://blog.overnetcity.com/wp-content/uploads/2011/03/banner_img-300x73.png" alt="" width="300" height="73" /></a></p>
<p>Grâce à ce plugin, en une seule ligne de code, présentez joliment et efficacement un ensemble de quotes au sein d&#8217;un même bloc.</p>
<p><code>$('blockquote').quovolver();</code></p>
<p><strong>URL : </strong><a href="http://sandbox.sebnitu.com/jquery/quovolver/" target="_blank">http://sandbox.sebnitu.com/jquery/quovolver/</a></p>
<div class="shr-publisher-315"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F09-03-2011%2Fles-ressources-utiles-du-mois-de-fevrier-et%2F' data-shr_title='Les+ressources+utiles+du+mois+de+F%C3%A9vrier+%28et+%2B%29'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F09-03-2011%2Fles-ressources-utiles-du-mois-de-fevrier-et%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F09-03-2011%2Fles-ressources-utiles-du-mois-de-fevrier-et%2F' data-shr_title='Les+ressources+utiles+du+mois+de+F%C3%A9vrier+%28et+%2B%29'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://blog.overnetcity.com/09-03-2011/les-ressources-utiles-du-mois-de-fevrier-et/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quand vos vitres deviendront écrans&#8230;</title>
		<link>http://blog.overnetcity.com/23-02-2011/quand-vos-vitres-deviendront-ecrans/</link>
		<comments>http://blog.overnetcity.com/23-02-2011/quand-vos-vitres-deviendront-ecrans/#comments</comments>
		<pubDate>Wed, 23 Feb 2011 12:07:27 +0000</pubDate>
		<dc:creator>Olivier Balais</dc:creator>
				<category><![CDATA[Non classé]]></category>

		<guid isPermaLink="false">http://blog.overnetcity.com/?p=308</guid>
		<description><![CDATA[Etant très friand des vidéos tentant de nous montrer à quoi ressemblera notre futur, j&#8217;ai beaucoup apprécié celle-ci sur laquelle je suis tombé ce matin. Un concept où presque chaque surface lisse et transparente qui nous entoure devient un bel écran tactile interactif. Je vous laisse admirer la vidéo pour vous faire une idée&#8230;]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F23-02-2011%2Fquand-vos-vitres-deviendront-ecrans%2F' data-shr_title='Quand+vos+vitres+deviendront+%C3%A9crans...'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F23-02-2011%2Fquand-vos-vitres-deviendront-ecrans%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F23-02-2011%2Fquand-vos-vitres-deviendront-ecrans%2F' data-shr_title='Quand+vos+vitres+deviendront+%C3%A9crans...'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Etant très friand des vidéos tentant de nous montrer à quoi ressemblera notre futur, j&#8217;ai beaucoup apprécié celle-ci sur laquelle je suis tombé ce matin.<br />
Un concept où presque chaque surface lisse et transparente qui nous entoure devient un bel écran tactile interactif.</p>
<p>Je vous laisse admirer la vidéo pour vous faire une idée&#8230;</p>
<p><iframe title="YouTube video player" width="560" height="349" src="http://www.youtube.com/embed/6Cf7IL_eZ38" frameborder="0" allowfullscreen></iframe></p>
<div class="shr-publisher-308"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F23-02-2011%2Fquand-vos-vitres-deviendront-ecrans%2F' data-shr_title='Quand+vos+vitres+deviendront+%C3%A9crans...'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F23-02-2011%2Fquand-vos-vitres-deviendront-ecrans%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fblog.overnetcity.com%2F23-02-2011%2Fquand-vos-vitres-deviendront-ecrans%2F' data-shr_title='Quand+vos+vitres+deviendront+%C3%A9crans...'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://blog.overnetcity.com/23-02-2011/quand-vos-vitres-deviendront-ecrans/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

