-  popen Notice/Instructions  -

 

 
 

POPEN

Popen est le nom d'une instruction de la libairie standard d'entrées sorties du langage C. Il permet de lancer un programme à partir d'un autre programme -process open- comme si il s'agissait d'un fichier. Dans la version actuelle c'est en fait l'instruction Spawn (engendrer) qui est utilisée. L'exécutable popen.exe sert donc d'interface tremplin vers les autres projets de la collection.

L'ensemble de la collection est autonome dans son arborescence, il est possible de l'exécuter directement sur le CD ou de l'installer sur une machine en copiant le repertoire popen, ce qui permet de faire des sauvegardes depuis certains programmes. Le tout pèsera environ 4 Mo sur votre système.
Il est également possible de tirer un raccourci depuis popen.exe à condition de ne pas modifier le repertoire de travail par défaut (popen).

Les programmes ont été developpés sous dos mais recompilés à l'aide de mingw32 et utilisent la librairie pour jeux vidéos Allegro: le résultat doit normalement tourner sur tout système windows récent (win98/NT/2000...) mais n'a été testé que sur windows98 deuxième édition. En cas de problème ou pour exécuter directement les programmes sans passer par popen, copier le fichier all3940.dll vers c:\windows\system

Si popen refuse obstinément de démarrer il s'agit probablement de l'absence des drivers directX appropriés ou d'une incompatibilité matérielle avec la librairie allegro. Assurez vous d'avoir une version récente de directX pour votre matériel vidéo. Si ça ne marche toujours pas, il ne vous reste plus qu'à maudire l'informatique jusqu'à la septième génération.
 

 

 
 

AIRSHIP

Airship est un projet d'environnement expérimental pouvant simuler et illustrer des modèles dynamiques simplifiés dans le cadre de matrices tridimensionnelles à valeurs entières.

Airship comporte trois moteurs:

Un moteur de rendu optimisé pour la projection de matrices de voxels en "flat shading". Ce moteur est immersif, c'est à dire qu'il autorise des points de vues depuis l'intérieur même des matrices. Il gère également la récursivité qui découle de la présence de sous matrices à l'intérieur d'une matrice.

Une interface de manipulation et de navigation ou pilotage dans ces espaces de voxels.

A terme un moteur d'animation de type automate cellulaire à dynamique paramétrable.

Dans la version actuelle cet espace ne comporte que des scènes statiques et 
quelques possibilité d'animation simple de type écoulement de "sable".

Pilotage à la souris:

Bouton de gauche: translation
 +Shift: tourner autour de "l'ancre"
Bouton de droite: panoramique (tangage et lacet)
Bouton du centre: avancer/inclinaison (roulis)

Lacher les boutons avec un le mouvement souris pour un effet de pilotage inertiel.
Si votre souris n'a que deux boutons, vous pouvez peut-être simuler le bouton du centre en les pressant simultanément. Sinon, ou si votre driver souris est incompatible, vous ne pourrez pas aller bien loin dans airship. Ceci sera corrigé dans une version ultérieure.

Pavé numérique:
0..9: téléportation directe sur une scène
 +Shift: enregistrer la position actuelle
