<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="fr">
  
  <title type="html">::franek::</title>
  <subtitle type="html">O°... Franek vous invite à suivre ses pérégrinations...</subtitle>
  
  <link href="http://franek.chicour.net/" rel="alternate" type="text/html" title="O°... Franek vous invite à suivre ses pérégrinations..." />
  <updated>2012-02-08T10:15:30+01:00</updated>
  <author>
    <name>franek</name>
  </author>
  <id>urn:md5:821addd302e9f183e2d357780898a2e1</id>
  <generator uri="http://www.dotclear.org/">Dotclear</generator>
  
    
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/franek/atom" /><feedburner:info uri="franek/atom" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
    <title>Quelques bonnes adresses sur la Côte d'Azur</title>
    <link href="http://feedproxy.google.com/~r/franek/atom/~3/T35RlMCDmYs/Quelques-bonnes-adresses-sur-la-C%C3%B4te-d-Azur" rel="alternate" type="text/html" title="Quelques bonnes adresses sur la Côte d'Azur" />
    <id>urn:md5:d52fb9354e2fa9d261620b732f39cb32</id>
    <published>2012-02-08T11:02:00+01:00</published>
    <updated>2012-02-08T11:10:44+01:00</updated>
    <author><name>franek</name></author>
        <dc:subject>tourisme</dc:subject>
        <dc:subject>antibes</dc:subject><dc:subject>cannes</dc:subject><dc:subject>musée</dc:subject><dc:subject>vallauris</dc:subject>    
    <content type="html">    &lt;p&gt;Après un passage par la côte d'Azur, quelques endroits qui valent le détour&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.ville-grasse.fr/" hreflang="fr"&gt;Ville de Grasse&lt;/a&gt; avec l'usine de la parfumerie &lt;a href="http://www.fragonard.com/" hreflang="fr"&gt;Fragonard&lt;/a&gt; et le &lt;a href="http://www.museesdegrasse.com/approfondissez_vos_connaissances/la_documentation/musee_international_de_la_parfumerie" hreflang="fr"&gt;musée international de la parfumerie&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://fr.wikipedia.org/wiki/Mus%C3%A9e_de_la_Castre" hreflang="fr"&gt;Musée de la Castre&lt;/a&gt; qui se situe en haut de la colline du Suquet à Cannes. Le musée propose une belle collection d'arts primitifs. Il est également possible de monter en haut de la tour du guet avec un beau panorama sur la baie de Cannes.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.vallauris-golfe-juan.fr/-Le-Musee-Magnelli-Musee-de-la-.html" hreflang="fr"&gt;Le Musée Magnelli, Musée de la Céramique&lt;/a&gt; à Vallauris&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/franek/atom/~4/T35RlMCDmYs" height="1" width="1"/&gt;</content>
    
    

    
          <wfw:comment>http://franek.chicour.net/post/2012/02/08/Quelques-bonnes-adresses-sur-la-C%C3%B4te-d-Azur#comment-form</wfw:comment>
      <wfw:commentRss>http://franek.chicour.net/feed/atom/comments/1912</wfw:commentRss>
      <feedburner:origLink>http://franek.chicour.net/post/2012/02/08/Quelques-bonnes-adresses-sur-la-C%C3%B4te-d-Azur</feedburner:origLink></entry>
    
  <entry>
    <title>Post-it : crontab et %</title>
    <link href="http://feedproxy.google.com/~r/franek/atom/~3/VuuE2iou7F8/Post-it-%3A-crontab-et" rel="alternate" type="text/html" title="Post-it : crontab et %" />
    <id>urn:md5:cb51c1e5b70edb21ee5ee613af03e793</id>
    <published>2012-01-04T20:59:00+01:00</published>
    <updated>2012-01-04T21:06:02+01:00</updated>
    <author><name>franek</name></author>
        <dc:subject>geek</dc:subject>
        <dc:subject>astuce</dc:subject><dc:subject>crontab</dc:subject><dc:subject>linux</dc:subject><dc:subject>post-it</dc:subject><dc:subject>sysadmin</dc:subject><dc:subject>échappement</dc:subject>    
    <content type="html">    &lt;p&gt;Une petite astuce concernant crontab que je ne connaissais pas (on apprend tous les jours).&lt;/p&gt;


&lt;p&gt;Les caractères % doivent être échappés dans crontab.&lt;/p&gt;


&lt;p&gt;Le crontab suivant&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
00 19 * * * /chemin/vers/mon/script.sh &amp;gt;/chemin/vers/output-`date +%Y%m%d`.log
&lt;/pre&gt;

&lt;p&gt;ne fonctionnait pas.&lt;/p&gt;


&lt;p&gt;J'obtenais une erreur du type&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
/bin/sh: Syntax error: EOF in backquote substitution
&lt;/pre&gt;


&lt;p&gt;Après quelques recherches, je suis tombé sur un &lt;a href="http://stackoverflow.com/questions/7068759/crontab-syntax-error" hreflang="en"&gt;fil de stackoverflow&lt;/a&gt; qui correspondait à mon problème.&lt;/p&gt;


&lt;p&gt;Dans crontab, il est nécessaires d'échapper avec un backslash le caractère %. Le contab suivant fonctionne&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
00 19 * * * /chemin/vers/mon/script.sh &amp;gt;/chemin/vers/output-`date +\%Y\%m\%d`.log
&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/franek/atom/~4/VuuE2iou7F8" height="1" width="1"/&gt;</content>
    
    

    
          <wfw:comment>http://franek.chicour.net/post/2012/01/04/Post-it-%3A-crontab-et#comment-form</wfw:comment>
      <wfw:commentRss>http://franek.chicour.net/feed/atom/comments/1901</wfw:commentRss>
      <feedburner:origLink>http://franek.chicour.net/post/2012/01/04/Post-it-%3A-crontab-et</feedburner:origLink></entry>
    
  <entry>
    <title>Exporter les bookmarks delicious automatiquement</title>
    <link href="http://feedproxy.google.com/~r/franek/atom/~3/ZSd5e_HPQ_c/Exporter-les-bookmarks-delicious-automatiquement" rel="alternate" type="text/html" title="Exporter les bookmarks delicious automatiquement" />
    <id>urn:md5:a7c2d137d2a3f51b58f6c6f9d9fba39c</id>
    <published>2011-12-31T11:50:00+01:00</published>
    <updated>2012-01-04T21:07:00+01:00</updated>
    <author><name>franek</name></author>
        <dc:subject>geek</dc:subject>
        <dc:subject>backup</dc:subject><dc:subject>crontab</dc:subject><dc:subject>delicious</dc:subject><dc:subject>export</dc:subject><dc:subject>python</dc:subject>    
    <content type="html">    &lt;p&gt;Un petit script python (mon premier) de fin d'année...&lt;/p&gt;


&lt;p&gt;Si comme moi, vous souhaitez conserver les données que vous publiez dans le cloud, voici un petit script permettant d'exporter l'ensemble des bookmarks publiés sur &lt;a href="http://delicious.com" hreflang="en"&gt;delicious&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Pour exporter automatiquement l'ensemble de vos bookmarks présents sur delicious, vous pouvez utiliser l'&lt;a href="http://delicious.com/help/api" hreflang="en"&gt;API mise à disposition par delicious&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;En utilisant quelque chose comme ça&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
curl -k --user username:password -o backup.xml -O 'https://api.del.icio.us/v1/posts/all' 
&lt;/pre&gt;


&lt;p&gt;&lt;a href="http://support.delicious.com/delicious/topics/export_delicious_to_xml_only_results_in_first_1000_bookmarks" hreflang="en"&gt;source&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Cependant, l'API limite l'export aux 1000 derniers bookmarks.&lt;/p&gt;


&lt;p&gt;Pour récupérer la totalité des bookmarks, delicious propose une &lt;a href="http://export.delicious.com/settings/bookmarks/export" hreflang="en"&gt;fonctionnalité d'export depuis l'interface utilisateur&lt;/a&gt; qui génère un fichier HTML.&lt;/p&gt;


&lt;p&gt;Mon &lt;a href="https://gist.github.com/1540460" hreflang="en"&gt;script&lt;/a&gt;, qui s'inspire d'un &lt;a href="https://gist.github.com/1431352" hreflang="en"&gt;autre script disponible sur github&lt;/a&gt;, automatise l'export proposé par delicious depuis l'interface et ajoute simplement la possibilité de passer en paramètre les informations d'identification.&lt;/p&gt;


&lt;p&gt;Pour l'utiliser&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
git clone git://gist.github.com/1540460.git backup-delicious
cd backup-delicious
python delicious.py -u &amp;lt;username&amp;gt; -p &amp;lt;password&amp;gt; -o delicious.html
&lt;/pre&gt;


