<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://blog.neolao.com/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Blog de neolao</title>
  <link>http://blog.neolao.com/</link>
  <atom:link href="http://blog.neolao.com/feed/rss2" rel="self" type="application/rss+xml"/>
  <description></description>
  <language>fr</language>
  <pubDate>Mon, 13 May 2013 15:44:43 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Serveur Jabber perso et gmail</title>
    <link>http://blog.neolao.com/post/2013/05/13/86-Serveur-Jabber-perso-et-gmail</link>
    <guid isPermaLink="false">urn:md5:386a3c24865e1e353b43449b3efe5adf</guid>
    <pubDate>Mon, 13 May 2013 20:13:00 +0200</pubDate>
    <dc:creator>neolao</dc:creator>
        <category>Linux</category>
            
    <description>&lt;p&gt;&lt;img src=&quot;http://blog.neolao.com/public/prosody.png&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; J'ai voulu installer mon propre serveur Jabber (peu importe la raison) et j'ai été confronté à un problème de communication avec Google Talk. Mais j'ai trouvé la solution&amp;nbsp;!&lt;/p&gt;    &lt;section&gt;
&lt;h1&gt;Le contexte&lt;/h1&gt;



&lt;p&gt;Il y a 2 logiciels qui ont l'air de se démarquer lorsqu'on veut installer un serveur Jabber&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.ejabberd.im/&quot; hreflang=&quot;en&quot; title=&quot;eJabberd&quot;&gt;ejabberd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://prosody.im/&quot; hreflang=&quot;en&quot; title=&quot;Prosody&quot;&gt;prosody&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;J'ai eu moins de soucis avec Prosody, mais mon problème n'est pas dépendant de ça.&lt;/p&gt;


&lt;p&gt;J'ai le domaine &lt;strong&gt;heunthep.com&lt;/strong&gt; déjà configuré sur un serveur et je veux installer le serveur Jabber sur un autre. La solution est d'utiliser des instructions DNS suivantes&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
_xmpp-client._tcp.heunthep.com. 3600 IN SRV 20 0 5222 jabber.heunthep.com.
_xmpp-server._tcp.heunthep.com. 3600 IN SRV 20 0 5269 jabber.heunthep.com.
&lt;/pre&gt;


&lt;p&gt;Le domaine &lt;strong&gt;jabber.heunthep.com&lt;/strong&gt; pointe évidemment sur serveur différent.&lt;/p&gt;


&lt;p&gt;C'est vérifiable avec &lt;strong&gt;dig&lt;/strong&gt;&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
dig -t SRV _xmpp-client._tcp.heunthep.com
&lt;/pre&gt;

&lt;/section&gt;



&lt;section&gt;
&lt;h1&gt;Le problème&lt;/h1&gt;



&lt;p&gt;Cette configuration marche bien. Je peux ajouter des contacts Jabber sans problème. J'ai essayé avec un compte &lt;a href=&quot;http://jappix.org/&quot; hreflang=&quot;en&quot; title=&quot;Jappix&quot;&gt;jappix&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Mais ça ne passe pas avec quelqu'un sur Google Talk. Et ça m'embête beaucoup :(&lt;/p&gt;

&lt;/section&gt;



&lt;section&gt;
&lt;h1&gt;La solution&lt;/h1&gt;



&lt;p&gt;La seule solution que j'ai trouvé, c'est que le domaine &lt;strong&gt;heunthep.com&lt;/strong&gt; pointe sur la même IP que le serveur Jabber. Je pense que Google ne prend pas en compte les instructions DNS.&lt;/p&gt;

&lt;/section&gt;
</description>
    
    
    
          <comments>http://blog.neolao.com/post/2013/05/13/86-Serveur-Jabber-perso-et-gmail#comment-form</comments>
      <wfw:comment>http://blog.neolao.com/post/2013/05/13/86-Serveur-Jabber-perso-et-gmail#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.neolao.com/feed/atom/comments/86</wfw:commentRss>
      </item>
    
  <item>
    <title>Générateur de playlist mp3</title>
    <link>http://blog.neolao.com/post/2013/03/17/85-G%C3%A9n%C3%A9rateur-de-playlist-mp3</link>
    <guid isPermaLink="false">urn:md5:1ec96231a21bc0399d527ff84601f92f</guid>
    <pubDate>Sun, 17 Mar 2013 02:10:00 +0100</pubDate>
    <dc:creator>neolao</dc:creator>
        <category>PHP</category>
            
    <description>&lt;p&gt;&lt;img src=&quot;http://blog.neolao.com/public/playlist.png&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; Oui je sais, ça fait plus d'un an que je n'ai pas écrit de billet. Le temps passe si vite.&lt;/p&gt;


&lt;p&gt;Je suis sur plusieurs projets en même temps, mais comme j'ai bien avancé sur celui là, je vais vous en parler. C'est un générateur de playlist de musiques.&lt;/p&gt;    &lt;section&gt;
&lt;h1&gt;Le besoin&lt;/h1&gt;



&lt;p&gt;On gère tous nos musiques de façons différentes. Je fonctionne surtout avec les genres et les étoiles en créant des listes automatiques.&lt;/p&gt;


&lt;p&gt;Le problème c'est que les logiciels gèrent eux mêmes les étoiles (ou notes, ou popularité, etc.) et c'est bien embêtant car je lis ma bibliothèque sur plusieurs supports.&lt;/p&gt;


&lt;p&gt;Je me suis aussi rendu compte que mes fichiers ne contenaient pas les informations que je voulais alors que je le croyais. C'est encore la faute aux logiciels (&lt;a href=&quot;http://www.apple.com/itunes/&quot; hreflang=&quot;en&quot;&gt;iTunes&lt;/a&gt;, &lt;a href=&quot;http://getsongbird.com/&quot; hreflang=&quot;en&quot;&gt;Songbird&lt;/a&gt;, &lt;a href=&quot;http://getnightingale.com/&quot; hreflang=&quot;en&quot;&gt;Nightingale&lt;/a&gt;, &lt;a href=&quot;http://banshee.fm/&quot; hreflang=&quot;en&quot;&gt;Banshee&lt;/a&gt;, &lt;a href=&quot;http://xbmc.org/&quot; hreflang=&quot;en&quot;&gt;XBMC&lt;/a&gt;, etc.) qui ne mettent pas (ou pas toujours) à jour les fichiers.&lt;/p&gt;

&lt;/section&gt;


&lt;section&gt;
&lt;h1&gt;La solution&lt;/h1&gt;



&lt;p&gt;Là où les logiciels ne sont pas d'accord, c'est sur la gestion des étoiles. D'ailleurs, même les éditeurs de tag &lt;a href=&quot;http://en.wikipedia.org/wiki/ID3&quot; hreflang=&quot;en&quot;&gt;ID3&lt;/a&gt; permettent de modifier la popularité dans différents formats. J'ai opté pour la notation de &lt;a href=&quot;http://www.mediamonkey.com/&quot; hreflang=&quot;en&quot;&gt;Media Monkey&lt;/a&gt; parce que c'est celle immédiatement comprise par &lt;a href=&quot;http://xbmc.org/&quot; hreflang=&quot;en&quot;&gt;XBMC&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;J'utilise le logiciel &lt;a href=&quot;http://www.jthink.net/jaikoz/&quot; hreflang=&quot;en&quot;&gt;Jaikoz&lt;/a&gt; pour tagger et compléter mes fichiers.
J'ai donc maintenant des fichiers qui contiennent toutes les infos nécessaires pour créer mes listes de lecture. Et &lt;a href=&quot;http://xbmc.org/&quot; hreflang=&quot;en&quot;&gt;XBMC&lt;/a&gt; gère ses listes intelligentes sans problème.&lt;/p&gt;


&lt;p&gt;Mais ce n'est pas suffisant car je lis ma bibliothèque aussi sur le lecteur &lt;a href=&quot;http://www.sandisk.com/products/music-video-players/clip-plus/&quot; hreflang=&quot;en&quot;&gt;Sansa Clip+&lt;/a&gt;. Afin que ça fonctionne correctement, je dois créer des &lt;a href=&quot;http://en.wikipedia.org/wiki/M3U&quot; hreflang=&quot;en&quot;&gt;M3U&lt;/a&gt; avec des chemins relatifs qui contiennent des séparateurs de dossier Windows ...&lt;/p&gt;

&lt;/section&gt;


&lt;section&gt;
&lt;h1&gt;Le projet&lt;/h1&gt;



