<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Clarus' blog</title>
    <description></description>
    <link>http://blog.clarus.me/</link>
    <lastBuildDate>Mon, 12 Dec 2011 18:33:35 +0100</lastBuildDate>
    <atom:link href="http://blog.clarus.me/rss.xml" rel="self" type="application/rss+xml" />
      <item>
        <title>LightBlog le moteur de blogs léger</title>
        <pubDate>Mon, 12 Dec 2011 00:00:00 +0100</pubDate>
        <description>&lt;p&gt;J'ai publié et j'utilise désormais &lt;a href=&quot;http://hg.clarus.me/light_blog/&quot;&gt;LightBlog&lt;/a&gt;, un moteur de blog simple, léger et ouvert. Il ne dépend pas de base de donnée SQL et génère uniquement des pages Html statiques. La configuration et les publications sont décrites dans des fichiers texte. La base de code (100 lignes de Ruby et des templates Html) est suffisamment courte pour être comprise et personnalisable. L'utilisateur garde ainsi un contrôle complet de ses données.&lt;/p&gt;
&lt;h3&gt;Comparaison avec les systèmes existants&lt;/h3&gt;
&lt;p&gt;J'ai longtemps utilisé les moteurs &lt;a href=&quot;http://fr.wordpress.com/&quot;&gt;WordPress&lt;/a&gt; et &lt;a href=&quot;http://fr.dotclear.org/&quot;&gt;dotclear&lt;/a&gt;, mais j'ai toujours été déçu par leur aspect «&amp;nbsp;usine à gaz&amp;nbsp;» et surtout &lt;a href=&quot;http://fr.wikipedia.org/wiki/What_you_see_is_what_you_get&quot;&gt;WYSIWYG&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Les publications sont créées à la souris, écrites dans une syntaxe &lt;em&gt;wiki&lt;/em&gt; puis converties en Html en étant entre-temps enregistrées dans une obscure base SQL. Cette simplicité d'utilisation pour les rédacteurs se fait au prix d'une installation et d'une administration lourde voire impossible (à cause de la dépendance à PHP et MySQL) et au prix d'une perte de contrôle sur les données. Cela peut se constater lors des mise à jours ou des migrations, même si des fonctions d'import/export existent, ou dès que l'on veut personnaliser un peu trop le rendu des articles.&lt;/p&gt;
&lt;p&gt;Il me fallait donc un moteur de blog minimaliste qui soit ce que &lt;a href=&quot;&quot;&gt;LaTeX&lt;/a&gt; est à Word en terme de contrôle d'informations. Dans ce style là il existe bien &lt;a href=&quot;http://gitorious.org/fugitive&quot;&gt;Fugitive&lt;/a&gt;, mais certains choix de design (avoir &lt;a href=&quot;http://git-scm.com/&quot;&gt;Git&lt;/a&gt; comme dépendance, être codé uniquement en &lt;tt&gt;sh&lt;/tt&gt;) ne me convenaient pas.&lt;/p&gt;
&lt;h3&gt;Utilisation&lt;/h3&gt;
&lt;p&gt;Il peut se télécharger depuis son dépôt &lt;a href=&quot;http://hg.clarus.me/light_blog/&quot;&gt;hg.clarus.me/light_blog/&lt;/a&gt;. Il vient en contenant déjà toutes les données de mon blog.&lt;/p&gt;
&lt;p&gt;La compilation se fait à travers la commande &lt;tt&gt;make&lt;/tt&gt; qui produit sa sortie dans le dossier &lt;tt&gt;blog/&lt;/tt&gt;. Il ne reste plus qu'à configurer vos variables dans le &lt;tt&gt;Makefile&lt;/tt&gt;, écrire vos articles dans &lt;tt&gt;posts/&lt;/tt&gt;, personnaliser votre thème dans &lt;tt&gt;static/style/&lt;/tt&gt; et modifier le contenu des pages dans &lt;tt&gt;templates/&lt;/tt&gt;. Les détails sont disponibles dans le &lt;tt&gt;README&lt;/tt&gt;.&lt;/p&gt;
</description>
        <link>http://blog.clarus.me/LightBlog%20le%20moteur%20de%20blogs%20l%C3%A9ger.html</link>
        <guid>http://blog.clarus.me/LightBlog%20le%20moteur%20de%20blogs%20l%C3%A9ger.html</guid>
      </item>
      <item>
        <title>Convention d'appel objet puis abstraction</title>
        <pubDate>Mon, 31 Oct 2011 00:00:00 +0100</pubDate>
        <description>&lt;p&gt;Les programmeurs doivent, en plus de se souvenir des noms des fonctions qu'ils utilisent, connaître l'ordre de leurs arguments. L'utilisation d'&lt;a href=&quot;http://fr.wikipedia.org/wiki/Environnement_de_d%C3%A9veloppement_int%C3%A9gr%C3%A9&quot;&gt;IDE&lt;/a&gt; simplifie le travail, en affichant en direct la définition d'une fonction au moment de son appel, de même que l'utilisation d'arguments nommés, notamment en ce qui concerne la lisibilité du code. Des conventions simples peuvent également faciliter la vie, conventions pouvant même être encouragées par la syntaxe du langage.&lt;/p&gt;
