<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Un tutoriel très court mais très dense pour apprendre Haskell.</p>
<contenttype="html"><p><img alt="Screenshot of first in small caps with and without ligatures." src="/Scratch/img/blog/Typography-and-the-Web/first_sc_screenshot.png" /></p>
<div class="intro">
<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> La typography sur le web est pourrie et nous ne somme pas près de voir ce problème réparé.</p>
</div>
<p>Je suis tombé sur ce site: <a href="http://opentypography.org/">open typography</a>. Leur message principal est&nbsp;:</p>
<blockquote>
<p>«There is no reason to wait for browser development to catch up.
We can all create better web typography ourselves, today.»</p>
</blockquote>
<p>ou en français&nbsp;:</p>
<blockquote>
<p>«Nous ne somme pas obligé d&rsquo;attendre le développement des navigateurs.
Nous pouv...</p></blockquote></p></content>
<p><em>mise à jour</em>: mise à jour pour la version 0.10 de yesod.</p>
<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Un tutoriel pour yesod, un framework web Haskell.
<contenttype="html"><p><img alt="Yesod logo made in SVG and m4" src="/Scratch/img/blog/SVG-and-m4-fractals/main.png" /></p>
<div class="intro">
<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Utiliser m4 pour accroître le pouvoir d&rsquo;<span class="sc">xslt</span> et d&rsquo;<span class="sc">svg</span>. Example cool, les fractales.</p>
</div>
<p>Lorsqu&rsquo;<span class="sc">xml</span> fût inventé beaucoup pensaient que c&rsquo;était l&rsquo;avenir.
Passer de fichiers plat à des fichiers structurés standardisés fût un grand progrès dans beaucoup de domaines.
Cerain se mirent à voir du <span class="sc">xml</span> de partout.
À tel point que les les format compatibles <span class="sc">xml</span> naquirent de toute part.
Non seulement comme format de fichie...</p></p></content>
<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span></p>
<p>Cela fait un moment que je suis la progression du <a href="http://www.yesodweb.com">framework yesod</a>.
À mon humble avis on peut commencer à l&rsquo;utiliser pour des applications sérieuses (comprendre en prod).
Avant de vous dire pourquoi vous devriez aussi le considérer, je préfère vous parler de bonnes idées (parmi d&rsquo;autres) introduites par yesod que je n&rsquo;avais jamais vu ailleurs.</p>
</div>
<h2 id="types-saufs">Types saufs</h2>
<p>Commençons par une BD d&rsquo;<a href="http://xkcd.com">xkcd</a>&nbsp;:</p>
<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> des fonctions d&rsquo;ordres supérieurs en zsh.</p>
</div>
<p>Tout d&rsquo;abord, pourquoi c&rsquo;est important d&rsquo;avoir ces fonctions.
Plus je programmais avec zsh plus j&rsquo;essayais d&rsquo;avoir un style fonctionnel.</p>
<p>Le minimum pour pouvoir avoir du code plus lisible c&rsquo;est de posséder les fonctions <code>map</code>, <code>filter</code> et <code>fold</code>.</p>
<p>Voici pourquoi avec une comparaison.
Commençons par un programme qui converti tous les gif en png dans plusieurs répertoires projets contenant tous des répertoires resources.
<span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Mon avis court et hautement subjectif concernant les différents languages de programmations que j&rsquo;ai utilisé.
<contenttype="html"><p><img alt="Über leet use vim!" src="/Scratch/img/blog/Learn-Vim-Progressively/uber_leet_use_vim.jpg" /></p>
<div class="intro">
<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Vous désirez apprendre vim (le meilleur editeur de texte connu à ce jour) le plus rapidement possible. Voici mes conseils pour vous aider. Commencez à apprendre le minimum vital, puis apprenez doucement de nouvelles commandes.</p>
</div>
<p><a href="http://www.vim.org">Vim</a> ou l&rsquo;éditeur qui vallait 3 milliards&nbsp;:</p>
<blockquote>
<p>Meilleur, plus fort, plus rapide.</p>
</blockquote>
<p>Apprenez <a href="http://www.vim.org">vim</a> et ce sera votre dernier éditeur.
Aucun éditeur que je connaisse ne le surpasse.
Sa prise en mais est difficile, mais p...</p></p></content>
<contenttype="html"><p><code>diff</code> est un utilitaire très pratique, mais il n&rsquo;est pas facile à lire pour nous, les Hommes.</p>
<p>C&rsquo;est pourquoi, lorsque vous utilisez <code>git</code>, il vous montre un formatage plus agréable avec des couleurs.</p>
<p>Voici le script que j&rsquo;utilise lorsque je veux avoir un <code>diff</code>à la git.</p>
<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Une méthode de gestion des mots de passes que j&rsquo;utilise avec succès depuis quelques années.<br />
Je ne mémorise qu&rsquo;un seul mot de passe de très bonne qualité.
J&rsquo;utilise des mots de passe différents sur tous les sites.</p>
</div>
<p>Avant de commencer, je tiens à préciser qu&rsquo;il s&rsquo;agit d&rsquo;une tentative de vous vendre mon appli iPhone&nbsp;;-).</p>
<p>Vous êtes toujours là&nbsp;?
Bon, d&rsquo;accord, même si vous ne téléchargez pas mon application vous pouvez quand même utili...</p></p></div></p></content>
<p><em>Mise à jour&nbsp;:</em> Je pense que je vais finallement changer d&rsquo;avis.
Pourquoi&nbsp;?
Tout d&rsquo;abord, je viens de découvrir un convertisseur javascript vers coffeescript, ensuite Denis Knauf m&rsquo;a laissé un commentaire et m&rsquo;a appris l&rsquo;existence d&rsquo;une fonction <code>CoffeeScript.eval</code>. De plus, il faut voir CoffeeScript comme javascript avec une syntaxe similaire à Ruby et pas comme un langage similaire à Ruby.</p>
</div>
<div class="intro">
<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Qu&rsquo;est-ce qui n&rsquo;allait pas avec Coffeescript? La meta-programm...</p></div></p></content>
<contenttype="html"><p>Bonne et heureuse année&nbsp;!</p>
<p>J&rsquo;étais très occupé ces derniers mois.
Maintenant il me semble que je vais pouvoir faire revivre ce blog.</p>
<p>J&rsquo;ai fait un outil qui permet d&rsquo;écrire des livre en utilisant une syntaxe proche de markdown.
C&rsquo;est un markdown avec des macros (essentiel pour les textes longs).
De plus le système gère la génération de pages HTML ainsi que du PDF engendré avec du XeLaTeX.
Je n&rsquo;en ai pas encore terminé avec ça. Mais si je tarde trop, je communiquerai lorsque j&rsquo;aurai fini le minimum.</p>
<p>J&rsquo;ai écrit un framework MVC pour application javascript simple mais néanmoins très rapide.</p>
<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> J&rsquo;ai fait un système simple de macros pour mon blog. Par exemple, il me suffit d&rsquo;écrire %<span></span>latex et ça affiche <span style="text-transform: uppercase">L<sup style="vertical-align: 0.15em; margin-left: -0.36em; margin-right: -0.15em; font-size: .85em">a</sup>T<sub style="vertical-align: -0.5ex; margin-left: -0.1667em; margin-right: -0.125em; font-size: 1em">e</sub>X</span>.</p>
</div>
<p>J&rsquo;ai ajouter un système de macro pour mon système de blog.
<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Je me suis amuséà lire un fichier <code>wav</code>. Le <code>C</code> fut le langage le mieux adaptéà ce traitement. Bien meilleur que Ruby par exemple.</p>
<p>edit: Je voulais que ce programme fonctionne sur une machine spécifique. En aucun cas je ne pensais publier ce code pour une utilisation autre que celle-ci.</p>
</div>
<p>J&rsquo;ai eu besoin de calculer la somme des valeurs absolue des données d&rsquo;un fichier <code>wav</code>.
Pour des raison d&rsquo;efficacité (et aussi de fun), j&rsquo;ai fait le programme en <code>C</code>.</p>
<p>Celà faisait longtemps que je n&rsquo;avais pas programmé en <code>C</code>.
De mémoire il était peu aisé de manipuler des ...</p></content>
<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span><em>avec un Mac</em></p>
<ul>
<li>Récupérez un certificat signé par une AC: <a href="http://www.instantssl.com/ssl-certificate-products/free-email-certificate.html">cliquez ici pour un certificat gratuit</a>&nbsp;;</li>
<li>ouvrez le fichier&nbsp;;</li>
<li>supprimer le fichier en mode sécurisé&nbsp;;</li>
<li>utilisez Mail plutôt que l&rsquo;interface web de gmail.</li>
</ul>
</div>
<p>J&rsquo;ai (re)découvert comment adoptez la norme S/MIME.
J&rsquo;ai été surpris de voir à quel point ce fut aisé.
Il y a seulement quelques années c&rs...</p></p></content>
voici deux fonctions à intégrer à votre application iPhone pour afficher l&rsquo;encodage en base64 ou en hexadecimal du hash sha1 d&rsquo;un string en Objective-C pour iPhone.</p>
<p>Pour l&rsquo;usage c&rsquo;est très simple, copiez le code dans la classe de votre choix.
<contenttype="html"><p>J&rsquo;ai dû envoyer un mail en ligne de commande récemment.
Quelle ne fût pas ma surprise lorsque je constatais que ce n&rsquo;était vraiment pas évident.
Je n&rsquo;avais ni <code>pine</code> ni <code>mutt</code>. Seulement <code>mail</code> et <code>mailx</code>.</p>
<p>Ce qu&rsquo;on trouve sur internet pour envoyer un mail avec fichier attaché c&rsquo;est ça&nbsp;:</p>
<contenttype="html"><h1 class="first" id="maintenant-sur-herokuhttpherokucom">Maintenant sur <a href="http://heroku.com">Heroku</a></h1>
<p>J&rsquo;ai changé mon hébergeur. Mobileme n&rsquo;est absolument pas adaptéà la diffusion de mon blog. C&rsquo;est pourquoi je suis passéà<a href="http://heroku.com">Heroku</a>.</p>
<p>Mais comme vous devez le savoir mon blog est un site complètement statique.
J&rsquo;utilise <a href="http://nanoc.stoneship.org/">nanoc</a> pour l&rsquo;engendrer.
Avoir un site statique amène beaucoup d&rsquo;avantages par rapport à un site dynamique. Surtout en terme de sécurité.
Voici comment configurer un site statique sur heroku.</p>
<p>La racine de mes fichiers est &lsquo;/output&rsquo;. Vous devez simplement créer deux fichiers. Un fichier <code>config.ru</code></p></content>
<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr>&nbsp;: </span> Je crée un mode mathématique simple pour parler de différents types d&rsquo;<em>indécidabilités</em>&nbsp;:</p>
<ul>
<li>indécidabilité due aux erreurs d&rsquo;observation&nbsp;;</li>
<li>grandes erreurs résultant de petites erreurs de mesure&nbsp;;</li>
<contenttype="html"><p>Avant les vacances beaucoup d&rsquo;utilisateurs se sont plaints de la lenteur de rendu de mon site.
Il s&rsquo;agit notamment de problèmes avec Chrome en particulier.
Mais pour éviter tout problème.
J&rsquo;ai complètement modifié le style de mon site web.
Il est inspiré du style de l&rsquo;application iBooks<small>&copy;</small> sur iPhone<small>&copy;</small>.</p>
<p>Dites moi ce que vous pensez de ce nouveau design.</p>
<contenttype="html"><p>Beaucoup d&rsquo;utilisateurs de <a href="http://reddit.com">Reddit</a> m&rsquo;ont rapporté que mon site était très long à charger et à<em>scroller</em>.
Ils pensaient qu&rsquo;il s&rsquo;agissait d&rsquo;un problème dû aux ombres que j&rsquo;applique sur le texte.
J&rsquo;étais un peu surpris puisque je fais mes tests sur une machine vraiment très lente et je n&rsquo;avais jamais détecté ces problèmes.
En réalité, ce qui ralenti le rendu de ce site est par ordre d&rsquo;importance&nbsp;:</p>
<ol>
<li>Les dégradés sur Chrome (pas dans Safari sur Mac)</li>
<li>les <em>box shadows</em> sur Firefox</li>
<p>Sur Safari il n&rsquo;y a absolument aucun problème avec les dégradés. Par contre sur Chrome sous Linux le si...</p></content>
<p><abbr title="Trop long à lire">tlàl</abbr>:</p>
<ul>
<li>J&rsquo;ai essayé de faire une version de <a href="http://yannesposito.com/Softwares/YPassword.html">YPassword</a> en jQuery et avec Cappuccino.</li>
<li>Cappuccino est très bien sur les navigateurs non mobile mais l&rsquo;application pèse 1.4Mo et n&rsquo;est pas compatible avec l&rsquo;iPhone.</li>
<li>la version jQuery n&rsquo;est pas aussi jolie que la version réalisée avec Cappuccino mais elle pèse seulement 106Ko et est compatible avec l&rsquo;iPhone.</li>
<p>Avant de commencer, je dois dire que je sais que Cappuccino et jQuery ne sont pas plus comparable que Cocoa et la <em>standard library</em> en...</p></div></hr></content>
<contenttype="html"><p>Voici un moyen très simple de ne plus être comptabilisé dans les visites de son propre site.
Tout d&rsquo;abord, vous devriez jeter un coup d&rsquo;œil sur comment <a href="/Scratch/fr/blog/2010-06-17-track-events-with-google-analytics">je gère les systèmes de récupération de statistiques</a>.
Je centralise tout dans un seul fichier javascript ce qui facilite le travail.</p>
<p>Cette méthode nécessite l&rsquo;utilisation de <code>jquery-cookie</code>.</p>
<p>Avant de comptabiliser les visites, je vérifie que la clé<code>admin</code> n&rsquo;est pas utilisée dans mes cookies.</p>
<contenttype="html"><p>Voici comment analyser tous les clics que font vos utilisateurs sur votre blog en incluant google analytics de façon asynchrone.</p>
<p>Dans le html, il faut utiliser <a href="http://jquery.com">jQuery</a> et un fichier que j&rsquo;ai appelé<code>yga.js</code>&nbsp;:</p>
<contenttype="html"><p>J&rsquo;ai publié une version <em>light</em> de mon système de blog hier soir. Par <em>light</em> il faut comprendre avec un CSS plus épuré et plus portable (sans les bords ronds).
Vous pouvez le récupérer sur <a href="http://github.com/yogsototh/nanoc3_blog">github.com</a>.</p>
<p>Que pouvez-vous attendre de ce système de blog&nbsp;?</p>
<ul>
<li>Tous les avantages liés à<a href="http://nanoc.stoneship.org">nanoc</a>&nbsp;;</li>
<li>Facilité de la gestion de plusieurs langues&nbsp;;</li>
<li>coloration syntaxique des codes sources pour la plupart des languages&nbsp;;</li>
<li>commentaires gérés avec <a href="http://intensedebate.org">intenseDebate</a> de façon asynchrone&nbsp;;</li>
<li>très portable avec ou sans javascript, XHTML Strict 1.0 / CSS3&nbsp;;</li></ul></content>
<contenttype="html"><p>Je traduis la plupart de mes articles pour qu&rsquo;ils soient disponibles en français et en anglais.
La façon que l&rsquo;on m&rsquo;a conseilléétait d&rsquo;avoir un fichier par langue. En général ça donne ça.</p>
<pre class="twilight">
Bonjour,
voici un exemple de texte en français.
[image](url)
</pre>
<pre class="twilight">
Hello,
here is an example of english text.
[image](url)
</pre>
<p>Cette façon de traduire vous impose une certaine façon de traduire.
D&rsquo;abord écrire entièrement le texte dans une langue,
puis copier le fichier et enfin retraduire dans une nouvelle langue.</p>
<p>Le problème, c&rsquo;est que très souvent, les articles ont des parties communes non négligeables. Par exemple, les images, les codes sources, etc&hellip;
<p><abbr title="Trop Long À Lire"><span class="sc">tlàl</span></abbr>&nbsp;:</p>
<ul>
<li>J&rsquo;ai essayé de programmer un simple filtre&nbsp;;</li>
<li>J&rsquo;ai été bloqué pendant deux jours&nbsp;;</li>
<li>J&rsquo;ai arrêté de penser comme un robot&nbsp;;</li>
<li>J&rsquo;ai utilisé un papier et un stylo&nbsp;;</li>
<li>J&rsquo;ai fait un peu de maths&nbsp;;</li>
<li>J&rsquo;ai résolu le problème en 10 minutes&nbsp;;</li>
<li>Conclusion: Pragmatisme n&rsquo;est pas&nbsp;: &laquo;n&rsquo;utilisez jamais la théorie&raquo;.
</div>
</ul>
<h2 id="rsum-plus-long-que-le--abbr-titletrop-long--liresctllscabbr">Résumé (plus long que le <abbr title="Trop Long À Lire"><span class="sc">tlàl</span></abbr>)</h2>
<contenttype="html"><p>Sur ma page d&rsquo;accueil vous pouvez voir la liste des mes derniers articles avec le début de ceux-ci. Pour arriver à faire ça, j&rsquo;ai besoin de couper le code XHTML de mes pages en plein milieu. Il m&rsquo;a donc fallu trouver un moyen de les réparer.</p>
<p>Je devais écrire d&rsquo;autres articles pour ce blog. J&rsquo;ai noté plein d&rsquo;idées dans mes <em>todolist</em>. Mais j&rsquo;avais pas mal d&rsquo;autres choses à faire. Et jusqu&rsquo;ici, j&rsquo;ai toujours dit &laquo;je le ferai plus tard&raquo;. Ce qui m&rsquo;a fait agir, c&rsquo;est la petite réflexion que j&rsquo;avais lu une fois.
&gt; Arrétez d&rsquo;écrire des <code>TODO</code> dans votre code est faites le maintenant&nbsp;!<br />
&gt; Vous serez surpris de l&rsquo;efficacité de cette mesure.</p>
Voici une solution pour conserver des branches divergentes avec <code>git</code>.
Parce qu&rsquo;il est facile de <em>merger</em> par erreur, je propose un script qui encapsule le comportement de <code>git</code> pour interdire certains <em>merges</em> dangereux. Mais qui permet aussi de faire des merges en cascades de la racines vers les autres branches.
</span></p>
<h2 id="se-prmunir-contre-les-erreurs">Se prémunir contre les erreurs</h2>
<p>Je travaille sur un projet dans lequel certaines de mes branches <code>git</code> doivent rester divergentes. Et les divergences devraient aller en s&rsquo;accentuant.</p>
<p>J&rsquo;utilise aussi certaines branches qui contiennent la partie commune de ces projets.</p>
<p>Disons que j&rsquo;ai les branches&nbsp;:</p>
<h2 id="cloner-toutes-les-branches">Cloner toutes les branches</h2>
<p><code>git clone</code> peut seulement récuper la branche <code>master</code>.</p>
<p>Si vous n&rsquo;avez pas beaucoup de branches, vous pouvez simplement les clone le project et ensuite pour chacune d&rsquo;entre elle lancer la commande suivante&nbsp;:</p>
<contenttype="html"><p>Les expressions régulières sont très utiles. Cependant, elles ne sont pas toujours la meilleure manière d&rsquo;aborder certain problème autour des chaines de caractères.
Et surtout quand les transformations que vous voulez accomplir sont simples.</p>
<p>Je voulais savoir comment récupérer le plus vite possible l&rsquo;extension d&rsquo;un nom de fichier. Il y a trois manière naturelle d&rsquo;accomplir celà&nbsp;:</p>
<contenttype="html"><p>Assez bizarrement, je n&rsquo;ai trouvé aucun outil UNIX pour découper un fichier par mot clé.
Alors j&rsquo;en ai fait un en <code>awk</code>. Je le met ici principalement pour moi, mais ça peut toujours servir à quelqu&rsquo;un d&rsquo;autre.
Le code suivant découpe un fichier pour chacune de ses ligne contenant le mot <code>UTC</code>.</p>
<contenttype="html"><p>Dans mon <a href="previouspost">précédent article</a> j&rsquo;ai donné certaines astuces pour matcher &lsquo;tout sauf quelque chose&rsquo;. De la même manière, un truc pour matcher la chaine de caractère la plus petite possible.
Disons que vous voulez matcher la chaine de caractère entre &lsquo;a&rsquo; et &lsquo;b&rsquo;. Par exemple, vous voulez matcher&nbsp;:</p>
<p>et vous devez obtenir le même comportement avec seulement une expression régulière. Le problème c&rsquo;est que le complémentaire des régulier n&rsquo;est pas régulier. Celà peut s&rsquo;avérer impossible.</p>
<p>Cependant, pour certaines expressions ce peut être possible<sup><a href="#note1">&dagger;</a></sup>. Disons que vous souhaitez <em>matcher</em> toutes les lignes contenant le mot <code>bull</code>, mais que vous ne souhaitez pas matcher <code>bu...</code></p></content>