&lt;p&gt;Ne trouvant pas mon bonheur dans les lecteurs musicaux (ou sinon j'ai mal cherché), je génère moi-même les playlists utilisant les meta-données des fichiers.&lt;/p&gt;


&lt;p&gt;Comme base, j'ai choisi un script Perl bien connu&amp;nbsp;: &lt;a href=&quot;http://www.sno.phy.queensu.ca/~phil/exiftool/&quot; hreflang=&quot;en&quot;&gt;ExifTool&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Pour aller vite, j'ai codé le générateur en PHP. Ça ne m'a pas pris longtemps, vous verrez les commits.&lt;/p&gt;


&lt;p&gt;Voilà le dépôt&amp;nbsp;: &lt;a href=&quot;https://github.com/neolao/music-playlist-generator&quot;&gt;https://github.com/neolao/music-playlist-generator&lt;/a&gt;&lt;/p&gt;

&lt;/section&gt;


&lt;section&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;



&lt;p&gt;J'ai fait ce projet pour mes besoins et je sais qu'il manque des choses, comme la normalisation de certains meta-données. Ça ne fonctionne probablement pas sur Windows à cause des séparateurs de dossier codé en &lt;code&gt;/&lt;/code&gt; au lieu de &lt;code&gt;DIRECTORY_SEPARATOR&lt;/code&gt; mais aussi parce que les chemins absolus commencent par &lt;code&gt;C:\ &lt;/code&gt;. Bref, j'avais surtout pas envie :)&lt;/p&gt;


&lt;p&gt;N'hésitez pas à me faire des suggestions.&lt;/p&gt;

&lt;/section&gt;
</description>
    
    
    
          <comments>http://blog.neolao.com/post/2013/03/17/85-G%C3%A9n%C3%A9rateur-de-playlist-mp3#comment-form</comments>
      <wfw:comment>http://blog.neolao.com/post/2013/03/17/85-G%C3%A9n%C3%A9rateur-de-playlist-mp3#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.neolao.com/feed/atom/comments/85</wfw:commentRss>
      </item>
    
  <item>
    <title>La curation avec Google Reader</title>
    <link>http://blog.neolao.com/post/2011/11/10/82-La-curation-avec-Google-Reader</link>
    <guid isPermaLink="false">urn:md5:ac11618a1646ad60cee62c6ce05ccae2</guid>
    <pubDate>Sat, 12 Nov 2011 23:09:00 +0100</pubDate>
    <dc:creator>neolao</dc:creator>
        <category>Divers</category>
            
    <description>&lt;p&gt;&lt;img src=&quot;http://blog.neolao.com/public/curation.png&quot; alt=&quot;curation&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; Avec les récents changements de &lt;a href=&quot;http://reader.google.com&quot;&gt;Google Reader&lt;/a&gt;, on ne peut plus créer des flux avec des tags.
C'est ce que j'utilisais pour partager ma veille.
J'utilisais aussi le snippet Javascript très pratique pour partager une URL depuis le navigateur.&lt;/p&gt;    &lt;section&gt;
&lt;h1&gt;Comment partager ?&lt;/h1&gt;


&lt;p&gt;Alors avec tout ça, j'ai cherché un autre moyen de partager mes liens. On peut toujours utiliser &lt;a href=&quot;http://reader.google.com&quot;&gt;Google Reader&lt;/a&gt; en créant des thèmes. Ils n'ont pas retiré la possibilité de tagger un article, donc je peux fonctionner comme avant.&lt;/p&gt;


&lt;p&gt;D'ailleurs, je ne connais qu'une seule application synchronisée avec &lt;a href=&quot;http://reader.google.com&quot;&gt;Google Reader&lt;/a&gt; qui permet de tagger un article&amp;nbsp;: &lt;a href=&quot;http://itunes.apple.com/fr/app/mr.-reader/id412874834&quot;&gt;Mr Reader&lt;/a&gt;. Et c'est une application iPad, je n'ai rien trouvé en desktop.&lt;/p&gt;


&lt;p&gt;Concernant le partage d'une URL qui ne se retrouve pas dans mes flux de veille, j'ai choisi &lt;a href=&quot;http://delicious.com&quot;&gt;Delicious&lt;/a&gt;. Il y a pas mal d'extensions de navigateur et j'ai même trouvé une application iPad qui permet de partager depuis Safari&amp;nbsp;: &lt;a href=&quot;http://itunes.apple.com/us/app/dbd-delicious-bookmark-discovery/id385468864&quot;&gt;DBD Delicious Bookmark Discovery&lt;/a&gt;.&lt;/p&gt;
&lt;/section&gt;


&lt;section&gt;
&lt;h1&gt;Fusionner les sources&lt;/h1&gt;



&lt;p&gt;Pour la pérénité, j'ai créé mes propres URLs de flux RSS. Ça me permet de choisir mes sources d'information et d'en changer quand ça ne me convient plus.&lt;/p&gt;


&lt;p&gt;Voici par exemple un flux qui est généré par un thème Google Reader&amp;nbsp;: &lt;a href=&quot;http://www.google.com/reader/public/atom/user/17526587290271802812/bundle/css&quot; title=&quot;http://www.google.com/reader/public/atom/user/17526587290271802812/bundle/css&quot;&gt;http://www.google.com/reader/public...&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Et un flux généré par des tags Delicious&amp;nbsp;: &lt;a href=&quot;http://feeds.delicious.com/v2/rss/neolao/news+css&quot; title=&quot;http://feeds.delicious.com/v2/rss/neolao/news+css&quot;&gt;http://feeds.delicious.com/v2/rss/n...&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Ensuite il me suffit simplement de coder un petit lecteur de flux et de fusionner les acticles. Je l'ai fait rapidement avec Zend Framework sans vraiment chercher les alternatives. Et voilà ce que ça donne&amp;nbsp;: &lt;a href=&quot;http://feed.neolao.com/css&quot; title=&quot;http://feed.neolao.com/css&quot;&gt;http://feed.neolao.com/css&lt;/a&gt;&lt;/p&gt;

&lt;/section&gt;


&lt;section&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;



&lt;p&gt;C'est pour l'instant assez confortable de partager un article, heureusement qu'il existe &lt;a href=&quot;http://itunes.apple.com/fr/app/mr.-reader/id412874834&quot;&gt;Mr Reader&lt;/a&gt;. Si j'utilisais exclusivement &lt;a href=&quot;http://delicious.com&quot;&gt;Delicious&lt;/a&gt;, je perdrai le contenu des articles dans mes flux générés car &lt;a href=&quot;http://delicious.com&quot;&gt;Delicious&lt;/a&gt; ne garde que les URLs et je n'écris pas de description.&lt;/p&gt;


&lt;p&gt;Je ne connais pas d'alternative à &lt;a href=&quot;http://reader.google.com&quot;&gt;Google Reader&lt;/a&gt; qui pourrait le remplacer. Je consulte mes flux depuis un téléphone, un PC et un iPad. Il faut donc que tout soit synchronisé et confortable.&lt;/p&gt;


&lt;p&gt;Et voilà la liste de tous mes flux générés&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://feed.neolao.com/apple&quot; title=&quot;http://feed.neolao.com/apple&quot;&gt;http://feed.neolao.com/apple&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feed.neolao.com/css&quot; title=&quot;http://feed.neolao.com/css&quot;&gt;http://feed.neolao.com/css&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feed.neolao.com/design&quot; title=&quot;http://feed.neolao.com/design&quot;&gt;http://feed.neolao.com/design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feed.neolao.com/dev&quot; title=&quot;http://feed.neolao.com/dev&quot;&gt;http://feed.neolao.com/dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feed.neolao.com/flash&quot; title=&quot;http://feed.neolao.com/flash&quot;&gt;http://feed.neolao.com/flash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feed.neolao.com/game&quot; title=&quot;http://feed.neolao.com/game&quot;&gt;http://feed.neolao.com/game&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feed.neolao.com/javascript&quot; title=&quot;http://feed.neolao.com/javascript&quot;&gt;http://feed.neolao.com/javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feed.neolao.com/joke&quot; title=&quot;http://feed.neolao.com/joke&quot;&gt;http://feed.neolao.com/joke&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feed.neolao.com/linux&quot; title=&quot;http://feed.neolao.com/linux&quot;&gt;http://feed.neolao.com/linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feed.neolao.com/manga&quot; title=&quot;http://feed.neolao.com/manga&quot;&gt;http://feed.neolao.com/manga&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feed.neolao.com/misc&quot; title=&quot;http://feed.neolao.com/misc&quot;&gt;http://feed.neolao.com/misc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feed.neolao.com/music&quot; title=&quot;http://feed.neolao.com/music&quot;&gt;http://feed.neolao.com/music&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feed.neolao.com/phone&quot; title=&quot;http://feed.neolao.com/phone&quot;&gt;http://feed.neolao.com/phone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feed.neolao.com/php&quot; title=&quot;http://feed.neolao.com/php&quot;&gt;http://feed.neolao.com/php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feed.neolao.com/tablet&quot; title=&quot;http://feed.neolao.com/tablet&quot;&gt;http://feed.neolao.com/tablet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feed.neolao.com/video&quot; title=&quot;http://feed.neolao.com/video&quot;&gt;http://feed.neolao.com/video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feed.neolao.com/web&quot; title=&quot;http://feed.neolao.com/web&quot;&gt;http://feed.neolao.com/web&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Evidemment, il arrive qu'un article se retrouve dans plusieurs tags.&lt;/p&gt;

&lt;/section&gt;
</description>
    
    
    
          <comments>http://blog.neolao.com/post/2011/11/10/82-La-curation-avec-Google-Reader#comment-form</comments>
      <wfw:comment>http://blog.neolao.com/post/2011/11/10/82-La-curation-avec-Google-Reader#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.neolao.com/feed/atom/comments/82</wfw:commentRss>
      </item>
    
  <item>
    <title>Textile Wiki</title>
    <link>http://blog.neolao.com/post/2011/07/08/81-Textile-Wiki</link>
    <guid isPermaLink="false">urn:md5:18fc38b8289f80f8df707949866f6068</guid>
    <pubDate>Fri, 08 Jul 2011 21:48:00 +0200</pubDate>
    <dc:creator>neolao</dc:creator>
        <category>PHP</category>
            
    <description>&lt;p&gt;&lt;img src=&quot;http://blog.neolao.com/public/textilewiki.png&quot; alt=&quot;textilewiki&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; Textile est une syntaxe wiki qui est plutôt facile à apprendre. Je l'utilise régulièrement sur &lt;a href=&quot;http://www.redmine.org/&quot; hreflang=&quot;en&quot; title=&quot;redmine&quot;&gt;redmine&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Ce que j'ai voulu créer avec ce projet, c'est un site wiki qu'on gère facilement sans grande configuration. Il en existe plein avec ce but, mais voici le mien.&lt;/p&gt;    &lt;section&gt;
&lt;h1&gt;Principe&lt;/h1&gt;


&lt;p&gt;L'idée est de pouvoir gérer ses pages, ses dossiers et ses fichiers annexes comme dans un explorateur de fichiers.&lt;/p&gt;


&lt;p&gt;J'ai maintenu pendant longtemps une documentation personnelle en texte brute. J'avais des fichiers snippets, des séquences d'installation, de configuration ou encore des dossiers d'API doc que je téléchargeais. Bref, c'était un gros bazar en ligne avec une exploration Apache.&lt;/p&gt;


&lt;p&gt;Finalement, ce que je voulais, c'était juste rendre ça plus joli :)&lt;/p&gt;
&lt;/section&gt;


&lt;section&gt;
&lt;h1&gt;Générer les pages HTML&lt;/h1&gt;


&lt;p&gt;A partir de mon dossier contenant toutes sortes de fichiers, je crée un site dans lequel on peut naviguer. En fait, tous les fichiers avec l'extension &lt;code&gt;.wiki&lt;/code&gt; sont convertis en HTML à l'affichage.&lt;/p&gt;


&lt;p&gt;Tout le fonctionnement du site se résume à un dossier &lt;code&gt;.wiki/&lt;/code&gt; et un fichier &lt;code&gt;.htaccess&lt;/code&gt; à mettre à la racine du site. Et ça ne marche qu'avec PHP et Apache.&lt;/p&gt;
&lt;/section&gt;


&lt;section&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;


&lt;p&gt;C'est avant tout un wiki adapté à mes besoins qui va peut-être satisfaire d'autres personnes comme moi.&lt;/p&gt;


&lt;p&gt;Toutes les infos&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le site&amp;nbsp;: &lt;a href=&quot;http://textilewiki.com/fr&quot; title=&quot;http://textilewiki.com/fr&quot;&gt;http://textilewiki.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;le dépôt Git&amp;nbsp;: &lt;a href=&quot;http://github.com/neolao/wiki&quot; hreflang=&quot;en&quot; title=&quot;http://github.com/neolao/wiki&quot;&gt;http://github.com/neolao/wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;une demo avec le thème par défaut&amp;nbsp;: &lt;a href=&quot;http://demo.textilewiki.com/theme-default/&quot; hreflang=&quot;en&quot; title=&quot;http://demo.textilewiki.com/theme-default/&quot;&gt;http://demo.textilewiki.com/theme-dark/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;une demo avec le thème &lt;em&gt;dark&lt;/em&gt;&amp;nbsp;: &lt;a href=&quot;http://demo.textilewiki.com/theme-dark/&quot; hreflang=&quot;en&quot; title=&quot;http://demo.textilewiki.com/theme-dark/&quot;&gt;http://demo.textilewiki.com/theme-dark/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
</description>
    
    
    
          <comments>http://blog.neolao.com/post/2011/07/08/81-Textile-Wiki#comment-form</comments>
      <wfw:comment>http://blog.neolao.com/post/2011/07/08/81-Textile-Wiki#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.neolao.com/feed/atom/comments/81</wfw:commentRss>
      </item>
    
  <item>
    <title>Serveur local</title>
    <link>http://blog.neolao.com/post/2011/04/11/80-Serveur-local</link>
    <guid isPermaLink="false">urn:md5:d4d9bf87975554c4eaf1bcabd4d81682</guid>
    <pubDate>Mon, 11 Apr 2011 01:15:00 +0200</pubDate>
    <dc:creator>neolao</dc:creator>
        <category>Divers</category>
            
    <description>&lt;p&gt;&lt;img src=&quot;http://blog.neolao.com/public/vdiserver.png&quot; alt=&quot;vdiserver.png&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; Au départ, je pensais créer mon environnement de développement entièrement en ligne. J'ai mon serveur perso, je gère mes terminaux avec Screen et je code sous Vim.&lt;/p&gt;


&lt;p&gt;Mais la connexion internet n'est pas assez fiable. Il m'est arrivé de lagger sur ma connexion SSH et c'est très difficile de travailler quand le curseur ne suit pas. Alors je me suis rabattu sur un serveur local via &lt;a href=&quot;http://virtualbox.org&quot; hreflang=&quot;en&quot;&gt;VirtualBox&lt;/a&gt;.&lt;/p&gt;    &lt;section&gt;
&lt;h1&gt;VirtualBox&lt;/h1&gt;


&lt;p&gt;Je présente très rapidement ce qu'est &lt;a href=&quot;http://virtualbox.org&quot; hreflang=&quot;en&quot;&gt;VirtualBox&lt;/a&gt;. C'est un logiciel pour lancer un système d'exploitation dans une fenêtre.
Je vais donc m'en servir pour avoir un serveur Linux sur ma machine et travailler sur mes sites sans connexion internet.&lt;/p&gt;
&lt;/section&gt;


&lt;section&gt;
&lt;h1&gt;Intérêt&lt;/h1&gt;


&lt;p&gt;L'intérêt c'est d'avoir un environnement d'exécution très proche d'un serveur de production, car on peut avoir besoin de logiciels particuliers qu'on ne peut pas installer sur son Mac ou son Windows (ou sinon c'est plus compliqué).&lt;/p&gt;
&lt;/section&gt;



&lt;section&gt;
&lt;h1&gt;Personnalisation d'un disque virtuel&lt;/h1&gt;


&lt;p&gt;Je veux que mes fichiers soient sur ma machine et non dans le disque virtuel. VirtualBox permet de créer des dossiers partagés qu'on monte dans le système virtualisé.&lt;/p&gt;


&lt;p&gt;A partir de là, j'ai tout ce qu'il faut. Je peux me connecter en SSH sur ma machine virtuelle et tout configurer. Mais je voulais aller plus loin, dans l'idée de partager cet environnement de travail.&lt;/p&gt;


&lt;p&gt;J'ai alors paramêtré les différents logiciels pour qu'ils aient leurs dossiers de configuration dans le dossier partagé. Ça permet d'avoir un disque virtuel qui n'a pas de données personnelles, tout est dans le dossier partagé, donc sur l'ordinateur.&lt;/p&gt;


&lt;p&gt;Par exemple, mes VirtualHost de Apache ni mes bases de données MySQL ne sont dans le disque virtuel.&lt;/p&gt;
&lt;/section&gt;



&lt;section&gt;
&lt;h1&gt;Le projet VDI Server&lt;/h1&gt;


&lt;p&gt;Je fonctionne avec cet environnement de travail depuis un petit moment déjà. C'est pourquoi j'ai décidé (pouf comme ça) de partager ma configuration.&lt;/p&gt;


&lt;p&gt;Donc, un site est né avec tout le nécessaire à télécharger&amp;nbsp;: &lt;a href=&quot;http://vdi-server.com&quot; hreflang=&quot;en&quot;&gt;http://vdi-server.com&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;J'ai écrit un premier didacticiel pour l'installation mais il devrait y en avoir d'autres. Les bidouilleurs vont très vite voir comment ça marche, c'est plutôt simple mais il faut le faire. J'ai choisi d'utiliser une Debian parce que je suis habitué.&lt;/p&gt;


&lt;p&gt;L'avantage, c'est aussi d'avoir des fichiers qu'on peut retélécharger si on casse un peu son serveur virtuel après des manipulations dangeureuses :)&lt;/p&gt;
&lt;/section&gt;
</description>
    
    
    
          <comments>http://blog.neolao.com/post/2011/04/11/80-Serveur-local#comment-form</comments>
      <wfw:comment>http://blog.neolao.com/post/2011/04/11/80-Serveur-local#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.neolao.com/feed/atom/comments/80</wfw:commentRss>
      </item>
    
  <item>
    <title>Nexus One</title>
    <link>http://blog.neolao.com/post/2010/02/22/79-Nexus-One</link>
    <guid isPermaLink="false">urn:md5:f11a975ad2d2de7ce47a3da100980b30</guid>
    <pubDate>Sat, 20 Mar 2010 17:12:00 +0100</pubDate>
    <dc:creator>neolao</dc:creator>
        <category>Divers</category>
            
    <description>&lt;p&gt;&lt;img src=&quot;http://blog.neolao.com/public/neonexus/neonexus.png&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt;Après presque 2 ans passé sur l'iPhone, je me décide enfin à changer de téléphone pour le Nexus One. Ca va faire 1 mois que je l'ai et ... c'est intéressant.&lt;/p&gt;    &lt;section&gt;
&lt;h1&gt;L'appareil&lt;/h1&gt;


&lt;p&gt;Je ne vais pas entrer dans les détails du matériel, mais je vais plutôt vous parler de la manipulation de l'engin. C'est à peu près les mêmes dimensions que l'iPhone, donc la taille me convient.&lt;/p&gt;

&lt;section&gt;
&lt;h1&gt;L'écran&lt;/h1&gt;


&lt;p&gt;L'écran est évidemment tactile et multipoint mais de moins bonne qualité comparé à celui de l'iPhone. Je n'arrive toujours pas à bien viser pour cliquer sur un lien. Parfois, c'est au centre de mon doigt comme prévu, sinon c'est en bas de mon doigt. Même quand je vise bien et qu'il y a l'indicateur de sélection, ça ne clique pas toujours, il faut que j'insiste un peu plus.&lt;/p&gt;

&lt;/section&gt;


&lt;section&gt;
&lt;h1&gt;Les 4 boutons du bas&lt;/h1&gt;


&lt;p&gt;&lt;a href=&quot;http://blog.neolao.com/public/neonexus/boutons.png&quot;&gt;&lt;img src=&quot;http://blog.neolao.com/public/neonexus/.boutons_s.jpg&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt;&lt;/a&gt;
Au début, je me demandais à quoi pouvait bien servir les boutons du bas, si toute l'interface est utilisable en tactile. Bah en fait non, les boutons &lt;strong&gt;&quot;retour&quot;&lt;/strong&gt;, &lt;strong&gt;&quot;menu&quot;&lt;/strong&gt;, &lt;strong&gt;&quot;home&quot;&lt;/strong&gt; et &lt;strong&gt;&quot;recherche&quot;&lt;/strong&gt; sont indispensables.&lt;/p&gt;


&lt;p&gt;Il n'y a pas toujours ces fonctionnalités dans l'interface.
Le problème, c'est qu'ils en ont fait des boutons tactiles et je ne vois pas l'intérêt parce que c'est toujours affiché. En plus, ça marche mal, ça détecte mal mon doigt.&lt;/p&gt;


&lt;p&gt;Bon, avec le temps, je sais comment appuyer, mais ça reste tout pourri. Parfois, j'appuye sur &lt;strong&gt;&quot;home&quot;&lt;/strong&gt; par erreur en voulant faire un espace sur le clavier tactile.&lt;/p&gt;
&lt;/section&gt;


&lt;section&gt;
&lt;h1&gt;Le trackball&lt;/h1&gt;


&lt;p&gt;Quant au trackball, j'ai trouvé quelques avantages qui ne justifient pas franchement son existence.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;il peut permettre de cliquer sur le bon lien quand c'est trop petit&lt;/li&gt;
&lt;li&gt;il peut manipuler le curseur dans un champ de texte, pratique pour corriger en plein milieu d'un paragraphe&lt;/li&gt;
&lt;li&gt;il s'illumine quand l'écran est éteint pour les notifications&lt;/li&gt;
&lt;li&gt;il peut servir pour les jeux&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En fait, comme l'écran est un peu nul, le trackball compense le manque de précision.&lt;/p&gt;

&lt;/section&gt;


&lt;section&gt;
&lt;h1&gt;L'appareil photo&lt;/h1&gt;


&lt;p&gt;L'appareil photo marche très bien je trouve. Quand une appli veut l'utiliser, ça s'allume très rapidement.&lt;/p&gt;


&lt;p&gt;Il y a un flash intégré et on peut aussi capturer des vidéos. La qualité est meilleure que celui de l'iPhone. Et l'autofocus, ça change tout&amp;nbsp;!&lt;/p&gt;

&lt;/section&gt;



&lt;section&gt;
&lt;h1&gt;La fonction téléphone, la 3G et le GPS&lt;/h1&gt;


&lt;p&gt;La réduction du bruit est excellente. C'est surtout pour votre interlocuteur, évidemment.&lt;/p&gt;


&lt;p&gt;J'ai testé en me mettant relativement près des enceintes avec de la musique, l'autre n'entend rien du tout.&lt;/p&gt;


&lt;p&gt;Je ne capte pas moins bien la 3G, contrairement à ce que j'ai pu lire. Par contre, le GPS a l'air moins précis que mon iPhone 3G. Je n'ai pas comparé à l'extérieur, mais à l'intérieur, je vois une petite différence.&lt;/p&gt;


&lt;/section&gt;




&lt;/section&gt;



&lt;section&gt;
&lt;h1&gt;Android&lt;/h1&gt;


&lt;p&gt;J'ai compris qu'on pouvait installer et personnaliser à peu près tout sur Android. Il y a des termes qu'il faut retenir&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le &lt;strong&gt;lock screen&lt;/strong&gt; désigne l'écran où l'on débloque l'appareil&lt;/li&gt;
&lt;li&gt;Le &lt;strong&gt;home screen&lt;/strong&gt; désigne l'écran qui lance les applications avec des icônes&lt;/li&gt;
&lt;/ul&gt;

&lt;section&gt;
&lt;h1&gt;Le home screen&lt;/h1&gt;


&lt;p&gt;&lt;a href=&quot;http://blog.neolao.com/public/neonexus/device.png&quot;&gt;&lt;img src=&quot;http://blog.neolao.com/public/neonexus/.device_s.jpg&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt;&lt;/a&gt;
Et donc, on peut remplacer le homescreen si on veut. J'ai opté pour &lt;strong&gt;PandaHome&lt;/strong&gt; qui est gratuit et qui permet surtout de changer toutes les icônes et les noms des applications.&lt;/p&gt;


&lt;p&gt;Et ce n'est pas sur surcouche, c'est un remplacement de homescreen. On peut parfaitement en trouver un plus léger que celui par défaut, comme par exemple &lt;strong&gt;Home++&lt;/strong&gt; qui est très prometteur.&lt;/p&gt;


&lt;p&gt;Je n'ai pas remarqué une augmentation de la consommation de la batterie après l'utilisation de PandaHome.&lt;/p&gt;

&lt;/section&gt;



&lt;section&gt;
&lt;h1&gt;La barre de notification&lt;/h1&gt;


&lt;p&gt;&lt;a href=&quot;http://blog.neolao.com/public/neonexus/device3.png&quot;&gt;&lt;img src=&quot;http://blog.neolao.com/public/neonexus/.device3_s.jpg&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt;&lt;/a&gt;
Enfin quelque chose de bien: la barre de notification. Les applications peuvent y insérer une icône et on peut dérouler cette barre pour l'agrandir sur la totalité de l'écran pour voir les détails.&lt;/p&gt;


&lt;p&gt;Je trouve ça plus pratique que des pastilles sur les icônes d'application. Je n'ai qu'un seul endroit où regarder.&lt;/p&gt;

&lt;/section&gt;


&lt;section&gt;
&lt;h1&gt;Le multi-tâches&lt;/h1&gt;


&lt;p&gt;Ca c'est le grand changement par rapport à l'iPhone, je peux lancer plusieurs applications si je veux!&lt;/p&gt;


&lt;p&gt;Evidémment, ça consomme et il faut fermer les logiciels. Heureusement, il y a des solutions pour auto-fermer les applications ou les services en cours de fonctionnement. Malheureusement, il y en a plein à tester. J'ai choisi le Task Manager pour info.&lt;/p&gt;


&lt;p&gt;Bon, c'est vrai, c'est souvent pour des utilisations de geek, mais c'est bien d'avoir le choix.&lt;/p&gt;
&lt;/section&gt;



&lt;section&gt;
&lt;h1&gt;Les applications&lt;/h1&gt;


&lt;p&gt;Je trouve que l'ergonomie et l'esthétisme des applications sont globalements mauvais. Souvent, je trouve ça moche, même si ça marche.&lt;/p&gt;


&lt;p&gt;Le menu contextuel me fait faire des clics en plus, c'est un peu chiant. Bien sûr, ça permet d'avoir plus de place à l'écran, mais les applications iPhones y arrivaient très bien sans.&lt;/p&gt;


&lt;p&gt;L'application Gmail est minable comparé à l'iPhone, même s'il a plus de fonctions. Safari était bien mieux, mais ça je le savais déjà avant de changer de téléphone.&lt;/p&gt;


&lt;p&gt;Le lecteur de musique est naze aussi, mais bon, je compare avec Apple qui fait des lecteur MP3 depuis longtemps. Pour ceux qui n'écoutent que des albums, c'est suffisant. Moi j'utilise les genres, les notes et les playlists dynamiques.&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://blog.neolao.com/public/neonexus/device6.png&quot;&gt;&lt;img src=&quot;http://blog.neolao.com/public/neonexus/.device6_sq.jpg&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://blog.neolao.com/public/neonexus/device7.png&quot;&gt;&lt;img src=&quot;http://blog.neolao.com/public/neonexus/.device7_sq.jpg&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://blog.neolao.com/public/neonexus/device8.png&quot;&gt;&lt;img src=&quot;http://blog.neolao.com/public/neonexus/.device8_sq.jpg&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://blog.neolao.com/public/neonexus/device9.png&quot;&gt;&lt;img src=&quot;http://blog.neolao.com/public/neonexus/.device9_sq.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;/section&gt;




&lt;section&gt;
&lt;h1&gt;Le market&lt;/h1&gt;


&lt;p&gt;&lt;a href=&quot;http://blog.neolao.com/public/neonexus/device5.png&quot;&gt;&lt;img src=&quot;http://blog.neolao.com/public/neonexus/.device5_s.jpg&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt;&lt;/a&gt;
Le market est l'équivalent de l'AppStore d'Apple. Il est correct, je n'ai pas eu de difficulté particulière pour trouver des applications.&lt;/p&gt;


&lt;p&gt;Le système de notation et de commentaires ne montrent que ceux des français on dirait.&lt;/p&gt;


&lt;p&gt;On peut aussi installer des applications qui ne viennent pas du market, et ça c'est top. Evidemment, la même vigilance s'impose que sur PC.&lt;/p&gt;

&lt;/section&gt;


&lt;/section&gt;




&lt;section&gt;
&lt;h1&gt;L'autonomie&lt;/h1&gt;


&lt;p&gt;&lt;a href=&quot;http://blog.neolao.com/public/neonexus/device2.png&quot;&gt;&lt;img src=&quot;http://blog.neolao.com/public/neonexus/.device2_s.jpg&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt;&lt;/a&gt;
Ahhhh l'autonomie ... J'ai un peu retardé l'écriture de cet article pour avoir le temps de bien vérifier l'autonomie du Nexus One.&lt;/p&gt;


&lt;p&gt;Au début, j'avais un peu de mal. Sans rien installer, si j'écoutais de la musique toute la journée, le téléphone était vide à 20h. Je surfais un peu et lisais mes mails, comme je le faisais sur iPhone.&lt;/p&gt;


&lt;p&gt;J'ai très rapidement cherché un tueur d'applications pour moins consommer. J'ai aussi testé pendant un moment des logiciels qui gère l'activation et la désactivation de services automatiquement.
Par exemple, je peux dire que s'il est entre 00h00 et 07h00, alors je coupe les sonneries de notification.
Je peux aussi dire que si je suis chez moi, alors j'active le Wifi. Si la prise est branchée, alors je désactive la veille automatique.&lt;/p&gt;


&lt;p&gt;Bref, c'était sympa et ça marche bien, mais ça consomme tout autant. Finalement, j'en suis revenu au paramétrage manuel avec l'application &lt;strong&gt;Quick Settings&lt;/strong&gt; et le widget par défaut.&lt;/p&gt;


&lt;p&gt;Pour mesurer la consommation d'énergie, Android fourni un profiler plutôt efficace. C'est comme ça que j'ai pu déterminer ce qui était vraiment gourmand.
Et finalement, à la fin de la journée, il me reste encore 40% de batterie. C'est à peu près pareil qu'avec l'iPhone.&lt;/p&gt;
&lt;/section&gt;







&lt;section&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;


&lt;p&gt;&lt;a href=&quot;http://blog.neolao.com/public/neonexus/device4.png&quot;&gt;&lt;img src=&quot;http://blog.neolao.com/public/neonexus/.device4_s.jpg&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt;&lt;/a&gt;
Même avec tous les défauts que j'ai cité, je suis content du téléphone parce qu'il me permet de faire plus de choses de geek. C'est vrai qu'on peut aussi Jailbreak un iPhone et installer plein de choses mais ça reste limité.&lt;/p&gt;


&lt;p&gt;En tout cas, c'est une bonne alternative mais je pense que pour un utilisateur normal, l'iPhone est meilleur. Il me reste encore à tester les jeux, je me suis juste pris un émulateur SNES avec FFVI :)&lt;/p&gt;


