<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>Christian Fauré &#187; programmation</title> <atom:link href="http://www.christian-faure.net/tag/programmation/feed/" rel="self" type="application/rss+xml" /><link>http://www.christian-faure.net</link> <description>Hypomnemata : supports de mémoire</description> <lastBuildDate>Wed, 08 Feb 2012 13:01:47 +0000</lastBuildDate> <language>fr</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>Sens et enjeux des modèles de stockage et d&#8217;accès aux données</title><link>http://www.christian-faure.net/2011/04/18/sens-et-enjeux-des-modeles-de-stockage-et-dacces-aux-donnees/</link> <comments>http://www.christian-faure.net/2011/04/18/sens-et-enjeux-des-modeles-de-stockage-et-dacces-aux-donnees/#comments</comments> <pubDate>Mon, 18 Apr 2011 19:42:51 +0000</pubDate> <dc:creator>Christian</dc:creator> <category><![CDATA[Défaut]]></category> <category><![CDATA[Architecture]]></category> <category><![CDATA[CoSQL]]></category> <category><![CDATA[Métadataware]]></category> <category><![CDATA[métastabilité]]></category> <category><![CDATA[Meijer]]></category> <category><![CDATA[programmation]]></category><guid
isPermaLink="false">http://www.christian-faure.net/?p=2165</guid> <description><![CDATA[C&#8217;est typiquement le genre d&#8217;article qui nécessite des corrections, des remarques et peut-être un débat. Alors n&#8217;hésitez pas. Code et data Pas de code sans données, car le but d’un code est de tourner et de produire des résultats et, pour ce faire, le code doit “manger” des données. On peut voir le code dans [...]
Related posts:<ol><li><a
href='http://www.christian-faure.net/2008/12/17/sens-et-enjeux-des-ria/' rel='bookmark' title='Sens et enjeux des RIA'>Sens et enjeux des RIA</a> <small>Je suis donc intervenu au RIA 2008 d&#8217;Adobe en insistant...</small></li><li><a
href='http://www.christian-faure.net/2008/09/13/prendre-soin-des-donnees/' rel='bookmark' title='Prendre soin des données'>Prendre soin des données</a> <small>Sur le blog d&#8217;Atos Origin je reviens sur les enjeux...</small></li><li><a
href='http://www.christian-faure.net/2011/02/11/les-enjeux-de-la-grammatisation-des-relations/' rel='bookmark' title='Les enjeux de la grammatisation des relations'>Les enjeux de la grammatisation des relations</a> <small>(Les illustrations sont de Pavel.K, dessinateur, caricaturiste et illustrateur, que...</small></li></ol>]]></description> <content:encoded><![CDATA[<p></p><p><em>C&#8217;est typiquement le genre d&#8217;article qui nécessite des corrections, des remarques et peut-être un débat. Alors n&#8217;hésitez pas.</em></p><p><img
class="aligncenter" title="Data model" src="http://www.christian-faure.net/wp-images/datamodel2.jpg" alt="" width="498" height="239" /></p><h2>Code et data</h2><p
style="text-align: justify;">Pas  de code sans données, car le but d’un code est de tourner et de  produire des résultats et, pour ce faire, le code doit “<em>manger</em>” des  données.</p><p
style="text-align: justify;">On peut voir le code dans sa forme la plus abstraite comme un algorithme dont le rôle serait de <strong>produire des preuves</strong>. Mais on peut aussi voir le code comme un algorithme qui ne fait pas simplement que valider et prouver mais également qui <strong>produit des changements d’états</strong> et des évènements qui, au sens littéral du terme, <em>changent le monde</em>.</p><p
style="text-align: justify;">On a ici un parallèle avec les “<a
href="http://en.wikipedia.org/wiki/Speech_act" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Speech_act?referer=');">speech acts</a>” de Searle et Austin dont Henry Story avait parlé dans <a
href="../2011/03/01/videos-du-meetup-web-social-avec-henry-story/">son intervention au MeetUp Semantic Web</a> de Février 2011.</p><p
style="text-align: justify;">Quiconque  écrit un programme s’attend en effet à “changer le monde”, ne serait-ce  que pour écrire “Hello World” sur un terminal. Changer le monde avec  des algorithmes et du code, Microsoft, Google,  Facebook et d’autres  l’on fait, et l’ensemble des développements en Open Source peut-être  plus encore.</p><p
style="text-align: justify;">Pas  de code sans données donc.  Or <strong>ces données sont stockées dans des  supports de mémoires différents</strong> selon qu’elles sont en mémoire vive, sur  un système de fichier, ou dans une base de donnée. Et chaque support de  mémoire utilise <strong>un modèle de données</strong> qui n’est pas forcément le même.  Ce qui nous ramène à la difficile collaboration entre les développeurs  et les gestionnaires de base de données.</p><p
style="text-align: justify;">Si  les développeurs et les administrateurs de base de données doivent  collaborer, la réalité est parfois toute autre : les développeurs ne  comprennent pas toujours le SQL et les RDB (bases de données  relationnelles), et les DBA (administrateurs de base de données) ne  voient les développeurs que comme de <em>dangereux cowboys</em> qui veulent  massacrer l’intégrité de leur données (“mon précieux …”).</p><div
class="wp-caption aligncenter" style="width: 304px"> <img
src="https://lh6.googleusercontent.com/CNm7ykYs_gWtCS5mQGpyDPLQmE3OB_p6MHhRsTTbgGqeEyhT62ef7KWnt-UfHhQO1QiBaK-TwyDLWo42kZwY_pzPA2sdxz75SWbQ74YjdVK3axLF5Q" alt="" width="304" height="434" /><p
class="wp-caption-text">Le DBA</p></div><div
class="wp-caption aligncenter" style="width: 306px"> <img
src="https://lh5.googleusercontent.com/vmptzFb3tAargOjaR8TkSrY2zbLhJmzwG85gvCbgXqqpEc16QrkvNUtNBB20uRzTzzHUghUgcdkQlDPu5cYrDssbOd5WUwMQBp6yaWIRd6eioGZBxw" alt="" width="306" height="286" /><p
class="wp-caption-text">Le développeur</p></div><p><span
id="more-2165"></span></p><h2 style="text-align: justify;">“Impedance mismatch”</h2><p
style="text-align: justify;">La  réalité est que les modèles de données utilisés dans les langages  développement et dans les systèmes de stockage des données ne sont pas  les mêmes : <strong>modèle objet et modèle tableau</strong>.</p><p
style="text-align: justify;">C’est <a
href="http://blog.pondaven.net/2009/01/27/la-develocratie/" onclick="pageTracker._trackPageview('/outgoing/blog.pondaven.net/2009/01/27/la-develocratie/?referer=');">ce qu’écrivait Yves-Marie Pondaven</a>, que je citais également dans <a
href="../2011/01/07/meetup-semantic-web-comment-reconcilier-le-si-legacy-et-le-web-par-le-web-semantique/">mon intervention au MeetUp Semantic Web de Décembre 2010</a>,  et dont je reproduis ci-après le schéma qu’il avait fait et dans lequel on  voit que l’on passe son temps à <strong>basculer du modèle relationnel au  modèle objet puis au modèle document et inversement</strong>.</p><p
style="text-align: justify;">Aussi  disais-je que la plupart des CPUs de la planète sont occupés à faire  des transformation et re-transformation entre des modèles de données  différents. On peut donc au moins dire que cela a un impact en terme de  performance mais aussi en terme environnemental non négligeable (de  l’ordre de l’impact carbone sur la planète de toute l’industrie du  transport aérien).</p><p
style="text-align: justify;"><img
src="https://lh3.googleusercontent.com/VSL2qIRfqsNswO8zNIGnqWKO66L0ZobPedTTWDPkTSl65_WIjp8FiSKi1UktE5qbpcGHKjKoC-en2t_idCa_JDBkbd1Fhb0OdWhsmjcMZD2xdNPNLQ" alt="" width="548px;" height="378px;" /><br
/> Cette question des différences entre les modèles de données n’est pas nouvelle, et elle a d’ailleurs fait l’objet d’une <a
href="http://laurentbloch.org/spip.php?article163" onclick="pageTracker._trackPageview('/outgoing/laurentbloch.org/spip.php?article163&amp;referer=');">discussion intéressante entre Michel Volle et Laurent Bloch</a>. Plus généralement, elle fait référence à <em><strong>“l’impedance mismatch” </strong></em>de George Copeland &amp; David Maier 1984:</p><blockquote><p>The problem with having two languages is“impedance mismatch ” One mismatch is conceptual &#8211; the data language and the programming languages might support widely different programming paradigms. [...]</p><p>The other mismatch is structural -thelanguages don’t support the same data types, [...]</p></blockquote><h2 style="text-align: justify;">Objets versus Tables</h2><p
style="text-align: justify;">Avec les travaux d’<a
href="http://research.microsoft.com/en-us/um/people/emeijer/" onclick="pageTracker._trackPageview('/outgoing/research.microsoft.com/en-us/um/people/emeijer/?referer=');">Erik Meijer</a>,  de chez Microsoft Research, on peut essayer d’aller plus loin dans  l’analyse de la situation, et je vais suivre à présent son  argumentation, telle qu’il a exposé lors du WebWorkers Camp parisien du  16 avril 2011, et en faisant référence au papier qu’il a publié en Mars  2011 : <a
href="http://queue.acm.org/detail.cfm?id=1961297" onclick="pageTracker._trackPageview('/outgoing/queue.acm.org/detail.cfm?id=1961297&amp;referer=');">A co-Relational Model of Data for Large Shared Data Banks</a>.</p><h3 style="text-align: justify;">L’objet-graphe et le stockage par clé/valeur (Key/Value)</h3><p
style="text-align: justify;">Tout commence par une citation de <strong>Donald Knuth</strong> :</p><blockquote><p>“I do consider assignment statements and pointer variables to be among computer science&#8217;s most valuable treasures.”</p></blockquote><p
style="text-align: justify;">Pourquoi  Meijer souligne-t-il ainsi l’importance des pointeurs  pour ensuite assimiler l’équivalence entre le modèle objet et le  stockage par clé-valeur ? :</p><blockquote><p>“In the rest of this article we conveniently confuse the words object (graph) and key-value store.”</p></blockquote><p
style="text-align: justify;">Deux choses ici :</p><ol
style="text-align: justify;"><li>D’une part, l’équivalence entre objet et graphe.</li><li>D’autre part, l’assimilation du modèle objet au mécanismes de stockage par clé-valeur.</li></ol><p
style="text-align: justify;">Si  l’objet est assimilé à un graphe c’est parce qu’une des  caractéristiques de l’objet est d’avoir <strong>la structure d’un graphe</strong>, à  savoir que les objets sont reliés entre eux par des relations qui, en  l’occurence, sont dirigées (d’où la flèche) :</p><p
style="text-align: center;"><img
class="aligncenter" title="Graphe" src="http://www.christian-faure.net/wp-images/o2.png" alt="" width="236" height="90" /></p><p
style="text-align: justify;">Référons-nous à wikipedia (article sur <a
href="http://en.wikipedia.org/wiki/Object_graph" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Object_graph?referer=');">Object Graph</a>) pour comprendre l’assimilation de l’objet-graphe à un mécanisme de stockage des données clé-valeur :</p><blockquote><p>“An object graph is a<a
href="http://en.wikipedia.org/wiki/Directed_graph" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Directed_graph?referer=');"> directed graph</a>, which might be<a
href="http://en.wikipedia.org/wiki/Cycle_graph" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Cycle_graph?referer=');"> cyclic</a>. When stored in<a
href="http://en.wikipedia.org/wiki/Random_access_memory" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Random_access_memory?referer=');"> RAM</a>,  objects occupy different segments of the memory with their attributes  and function table, while relationships are represented by<a
href="http://en.wikipedia.org/wiki/Pointer_%28computing%29" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Pointer_28computing_29?referer=');"> pointers</a> or a different type of global handler in higher-level languages.”</p></blockquote><p
style="text-align: justify;">Un Objet est donc stocké en mémoire en encapsulant avec lui avec tout ce qui le caractérise (attributs et fonctions). Si cet objet-graphe  est stocké dans différentes parties &#8211; ou segments &#8211; de la mémoire, <strong>les  relations entre ces différentes parties,</strong> elles, sont représentés par des <strong>pointeurs </strong>(ou par des mécanismes plus généraux embarqués dans les  langages de plus haut niveaux). Les pointeurs étant des types de données  dont la valeur est l’adresse vers un autre objet stocké en mémoire.</p><p
style="text-align: justify;">Paradoxalement, le concept de pointeur rebute souvent les  étudiants en informatique alors que l’<strong>architecture du web</strong> qu’ils  utilisent tous les jours en est exactement la mise en oeuvre avec des  ressources stockées qui sont accessibles via des relations qui sont  représentées par des adresses, les URLs.</p><p
style="text-align: justify;">Voilà  donc pour le côté “stockage en mémoire” des objets manipulés par les  programmes. Basiquement, il s’agit d’un<strong> mode de stockage de type Key -Value</strong> qui représente une part importante de l’utilisation des bases  NoSQL et sur lequel, je l’ai dit, repose l’architecture du web (de là à  justifier le NoSQL comme mouvement surdéterminé par l’architecture du  web, comme son milieu technologique d’émergence, il n’a qu’un pas).</p><h3 style="text-align: justify;">Le stockage de données par tables</h3><p
style="text-align: justify;">Passons maintenant au modèle utilisé par les bases de données relationnelles, représenté non plus par des objets mais par des tables.</p><p
style="text-align: justify;">Par rapport au modèle objet, la table va <strong>fractionner les données pour les lier d’une manière différente </strong>du modèle avec pointeur utilisé pour l’objet-graphe.</p><p
style="text-align: justify;">Alors  que la manipulation des donnés en mémoire sous forme de graphe était au  plus proche de leur mode de stockage physique en RAM, le modèle  relationnel va “plaquer” un mode de stockage et de requêtage qui repose  sur le modèle des tables. D’ailleurs, la première chose que l’on fait  pour créer une base de données c’est d’écrire :</p><blockquote><p>CREATE TABLE.</p></blockquote><p
style="text-align: justify;">Ici  il n’y a plus seulement une adresse pour une valeur (Key-Value), mais  une valeur ( la <em>primary key</em>) dans plusieurs lignes. C’est la raison pour laquelle le  modèle relationnel est aussi appelé Primary/Foreign Key.</p><h2 style="text-align: justify;">Les contournements du modèle relationnel</h2><p
style="text-align: justify;">Le  modèle relationnel n’est pas évident dans sa compréhension et dans son  utilisation. Meijer souligne tout cela par un raccourcit ironique :</p><ol
style="text-align: justify;"><li>Le  concepteur de base de données <strong>enlève</strong> la structure originairement  hiérarchique et objet pour lui appliquer un modèle normalisé par Tables ;</li><li>Le  développeur doit ensuite <strong>retrouver</strong> la forme objet-graphe originale pour  son développement. On a ainsi eu une vague d’ORM (Mapping  Objet/Relationnel) qui, comme leur nom l’indique ajoutent une sur-couche  objet au modèle relationnel afin que le programmeur puisse utiliser le  stockage relationnel sans en connaître toutes les subtilités ;</li><li>Même  du côté de la base de données, celui qui l’implémente doit<strong> rajouter une  couche</strong> de stockage objet-graphe et Clé-Valeur en construisant un index  de la base de données, en marge du modèle par Tables, pour pré-calculer  des réponses à des requêtes.</li></ol><p
style="text-align: justify;">A  croire que, dès qu’on veut utiliser les bases de données  relationnelles, il faille changer de modèle de données pour en revenir  au modèle objet-graphe et le stockage par Clé-Valeur.</p><h2 style="text-align: justify;">Sortir de l’aporie</h2><p
style="text-align: justify;">Jusqu’ici rien de bien nouveau dans le “dysfonctionnement relatif” entre modèle Objet et modèle Relationnel, si ce n’est la montée en puissance des base NoSQL.  Mais celles-ci n’ont pas vraiment de modèle de requêtage très élaboré  (<strong>pas de modèle mathématique</strong>) : en effet il y a plutôt des recettes de requêtage dans le monde NoSQL.</p><p
style="text-align: justify;">Là  où Meijer est intéressant, c’est dans la manière dont il formule le  problème pour dépasser la vision d’opposition entre SQL et NoSQL. De la <strong>logique d’opposition</strong> on bascule alors dans une <strong>logique de composition</strong>, et les choses deviennent beaucoup plus claires.</p><p
style="text-align: justify;">Meijer, tel <a
href="http://fr.wikipedia.org/wiki/M%C3%A9non" onclick="pageTracker._trackPageview('/outgoing/fr.wikipedia.org/wiki/M_C3_A9non?referer=');">Ménon</a>, fait son petit schéma (<em>fig. 6</em> pour le modèle objet, et<em> fig.7 </em>pour le modèle en tables) et constate que :</p><ul><li
style="text-align: justify;">le modèle objet est défini par intension</li><li
style="text-align: justify;">le modèle table est défini par extension.</li><li
style="text-align: justify;">et surtout, on voit bien sur le schéma que le sens des flèches est inversé.</li></ul><p><img
src="https://lh6.googleusercontent.com/7WUiYY1YlSQyNtKhPe0o4LOdQ0gSxyZkTItN35_JANcUsn2IQSG6ExFZnFdN50VajiQUc1hBLH4ymfoJuWVcedQ7I7rHzKnx-9dtRa_nrWZs0UsNQg" alt="" width="640px;" height="370px;" /></p><p><img
src="https://lh4.googleusercontent.com/NaogRHFyFHL4L7IMSseM-J5XjpxsGQmRFaOn9zbBg7MHUOitYtdGDWMMMB-riOyroFlFlVxA---buUpc36Nx9WRf6Y-eQ7DFG2ZvXuCtw2uZ2fkV8w" alt="" width="640px;" height="397px;" /></p><p
style="text-align: justify;">Je  rappelle brièvement qu’une <strong>définition par intension</strong> décrit la liste des  propriétés qui doivent être vérifiées pour qu’un élément appartienne à  l’ensemble ainsi défini. Dans la <strong>définition par extension</strong> c’est la liste  des éléments qui définit l’identité de l’ensemble :</p><blockquote><p>“Toute  classe d&#8217;éléments peut être définie en extension (en nommant ou en  désignant chaque individu qui en fait partie) ou en intension, par une  description (spécification d&#8217;un certain nombre de prédicats) qui définit  la classe. L&#8217;intension s&#8217;identifie ainsi au concept.&nbsp;&raquo;</p><p>Par  exemple, la classe des rois de France peut être désigné  extensionnellement en donnant une liste de noms, ou intensionnellement  par le concept « roi de France » (c&#8217;est-à-dire le prédicat, la propriété  « être un roi de France »).” <a
href="http://fr.wikipedia.org/wiki/Intension_et_extension" onclick="pageTracker._trackPageview('/outgoing/fr.wikipedia.org/wiki/Intension_et_extension?referer=');">Intension et Extension, Wikipedia</a>.</p></blockquote><p
style="text-align: justify;">En  informatique, toute donnée doit être porteuse d’une identité qui la  distingue de toute autre donnée. Toute donnée, c’est à dire toute  information disponible pour un calcul, doit disposer d’une identité. Et  celle-ci passe par un référent (par exemple un identifiant), qui n’est  autre qu’une <strong>métadonnée</strong> (Cf. <a
href="../2011/03/09/sur-les-metadonnees/">Sur les métadonnées</a>).</p><p
style="text-align: justify;">Il se trouve qu’avec le modèle objet-graphe, la métadonnée qui sert de référent pour l’identité de l’objet n’<strong>est pas une valeur</strong> mais l’<strong>adresse d’une valeur</strong> (le pointeur). Alors qu’avec le modèle en Tables, <strong>la métadonnée est une valeur</strong> (c’est la clé primaire).</p><p
style="text-align: justify;">La métadonnée qui sert de référent peut donc être définie par intension ou part extension :</p><ul
style="text-align: justify;"><li>par intension, on a une clé qui est une adresse</li><li>par  extension, on a une valeur (clé primaire) qui est présente dans toutes  les lignes des tables qui constituent l’identité de l’objet.</li></ul><p
style="text-align: justify;">On  comprend aisément la forte contrainte d’intégrité requise pour les  bases de données relationnelles : <strong>une modification doit se déployer sur  l’ensemble du système</strong>, de manière extensive, pour en garantir  l’intégrité. Avantage à la maîtrise des données mais difficultés à  passer à l’échelle du web.</p><p
style="text-align: justify;">Mais  avec son petit schéma, Meijer, remarque que le modèle Objet et le  modèle Table sont fort <strong>similaires</strong> : ce sont des <strong>graphes orientés</strong>, mais  avec une <strong>orientation inverse </strong>:</p><p
style="text-align: center;"><img
class="aligncenter" src="http://www.christian-faure.net/wp-images/o1.png" alt="" width="359" height="183" /></p><p
style="text-align: justify;">Ne manque plus qu’à Erik Meijer de chercher <em>“Mathematics arrow reverse”</em> dans Google pour tomber sur la page Wikipedia de la <a
href="http://fr.wikipedia.org/wiki/Th%C3%A9orie_des_cat%C3%A9gories" onclick="pageTracker._trackPageview('/outgoing/fr.wikipedia.org/wiki/Th_C3_A9orie_des_cat_C3_A9gories?referer=');">théorie mathématique des catégories</a>.</p><h2 style="text-align: justify;">Théorie mathématique des catégories et le concept de dualité : “NoSQL is CoSQL”</h2><p
style="text-align: justify;">De la <a
href="http://fr.wikipedia.org/wiki/Th%C3%A9orie_des_cat%C3%A9gories" onclick="pageTracker._trackPageview('/outgoing/fr.wikipedia.org/wiki/Th_C3_A9orie_des_cat_C3_A9gories?referer=');">théorie mathématique des catégories</a>, Meijer retient le <a
href="http://fr.wikipedia.org/wiki/Th%C3%A9orie_des_cat%C3%A9gories#Cat.C3.A9gorie_duale" onclick="pageTracker._trackPageview('/outgoing/fr.wikipedia.org/wiki/Th_C3_A9orie_des_cat_C3_A9gories_Cat.C3.A9gorie_duale?referer=');">concept de dualité</a>, ou catégorie duale :</p><blockquote><p>À partir d&#8217;une catégorie <img
src="https://lh3.googleusercontent.com/6lEgCiZByb8er8IY7Tob1vh9mx_ihCaxzEw1HbmiVa8cI-oRfVAFZXsl4VC7xphlOzYxKoXeJF3BniGVuBEQsoqjIR5qPCttLZoIBhYyK9xCyXYgxQ" alt="" width="11px;" height="14px;" /><img
src="https://lh3.googleusercontent.com/5KfFOiByi4aj0_dQkL5-8ue3BHiOYZh0CbWOiMlPqHpU1o5lFeEVn_rCZcsHz7aAfvoGGNo_TrD4LCyRtXVHRRWD4JaO2Dqo2KOpA7Pg52k8YL2KvQ" alt="" width="26px;" height="15px;" /><img
src="https://lh3.googleusercontent.com/d2eBs1PNLhBs3Jv7gVUJ645LfjtesCLv9tqT5fQJpLJzVlW0uYXrMeolYqBIf915RmxMzAXRGjm7q6cEUTOAlMWVyh11dbi2lt3AQoUQsW1KwaQM8Q" alt="" width="19px;" height="15px;" />opposée ou duale, en prenant les mêmes objets, mais en inversant le sens des flèches.</p><p>Plus précisément : <img
src="https://lh4.googleusercontent.com/FLk5Etn3Y05bVwlpmWFfxerYCVDp5EQ8nX0ffdSttWvxN4L8Harq1pOVyx1KCb3Ld-5nzgq7crSmPUQMPzA7JP4tAOWGhqfyuT2vT71iIh6zq6JTsA" alt="" width="254px;" height="21px;" /><img
src="https://lh3.googleusercontent.com/1NebnTxl1JwjrdhgVkLT6NR6jn-tXdDsNCkDky7nvsJUIc_STpctSi0C6AjczRGH8T1Z7pk0cB8SGMcRrmke-Smdpul9uolOtSCmwOETNt9Y08YZMA" alt="" width="166px;" height="21px;" /></p><p>Il est clair que la catégorie duale de la catégorie duale est la catégorie de départ : <img
src="https://lh6.googleusercontent.com/k9S1i-A0mPHly5QhbgxMVuM8oTEyZ-ufi7dYqAn6XNtyJd773Qc58cZuq6VBPbzjkHEj6USjIw1wuvmzaIY5Qv2BohOaWDX7ED2EIBgZmqvw-Y2sQA" alt="" width="93px;" height="21px;" /></p><p>Cette  dualisation extrêmement simple permet de symétriser la plupart des  énoncés, ce qui peut être douloureux pour les débutants&#8230;</p></blockquote><p
style="text-align: justify;">Ce “détour” par les mathématiques permet finalement à Meijer d’affirmer que :</p><ul
style="text-align: justify;"><li>SQL et NoSQL ne sont pas incommensurables et incompatibles ;</li><li>NoSQL  s’appuie en fait sur un modèle de donnée qui reléve d’une catégorie  duale où l’on a les mêmes objets mais en inversant le sens des flèches ;</li><li>Donc NoSQL est en fait CoSQL ;</li><li>A  partir de là, on peut fonder les modes de requêtes NoSQL sur une  théorie mathématique, comme s’était le cas pour SQL, ce qui permettra  non seulement de standardiser les requêtes pour différentes bases NoSQL  mais aussi de fonctionner pour les bases SQL.</li></ul><p
style="text-align: justify;">Le  rôle d’une <strong>interface</strong> est précisément de faire cohabiter des modèles  différents, qui ne sont certes pas opposé et incompatibles sans quoi  l’existence même d’interface ne saurait être possible.</p><p
style="text-align: justify;">Avec  son <strong>langage de requêtage “universel” LINK</strong>, Meijer ne fait rien d’autre  que d’avoir trouvé, via le recours aux théories mathématiques, une  interface entre des modèles qui étaient présentés comme apparemment  opposés. <strong>L’interface est à ce tire une composition</strong>.</p><p
style="text-align: justify;">Bien  qu’étant universel sur le papier, LINK reste toutefois implémenté dans  le monde .NET. Il faudrait donc une implémentation de cette démarche <strong> pour chaque langage</strong> pour parler vraiment d’un langage de requête  universel.</p><h2 style="text-align: justify;">Langage fonctionnels purs et monades</h2><p
style="text-align: justify;">On  connaît l’implication de Meijer dans la valorisation, la promotion des<strong> langages fonctionnels et notamment de Haskell</strong> (je vous renvoie à mon  article <a
href="../2010/10/17/apprendre-haskell/">Apprendre Haskell </a>dans lequel je donnais les liens vers les tutoriels video de Meijer sur Haskell).</p><p
style="text-align: justify;">En fait, l’approche qu’il a implémenté avec LINK lui a été soufflé par <strong>les monades en Haskell</strong>. Pourquoi celà ?</p><p
style="text-align: justify;"><em>Rendre  compatible ce qui est incompatible</em> est précisément le rôle des monades  en Haskell. Puisque le langage est pur et fonctionnel (aucun effet de  bord et immutabilité) il ne peut interagir avec le monde et le changer,  il faut <strong>définir un lieu d’où les effets de bord (comme l’impression sur  un terminal) seront quand même possibles.</strong></p><p
style="text-align: justify;">Les  effets de bord sont souvent dûs à des erreurs <em>du point de vue des  Types</em> des données manipulés. Par exemple la fonction qui affiche l’heure  n’est pas pure car à chaque fois qu’on demande la valeur, la fonction  produit un résultat différent (l’heure tourne). Donc, <strong>un travail sur le  Type System</strong> peut contourner la difficulté en considérant que la fonction  ne revoie pas un INT mais un CHAR : <strong>on a contourné l’effet de bord en  maîtrisant la définition par intension de la fonction dans la  configuration des types.</strong></p><p
style="text-align: justify;">Pour  bien comprendre l’intérêt de cette question, on peut y retrouver un  usage dans<strong> les architectures RESTful</strong>. Ainsi &laquo;&nbsp;Idempotence&nbsp;&raquo; en REST  signifie &laquo;&nbsp;Pureté&nbsp;&raquo; en langage fonctionnel : la valeur d&#8217;une fonction ne  change pas dans le temps (pas d&#8217;effet de bord). Par où l’on voit que le style d’architecture REST est un style qui s’appuie sur une architecture fonctionnelle pure <em>par défaut</em> : POST n’est pas une fonction idempotente (pure) car elle va modifier l’état du système.</p><p
style="text-align: justify;">Mais  toute approche fonctionnelle pure doit composer avec le non-pur. Les  programmes sont faits pour changer les états de systèmes et pour <em>changer  le monde</em>. Les monades sont faîtes pour effectuer cette composition <strong>en  créant des Types qui vont décrire ces effets de bord</strong> (<em>IO</em>, <em>Exception</em>, <em> Animation</em>, <em>Collection</em>). Les exceptions sont<strong> intégrées et gérées par le  système </strong>qui conserve ainsi sa pureté grâce à son Type System (il n’y a  pas que Haskell qui utilise cette approche par monades, Java aussi avec  “<em>throws Exceptions”</em>).</p><p
style="text-align: justify;"><strong>Les monades transforment ce qui est mutable en quelque chose d’immutable</strong> (<em>mutable</em> et <em>immutable</em> étant les termes informatiques anglais utilisés).</p><p
style="text-align: justify;">En  fait, je me demande si la modification que l’on fait avec les monades  ne consisterait pas à définir de nouveaux Types non plus par <em>intension</em> mais par <em>extension</em>.</p><h2 style="text-align: justify;">SQL et CoSQL à la lumière du concept de métastabilité.</h2><p
style="text-align: justify;">Meijer rapproche l’articulation, qui est composition, entre SQL et NoSQL à celle du <strong>Ying et du Yang chinois</strong>, l’un désignant l’<em>ouvert</em> et l’autre le <em>fermé</em>. Puis il expose la dualité, au sens mathématique du terme, entre SQL et CoSQL, entre le fermé et l’ouvert :</p><p><img
src="https://lh5.googleusercontent.com/j9Hj59NEuMji8oJTz46YvdUP0hQoBZT0Ru1BJHfeYfBB4awMqK0oV8lwplwrzWWmTlqCUHtRTlXDaSgWY20-B-eSDekOlVIQnav8W19ctxN-ecuy3zU" alt="" width="640px;" height="253px;" /></p><p
style="text-align: justify;">On reconnaît dans cette distinction celle que j’avais essayé de faire entre <strong>technologies de gestion</strong> et <strong>technologies relationnelles</strong>, c’est à dire entre <strong>stabilité</strong> et <strong>métastabilité</strong> (Cf. <a
href="../2010/10/04/les-technologies-relationnelles-dans-les-systemes-dinformation/">Les technologies relationnelles dans les systèmes d’information</a> et <a
href="../2010/12/02/metastabilite-et-architectures-logicielles/">Métastabilité et archtitectures logicielles</a> )</p><h2 style="text-align: justify;">Le sens des flèches : des flèches du web au PageRank de l’index de Google.</h2><h3 style="text-align: justify;">Ouverture et métastabilité du web.</h3><p
style="text-align: justify;">J’ai  déjà rappelé l’anecdote à propos de Tim Berners Lee qui n’avait pas  trouvé d’investisseur lors du Symposium sur les systèmes hypertextes en  venant présenter son invention : le web.<br
/> Ceux  qui pensaient en matière de technologies de gestion et de système clos  et stable <strong>ne comprenaient pas l’intérêt d’un système métastable comme le  web</strong> qui ne garantissait pas l’intégrité du système. Par exemple <strong>on peut  faire des liens vers des ressources qui n’existent pas</strong> et provoquer une  erreur. Seulement voilà, cet effet de bord est prévu dans le web, c’est  précisément l’<em>erreur 404</em> que connaît et intègre le système (utilisation  du principe de la monade) et qui fait qu’un lien brisé n’a jamais  empêché le web de fonctionner.</p><h3 style="text-align: justify;">Google : à rebrousse-poils du web</h3><p
style="text-align: justify;">Le  projet backrub, qui fut l’ancêtre de Google et du PageRank, prenait le  web à rebrousse-poil en se proposant d’identifier les pages HMTL qui  lient une page donnée (Cf. <a
href="http://www.christian-faure.net/2005/11/26/lide-qui-fonda-google/">L&#8217;idée qui fonda Google</a>). C’est prendre le web à rebrousse-poil car les  liens HTML sont <strong>reconstitués à l’envers</strong> : dans un cas la page HTML est  le “parent” qui contient les liens vers les pages “enfants”, dans  l’autre c’est les pages “enfants” qui lient vers la page “parent” pour  lui donner un poids (un ranking).</p><p
style="text-align: justify;">A  ce titre, on peut dire que le modèle d’affaire de Google s’est  constitué mathématiquement comme une dualité du web, selon la théorie  des catégories : <strong>Google = Co(Web).</strong></p><p
style="text-align: center;">*</p><p
style="text-align: justify;">Il  serait intéressant de rejouer ce raisonnement en y intégrant ce  qu’écarte Meijer, à savoir les bases NoSQL qui ne sont pas sur le modèle  document clé-valeur mais sous une forme d’un graphe <em><strong>typé</strong></em>. C’est à dire en prenant en compte les éléments de la présentation (slides) <a
href="http://www.slideshare.net/slidarko/an-overview-of-data-management-paradigms-relational-document-and-graph-3880059" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/slidarko/an-overview-of-data-management-paradigms-relational-document-and-graph-3880059?referer=');">An Overview of Data Management Paradigms: Relational, Document, and Graph</a>, de Marko Rodriguez.</p> <span
class="post-twitter" ><a
href="http://twitter.com/home?status=Chez%20%40ChristianFaure%20%3A%20%22Sens%20et%20enjeux%20des%20mod%C3%A8les%20de%20stockage%20et%20d%27acc%C3%A8s%20aux%20donn%C3%A9es%22%20http%3A%2F%2Ftinyurl.com%2F5ttd2s8" title="Signaler sur Twitter" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=Chez_20_40ChristianFaure_20_3A_20_22Sens_20et_20enjeux_20des_20mod_C3_A8les_20de_20stockage_20et_20d_27acc_C3_A8s_20aux_20donn_C3_A9es_22_20http_3A_2F_2Ftinyurl.com_2F5ttd2s8&amp;referer=');">Signaler sur Twitter</a></span><p>Related posts:<ol><li><a
href='http://www.christian-faure.net/2008/12/17/sens-et-enjeux-des-ria/' rel='bookmark' title='Sens et enjeux des RIA'>Sens et enjeux des RIA</a> <small>Je suis donc intervenu au RIA 2008 d&#8217;Adobe en insistant...</small></li><li><a
href='http://www.christian-faure.net/2008/09/13/prendre-soin-des-donnees/' rel='bookmark' title='Prendre soin des données'>Prendre soin des données</a> <small>Sur le blog d&#8217;Atos Origin je reviens sur les enjeux...</small></li><li><a
href='http://www.christian-faure.net/2011/02/11/les-enjeux-de-la-grammatisation-des-relations/' rel='bookmark' title='Les enjeux de la grammatisation des relations'>Les enjeux de la grammatisation des relations</a> <small>(Les illustrations sont de Pavel.K, dessinateur, caricaturiste et illustrateur, que...</small></li></ol></p>]]></content:encoded> <wfw:commentRss>http://www.christian-faure.net/2011/04/18/sens-et-enjeux-des-modeles-de-stockage-et-dacces-aux-donnees/feed/</wfw:commentRss> <slash:comments>17</slash:comments> </item> <item><title>Apprendre Haskell</title><link>http://www.christian-faure.net/2010/10/17/apprendre-haskell/</link> <comments>http://www.christian-faure.net/2010/10/17/apprendre-haskell/#comments</comments> <pubDate>Sun, 17 Oct 2010 10:42:21 +0000</pubDate> <dc:creator>Christian</dc:creator> <category><![CDATA[Défaut]]></category> <category><![CDATA[Haskell]]></category> <category><![CDATA[programmation]]></category><guid
isPermaLink="false">http://www.christian-faure.net/?p=1889</guid> <description><![CDATA[Haskell est un langage de programmation fonctionnelle. Un style de programmation où l&#8217;on utilise des fonctions plutôt que des objets, contrairement au paradigme de la programmation orientée objet. Je ne vais pas refaire ici la liste des caractéristiques de la programmation fonctionnelle et de Haskell en particulier. Le souhaite juste indiquer rapidement quels sont les [...]
Related posts:<ol><li><a
href='http://www.christian-faure.net/2006/11/13/recrutement/' rel='bookmark' title='Recrutement'>Recrutement</a> <small>Je cherche &#224; recruter un ing&#233;nieur junior avec une formation...</small></li><li><a
href='http://www.christian-faure.net/2006/10/14/introduction-a-xml/' rel='bookmark' title='Introduction à XML'>Introduction à XML</a> <small>Une introduction n&#8217;est pas, disait Heidegger, quelque chose de général...</small></li><li><a
href='http://www.christian-faure.net/2007/10/03/multicore-crisis-la-crise-des-multicoeurs/' rel='bookmark' title='Multicore crisis : la crise des multicoeurs'>Multicore crisis : la crise des multicoeurs</a> <small>La loi de moore ne reflète plus l&#8217;évolution du marché...</small></li></ol>]]></description> <content:encoded><![CDATA[<p></p><p
style="text-align: justify;"><img
class="alignleft" style="margin: 10px;" title="Haskell Logo" src="http://www.haskell.org/wikiupload/2/28/Haskell-Logo.png" alt="" width="200" height="111" /></p><p
style="text-align: justify;">Haskell est un langage de <strong>programmation fonctionnelle</strong>. Un style de  programmation où l&#8217;on utilise des fonctions plutôt que des objets,  contrairement au paradigme de la programmation orientée objet.</p><p
style="text-align: justify;">Je ne  vais pas refaire ici la liste des caractéristiques de la programmation  fonctionnelle et de Haskell en particulier. Le souhaite juste indiquer  rapidement <strong>quels sont les enjeux et quelles sont les ressources que  l&#8217;on peut utiliser pour s&#8217;y initier</strong>.</p><p
style="text-align: justify;">Pourquoi Haskell ? Parmi les  nombreux langages de programmation fonctionnelle de grande valeur  (Scheme, OCaml,F#, Erlang, etc), Haskell a un statut particulier car  c&#8217;est le plus &laquo;&nbsp;pur&nbsp;&raquo; (il y a aussi <a
href="http://wiki.clean.cs.ru.nl/Clean" onclick="pageTracker._trackPageview('/outgoing/wiki.clean.cs.ru.nl/Clean?referer=');">Clean</a>, mais plus confidentiel), c&#8217;est à dire celui qui vous contraindra le plus à <strong>embrasser le paradigme de la programmation fonctionnelle</strong>.<br
/> <span
id="more-1889"></span><br
/> Les  vertus de la programmation fonctionnelle sont, notamment, de pouvoir  appréhender dans de bonnes conditions les problématiques de  parallélisation et de concurrence induites par la crise des multicoeurs  et les architectures hautement distribuées, ce pour quoi les paradigmes  impératifs et objets sont dans une <strong>impasse</strong>.</p><p
style="text-align: justify;">L&#8217;<strong>évaluation paresseuse </strong>(lazy evaluation)  permet d&#8217;optimiser les performances du code car les calculs ne sont  faits par le programme que s&#8217;ils sont vraiment nécessaires.</p><p
style="text-align: justify;">Ensuite, le système  de<strong> typage des données est statique</strong>, c&#8217;est à dire qu&#8217;il faut bien  préciser la nature des données manipulées par les fonction quand on les  défini. Cela peut paraître plus contraignant que le typage dynamique,  mais cela garanti la<strong> sureté des programmes</strong>.</p><p
style="text-align: justify;">On peut dire  aujourd&#8217;hui que <strong>tous les langages objets et impératifs tendent, dans  leur évolution, à intégrer ce qui fait la force de la programmation  fonctionnelle</strong>, alors pourquoi ne pas partir directement du modèle de  référence plutôt que d&#8217;avoir des langages hybrides (scala, clojure,  etc.) ?</p><p
style="text-align: justify;">Pour résumer la situation en matière d&#8217;évolution des langages, <a
href="http://research.microsoft.com/Users/simonpj/" onclick="pageTracker._trackPageview('/outgoing/research.microsoft.com/Users/simonpj/?referer=');">Simon Peyton-Jones</a> présente le petit schéma que je reproduis ci-après, et dans lequel il  montre bien que le Nirvana du programmeur serait d&#8217;avoir un langage  utile et sain. Pour l&#8217;atteindre, soit l&#8217;on part du situation dangereuse  mais utile (Java, C++, Python, C#, etc.) pour introduire progressivement  des approches fonctionnelles dans ces langages, soit l&#8217;on part d&#8217;une  situation saine (Haskell) mais peu utile (&laquo;&nbsp;peu utile&nbsp;&raquo; car dans l&#8217;idéal,  un programme fonctionnel n&#8217;a aucun effet de bord, c&#8217;est à dire qu&#8217;il ne  modifie pas le monde, il ne sert donc à rien) mais qui va implémenter  des possibilités de modification de son environnement.</p><div
id="ira0" style="text-align: justify;"><div
id="w0y7"><img
src="https://docs.google.com/a/christian-faure.net/File?id=dgc94t4h_261hpv88xcs_b" alt="" width="566" height="468" /></div><p>(on peut trouver sur le web plusieurs enregistrements vidéos de conférences données  par Simon Peyton-Jones, toutes relèvent du gai savoir çà vaut le détour.)</p><p>On  voit que <strong>la philosophie Haskell est très cartésienne</strong> : on fait une <em>tabula rasa</em> pour partir d&#8217;une situation saine à partir de laquelle on va  accepter d&#8217;implémenter des effets de bords maîtrisés (les fameuses <em> monades</em>) et non arbitraires.</p><p>Là où le programmeur Java va passer son  temps à gérer les effets de bords dus à son style de programmation (il  ne cesse de dire au programme ce qu&#8217;il doit faire de manière procédurale  puis doit ensuite faire des batteries de tests unitaires pour  revérifier son travail) le développeur Haskell va laisser le programme  faire son boulot. <strong>Par nature, le programmeur Haskell à confiance dans  son code alors que le développeur Java est dans une relation de  méfiance.</strong></p></div><p
style="text-align: justify;">*</p><p
style="text-align: justify;">En matière de<strong> ressources bibliographiques</strong>, on commencera par indiquer le livre <a
id="ra3n" title="Introduction to functionnal programming using Haskell" href="http://www.amazon.com/Introduction-Functional-Programming-using-Haskell/dp/0134843460" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Introduction-Functional-Programming-using-Haskell/dp/0134843460?referer=');">Introduction to functionnal programming using Haskell</a> de Richard Bird. C&#8217;est un livre théorique, donc si vous êtes un  développeur sans appétence pour les aspects les plus abstraits et  conceptuels, il faut passer votre chemin. Toutefois, il y a fort à  parier que c&#8217;est un livre que l&#8217;on sera amené à consulter régulièrement  quand on se retrouvera face à des questions de fond quant à la meilleur manière  de faire,  et également pour améliorer son &laquo;&nbsp;esprit Haskell&nbsp;&raquo;.</p><div
id="ioih" style="text-align: justify;"><img
class="aligncenter" src="https://docs.google.com/a/christian-faure.net/File?id=dgc94t4h_259hhvhjcsz_b" alt="" width="220" height="324" /></div><p
style="text-align: justify;">Ensuite, une mention spéciale pour l&#8217;ouvrage de Graham Hutton, <a
id="m2ew" title="Programming in Haskell" href="http://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/0521692695" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Programming-Haskell-Graham-Hutton/dp/0521692695?referer=');">Programming in Haskell</a>,  qui est un <strong>livre magique</strong>. Tout y est : qualité du papier, typographie,  excellence pédagogique, le tout en moins de 200 pages. De quoi donner  des leçons à <strong>tous ces livres informatiques qui ressemblent à des  catalogues de la redoute de plus de 500 pages pour ne rien dire  d&#8217;intelligent</strong>. Pour moi, c&#8217;est le meilleur ouvrage de programmation qu&#8217;il  m&#8217;ait été donné de lire, à recommander même à ceux qui ne veulent pas  apprendre Haskell, c&#8217;est dire.</p><div
id="x9c6" style="text-align: justify;"><img
class="aligncenter" src="https://docs.google.com/a/christian-faure.net/File?id=dgc94t4h_258cwttnvf5_b" alt="" width="348" height="446" /></div><p
style="text-align: justify;">C&#8217;est sur la base de ce livre qu&#8217;Erik Meijer (une des têtes pensantes de Microsoft, passionné par les langages fonctionnels) propose, sur le <a
href="http://channel9.msdn.com/tags/C9+Lectures/" onclick="pageTracker._trackPageview('/outgoing/channel9.msdn.com/tags/C9+Lectures/?referer=');">Channel 9</a> de Microsoft, 13 cours vidéos pour s&#8217;initier au langage, un vrai régal :</p><ol
style="text-align: justify;"><li><a
href="http://ecn.channel9.msdn.com/o9/ch9/7/9/3/4/9/4/C9LecturesMeijerFunctionalChapter1_2MB_ch9.wmv" onclick="pageTracker._trackPageview('/outgoing/ecn.channel9.msdn.com/o9/ch9/7/9/3/4/9/4/C9LecturesMeijerFunctionalChapter1_2MB_ch9.wmv?referer=');">Introduction</a></li><li><a
href="http://ecn.channel9.msdn.com/o9/ch9/8/9/3/4/9/4/C9LecturesMeijerFPC2_2MB_ch9.wmv" onclick="pageTracker._trackPageview('/outgoing/ecn.channel9.msdn.com/o9/ch9/8/9/3/4/9/4/C9LecturesMeijerFPC2_2MB_ch9.wmv?referer=');">First steps</a></li><li><a
href="http://ecn.channel9.msdn.com/o9/ch9/6/1/7/5/9/4/C9LecturesMeijerFPC3_2MB_ch9.wmv" onclick="pageTracker._trackPageview('/outgoing/ecn.channel9.msdn.com/o9/ch9/6/1/7/5/9/4/C9LecturesMeijerFPC3_2MB_ch9.wmv?referer=');">Types and classes</a></li><li><a
href="http://ecn.channel9.msdn.com/o9/ch9/7/1/9/8/9/4/C9LecturesMeijerFPC4_2MB_ch9.wmv" onclick="pageTracker._trackPageview('/outgoing/ecn.channel9.msdn.com/o9/ch9/7/1/9/8/9/4/C9LecturesMeijerFPC4_2MB_ch9.wmv?referer=');">Defining functions</a></li><li><a
href="http://ecn.channel9.msdn.com/o9/ch9/8/1/9/8/9/4/C9LecturesMeijerFPC5_2MB_ch9.wmv" onclick="pageTracker._trackPageview('/outgoing/ecn.channel9.msdn.com/o9/ch9/8/1/9/8/9/4/C9LecturesMeijerFPC5_2MB_ch9.wmv?referer=');">List comprehensions</a></li><li><a
href="http://ecn.channel9.msdn.com/o9/ch9/6/6/0/9/9/4/C9LecturesErikMeijerFPC6_2MB_ch9.wmv" onclick="pageTracker._trackPageview('/outgoing/ecn.channel9.msdn.com/o9/ch9/6/6/0/9/9/4/C9LecturesErikMeijerFPC6_2MB_ch9.wmv?referer=');">Recursive functions</a></li><li><a
href="http://ecn.channel9.msdn.com/o9/ch9/9/0/2/4/0/5/C9LecturesMeijerFPC7_2MB_ch9.wmv" onclick="pageTracker._trackPageview('/outgoing/ecn.channel9.msdn.com/o9/ch9/9/0/2/4/0/5/C9LecturesMeijerFPC7_2MB_ch9.wmv?referer=');">Higher-order functions</a></li><li><a
href="http://ecn.channel9.msdn.com/o9/ch9/1/1/2/4/0/5/C9LecturesMeijerC8_2MB_ch9.wmv" onclick="pageTracker._trackPageview('/outgoing/ecn.channel9.msdn.com/o9/ch9/1/1/2/4/0/5/C9LecturesMeijerC8_2MB_ch9.wmv?referer=');">Functional parsers</a></li><li><a
href="http://ecn.channel9.msdn.com/o9/ch9/2/1/2/4/0/5/C9LecturesMeijerFPC9_2MB_ch9.wmv" onclick="pageTracker._trackPageview('/outgoing/ecn.channel9.msdn.com/o9/ch9/2/1/2/4/0/5/C9LecturesMeijerFPC9_2MB_ch9.wmv?referer=');">Interactive programs</a></li><li><a
href="http://ecn.channel9.msdn.com/o9/ch9/3/1/2/4/0/5/C9LecturesMeijerFPC10_2MB_ch9.wmv" onclick="pageTracker._trackPageview('/outgoing/ecn.channel9.msdn.com/o9/ch9/3/1/2/4/0/5/C9LecturesMeijerFPC10_2MB_ch9.wmv?referer=');">Declaring types and classes</a></li><li><a
href="http://ecn.channel9.msdn.com/o9/ch9/4/1/2/4/0/5/C9LecturesFPGrahamHuttonC11_2MB_ch9.wmv" onclick="pageTracker._trackPageview('/outgoing/ecn.channel9.msdn.com/o9/ch9/4/1/2/4/0/5/C9LecturesFPGrahamHuttonC11_2MB_ch9.wmv?referer=');">The countdown problem</a></li><li><a
href="http://ecn.channel9.msdn.com/o9/ch9/5/1/2/4/0/5/C9LecturesErikMeijerFPC12_2MB_ch9.wmv" onclick="pageTracker._trackPageview('/outgoing/ecn.channel9.msdn.com/o9/ch9/5/1/2/4/0/5/C9LecturesErikMeijerFPC12_2MB_ch9.wmv?referer=');">Lazy evaluation</a></li><li><a
href="http://ecn.channel9.msdn.com/o9/ch9/6/5/6/3/1/5/C9LecturesMeijerFPC13_2MB_ch9.wmv" onclick="pageTracker._trackPageview('/outgoing/ecn.channel9.msdn.com/o9/ch9/6/5/6/3/1/5/C9LecturesMeijerFPC13_2MB_ch9.wmv?referer=');">Reasoning about programs</a></li></ol><p
style="text-align: justify;">Je signale également le livre <a
id="bgck" title="Haskell school of Expression" href="http://www.amazon.com/Haskell-School-Expression-Functional-Programming/dp/0521644089/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1287307370&amp;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Haskell-School-Expression-Functional-Programming/dp/0521644089/ref=sr_1_1?ie=UTF8_amp_s=books_amp_qid=1287307370_amp_sr=1-1&amp;referer=');">Haskell school of Expression</a>, de Paul Hudak, pour ceux qui veulent utiliser la programmation fonctionnelle dans un contexte multimédia et artistique :</p><div
id="yolg" style="text-align: justify;"><img
class="aligncenter" src="https://docs.google.com/a/christian-faure.net/File?id=dgc94t4h_262c2wm2vqz_b" alt="" width="363" height="500" />&nbsp;</p><p>Paul Hudak que l&#8217;on peut voir dans <a
id="fap." title="cette vidéo, donnant une conférence sur &quot;Haskell and the arts : How functionnal programmers can help, inspire or even be artists&quot;" href="http://www.infoq.com/presentations/haskell-arts-paul-hudak" onclick="pageTracker._trackPageview('/outgoing/www.infoq.com/presentations/haskell-arts-paul-hudak?referer=');">cette  vidéo, donnant une conférence sur &laquo;&nbsp;Haskell and the arts : How  functionnal programmers can help, inspire or even be artists&nbsp;&raquo;</a>, enregistrée à Qcon San Fransisco en novembre 2008.</p><p>Enfin, la consécration, un <strong>ouvrage de référence chez O&#8217;reilly</strong>, le fameux <a
id="ggnz" title="Real World Haskell" href="http://www.amazon.com/Real-World-Haskell-Bryan-OSullivan/dp/0596514980/ref=pd_bxgy_b_img_b" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Real-World-Haskell-Bryan-OSullivan/dp/0596514980/ref=pd_bxgy_b_img_b?referer=');">Real World Haskell</a>,  que je déconseille toutefois avant d&#8217;avoir lu &laquo;&nbsp;Programming in Haskell&nbsp;&raquo;  de Graham Hutton. On a ici un ouvrage <em>mainstream</em>, comme tant d&#8217;autres,  mais fort utile pour faire du Haskell &laquo;&nbsp;dans la vraie vie&nbsp;&raquo;.</p></div><div
id="b88e" style="text-align: justify;"><img
class="aligncenter" src="https://docs.google.com/a/christian-faure.net/File?id=dgc94t4h_263gfmrfm7v_b" alt="" width="420" height="551" /></div><p
style="text-align: justify;">Sur les autres ressources, on ira sur <a
id="r.kh" title="Haksell.org" href="http://www.haskell.org/" onclick="pageTracker._trackPageview('/outgoing/www.haskell.org/?referer=');">Haksell.org</a>,  le portail qui rassemble toutes les infos utiles. À noter que depuis  quelques mois un effort a été fait sur les packages d&#8217;installation avec <a
id="y7xx" title="The Haskell Platorm" href="http://hackage.haskell.org/platform/" onclick="pageTracker._trackPageview('/outgoing/hackage.haskell.org/platform/?referer=');">The Haskell Platorm</a>.</p><p
style="text-align: justify;">Pour les librairies on utilisera le génial <a
id="lq2-" title="Hoogle" href="http://haskell.org/hoogle/" onclick="pageTracker._trackPageview('/outgoing/haskell.org/hoogle/?referer=');">Hoogle</a>.</p><p
style="text-align: justify;">Côté des <a
id="a82j" title="frameworks web" href="http://www.haskell.org/haskellwiki/Web" onclick="pageTracker._trackPageview('/outgoing/www.haskell.org/haskellwiki/Web?referer=');">frameworks web</a>, il y a <a
id="h98f" title="Happstack" href="http://happstack.com/index.html" onclick="pageTracker._trackPageview('/outgoing/happstack.com/index.html?referer=');">Happstack</a>, le plus ancien, mais aussi <a
id="vuai" title="Snap" href="http://snapframework.com/" onclick="pageTracker._trackPageview('/outgoing/snapframework.com/?referer=');">Snap</a> qui, bien qu&#8217;en phase beta, semble jouir d&#8217;une bonne dynamique et donne des premières perspectives de <a
id="gr1u" title="performances" href="http://snapframework.com/benchmarks" onclick="pageTracker._trackPageview('/outgoing/snapframework.com/benchmarks?referer=');">performances</a> intéressantes (ici les performances d&#8217;accès à des fichiers, plus est mieux):</p><div
id="uyuc" style="text-align: justify;"><img
src="https://docs.google.com/a/christian-faure.net/File?id=dgc94t4h_264d5sd8szw_b" alt="" /></div><p
style="text-align: justify;">Enfin, et pour terminer,  la petite blague sur Haskell qui a circulé sur Twitter, relativement à  &laquo;&nbsp;l&#8217;évaluation paresseuse&nbsp;&raquo; (Lazy evaluation) dans Haskell, où les  calculs ne sont effectués par le programme que s&#8217;ils sont nécessaires:</p><blockquote><p>Put  #Haskell on your resume even if you don&#8217;t know it. When asked, say your  resume is lazy and you&#8217;ll learn it when results are needed.</p></blockquote><p
style="text-align: justify;">Bonne initiation !</p> <span
class="post-twitter" ><a
href="http://twitter.com/home?status=Chez%20%40ChristianFaure%20%3A%20%22Apprendre%20Haskell%22%20http%3A%2F%2Ftinyurl.com%2F2vyclrb" title="Signaler sur Twitter" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=Chez_20_40ChristianFaure_20_3A_20_22Apprendre_20Haskell_22_20http_3A_2F_2Ftinyurl.com_2F2vyclrb&amp;referer=');">Signaler sur Twitter</a></span><p>Related posts:<ol><li><a
href='http://www.christian-faure.net/2006/11/13/recrutement/' rel='bookmark' title='Recrutement'>Recrutement</a> <small>Je cherche &#224; recruter un ing&#233;nieur junior avec une formation...</small></li><li><a
href='http://www.christian-faure.net/2006/10/14/introduction-a-xml/' rel='bookmark' title='Introduction à XML'>Introduction à XML</a> <small>Une introduction n&#8217;est pas, disait Heidegger, quelque chose de général...</small></li><li><a
href='http://www.christian-faure.net/2007/10/03/multicore-crisis-la-crise-des-multicoeurs/' rel='bookmark' title='Multicore crisis : la crise des multicoeurs'>Multicore crisis : la crise des multicoeurs</a> <small>La loi de moore ne reflète plus l&#8217;évolution du marché...</small></li></ol></p>]]></content:encoded> <wfw:commentRss>http://www.christian-faure.net/2010/10/17/apprendre-haskell/feed/</wfw:commentRss> <slash:comments>6</slash:comments> <enclosure
url="http://ecn.channel9.msdn.com/o9/ch9/7/9/3/4/9/4/C9LecturesMeijerFunctionalChapter1_2MB_ch9.wmv" length="381931312" type="video/asf" /> <enclosure
url="http://ecn.channel9.msdn.com/o9/ch9/6/1/7/5/9/4/C9LecturesMeijerFPC3_2MB_ch9.wmv" length="525368335" type="video/asf" /> <enclosure
url="http://ecn.channel9.msdn.com/o9/ch9/8/9/3/4/9/4/C9LecturesMeijerFPC2_2MB_ch9.wmv" length="616708939" type="video/asf" /> <enclosure
url="http://ecn.channel9.msdn.com/o9/ch9/7/1/9/8/9/4/C9LecturesMeijerFPC4_2MB_ch9.wmv" length="736545601" type="video/asf" /> <enclosure
url="http://ecn.channel9.msdn.com/o9/ch9/8/1/9/8/9/4/C9LecturesMeijerFPC5_2MB_ch9.wmv" length="746286796" type="video/asf" /> <enclosure
url="http://ecn.channel9.msdn.com/o9/ch9/6/6/0/9/9/4/C9LecturesErikMeijerFPC6_2MB_ch9.wmv" length="1017554623" type="video/asf" /> <enclosure
url="http://ecn.channel9.msdn.com/o9/ch9/9/0/2/4/0/5/C9LecturesMeijerFPC7_2MB_ch9.wmv" length="1069934805" type="video/asf" /> <enclosure
url="http://ecn.channel9.msdn.com/o9/ch9/1/1/2/4/0/5/C9LecturesMeijerC8_2MB_ch9.wmv" length="1280192037" type="video/asf" /> <enclosure
url="http://ecn.channel9.msdn.com/o9/ch9/2/1/2/4/0/5/C9LecturesMeijerFPC9_2MB_ch9.wmv" length="983991934" type="video/asf" /> <enclosure
url="http://ecn.channel9.msdn.com/o9/ch9/3/1/2/4/0/5/C9LecturesMeijerFPC10_2MB_ch9.wmv" length="1054212848" type="video/asf" /> <enclosure
url="http://ecn.channel9.msdn.com/o9/ch9/4/1/2/4/0/5/C9LecturesFPGrahamHuttonC11_2MB_ch9.wmv" length="878535233" type="video/asf" /> <enclosure
url="http://ecn.channel9.msdn.com/o9/ch9/5/1/2/4/0/5/C9LecturesErikMeijerFPC12_2MB_ch9.wmv" length="783020019" type="video/asf" /> <enclosure
url="http://ecn.channel9.msdn.com/o9/ch9/6/5/6/3/1/5/C9LecturesMeijerFPC13_2MB_ch9.wmv" length="1198266751" type="video/asf" /> </item> <item><title>Le devenir algorithmique</title><link>http://www.christian-faure.net/2009/04/26/le-devenir-algorithmique/</link> <comments>http://www.christian-faure.net/2009/04/26/le-devenir-algorithmique/#comments</comments> <pubDate>Sun, 26 Apr 2009 12:24:43 +0000</pubDate> <dc:creator>Christian</dc:creator> <category><![CDATA[Défaut]]></category> <category><![CDATA[algorithme]]></category> <category><![CDATA[grammatisation]]></category> <category><![CDATA[programmation]]></category><guid
isPermaLink="false">http://www.christian-faure.net/?p=1056</guid> <description><![CDATA[Le processus de grammatisation décrit par Sylvain Auroux n&#8217;est pas à proprement parler le même que celui dont se sert Bernard Stiegler. Chez Auroux, il représente la constitution de l&#8217;outillage grammatical (grammaires et dictionnaires) des langues vernaculaires à partir des travaux effectués par la tradition greco-latine : «Par grammatisation, on doit entendre le processus qui [...]
Related posts:<ol><li><a
href='http://www.christian-faure.net/2005/03/01/platon-memoire-et-grammatisation/' rel='bookmark' title='Platon, mémoire et grammatisation'>Platon, mémoire et grammatisation</a> <small>Dans le phèdre 274c-275b, Platon évoque une légende égyptienne où...</small></li><li><a
href='http://www.christian-faure.net/2012/01/31/le-devenir-algorithmique-4-les-jeux-decriture/' rel='bookmark' title='Le devenir algorithmique (4) : les jeux d&#8217;écriture'>Le devenir algorithmique (4) : les jeux d&#8217;écriture</a> <small>Dans une précédente note sur les première pratiques scripturales dans...</small></li><li><a
href='http://www.christian-faure.net/2009/11/01/le-devenir-algorthmique-3-linvention-de-lhypothese/' rel='bookmark' title='Le devenir algorithmique (3) : l&#8217;invention de l&#8217;hypothèse'>Le devenir algorithmique (3) : l&#8217;invention de l&#8217;hypothèse</a> <small>Ce que je recherche, c&#8217;est l&#8217;apparition d&#8217;un discours hypothétique. Apparition...</small></li></ol>]]></description> <content:encoded><![CDATA[<p></p><p
style="text-align: left;">Le processus de grammatisation décrit par Sylvain Auroux n&#8217;est pas à proprement parler le même que celui dont se sert Bernard Stiegler.<br
/> <span
id="more-1056"></span><br
/> <img
class="alignleft" style="margin: 10px;" title="Grammatisation" src="http://www.christian-faure.net/wp-images/grammatisation.jpg" alt="" width="137" height="205" />Chez Auroux, il représente la constitution de l&#8217;<strong>outillage grammatical</strong> (grammaires et dictionnaires) des langues vernaculaires à partir des travaux effectués par la tradition greco-latine :</p><blockquote><p>«Par grammatisation, on doit entendre le processus qui conduit à décrire et à outiller une langue sur la base des deux technologies qui sont encore aujourd’hui les piliers de notre savoir métalinguistique: la grammaire et le dictionnaire.»</p></blockquote><p>Chez Stiegler, sans qu&#8217;il y ait pour autant contradiction avec l&#8217;acceptation d&#8217;Auroux, il s&#8217;agit plus du <strong>passage d&#8217;un continu temporel (d&#8217;un flux) à un discret spatial (un flux engrammé)</strong>, une forme fondamentale de l&#8217;extériorisation des flux dans ce qu&#8217;il nomme les rétentions tertiaires :</p><blockquote><p>&laquo;&nbsp;J’appelle grammatisation un processus dont la littération n’est qu’un moment. Non pas un moment parmi d’autres, puisqu’il rend possible la pensée de la grammatisation elle-même, mais un moment dans une tendance à la discrétisation du continu, supportée par ce que je nomme des rétentions tertiaires, et qui s’est aussi exportée dans les machines et les appareils.&nbsp;&raquo;</p></blockquote><p
style="text-align: left;">Avec Stiegler, le processus de grammatisation n&#8217;est plus seulement la grammatisation du language, <strong>c&#8217;est aussi celle des gestes</strong> : la machine outil qui remplace le geste de l&#8217;ouvrier est un événement qui s&#8217;inscrit pleinement dans le processus de grammatisation.<br
/> <img
class="aligncenter" style="margin-top: 10px; margin-bottom: 10px;" title="Machine Outil" src="http://www.si.ens-cachan.fr/ressource/r23/image/Machine%20UGV%20sans%20carter.jpg" alt="" width="221" height="254" /><br
/> Cette notion d&#8217;engrammage, du grec <em>en</em> (dans) et <em>gramma</em> (écriture), qui se place comme une condition de possibilité du processus de grammatisation compris comme littération, doit <strong>être portée à ses limites</strong>. Par exemple, en se demandant : <strong>est-ce que tout peut être grammatisé, engrammé ?</strong> Pour répondre à cette question il faut dévoiler des mécanismes de base du processus de grammatisation.</p><p>La grammatisation porte en elle une double tendance. Elle est à la fois :</p><ul
style="text-align: left;"><li
style="text-align: left;"><strong>analytique</strong> : elle distingue et elle découpe (par exemple les lettres de l&#8217;alphabet) ;</li><li><strong>synthétique</strong> : elle rassemble (par exemple dans des règles de grammaire).</li></ul><p
style="text-align: left;">Cette double tendance, comme principe moteur de la grammatisation, relève selon moi de l&#8217;<strong>algorithmie</strong>.</p><p
style="text-align: left;">Le devenir algorithmique désigne dès lors <strong>le mécanisme inexorable qui est à l&#8217;oeuvre dans l&#8217;ensemble des processus de grammatisation</strong>, celui-là même qui nous pousse vers une numérisation de plus en plus importante de notre monde.</p><p>Or qu&#8217;est ce qu&#8217;un algorithme ? L’algorithme, écrit Philippe Flajolet dans l’encyclopédie universalis, est</p><blockquote
style="text-align: left;"><p>«un schéma de calcul, sous forme d’une suite d’opérations élémentaires obéissant à un enchaînement déterminé».</p></blockquote><p
style="text-align: left;">Parler d&#8217;algorithme aujourd&#8217;hui, au XXI siècle,  c&#8217;est évidemment faire référence à un des derniers visages de la grammatisation et de l&#8217;engrammage qu&#8217;est la <strong>programmation informatique</strong>. Pourtant, la programmation n&#8217;épuise pas la question de l&#8217;algorithme, en ce sens que l&#8217;on ne programme que <strong>ce qui relève déjà du champ de l&#8217;algorithme</strong>.</p><p>A ce titre, on pourrait se demander si ce qui relève de l&#8217;algorithme n&#8217;est pas plus vaste que la définition mathématico-informatique qui lui est de nos jours systématiquement accolée. Ne peut-on pas affirmer, par exemple, que les activités suivantes relèvent de l&#8217;algorithmie :</p><ul
style="text-align: left;"><li>rédiger une recette de cuisine ;</li><li>un passant qui vous indique le chemin pour trouver un lieu précis ;</li><li>produire un mode d&#8217;emploi ou un guide d&#8217;utilisation ;</li><li>écrire une partition de musique ;</li><li>une interaction téléphonique avec une boîte vocale ;</li><li>élaborer un processus de fabrication ;</li><li>préparer et planifier ses vacances ;</li><li>etc.</li></ul><p><img
class="aligncenter" title="Recettes de cuisine" src="http://laboutiquedeoumsaad.unblog.fr/files/2008/03/photosdesrecettes05x3x148x143.jpg" alt="" width="517" height="311" /></p><div
style="text-align: center;">*</div><p
style="text-align: left;">Il y a un devenir algorithmique dans la mesure où celle-ci joue <strong>un rôle de plus en plus important et visible dans nos vies</strong>. Ainsi le devenir algorithmique s&#8217;inscrit jusque dans ces conversations commerciales que l&#8217;on nous impose au téléphone avec les télévendeurs ou téléconseillers :</p><blockquote
style="text-align: left;"><p>&laquo;&nbsp;La conversation avec le client doit être rapidement référée à un &laquo;&nbsp;script&nbsp;&raquo;, qui sera ensuite lu mot à mot par l&#8217;opérateur. Ce dernier peut-être sanctionné lorsqu&#8217;il &laquo;&nbsp;sort&nbsp;&raquo; du script, ne serait-ce que pour faire une réponse intelligente ou compationnelle à son client. Ainsi, les &laquo;&nbsp;amorces&nbsp;&raquo;, réponses aux questions et autres formules de civilités sont prévues en amont de la conversation. Les phrases sont &laquo;&nbsp;déclenchées en fonction de l&#8217;attitude du client ou de ses questions. Finalement ces scripts sont des manières de &laquo;&nbsp;tayloriser&nbsp;&raquo; la conversation : celle-ci est découpée en unités de base et exécutée.&nbsp;&raquo; Marie-Anne Dujarier, Le travail du consommateur, Ed. La décourverte, 2008, p.27.</p></blockquote><p
style="text-align: left;">Ce devenir algorithmique ne va pas sans poser un certain nombre de questions :</p><ul
style="text-align: left;"><li> tout d&#8217;abord il y a beaucoup de travail pour réévaluer l&#8217;impact et la généalogie de cette tendance et ceci de façon éminemment <strong>transdisciplinaire</strong> ;</li><li> ensuite parce que l&#8217;algorithmisation de nos vies pose un sérieux problème à l&#8217;<strong>économie libidinale</strong>. Comment en effet ne pas s&#8217;inquiéter si nos vies deviennent le fruit d&#8217;un &laquo;&nbsp;schéma de calcul (&#8230;) obéissant à un enchaînement déterminé&nbsp;&raquo; ?</li></ul><p
style="text-align: left;">Il me semble que la question du passage d&#8217;une <strong>économie de la consommation</strong> à une <strong>économie de la contribution</strong> ne pourra pas faire l&#8217;impasse d&#8217;un travail et d&#8217;une réflexion sur ce devenir algorithmique.</p> <span
class="post-twitter" ><a
href="http://twitter.com/home?status=Chez%20%40ChristianFaure%20%3A%20%22Le%20devenir%20algorithmique%22%20http%3A%2F%2Ftinyurl.com%2Fykz3odc" title="Signaler sur Twitter" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=Chez_20_40ChristianFaure_20_3A_20_22Le_20devenir_20algorithmique_22_20http_3A_2F_2Ftinyurl.com_2Fykz3odc&amp;referer=');">Signaler sur Twitter</a></span><p>Related posts:<ol><li><a
href='http://www.christian-faure.net/2005/03/01/platon-memoire-et-grammatisation/' rel='bookmark' title='Platon, mémoire et grammatisation'>Platon, mémoire et grammatisation</a> <small>Dans le phèdre 274c-275b, Platon évoque une légende égyptienne où...</small></li><li><a
href='http://www.christian-faure.net/2012/01/31/le-devenir-algorithmique-4-les-jeux-decriture/' rel='bookmark' title='Le devenir algorithmique (4) : les jeux d&#8217;écriture'>Le devenir algorithmique (4) : les jeux d&#8217;écriture</a> <small>Dans une précédente note sur les première pratiques scripturales dans...</small></li><li><a
href='http://www.christian-faure.net/2009/11/01/le-devenir-algorthmique-3-linvention-de-lhypothese/' rel='bookmark' title='Le devenir algorithmique (3) : l&#8217;invention de l&#8217;hypothèse'>Le devenir algorithmique (3) : l&#8217;invention de l&#8217;hypothèse</a> <small>Ce que je recherche, c&#8217;est l&#8217;apparition d&#8217;un discours hypothétique. Apparition...</small></li></ol></p>]]></content:encoded> <wfw:commentRss>http://www.christian-faure.net/2009/04/26/le-devenir-algorithmique/feed/</wfw:commentRss> <slash:comments>9</slash:comments> </item> <item><title>Le code collaboratif en ligne</title><link>http://www.christian-faure.net/2009/02/13/le-code-collaboratif-en-ligne/</link> <comments>http://www.christian-faure.net/2009/02/13/le-code-collaboratif-en-ligne/#comments</comments> <pubDate>Fri, 13 Feb 2009 09:10:06 +0000</pubDate> <dc:creator>Christian</dc:creator> <category><![CDATA[Défaut]]></category> <category><![CDATA[programmation]]></category><guid
isPermaLink="false">http://www.christian-faure.net/?p=949</guid> <description><![CDATA[Tristan Nitot se fait l&#8217;écho du lancement de Bespin par les Mozila Labs. Bespin est pensé comme un outil de développement web collaboratif. A l&#8217;image de Google Docs pour la bureautique, l&#8217;idée et de n&#8217;avoir le code source qu&#8217;en une instance et de collaborer à plusieurs autour du code. C&#8217;est également la possibilité de retrouver [...]
Related posts:<ol><li><a
href='http://www.christian-faure.net/2008/01/07/litterature-de-code/' rel='bookmark' title='Littérature de code'>Littérature de code</a> <small>J&#8217;aime bien lire les commentaires de code. Il y a...</small></li><li><a
href='http://www.christian-faure.net/2008/01/09/le-code-et-lecriture/' rel='bookmark' title='Le code et l&#8217;écriture'>Le code et l&#8217;écriture</a> <small>Après la publication de Littérature du code et la lecture...</small></li><li><a
href='http://www.christian-faure.net/2007/10/29/les-marches-financiers-enfin-expliques/' rel='bookmark' title='Les marchés financiers enfin expliqués'>Les marchés financiers enfin expliqués</a> <small>[kml_flashembed movie="http://www.youtube.com/v/SJ_qK4g6ntM" width="425" height="350" wmode="transparent" /] Vu chez Marc Andreessen ...</small></li></ol>]]></description> <content:encoded><![CDATA[<p></p><p><img
class="alignleft" title="Bespin" src="http://people.mozilla.com/~cbeard/Bespin_Logo.png" alt="" width="223" height="92" /><a
href="http://standblog.org/blog/post/2009/02/13/Annonce-de-l-editeur-Mozilla-Bespin" onclick="pageTracker._trackPageview('/outgoing/standblog.org/blog/post/2009/02/13/Annonce-de-l-editeur-Mozilla-Bespin?referer=');">Tristan Nitot</a> se fait l&#8217;écho du lancement de <a
href="https://bespin.mozilla.com/" onclick="pageTracker._trackPageview('/outgoing/bespin.mozilla.com/?referer=');">Bespin</a> par les Mozila Labs.</p><p>Bespin est pensé comme un outil de développement web collaboratif. A l&#8217;image de Google Docs pour la bureautique, l&#8217;idée et de n&#8217;avoir le code source qu&#8217;en une instance et de collaborer à plusieurs autour du code. C&#8217;est également la possibilité de retrouver son environnement de développement depuis n&#8217;importe quel ordinateur connecté au web.</p><p>Ça commence léger avec uniquement des codes couleurs pour HTML, CSS et Javascript mais l&#8217;initiative est importante, surtout venant d&#8217;un acteur du libre comme Mozilla.</p> <span
class="post-twitter" ><a
href="http://twitter.com/home?status=Chez%20%40ChristianFaure%20%3A%20%22Le%20code%20collaboratif%20en%20ligne%22%20http%3A%2F%2Ftinyurl.com%2Fyb9ob5u" title="Signaler sur Twitter" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=Chez_20_40ChristianFaure_20_3A_20_22Le_20code_20collaboratif_20en_20ligne_22_20http_3A_2F_2Ftinyurl.com_2Fyb9ob5u&amp;referer=');">Signaler sur Twitter</a></span><p>Related posts:<ol><li><a
href='http://www.christian-faure.net/2008/01/07/litterature-de-code/' rel='bookmark' title='Littérature de code'>Littérature de code</a> <small>J&#8217;aime bien lire les commentaires de code. Il y a...</small></li><li><a
href='http://www.christian-faure.net/2008/01/09/le-code-et-lecriture/' rel='bookmark' title='Le code et l&#8217;écriture'>Le code et l&#8217;écriture</a> <small>Après la publication de Littérature du code et la lecture...</small></li><li><a
href='http://www.christian-faure.net/2007/10/29/les-marches-financiers-enfin-expliques/' rel='bookmark' title='Les marchés financiers enfin expliqués'>Les marchés financiers enfin expliqués</a> <small>[kml_flashembed movie="http://www.youtube.com/v/SJ_qK4g6ntM" width="425" height="350" wmode="transparent" /] Vu chez Marc Andreessen ...</small></li></ol></p>]]></content:encoded> <wfw:commentRss>http://www.christian-faure.net/2009/02/13/le-code-collaboratif-en-ligne/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Table ronde sur le futur des applications Web</title><link>http://www.christian-faure.net/2008/04/20/table-ronde-sur-le-futur-des-applications-web/</link> <comments>http://www.christian-faure.net/2008/04/20/table-ronde-sur-le-futur-des-applications-web/#comments</comments> <pubDate>Sun, 20 Apr 2008 06:30:08 +0000</pubDate> <dc:creator>Christian</dc:creator> <category><![CDATA[Défaut]]></category> <category><![CDATA[programmation]]></category> <category><![CDATA[SaaS]]></category> <category><![CDATA[Web-Solutions]]></category><guid
isPermaLink="false">http://www.christian-faure.net/2008/04/20/table-ronde-sur-le-futur-des-applications-web/</guid> <description><![CDATA[La table ronde sur le futur des applications Web, qui a eu lieu dans le cadre du lancement d&#8217;eXo WebOS, a été filmé et vous pouvez voir la video sur le blog d&#8217;eXoPlatform. Crédit photo : Didier Girard Sur la photo : Michael Chaize (Adobe) Christophe Lauer (Microsoft) Eric Mahe (Sun) Tristan Nitot (Mozilla) Dave [...]
Related posts:<ol><li><a
href='http://www.christian-faure.net/2008/04/11/exo-enterprise-webos/' rel='bookmark' title='eXo Enterprise WebOS'>eXo Enterprise WebOS</a> <small>J&#8217;aurai le plaisir d&#8217;animer la table ronde qui aura lieu...</small></li><li><a
href='http://www.christian-faure.net/2009/02/13/le-code-collaboratif-en-ligne/' rel='bookmark' title='Le code collaboratif en ligne'>Le code collaboratif en ligne</a> <small>Tristan Nitot se fait l&#8217;écho du lancement de Bespin par...</small></li><li><a
href='http://www.christian-faure.net/2008/12/06/adobe-ria-2008/' rel='bookmark' title='Adobe RIA 2008'>Adobe RIA 2008</a> <small>A l&#8217;invitation d&#8217;Adobe, Je ferai l&#8217;allocution d&#8217;ouverture de l&#8217;évènement annuel...</small></li></ol>]]></description> <content:encoded><![CDATA[<p></p><p>La table ronde sur le futur des applications Web, qui a eu lieu dans le cadre du lancement d&#8217;eXo WebOS, a été filmé et vous pouvez voir la video sur le <a
href="http://blog.exoplatform.org/2008/04/19/exo-webos-launch-party-the-round-table-video-with-adobe-exo-google-mozilla-microsoft-and-sun-microsystems/" onclick="pageTracker._trackPageview('/outgoing/blog.exoplatform.org/2008/04/19/exo-webos-launch-party-the-round-table-video-with-adobe-exo-google-mozilla-microsoft-and-sun-microsystems/?referer=');">blog d&#8217;eXoPlatform</a>.</p><p><img
src="http://farm3.static.flickr.com/2065/2424208257_d1c8aa5cac.jpg?v=0" /></p><p>Crédit photo : Didier Girard</p><p>Sur la photo :<br
/> Michael Chaize (Adobe)<br
/> Christophe Lauer (Microsoft)<br
/> Eric Mahe (Sun)<br
/> Tristan Nitot (Mozilla)<br
/> Dave Armstrong (Google)<br
/> Benjamin Mestrallet (eXo Platform)<br
/> Christian Fauré (Atos Origin)</p> <span
class="post-twitter" ><a
href="http://twitter.com/home?status=Chez%20%40ChristianFaure%20%3A%20%22Table%20ronde%20sur%20le%20futur%20des%20applications%20Web%22%20http%3A%2F%2Ftinyurl.com%2Fyhkn6ox" title="Signaler sur Twitter" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=Chez_20_40ChristianFaure_20_3A_20_22Table_20ronde_20sur_20le_20futur_20des_20applications_20Web_22_20http_3A_2F_2Ftinyurl.com_2Fyhkn6ox&amp;referer=');">Signaler sur Twitter</a></span><p>Related posts:<ol><li><a
href='http://www.christian-faure.net/2008/04/11/exo-enterprise-webos/' rel='bookmark' title='eXo Enterprise WebOS'>eXo Enterprise WebOS</a> <small>J&#8217;aurai le plaisir d&#8217;animer la table ronde qui aura lieu...</small></li><li><a
href='http://www.christian-faure.net/2009/02/13/le-code-collaboratif-en-ligne/' rel='bookmark' title='Le code collaboratif en ligne'>Le code collaboratif en ligne</a> <small>Tristan Nitot se fait l&#8217;écho du lancement de Bespin par...</small></li><li><a
href='http://www.christian-faure.net/2008/12/06/adobe-ria-2008/' rel='bookmark' title='Adobe RIA 2008'>Adobe RIA 2008</a> <small>A l&#8217;invitation d&#8217;Adobe, Je ferai l&#8217;allocution d&#8217;ouverture de l&#8217;évènement annuel...</small></li></ol></p>]]></content:encoded> <wfw:commentRss>http://www.christian-faure.net/2008/04/20/table-ronde-sur-le-futur-des-applications-web/feed/</wfw:commentRss> <slash:comments>7</slash:comments> </item> <item><title>Les plates-formes web de développement</title><link>http://www.christian-faure.net/2008/04/17/les-plates-formes-web-de-developpement/</link> <comments>http://www.christian-faure.net/2008/04/17/les-plates-formes-web-de-developpement/#comments</comments> <pubDate>Thu, 17 Apr 2008 21:13:55 +0000</pubDate> <dc:creator>Christian</dc:creator> <category><![CDATA[Défaut]]></category> <category><![CDATA[programmation]]></category> <category><![CDATA[SaaS]]></category><guid
isPermaLink="false">http://www.christian-faure.net/2008/04/17/les-plates-formes-web-de-developpement/</guid> <description><![CDATA[Petit à petit, l&#8217;écosystème des plates-formes web de développement (DaaS, Developement as a Service) commence à se dessiner.Dressons une petite liste : il y a Amazon (+Heroku ), SalesForce, récemment Google avec Google Apps Engine, puis de plus petits acteurs comme Bungee Labs, Coghead, Rollbase, et aujourd&#8217;hui Intuit. Même Microsoft semble être de la partie [...]
Related posts:<ol><li><a
href='http://www.christian-faure.net/2008/03/08/le-web-comme-un-hub-et-lavenir-du-reseau-selon-microsoft/' rel='bookmark' title='Le web comme un Hub et l&#8217;avenir du réseau selon Microsoft'>Le web comme un Hub et l&#8217;avenir du réseau selon Microsoft</a> <small>L&#8217;année qui vient de s&#8217;écouler a été une année importante...</small></li><li><a
href='http://www.christian-faure.net/2007/09/16/ironie-du-sort/' rel='bookmark' title='Ironie du sort'>Ironie du sort</a> <small>Le &laquo;&nbsp;slogan&nbsp;&raquo; de Microsoft pour décliner sa mutation vers le...</small></li><li><a
href='http://www.christian-faure.net/2008/04/20/table-ronde-sur-le-futur-des-applications-web/' rel='bookmark' title='Table ronde sur le futur des applications Web'>Table ronde sur le futur des applications Web</a> <small>La table ronde sur le futur des applications Web, qui...</small></li></ol>]]></description> <content:encoded><![CDATA[<p></p><p>Petit à petit, l&#8217;écosystème des plates-formes web de développement (DaaS, Developement as a Service) commence à se dessiner.<br
id="vnkf" /><span
id="more-449"></span>Dressons une petite liste : il y a Amazon (+<a
id="tpiu" title="Heroku" href="http://heroku.com/" onclick="pageTracker._trackPageview('/outgoing/heroku.com/?referer=');">Heroku</a> ), SalesForce, récemment Google avec <a
id="lwkk" title="Google Apps Engine" href="http://www.christian-faure.net/2008/04/08/google-apps-engine/">Google Apps Engine</a>, puis de plus petits acteurs comme <a
id="lbd9" title="Bungee Labs" href="http://www.bungeelabs.com/" onclick="pageTracker._trackPageview('/outgoing/www.bungeelabs.com/?referer=');">Bungee Labs</a>, <a
id="r5wz" title="Coghead" href="http://www.coghead.com/" onclick="pageTracker._trackPageview('/outgoing/www.coghead.com/?referer=');">Coghead</a>, <a
id="e0wx" title="Rollbase" href="http://www.rollbase.com/home/index.shtml" onclick="pageTracker._trackPageview('/outgoing/www.rollbase.com/home/index.shtml?referer=');">Rollbase</a>, et aujourd&#8217;hui <a
id="ad7n" title="Intuit" href="http://www.techcrunch.com/2008/04/16/watch-out-salesforce-intuit-opens-up-quickbase-to-developers/" onclick="pageTracker._trackPageview('/outgoing/www.techcrunch.com/2008/04/16/watch-out-salesforce-intuit-opens-up-quickbase-to-developers/?referer=');">Intuit</a>. <br
id="kdfc" /></p><p>Même Microsoft semble être de la partie avec l&#8217;annonce d&#8217;<a
id="dpmb" title="EXP." href="http://exp-platform.com/default.aspx" onclick="pageTracker._trackPageview('/outgoing/exp-platform.com/default.aspx?referer=');">EXP Platform.</a> Ray Ozie est d&#8217;ailleurs explicite dans le changement de vision auquel il invite Microsoft :<br
id="n303" /> <br
id="lb-d" /></p><blockquote><p>We have an unprecedented opportunity to run A/B tests with online users and innovate more quickly based on actual user response. <br
id="s-1e" />Microsoft needs to shift the culture from planning the exact features to planning a set of possible features, and letting customers guide us<br
id="y8ua" />&#8211; Ray Ozzie, Chief Software Architect          <br
id="yve-" /></p></blockquote><p><br
id="r2gk" />Quand on y pense, quoi de plus tentant que de faire faire les développements en crowdsourcing, plutôt que d&#8217;avoir à les réaliser soit-même ? C&#8217;est une bonne nouvelle car l&#8217;accès au développement va se populariser.</p><p>Ces plates formes ont un principal indicateur qu&#8217;elle doivent suivre : c&#8217;est la simplicité et la convivialité de l&#8217;ergonomie, et du design, des interfaces de programmation. Car c&#8217;est la condition nécessaire pour agréger un nombre important de développeurs qui feront grossir les services et l&#8217;attrait de la plate-forme.<br
id="hkig" />Cela sera de plus en plus simple de développer des services web, tout au moins des services de base, et ce, en plus de la simplicité induite par les services d&#8217;infrastructure de la plate-forme.<br
id="ylir" /><br
id="tx9-" />Je crois que c&#8217;est là que s&#8217;est déplacé l&#8217;essentiel de <strong>la bataille du web</strong>.</p><p><br
id="n6.0" />Dans cette nouvelle phase, la communauté libre ne devra pas se focaliser sur l&#8217;opposition entre &laquo;&nbsp;logiciel libre&nbsp;&raquo; ou &laquo;&nbsp;logiciel propriétaire&nbsp;&raquo;, mais plutôt s&#8217;organiser pour ne pas rester écarté de l&#8217;accès aux codes sources.</p> <span
class="post-twitter" ><a
href="http://twitter.com/home?status=Chez%20%40ChristianFaure%20%3A%20%22Les%20plates-formes%20web%20de%20d%C3%A9veloppement%22%20http%3A%2F%2Ftinyurl.com%2Fyz5jkfd" title="Signaler sur Twitter" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=Chez_20_40ChristianFaure_20_3A_20_22Les_20plates-formes_20web_20de_20d_C3_A9veloppement_22_20http_3A_2F_2Ftinyurl.com_2Fyz5jkfd&amp;referer=');">Signaler sur Twitter</a></span><p>Related posts:<ol><li><a
href='http://www.christian-faure.net/2008/03/08/le-web-comme-un-hub-et-lavenir-du-reseau-selon-microsoft/' rel='bookmark' title='Le web comme un Hub et l&#8217;avenir du réseau selon Microsoft'>Le web comme un Hub et l&#8217;avenir du réseau selon Microsoft</a> <small>L&#8217;année qui vient de s&#8217;écouler a été une année importante...</small></li><li><a
href='http://www.christian-faure.net/2007/09/16/ironie-du-sort/' rel='bookmark' title='Ironie du sort'>Ironie du sort</a> <small>Le &laquo;&nbsp;slogan&nbsp;&raquo; de Microsoft pour décliner sa mutation vers le...</small></li><li><a
href='http://www.christian-faure.net/2008/04/20/table-ronde-sur-le-futur-des-applications-web/' rel='bookmark' title='Table ronde sur le futur des applications Web'>Table ronde sur le futur des applications Web</a> <small>La table ronde sur le futur des applications Web, qui...</small></li></ol></p>]]></content:encoded> <wfw:commentRss>http://www.christian-faure.net/2008/04/17/les-plates-formes-web-de-developpement/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Le code et l&#8217;écriture</title><link>http://www.christian-faure.net/2008/01/09/le-code-et-lecriture/</link> <comments>http://www.christian-faure.net/2008/01/09/le-code-et-lecriture/#comments</comments> <pubDate>Wed, 09 Jan 2008 21:14:42 +0000</pubDate> <dc:creator>Christian</dc:creator> <category><![CDATA[Défaut]]></category> <category><![CDATA[écriture]]></category> <category><![CDATA[programmation]]></category><guid
isPermaLink="false">http://www.christian-faure.net/2008/01/09/le-code-et-lecriture/</guid> <description><![CDATA[Après la publication de Littérature du code et la lecture des commentaires à cette note, je me suis demandé s&#8217;il y avait des pratiques d&#8217;écriture qui évoluaient en s&#8217;imprégnant des pratiques du code. On connaît tous cette pratique qui consiste à écrire, par exemple : &#60;troll&#62; Là je dis n&#8217;importe quoi &#60;/troll&#62; Une XMLisation ou [...]
Related posts:<ol><li><a
href='http://www.christian-faure.net/2011/11/12/le-stade-anal-de-lecriture/' rel='bookmark' title='Le stade anal de l&#8217;écriture'>Le stade anal de l&#8217;écriture</a> <small>Faites l&#8217;expérience suivante la prochaine fois que vous irez sur...</small></li><li><a
href='http://www.christian-faure.net/2008/01/07/litterature-de-code/' rel='bookmark' title='Littérature de code'>Littérature de code</a> <small>J&#8217;aime bien lire les commentaires de code. Il y a...</small></li><li><a
href='http://www.christian-faure.net/2006/09/16/une-consquence-de-la-note-prcdente/' rel='bookmark' title='Une conséquence de la note précédente'>Une conséquence de la note précédente</a> <small>Question : savez-vous quelle est la première demande des utilisateurs...</small></li></ol>]]></description> <content:encoded><![CDATA[<p></p><p>Après la publication de <a
href="http://www.christian-faure.net/2008/01/07/litterature-de-code/">Littérature du code</a> et la lecture des commentaires à cette note, je me suis demandé s&#8217;il y avait des pratiques d&#8217;écriture qui évoluaient en s&#8217;imprégnant des pratiques du code.</p><p><span
id="more-390"></span></p><p>On connaît tous cette pratique qui consiste à écrire, par exemple :</p><blockquote><p> <em>&lt;troll&gt;</em><br
/> Là je dis n&#8217;importe quoi<br
/> <em>&lt;/troll&gt;</em></p></blockquote><p>Une XMLisation ou HTMLisation des pratiques d&#8217;écriture.<br
/> Ce qui va dans le sens des commentaires du niveau &laquo;&nbsp;humeur&nbsp;&raquo; que j&#8217;évoquais dans la note précédemment citée. Mais là, c&#8217;est l&#8217;inverse, puisqu&#8217;une syntaxe de programmation s&#8217;est invitée dans l&#8217;écrit.<br
/> Comme si le code pouvait retranscrire une forme de prosodie du discours, une intonation que les techniques d&#8217;écritures traditionnelle n&#8217;arrivait pas à exprimer aussi rapidement.</p><p>Et puis, aujourd&#8217;hui, je vois un tweet de <a
href="http://dannyayers.com/" onclick="pageTracker._trackPageview('/outgoing/dannyayers.com/?referer=');">Danny Ayers</a> ou l&#8217;on peut lire :</p><blockquote><p>&laquo;&nbsp;<span
style="font-weight: bold">twitter:</span> danja: google to me to dave pawson&#8217;s notes, disable-output-escaping=&nbsp;&raquo;yes&nbsp;&raquo;, 		sorted.&nbsp;&raquo;</p></blockquote><p>Enfin, &laquo;&nbsp;lire&nbsp;&raquo; est un bien grand mot.<br
/> Bien sûr, je ne comprends pas la signification du message. Mais j&#8217;y vois un étrange mélange d&#8217;écriture orthothétique et de code. Comme une <strong>phrase mutante</strong>.</p><p>De deux chose l&#8217;une :</p><ul><li>soit on a affaire à un jargon technique et corporatiste, comme peut l&#8217;être le louchebem des bouchers. C&#8217;est à dire à quelque chose d&#8217;anecdotique.</li><li>soit, au contraire, on a affaire à une tendance qui confirme la trace d&#8217;une évolution de nos techniques d&#8217;écriture.</li></ul><p>Je crois qu&#8217;en écrivant pour des machines, notre écriture s&#8217;en trouve changée. D&#8217;ici plusieurs dizaines d&#8217;années, peut-être que <em>le texte que vous êtes en train de lire à cet instant</em> paraîtra verbeux et maladroit au regard d&#8217;une écriture à venir qui aurait embrassée le charme et les pratiques du code.</p><p><em>&lt;précision&gt;</em> <br
/> Je distingue cette écriture mutante du style SMS, qui est autre chose.<br
/> <em>&lt;/précision&gt;</em></p> <span
class="post-twitter" ><a
href="http://twitter.com/home?status=Chez%20%40ChristianFaure%20%3A%20%22Le%20code%20et%20l%27%C3%A9criture%22%20http%3A%2F%2Ftinyurl.com%2Fyzrsgna" title="Signaler sur Twitter" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=Chez_20_40ChristianFaure_20_3A_20_22Le_20code_20et_20l_27_C3_A9criture_22_20http_3A_2F_2Ftinyurl.com_2Fyzrsgna&amp;referer=');">Signaler sur Twitter</a></span><p>Related posts:<ol><li><a
href='http://www.christian-faure.net/2011/11/12/le-stade-anal-de-lecriture/' rel='bookmark' title='Le stade anal de l&#8217;écriture'>Le stade anal de l&#8217;écriture</a> <small>Faites l&#8217;expérience suivante la prochaine fois que vous irez sur...</small></li><li><a
href='http://www.christian-faure.net/2008/01/07/litterature-de-code/' rel='bookmark' title='Littérature de code'>Littérature de code</a> <small>J&#8217;aime bien lire les commentaires de code. Il y a...</small></li><li><a
href='http://www.christian-faure.net/2006/09/16/une-consquence-de-la-note-prcdente/' rel='bookmark' title='Une conséquence de la note précédente'>Une conséquence de la note précédente</a> <small>Question : savez-vous quelle est la première demande des utilisateurs...</small></li></ol></p>]]></content:encoded> <wfw:commentRss>http://www.christian-faure.net/2008/01/09/le-code-et-lecriture/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>Littérature de code</title><link>http://www.christian-faure.net/2008/01/07/litterature-de-code/</link> <comments>http://www.christian-faure.net/2008/01/07/litterature-de-code/#comments</comments> <pubDate>Mon, 07 Jan 2008 09:08:19 +0000</pubDate> <dc:creator>Christian</dc:creator> <category><![CDATA[Défaut]]></category> <category><![CDATA[programmation]]></category><guid
isPermaLink="false">http://www.christian-faure.net/2008/01/07/litterature-de-code/</guid> <description><![CDATA[J&#8217;aime bien lire les commentaires de code. Il y a une vraie littérature dans ces lignes écrites en langage naturel, dispersées au milieu des lignes de codes. Bien sûr il n&#8217;y a pas que des chefs d&#8217;oeuvre, et même souvent il n&#8217;y a rien. Et rares sont les programmes que j&#8217;ai vu qui exploitent pleinement [...]
Related posts:<ol><li><a
href='http://www.christian-faure.net/2008/01/09/le-code-et-lecriture/' rel='bookmark' title='Le code et l&#8217;écriture'>Le code et l&#8217;écriture</a> <small>Après la publication de Littérature du code et la lecture...</small></li><li><a
href='http://www.christian-faure.net/2007/05/31/mise-a-jour-des-fils-rss/' rel='bookmark' title='Mise-à-jour des fils RSS'>Mise-à-jour des fils RSS</a> <small>Mes fils RSS passent désormais par FeedBurner, ce qui m&#8217;a...</small></li><li><a
href='http://www.christian-faure.net/2009/02/13/le-code-collaboratif-en-ligne/' rel='bookmark' title='Le code collaboratif en ligne'>Le code collaboratif en ligne</a> <small>Tristan Nitot se fait l&#8217;écho du lancement de Bespin par...</small></li></ol>]]></description> <content:encoded><![CDATA[<p></p><p>J&#8217;aime bien lire les commentaires de code. Il y a une vraie littérature dans ces lignes écrites en langage naturel, dispersées au milieu des lignes de codes.</p><p><span
id="more-388"></span></p><p>Bien sûr il n&#8217;y a pas que des chefs d&#8217;oeuvre, et même souvent il n&#8217;y a rien. Et rares sont les programmes que j&#8217;ai vu qui exploitent pleinement la force et l&#8217;importance des commentaires.</p><p>On a tort de penser que l&#8217;on écrit du code <em>pour</em> la machine. Je pense qu&#8217;on écrit du code pour qu&#8217;il soit <strong>lu par un tiers</strong>. Le cas échéant, ce tiers peut-être l&#8217;auteur lui-même.</p><p>En pensant que l&#8217;on écrit du code <strong>uniquement</strong> pour qu&#8217;il soit interprété par la machine, on oublie les points suivants :</p><ul><li>les langages avec lesquels nous programmons sont des langages bien particuliers car <strong>ils ne sont pas &laquo;&nbsp;parlés&nbsp;&raquo;</strong>. Ce ne sont que des langages écrits, sans réels pendant du côté de la pratique orale.</li><li>ils doivent faire plus qu&#8217;un langage écrit, et pour cela il faut y <strong>introduire l&#8217;écriture d&#8217;une langue parlée : les commentaires.</strong></li><li>un code qui n&#8217;a pas de commentaire n&#8217;a donc pas de voix. Il devient <strong>potentiellement inaudible.</strong></li><li><strong>un code sans commentaires n&#8217;a pas d&#8217;avenir</strong>, pas d&#8217;évolution possible : il peut bien faire ce qu&#8217;il fait, mais n&#8217;évoluera pas, ou peu. C&#8217;est comme s&#8217;il n&#8217;était pas remis dans le circuit, en circulation, pour pouvoir être modifié et réutilisé, ne serait-ce qu&#8217;à des fins pédagogiques.</li></ul><p>Il faut dire que les mécanismes de commentaires par défaut sont très monotones.<br
/> Généralement un caractère spécial pour indiquer que c&#8217;est un commentaire qui va suivre, et c&#8217;est tout.</p><p>Je vois pourtant un intérêt à distinguer certaines formes de commentaires. Par exemple, avoir la possibilité de commenter sur trois niveaux :</p><ol><li><strong>Le niveau factuel :</strong> le commentaire dit en langage naturel ce qui va être opéré et le décrit. C&#8217;est la niveau le plus utilitaire et dont les bénéfices pour la lecture du code sont immédiats.</li><li><strong>Le niveau contextuel :</strong> le commentaire décrit le contexte qui justifie les choix que l&#8217;auteur a fait, ou les chemins qu&#8217;il a emprunté. Il fait part des erreurs qu&#8217;il avait commises avant d&#8217;arriver à la solution définitive.</li><li><strong>Le niveau humeur :</strong> c&#8217;est un niveau important du commentaire qui permet à l&#8217;auteur d&#8217;exprimer sa personnalité, de rendre compte de l&#8217;unicité et de la singularité de son travail. C&#8217;est une activité importante qui favorise la mise en mémoire du code et qui donne &laquo;&nbsp;de la couleur à l&#8217;architecture logicielle&nbsp;&raquo;, et cela aussi bien pour un tiers que pour l&#8217;auteur lui-même.</li></ol><p>Dans la programmation aussi on peut décider de travailler soit sur le <strong>long terme</strong> soit sur le très court terme.</p> <span
class="post-twitter" ><a
href="http://twitter.com/home?status=Chez%20%40ChristianFaure%20%3A%20%22Litt%C3%A9rature%20de%20code%22%20http%3A%2F%2Ftinyurl.com%2Fyprdlc" title="Signaler sur Twitter" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=Chez_20_40ChristianFaure_20_3A_20_22Litt_C3_A9rature_20de_20code_22_20http_3A_2F_2Ftinyurl.com_2Fyprdlc&amp;referer=');">Signaler sur Twitter</a></span><p>Related posts:<ol><li><a
href='http://www.christian-faure.net/2008/01/09/le-code-et-lecriture/' rel='bookmark' title='Le code et l&#8217;écriture'>Le code et l&#8217;écriture</a> <small>Après la publication de Littérature du code et la lecture...</small></li><li><a
href='http://www.christian-faure.net/2007/05/31/mise-a-jour-des-fils-rss/' rel='bookmark' title='Mise-à-jour des fils RSS'>Mise-à-jour des fils RSS</a> <small>Mes fils RSS passent désormais par FeedBurner, ce qui m&#8217;a...</small></li><li><a
href='http://www.christian-faure.net/2009/02/13/le-code-collaboratif-en-ligne/' rel='bookmark' title='Le code collaboratif en ligne'>Le code collaboratif en ligne</a> <small>Tristan Nitot se fait l&#8217;écho du lancement de Bespin par...</small></li></ol></p>]]></content:encoded> <wfw:commentRss>http://www.christian-faure.net/2008/01/07/litterature-de-code/feed/</wfw:commentRss> <slash:comments>16</slash:comments> </item> <item><title>Mise en cache dans les navigateurs</title><link>http://www.christian-faure.net/2008/01/06/mise-en-cache-dans-les-navigateurs/</link> <comments>http://www.christian-faure.net/2008/01/06/mise-en-cache-dans-les-navigateurs/#comments</comments> <pubDate>Sun, 06 Jan 2008 18:08:05 +0000</pubDate> <dc:creator>Christian</dc:creator> <category><![CDATA[Défaut]]></category> <category><![CDATA[programmation]]></category><guid
isPermaLink="false">http://www.christian-faure.net/2008/01/06/mise-en-cache-dans-les-navigateurs/</guid> <description><![CDATA[Internet Explorer et Opera (pas Firefox et Safari) mettent en cache les URLs requêtées. C&#8217;est pratique quand on revient sur les mêmes pages car c&#8217;est beaucoup plus rapide à l&#8217;affichage, étant donné que le navigateur avait l&#8217;URL et sa dernière réponse en cache. Mais quand on fait de l&#8217;asynchrone en javascript, les Callbacks du navigateur [...]
Related posts:<ol><li><a
href='http://www.christian-faure.net/2007/12/07/uri-design/' rel='bookmark' title='URI design'>URI design</a> <small>Je regarde une note de Yves-Marie Pondaven dans laquelle il...</small></li><li><a
href='http://www.christian-faure.net/2008/01/06/getchristianfaureage/' rel='bookmark' title='getChristianFaureAge ( )'>getChristianFaureAge ( )</a> <small>En javascript, la fonction : getTime( ) renvoie le temps...</small></li><li><a
href='http://www.christian-faure.net/2008/11/10/petit-sondage-sur-google/' rel='bookmark' title='Petit sondage sur Google'>Petit sondage sur Google</a> <small>Vous recevez un mail de Google vous indiquant que la...</small></li></ol>]]></description> <content:encoded><![CDATA[<p></p><p>Internet Explorer et Opera (pas Firefox et Safari) mettent en cache les URLs requêtées. C&#8217;est pratique quand on revient sur les mêmes pages car c&#8217;est beaucoup plus rapide à l&#8217;affichage, étant donné que le navigateur avait l&#8217;URL et sa dernière réponse en cache.</p><p><span
id="more-387"></span></p><p>Mais quand on fait de l&#8217;asynchrone en javascript, l<strong>es <em>Callbacks</em> du navigateur ne vont pas rééllement voir ce qu&#8217;il y a de nouveau à l&#8217;URL</strong>, car il retourne inlassablement la réponse qui est en cache et qui correspond à l&#8217;URL mémorisée.<br
/> Pour ne pas avoir de surprise il faut que le javascript génère des URLs bidons à chaque nouvelle requête.</p><p>Est-ce bien, est-ce mal ?</p> <span
class="post-twitter" ><a
href="http://twitter.com/home?status=Chez%20%40ChristianFaure%20%3A%20%22Mise%20en%20cache%20dans%20les%20navigateurs%22%20http%3A%2F%2Ftinyurl.com%2Fydjhygo" title="Signaler sur Twitter" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=Chez_20_40ChristianFaure_20_3A_20_22Mise_20en_20cache_20dans_20les_20navigateurs_22_20http_3A_2F_2Ftinyurl.com_2Fydjhygo&amp;referer=');">Signaler sur Twitter</a></span><p>Related posts:<ol><li><a
href='http://www.christian-faure.net/2007/12/07/uri-design/' rel='bookmark' title='URI design'>URI design</a> <small>Je regarde une note de Yves-Marie Pondaven dans laquelle il...</small></li><li><a
href='http://www.christian-faure.net/2008/01/06/getchristianfaureage/' rel='bookmark' title='getChristianFaureAge ( )'>getChristianFaureAge ( )</a> <small>En javascript, la fonction : getTime( ) renvoie le temps...</small></li><li><a
href='http://www.christian-faure.net/2008/11/10/petit-sondage-sur-google/' rel='bookmark' title='Petit sondage sur Google'>Petit sondage sur Google</a> <small>Vous recevez un mail de Google vous indiquant que la...</small></li></ol></p>]]></content:encoded> <wfw:commentRss>http://www.christian-faure.net/2008/01/06/mise-en-cache-dans-les-navigateurs/feed/</wfw:commentRss> <slash:comments>8</slash:comments> </item> <item><title>getChristianFaureAge ( )</title><link>http://www.christian-faure.net/2008/01/06/getchristianfaureage/</link> <comments>http://www.christian-faure.net/2008/01/06/getchristianfaureage/#comments</comments> <pubDate>Sun, 06 Jan 2008 17:44:03 +0000</pubDate> <dc:creator>Christian</dc:creator> <category><![CDATA[Défaut]]></category> <category><![CDATA[programmation]]></category><guid
isPermaLink="false">http://www.christian-faure.net/2008/01/06/getchristianfaureage/</guid> <description><![CDATA[En javascript, la fonction : getTime( ) renvoie le temps écoulé en milisecondes depuis le 1 Janvier 1970. A quelques jours près, cette fonction donne mon âge. Signaler sur TwitterRelated posts: Ars Industrialis sur Twitter Vous pouvez à présent suivre l&#8217;actualité d&#8217;Ars Industrialis sur Twitter.... C&#8217;est clair, non ? Le site twitteradar vous tient informé [...]
Related posts:<ol><li><a
href='http://www.christian-faure.net/2010/01/21/ars-industrialis-sur-twitter/' rel='bookmark' title='Ars Industrialis sur Twitter'>Ars Industrialis sur Twitter</a> <small>Vous pouvez à présent suivre l&#8217;actualité d&#8217;Ars Industrialis sur Twitter....</small></li><li><a
href='http://www.christian-faure.net/2009/03/25/cest-clair-non/' rel='bookmark' title='C&#8217;est clair, non ?'>C&#8217;est clair, non ?</a> <small>Le site twitteradar vous tient informé de l&#8217;actualité du service...</small></li><li><a
href='http://www.christian-faure.net/2009/02/06/precieux-temps/' rel='bookmark' title='Précieux temps'>Précieux temps</a> <small>Je viens d&#8217;écouter le dernier enregistrement de la séance publique...</small></li></ol>]]></description> <content:encoded><![CDATA[<p></p><p>En javascript, la fonction :</p><blockquote><p>getTime( )</p></blockquote><p>renvoie le temps écoulé en milisecondes depuis le 1 Janvier 1970.</p><p>A quelques jours près, cette fonction donne mon âge.</p> <span
class="post-twitter" ><a
href="http://twitter.com/home?status=Chez%20%40ChristianFaure%20%3A%20%22getChristianFaureAge%20%28%20%29%22%20http%3A%2F%2Ftinyurl.com%2Fyet429x" title="Signaler sur Twitter" rel="nofollow" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=Chez_20_40ChristianFaure_20_3A_20_22getChristianFaureAge_20_28_20_29_22_20http_3A_2F_2Ftinyurl.com_2Fyet429x&amp;referer=');">Signaler sur Twitter</a></span><p>Related posts:<ol><li><a
href='http://www.christian-faure.net/2010/01/21/ars-industrialis-sur-twitter/' rel='bookmark' title='Ars Industrialis sur Twitter'>Ars Industrialis sur Twitter</a> <small>Vous pouvez à présent suivre l&#8217;actualité d&#8217;Ars Industrialis sur Twitter....</small></li><li><a
href='http://www.christian-faure.net/2009/03/25/cest-clair-non/' rel='bookmark' title='C&#8217;est clair, non ?'>C&#8217;est clair, non ?</a> <small>Le site twitteradar vous tient informé de l&#8217;actualité du service...</small></li><li><a
href='http://www.christian-faure.net/2009/02/06/precieux-temps/' rel='bookmark' title='Précieux temps'>Précieux temps</a> <small>Je viens d&#8217;écouter le dernier enregistrement de la séance publique...</small></li></ol></p>]]></content:encoded> <wfw:commentRss>http://www.christian-faure.net/2008/01/06/getchristianfaureage/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: basic (User agent is rejected)
Database Caching 176/328 queries in 0.217 seconds using disk: basic

Served from: www.christian-faure.net @ 2012-02-12 03:54:45 -->