&lt;p&gt;Pré-requis&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vous devez disposer de &lt;a href="http://docs.python-requests.org/en/latest/index.html" hreflang="en"&gt;python-requests&lt;/a&gt; (voir le fichier &lt;a href="https://gist.github.com/1540460#file_delicious.py" hreflang="en"&gt;delicious.py&lt;/a&gt; pour l'installation)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vous pourrez ensuite ajouter ce script dans le crontab.&lt;/p&gt;


&lt;p&gt;Par exemple&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
0 19 * * * /usr/bin/python /directory/to/delicious.py -u &amp;lt;username&amp;gt; -p &amp;lt;password&amp;gt; -o /directory/to/backup/delicious-`date +\%Y\%m\%d`.html
&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/franek/atom/~4/ZSd5e_HPQ_c" height="1" width="1"/&gt;</content>
    
    

    
          <wfw:comment>http://franek.chicour.net/post/2011/12/31/Exporter-les-bookmarks-delicious-automatiquement#comment-form</wfw:comment>
      <wfw:commentRss>http://franek.chicour.net/feed/atom/comments/1899</wfw:commentRss>
      <feedburner:origLink>http://franek.chicour.net/post/2011/12/31/Exporter-les-bookmarks-delicious-automatiquement</feedburner:origLink></entry>
    
  <entry>
    <title>Recyclage des lampes</title>
    <link href="http://feedproxy.google.com/~r/franek/atom/~3/q6GKldxGrEs/Recyclage-des-lampes" rel="alternate" type="text/html" title="Recyclage des lampes" />
    <id>urn:md5:f16dad9f935eb39615654074533df1a0</id>
    <published>2011-12-03T14:18:00+01:00</published>
    <updated>2011-12-03T14:19:03+01:00</updated>
    <author><name>franek</name></author>
        <dc:subject>environnement</dc:subject>
        <dc:subject>lampes</dc:subject><dc:subject>recyclage</dc:subject>    
    <content type="html">    &lt;p&gt;Je ne sais jamais quelles sont les lampes à recycler ou à jeter. Recyclum propose une synthèse plutôt bien faite&amp;nbsp;:
&lt;img src="http://www.recylum.com/wp-content/uploads/lampes-synthese-recylum.png" alt="" /&gt;&lt;/p&gt;


&lt;p&gt;source&amp;nbsp;: &lt;a href="http://www.recylum.com/les-lampes-concernees/introduction-sur-les-lampes/" hreflang="fr"&gt;Recyclum&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/franek/atom/~4/q6GKldxGrEs" height="1" width="1"/&gt;</content>
    
    

    
      <feedburner:origLink>http://franek.chicour.net/post/2011/12/03/Recyclage-des-lampes</feedburner:origLink></entry>
    
  <entry>
    <title>Retour sur le #phptour de Lille</title>
    <link href="http://feedproxy.google.com/~r/franek/atom/~3/Xcj9X-DJ2uk/Retour-sur-le-phptour-de-Lille" rel="alternate" type="text/html" title="Retour sur le #phptour de Lille" />
    <id>urn:md5:13a2f1a73706679071e79a0af767bfc7</id>
    <published>2011-11-27T09:48:00+01:00</published>
    <updated>2011-12-23T15:53:40+01:00</updated>
    <author><name>franek</name></author>
        <dc:subject>développement web</dc:subject>
        <dc:subject>afup</dc:subject><dc:subject>lille</dc:subject><dc:subject>php</dc:subject><dc:subject>phptour</dc:subject>    
    <content type="html">    &lt;p&gt;J'ai participé au &lt;a href="http://afup.org/pages/phptourlille2011/" hreflang="fr"&gt;#phptour&lt;/a&gt;, un nouvel événement itinérant autour de la technologie PHP proposé par l'&lt;a href="http://afup.org" hreflang="fr"&gt;AFUP&lt;/a&gt;. Cette année, cet événement avait lieu à Lille. Pour l'année prochaine, on évoque Nantes, Lyon ou Bordeaux. Le Forum PHP est quant à lui décalé et aura désormais lieu en juin.&lt;/p&gt;


&lt;p&gt;Voici quelques notes prises concernant les conférences auxquelles j'ai assistées.&lt;/p&gt;


&lt;h2&gt;Présentation de PHP5.4 par Julien Pauli (en remplacement de David Soria Parra qui ne pouvait être présent)&lt;/h2&gt;


&lt;p&gt;Julien a fait un rapide état des lieux autour de la future version de PHP&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le mode de contribution avec PHP5.4 évolue. Il est désormais obligatoire de passer par une &lt;a href="https://wiki.php.net/rfc" hreflang="en"&gt;RFC&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Le mode de publication évolue également à partir de la version 5.4 en se rapprochant d'un système de publication à la Ubuntu. Une version mineure sera publiée chaque année. Chaque version aura une durée de vie de 3 ans. Seules les versions majeures pourront casser la compatibilité. Le nouveau mode de publication est détaillée sur le &lt;a href="https://wiki.php.net/rfc/releaseprocess" hreflang="en"&gt;wiki de php&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Le dépôt des sources de PHP va migrer de subversion à git (a priori, à Noël). Les sources seront disponibles sur les serveurs de PHP.net (mais également sur github, miroir).&lt;/li&gt;
&lt;li&gt;Le principale apport de PHP5.4 est sa performance. PHP5.4 sera environ 50% plus rapide (d'après les quelques benchs réalisés, tout dépend de votre application)&lt;/li&gt;
&lt;li&gt;PHP5.4 supprime des vieilleries (notamment, register_globals, magic_quotes, session_register(),...)&lt;/li&gt;
&lt;li&gt;E_ALL contiendra désormais E_STRICT.&lt;/li&gt;
&lt;li&gt;La syntaxe &amp;lt;?= n'est plus dépendante de la configuration short_open_tags.&lt;/li&gt;
&lt;li&gt;PHP5.4 propose un serveur web embarqué afin de simplifier le développement mais qui ne doit pas être utilisé en production !!&lt;/li&gt;
&lt;li&gt;PHP5.4 propose ensuite des nouvelles fonctionnalités au niveau du langage&amp;nbsp;:
&lt;ul&gt;
&lt;li&gt;Le nouveau type Callable qui permet de décrire un callback dans une fonction (voir la &lt;a href="https://wiki.php.net/rfc/callable" hreflang="en"&gt;RFC pour plus d'explications&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Une &lt;a href="https://wiki.php.net/rfc/shortsyntaxforarrays" hreflang="en"&gt;nouvelle syntaxe pour les tableaux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Array derefencing&lt;/li&gt;
&lt;li&gt;Les &lt;a href="https://wiki.php.net/rfc/traits" hreflang="en"&gt;traits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;et enfin les &lt;a href="https://wiki.php.net/rfc/closures" hreflang="en"&gt;closures&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Les slides de la conférences sont disponibles sur &lt;a href="http://www.slideshare.net/jpauli/phptour-2011php54" hreflang="fr"&gt;slideshare&lt;/a&gt;.
&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;


&lt;h2&gt;Industrialisation PHP chez lamaisondevalerie par Sophie Beaupuis&lt;/h2&gt;


&lt;p&gt;Sophie travaille historiquement chez lamaisondevalerie.fr. Lamaisondevalerie a été racheté par Conforama afin de développer l'offre e-commerce de conforama.
Sophie nous a présenté les méthodes et outils mis en oeuvre pour la réécriture de la solution e-commerce de Conforama&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;choix d'une solution basée sur le Zend Framework en remplacement de Websphere e-commerce&lt;/li&gt;
&lt;li&gt;recrutement d'une équipe de développement (non sans difficultés apparemment)&lt;/li&gt;
&lt;li&gt;passage à une méthodologie agile. Elle essaye de se rapprocher de plus en plus de la méthodologie Scrum.&lt;/li&gt;
&lt;li&gt;chaque matin, réunion de 20 minutes pour faire un bilan sur les dev réalisés la veille et sur la planification des dev de la journée.&lt;/li&gt;
&lt;li&gt;mise en place de bonnes pratiques&amp;nbsp;:
&lt;ul&gt;
&lt;li&gt;mise en place de convention de codage&lt;/li&gt;
&lt;li&gt;mise en place de tests unitaires&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Passage à git, comme gestion des sources. Le passage à git a nécessité de créer des rôles de Source Manager. 2 personnes sont responsables des fusions des branches chaque soir.&lt;/li&gt;
&lt;li&gt;mise en place d'une plate-forme d'intégration continue (PHPUnderControl, pour le moment)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Suggestion dans la salle&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.icescrum.org/" hreflang="fr"&gt;icescrum&lt;/a&gt; pour gérer les backlogs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Les &lt;a href="http://afup.org/templates/phptourlille2011/resumes/526-la_maison_de_valerie.pdf" hreflang="fr"&gt;slides&lt;/a&gt; sont disponible sur le site de l'AFUP.&lt;/p&gt;


&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;h2&gt;Retour d'expérience sur XHProf par Martin Supiot&lt;/h2&gt;


&lt;p&gt;Martin nous a présenté son retour d'expérience sur XHProf un outil de profilage de PHP développé par Facebook qui mériterait d'être plus connu.
Cet outil n'est pas très gourmand et peut-être installé en production. Il est possible de configurer XHProf afin qu'il exécute le profilage par échantillonnage (une requête sur 10000, par exemple).&lt;/p&gt;


&lt;p&gt;En attendant les slides, je vous renvoie sur un &lt;a href="http://franek.chicour.net/post/2011/04/15/Installer-xhprof-et-xhprof-gui-sur-Zend-Server"&gt;article que j'avais écrit qui reprend une partie des slides de Martin&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Dommage que Martin n'ait pas parlé des alternatives au profilage en production (pas en dev), notamment, &lt;a href="http://newrelic.com/" hreflang="en"&gt;Newrelic&lt;/a&gt; (solution dans le cloud) qui est vraiment intéressante mais un peu chère.&lt;/p&gt;


&lt;p&gt;Edit&amp;nbsp;: Les &lt;a href="http://www.webaaz.com/2011/11/profilage-avec-xhprof-xhgui/" hreflang="fr" title="Slides conférence de Martin Supiot"&gt;slides sont disponibles sur le blog de Martin&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;h2&gt;Services asynchrones &amp;amp; multilangages avec Mongrel2 et ZeroMQ par Loïc d'Anterroches&lt;/h2&gt;


&lt;p&gt;(A venir)&lt;/p&gt;


&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;h2&gt;phpcloud.com&amp;nbsp;: Be a PHP Hero! par Zeev Suraski&lt;/h2&gt;


&lt;p&gt;Zeev nous a présenté la nouvelle offre de Zend &lt;a href="http://www.phpcloud.com/" hreflang="en"&gt;PHPCloud&lt;/a&gt; qui permet de déployer facilement une application dans un cloud proposé par Zend. La solution est encore en beta.
PHPCloud intègre toutes les fonctionnalités de Zend Server (profilage, cache d'opcode, évènements, ...).&lt;/p&gt;


&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;h2&gt;Les CMS basés sur framework en environnement profressionnel par Mathias Desloges et Raphaël Theet&lt;/h2&gt;


&lt;p&gt;Mathias et Raphaël travaillent chez Octave&amp;amp;Octave. Ils nous ont présenté leur solution de CMF (Content Management Framework), &lt;a href="http://centurion-project.org/" hreflang="fr"&gt;Centurion&lt;/a&gt;. Centurion est basé sur le Zend Framework (version 1.X, il n'est pas prévu de migrer en 2.X pour le moment). Centurion propose un ensemble de mécanisme permettant de simplifier le développement d'un site e-commerce.&lt;/p&gt;


&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;h2&gt;Atoum, framework de tests unitaires pour PHP5.3+ par Frédéric Hardy&lt;/h2&gt;


&lt;p&gt;Frédéric Hardy nous a présenté son &lt;a href="https://github.com/mageekguy/atoum/" hreflang="en"&gt;nouveau framework de tests unitaires&lt;/a&gt;. Excellente présentation qui donne envie de le tester.
Atoum est désormais un excellent challenger à PHPUnit. La concurrence a, en général, du bon.&lt;/p&gt;


&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;h2&gt;Drupal et Varnish, une histoire qui marche par Nicolas Silberman&lt;/h2&gt;


&lt;p&gt;Nicolas nous a fait un retour d'expérience sur l'intégration de Varnish en frontal de Drupal. Il a largement utilisé les &lt;a href="https://www.varnish-cache.org/docs/3.0/reference/vcl.html" hreflang="en"&gt;VCL&lt;/a&gt; ainsi que les &lt;a href="http://en.wikipedia.org/wiki/Edge_Side_Includes" hreflang="en"&gt;ESI&lt;/a&gt; (Edge Side Includes). Les ESI permettent de mettre en cache un bloc de page et sont interprétées par Varnish.
Depuis la version 2 de Symfony, il est possible de les intégrer facilement dans un développement à &lt;a href="http://symfony.com/doc/2.0/book/http_cache.html#using-edge-side-includes" hreflang="en"&gt;base de Symfony&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;h2&gt;Etes-vous prêts pour le succès par Steven Van Poeck&lt;/h2&gt;


&lt;p&gt;Steven nous a présenté une méthodologie pour faire évoluer une architecture en fonction du nombre de visiteurs.
Je n'ai pas toujours été d'accord avec ses choix (notamment, sur la désactivation des logs Acces_log sur les frontaux) mais globalement, assez d'accord.&lt;/p&gt;


&lt;p&gt;Les slides de sa présentation sont disponibles sur &lt;a href="http://www.slideshare.net/svanpoeck/etes-vouspretspourlesucces2011-10320332" hreflang="fr"&gt;Slideshare&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;h2&gt;Suivi qualité avec Sonar pour PHP par Gabriele Santini&lt;/h2&gt;


&lt;p&gt;Gabriel nous a présenté Sonar pour PHP. Sonar ne doit pas être comparée à une PIC (Plate-forme d'Intégration Continue) comme Jenkins.
Sonar est un logiciel libre permettant de mesurer la qualité du code source des projets de développement. Depuis peu, Sonar propose un plugin pour PHP. Il vient en complément de Jenkins. Pour Gabriele, les conventions de codage (via PHP_Code_Sniffer), la complexité du code (via PHPMD), ... ne doivent pas être vérifiées dans la PIC mais dans Sonar.
Il existe un plugin permettant d'intégrer Sonar dans Jenkins.&lt;/p&gt;


&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;h2&gt;Améliorez votre productivité avec Symfony2 par Hugo Hamon&lt;/h2&gt;


&lt;p&gt;Rapide présentation de Hugo sur les nouvelles fonctionnalités de Symfony2. Je ne suis personnellement pas fan des annotations mais c'est avis totalement personnel.
Cette présentation donne envie d'aller plus loin. Le système de génération de l'admin, l'héritage dans Twig ou la gestion des caches (Reverse Proxy) semblent vraiment bien intégrées.&lt;/p&gt;


&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;h2&gt;Sécurité des applications PHP par Marion Agé et Sébastien Baudru&lt;/h2&gt;


&lt;p&gt;Rien de neuf dans cette présentation sur la sécurité mais la mise en scène était excellente.&lt;/p&gt;


&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;h2&gt;Zend Framework2&amp;nbsp;: State of the art par Enrico Zimuel&lt;/h2&gt;


&lt;p&gt;Enrico nous a présenté les nouvelles fonctionnalités de ZF2.&lt;/p&gt;


&lt;p&gt;Sortie prévue de ZF2&amp;nbsp;: pas avant avril 2012 si j'ai bien noté.&lt;/p&gt;


&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;h2&gt;Dev et admin sys&amp;nbsp;: une cohabitation simplifiée par Nicolas Silberman et Sébastien Lucas&lt;/h2&gt;


&lt;p&gt;J'ai loupé le début de la conférence. Nicolas et Sébastien ont plutôt présenté la culture &lt;a href="http://devops.fr/" hreflang="fr"&gt;devops&lt;/a&gt; qui visent à rapprocher les équipes de dev avec les admin sys. J'ai bien aimé le tableau de présentation des outils à partager entre les équipes de dev et les équipes d'admin.&lt;/p&gt;


&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;h2&gt;Magento - intégration continue, tests et automatisation par Alexande Salomé&lt;/h2&gt;


&lt;p&gt;Enfin, pour terminer, une bonne conférence sur la mise en place de l'intégration continue sur un projet. Alexandre a pris comme exemple Magento mais ça méthode pourrait s'appliquer à n'importe quel projet.&lt;/p&gt;


&lt;p&gt;Les slides de sa conférence sur &lt;a href="http://speakerdeck.com/u/alexandresalome/p/magento-integration-continue-tests-automatisation" hreflang="fr"&gt;SpeackerDeck&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/franek/atom/~4/Xcj9X-DJ2uk" height="1" width="1"/&gt;</content>
    
    

    
      <feedburner:origLink>http://franek.chicour.net/post/2011/11/27/Retour-sur-le-phptour-de-Lille</feedburner:origLink></entry>
    
  <entry>
    <title>Jenkins : Respect des conventions de codage Javascript avec JSLint</title>
    <link href="http://feedproxy.google.com/~r/franek/atom/~3/qNvEPpbyjMY/Jenkins-%3A-Respect-des-conventions-de-codage-Javascript-avec-JSLint" rel="alternate" type="text/html" title="Jenkins : Respect des conventions de codage Javascript avec JSLint" />
    <id>urn:md5:b9d09665b543ec6bf83e88619347a06c</id>
    <published>2011-10-10T13:21:00+02:00</published>
    <updated>2011-10-23T17:00:15+02:00</updated>
    <author><name>franek</name></author>
        <dc:subject>développement web</dc:subject>
        <dc:subject>intégration continue</dc:subject><dc:subject>jenkins</dc:subject><dc:subject>jslint</dc:subject><dc:subject>phing</dc:subject><dc:subject>php</dc:subject>    
    <content type="html">    &lt;p&gt;Imaginons que vous disposez d'une plate-forme d'intégration continue (idéalement Jenkins ou Hudson) pour vos projets PHP (si ce n'est pas le cas, je vous invite à lire les excellents billets de Pascal Martin :&lt;a href="http://blog.pascal-martin.fr/post/integration-continue-jenkins-installation-configuration" hreflang="fr"&gt; Intégration continue avec Jenkins&amp;nbsp;: installation et configuration de base&lt;/a&gt; et &lt;a href="http://blog.pascal-martin.fr/post/integration-continue-jenkins-projet-php" hreflang="fr"&gt;Intégration continue d'un projet PHP avec Jenkins&lt;/a&gt;).&lt;/p&gt;


&lt;p&gt;Imaginons que vous n'utilisez pas Ant comme outil d'automatisation (de build) mais plutôt Phing parce que vous maîtrisez cet outil.&lt;/p&gt;


&lt;p&gt;Imaginons que vous souhaitez également vérifier la qualité de vos développement Javascript (Dans un projet PHP, vous avez sûrement un peu de Javascript, non ?) et que vous souhaitez disposer d'indicateur de suivi de la qualité dans Jenkins.&lt;/p&gt;


&lt;p&gt;Il existe plusieurs outils pour vérifier la qualité de son code Javascript&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.jslint.com/" hreflang="en"&gt;Jslint&lt;/a&gt; de Douglas Crockford&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/jslint4java/" hreflang="en"&gt;jslint4java&lt;/a&gt; un portage de jslint de Douglas Crockford en Java&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/intl/fr/closure/utilities/" hreflang="en"&gt;Google Closure Linter&lt;/a&gt; un outil développé par Google&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jshint.org/" hreflang="en"&gt;JsHint&lt;/a&gt; un fork de Jslint&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.javascriptlint.com/" hreflang="en"&gt;Javascript Lint&lt;/a&gt; dit JSL est un portage de jslint en Python.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;L'outil JSL n'a pas évolué depuis 2007. Il nécessite d'être installé en suivant l'&lt;a href="http://ioconnor.wordpress.com/2009/05/02/javascriptlint-vim-and-ubuntu/" hreflang="en"&gt;une de ces procédures&lt;/a&gt;. Avantage, il existe une &lt;a href="http://www.phing.info/docs/guide/stable/chapters/appendixes/AppendixC-OptionalTasks.html#JslLintTask" hreflang="en"&gt;tâche Phing pour exécuter JSL&lt;/a&gt;. Inconvénient, il n'est pas possible de générer un fichier XML compréhensible par Jenkins.&lt;/p&gt;


&lt;p&gt;Je n'ai pas regardé Google Closure Linter.&lt;/p&gt;


&lt;p&gt;JSHint semble intéressant. Mais à nouveau, il ne semble pas y avoir de mécanisme simple permettant de l'intégrer à Jenkins.&lt;/p&gt;


&lt;p&gt;Jslint ne permet pas, a priori, nativement de générer un fichier XML compréhensible par Jenkins.&lt;/p&gt;


&lt;p&gt;Je me suis donc tourné vers &lt;a href="http://code.google.com/p/jslint4java/" hreflang="en"&gt;jslint4java&lt;/a&gt;. Je me suis inspiré du travail de &lt;a href="http://stephen.rees-carter.net/2011/05/jenkins-ci-jslint-javascript-quality-checking/" hreflang="en"&gt;Stephen Rees&lt;/a&gt; (qui utilise Ant) pour implémenter l'exécution de Jslint avec phing.&lt;/p&gt;


&lt;p&gt;Voici le résultat&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
    &amp;lt;!-- Fichier temporaire contenant la liste des fichiers JS à traiter avec JSLint --&amp;gt;
    &amp;lt;property name=&amp;quot;temp_file_all_js&amp;quot; value=&amp;quot;/tmp/${phing.project.name}/all_js.txt&amp;quot; override=&amp;quot;true&amp;quot; /&amp;gt;     

    &amp;lt;!-- Chemin vers Jslint4java --&amp;gt;
    &amp;lt;property name=&amp;quot;jslint4java&amp;quot; value=&amp;quot;/chemin/vers/jslint4java/jslint4java-2.0.0.jar&amp;quot; override=&amp;quot;true&amp;quot; /&amp;gt;     

    &amp;lt;!-- création d'un patternset contenant l'ensemble des fichiers JS à analyser --&amp;gt;
    &amp;lt;!-- on exclut les fichiers JQuery et les fichiers minimifiés --&amp;gt;
    &amp;lt;patternset id=&amp;quot;js_files&amp;quot;&amp;gt;
        &amp;lt;include name=&amp;quot;public/js/**/*.js&amp;quot;/&amp;gt;
        &amp;lt;exclude name=&amp;quot;public/js/**/*-min.js&amp;quot;/&amp;gt;
        &amp;lt;exclude name=&amp;quot;public/js/jquery*.js&amp;quot;/&amp;gt;
    &amp;lt;/patternset&amp;gt;

   &amp;lt;!-- ============================================  --&amp;gt;
    &amp;lt;!--   (jslint) Target: vérification syntaxe JS    --&amp;gt;
    &amp;lt;!-- attention à créer au préalable un patternset  --&amp;gt;
    &amp;lt;!-- ayant pour nom js_files                        --&amp;gt;
    &amp;lt;!-- ============================================  --&amp;gt;
    &amp;lt;target name=&amp;quot;jslint&amp;quot;&amp;gt;
        
        &amp;lt;!-- créer le repertoire de stockage du fichier temporaire --&amp;gt;
        &amp;lt;!-- s'il n'existe pas                                     --&amp;gt;
        &amp;lt;php function=&amp;quot;dirname&amp;quot; returnProperty=&amp;quot;temp_dir&amp;quot;&amp;gt;
            &amp;lt;param value=&amp;quot;${temp_file_all_js}&amp;quot;/&amp;gt;
        &amp;lt;/php&amp;gt;
        &amp;lt;mkdir dir=&amp;quot;${temp_dir}&amp;quot; /&amp;gt;
        
        &amp;lt;!-- crée un fichier temporaire contenant la liste des fichiers JS à traiter --&amp;gt;
        &amp;lt;!-- cette liste se base sur le patternset refid=js_files --&amp;gt;
        &amp;lt;foreach param=&amp;quot;filename&amp;quot; absparam=&amp;quot;absfilename&amp;quot; target=&amp;quot;_createFilesetText&amp;quot;&amp;gt;
            &amp;lt;fileset dir=&amp;quot;${install_dir}&amp;quot;&amp;gt;
                &amp;lt;patternset refid=&amp;quot;js_files&amp;quot; /&amp;gt;
            &amp;lt;/fileset&amp;gt;
        &amp;lt;/foreach&amp;gt;
    
        &amp;lt;!-- on charge le contenu de temp_file_all_js dans la variable ${all_js} --&amp;gt;
        &amp;lt;loadfile property=&amp;quot;all_js&amp;quot; file=&amp;quot;${temp_file_all_js}&amp;quot;/&amp;gt;
        &amp;lt;echo&amp;gt;Fichiers analysés par JSLint : ${all_js}&amp;lt;/echo&amp;gt;
        
        &amp;lt;!-- exécution de jslint4java                       --&amp;gt;
        &amp;lt;!-- browser permet de définir les variables du navigateur dans le contexte d'exécution --&amp;gt;
        &amp;lt;!-- prefed permet de définir les variables dans le contexte d'exécution --&amp;gt;
        &amp;lt;!-- voir : http://code.google.com/p/jslint4java/source/browse/jslint4java-docs/src/main/resources/cli.html --&amp;gt;
        &amp;lt;exec 
            command=&amp;quot;java -jar ${jslint4java}
                     --browser --predef $,document,jQuery
                     --report xml
                     ${all_js} &amp;gt; ${builddir}/logs/jslint.xml&amp;quot; 
            passthru=&amp;quot;true&amp;quot; 
        /&amp;gt;
        
        &amp;lt;delete file=&amp;quot;${temp_file_all_js}&amp;quot; /&amp;gt;
    &amp;lt;/target&amp;gt;

   &amp;lt;!-- ============================================  --&amp;gt;
    &amp;lt;!--   _createFilesetText Target:                  --&amp;gt;
    &amp;lt;!-- stocke la liste des fichiers JS à traiter     --&amp;gt;
    &amp;lt;!-- dans le fichier /tmp/all_js.txt               --&amp;gt;
    &amp;lt;!-- ============================================  --&amp;gt;
    &amp;lt;target name=&amp;quot;_createFilesetText&amp;quot; &amp;gt;
        &amp;lt;echo file=&amp;quot;${temp_file_all_js}&amp;quot; append=&amp;quot;true&amp;quot;&amp;gt;${absfilename} &amp;lt;/echo&amp;gt;
    &amp;lt;/target&amp;gt;

&lt;/pre&gt;


&lt;p&gt;Vous devez ensuite appeler cette tâche dans votre tâche principale de build. Quelque chose comme ça&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;target name=&amp;quot;build&amp;quot;&amp;gt;
        &amp;lt;echo msg=&amp;quot;tâche build&amp;quot; /&amp;gt;
        &amp;lt;phingcall target=&amp;quot;php-doc&amp;quot; /&amp;gt;
        &amp;lt;phingcall target=&amp;quot;pdepend&amp;quot;/&amp;gt;
        &amp;lt;phingcall target=&amp;quot;phpmd&amp;quot;/&amp;gt;
        &amp;lt;phingcall target=&amp;quot;phpcpd&amp;quot;/&amp;gt;
        &amp;lt;phingcall target=&amp;quot;phploc&amp;quot;/&amp;gt;
        &amp;lt;phingcall target=&amp;quot;php-cs&amp;quot; /&amp;gt;
	&amp;lt;phingcall target=&amp;quot;php-cb&amp;quot; /&amp;gt;
	&amp;lt;phingcall target=&amp;quot;phpunit&amp;quot; /&amp;gt;
       &amp;lt;!-- on lance la vérification syntaxique de JS --&amp;gt;
        &amp;lt;phingcall target=&amp;quot;jslint&amp;quot; /&amp;gt;
 &amp;lt;/target&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Vous pourrez ensuite configurer dans Jenkins l'appel du fichier de log (build/log/jslint.xml)&amp;nbsp;:
&lt;a href="http://franek.chicour.net/public/jenkins/jenkins_configuration.png" title="Jenkins - Configuration JSlint"&gt;&lt;img src="http://franek.chicour.net/public/jenkins/.jenkins_configuration_m.jpg" alt="Jenkins - Configuration JSlint" style="display:block; margin:0 auto;" title="Jenkins - Configuration JSlint, oct. 2011" /&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Après l'exécution du build, vous devriez avoir dans le menu Violations, quelque chose comme ça&amp;nbsp;:
&lt;a href="http://franek.chicour.net/public/jenkins/jenkins_violation.png" title="jenkins - violation JSLint"&gt;&lt;img src="http://franek.chicour.net/public/jenkins/.jenkins_violation_m.jpg" alt="jenkins - violation JSLint" style="display:block; margin:0 auto;" title="jenkins - violation JSLint, oct. 2011" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/franek/atom/~4/qNvEPpbyjMY" height="1" width="1"/&gt;</content>
    
    

    
      <feedburner:origLink>http://franek.chicour.net/post/2011/10/10/Jenkins-%3A-Respect-des-conventions-de-codage-Javascript-avec-JSLint</feedburner:origLink></entry>
    
  <entry>
    <title>Post-it : Synology partage d'un scanner sur le réseau</title>
    <link href="http://feedproxy.google.com/~r/franek/atom/~3/Tgy2323vo_M/Post-it-%3A-Synology-partage-d-un-scanner-sur-le-r%C3%A9seau" rel="alternate" type="text/html" title="Post-it : Synology partage d'un scanner sur le réseau" />
    <id>urn:md5:bddc6409f24959bf99bd8656cc1e201e</id>
    <published>2011-09-20T14:48:00+02:00</published>
    <updated>2011-09-24T13:11:16+02:00</updated>
    <author><name>franek</name></author>
        <dc:subject>geek</dc:subject>
        <dc:subject>ds-211</dc:subject><dc:subject>hp</dc:subject><dc:subject>network</dc:subject><dc:subject>PSC-1100</dc:subject><dc:subject>réseau</dc:subject><dc:subject>scanner</dc:subject><dc:subject>synology</dc:subject><dc:subject>ubuntu</dc:subject>    
    <content type="html">    &lt;p&gt;En branchant son imprimante 2-en-1 (dans mon cas HP PSC-1100 All-in-one) sur un synology (dans mon cas, DS-211+), Il est possible de facilement partager son imprimante sur le réseau.&lt;/p&gt;


&lt;p&gt;Le partage du scanner est un peu moins documenté (à moins que votre imprimante all-in-one supporte le protocole MFP). Pour une liste d'imprimantes compatibles avec le Synology, vous pouvez référer à la &lt;a href="http://forum.synology.com/wiki/index.php/User_Reported_Compatible_USB_Printers" hreflang="en" title="Imprimante compatible avec Synology"&gt;liste disponible sur le site du constructeur&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Dans notre cas, nous allons devoir bidouiller ("Hackability is fun !"...)&lt;/p&gt;


&lt;p&gt;Les tutoriaux suivants sont une bonne base&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://help.ubuntu.com/community/ScanningHowTo" hreflang="en"&gt;partage d'un scanner sur le réseau sur ubuntu.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://arnoutboer.nl/weblog/?p=223" hreflang="en"&gt;Attaching a scanner to my Synology Diskstation 107&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On va utiliser sane pour partager le scanner. Par défaut, sane ne dispose pas des drivers HP. Il va donc falloir les installer et lui dire qu'ils ont été installés&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;1- Installer, de mémoire, les paquets suivants via ipkg&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
$ ipkg install hplip libusb libieee1284 sane-backends xinetd
&lt;/pre&gt;


&lt;p&gt;2- L'astuce dans mon cas est d'ajouter le support des drivers HP à sane&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
sudo echo &amp;quot;hpaio&amp;quot; &amp;gt;&amp;gt; /opt/etc/sane.d/dll.conf
sudo echo &amp;quot;hpaio&amp;quot; &amp;gt; /opt/etc/sane.d/dll.d/hplip
&lt;/pre&gt;


&lt;p&gt;3- On vérifie que le scanner est bien reconnu&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
sane-find-scanner
&lt;/pre&gt;


&lt;p&gt;Cela doit retourner quelque chose comme&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
found USB scanner (vendor=0x03f0 [Hewlett-Packard], product=0x3011 [psc 1100 series]) at libusb:001:003
&lt;/pre&gt;


&lt;p&gt;Si le scanner n'a pas été reconnu, passer votre chemin.&lt;/p&gt;


&lt;p&gt;4- Si le scanner a été reconnu, on va vérifier la compatibilité avec sane&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
scanimage -L
&lt;/pre&gt;


&lt;p&gt;Cette ligne doit retourner quelque chose comme&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
device `hpaio:/usb/psc_1100_series?serial=MY369160GQB0' is a Hewlett-Packard psc_1100_series all-in-one
&lt;/pre&gt;


&lt;p&gt;Si elle ne retourne pas ce type d'information, vérifier la configuration de sane et notamment les fichiers dll.conf et hplip.&lt;/p&gt;


&lt;p&gt;Votre scanner devrait fonctionner sur le réseau. Pour qu'il fonctionne sur le réseau, il faut s'assurer de 2-3 petites choses.&lt;/p&gt;


&lt;p&gt;Vérifier que dans le fichier /opt/etc/xinetd.conf votre sous-réseau est bien présent&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
    only_from = localhost 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
&lt;/pre&gt;


&lt;p&gt;ainsi que dans le fichier /opt/etc/sane.d/saned.conf&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
192.168.0.0/16
&lt;/pre&gt;


&lt;p&gt;Configurer sane&lt;/p&gt;
&lt;pre&gt;
vi /opt/etc/xinetd.d/sane-port
&lt;/pre&gt;


&lt;p&gt;Ajouter&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
service sane-port
{
    port = 6566
    socket_type = stream
    wait = no
    user = root
    group = root
    server = /opt/sbin/saned
}
&lt;/pre&gt;


&lt;p&gt;Vérifier que le fichier /etc/services contient bien&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
  sane-port         6566/tcp        # SANE network scanner daemon
&lt;/pre&gt;


&lt;p&gt;Vous pouvez ensuite démarrer sane&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
/opt/etc/init.d/S10xinetd
&lt;/pre&gt;


&lt;p&gt;Sur le poste client, une seule modification&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
sudo vi /etc/sane.d/net.conf
&lt;/pre&gt;


&lt;p&gt;Remplacer&lt;strong&gt; # localhost&lt;/strong&gt; par l'&lt;strong&gt;ip de votre serveur&lt;/strong&gt;.&lt;/p&gt;


&lt;p&gt;Depuis votre poste client, scanimage -L devrait renvoyer quelque chose comme&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
device `net:&amp;lt;votre ip&amp;gt;:hpaio:/usb/psc_1100_series?serial=MY369160GQB0' is a Hewlett-Packard psc_1100_series all-in-one
&lt;/pre&gt;


&lt;p&gt;Voilà, ce sont quelques notes rapides qui seront peut-être utiles à d'autres.&lt;/p&gt;


&lt;p&gt;&lt;a href="http://franek.chicour.net/post/2011/09/20/EDIT" title="EDIT"&gt;EDIT&lt;/a&gt;
Bon, parfois, le scanner n'est pas accessible depuis le client. J'ai résolu ce problème en supprimant le fichier de PID de dbus et en relançant le process dbus&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
$ rm /opt/var/run/dbus/pid
$ /opt/etc/init.d/S20dbus start
&lt;/pre&gt;

&lt;p&gt;(source&amp;nbsp;: http://forum.synology.com/enu/viewtopic.php?f=27&amp;amp;t=14801)&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/franek/atom/~4/Tgy2323vo_M" height="1" width="1"/&gt;</content>
    
    

    
      <feedburner:origLink>http://franek.chicour.net/post/2011/09/20/Post-it-%3A-Synology-partage-d-un-scanner-sur-le-r%C3%A9seau</feedburner:origLink></entry>
    
  <entry>
    <title>Quelques trucs et astuces concernant git (et git svn)</title>
    <link href="http://feedproxy.google.com/~r/franek/atom/~3/TF8VTpL54cw/Quelques-trucs-et-astuces-concernant-git-%28et-git-svn%29" rel="alternate" type="text/html" title="Quelques trucs et astuces concernant git (et git svn)" />
    <id>urn:md5:2280c710e47260b738bd8baebb4baf69</id>
    <published>2011-08-12T14:55:00+02:00</published>
    <updated>2011-08-12T14:00:56+02:00</updated>
    <author><name>franek</name></author>
        <dc:subject>geek</dc:subject>
        <dc:subject>astuces</dc:subject><dc:subject>git</dc:subject><dc:subject>git-svn</dc:subject>    
    <content type="html">    &lt;p&gt;Une petite liste de trucs et astuces concernant l'utilisation de git (avec svn ou non).&lt;/p&gt;


&lt;p&gt;Pour définir l'éditeur par défaut utilisé par git (ici vi)&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
$ git config --global core.editor vi
&lt;/pre&gt;


&lt;p&gt;Récupérer l'ensemble du dépôt subversion dans un environnement git&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
$ git svn clone -s http://url_depot_svn/ rep-destination/
&lt;/pre&gt;


&lt;p&gt;Resynchroniser le dépôt local (git) avec le dépôt subversion (récupération des tags notamment).&lt;/p&gt;
&lt;pre&gt;
$ git svn fetch
&lt;/pre&gt;


&lt;p&gt;Dans le cas d'une utilisation de git avec subversion, afficher tous les tags et les branches subversion&lt;/p&gt;
&lt;pre&gt;
$ git branch -a
&lt;/pre&gt;


&lt;p&gt;Créer une branche git qui suit les modifications d'une branche subversion&lt;/p&gt;
&lt;pre&gt;
$ git checkout -b local-trunk remotes/trunk
&lt;/pre&gt;

&lt;p&gt;Ici, on crée une branche git local-trunk qui est une copie de remotes/trunk et qui suit ces modifications&lt;/p&gt;


&lt;p&gt;Commiter l'ensemble des modifications locales vers le dépôt subversion&lt;/p&gt;
&lt;pre&gt;
$ git svn dcommit
&lt;/pre&gt;


&lt;p&gt;Par défaut, git ne supprime pas les répertoires vides. Il est possible d'indiquer à git de supprimer les répertoires vides dans subversion&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;option 1, dans le fichier de configuration de git ~/.gitconfig&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
[svn]
        rmdir = true
&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;option 2, lors de l'appel de git svn dcommit&amp;nbsp;:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
$ git svn dcommit --rmdir
&lt;/pre&gt;


&lt;p&gt;Disposer d'un diff en couleur (&lt;a href="https://git.wiki.kernel.org/index.php/GitFaq#Why_does_diff.2Flog_not_show_color.2C_even_though_I_enabled_it.3F" hreflang="fr" title="git diff en couleur"&gt;source&lt;/a&gt;)&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
[core]
        pager = less -FXRS
&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/franek/atom/~4/TF8VTpL54cw" height="1" width="1"/&gt;</content>
    
    

    
      <feedburner:origLink>http://franek.chicour.net/post/2011/02/11/Quelques-trucs-et-astuces-concernant-git-%28et-git-svn%29</feedburner:origLink></entry>
    
  <entry>
    <title>Post-it : Accéder à un dépôt git à traver un proxy</title>
    <link href="http://feedproxy.google.com/~r/franek/atom/~3/KmsPcvTzq_w/Acc%C3%A9der-%C3%A0-un-d%C3%A9p%C3%B4t-git-%C3%A0-traver-un-proxy" rel="alternate" type="text/html" title="Post-it : Accéder à un dépôt git à traver un proxy" />
    <id>urn:md5:de5b077028b0f158bd5c01babb790b37</id>
    <published>2011-08-06T17:12:00+02:00</published>
    <updated>2011-10-11T12:44:24+02:00</updated>
    <author><name>franek</name></author>
        <dc:subject>geek</dc:subject>
        <dc:subject>corkscrew</dc:subject><dc:subject>git</dc:subject><dc:subject>post-it</dc:subject><dc:subject>proxy</dc:subject>    
    <content type="html">    &lt;p&gt;Il est parfois nécessaire de pouvoir accéder à son dépôt git (push et pull) auto-hébergé derrière un proxy.&lt;/p&gt;


&lt;p&gt;Mon dépôt git ne support pas le &lt;a href="https://github.com/blog/642-smart-http-support" hreflang="en"&gt;smart HTTP protocol&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Je vais vous présenter ici une technique s'appuyant sur corkscrew. Il y existe sûrement d'autres techniques (port forwarding, ...).&lt;/p&gt;


&lt;p&gt;Cette technique sous-entend que ssh est configuré sur le port 443 de votre serveur.&lt;/p&gt;


&lt;p&gt;Installer corkscrew&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
$ sudo apt-get install corkscrew
&lt;/pre&gt;


&lt;p&gt;Ajouter dans le fichier ~/.ssh/config&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
Host mon.domaine.net
 User git
 Port 443
 TCPKeepAlive yes
 ProxyCommand /usr/bin/corkscrew &amp;lt;proxy&amp;gt; &amp;lt;port proxy&amp;gt; %h %p
&lt;/pre&gt;


&lt;p&gt;Cette configuration signifie&amp;nbsp;:
Pour le domaine &lt;em&gt;mon.domaine.net&lt;/em&gt; (Host mon.domaine.net) utilise l'utilisateur git sur le port 443 et passe par le proxy &amp;lt;proxy&amp;gt; en utilisant corkscrew. TCPKeepAlive permet de maintenir la connexion.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/franek/atom/~4/KmsPcvTzq_w" height="1" width="1"/&gt;</content>
    
    

    
      <feedburner:origLink>http://franek.chicour.net/post/2011/08/05/Acc%C3%A9der-%C3%A0-un-d%C3%A9p%C3%B4t-git-%C3%A0-traver-un-proxy</feedburner:origLink></entry>
    
  <entry>
    <title>Post It : Week-end en Auvergne</title>
    <link href="http://feedproxy.google.com/~r/franek/atom/~3/is1_Xqbd-LA/Post-It-%3A-Week-end-en-Auvergne" rel="alternate" type="text/html" title="Post It : Week-end en Auvergne" />
    <id>urn:md5:94da801cb0001a237da4061399fd1709</id>
    <published>2011-05-29T11:29:00+02:00</published>
    <updated>2011-05-30T18:33:10+02:00</updated>
    <author><name>franek</name></author>
        <dc:subject>tourisme</dc:subject>
        <dc:subject>Auvergne</dc:subject><dc:subject>La Bourboule</dc:subject><dc:subject>Mont-Dore</dc:subject><dc:subject>Puy-de-Dôme</dc:subject><dc:subject>Puy-de-Sancy</dc:subject><dc:subject>Volcan</dc:subject>    
    <content type="html">    &lt;p&gt;Un petit Post It avec quelques bonnes adresses d'Auvergne (j'en connais une qui va aimer)&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;A voir&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le &lt;a href="http://fr.wikipedia.org/wiki/Puy_de_Sancy" hreflang="fr" title="Puy de Sancy sur Wikipédia"&gt;Puy de Sancy&lt;/a&gt; près du Mont Dore, le plus haut volcan du Puy de Dôme. Possibilité de monter en téléphérique et de redescendre à pied (ou l'inverse). 5,60 € l'aller. Quand il n'y a pas de brume, possibilité de voir tous les volcans alentours.&lt;/li&gt;
&lt;li&gt;Le &lt;a href="http://fr.wikipedia.org/wiki/Puy-de-D%C3%B4me" hreflang="fr" title="Puy-de-Dôme sur Wikipédia"&gt;Puy-de-Dôme&lt;/a&gt; à quelques pas de Clermont-Ferrand, l'un des sites les plus visités d'Auvergne. Actuellement en travaux, l'accès par la route ne sera plus possible. Un train est prévu pour 2012. Il est possible de monter à pied (1 heure de marche, prévoir de bonnes chaussures, le chemin est bien balisé mais la montée est rude,...). Superbe vue sur les alentours.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://fr.wikipedia.org/wiki/Ch%C3%A2teau_de_Murol" hreflang="fr" title="Le château de Murol sur Wikipédia"&gt;Le château de Murol&lt;/a&gt;, château médiéval. Ne pas louper la visite guidée, animée par la compagnie les paladins de Sancy qui nous fait revivre l'époque médiévale. On apprend plein de choses sur la justice au Moyen-âge, la fabrication des tenues militaires, ... A recommander chaudement&amp;nbsp;!&lt;/li&gt;
&lt;li&gt;&lt;a href="http://fr.wikipedia.org/wiki/Plateau_de_Gergovie" hreflang="fr" title="Plateau de Gergovie sur Wikipédia"&gt;Le plateau de Gergovie&lt;/a&gt;, bien connu pour la victoire de Vercingétorix face à Jules César. L'accès n'est pas aisé (route mal indiquée). Le petit musée vaut le détour (surtout la vidéo à la fin qui resitue le contexte historique)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://fr.wikipedia.org/wiki/R%C3%A9serve_naturelle_de_la_vall%C3%A9e_de_Chaudefour" hreflang="fr" title="Vallée de Chaudefour sur Wikipédia"&gt;Vallée de Chaudefour&lt;/a&gt;, nous l'avons juste traversée en voiture mais semblait bucolique et super jolie.&lt;/li&gt;
&lt;li&gt;Les lacs &lt;a href="http://fr.wikipedia.org/wiki/Lac_Pavin" hreflang="fr" title="Le lac Pavin sur Wikipédia"&gt;Pavin&lt;/a&gt; et &lt;a href="http://fr.wikipedia.org/wiki/Lac_Chambon" hreflang="fr" title="Lac Chambon sur Wikipédia"&gt;Chambon&lt;/a&gt;, 2 lacs d'origine volcanique. Une préférence pour le lac Pavin qui est plus petit.&lt;/li&gt;
&lt;li&gt;Sur la route
&lt;ul&gt;
&lt;li&gt;Vichy vaut le détour pour son architecture et ses restaurants (quand ils sont ouverts)&lt;/li&gt;
&lt;li&gt;Orléans, actuellement en travaux d'aménagement du Tramway, pour sa cathédrale et ses petites rues piétonnes&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pour dormir&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.hotellafleur.com/FR/" hreflang="fr" title="Hôtel La Fleur"&gt;Hôtel La Fleur&lt;/a&gt; à La Bourboule, déco un peu kitsch (tendance à fleu-fleurs) mais le personnel (des Hollandais) est très accueillant. Demander une chambre sur le jardin (de meilleure qualité selon nos informations).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.relaisdespuys.com/" hreflang="fr" title="Hôtel le relais des Puys"&gt;Hôtel "Le relais des Puys"&lt;/a&gt;, à 10 km de Clermont-Ferrand et à 10 km du Puy-de-Dôme, hôtel entièrement rénové, personnel accueillant, une très bonne adresse.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.hotel-midland.com/" hreflang="fr"&gt;Hôtel le Midland&lt;/a&gt; à Vichy, déco un peu kitsch (tendance chintz) mais bien situé.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pour manger&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Restaurant de l'hôtel "Le relais des Puys" (voir plus haut)&lt;/li&gt;
&lt;li&gt;Restaurant "Beef Club l'Arcadière" à Vichy. Excellente viande. Noix de St-Jacques parfaitement cuites. Une adresse à essayer.&lt;/li&gt;
&lt;li&gt;Restaurant "Le p'tit Crème" à La Bourboule. Meilleure Truffade de la ville. A essayer&amp;nbsp;!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;C'est tout pour le moment&amp;nbsp;!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/franek/atom/~4/is1_Xqbd-LA" height="1" width="1"/&gt;</content>
    
    

    
      <feedburner:origLink>http://franek.chicour.net/post/2011/05/29/Post-It-%3A-Week-end-en-Auvergne</feedburner:origLink></entry>
    
  <entry>
    <title>KeepAlive On et SSL avec Internet Explorer</title>
    <link href="http://feedproxy.google.com/~r/franek/atom/~3/mIdOJTswLbQ/KeepAlive-On-et-SSL-avec-Internet-Explorer" rel="alternate" type="text/html" title="KeepAlive On et SSL avec Internet Explorer" />
    <id>urn:md5:2adae68f9108195d33e6cb81f6a8d330</id>
    <published>2011-04-29T15:26:00+02:00</published>
    <updated>2011-10-23T17:00:15+02:00</updated>
    <author><name>franek</name></author>
        <dc:subject>développement web</dc:subject>
        <dc:subject>apache</dc:subject><dc:subject>keepalive</dc:subject><dc:subject>ssl</dc:subject><dc:subject>webperf</dc:subject>    
    <content type="html">    &lt;p&gt;Une des bonnes pratiques de performance web est d'activer KeepAlive sur un serveur Apache.&lt;/p&gt;


&lt;p&gt;Sur une de mes applications, le KeepAlive n'était pas activé pour IE et je ne comprenais pas pourquoi.&lt;/p&gt;


&lt;p&gt;Après investigation, cela venait de la configuration par défaut de Apache dans mon Virtual Host sur le port 443 qui contenait les directives suivantes&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
 SetEnvIf User-Agent &amp;quot;.*MSIE.*&amp;quot; \
            nokeepalive ssl-unclean-shutdown \
            downgrade-1.0 force-response-1.0
&lt;/pre&gt;


&lt;p&gt;Cette directive indique à Apache de désactiver le KeepAlive pour Internet Explorer (Toute version confondue). C'est dû à un bug de IE de gestion du protocole SSL.
Ce bug n'est présent que sur les versions de Internet Explorer inférieures ou égales à 6.&lt;/p&gt;


&lt;p&gt;Dans mon cas, on peut remplacer la directive Apache par&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
BrowserMatch &amp;quot;.*MSIE [2-5]\..*&amp;quot; \
	nokeepalive ssl-unclean-shutdown \
	downgrade-1.0 force-response-1.0
&lt;/pre&gt;


&lt;p&gt;Source&amp;nbsp;: &lt;a href="http://blogs.msdn.com/b/ieinternals/archive/2011/03/26/https-and-connection-close-is-your-apache-modssl-server-configuration-set-to-slow.aspx" hreflang="en" title="Blogs MSDN HTTPS &amp;amp; KeepAlive"&gt;http://blogs.msdn.com/b/ieinternals/archive/2011/03/26/https-and-connection-close-is-your-apache-modssl-server-configuration-set-to-slow.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/franek/atom/~4/mIdOJTswLbQ" height="1" width="1"/&gt;</content>
    
    

    
      <feedburner:origLink>http://franek.chicour.net/post/2011/04/29/KeepAlive-On-et-SSL-avec-Internet-Explorer</feedburner:origLink></entry>
    
  <entry>
    <title>Retour sur la soirée #webperf du 21 avril 2011</title>
    <link href="http://feedproxy.google.com/~r/franek/atom/~3/SdLcUNxjhtE/Retour-sur-la-soir%C3%A9e-webperf-du-21-avril-2011" rel="alternate" type="text/html" title="Retour sur la soirée #webperf du 21 avril 2011" />
    <id>urn:md5:5c57d1f8edc8616d183e482cbf993cf2</id>
    <published>2011-04-22T12:13:00+02:00</published>
    <updated>2011-10-23T17:00:15+02:00</updated>
    <author><name>franek</name></author>
        <dc:subject>développement web</dc:subject>
        <dc:subject>atelier</dc:subject><dc:subject>performance</dc:subject><dc:subject>web</dc:subject><dc:subject>webperf</dc:subject><dc:subject>webperf user group</dc:subject>    
    <content type="html">    &lt;p&gt;J'ai assisté hier, pour la seconde fois, à l'atelier webperf organisé par le &lt;a href="https://sites.google.com/a/survol.fr/webperf-user-group" hreflang="fr"&gt;Webperf User Group&lt;/a&gt; et principalement &lt;a href="http://eric.daspet.name" hreflang="fr" title="Site perso de Eric Daspet"&gt;Eric&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;L'objectif de la soirée était d'analyser quelques sites en 30 minutes par groupe de 5 à 10 personnes puis d'échanger sur les analyses effectuées et sur les solutions possibles pour améliorer la performance (navigateur, réseaux) du site.&lt;/p&gt;


&lt;p&gt;Nous avons bien sûr évoqués&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;les outils habituels&amp;nbsp;:
&lt;ul&gt;
&lt;li&gt;YSlow!&lt;/li&gt;
&lt;li&gt;Webpagetest&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;et les méthodes classiques d'optimisation&amp;nbsp;:
&lt;ul&gt;
&lt;li&gt;réduction du nombre de requêtes&lt;/li&gt;
&lt;li&gt;concaténation des fichiers JS/CSS&lt;/li&gt;
&lt;li&gt;gestion des expirations des contenus&lt;/li&gt;
&lt;li&gt;compression des contenus envoyés au navigateur (gzip &amp;amp; co)&lt;/li&gt;
&lt;li&gt;sprite des images CSS&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;L'intérêt de la soirée résidait dans les astuces proposées qui étaient directement applicables aux sites audités. J'en ai relevé quelques unes. Certaines pourraient être généralisées à vos projets&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Une bonne pratique pourrait être d'ajouter dès aujourd'hui dans le code HTML les balises &amp;lt;link rel="prefetch" afin d'indiquer au navigateur de "préfetcher" certains éléments (exemple&amp;nbsp;: requête DNS, ...). Tous les navigateurs ne supportent pas cette fonctionnalité. Quelques articles pour développer le sujet&amp;nbsp;:
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://davidwalsh.name/html5-prefetch" hreflang="fr" title="DNS Prefect"&gt;DNS Prefecth par Eric Daspet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://davidwalsh.name/html5-prefetch" hreflang="en"&gt;HTML5 Link Prefetch par David Walsh&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Le chargement des feuilles de styles d'impression (media=print) peut "ralentir" le chargement d'une page (ajout d'une requête) alors que dans la plupart des cas, elle n'est pas nécessaire dans le contexte de navigation. Une bonne pratique pourrait être&amp;nbsp;:
&lt;ul&gt;
&lt;li&gt;soit de charger les styles spécifiques via @media&lt;/li&gt;
&lt;li&gt;soit de la charger via JS (en mode asynchrone)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Suite au commentaire de Vincent Voyer, attention de ne pas charger la feuille de styles CSS print  en fin de document (&lt;q&gt;sinon, les navigateurs comme IE6 et 7 n'afficheront rien tant que tous les CSS ne seront pas téléchargés.&lt;/q&gt;)&lt;/li&gt;
&lt;li&gt;Si vous utilisez les commentaires conditionnels, il est nécessaire d'ajouter avant le HEAD un commentaire conditionnel vide. Sinon, IE bloque le téléchargement parallèle pendant le chargement de la première CSS (voir les commentaires pour les ressources permettant de valider ce problème). Voir le site de 20minutes.fr qui met en pratique cette technique&lt;/li&gt;
&lt;li&gt;Du fait, du faible nombre de téléchargement parallèle sous IE, il est préférable d'ajouter une classe IE sur le &amp;lt;body&amp;gt; (voire &amp;lt;html&amp;gt; comme le propose  Nicolas Hoizey dans les commentaires) et cibler les styles IE via cette classe plutôt que d'avoir un fichier CSS dédié (hack-ie-6.css). On dispose ainsi que d'un seul fichier CSS pour l'ensemble des navigateurs.&lt;/li&gt;
&lt;li&gt;Google Analytics propose deux modes (synchrone, asynchrone). Il est préférable d'utiliser la version asynchrone (dernière version disponible).&lt;/li&gt;
&lt;li&gt;Afin d'éviter que le cookie de Google Analytics soient positionnés sur l'ensemble des sous-domaines, il est possible de lui dire de le positionner que sur un seul domaine en particulier via _gaq.push(['_setDomainName', 'mondomaine']), je pense&lt;/li&gt;
&lt;li&gt;Pour des images inférieures à 100x150, il est souvent préférable de passer en PNG8 plutôt qu'en JPEG. La dégradation de la qualité de l'image ne sera pas perçue (ressource nécessaire pour valider ce point).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enfin, quelques outils que je ne connaissais pas&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pour les performances sur mobiles&amp;nbsp;:
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.blaze.io/" hreflang="en" title="Blaze IO"&gt;blaze.io&lt;/a&gt;&amp;nbsp;: équivalent webpagetest pour Mobile mais les résultats ne sont pas toujours très pertinents&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.5o9inc.com/" hreflang="en"&gt;5o9inc.com&lt;/a&gt; propose un APK à installer sur un téléphone Androïd afin de collecter des informations sur les performances du site mobile.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Pour l'analyse&amp;nbsp;:
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://code.google.com/intl/fr/webtoolkit/speedtracer/" hreflang="en"&gt;speedtracer&lt;/a&gt;&amp;nbsp;: pour suivre le traitement du chargement d'un site dans le navigateur (traitement du javascript, reflow, analyse CSS,...). C'est une extension pour Google Chrome ou Chromium.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Pour le chargement des fichiers JS
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://requirejs.org/" hreflang="en"&gt;requirejs&lt;/a&gt;&amp;nbsp;: équivalent à headJS, ...&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;C'est tout pour le moment.&lt;/p&gt;


&lt;p&gt;Edit&amp;nbsp;: Correction suite différents commentaires.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/franek/atom/~4/SdLcUNxjhtE" height="1" width="1"/&gt;</content>
    
    

    
      <feedburner:origLink>http://franek.chicour.net/post/2011/04/22/Retour-sur-la-soir%C3%A9e-webperf-du-21-avril-2011</feedburner:origLink></entry>
    
  <entry>
    <title>Installer xhprof et xhprof gui sur Zend Server</title>
    <link href="http://feedproxy.google.com/~r/franek/atom/~3/HTTDlfPXZFw/Installer-xhprof-et-xhprof-gui-sur-Zend-Server" rel="alternate" type="text/html" title="Installer xhprof et xhprof gui sur Zend Server" />
    <id>urn:md5:cfe13883a0bebf22c1091f301e738a02</id>
    <published>2011-04-15T11:58:00+02:00</published>
    <updated>2011-10-23T17:00:15+02:00</updated>
    <author><name>franek</name></author>
        <dc:subject>développement web</dc:subject>
        <dc:subject>php</dc:subject><dc:subject>profiling</dc:subject><dc:subject>xdebug</dc:subject><dc:subject>xhprof</dc:subject><dc:subject>Zend Server</dc:subject>    
    <content type="html">    &lt;p&gt;&lt;a href="http://mirror.facebook.net/facebook/xhprof/doc.html" hreflang="en" title="xhprof"&gt;Xhprof&lt;/a&gt; est un profiler de code PHP. C'est un concurrent de Xdebug développé par Facebook.&lt;/p&gt;


&lt;p&gt;Il a le gros avantage de permettre de visualiser l'évolution de la mémoire. A ma connaissance, Xdebug ne le permet pas.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Il ne nécessite pas l'utilisation d'un logiciel tiers (type KCachegrind, non disponible sous Windows...argh...) et peut être installé sur un serveur de production sans, normalement, trop dégrader les performances.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Je vais ici vous décrire son installation sur Zend Server CE et l'installation de &lt;em&gt;xhprof gui&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Si vous utilisez une installation de PHP moins exotique (genre une debian avec les &lt;a href="http://www.dotdeb.org/" hreflang="en" title="dotdeb"&gt;dotdeb&lt;/a&gt;), son installation sera, à mon avis, simplifiée&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
apt-get install php5-xhprof
&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;h2&gt;Installation de xhprof&lt;/h2&gt;


&lt;p&gt;On récupère les sources et on les décompresse&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
$ wget http://pecl.php.net/get/xhprof-0.9.2.tgz
$ tar xvfz xhprof-0.9.2.tgz
&lt;/pre&gt;


&lt;p&gt;On compile&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
$ cd xhprof-0.9.2/extension
$ /usr/local/zend/bin/phpize
$ ./configure --with-php-config=/usr/local/zend/bin/php-config
$ make
$ make test
$ sudo make install
&lt;/pre&gt;


&lt;p&gt;On modifie la configuration de PHP pour lui indiquer de charger cette extension&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
$ sudo vi /usr/local/zend/etc/php.ini
&lt;/pre&gt;


&lt;p&gt;On ajoute&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
[xhprof]
extension=xhprof.so
;
; directory used by default implementation of the iXHProfRuns
; interface (namely, the XHProfRuns_Default class) for storing
; XHProf runs.
;
xhprof.output_dir=/tmp/xhprof
&lt;/pre&gt;


&lt;p&gt;Il est nécessaire de créer le répertoire /tmp/xhprof et de donner les droits à l'utilisateur Apache (je fais un 777 par simplicité)&lt;/p&gt;
&lt;pre&gt;
$ mkdir -p /tmp/xhprof
$ chmod 777 /tmp/xhprof
&lt;/pre&gt;


&lt;p&gt;On redémarre Apache&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
$ sudo /etc/init.d/zend-server restart-apache
&lt;/pre&gt;


&lt;p&gt;Un phpinfo() doit normalement afficher l'extension xhprof.&lt;/p&gt;


&lt;p&gt;On va tester rapidement que cela fonctionne en essayant de profiler un script PHP. Pour profiler il est nécessaire d'ajouter quelques lignes de code dans le script PHP. Vous verrez ensuite une technique pour l'ajouter de manière automatique sur l'ensemble des scripts PHP (via xhprof gui)&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;?php
...
xhprof_enable();

/**
 * your application code
 * ......
 * ......
 */

$xhprof_data = xhprof_disable();
$xhprof_root = '/chemin/vers/le/repertoire/xhprof-0.9.2/';
include_once $xhprof_root . &amp;quot;xhprof_lib/utils/xhprof_lib.php&amp;quot;;
include_once $xhprof_root . &amp;quot;xhprof_lib/utils/xhprof_runs.php&amp;quot;;
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs-&amp;gt;save_run($xhprof_data, &amp;quot;xr&amp;quot;);
&lt;/pre&gt;


&lt;p&gt;L'exécution de ce script devrait générer un fichier dans le répertoire /tmp/xhprof. Si oui, l'installation de l'extension xhprof est ok.&lt;/p&gt;


&lt;h2&gt;Visualiser l'analyse de vos scripts&lt;/h2&gt;


&lt;p&gt;xhprof propose une interface de consultation des "profiling" effectués. Cette application (xhprof gui) est disponible dans un &lt;a href="https://github.com/preinheimer/xhprof" hreflang="en" title="xhprof gui"&gt;dépôt git&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;&lt;img src="http://franek.chicour.net/public/xhprof/.XHGuiRun_m.jpg" alt="Xhprof gui" title="Xhprof gui, avr. 2011" /&gt;&lt;/p&gt;


&lt;p&gt;Actuellement, elle possède quelques dysfonctionnements (plantage lors de l'analyse d'un script trop important) mais qui peuvent être résolus.&lt;/p&gt;


&lt;p&gt;Pour installer &lt;em&gt;xhprof gui&lt;/em&gt;, vous pouvez suivre la procédure d'installation&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
git clone https://github.com/preinheimer/xhprof.git
cd xhprof
ln -s xhprof_lib/utils/xhprof_runs_mysql.php xhprof_runs.php
mv xhprof_lib/config.sample.php xhprof_lib/config.php
&lt;/pre&gt;


&lt;p&gt;&lt;em&gt;Xhprof gui&lt;/em&gt; propose de stocker les éléments d'analyse dans une base (mysql, mssql, ...). Dans notre exemple, nous allons utiliser mysql.&lt;/p&gt;


&lt;p&gt;On crée une base pour xhprof&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
$ mysql -uroot -p
mysql &amp;gt; create database xhprof;
&lt;/pre&gt;


&lt;p&gt;&lt;em&gt;xhprof gui&lt;/em&gt; a besoin d'une table &lt;em&gt;details&lt;/em&gt; dans la base xhprof.
Par défaut, la table &lt;em&gt;details&lt;/em&gt; stocke les analyses dans un champs TEXT qui peut dans certains cas être trop petit. Un &lt;a href="https://github.com/preinheimer/xhprof/issues/11" hreflang="en" title="Bug"&gt;bug&lt;/a&gt; a été remonté. En attendant que la correction soit intégrée, je vous conseille de créer la table suivante&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
CREATE TABLE `details` (
`id` char(17) NOT NULL,
`url` varchar(255) default NULL,
`c_url` varchar(255) default NULL,
`timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`server name` varchar(64) default NULL,
`perfdata` MEDIUMBLOB,
`type` tinyint(4) default NULL,
`cookie` BLOB,
`post` BLOB,
`get` BLOB,
`pmu` int(11) default NULL,
`wt` int(11) default NULL,
`cpu` int(11) default NULL,
`server_id` char(3) NOT NULL default 't11',
PRIMARY KEY (`id`),
KEY `url` (`url`),
KEY `c_url` (`c_url`),
KEY `cpu` (`cpu`),
KEY `wt` (`wt`),
KEY `pmu` (`pmu`),
KEY `timestamp` (`timestamp`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
&lt;/pre&gt;


&lt;p&gt;Il est ensuite nécessaire de créer un Virtual Host pour accéder à &lt;em&gt;xhprof gui&lt;/em&gt;&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;VirtualHost *:80&amp;gt;
   DocumentRoot /mon/super/chemin/vers/xhprofgui/xhprof_html
   ServerName xhprof.local
   DirectoryIndex index.php
&amp;lt;/VirtualHost&amp;gt;
&lt;/pre&gt;

&lt;p&gt;N'oubliez pas de l'activer et d'ajouter dans votre fichier /etc/hosts une entrée pour ce nouveau domaine.&lt;/p&gt;


&lt;p&gt;Il est nécessaire de modifier le fichier xhprof_lib/config.php avec les paramètres qui vont bien.&lt;/p&gt;


&lt;p&gt;Voici les premières lignes du fichier config.php que j'utilise&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;?php
$_xhprof = array();

// Change these:
$_xhprof['dbhost'] = 'localhost';
$_xhprof['dbuser'] = 'root';
$_xhprof['dbpass'] = 'root';
$_xhprof['dbname'] = 'xhprof';
$_xhprof['servername'] = 'myserver';
$_xhprof['namespace'] = 'myapp';
$_xhprof['url'] = 'http://xhprof.local/';

//These are good for linux and its derivatives.
//*
$_xhprof['dot_binary']  = '/usr/bin/dot';
$_xhprof['dot_tempdir'] = '/tmp';
$_xhprof['dot_errfile'] = '/tmp/xh_dot.err';
//*/

$exceptionURLs = array();

$exceptionPostURLs = array();
$exceptionPostURLs[] = &amp;quot;login&amp;quot;;


$_xhprof['display'] = false;
$_xhprof['doprofile'] = true;

$controlIPs = array();
$controlIPs[] = &amp;quot;127.0.0.1&amp;quot;;   //Localhost, you'll want to add your own ip here
$controlIPs[] = &amp;quot;ma super ip personnelle&amp;quot;;   // Je bosse sous Windows (on ne choisit pas toujours...) mais mon serveur est dans une VM. J'indique l'IP de mon Windows.

$otherURLS = array();

$weight = 100;
&lt;/pre&gt;


&lt;p&gt;Ensuite pour tous les virtual hosts que vous souhaiteraient monitorer, vous pouvez ajouter les lignes suivantes dans la configuration du VH&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
php_admin_value auto_prepend_file &amp;quot;/mon/super/chemin/vers/xhprofgui/external/header.php&amp;quot;
php_admin_value auto_append_file &amp;quot;/mon/super/chemin/vers/xhprofgui/external/footer.php&amp;quot;
&lt;/pre&gt;


&lt;p&gt;Désormais en bas de chaque page, vous disposerez normalement d'un lien permettant d'accéder au profiling de la page courante.&lt;/p&gt;


&lt;p&gt;Dernier point, si vous souhaitez générer des graphiques de ce type &lt;img src="http://franek.chicour.net/public/xhprof/.XHGuiCallGraph_m.jpg" alt="xhprof gui callgraph" style="display:block; margin:0 auto;" title="xhprof gui callgraph, avr. 2011" /&gt;, il est nécessaire d'installer graphviz&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
$ sudo apt-get install graphviz
&lt;/pre&gt;


&lt;p&gt;J'espère que ces quelques notes vous aiderons à débuter avec xhprof.&lt;/p&gt;


&lt;p&gt;Cet article s'est largement inspiré de &lt;a href="http://css.dzone.com/news/profiling-php-application" hreflang="en" title="Profiling php application"&gt;profiling php application&lt;/a&gt;?&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/franek/atom/~4/HTTDlfPXZFw" height="1" width="1"/&gt;</content>
    
    

    
      <feedburner:origLink>http://franek.chicour.net/post/2011/04/15/Installer-xhprof-et-xhprof-gui-sur-Zend-Server</feedburner:origLink></entry>
    
  <entry>
    <title>Linux : Accès à mysql derrière un firewall (iptables)</title>
    <link href="http://feedproxy.google.com/~r/franek/atom/~3/2D0vBBlA5RQ/Linux-%3A-Acc%C3%A8s-%C3%A0-mysql-derri%C3%A8re-un-firewall-%28iptables%29" rel="alternate" type="text/html" title="Linux : Accès à mysql derrière un firewall (iptables)" />
    <id>urn:md5:47f5a8d491e935a9cdc49e7a61020a78</id>
    <published>2011-03-04T22:58:00+01:00</published>
    <updated>2011-03-04T23:04:19+01:00</updated>
    <author><name>franek</name></author>
        <dc:subject>geek</dc:subject>
        <dc:subject>iptables</dc:subject><dc:subject>mysql</dc:subject>    
    <content type="html">    &lt;p&gt;Je souhaite pouvoir accéder à une base mysql hébergée sur un serveur distant depuis un pc local.
Ce serveur distant est protégé par un firewall (iptables).&lt;/p&gt;


&lt;p&gt;Comment configurer mysql et iptables afin de pouvoir accéder à cette base mysql depuis mon poste local&amp;nbsp;?&lt;/p&gt;


&lt;p&gt;Dans la suite de ce billet,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;10.10.10.10 correspond à l'adresse IP du pc local&lt;/li&gt;
&lt;li&gt;12.12.12.12 coresspond à l'adresse IP du serveur distant&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Par défaut, sous debian, mysql n'écoute que sur l'interface locale (localhost). Il est donc nécessaire de configurer mysql afin qu'il écoute sur l'ensemble des interfaces.
Pour se faire, il est nécessaire dans le fichier /etc/my.cnf de commenter la ligne suivante&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
bind-address           = 127.0.0.1
&lt;/pre&gt;

&lt;p&gt;puis redémarrer mysql&lt;/p&gt;


&lt;p&gt;Pour vérifier que le paramétrage a bien été pris en compte, vous pouvez exécuter sur le serveur distant la commande suivante&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
# netstat -lnt | grep 3306
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN
&lt;/pre&gt;


&lt;p&gt;Si votre serveur dispose d'un firewall (iptables) bloquant les ports non utiles, il est nécessaire d'ouvrir les ports associés à mysql pour votre PC local&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
iptables -A INPUT -s 10.10.10.10 -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
&lt;/pre&gt;

&lt;p&gt;avec 10.10.10.10 correspondant à l'IP depuis laquelle vous souhaitez accéder à mysql&lt;/p&gt;


&lt;p&gt;Pour vérifier que le paramétrage est bien pris en compte, vous pouvez utiliser nmap&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
nmap -v -A 12.12.12.12 -p 3306
&lt;/pre&gt;


&lt;p&gt;Dès lors si tout s'est bien passé, vous devriez pouvoir vous connecter à mysql&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
mysql -ulogin -ppassword -h 12.12.12.12
&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/franek/atom/~4/2D0vBBlA5RQ" height="1" width="1"/&gt;</content>
    
    

    
      <feedburner:origLink>http://franek.chicour.net/post/2011/03/04/Linux-%3A-Acc%C3%A8s-%C3%A0-mysql-derri%C3%A8re-un-firewall-%28iptables%29</feedburner:origLink></entry>
    
  <entry>
    <title>APC et Zend Server</title>
    <link href="http://feedproxy.google.com/~r/franek/atom/~3/6OWXlO0X7cg/APC-et-Zend-Server" rel="alternate" type="text/html" title="APC et Zend Server" />
    <id>urn:md5:eff549781c0270d4061aef96cc2ed619</id>
    <published>2011-03-03T22:20:00+01:00</published>
    <updated>2011-10-23T17:00:15+02:00</updated>
    <author><name>franek</name></author>
        <dc:subject>développement web</dc:subject>
        <dc:subject>Apc</dc:subject><dc:subject>php</dc:subject><dc:subject>Zend</dc:subject><dc:subject>Zend Server</dc:subject>    
    <content type="html">    &lt;p&gt;Une des limitations du cache de Zend Server (ShMem ou Disk) est de ne pas proposer d'outils de monitoring des éléments mis en cache.
Apc propose cela par défaut via l'installation du script apc.php.&lt;/p&gt;


&lt;p&gt;Zend Server propose, par défaut, une &lt;a href="http://forums.zend.com/viewtopic.php?f=8&amp;amp;t=5436#p18722" hreflang="en"&gt;émulation de APC via le Zend DataCache&lt;/a&gt;. Cependant, cette émulation ne propose pas toute l'API de APC. Le script apc.php ne fonctionne donc pas.
Je n'ai pas trop cherché mais, a priori, cela vient du non support complet des méthodes suivantes apc_compile_file(), apc_sma_info(), apc_cache_info() (voir &lt;a href="http://forum.phpfrance.com/php-avance/probleme-zend-server-apc-apc-cache-info-t255768.html" hreflang="fr"&gt;forum chez phpfrance&lt;/a&gt;).&lt;/p&gt;


&lt;p&gt;Je viens de découvrir que Zend mettait à disposition un paquet Apc.&lt;/p&gt;


&lt;p&gt;Pour l'installer sur une debian/ubuntu, il suffit de&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
# php-5.2
sudo apt-get install php-5.2-apc-zend-server
# php-5.3
sudo apt-get install php-5.3-apc-zend-server
&lt;/pre&gt;

&lt;p&gt;puis redémarrer Apache (vérifier au préalable que le fichier /usr/local/zend/etc/conf.d/apc.ini est bien présent)&lt;/p&gt;


&lt;p&gt;Il est donc ensuite possible de charger l'extension apc.so dans son php.ini.
A nous les joies de l'utilisation de apc.php avec Zend Server.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/franek/atom/~4/6OWXlO0X7cg" height="1" width="1"/&gt;</content>
    
    

    
      <feedburner:origLink>http://franek.chicour.net/post/2011/03/03/APC-et-Zend-Server</feedburner:origLink></entry>
    
  <entry>
    <title>Week-end à Londres</title>
    <link href="http://feedproxy.google.com/~r/franek/atom/~3/NPStlehYDrs/Week-end-%C3%A0-Londres" rel="alternate" type="text/html" title="Week-end à Londres" />
    <id>urn:md5:f89786ee3dcc87f5bbdf940fd71d734a</id>
    <published>2011-02-03T19:45:00+01:00</published>
    <updated>2011-02-05T14:32:39+01:00</updated>
    <author><name>franek</name></author>
        <dc:subject>tourisme</dc:subject>
        <dc:subject>brick lane</dc:subject><dc:subject>Londres</dc:subject><dc:subject>musée</dc:subject>    
    <content type="html">    &lt;p&gt;Suite à mon&lt;a href="http://franek.chicour.net/post/2010/12/31/Se-rendre-en-Su%C3%A8de-en-train"&gt; périple vers la Suède en plein hiver&lt;/a&gt;, je voulais faire des articles sur la Suède mais je suis tombé dans une spirale infernale,...&lt;/p&gt;


&lt;p&gt;Finalement, je vais faire un petit mémo sur les bonnes adresses de Londres y ayant passé le week-end dernier.&lt;/p&gt;


&lt;p&gt;En hiver, à Londres, il fait froid mais on peut quand-même attraper un coup de soleil. C'est Gre qui pourra vous le dire.&lt;/p&gt;


&lt;p&gt;J'aime bien Londres. Je trouve qu'on y respire mieux qu'à Paris&amp;nbsp;: les rues sont plus larges, les immeubles moins hauts, les parcs sont grands, ...
J'ai juste un problème avec le métro que je ne trouve pas super adapté (couloirs étroits, faible hauteur des rames, ...) mais en 1863 (début des travaux), ils ne pouvaient pas savoir que les générations futures seraient plus grandes.&lt;/p&gt;


&lt;p&gt;J'ai testé &lt;a href="http://fr.wikipedia.org/wiki/London_Eye" hreflang="fr"&gt;The London Eye&lt;/a&gt; (ou "Millenium Wheel"). C'est une grande (énorme) roue face à Big Ben. Chaque nacelle peut accueillir environ une vingtaine de personnes.
Du haut, on a une très belle vue sur Londres. Le temps d'attente est relativement raisonnable. Le rapport intérêt-prix est assez mauvais, je trouve, mais je ne regrette pas de l'avoir fait.
Il est possible de combiner son billet avec le &lt;a href="http://fr.wikipedia.org/wiki/Madame_Tussauds" hreflang="fr"&gt;musée de Madame Tussaud&lt;/a&gt; qui bien que mieux que le musée Grévin (Paris), n'est, à mes yeux, pas à recommander.&lt;/p&gt;


&lt;p&gt;Un musée qui, par ailleurs, vaut le détour est le &lt;a href="http://fr.wikipedia.org/wiki/Mus%C3%A9e_d%27histoire_naturelle_de_Londres" hreflang="fr"&gt;musée d'histoire naturelle&lt;/a&gt;. On y trouve, notamment, de nombreux squelettes de Dinosaures,... Il faut vraiment que j'aille visiter le musée d'Histoire Naturelle de Paris.&lt;/p&gt;


&lt;p&gt;Nous passerons sur le &lt;a href="http://fr.wikipedia.org/wiki/British_Museum" hreflang="fr"&gt;British Muséum&lt;/a&gt; dont la richesse de la collection n'est plus à démontrer.&lt;/p&gt;


&lt;p&gt;Au niveau Pub et restaurant, quelques bonnes adresses dans le quartier de Nothing Hill&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.thewindsorcastlekensington.co.uk/" hreflang="en"&gt;The Windsor Castle&lt;/a&gt;&amp;nbsp;: les portes intérieures sont trop petites même pour une personne mesurant moins de 1m60, ambiance très conviviale&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.viewlondon.co.uk/pubsandbars/the-churchill-arms-info-1184.html" hreflang="en"&gt;Churchill Arms&lt;/a&gt;&amp;nbsp;: Un pub et un restaurant Thaïlandais très prisé. On a voulu y manger mais il y avait plus d'une heure d'attente. L'ambiance avait l'air très londonienne ;-)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.blackandbluerestaurants.com/restaurant/Notting-Hill-Gate/5" hreflang="en"&gt;Black &amp;amp; Blue&lt;/a&gt;&amp;nbsp;: on y mange bien&amp;nbsp;!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dans le quartier Brick Lane (quartier des restaurants Indien), nous avons testé&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.aladinbricklane.co.uk/" hreflang="en"&gt;restaurant Aladin&lt;/a&gt;&amp;nbsp;: une carte assez importante et dont les plats sont bons (sauf les nans au fromage)&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/franek/atom/~4/NPStlehYDrs" height="1" width="1"/&gt;</content>
    
    

    
      <feedburner:origLink>http://franek.chicour.net/post/2011/02/03/Week-end-%C3%A0-Londres</feedburner:origLink></entry>
    
  <entry>
    <title>Se rendre en Suède en train</title>
    <link href="http://feedproxy.google.com/~r/franek/atom/~3/zrUR_sCGxKQ/Se-rendre-en-Su%C3%A8de-en-train" rel="alternate" type="text/html" title="Se rendre en Suède en train" />
    <id>urn:md5:861439b785372b89a4810b2788297050</id>
    <published>2010-12-31T17:32:00+01:00</published>
    <updated>2010-12-31T18:05:20+01:00</updated>
    <author><name>franek</name></author>
        <dc:subject>tourisme</dc:subject>
        <dc:subject>aventure</dc:subject><dc:subject>interrail</dc:subject><dc:subject>Suède</dc:subject><dc:subject>train</dc:subject><dc:subject>trajet</dc:subject>    
    <content type="html">    &lt;p&gt;Le trajet idéal pour se rendre à Lidköping en Suède est le suivant&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Paris -&amp;gt; Cologne&lt;/li&gt;
&lt;li&gt;Cologne -&amp;gt; Copenhague (en train de nuit)&lt;/li&gt;
&lt;li&gt;Copenhague -&amp;gt; Göteborg&lt;/li&gt;
&lt;li&gt;Gôteborg -&amp;gt; Lidköping&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;pour un total d'environ 24h.&lt;/p&gt;


&lt;p&gt;Avec des problèmes météorologiques, une réservation tardive ou des problèmes ferroviaires, le trajet peut également &lt;a href="http://tinyurl.com/trajet-suede" hreflang="fr"&gt;être&lt;/a&gt; (lien vers google maps)&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Paris -&amp;gt; Bruxelles&lt;/li&gt;
&lt;li&gt;Bruxelles -&amp;gt; Aachen (On change de train car la motrice du train allemand ne fonctionne pas)&lt;/li&gt;
&lt;li&gt;Aachen -&amp;gt; Cologne (En raison de la neige, le train de nuit est détourné sur Dortmund car il ne peut pas venir jusque Cologne)&lt;/li&gt;
&lt;li&gt;Cologne -&amp;gt; Dortmund&lt;/li&gt;
&lt;li&gt;Dortmund -&amp;gt; Copenhague&lt;/li&gt;
&lt;li&gt;Copenhague -&amp;gt; Malmö&lt;/li&gt;
&lt;li&gt;Malmö -&amp;gt; Göteborg&lt;/li&gt;
&lt;li&gt;Gôteborg -&amp;gt; Herrljunga&lt;/li&gt;
&lt;li&gt;Herrljunga -&amp;gt; Lidköping (en voiture, car il y a peu de correspondance vers Lidköping depuis Göteborg)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;pour un total de 28h&lt;/p&gt;


&lt;p&gt;Depuis Orebro (Suède), le trajet idéal pour se rendre à Paris est le suivant&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Orebro -&amp;gt; Mjölby&lt;/li&gt;
&lt;li&gt;Mjölby -&amp;gt; Copenhague&lt;/li&gt;
&lt;li&gt;Copenhague -&amp;gt; Hambourg&lt;/li&gt;
&lt;li&gt;Hambourg -&amp;gt; Paris (pas train de nuit)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;pour un total d'environ 24h&lt;/p&gt;


&lt;p&gt;Par temps de neige, avec les retards des trains suèdois, danois, allemand et françois, et autour de noël, le trajet le plus probable est le &lt;a href="http://maps.google.fr/maps?f=d&amp;amp;source=s_d&amp;amp;saddr=Danshyttan,+Lindesberg,+Sverige&amp;amp;daddr=orebro,+Su%C3%A8de+to:Mj%C3%B6lby,+Su%C3%A8de+to:Copenhague,+Danemark+to:Hambourg,+Allemagne+to:Francfort+to:Karlsruhe,+Allemagne+to:paris&amp;amp;hl=fr&amp;amp;geocode=FaGpjwMdtaDlACl7A_ZJs1JcRjE3mHnWuznjnw%3BFRtyiAMddAzoACk5_0oUfwFcRjE-yRjQurDjzw%3BFaoBegMd3srmACltRc0WQmJZRjGYAPZLMDwdNw%3BFVvQUQMdhgDAACkjPYBcPFNSRjG4Z5Tm3X7dBA%3BFZcqMQMdl3WYACm5Exh-g2GxRzGgOtZ78j0mBA%3BFRik_AIdOnSEACnFlnBHbwm9RzEAxrApUEMiBA%3BFdXN6wIdLDuAACkJeOCiSAaXRzF_7rdMc1X8tg%3BFVt-6QIdi98jACkPt-IGH27mRzFglIxow4ILBA&amp;amp;mra=ls&amp;amp;sll=59.735638,15.082855&amp;amp;sspn=0.072327,0.338173&amp;amp;ie=UTF8&amp;amp;ll=55.776573,12.392578&amp;amp;spn=10.347288,43.286133&amp;amp;z=5" hreflang="fr"&gt;suivant&lt;/a&gt; (lien vers Google Maps)&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Orebro -&amp;gt; Mjolby&lt;/li&gt;
&lt;li&gt;Mjolby -&amp;gt; Copenhague&lt;/li&gt;
&lt;li&gt;nuit à Copenhague (payé par les chemins de fer suèdois en raison des retards)&lt;/li&gt;
&lt;li&gt;Copenhague -&amp;gt; Hambourg (avec un trajet en bâteau entre le Danemark et l'Allemagne)&lt;/li&gt;
&lt;li&gt;Hambourg -&amp;gt; Francfort (à ce stade, vous loupez votre correspondance et les autres trains pour Paris sont annulés, on vous propose un trajet alternatif)&lt;/li&gt;
&lt;li&gt;Francfort -&amp;gt; Karsleruhe&lt;/li&gt;
&lt;li&gt;Karsleruhe -&amp;gt; Paris en TGV (mais du fait de la neige, le TGV ne peut pas rouler à pleine vitesse et arrive en gare de Paris avec un retard de 3h)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;pour un total d'environ 40h&lt;/p&gt;


&lt;p&gt;Pour réserver vos billets de train, vous aurez utilisé le site de la &lt;a href="http://www.bahn.de/i/view/FRA/fr/index.shtml" hreflang="fr"&gt;Deutsche Bahne&lt;/a&gt; qui est bien plus riche fonctionnellement que le site de la SNCF (qui doit pourtant nous faire préférer le train).
Je recommande l'acquisition d'un pass &lt;a href="http://francais.interrailnet.com/enfr/interrail-passes" hreflang="fr"&gt;Interrail&lt;/a&gt; qui permet de ne payer que les réservations dans les pays étrangers.&lt;/p&gt;


&lt;p&gt;Toute ressemblance avec des personnes ou des situations existantes ou ayant existé ne saurait être que fortuite.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/franek/atom/~4/zrUR_sCGxKQ" height="1" width="1"/&gt;</content>
    
    

    
      <feedburner:origLink>http://franek.chicour.net/post/2010/12/31/Se-rendre-en-Su%C3%A8de-en-train</feedburner:origLink></entry>
    
  <entry>
    <title>Retour sur Paris Web 2010</title>
    <link href="http://feedproxy.google.com/~r/franek/atom/~3/MCqkrgnSNPA/Retour-sur-Paris-Web-2010" rel="alternate" type="text/html" title="Retour sur Paris Web 2010" />
    <id>urn:md5:0ba53c3c50b448963e54d88165b749e4</id>
    <published>2010-10-24T13:45:00+02:00</published>
    <updated>2011-10-23T17:00:15+02:00</updated>
    <author><name>franek</name></author>
        <dc:subject>développement web</dc:subject>
        <dc:subject>accessibilité</dc:subject><dc:subject>design</dc:subject><dc:subject>paris web</dc:subject>    
    <content type="html">    &lt;p&gt;Je ne suis pas très bavard ces temps-ci, sûrement un problème de météo.&lt;/p&gt;


&lt;p&gt;Comme depuis 5 ans, j'ai assisté à &lt;a href="http://www.paris-web.fr/2010" hreflang="fr"&gt;Paris Web (édition 2010)&lt;/a&gt; et c'était bien&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;Je suis sensible depuis de nombreuses années à l'accessibilité, au web-design, à la qualité,.. mais je me sens plus proche d'un développeur back que d'un développeur front ou d'un web designer.&lt;/p&gt;


&lt;p&gt;Au quotidien, au niveau technique, je suis un mouton à 5 pattes capable de faire du CSS, du HTML, du JS mais bien plus à l'aise dans du développement back (PHP) ou l'administration de serveurs web. Je ne suis pas expert en développement front mais je sais repérer un bon développeur front (qui aura pris en compte les problématiques d'accessibilité et de performance) d'un mauvais.
Je suis souvent épaté par les personnes capables d'imaginer un design et parfois même envieux.&lt;/p&gt;


&lt;p&gt;Tout cela pour dire que cette année, j'ai senti un virage dans le contenu du Paris Web. Il y avait plus de sujets liés au design. Ce n'était pas pour me déplaire, n'y connaissant pas grand chose.&lt;/p&gt;


&lt;p&gt;J'ai été déçu par&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la &lt;a href="http://www.paris-web.fr/2010/programme/la-conception-universelle-est-ce-toujours-possible.php" hreflang="fr"&gt;conférence de Matt May sur "La conception universelle, est-ce toujours possible ?"&lt;/a&gt;&amp;nbsp;: je pense que Matt May, évangéliste accessibilité chez Adobe, avait un message intéressant à faire passer mais il aurait dû faire sa conférence en anglais (bien que son niveau en français soit exceptionnel), son discours en aurait été plus percutant.&lt;/li&gt;
&lt;li&gt;les mini-conférences &lt;a href="http://www.paris-web.fr/2010/programme/etude-de-cas-sur-la-mise-en-accessibilite-dun-site-web.php" hreflang="fr"&gt;"Étude de cas sur la mise en accessibilité d’un site Web" par Denis Boudreau&lt;/a&gt; et &lt;a href="http://www.paris-web.fr/2010/programme/un-player-video-accessible-si-cest-possible.php" hreflang="fr"&gt;"Un player vidéo accessible, si c’est possible&amp;nbsp;! par Vincent Aniort et David Molina"&lt;/a&gt;&amp;nbsp;: Je suis assez fan des conférences de Denis Boudreau. Je le trouve pédagogue et partage sa passion pour son domaine d'expertise ("Si Denis Boudreau ne peut pas se dire expert Accessibilité, qui peut le dire ?") mais le format pour ce type de sujet était trop court. L'autre conférence sur la mise en place d'un player vidéo accessible aurait mérité d'être plus condensé et d'aller directement à l'essentiel (le contexte du projet au sein d'Orange ne nous intéressait pas vraiment).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;J'ai aimé&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.paris-web.fr/2010/programme/le-web-vu-dun-client-grand-compte.php" hreflang="fr"&gt;Le web vu d’un client grand compte par Pascal Aubin&lt;/a&gt;&amp;nbsp;: le petit amphi n'était pas plein pour cette conférence mais Pascal Aubin a su nous expliquer pourquoi la prise en compte du Web dans un grand groupe était difficile. Les habitudes, les méthodes de gestion de projet héritées de la construction ont la vie dure et il est difficile pour ces groupes de faire un virage vers les nouvelles technologies et de modifier leurs process.&lt;/li&gt;
&lt;li&gt;une équipe accessible et passionnée (un grand MERCI au staff !)&lt;/li&gt;
&lt;li&gt;le buffet chez IBM malgré le monde&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;J'ai adoré&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.paris-web.fr/2010/programme/lets-interface.php" hreflang="fr"&gt;Let’s interface - how to make people as excited about tech as we are par Christian Heilmann&lt;/a&gt;&amp;nbsp;: Avec Christian, on comprend ce que signifie le terme "évangéliste"&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.paris-web.fr/2010/programme/le-web-un-metier-de-valeur.php" hreflang="fr"&gt;Le web, un métier de valeur par Éric Daspet&lt;/a&gt;&amp;nbsp;: Débat intéressant&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.paris-web.fr/2010/programme/methodologie-du-design-dexperience-utilisateur.php" hreflang="fr"&gt;Méthodologie du Design d’expérience utilisateur par Matthieu Mingasson&lt;/a&gt;&amp;nbsp;: Une excellente conférence, efficace,... Ouah... BRAVO&amp;nbsp;!&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.paris-web.fr/2010/programme/macrotypographie-page-web.php" hreflang="fr"&gt;La macrotypographie de la page Web par Anne-Sophie Fradier&lt;/a&gt;&amp;nbsp;: Que dire de plus que tout ce qui a déjà été dit. C'était "frais", pédagogue, intéressant, efficace,... On en redemande !!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Que dire de plus&amp;nbsp;?
Les ateliers du samedi étaient à nouveau excellents. J'ai simplement été déçu par &lt;a href="http://www.paris-web.fr/2010/programme/industrialiser-lartisanat-de-lintegration-html.php" hreflang="fr"&gt;la conférence de Thomas Parisot&lt;/a&gt;. Je m'attendais à quelque chose de plus concrets sur les outils qu'il utilise au quotidien. Au final, le format de la conférence était un lieu d'échange dont l'objectif était d'initier la construction d'un livre blanc. Thomas en a fait un &lt;a href="http://www.mindmeister.com/maps/show/65925228" hreflang="en"&gt;graphe de Mind Mapping&lt;/a&gt;. La &lt;a href="http://www.paris-web.fr/2010/programme/comment-utiliser-css-3-aujourdhui.php" hreflang="fr"&gt;conférence de Jérémie Patonnier&lt;/a&gt; était excellente et aurait presque pu durer la matinée, tellement il y avait de choses à dire.&lt;/p&gt;


&lt;p&gt;J'attends pour l'année prochaine&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;d'avoir le don d'ubiquité. Oui, il y a des conférences ou des ateliers auxquels j'aurais aimé assister (conférence de Paul Rouget, atelier de Sébastien Billard, atelier de Jean-Pierre Vincent,...)&lt;/li&gt;
&lt;li&gt;des conférences sur le back ou à la croisée des chemins (Comment bien discuter avec un développeur back&amp;nbsp;? Quelles sont les points à prendre en compte dans le développement back pour un front efficace ?)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Il y aurait bien d'autres choses à dire sur cette édition 2010 mais le temps me manque.&lt;/p&gt;


&lt;p&gt;A l'année prochaine&amp;nbsp;!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/franek/atom/~4/MCqkrgnSNPA" height="1" width="1"/&gt;</content>
    
    

    
      <feedburner:origLink>http://franek.chicour.net/post/2010/10/24/Retour-sur-Paris-Web-2010</feedburner:origLink></entry>
    
  <entry>
    <title>Sauvegarder automatiquement vos contacts google</title>
    <link href="http://feedproxy.google.com/~r/franek/atom/~3/4H0mSt2_3JY/Sauvegarder-vos-contacts-google" rel="alternate" type="text/html" title="Sauvegarder automatiquement vos contacts google" />
    <id>urn:md5:f3a84596b0fbb5ba28bec397daeefced</id>
    <published>2010-09-26T14:30:00+02:00</published>
    <updated>2011-02-05T21:33:54+01:00</updated>
    <author><name>franek</name></author>
        <dc:subject>geek</dc:subject>
        <dc:subject>backup</dc:subject><dc:subject>contacts</dc:subject><dc:subject>google</dc:subject>    
    <content type="html">    &lt;p&gt;A la lecture de cette article &lt;a href="http://blog.touret.info/blog/index.php/post/2010/09/16/Gcontacts-backup-%3A-une-sauvegarde-automatique-des-contacts-google" hreflang="fr"&gt;Gcontacts-backup&amp;nbsp;: une sauvegarde automatique des contacts google&lt;/a&gt;, je me suis également mis dans l'idée de mettre en place un système de sauvegarde automatique de mes contacts présents chez Google.&lt;/p&gt;


&lt;p&gt;J'ai, par ailleurs, opté pour l'utilisation de &lt;a href="http://code.google.com/p/googlecl/" hreflang="en"&gt;Googlecl&lt;/a&gt;. Googlecl est un projet qui vise à permettre d'interroger les services de Google via la ligne de commande.&lt;/p&gt;


&lt;p&gt;Exemple&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
$ google contacts list name,email &amp;gt; contacts.csv
&lt;/pre&gt;

&lt;p&gt;doit permettre de récupérer les noms et emails de l'ensemble des contacts présents chez Google.&lt;/p&gt;


&lt;h2&gt;Installation de Googlecl&lt;/h2&gt;


&lt;p&gt;Sous ubuntu, télécharger le .deb et exécuter&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
sudo dpkg -i googlecl_0.9.12-1_all.deb
&lt;/pre&gt;


&lt;p&gt;Vous pouvez ensuite exécuter&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
$ google contacts list name,email &amp;gt; contacts.csv
&lt;/pre&gt;


&lt;p&gt;La première fois, on va vous demander d'autoriser googlecl à accéder aux données de google (authentification oauth)&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
$ google contacts list name,email &amp;gt; contacts.csv
Please specify user: user@gmail.com
Please log in and/or grant access via your browser at https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token=4%2ffsdf78AMsfsdfsdfsdfsdf=gmail.com then hit enter.
&lt;/pre&gt;


&lt;p&gt;Dans mon exemple, je sauvegarde uniquement le nom (name) et email (email) mais il possible de sauvegarder tous les éléments.
Par contre, je n'ai pas trouvé de liste listant tous les éléments disponibles. Un &lt;a href="http://code.google.com/p/googlecl/issues/detail?id=89" hreflang="en"&gt;ticket&lt;/a&gt; est ouvert concernant cette demande.&lt;/p&gt;


&lt;p&gt;On crée un script qui va s'occuper de faire la sauvegarde&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
#!/bin/bash
date=`date +%Y%m%d`
google contacts list --fields=name,email,phone,address,im,company,notes --delimiter &amp;quot;: &amp;quot; --title &amp;quot;^.*$&amp;quot; &amp;gt; /home/franek/backups/google-contacts.$date.csv
&lt;/pre&gt;


&lt;p&gt;Le script pourrait être amélioré (conserver X versions,...).&lt;/p&gt;


&lt;p&gt;Ne reste plus qu'à ajouter le lancement de ce script dans un crontab et vos contacts Google seront sauvegardés automatiquement sur votre ordinateur.&lt;/p&gt;
&lt;pre&gt;
00 20 * * *	/chemin/vers/backup-google-contacts.sh
&lt;/pre&gt;


&lt;p&gt;Google is evil&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;EDIT&amp;nbsp;: Ce billet a été mis à jour le 05 février (utilisation de la version 0.9.12-1 et prise en compte des remarques de Pierre)&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/franek/atom/~4/4H0mSt2_3JY" height="1" width="1"/&gt;</content>
    
    

    
      <feedburner:origLink>http://franek.chicour.net/post/2010/09/26/Sauvegarder-vos-contacts-google</feedburner:origLink></entry>
    
  <entry>
    <title>Les vacances en forme de marathon</title>
    <link href="http://feedproxy.google.com/~r/franek/atom/~3/hq55koYHgCI/Les-vacances-en-forme-de-marathon" rel="alternate" type="text/html" title="Les vacances en forme de marathon" />
    <id>urn:md5:efcc62e6c6d658851088da9c459c2ae1</id>
    <published>2010-09-26T13:12:00+02:00</published>
    <updated>2010-09-26T12:24:45+02:00</updated>
    <author><name>franek</name></author>
        <dc:subject>tourisme</dc:subject>
        <dc:subject>Bayonne</dc:subject><dc:subject>Bordeaux</dc:subject><dc:subject>Cap Ferret</dc:subject><dc:subject>dune du Pilat</dc:subject><dc:subject>marathon</dc:subject><dc:subject>Médoc</dc:subject><dc:subject>Saint-Emilion</dc:subject>    
    <content type="html">    &lt;p&gt;Je suis rentré depuis déjà quelques jours de vacances qui ont ressemblés à un marathon.&lt;/p&gt;


&lt;p&gt;A mon habitude, une liste de choses/adresses qui m'ont marqués ou qui méritent le déplacement&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.marathondumedoc.com/" hreflang="fr"&gt;le marathon du Médoc&lt;/a&gt;&amp;nbsp;: nous y étions en supporter d'une fine équipe. Le marathon du Médoc a pour particularités d'être déguisé ("Non déguisé s'abstenir") et de proposer des ravitaillements avec des spécialités de la région (vin, huitres, ...). L'ambiance était festive. Le parcours du marathon traverse les châteaux de grands crus (Mouton-Rotschild, Saint-Estèphe,...). Le dimanche, il est possible de participer à une marche de récupération, 8 km à travers vignes avec dégustation. Excellente ambiance. Ca donne presque envie de se mettre à courir ;-)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://fr.wikipedia.org/wiki/Dune_du_Pyla" hreflang="fr"&gt;La dune du Pilat&lt;/a&gt; (ou dune du Pyla, les deux orthographes semblent autorisés)&amp;nbsp;: la montée n'est pas des plus faciles mais la vue sur le bassin d'Arcachon d'un côté et les Landes de l'autre est vraiment magique. Hors saison, il n'y avait pas trop de monde. C'est vraiment un lieu qui mérite le déplacement.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://fr.wikipedia.org/wiki/Saint-Emilion" hreflang="fr"&gt;Saint-Emilion&lt;/a&gt;&amp;nbsp;: Le village de Saint-Emilion est un mignon petit village perché en haut d'une colline. Le centre-ville se parcourt facilement à pied sur des rues pavés. La ville est bien-entendu entourée de vignobles. On y mange très bien (&lt;a href="http://www.restaurant-st-emilion.fr/" hreflang="fr"&gt;restaurant "Le Bouchon"&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://fr.wikipedia.org/wiki/Bordeaux" hreflang="fr"&gt;Bordeaux&lt;/a&gt;&amp;nbsp;: Je n'avais pas encore eu la chance de faire le déplacement dans cette ville. Le centre ville est vraiment très agréable et a vraiment été bien rénové (attention, aux tramways). Les rives de la Garonne sont vraiment agréables. Cette ville aurait mérité qu'on y passe un peu plus de temps.&lt;/li&gt;
&lt;li&gt;Le &lt;a href="http://fr.wikipedia.org/wiki/Cap_Ferret" hreflang="fr"&gt;Cap Ferret&lt;/a&gt; est situé en face de la dune du Pyla (à une extrémité de la baie d'Arcachon). Il permet d'avoir un autre point de vue sur la baie d'Arcachon. Il est possible de déguster de succulentes huitres dans le port de pêche.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://fr.wikipedia.org/wiki/Bayonne" hreflang="fr"&gt;La ville de Bayonne&lt;/a&gt;, réputée pour ses fêtes de Bayonne, est également une joie ville avec un réseau de rues piétonnes, ville vraiment agréable.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://fr.wikipedia.org/wiki/Ville_d%27Hiver" hreflang="fr"&gt;La ville d'hiver d'Arcachon&lt;/a&gt;, le quartier chic d'Arcachon avec un ensemble de demeures pittoresques et de vilas qui s'inspirent des styles néoclassique, néo-gothique, du chalet suisse, de la maison coloniale ou de l'architecture "mauresque", comme on disait à l'époque. Dans Arcachon, je vous recommanderais bien le &lt;a href="http://www.moncarnetderoute.com/restaurant/chez-yvette" hreflang="fr"&gt;restaurant "Chez Yvette"&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Je pourrais encore vous parler de Lacanau, Carcans ou Ychoux mais j'arrête là.&lt;/p&gt;


&lt;p&gt;Les photos&amp;nbsp;? Elles sont quelques part entre ma chaise et le serveur web hébergeant ce (pseudo-)blog...&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/franek/atom/~4/hq55koYHgCI" height="1" width="1"/&gt;</content>
    
    

    
      <feedburner:origLink>http://franek.chicour.net/post/2010/09/26/Les-vacances-en-forme-de-marathon</feedburner:origLink></entry>
  
</feed>

