Projets de fin d'études LOG 792 / GTI 792 avec Professeur Michael McGuffin
Si vous faites un projet de LOG 792 / GTI 792 avec moi,
les projets avec lesquels je pourrais vous
aider le plus sont des projets touchant
les interfaces utilisateurs et/ou la visualisation,
ou peut-être des projets qui se concentrent sur
un algorithme non-trivial
(par exemple, un algorithme de calcul numérique,
une simulation,
un algorithme relié à l'intelligence artificielle,
un algorithme génétique,
un algorithme d'optimization,
etc.).
La liste ci-dessous donne quelques suggestions de sujets.
D'autres sujets sont possibles, mais dans tous les cas
c'est à vous
de suggérer un projet et de vérifier avec moi si
c'est acceptable.
Votre projet
doit impliquer un travail de
conception significatif
(soit du côté interface utilisateur,
ou bien du côté des algorithmes et des structures de données
utilisés),
et il faut prévoir un projet d'environ 135 heures
(15 semaines x 9 heures/semaine, ou environ 3 semaines à temps plein).
Ce sera à vous de surveiller les dates limites pour
les livrables associés avec le projet, et de gérer
votre temps de façon appropriée.
Exemples de projets potentiels
Voici une liste de suggestions et d'exemples de projets pour vous inspirer.
-
Une interface pour aider à mieux fureter le web,
peut-être réalisée comme "plug-in" ou
extension pour firefox ou un autre fureteur.
Exemples:
visualiser les chemins suivis et les pages déjà visitées;
ou bien visualiser les pages qu'on pourrait visiter, et les liens entre eux,
en effectuant un "pre-fetch" de ces pages à partir de la page actuelle.
-
Une interface avec une fonctionalité "undo" plus riche
que celle qu'on rencontre dans
les interfaces conventionnelles.
Par exemple, peut-être avec une barre de défilement ("scrollbar")
pour avancer ou reculer dans le temps,
et une arborescence d'états qu'on peut naviguer
au lieu d'une simple séquence linéaire.
- Une interface à interaction gestuelle,
peut-être par souris ou par stylet.
(Si vous voulez utilisez un stylet,
Wacom a des tablettes pour stylets qui coûtent peu cher,
que vous pourriez utiliser comme périphérique d'entrée
si vous voulez:
[ site web ])
- Un tableau blanc électronique,
ou peut-être juste la partie logicielle
d'un tableau blanc électronique.
Exemples de fonctionnalités potentielles:
permettre de défiler et de "zoomer" un espace 2D;
permettre de manipuler ou de réorganiser des dessins avec des gestes;
permettre de sauvegarder des sessions
et d'envoyer des dessins par courriel aux utilisateurs,
permettre de naviguer des archives visuelles de sessions antérieures.
-
Une interface pour visualiser des arborescences
(de fichiers ou d'autres données),
possiblement en 3D.
Exemples pour vous servir d'inspirations:
les "cone trees" en 3D
[ site web ]
[ références ];
Filelight (visualisation radiale d'arborescences en 2D)
[ site web ];
Treemaps (visualisation d'arborescences en 2D)
[ site web ]
-
Une interface pour assister à la création artistique
(de musique, de dessins, d'images ...)
-
Une interface permettant de créer et de modifier des animations.
-
Une interface pour aider à mieux lire et/ou organiser
et/ou visualiser ses courriels, ou ses contacts, ou son calendrier,
ou ses fichiers.
-
Une interface alternative
de bureau virtuel
pour gérer et manipuler
ses fenêtres et/ou fichiers et/ou icônes, peut-être en 3D.
Exemples pour vous servir d'inspirations:
Bumptop (bureau virtuel)
Agarawala+Balakrishnan 2006
[ vidéo ]
[ site web ];
Fold-n-Drop (plier-déposer)
Dragicevic 2004
[ vidéo ]
[ site web ]
-
Une interface pour aider à fureter une collection de musique
(exemple: un ensemble de fichiers mp3).
Exemple pour vous servir d'inspiration:
Pacheco+schraefel 2000
-
Une interface pour visualiser la musique.
Exemple:
Bergstrom et al. 2007
[ site web ]
-
Une interface qui calcule une prédiction du mouvement
de curseur de souris pour, par exemple,
essayer d'aider à sélectionner des boutons virtuels
plus rapidement.
-
Une interface conçue pour enfants
(amusante, avec des gros boutons et un gros curseur,
qui montre comment se servir de l'interface avec des animations, etc.)
-
Une interface qui se sert d'un périphérique
d'entrée non-conventionnel
(exemples: souris avec une douzaine de boutons,
souris avec deux boules qui peut détecter
l'orientation en plus de la position, etc.)
Exemples:
Balakrishnan+Patel 1998,
Balakrishnan et al. 1997
[ vidéo ]
3D Connexion
-
Un babillard en 3D.
Exemple:
[ site web ]
-
Une interface pour visualiser un réseau (graphe) en 2D ou en 3D.
Exemple:
[ site web ]
-
Une interface zoomable ("zoomable user interface", ou ZUI).
Par exemple, une toile virtuelle ou
un espace virtuel qu'on peut naviguer
en défilant et aussi en zoomant.
Exemples:
vidéo,
survol rapide des ZUIs,
Bederson+Hollan 1994,
site web de pad++,
librarie pour développer des ZUIs,
Seadragon,
vidéo
-
Conception et création d'un nouveau widget interactif.
Par exemple,
un menu contextuel dont les commandes ont une disposition
graphique non-conventionnelle
(par exemple: comme dans un menu radial),
ou qui permet d'ajuster des variables continues au lieu
de sélectionner des commandes discrètes
(par exemple: avec des barres de défilement contextuelles "popup").
Exemples pour vous servir d'inspirations:
Fisheye Menu
Bederson 2000
[ site web ]
[ démo java ];
FlowMenu
Guimbretière 2000
[ vidéo ];
Marking Menus (une sorte de menu radial)
Kurtenbach+Buxton 1994
[ recherche google ];
interfaces pour sélectionner des couleurs
ou explorer un espace de couleurs
[ recherche google ]
-
Une interface avec des
"Expanding Targets",
c.-à-d. des boutons qui changent de grosseur
selon la position du curseur:
McGuffin+Balakrishnan 2002,
McGuffin+Balakrishnan 2005
[ démo java ]
-
Une interface pour visualiser et naviguer un objet de 4 dimensions
spatiales.
-
Un jeu.
Exemples:
un jeu de stratégie ou d'action ou autres,
en 2D ou en 3D, pour un joueur ou plusieurs joueurs,
peut-être avec une intelligence artificielle,
peut-être distribué sur un réseau.
-
Une interface pour créer, simuler, entraîner, et évaluer
un réseau de neurones,
et/ou visualiser le fonctionnement d'un réseau de neurones.
-
Un algorithme pour résoudre un casse-tête,
par exemple: pour trouver la solution d'un cube de Rubik ("rubicube").
-
Une interface distribuée sur un réseau. Exemples: un jeu réseau,
une interface (du genre "chat" ou "IM") pour communiquer à travers un réseau,
une interface pour surveilleur un "spider" qui traverse un réseau, ...
-
Un algorithme pour calculer des milliers de chiffres de pi.
-
Un algorithme de compression ou d'encryption.
-
Une simulation d'un écosystème
avec des populations de prédateurs et de proies
qui se chassent, se mangent, se reproduisent, et meurent.
Peut-être visualiser la variation des populations
à travers le temps.
Quelques resources de programmation des interfaces utilisateurs
Java
Petit tutoriel sur les applets Java
Exemples d'applets interactifs en Java
JOGL - permet d'utiliser le OpenGL à partir du Java,
pour créer des interfaces 3D
Java3D - permet de monter des interfaces 3D en Java;
c'est une alternative au OpenGL
JInput - permet d'utiliser, par exemple, deux souris
en même temps comme dans une interface bimanuelle
Échantillon de code source:
SimplePaint
(application de dessin)
C/C++
Conseils, et échantillon
de code source,
pour la programmation 3D en C++ avec OpenGL
Si vous avez besoin d'utiliser des images bitmaps dans votre interface,
j'ai des routines C++
qui permettent de lire des images en format
PPM / PGM / PBM
Des boîtes à outils d'interface ou de widgets:
Qt (compatible avec le OpenGL),
GLOW (utilise OpenGL),
GLUI (utilise OpenGL).
Notez que le Qt ne nécessite pas le OpenGL, et qu'il a des fonctionalités
permettant d'afficher des pages web.
Python
Le Python
représente un avancement technologique par rapport au Java
semblable à l'avancement représenté par le Java par rapport au C++.
Le Python
a plusieurs libraries qui facilitent la création d'interfaces utilisateurs,
la manipulation d'images,
l'interaction avec les boîtes à courriels,
etc.
Si cela vous intéresse, je pourrais vous indiquer plus de resources
et d'informations.