scratch/output/Scratch/en/blog/programming-language-experience/index.html
2011-07-05 14:39:59 +02:00

520 lines
No EOL
27 KiB
HTML

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="shortcut icon" type="image/x-icon" href="/Scratch/img/favicon.ico" />
<link rel="stylesheet" type="text/css" href="/Scratch/assets/css/main.css" />
<link rel="stylesheet" type="text/css" href="/Scratch/css/twilight.css" />
<link rel="stylesheet" type="text/css" href="/Scratch/css/idc.css" />
<link rel="alternate" type="application/rss+xml" title="RSS" href="http://feeds.feedburner.com/yannespositocomen"/>
<link rel="alternate" lang="fr" xml:lang="fr" title="programming language experience" type="text/html" hreflang="fr" href="/Scratch/fr/blog/programming-language-experience/" />
<link rel="alternate" lang="en" xml:lang="en" title="programming language experience" type="text/html" hreflang="en" href="/Scratch/en/blog/programming-language-experience/" />
<script type="text/javascript" src="/Scratch/js/jquery-1.3.1.min.js"></script>
<script type="text/javascript" src="/Scratch/js/jquery.cookie.js"></script>
<script type="text/javascript" src="/Scratch/js/index.js"></script>
<!--[if lt IE 9]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js"></script>
<![endif]-->
<!-- < % if containMaths %>
<script type="text/javascript" src="/Scratch/js/MathJax/MathJax.js"></script>
< % end %>
-->
<title>programming language experience</title>
</head>
<body lang="en">
<script type="text/javascript">// <![CDATA[
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
// ]]>
</script>
<div id="content">
<div id="choix">
<div class="return"><a href="#entete">&darr; Menu &darr;</a></div>
<div id="choixlang">
<a href="/Scratch/fr/blog/programming-language-experience/" onclick="setLanguage('fr')">en Français</a>
</div>
</div>
<div id="titre">
<h1>
programming language experience
</h1>
</div>
<div class="flush"></div>
<div class="flush"></div>
<div id="afterheader">
<div class="corps">
<p><img alt="Title image" src="/Scratch/img/blog/programming-language-experience/main.png" /></p>
<div class="intro">
<span class="sc"><abbr title="Too long; don't read">tl;dr</abbr>: </span> My feelings about programming languages I used.
</div>
<h3 id="basic">BASIC</h3>
<p>The language of my firsts programs!
I was about 10, with an <code>MO5</code> and <code>Amstrad CPC 6128</code> and even with my <code>Atari STe</code>.
This is the language of <code>GOTO</code>s.
Ô nostalgia.
Unfortunately this might be the only intersting part of this language.</p>
<p>Today this language is obsolescent.
It not even a good language to learn programming.
I know there exist some compiler now.
But this is not enough to try to learn it.</p>
<pre class="twilight">
READY
10 PRINT <span class="String"><span class="String">&quot;</span>HELLO WORLD!<span class="String">&quot;</span></span>
20 GOTO 10
RUN
</pre>
<p>I remember also to had copyied some game source code from some magazine.
Most lines were like:</p>
<pre class="twilight">
3110 DATA FA,01,FF,FF,FF,FF,00,23,22,43,DA,DE,EE,FF,FF,FF,00,03,4A,F2
</pre>
<p>What a pleasure!</p>
<h3 id="logo">Logo</h3>
<p><img alt="Dragon fractal" src="/Scratch/img/blog/programming-language-experience/dragon.jpg" class="left" />
Also when I was about 10.
I played with logo to draw on the computer.</p>
<p>I remember the Bach&rsquo;s music while the program loaded.</p>
<p>Yes, at that time we had to load the program into the memory using tapes.
This one was a rare one that didn&rsquo;t made an awfull &lsquo;Krrrkrr cssssss krrr&rsquo; noise.</p>
<p>I used them without any loop.
Some years after, I had used it to learn programming to my college students.
In fact it was really good as first language.
Making fractals is like a game for children.</p>
<p>Here is an example of code that results in the dragoon fractal.</p>
<pre class="twilight">
HIDETURTLE
PENUP
SETXY -200 0
RIGHT 90
PENDOWN
to dragon&nbsp;:degree&nbsp;:size
setpensize 1
<span class="Keyword">if</span>&nbsp;:size<span class="Keyword">&gt;</span>5 [setpensize 2]
<span class="Keyword">if</span>&nbsp;:size<span class="Keyword">&gt;</span>10 [setpensize 3]
<span class="Keyword">if</span>&nbsp;:size<span class="Keyword">&gt;</span>20 [setpensize 4]
<span class="Keyword">if</span>&nbsp;:size<span class="Keyword">&gt;</span>40 [setpensize 5]
ifelse&nbsp;:degree=0 [
fd&nbsp;:size
][
left 45 dragon (:degree-1) (size/4)
right 90 dragon (:degree-1) (size/2)
left 90 dragon (:degree-1) (size/4)
right 45
]
end
dragon 6 3000
</pre>
<h3 id="pascal">Pascal</h3>
<p>The always second.</p>
<p>I made my firsts real serious program with Pascal.
I must confess I found it inferior to C.
I made graph algorithms, sort algorithms even some IA like genetic algorithms.
In the end I prefer C.</p>
<h3 id="c">C</h3>
<p>The language of pointers.</p>
<p><em>Le</em> programming language.</p>
<p>Once you understand loops and recursivity.
It is time to make things serious.
If you want to have good quality code, knowing C is almost mandatory.</p>
<p>This language is close to machine language.
So much, there is (mostly) a linear relation between the size of your code and the size of the compiled one.</p>
<p>In short, each time you write a C instruction there won&rsquo;t be anything strange that will occurs, like starting a long algorithm behind the scene.</p>
<p>It is very close to the machine while keeping a sufficient abstraction to be fun.</p>
<p>I made a lot of program with it.
From sort algorithms to AI ones (SAT3), system, network prgramming, etc&hellip;
It is a very useful language that will help you understand how things works on your computer.
Most modern computer language hide a lot of informations.
This is not the case with C.</p>
<h3 id="ada">ADA</h3>
<p>The super-clean one.</p>
<p>I liked ADA. I must confess I didn&rsquo;t used it a lot.
May be one day I will try it again.
I was impressed by asynchronous programming with it.
What you need to know is this old language had certainly inspired most new object oriented languages.</p>
<h2 id="object-oriented-languages">Object Oriented Languages</h2>
<p>Until here I just described imperatives languages without any object notion.</p>
<p>More clearly, the language didn&rsquo;t helped you to structure your program.</p>
<p>In order to limit the number of bugs, particularly for huge programs, we started to thing about how to best organize computer programs.
In the end, from the imperatives language culture, it produced the Object Oriented programming (OOP).
Beware, the Object Oriented programming isn&rsquo;t a miracle. Proof? How many bug-free software do you use?
Furthermore, OOP doesn&rsquo;t fit all problems.
But to make a bank application, an application which help to manage stock, clients or text archives.
I mean an information system, the OOP is not so bad.</p>
<p>Then Object Oriented Languages appeared everywhere.</p>
<h3 id="c-1">C++</h3>
<p>The ugly</p>
<p>Et oui l&rsquo;industrie voulait un langage objet, mais elle n&rsquo;était pas prête à mettre à la poubelle tout ses codes en C.
La solution, prendre C et lui rajouter une couche objet.
Le problème avec C++ c&rsquo;est qu&rsquo;il fait trop de choses.
L&rsquo;héritage multiple, des templates, etc&hellip;
Bon, je l&rsquo;ai quand même choisi pour faire le plus gros programme que j&rsquo;ai jamais fais lors de ma thèse.
Et je dois avouer que l&rsquo;expérience m&rsquo;a plûe.
Le seul reproche que j&rsquo;ai à faire, c&rsquo;est que la STL n&rsquo;était pas aussi complète que l&rsquo;on aurait pû l&rsquo;espérer pour un détail.
On ne peut pas faire de String<X> pour autre chose que des Char16.
Du coup, mon alphabet était limité à 2^16 lettres.
Hors, pour certaines application, l'alphabet doit être gigantesque. </X></p>
<h3 id="eiffel">Eiffel</h3>
<p>Bon, ok c&rsquo;est un très beau langage objet.
Bien plus propre que C++.
Mais, à moins que les choses aient changées, il n&rsquo;est pas très populaire.
Derrière lui il n&rsquo;a pas la communauté de C++.
Pour être franc, j&rsquo;ai préféré travailler en C++.
J&rsquo;ai menti à mes profs de l&rsquo;époque pour leur faire plaisir.
Lorsqu&rsquo;on viens du C, il est désagréable de changer ses habitudes.</p>
<h3 id="java">Java</h3>
<p>On continue vers les langages objets. Alors, à une époque où j&rsquo;en ai entendu parler, c&rsquo;était <em>le Graal</em>&nbsp;! </p>
<p>La portabilité, votre programme marchera partout. Il était orienté objet. Incrusté à l&rsquo;intérieur il y avait des concepts d&rsquo;architecture qui empêchent de faire n&rsquo;importe quoi&hellip; Sauf que.</p>
<p>Sauf qu&rsquo;il est incroyablement verbeux.
Et que les limitations sont très désagréables si on sait ce que l&rsquo;on fait.</p>
<p>Par exemple, il n&rsquo;y a pas d&rsquo;héritage multiple en Java.
Ce qui est en général un choix que je trouve cohérent s&rsquo;il est bien appuyé par des système qui compensent ce manque.
En java, il existe les interfaces.
Hors, les interfaces sont un moyen d&rsquo;ajouter simplement des méthodes à une classe.
En aucun cas on ne peut rajouter un attribut.
Ce qui m&rsquo;a vraiment géner pour faire une interface graphique par exemple.
Typiquement je faisais une GUI en Java Swing, et j&rsquo;avais créé mon propre système de notification entre objets de GUI.
Alors, au début je considérais qu&rsquo;un objet ne devais envoyer des notifications qu&rsquo;à un seul objet.
Ô quelle erreur lorsque je réalisais qu&rsquo;il fallait non plus gérer un seul objet mais parfois plusieurs.
Je changeais mon implémentation d&rsquo;interface partout, conséquence, des copier/coller dans tous les sens pour mes classes.
Les copier/coller qui sont justement un problème censé être évité par les langages orientés objets.</p>
<p>De plus toujours pour ma GUI, je devais évidemment gérer des threads.
Hors, il m&rsquo;a fallu faire mon propre système de gestion de threads pour éviter les locks, pour les notifications (ce thread à fini, etc&hellip;).
À l&rsquo;époque j&rsquo;utilisais Java 1.5.
Normallement ce problème devait être réglé sur Java 1.6.
J&rsquo;espère que c&rsquo;est le cas, mais avoir ce type de &ldquo;feature&rdquo; essentielles oubliées par le langage était assez grave. </p>
<p>De même, il a fallu attendre très longtemps avant d&rsquo;avoir des boucles foreach qui rende le code bien plus lisible.</p>
<p>Bon, après cette expérience je déconseillerai Java.
La portabilité, n&rsquo;est pas si intéressante que ce qu&rsquo;on pourrait croire.</p>
<p>En ce qui concerne les GUI, portable signifie interface fonctionnelle mais médiocre sur toutes les plateformes.
Quelquesoit le système d&rsquo;ailleurs (wxWidget, QT, etc&hellip;).
Donc, pour des applications à distribuer à des tiers, c&rsquo;est à éviter.</p>
<p>Le système de Java est très clos.
Par contre il résoud un très bon problème.
Il permet à des développeurs médiocre de travailler en groupe sans faire trop de mal.
Et un bon programmeur sera tout de même capable d&rsquo;y faire des choses très intéressantes.</p>
<h3 id="objective-c">Objective-C</h3>
<p>Le langage que je n&rsquo;ai appris et utilisé que pour faire des applications sur les plateformes d&rsquo;Apple<small>&copy;</small>.
J&rsquo;ai appris Objective-C après Python.
Et je dois avouer que j&rsquo;ai eu du mal à m&rsquo;y mettre.
Je n&rsquo;ai pas du tout aimé la syntaxe et pas mal d&rsquo;autres détails.
Mais ça fait parti de ces langages que plus on utilise, plus on aime.
En réalité, il y a quelque chose dans ce langage qui fait que tout est bien pensé.
Mais surtout, ici, ce n&rsquo;est pas le langage qui est la meilleure partie, c&rsquo;est plutôt le framework Cocoa qui lui est le plus souvent associé qui est une merveille.
Par rapport à tous les autres framework permettant de fabriquer des GUI, Cocoa est de très loin supérieur.
Même si ça semble être des détails sur le papier, en pratique cela fait une grande différence.</p>
<p>Vraiment jusqu&rsquo;ici, même si Objective-C reste assez bas niveau, le fait que le typage de ce langage soit dynamique est un vrai plus pour l&rsquo;interface graphique.
Je ne peux que vous encourager à vous accrocher à ce langage et de faire un vrai programme avec. Vous en serez certainement plus ravi qu&rsquo;il n&rsquo;y parrait eu début.</p>
<h2 id="les-langages-de-scripts">Les langages de scripts</h2>
<h3 id="php">PHP</h3>
<p>Le petit langage de script que nous utilisions tous pour faire des sites web à l&rsquo;époque des gifs animées&nbsp;!</p>
<p>Sympatique, mais sans plus. Apparemment il y a eu pas mal de progrès depuis PHP5, un jour peut-être que j&rsquo;y reviendrai. Mais, il a derrière lui une réputation de langage pour les &ldquo;scripts kiddies&rdquo;.
En gros ceux qui ne savent pas coder.
Des trous de sécurité de tous les cotés, etc&hellip;</p>
<p>En réalité, PHP est au niveau d&rsquo;abstration à peine supérieur au C. Et donc, il est beaucoup moins bien organisé que des langages objets, favorisant ainsi la création de bug. Pour les applications web, c&rsquo;est un vrai problème.</p>
<p>PHP, reste pour moi le langage de l&rsquo;injection SQL. J&rsquo;en fait encore un peu de temps en temps. Et j&rsquo;ai moi-même dû protéger les accès au SQL pour éviter les injections. Oui, je n&rsquo;ai pas trouvé de librairie toute prête pour protéger les entrées SQL. Je n&rsquo;ai pas beaucoup cherché non plus.</p>
<h3 id="python">Python</h3>
<p>Alors là, attention&nbsp;! Révélation&nbsp;!
Lorsqu&rsquo;on avait l&rsquo;habitude de travailler avec des langages compilé, type C++, Java et qu&rsquo;on passe à Python, on se prend une claque magistrale.
La programmation comme elle doit être faite.
Tout est si naturel, c&rsquo;est <em>magique</em>.
Oui, c&rsquo;est si bien que ça.
Mais quelque chose d&rsquo;aussi incroyablement bien doit avoir des inconvénients me dirais-vous.</p>
<p>Et bien, oui, comme tous les langages de scripts de haut niveau, Python est <em>lent</em>.
Attention pas juste un peu lent, comme 2 fois plus lent que du C.
Non, de l&rsquo;ordre de 10 à 20 fois plus lent que le C.
Argh&hellip; Bon ça reste utilisable pour beaucoup de choses.
Mais certaines application lui sont donc interdites.</p>
<h3 id="awk">Awk</h3>
<dl>
<dt>Des filtres de fichiers à faire.</dt>
<dt>Si ce n&rsquo;est pas trop compliqué, c&rsquo;est le langage idéal.</dt>
<dt>Vous avez un fichier et vous voulez savoir quels sont les mots les plus utilisés.</dt>
<dt>Savoir combien de fois un mot est utilisé.</dt>
<dt>Filtrer sous des condition un peu plus compliquées qu&rsquo;un grep.</dt>
<dt>Super outils. Je l&rsquo;ai utilisé pour modifier en masse des centaines de fichier XML plus facilement qu&rsquo;avec du XSLT.</dt>
<dd>
<p>Perl
Perl c&rsquo;est assez magique, mais la syntaxe est tellement désagréable à lire que personne ne peut vraiment aimer programmer dans un environnement de plusieurs personnes en Perl. A moins que tous les autres soient des cadors du Perl. Mais la feature qui tue, les expressions régulières&nbsp;:</p>
</dd>
</dl>
<pre class="twilight">
<span class="Variable"><span class="Variable">$</span>var</span> =~ <span class="StringRegexp"><span class="StringRegexp"><span class="SupportFunction">s</span>/</span>toto</span><span class="StringRegexp"><span class="StringRegexp">/</span>titi<span class="StringRegexp">/</span></span>
</pre>
<dl>
<dt>Va remplacer toto par titi dans la valeur de la variable $var. Et oui, les expressions régulière y sont intégrées directement comme avec <code>sed</code> et <code>awk</code>. Et ça rend le code beacoup plus compact (et parfois illisible). Mais c&rsquo;est vraiment pas mal. C&rsquo;est une sorte de <code>awk</code> sous stéroides.</dt>
<dd>
<p>Ruby
C&rsquo;est une sorte de Perl en plus propre.
Un mélange de Perl et de Python.
Les notion objets y sont plus fortes qu&rsquo;en Python.
Je l&rsquo;ai beaucoup utilisé, je reste quand même un Pythoniste de préférence.
Mais Ruby est vraiment très bien.
Par contre en terme d&rsquo;efficacité, c&rsquo;est le pire langage utilisé par beaucoup de monde de ce point de vue.
C&rsquo;est le langage qui perd quasiment tous les benchmarks.
Par contre c&rsquo;est un outil parfait pour faire des prototypes.
Et si vous voulez faire un prototype de site web, RoR est ce qui se fait de mieux.
De l&rsquo;idée au site, il ne se passera que peu de temps.</p>
</dd>
<dd>
<p>Javascript</p>
</dd>
</dl>
<p>C&rsquo;est la bonne surprise.
Pendant des années, javascript était considéré comme un langage tout bon à vous embété dans votre navigation web. En réalité, javascript possède beaucoup de qualité des langages de haut niveau. En particulier, il est facille de passer une fonction en paramèter ou de créer des fonctions anonymes (closures). Récemment, il est devenu très rapide et beaucoup de frameworks naissent un peu partout.</p>
<pre><code>- Il y a Cappuccino, Objecte-J (comme de l'objective-C mais avec du javascript)
- Sproutcore
- Spine.js
- Backbone.js
- jQuery
- prototype.js
En particulier avec jQuery, on peut faire des appels chainés, très agréables à utiliser.
Comme je le disais, c'est une bonne surprise, javascript a été choisi un peu au hasard lors de la création des navigateurs web comme langage de script. Et il s'avère qu'à part sa syntaxe, tout le reste est bien. Heureusement, en ce qui concerne la syntaxe, on peu pallier à ce problème en utilisant CoffeeScript.
</code></pre>
<h2 id="les-langages-fonctionnels">Les langages fonctionnels</h2>
<p>: CamL</p>
<dl>
<dt>J&rsquo;ai appris CamL à la fac, j&rsquo;avais trouvé cette expérience très interressante. J&rsquo;étais plutôt bon, et j&rsquo;avais les bonnes intuitions mathématiques qui vont avec la programmation fonctionnelle. Mais je dois avouer que je ne l&rsquo;ai plus jamais utilisé. Simplement, ce type de langage semble si loin de ce qui se fait pour fabriquer des produits que ça me donnais vraiment l&rsquo;impression d&rsquo;être un langage pour chercheurs.</dt>
<dd>
<p>Haskell</p>
</dd>
</dl>
<p>Je suis en train d&rsquo;apprendre ce langage. Et je dois dire que c&rsquo;est un vrai plaisir. En général les concepts derrière tous les langages de programmation sont assez limités. Chaque langage y va de son petit lot de nouveau concepts, et en général en une après-midi, c&rsquo;est appris.
Pour haskell, c&rsquo;est très différent. Je sens bien qu&rsquo;il va me falloir plusieurs semaines pour maîtriser la bête. Ça doit faire quatre semaines que j&rsquo;apprend haskell un peut tous les jours et je sais qu&rsquo;il y a des notions que j&rsquo;ai juste survollées et qui sont assez incroyables.
Les Monades par exemple, est un concept que je n&rsquo;avais jamais rencontré ailleurs. C&rsquo;est un super concept. De plus le design du langage en fait un parfait système pour paralléliser les calculs naturellement. haskell sépare la partie &ldquo;pure&rdquo; de la partie &ldquo;impure&rdquo; de la programmation. À ma connaissance, c&rsquo;est le seul langage de programmation qui fait ça. Enfin, je prend beaucoup de plaisir à apprendre ce langage. La communauté est aussi très acceuillante. Pas de &ldquo;L0L! URAN00B!&rdquo;. Et aussi pas de concession du langage pour devenir populaire. Le langage est bon, voilà tout. Alors qu&rsquo;en Java et C++, typiquement certain choix ont été fait en dépis du bon sens pour &ldquo;faire plaisir&rdquo;. </p>
<h2 id="langages-originaux">Langages originaux</h2>
<dl>
<dt>En plus des langages de programmation proprement dit, il existe des langages dont le seul but et de créer des documents.</dt>
<dd>
<p>MetaPost
Metapost est un langage qui permet de programmer des dessins.
Le gros plus de metapost, c&rsquo;est qu&rsquo;il y a un solveur d&rsquo;équations linéaires. Ainsi on peut faire des choses assez impressionnantes, comme laisser une petite distance entre les flèches et les bords. Ou encore les têtes des flèches se courbent.
Très sympatique à utiliser.</p>
</dd>
<dd>
<p>zsh
Oui, zsh est un shell. Mais c&rsquo;est aussi un langage de script très bien adapté aux traitement de fichiers. Je le recommande chaudement. C&rsquo;est pour l&rsquo;instant le meilleur shell que j&rsquo;ai utilisé. Je le préfère au bash.</p>
</dd>
<dd>
<p>Prolog
Je n&rsquo;ai jamais rien fait de conséquent avec Prolog, mais j&rsquo;ai adoré l&rsquo;utiliser. C&rsquo;est un langage qui essaye de résoudre les contraintes autant qu&rsquo;il le peut pour vous. C&rsquo;est assez magique. On ne fait que décrire ce qu&rsquo;il faut et on ne donne pas d&rsquo;ordre. Un peu comme la programmation fonctionnelle mais en beaucoup plus puissant.</p>
</dd>
</dl>
<h2 id="les-langages--dcouvrir">Les langages à découvrir</h2>
<p>Il reste encore pas mal de langages et de framework à essayer. Actuellement je pense que je vais passer un moment avec haskell. Peut-être demain que j&rsquo;irai voir du LISP, Scala ou Erlang. Comme je suis plus dans la création de site web, j&rsquo;irai certainement jeter un coup d&rsquo;oeil à clojure aussi. Et certainement beaucoup d&rsquo;autres choses.</p>
<p>Dites-moi si vous avez une autre expérience avec ces langages de programmation. Je ne donne que mes impressions. En tout cas je les ai tous utilisés.</p>
</div>
<div id="choixrss">
<a id="rss" href="http://feeds.feedburner.com/yannespositocomen">
Subscribe
</a>
</div>
<script type="text/javascript">
$(document).ready(function(){
$('#comment').hide();
$('#clickcomment').click(showComments);
});
function showComments() {
$('#comment').show();
$('#clickcomment').fadeOut();
}
document.write('<div id="clickcomment">Comments</div>');
</script>
<div class="flush"></div>
<div class="corps" id="comment">
<h2 class="first">comments</h2>
<noscript>
You must enable javascript to comment.
</noscript>
<script type="text/javascript">
var idcomments_acct = 'a307f0044511ff1b5cfca573fc0a52e7';
var idcomments_post_id = '/Scratch/en/blog/programming-language-experience/';
var idcomments_post_url = 'http://yannesposito.com/Scratch/en/blog/programming-language-experience/';
</script>
<span id="IDCommentsPostTitle" style="display:none"></span>
<script type='text/javascript' src='/Scratch/js/genericCommentWrapperV2.js'></script>
</div>
<div id="entete" class="corps_spaced">
<div id="liens">
<ul><li><a href="/Scratch/en/">Home</a></li>
<li><a href="/Scratch/en/blog/">Blog</a></li>
<li><a href="/Scratch/en/softwares/">Softwares</a></li>
<li><a href="/Scratch/en/about/">About</a></li></ul>
</div>
<div class="flush"></div>
<hr/>
<div id="next_before_articles">
<div id="previous_articles">
previous entries
<div class="previous_article">
<a href="/Scratch/en/blog/Password-Management/"><span class="nicer">«</span>&nbsp;40 character's passwords</a>
</div>
<div class="previous_article">
<a href="/Scratch/en/blog/2011-04-20-Now-hosted-on-github/"><span class="nicer">«</span>&nbsp;Now hosted on github</a>
</div>
<div class="previous_article">
<a href="/Scratch/en/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/"><span class="nicer">«</span>&nbsp;Why I won't use CoffeeScript (sadly)</a>
</div>
</div>
<div id="next_articles">
next entries
</div>
<div class="flush"></div>
</div>
</div>
<div id="bottom">
<div>
<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">Copyright ©, Yann Esposito</a>
</div>
<div id="lastmod">
Created: 06/07/2011
Modified: 06/10/2011
</div>
<div>
Entirely done with
<a href="http://www.vim.org">Vim</a>
and
<a href="http://nanoc.stoneship.org">nanoc</a>
</div>
<div>
<a href="/Scratch/en/validation/">Validation</a>
<a href="http://validator.w3.org/check?uri=referer"> [xhtml] </a>
.
<a href="http://jigsaw.w3.org/css-validator/check/referer?profile=css3"> [css] </a>
.
<a href="http://validator.w3.org/feed/check.cgi?url=http%3A//yannesposito.com/Scratch/en/blog/feed/feed.xml">[rss]</a>
</div>
</div>
<div class="clear"></div>
</div>
<script type="text/javascript">
var clicky = { log: function(){ return; }, goal: function(){ return; }};
var clicky_site_id = 66374971;
(function() {
var s = document.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = ( document.location.protocol == 'https:' ? 'https://static.getclicky.com/js' : 'http://static.getclicky.com/js' );
( document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0] ).appendChild( s );
})();
</script>
<noscript><p><img alt="Clicky" width="1" height="1" src="http://in.getclicky.com/66374971ns.gif" /></p></noscript>
</body>
</html>