URL: https://linuxfr.org/users/fravashyo/journaux/un-generateur-d-evenements-aleatoires Title: Un générateur d'événements aléatoires Authors: fravashyo Date: 2013年09月24日T15:09:04+02:00 License: CC By-SA Tags: Score: 10 Il y a quelques temps, j'utilisais un logiciel permettant de générer des noms au hasard, mais également de créer des extraits de textes en assemblant aléatoirement des portions à partir de tables existantes (quelques exemples vont suivre plus bas). Il existe plusieurs logiciels similaires pour réaliser cela facilement, mais aucun n'est libre. Et les autres projets qui ont ce type de fonctionnalité (parfois libres), sont bien trop limités dans leur utilisation. Dans les logiciels existants, deux sortent du lot : [TableSmith](http://www.mythosa.net/Main/TableSmith) et [inspiration pad](http://www.nbos.com/products/ipad/ipad.htm). C'est ce dernier que j'ai utilisé, mais TableSmith offre des possibilités similaires. Parmi les paramètres pouvant être définis, on trouve la création de listes dans lesquelles piocher, comme dit plus haut, mais aussi la fréquence de répétition de chaque ligne, ainsi que la probabilité qu'un ligne a d'apparaître Par exemple, si on veut créer ce genre de trames de « conte » : Il était une fois, une paysanne qui jouait à nethack. Mais Ozzy Osbourne, avec 4 de points de vie, lui rendait la vie difficile. Il était une fois, une paysanne qui faisait du point de croix. Mais systemd, avec 6 de points de vie, lui rendait la vie difficile. Il était une fois, une paysanne qui faisait du point de croix. Mais un kobold, avec 12 de points de vie, lui rendait la vie difficile. Il était une fois, un roi qui revenait d'un pays merveilleux. Mais un dragon, avec 6 de points de vie, lui rendait la vie difficile. Il était une fois, une magicienne qui jouait à nethack. Mais un dragon, avec 10 de points de vie, lui rendait la vie difficile. On peut définir ce type de tables ainsi : Table: Histoire Il était une fois, [@heros] qui [@action]. Mais [@ennemi], avec {2d6} de points de vie, lui rendait la vie difficile. Table: heros une princesse un roi 5:une paysanne un laboureur un aventurier une magicienne Table: action revenait d'un pays merveilleux achetait des pommes sur le marché faisait du point de croix jouait à nethack Table: ennemi le grand méchant loup la vilaine sorcière Ozzy Osbourne un gnome un dragon systemd un kobold un troll de {1d3} mètres de haut qui sentait très mauvais L'exemple ici est trivial, mais [certains ont déjà réalisé des tables inspirées par des études de folkloristes](https://sites.google.com/a/conradcook.net/misc/autoblurb), sur la typologie de contes populaires par exemple. On peut plus généralement avec ce type d'outil créer des monstres et trésors pour des jeux de rôle, mais chacun peut imaginer toutes les possibilités que cet outil apporte. Où je voulais en venir, c'est qu'inspiration pad existe bien en version binaire pour Linux et FreeBSD (pour utiliser avec cgi), mais les sources ne sont pas disponibles, ce qui veut dire qu'il est difficile de le voir comme un outil pérenne, d'autant plus que cette version en ligne de commande n'est plus proposée dans la dernière sortie de ce logiciel. S'il devait être réimplémenté, quelle serait la meilleure solution selon vous ? À mon sens le mieux serait de pouvoir l'utiliser depuis un navigateur, c'est à dire proposer un générateur soit en php, soit en javascript. Évidemment, ça pourrait fonctionner également en ruby, en python, mais php ou javascript sont disponibles quasiment partout. Je vois surtout comme avantage pour le javascript que cela évite une surcharge de calcul côté serveur, que cela fonctionnera sans doute dans la plupart des navigateurs (sauf chez ceux qui le désactivent), et que cela peut même fonctionner en local (hors ligne) chez l'utilisateur lambda. L'avantage pour le php c'est que l'on a peut-être plus de contrôle sur les données affichées, si par exemple ça doit repasser par un second filtre de calcul, et que cela fonctionnera à l'identique quel que soit le vecteur de navigation (parfois js ça plante sur certains navigateurs). De plus cela permet de scripter facilement en utilisant php en ligne de commande, si on veut malgré tout l'utiliser en local, chose que l'on ne peut faire en javascript à ma connaissance (enfin, peut-être que ça peut le faire quand même avec node.js). Autre question qui se pose, quelle serait la syntaxe à réimplémenter ? En créer une nouvelle de toute pièce, en reprenant ce qui semble le meilleur de TableSmith et d'Inspiration Pad ? Ou bien choisir le langage de l'un ou l'autre ? Inspiration Pad semble le plus populaire, et sa syntaxe est claire et propre. Est-ce que cela risquerait de poser des problèmes légaux vis à vis de la syntaxe ? Est-ce qu'il est permis de réimplémenter ainsi un logiciel existant (et lui faire concurrence, même s'il est gratuit) ? Vous allez sans doute me répondre que les brevets logiciels n'ont pas cours en europe ? TableSmith a été réimplémenté en php, mais le code n'est pas disponible : http://www.squid.org/rpg-random-generator Il est utilisé en javascript ici : http://www.mythosa.net/rpggen/ (donc par le même auteur que TableSmith lui-même), mais l'outil qui a converti les tables en une sorte de javascript n'est pas non plus disponible. Quoi qu'il en soit, les autres générateurs basés sur des outils que l'on connaît, ne sont pas très pratiques. Par exemple celui-ci semble intéressant, mais ce n'est qu'un outil en ligne basé sur mediawiki (et le code source des modifications n'est pas accessible non plus) : http://www.random-generator.com/index.php?title=Main_Page Cet autre est en javascript, et ça semble être le plus proche de ce que je recherche : http://www.path-o-logic.com/misc/RandListGen_adventurehooks_working.html Néanmoins, le fait de devoir entrer les données dans un formulaire n'est pas très pratique. Ça serait vraiment beaucoup mieux de parser un texte externe. Le but de ce journal, hormis d'avoir des retours éventuels d'expérience avec d'autres outils de ce style, serait de proposer un super sujet pour ceux qui recherchent un projet de programmation :) Pour ceux que ça intéresse, voici une liste d'outils disponibles : http://www.squid.org/rpg-random-generator