1   Evaluation du module POD - année 2001/2002

Pour tenir compte des remarques sur la charge de travail des étudiants de maîtrise, l'évaluation du module POD de cette année se décompose de la manière suivante :

Pour être dispensé de contrôle continu, il faut le demander aux responsables de la maîtrise.

2   Liste des projets du cours POD - année 2001/2002

Ces projets sont l'application directe des notions vues en cours de POD. Ils demandent d'implanter des applications/applets graphiques et réseau clients/serveurs via des sockets ou en RMI. Les langages d'implantation sont Objective Caml et Java.

Certains projets sont plus rapides à réaliser que d'autres. Il en sera tenu compte a la correction. Sauf indication contraire, chaque projet est à réaliser en binôme. Pour choisir les projets, la règle du bus sera encore une fois utilisée.
Il n'y aura pas plus de 2 groupes sur un même projet.

Présentation des projets : lundi 19 novembre 2001

Mise en ligne : lundi 19 novembre 2001

Modification en ligne : le 22 novembre 2001

Modification en ligne : le 28 novembre 2001

Modification en ligne : le 10 decembre 2001

Pour s'inscrire, envoyez un courrier en cliquant ici et en indiquant dans le corps du message le projet choisi ainsi que les noms et logins des étudiants le réalisant.
Vous pouvez indiquer plusieurs projets qui vous interessent en les classant par ordre de choix.
Suite à ce courrier vous aurez une réponse en moins d'une semaine. S'il n'y a pas de réponse dans ce délai le choix du projet est accepté.

2.1   Services et Outils Système

  1. Poubelle réseau :
    On imagine une poubelle distante à différentes machines et utilisateurs. Quand d'une de ces machines, un utilisateur autorisé efface un fichier, celui disparait effectivement de sa machine, mais est auparavent copie sur le serveur poubelle, qui le conservera tant que l'on ne lui demande pas de se vider. Il est nécessaire de copier la nature du fichier : fichier, lien physiaue, lien symbolique, et de pouvoir copier une hiérarchie complète de fichiers. On peut gérer aussi un niveau de privilèges selon les logins/machines.

    Nombre de projets : 2
    serveur et client en O'Caml
    serveur O'Caml et client Java

  2. Implémentation du protocole DNS en ocaml et exemples proposé par Guillaume Valadon :
    Ce qui consiste à réaliser des classes pour créer des paquets DNS, une classe pour les fabriquer à partir d'une requete DNS classique (ex: ``sieste.org A''). Et l'ensemble des fonctions pour parser les réponses.
    Au final, on aura un ensemble de briques permettant de réaliser des résolveurs, des 'nslookup', voir des serveurs de noms.
    voir :
    ocamlnet sourceforge

    Nombre de projets : 1
    O'Caml

2.2   Clients et serveurs de services existants

  1. Jeu multi-utilisateurs :
    Xpilot (xpilot) est un jeu multi-utilisateurs 2D de combats dans l'espace. Le but de ce projet est de réaliser une version simplifiée (à préciser) des clients en Java ou en O'Caml.

    Nombre de projets : 2
  2. Client du serveur mySQL :
    mySQL est un serveur SQL du domaine public. Le but de ce projet est d'implanter un client O'Caml de requêtes SQL. Pour cela, le client établira une connexion avec un serveur mySQL et autorisera les différentes commandes SQL : Il sera implanté sous forme de bibliothèque. Pour pouvoir généralisée cette connexion au serveur mySQL à d'autres serveurs SQL, on décrira une classe abstraite dont les sous-classes concrètes correspondront aux ``pilotes'' du serveur SQL. On pourra s'inspirer (fortement) de la bibliothèque JDBC de Java.

    Nombre de projets : 1
    1 client O'Caml

