Grains à moudre

     HOME     GO     TRIBUS     JEUX     ?
Liens   Making   Plan   Aide   Soutien

Mon grain de sel

Grainsalt.com est apparu le 19 mars 2003 alors que je vivais en Polynésie . A l'époque l'écriture de mes pages dynamiques reposait sur html et asp. J'avais découvert l'informatique en autodidacte, avec la première version de msdos. Les premiers compatibles P.C. apparaissaient ainsi que différentes versions du langage Basic. Par la suite j'ai bénéficié d'une année de formation auprès de l'Université de Nantes, alors que l'Education Nationale mettait en place une Option Informatique dans les lycées. Cette formation a été pour moi un passage de ce qui est généralement qualifié de "bidouille" à quelque chose de plus sérieux. Chacun d'entre nous connait une relation particulère avec son étrange lucarne. En ce qui me concerne mon mode d'utilisation actuel conserve l'empreinte de ma découverte initiale. J'ai longuement travaillé sur mon application CGAO (Comptabilité Générale Assistée par Ordinateur) destinée à évaluer l'enregistrement des écritures comptables. L'objectif était d'éviter un travail répétitif de correction en lui substituant l'utilisation d'une base de données. Cette démarche se trouvait limitée à l'époque par des contraintes d'équipement.

L'écriture du code informatique présente un aspect ludique qui en explique tout l'attrait. La compréhension du code suppose que l'on s'y investisse. Dès lors que les règles d'un langage sont assimilées, le jeu consiste à atteindre un objectif en surmontant les contraintes d'une communication basée sur un principe définitivement binaire qui veut que le courant passe ou ne passe pas. La construction algorithmique ne sera pas sanctionnée par une appréciation biaisée de subjectivité, le verdict est donné par la machine. Face à ce comportement obtus, le programmeur n'a que deux armes à sa disposition qui sont son génie et son obstination. Si j'ai conscience d'avoir bien progressé depuis l'écriture de ma première page html, le temps considérable que j'ai consacré au code ne me permet pas d'avoir la conviction de mon génie. Je suis également conscient du fait que les progrès que j'ai obtenus dans la présentation de mes pages proviennent en grande partie de l'évolution de la syntaxe du code.

L'écriture du code a pour premières règles l'efficacité et la concision. Dans cette démarche la liberté n'est pas tout à fait absente, dans la mesure où plusieurs démarches sont possibles pour atteindre un résultat. Le processus qui régit l'écriture d'un récit et évidemment très différent et on peut même dire qu'il n'a rien à voir, hormis le fait que l'on doit aussi avoir recours à un clavier. J'ai constaté que si le choix du navigateur comme support de présentation présentait un intérêt, la machine ne permettait pas nécessairement d'alléger mon travail de création. Bien au contraire si l'on tente de l'utiliser pour aller au delà d'une présentation linéaire du texte.

Après de vains débats sur la place dévolue aux différents supports, la page numérique apparait aujourd'hui avec ses atouts et ses faiblesses. Je me suis intéressé à la possibilité de varier les modes d'accès au récit. Peut on donner une place à l'image et au jeu à côté d'un texte prétendant à quelques qualités littéraires ?

Jean-Max Thuille

Livre numérique

Si l'on utilise aux mieux les technique de programmation le livre numérique peut être indifféremment lu ou écouté. Il peut prendre la forme d'une page et être agrémenté d'images fixes ou animées. Le mode d'accès aux pages peut être réalisé sous la forme de jeux, il n'est pas nécessairement linéaire. Il peut comporter un dispositif qui mémorise l'avancement de la lecture.

Roman interactif

Mon opinion sur le roman interactif a évolué avec ma façon de l'écrire. Depuis que j'ai entrepris de développer mes écrits en utilisant une technique qui les fait reposer sur la puissance des liens hypertextes, j'ai vu beaucoup d'annonces annonçant l'avénement du "premier roman interactif". Beaucoup d'analyses savantes faites sans rougir par des "spécialistes". La confusion est grande. Si le "roman dont vous êtes le héros" ne fait plus recette il me semble probable que cela soit lié au fait qu'il n'est plus rentable. Le rôle dévolu à internet dans le domaine de l'écrit s'inscrit dans une économie de marché. Toute l'innovation s'est cantonnée à des perfectionnements de mise en pages et de choix de police de caractères. Un étudiant présentera sa thèse en se conformant à des consignes strictes de mise en pages pour la production d'un document imprimé. Je ne suis pas certain que cette soumission à de normes soit productive.