&lt;p&gt;Je n'ai pas encore essayé de développer une application. A ce niveau, c'est mieux sur Android, c'est sûr.&lt;/p&gt;


&lt;p&gt;Mon conseil pour ceux qui hésitent et qui ne sont pas pressés, c'est d'attendre d'autres téléphones Android avec un meilleur matériel.&lt;/p&gt;

&lt;/section&gt;
</description>
    
    
    
          <comments>http://blog.neolao.com/post/2010/02/22/79-Nexus-One#comment-form</comments>
      <wfw:comment>http://blog.neolao.com/post/2010/02/22/79-Nexus-One#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.neolao.com/feed/atom/comments/79</wfw:commentRss>
      </item>
    
  <item>
    <title>Thème HTML 5 pour DokuWiki</title>
    <link>http://blog.neolao.com/post/2010/01/15/78-Th%C3%A8me-HTML-5-pour-DokuWiki</link>
    <guid isPermaLink="false">urn:md5:fac21320e3096b862b379db283868a9c</guid>
    <pubDate>Fri, 15 Jan 2010 23:12:00 +0100</pubDate>
    <dc:creator>neolao</dc:creator>
        <category>PHP</category>
            
    <description>&lt;p&gt;&lt;img src=&quot;http://blog.neolao.com/public/dokuwiki-html5.png&quot; alt=&quot;DokuWiki HTML 5&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; Après le blog, c'est au tour du wiki de se mettre à jour. J'ai remis les mains dans le célèbre &lt;a href=&quot;http://dokuwiki.org/&quot; hreflang=&quot;en&quot;&gt;DokuWiki&lt;/a&gt; après tant d'années.&lt;/p&gt;    &lt;section&gt;
&lt;h1&gt;Nouveau thème&lt;/h1&gt;


&lt;p&gt;Evidemment, il a fallu que je crée un nouveau thème qui reprend le style des autres sections du site. Dokuwiki n'a pratiquement pas changé son système de template, donc aucun soucis.&lt;/p&gt;


&lt;p&gt;Voici la source&amp;nbsp;: &lt;a href=&quot;http://resources.neolao.com/php/dokuwiki/templates&quot; hreflang=&quot;fr&quot;&gt;http://resources.neolao.com/php/dokuwiki/templates&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;



&lt;section&gt;
&lt;h1&gt;Un plugin de rendu HTML 5&lt;/h1&gt;


&lt;p&gt;La seule difficulté aura été de créer une extension pour afficher du HTML 5 à partir de la syntaxe wiki.&lt;/p&gt;


&lt;p&gt;Finalement, c'était plus simple que prévu. J'ai étendu &lt;code&gt;Doku_Renderer_xhtml&lt;/code&gt; afin de placer aux bons endroits les balises &lt;code&gt;&amp;lt;section&amp;gt;&lt;/code&gt; et forcer tous les titres en &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;.&lt;/p&gt;


&lt;p&gt;Et voilà la source&amp;nbsp;: &lt;a href=&quot;http://resources.neolao.com/php/dokuwiki/plugin_html5&quot; hreflang=&quot;fr&quot;&gt;http://resources.neolao.com/php/dokuwiki/plugin_html5&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;



&lt;section&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;


&lt;p&gt;C'était plutôt rapide et sans problème particulier.&lt;/p&gt;


&lt;p&gt;Mon seul regret aura été de mettre la table des matières du contenu dans le &lt;code&gt;&amp;lt;aside&amp;gt;&lt;/code&gt; de la page. Je voulais évidemment la mettre dans le &lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt; correspondant au contenu, mais je ne voyais pas trop comment le caler facilement en dessous des sections de la sidebar.&lt;/p&gt;
&lt;/section&gt;
</description>
    
    
    
          <comments>http://blog.neolao.com/post/2010/01/15/78-Th%C3%A8me-HTML-5-pour-DokuWiki#comment-form</comments>
      <wfw:comment>http://blog.neolao.com/post/2010/01/15/78-Th%C3%A8me-HTML-5-pour-DokuWiki#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.neolao.com/feed/atom/comments/78</wfw:commentRss>
      </item>
    
  <item>
    <title>Thème HTML 5 pour dotclear 2</title>
    <link>http://blog.neolao.com/post/2009/12/17/77-Th%C3%A8me-HTML-5-pour-dotclear-2</link>
    <guid isPermaLink="false">urn:md5:846bbd547ddfb69cefc45f08f8b51d37</guid>
    <pubDate>Sat, 19 Dec 2009 02:43:00 +0100</pubDate>
    <dc:creator>neolao</dc:creator>
        <category>CSS</category>
            
    <description>&lt;p&gt;&lt;img src=&quot;http://blog.neolao.com/public/neo28.png&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; Je suis en train de refaire mon site en HTML5 et CSS3. Après le portfolio, c'était au tour du blog. J'en ai profité pour migrer vers &lt;a href=&quot;http://fr.dotclear.rg/&quot; hreflang=&quot;fr&quot;&gt;Dotclear 2&lt;/a&gt; et faire un thème.&lt;/p&gt;    &lt;section&gt;
&lt;h1&gt;La migration&lt;/h1&gt;


&lt;p&gt;Je n'ai pas eu de soucis particulier avec la migration de la version 1 à la version 2. Pour les données, c'était fait en un clic. Pour les URLs, un petit .htaccess avec des 301 et c'était réglé.&lt;/p&gt;


&lt;p&gt;J'ai voulu tester le stockage sur SQLite. Ca marche très bien pour consulter, mais une fois que j'ai mis en ligne, la base de données était toujours bloquée en écriture, impossible d'écrire un commentaire ou d'aller dans l'admin. Bref, j'ai remis le bazar sur MySQL.&lt;/p&gt;


