ING2 internship

From LRDE

Propositions de stages pour les étudiants de l'EPITA

Cycle Ingenieur

Enrichissement et stabilisation de Climb.
Dates Septembre/Octobre 2013 - Janvier 2014
Contexte Stage plutôt orienté développement/génie logiciel.
Prérequis Avoir des restes du cours de programmation fonctionnelle. Une connaissance préalable de Lisp et Qt serait un plus.
Descriptif Climb est une bibliothèque de traitement d'image écrite en Common Lisp. Bien qu'encore au stade de prototype, ses fonctionalités sont déjà assez complètes: la bibliothèque fournit notament une batterie d'algorithmes prédéfinis ainsi qu'une interface graphique (Gtk). Le but de ce stage est de stabiliser le projet afin de préparer une première release publique et officielle. Les premières étapes du stage seront les suivantes: (i) Familiarisation avec le langage Common Lisp, afin de pouvoir rentrer dans le projet ; (ii) - Prise de contact avec la bibliothèque et feedback sur son utilisabilité. En plus de se familiariser avec le projet lui-même, l'objectif ici est de faire un rapport détaillé sur vos impressions lors de cette prise de contact, en vue d'une documentation orientée « nouvel utilisateur ». Ce sera également l'occasion de faire vos premières contributions de code, par exemple en démarrant avec des corrections de bugs; (iii) Portage de la bibliothèque pour ECL/EQL. Actuellement, la bibliothèque fonctionne pour SBCL, l'une des implémentations libres de Common Lisp les plus performantes. L'interface graphique ne donne cependant pas entière satisfaction. Le but ici est de porter la bibliothèque à un autre compilateur, ECL, qui a la propriété de générer du code C qui est ensuite compilé au moyen d'une chaîme classique. L'intérêt est de pouvoir ré-écrire l'interface graphique en utilisant EQL, un wrapper Lisp pour Qt, produisant des interfaces dont le look'n feel est natif sur toutes les platformes (Linux, Mac, Windows). Ensuite, les options sont ouvertes. L'on pourra par exemple travailler à rendre la GUI plus dynamique, travailler sur la base de tests, ajouter de nouveaux algorithmes, améliorer les performances des algorithmes existants...
Intérêt pour le candidat Connaissance d'un nouveau langage de programmation dynamique, expérience dans le domaine du traitement d'image et du génie logiciel.
Rémunération 500€ brut/mois
Contact didier@lrde.epita.fr
Lisp pour la conception et le développement de DSLs.
Dates Septembre/Octobre 2013 - Janvier 2014
Contexte Stage plutôt orienté développement/recherche.
Prérequis Avoir des restes du cours de programmation fonctionnelle. Une connaissance préalable de Lisp, Haskell et/ou Scala serait un plus.
Descriptif La conception et l'implémentation des DSLs est un domaine en plein essor. Il existe de nombreuses approches à ce problème, dont l'une consiste à utiliser les capacités d'extensibilité d'un langage de programmation généraliste, pour l'adapter à des besoins spécifiques. De nombreuses approches multi-paradigmes (par ex. langages fonctionnels / méta-programmation à la compilation) offrent également des avantages. Lisp est un langage particulièrement bien adapté à ce type de problématique, mais il est presque totalement absent de la littérature sur les DSLs. En effet, la plupart des chercheurs du domaine ne sont pas (ou plus) familiers avec ce langage, préfèrent une approche basée sur un langage statique, ou encore ont simplement oublié tout ce dont Lisp est capable. Le but de ce stage est de (commencer à) restaurer l'équilibre, en rajoutant Lisp à la littérature comparative. Le travail consistera en l'étude de la bibliographie démontrant certaines approches utiles à la conception de DSLs, de proposer une approche alternative avec Lisp, puis de comparer les résultats obtenus. Les étapes de ce stages seront les suivantes: (i) Familiarisation avec le langage Common Lisp et en particulier avec ses capacités d'extensibilité ; (ii) Prise de contact avec la littérature sur la conception et l'implémentation de DSLs dans d'autres langages ; (iii) Choix d'une approche applicative ou d'un comparatif basé sur cette bibliographie et implémentation d'un équivalent Lispien ; (iv) Finalement, analyse des résultats selon des axes tels que: facilité d'implémentation, expressivité, performances etc.
Intérêt pour le candidat Familiarisation avec plusieurs langages de programmation, dont Lisp, Haskell et Scala. Expérience dans le domaine des DSLs (Domain Specific Languages).
Rémunération 500€ brut/mois
Contact didier@lrde.epita.fr
Lisp pour les statistiques: une alternative à R.
Dates Septembre/Octobre 2013 - Janvier 2014
Contexte Stage plutôt orienté développement / performances.
Prérequis Avoir des restes du cours de programmation fonctionnelle. Une connaissance préalable de Lisp, et/ou R serait un plus.
Descriptif R est un langage de programmation orienté vers les statistiques. De par son développement historique, il possède de nombreuses similitudes avec Scheme (un langage de la famille des Lisps) et aussi de nombreux problèmes: en particulier, c'est un langage qui n'est pas compilé. Le plus gros reproche que ses utilisateurs lui font est par conséquent son manque de performance. C'est d'ailleurs pour cette (mauvaise) raison qu'un certain nombre de fonctionnalités totalement ésotériques lui ont été rajoutées. Le but de ce stage est d'étudier le portage d'une application particulière de R vers un équivalent Common Lisp. Le premier objectif, qui est certain, est d'atteindre un niveau de performance bien supérieur à celui de l'application d'origine. Le but à plus long terme est d'envisager une nouvelle implémentation de R (ou d'un sous-ensemble de celui-ci) au dessus de Common Lisp, avec l'intuition d'aboutir à un système beaucoup plus simple, de bien meilleure qualité et de surcroît beaucoup plus performant.
Intérêt pour le candidat Familiarisation avec un nouveau langage de programmation dynamique (Lisp) et un langage pour les statistiques (R). Note: a priori en partenariat avec un chercheur du CNRS / Paris V.
Rémunération 500€ brut/mois
Contact didier@lrde.epita.fr