"Small is beautiful". J'ai découvert la formule à cette époque où apparaissaient les premiers compatibles P.C. Avant d'être stockés sur des disques durs les programmes en "basic" qui permettaient de jouer étaient stockés sur des "floppy". Rien à voir avec les merveilles actuelles mais ces jeux restaient extrèmement puissants en regard des moyens utilisés.

Mon objectif est de mettre à profit la puissance du navigateur pour renouveler l'attrait du texte. En ce qui concerne le roman interactif je connais peu de textes qui me paraissent avoir quelque rapport avec ce sujet. Il me semble que cela suppose que l'auteur opère un renouvellement de la présentation de ses écrits reposant sur la puissance des liens hypertextes.

Selon ces critères la nouvelle de Geoff Ryman "253" pourrait prétendre au titre de premier roman interactif. Si ce roman ne repose pas sur des techniques informatiques sophistiquées, ce métro londonien est écrit avec un parcours des différentes rames qui permet de classer ce roman dans le genre "interactif". En effet c'est le métro qui sert de biais pour permettre la progression de la lecture.

L'ourvoir de littérature potentielle (OULIPO), qui vise à élaborer des contraintes formelles arbitraires comme des voies potentielles pour la création littéraire. Si je me suis intéressé à la démarche, mon temps a surtout été envahi par des contraintes formelles qui n'avaient rien d'arbitraire.

Je n'utilise pas une base de données, mes pages dynamiques sont fabriquées avec du XML. Mes outils : Notepad ++, Irfanview et toujours et surtout ... la corbeille.

La fatalité du lien

GRIN pour Game Read Interactive Novel :  Grains à moudre. Intégrer le jeu le texte et l'image.

ISBN 978-2-9532817-3-6

Inconscient des multiples manipulations dont vous êtes l'objet, vous abandonnez un instant la contemplation de votre image. Vous êtes cet être unique, ce cœur de cible dont les yeux largement fermés suivent le chemin d'une mouche aveugle perdue dans une toile gigantesque. Tandis que votre étrange lucarne vous renvoie complaisament l'image d'un surfeur qui se joue des vagues et de la gravité, vous barbotez dans un océan démesuré et vous perdez pied, noyé sous un flot de réponses innombrables et contradictoires.
Aujourd'hui vous restez prisonnier de la gigantesque toile. Ce temps où l'homme maîtrisait la machine est un temps ancien, plus ancien que cette époque où vous n'existiez pas même sous la forme d'une lueur dans le regard de votre père. Vous n'avez pas la connaissance qui vous permettrait de maîtriser la machine, on vous a dit que c'était trop compliqué et vous avez facilement renoncé. En fait on ne vous a rien demandé, rien d'autre que d'être docile, car sur ce sujet comme sur d'autres il ne vous est pas nécessaire de comprendre.
Il fut un tempss où le message ne s'adressait pas au commun des mortels. Il était réservé à ceux qui n'étaient pas seulement capables de le lire mais qui pouvaient aussi l'écrire. Les élus devaient répondre à un message écrit en lettres blanches ou jaunes sur un fonds qui pouvait être noir ou vert. Le GoodGold manifestait son assentiment auprès de son peuple, une infime minorité composée d'individus au teint pâle, une secte selon les uns, des sorciers détenteurs de mystérieux pouvoirs selon les autres, des humains qui avaient construit d'énormes machines pour capter la toute puissance binaire et qui avaient assemblé des circuits en hommage à sa majesté digitale. Enfin le signal était apparu, le message de la toute puissance d'un esprit en accord avec lui-même :

- O.K.

