Projets d'année 1999-2000 : dominante PROGRAMMATION

Vous trouverez ci-joint la liste de différents projets d'année de maîtrise illustrant les concepts de programmation du cours POD. Ces projets sont proposés en règle générale pour deux étudiants mais peuvent être adaptés selon le nombre de participants. Plusieurs documentations en ligne sont indiquées à lecture des étudiants désirant étudier un sujet. Pour d'autres références ou indications contacter par mél les enseignants du module.

Vous trouverez d'autres propositions de projets sur la page de Christian Queinnec : http://youpou.lip6.fr/queinnec/WWW/cours/Projets.html.

1   Extensions d'OCAML

Ces différents sujets propose deux types d'extensions à OCAML. Les 3 premiers sont des extensions sous forme de bibliothèques et les 3 derniers nécessitent de modifier les sources du langage, et donc de s'y plonger.

1.1   Interface graphique O'CAML via une applet Java

Ce projet consiste à pouvoir interagir graphiquement entre une application O'CAML et une applet Java. Il reprend en cela les projets de module sur les servlets en O'CAML et l'interface entre le module Graphics d'O'CAML et une applet.

La première tache est de réécrire la bibliothèque Graphics d'O'CAML pour envoyer selon un certain protocole texte les affichages graphiques de l'application dans l'applet Java. De même les événements reçus dans l'applet devront être envoyés à l'application O'CAML. Les principales difficultés proviennent de la gestion d'événements et des bitmaps. D'autre part, il est nécessaire d'écrire un mini-serveur HTTP (servlet) pour le téléchargement de l'applet avec l'information sur les prises de communication. Différents threads O'CAML peuvent alors communiquer avec l'Applet. Des jeux de test seront fournis.

D'autre part pour pouvoir profiter des composants de l'AWT, il est demandé de faire une proposition d'intégration en O'CAML des composants Java. Le choix entre modules ou objets est libre mais devra être justifié. Une implantation montrera la pertinence de la proposition.

1.2   OCAML Flight

CAML Flight est une extension data-paralèlle de caml-light. Un même programme tourne sur différentes machines. Chaque machine possède un numéro unique. Chaque programme peut demander, dans une section synchronisée (SYNC( expr )), un calcul distant (GET(num,expr)) où num est le numéro d'une machine et expr l'expression à calculer. L'évaluation de l'expression ne peut se faire que si les deux machines sont dans le même bloc de synchronisation. Il n'y a pas d'imbrication de blocs de synchronisation.

Le but de ce projet est de modifier l'implantation en l'adaptant à OCAML et en utilisant les bibliothèques Marshalling et Thread pour simplifier l'implantation, en particulier au niveau du protocole. L'extension de syntaxe introduite peut être réalisée avec l'outil camlp4 (http://caml.inria.fr/camlp4/). Quand une machine reçoit une requète, elle lance un nouveau processus pour y répondre. Le calcul s'effectue alors dans l'environnement du bloc de synchronisation.

Pour que la sortie d'un bloc de synchronisation ne soit pas bloquante, une amélioration possible est de pouvoir conserver plusieurs environnements de blocs de synchronisation pour qu'une machine puisse poursuivre son calcul tout en répondant à des requêtes de blocs antérieurs.

1.3   Robots footballeurs

La ``Robocup'' est un tournoi de robots footballeurs de différentes catégories. Une de ces catégories est une simulation qui fait s'opposer des programmes sur le réseau à travers un serveur de jeu appelé ``RoboCup Official Soccer Server''. Toutes les communications et toutes les actions doivent passer par ce serveur.

Il existe déjà un programme O'CAML faisant joueur une équipe de chameaux pour une ancienne version du sevreur. Ce programme comporte une partie d'implantation du protocole et une stratégie simple pour une équipe O'CAML.

Le but de ce projet est d'une part d'adapter cette bibliothèque de communication pour la dernière version du serveur ``RoboCup Official Soccer Server'' et d'autre part de proposer une stratégie de jeux pour ses joueurs. Cette stratégie met en oeuvre la coopération entre les robots, sachant que l'information du jeu de chaque robot est partielle. Cette stratégie sera confrontée à des programmes existants.

2   Programmation SCOL

Le langage SCOL est un langage de communication pour les mondes virtuels. Il est développé par la socièté CRYO-NETWORKS (site WWW : www.cryo-networks.com). C'est un langage fonctionnel statiquement typé, polymorphe paramétrique (à la Caml), muni de nombreuses bibliothèques (2D, 3D, Sons, Communications, ...) dont principalement un moteur 3D efficace. Il est compilé vers du code-octet et possède un récupérateur automatique de mémoire, dit Glaneur de Cellules. Il résoud élégament les problèmes de sécurité en communiquant les sources des progammes à télécharger et les recompile rapidement sur place. Enfin il permet son utilisation en mode connecté ou non.

La technologie SCOL permet de définir des modules distribués (DMS) dans lesquels sont spécifiés les parties client et serveur de l'application distribuée.

2.1   Interprétation et compilation du langage SCOL

Le projet de module ``Langages Fonctionnels'' du DESS GLA (http://www-gla.ecoledoc.lip6.fr) consistait cette année, pour un groupe de huit étudiants, en l'implantation en O'CAML d'un interprète et d'un compilateur du langage SCOL.

Le but de ce projet est de finaliser et d'évaluer cette implantation. Pour cela il est demandé tout d'abord d'intégrer l'ensemble du langage et d'augmenter la bibliothèque d'exécution pour comparer les performances de cette réalisation avec le compilateur existant. Un deuxième travail est d'ajouter un mode debug permettant de tracer l'exécution d'un programme.

2.2   Pavage périodique du plan et création dynamique de textures

Ce projet s'inspire du projet de l'option informatique du DEUG MIAS (2ème année).

On appelle pavage le remplissage d'une surface par des copies non chevauchante d'un motif. Les différentes copies du motif sont obtenues en appliquant une isométrie (transformation qui conserve les distances entre les points), comme par exemple une translation. Une symétrie est une isométrie laissant invariant une figure géométrique. L'ensemble des symétries d'une figure forme un groupe de symétries. Chaque groupe possède des générateurs qui par composition permettent de construire toutes les symétries du groupe.

On obtient un pavage par la donnée d'un motif et des générateurs d'un groupe de symétrie. En composant les générateurs jusqu'à une certaine profondeur, on obtient les transformations à appliquer au motif.

Le but de ce projet est d''une part d'écrire la bibliothèque SCOL de création de tels pavages à partir d'un motif donné et des générateurs d'un groupe de symétrie, et d'autre part d'appliquer les pavages obtenus sur des surfaces de scènes 3D, comme le papier peint d'une pièce. Une extension possible est de laisser la possibilité

3   Applications Java

3.1   Mise en oeuvre d'une application Corba

Le but de ce projet est d'adapter un des projets de simulation d'un monde de robots (Epervier ou Poules/Renards/Vipères) au monde Corba et de le comparer à une version RMI.

Le serveur contient le monde où les robots évoluent. Chaque robot est un processus différent qui invoque le serveur pour se déplacer. Un client graphique permet la visualition du monde et des robots.

Il est demandé une version RMI et une version Corba en essayant de factoriser au maximum le code. La comparaison s'intéressera aux performances et à la facilité de réalisation.


Ce document a été traduit de LATEX par HEVEA.