Projets de MaîtriseProjets de MaîtriseAnnée 98-99



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 un ou deux étudiants et sont 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.



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  Bibliothèque IPv6

La nouvelle norme pour le protocole Internet s'appelle IPv6. Elle permet principalement de s'affranchir du nombre limité d'adresses IP et permet de gérer des priorités. Le but de ce projet est de réaliser une bibliothèque OCAML (à la manière de la bibliothèque Unix) pour utiliser dans son langage favori le protocole IPv6. Le principal travail est donc un interfaçage avec les primitives Ipv6, écrites en C. Une partie de ce travail est déjà réalisé.

1.2  Graphisme via une applet Java

Ce projet consiste à pouvoir interagir graphiquement entre une application OCAML et une applet Java. L'idée est de réécrire la biibliothèque Graphics d'OCAML 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 OCAML. 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 pour le téléchargement de l'applet avec l'information sur les prises de communication. Différents jeux de test seront fournis.

1.3  Pilotes pour serveur SQL

Le but de ce projet est de fournir, à la manière de JDBC, une classe abstraite pour les pilotes de serveur SQL ainsi que les pilotes spécifiques pour PostGRES (ou mySQL). .

1.4  OCAML Flight

OCAML Flight est une extension data-paralèlle d'OCAML. 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), un calcul distant (GET(num,expr)). Les machines communiquent via un protocole.

Le but de ce projet est de modifier l'implantation d'OCAML en utilisant la nouvelle bibliothèque Marshalling pour simplifier l'implantation.

1.5  Persistants

Ce projet consiste à faire des persistants OCAML texte, c'est à dire de pouvoir stocker dans un fichier n'importe quelle valeur OCAML, et de pouvoir la relire par la suite. Pour cela il est demandé de construire l'expression OCAML la plus simple correspondant à la valeur désirée. On distingue les valeurs non fonctionnelles des valeurs fonctionnelles. Dans le premier cas, la difficulté provient des valeurs circulaires. On utilisera alors une déclaration récursive de valeurs. Le deuxième cas vient des valeurs fonctionnelles. Il est demandé alors de conserver des informations du source du programme pour reconstruire la valeur fonctionnelle en fonction de son environnement. L'application directe permet de construire des persistants, quitte à faire une coercion de type pour la lecture. Le chargement de la valeur vient avec un ``load''.

1.6  Typage dynamique

L'intérêt de la reconstruction dynamique du type de valeurs ML survient dès que l'on veut traiter des valeurs dont le type statique est polymorphe ou des valeurs qui n'ont pas été typées par le programme en cours d'exécution. Le premier cas est rencontré, dès que l'on veut ``tracer'' une fonciton polymorphe. Actuellement le mécanisme de trace de ML ne sait pas afficher les

valeurs des paramètres. Le deuxième cas arrive avec les persistants (output_value et input_value) où l'on ne connait plus le type de l'expression sauvée, ce qui nécessite une coercion manuelle qui peut s'avérer dangeureuse. Dans ce cas, il est utile d'avoir une coercion de type sûre, déclenchant une exception dans le cas où la coercion est fausse. Ce type dynamique peut aussi s'avérer utile si les types font partie du langage en autorisant un filtrage de motif sur le type dynamique des valeurs.

Le mécanisme proposé ajoute lors de la construction des valeurs une information de surface du type de la valeur ce qui permettra de reconstruire un type dynamique complet si nécessaire.

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  Module pour jeux`a 2 joueurs

En reprenant le module minimax-ab développéen O'CAML, il est demandéde porter celui-ci en SCOL sous forme de DMS, et de faire une application de jeux à2 joueurs (par exemple le jeu Stone Henge).

Cette application doit pourvoir soit êetre un arbitre entre deux personnes, soit jouer contre un joueur humain ou une autre machine SCOL.

Il est demandéune représentation en 2D (ou 3D) du jeu.

2.2  Robots dans la cour de récréaion

En reprenant un des sujets OCAML donné comme premier projet de POD, il est deamndé d'écrire une application SCOL pour un des jeux de cours proposés. L'idée là aussi est de pouvoir faire joueur des machines SCOL ou des joueurs humains.

Ce projet est à effectuer en utilisant le projet d'année du DESS GLA sur la réalisation d'un module distribué pour les agents autonomes. Pour cela contacter Lionel ROCHE (roche@gla.ecoledoc.lip6.fr). La difficulté venant de la détection des collisions entre robots.

2.3  Jussieu virtuel

En s'aidant de l'éditeur de sites fourni par CRYO, il est demandé de réaliser une description 3D du campus Jussieu. Ce monde peut être réalisé à la main ou par programme. Il est demandé d'autre part une liaison avec une base de donnéés (en utilisant l'API SQL de SCOL) pour indiquer les localisation des membres de l'UFR dans le monde. Selon le temps disponible, un agent d'accueil peut aussi être développé (en utilisant le DMS du projet GLA), qui permet de conduire l'utilisateur à une destination.

3  Applications Java

3.1  Programmation visuelle de contraintes

La programmation par contrainte est un paradigme de programmation déclarative. Il permet le développement d'applications de haute complexitéet le prototypage. Un programme est un ensemble d'équations, linéaires ou non, et d'inéquations entre variables appartenant àdes domaines (finis ou non) de valeurs. L'exécution d'un programme fournira si elle existe au moins une solution àces équations. Prenons l'exemple du jeu arithmétique suivant :
            S E N D 
          + M O R E 
          ---------
          M O N E Y 
oùchaque variable lettre a une valeur comprise entre 0 et 9, et sont toutes différentes. On écrit ce problème par la suite d'équations suivantes oùles Ri correspondent aux retenues. :
  D + E = Y + 10*R1
R1 + N + R = E + 10*R2
R2 + E + O = N + 10*R3
R3 + S + M = O + 10*R4
R4   = M
Ce système a pour solution : (S=9, E=5, N=6, D=7, M=1, O=0, R=8, Y=2).

L'intérêt de la programmation par contraintes est d'offrir une nouvelle modélisation àdes problèmes de grande complexité. Elle s'applique bien aux problèmes de gestion du temps, des ressources, de planification et d'ordonnancement, mais aussi àdes problèmes d'optimisation, de cohérence de l'information. d'ordonnancement des taches, ...

L'intérêt de la programmation visuelle de contraintes est de s'affranchir de la syntaxe de différents langages en donnat une syntaxe graphique. La programmation visuelle est en règle générale peu compatible avec la rapiditéde développement mais apporte un outil pédagogique pour la programmation. Le cadre de la programmation par contraintes est différent dans la mesure oùce type de programmation peut apporter une réelle facilitéde développement et des outils de mise au point visuels. Une syntaxe de programmation visuelle de contraintes a étéproposée dans l'article [Visual97] .

Ce projet consiste àécrire en Java un éditeur graphique structurépour la description des contraintes avec une gestion de bibliothèque et àpouvoir engendrer du code soit pour le systeÁme Calypson, développéaÁ l'Inria, soit directement en Java, dans le but dans les deux de l'exécuter ensuite.


This document was translated from LATEX by HEVEA.