Ainsi était né le Compacteur, l'étrange lucarne destinée à manipuler les cervelles, la pire invention depuis qu'en frappant obstinément deux pierres l'une contre l'autre l'homme avait fait naitre le feu pour éclairer les images peintes sur les murs des caverrnes. Ainsi le GoodGold avait manifesté sa toute puissance. Il se proposait d'offrir la vérité au monde et de révéler leur origine aux habitants de la terre. Il exposait dans ses pages les beautés du Big Bang et de la Genèse, afin d'inculquer aux enfants des récits d'une grande naïveté ayant tous les attraits du mensonge.
Bienvenue dans un monde encombré de choses ennuyeuses qui se nomment argent, biens, dettes et créances et qui sont les clés qui permettent au récit de progresser.

"La fatalité du lien" comporte neuf récits. Jules Compacteur est le détective. Il a stocké ses enquêtes dans un meuble avec des tiroirs pour les différents dossiers.
Ainsi GoodGold a fermé le parc de loisirs qu'il avait baptisé Eden pour proposer aux hommes de vivre une ère nouvelle. Ils se sont répandus sur la terre pour en perturber l'équilibre et transformer en une boue nauséabonde ce qui n'était que pure beauté. Cette oeuvre destructrice fut baptisée progrès alors qu'elle n'était rien d'autre que la poursuite obstinée de la satisfaction de pulsions et les hommes ont trouvé des alibis pour poursuivre l'accomplissement de cette mission sinistre, en l'agrémentant d'un corset religieux ou d'un galimatia philosophique, en la parant du qualificatif assez vague d'humanisme. Si certains courants ont pu donner l'illusion qu'ils pouvaient guider le monde, ils sont restés éphémères et ils ont dû s'effacer devant ce qui s'est toujours présenté comme une évidence, un mouvement qui trouve en lui-même sa justification : le pragmatisme. Le pragmatisme n'a pas besoin de théorie, il se suffit à lui même et il lui suffit d'utiliser son seul aliment : le mensonge. Pour cet épisode des pommes, des péchés, des ronds et des indulgences constituent les ingrédients du jeu.

Progression

"La fatalité du lien" se distingue par quelques caractéristiques :
- C'est une combinaison de deux écritures : le texte et le code. Si on devait rechercher les zones du cerveau auxquelles il est fait appel on découvrirait sans doute qu'elles sont différentes. Le code est addictif par son côté ludique. L'écriture romanesque est d'une nature différente.
- L'image et le jeu entrent dans la composition des récits.
- Les textes sont présentés sous la forme linéaire pour être lus ou écoutés ou sous forme interactive en y mélant le jeu. Lire et jouer sont des activités d'une nature très différente. Grainsalt se propose de relever un défi.
- Dans sa version interactive l'accès au texte peut présenter des particularités :
     - Serge Lecourt se rend à son travail en métro ou en voiture selon un tirage aléatoire.
     - Jules Compacteur aura pour cliente Chloé ou Christine Chevalier selon un tirage aléatoire.
     - à titre d'exemples ...
La lecture progresse:
     - en cliquant sur des images
     - en cliquant sur des boutons
     - à l'issue d'un jeu.

Images

L’herbe est-elle plus verte ailleurs ? Après de longues recherches je ne peux toujours pas répondre à cette question. Mettre un peu d’ordre dans les strates du souvenir est un premier pas dans ma tentative de répondre à cette difficile question. Les images des paysages découverts peuvent aider. Ajouter quelques phrases de commentaires est un autre tour de force.

Paradoxalement les endroits où j'ai passé le plus de temps ne sont pas ceux où j'ai le plus photographié, sans doute parce que l’on photographie davantage les pays que l’on visite. En vivant dans une région on ne se préoccupe pas vraiment d’en garder des souvenirs, car on accumule des souvenirs en y vivant. La connaissance des habitants et de leur culture vient se substituer aux clichés.

Certains touristes sont des comptables scrupuleux qui font le compte précis des lieux qu’ils ont visités comme si cela pouvait avoir le moindre intérêt. J'ai fait le décompte des lieux dans lesquels j'aurais pu poursuivre le cours de mon existence. Il me reste quelques amis de par le monde. J'ai souvent contemplé des paysages avec intensité en mesurant la faible chance de pouvoir revenir un jour. Le voyage est une entreprise solitaire, il exige une aptitude à savoir se détacher des amis et des amours pour garder toute l'authenticité de la découverte.

