<?xml version="1.0" encoding="UTF-8"?>
<feed
  xmlns="http://www.w3.org/2005/Atom"
  xmlns:thr="http://purl.org/syndication/thread/1.0"
  xml:lang="en"
   >
  <title type="text">Le site web, le blog et les projets de Stéphane Klein</title>
  <subtitle type="text">Your Blog's short description</subtitle>

  <updated>2012-05-05T09:19:29Z</updated>
  <generator uri="http://blogofile.com/">Blogofile</generator>

  <link rel="alternate" type="text/html" href="http://stephane-klein.info/" />
  <id>http://stephane-klein.info//feed/atom/</id>
  <link rel="self" type="application/atom+xml" href="http://stephane-klein.info//feed/atom/" />
  <entry>
    <author>
      <name></name>
      <uri>http://stephane-klein.info/</uri>
    </author>
    <title type="html"><![CDATA[Réflexions à propos de NodeJS et de Javascript plus globalement]]></title>
    <link rel="alternate" type="text/html" href="http://stephane-klein.info/blog/2012/04/18/réflexions-à-propos-de-nodejs-et-de-javascript-plus-globalement" />
    <id>http://stephane-klein.info/blog/2012/04/18/réflexions-à-propos-de-nodejs-et-de-javascript-plus-globalement</id>
    <updated>2012-04-18T13:04:00Z</updated>
    <published>2012-04-18T13:04:00Z</published>
    <category scheme="http://stephane-klein.info/" term="Informatique" />
    <category scheme="http://stephane-klein.info/" term="Opinions" />
    <category scheme="http://stephane-klein.info/" term="Python" />
    <category scheme="http://stephane-klein.info/" term="Javascript" />
    <category scheme="http://stephane-klein.info/" term="Réflexions" />
    <category scheme="http://stephane-klein.info/" term="Web-dev" />
    <category scheme="http://stephane-klein.info/" term="Node.js" />
    <category scheme="http://stephane-klein.info/" term="Développement" />
    <category scheme="http://stephane-klein.info/" term="Comparaison" />
    <summary type="html"><![CDATA[Réflexions à propos de NodeJS et de Javascript plus globalement]]></summary>
    <content type="html" xml:base="http://stephane-klein.info/blog/2012/04/18/réflexions-à-propos-de-nodejs-et-de-javascript-plus-globalement"><![CDATA[<div class="document">
<p>Cela fait quelques jours que je me pose la question suivante : « Est-ce que Node.js ne va
pas devenir une technologie incontournable / majeur dans les 2 ans qui viennent ? »</p>
<div class="section" id="le-contexte">
<h3>Le contexte</h3>
<div class="line-block">
<div class="line">Je suis un développeur Python depuis de nombreuses années. J'aime ses librairies, j'aime ses outils,
j'aime sa communauté.</div>
<div class="line">J'aime tellement sa syntaxe que quand je vois la syntaxe d'autres langages, j'ai une réaction
quelque peu épidermique à la lecture du code.</div>
<div class="line">Avec le temps, l'habitude de la syntaxe Python minimaliste proche d'un pseudo code rend difficile
la possibilité d'apprécier un autre langage. Je ne sais pas si c'est positif ou négatif,
je me pose simplement la question. Enfin ceci est un autre sujet.</div>
</div>
<p>Cependant, mon regard se tourne de plus en plus vers <a class="reference external" href="http://nodejs.org/">Node.js</a>... je n'ai pas
franchi le pas, je n'ai rien développé en Node.js… mais je me demande si je ne passe pas à
coté de quelque chose d'important.</p>
</div>
<div class="section" id="les-forces-de-node-js">
<h3>Les forces de Node.js</h3>
<ul>
<li><p class="first">Bien que Node.js date seulement de 2009 :</p>
<ul class="simple">
<li>il a déjà un bon système de package : <a class="reference external" href="http://npmjs.org/">Node Package Manager</a> que la grande
majorité de la communauté semble utiliser</li>
<li>il a déjà une très forte communauté, de très nombreuses librairies,
exemple : <a class="reference external" href="https://github.com/joyent/node/wiki/modules">plein de librairie classées</a>,
déjà plus de 9000 packages sur <a class="reference external" href="http://search.npmjs.org/">npm</a></li>
<li><a class="reference external" href="https://github.com/joyent/node/wiki/Projects,-Applications,-and-Companies-Using-Node">de plus en plus de sociétés semblent l'utiliser</a></li>
</ul>
</li>
<li><p class="first">tous les développeurs web (front-end) connaissent le langage, il est très populaire.
Par conséquent, pour passer à Node.js il n'y a pas le frein d'apprendre un nouveau langage comme ça
serait le cas avec l'utilisation d'un framework web basé sur Ruby ou Python. Je pense que dans
les mois qui viennent, de nombreux développeurs PHP vont passer à Node.js… surtout ceux qui
regardaient ailleurs mais qui ne souhaitent pas apprendre un nouveau langage.</p>
</li>
<li><div class="first line-block">
<div class="line">la possibilité de partager du code (librairies communes…) entre la partie client et serveur peut
être intéressant. La question se pose de plus en plus étant donnée qu'on est de plus en plus amené
à effectuer beaucoup de traitement coté client (exemple avec <a class="reference external" href="http://documentcloud.github.com/backbone/">Backbone.js</a>).</div>
<div class="line">Dernièrement, dans tous mes projets de développement web, j'ai utilisé un moteur de template
coté client en plus du moteur de template coté serveur.</div>
<div class="line">Je dois gérer de plus en plus souvent une couche modèle coté client. Des vues coté client…
Cela fait donc plein d'éléments en doubles, utilisés
une fois sur le serveur, une fois sur le client. Donc deux technologies à maîtriser.</div>
<div class="line">Ces derniers jours, la visualisation du screencast du framework javascript <a class="reference external" href="http://meteor.com/">Meteor</a>
m'a mis la puce à l'oreille.</div>
<div class="line">Autre exemple, il est possible d'utiliser la même API Canvas coté client et
coté serveur (avec <a class="reference external" href="https://github.com/learnboost/node-canvas">node-canvas</a>).</div>
</div>
</li>
<li><p class="first">Node.js semble être très rapide, ça tient très bien la monté en charge.</p>
</li>
<li><p class="first">La vitesse de l'interpréteur Javascript est en constante progression <a class="reference external" href="http://en.wikipedia.org/wiki/V8_%28JavaScript_engine%29">V8 (JavaScript engine)</a></p>
</li>
</ul>
</div>
<div class="section" id="faiblesses-de-node-js">
<h3>Faiblesses de Node.js</h3>
<p>Je ne sais pas si mes remarques sont exactes, je n'ai aucune expérience en Node.js.</p>
<ul class="simple">
<li>Exemple dans la partie <a class="reference external" href="http://nodeguide.com/convincing_the_boss.html#bad-use-cases">Bad Use Cases</a>
du guide <a class="reference external" href="http://nodeguide.com/convincing_the_boss.html">Felix's Node.js Convincing the boss guide</a> il
est <a class="reference external" href="http://nodeguide.com/convincing_the_boss.html#simple-crud-html-apps">indiqué</a> que les framework
Node.js sont moins matures que ce que l'on peut trouver en Ruby, Python et Php (bon pour ce dernier
j'ai des doutes, je pense que la communauté Node.js est déjà plus mature, plus structurée que
la communauté Php… enfin bon…).</li>
<li>Je ne pense pas que <a class="reference external" href="http://sequelizejs.com/">Sequelize</a> soit aussi mature que <a class="reference external" href="http://www.sqlalchemy.org/">SQLAlchemy</a></li>
<li>Je n'ai pas trouvé d'outil comme <a class="reference external" href="http://packages.python.org/Whoosh/">Whoosh</a> en Javascript
(c'est un moteur de recherche léger). J'ai tout de même trouvé <a class="reference external" href="https://github.com/networkimprov/node-xapian">Node-xapian</a></li>
</ul>
<p>Je ne sais pas si il est encore tôt pour passer à Node.js mais si la communauté continue à être
aussi dynamique que ces 2 dernières années… alors les pièces manquantes seront bientôt créées.</p>
</div>
<div class="section" id="est-ce-que-l-on-va-retrouver-javascript-partout">
<h3>Est-ce que l'on va retrouver Javascript partout ?</h3>
<p>Voici une petite liste :</p>
<ul class="simple">
<li>Javascript dans les navigateurs web</li>
<li>Javascript coté serveur (Node.js)</li>
<li>Javascript dans Qt <a class="reference external" href="http://doc.qt.nokia.com/4.7/qml-intro.html">Introduction QML + Qt Quick</a>
qui semble vraiment super puissant</li>
<li>Les possibilités d'utiliser Gtk + JS : <a class="reference external" href="http://pastebin.com/Md65QLnT">gjs and Gtk+</a></li>
<li>Gnome Shell est <a class="reference external" href="http://git.gnome.org/browse/gnome-shell/tree/js/ui">en grande partie</a> développé en Javascript.
Ses extensions sont entièrement développé en JS</li>
<li>Sur mobile <a class="reference external" href="http://en.wikipedia.org/wiki/Webos">WebOS</a> et <a class="reference external" href="http://en.wikipedia.org/wiki/Boot_to_gecko">Boot to Gecko</a></li>
</ul>
<p>Quand je vois cette liste, je me pose sérieusement la question : est-ce que Javascript est le langage incontournable
de ces 10 prochaines années ? Certes il est déjà incontournable dans le navigateur, mais pour le reste ?</p>
<hr class="docutils" />
<p>Édition 5 mai 2012 :</p>
<ul class="simple">
<li>j'ai publié ce billet sur <a class="reference external" href="http://linuxfr.org/users/harobed/journaux/reflexions-a-propos-de-nodejs-et-de-javascript-plus-globalement">LinuxFR</a>, j'ai reçu 90 commentaires…</li>
<li>j'ai publié ce billet sur la mailing list de l'<a class="reference external" href="http://www.afpy.org/">Afpy</a>, j'ai reçu 25 commentaires… malheureusement les archives de cette liste n'est pas publique</li>
</ul>
<p>merci beaucoup pour vos retours d'expériences !</p>
</div>
</div>
]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://stephane-klein.info/</uri>
    </author>
    <title type="html"><![CDATA[Astuce pour filtrer ses propres visites dans Google Analytics]]></title>
    <link rel="alternate" type="text/html" href="http://stephane-klein.info/blog/2012/03/15/astuce-pour-filtrer-ses-propres-visites-dans-google-analytics" />
    <id>http://stephane-klein.info/blog/2012/03/15/astuce-pour-filtrer-ses-propres-visites-dans-google-analytics</id>
    <updated>2012-03-15T20:40:00Z</updated>
    <published>2012-03-15T20:40:00Z</published>
    <category scheme="http://stephane-klein.info/" term="Informatique" />
    <category scheme="http://stephane-klein.info/" term="Astuces" />
    <summary type="html"><![CDATA[Astuce pour filtrer ses propres visites dans Google Analytics]]></summary>
    <content type="html" xml:base="http://stephane-klein.info/blog/2012/03/15/astuce-pour-filtrer-ses-propres-visites-dans-google-analytics"><![CDATA[<div class="document">
<p>Pour ne pas fausser le nombre de visites de mes sites - c'est à dire des sites sur lesquels
je suis en train de travailler, développer, rédiger du contenu - je cherchais une astuce pour
que <a class="reference external" href="http://fr.wikipedia.org/wiki/Google_analytics">Google Analytics</a> ne prenne pas en
compte mes propres visites.</p>
<p>J'ai trouvé par exemple une solution qui constite à mettre en place un filtre sur les adresses IP
que j'utilise. Cependant, cette solution ne me convient pas tout à fait. Je peux consulter
mon site depuis divers accès… je n'ai pas envie d'ajouter toutes les adresses IP.</p>
<p>J'ai trouvé une autre solution qui me convient mieux :</p>
<ul class="simple">
<li>je modifie le <a class="reference external" href="http://fr.wikipedia.org/wiki/User-agent">user-agent</a> de mon navigateur, j'y ajoute un identifiant</li>
<li>dans les pages de mes sites, j'active le code Javacript de Google Analytics uniquement si le &quot;User-Agent&quot; ne contient pas l'identifiant que j'ai ajouté</li>
</ul>
<p>Pour modifier la valeur de mon &quot;User-Agent&quot;, j'utilise l'extension Firefox <a class="reference external" href="http://chrispederick.com/work/user-agent-switcher/">User Agent Switcher</a>.</p>
<p>J'ai ajouté &quot;stephane-klein&quot; comme identifiant, ce qui me donne le résultat suivant :</p>
<pre class="literal-block">
Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0.2;stephane-klein) Gecko/20100101
Firefox/10.0.2
</pre>
<p>Ensuite, au niveau de l'activation de Google Analytics dans mes pages webs, j'ai quelque chose comme ça :</p>
<pre class="literal-block">
if (navigator.userAgent.indexOf(&quot;stephane-klein&quot;) == -1) {
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-29999662-1']);
    _gaq.push(['_trackPageview']);

    (function() {
    var ga = document.createElement('script');
    ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' :
    'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(ga, s);
    })();
}
</pre>
<p>Certes, mon identifiant &quot;stephane-klein&quot; sera visible pour toutes mes visites sur tous les sites (bien que je peux
switcher rapidement la valeur de mon &quot;User-Agent&quot;) mais bon, je trouve cela pas bien grave. Il est aussi possible
d'utiliser un identifiant qui n'a pas de sens, un <a class="reference external" href="http://fr.wikipedia.org/wiki/UUID">UUID</a> par exemple.</p>
</div>
]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://stephane-klein.info/</uri>
    </author>
    <title type="html"><![CDATA[Note à propos des « Content Repository » dans le cadre d'un CMS]]></title>
    <link rel="alternate" type="text/html" href="http://stephane-klein.info/blog/2012/03/06/note-à-propos-des-«-content-repository-»-dans-le-cadre-d'un-cms" />
    <id>http://stephane-klein.info/blog/2012/03/06/note-à-propos-des-«-content-repository-»-dans-le-cadre-d'un-cms</id>
    <updated>2012-03-06T21:53:00Z</updated>
    <published>2012-03-06T21:53:00Z</published>
    <category scheme="http://stephane-klein.info/" term="Informatique" />
    <category scheme="http://stephane-klein.info/" term="Content-Repository" />
    <category scheme="http://stephane-klein.info/" term="NoSQL" />
    <category scheme="http://stephane-klein.info/" term="MongoDB" />
    <category scheme="http://stephane-klein.info/" term="Réflexions" />
    <category scheme="http://stephane-klein.info/" term="Web-Dev" />
    <category scheme="http://stephane-klein.info/" term="Développement" />
    <category scheme="http://stephane-klein.info/" term="Idée" />
    <summary type="html"><![CDATA[Note à propos des « Content Repository » dans le cadre d'un CMS]]></summary>
    <content type="html" xml:base="http://stephane-klein.info/blog/2012/03/06/note-à-propos-des-«-content-repository-»-dans-le-cadre-d'un-cms"><![CDATA[<div class="document">
<p>Dimanche dernier, j'ai étudié le thème « Content Repository », voici quelques notes concernant
mes recherches.</p>
<div class="section" id="separation-des-web-cms-en-deux-couches">
<h3>Séparation des Web CMS en deux couches</h3>
<p>J'ai trouvé <a class="reference external" href="http://blogs.alfresco.com/wp/pmonks/2008/11/05/web-cmss-dissected/">un article qui fait la distinction entre deux types de CMS, enfin il parle de WCMS (Web CMS)</a> :</p>
<ul class="simple">
<li>« Content Production Systems (CPS) »</li>
<li>« Presentation Management Systems (PMS) »</li>
</ul>
<div class="line-block">
<div class="line">Personnellement, cet article me fait penser à une réflexion qui m'est déjà venu de nombreuses fois :
là où l'auteur de l'article voit deux systèmes, deux types d'applications distinctes, je vois en fait deux couches…
Bon en fait, l'auteur semble le dire aussi à la fin de son article quand il parle de CPS + PMS.</div>
<div class="line">Je reprends ci-dessous à peu près la description qu'il fait d'un CPS et d'un PMS :</div>
</div>
<ul class="simple">
<li>CPS - c'est le système qui gère la couche données, la logique métier du CMS, comme :<ul>
<li>l'enregistrement des ressources (Pages, Images, Dossiers…)</li>
<li>un moteur de recherche plain texte (avec filtre…)</li>
<li>un workflow</li>
<li>un système de versionning</li>
<li>import / export de données</li>
<li>…</li>
</ul>
</li>
<li>PMS - c'est le système qui pour résumer &quot;affiche&quot; les pages :<ul>
<li>la navigation</li>
<li>système de template</li>
<li>layouts</li>
<li>skins / thèmes</li>
<li>back office d'édition</li>
<li>…</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="content-repository">
<h3>« Content Repository »</h3>
<p>À mes yeux… je ne fais pas bien la distinction entre un <a class="reference external" href="http://en.wikipedia.org/wiki/Content_repository">Content Repository</a> et
un CPS.</p>
<p>Si j'essaie de les différencier, je dirais qu'un Content Repository est une librairie ou un serveur alors qu'un CPS est une
application, avec des Interfaces Utilisateur…</p>
<p>Dans la suite de l'article, je vais partir du principe que Content Repository est la même chose qu'un CPS même
si ce n'est pas totalement exact.</p>
<p>Dans le monde Java, une spécification nommée JCR (<a class="reference external" href="http://en.wikipedia.org/wiki/Content_repository_API_for_Java">Java Content Repository</a>) décrit ce qu'est un Content Repository et comment
l'utiliser (spécification d'une API standard).</p>
<p>Il existe plusieurs implémentations de JCR mais la plus connue semble être <a class="reference external" href="http://en.wikipedia.org/wiki/Apache_Jackrabbit">Jackrabbit</a>
de la fondation Apache. Je l'avais rencontré il y a quelque années lorsque j'ai étudié de loin <a class="reference external" href="http://en.wikipedia.org/wiki/Nuxeo">Nuxeo</a>.</p>
<p>J'ai été agréablement surpris de découvrir les projets PHP suivants (ce qui confirme que je ne suis pas le seul à me poser ces questions) :</p>
<ul class="simple">
<li><a class="reference external" href="http://phpcr.github.com/">PHPCR - Content Repository for PHP</a> (<a class="reference external" href="http://phpcr.github.com/slides.html">voir slides</a>)</li>
<li><a class="reference external" href="http://www.simpcore.org/">simPCoRe - PHP Content Repository</a></li>
</ul>
<p>J'ai appris l'existence d'un projet de Content Repository pour Node.js :</p>
<ul class="simple">
<li><a class="reference external" href="http://github.com/karacos/nocr-mongo">nocr</a></li>
</ul>
<p>J'ai aussi trouvé <a class="reference external" href="http://www.lilyproject.org/lily/index.html">Lily</a> qui est un Content Repository basé
sur <a class="reference external" href="http://en.wikipedia.org/wiki/Hadoop">Hadoop</a>, <a class="reference external" href="http://en.wikipedia.org/wiki/Hbase">HBase</a> et
<a class="reference external" href="http://en.wikipedia.org/wiki/Solr">SOLR</a> dans un écosystème Java + API Rest.</p>
</div>
<div class="section" id="specificites-techniques-d-un-cps">
<h3>Spécificités techniques d'un CPS</h3>
<p>J'ai trouvé un <a class="reference external" href="http://contentcurmudgeon.wordpress.com/2010/06/25/nosql-and-cms-requirements-for-content-production-systems/">autre article qui traite des spécificités techniques d'un CPS</a>.
Voici ci-dessous sa liste de &quot;requirements&quot; :</p>
<blockquote>
<ul class="simple">
<li>Richly structured content types</li>
<li>Unstructured binary objects</li>
<li>Relationships / references / associations</li>
<li>The ability to evolve content models over time (what I call “schema evolution”)</li>
<li>Branch / merge (in the Source Code Management (SCM) sense of the term)</li>
<li>Snapshot based versioning</li>
<li>ACID transactions</li>
<li>Scalability to large content sets</li>
<li>Geographic distribution</li>
</ul>
</blockquote>
<p>Chacun de ces points sont détaillés dans son article et c'est fortement intéressant.
Par exemple, je trouve le point « Branch / Merge » très juste… bien que je ne sache pas tout à fait
comment l'implémenter simplement.</p>
<p>À partir de cette liste, voici la liste des &quot;requirements&quot; de mon Content Repository idéal :</p>
<ul class="simple">
<li>Base de données où je peux stocker des objects JSON ainsi
que des blobs (exemples : base de données NoSQL comme <a class="reference external" href="http://fr.wikipedia.org/wiki/MongoDB">MongoDB</a>,
<a class="reference external" href="http://fr.wikipedia.org/wiki/CouchDB">CouchDB</a>)</li>
<li>Base de données où je peux stocker des collections (pour des dossiers), des liens (pour des redirections), des associations (pour des catégories, des tags…)</li>
<li>API Rest qui permettent d'accéder plus ou moins à toutes les features du Content Repository</li>
<li>Moteur de recherche (basé par exemple sur : <a class="reference external" href="http://fr.wikipedia.org/wiki/Xapian">Xapian</a>, <a class="reference external" href="http://www.elasticsearch.org/">elasticsearch</a>)</li>
<li>Un système de workflow</li>
<li>Versionning (peut-être basé sur <a class="reference external" href="http://fr.wikipedia.org/wiki/Git">Git</a> ou <a class="reference external" href="http://fr.wikipedia.org/wiki/Mercurial">Mercurial</a>)</li>
<li>Système d'import / export de données (je ne sais pas si il y a un format standard pour les CMS… enfin je n'ai jamais trouvé)</li>
<li>Support d'une API <a class="reference external" href="http://fr.wikipedia.org/wiki/CMIS">CMIS</a> (bien que je la trouve peu élégante… c'est bien une API faite par le monde Java)</li>
<li>Accès WebDAV</li>
<li>Gestion des utilisateurs</li>
</ul>
<p>Pour le moment, je n'ai pas trouvé le Content Repository de mes rêves.</p>
</div>
<div class="section" id="le-standard-cmis-content-management-interoperability-services">
<h3>Le standard CMIS « Content Management Interoperability Services »</h3>
<p>Le standard <a class="reference external" href="http://en.wikipedia.org/wiki/Content_Management_Interoperability_Services">CMIS</a> est un autre élément
intéressant à prendre en compte dans un CPS.</p>
<p>CMIS est une couche d'abstraction dont le but est de permettre de faire communiquer plusieurs instances de CMS
identiques ou différentes ensemble. Elle doit permettre par exemple d'importer les données d'une instance
à une autre.</p>
<p>Il existe <a class="reference external" href="http://en.wikipedia.org/wiki/Content_Management_Interoperability_Services#CMIS_Clients">de nombreux clients CMIS pour différent
langage…</a></p>
</div>
<div class="section" id="la-suite">
<h3>La suite…</h3>
<p>J'ai prévu d'écrire d'autres billets à propos des Content Repository :</p>
<ul>
<li><p class="first">Un retour d'expérience et mes réflexions concernant un premier Content Repository que
j'ai écrit en Python, basé sur la base de données NoSQL <a class="reference external" href="http://fr.wikipedia.org/wiki/ZODB">ZODB</a> et le moteur de
recherche <a class="reference external" href="https://bitbucket.org/mchaput/whoosh/wiki/Home">Whoosh</a>. Il comporte aussi un
connecteur <a class="reference external" href="http://fr.wikipedia.org/wiki/Webdav">WebDAV</a>.</p>
</li>
<li><p class="first">Un autre billet sur une proposition d'API RESTful pour un Content Repository… quelque chose
de naturel et vraiment dans l'esprit RESTful.</p>
<p>Exemple :</p>
<pre class="literal-block">
GET http://example.com/blog/my-post         =&gt; est dans l'esprit RESTful
GET http://example.com/post?name=&quot;my-post&quot;  =&gt; est moins dans l'esprit RESTful
</pre>
<p>Dans l'API REST de CMIS j'ai trouvé beaucoup de requête suivant la seconde forme d'URL
et très peu ou pas sous la première forme d'URL.</p>
</li>
</ul>
</div>
</div>
]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://stephane-klein.info/</uri>
    </author>
    <title type="html"><![CDATA[Mon bilan de Agile Open France 2012]]></title>
    <link rel="alternate" type="text/html" href="http://stephane-klein.info/blog/2012/01/21/mon-bilan-de-agile-open-france-2012" />
    <id>http://stephane-klein.info/blog/2012/01/21/mon-bilan-de-agile-open-france-2012</id>
    <updated>2012-01-21T10:29:00Z</updated>
    <published>2012-01-21T10:29:00Z</published>
    <category scheme="http://stephane-klein.info/" term="Informatique" />
    <category scheme="http://stephane-klein.info/" term="Témoignage" />
    <category scheme="http://stephane-klein.info/" term="Agile" />
    <category scheme="http://stephane-klein.info/" term="Conférences" />
    <category scheme="http://stephane-klein.info/" term="Open Space" />
    <category scheme="http://stephane-klein.info/" term="Manifestation" />
    <summary type="html"><![CDATA[Mon bilan de Agile Open France 2012]]></summary>
    <content type="html" xml:base="http://stephane-klein.info/blog/2012/01/21/mon-bilan-de-agile-open-france-2012"><![CDATA[<div class="document">
<div class="section" id="la-forme-le-principe">
<h3>La forme, le principe</h3>
<p>Contrairement aux manifestations, type conférences comme <a class="reference external" href="http://pycon.org/">PyCon</a>, <a class="reference external" href="http://2012.rmll.info/">RMLL</a>, <a class="reference external" href="http://fosdem.org/2012/">Fosdem</a>, <a class="reference external" href="http://blog.agileopenfrance.com/">l'Agile Open France</a> est du type <a class="reference external" href="http://fr.wikipedia.org/wiki/M%C3%A9thodologie_open_space">Méthodologie open space</a> (pas les bureaux ouverts !) ou <a class="reference external" href="http://fr.wikipedia.org/wiki/BarCamp">Barcamp</a>.</p>
<p>Je vous invite à lire l'article Wikipedia <a class="reference external" href="http://fr.wikipedia.org/wiki/M%C3%A9thodologie_open_space">Méthodologie open space</a> car il correspond très bien à ce que j'ai vécu.</p>
<p>Voici un extrait :</p>
<blockquote>
<p>Selon Harrison Owen1, le succès d'un Open Space repose sur le respect d'une loi, étayée par quatre principes. Pendant le rituel d'ouverture, ces éléments sont cités et expliqués aux participants.</p>
<blockquote>
<p>Les quatre principes :</p>
<ul class="simple">
<li>Les personnes qui se présentent, sont les bonnes ;</li>
<li>Ce qui arrive,est la seule chose qui pouvait arriver ;</li>
<li>Ça commence quand ça commence ;</li>
<li>Quand c’est fini, c’est fini.</li>
</ul>
<p><strong>La loi des deux pieds</strong> : Si vous n’êtes en train ni d’apprendre, ni de contribuer, passez à autre chose !</p>
</blockquote>
</blockquote>
<p>Dans l'open space auquel j'ai participé, deux éléments supplémentaires ont été ajouté lors du rituel d'ouverture :</p>
<ul class="simple">
<li>« Être un bourdon, ce n'est pas sale ! » : ce n'est pas grave si l'on passe d'un groupe à l'autre… on peut partir d'une discussion (suivre la loi des deux pieds), on peut s'insérer dans une discussion sans problème</li>
<li>« Être un papillon, ce n'est pas sale ! » : si on n'est perdu… ce n'est pas grave… attention toutefois à ne pas tuer les papillons :)</li>
</ul>
<p>Si vous souhaitez encore approfondir le sujet, je vous invite à lire le <a class="reference external" href="http://thierry-fayret.typepad.fr/accueil/guide-utilisateur-des-forums-ouverts.html">Guide utilisateur des Forums Ouverts</a> .</p>
</div>
<div class="section" id="le-lieu">
<h3>Le lieu</h3>
<p><a class="reference external" href="http://www.hotel-arnold.com/">L'hôtel Arnold</a> était entièrement réservé pour l'Agile Open France 2012… le cadre était vraiment très pratique.</p>
<p>L'hôtel était vraiment très bien, très beau, les chambres spacieuses, les repas étaient très bons, les employés de l'hôtel étaient vraiment très agréables…</p>
<p>Des petits salons très confortables, fauteuils, canapés, open bar, équipé de tableaux, de rétroprojecteurs…</p>
<p>Vraiment, le cadre était parfait.</p>
</div>
<div class="section" id="les-principaux-sujets-auxquels-j-ai-participe">
<h3>Les principaux sujets auxquels j'ai participé</h3>
<p>De mémoire, j'ai participé aux sujets suivants (les titres ne sont sans doute pas exacts, l'ordre est arbitraire) :</p>
<ul class="simple">
<li>Les Farfadet du génie logiciel</li>
<li>Le service <a class="reference external" href="http://www.heroku.com/">Heroku</a> : discussions et retours d'expériences</li>
<li>Le langage <a class="reference external" href="http://fr.wikipedia.org/wiki/Erlang_%28langage%29">Erlang</a> : discussions, retours d'expériences, initiation</li>
<li>Le langage <a class="reference external" href="http://fr.wikipedia.org/wiki/Ruby">Ruby</a> discussions, comparaisons Python/Ruby, retour d'expériences</li>
<li>J'ai assisté rapidement à une petite session <a class="reference external" href="http://fr.wikipedia.org/wiki/Node.js">Node.js</a></li>
<li>J'ai été acteur dans une session à propos de <a class="reference external" href="http://fr.wikipedia.org/wiki/Bernard_Stiegler">Bernard Stiegler</a> et de <a class="reference external" href="http://fr.wikipedia.org/wiki/Michel_Serres">Michel Serres</a></li>
<li>J'ai participé à la session « Pourquoi mon éditeur texte il déchire »</li>
<li>J'ai participé à la session « Pourquoi j'aime mon langage »</li>
<li>J'ai été acteur dans une session « Open Money, devises numériques » : <a class="reference external" href="http://fr.wikipedia.org/wiki/Bitcoin">Bitcoin</a>, <a class="reference external" href="http://www.creationmonetaire.info/2011/06/theorie-relative-de-la-monnaie-20.html">Théorie Relative de la Monnaie 2.0</a></li>
<li>J'ai vécu une belle expérience lors d'une session/expérience sur le « Dialogue »… : très enrichissant… et j'ai constaté que j'étais vraiment entouré de personnes très intelligentes (ou à l'écoute… en éveil… je n'arrive pas à trouver le bon mot) ou alors c'est le contexte qui fait progresser tout le monde… je ne sais pas…</li>
<li>Discussions à propos du déploiment d'applications web Python, j'ai découvert entre autre l'outil <a class="reference external" href="https://github.com/ronnix/fabtools">Fabtools</a> (développé par <a class="reference external" href="https://twitter.com/#!/amicel">Ronan Amicel</a>) basé sur <a class="reference external" href="http://fabfile.org">Fabric</a></li>
<li>Discussions à propos des technologies <a class="reference external" href="http://fr.wikipedia.org/wiki/Nosql">NoSQL</a>, retours d'expériences de <a class="reference external" href="http://fr.wikipedia.org/wiki/MongoDB">MongoDB</a>, <a class="reference external" href="http://fr.wikipedia.org/wiki/CouchDB">CouchDB</a> …</li>
<li>Discussions à propos des <a class="reference external" href="http://fr.wikipedia.org/wiki/Fablab">Fablab</a>, <a class="reference external" href="http://fr.wikipedia.org/wiki/Impression_3D">imprimantes 3D</a> et ce que cela peut changer dans la société</li>
<li>Discussions à propos de « Pourquoi les sites des technos Ruby sont beaux, plus beaux que les outils Python » (je ne parle pas des réalisations faites avec ces outils, mais les sites web de ces outils, le coté marketing de Ruby qui est très bien réussi)</li>
<li>Discussions à propos de la réalisation d'applications mobiles : native vs html vs autre outils</li>
<li>J'ai assisté à une discussion au sujet de « Mon designer : un équipier agile »</li>
<li>Discussions à propos de <a class="reference external" href="http://docs.pylonsproject.org/projects/pylons-webframework/en/latest/">Pylons</a>, <a class="reference external" href="http://www.pylonsproject.org/">Pyramid</a>, framework avec et <a class="reference external" href="http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/designdefense.html">sans opinions</a>, j'y ai découvert le projet <a class="reference external" href="http://ptahproject.readthedocs.org/en/latest/index.html">Ptah</a> surcouche de Pyramid avec des opinions.</li>
<li>Discussions à propos de <a class="reference external" href="http://www.12factor.net/">The Twelve-Factor App</a></li>
<li>Discussions à propos de « Comment vendre de l'agile ? »</li>
<li>Discussions à propos de « Est-ce que passé une taille critique, une startup doit se structurer, comme par exemple mettre en place des entretiens individuels annuels d'évaluation ? »</li>
<li>Discussions à propos de « Est-ce qu'il faut encore développer ses applications vs utiliser des outils clés en main ? »</li>
<li>Discussions à propos de « Comment répondre à des offres, est-ce qu'il faut répondre à des offres, comment répondre à un cahier des charges… ». J'ai adoré cette discussion, avec des retours d'expériences, exploration de pistes…</li>
<li>Discussions à propos de « Comment travailler en équipe quand les membres ont des compétences différentes, utilisent des technologies différentes ? »</li>
</ul>
<p>À savoir, que parallèlement à ces sujets, il y en avait toujours trois, quatre ou même cinq autres.</p>
</div>
<div class="section" id="mon-bilan">
<h3>Mon bilan</h3>
<p>De toutes les manifestations que j'ai fait, c'est la meilleur, c'est là où j'ai appris le plus de choses en si peu de temps… et encore je n'ai pas pu assisté à toutes les discussions, toutes les sessions…</p>
<p>Je ne pense pas avoir passé dans ma vie, 48h aussi riches !</p>
<div class="line-block">
<div class="line">Vraiment le format Open Space est vraiment très bien pour échanger des expériences… philosopher…</div>
<div class="line">De plus ce format permet de rendre tout de monde accessible… pas de pudeur… il est possible de parler avec vraiment tout le monde.</div>
</div>
</div>
</div>
]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://stephane-klein.info/</uri>
    </author>
    <title type="html"><![CDATA[Screencast de présentation de Tacot]]></title>
    <link rel="alternate" type="text/html" href="http://stephane-klein.info/blog/2011/10/01/screencast-de-présentation-de-tacot" />
    <id>http://stephane-klein.info/blog/2011/10/01/screencast-de-présentation-de-tacot</id>
    <updated>2011-10-01T23:04:00Z</updated>
    <published>2011-10-01T23:04:00Z</published>
    <category scheme="http://stephane-klein.info/" term="Informatique" />
    <category scheme="http://stephane-klein.info/" term="Outils" />
    <category scheme="http://stephane-klein.info/" term="Python" />
    <category scheme="http://stephane-klein.info/" term="Web-dev" />
    <category scheme="http://stephane-klein.info/" term="Tacot" />
    <category scheme="http://stephane-klein.info/" term="Screencast" />
    <category scheme="http://stephane-klein.info/" term="Développement" />
    <category scheme="http://stephane-klein.info/" term="Contributions" />
    <summary type="html"><![CDATA[Screencast de présentation de Tacot]]></summary>
    <content type="html" xml:base="http://stephane-klein.info/blog/2011/10/01/screencast-de-présentation-de-tacot"><![CDATA[

<p>J'ai créé un screencast de présentation de <a href="http://packages.python.org/tacot/fr/">Tacot</a>.</p>

<p>J'ai plus ou moins suivi le contenu de la <a href="http://packages.python.org/tacot/fr/">documentation…</a>
Dans la vidéo j'ai fait quelques erreurs d'expression alors soyez indulgents… ce n'est pas facile de faire un
screencast valide du premier coup.</p>

<p>Je vous conseille de visualiser la vidéo en mode <em>720p</em> afin de bien pouvoir lire le contenu de la console.
Après la réalisation du screencast je me suis rendu compte que j'aurais dû agrandir la taille des polices.</p>

<div style="text-align: center">
    <iframe width="680" height="504" src="http://www.youtube.com/embed/iHKZJtaTZ_w" frameborder="0" allowfullscreen></iframe>
</div>

<p><a href="http://packages.python.org/tacot/fr/">Lien vers la documentation de Tacot.</a></p>
]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://stephane-klein.info/</uri>
    </author>
    <title type="html"><![CDATA[Idée d'une librairie basée sur Selenium pour tester des formulaires web]]></title>
    <link rel="alternate" type="text/html" href="http://stephane-klein.info/blog/2011/09/15/idée-d'une-librairie-basée-sur-selenium-pour-tester-des-formulaires-web" />
    <id>http://stephane-klein.info/blog/2011/09/15/idée-d'une-librairie-basée-sur-selenium-pour-tester-des-formulaires-web</id>
    <updated>2011-09-15T15:24:00Z</updated>
    <published>2011-09-15T15:24:00Z</published>
    <category scheme="http://stephane-klein.info/" term="Informatique" />
    <category scheme="http://stephane-klein.info/" term="Python" />
    <category scheme="http://stephane-klein.info/" term="Selenium" />
    <category scheme="http://stephane-klein.info/" term="Réflexions" />
    <category scheme="http://stephane-klein.info/" term="Web-dev" />
    <category scheme="http://stephane-klein.info/" term="Développement" />
    <category scheme="http://stephane-klein.info/" term="Idée" />
    <summary type="html"><![CDATA[Idée d'une librairie basée sur Selenium pour tester des formulaires web]]></summary>
    <content type="html" xml:base="http://stephane-klein.info/blog/2011/09/15/idée-d'une-librairie-basée-sur-selenium-pour-tester-des-formulaires-web"><![CDATA[<div class="document">
<div class="section" id="introduction">
<h3>Introduction</h3>
<p>Je viens de commencer à utiliser Selenium pour tester des formulaires, divers
pages de listes de données… dans une application métier.</p>
<p>Mes objectifs :</p>
<ul class="simple">
<li>tester l'ajout de nouvelles entités (1)<ul>
<li>les données sont injectées dans un formulaire d'une page html</li>
<li>une page de résultat est utilisées pour vérifier que les données ont bien
été enregistré (ça peut être une page d'édition)</li>
</ul>
</li>
<li>tester la modification d'une entités (2)<ul>
<li>les données sont injectées dans un formulaire d'une page html</li>
<li>une page de résultat est utilisées pour vérifier que les données ont bien
été enregistré (ça peut être une page d'édition)</li>
</ul>
</li>
<li>tester la validité d'une page de liste (3)</li>
<li>tester la validité des résultats d'un moteur de recherche (4)</li>
</ul>
<p>Pour le moment je me suis concentré uniquement sur les points 1 et 2.</p>
</div>
<div class="section" id="premiere-methode-a-l-arrache">
<h3>Première méthode (à l'arrache)</h3>
<p>J'ai commencé par réaliser des fonctions du type :</p>
<ul class="simple">
<li>login()</li>
<li>add_customer(data)</li>
<li>edit_customer(data)</li>
<li>check_customer(data)</li>
<li>add_customer(data)</li>
<li>edit_customer(data)</li>
<li>check_customer(data)</li>
<li>…</li>
</ul>
<p>Les fonctions de type &quot;add&quot; et &quot;edit&quot; prennent en paramètre des données à injecter dans des pages.
Les fonctions de type &quot;add&quot; correspondent aux pages d'ajout d'entités, les fonctions de
type &quot;edit&quot; correspondent aux pages de modification d'entités.</p>
<p>Ensuite j'ai des fonctions &quot;check&quot;, là aussi je passe en paramètre des données qui seront
utilisées comme valeur de vérification face à des pages de résultats ou pages d'éditions (une
page d'édition contient déjà des données, le but ici est de vérifier leurs validitées).</p>
<p>Ma variable &quot;data&quot; est du type :</p>
<pre class="syntax-python brush: python;">
data = [
    (&quot;reference&quot;, u&quot;C1345&quot;),
    (&quot;firstname&quot;, u&quot;Stéphane),
    (&quot;lastname&quot;, u&quot;Klein&quot;),
    ...
]
</pre>
<p>Dans mes fonctions (&quot;add&quot;, &quot;check&quot;…) j'ai une boucle qui parcourt la structure de données
et utilise les fonctions suivantes soit pour injecter des données, soit pour tester la validité
des données.</p>
<pre class="syntax-python brush: python;">
def inject_value(driver, name, value):
    element = driver.find_element_by_id(name)
    if element.tag_name == 'input':
        if element.get_attribute(&quot;type&quot;) == &quot;checkbox&quot;:
            if element.is_enabled() != value:
                element.click()
        else:
            element.clear()
            element.send_keys(value)

    elif element.tag_name == 'select':
        option_element = element.find_element_by_xpath(&quot;.//option[&#64;value='%s']&quot; % value)
        option_element.click()

    elif element.tag_name == 'textarea':
        element.clear()
        element.send_keys(value)

def check_value(driver, name, value):
    element = driver.find_element_by_id(name)
    if element.tag_name == 'input':
        if element.get_attribute(&quot;type&quot;) == &quot;checkbox&quot;:
            return element.is_enabled() == value
        else:
            return element.get_attribute(&quot;value&quot;) == value

    elif element.tag_name == 'select':
        return element.get_attribute(&quot;value&quot;) == value

    elif element.tag_name == 'textarea':
        return element.text == value
</pre>
<p>Pour le moment, cela fonctionne correctement mais je trouve mon code fastidieux pour plusieurs
raisons :</p>
<ul class="simple">
<li>j'aimerais pouvoir définir des valeurs par défaut pour les formulaires</li>
<li>j'aimerais pouvoir choisir d'autres types de &quot;selecteur&quot;, pour le moment je fais des
recherches uniquement par ID</li>
<li>j'aimerais pouvoir facilement indiquer le type de champ, car pour le moment je fais de
l'auto détection… mais cela ne sera pas toujours faisable</li>
</ul>
</div>
<div class="section" id="ce-que-j-aimerais-avoir">
<h3>Ce que j'aimerais avoir</h3>
<p>À noter que ce code n'est pas complet… c'est un brouillon.</p>
<pre class="syntax-python brush: python;">
from sealchemy import Form, TextField, SelectField, BooleanField

...

class AddCustomer(Form):
    __submit__ = Submit(name=&quot;_same&quot;)

    reference = TextField(default=u&quot;C1345&quot;)
    type_user = SelectField(default=u&quot;external&quot;)
    firstname = TextField(required=True)
    lastname = TextField(required=True)
    activated = BooleanField(default=True)
    comment = TextAreaField(default=u&quot;&quot;)

    def go_to_page(self):
        self.driver.get(&quot;/customers/add/&quot;)

class EditCustomer(Form):
    __submit__ = Submit(name=&quot;_same&quot;)

    reference = TextField(default=u&quot;C1345&quot;)
    type_user = SelectField(default=u&quot;external&quot;)
    firstname = TextField(required=True)
    lastname = TextField(required=True)
    activated = BooleanField(default=True)
    comment = TextAreaField(default=u&quot;&quot;)

    def go_to_page(self, id):
        self.driver.get(&quot;/customers/%s/&quot; % id)

    def go_to_last_inserted(self):
        &quot;&quot;&quot;Va sur la page du dernier client qui a été ajouté&quot;&quot;&quot;
        ...
</pre>
<p>Cela ressemble beaucoup à l'API de <a class="reference external" href="http://wtforms.simplecodes.com/">wtforms</a> que j'utilise
dans mon projet. Cela ressemble aussi à <a class="reference external" href="http://docs.formalchemy.org/">FormAlchemy</a> que
j'aime aussi.</p>
<p><tt class="docutils literal">__submit__</tt> permet d'indiquer le champ à utiliser par la commande <tt class="docutils literal">submit</tt>.</p>
<p>Note : je n'utilise pas une seule classe pour faire mes traitements &quot;add&quot; et &quot;edit&quot; car
les formulaires d'ajouts et d'édition sont en pratique souvent différents.</p>
<p>L'interface de la classe de type <tt class="docutils literal">Form</tt> :</p>
<pre class="syntax-python brush: python;">
class IForm(zope.interface.Interface):
    def inject():
        &quot;&quot;&quot;Cette méthode injecte les données vers le formulaire HTML&quot;&quot;&quot;

    def submit():
        &quot;&quot;&quot;Cette méthode lance le submit du formulaire&quot;&quot;&quot;

    def inject_and_submit():
        &quot;&quot;&quot;Exécute inject et ensuite submit&quot;&quot;&quot;

    def check():
        &quot;&quot;&quot;Cette méthode retourne True si les données correspondent aux
           données présentes dans le formulaire HTML&quot;&quot;&quot;

    def clear():
        &quot;&quot;&quot;Réinitialise la valeur de tous les champs de l'instance avec
           les valeurs par défauts&quot;&quot;&quot;

    def populate(values):
        &quot;&quot;&quot;Affecte des valeurs aux champs de l'objet.&quot;&quot;&quot;
</pre>
<p>La classe Session de mon projet :</p>
<pre class="syntax-python brush: python;">
class MyProject(Session):
    def __init__(self, login, password):
        ...

    def login(self):
        ...

    add_customer = AddCustomer()
    edit_customer = EditCustomer()
</pre>
<p>Dans <tt class="docutils literal">MyProject</tt>, j'ai ajouté les propriétés <tt class="docutils literal">add_customer</tt> et <tt class="docutils literal">edit_customer</tt> afin
que ces objets aient accès à l'objet <tt class="docutils literal">driver</tt> de Selenium.</p>
<p>Exemple d'utilisation :</p>
<pre class="syntax-python brush: python;">
session = MyProject(login=&quot;username&quot;, password=&quot;password&quot;, url=&quot;http://localhost:5000/&quot;)
session.login()

values = {
    &quot;reference&quot;: u&quot;C1871&quot;,
    &quot;firstname&quot;: u&quot;Stéphane&quot;,
    &quot;lastname&quot;: u&quot;Klein&quot;,
}
session.add_customer.populate(values)
session.add_customer.go_to_page()
session.add_customer.inject_and_submit()
session.edit_customer.go_to_last_inserted()
session.edit_customer.populate(values)
assert session.edit_customer.check()
</pre>
</div>
<div class="section" id="plus-d-informations-a-propos-des-classes-field">
<h3>Plus d'informations à propos des classes <strong>Field</strong></h3>
<p>Les classes de type <tt class="docutils literal">Field</tt> comme <tt class="docutils literal">TextField</tt>, <tt class="docutils literal">BooleanField</tt> … ont un constructeur avec plusieurs paramètres :</p>
<ul class="simple">
<li><tt class="docutils literal">name</tt> (optionnel) : définit la méthode de recherche du champ par l'attribut &quot;name&quot;</li>
<li><tt class="docutils literal">id</tt> (optionnel) : définit la méthode de recherche du champ par l'attirbut &quot;id&quot;</li>
<li><tt class="docutils literal">xpath</tt> (optionnel) : définit la méthode de recherche via xpath</li>
<li><tt class="docutils literal">required</tt> (optionnel) : définit si le champ est requis ou non</li>
<li><tt class="docutils literal">default</tt> (optionnel) : définit la valeur par défaut du champ</li>
</ul>
<p>Par défaut, si j'ai ceci :</p>
<pre class="syntax-python brush: python;">
class ...(Form):
    firstname = TextField()
</pre>
<p>C'est équivalent à cela :</p>
<pre class="syntax-python brush: python;">
class ...(Form):
    firstname = TextField(name=&quot;firstname&quot;)
</pre>
</div>
<div class="section" id="conclusion-questions">
<h3>Conclusion, questions</h3>
<p>Je vous ai donc présenté l'API que j'imagine créer sous le nom de &quot;sealchemy&quot;.</p>
<p>J'ai plusieurs questions :</p>
<ul class="simple">
<li>est-ce que vous pensez que cette librairie serait utile ?</li>
<li>est-ce que l'API, le mode de fonctionnement est judicieux ?</li>
<li>est-ce que cela vous intéresse ?</li>
<li>est-ce que vous avez déjà créé quelque chose du même genre ?</li>
<li>quelle est votre méthode pour faire ce genre de test ?</li>
</ul>
<p>Merci d'avance pour vos commentaires.</p>
</div>
</div>
]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://stephane-klein.info/</uri>
    </author>
    <title type="html"><![CDATA[Quelques notes en vrac]]></title>
    <link rel="alternate" type="text/html" href="http://stephane-klein.info/blog/2011/04/24/quelques-notes-en-vrac" />
    <id>http://stephane-klein.info/blog/2011/04/24/quelques-notes-en-vrac</id>
    <updated>2011-04-24T14:46:00Z</updated>
    <published>2011-04-24T14:46:00Z</published>
    <category scheme="http://stephane-klein.info/" term="Informatique" />
    <category scheme="http://stephane-klein.info/" term="Python" />
    <category scheme="http://stephane-klein.info/" term="En vrac" />
    <category scheme="http://stephane-klein.info/" term="Resources" />
    <category scheme="http://stephane-klein.info/" term="Web-dev" />
    <summary type="html"><![CDATA[Quelques notes en vrac]]></summary>
    <content type="html" xml:base="http://stephane-klein.info/blog/2011/04/24/quelques-notes-en-vrac"><![CDATA[<div class="document">
<div class="section" id="liste-des-applications-outils-que-j-utilise">
<h3>Liste des applications / outils que j'utilise</h3>
<p>Il y a quelques semaines, sur mon site, j'ai créé une nouvelle page qui s'intitule
<a class="reference external" href="/ressources/I_use_this_tools.html">« Liste des applications / outils que j'utilise »</a>.</p>
<p>Quelles sont les motivations qui m'ont poussé à réaliser cette page ?</p>
<ul class="simple">
<li>je trouve intéressant de savoir quels sont les outils que X ou Y utilise au
quotidien… on y découvre souvent des choses intéressantes (donc n'hésitez pas à réaliser
ce type de page). Un site qui a le même esprit est « <a class="reference external" href="http://utilise.ca/">Ils utilisent ça</a> ».</li>
<li>il arrive que l'on me demande quelle librairie j'ai choisi pour réaliser telle ou telle tâche</li>
<li>parfois, je ne sais plus quelle librairie javascript j'ai choisi pour réaliser une tâche, dans ce
cas cette page me sert de &quot;pense-bête&quot;</li>
</ul>
<p>Dans le même esprit, j'ai commencé la page <a class="reference external" href="/ressources/apps_android.html">« Liste des applications Android que j'utilise »</a>
mais pour le moment elle n'est pas très étendue.</p>
</div>
<div class="section" id="virtualenvwrapper">
<h3>virtualenvwrapper</h3>
<p>Depuis 3 semaines, j'utilise de plus en plus régulièrement <a class="reference external" href="http://www.doughellmann.com/docs/virtualenvwrapper/">virtualenvwrapper</a>.</p>
<p>Cet outil est vraiment très pratique. Un petit résumé rapide d'utilisation (mais
je vous conseille fortement de lire la documentation pour en savoir plus sur
les divers fonctionnalités de l'outil, comment l'installer…) :</p>
<p>Je crée le dossier qui contiendra mon projet :</p>
<pre class="syntax-terminal brush: terminal;">
$ mkdir ~/projets/mon_projet/
</pre>
<p>Je crée un nouvel environement qui porte le même nom que mon projet :</p>
<pre class="syntax-terminal brush: terminal;">
$ mkvirtualenv mon_projet
New python executable in mon_projet/bin/python
Installing setuptools............done.
virtualenvwrapper.user_scripts creating /home/harobed/.virtualenvs/mon_projet/bin/predeactivate
virtualenvwrapper.user_scripts creating /home/harobed/.virtualenvs/mon_projet/bin/postdeactivate
virtualenvwrapper.user_scripts creating /home/harobed/.virtualenvs/mon_projet/bin/preactivate
virtualenvwrapper.user_scripts creating /home/harobed/.virtualenvs/mon_projet/bin/postactivate
virtualenvwrapper.user_scripts creating /home/harobed/.virtualenvs/mon_projet/bin/get_env_details
</pre>
<p>Quand j'active l'environement <tt class="docutils literal">mon_projet</tt> je souhaite être déplacé directement dans le dossier <tt class="docutils literal">~/projets/mon_projet</tt> :</p>
<pre class="syntax-terminal brush: terminal;">
$ echo &quot;cd ~/projets/mon_projet&quot; &gt;&gt; /home/harobed/.virtualenvs/mon_projet/bin/postactivate
</pre>
<p>J'active l'environement <tt class="docutils literal">mon_projet</tt> :</p>
<pre class="syntax-terminal brush: terminal;">
$ workon mon_projet
(mon_projet)$ pwd
/home/harobed/projets/mon_projet
</pre>
<p>À noter que les commandes fournies par <tt class="docutils literal">virtualenvwrapper</tt> supportent pour la plupart l'auto complétion,
par exemple <tt class="docutils literal">workon &lt;tab&gt;</tt> affiche les environements disponibles sur votre système.</p>
<p>Consultez la <a class="reference external" href="http://www.doughellmann.com/docs/virtualenvwrapper/">documentation</a> de virtualenvwrapper pour en savoir plus.</p>
</div>
<div class="section" id="mozilla-sync">
<h3>Mozilla Sync</h3>
<p>Depuis que je suis passé à <a class="reference external" href="http://fr.wikipedia.org/wiki/Mozilla_Firefox#Mozilla_Firefox_4">Firefox 4</a>,
j'utilise <a class="reference external" href="http://fr.wikipedia.org/wiki/Firefox_Sync">Firefox Sync</a> pour centraliser mes bookmarks.</p>
<p>Avant cela, j'utilisais avec plaisir <a class="reference external" href="http://fr.wikipedia.org/wiki/Delicious">delicious</a> mais
l'extension delicious pour Firefox 4 n'est pas disponible.</p>
<p>En tout les cas, <a class="reference external" href="http://fr.wikipedia.org/wiki/Firefox_Sync">Firefox Sync</a> fonctionne vraiment très
bien, c'est très facile à configurer, c'est totalement transparent à l'usage… un très beau travail,
réalisé entre autre par <a class="reference external" href="http://ziade.org/">Tarek Ziade</a> pour la <a class="reference external" href="https://hg.mozilla.org/services/server-full">partie serveur</a> (codé en Python).</p>
</div>
</div>
]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://stephane-klein.info/</uri>
    </author>
    <title type="html"><![CDATA[jquery.expandBox plugin]]></title>
    <link rel="alternate" type="text/html" href="http://stephane-klein.info/blog/2011/04/23/jquery.expandbox-plugin" />
    <id>http://stephane-klein.info/blog/2011/04/23/jquery.expandbox-plugin</id>
    <updated>2011-04-23T11:40:00Z</updated>
    <published>2011-04-23T11:40:00Z</published>
    <category scheme="http://stephane-klein.info/" term="Informatique" />
    <category scheme="http://stephane-klein.info/" term="jQuery" />
    <category scheme="http://stephane-klein.info/" term="Javascript" />
    <category scheme="http://stephane-klein.info/" term="Web-dev" />
    <category scheme="http://stephane-klein.info/" term="Projets" />
    <category scheme="http://stephane-klein.info/" term="Contributions" />
    <summary type="html"><![CDATA[jquery.expandBox plugin]]></summary>
    <content type="html" xml:base="http://stephane-klein.info/blog/2011/04/23/jquery.expandbox-plugin"><![CDATA[<div class="document">
<p>Je viens de publier une nouvelle version (0.2.0) du plugin <a class="reference external" href="http://projects.stephane-klein.info/jquery.expandBox/">jquery.expandBox</a>.</p>
<p>« Et ça sert à quoi ? » et bien à étendre des elements HTML dans une page.</p>
<p>Exemples :</p>
<pre class="syntax-javascript brush: javascript;">
$('#bloc2').expandBoxVertically();
</pre>
<pre class="literal-block">
+-----------+                              +-----------+
|   bloc 1  |                              |   bloc 1  |
+-----------+                              +-----------+
|   bloc 2  |                              |           |
+-----------+                              |           |
|           |                              |   bloc 2  |
|     du    |  =&gt; étendre le &quot;bloc 2&quot; =&gt;   |           |
|    vide   |                              |           |
|           |                              |           |
+-----------+                              +-----------+
|   bloc 3  |                              |   bloc 3  |
+-----------+                              +-----------+
</pre>
<pre class="syntax-javascript brush: javascript;">
$('#bloc2, #bloc3').expandBoxHorizontally();
</pre>
<pre class="literal-block">
+--------+--------+--------+----------------+
|        |        |        |                |
| bloc 1 | bloc 2 | bloc 3 |     du vide    |
|        |        |        |                |
+--------+--------+--------+----------------+

                      |
                      v

             étendre les blocs 2 et 3

                      |
                      v

+--------+-----------------+----------------+
|        |                 |                |
| bloc 1 |      bloc 2     |     bloc 3     |
|        |                 |                |
+--------+-----------------+----------------+
</pre>
<p>Pour en savoir plus sur les fonctionnalités de <tt class="docutils literal">jquery.expandBox plugin</tt>, comment l'utiliser, où le télécharger…
je vous conseille de vous rendre sur la <a class="reference external" href="http://projects.stephane-klein.info/jquery.expandBox/">page du projet…</a>.</p>
<div class="line-block">
<div class="line">Il y a 8 mois, au moment où j'ai réalisé ce plugin, j'ai cherché si ce type de plugin existait déjà.</div>
<div class="line">Je n'ai rien trouvé (j'ai peut être mal cherché).</div>
</div>
<p>La fonctionnalité <a class="reference external" href="http://hacks.mozilla.org/2010/04/the-css-3-flexible-box-model/">« The flexible box model »</a> de
la norme CSS 3 permet d'étendre des blocs d'une manière plus élégante que le plugin <tt class="docutils literal">jquery.expandBox</tt> mais
cette fonctionnalité n'est pas encore disponible pour tous les navigateurs.</p>
<p>J'espère que la documentation est compréhensible et que ce plugin vous sera utile.</p>
<p>Si vous avez des remarques, suggestions… n'hésitez pas à m'envoyer un mail à <a class="reference external" href="mailto:stephane&#64;harobed.org">stephane&#64;harobed.org</a></p>
</div>
]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://stephane-klein.info/</uri>
    </author>
    <title type="html"><![CDATA[Choix d'un Laptop, Lenovo ThinkPad T410 ou Dell Latitude]]></title>
    <link rel="alternate" type="text/html" href="http://stephane-klein.info/blog/2011/02/15/choix-d'un-laptop,-lenovo-thinkpad-t410-ou-dell-latitude" />
    <id>http://stephane-klein.info/blog/2011/02/15/choix-d'un-laptop,-lenovo-thinkpad-t410-ou-dell-latitude</id>
    <updated>2011-02-15T10:25:00Z</updated>
    <published>2011-02-15T10:25:00Z</published>
    <category scheme="http://stephane-klein.info/" term="Informatique" />
    <category scheme="http://stephane-klein.info/" term="Achat" />
    <category scheme="http://stephane-klein.info/" term="Matériel" />
    <summary type="html"><![CDATA[Choix d'un Laptop, Lenovo ThinkPad T410 ou Dell Latitude]]></summary>
    <content type="html" xml:base="http://stephane-klein.info/blog/2011/02/15/choix-d'un-laptop,-lenovo-thinkpad-t410-ou-dell-latitude"><![CDATA[<div class="document">
<p>Mon poste de travail, un ancien PC, fait beaucoup de bruit. Cette année
j'ai décidé de changer de machine.</p>
<div class="section" id="criteres-de-choix">
<h3>Critères de choix</h3>
<p>Mes critères de sélection sont les suivants :</p>
<ul class="simple">
<li><strong>Un laptop</strong> : cela fait des années que ma machine personnelle est un
laptop et je trouve cela extrêmement plus pratique qu'une tour. Possiblité
de se déplacer, silencieux…</li>
<li>CPU : <strong>Intel Core i3 ou i5 ou i7</strong></li>
<li>Taille écran : <strong>entre 13&quot; et 15&quot;</strong></li>
<li>Définition écran : <strong>entre 1280x800px et 1680x1050px</strong></li>
<li>Traitement de surface : <strong>si possible mat</strong></li>
<li>Mémoire : <strong>minimum 4Go</strong></li>
<li>Disque dur : <strong>minimum 250 Go, si possible 7200 tours minutes</strong></li>
<li>Carte graphique : <strong>Intel</strong> (Intel HD Graphics…)</li>
<li>Ethernet, Wifi… : si possible que du Intel</li>
<li>Autres critères :<ul>
<li>quelque chose d'assez solide (mon MacBook perso me fait toujours peur niveau
solidité)</li>
<li>une sortie moniteur externe qui accepte un connecteur VGA</li>
<li>un bon support sous GNU/Linux (Ubuntu en particulier)</li>
<li>si il est possible d'ajouter un disque SSD, ça serait bien… mais bon ce n'est pas
obligatoire</li>
<li>je veux quelque chose de silencieux</li>
<li>je veux quelque chose qui ne chauffe pas trop</li>
<li>au minimum trois sorties USB</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="ma-recherche">
<h3>Ma recherche</h3>
<div class="line-block">
<div class="line">Mes critères de taille, définition et de traitement de surface écran limitent
fortement la liste de choix de portables.</div>
<div class="line">De nos jours la <a class="reference external" href="http://forum.ubuntu-fr.org/viewtopic.php?id=439110">grande majorité des laptop ont des résolutions verticales
de 768px</a>.</div>
</div>
<p>Dans un premier temps, j'étais désespéré, je ne trouvais aucun laptop &lt; 17&quot; qui
avait une résolution verticale suppérieur à 768px. J'ai cherché sur
<a class="reference external" href="http://fr.wikipedia.org/wiki/RueDuCommerce">RueDuCommerce</a>, <a class="reference external" href="http://www.ldlc.com/">LDLC</a>,
<a class="reference external" href="http://www.fnac.com">Fnac</a> … (les filtres de ces sites sont très limités).</p>
<p>Suite à une <a class="reference external" href="http://linuxfr.org/comments/1201299.html#1201299">discussion sur LinuxFR</a>,
j'ai découvert <a class="reference external" href="http://www.prix-portables.fr/">Laptop Spirit</a>.</p>
<p>Dans un premier temps, mon choix s'est porté sur le modèle suivant « <a class="reference external" href="http://www.prix-portables.fr/PC/7294/Dell,Latitude-e5510-advanced.html">Dell
Latitude E5510 - Advanced</a> » :</p>
<ul class="simple">
<li>Marque : Dell</li>
<li>Taille : 15,6&quot;</li>
<li>Définition : 1600x900px</li>
<li>Traitement surface : Mat</li>
<li>Processeur : Core i5-560 2,66 GHz</li>
<li>Carte graphique : Intel GMA HD</li>
<li>Mémoire : 4 Go</li>
<li>Disque dur : 250 Go 7200rpm</li>
<li>Poids : 2,6 Kg</li>
</ul>
<p>En fait, c'était le seul et l'unique portable qui correspondait à mes critères
de recherche.</p>
<p>Ensuite via Wikipedia, j'ai découvert qu'il existait d'autres modèles avec une
bonne définition écran : la série <a class="reference external" href="http://en.wikipedia.org/wiki/Dell_Latitude#E-Family">Dell Latitude</a> .</p>
<p>En fait, la plupart du temps les hautes définitions sont en options, c'est donc pour
cela qu'ils ne sont pas visibles sur les sites de ventes &quot;généralistes&quot;.</p>
<p>De fil en aiguille, je suis tombé sur le wiki consacré aux ThinkPad de Lenovo :
<a class="reference external" href="http://www.thinkwiki.org/wiki/ThinkWiki">ThinkWiki</a>, <a class="reference external" href="http://www.thinkwiki.org/wiki/Hardware_Specifications">liste de tous les
modèles ThinkPad</a> .</p>
<p>En consultant les divers modèles présents sur ce wiki, j'ai découvert que les
<a class="reference external" href="http://en.wikipedia.org/wiki/ThinkPad#T-series">Lenovo ThinkPad Series T</a> ont
des résolutions écrans intéressantes.</p>
</div>
<div class="section" id="mon-choix-numero-1">
<h3>Mon choix numéro 1</h3>
<p>Mon choix s'est porté sur le
modèle <a class="reference external" href="http://www.thinkwiki.org/wiki/Category:T410">Lenovo ThinkPad T410</a> avec les
caractéristiques suivantes :</p>
<ul class="simple">
<li>Intel Core i5-560M Processor (2.66GHz, 3MB L3)</li>
<li>14.1 WXGA+ TFT (1440x900px), w/ LED Backlight (WWAN antenna)</li>
<li>Intel Graphics Media Accelerator 5700MHD</li>
<li>4 GB PC3-8500 DDR3 SDRAM 1067MHz SODIMM Memory (2 DIMM)</li>
<li>UltraNav (TrackPoint and TouchPad) with Fingerprint Reader</li>
<li>320GB 7200rpm 2.5&quot; SATA HDD</li>
<li>DVD Recordable 8x Max Dual Layer, Ultrabay Slim (Serial ATA)5</li>
<li>9 cell 2.8Ah Li-Ion Battery - Dual Mode60</li>
<li>Intel Centrino Advanced-N 6200 (2x2 AGN)10</li>
</ul>
<img alt="/images/lenovo_thinkpad_t410.jpg" src="/images/lenovo_thinkpad_t410.jpg" style="width: 500px;" />
</div>
<div class="section" id="pourquoi-un-thinkpad">
<h3>Pourquoi un ThinkPad ?</h3>
<p>Bien que j'ai l'impression que la tendance soit aux Apple <a class="reference external" href="http://fr.wikipedia.org/wiki/MacbookPro">MacBook Pro</a> même
chez les geeks sous GNU/Linux, les <a class="reference external" href="http://fr.wikipedia.org/wiki/ThinkPad">ThinkPad</a> anciennement de marque
IBM et maintenant Lenovo jouissent d'une très grande réputation chez les libristes.</p>
<p>Cette réputation est dû à la qualité matériel de ces portables, ils sont parmi les plus solides et fiables du marché.
Illustration :</p>
<ul class="simple">
<li><a class="reference external" href="http://www.youtube.com/watch?v=OxsDRI8At4Q&amp;NR=1">Vidéo de comparaison de la solidité de l'écran LCD d'un ThinkPad avec celui d'un Dell</a></li>
<li><a class="reference external" href="http://www.youtube.com/watch?v=d7cvi00OZDM&amp;feature=player_embedded">Vidéo de comparaison de la résistance à l'eau entre un ThinkPad T410 et un HP 8440p</a></li>
<li><a class="reference external" href="http://www.youtube.com/watch?v=Iw78gcU713g">Vidéo d'un crash test d'un ThinkPad</a></li>
<li><a class="reference external" href="http://www.youtube.com/watch?v=hO5LGICeOuk&amp;feature=related">Vidéo de test de poussière</a></li>
<li><a class="reference external" href="http://www.youtube.com/watch?v=0Rg7tKJWk2w&amp;NR=1">Autre vidéo de résistance à l'eau</a></li>
<li>…</li>
</ul>
<p>Je ne sais pas si ces vidéos sont des trucages marketing ou non, mais cela va dans le sens des
sentiments des possesseurs de ThinkPad.</p>
<p>Comme je suis assez design &quot;allemand de l'est&quot;, je trouve ces portables très beaux.</p>
<p>Les ThinkPad sont très populaire parmit les développeurs de logiciels libres, par conséquent les
systèmes d'exploitation GNU/Linux sont généralement très biens supportés sur ces machines.</p>
<p><a class="reference external" href="http://paulrouget.com/e/lenovoshop">Paul Rouget</a> a un ThinkPad T410, je lui ai demandé par mail si un OS GNU/Linux fonctionne
bien sur cette machine, il m'a répondu qu'il n'avait aucun problème.</p>
</div>
<div class="section" id="ou-acheter-un-lenevo-thinkpad-t410-en-france">
<h3>Où acheter un Lenevo ThinkPad T410 en France ?</h3>
<p>Sur le site USA de Lenovo, il est possible de définir précisément la configuration de sa machine.</p>
<p>Avec la configuration suivante :</p>
<ul class="simple">
<li>System components</li>
<li>Intel Core i5-560M Processor (2.66GHz, 3MB L3)</li>
<li>Genuine Windows 7 Home Premium 32</li>
<li>14.1 WXGA+ TFT, w/ LED Backlight (WWAN antenna)</li>
<li>Intel Graphics Media Accelerator 5700MHD - AMT</li>
<li>4 GB PC3-10600 DDR3 SDRAM 1333MHz SODIMM Memory (1 DIMM)</li>
<li>UltraNav (TrackPoint and TouchPad) with Fingerprint Reader</li>
<li>Camera, 2.0 MP</li>
<li>320 GB Hard Disk Drive, 7200rpm</li>
<li>DVD Recordable 8x Max Dual Layer, Ultrabay Slim (Serial ATA)</li>
<li>Smart Card</li>
<li>6 cell 2.6Ah Li-Ion Battery - Dual Mode</li>
<li>Country Pack North America with Line cord &amp; 65W AC adapter</li>
<li>Bluetooth w/ antenna</li>
<li>Intel Centrino Ultimate-N 6300 (3x3 AGN)</li>
<li>Integrated Mobile Broadband - Upgradable</li>
</ul>
<p>le numéro de produit est <tt class="docutils literal">2516CTO</tt> et le prix est à <tt class="docutils literal">$1,169.00</tt>.</p>
<div class="line-block">
<div class="line">Seulement, ce système de configuration n'est pas disponible en Europe :(</div>
<div class="line">En France, il faut passer par des revendeurs, comme par exemple :</div>
</div>
<ul class="simple">
<li><a class="reference external" href="http://www.compufirst.com">Compufirst</a></li>
<li><a class="reference external" href="http://www.ebizcuss.com">Ebizcuss</a></li>
<li><a class="reference external" href="http://www.gammeweb.com">GammeWeb</a></li>
<li><a class="reference external" href="http://www.inmac-wstore.com">Inmac Webstore</a></li>
</ul>
<p>Actuellement, le seul modèle en stock chez l'un de ces revendeurs qui correspond un
peu au modèle que je souhaite est le suivant : <a class="reference external" href="http://www.compufirst.com/lenovo/espace-lenovo/thinkpad/fiche_prod.do?ftn=listingProd&amp;prodId=440038&amp;currentPage=0">Lenovo ThinkPad T410I CI5/480M-2.4G</a>. Il a les caractéristique suivantes :</p>
<ul class="simple">
<li>Contrôleur graphique : NVIDIA Quadro NVS 3100M / Intel HD Graphics</li>
<li>Mémoire vidéo : 512 Mo</li>
<li>Sortie audio : Carte son</li>
<li>RAM : 4 Go (installé) / 8 Go (maximum) - DDR3 SDRAM - 1066 MHz - PC3-8500 ( 1 x 4 Go )</li>
<li>Réseaux : Adaptateur réseau - Ethernet, Fast Ethernet, Gigabit Ethernet, IEEE 802.11b, IEEE 802.11g, IEEE 802.11n, Bluetooth 2.1</li>
<li>Alimentation : CA 120/230 V ( 50/60 Hz )</li>
<li>Disque dur : 320 Go - Serial ATA-300 - 5400 tours/min</li>
<li>Poids : 2.3 kg</li>
<li>Stockage optique : DVD±RW (+R double couche) - module enfichable amovible</li>
<li>Affichage 14.1&quot; rétroéclairage par LED TFT 1440 x 900 ( WXGA+ )</li>
<li>Processeur : Intel Core i5 480M / 2.66 GHz ( à deux noyaux )</li>
<li>Télécommunications : Fax / modem / modem cellulaire</li>
<li>Transmission à large bande sans fil : Haut débit 3G Mobile</li>
<li>Périphérique(s) d'entrée : Clavier, TrackPoint, UltraNav</li>
<li>Batterie : 6 éléments Lithium Ion</li>
<li>Système d'exploitation : Microsoft Windows 7 Professionnel Édition 64 bits --</li>
<li>Dimensions (LxPxH) 33.6 cm x 23.9 cm x 3.2 cm</li>
<li>Normes environnementales : ENERGY STAR , EPEAT Gold</li>
<li>Garantie du fabricant&nbsp;: 3 ans de garantie --</li>
<li>Mémoire cache : 3 Mo - L3</li>
<li>Sécurité intégrée : Trusted Platform Module (TPM 1.2) Security Chip , lecteur d'empreintes digitales</li>
<li>Localisation : Français / France</li>
<li>Périphériques intégrés : Haut-parleurs stéréo, antenne LAN sans fil, ThinkLight, antenne Bluetooth, antenne cellulaire, Lecteur de carte SIM</li>
<li>Lecteur de carte : 5 en 1</li>
<li>Carte NIC sans fil : Intel Centrino Wireless-N 1000</li>
<li>Autonomie (jusqu'à) : 6.5 heure(s)</li>
<li>Caméra de portable : Intégré(e) - 2 mégapixels</li>
</ul>
<p>Voici les points qui ne correspondent pas à mon besoin :</p>
<ul class="simple">
<li>Disque dur : &quot;5400 tours/min&quot; alors que je veux 7200 tours/min</li>
<li>Contrôleur graphique : &quot;NVIDIA Quadro NVS 3100M / Intel HD Graphics&quot; alors que je veux uniquement une carte &quot;Intel HD Graphics&quot;</li>
<li>Transmission à large bande sans fil : &quot;Haut débit 3G Mobile&quot; j'ai pas besoin de cela</li>
</ul>
<p>Le prix de ce modèle : 1,294.00 € HT, 1,547.62 € TTC</p>
<p>Le modèle qui correspondait plus à mes souhait était le suivant <a class="reference external" href="http://www.compufirst.com/lenovo/espace-lenovo/thinkpad/fiche_prod.do?ftn=listingProd&amp;prodId=436888&amp;currentPage=0">Lenovo ThinkPad T410 Réf 2537-25G i5-540M(2.53GHz)</a> à 1,043.07€ HT, 1,247.51€ TTC mais il est en rupture de stock.
J'ai essayé de le commander, mais le vendeur m'a informé que ce n'est pas possible
ils n'en auront plus.</p>
<p>Je trouve tout même triste que Lenovo ne vendent pas directement leurs produits en
Europe comme le fait Dell. Je pense que Lenovo perd beaucoup de ventes potentiels en Europe.</p>
</div>
<div class="section" id="autres-choix">
<h3>Autres choix</h3>
<p>Si je ne prends pas le Lenovo ThinkPad T410, j'ai identifié quatre modèles intéressants chez Dell.</p>
<div class="section" id="dell-latitude-e5510">
<h4>Dell Latitude E5510</h4>
<p>Tout d'abord celui dont j'ai parlé en début d'article :« <a class="reference external" href="http://www1.euro.dell.com/content/products/featuresdetails.aspx/latitude-e5510?c=fr&amp;l=fr&amp;s=bsd&amp;cs=frbsdt1&amp;~lt=popup">Dell
Latitude E5510 - Advanced</a> » :</p>
<ul class="simple">
<li>Precesseur : One Intel Core™ i5-560M (2.66Ghz, 3M cache, Dual Core)</li>
<li>OS : Windows® 7 Professionnel authentique 32 Bit - Français</li>
<li>Microsoft® Office 2010 Microsoft® Office Starter 2010</li>
<li>Logiciel de protection Antivirus : Trend Micro Worry-Free Business Security Services, 15 mois</li>
<li>Écran : LCD 15.6” HD+ Écran large antireflet LED Affichage (1600 x 900)</li>
<li>Mémoire : Mémoire bicanale DDR3 de 4Go (2x2Go) 1333 MHz</li>
<li>Disque dur : 320 Go Serial ATA (7200RPM)</li>
<li>Batterie principale : 6 cellules</li>
<li>Caméra : Webcam et microphone inclus</li>
<li>Clavier : Clavier intégré avec double dispositif de pointage (AZERTY) - Français</li>
<li>Lecteur optique : Graveur DVD+/-RW 8x avec logiciel décodeur</li>
<li>Bluetooth : Carte réseau sans fil Dell sans fil 375 Bluetooth</li>
<li>Alimentation : Cordon d‘alimentation avec adaptateur secteur 90W, 3 broches - Europe</li>
</ul>
<p>Prix : 899 € HT</p>
</div>
<div class="section" id="dell-latitude-e5410">
<h4>Dell Latitude E5410</h4>
<p>Le modèle « <a class="reference external" href="http://www1.euro.dell.com/fr/fr/entreprise/Portables/latitude-e5410/pd.aspx?refid=latitude-e5410&amp;s=bsd&amp;cs=frbsdt1">Dell Latitude E5410 Advanced</a> »</p>
<ul class="simple">
<li>Processeur : One Intel Core™ i5-560M (2.66Ghz, 3M cache, Dual Core)</li>
<li>OS : Windows® 7 Professionnel authentique 32 Bit - Français</li>
<li>Microsoft® Office 2010, Microsoft® Office Starter 2010</li>
<li>Logiciel de protection Antivirus : Trend Micro Worry-Free Business Security Services, 15 mois</li>
<li>Écran : LCD 14.1 inch Écran large WXGA+ (1 440 x 900px) antireflet LCD Panel avec WWAN antenna</li>
<li>Mémoire : Mémoire bicanale DDR3 de 4Go (2x2Go) 1333 MHz</li>
<li>Disque dur : 320 Go Serial ATA (7,200 Rpm)</li>
<li>Batterie principale : 6 cellules</li>
<li>Caméra : Webcam intégrée avec microphone</li>
<li>Clavier : Clavier intégré avec double dispositif de pointage (AZERTY) - Français</li>
<li>Lecteur optique : Graveur DVD+/-RW 8x avec logiciel décodeur</li>
<li>Bluetooth : Carte réseau sans fil Dell sans fil 375 Bluetooth</li>
<li>Alimentation : Adaptateur CA de 65W à 3 câbles avec cordon d'alimentation de 1 m (3 câbles) - Europe</li>
</ul>
<p>Prix : 969,00 € HT</p>
</div>
<div class="section" id="dell-latitude-e6510">
<h4>Dell Latitude E6510</h4>
<p>Le modèle « <a class="reference external" href="http://www1.euro.dell.com/content/products/featuresdetails.aspx/latitude-e6510?c=fr&amp;l=fr&amp;s=bsd&amp;cs=frbsdt1&amp;~lt=popup">Dell Latitude E6510</a> »</p>
<ul class="simple">
<li>Processeur : One Intel Core i5-560M(2.66GHz,3MB,Dual Core)</li>
<li>OS : Windows® 7 Professionnel authentique (32Bit)</li>
<li>Logiciel de protection Antivirus : Trend Worry-Free Business Services MUI, 15 mois</li>
<li>Back converture : Silver LCD Back Cover</li>
<li>Écran : 15,6 pouces Plein Haute définition (1920X1080) AntiGlare WLED LCD</li>
<li>Processeur : Intel HD Graphics</li>
<li>Mémoire : 4096MB 1333MHz bicanale DDR3 SDRAM [1x4096]</li>
<li>Disque dur : 320 Go Serial ATA (7200RPM)</li>
<li>Lecteur optique : 8X DVD+/-RW Disque dur avec logiciel uniquement</li>
<li>Connectivité sans fil : Minicarte Intel Pro Wireless 6200 (802.11a/g/Draft-n 2x2) - EMEA</li>
<li>Bluetooth : Dell sans fil 375 Bluetooth</li>
<li>Batterie principale : lithium-ion à 6 cellules (60W/HR)</li>
<li>Caméra : intégrée HD webcam avec Microphone</li>
<li>Clavier : Interne Rétroéclairé Clavier</li>
<li>Alimentation : Adaptateur CA de 65W à 3 câbles avec cordon d'alimentation de 1 m</li>
<li>Biométrique identification : Repose-poignets standard</li>
</ul>
<p>Prix : 1 299,00 € HT</p>
</div>
<div class="section" id="dell-latitude-e6410">
<h4>Dell Latitude E6410</h4>
<p>Le modèle « <a class="reference external" href="http://www1.euro.dell.com/content/products/featuresdetails.aspx/latitude-e6410?c=fr&amp;l=fr&amp;s=bsd&amp;cs=frbsdt1&amp;~lt=popup">Dell Latitude E6410</a> »</p>
<ul class="simple">
<li>Processeur : One Intel® Core™ i5-560M (2.66Ghz, 3M cache, Dual Core)</li>
<li>Système d'exploitation : Windows® 7 Professionnel authentique 32 Bit, Français - avec support</li>
<li>Microsoft® OFFICE 2010Microsoft® Office Starter 2010</li>
<li>Logiciel de protection Antivirus : Trend Micro Worry-Free Business Security Services, 15 mois</li>
<li>Back couverture : Blue LCD Back couverture</li>
<li>Écran LCD : Écran WXGA 14.1” Écran antireflet (1440X900)</li>
<li>Carte graphique : NVIDIA® NVS 3100M 512MB gDDR3 With Express Card</li>
<li>Mémoire : Mémoire bicanale DDR3 de 4Go (2x2Go) 1333 MHz</li>
<li>Disque dur : 500 Go Serial ATA (7200RPM)</li>
<li>Batterie principale : 6-cellules (60Wh) Lithium Ion high capacity Batterie avec ExpressCharge™</li>
<li>Caméra : intégrée HD webcam avec Microphone</li>
<li>Clavier : Français Azerty Retroéclairé</li>
<li>Lecteur optique : 8X DVD+/-RW Disque dur avec software</li>
<li>Bluetooth : Dell sans fil 375 Bluetooth</li>
<li>Alimentation : Europe - Adaptateur CA de 90W à 3 câbles avec cordon d'alimentation de 1 m (3 câbles)</li>
<li>Biométrique identification : Pavé tactile Standard</li>
</ul>
<p>Prix : 1324,00 € HT</p>
</div>
<div class="section" id="demande-de-devis-a-dell">
<h4>Demande de devis à Dell</h4>
<p>Sur le site internet de Dell, il est indiqué qu'il est possible d'avoir
le système d'exploitation Ubuntu. Cependant, le système de configuration
du site web de Dell, ne permet pas de sélectionner l'OS Ubuntu.</p>
<p>J'ai donc effectué ma demande par téléphone, la réponse est positive, ils
m'ont fait un devis avec Ubuntu comme OS.</p>
<ul class="simple">
<li>Base Options : Intel HD Graphics</li>
<li>Processor : One Intel Core i5-560M (2.66Ghz,3M,Dual Core)</li>
<li>Display : 15.6in Full High Definition (1920X1080) WLED LCD Panel</li>
<li>Repose-mains : Lecteur de carte à puce sans lecteur d'empreintes digitales</li>
<li>Webcam : Intégrée 2,0 mégapixels Webcam avec microphone</li>
<li>Capot LCD : Argent avec LAN sans fil et WAN sans fil</li>
<li>Mémoire : 4Go (2x2Go) 1333MHz DDR3 Bicanale</li>
<li>Disque dur : 320Go Serial ATA (7200tr/min)</li>
<li>Lecteur optique : 8X DVD+/-RW Lecteur</li>
<li>Power Cord : Euro 90W AC Adaptor 3 pin</li>
<li>Batterie : Principale 9 cellules 90Wh LI-ION</li>
<li>Labels : Intel Core Label I5 for VPro</li>
<li>Sans fil : EMEA Intel Pro Wireless 6200 (802.11 a/g/ Draft-n 2X2) Mini-carte</li>
<li>Clavier : Français Azerty rétroéclairé</li>
</ul>
<p>Logiciel</p>
<ul class="simple">
<li>Instant ON : Latitude ON Lecteur désactivé</li>
<li>OS Linux : Ubuntu Edition version 9.10</li>
<li>FOR ISRAEL AND FR Intel vPro Technology's advanced management features</li>
</ul>
<p>Service</p>
<ul class="simple">
<li>Base Warranty</li>
<li>3Yr Basic Warranty - Next Business Day - Minimum Warranty</li>
</ul>
<p>Prix : 1176 €</p>
</div>
<div class="section" id="bilan">
<h4>Bilan</h4>
<table border="1" class="docutils">
<colgroup>
<col width="33%" />
<col width="11%" />
<col width="31%" />
<col width="25%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Modèle</th>
<th class="head">Prix HT</th>
<th class="head">Les +</th>
<th class="head">Les -</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>Lenovo ThinkPad T410I CI5/480M-2.4G</td>
<td>1294 € HT</td>
<td>Matériel, clavier</td>
<td>Disque dur 5400 tours/min</td>
</tr>
<tr><td>Dell Latitude E5510</td>
<td>899 € HT</td>
<td>Le prix</td>
<td>&nbsp;</td>
</tr>
<tr><td>Dell Latitude E5410</td>
<td>969 € HT</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr><td>Dell Latitude E6510</td>
<td>1299 € HT</td>
<td>Définition 1920 X 1080px</td>
<td>&nbsp;</td>
</tr>
<tr><td>Dell Latitude E6510 avec OS Ubuntu</td>
<td>1176 € HT</td>
<td>Définition 1920 X 1080px, Ubuntu</td>
<td>&nbsp;</td>
</tr>
<tr><td>Dell Latitude E6410</td>
<td>1324 € HT</td>
<td>500 Go (7200RPM)</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="section" id="conclusion">
<h3>Conclusion</h3>
<p>Face à tant de difficulté pour trouver le modèle de ThinkPad que je veux, je pense
prendre le modèle « Dell Latitude E6510 avec OS Ubuntu ». D'autant plus que
chez Lenovo, ça me fait chier de devoir payer la &quot;taxe&quot; Microsoft pour un système
d'exploitation que je n'utilise pas.</p>
<img alt="/images/dell-latitude-e6510.jpg" src="/images/dell-latitude-e6510.jpg" />
</div>
<div class="section" id="mes-questions">
<h3>Mes questions</h3>
<ul class="simple">
<li>Où achetez vous vos Laptop Lenovo en France ?</li>
<li>Est-ce que la définition 1920 X 1080px est trop importante pour un 15&quot; ?</li>
</ul>
</div>
</div>
]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://stephane-klein.info/</uri>
    </author>
    <title type="html"><![CDATA[Extrait de Indignez Vous de Stéphane Hessel]]></title>
    <link rel="alternate" type="text/html" href="http://stephane-klein.info/blog/2011/02/13/extrait-de-indignez-vous-de-stéphane-hessel" />
    <id>http://stephane-klein.info/blog/2011/02/13/extrait-de-indignez-vous-de-stéphane-hessel</id>
    <updated>2011-02-13T10:00:00Z</updated>
    <published>2011-02-13T10:00:00Z</published>
    <category scheme="http://stephane-klein.info/" term="Livre" />
    <category scheme="http://stephane-klein.info/" term="Média" />
    <category scheme="http://stephane-klein.info/" term="Extrait" />
    <category scheme="http://stephane-klein.info/" term="Politique" />
    <summary type="html"><![CDATA[Extrait de Indignez Vous de Stéphane Hessel]]></summary>
    <content type="html" xml:base="http://stephane-klein.info/blog/2011/02/13/extrait-de-indignez-vous-de-stéphane-hessel"><![CDATA[<div class="document">
<p>Voici une extrait de la fin du livre <a class="reference external" href="http://fr.wikipedia.org/wiki/Indignez-vous_!">« Indignez Vous ! »</a> de
<a class="reference external" href="http://fr.wikipedia.org/wiki/St%C3%A9phane_Hessel">Stéphane Hessel</a> :</p>
<blockquote>
... Aussi, appelons-nous toujours à « une véritable insurrection pacifique
contre les moyens de comunicaton de masse qui ne proposent comme horizon
pour notre jeunesse que la consommation de masse, le mépris des
plus faibles et de la culture, l'amnésie généralisée et la compétition
à outrance de tous contre tous. »</blockquote>
<p>Je trouve que cette phrase est très explicite, elle exprime une idée que
j'ai toujours eu difficulté à formuler d'une manière concise.
Ça va dans le sens des propos de <a class="reference external" href="http://fr.wikipedia.org/wiki/Bernard_Stiegler">Bernard Stigler</a> …</p>
</div>
]]></content>
  </entry>
</feed>