&lt;h3&gt;Objet&lt;/h3&gt;
&lt;p&gt;L'un des principaux apports de la programmation orientée objet a sans doute été de regrouper la définition des méthodes avec les objets auxquels elles font référence. Lors de leurs appels, la syntaxe&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
  obj.meth(arg1, arg2)
&lt;/pre&gt;
&lt;p&gt;impose un rôle prépondérant à l'argument &lt;code&gt;obj&lt;/code&gt; et facilite la mémorisation, l'idée étant que la donnée de travail principale d'une fonction doit toujours être placée en tête. Dans un langage non-objet on devrait aussi continuer à écrire dans l'ordre&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
  meth(obj, arg1, arg2)
&lt;/pre&gt;
&lt;h3&gt;Abstraction&lt;/h3&gt;
&lt;p&gt;En programmation fonctionnelle, on est souvent amené à passer des &lt;a href=&quot;http://fr.wikipedia.org/wiki/Fonction_anonyme&quot;&gt;fonctions anonymes&lt;/a&gt; en arguments. En fait, en pratique, les fonctions ne prennent souvent qu'un seul argument fonctionnel. Cet argument s'écrivant fréquemment sur plusieurs lignes, il est préférable qu'il soit donné en dernier pour éviter d'avoir des mini-arguments qui traînent tous seuls à la fin. Là encore certains langages imposent cette convention par la syntaxe, comme &lt;a href=&quot;http://www.ruby-lang.org/fr/&quot;&gt;Ruby&lt;/a&gt; avec la notion de «&amp;nbsp;blocks&amp;nbsp;», abstractions placées nécessairement en fin d'appel&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
  3.upto(12) do |i|
    puts i
  end
&lt;/pre&gt;
&lt;h3&gt;Curryfication&lt;/h3&gt;
&lt;p&gt;La &lt;a href=&quot;http://fr.wikipedia.org/wiki/Curryfication&quot;&gt;curryfication&lt;/a&gt;, bien qu'élégante d'un point de vue théorique, impose je pense de mauvaises pratiques, en encourageant un ordre d'arguments uniquement sur la base des appels de fonction partiels les plus souvent faits. Par exemple&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
  map (fun x -&gt; x + 1) list
&lt;/pre&gt;
&lt;p&gt;ne respecte pas les conventions introduites ci-dessus, simplement car on veut pouvoir écrire par curryfication&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
  let incr_list = map (fun x -&gt; x + 1)
&lt;/pre&gt;
</description>
        <link>http://blog.clarus.me/Convention%20d%27appel%20objet%20puis%20abstraction.html</link>
        <guid>http://blog.clarus.me/Convention%20d%27appel%20objet%20puis%20abstraction.html</guid>
      </item>
      <item>
        <title>Sûreté de l'identité numérique</title>
        <pubDate>Tue, 25 Oct 2011 00:00:00 +0200</pubDate>
        <description>&lt;p&gt;Alors que presque tout le monde maintenant possède une identité numérique (numéro de téléphone, mail, …) en plus d'une identité physique (nom, prénom, adresse) et en dépend de manière critique pour sa vie professionnelle et privée, les lois et les structures en place offrent toujours peu de garanties.&lt;/p&gt;