Le voyageur traite les images comme il traite d’autres produits. Elles sont les repères des épisodes que j'accumule sur des supports numériques qui sont venus remplacer les albums. Mes paysages auront-ils une survie ? Mes images sont destinées à figurer sur le net et elles ont donc une faible définition. Les premières images ont été prises avec un Mavica et des disquettes 1"1/4 comme support de stockage. Un ordre de présentation est nécessaire. Pendant un temps je présentais mes images les plus récentes avant les plus anciennes. Une façon de se conformer à l’ordre suivi par les résaux sociaux, quand le flux de la nouveauté vient sans cesse reléguer les images du passé.

L'ordre retenu est celui d'une chronologie qui omet une grand nombre de périodes et d'escales pour retenir uniquement quelques paysages, un aperçu fragmenté de lieux à peine entrevus et déjà presque oubliés.

Go

L'appui sur le bouton Go fait apparaitre successivement :

     - La progression. Le franchissement d'une étape se traduit par une nouvelle image      - Les personnages. Chacun des personnages a une personnalité originale, déterminante pour le rôle que je veux lui faire jouer. Chaque image a fait l'objet d'une recherche. Mémoriser les caractéristiques de chaque personnage est un effort que je cherche à éviter au lecteur-joueur. Ainsi un personnage peut intervenir dans un récit ou davantage.      - Les lieux

Ronds

lecteur-joueur détient un budget. Sa situation nette est calculée en Ronds selon des principes comptables généralement reconnus. Les pommes sont considérées comme des biens non-marchands. Par contre leur consommation produit une énergie. L'énergie peut être utilisée pour le travail et donc produire des Ronds. Cette énergie peut aussi être utilisée dans le péché. Les Ronds permetent d'acheter des indulgences pour le rachat des péchés.

Tiroirs

Le détective Jules Compacteur ouvre un dossier pour chacune des affaires qu'il doit élucider. Une marque apparaît lorsque la page finale est atteinte.

Beau comme l'antique

L'un des soucis de la gestion d'une page web c'est d'éviter d'encombrer la barre de menus. En JavaScript les fonctions localStorage.setItem et localStorage.getItem permettent d'utiliser la mémoire du navigateur. Les valeurs sont conservées tant que l'utilisateur n'efface pas l'historique de sa navigation. J'ai largement utilisé cette possibilité pour écrire mes jeux. Un menu avec l'intitulé Go permet ainsi d'ouvrir trois pages :
- la page de progression des récits read.html (pop = 0)
- la page des personnages perso.html (pop = 1)
- la page des lieux lieux.html (pop = 2)
A chaque chargement de page la valeur de pop est chargée dans StorePop par setItem et cette valeur sera récupérée par getItem. Le premier récit porte le numéro 1 : nmDos=1

function BasculePop(Pop)
{ Pop = localStorage.getItem("StorePop");
if (Pop == undefined) Pop = 0;
if (Pop == 0) { GoProgres(nmDos);
localStorage.setItem("StorePop",1);}
if (Pop == 1) { window.open('perso.html', "_self");
localStorage.setItem("StorePop",2);}
if (Pop == 2) { window.open('lieux.html', "_self");
localStorage.setItem("StorePop",0);}
}

function GoFr()
{ replg = repxmlfr;
nmDos=1;
BasculePop(0);
}

Diviser pour régner

