Salagir's Blog

Old name was: "Why do witches burn?"

This is french section. Go to English version

Programmer un Terminator

Le juillet 24th, 2007

Bientôt un mois d’inactivité, comme quoi…

Pourtant j’ai pleins d’articles en attente… mais le sont pour une bonne raison, ils ne sont pas terminés. J’en ai même jeté un, jugé inintéressant.

Aujourd’hui nous allons essayer de satisfaire les geeks du public en crachant un truc débile que j’ai écris il y a quelques temps dans un coin sans jamais pouvoir le placer nulle part…

C’est hautement scientifique.

Un Terminator (le robot humain qui tue à tout va) a besoin de savoir ce qu’il se passe autour de lui. Il doit donc avoir :

  • Une webcam (elle a pas l’air haute résolution, et en plus elle voit des niveaux de rouge. Mais à l’évidence, elle voit aussi dans le noir)
  • Un microphone
  • Une base de donnée avec des infos pour gérer les situations, et du code pour l’utiliser
  • de la mémoire

Alors quand le terminator entends une phrase, le code utilisé doit plus ou moins ressembler à ça :

(ceci est du code traduit, l’original ayant été écrit par une machine, il est certainement illisible. Déjà, un ordinateur n’écrit sûrement pas de code source avec des commentaires dedans. Plutôt directement en binaire. Le langage utilisé est le D+++, le successeur du… delphi ;p)

// this runs all the time
sound::deamon(stream &input) {
	megaint attention=0;
	triple tmp;
	if ((tmp=levelOfSound(input)) > SOUND_SATURATION * 0.84  / distance(source(&input)))
		attention += tmp * 3.4;
	if ((tmp=surrounding::people::number) < 5)
		attention *= 5-tmp;
	// sniped due to long complexity of harder code with Poisson maths and OCR stuff
	// believe me you *don't want* to see it
	if (attention > 32.4) sound::event(sound::portion(input));
}

// don't get surprised: robots are evil, so they use proprietary formats
sound::event(wmv &sound) {
	string type;
	GUY guy = sound::whoIsItFrom(sound);
    // snip again tons of code analysing the sound. let's go directly to....
	elseif (type=='enquiery') {
		array[string] A = database::get("behaving.situationsAnswers",
			"`question` LIKE ('">sound.toText>"', level=5)");
		foreach (A -> int k : string a) {
			// note: in D+++ you can transform a string into a structure like it's nothing.
			// The value of the string becomes the "default" field
			// note on "process" : yeah, I began to be tired
			A[k].notation = process(timeOfDay, a, friendility(guy), /*...*/);
		}
		arsort(A, 'notation');
		voice::tell( A[0].default );
		return;
		// no return value it's not necessary.
		// Not even "true/false" as the program never bug
	}
	elseif (type=='insult') {
   // snip what's after
}

A la ligne database::get, le robot a les phrases parmis lesquelles il doit choisir sa réponse. Mais sont-elle vraiment « affichées » sur la visualisation webcam ? Sûrement pas, elle seront ailleurs en mémoire !

D’ailleurs en écrivant le texte là, on cache ce que voit le Terminator, le rendant bien moins efficace ! Ca vaut aussi pour l’indicateur « Backup Battery Loaded » (c’est un simple flag!)

Quoi, vous le saviez déjà que Terminator n’est pas très logique ? Je me décarcasse et tout ca pour rien…

Bon la prochaine fois, je vais essayer de finir un vrai article.

One Response to “Programmer un Terminator”

  1. first +1 lol

    sinon c’est Dephi ou Delphi le langage ?

    Moi qui pensait que le T-800 était programmé en visual basic…

    Réponse Salagir: damn une faute. Corrigé.

    pkrg

Leave a Reply