&lt;p&gt;Ce qui m'a pris le plus de temps, c'était la convertion des billets en HTML 5. J'ai laissé tomber le format wiki pour écrire du HTML 5 brut. Mais finalement, j'ai mixé les 2, c'est à dire qu'il faut juste que j'ajoute des balises &lt;code&gt;&amp;lt;section&amp;gt;&lt;/code&gt; et &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; qui n'existe nt pas dans la syntaxe wiki du blog.  Je dois écrire&amp;nbsp;:&lt;/p&gt;

&lt;pre class=&quot;code&quot;&gt;
&amp;#47;&amp;#47;&amp;#47;html
&amp;lt;section&amp;gt;
&amp;lt;h1&amp;gt;Mon titre&amp;lt;/h1&amp;gt;
&amp;#47;&amp;#47;&amp;#47;
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
&amp;#47;&amp;#47;&amp;#47;html
&amp;lt;/section&amp;gt;
&amp;#47;&amp;#47;&amp;#47;
&lt;/pre&gt;



&lt;p&gt;C'est un peu galère je sais ...&lt;/p&gt;

&lt;/section&gt;


&lt;section&gt;
&lt;h1&gt;Thème en HTML 5 et CSS 3&lt;/h1&gt;



&lt;p&gt;Au niveau de la structure de la page, il n'y a pas une grande différence. J'ai englobé tous les billets dans des balises &lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt; ainsi que les commentaires, comme &lt;a href=&quot;http://dev.w3.org/html5/spec/Overview.html#the-article-element&quot; hreflang=&quot;en&quot;&gt;suggéré sur le site officiel&lt;/a&gt;. Au final, je n'ai plus aucune balise superflu, pas de &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; qui traine (sauf 1 je crois).&lt;/p&gt;


&lt;p&gt;Par contre, les widgets sont affichés avec du code HTML en dur dans les fonctions. Donc pas trop possible de changer ça. Je n'affiche pas les widgets, j'ai fait mes propres fonctions de thème pour la sidebar.&lt;/p&gt;

&lt;/section&gt;


&lt;section&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;



&lt;p&gt;J'aime beaucoup cette version de dotclear. Je n'aime pas particulièrement Wordpress, même si le code a l'air bien.&lt;/p&gt;


&lt;p&gt;Je ne vais pas soumettre ce thème pour l'instant, car il n'est pas assez générique. J'ai mis des choses en dur suivant mes besoins. Je le mets donc juste à disposition en téléchargement&amp;nbsp;: &lt;a href=&quot;http://resources.neolao.com/php/dotclear/themes&quot;&gt;Thèmes Dotclear&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Je mettrai le fichier à jour à chaque modification, je n'ai pas encore fini de tout styler.&lt;/p&gt;

&lt;/section&gt;
</description>
    
    
    
          <comments>http://blog.neolao.com/post/2009/12/17/77-Th%C3%A8me-HTML-5-pour-dotclear-2#comment-form</comments>
      <wfw:comment>http://blog.neolao.com/post/2009/12/17/77-Th%C3%A8me-HTML-5-pour-dotclear-2#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.neolao.com/feed/atom/comments/77</wfw:commentRss>
      </item>
    
  <item>
    <title>Lecteur Flash compatible avec l'API video de HTML 5</title>
    <link>http://blog.neolao.com/post/2009/06/07/76-lecteur-flash-compatible-avec-l-api-video-de-html-5</link>
    <guid isPermaLink="false">urn:md5:c2482652f87de90a9c14d84212036597</guid>
    <pubDate>Sun, 07 Jun 2009 18:32:00 +0000</pubDate>
    <dc:creator>neolao</dc:creator>
        <category>Javascript</category>
            
    <description>&lt;p&gt;&lt;img src=&quot;http://blog.neolao.com/public/video_element.png&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; Pour ceux qui pensent déjà personnaliser leur lecteur vidéo qui utilise &lt;a href=&quot;http://html-infos.net/fr/element/video&quot;&gt;l'élément video de HTML 5&lt;/a&gt;, j'ai fait un petit Flash+Javascript qui reprend &lt;a href=&quot;http://www.whatwg.org/specs/web-apps/current-work/#video&quot; hreflang=&quot;en&quot;&gt;l'API défini dans la documentation&lt;/a&gt;.&lt;/p&gt;    &lt;section&gt;
&lt;h1&gt;Introduction&lt;/h1&gt;

&lt;p&gt;&lt;acronym title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/acronym&gt; 5 introduit de nouveaux éléments dont l'élément &lt;code&gt;video&lt;/code&gt; qui permet d'afficher un média de type vidéo sur une page &lt;acronym title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/acronym&gt;. Certains navigateurs modernes commencent à l'implémenter même si les spécifications ne sont pas encore figées.&lt;/p&gt;


&lt;p&gt;Ces navigateurs peuvent donc afficher des vidéos ainsi que leur contrôleur. &lt;a href=&quot;http://www.whatwg.org/specs/web-apps/current-work/#video&quot; hreflang=&quot;en&quot;&gt;La documentation&lt;/a&gt; indique qu'il y a une &lt;abbr title=&quot;http://fr.wikipedia.org/wiki/Interface_de_programmation&quot;&gt;API&lt;/abbr&gt; qui permet de manipuler la vidéo sans utiliser le contrôleur par défaut.&lt;/p&gt;


&lt;p&gt;L'idée, c'est de fournir un lecteur vidéo en flash compatible avec cette &lt;abbr title=&quot;http://fr.wikipedia.org/wiki/Interface_de_programmation&quot;&gt;API&lt;/abbr&gt; afin de réutiliser un contrôleur personnalisé destiné au départ à l'élément &lt;code&gt;video&lt;/code&gt;.
Celà permet de faire une &lt;a href=&quot;http://www.pompage.net/pompe/degradation-elegante-et-amelioration-progressive/&quot;&gt;amélioration progressive&lt;/a&gt; entre le Flash et le &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; 5, tout en gardant le même design de contrôleur qui va bien avec le site.&lt;/p&gt;

&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;Exemple&lt;/h1&gt;

&lt;p&gt;Voici un exemple de page qui affiche une vidéo avec l'élément &lt;code&gt;video&lt;/code&gt; si le navigateur le supporte, sinon un Flash, voire un texte alternatif s'il n'a aucun des deux&amp;nbsp;: &lt;a href=&quot;http://resources.neolao.com/flash/components/flv_player_html5&quot; title=&quot;http://resources.neolao.com/flash/components/flv_player_html5&quot;&gt;http://resources.neolao.com/flash/c...&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;En lisant &lt;a href=&quot;http://www.whatwg.org/specs/web-apps/current-work/#video&quot; hreflang=&quot;en&quot;&gt;la documentation&lt;/a&gt;, j'ai tout de suite compris qu'un Flash ne suffirait pas. Il me fallait aussi un objet Javascript qui implémente des méthodes comme &lt;code&gt;addEventListener&lt;/code&gt; ou des setters comme &lt;code&gt;currentTime&lt;/code&gt;. En effet, le dialogue entre le Flash et Javascript est limité par des appels de méthodes et des arguments de type &lt;code&gt;String&lt;/code&gt;, &lt;code&gt;Number&lt;/code&gt;, &lt;code&gt;Boolean&lt;/code&gt;, &lt;code&gt;Array&lt;/code&gt; ou &lt;code&gt;Object&lt;/code&gt;.&lt;/p&gt;

&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;La seule difficulté, c'était de simuler un setter parce que je ne pouvais pas l'utiliser à cause d'Internet Explorer, encore lui ... Sinon c'est plutôt simple et la documentation est assez claire.&lt;/p&gt;


&lt;p&gt;Je n'ai pas terminé de reproduire tous les comportements, il me reste quelques évènements et des propriétés à remplir.&lt;/p&gt;

&lt;/section&gt;</description>
    
    
    
          <comments>http://blog.neolao.com/post/2009/06/07/76-lecteur-flash-compatible-avec-l-api-video-de-html-5#comment-form</comments>
      <wfw:comment>http://blog.neolao.com/post/2009/06/07/76-lecteur-flash-compatible-avec-l-api-video-de-html-5#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.neolao.com/feed/atom/comments/76</wfw:commentRss>
      </item>
    
  <item>
    <title>Messages de notification</title>
    <link>http://blog.neolao.com/post/2009/05/30/75-messages-de-notification</link>
    <guid isPermaLink="false">urn:md5:3ee298d0e1c331ebd9e847a13b692dea</guid>
    <pubDate>Sat, 30 May 2009 23:41:00 +0000</pubDate>
    <dc:creator>neolao</dc:creator>
        <category>Divers</category>
            
    <description>&lt;p&gt;&lt;img src=&quot;http://blog.neolao.com/public/tux.png&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; En lisant le billet &lt;a href=&quot;http://wtf.cyprio.net/irssi-et-les-messages-de-notification&quot;&gt;&quot;Irssi et les messages de notification...&quot;&lt;/a&gt;, j'ai eu une idée. Et si je me faisais un système de notifications pour toutes sortes d'informations venant d'un serveur en ligne?&lt;/p&gt;


&lt;p&gt;C'est le même principe que &lt;a href=&quot;http://growl.info/&quot; hreflang=&quot;en&quot;&gt;Growl&lt;/a&gt; avec les applications locales. D'ailleurs, &lt;a href=&quot;http://growl.info/&quot; hreflang=&quot;en&quot;&gt;Growl&lt;/a&gt; peut recevoir des messages d'applications distantes, mais ce n'est pas dans ce sens que je vais le faire.&lt;/p&gt;    &lt;section&gt;
&lt;h1&gt;Présentation&lt;/h1&gt;

&lt;p&gt;J'utilise principalement Ubuntu et MacOSX, et ils ont tous les 2 un afficheur de notifications sous forme de bulles qui apparaissent par dessus les applications:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;libnotify pour Ubuntu&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://growl.info/&quot; hreflang=&quot;en&quot;&gt;Growl&lt;/a&gt; pour MacOSX&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On peut afficher le message qu'on veut à l'aide d'une ligne de commande.&lt;/p&gt;


&lt;p&gt;Je vais créer mon système de notifications en 2 étapes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Création d'un fichier de log sur une machine distante&lt;/li&gt;
&lt;li&gt;Récupération en continu des nouvelles entrées du log&lt;/li&gt;
&lt;/ol&gt;

&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;Enregistrer les modifications&lt;/h1&gt;

&lt;p&gt;Je veux centraliser les messages dans un seul fichier, sur mon serveur en ligne, par exemple &lt;code&gt;/home/neolao/notifications.txt&lt;/code&gt;.
Chaque ligne de ce fichier est une notification. Je décide que le premier mot sera le type et la suite sera le message.&lt;/p&gt;


&lt;p&gt;Donc, très simple, si je veux ajouter une nouvelle notification, je fais:&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&quot;meteo Il fait beau&quot;&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;Ce qui va d'abord m'intéresser, c'est d'avoir les nouveaux messages qu'on m'envoie sur &lt;a href=&quot;http://fr.wikipedia.org/wiki/Finch_(logiciel)&quot;&gt;finch&lt;/a&gt; ou &lt;a href=&quot;http://fr.wikipedia.org/wiki/Irssi&quot;&gt;irssi&lt;/a&gt;. Ca se résume à détecter les modifications du dossier d'archives de ces logiciels.&lt;/p&gt;


&lt;p&gt;J'installe donc un utilitaire qui va m'indiquer la modification d'un fichier récursivement dans un dossier que je lui spécifie. La commande est &lt;code&gt;inotifywait&lt;/code&gt; qui est dans le paquet &lt;a href=&quot;http://inotify-tools.sourceforge.net/&quot; hreflang=&quot;en&quot;&gt;inotify-tools&lt;/a&gt;. Voici mon script:&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co1&quot;&gt;#!/bin/bash&lt;/span&gt;
inotifywait -rmq --format &lt;span class=&quot;st0&quot;&gt;'%w %f'&lt;/span&gt; -e modify /home/neolao/.purple/logs | &lt;span class=&quot;kw1&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;read&lt;/span&gt; dir file
&lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
    &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&quot;finch&quot;&lt;/span&gt; `tail -n1 &lt;span class=&quot;re1&quot;&gt;$dir&lt;/span&gt;&lt;span class=&quot;re1&quot;&gt;$file&lt;/span&gt;` &amp;gt;&amp;gt; /home/neolao/notificatons.txt
&lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;&lt;code&gt;inotifywait&lt;/code&gt; me permet de connaître le fichier qui a été modifié. Ensuite, j'écris la dernière ligne de ce fichier dans mes notificatons en préfixant avec le type (ici &lt;code&gt;finch&lt;/code&gt;).&lt;/p&gt;


&lt;p&gt;Pour &lt;a href=&quot;http://fr.wikipedia.org/wiki/Irssi&quot;&gt;irssi&lt;/a&gt;, j'ai utilisé &lt;a href=&quot;http://thorstenl.blogspot.com/2007/01/thls-irssi-notification-script.html&quot; hreflang=&quot;en&quot;&gt;fnotify&lt;/a&gt; qui remplit un fichier quand je reçois des messages privés et quand on écrit mon nom. Il suffit de modifier un petit peu le script pour qu'il ajoute ce que je veux dans mon fichier &lt;code&gt;/home/neolao/notifications.txt&lt;/code&gt;.&lt;/p&gt;

&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;Afficher les nouvelles notifications&lt;/h1&gt;

&lt;p&gt;Maintenant que la machine distante remplit bien le fichier &lt;code&gt;/home/neolao/notifications.txt&lt;/code&gt;, il faut que je crée un script sur chacune de mes machines &lt;em&gt;locales&lt;/em&gt;.&lt;/p&gt;


&lt;section&gt;
&lt;h1&gt;Notification sur Ubuntu&lt;/h1&gt;

&lt;p&gt;Sur Ubuntu, j'ai installé le paquet &lt;code&gt;libnotify-bin&lt;/code&gt; pour avoir la commande &lt;code&gt;notify-send&lt;/code&gt;. Et voici le script que je lance:&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co1&quot;&gt;#!/bin/bash&lt;/span&gt;
ssh mylogin@hostname &lt;span class=&quot;st0&quot;&gt;&quot;tail -f notifications.txt&quot;&lt;/span&gt; | &lt;span class=&quot;kw1&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;read&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;type&lt;/span&gt; message
&lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
	notify-send -t &lt;span class=&quot;nu0&quot;&gt;5000&lt;/span&gt; -i info -u low &lt;span class=&quot;st0&quot;&gt;&quot;$type&quot;&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&quot;$message&quot;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt;&lt;/pre&gt;

&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;Notification sur MacOSX&lt;/h1&gt;

&lt;p&gt;Et le script pour &lt;a href=&quot;http://growl.info/&quot; hreflang=&quot;en&quot;&gt;Growl&lt;/a&gt;:&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;co1&quot;&gt;#!/bin/bash&lt;/span&gt;
ssh mylogin@hostname &lt;span class=&quot;st0&quot;&gt;&quot;tail -f notifications.txt&quot;&lt;/span&gt; | &lt;span class=&quot;kw1&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;read&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;type&lt;/span&gt; message
&lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt;
	/usr/&lt;span class=&quot;kw3&quot;&gt;local&lt;/span&gt;/bin/growlnotify -t &lt;span class=&quot;st0&quot;&gt;&quot;$type&quot;&lt;/span&gt; -m &lt;span class=&quot;st0&quot;&gt;&quot;$message&quot;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;done&lt;/span&gt;&lt;/pre&gt;

