Recrutement étudiantes et étudiants
Je suis toujours ouvert à accueillir et superviser des étudiants pour un stage (bac/licence/école d’ingé.) ou un travail de recherche (maîtrise/doc/etc.).
Les projets disponibles sont aux niveau fondamental et/ou niveau appliqué, selon les intérêts des candidates et candidats.
Profil recherché
- Être à l’aise avec la programmation
- Capacité de travailler en équipe
Appui financier
Actuellement, tous mes fonds de recherche sont déjà engagés. Il est toutefois possible de trouver des emplois sur le campus (démonstrateur par exemple) ou de candidater aux bourses.
Un appui financier pourrait être offert selon le sujet ou le domaine par des diverses unités de recherche du département.
Le CRSNG et le FQRNT offrent également des bourses d’excellence aux étudiantes et d’étudiants ayant un excellent dossier académique et un bon potentiel pour la recherche.
Sujet de stage ou de recherche
Thématiques de recherche ou de stage
- Développement de compilateurs/interpréteurs/machine virtuelles
- Analyse de programmes (y compris pour la recherche de vulnérabilités)
- Étude, spécification et implémentation de langages de programmation
- Extension de langage de programmation
- Analyses lexicales et syntaxiques
- Développement de DSL
- Systèmes, programmes et langages à objets
- Développement de bibliothèques
- Programmation en général
- Génie logiciel en général
- Informatique système en général
Projets logiciels
Ces projets logiciel peuvent servir de support à des travaux de recherche ou de stage.
- le langage Nit : un langage à objets riche statiquement typé
- le langage Pharo : un langage à objets expressif dynamiquement typé.
- le simulateur RISC-V RARS : un simulateur pour l’architecture matérielle RISC-V.
Tout projet logiciel libre d’envergure (gcc, clang, etc.) est bien évidemment acceptable comme support.
Quelques idées de sujets de recherche
- Exploitation automatique Java via désérialisation. Détecter les points de désérialisation contrôlables par l’utilisateur. Extraire des gadgets utiles. Combiner les gadgets pour construire un exploit.
- Analyse symbolique en Nit, Pharo ou RISC-V. Extendre un outil existant (comme angr) ou développer d’une solution ad hoc. Valider l’analyse en détectant des bogues dans des sous-systèmes spécifiques (allocateur mémoire, etc.)
- Énumération en Nit. Spécifier une syntaxe et une sémantique. Implémenter dans l’interpréteur et les compilateurs. Valider en adaptant le code existant et via des programmes d’exemple.
- Analyse de types en Nit ou Pharo. Étudier le langage considéré. Développer des analyse de type permettant de construire des graphe d’appels. Valider en améliorant un système de complétion, en détectant des bogues ou en appliquant des optimisations plus agressives.
- Complétion de code en Pharo via un LLM. Effectuer un réglage fin (fine tuning) d’un LMM de code existant pour Pharo. Mettre en œuvre la solution dans l’environnement Pharo. Valider l’utilité de complétion pour les programmeurs humains.
- Analyse lexicale et syntaxique modernes. Capitaliser sur les avancées de SableCC4 et NitCC. Développer un outil utilisable dans la vrai vie. Note: malgré son age, l’analyse lexicale et syntaxique à toujours besoin d’amour.
- Langage d’optimisation linéaire Concevoir un DSL pour la description de problèmes d’optimisation linéaire. Valider, transformer et optimiser des programmes dans langage. Générer l’entrée attendue pour différents solveurs comme Gurobi ou GLPK.
Contactez-moi pour en savoir plus.
Vous pouvez consulter la liste des étudiants actuels et anciens pour avoir des aperçus de sujets proposés. Une vidéo (et les diapos) d’un « mercredi recherche » est aussi disponible.
Candidature
Je reçois beaucoup de demandes génériques d’étudiants qui n’ont que peu de rapport avec mon domaine (envoi massif, limite spam).
Si vous souhaitez travailler avec moi sur l’un des thèmes de recherche proposés, la meilleure façon de prouver votre intérêt est de montrer vos capacités est de développer pour Nit, en Pharo ou RARS et d’envoyer une contribution minimale au projet.
Par exemple, pour Nit
- Lisez la documentation du projet
- Créez-vous un compte sur github. Vous pouvez ensuite forker et starer le projet
- Lisez les règles de contribution
- Programmez quelque chose. Vous pouvez, par exemple, jeter un œil aux issues newcommer qui regroupe des taches réalisables par des débutants dans le langage.
- Proposez votre contribution via une demande d’intégrationdans github.
Contact
N’hésitez pas à me contacter à privat.jean@uqam.ca où à passer me voir à mon bureau.
Attention, Donc, si vous souhaitez m’envoyer un courriel, plutôt que de venter les mérites internationaux de mon université/faculté/département, indiquez quels sont les domaines/sujets qui vous intéressent.
Truc et astuce: si vous m’envoyer un courriel indiquez la phrase « J’aime la programmation » dans le corps de votre message afin de prouver que vous avez lu cette page et de contourner le filtre anti-spam.