Overblog Suivre ce blog
Editer l'article Administration Créer mon blog
Le blog du CRRIAM

apprentissage des variables suite 2

12 Avril 2014 , Rédigé par crriam

Comment enregistrer des variables globales dans un fichier appeler variables.rs

Si vous avez lu nos recherches avant, vous savez que le but de l'enregistrement des variables par rapport au login est d'avoir un robot capable de parler a plusieurs personnes et de retenir les differentes variables le concernant.

Exemple, si le robot parle a un homme appelé Robert, il se souviendra par exemple que robert a 40 ans qu'il est marier, pere de 3 enfants et déteste le chocolat, si ensuite il parle avec Amelie, il saura que c'est une jeune femme de 26 ans, rousse tout juste divorcer, au chomage et qui n'a pas le morale. Il pourra donc lui redemander la prochaine fois qu'il la voit si elle va mieux et si elle a trouver du travail, et a Robert, si ses enfants vont bien, et lui proposer de faire un gateau à tout sauf au chocolat :)

Bien sûr, on peut imaginer que la reconnaissance de l'interlocuteur puisse se faire pas seulement comme c'est le cas pour le moment par la connection avec un login, mais par une reconnaissance faciale du robot qui fera face a son interlocuteur.

Bon, comment mettre ça en oeuvre ?

On prends la solution d'enregistrement ci dessus et on la couple au module d'enregistrement physique des variable sur le fichier texte variables.rs qu'on avait developper plus avant, et qui utilise la commande lançant le programme php enregistrementdesvariables et hop, vous avez un robot capable de se souvenir a qui il parle même aprés une déconnection.

:)

Voici les codes :

A mettre dans un fichier rs de votre choix, moi je l'ai mis dans cerveaudebase.rs (pensez a l'avoir déclarer dans le fichier chat.html )

Code 1

+ je suis * // bruno ou juliette ou pinpin61 etc.
- ok tu es <env login=<star>> <env login>, tu as <env <star>age>

// sert a se loguer

+ qui suis je // permet de tester si le log s'est bien passé
- tu es <env login>

+ dep // sert a se loguer et verifer que le login existe ou pas en cherchant l'age correspondant au login
- entrer votre login

+ * // par exemple bruno ou juliette ou pinpin61 etc.
% entrer votre login
* <env <star>age> == undefined => login non reconnu
- ok tu es <env login=<star>> <env login>, tu as <set age=<env <star>age>> <get age>


// debut zone test enregistrement variable par login variable


+ d // exemple pour enregistrer une variable age
- dit moi ton age


+ * // je recupere l age dans un star
%dit moi ton age
@rec age <star> // je creer un double star en envoyant sur rec car "age" devient un star pour l 'expression rec * * c'est ca qui permetra de contourner le probleme du non support de la variable a enregistrer dans le variable.

// --------------------- debut du code generique pour enregistrer les variables ---------------------- a écrire une seule fois celui -ci ! -----------

+ rec * * // je recupere le double star
- <set vari= ! global <env login><star1> = <star2>> <call>recvariable <id></call>
^ {@j enregistre <env login><star1>=<star2>}


//la 1ere partie appel la fonction javascript recvariable (voir plus bas) pour y ecrire
//dans le fichier variable une expression du style ! global <env brunoage = 23>


// et la 2eme partie revois a l'instruction j'enregistre ci dessous et ca me donne une expression du style "je enregistre brunoage = 3" ce qui permet d'utiliser directement la nouvelle variable sans avoir a recharger le robot.

+ j enregistre *
- <env <star>> ok


// ca donne une fonction de style <env brunoage=23> bruno etant le login et 23 la valeur de la variable age assignee a bruno, le ok finale sert juste pour le debugage on peu l'enlever ensuite.

// ----------------------- fin du code generique pour enregistrer les variables -------------------------


// ---------------------------------- code generique pour lire les variables relative au login ------------- a ecrire une seule fois aussi ! ----------------------
+ lect *
@je lit <env login><star>

+ je lit *
- <env <star>>

// --------------------- fin generique lecture variables -> login -----------------------------------

// ---------------- exemple code pour lire des variables par rapport au login ----------------

// celui la on l'utilisera chaque fois qu'on voudra lire une variable <env > de l'utilisateur

// au lieu de taper <get variable> ou <env variable> on fera un renvois {@lect variable}

// exemple :

+ test
- ton login est <env login> et tu as {@lect age} ans

// ------------------ fin exemple lecture des variable / login ---------------------------


// -------------------- exemple enregistrement des variables ---------------------------

// idem que pour la lecture, on utilisera ce code pour enregistrer les variables

