<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:wfw="http://wellformedweb.org/CommentAPI/"
     >
  <channel>
    <title>Le site web, le blog et les projets de Stéphane Klein</title>
    <link>http://stephane-klein.info/</link>
    <description>Your Blog's short description</description>
    <pubDate>dim., 05 févr. 2012 12:04:14 GMT</pubDate>
    <generator>Blogofile</generator>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Mon bilan de Agile Open France 2012</title>
      <link>http://stephane-klein.info/blog/2012/01/21/mon-bilan-de-agile-open-france-2012</link>
      <pubDate>sam., 21 janv. 2012 10:29:00 CET</pubDate>
      <category><![CDATA[Informatique]]></category>
      <category><![CDATA[Témoignage]]></category>
      <category><![CDATA[Agile]]></category>
      <category><![CDATA[Conférence]]></category>
      <category><![CDATA[Open Space]]></category>
      <category><![CDATA[Manifestation]]></category>
      <guid isPermaLink="true">http://stephane-klein.info/blog/2012/01/21/mon-bilan-de-agile-open-france-2012</guid>
      <description>Mon bilan de Agile Open France 2012</description>
      <content:encoded><![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:encoded>
    </item>
    <item>
      <title>Screencast de présentation de Tacot</title>
      <link>http://stephane-klein.info/blog/2011/10/01/screencast-de-présentation-de-tacot</link>
      <pubDate>sam., 01 oct. 2011 23:04:00 CEST</pubDate>
      <category><![CDATA[Informatique]]></category>
      <category><![CDATA[Outils]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Web-dev]]></category>
      <category><![CDATA[Tacot]]></category>
      <category><![CDATA[Screencast]]></category>
      <category><![CDATA[Développement]]></category>
      <category><![CDATA[Contributions]]></category>
      <guid isPermaLink="true">http://stephane-klein.info/blog/2011/10/01/screencast-de-présentation-de-tacot</guid>
      <description>Screencast de présentation de Tacot</description>
      <content:encoded><![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:encoded>
    </item>
    <item>
      <title>Idée d'une librairie basée sur Selenium pour tester des formulaires web</title>
      <link>http://stephane-klein.info/blog/2011/09/15/idée-d'une-librairie-basée-sur-selenium-pour-tester-des-formulaires-web</link>
      <pubDate>jeu., 15 sept. 2011 15:24:00 CEST</pubDate>
      <category><![CDATA[Informatique]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Selenium]]></category>
      <category><![CDATA[Réflexions]]></category>
      <category><![CDATA[Web-dev]]></category>
      <category><![CDATA[Développement]]></category>
      <category><![CDATA[Idée]]></category>
      <guid isPermaLink="true">http://stephane-klein.info/blog/2011/09/15/idée-d'une-librairie-basée-sur-selenium-pour-tester-des-formulaires-web</guid>
      <description>Idée d'une librairie basée sur Selenium pour tester des formulaires web</description>
      <content:encoded><![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:encoded>
    </item>
    <item>
      <title>Quelques notes en vrac</title>
      <link>http://stephane-klein.info/blog/2011/04/24/quelques-notes-en-vrac</link>
      <pubDate>dim., 24 avril 2011 14:46:00 CEST</pubDate>
      <category><![CDATA[Informatique]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[En vrac]]></category>
      <category><![CDATA[Resources]]></category>
      <category><![CDATA[Web-dev]]></category>
      <guid isPermaLink="true">http://stephane-klein.info/blog/2011/04/24/quelques-notes-en-vrac</guid>
      <description>Quelques notes en vrac</description>
      <content:encoded><![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:encoded>
    </item>
    <item>
      <title>jquery.expandBox plugin</title>
      <link>http://stephane-klein.info/blog/2011/04/23/jquery.expandbox-plugin</link>
      <pubDate>sam., 23 avril 2011 11:40:00 CEST</pubDate>
      <category><![CDATA[Informatique]]></category>
      <category><![CDATA[jQuery]]></category>
      <category><![CDATA[Javascript]]></category>
      <category><![CDATA[Web-dev]]></category>
      <category><![CDATA[Projets]]></category>
      <category><![CDATA[Contributions]]></category>
      <guid isPermaLink="true">http://stephane-klein.info/blog/2011/04/23/jquery.expandbox-plugin</guid>
      <description>jquery.expandBox plugin</description>
      <content:encoded><![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:encoded>
    </item>
    <item>
      <title>Choix d'un Laptop, Lenovo ThinkPad T410 ou Dell Latitude</title>
      <link>http://stephane-klein.info/blog/2011/02/15/choix-d'un-laptop,-lenovo-thinkpad-t410-ou-dell-latitude</link>
      <pubDate>mar., 15 févr. 2011 10:25:00 CET</pubDate>
      <category><![CDATA[Informatique]]></category>
      <category><![CDATA[Achat]]></category>
      <category><![CDATA[Matériel]]></category>
      <guid isPermaLink="true">http://stephane-klein.info/blog/2011/02/15/choix-d'un-laptop,-lenovo-thinkpad-t410-ou-dell-latitude</guid>
      <description>Choix d'un Laptop, Lenovo ThinkPad T410 ou Dell Latitude</description>
      <content:encoded><![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:encoded>
    </item>
    <item>
      <title>Extrait de Indignez Vous de Stéphane Hessel</title>
      <link>http://stephane-klein.info/blog/2011/02/13/extrait-de-indignez-vous-de-stéphane-hessel</link>
      <pubDate>dim., 13 févr. 2011 10:00:00 CET</pubDate>
      <category><![CDATA[Livre]]></category>
      <category><![CDATA[Média]]></category>
      <category><![CDATA[Extrait]]></category>
      <category><![CDATA[Politique]]></category>
      <guid isPermaLink="true">http://stephane-klein.info/blog/2011/02/13/extrait-de-indignez-vous-de-stéphane-hessel</guid>
      <description>Extrait de Indignez Vous de Stéphane Hessel</description>
      <content:encoded><![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:encoded>
    </item>
    <item>
      <title>Pyramid est framework extensible mais pas directement Pluggable car il est sans opinion</title>
      <link>http://stephane-klein.info/blog/2011/01/22/pyramid-est-framework-extensible-mais-pas-directement-pluggable-car-il-est-sans-opinion</link>
      <pubDate>sam., 22 janv. 2011 12:10:00 CET</pubDate>
      <category><![CDATA[Informatique]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Pyramid]]></category>
      <category><![CDATA[Développement]]></category>
      <category><![CDATA[Web-dev]]></category>
      <guid isPermaLink="true">http://stephane-klein.info/blog/2011/01/22/pyramid-est-framework-extensible-mais-pas-directement-pluggable-car-il-est-sans-opinion</guid>
      <description>Pyramid est framework extensible mais pas directement Pluggable car il est sans opinion</description>
      <content:encoded><![CDATA[<div class="document">
<p>Voici un billet important concernant <a class="reference external" href="http://docs.pylonsproject.org/projects/pyramid/dev/">Pyramid</a> et la différence
entre « extensibility » et « pluggability » : <a class="reference external" href="http://pauleveritt.wordpress.com/2011/01/14/chris-mcdonough-on-pluggable-apps/">Chris McDonough on pluggable apps</a>.</p>
<p>Ce billet fait référence <a class="reference external" href="http://groups.google.com/group/pylons-discuss/msg/b19df600ddb8be3f">à un mail de Chris McDonough</a>.</p>
<p>Voici quelques extraits de ce mail :</p>
<blockquote>
<div class="line-block">
<div class="line">Pyramid doesn't provide enough &quot;rails&quot; to make it possible to
integrate truly honest-to-god, download-an-app-from-a-random-place
and-plug-it-in-to-create-a-system &quot;pluggable&quot; applications.</div>
<div class="line">Because Pyramid itself isn't opinionated (it doesn't mandate a
particular kind of database, it offers multiple ways to map URLs
to code, etc), it's unlikely that someone who creates something
&quot;application-like&quot; will be able to casually redistribute it
to J. Random Pyramid User and have it &quot;just work&quot; by asking him
to config.include a function from the package.</div>
<div class="line">This is particularly true of very high level components such
as blogs, wikis, twitter clones, commenting systems, etc.</div>
<div class="line">The &quot;integrator&quot; (the Pyramid developer who has downloaded a
package advertised as a &quot;pluggable app&quot;) will almost certainly
have made different choices about e.g. what type of persistence
system he's using, and for the integrator to appease the
requirements of the &quot;pluggable application&quot;, he may be required
to set up a different database, make changes to his own code
to prevent his application from &quot;shadowing&quot; the pluggable
app (or vice versa), and any other number of arbitrary
changes.</div>
</div>
</blockquote>
<ul class="simple">
<li>D'un point de vue technique, <a class="reference external" href="http://docs.pylonsproject.org/projects/pyramid/dev/">Pyramid</a> est un framework <a class="reference external" href="http://docs.pylonsproject.org/projects/pyramid/dev/designdefense.html?highlight=opinion#pyramid-provides-too-few-rails">sans opinion</a> :<ul>
<li>choisissez <strong>la couche modèle</strong> que vous voulez : <a class="reference external" href="http://www.sqlalchemy.org/">SQLAlchemy</a> , <a class="reference external" href="http://www.zodb.org/">ZODB</a> , <a class="reference external" href="http://couchdbkit.org/">Couchdbkit</a> …</li>
<li>choisissez <strong>le moteur de template</strong> que vous voulez : <a class="reference external" href="http://www.makotemplates.org/">Mako</a> , <a class="reference external" href="http://jinja.pocoo.org/">Jinja2</a> , <a class="reference external" href="http://chameleon.repoze.org/">Chameleon</a> …</li>
<li>configurez <strong>le mode de routage d'url</strong> que vous voulez : <a class="reference external" href="http://docs.pylonsproject.org/projects/pyramid/dev/narr/urldispatch.html">URLDispatch</a> , <a class="reference external" href="http://docs.pylonsproject.org/projects/pyramid/dev/narr/traversal.html">Traversal</a> …</li>
<li>…</li>
</ul>
</li>
<li>Au niveau &quot;fonctionnel&quot; aussi <a class="reference external" href="http://docs.pylonsproject.org/projects/pyramid/dev/">Pyramid</a> est sans opinion :<ul>
<li>choisissez les urls que vous voulez</li>
<li>choisissez les modèles de template que vous voulez</li>
<li>choisissez les principes de fonctionnement de votre application comme vous
voulez…</li>
</ul>
</li>
</ul>
<p>Pour toutes ces raisons, le framework <a class="reference external" href="http://docs.pylonsproject.org/projects/pyramid/dev/">Pyramid</a> n'est pas directement &quot;Pluggable&quot;.</p>
<blockquote>
For this reason, we claim that Pyramid has &quot;extensible&quot; applications,
not pluggable applications.</blockquote>
<p><a class="reference external" href="http://docs.pylonsproject.org/projects/pyramid/dev/">Pyramid</a> permet de réaliser des applications extensibles mais le
framework n'est pas en lui même &quot;Pluggable&quot;.</p>
<p>Dans cet extrait, on a l'impression que <a class="reference external" href="http://docs.pylonsproject.org/projects/pyramid/dev/">Pyramid</a> ne permet pas de créer des applications
&quot;Pluggable&quot;, mais cela ne correpond pas à ce qu'explique le mail (il faut
lire la suite du mail).</p>
<p>Autre extrait :</p>
<blockquote>
Any Pyramid application can be extended without forking it as long
as its configuration statements have been composed into things
that can be pulled in via &quot;config.include&quot;.</blockquote>
<p>Dit autrement : les outils fournis par <a class="reference external" href="http://docs.pylonsproject.org/projects/pyramid/dev/">Pyramid</a> permettent de réaliser
des applications extensibles, elles peuvent être fortement modifié sans
avoir besoin de les forker.</p>
<p>Bien souvent, même dans des applications biens développées en programmation
orienté objet, il est nécessaire de modifier une classe A utilisée par une autres
classes B. Pour que la classe B utilise votre nouvelle classe A, vous êtes
obligé d'effectuer des changements dans le code source de l'application…
par conséquent vous êtes obligé de forker.</p>
<p>Grâce à la <a class="reference external" href="http://docs.pylonsproject.org/projects/pyramid/dev/narr/zca.html#index-0">Zope Component Architecture</a> (ZCA)
vous pouvez effectuer cette modification sans modifier le code source de
l'application, il suffit de lui dire d'utiliser une autre classe via le
système de configuration de la ZCA.</p>
<p>Autre extrait :</p>
<blockquote>
Truly pluggable applications need to be created at a much higher level
than a web framework, I fear, as no web framework can offer enough
constraints to really make them &quot;work out of the box&quot;.</blockquote>
<p>En effet, il est possible (sera possible) de trouver des plugins pour
des applications (basées sur le framework <a class="reference external" href="http://docs.pylonsproject.org/projects/pyramid/dev/">Pyramid</a> ) et non pas directement
des plugins basés sur le framework <a class="reference external" href="http://docs.pylonsproject.org/projects/pyramid/dev/">Pyramid</a> .</p>
<p>Les applications devront faire des choix / avoir des opinions (template,
couches modèles…), cela permettra la mise à disposition de plugins
facilement installables.</p>
<p>D'un point de vu personnel, c'est ce type de choix que j'ai fait au sein
de la société <a class="reference external" href="http://www.is-webdesign.com">IS-Webdesign</a> où je travaille.
Pour pouvoir réaliser une application facilement
extensible et mettre en place un système de plugins, j'ai choisi le
framework <a class="reference external" href="http://docs.pylonsproject.org/projects/pyramid/dev/">Pyramid</a> (avant cela <a class="reference external" href="http://bfg.repoze.org/">Repoze BFG</a> ).</p>
<p>Autre extrait :</p>
<blockquote>
It would be a noble goal to build an application with Pyramid that
provides these constraints and which truly does offer a way to plug
in applications (Joomla, Plone, Drupal come to mind).</blockquote>
<p>Intéressant, je suis curieux de voir quand va apparaitre la première
application de ce type. À noter que j'ai déjà vu des mails à propos de
ce type de projet sur la mailing list de <a class="reference external" href="http://lists.repoze.org/pipermail/repoze-dev/">Repoze</a> (mais je ne sais plus où).</p>
<p>C'est à ce niveau qu'intervient l'équipe du <a class="reference external" href="http://turbogears.org/">TurboGears</a> qui
a décidé aussi de <a class="reference external" href="http://groups.google.com/group/pylons-devel/browse_thread/thread/1eefc8c26e6cfbf1#">rejoindre le mouvement Pylons…</a> et plus particulièrement Pyramid.
Le but de TurboGears est justement d'avoir des &quot;opinions&quot; et par conséquent
de permettre la mise à disposition de plugins.</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Solution simple d'hébergement d'application web Python ?</title>
      <link>http://stephane-klein.info/blog/2011/01/20/solution-simple-d'hébergement-d'application-web-python-?</link>
      <pubDate>jeu., 20 janv. 2011 11:10:00 CET</pubDate>
      <category><![CDATA[Informatique]]></category>
      <category><![CDATA[Hébergement]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Ruby]]></category>
      <category><![CDATA[Web-dev]]></category>
      <category><![CDATA[Développement]]></category>
      <category><![CDATA[Admin’Sys]]></category>
      <guid isPermaLink="true">http://stephane-klein.info/blog/2011/01/20/solution-simple-d'hébergement-d'application-web-python-?</guid>
      <description>Solution simple d'hébergement d'application web Python ?</description>
      <content:encoded><![CDATA[<div class="document">
<p>Je rêve de quelque chose comme <a class="reference external" href="http://heroku.com/">Heroku</a>.</p>
<div class="section" id="qu-est-ce-que-heroku">
<h3>Qu'est ce que « Heroku » ?</h3>
<p>C'est une solution rapide de déploiement d'applications webs basées sur le langage <a class="reference external" href="http://fr.wikipedia.org/wiki/Ruby">Ruby</a> et plus précisément
<a class="reference external" href="http://fr.wikipedia.org/wiki/Ruby_on_Rails">Ruby On Rails</a>.</p>
<p>Voici un extrait de la présentation visible sur la page d'accueil du projet.</p>
<ol class="arabic">
<li><p class="first">Création d'une instance sur le serveur d'hébergement :</p>
<pre class="syntax-terminal brush: terminal;">
$ sudo gem install heroku
$ heroku create sushi
Created http://sushi.heroku.com/
git&#64;heroku.com:sushi.git
</pre>
<div class="line-block">
<div class="line">L'instance est créée sur le serveur, c'est ultra simple non ?</div>
<div class="line">Une seule commande pour faire cela : <tt class="docutils literal">heroku create sushi</tt>.</div>
</div>
</li>
<li><p class="first">Déploiement de votre application (le tout basé sur <tt class="docutils literal">git</tt>) :</p>
<pre class="syntax-terminal brush: terminal;">
$ git push heroku master
-----&gt; Heroku receiving push
-----&gt; Rails app detected
-----&gt; Launching..... done
       http://sushi.heroku.com deployed
</pre>
<p>Un simple <tt class="docutils literal">push</tt> permet de mettre à jour votre site web.</p>
</li>
<li><p class="first">Autres commandes de configuration :</p>
<pre class="syntax-terminal brush: terminal;">
$ heroku sharing: add fugu&#64;sushi.com
$ heroku domains: add sushi.com
$ heroku rake db:migrate
$ heroku db:push
$ heroku addons:add memcahed
</pre>
<p>Ici l'on peut voir comment il est facile d'ajouter un utilisateur, un domaine…</p>
</li>
</ol>
</div>
<div class="section" id="defaut-de-heroku">
<h3>Défaut de &quot;heroku&quot; ?</h3>
<p>À mes yeux <tt class="docutils literal">heroku</tt> a un défaut rédibitoire : la plateforme n'est pas libre.
Je ne peux pas l'installer sur mes serveurs.
Pour utiliser <tt class="docutils literal">heroku</tt> il est obligatoire de passer par leur plateforme l'hébergement.</p>
<p>Cependant, je vois <tt class="docutils literal">heroku</tt> comme un modèle à suivre.</p>
</div>
<div class="section" id="est-ce-que-cela-existe-en-python">
<h3>Est-ce que cela existe en Python ?</h3>
<p>Un exemple à suivre ? en effet et plusieurs solutions dans le monde Python ont vu le jour :</p>
<ul class="simple">
<li><a class="reference external" href="https://www.djangy.com/">djangy</a> pour du déploiement Django, vraiment semblable à <tt class="docutils literal">heroku</tt></li>
<li><a class="reference external" href="http://www.ep.io/">ep.io</a> pour du déploiement WSGI (« We take your Django, Flask, Pylons or other WSGI code »)</li>
<li><a class="reference external" href="http://gondor.io/">Gondor</a> pour du déploement Django</li>
</ul>
<p>Là aussi le problème est que ces solutions ne sont pas libres.</p>
</div>
<div class="section" id="une-solution-ouverte">
<h3>Une solution ouverte ?</h3>
<p>Oui, quelque chose d'ouvert existe, mais je ne l'ai pas encore testé : <a class="reference external" href="http://cloudsilverlining.org">Silver Lining</a>.</p>
<p>Je vous invite à lire la documentation, la solution est totalement libre.
C'est un système basé sur Ubuntu (j'aurais aimé Debian).</p>
<p>Faudrait vraiment que j'expérimente cela.</p>
</div>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Variables privées en Javascript</title>
      <link>http://stephane-klein.info/blog/2010/12/24/variables-privées-en-javascript</link>
      <pubDate>ven., 24 déc. 2010 13:53:00 CET</pubDate>
      <category><![CDATA[Informatique]]></category>
      <category><![CDATA[Javascript]]></category>
      <category><![CDATA[Développement]]></category>
      <category><![CDATA[Web-dev]]></category>
      <guid isPermaLink="true">http://stephane-klein.info/blog/2010/12/24/variables-privées-en-javascript</guid>
      <description>Variables privées en Javascript</description>
      <content:encoded><![CDATA[<div class="document">
<p>Voici-ci dessous un pattern Javascript que je rencontre souvent :</p>
<pre class="syntax-javascript brush: javascript;">
(function() {

    ...

})();
</pre>
<div class="line-block">
<div class="line">C'est seulement depuis ce matin que j'ai compris son utilité (honte à moi).</div>
<div class="line">Cela permet de définir des variables privées.</div>
</div>
<p>Voici un exemple de mise en oeuvre :</p>
<pre class="syntax-javascript brush: javascript;">
&lt;html&gt;
    &lt;head&gt;
    &lt;script type=&quot;text/javascript&quot;&gt;
        var public_var = 'public';
        var namespace = {};

        (function() {
            var private_var = 'private';
            namespace.foobar = function() {
                console.log('foobar function');
                console.log(private_var);
            }
        })();

        window.onload = function() {
            console.log('onload function');
            try {
                console.log(private_var);
            } catch(e) {
                console.log('private_var access deny here');
            }
            namespace.foobar();
        }
    &lt;/script&gt;
    &lt;/head&gt;
    &lt;body&gt;
    &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Le résultat dans la console est :</p>
<pre class="literal-block">
onload function
private_var access deny here
foobar function
private
</pre>
<p>La variable <tt class="docutils literal">private_var</tt> est accessible seulement depuis le code
qui se trouve dans :</p>
<pre class="syntax-javascript brush: javascript;">
(function() {

    ...

})();
</pre>
<p>Dans cet exemple, seul <tt class="docutils literal">namespace.foobar</tt> a accès à cette variable.</p>
</div>
]]></content:encoded>
    </item>
  </channel>
</rss>

