Projets d'année 2001-2002 : dominante PROGRAMMATION
proposés par Emmanuel Chailloux

version du 7 mai 2002 : 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.

Certains projets peuvent être choisis sur 2 spécialités (1 étudiant en spécialité ``programmation'' et 1 étudiant en IA ou algorithmique graphique).

Vous trouverez d'autres propositions de projets sur les pages de :
Christian Queinnec : http://youpou.lip6.fr/queinnec/Teaching/projects.html


1   Extensions et applications en O'CAML

Ces différents sujets propose de réaliser des applications et des extensions en Objective Caml.

1.1   Développement d'un Plug-in O'Caml pour navigateur Web

participants : Pejcic Nikola + Taguet Aurélie + Zinovieff Nicolas

Le but de ce projet est d'embarquer un toplevel O'Caml dans un navigateur Web dans le but de construire des applets.

On découpe ce projet en 3 phases : grandes phases :
  1. un état de l'art sur l'écriture de plug-ins pour les navigateurs Web
  2. la construction d'un toplevel O'Caml embarqué
  3. la réalisation d'applets
Etat de l'art

Un premier travail consiste à recenser les différents biblioth`eques/modèles pour les plug-ins. On s'intéresse aux plus courants : Explorer, Communicateur et java plug-in :
Construction d'un toplevel embarqué

De cet état de l'art, on choisit le type de modèle en favorisant la diffusion (quel navigateur pour quel système), la facilité d'implantation du toplevel embarqué et sa gestion d'une fenêtre graphique.

Toplevel embarqué
Pour l'interfaçage d'OCAML avec d'autres langages :
Fenêtre graphique
Pour la gestion de la fenêtre graphique de la bliothèque Graphics, la gestion peut soit etre effectuée directement dans le nouveau toplevel en redéfinissant la partie C de Graphics, soit en utilisant un plug-in Tk dans le navigateur, soit en utilisant Java si le plug-in O'Caml est un Java plug-in ou si O'Caml utilise une interface avec Java (voir prochain sujet).

Sécurité
Une applet correspond à un programme source chargé au toplevel (comme avec la directive #use). Il n'y a donc pas de problème sur la sécurité du byte-code engendré dans la mesure où le source d'uen applet est compilé à chaque chargement. Par contre il est nécessaire d'enlever un certain nombre de modules au toplevel pour éviter l'ecriture locale et autres lancements de programme (voir implantation de MMM : http://pauillac.inria.fr/~rouaix/mmm/).

Réalisation d'applets

Selon le nombre de participants à ce projet, il est demandé de développer des applets testant l'implantation et l'intérêt d'un tel outil.

1.2   Interface O'Caml/Java

participants : Perucca Sylvain + Schuck Ryan

Le but de ce projet est de définir et d'implanter une interface entre les langages O'Caml et Java.

Chacun de ces deux langages possède une interface avec C (JNI pour Java et extern pour O'Caml) d'où la possibilité de les faire communiquer avec C. Il existe déjà une interface de bas niveau entre O'Caml et Java : http://caml.inria.fr/archives/200107/msg00009.html.

Le projet se découpe en trois parties :
  1. test de l'interface O'caml/Java existante (camljava);
  2. définition d'une interface de plus haut niveau (classes) avec liens structurels entre classes (extension du langage ou mini-IDL);
  3. réalisation de l'interface entre O'Caml et une API conséquence de JAva comme AWT.

1.3   Mondes virtuels multi-utilisateurs programmables en O'Caml

projet non attribué

Le but de ce projet est de fournir une API O'CAML portable pour la programmation de mondes virtuels multi-utilisateurs et multi-robots. Une première application sera un salon de discussions.

Ce projet comporte 3 phases :
  1. un état de l'art des moteurs de RV et de leurs APIs;
  2. la réalisation d'une API O'CAML;
  3. la réalisation d'une application utilisant cette API.
Etat de l'art
Un premier travail sera d'effectuer un état de l'art des moteurs de réalité virtuelle et de leurs APIs. On s'intéressera particulièrement aux liens suivants : Les modèles 3D et surtout les modèles de communication diffèrent fortement dans ces différentes <<communautés virtuelles>>. On s'attachera aux propositions <<portables>> et facilement interfaçables avec le langage O'CAML via C. On priviligera l'aproche <<langage de communications>> à la SCOL plutôt que l'approche description de scènes animées à la VRML.

Réalisation d'une API
On peut découper cette API en trois parties :
  1. moteur 3D
  2. interface 2D
  3. communications
Il y aura donc deux possibilités : soit de s'interfacer avec une API existante satisfaisante, soit d'en construire une à partir de couches de plus bas niveau.

Les couches basses 3D sont le plus souvent baties sur openGL. Il existe déjà une interface entre openGL et O'CAML, appelée lablgl.

La partie interface 2D risque de ne pas être portable. Dans ce cas, il sera nécessaire de bien la spécifier pour pouvoir l'adapter à d'autres systèles de fenetrage.

La partie communication peut être construite à partir des briques de base de la bibliothèque Unix d'O'CAML, en particulier par les sockets IP et les threads.

Réalisation d'une application
On décrira un salon de discussions entre utilisateurs. Le serveur gèrera les connexions des différents utilisateurs représentés sous forme d'avatars. La navigation à l'intérieur de la scène tiendra compte des objets et des collisions possibles. Il pourra avoir plusieurs salons avec possibilité de passage de l'un à l'autre. Selon la richesse de l'interface la communication textuelle pourra être sonore.

1.4   Composition de contrats financiers

participants : Ferri Alexandre + Tales Wildoph

Ce projet se propose d'implanter la bibliothèque de combinateurs proposée dans l'article ``Composing Contracts: an Adventure in Financial Engineering.'' de Peyton Jones, J-M Eber et Julian Seward (ICFP2000) téléchargeable à l'URL suivante : http://citeseer.nj.nec.com/300237.html.

Ce projet se déroulera en deux temps :

1.5   Portage de la bibliothèque Graphics sous macosX

participant : Douillet Guillaume

La bibliothèque Graphics d'Objective Caml n'est pas portée sous macosX. Pour s'en servir il est donc nécessaire d'ouvrir un serveur X ce qui est dommage vu la qualité de l'interface Aquua.

Il est demandé d'implanter en C/Objective-C les primitives de base de cette bibliothèque et de comparer cette implantation avec la version pour X-Window tournant sur macosX.

Une application intéressante pour tester la qualité de l'implantation est le logiciel de présentation ActiveDVI.

1.6   Bibliotheque pour les jeux reseau a' plusieurs joueurs en O'Caml

participant : Roussel Grégoire

Cette annee plusieurs projets du cours de maitrise POD demandaient de construire des serveurs de jeux a' plusieurs joueurs (Cluedo, Monopoly, Risk, ...). Ce projet demande de factoriser le travail effectue' en développant une bibliotheque facilement réutilisable (foncteurs, classes, ...) pour le développement de ce type d'applications : dans le but de n'écrire que la partie spécifique à chaque jeu.

Une fois cette bibliotheque implantée, vous la testerez sur au moins un jeu tire' des projets de maitrise. Ces projets vous seront fournis. Vous pouvez vous inspirer des exemples fournis sur la page POD :

1.7   interface 2D en openGL

participant : Lucian Bogoin

L'idée de ce projet est de définir une interface 2D basée sur openGL. Il existe une bibliothèque O'Caml avec openGL appelée lablGL : lablgl mais elle utilise Tk pour son interface 2D. Le but est de s'en affranchir.
Il est demandé d'interfacer O'Caml soit directement avec openGL à la manière de lablGL), soit à travers une API 2D utilisant openGL. Cette interface doit au moins répondre aux fonctionalités de la bibliothèque graphics d'O'Caml, mais elle peut aussi apportée d'autres fonctionalités.

1.8   réorganisation de Jaml

participant : Anthony Michaud

Jaml est une interface de la bibliothèque graphics d'Ocaml avec une applet Java. La version actuelle de Jaml permet de lancer une applet Java locale pour communiquer avec une application O'Caml qui utilise la bibliothèque graphics. Chaque ordre graphique O'Caml est considéré comme un ordre envoyé à l'applet Java qui l'exécute. De même un événement Java est envoyé à l'application O'Caml. Un protocole est défini pour les deux sens de la communication.
Le projet consiste à réorganiser cette bibliothèque pour pouvoir :

Les sources actuelles de Jaml seront fournies.

1.9   écriture de modèles de conception en O'Caml

participant : Mokrani Bouzid

Le livre ``Design Patterns'' de Gamma, Heml, Johnson, Vlissides offre une collection de ``modèles de conception'' pour la programmation objet (inspirés de C++ et Smalltalk). On trouve des versions Java de ces modèles dans de nombreux cours de POO ou de Génie logiciel comme à l'URL suivante :

http://dept-info.labri.u-bordeaux.fr/ griffaul/Enseignement/POO/

Le projet consiste à classifier ces modèles en fonction du typage statique à la O'Caml et à écrire les exemples tirés du livre précédents pour un certain nombre de modèles dont en particulier : le modèle observateur, visiteur et l'abstract factory.

Dans les cas oû le downcast objet est nécessaire, il sera possible d'utiliser l'extension cocaml d'O'Caml dont on trouvera la description C l'URL suivante :

http://www.pps.jussieu.fr/ emmanuel/Public/Dev/coca-ml/

mais il faudra justifier l'emploi du downcast.


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