2.3   Services de bureautique répartis

  1. Dessiner en groupe :
    On veut utiliser une feuille de dessin commune à plusieurs utilisateurs permettant la construction commune d'un graphique en groupe de manière interactive. On definit pour cela un serveur graphique ou differents programmes peuvent se connecter pour lui envoyer des ordres graphiques. Le but est de pouvoir construire un des sin a plusieurs. Le serveur tiendra a jour la liste des differents ordres graphiques recus (moveto, lineto, ...) et indique à tous les clients l'action effectuee. Chaque client tient à jour une fenetre graphique dans laquelle les autres programmes interviennent. Un client peut demander au serveur toutes les informations pour se réafficher. Un client peut aussi verrouiller un objet graphique pour un certain temps.

    Nombre de projets : 2
  2. Listes de diffusion :
    Majordomo est un programme de gestion automatique de listes de diffusion ( majordomo) écrit en Perl. Le but de ce projet est de réaliser une version simplifiée (à préciser) en Objective Caml ou en Java.

    Nombre de projets : 2
  3. discussions en groupes proposé par Panepinto Bruno et Germain Eric :
    Voici les options retenues au final pour le Tchate elaboré) :
    Nombre de projets : 1
    serveur en O'Caml et client en Java

2.4   Outils pour l'enseignement à distance

  1. gestionnaire automatique de QCM :
    Pour remplir le QCM, chaque étudiant lance un client en lui passant en paramètre son nom (ou tout identifiant unique). Le client ouvre une fenêtre dans laquelle apparaît un QCM avec des questions et des cases à cocher. Le client gère en outre le temps accordé à l'étudiant pour remplir le QCM : au-delà de la durée allouée, il se bloque et transmet au gestionnaire ce que l'étudiant a entré jusque-là.

    Une fois le QCM rempli et soumis, les données entrées par l'étudiant sont envoyées à un serveur qui dépouille le QCM. Lorsque le serveur a reçu toutes les soumissions de tous les étudiants, il remet à destination de chacun d'eux un corrigé et la note qu'ils ont obtenue.

    En outre, il existe un client particulier, l'enseignement, qui peut : Tous ceci, bien sûr, doit fonctionner sur un réseau.

    Nombre de projets : 1
    tout en Java

2.5   Applets et Servlets

  1. Applets en O'CAML :
    Ce projet consiste en l'écriture d'une applet en Objective Caml qui sera utilisée par le navigateur MMM. Un p remier travail sera d'installer l'environnement de développement pour MMM.

    Nombre de projets : 2 en Objective Caml

2.6   Serveurs de jeux de plateau

Les projets de cette section mettent en oeuvre des serveurs de jeux pour pouvoir jouer avec des correspondants distants. Une fois les joueurs connectés, le jeu peut démarrer. Ces projets sont à faire par binôme pour la partie client/serveur. Pour les jeux ``Cluedo'' et ``Risk'' vous pouvez écrire un programme client qui joue de manière non naive et réaliser le projet en trinôme en séparant bien le travail de chacun.

Ne passez pas trop de temps sur les aspects graphiques.

  1. Pictionnary :
    Il faut trouver des noms à partir de dessins. Vous pouvez simplifierles règles comme dans isketch.

    Nombre de projets : 2

  2. Monopoly :
    Comme son nom l'indique, il s'agit d'implémenter un jeu de monopoly en réseau. Le serveur s'occupe de la banque, de la gestion des joueurs et informe chaque joueur (client) de ce que les autres joueurs ont fait. Il autorise aussi les échanges et les ventes de terrain entre joueurs. Vous pouvez lire des infos sur les probabilités du jeu.
    Nombre de projets : 2

  3. Cluedo :
    idem pour ce classique de jeu de déduction (regles).

    Nombre de projets : 2

  4. Risk:
    idem pour ce classique de jeu de conquetes (regles).

    Nombre de projets : 2

  5. Belote: proposé par Loic Guilloux
    idem pour la belote avec un serveur acceptant 2, 3 ou 4 joueurs.
    Nombre de projets : 2

  6. Tarot: proposé par
    idem pour le tarot avec un serveur acceptant 3, 4 ou 5d joueurs.
    Nombre de projets : 2

  7. Uno: proposé par Ivan SKRABO,Jerome LUN-SIN et Steve Azriel
    idem pour le jeu UNO avec un serveur acceptant 2, 3, 4 ou plus de joueurs.
    Nombre de projets : 1