&lt;/section&gt;
&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;C'est plutôt efficace. J'essaie d'imaginer les notifications que je pourrai avoir besoin et aussi mes filtres.
Je pourrai rendre accessible mes notifications par une page web (secrète bien sûr) pour une consultation sur mobile, voire envoyer des mails récapitulatifs sur 15 minutes.&lt;/p&gt;


&lt;p&gt;D'ailleurs, avec des API, il y a moyen d'afficher des informations venant de sites web, ma machine distante servant à centraliser tout le bazar qu'une seule fois.&lt;/p&gt;


&lt;p&gt;Voilà, c'était un trip rapide :)&lt;/p&gt;

&lt;/section&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Vim</title>
    <link>http://blog.neolao.com/post/2009/05/25/74-vim</link>
    <guid isPermaLink="false">urn:md5:20bff311cc6f2649dcbb4a4c47305c48</guid>
    <pubDate>Mon, 25 May 2009 03:32:00 +0000</pubDate>
    <dc:creator>neolao</dc:creator>
        <category>Divers</category>
            
    <description>&lt;p&gt;&lt;img src=&quot;http://blog.neolao.com/public/vim.png&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; Ca fait un petit moment déjà que j'essaie de me créer un environnement de développement distant, c'est à dire que je me connecte sur une machine en ligne pour faire ce que j'ai à faire. C'est assez sympa d'utiliser le &lt;a href=&quot;http://www.nomachine.com/&quot; hreflang=&quot;en&quot;&gt;protocol NX&lt;/a&gt;, il marche bien en plus. Mais je me suis très vite trouné vers une solution entièrement sur un terminal.&lt;/p&gt;


&lt;p&gt;Je zappe tout ce qui est configuration de &lt;a href=&quot;http://fr.wikipedia.org/wiki/Screen&quot;&gt;screen&lt;/a&gt;, &lt;a href=&quot;http://fr.wikipedia.org/wiki/Midnight_Commander&quot;&gt;mc&lt;/a&gt;, &lt;a href=&quot;http://fr.wikipedia.org/wiki/Finch_(logiciel)&quot;&gt;finch&lt;/a&gt;, &lt;a href=&quot;http://fr.wikipedia.org/wiki/Irssi&quot;&gt;irssi&lt;/a&gt; etc.. Je vais vous présenter ma personnalisation de &lt;a href=&quot;http://fr.wikipedia.org/wiki/Vim&quot;&gt;vim&lt;/a&gt;, un éditeur de texte.&lt;/p&gt;    &lt;section&gt;
&lt;h1&gt;Présentation&lt;/h1&gt;

&lt;p&gt;Vim est un éditeur de texte que j'utilise dans un terminal (écran noir et tout), utilisable entièrement sans la souris, avec plein de raccourcis clavier :)&lt;/p&gt;


&lt;p&gt;De base, il n'y a pas grand chose à part le texte qu'on veut éditer. Le but de cet article est justement de montrer la personnalisation que j'en ai fait.
Je n'explique pas comment utiliser le logiciel. Comme point de départ, vous pouvez lire la présentation sur wikipedia&amp;nbsp;: &lt;a href=&quot;http://fr.wikipedia.org/wiki/Vim&quot;&gt;http://fr.wikipedia.org/wiki/Vim&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;On peut bien entendu afficher les numéros de ligne, choisir la taille des tabulations, utiliser des espaces au lieu des tabulations, indenter automatiquement, ouvrir plusieurs fichiers dans des onglets, afficher les caractères non imprimables, personnaliser les couleurs et les raccourcis clavier, etc.&lt;/p&gt;

&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;L'explorateur de fichiers&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.neolao.com/public/vim_capture1.png&quot; style=&quot;background: none; padding: 0;&quot;&gt;&lt;img src=&quot;http://blog.neolao.com/public/vim_capture1_mini.png&quot; style=&quot;float: left; margin: 0 2em 1em 1em;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Pour afficher un panneau latéral avec un explorateur de fichier dedans, j'ai utilisé un plugin&amp;nbsp;: &lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=1658&quot; hreflang=&quot;en&quot;&gt;NERD Tree&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Voici ce que j'utilise principalement:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On peut montrer/masquer les fichiers cachés&lt;/li&gt;
&lt;li&gt;On peut créer/copier/effacer/renommer un dossier/fichier&lt;/li&gt;
&lt;li&gt;On peut ouvrir un fichier dans un nouvel onglet&lt;/li&gt;
&lt;li&gt;Les dossiers s'affichent en premier&lt;/li&gt;
&lt;/ul&gt;

&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;L'explorateur de code&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.neolao.com/public/vim_capture2.png&quot; style=&quot;background: none; padding: 0;&quot;&gt;&lt;img src=&quot;http://blog.neolao.com/public/vim_capture2_mini.png&quot; style=&quot;float: left; margin: 0 2em 1em 1em;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Une chose essentielle qui m'évite de scroller comme un malade, c'est un panneau qui me résume les méthodes existantes du fichier en cours d'édition. Pour celà, il y a le plugin&amp;nbsp;: &lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=273&quot; hreflang=&quot;en&quot;&gt;taglist&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Ce dernier se sert de &lt;a href=&quot;http://en.wikipedia.org/wiki/Ctags&quot; hreflang=&quot;en&quot;&gt;ctags&lt;/a&gt; pour parser les fichiers et faire ressortir les mots clés suivant le langage. Je me suis d'ailleurs fait mes propres règles ctags en expression régulière pour le CSS, pour avoir en mot clé des sections fait par commentaire. Et j'ai récupéré des règles pour l'actionscript. C'est assez simple de rajouter et modifier des langages.&lt;/p&gt;


&lt;p&gt;Evidemment, ce panneau ne fait pas que lister les mots clés, on peut l'utiliser pour aller directement à la ligne correspondante.&lt;/p&gt;

&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;Raccourcis vers d'autres fichiers&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.neolao.com/public/vim_capture4.png&quot; style=&quot;background: none; padding: 0;&quot;&gt;&lt;img src=&quot;http://blog.neolao.com/public/vim_capture4_mini.png&quot; style=&quot;float: left; margin: 0 2em 1em 1em;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Il y a un plugin que j'ai du mal à manipuler, c'est &lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=2179&quot; hreflang=&quot;en&quot;&gt;Source Explorer&lt;/a&gt; qui permet entre autre d'ouvrir un fichier à partir d'un mot sous le curseur, par exemple l'origine d'une méthode d'une class qui se trouve dans un fichier lointain. Ca a l'air super, mais j'arrive trop souvent à faire planter vim en enchainant des raccourcis clavier.&lt;/p&gt;


&lt;p&gt;En tout cas, si on s'en sert bien, c'est pratique :)&lt;/p&gt;

&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;Autocompletion&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.neolao.com/public/vim_capture3.png&quot; style=&quot;background: none; padding: 0;&quot;&gt;&lt;img src=&quot;http://blog.neolao.com/public/vim_capture3_mini.png&quot; style=&quot;float: left; margin: 0 2em 1em 1em;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Vim possède depuis 2006 (si j'ai bien lu) la fonction d'autocompletion. Il peut afficher un petit menu déroulant par dessus le code avec les mots qui vont bien.&lt;/p&gt;


&lt;p&gt;Il marche aussi avec &lt;a href=&quot;http://en.wikipedia.org/wiki/Ctags&quot; hreflang=&quot;en&quot;&gt;ctags&lt;/a&gt; sur tout un projet. C'est à dire qu'il peut afficher des mots venant d'autres fichiers, si on s'est occupé de créer un index ctags à la racine du projet. Parfois, j'arrive à avoir le chemin du fichier d'où provient le mot, je ne sais pas pourquoi je ne l'ai pas toujours.&lt;/p&gt;

&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;Avant de faire cet article, j'ai passé pas mal de temps dans mon environnement, à manipuler des fichiers, utiliser subversion, ant, ftp etc.
Ca demande un peu d'apprentissage au début, mais je m'y suis fait.&lt;/p&gt;


&lt;p&gt;Voici mes fichiers de configuration:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://doc.neolao.com/.vimrc&quot;&gt;.vimrc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://doc.neolao.com/.vim/&quot;&gt;.vim/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://doc.neolao.com/.ctags&quot;&gt;.ctags&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Et mon pense bête: &lt;a href=&quot;http://doc.neolao.com/vim.wiki&quot;&gt;http://doc.neolao.com/vim.wiki&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;PS: remarquez que je suis en résolution 1024x600, sur un laptop 10 pouces, le eeePC 1000H qui a un super clavier :)&lt;/p&gt;

&lt;/section&gt;</description>
    
    
    
          <comments>http://blog.neolao.com/post/2009/05/25/74-vim#comment-form</comments>
      <wfw:comment>http://blog.neolao.com/post/2009/05/25/74-vim#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.neolao.com/feed/atom/comments/74</wfw:commentRss>
      </item>
    
  <item>
    <title>Accélérer la compilation Flash avec fcsh</title>
    <link>http://blog.neolao.com/post/2009/05/07/72-accelerer-la-compilation-flash-avec-fcsh</link>
    <guid isPermaLink="false">urn:md5:667721ff42ed27c760e21f81a3014f3d</guid>
    <pubDate>Thu, 07 May 2009 00:44:00 +0000</pubDate>
    <dc:creator>neolao</dc:creator>
        <category>Flash</category>
            
    <description>&lt;p&gt;&lt;img src=&quot;http://blog.neolao.com/public/fcsh.png&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; Oui je sais, ce n'est pas nouveau, on peut accélérer la compilation des Flash grâce à &lt;a href=&quot;http://labs.adobe.com/wiki/index.php/Flex_Compiler_Shell&quot; hreflang=&quot;en&quot;&gt;fcsh&lt;/a&gt;, mais son utilisation n'est pas très pratique.&lt;/p&gt;    &lt;section&gt;
&lt;h1&gt;Ce qui existe déjà&lt;/h1&gt;

&lt;p&gt;Il existe des projets qui exploitent &lt;a href=&quot;http://labs.adobe.com/wiki/index.php/Flex_Compiler_Shell&quot; hreflang=&quot;en&quot;&gt;fcsh&lt;/a&gt;&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://ifac-plugin.com/&quot; hreflang=&quot;en&quot;&gt;iFac&lt;/a&gt; qui a l'air mort, on ne peut plus l'installer via Eclipse&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://zarkov.bigsource.de/&quot; hreflang=&quot;en&quot;&gt;Zarkov&lt;/a&gt;, un autre plugin Eclipse (mais il prévoit de faire un standalone)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://fcshwrapper.blogspot.com&quot; hreflang=&quot;en&quot;&gt;fcshWrapper&lt;/a&gt;, utilisable par ANT (Windows uniquement pour l'instant)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://code.google.com/p/flex-compiler-shell-daemon/&quot; hreflang=&quot;en&quot;&gt;fcshd&lt;/a&gt; qui lance un daemon fcsh, écrit en Python&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://code.google.com/p/flexcompile/&quot; hreflang=&quot;en&quot;&gt;flexcompile&lt;/a&gt; qui lance aussi un daemon fcsh, également écrit en Python&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Je voulais une solution Java comme &lt;a href=&quot;http://fcshwrapper.blogspot.com&quot; hreflang=&quot;en&quot;&gt;fcshWrapper&lt;/a&gt; qui marche sur Linux, mais après quelques heures de tests, je me suis arrêté sur la solution Python.&lt;/p&gt;


&lt;p&gt;J'ai choisi &lt;a href=&quot;http://code.google.com/p/flexcompile/&quot; hreflang=&quot;en&quot;&gt;flexcompile&lt;/a&gt; parce qu'il prend en paramètre l'exécutable fcsh fourni par Adobe, alors que &lt;a href=&quot;http://code.google.com/p/flex-compiler-shell-daemon/&quot; hreflang=&quot;en&quot;&gt;fcshd&lt;/a&gt; utilise des variables d'environnement. Oui je sais, je suis une feignasse, j'aurai pu modifier un peu le script :) .&lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;Installation de flexcompile et utilisation avec ANT&lt;/h1&gt;

&lt;p&gt;Pour installer &lt;a href=&quot;http://code.google.com/p/flexcompile/&quot; hreflang=&quot;en&quot;&gt;flexcompile&lt;/a&gt;, il suffit de télécharger le fichier &lt;a href=&quot;http://flexcompile.googlecode.com/svn/trunk/flexcompile.py&quot;&gt;flexcompile.py&lt;/a&gt; et vous le mettez où vous voulez.
Il faut rendre le fichier exécutable et avoir python d'installé.&lt;/p&gt;


&lt;p&gt;Voici un exemple de fichier ANT:&lt;/p&gt;
&lt;pre class=&quot;code xml&quot;&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;
&amp;lt;project name=&amp;quot;myProject&amp;quot; basedir=&amp;quot;.&amp;quot;&amp;gt;
    &amp;lt;property name=&amp;quot;fcsh.wrapper&amp;quot; value=&amp;quot;./fcshWrapper.py&amp;quot; /&amp;gt;
    &amp;lt;property name=&amp;quot;fcsh.bin&amp;quot; value=&amp;quot;/home/neolao/flex_sdk_3/bin/fcsh&amp;quot; /&amp;gt;

    &amp;lt;target name=&amp;quot;build-test&amp;quot; description=&amp;quot;Build test&amp;quot;&amp;gt;
        &amp;lt;echo&amp;gt;Build test&amp;lt;/echo&amp;gt;
        &amp;lt;exec executable=&amp;quot;${fcsh.wrapper}&amp;quot; failonerror=&amp;quot;true&amp;quot;&amp;gt;
            &amp;lt;arg line=&amp;quot;${fcsh.bin} mxmlc
                       -output test.swf
                       Test.as&amp;quot;/&amp;gt;
        &amp;lt;/exec&amp;gt;
    &amp;lt;/target&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/pre&gt;
&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;Ca boost&amp;nbsp;!&lt;/p&gt;

&lt;p&gt;Cette solution me suffit pour l'instant, si quelqu'un a une autre façon de faire, sans cette dépendance avec python, j'veux bien :) .&lt;/p&gt;

&lt;/section&gt;</description>
    
    
    
          <comments>http://blog.neolao.com/post/2009/05/07/72-accelerer-la-compilation-flash-avec-fcsh#comment-form</comments>
      <wfw:comment>http://blog.neolao.com/post/2009/05/07/72-accelerer-la-compilation-flash-avec-fcsh#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.neolao.com/feed/atom/comments/72</wfw:commentRss>
      </item>
    
  <item>
    <title>Preload en pure AS3</title>
    <link>http://blog.neolao.com/post/2009/04/04/71-preload-en-pure-as3</link>
    <guid isPermaLink="false">urn:md5:54f16ac9933d13015773c85bd3655568</guid>
    <pubDate>Sat, 04 Apr 2009 01:47:00 +0000</pubDate>
    <dc:creator>neolao</dc:creator>
        <category>Flash</category>
            
    <description>&lt;p&gt;&lt;img src=&quot;http://blog.neolao.com/public/preload.png&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; Ca fait un moment que je voulais faire ce billet. Comme je me remets à faire du Flash et que mon nouveau collègue me menace de retirer mon blog de sa liste de flux, je me décide enfin à écrire quelque chose.&lt;/p&gt;