// au lieu de tapper <set variable=valeur> ou <env variable=valeur>

// on revera sur {@rec variable valeur} exemple :


+ ex1
- es tu marier ? {@rec dejaditmarier 1}


// il sufit de mettre le renvois avec le nom de la variable et sa valeur sans le signe egal
// le code l'enregistre automatiquement avec le login là avec le login bruno ca ecrira <env brunodejaditmarier=1> ce qui indiquera au robot qu'il a deja poser la question es tu marier

// ------------------------ fin exemple enregistrement des variables -------------------------

Code 2

//Permet d'enregistrer les variables dans le fichier variables.rs avec le module

// d'enregistrement php. Moi je l'ai mis dans le fichier reactionbot.rs

// debut enregistrement des variables utilisateurs (on utilise le meme code ajax que celui de la creation du chat log du inclus dans le fichier chat.html )

> object recvariable javascript
var id = args[0];
var vari = rs.getUservar(id, "vari");
// alert(vari); pour le debug uniquement

var data = "toi="+ vari ; // ne pas changer toi par autre chose ou alors changer aussi dans le fichier php

if (window.XMLHttpRequest) // declaration de l' Objet standard
{
xhr = new XMLHttpRequest(); // pour Firefox, Safari, ...
}
else if (window.ActiveXObject) // pour Internet Explorer
{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}

// on donne l'ordre au serveur d'executer le fichier editeurvariable.php avec les variables stoker en mode POST

xhr.open("POST", "editeurvariable.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(data);

// pour eviter le message d erreur de type undefined on mets ca en plus:
var dim = "";
return dim;

< object


// ---------------- fin fonction enregistrement des variables ---------------------------


/* on appel la fonction avec la balise <call>

// par exemple on veut obtenir la variable age = 40

// la balise <id> bien qu'identique pour tous et indispensable pour envoyer notre variable rs au code javascript

+ rec age *
- je fais <set vari= ! global age = <star>> <call>recvariable <id></call>

// si l'on tape rec age 40

// la variable globale

// ! global age = 40 sera inscrite dans le fichier variables

Nous pour l'enregistrement des variables correspondant a un login on a integrer cette commande a l'ensemble de commande d'enregistrement

+ rec * * // je recupere le double star
- <set vari= ! global <env login><star1> = <star2>> <call>recvariable <id></call>
^ {@j enregistre <env login><star1>=<star2>}

+ j enregistre *
- <env <star>> ok

*/

// ------------------- fin enregitrement variables --------------------------------------

Code 3

Le code du fichier editeurvariable.php indispençable a l'enregistrement des variables dans le fichier variables.rs

Si vous ne le posedez pas, Il devra etre mis dans le repertoir /eg aux cotés de chat.html

<?
$myarray = &$_POST ;
$var1=$myarray["toi"];

$fp = fopen("brain/variables.rs","a"); // ouverture du fichier en écriture
fputs($fp, "\n"); // on va a la ligne

fputs($fp, "$var1 \n"); // on écrit la variable dans le fichier et on va a la ligne

fclose($fp);
?>

Conclusion

Précaution pour que tout fonctionne:

Faire tourner votre robot sur un environement possédant php, donc généralement ça ne marchera pas en local sur une clé ou sur votre disque dure sauf si vous avez lancer un serveur php en local (plus délicat) mais tres courant sur un site internet

Attention, les informations sont stoker dans un simple fichier text, donc tres tres facilement accescible pour qui veut les lires ! prenez donc peut etre la peine de proteger votre repertoire a l'aide d'un htaccsses

Il faut s'etre loguer ! aucune variable ne pourra etre enregistrer si vous n'etes pas loguer dans la variable <en login>

Pas encore verifier : la possibiliter de comparer, et faire des operations mathématique sur les variables

Résultat :

Ces codes simples vont permettre d'ouvrir le champ de connaissance de votre robot de façon extraordinaire. vous pourrez lui apprendre tout un tas de chose.

Ce systeme avec quelques modifs (qui j'éspère seront faisables) devrait aussi permettre l'auto apprentissage, du style: Je te presente mikey, il a 15 ans c est un ami

ce qui sera enregistrer comme login mikey, mikey age = 15 ans Mikey statut = ami

ou un chien est un animal non comestible avec login chien, chien statut animal etat = non comestible

Bien sur, tout ça serait peut etre mieux avec une base de donnée :/ J'en conviens, a méditer. mais en attendant, voila toute l'étendu de ce que cette nouveauté apporte, soit : des perspective énormes !!!!

Partager cet article

Repost 0

Commenter cet article