Entr/+: réglage de la focale
slash/*: réglage du diamètre du vaisseau.
-: diamètre par défaut (1 cube).
Les cubes à l'intérieur de ce diamètres sont invisibles ce qui permet de dégager la vue dans les espaces trop encombrés.

Flèches de direction:
Modifier la direction de la lumière

Pavé au dessus:
Page up/down: avancer reculer la position de "l'ancre".
Home/End: ancre au plus proche/loin

Inser: Créer des cubes sur le diamètre du vaisseau avec la dernière couleur active
Suppr: Effacer les cubes sur le diamètre du vaisseau

Clavier principal:

 Touches alpha (AZERTY...XCVBN)

Chaque touche correspond à une couleur, les premières sont dans l'ordre:
noir/rouge/vert/bleu/blanc/cyan/jaune/magenta
Ces touches n'ont d'effet que combinées à d'autres touches...
La dernière utilisée définit la couleur active (avec Inser)

+Shift: ajouter des cubes de cette couleur
+Control: Enlever des cubes de cette couleur
+Alt: Enlever tous les cubes de cette couleur

+Touches [0..9] [F5..F8]
Attribue une dynamique à cette couleur

touche exposant 2 (sous echap):
réatribuer une couleur 
ex: presser z puis 2 et e (sans relacher 2) pour changer les cubes rouges en cubes verts

F1: créer un plan avec la couleur active
F2: créer un cadre avec la couleur active

F12: afficher les coordonées
F11: compter les rafraichissement écran
Espace: Information débugging pour le clipping

TAB: enregistrer une saisie d'écran 

Echap: quitter 

 

 
 

ARBO8

 Arbo8 est une étude préliminaire à CA2 de la percolation d'un pointeur programme sur une matrice de déplacements.

Déplacer (ou pas) la souris
click gauche/droit: rotation du vecteur sous pointeur
espace: accélérer
Essayer: maintenir espace et un click enfoncés simultanéments

Echap: quitter


 
 

BORBLOGL

Simulation d'écoulement sur les canaux rouge/vert/bleu/noir. Techniquement il s'agit d'un automate cellulaire à "conservation d'état", les cellules bougent  mais n'apparaissent ou ne disparaissent pas. La matrice sous la fenêtre de l'automate représente la totalité de la table logique définissant la dynamique.

Notice incluse

 

 
 

CA2

!Echap ne permet pas de sortir de CA2!
!Il faut faire click droit et sélectionner QUIT!

Prototype de microlangage

CA2 est un environnement minimal de programmation interprétée constitué de matrices 2D contenant indifféremment du code ou des données. Le noyau du langage est un ensemble restreint de symboles terminaux correspondant aux opérations atomiques locales sur les cellules de ces matrices: un byte-code. Les séquences d'une fonction s'écrivent et se déploient en 2D, chaque cellule comportant un code et une orientation. La topologie permet d'implémenter des boucles itératives imbriquées, des piles d'appels (récursivité), des applications multithread pour des algorithmes simples. La robustesse du système le rend compatible avec de la programmation aléatoire (algorithmes génétiques).

Trois programmes CA2 sont inclus dans le package:

- Ecriture automatique aléatoire de programme et exécution simultanée.

- Un programme autorépliquant non deteministe, clonage exponentiel du support/exécution.

- Déploiement simultané d'arbres binaires sur une matrice, multi piles.

La programmation manuelle s'avère très laborieuse. Le faible nombre d'instructions necessite de nombreuses manipulations atomiques. A l'évidence le code est trop compact et un jeu d'instructions paramétré plus volumineux sur 16 ou 32 bits s'impose.
Pour la programmation génétique, un programme est globalement trop rigide et fragile et trop peu concurentiel, la plupart des mutations sont cancérigènes ou délétères. Cette expérience apporte beaucoup à ma reflexion théorique et technique sur la vie artificielle.

La notice complète de programmation de CA2 dépasse le cadre de cette distribution.

Pour charger un des programmes inclus:
click droit, sélectionner Restore, choisir un des fichiers .ca2

Espace: Pour lancer l'exécution 
  ou continuer en mode pas-à-pas

Echap: Pour pauser l'exécution

[F1..F4]: mode d'exécution
[F5..F8]: mode d'affichage (rapidité)

Click gauche:
 en dehors d'une matrice pour bouger l'écran virtuel
 dans une matrice pour bouger cette matrice

Click droit:
 en dehors d'une matrice pour le menu global
 dans une matrice pour les options de la matrice

Pavé numérique:
+/-: zoom in/out

 

 
 

DAMES

 Jeux de dames cruelles. L'heuristique est un pur min/max de profondeur 5 demi-coups, l'algorithme d'évaluation est simpliste: un pion=1, une case plus loin=0.05, une dame=5.
Programmé en 2 jours ce joueur de dames "force brute" me bat facilement sans remords alors même que j'en connais les rouages. Doté d'une tactique irréprochable mais souffrant d'une totale absence de stratégie un bon joueur doit pouvoir en venir à bout sans problèmes. Il est tellement bête qu'il ne sait même pas quand la partie est terminée.

Bug: la dame se permet de revenir en arrière sur les prises multiples.

Attendre son tour, cliquer sur le pion à déplacer pour le sélectionner puis cliquer sur la case de destination. Si ça ne marche pas c'est que le mouvement proposé n'est pas valide. Recliquer sur un pion sélectionner pour le déselectionner et en sélectionner un autre. Bref, tout ça est "intuitif".

Pas de retour en arrière (no take back)
Ce qui est joué est joué

 

 
 

ESCAPE

 Algorithme de déploiement topologique centrifuge, genre art-déco.

Espace: animation automatique on/off

NumPad:
0: voir horloges de construction on/off
5: mutation automatique on/off
2/4/6/8 (maintenir) + souris haut/bas:
réglage des horloges.

control+2/4/6/8 suivi de shift+2/4/6/8:
modifier la topologie des horloges

divers numpad, click/bouger souris (essayer)

TAB: saisie écran 

 

 
 

IFS

 Les systèmes itérés de fonctions sont un classique de l'informatique graphique. On passe les coordonnées d'un point par une des transformations du système (choisie au hasard) puis on recommence. Pour le plan une transformation c'est par exemple une translation, une rotation et un changement d'échelle. La figure obtenue est fractale par construction: similaire à elle même pour chaque ransformation. C'est le principe de la compression fractale de la vidéo ou du son.

Les trois cadres du programme représentent trois transformations du cadre de l'écran. Si les transformations sont contractantes (les cadres d'arrivé sont plus petits que celui de départ) un théorème stipule que dans la succession aléatoire des transformations le point finit par parcourir la totalité de l'attracteur.

Le cadre sélectionné est en rouge 

 Clique gauche: sélectionner le cadre suivant 

  Bouger la souris: bouger le cadre 
 + Clique droit: rotation/échelle du cadre 

 Entrée: 1000000 itérations au lieu de 100000 
 Espace: Itération récursive d'un disque de départ 
 Tab: Sauver un fichier capture d'écran 

 Echap: quitter

Iterated Functions System is a classic of graphic computing. One point's coordinates are applied through one randomly chosen transformation of the system then again and again. For the plane a transformation can be a combination of a translation, a rotation and a scaling factor. The final figure is
fractal by construction: similar to itself through each transformation. Its the basis
for fractal video or audio compression. 

The three frames of the program show three transformations upon screen's frame. If transformation are contracting (?) -frames are smaller than screen- a theorem predicts the random sequence of transformations gets the point to fill up the whole attractor.

The selected frame is red 

Left click: select next frame 

Move mouse: translate frame 
+ Right click: rotate/scale frame 

Enter: 1000000 iterations rather than 100000 
Space: Iterating on a disk 
Tab: Save a screen grab file 

Escape: leave


 
 

KRINKEUR

 Une trajectoire aléatoire en arcs de cercles dessine un cheveux à l'écran. Ce cheveux vibre. Un remplissage (fill) automatique est ajouté.

Espace: lisser le cheveux
Entrée: nouveau cheveux
0_NumPad: changer les couleurs

 

 
 

MORFIELD

Dérivé de KRINKEUR. Représente des petits serpents de pixels tropicaux sur le modèle de la trajectoire d'électrons dans un champ magnétique perpendiculaire irrégulier.

Attendre: une nouvelle génération apparaît
Espace: nouvelle génération maintenant
Entrée (maintenir): idem + visualisation du champ 

 

 
 

MORPH2D

 Outil de visualisation de fonctions de transferts neuronales à entrées dans le plan. Les réseaux de neurones artificiels sont des fonctions mathématiques complexes construites par interconnexion (addition) de fonctions élémentaires. 
Rnmorph dessine à l'écran la sortie noir et blanc ou couleur de ce réseau de calculs en fonction des deux entrées x et y.
Morph2d ne comporte aucun mécanisme d'apprentissage neuronal, la seule contrainte vis-à-vis des paramètres est un critère de rendement: chaque neurone doit varier sur au moins 10% de la surface de l'écran.

Esc: quitter

Tab: Enregistrer image

Espace: Relancer un calcul (nouveau réseau)

[1..9] 5,10,15... neurones sur les 2 couches cachées
  (neurones entre entrées et sorties)
   +ou- complexe/lent

[F1..F12]
  en mode solarisation: degré de solarisation
  sinon: modifie le pavage mode NumPad*
    + control ou + shift pour modifier en x/y 

pour mode NumPad 4:
Entrée: copier l'écran actuel sur les 2 images bases
Suppr: copier l'écran actuel sur la 2eme image base
Home: importer une image sur la 2eme image base
Delete: visualiser la 1ere image base
Inser: visualiser la 2eme image base

NumPad:

0: mode quantifié on/off
.: mode géométrique par défaut
Entr: mode couleur on/off
+: mode géométrique concentrique 
  (une entrée de distance au centre en +)
-: mode géométrique torique
  (raccord haut/bas gauche/droite)
*: mode géométrique tuile torique
  (8 entrées au réseau, 4 à l'échelle de l'écran
   et 4 à l'échelle d'un pavage régulier)
1: motif centré on/off en mode concentrique
2: rendu 256 couleurs on/off
3: solarisation on/off

4: mode indirection + cycle indirection 3/6 entrées
  utilise le réseau comme image à mapper 
  sur une/deux images base géométrique
  (par défaut:tuiles)

5: mode 3D cycle 2D/3Dsurf/3Dlego

 

 
 

MORPHON

Morphon est un algorithme de morphogénèse inspiré par les biomorphs de Richard Dawkins. C'est l'animation phénotypique d'une promenade aléatoire dans l'espace des génotypes, comme une séquence de portraits de familles.

F1-F12: plus ou moins vite
Espace: pause

Tab: Sauve chaque plan dans morphonNN.tga où NN est un nombre croissant
  - Attention! chaque image pèse 470ko, vous pouvez facilement déborder votre
   disque dur.  N'appuyez sur cette touche que si vous comprenez bien...

Echap: quitter

Morphon is a morphogenesis program inspired by Richard Dawkins' biomorphs. It's the phenotypic animation of a random walk in the space of genotypes, like a sequence of family portraits.

 F1-F12: more or less speed
Space: pause

Tab: Save each frame in morphonNN.tga where NN is a growing number
    - Caution! each picture weighs 470ko, you could easily fill up your hard drive
    Dont hold this key down for too long, or dont use it at all...

Escape: leave


 
 

TREPTOR

 Synthèse sonore avec "réseau neuronal" constitué de 9 modules dynamiques interconnectés. Le principe de modulation de fréquence et le résultat sonore est proche des synthétiseurs FM qui équipent les cartes son -simulation des instruments-. C'est un son très electronique. Mais ici l'architecture est récursive et il est possible de trouver des attracteurs plus ou moins chaotiques.

Entrée: état instantané aléatoire

NumPad:

0: nouvelle architecture

Entr: mutation de l'architecture (laisser appuyé)

4/7 ou souris click gauche+mvmt bas/haut:
  Augmentation/diminution des fréquences propres

5/8 ou souris click droit+mvmt bas/haut:
  Augmentation/diminution de couplage degré 1

6/9 ou souris click droit+mvmt gauche/droite:
  Augmentation/diminution de couplage degré 2
 

Appuyer simultanément sur une ou plusieurs touches [1..9] du clavier principal pour restreindre ces effets aux modules correspondants.

 

 
 

VEGETAL

     Cell automata inspired structure.

     Active agents (cells) can grow and
     die on a 2D substrat according to
     a "genetic program".
     Each cell includes a number of variables,
     ( orientation, counter.. ) and the program
     is composed of a strand of conditional
     actions for each type (4 states) the cell
     can take.
     Conditions apply for the 4 neighbouring squares
     and the internal variables, triggering actions
     of growing, dying, type changing, reseting the
     program pointer or the variables...

     Crude interface allows for playing, storing
     and mixing various randly obtained programs.

  default file=vegetal.veg

 escape : quit
 0 : new seedling ( from scratch : with proba_base)
 up/down : load next/previous seedling of filein as current
 + shift : by step of 10

 *Pad : mutate current seedling no reset of the ground
 EntrPad : daughter, new seedling mutated from ONE seedling of the pool
 +Pad : mating, new seedling from combination of TWO seedlings of the pool
 -Pad : soup: new seedling out of the smallest pieces from the whole pool
 /Pad : same as previous but no reset of the ground
 space : show the code of the current seedling
 . : clear the ground and restart the current seedling
 5 4 8 6 2 7: clear parts of the ground
 < > : change the cell size (in pix) and hence number of cells
 pgup/pgdown slow/speed up
 home/end freeze/release

 s : save/append current seedling (asks for fileout name)
 a : append current seedling (to last fileout)
 l : load seedlings (asks for filein name)
 p : load new genetic pool
 f : fill the pool with the current seedling (avoid that one)
 w : mutate current seedling
 b : set the buffer (buffer=one seedling) with the current seedling
 r : set the current with the buffer
 v : set the current with a mutation from the buffer (left unchanged)
          it allows to browse possible mutations of a given seedling
 
 
 

VOLPURNA

 Volpurna simule l'agitation de particules en interaction. Chaque particule peut choisir soit de suivre son propre déplacement rectiligne soit d'adopter le mouvement de la particule la plus proche au delà d'une certaine distance. La probabilité de suivre plutôt son "instinct" ou plutôt le mouvement des autres est réglée par l'utilisateur, de même que la distance minimum d'interaction.  En manipulant ces paramètres globaux et leur variabilité inter-individuelle il est possible d'explorer continuement différents régimes collectifs, moléculaires, chaotiques, individualistes ou totalitaires.

Notice incluse: appuyer espace

 

 
 

VOLUME

 Editeur de polyhedres convexes et sortie de plans pour pliage papier.

Espace: nouveau volume
²: symétrie sagitale on/off
[1..4]: symétrie en rotation

click gauche: changement d'échelle
click droit: rotation (relacher=lancer)

a: visualiser le découpage proposé
b: sauver le découpage en fichier postscript .ps
  trouver ghostscript et ghostview pour imprimer ça
e/r: sauver fichier vrml 2.0/1.0
t/y: saisie d'écran

[F1..F8] + click gauche et ou droit + bouger souris
pour modifier les plans de coupe

Haut/bas/gauche/droite: différents styles

 

 
 

YPOTENUZ

Illustration et preuve visuelle du vénérable théorème de Pythagore, le carré de l'hypoténuse est égal à la somme des carrés des côtés opposés. Ce qui permet de trouver la distance dite euclidienne dans un repère cartésien:   d=racine_carrée(x²+y²) 
 J'ai utilisé ce résultat des centaines de fois, mon ordinateur des centaines de millions de fois, mais ce n'est que récemment que je me suis intéressé à sa logique. La "démonstration" proposée repose sur un découpage en 5 pièces, qui peuvent être assemblées pour former soit deux carrés de surface A² et B² soit un seul carré de surface A²+B². J'ignore si il existe un découpage plus simple...
  
 Bouger la souris pour modifier les côtés A et B 
 Cliquer pour montrer/cacher les indications algébriques 
 TAB pour une saisie d'écran dans "ypotenuz.tga"
 

 
 

 POPEN