Bison : points d'entrée multiples
Dates Septembre/Octobre 2013 - Janvier 2014
Prérequis No mathematical knowledge needed. Good level in C required. C++ is a plus: it will be used, but at a very simple level. Java will also be used (again, limited knowledge will suffice).
Descriptif Bison generates parsers for a given grammar. In some case, one is interesting in parsing different aspects of a grammar (for instance, "parse this expression", or "parse this declaration", or "parse this program"). There is no built-in support for this in Bison. It is however easy to implement. The internship consists in adding this feature in the front-end (i.e., find a means for the user to declare that she wants to have several "entry points"), and in the back-ends (i.e., prepare Java, C, and C++ parsers with the needed support: typically generating a "parse_foo()" function for each "foo" entry-point). There are many other things to develop in Bison, this is just an initial assignment: more will come as the first one is properly addressed.
Pistes possibles (i) Sort the error messages: Bison has several passes, and each pass generates its own error messages. As a result, there is sometimes an error on line 3, then on line 2 and then on line 1. Sort them to issue them in a more natural order; (ii) Colorize the diagnostics: Today compiles such as GCC or clang issue messages in color. Do that in Bison too ; (iii) Optimize the generator parsers: Currently Bison aims at producing small parsers (small tables). It might be interesting to release some of these optimizations (since nowadays we have much more memory available) to see if we gain some speedup. That would result in a -O option, as in compilers (with -Os, -O2, etc.).
Rémunération 500€ brut/mois
Contact akim@lrde.epita.fr
Vaucanson : Testons si deux automates sont isomorphes
Dates Septembre/Octobre 2013 - Janvier 2014
Prérequis Good C++ understanding is needed. There is no need to fully understand how the Vaucanson platform works. Basic understanding of automaton theory is needed too. However some algorithms are most probably tricky to implement, so consider this assignment as quite difficult.
Descriptif The Vaucanson platform aims at providing access to the best existing algorithms on finite automata. To this end, it is needed to compare it to other platforms. This requires: (i) I/O support with other platforms Vaucanson 2 already supports several such formats as output, but input is needed, and maybe more output formats. (ii) A means to compare two automata: To make sure that two implementations of the same algorithm result in the same automaton, one must be able to check that two automata are isomorphic. This is actually not related to automata per se, but rather belongs to graph theory. Several techniques exist (two of which have been implemented in Vaucanson 1). Implement one or several of them; (iii) Benchmarking tools: To compare several tools, we must be able to measure their performances on fammilies of automata. Some generators already exist in Vaucanson 2, other might be interesting to import from Vaucanson 1. Actually, automatic generation of automata would be most useful too. The internship will cover several or all of these tiles. All of them are needed to provide a complete benchmarking tool for automata, yet every individual bit is interesting in its own right. The intern will have to address the various aspects in turn.
Rémunération 500€ brut/mois
Contact akim@lrde.epita.fr
Spot : Traduction de formules de logique temporelle en automates
Dates Septembre/Octobre 2013 - Janvier 2014
Contexte Stage plutôt orienté développement/recherche.
Prérequis Savoir programmer en C++. Avoir apprécié le cours de théorie des langage rationnels (niveau spé).
Descriptif La bibliothèque Spot fournit des algorithmes pour fabriquer un model checker, c'est-à-dire un outil qui sert à prouver que tous les comportements possible d'un système vérifient une propriété donnée. On y trouve entre autres des algorithmes pour traduire des formules de logique temporelle (qui expriment les propriétés) en automates (pour automatiser la preuve). L'une de ces logiques s'appelle PSL (Property Specification Language) et est déjà supportée, mais de façon sous optimale. L'objectif du stage est de réimplementer la traduction de PSL en automates proprement. Cela passe par l'introduction d'un nouveau type d'automate, similaire aux automates non-déterministes du cours de THLR, mais avec des transitions finales au lieu d'avoir des états finaux. Comme il existe déjà une traduction, et que Spot est déjà équippé avec tout ce qu'il faut pour comparer des traductions entre elles, il sera facile de rapidement débugger la nouvelle approche.
Intérêt pour le candidat Rédevelopper une théorie des automates pour un nouveau type d'automates, découvrir les logiques temporelles et leurs applications
Rémunération 500€ brut/mois
Contact adl@lrde.epita.fr