&lt;h3&gt;Téléphone&lt;/h3&gt;
&lt;p&gt;Ce n'est que récemment que l'on a le droit de &lt;a href=&quot;http://droit-finances.commentcamarche.net/contents/consommation/portabilite-numero-mobile.php3&quot;&gt;conserver son numéro de téléphone en changeant d'opérateur&lt;/a&gt;, et en pratique j'ai toujours beaucoup d'amis qui changent de numéro. Ce peut être par paresse des procédures, ou pour cause de départ à l'étranger et donc de résiliation de contrat. Or il est surprenant que la gestion des numéros soit confiée aux opérateurs et serve de moyen de pression sur les clients. Il serait plus logique d'avoir deux services découplés, un pour les numéros, un autre pour les abonnements téléphoniques, le premier géré par l'État et le second par les entreprises de téléphonie. Libre ensuite à chacun d'associer son numéro au contrat téléphonique de son choix, voir à aucun contrat si on se retrouve expatrié temporairement, sachant que notre numéro nous appartiendra toujours au retour. C'est ainsi que fonctionne sur Internet l'attribution des noms de domaine, qui se fait indépendamment des hébergeurs.&lt;/p&gt;
&lt;h3&gt;Mail&lt;/h3&gt;
&lt;p&gt;On se rend compte souvent de l'importance du mail en entrant dans le monde du travail, où une adresse en &lt;code&gt;pseudo@gmail.com&lt;/code&gt; ne passe plus sur un CV et où l'on est parfois contraint, à raison, d'utiliser le service mails de l'entreprise. Notre boîte mail contenant une part importante de notre vie professionnelle et surtout privée, il est malsain et dangereux de faire confiance à n'importe qui, notamment en passant par une entreprise n'étant pas sous juridiction française, quand bien même le service soit évidement proposé de manière gratuite. J'ai la chance de pouvoir héberger mes mails via le service de mon école, l'&lt;a href=&quot;http://www.ens.fr/&quot;&gt;ENS&lt;/a&gt;, mais je crois que si tant de gens continuent d'utiliser des services comme &lt;a href=&quot;http://mail.google.com&quot;&gt;Gmail&lt;/a&gt; ou &lt;a href=&quot;http://www.hotmail.com/&quot;&gt;Hotmail&lt;/a&gt; c'est avant tout à cause d'un manque d'information et d'alternative. Là encore le service public aurait son rôle à jouer, en fournissant un service mails gratuit et en avertissant les jeunes via l'Éducation Nationale. Je tiens d'ailleurs à saluer le travail de &lt;a href=&quot;http://www.spi.ens.fr/beig/&quot;&gt;Jacques Beigbeder&lt;/a&gt; en ce sens.&lt;/p&gt;
&lt;h3&gt;Noms de domaine&lt;/h3&gt;
&lt;p&gt;Enfin, l'usage de &lt;a href=&quot;http://fr.wikipedia.org/wiki/Nom_de_domaine&quot;&gt;noms de domaine&lt;/a&gt; reste encore réservé à une niche de connaisseurs. Même si je comprends que tout le monde ne veuille pas héberger son propre site web, il est pourtant très simple de les utiliser pour mettre en place des redirections mails et par exemple de disposer d'une adresse &lt;code&gt;prénom@nom.fr&lt;/code&gt; pour toute sa famille. L'obscurité qui se cache derrière la gestion d'un nom de domaine pourrait facilement être supprimée par une formation spécifique à l'école, et on pourrait voir fleurir des services permettant de facilement mettre en place sa page personnelle. Les gens ne seraient plus contraints d'utiliser &lt;a href=&quot;http://fr-fr.facebook.com&quot;&gt;Facebook&lt;/a&gt; ou des hébergeurs de blog comme &lt;a href=&quot;http://fr.wordpress.com/&quot;&gt;wordpress.com&lt;/a&gt;, gardant ainsi la souveraineté sur leurs données. Cependant, il y a aussi le problème de la saturation des NDD, tout le monde ne pouvant pas posséder son propre &lt;code&gt;nom.fr&lt;/code&gt;. Il faudrait alors réfléchir à l'attribution des &lt;code&gt;prénom.nom.&lt;a href=&quot;http://nom.fr&quot;&gt;nom.fr&lt;/a&gt;&lt;/code&gt; ou &lt;code&gt;prénom.nom.&lt;a href=&quot;http://name.fr&quot;&gt;name.fr&lt;/a&gt;&lt;/code&gt;, gratuitement ou pour une somme symbolique, à toutes les personnes le désirant, voire à la naissance en ajoutant les deuxièmes prénoms pour éviter les homonymes.&lt;/p&gt;
</description>
        <link>http://blog.clarus.me/S%C3%BBret%C3%A9%20de%20l%27identit%C3%A9%20num%C3%A9rique.html</link>
        <guid>http://blog.clarus.me/S%C3%BBret%C3%A9%20de%20l%27identit%C3%A9%20num%C3%A9rique.html</guid>
      </item>
      <item>
        <title>LLVM MD et correction de compilateurs</title>
        <pubDate>Thu, 06 Oct 2011 00:00:00 +0200</pubDate>
        <description>&lt;p&gt;Alors que la plupart des compilateurs définissent un nouveau langage