2.7   Clients pour serveurs de jeux d'action rapide

  1. Tetris
    récupérer une applet Java de Tetris sur le web, l'encapsuler dans un serveur, et faire un client qui joue, si possible pas trop mal.

    Nombre de projets : 1
    tout en Java

  2. Asteroid
    idem pour le jeu Asteroid
    Nombre de projets : 1
    tout en Java

2.8   Simulation

  1. Mini simulateur boursier :
    Le projet se compose d'un serveur qui gère le cours de quelques actions et de clients qui gèrent chacun un portefeuille et cherchent à maximiser leur profit à coup d'ordres d'achat et de vente.

    Nombre de projets : 2
    tout en Java
    serveur O'Caml et client Java
  2. bataille de robots :
    Dans ce jeu, les utilisateurs (clients) s'inscrivent sur un serveur. Ils programment alors leur robot (grâce à un langage relativement simple (voir battle robot) où les robots peuvent se déplacer ou tirer sur les autres) et envoient cette configuration au serveur. Ce dernier organise alors les combats entre les robots des differents clients (classement, etc). Les clients peuvent en outre visualiser sur leur écran le combat de leur robot.

    Nombre de projets : 3

2.9   Coopération et Concurrence

  1. Robots footballeurs
    En reprenant la bibliothèque déjà écrite en projet d'année de maîtrise qui permet de communiquer avec un le serveur de RobotCup, écrire une stratégie pour une nouvelle équipe et tester la avec l'ancienne.
    On pourra donc comparer son équipe avec une équipe déjà écrite.
    Nombre de projets : 2

2.10   Calcul distribué

  1. Ray-tracing distribué :
    Reprise du concours de programmation de la conférence ICFP 2000 en implantant une version répartie de l'algorithme de Ray-tracing. L'idée est de répartir le calcul sur des clients légers, dans l'esprit du seti@home. L'image est engendrée à la fin sur le serveur. Comme pour ICFP, il y aurait plusieurs niveaux de ``finalisation''.
    Voir cours de maitrise `` méthodes parallèles en Imagerie et en optimisation''

    Nombre de projets : 1
    tout en O'Caml

  2. Répartition d'algorithmes génétiques :
    Un code Java permettant de faire tourner des algorithmes génétiques (avec un exemple et une documentation) est disponible à l'adresse : Genetic Le but de ce projet est de distribuer le fonctionnement de cet algorithme génétique de la façon la plus transparente possible. A priori, on utilisera RMI. Une piste simple consiste à distribuer les évaluations des différents individus au sein de la population.

    Nombre de projets : 1
    en JavaRMI

2.11   Graphisme 3D

  1. Labyrhinte 3D :
    Le but de ce projet est de réaliser un serveur de labyrinthes (prédéfinis et/ou aléatoires) sur lequel des clients vont se connecter pour essayer de trouver la sortie. Plusieurs clients peuvent se connecter en même temps sur un même labyrhinte. Des obstacles ou d'autres clients peuvent entraver la progression d'un client. Les clients visualisent les labyrinthes en 3D. Ceux-ci peuvent être décrit par un plan ou un volume. Les liens suivants pourront vous aider à réaliser ce projet :
    Labyrinthes
    Maze
    Mazed
Nombre de projets : 2

2.12   Extensions de langages

  1. Persistants en O'CAML :
    On veut implanter un mécanisme d'objets persistants en O'Caml en respectant les contraintes de typage. Pour cela on utilisera l'extension coca-ml qui permet de ``down''caster des objets O'Caml. La premiere étape sera d'étendre les fonctions du module Marshal pour pouvoir écrire l'état d'un objet et de pouvoir le relire en lui associant la table de méthodes de sa classe de construction puis de le caster vers sa classe d'origine. Ce mécanisme fonctionne pour des valeurs relues par le même programme. Une deuxième étape est de construire une clé de la classe qui ne dépend pas du programme de création.
    Nombre de projets : 1
    en O'Caml