&lt;p&gt;Pour le projet &lt;a href=&quot;http://code.google.com/p/neoplayer&quot;&gt;neoplayer&lt;/a&gt;, je cherchais un moyen de faire un preload de l'application. Quand on utilise le Flash IDE, on fait simplement une frame avec le chargement et on met tout le reste en frame 2. Mais comment on fait uniquement en code, sans passer par l'éditeur&amp;nbsp;?&lt;/p&gt;    &lt;section&gt;
&lt;h1&gt;Reproduire les frames&lt;/h1&gt;

&lt;p&gt;Quand on compile du Flash juste avec un fichier &lt;em&gt;as&lt;/em&gt;, on a une class qui représente le conteneur principal, par exemple:&lt;/p&gt;
&lt;pre class=&quot;code actionscript&quot;&gt;package
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;import&lt;/span&gt; flash.&lt;span class=&quot;me1&quot;&gt;display&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Sprite&lt;/span&gt;;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;SWF&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;width&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&quot;200&quot;&lt;/span&gt;, &lt;span class=&quot;kw3&quot;&gt;height&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&quot;200&quot;&lt;/span&gt;, &lt;span class=&quot;kw3&quot;&gt;backgroundColor&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&quot;#ffffff&quot;&lt;/span&gt;, frameRate=&lt;span class=&quot;st0&quot;&gt;&quot;48&quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; Main &lt;span class=&quot;kw3&quot;&gt;extends&lt;/span&gt; Sprite
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw3&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; Main&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;Le problème, c'est qu'ici, on va commencer à instancier des objets, initialiser des choses etc. Ca prend de la place et ce sont des prérequis pour la classe.&lt;/p&gt;


&lt;p&gt;Il existe cependant un metadata qui permet de rajouter une frame qui sera exécutée avant. Voilà ce que ça donne:&lt;/p&gt;
&lt;pre class=&quot;code actionscript&quot;&gt;package
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;import&lt;/span&gt; flash.&lt;span class=&quot;me1&quot;&gt;display&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Sprite&lt;/span&gt;;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;SWF&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;width&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&quot;200&quot;&lt;/span&gt;, &lt;span class=&quot;kw3&quot;&gt;height&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&quot;200&quot;&lt;/span&gt;, &lt;span class=&quot;kw3&quot;&gt;backgroundColor&lt;/span&gt;=&lt;span class=&quot;st0&quot;&gt;&quot;#ffffff&quot;&lt;/span&gt;, frameRate=&lt;span class=&quot;st0&quot;&gt;&quot;48&quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;Frame&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;factoryClass=&lt;span class=&quot;st0&quot;&gt;&quot;com.neolao.preload.DefaultPreload&quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; Main &lt;span class=&quot;kw3&quot;&gt;extends&lt;/span&gt; Sprite
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw3&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; Main&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Cette frame est représentée par une class &lt;em&gt;com.neolao.preload.DefaultPreload&lt;/em&gt;&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;code actionscript&quot;&gt;package com.&lt;span class=&quot;me1&quot;&gt;neolao&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;preload&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&lt;span class=&quot;kw3&quot;&gt;import&lt;/span&gt; flash.&lt;span class=&quot;me1&quot;&gt;display&lt;/span&gt;.&lt;span class=&quot;kw3&quot;&gt;MovieClip&lt;/span&gt;;
&lt;span class=&quot;kw3&quot;&gt;import&lt;/span&gt; flash.&lt;span class=&quot;me1&quot;&gt;display&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;DisplayObject&lt;/span&gt;;
&lt;span class=&quot;kw3&quot;&gt;import&lt;/span&gt; flash.&lt;span class=&quot;me1&quot;&gt;events&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;Event&lt;/span&gt;;
&lt;span class=&quot;kw3&quot;&gt;import&lt;/span&gt; flash.&lt;span class=&quot;me1&quot;&gt;utils&lt;/span&gt;.*;
&amp;nbsp;
&lt;span class=&quot;kw3&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; DefaultPreload &lt;span class=&quot;kw3&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;MovieClip&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw3&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; DefaultPreload&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
         &lt;span class=&quot;kw3&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;kw3&quot;&gt;stop&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
         &lt;span class=&quot;kw3&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;addEventListener&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Event.&lt;span class=&quot;me1&quot;&gt;ENTER_FRAME&lt;/span&gt;, &lt;span class=&quot;kw3&quot;&gt;this&lt;/span&gt;._onEnterFrame&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    
    &lt;span class=&quot;kw3&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; _onEnterFrame&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;event:Event&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;:&lt;span class=&quot;kw3&quot;&gt;void&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;framesLoaded&lt;/span&gt; == &lt;span class=&quot;kw3&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;totalFrames&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
            &lt;span class=&quot;kw3&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;removeEventListener&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Event.&lt;span class=&quot;me1&quot;&gt;ENTER_FRAME&lt;/span&gt;, &lt;span class=&quot;kw3&quot;&gt;this&lt;/span&gt;._onEnterFrame&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
            &lt;span class=&quot;kw3&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;kw3&quot;&gt;nextFrame&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
            
            &lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; mainClass:&lt;span class=&quot;kw2&quot;&gt;Class&lt;/span&gt; = getDefinitionByName&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&quot;Main&quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; as &lt;span class=&quot;kw2&quot;&gt;Class&lt;/span&gt;;
            &lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; app:DisplayObject = &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; mainClass&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; as DisplayObject;
            &lt;span class=&quot;kw3&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;addChild&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;app&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Il faut que cette class étende &lt;strong&gt;MovieClip&lt;/strong&gt;, ensuite on fait un &lt;strong&gt;stop()&lt;/strong&gt;. C'est donc dans cette fameuse class qu'on va pouvoir faire un preload et instancier la class &lt;em&gt;Main&lt;/em&gt; après un &lt;strong&gt;nextFrame()&lt;/strong&gt;.&lt;/p&gt;


&lt;p&gt;Pour vérifier que tout est chargé, il y a les propriétés &lt;strong&gt;framesLoaded&lt;/strong&gt; et &lt;strong&gt;totalFrames&lt;/strong&gt; qu'on peut tester.&lt;/p&gt;


&lt;p&gt;J'ai remarqué que si on ne fait pas le &lt;strong&gt;nextFrame()&lt;/strong&gt;, ça ne marche pas. Il faut aussi instancier la class principale puis l'ajouter avec &lt;strong&gt;addChild&lt;/strong&gt;, donc ce n'est pas vraiment une deuxième frame qu'on crée avec l'instance &lt;em&gt;Main&lt;/em&gt;, mais plutôt une frame vide avec comme enfant, une instance de &lt;em&gt;Main&lt;/em&gt;.&lt;/p&gt;

&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;A l'époque, toutes mes recherches pointaient sur le même exemple, un blog anglais. Je me suis dit que ça serait intéressant d'expliquer un peu en français la technique.&lt;/p&gt;


&lt;p&gt;L'inconvénient, c'est qu'il faut connaitre le nom de la class principale dans la class &lt;em&gt;Preload&lt;/em&gt;. C'est embêtant si on veut rendre ça facilement interchangable.&lt;/p&gt;

&lt;/section&gt;</description>
    
    
    
          <comments>http://blog.neolao.com/post/2009/04/04/71-preload-en-pure-as3#comment-form</comments>
      <wfw:comment>http://blog.neolao.com/post/2009/04/04/71-preload-en-pure-as3#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.neolao.com/feed/atom/comments/71</wfw:commentRss>
      </item>
    
  <item>
    <title>Externaliser les commentaires</title>
    <link>http://blog.neolao.com/post/2009/01/15/70-externaliser-les-commentaires</link>
    <guid isPermaLink="false">urn:md5:b249d7c010aad67fc73b1ccf07742807</guid>
    <pubDate>Thu, 15 Jan 2009 13:58:00 +0000</pubDate>
    <dc:creator>neolao</dc:creator>
        <category>PHP</category>
            
    <description>&lt;p&gt;&lt;img src=&quot;http://blog.neolao.com/public/disqus.jpg&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; Je voulais donner la possibilité d'ajouter des commentaires à certaines pages de mes sites, sans pour autant créer le système de soumission. Je me suis tourné vers &lt;a href=&quot;http://disqus.com&quot; hreflang=&quot;en&quot;&gt;disqus.com&lt;/a&gt; pour leur site clair et leur documentation de l'API.&lt;/p&gt;    &lt;section&gt;
&lt;h1&gt;Besoin&lt;/h1&gt;

&lt;p&gt;Pour une raison ou pour une autre, la solution d'externaliser les commentaires est intéressante.
J'ai testé l'idée sur &lt;a href=&quot;http://html-infos.net&quot; hreflang=&quot;en&quot;&gt;html-infos.net&lt;/a&gt;. Toutes les pages des éléments ont un &lt;em&gt;thread&lt;/em&gt; dédié, par exemple &lt;a href=&quot;http://html-infos.net/element/acronym&quot; hreflang=&quot;en&quot;&gt;html-infos.net/element/acronym&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Sur &lt;a href=&quot;http://disqus.com&quot; hreflang=&quot;en&quot;&gt;disqus.com&lt;/a&gt;, on peut ajouter un site, qu'on nomme &lt;em&gt;forum&lt;/em&gt;. Et dans ce forum, on peut créer des &lt;em&gt;threads&lt;/em&gt;. Dans mon cas, je crée les &lt;em&gt;thread&lt;/em&gt; avec l'API directement, parce que j'ai beaucoup de page, je n'allais pas les créer manuellement.&lt;/p&gt;

&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;Class Disqus&lt;/h1&gt;

&lt;p&gt;Je me suis créé une class PHP pour dialoguer avec l'&lt;a href=&quot;http://www.disqus.com/docs/api/&quot; hreflang=&quot;en&quot;&gt;API de disqus.com&lt;/a&gt;&amp;nbsp;: &lt;a href=&quot;http://resources.neolao.com/php/disqus&quot;&gt;http://resources.neolao.com/php/disqus&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Il faut d'abord récupérer un &lt;code&gt;user_api_key&lt;/code&gt; à cette adresse&amp;nbsp;: &lt;a href=&quot;http://www.disqus.com/api/get_my_key/&quot;&gt;http://www.disqus.com/api/get_my_key/&lt;/a&gt; (en étant loggué).&lt;/p&gt;


&lt;p&gt;Ensuite, j'utilise ma class de cette façon par exemple:&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// J'instancie ma class avec mon user_api_key&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$disqus&lt;/span&gt; = &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Disqus&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;'EYVsEbXOZ4Ntk4xVH4nGSjcJvd8uOkKi0ddGcxUMPfCDC85yDlCY1QzhYpZpN3Fa'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Je spécifie le forum que j'utilise avec un identifiant trouvé par la méthode $disqus-&amp;gt;getForumList()&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$disqus&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;setForumKey&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;75631&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Je crée à la volée le thread &amp;quot;foo&amp;quot; s'il n'existe pas&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$disqus&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;setThreadByIdentifier&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;'foo'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Je récupère tous les messages du thread&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$posts&lt;/span&gt; = &lt;span class=&quot;re0&quot;&gt;$disqus&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;getPosts&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// J'affiche&lt;/span&gt;
&lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;st0&quot;&gt;'&amp;lt;ul&amp;gt;'&lt;/span&gt;;
&lt;span class=&quot;kw1&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$posts&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$post&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;st0&quot;&gt;'&amp;lt;li&amp;gt;'&lt;/span&gt;;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$post&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;'is_anonymous'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;a href=&quot;http://www.php.net/htmlentities&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;htmlentities&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$post&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;'anonymous_author'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;'name'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;, ENT_QUOTES, &lt;span class=&quot;st0&quot;&gt;'UTF-8'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;a href=&quot;http://www.php.net/htmlentities&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;htmlentities&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$post&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;'author'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;'display_name'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;, ENT_QUOTES, &lt;span class=&quot;st0&quot;&gt;'UTF-8'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;st0&quot;&gt;' : '&lt;/span&gt;, &lt;a href=&quot;http://www.php.net/htmlentities&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;htmlentities&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$post&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;'message'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;, ENT_QUOTES, &lt;span class=&quot;st0&quot;&gt;'UTF-8'&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;'&amp;lt;/li&amp;gt;'&lt;/span&gt;;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;st0&quot;&gt;'&amp;lt;/ul&amp;gt;'&lt;/span&gt;;&lt;/pre&gt;


&lt;p&gt;Evidemment, le &lt;code&gt;user_api_key&lt;/code&gt; est faux dans cet exemple :)&lt;/p&gt;


&lt;p&gt;Pour soumettre un commentaire, c'est tout aussi simple, j'ai créé une méthode &lt;code&gt;createPost($name, $email, $message)&lt;/code&gt;.&lt;/p&gt;

&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;Je suis satisfait du site et de l'API que je trouve très claire.&lt;/p&gt;


&lt;p&gt;J'ai remarqué la possibilité de flagger des commentaires en spam et de bannir des gens. On peut aussi faire en sorte qu'il y ait une modération obligatoire des messages avant mise en ligne, et aussi définir des modérateurs.&lt;/p&gt;


&lt;p&gt;Normalement, on peut soumettre un commentaire en anonyme ou en utilisateur identifié chez disqus, mais je n'ai testé que le mode anonyme.&lt;/p&gt;


&lt;p&gt;Il y a plusieurs plugins disponibles sur le forum pour différentes plateformes. Apparement, une version javascript est en préparation, pour insérer les commentaires encore plus facilement.&lt;/p&gt;


&lt;p&gt;L'administration n'est pas complète par contre, sinon j'ai vraiment mal regardé. J'ai dû passer par l'API pour faire tout ce que j'voulais :)&lt;/p&gt;

&lt;/section&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>LOL Image</title>
    <link>http://blog.neolao.com/post/2008/12/20/69-lol-image</link>
    <guid isPermaLink="false">urn:md5:51346cd750716f017c468a68eaff3307</guid>
    <pubDate>Sat, 20 Dec 2008 17:06:00 +0000</pubDate>
    <dc:creator>neolao</dc:creator>
        <category>PHP</category>
            
    <description>&lt;p&gt;&lt;img src=&quot;http://blog.neolao.com/public/lolimg.jpg&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; J'ai eu envie de faire un site sur l'ajout de texte sur une image, paf d'un coup comme ça. Et voilà ... quelques heures plus tard &lt;a href=&quot;http://lolimg.net&quot;&gt;lolimg.net&lt;/a&gt; est né.&lt;/p&gt;    &lt;section&gt;
&lt;h1&gt;Concepte&lt;/h1&gt;

&lt;p&gt;Mon idée, c'est de proposer des images que j'ai moi même sélectionné pour le moment, et d'ajouter à la volée du texte.&lt;/p&gt;