intermédiaire par phase de compilation, &lt;a href=&quot;http://llvm.org/&quot;&gt;LLVM&lt;/a&gt;
n'en utilise qu'un seul (une sorte d'assembleur généraliste), ce qui permet une
grande modularité et une meilleur mise en commun des efforts. Vous pouvez
développer votre propre optimisateur de code et il sera réutilisable dans
toutes les chaînes de compilation existantes.&lt;/p&gt;
&lt;p&gt;Beaucoup de preuves de correction de compilateurs montrent que le code
produit respecte nécessairement la sémantique du code source, mais il existe
aussi l'approche inverse qui consiste à calculer pour chaque code généré, a
posteriori et quand on y arrive, un certificat prouvant l'équivalence avec le
code initial. Cette approche s'applique particulièrement au cas de LLVM, car
être capable de décider (avec de bonnes heuristiques) l'équivalence de deux
programmes revient à être capable de donner la correction de tous les
compilateurs LLVM, existants ou à venir.&lt;/p&gt;
&lt;p&gt;C'est justement le but du projet &lt;a href=&quot;http://llvm-md.org/&quot;&gt;LLVM MD&lt;/a&gt;
de l'université de Harvard. L'équivalence est décidée par comparaison des
sémantiques opérationnelles, la principale difficulté étant la présence
d'effets de bord, de branchements et surtout de boucles.&lt;/p&gt;
&lt;p&gt;À partir d'un code source &lt;em&gt;C1&lt;/em&gt; donné en forme &lt;a href=&quot;http://fr.wikipedia.org/wiki/Static_single_assignment_form&quot;&gt;SSA&lt;/a&gt;, et de sa
version &lt;em&gt;C2&lt;/em&gt; produite par une phase de compilation intermédiaire, on en
extrait une représentation GDSA (Guarded Dynamic Single Assignement) qui est un
ensemble de règles de réécritures avec explicitement une variable
&lt;code&gt;m&lt;/code&gt; pour décrire l'état mémoire et un opérateur µ pour décrire les
boucles. En est déduite une représentation symbolique pour chaque variable de
retour de fonction, réduite à l'aide de règles de simplification collant si
possible aux règles utilisées par le compilateur. Enfin les valeurs obtenues
sont comparées entre elles.&lt;/p&gt;
&lt;p&gt;Une implémentation a été réalisée en &lt;a href=&quot;http://www.haskell.org/haskellwiki/Haskell&quot;&gt;Haskell&lt;/a&gt; et appliquée à de gros
programmes tels que &lt;a href=&quot;http://www.sqlite.org/&quot;&gt;SQLite&lt;/a&gt;, composé de
plus de 1.300 fonctions C. Les résultats dépendent de la phase d'optimisation
mais environ 90 % des fonctions compilées sont validées pour chacune des
passes. Ainsi, quitte à ne pas compiler certaines fonctions, un code peut être
presque totalement optimisé de façon certifiée.&lt;/p&gt;
&lt;p&gt;Le projet c'est pas encore terminé et, même si des restrictions sont faites
sur les instructions LLVM utilisables et si on peut regretter que l'outil de
donne pas de certificat &lt;a href=&quot;http://coq.inria.fr/&quot;&gt;Coq&lt;/a&gt; de ses analyses
(il faudrait pour cela d'abord formaliser la sémantique de LLVM), les résultats
semblent très prometteurs.&lt;/p&gt;
</description>
        <link>http://blog.clarus.me/LLVM%20MD%20et%20correction%20de%20compilateurs.html</link>
        <guid>http://blog.clarus.me/LLVM%20MD%20et%20correction%20de%20compilateurs.html</guid>
      </item>
      <item>
        <title>En-tête LaTeX standard</title>
        <pubDate>Thu, 16 Jun 2011 00:00:00 +0200</pubDate>
        <description>&lt;p&gt;Le problème d'encodage de caractères et de police est récurrent en informatique. En LaTeX, il est bon d'utiliser les commandes suivantes pour être tranquille&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
&lt;/pre&gt;
&lt;p&gt;On active la saisie du code LaTeX en utf-8, le mode &lt;strong&gt;T1&lt;/strong&gt; génère un unique symbole pour les caractères accentués, au lieu d'un accent superposé à un &lt;code&gt;'e'&lt;/code&gt; par exemple pour le &lt;code&gt;'é'&lt;/code&gt; (meilleur rendu, copier-coller du texte de PDF simplifié). Enfin, &lt;code&gt;lmodern&lt;/code&gt; permet d'utiliser les polices &lt;a href=&quot;http://www.tug.dk/FontCatalogue/lmodern/&quot; hreflang=&quot;en&quot;&gt;Latin Modern&lt;/a&gt;, qui ont un bien meilleur rendu que les &lt;a href=&quot;http://www.tug.dk/FontCatalogue/cmr/&quot; hreflang=&quot;en&quot;&gt;Computer Modern&lt;/a&gt; utilisées par défaut.&lt;/p&gt;
&lt;p&gt;Bien sûr, si vous écrivez en Français, il faut aussi charger le module &lt;code&gt;babel&lt;/code&gt; pour respecter les règles typographiques&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
\usepackage[francais]{babel}
&lt;/pre&gt;
</description>
        <link>http://blog.clarus.me/En-t%C3%AAte%20LaTeX%20standard.html</link>
        <guid>http://blog.clarus.me/En-t%C3%AAte%20LaTeX%20standard.html</guid>
      </item>
  </channel>
</rss>