2.13   Votre proposition

Si vous avez un sujet qui se rapproche des thématiques rencontrées ici, vous pouvez aussi le proposer en adressant un courrier en cliquant ici en le détaillant précisemment. Ne commencez pas à travailler dessus sans confirmation.

3   Rendu de projet

Vous rendrez au plus tard le vendredi 18 janvier 2002 à la scolarité un rapport contenant une brève description générale du problème, une description de la hiérarchie de classes utilisées, des principaux algorithmes et des protocoles de communications, un listing commenté, un petit manuel d'utilisateur et des jeux d'essai. Pour pouvoir tester votre programme il est demandé d'installer, dans un catalogue de votre compte sur les machines Linux de l'UFR,les binaires et les sources du projet.
Il est indispensable que vos programmes puissent se compiler et s'exécuter dans l'environnement Linux des machines de l'UFR.
Attention : il n'y aura pas de délai à la remise de projet. Quand vous aurez rendu votre projet, envoyer un courrier en cliquant ici et en indiquant dans le corps du message le projet effectué avec les noms et logins des étudiants l'ayant réalisé ainsi que le catalogue du projet sur les machines de l'UFR.

4   Choix des étudiants

au 17 décembre 2001 il y a 117 inscrits. Les étudiants dispensés de contrôle continu peuvent prendre un projet qui sera corrigé mais qui ne comptera pas dans la note finale.

Date auteur1 + auteur2 sujet statut rendu le
BOGOIN Lucien (p6mip140)   Dispensé  
  BOUDARD Eddy (p6mip non inscrit)   Dispensé  
  GOMES Pedro (p6mip205)   Dispensé  
  KESKES Taoufik (p6mip119)   Dispensé  
  PERIC Boban (p6mip199)   Dispensé  