C’est un des grands principes qu’il faut respecter si l’on veut écrire une application un peu conséquente. Écrire un programme informatique c’est un art de se poser des problèmes quand il pourrait être parfaitement raisonnable d’aller faire une promenade à pied ou de conter fleurette à une jolie fille. J’ai posé le problème global : renouveler l’écrit après Gutenberg, plus précisément aller au delà de l’ajout des quelques babioles de mise en forme désignées sous le vocable de traitement de texte. Comme en définitive, je me propose d’écrire des histoires en utilisant un format lisible par un navigateur, je vais devoir écrire le code pour différentes pages.
J’ai mesuré le temps de chargement de mes procédures Javascript avec Lighthouse, l’application de Google. Ce temps est dérisoire. Cette démarche de division du code se justifie plus par l’exactitude que par la vitesse.
Une page peut être destinée à être lue alors qu’une autre peut être destinée à un jeu. J’ai ainsi identifié dix pages, chacune ayant sa structure html et son code Javascript. Ces pages sont nommées read0, read1, read2 ... read9.
Comment passer d’une page à l’autre ? Un première solution consiste à utiliser une fonction avec un paramètre correspondant à la fonction de la page qui va être lue. Le paramètre aura pour valeur 0,1,2 ... 9.
Une autre solution s’est révélée plus efficace. Elle consiste à utiliser une chaîne de caractères. Chaque élément de la chaîne a une valeur entre 0 et 9 qui correspond à la fonction de la page. C’est une dérogation au principe qui veut que le contenu des récits se trouve dans les fichiers xml alors que les fichiers Javascript sont destinés au fonctionnement. Ici je déroge au principe pour raison d’efficacité. Le symbole * signifie qu’il n’y a pas de page correspondant au numéro de page. Cette démarche me permet de créer éventuellement une page pour les besoins du récit.
Mes récits sont identifiés par un numéro nmDos. Le lecteur-joueur peut avancer à sa guise dans les différents récits (à ce stade il y a neuf récits). Le numéro de page correspondant à son avancée est conservé en mémoire lorsque le lecteur-joueur change de page en déclenchant la fonction GoPge. Par défaut la page html qui va s’ouvrir sera read2.html. Cette page html charge une page xml désignée par un chiffre. La page xml se trouve dans un dossier 00, 01 .. 09, 10, .. 99.

var Lect = new Array;
Lect[1] = '2222122**2**22*1**2**2**9**00';
Lect[2] = '2***211**2**1**1222**2**9**00';
Lect[3] = '22*72*2**1**22*4**2**2**9**00';
Lect[4] = '1***211**1**2227**2**2**9**00';
Lect[5] = '1**7**1**1**1**1**2**2**9**00';
Lect[6] = '1227**1**2**1**5**2**2**9**00';
Lect[7] = '2**7**2**2**1**1**2**2**9**00';
Lect[8] = '2227**22*8**2**6**2**2**9**00';
Lect[9] = '2227222222222223222**2**9**00';

function RenvoiTypes(nmDos) {
return Lect[nmDos]
}
function GoPge(Page) {
storeDosPage = 'storeDosPage' + nmDos;
localStorage.setItem(storeDosPage,Page);
html = 'read2';
letype = RenvoiTypes(nmDos);
html = 'read' + letype.substr(Page,1);
if (nmDos*1 > 9) url = html + '.html?dos' + nmDos + '/' + Page;
else url = html + '.html?dos0' + nmDos + '/' + Page;
window.open(url, "_self");}

Html Xml Sql Php Javascript