&lt;p&gt;Ca peut donner ça par exemple:&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://lolimg.net/lapincretin.jpg?eyJmb250IjoiQWNtZSIsImZvbnRTaXplIjoiNDAiLCJmb250Q29sb3IiOiIwMDAwMDAiLCJ0ZXh0IjoiTE9MIiwieCI6IjIzMCIsInkiOiIyMDAiLCJhbmdsZSI6Ii00IiwiYm9yZGVyIjoiZmFsc2UiLCJib3JkZXJXaWR0aCI6IjEiLCJib3JkZXJDb2xvciI6IjAwMDAwMCJ9&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://lolimg.net/lapincretin.jpg?eyJmb250IjoiQWNtZSIsImZvbnRTaXplIjoiMTciLCJmb250Q29sb3IiOiJmZmZmMDAiLCJ0ZXh0IjoiQydlc3QgY29vbCBcbiAgaGVpbiA/IiwieCI6IjIyMCIsInkiOiIxNzAiLCJhbmdsZSI6Ii00IiwiYm9yZGVyIjoidHJ1ZSIsImJvcmRlcldpZHRoIjoiMiIsImJvcmRlckNvbG9yIjoiMDYwZDk5In0=&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://lolimg.net/krilin.jpg?eyJmb250IjoiQWNtZUJvbGQiLCJmb250U2l6ZSI6IjE4IiwiZm9udENvbG9yIjoiZmZmZmZmIiwidGV4dCI6IiAgQ2EgdmEgY2hpZXIgXG5kZXMgY2FjYWh1ZXR0ZXMiLCJ4IjoiMjAiLCJ5IjoiNDAiLCJhbmdsZSI6IjAiLCJib3JkZXIiOiJmYWxzZSIsImJvcmRlcldpZHRoIjoiMSIsImJvcmRlckNvbG9yIjoiMDAwMDAwIn0=&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://lolimg.net/hamster_002.jpg?eyJmb250IjoiQW5pbWVBY2UiLCJmb250U2l6ZSI6IjIwIiwiZm9udENvbG9yIjoiZmZmZmZmIiwidGV4dCI6IkplIHN1aXMgTWljaGFlbCBTY29maWVsZCIsIngiOiI1MCIsInkiOiIzNTAiLCJhbmdsZSI6IjAiLCJib3JkZXIiOiJ0cnVlIiwiYm9yZGVyV2lkdGgiOiIyIiwiYm9yZGVyQ29sb3IiOiIwMDAwMDAiLCJ3aWR0aCI6IiIsImhlaWdodCI6IiIsInJlc2l6ZVR5cGUiOiJjcm9wIn0=&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Je pensais faire un formulaire de soumission d'images, avec modération par moi avant. J'ai juste besoin de mettre une image dans un dossier.&lt;/p&gt;


&lt;p&gt;Par contre, au début, je pensais faire une configuration par image, pour mettre des paramètres par défaut, histoire de bien placer le texte.&lt;/p&gt;


&lt;p&gt;Je voulais aussi mettre des contrôles javascript pour modifier avec la souris les coordonnées, l'angle etc.&lt;/p&gt;

&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;J'me suis amusé quelques heures sur ce trip. C'est tout lol :)&lt;/p&gt;


&lt;p&gt;Accéder au site: &lt;a href=&quot;http://lolimg.net&quot;&gt;lolimg.net&lt;/a&gt;&lt;/p&gt;

&lt;/section&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Partager la veille</title>
    <link>http://blog.neolao.com/post/2008/12/06/68-partager-la-veille</link>
    <guid isPermaLink="false">urn:md5:323feb2324372f797d555e0b44569f0c</guid>
    <pubDate>Sat, 06 Dec 2008 22:20:00 +0000</pubDate>
    <dc:creator>neolao</dc:creator>
        <category>Divers</category>
            
    <description>&lt;p&gt;&lt;img src=&quot;http://blog.neolao.com/public/googlereader.jpg&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; Comme moi, j'imagine que vous lisez tous des flux d'actualité pour faire votre veille.&lt;/p&gt;


&lt;p&gt;Certains en ont plus que d'autres. J'en connais qui sont toujours en retard et n'ont pas le temps de lire tous les flux qu'ils suivent. Parce que oui, ça prend du temps de lire les flux. On apprend à zapper l'actualité avec le titre et le début du contenu, comme pour les spams nos boîtes mails.&lt;/p&gt;


&lt;p&gt;Mais tout ce travail de tri, et si on le partageait&amp;nbsp;?&lt;/p&gt;    &lt;section&gt;
&lt;h1&gt;Le lecteur de flux&lt;/h1&gt;

&lt;p&gt;Moi j'utilise Google Reader comme lecteur de flux, pour plusieurs raisons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;C'est simple&lt;/li&gt;
&lt;li&gt;Il y a une recherche made in Google&lt;/li&gt;
&lt;li&gt;Si je pars en vacances, je n'aurai pas zappé des actualités parce qu'ils ne sont plus dans le flux&lt;/li&gt;
&lt;li&gt;Je peux partager et tagger&lt;/li&gt;
&lt;li&gt;Je peux partager une note&lt;/li&gt;
&lt;/ul&gt;

&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;Mes flux générés&lt;/h1&gt;

&lt;p&gt;Et donc, quand je lis mes flux, je tagge ce que je juge intéressant, ça me donne ce genre de flux:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://feedproxy.google.com/neolao-reader-divers&quot;&gt;http://feedproxy.google.com/neolao-reader-divers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feedproxy.google.com/neolao-reader-web&quot;&gt;http://feedproxy.google.com/neolao-reader-web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feedproxy.google.com/neolao-reader-php&quot;&gt;http://feedproxy.google.com/neolao-reader-php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feedproxy.google.com/neolao-reader-flash&quot;&gt;http://feedproxy.google.com/neolao-reader-flash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feedproxy.google.com/neolao-reader-css&quot;&gt;http://feedproxy.google.com/neolao-reader-css&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feedproxy.google.com/neolao-reader-javascript&quot;&gt;http://feedproxy.google.com/neolao-reader-javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feedproxy.google.com/neolao-reader-accessibilite&quot;&gt;http://feedproxy.google.com/neolao-reader-accessibilite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feedproxy.google.com/neolao-reader-iphone&quot;&gt;http://feedproxy.google.com/neolao-reader-iphone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feedproxy.google.com/neolao-reader-jokes&quot;&gt;http://feedproxy.google.com/neolao-reader-jokes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feedproxy.google.com/neolao-reader-games&quot;&gt;http://feedproxy.google.com/neolao-reader-games&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feedproxy.google.com/neolao-reader-mac&quot;&gt;http://feedproxy.google.com/neolao-reader-mac&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://feedproxy.google.com/neolao-reader-ruby&quot;&gt;http://feedproxy.google.com/neolao-reader-ruby&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Evidemment, c'est subjectif. Mais j'ai filé ça à quelques amis et ils ont trouvé que c'était pratique, alors j'en ai fait un billet.&lt;/p&gt;


&lt;p&gt;J'ai commencé à tagger il n'y a pas si longtemps, certains tag sont presque vides, mais ils existent :)&lt;/p&gt;


&lt;p&gt;Ce qui est bien, c'est qu'on peut mettre une note dans des tags, donc générer un flux pas seulement basé sur d'autres flux.&lt;/p&gt;

&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;Je suis très content de Google Reader. Je n'ai rien à ajouter :)&lt;/p&gt;

&lt;/section&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Optimiser les performances d'un site avec YSlow</title>
    <link>http://blog.neolao.com/post/2008/11/22/67-optimiser-les-performances-d-un-site-avec-yslow</link>
    <guid isPermaLink="false">urn:md5:bd6f15b80e8d26a3d342627295e6454c</guid>
    <pubDate>Sat, 22 Nov 2008 18:32:00 +0000</pubDate>
    <dc:creator>neolao</dc:creator>
        <category>Divers</category>
            
    <description>&lt;p&gt;&lt;img src=&quot;http://blog.neolao.com/public/yslow.png&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt;Il y avait une conférence à &lt;a href=&quot;http://www.paris-web.fr/2008/&quot;&gt;Parisweb 2008&lt;/a&gt; qui m'a beaucoup intéressé. C'était sur des techniques d'optimisations d'un site pour le rendre plus rapide.
Il y a une extension &lt;a href=&quot;http://www.mozilla-europe.org/fr/firefox/&quot;&gt;Firefox&lt;/a&gt; qui s'appelle &lt;a href=&quot;http://yslow.org&quot; hreflang=&quot;en&quot;&gt;YSlow&lt;/a&gt; qui permet d'analyser une page web.&lt;/p&gt;    &lt;section&gt;
&lt;h1&gt;Une extension Firefox&lt;/h1&gt;

&lt;p&gt;Bon, comme &lt;a href=&quot;http://yslow.org&quot; hreflang=&quot;en&quot;&gt;YSlow&lt;/a&gt; est une extension &lt;a href=&quot;http://www.mozilla-europe.org/fr/firefox/&quot;&gt;Firefox&lt;/a&gt;, il faut &lt;a href=&quot;http://www.mozilla-europe.org/fr/firefox/&quot;&gt;Firefox&lt;/a&gt; ... mais aussi &lt;a href=&quot;http://www.getfirebug.com/&quot; hreflang=&quot;en&quot;&gt;Firebug&lt;/a&gt; parce que c'est une extension d'extension :) .&lt;/p&gt;

&lt;/section&gt;
&lt;section&gt;
&lt;h1&gt;Optimisations faciles&lt;/h1&gt;

&lt;p&gt;Je ne vais pas faire un didactitiel de comment &lt;a href=&quot;http://yslow.org&quot; hreflang=&quot;en&quot;&gt;YSlow&lt;/a&gt; fonctionne, c'est vraiment simple et il y a de la documentation sur le site officiel.&lt;/p&gt;


&lt;p&gt;Par contre, je vais vous dire ce que j'ai simplement ajouté comme optimisation, sans rien toucher au site.
J'ai fait mes tests sur mon &lt;a href=&quot;http://html-infos.net/&quot;&gt;site de référence HTML&lt;/a&gt; que je suis en train de faire (c'est pas fini quoi :) ) et qui est hébergé sur &lt;a href=&quot;http://www.ovh.com/fr&quot;&gt;OVH&lt;/a&gt; en mutualisé. D'ailleurs, c'est un &lt;a href=&quot;http://www.ovh.com/fr/particulier/produits/start1m.xml&quot;&gt;hébergement gratuit avec 1Mo d'espace disque&lt;/a&gt;, largement suffisant.&lt;/p&gt;

&lt;section&gt;
&lt;h1&gt;Dates d'expiration&lt;/h1&gt;

&lt;p&gt;Première optimisation, ajouter des dates d'expiration aux fichiers pour que le navigateur n'ait pas à les chercher trop souvent.
Je fais ça dans un .htaccess:&lt;/p&gt;

&lt;pre class=&quot;code&quot;&gt;ExpiresActive On
ExpiresByType image/gif &amp;quot;access plus 10 years&amp;quot;
ExpiresByType image/jpeg &amp;quot;access plus 10 years&amp;quot;
ExpiresByType image/png &amp;quot;access plus 10 years&amp;quot;
ExpiresByType text/css &amp;quot;access plus 10 years&amp;quot;
ExpiresByType application/javascript &amp;quot;access plus 10 years&amp;quot;
ExpiresByType text/javascript &amp;quot;access plus 10 years&amp;quot;
&amp;nbsp;&lt;/pre&gt;

&lt;/section&gt;
&lt;section&gt;
&lt;h1&gt;Les informations ETag&lt;/h1&gt;

&lt;p&gt;Les &lt;a href=&quot;http://en.wikipedia.org/wiki/HTTP_ETag&quot; hreflang=&quot;en&quot;&gt;informations ETag&lt;/a&gt;, c'est bien mais ça faisait doublon avec ce que j'ai fait avant avec la date d'expiration. Et puis d'ailleurs, j'ai même pas compris comment ça marchait. J'ai donc désactivé l'envoi de ces informations dans le .htaccess:&lt;/p&gt;

&lt;pre class=&quot;code&quot;&gt;FileETag none
&amp;nbsp;&lt;/pre&gt;

&lt;/section&gt;
&lt;section&gt;
&lt;h1&gt;Compression des fichiers&lt;/h1&gt;

&lt;p&gt;Pour les navigateurs qui le supporte, il est possible d'envoyer les fichiers en compressé. Ensuite, le navigateur les décompresse.&lt;/p&gt;

&lt;pre class=&quot;code&quot;&gt;AddOutputFilterByType DEFLATE text/javascript application/javascript text/css application/xhtml+xml text/html
&amp;nbsp;&lt;/pre&gt;


&lt;p&gt;J'ai fait le test en désactivant le header &lt;em&gt;&quot;Accept-Encoding: gzip,deflate&quot;&lt;/em&gt; de Firefox pour voir, et ça marche, les fichiers ne sont plus envoyés en compressés.&lt;/p&gt;

&lt;/section&gt;
&lt;section&gt;
&lt;h1&gt;Les fichiers javascript&lt;/h1&gt;

&lt;p&gt;Une des recommentations de &lt;a href=&quot;http://yslow.org&quot; hreflang=&quot;en&quot;&gt;YSlow&lt;/a&gt; est de ne pas mettre les fichiers javascripts dans le &lt;strong&gt;&lt;a href=&quot;http://html-infos.net/fr/element/head&quot;&gt;&amp;lt;head&amp;gt;&lt;/a&gt;&lt;/strong&gt;, je les ai donc mis à la fin. C'est parce que &lt;a href=&quot;http://developer.yahoo.com/performance/rules.html#js_bottom&quot; hreflang=&quot;en&quot;&gt;les scripts bloquent les téléchargements&lt;/a&gt; en parallèle.&lt;/p&gt;

&lt;/section&gt;
&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;Et avec tout ça, mon site a une note de &lt;strong&gt;performance A&lt;/strong&gt;, et je suis trop content ... :)&lt;/p&gt;


&lt;p&gt;A part la dernière astuce avec les javascripts, j'ai simplement modifié mon .htaccess, fastoche!
Bon, vérifiez quand même votre configuration serveur pour savoir si vous pouvez le faire.&lt;/p&gt;

&lt;/section&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Découverte de Ruby</title>
    <link>http://blog.neolao.com/post/2008/08/31/66-decouverte-de-ruby</link>
    <guid isPermaLink="false">urn:md5:e1867c522956de5d5f1b992850d4fbc6</guid>
    <pubDate>Sun, 31 Aug 2008 21:55:00 +0000</pubDate>
    <dc:creator>neolao</dc:creator>
        <category>Divers</category>
            
    <description>&lt;p&gt;&lt;img src=&quot;http://blog.neolao.com/public/rails.png&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; Depuis le temps que mes collègues en parlent, il fallait bien que j'essaie. Me voilà donc embarqué dans un petit projet perso en ruby. Pour découvrir simplement le langage et faire rapidement quelque chose, j'ai commencé avec Ruby On Rails.&lt;/p&gt;    &lt;section&gt;
&lt;h1&gt;Premiers pas&lt;/h1&gt;

&lt;p&gt;Direction &lt;a href=&quot;http://www.rubyonrails.com&quot; hreflang=&quot;en&quot;&gt;rubyonrails.com&lt;/a&gt; pour installer tout le bazar.&lt;/p&gt;


&lt;p&gt;On apprend qu'il faut installer &lt;strong&gt;RubyGems&lt;/strong&gt;, qui est le &lt;em&gt;packaging system&lt;/em&gt;. C'était déjà installé sur mon mac. J'ai juste eu besoin de lancer dans le terminal:&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;gem update rails
gem install rails&lt;/pre&gt;


&lt;p&gt;Tout est prêt pour créer une application:&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;cd&lt;/span&gt; chemin/vers/mon/appli
rails .&lt;/pre&gt;


&lt;p&gt;Ca va créer plein de dossiers et fichiers. On peut déjà lancer le serveur web:&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;ruby script/server&lt;/pre&gt;


&lt;p&gt;Et on accède au site sur&amp;nbsp;: &lt;em&gt;http://localhost:3000/&lt;/em&gt;&lt;/p&gt;

