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é.
- Connaissances préalables : langages OCAML, interface OCAML-C
- Documents : IPv6 : théorie et Pratique - Gisèle Cizault - O'REILLEY - 1998
- Nombre d'étudiants : 1 étudiant (une partie du code est déjà écrite)
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.
- Connaissances préalables : langages OCAML, Java, HTML, HTTP
- Documents : biliothèque graphics d'OCAML, l'AWT de Java, protocole HTTP
- Nombre d'étudiants : 2 étudiants
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).
.
- Connaissances préalables : langages OCAML, Java, JDBC, SQL
- Documents :
- Nombre d'étudiants : 1 étudiant
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.
- Connaissances préalables : langages OCAML
- Documents : .C. Foisy and E. Chailloux.
Caml Flight: a portable SPMD extension of ML for distributed memory multiprocessors. In A. W. Bohm and J. T. Feo, editors, Workshop on High Performance Functionnal Computing, Denver, Colorado, April 1995. Lawrence Livermore National Laboratory, USA.
- Nombre d'étudiants : 1 à 2 étudiants
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''.
- Connaissances préalables : langages OCAML
- Documents : sources OCAML
- Nombre d'étudiants : 1 étudiant, ou 2 si la partie fonctionnelle
est implantée.
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.
- Connaissances préalables : langages OCAML
- Documents : sources OCAML,
E. Chailloux, P. Manoury, B. Pagano ``Types behind the mirror :
a proposal for partial ML type reconstruction at runtime'', TIC97
- Nombre d'étudiants : 1 étudiant, ou 2 avec applications développées
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.
- Connaissances préalables : langages CAML, programmation graphique
- Documents : Tutorial SCOL, API 2D SCOL
http://www.cryo-networks.com
- Nombre d'étudiants : 1 étudiant ou 2 étudiants pour 2 jeux.
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.
- Connaissances préalables : langages CAML, programmation graphique
- Documents : Tutorial SCOL, API 2D SCOL: http://www.cryo-networks.com
rapport de projet de Lionel Roche (remis fin avril)
- Nombre d'étudiants : 1 étudiant ou 2 pour 2 jeux.
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.
- Connaissances préalables : langages CAML, programmation graphique
- Documents : Tutorial SCOL, API 2D SCOL: http://www.cryo-networks.com
rapport de projet de Lionel Roche (remis fin avril)
- Nombre d'étudiants : 1 étudiant ou 2 avec agent de présentation
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.
- Connaissances préalables : langages Java, Prolog
- Documents : Article sur les contraintes visuelles "A Visual Language for Constraint Programming - E. Chailloux et P. Codognet - Visual 97"
Doc Calypso : ftp://ftp.inria.fr/INRIA/Projects/loco/clp_fd/
- Nombre d'étudiants : 2 avec la partie génération de code
This document was translated from LATEX by HEVEA.