Pour qui a traversé la période des quarante dernières années l’évolution du fonctionnement des ordinateurs aura été une histoire d’une particulièrement grande richesse. Dans les années 80, il était inconcevable d’écrire un programme en faisant appel à différents langages. Les choix possibles aujourd’hui sont infiniment variés, l’un de ces choix demeure le parti de n’y rien comprendre.
En ce qui concerne le fonctionnement d’internet l’innovation s’est limitée tout d’abord à la présentation de “sites vitrines” basés sur html, un langage de balise destiné à la transmission de données. Dans les années 90, ce type de sites faisaient déjà piètre figue avec le développement des pages dynamiques implémentés avec PHP, le langage permettant de manipuler les données structurées sous SQL (system query language). En ce qui concerne mon site grainsalt j’avais fait le choix d’ASP le concurrent Microsoft de PHP, toute cette histoire étant elle même soumise aux stratégies des grands groupes candidats au contrôle d’internet. Qui se souvient aujourd’hui de Netscape Navigator ?
Les développeurs ont travaillé sur des applications permettant de créer toutes sortes de sites organisés selon un principe qui veut que c’est l’utilisateur lui même qui fournit le contenu. Le site gère les participations à la création de ce contenu en contrôlant les logins et les mots de passe. La démarche est connue de tous. La stratégie de toutes les compagnies qui interviennent sur ce marché n’est pas la recherche d’un profit immédiat, c’est la recherche d’un contrôle, ce qui suppose une forte capacité d’investissement, puisque l’utilisateur attend de sa participation qu’elle soit tout d’abord gratuite, car comme le chantait Jacques Brel, les putains les vraies ne sont pas celles qui font payer avant mais après.
Les programmeurs se répartissent aujourd’hui en deux catégories. Les front end utilisent des CMS (système de gestion de contenu), une couche logicielle qui permet de remplacer la programmation par la manipulation de contenu. Le programmeur rajoute quelques bidouilles en PHP, mais tout le travail de gestion de l’architecture de la page a déjà été fait. Le programmeur back end quand à lui fait un travail de maintenance de la base de données.
Mais qu’allais-je donc faire dans cet univers impitoyable ? Avec mon projet d’écrire j’ai tout d’abord utilisé une base de données comme cadre de travail. J’ai ensuite opté pour une démarche qui consiste à faire mon site en construisant l’intégralité de mes pages à l’aide d’un langage omniprésent dans les pages qui apparaissent sur Internet : Javascript. Au lieu d’une base de données, je gère mes données à l’aide d’XML, Extensible Markup Language. XML permet de structurer les données, textes, images, vidéos, à la manière d’une base de données, une différence importante est que les données sont immédiatement accessibles sous la forme de fichiers, elles ne sont pas sous le contrôle du gestionnaire de la base de données. Là est l’avantage, l’inconvénient est qu’il faut respecter les contraintes du langage de balises et ces contraintes sont extrêmement rigides. Une page XML doit être parfaitement structurée, faute de quoi, il sera impossible de la parser. Les programmes Javascript qui contrôlent cette base XML sont également difficiles à écrire. De ce fait toute l’énergie consacrée à manipuler la structure XML n’est pas destinée à la beauté du style.
La difficulté de l’implémentation a cependant une contrepartie dans la liberté d’écrire des algorithmes adaptés à mes choix. Progressivement une structure s’est imposée, version après version le cadre de mes récits prend forme. Mes récits tendent à s’inscrire dans une structure qui comporte des personnages et des lieux que le lecteur va consulter tandis qu’il suivra la progression du récit. Lieux, personnages et progression sont devenus autant de fichiers XML au travers desquels le lecteur va devoir se frayer un chemin.

La récursivité quel panard !

Comment faire tenir un grand nombre d'images dans l'espace limité d'un écran ? Pour faire évoluer son récit, un auteur doit faire reposer ses descriptions sur un vocabulaire choisi. L'usage de l'image est proscrit et celui qui recourt à un procédé aussi vulgaire doit être traité avec le plus grans mépris..
NON !.
Si j'ai la pluqs grande vénération pour le texte, ma défiance pour l'image repose d'abord sur des considérations écologiques. L'intérêt de beaucoup d'images ne me semble pas justifier la débauche d'octets qui leur sont consacrées. Pourtant l'image demeure incontornable. Il est possible de faire tenir 12 images 640 x 480 par rangées de 3 pour obtenir un carré 1920 x 1920. Plus de 12 ?.
La petite procédure ci-dessous présente une solution intéressante :.
Show détermine le nombre d'images horizontalement. Pour la présentation de mes images de voyage sur ma page https://www.grainsalt.com/lieux.html je fais figurer 4 images. Ainsi je préserve l'espace vertical que je vais consacrer aux commentaires sur l'image.
var Compt = new Array;
function Initdos(NbDoss,nmDos) {
Compt[1] = nmDos;
for (j = 2; j < Show; j++) {Compt[j] = Compt[1] + j - 1;
if (Compt[j] > NbDoss) Compt[j] = Compt[1] + j - NbDoss - 1;}
}
function RouvreLigne3(nmIm,Page,NbImg) {
SailingBB(nmIm,Page,1) // Deuxième appel récursif
Initdos(NbImg,Page);
ChaineImage = '';
for (k = 1; k < Show; k++)
{
j = Compt[k];
limage = ici l'adresse
if (nmIm > 9) limage = '';
if (j == Page) limage = '►' + limage;
LeLien = '< .... ="javascript:RouvreLigne3(' + nmIm + ',' + j + ',' + NbImg + ');return false;">'; // Premier appel récursif
ChaineImage = ChaineImage + LeLien + limage + '';
}
document.getElementById('ligne3').innerHTML = ChaineImage; }