&lt;/section&gt;
&lt;section&gt;
&lt;h1&gt;Le projet ezBudget&lt;/h1&gt;

&lt;p&gt;Pour mettre en pratique, rien de vaut un bon petit projet tout simple.
Le site est un gestionnaire de comptes en banque. On peut gérer ses entrées et sorties d'argents automatiques ou non.&lt;/p&gt;


&lt;p&gt;Après analyse et croquis sur mon cahier à idées, voilà ce qu'il me faudra apprendre:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la structure de rails (les configs, les routes, le MVC, les layouts, les partials, les helpers, etc.)&lt;/li&gt;
&lt;li&gt;l'authentification&lt;/li&gt;
&lt;li&gt;les accès à une base de données (ou plusieurs)&lt;/li&gt;
&lt;li&gt;la localisation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dans ce projet, je pense que je ne vais pas utiliser les plugins, mais m'en inspirer. C'est toujours la même chose, les plugins c'est bien gentil, mais ils n'ont jamais les comportements qu'on veut.&lt;/p&gt;

&lt;section&gt;
&lt;h1&gt;La structure&lt;/h1&gt;

&lt;p&gt;Rien de particulier pour l'instant, j'ai déjà vu des architectures similaires en php.&lt;/p&gt;
&lt;/section&gt;
&lt;section&gt;
&lt;h1&gt;L'authentification et l'accès à une base de données&lt;/h1&gt;

&lt;p&gt;Il y a plusieurs techniques pour l'authentification. J'ai installé &lt;em&gt;restful_authentication&lt;/em&gt; en faisant:&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;ruby script/plugin install restful_authentication&lt;/pre&gt;

&lt;p&gt;Je vais l'étudier pour faire l'authentification que je veux. Et j'apprendrai en même temps comment on crée un accès à une base de données.&lt;/p&gt;
&lt;/section&gt;
&lt;section&gt;
&lt;h1&gt;La localisation&lt;/h1&gt;

&lt;p&gt;Sûrement la partie la plus fouillie, j'ai opté pour ça&amp;nbsp;: &lt;a href=&quot;http://almosteffortless.com//2008/07/21/simple-localization-in-rails-22/&quot; hreflang=&quot;en&quot;&gt;http://almosteffortless.com//2008/07/21/simple-localization-in-rails-22/&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;J'ai trouvé &lt;em&gt;Globalize&lt;/em&gt; pas clair et d'autres pas mieux.&lt;/p&gt;


&lt;p&gt;Je pensais que le système de localisation me serait fourni, mais je me retrouve à devoir chercher des plugins pas bien documentés.&lt;/p&gt;
&lt;/section&gt;
&lt;section&gt;
&lt;h1&gt;Générer la documentation&lt;/h1&gt;

&lt;p&gt;Un truc chouette, c'est le générateur de documentation du site qui se lance comme ça:&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;rake doc:app&lt;/pre&gt;

&lt;/section&gt;
&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;Installation sur mon dédier&lt;/h1&gt;

&lt;p&gt;Maintenant, je veux que ça marche sur mon serveur. J'installe rails dessus, et j'arrive à faire tourner le site comme sur mon local, mais c'est sur le port 3000.&lt;/p&gt;


&lt;p&gt;J'ai fait au plus simple en utilisant le mod_proxy de apache (parce que j'ai déjà un apache sur le serveur). Voici la configuration du VirtualHost&lt;/p&gt;
&lt;pre class=&quot;code apache&quot;&gt;&amp;lt;VirtualHost *&amp;gt;
         &lt;span class=&quot;kw1&quot;&gt;ServerName&lt;/span&gt; ezbudget.net
         &lt;span class=&quot;kw1&quot;&gt;ProxyPass&lt;/span&gt; / http://localhost:&lt;span class=&quot;nu0&quot;&gt;3000&lt;/span&gt;/
         &lt;span class=&quot;kw1&quot;&gt;ProxyPassReverse&lt;/span&gt; / http://localhost:&lt;span class=&quot;nu0&quot;&gt;3000&lt;/span&gt;/
         ProxyPreserveHost &lt;span class=&quot;kw2&quot;&gt;On&lt;/span&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;/pre&gt;


&lt;p&gt;J'ai vu qu'il y avait différentes façons de faire marcher un site ruby en passant par apache, mais celle là est simple. Ensuite, je ne sais pas si c'est bien ou pas.&lt;/p&gt;

&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;C'est sympa, même si je suis un peu perdu. A la différence d'un framework dans un langage que je connais, là je ne connais rien. Je ne sais même pas où chercher et je ne trouve pas forcément la doc qui me convient.&lt;/p&gt;


&lt;p&gt;J'ai trouvé le contenu des classes de rails au fin fond de mon disque dur. Par exemple &lt;em&gt;ActionController::Base&lt;/em&gt; se trouve ici&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;code bash&quot;&gt;/System/Library/Frameworks/Ruby.framework/Versions/&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;.&lt;span class=&quot;nu0&quot;&gt;8&lt;/span&gt;/usr/lib/ruby/gems/&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;.&lt;span class=&quot;nu0&quot;&gt;8&lt;/span&gt;/gems/actionpack-&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;.&lt;span class=&quot;nu0&quot;&gt;13&lt;/span&gt;.&lt;span class=&quot;nu0&quot;&gt;6&lt;/span&gt;/lib/action_controller/base.rb&lt;/pre&gt;


&lt;p&gt;Bref, j'en dirai un peu plus au fur et à mesure que j'avance dans le projet.&lt;/p&gt;


&lt;p&gt;Sinon, voilà un peu les sites où je suis allé, sans citer les divers wiki et blog trouvés par google sur des thèmes précis:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://fr.wikipedia.org/wiki/Ruby&quot;&gt;http://fr.wikipedia.org/wiki/Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.ruby-lang.org/fr/&quot;&gt;http://www.ruby-lang.org/fr/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.rubyonrails.com&quot; hreflang=&quot;en&quot;&gt;http://www.rubyonrails.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://api.rubyonrails.org/&quot; hreflang=&quot;en&quot;&gt;http://api.rubyonrails.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://wiki.rubyonrails.org/rails&quot; hreflang=&quot;en&quot;&gt;http://wiki.rubyonrails.org/rails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://almosteffortless.com//2008/07/21/simple-localization-in-rails-22/&quot; hreflang=&quot;en&quot;&gt;http://almosteffortless.com//2008/07/21/simple-localization-in-rails-22/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;/section&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Première application iPhone</title>
    <link>http://blog.neolao.com/post/2008/08/20/65-premiere-application-iphone</link>
    <guid isPermaLink="false">urn:md5:298639117f95789c12eb19e1caee7c55</guid>
    <pubDate>Wed, 20 Aug 2008 22:33:00 +0000</pubDate>
    <dc:creator>neolao</dc:creator>
        <category>iPhone</category>
            
    <description>&lt;p&gt;&lt;img src=&quot;http://blog.neolao.com/public/opquast.png&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; J'ai dans mon cahier à idées plusieurs applications iPhone en cogitation. Mais il fallait que je fasse mes premiers pas avec des choses simples, puis j'augmenterai la difficulté.&lt;/p&gt;


&lt;p&gt;J'ai donc choisi de mettre sur mobile les &lt;a href=&quot;http://fr.opquast.com/bonnes-pratiques/&quot;&gt;bonnes pratiques Opquast&lt;/a&gt;.&lt;/p&gt;    &lt;section&gt;
&lt;h1&gt;L'environnement de développement&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;http://blog.neolao.com/public/xcode.jpg&quot;&gt;&lt;img src=&quot;http://blog.neolao.com/public/xcode_small.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Tout d'abord, il a fallu que je m'habitue à xcode, l'éditeur d'applications sur mac. J'ai tâtonné, mais ça allait. C'est plutôt le langage qui donné le plus de mal. Je suis tellement habitué au style ECMA script, ça m'a fait bizarre.&lt;/p&gt;


&lt;p&gt;Mais finalement, avec les exemples fournit, j'ai pu comprendre. Par contre, à part la documentation des classes, il n'y a pas grand chose, et c'est pas génial. Je me suis quand même tapé un PDF de plus 100 pages sur l'Objective-C histoire de me mettre dans le bain, mais c'était utile.&lt;/p&gt;

&lt;/section&gt;
&lt;section&gt;
&lt;h1&gt;Opquast&lt;/h1&gt;

&lt;p&gt;Oui, donc, j'ai choisit de faire cette application parce qu'elle me paraissait simple.&lt;/p&gt;


&lt;p&gt;J'ai joué avec:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tab Bar Controller&lt;/strong&gt;, qui permet d'avoir un menu en bas à 1 niveau, avec des icônes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Navigation Controller&lt;/strong&gt;,  qui met une navigation en haut, celle qu'on retrouve dans les Réglages de l'iPhone&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Table View&lt;/strong&gt;, qui sert à afficher un tableau dont je me sers pour naviguer, exactement comme dans les Réglages du mobile&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Web View&lt;/strong&gt;, qui s'utilise pour afficher du contenu HTML&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sqlite&lt;/strong&gt;, la base de donnée&lt;/li&gt;
&lt;li&gt;et la localisation de l'application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;C'est un bon début déjà.&lt;/p&gt;


&lt;p&gt;On teste l'application sur un émulateur iPhone, ça marche très bien.&lt;/p&gt;
&lt;/section&gt;
&lt;section&gt;
&lt;h1&gt;Points bloquants&lt;/h1&gt;
&lt;section&gt;
&lt;h1&gt;Les erreurs et le debuggeur&lt;/h1&gt;

&lt;p&gt;Souvent, quand les erreurs apparaissent dans la console, je ne comprend rien. Et le debuggeur, je n'ai pas compris comment il marchait encore :)&lt;/p&gt;
&lt;/section&gt;
&lt;section&gt;
&lt;h1&gt;Mettre l'application sur le mobile&lt;/h1&gt;

&lt;p&gt;Après avoir fini mon application en quelques jours, je suis resté une semaine sur ... comment mettre ce que j'ai compilé dans mon iPhone ...&lt;/p&gt;


&lt;p&gt;J'ai finalement réussi hier en lisant une phrase de la documentation que j'avais zappé. Bref, ça mériterait un tutorial cette histoire de signature Apple.&lt;/p&gt;
&lt;/section&gt;
&lt;section&gt;
&lt;h1&gt;Mettre l'application sur l'App Store&lt;/h1&gt;

&lt;p&gt;J'ai aussi galéré pour envoyer l'application sur l'App Store. C'est marqué qu'on faut uploader le binaire, mais en fait non, il faut le zipper d'abord. J'ai aussi trouvé cette info dans la doc, une toute petite phrase.&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;C'est sympa, même si je butte sur le moins compliqué apparement lol&lt;/p&gt;


&lt;p&gt;L'application Opquast devrait être en ligne prochainement, chaque soumission requiert une validation de Apple, je ne sais pas combien de temps ça prend. Je n'ai pas complètement terminé, il y a la navigation à améliorer et aussi la traduction en anglais à compléter.&lt;/p&gt;


&lt;p&gt;Je voulais surtout voir rapidement tout le processus jusqu'à l'apparition sur l'App Store, avant de continuer et de faire d'autres applications.&lt;/p&gt;


&lt;p&gt;En tout cas, on a plein d'idées au boulot :)&lt;/p&gt;


&lt;p&gt;Je vais mettre mes applications gratuites sur google code&amp;nbsp;: &lt;a href=&quot;http://code.google.com/p/iphoneapps/&quot;&gt;http://code.google.com/p/iphoneapps/&lt;/a&gt;&lt;/p&gt;

&lt;/section&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Bitlbee web</title>
    <link>http://blog.neolao.com/post/2008/07/02/64-bitlbee-web</link>
    <guid isPermaLink="false">urn:md5:b51fe816b0cd1f3db33f256f35f8ae4e</guid>
    <pubDate>Wed, 02 Jul 2008 11:27:00 +0000</pubDate>
    <dc:creator>neolao</dc:creator>
        <category>PHP</category>
            
    <description>&lt;p&gt;&lt;img src=&quot;http://blog.neolao.com/public/bitlbee.png&quot; alt=&quot;&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt; Comme je vais probablement me prendre le prochain iPhone, j'ai pensé que ça serait sympa d'être toujours connecté sur les messageries instantanées et de répondre en différé sans forcément laisser quelque chose tourner en tâche de fond sur la machine.&lt;/p&gt;


&lt;p&gt;Je peux utiliser un serveur pour rester connecté et y accéder via le web pour consulter les messages qu'on m'envoie mais aussi répondre.&lt;/p&gt;    &lt;section&gt;
&lt;h1&gt;Bitlbee&lt;/h1&gt;

&lt;p&gt;Pour rester connecté et surtout, pouvoir envoyer des messages, j'utilise &lt;a href=&quot;http://www.bitlbee.org&quot; hreflang=&quot;en&quot;&gt;bitlbee&lt;/a&gt;, un serveur IRC qui permet de se connecter sur les messageries instantanées comme Jabber et MSN.&lt;/p&gt;


&lt;p&gt;Tout marche très bien si j'utilise un client IRC.&lt;/p&gt;
&lt;/section&gt;

&lt;section&gt;
&lt;h1&gt;Web&lt;/h1&gt;

&lt;p&gt;Ensuite, l'interface web, je le fais en PHP, ainsi que le daemon qui reste connecté sur le socket.&lt;/p&gt;


&lt;p&gt;En effet, pour tester, j'ai fais simple, je lance juste un PHP avec un&lt;/p&gt;
&lt;pre class=&quot;code php&quot;&gt;&lt;a href=&quot;http://www.php.net/set_time_limit&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;set_time_limit&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;

&lt;p&gt;et une boucle sur la connexion par &lt;em&gt;fsockopen&lt;/em&gt;.&lt;/p&gt;

&lt;section&gt;
&lt;h1&gt;Mode expert&lt;/h1&gt;

&lt;p&gt;Pour l'instant, je n'ai fait que le mode pas du tout &lt;em&gt;user friendly&lt;/em&gt;:&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://blog.neolao.com/public/bitlbee_expert.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


&lt;p&gt;J'ai des commandes pour lister ceux qui sont en ligne, mettre des alias aux gens, bloquer etc.&lt;/p&gt;


&lt;p&gt;Pour envoyer un message à &lt;a href=&quot;http://www.sutekidane.net/blog/&quot;&gt;thanh&lt;/a&gt;, il me suffit d'envoyer la commande:&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;PRIVMSG thanh :ouais j'te dis ouais
&amp;nbsp;&lt;/pre&gt;

&lt;/section&gt;
&lt;/section&gt;

&lt;section&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;Tout ça, c'était pour des tests. Maintenant que mon prototype marche, je vais m'attaquer à une meilleure interface graphique.&lt;/p&gt;


&lt;p&gt;Et quand j'aurai un iPhone, ça va être tip top. Je pourrai même programmer un répondeur automatique, un peu comme &lt;a href=&quot;http://www.skaaz.fr/perso/neolao&quot;&gt;skaaz&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Evidemment, j'fournirai les sources quand ça sera montrable. C'est pour un usage unique et il faut disposer d'un serveur où on peut lancer un php en tâche de fond.
J'ai pas envie de faire un truc multi-utilisateur etc.&lt;/p&gt;

&lt;/section&gt;</description>
    
    
    
      </item>
    
</channel>
</rss>