<?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>Mikael Randy</title>
	<atom:link href="http://www.mikaelrandy.fr/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mikaelrandy.fr</link>
	<description>Encore un blog ...</description>
	<lastBuildDate>Wed, 25 Apr 2012 20:21:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Forum PHP 2012 de l&#8217;AFUP, y serez vous ?</title>
		<link>http://www.mikaelrandy.fr/2012/04/25/forum-php-2012-de-lafup-y-serez-vous/</link>
		<comments>http://www.mikaelrandy.fr/2012/04/25/forum-php-2012-de-lafup-y-serez-vous/#comments</comments>
		<pubDate>Wed, 25 Apr 2012 20:20:55 +0000</pubDate>
		<dc:creator>Mikael Randy</dc:creator>
				<category><![CDATA[AFUP]]></category>
		<category><![CDATA[forum PHP]]></category>
		<category><![CDATA[afup]]></category>
		<category><![CDATA[billeterie]]></category>
		<category><![CDATA[Forum PHP]]></category>
		<category><![CDATA[programme]]></category>

		<guid isPermaLink="false">http://www.mikaelrandy.fr/?p=202</guid>
		<description><![CDATA[L&#8217;évènement phare de l&#8217;AFUP, le Forum PHP, approche à grands pas et aura lieu les 5 et 6 juin prochains....]]></description>
			<content:encoded><![CDATA[<p>L&#8217;évènement phare de <a href="http://www.afup.org" title="AFUP" target="_blank">l&#8217;AFUP</a>, le <a href="http://afup.org/pages/forumphp2012/" title="Forum PHP" target="_blank">Forum PHP</a>, approche à grands pas et aura lieu les 5 et 6 juin prochains.</p>
<p>Si vous comptez venir à l&#8217;édition 2012 du Forum PHP et que vous voulez le faire savoir, n’hésitez pas à utiliser le code HTML suivant :</p>
<pre><code>&lt;a href="http://afup.org/pages/forumphp2012/"&gt;
  &lt;img src="http://afup.org/templates/forumphp2012/images/bandeau-forum-php-2012-fr-small.jpg" alt="Forum PHP 2012, j'y serai !" /&gt;
&lt;/a&gt;
</code></pre>
<p>Ce qui donne le résultat suivant :</p>
<p><a href="http://afup.org/pages/forumphp2012/"><br />
  <img src="http://afup.org/templates/forumphp2012/images/bandeau-forum-php-2012-fr-small.jpg" alt="Forum PHP 2012, j'y serai !" /><br />
</a></p>
<p>Ce bandeau est aussi disponible en plus grande taille et en anglais :</p>
<p><img src="http://afup.org/templates/forumphp2012/images/bandeau-forum-php-2012-fr-large.jpg" alt="Forum PHP 2012, j'y serai !" /></p>
<p><img src="http://afup.org/templates/forumphp2012/images/bandeau-forum-php-2012-en-small.jpg" alt="Forum PHP 2012, j'y serai !" /></p>
<p><img src="http://afup.org/templates/forumphp2012/images/bandeau-forum-php-2012-en-large.jpg" alt="Forum PHP 2012, j'y serai !" /></p>
<p>Et si vous n&#8217;avez pas encore réservé vos places, foncez sur <a href="http://afup.org/pages/forumphp2012/inscription.php" title="Billeterie Forum PHP" target="_blank">la billetterie</a> ! Le <a href="http://afup.org/pages/forumphp2012/sessions.php" title="Programme Forum PHP 2012" target="_blank">programme</a> est très riche, et promet un cru 2012 très intéressant.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikaelrandy.fr/2012/04/25/forum-php-2012-de-lafup-y-serez-vous/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Organisation de l&#8217;AFUP Lyon</title>
		<link>http://www.mikaelrandy.fr/2012/03/15/organisation-de-lafup-lyon/</link>
		<comments>http://www.mikaelrandy.fr/2012/03/15/organisation-de-lafup-lyon/#comments</comments>
		<pubDate>Thu, 15 Mar 2012 13:35:49 +0000</pubDate>
		<dc:creator>Mikael Randy</dc:creator>
				<category><![CDATA[AFUP]]></category>
		<category><![CDATA[afup]]></category>
		<category><![CDATA[atelier php]]></category>
		<category><![CDATA[conférence]]></category>
		<category><![CDATA[Lyon]]></category>

		<guid isPermaLink="false">http://www.mikaelrandy.fr/?p=191</guid>
		<description><![CDATA[Comme je vous l&#8217;annonçais dans un précédent billet, Sarah Haïm-Lubczanski et moi-même coordonnons les actions de l&#8217;antenne Lyonnaise de l&#8217;AFUP....]]></description>
			<content:encoded><![CDATA[<p>Comme je vous l&#8217;annonçais dans un <a href="http://www.mikaelrandy.fr/2012/02/21/activite-de-lantenne-lyonnaise-de-lafup/" title="Activité de l'antenne Lyonnaise de l'AFUP" target="_blank">précédent billet</a>, Sarah Haïm-Lubczanski et moi-même coordonnons les actions de l&#8217;antenne Lyonnaise de l&#8217;AFUP.</p>
<p>Jusque là, nous gérions tout, lancions les idées, les mettions en pratique, &#8230;<br />
Toutefois, pour stabiliser le fonctionnement, il devient nécessaire de changer ce fonctionnement pour qu&#8217;il repose sur un groupe de personnes.</p>
<h2>Quels chantiers ?</h2>
<p>Dans cette idée, nous désirons mettre en place des groupes de travail pour les grands chantier :</p>
<h3>ApéroPHP du 29</h3>
<p>Nous sommes en cours de stabilisation de l&#8217;apéro du 29 : le réflexe du 29 de chaque mois commence à donner ses fruits, mais il reste plusieurs point à creuser :<br />
- Travailler sur le lieu de RDV, puisque les essais au café Leffe Terreaux, puis au Ninkasi Sans-soucis et Kafé Berlin ne sont que partiellement convenables, et qu&#8217;il faudrait un lieu où il est possible de discuter avec plus de monde que ses voisins directs.<br />
- Organiser chaque mois l&#8217;apéro (ajouter l&#8217;apéro sur le site, réserver le lieux, communiquer, &#8230;)</p>
<p>Ce n&#8217;est pas énormément de travail, et je pense que si plusieurs personnes sont partantes, il est même possible que ça ne demande qu&#8217;une paire de minute par mois.</p>
<h3>Ateliers PHP</h3>
<p>Suite au <a href="http://afup.org/pages/site/?route=actualites/523/retour-sur-des-soirees-afup-reussies" title="Retour sur des soirées AFUP réussies" target="_blank">premier atelier</a> qui fut une réelle réussite (guichet fermé, 99% d&#8217;inscrits présents, beaucoup de feed-back), il faut continuer dans cette voie.<br />
Il y a déjà quelques idées et quelques contacts pour de futurs ateliers, et je pense qu&#8217;il faut au minimum un groupe de travail sur les ateliers (au sens général), quitte à monter un groupe par atelier si nécessaire.</p>
<p>Pour continuer dans cet atelier, les tâches sont les suivantes :<br />
- Prévoir une roadmap des futurs ateliers<br />
- Rechercher des salles, en fonction du nombre de personnes que l&#8217;on veut accueillir<br />
- Annoncer les prochains ateliers, gérer les réservations</p>
<h3>Conférences</h3>
<p>La différence entre Atelier et Conférence réside avant tout dans la taille de l&#8217;évènement.<br />
Nous travaillons actuellement à faire venir la conférence &laquo;&nbsp;Performance PHP&nbsp;&raquo; sur Lyon. Les choses démarrent, mais il semble que cela soit possible.</p>
<p>Il faut donc un groupe de travail pour l&#8217;organisation de cette conférence, et c&#8217;est le point qui me semble le plus urgent.</p>
<p>Pour réussir à organiser cet évènement, il nous faut désormais :<br />
- Trouver une salle permettant d&#8217;accueillir une centaine de personnes<br />
- Gérer la communication et les réservations<br />
- Monter une demande de budget pour le bureau de l&#8217;AFUP</p>
<h2>Conclusion</h2>
<p>Maintenant que nous avons réussi à donner de l&#8217;élan à notre antenne locale, il faut continuer sur cette lancée, et s&#8217;ouvrir de nouveaux horizons et pour cela, il faut des bonnes âmes.<br />
Comme vous venez de le voir, plusieurs chantiers sont en cours, avec plusieurs types de travail, et je ne doute pas que vous trouverez une occupation qui corresponde à ce que vous savez/pouvez faire.<br />
Nous comptons donc désormais sur vous pour nous épauler dans la vie de l&#8217;AFUP Lyon</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikaelrandy.fr/2012/03/15/organisation-de-lafup-lyon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Au revoir Prestaconcept, bonjour TEA</title>
		<link>http://www.mikaelrandy.fr/2012/03/03/au-revoir-prestaconcept-bonjour-tea/</link>
		<comments>http://www.mikaelrandy.fr/2012/03/03/au-revoir-prestaconcept-bonjour-tea/#comments</comments>
		<pubDate>Sat, 03 Mar 2012 21:31:50 +0000</pubDate>
		<dc:creator>Mikael Randy</dc:creator>
				<category><![CDATA[Prestaconcept]]></category>

		<guid isPermaLink="false">http://www.mikaelrandy.fr/?p=171</guid>
		<description><![CDATA[Certains l&#8217;ont lu sur Twitter, d&#8217;autres l&#8217;ont appris de ma bouche : j&#8217;ai déposé ma démission de chez Prestaconcept. A...]]></description>
			<content:encoded><![CDATA[<p>Certains l&#8217;ont lu sur Twitter, d&#8217;autres l&#8217;ont appris de ma bouche : j&#8217;ai déposé ma démission de chez Prestaconcept.<br />
A partir du 26 mars prochain, je vais travailler pour TEA (The Ebook Alternative) dans le domaine du livre numérique.</p>
<p>En quelques mots, mes raisons sont les suivantes :</p>
<ul>
<li>-> Cela va faire 6 ans en mars prochain que je travaille pour Prestaconcept, au début comme développeur, mais rapidement avec des responsabilités qui n&#8217;ont cessées de s&#8217;étendre. Au cours de ces années, j&#8217;ai travaillé sur de nombreux projets, dans des domaines très hétéroclites (adserving, VOD, ecommerce, extranet, portails, site vitrine, etravel, &#8230;) pour des clients eux aussi très différents. Aujourd&#8217;hui, j&#8217;ai l&#8217;impression de commencer à tourner en rond, de ne plus découvrir.</li>
<li>-> Je suis aujourd&#8217;hui lassé par les contraintes d&#8217;une SSII (respect des coûts et des délais imposés par un client non technicien, de devoir réduire des temps pour &laquo;&nbsp;passer le budget&nbsp;&raquo;, de marcher sur la tête pour faire plaisir au client, &#8230;)
<li>-> J&#8217;ai besoin d&#8217;un vrai challenge, avec des personnes qui sont au moins aussi passionnées que moi</li>
<li>-> La perspective de travailler pour <a href="http://eric.daspet.name/">Eric Daspet</a>, dans un projet extrêmement ambitieux et novateur est plus que stimulant</li>
<li>-> L&#8217;organisation de travail désirée : Agilité, appropriation du projet par l&#8217;équipe, temps de R&#038;D prévu, poste de travail en libre choix, &#8230;</li>
</ul>
<p>De ces 6 ans passés chez Prestaconcept, je retiens surtout : </p>
<ul>
<li>-> Des patrons formidables, merci Ludovic Mugnier et Cyrille Gaulard pour votre temps, votre pédagogie, votre vision</li>
<li>-> Une SSII avec un vrai idéal de qualité. Des discussions que je peux avoir avec des employés d&#8217;autres SSII lyonnaises, je pense que Prestaconcept reste &laquo;&nbsp;haut de gamme&nbsp;&raquo; pour une SSII</li>
<li>-> L&#8217;apprentissage. Dans le moule SSII, j&#8217;ai découvert beaucoup de techniques, dans pas mal de domaines d&#8217;activité</li>
</ul>
<p>Mais maintenant, j&#8217;ai l&#8217;esprit tourné vers cette nouvelle aventure, et j&#8217;ai retrouvé une envie et une motivation que je ne m&#8217;étais pas rendu compte avoir perdu.<br />
Certes, je perd une &laquo;&nbsp;situation sociale&nbsp;&raquo; puisque je quitte un rôle de manager pour un rôle de développeur. Toutefois, je fais parti de ces gens pour qui il est plus important de s&#8217;éclater dans son travail, d&#8217;être motivé pour aller au travail plutôt que d&#8217;avoir une &laquo;&nbsp;situation&nbsp;&raquo;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikaelrandy.fr/2012/03/03/au-revoir-prestaconcept-bonjour-tea/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Activité de l&#8217;antenne lyonnaise de l&#8217;AFUP</title>
		<link>http://www.mikaelrandy.fr/2012/02/21/activite-de-lantenne-lyonnaise-de-lafup/</link>
		<comments>http://www.mikaelrandy.fr/2012/02/21/activite-de-lantenne-lyonnaise-de-lafup/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 21:52:03 +0000</pubDate>
		<dc:creator>Mikael Randy</dc:creator>
				<category><![CDATA[AFUP]]></category>
		<category><![CDATA[afup]]></category>
		<category><![CDATA[aperophp]]></category>
		<category><![CDATA[atelier php]]></category>
		<category><![CDATA[coding party]]></category>
		<category><![CDATA[Lyon]]></category>

		<guid isPermaLink="false">http://www.mikaelrandy.fr/?p=176</guid>
		<description><![CDATA[En aout dernier, sous l&#8217;impulsion de quelques personnes telles que Geoffrey Bachelet, Romain Pouclet, Sarah Haim ou encore votre serviteur,...]]></description>
			<content:encoded><![CDATA[<p>En aout dernier, sous l&#8217;impulsion de quelques personnes telles que <a href="https://twitter.com/#!/ubermuda" title="Twitter Ubermuda">Geoffrey Bachelet</a>, <a href="https://twitter.com/#!/Palleas" title="Twitter Palleas">Romain Pouclet</a>, <a href="https://twitter.com/#!/mereteresa" title="Twitter mereteresa">Sarah Haim</a> ou encore votre serviteur, Lyon a créé la première antenne locale de l&#8217;AFUP (<a href="http://afup.org/pages/site/?route=actualites/462/lafup-sa-premiere-antenne-locale-a-lyon">communiqué officiel</a>)<br />
Geoffrey ayant eu besoin de prendre du recul, j&#8217;ai récupéré, en compagnie de Sarah Haim, le rôle de coordinateur local.</p>
<p>Voici les actions menées depuis :</p>
<h2>L&#8217;apéroPHP du 29</h2>
<p>Tout les 29, un apéroPHP est organisé. Cette régularité permet d&#8217;augmenter la visibilité de ces évènements, et attirer de plus en plus de monde.<br />
Pour le moment, il n&#8217;y a pas de lieu de fixe, nous essayons. Je suis toujours à la recherche d&#8217;un lieu qui permet de boire un coup, de discuter, de prendre la parole devant tout le monde pour présenter les actions, &#8230; mais je n&#8217;ai pas encore trouvé la perle rare.</p>
<h2>Refonte du site aperophp.net</h2>
<p>Tout le monde a dû, à un moment où à un autre, se dire que le site <a href="http://www.aperophp.net" title="AperoPHP" target="_blank">aperophp.net</a> devrait subir un petit lifting.<br />
Eh bien nous avons pris le taureau par les cornes, et le 21 janvier dernier, quelques courageux se sont réunis pour lancer les bases du nouveau site.<br />
<a href="https://twitter.com/#!/pkoin" title="Twitter pkoin" target="_blank">Julien Fusco</a> et Gautier Di Folco continuent de travailler sur le site, et le project leader, <a href="https://twitter.com/#!/webaaz" title="Twitter webaaz" target="_blank">Martin Supiot</a>, de l&#8217;AFUP Nantes, devrait pouvoir annoncer sa mise en ligne d&#8217;ici la fin du mois de mars.</p>
<h2>Les ateliers PHP</h2>
<p>Sur l&#8217;exemple de ce que peuvent faire l&#8217;AFUP centre, Lille ou Bordeaux, nous démarrons le principe des ateliers PHP.<br />
Le but est de faire une mini-conférence (1h) pour présenter un sujet, déclencher des échanges ou récupérer des retours d&#8217;expérience.</p>
<p>Le premier atelier PHP lyonnais aura lieu le 29 février prochain, juste avant l&#8217;apéro PHP.<br />
Vous trouverez toutes les informations ici : <a href="http://afup.org/pages/site/?route=actualites/516/lantenne-lyonnaise-fait-evoluer-ses-aperos" target="_blank">source officielle</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikaelrandy.fr/2012/02/21/activite-de-lantenne-lyonnaise-de-lafup/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>De l&#8217;intérêt de la micro-optimisation</title>
		<link>http://www.mikaelrandy.fr/2011/12/30/de-linteret-de-la-micro-optimisation/</link>
		<comments>http://www.mikaelrandy.fr/2011/12/30/de-linteret-de-la-micro-optimisation/#comments</comments>
		<pubDate>Fri, 30 Dec 2011 22:06:05 +0000</pubDate>
		<dc:creator>Mikael Randy</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[chargement]]></category>
		<category><![CDATA[execution]]></category>
		<category><![CDATA[optimisation]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.mikaelrandy.fr/?p=140</guid>
		<description><![CDATA[Il y a quelques jours, sur Nexen, je tombais sur un article portant sur la micro-optimisation, et peu de temps...]]></description>
			<content:encoded><![CDATA[<p>Il y a quelques jours, sur <a href="http://www.nexen.net" title="Nexen" target="_blank">Nexen</a>, je tombais sur un <a href="http://www.nexen.net/actualites/php/20498-conseils_doptimisations_php.php" title="Nexen - conseil d'optimisation PHP" target="_blank">article portant sur la micro-optimisation</a>, et peu de temps après, sur une &laquo;&nbsp;<a href="http://zenprog.com//index.php?cle=La-micro-optimisation" title="Zenprog - La micro-optimisation" target="_blank">réponse</a>&nbsp;&raquo; de <a href="http://zenprog.com" title="Zenprog" target="_blank">Zenprog</a>.</p>
<p>Comme je trouve le sujet intéressant et que j&#8217;ai un avis complémentaire, bien que différent, je me permet dont d&#8217;écrire cet article pour l&#8217;exposer.</p>
<h2>Différence entre temps d&#8217;exécution et temps de rendu</h2>
<p>Pour ma part, je trouve la micro-optimisation assez peu intéressante dans le sens où elle est micro. Cette optimisation se base en tout et pour tout sur le temps d&#8217;exécution brut d&#8217;un script PHP, en se demandant si je peux gagner 10% en remplaçant tout mes echo par des print, ou alors en utilisant des &nbsp;&raquo; au lieu de &#8216;.</p>
<p>Sauf que, dans la vie d&#8217;une application web, ce temps n&#8217;est rien. Pour enfoncer une porte ouverte, le fonctionnement du web se décompose en plusieurs phases :</p>
<ol>
<li>Envoi d&#8217;une requête : interroger les serveurs DNS, trouver le serveur et ouvrir une connexion avec lui.</li>
<li>Génération de la réponse : le temps d&#8217;exécution</li>
<li>Téléchargement du résultat : le temps que le HTML généré par le PHP reviennent sur le client</li>
<li>Interprétation du résultat : le temps que le navigateur interprète le HTML, découvre les ressources nécessaire au rendu</li>
<li>Chargement des ressources annexes (assets) : pour chaque ressource, on repart du début (requête, réponse, téléchargement et interprétation)</li>
</ol>
<p>Le temps de rendu est l&#8217;ensemble des temps nécessaires pour réaliser toutes ces phases.</p>
<p>Prenons l&#8217;exemple, au hasard, d&#8217;un moteur de recherche bien connu, et analysons le chargement de la page d&#8217;accueil :<br />
<div id="attachment_147" class="wp-caption alignnone" style="width: 810px"><a href="http://www.mikaelrandy.fr/wp-content/uploads/2011/12/google-homepage.png"><img src="http://www.mikaelrandy.fr/wp-content/uploads/2011/12/google-homepage.png" alt="" title="Google - Analyse chargement homepage" width="800" height="481" class="size-full wp-image-147" /></a><p class="wp-caption-text">Analyse du chargement de la homepage</p></div></p>
<p>Voici ce que l&#8217;on peut apprendre de cette analyse :</p>
<ul>
<li>le temps complet de chargement de la page est de 964ms</li>
<li>la requête initiale (requête, génération, téléchargement du résultat) prend 110ms (95ms de génération du résultat)</li>
</ul>
<p>Il est donc clair que le temps de rendu (le temps nécessaire pour que l&#8217;utilisateur puisse utiliser la page) est 9 fois plus important que le temps d&#8217;exécution du script sur le serveur. Du coup, gagner 10% sur le temps d&#8217;exécution ne fait gagner que 1% sur le temps de rendu.<br />
Et je parle ici de la page d&#8217;accueil de Google, qui optimise beaucoup ses chargements, mais pour d&#8217;autres sites, moins optimisé, c&#8217;est encore pire dès que le nombre de CSS, de JS ou d&#8217;images croît.</p>
<h2>Optimisez vos chargements</h2>
<p>Pour agir de façon drastiquement efficace sur votre temps de rendu, tant que le temps d&#8217;exécution est inférieur à 75% du temps de rendu, c&#8217;est du côté du chargement qu&#8217;il faut chercher.</p>
<p>Pour agir sur le chargement, j&#8217;utilise 2 outils : <a href="http://code.google.com/intl/fr-FR/speed/page-speed/" title="Google Page Speed" target="_blank">Page Speed</a> et <a href="http://developer.yahoo.com/yslow/" title="Yslow" target="_blank">Yslow</a>. Ces outils se basent sur une liste d&#8217;optimisations de chargement de pages web.<br />
Je vous conseille de ne pas chercher à atteindre la perfection sur tout les points, mais c&#8217;est une bonne base de travail. Je vous conseille également de travailler avec les 2 outils en parallèle, car ils ne sont pas toujours d&#8217;accord, et cela permet de pondérer les conseils de chacun.</p>
<h2>Micro-optimisation vs. macro-optimisation</h2>
<p>Sur ce point, je suis totalement d&#8217;accord avec ZenProg : commencer par ce qui apporte réellement un gain de performance à vos sites !</p>
<p>Par expérience, je sais que lorsqu&#8217;un script PHP est lent, il faut commencer par traquer les causes suivantes :</p>
<ol>
<li>Requêtes non optimisées</li>
<li>Schéma de base de données non optimisé</li>
<li>Requêtes dans des boucles</li>
<li>Boucles non optimisées</li>
</ol>
<h3>Requêtes non optimisées</h3>
<p>Faire un <a href="http://dev.mysql.com/doc/refman/5.0/fr/explain.html" title="Syntax EXPLAIN pour MySQL" target="_blank">EXPLAIN PLAN</a> est un minimum vital pour des requêtes un minimum complexe. Dans de (trop) nombreux cas, 80% du temps d&#8217;exécution du script est l&#8217;oeuvre d&#8217;une requête non optimisée qui bloque le PHP</p>
<h3>Schéma de base de données non optimisé</h3>
<p>Comme le dit ZenProg, un index bien pensé (un index sur le(s) champ(s) sur lequel/lesquels se base les requêtes les plus fréquentes) permet de gagner <strong>beaucoup</strong> de temps, pour la même raison que pour le point précédent. </p>
<h3>Requêtes dans une boucle</h3>
<p>L&#8217;une des plus grosses fautes de développement, selon moi, c&#8217;est de ne pas contrôler les requêtes générées par son code source. Il est très facile de se retrouver dans un cas de figure où une requête est exécutée dans une boucle, surtout avec les frameworks MVC.<br />
Contrôler le nombre de requêtes générées, et travailler sur des données de test réalistes (des dizaines d&#8217;enregistrement minimum) permettent donc de se rendre compte quand le nombre de requêtes d&#8217;une page semble trop important pour le travail réalisé, et donc se rendre compte qu&#8217;on a des requêtes inutiles.</p>
<h3>Boucles non optimisées</h3>
<p>Je vois trop souvent des algos qui, suite à plusieurs évolutions, se retrouvent avec plusieurs parcours d&#8217;un même tableau.<br />
Au final, c&#8217;est du temps perdu lors des milliers/millions d&#8217;exécution de l&#8217;algo, juste parce le développeur n&#8217;a pas voulu &laquo;&nbsp;perdre&nbsp;&raquo; quelques minutes à prendre du recul sur son algo.</p>
<h2>La lisibilité du code</h2>
<p>Je sais que je sors un peu du sujet, mais je trouve qu&#8217;on y perd plus lorsque la micro-optimisation d&#8217;un code source rend sa lecture difficile</p>
<h2>L&#8217;optimisation hors script</h2>
<p>Je ne pouvais pas finir cet article portant sur l&#8217;optimisation sans parler de l&#8217;optimisation que j&#8217;appelle &laquo;&nbsp;hors site&nbsp;&raquo;.<br />
J&#8217;entends par là qu&#8217;il y a des optimisations qui sont applicables sans se pencher sur un script, mais qui améliorent drastiquement son temps d&#8217;exécution :</p>
<ul>
<li>Mettre en place un cache d&#8217;Opcode (APC, &#8230;)</li>
<li>Mettre en place un cache de rendu</li>
</ul>
<h2>Conclusion</h2>
<p>Pour moi, bencher si print est plus efficace que echo, c&#8217;est de la masturbation intellectuelle pour la plupart des développeurs web que nous sommes.<br />
Après la démonstration que je viens de vous faire, je pense que le jour où vous en serez réduis à remplacer vos print par des echo dans votre code source pour l&#8217;optimiser, c&#8217;est que vous aurez des besoins en performance très particulier, et que vous aurez déjà éculé les optimisations que je vous ai listées.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikaelrandy.fr/2011/12/30/de-linteret-de-la-micro-optimisation/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Mettre à jour MacPorts après une mise à jour de MacOS X</title>
		<link>http://www.mikaelrandy.fr/2011/11/04/mettre-a-jour-macport-apres-une-mise-a-jour-de-macos-x/</link>
		<comments>http://www.mikaelrandy.fr/2011/11/04/mettre-a-jour-macport-apres-une-mise-a-jour-de-macos-x/#comments</comments>
		<pubDate>Fri, 04 Nov 2011 17:50:09 +0000</pubDate>
		<dc:creator>Mikael Randy</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[lion]]></category>
		<category><![CDATA[MacOSX]]></category>
		<category><![CDATA[macports]]></category>

		<guid isPermaLink="false">http://www.mikaelrandy.fr/?p=130</guid>
		<description><![CDATA[Puisque, à la suite de la mise à jour de mon MacBook Pro vers OS X Lion, j&#8217;ai eu un...]]></description>
			<content:encoded><![CDATA[<p>Puisque, à la suite de la mise à jour de mon MacBook Pro vers OS X Lion, j&#8217;ai eu un problème de fonctionnement de <a href="http://www.macports.org/" title="MacPorts" target="_blank">MacPorts</a> qui m&#8217;a posé beaucoup de soucis, je partage avec vous la solution.</p>
<p>J&#8217;ai détecté le soucis en essayant de mettre à jour les ports<br />
<code>sudo port selfupdate<br />
sudo port upgrade outdated<br />
</code></p>
<p>Je suis tombé rapidement sur l&#8217;erreur suivante (dans mon cas, c&#8217;était sur gettext) :<br />
<code>Error: Target org.macports.build returned: shell command failed (see log for details)<br />
Log for gettext is at: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_ports_devel_gettext/gettext/main.log<br />
Error: Status 1 encountered during processing.<br />
To report a bug, see <http://guide.macports.org/#project.tickets><br />
</code></p>
<p>Le soucis viens en fait de MacPorts, qui n&#8217;est plus adapté au nouvel OS, mais qui ne sais pas se mettre à jour.<br />
Pour résoudre ce soucis, il existe heureusement une <a href="https://trac.macports.org/wiki/Migration" title="Migration MacPort" target="_blank">explication fournie par MacPort</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikaelrandy.fr/2011/11/04/mettre-a-jour-macport-apres-une-mise-a-jour-de-macos-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apple quitte MySQL pour PostGreSQL</title>
		<link>http://www.mikaelrandy.fr/2011/08/03/apple-quitte-mysql-pour-postgresql/</link>
		<comments>http://www.mikaelrandy.fr/2011/08/03/apple-quitte-mysql-pour-postgresql/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 17:10:58 +0000</pubDate>
		<dc:creator>Mikael Randy</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[MacOSX]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PostGreSQL]]></category>

		<guid isPermaLink="false">http://www.mikaelrandy.fr/?p=125</guid>
		<description><![CDATA[Ce jour, en lisant mes flux RSS, je suis tombé sur un article indiquant que Mac OS X Lion abandonnait...]]></description>
			<content:encoded><![CDATA[<p>Ce jour, en lisant mes flux RSS, je suis tombé sur un article indiquant que <a href="http://www.macgeneration.com/news/voir/211032/pourquoi-mysql-a-disparu-de-lion-server" title="Mac OS X Lion abandonne MySQL pour PostGreSQL" target="_blank">Mac OS X Lion abandonnait MySQL pour PostGreSQL</a>.</p>
<p>Pour information, je n&#8217;ai toujours pas migré de Snow Leopard vers Lion, car j&#8217;attends les 1er retours avant de me jeter sur la mise à jour.</p>
<p>Mais revenons au sujet : le remplacement de MySQL par PostGreSQL.<br />
Pour ma part, cela fait longtemps que MySQL n&#8217;est plus mon SGBD préféré, et je dirais même que j&#8217;ai pas mal de choses à lui reprocher, dont la source est toujours la même : sous couvert de simplicité d&#8217;utilisation, il ne respecte pas la norme <a href="http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt" title="Norme SQL ANSI-92" target="_blank">SQL ANSI-92</a>.</p>
<ul>
<li>Possibilité d&#8217;utiliser des mots-clés réservés pour les tables, colonnes, &#8230; en utilisant le &laquo;&nbsp;`&nbsp;&raquo;</li>
<li>Création automatique d&#8217;index</li>
<li>Intégration des dates plus que limitée (tout est converti en timestamp à votre insu)</li>
<li>tant encore</li>
</ul>
<p>Je sais bien que vous pourrez me répondre &laquo;&nbsp;mais si c&#8217;est plus simple à utiliser, où est le mal ?&nbsp;&raquo;. Et j&#8217;aurais du mal à vous contredire sur ce point.<br />
Mais le soucis est ailleurs, au niveau de la maîtrise.<br />
Non seulement, les milliers (millions ?) de développeurs ayant découvert le SQL avec MySQL apprennent de très mauvaises habitudes, mais les défendent alors même qu&#8217;elles sont contraires aux standards.</p>
<p>Le plus marrant, selon moi, est que ce sont ces mêmes personnes qui défendent Mozilla parce que &laquo;&nbsp;c&#8217;est libre, respectueux des standards, alors que Internet Explorer, non&nbsp;&raquo; qui utilisent MySQL (preuve selon moi de l&#8217;immense majorité de personnes qui ont adoptés Firefox pour être &laquo;&nbsp;hype&nbsp;&raquo; et pas par conviction).</p>
<p>Bref, pour en revenir à nouveau au sujet de base, j&#8217;utilise PostGreSQL depuis plusieurs années, et j&#8217;en pense le plus grand bien : non seulement il est ouvert, en pleine force de l&#8217;âge, équipé pour supporter les très gros volumes, permettant l&#8217;utilisation de techniques SQL avancées, mais également utilisable rapidement pour des sites à petits volumes, avec des bases de données simples.</p>
<p>Donc, en conclusion, je trouve que cette migration est une très bonne nouvelle pour PostGreSQL, pour augmenter sa visibilité au développeurs amateurs, qui apprennent sur les outils démocratiques.<br />
Et, qui sais, un jour nous aurons une majorité de LAPP (Linux-Apache-PostGreSQL-PHP) au détriment du traditionnel LAMP (Linux-Apache-MySQL-PHP)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikaelrandy.fr/2011/08/03/apple-quitte-mysql-pour-postgresql/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Création de l&#8217;antenne Lyonnaise de l&#8217;AFUP</title>
		<link>http://www.mikaelrandy.fr/2011/07/22/creation-de-lantenne-lyonnaise-de-lafup/</link>
		<comments>http://www.mikaelrandy.fr/2011/07/22/creation-de-lantenne-lyonnaise-de-lafup/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 21:39:08 +0000</pubDate>
		<dc:creator>Mikael Randy</dc:creator>
				<category><![CDATA[AFUP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[afup]]></category>
		<category><![CDATA[Lyon]]></category>
		<category><![CDATA[PHP Tour]]></category>

		<guid isPermaLink="false">http://www.mikaelrandy.fr/?p=122</guid>
		<description><![CDATA[Comme vous en avez certainement déjà entendu parlé, l&#8217;AFUP crée sa première antenne locale, sur Lyon. Sous l&#8217;impulsion de Geoffrey...]]></description>
			<content:encoded><![CDATA[<p>Comme vous en avez <a href="http://www.afup.org/pages/site/?route=actualites/462/lafup-sa-premiere-antenne-locale-a-lyon" title="L'AFUP crée sa première antenne locale" target="_blank">certainement déjà entendu parlé</a>, l&#8217;AFUP crée sa première antenne locale, sur Lyon.</p>
<p>Sous l&#8217;impulsion de <a href="http://twitter.com/#!/ubermuda" target="_blank">Geoffrey Bachelet</a>, il y a une équipe de motivé, dont je fais parti, qui est composé d&#8217;une dizaine de personnes.</p>
<p>Nous sommes en phase de création, on se cherche un peu, mais nous avons déjà de bonnes idées, et des mises en pratique vont suivre dès la rentrée.<br />
Au programme, nous avons :</p>
<ul>
<li><a href="http://dictionnaire.phpmyvisites.net/definition-Coding-party-9218.htm" title="Coding Party" target="_blank">Coding party</a> pour recoder le site aperophp.net</li>
<li>Organisation d&#8217;une conférence technique à la rentrée</li>
<li>Déposer une candidature pour le <a href="http://www.afup.org/pages/site/?route=actualites/445/lafup-lance-son-tour-de-france-php-%20un-evenement-itinerant-le-php-Tour" title="PHP Tour" target="_blank">PHP Tour</a> 2012</li>
</ul>
<p>Un leitmotiv que nous allons tenter de suivre va être l&#8217;ouverture aux autres technologies. Et dans cette voie, nous avons participé il y a quelques temps au Barcamp Lyon 2011, avec des devs Java, JS, Ruby, Microsoft, &#8230;<br />
De cet évènement sont ressortis quelques contacts intéressants qui annoncent des collaborations intéressantes. Affaire à suivre <img src='http://www.mikaelrandy.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Je suis très content qu&#8217;une communauté de développeurs PHP se mette enfin en place sur Lyon je suis très motivé par cette association, et je compte donc m&#8217;investir autant que possible dans son activité.</p>
<p>Je suis très heureux que ça bouge enfin</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikaelrandy.fr/2011/07/22/creation-de-lantenne-lyonnaise-de-lafup/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Game Dev Party à Lyon</title>
		<link>http://www.mikaelrandy.fr/2011/06/13/game-dev-party-a-lyon/</link>
		<comments>http://www.mikaelrandy.fr/2011/06/13/game-dev-party-a-lyon/#comments</comments>
		<pubDate>Mon, 13 Jun 2011 16:40:00 +0000</pubDate>
		<dc:creator>Mikael Randy</dc:creator>
				<category><![CDATA[Non classé]]></category>

		<guid isPermaLink="false">http://www.mikaelrandy.fr/?p=117</guid>
		<description><![CDATA[Bonjour à tous, Je sais que je m&#8217;y prend un peu tard, puisque l&#8217;évènement aura lieu dans moins de 15...]]></description>
			<content:encoded><![CDATA[<p>Bonjour à tous,</p>
<p>Je sais que je m&#8217;y prend un peu tard, puisque l&#8217;évènement aura lieu dans moins de 15 jours maintenant, mais le week-end des 25 et 26 juin 2011 se tiendra à Lyon la première <a href="http://gamedevparty.posterous.com/">Game Dev Party Lyonnaise</a>.</p>
<p>Le principe est simple :<br />
Vous êtes développeur et vous ne savez pas comment utiliser vos compétences ?<br />
Vous avez une super idée de jeu, mais vous n&#8217;avez pas le temps/les compétences/la motivation pour la mettre en pratique ?<br />
Rejoignez-vous pour 48h, et pour aller le plus loin possible dans la réalisation de cette idée.</p>
<p>Le lieu est également sympa puisque ça sera <a href="http://gamedevparty.posterous.com/le-lieu-latelier-des-medias">l&#8217;atelier des médias</a></p>
<p>Je m&#8217;étais inscrit parce que le challenge m&#8217;intéressais beaucoup, mais des obligations familiales font que je serais dans le sud ce week-end là.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikaelrandy.fr/2011/06/13/game-dev-party-a-lyon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gérer facilement ses versions de node.js</title>
		<link>http://www.mikaelrandy.fr/2011/06/03/gerer-facilement-ses-versions-de-node-js/</link>
		<comments>http://www.mikaelrandy.fr/2011/06/03/gerer-facilement-ses-versions-de-node-js/#comments</comments>
		<pubDate>Fri, 03 Jun 2011 20:53:31 +0000</pubDate>
		<dc:creator>Mikael Randy</dc:creator>
				<category><![CDATA[Node.js]]></category>
		<category><![CDATA[n]]></category>
		<category><![CDATA[node.js]]></category>

		<guid isPermaLink="false">http://www.mikaelrandy.fr/?p=106</guid>
		<description><![CDATA[Pour ceux qui ne le savent pas encore, Node.js est un interpreteur de JS en ligne de commande permettant de...]]></description>
			<content:encoded><![CDATA[<p>Pour ceux qui ne le savent pas encore, <a href="http://nodejs.org/">Node.js</a> est un interpreteur de JS en ligne de commande permettant de réaliser des serveurs, dont l&#8217;énorme avantage est l&#8217;aspect asynchrone de la programmation (voir <a href="http://naholyr.fr/2011/02/node-js-lavenement-de-la-programmation-asynchrone/">cet article de naholyr</a>, qui en parle très bien.<br />
Rappelez-vous, je vous avais déjà décrit <a href="http://www.mikaelrandy.fr/2011/01/07/installer-node-js-et-zombie-js-sur-macos-x/">l&#8217;installation de node.js</a> et de npm, son <em>package manager</em></p>
<p>Ce projet, en plus d&#8217;être très prometteur, est dans une phase de développement très forte, et toujours en version beta, ce qui implique que de nouvelles versions sortent très régulièrement (15 versions depuis le début de l&#8217;année 2011, dont une version majeure).<br />
La principale conséquence est qu&#8217;il est à la fois difficile d&#8217;être toujours à jour, mais également qu&#8217;un code peut ne plus fonctionner du jour au lendemain.<br />
Heureusement, dans ce genre de technos très dans le vent, il existe toujours une solution.</p>
<p>L&#8217;astuce du jour s&#8217;appelle <a href="https://github.com/visionmedia/n">n</a>. C&#8217;est un package qui permet d&#8217;installer/activer/supprimer rapidement et facilement n&#8217;importe quelle version de node.js, en permettant à plusieurs versions de cohabiter.</p>
<h2>Installation</h2>
<p>n s&#8217;installe très facilement grâce à npm :<br />
<code>sudo npm install -g n</code></p>
<p>C&#8217;est tout. Il y a pire me direz vous.</p>
<p>EDIT : comme me le fait remarquer Naholyr dans les commentaires, la version actuelle de npm demande l&#8217;option &laquo;&nbsp;-g&nbsp;&raquo; pour une installation globale</p>
<h2>Utilisation</h2>
<p>n permet de consulter les versions de node installer, d&#8217;en ajouter, de changer la version utilisée, de supprimer des versions inutiles, ou d&#8217;installer rapidement la dernière version disponible :</p>
<h3>Voir les versions installées</h3>
<p>Cette commande affiche la liste des versions de node installées<br />
<code>mrandy:~$ n<br />
    0.4.6<br />
  ο 0.4.7<br />
</code></p>
<h3>Activer/installer une version de node.js</h3>
<p>Imaginons que vous avez besoin d&#8217;installer node.js v0.3.8 (dernière version 0.3) pour exécuter un de vos codes<br />
<code>mrandy:~$ sudo n 0.4.6<br />
mrandy:~$ n<br />
  ο 0.4.6<br />
    0.4.7<br />
</code><br />
Cette commande va modifier la version active de node (celle appelée par défaut).<br />
Dans le cas où la version demandée n&#8217;était pas installée, cette commande va télécharger les sources, les compiler, installer la version et l&#8217;activer :<br />
<code>mrandy:~$ sudo n 0.4.0<br />
[...]<br />
mrandy:~$ n<br />
  ο 0.4.0<br />
    0.4.6<br />
    0.4.7<br />
</code></p>
<h3>Installer la version la plus récente</h3>
<p>Seulement voilà, sur un projet aussi dynamique, on ne sait jamais si on a la dernière version ou pas.<br />
Heureusement, n gère ce cas puisque la commande &laquo;&nbsp;n latest&nbsp;&raquo; est un alias pour la dernière version disponible.<br />
<code>mrandy:~$ sudo n latest<br />
[...]<br />
mrandy:~$ n<br />
    0.4.0<br />
    0.4.6<br />
    0.4.7<br />
  ο 0.4.8<br />
</code></p>
<h3>Supprimer une version de node</h3>
<p>C&#8217;est bien joli tout ça, mais au bout d&#8217;un moment, on se retrouve avec plus d&#8217;une dizaine de versions installée, et c&#8217;est un peu le boxon pour un psychorigide comme moi.<br />
Mais rassurez-vous, là aussi, n a tout prévu :</p>
<p><code>mrandy:~$ sudo n rm 0.4.0<br />
[...]<br />
mrandy:~$ n<br />
    0.4.6<br />
    0.4.7<br />
  ο 0.4.8<br />
</code></p>
<h3>Et tout le reste</h3>
<p><code><br />
n help // affiche la liste des commandes de n<br />
n use 0.4.7 // Execute node avec la version donnée (activation one shot)<br />
n bin 0.4.7 // Affiche le chemin vers l'exécutable de la version donnée<br />
n ls // Affiche la liste des versions de node.js disponible, en indiquant lesquelles sont installée<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mikaelrandy.fr/2011/06/03/gerer-facilement-ses-versions-de-node-js/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