19/11 LAGOGUEY Nicolas (p6mip017) Monopoly (Java Rmi) OK  
19/11 LIPORI Guiseppe (p6mip177) + PISCOZZI Massimiliano (p6mip192) Robotcup (JAVA) OK  
19/11 GUILLOUX Loic (p6mip020) + STERMANN Fabien (p6mip021) Belote (serveur O'CAML, client Java) OK  
19/11 JOBERT Luc (p6mip004) + RASHID Maliha (p6mip202) Risk (serveur O'Caml - client Java) OK  
19/11 LIU SING Laurence (p6mip162) + LEVY Brice (p6mip185) Dessiner en Groupe langage à preciser  
19/11 METCHTAOUI Fahim (p6mip007) + LATI Pierre (p6mip065) Dessiner en groupe (serveur O'Caml / client Java) OK  
20/11 PETIT Patrice (p6mip019) + FERRY Sébastien (p6mip23) Bataille de robot (Java) OK  
20/11 SRITI Mohamed Foued (p6mip063) client mySQL OK  
20/11 CHANDEZON (p6mip025) + POTOK (p6mip026) Cluedo (serveur O'Caml + client Java) OK  
20/11 GAINVILEL Nicolas (p6mip146) + LAUVERJAT (p6mip197) Risk (Java RMI) OK  
21/11 BOUCAUX Julien (p6mip112) + BOUZID Mokrani (p6mip108) QCM OK  
21/11 DELAbARRE Matthieu (p6mip114) + PLOQUIN Marianne (p6mip083) Pictionrary (Ocaml et Java) OK  
21/11 RIVIERE D'AULNAY Stephanie(p6mip130) +REVEILHAC Damien(p6mip131) QCM OK  
21/11 CHIKHI Ajalil (p6mip075) + DECAMP Julien (p6mip094) Simulateur Boursier (Java) OK  
21/11 VRETOS Nicolas (p6mip158) + JANOWSKI Erix (p6mip159) LAB 3D (Ocaml open GL) OK  
21/11 DUCLOS Nicolas (p6mip126) + TORRES Xavier (p6mip064) QCM OK  
21/11 PISKORZ Simon (p6mipZZZ) + MAURER Romain (p6mipZZZ) LAB 3D ( Ocaml OpenGL) OK  
21/11 GRANGE Gaelle (p6mip085) + HASSAN Adeline (p6mip082) Simulateur boursier (Java) OK  
21/11 DEGUY Ludovic (p6mip055) + ZHU You (p6mip057) + EDOUARD Gregory (p6mip058) Cluedo (O'CAML et Java) + joueur OK  
21/11 ROUSSEL Gregoire (p6mip144)   à préciser  
22/11 BARIC Boris (p6mip165) + ROCH Aurelien (p6mip160) Risk (serveur O'Caml + client Java) OK  
22/11 MORALES Myriam (p6mip127) + PORTAL Philippe (p6mip127) Pictionnary (Java RMI) OK  
22/11 ABOULKHEIR David (p6mip034) + MOCQUAIS Olivier (p6mip090) Pictionnary (Java RMI) OK  
22/11 DASINI Olivier (p6mip024) + ROMIL Antony (p6mip092) Tetris ou asteroid OK  
22/11 BENSAI Idir (p6mip109) + BENFATHALLAH Malek (p6mip147) Pictionnary langage à préciser  
22/11 LY Nathalie (p6mip117) + GEDON Sarah (p6mip142) poubelle réseau O'Caml OK  
22/11 GUILBAUD Martin (p6mip218) + GUILLAMET Philippe (p6mip216) Simulateur Boursier (serveur O'Caml/client Java) OK  
22/11 BAUMONT Jeremy (p6mip027) Robotcup (Java) OK  
23/11 LY Dong Minh (p6mip012) + HUY Serey (p6mip111) LAB 3D (JAVA 3D) OK  
23/11 DA SILVA Paulo (p6mip107) + DAHMANI Fahrid (p6mip156) Dessiner en groupe (O'Caml/JAVA) OK  
23/11 PACANOSKI Romain (p6mip080) Ray tracing distribué OK  
23/11 PALLU DE LA BARRIERE Romain (p6mip173) + HOFT Julien (p6mip102) Monopoly (Java RMI) OK  
23/11 MARQUES-ANTUNES Pedro (p6mip009) + FERRI Alexandre (p6mip053) Pictionnary (serveur O'Caml / client Java) OK  
23/11 ORSET Jean-Marie (p6mipXXX) + DONTENWILL Timothee (p6mipYYY) bataille de robots ((serveur P'Caml/client Java) OK  
23/11 MOULIN Vincent (p6mip046) + VAZ Lionel (p6lip115) Bataille de robots (Java) OK  
23/11 RAZAFIMBOLA Andry (p6mip120) + SUOS Oudom (p6mip008) Poubelle réseau (O'Caml) OK  
23/11 VALADON Guillaume (p6mip203) + LETELLIER Emmanuel (p6mip124) service DNS en O'CAML OK  
25/11 RANAIVO Harris (p6mip030) + LE BRETON Sebastien (p6mip067) Robovup (O'Caml) OK  
26/11 LANGOU Thierry (p6mip103) Monopoly (O'Caml/Java) OK  
26/11 SCHUCK Ryan (p6mip047) + PERUCCA Sylvain (p6mip048) Dessiner en groupe (serveur O'CAML/client Java) OK  
26/11 FONG Boun-Long (p6mip089) + PERNOT Florian (p6mip088) QCM (sevreur O'Caml + client Java) OK  
26/11 BRULE Julien (p6mip152) + HUETZ Chloe (p6mip145) Bataille de robots (Serveur O'Caml/ client Java) OK  
26/11 MATIL Malika (p6mip093)   à préciser  
26/11 BOUCHA Amachtouh (p6mip002) + BAKIRI Nawel (p6mip178) Poubelle reseau (serveur O'Caml) + client Java OK  
26/11 CODRY Pascal (p6lip109) + GRAS Nicolas (p6lip108) Monopoly (Ocaml/Java) OK  
26/11 TALES Wildoph (p6mip059) + LE THERY Remi (p6mipOOO) Monopoly (serveur o'Caml, client Java) OK  
26/11 HOUENONTIN Antoine (p6mip069) + BAH Mariane (p6mip010) Simulateur Boursier (serveur O'Caml + client Java) OK  
26/11 RUFFIE Violaine (p6mip155) Stonehenge (O'Caml + MMM) OK  
26/11 BENOIST Arnaud (p6mip042) + LUCOT Matthieu (p6mip018) Tarot (serveur O'Caml/client Java) OK  
26/11 MICHAUD Anthony (p6lip124) + CONTAT Xavier (p6mip079) Belote (Java RMI) OK  
26/11 RUDY Sicard (p6mip003) + CESSAC Xavier (p6mip072) PtoP à préciser  
27/11 SKRABO Ivan (p6mip040) + AZRIEL Steve (p6mip045) + LUN-SIN (p6mip005) Uno (serveur O'Caml + client Java + joueur ) OK  
28/11 PISKORZ Simon (p6mip118) + MAURER Romain (p6mip134) Arenes (Ocaml OpenGL) OK  
28/11 MIMOUM Laetitia (p6mipZZZ) Pictionary (tout en O'CAML)    
28/11 ZINOVIEFF Nicolas (p6mip138) Majrodomo (Java) OK  
29/11 AL JAMMAL Mohamed (p6mip169) + GABISON MykaCel (p6mip116) Worm 3D (Java) à préciser  
30/11 PANEPINTO Bruno (p6mip029) + GERMAIN Eric (p6mip100 ) Discussions en groupes (ocaml/java) OK  
1/12 LEBORGNE Nicolas (p6mip011)      
4/12 PEJCIC Nikola (p6mip154) + TAGUET Aurelie (p6mip153) Simulaiton ou jeu à preciser
11/12 HOUNPONOU Jose-Marie (p6mip050) + TECHEC Cedric (p6mip051) mySQL ou ray-tracing (Ocaml) OK  
14/12 KROHN Jean-Baptiste (p6mip066) Majordomo (Java) OK  
 

Vérifiez que votre nom apparait bien dans cette liste une fois inscrit à un projet. En cas d'erreur envoyez moi un courrier en cliquant ici.

5   Outils pour le développement des projets

5.1   Objective Caml 3.0 et outils

Objective Caml 3.0 est installé sur mon compte. Les commandes se trouvent dans le catalogue suivant :

/Enseignants/chaillou/usr/local/bin
ajoutez le à votre PATH pour les lancer.

La bibliothèque camltk416 est compilée et installée dans le catalogue des bibliothèques ocaml :

/Enseignants/chaillou/usr/local/lib/ocaml
Le navigateur mmm est lui aussi installé. N'hésitez pas à surfer en O'Caml.

/Enseignants/chaillou/usr/local/bin/mmm
Pour le lancer :

mmm -fast
Enfin lablgl, l'interface avec openGL est elle aussi installée.

/Enseignants/chaillou/usr/local/bin/lablgl
Pour le tester lancer :

lablgl -labels example.ml
sur les exemples fournis.

Vous avez des docs et des exemples dans le catalogue :

/Enseignants/chaillou/usr/local/doc

5.2   Travail en groupe avec CVS

Pour le travail en groupe (à partir de 2) et à distance, il est conseillé d'utiliser CVS pour la gestion des sources. CVS est installé sur les machines du centre de calcul enseignements.

Vous trouverez aux liens suivants des informations s'y rapportant :

site tres complet sur CVS

une intro

C'est vraiment une bonne méthode si vous travaillez en binôme à distance (un à la montagne, un autre au quartier latin). Chacun travaille sur sa copie locale et met à jour l'archive commune quand il le désire.
Ce document a été traduit de LATEX par HEVEA.