Dans le cadre de ma formation à l'Utbm j'ai été amené à réaliser des projets dont voici la liste plus ou moins exhaustive. Cette liste est classée par Unité de Valeurs (Uv dans le jargon de l'école, par ordre anti-chronologique).

(Cv disponible ici : fr_cv.pdf)

Les uvs obtenues avec ?? sont en "cours d'obtention"..


Sixième (et dernier) Semestre (GI06, Printemps 2011)

ST50 - Projet de Fin d'étude - Durée 6 mois (du 7 Février 2011 au 22 Juillet 2011)

(Uv obtenue avec ??)


Cinquième Semestre (GI05, Automne 2010)

TR54 (Modélisation et commande des systèmes temps-réel)

=> UPPAAL, Réseau de pétri
=> Projet sur NXT

(Uv obtenue avec ??)

IA54 (Systèmes multi agents et résolution distribuée de problèmes)

=> Conception de Systèmes Multi Agent
=> Projet : Utilisation de la plateforme multi agent janus

(Uv obtenue avec ??)

IN54 (Reconnaissance des formes)

=> Outil mathématique de l'image (Logique flou, etc..)
=> Utilisation de Pandore, traitement d'image, reconnaissance de formes, etc..
=> Projet avec Pandore.

(Uv obtenue avec ??)

AG51 (Algorithmiques avancées)

=> Complexité des algorithmes, et algorithmes avancés

(Uv obtenue avec ??)

RE51 (Algorithmiques distribuées et protocoles)

=> Découverte des Algorithmes distribués.
=> Utilisation massive de openMPI.

(Uv obtenue avec ??)


Quatrième Semestre (GI04, filière LEIM Printemps 2010)


A la fin du stage (ST40, GI03), il nous est demandé de choisir une spécialisation en Informatique. J'ai choisi la filière LEIM pour : Logiciels Embarqués et Informatique Mobile.

TX52 (Travaux de Laboratoire)

Dans notre cursus à l'UTBM, nous avons le choix de prendre des matières dites hors emploi du temps. Celles-ci sont organisées de la manière suivante : L'étudiant choisit un sujet de travail au début de l'année, et se fait suivre par l'enseignant, auteur et responsable du sujet. L'étudiant travaille ensuite seul ou en binôme sur le sujet et contacte régulièrement son responsable sur l'avancement du sujet. L'étudiant est finalement noté sur un rapport et une soutenance en fin de semestre.

J'ai donc choisi, avec un binôme (Julien Moine), un sujet en relation avec ma filière, celui-ci a pour intitulé : "Mise en place d'une chaîne de compilation et réalisation d'un «SlideShow» pour une carte embarquée Embest (Sbc9261)"

Concrètement, il fallait faire un état de l'art de ce qui était présent et ce qui fonctionnait sur la carte, puis refaire un système adapté aux besoins du sujet (ici, le slideshow, application lancée automatiquement à la connection de périphériques USB). La carte était dotée d'un petit écran LCD.

Nous avons beaucoup travaillé dans un premier temps dans la recherche d'information, pour faire un point sur les techniques open source de génération et compilation de systèmes embarqués, puis nous nous sommes focalisés sur l'utilisation de buildroot.

Un travail conséquent a été de configurer le noyau Linux. La carte embarqué ne disposait pas d'un support officiel dans Linux et nous avons retrouvé dans la documentation de la carte, des sources d'un 2.6.24 modifié. Nous avons donc choisi de porter ces sources vers un noyau récent (à l'époque 2.6.32). Cela nous a permis d'approcher le développement noyau des architectures ARM. Le travail n'a pas été fait jusqu'au bout, des périphériques ne marchant plus d'un noyau à l'autre (L'écran LCD par exemple). Cependant, cela nous à permis d'aborder, la gestion actuelle des architectures ARM dans le noyau Linux (Plus d'informations dans le rapport).

IMG_0014.JPG

L'application slideshow a été réalisée en C++ avec qt (Après de longue discussion et de test sur l'intégration ou non de qt embedded dans notre systeme final).

Les objectifs de la TX ont été remplis, le rapport est disponible ici:  TX52_Rapport.pdf ainsi que le support de soutenance : TX52_Presentation.pdf.

(Uv obtenue avec B)

LO52 (Logiciels embarqués et communications courtes portées)

Cette unité de valeur est peut-être la plus importante de la filière LEIM car elle aborde une grande variété de thèmes concernant l'informatique embarquée.

L'Uv a débuté par de la theorie sur la compilation de code et la compréhension de quelques techniques d'optimisations et l'apprentissage du lexeur GNU Flex et du parseur GNU Bison.

Nous avons eu également un rapide aperçu de la programmation d'applications mobiles sur différentes systeme d'exploitation (C# sur Windows Mobile, puis Java J2ME sur portable compatible Java).

Nous avons ensuite vu la programmation sur des Lego Mindstorm (NXT) pour ensuite réalisé un projet. Le but était que le robot puisse affronter un adversaire dans un labyrinthe en marquant des points suivant les règles de capture de position. Nous avons développé sur le NXT en java J2ME avec le firmware lejos; une application de tracking du robot devait être développé sur un Pc, celle-ci à été faite en Java.

Robot_D.JPG

D'autre sujet ont été abordé, comme le fonctionnement des technologies Wifi et Bluetooth.

(Uv obtenue avec C)

LO53 (Positioning systems : techniques and applications)

In this session, first, we saw the different technologies of positionning System (Indoor & Outdoor Positionning).

Next we learned the current and future uses of this geographical information. We studied and learned the Google Maps API in practical session.

(Uv obtenue avec C)

RE56 (Mobile networks)

In this courses we studies the evolution of mobile networks and had a technical description of wave propagation. We saw the actual constraints of designing a network with two teachers who came from a French mobile company (Orange).

We learned in details the two types of mobile networks (GSM with data extension called GPRS and EDGE, and UMTS).

The project was really interesting, because we had to design and make a simulation of GPRS admission. Briefly we had to simulate a BSC (Base Station Controller) and its algorithm to manage incomming Data and Voice communications (Also simulated by a random Algorithm which follow an exponential law). The interest of the simulator was to change the input parameters (Number of Voice slots, data slots, dual slots, number of transmitters, mean number of voice call and duration in the area, etc...)

We had to interpret the results and to decide, with the simulator results, how to design the mobile architecture of the Area.

(Uv obtenue avec D)

TR52 (Principles and mechanisms for embedded real-time applications)

In this session, we saw basic principles for embedded Real-Time applications. (Courses were in english)

We saw, for real time theorie, some modeling langages like Stateschart and UPPAAL.

We studied the nowadays state of Real-time programming languages, notably with Java Real Time and how to change scheduling policies in order to have a real time execution. We also learned the Ada programming language.

Although, In practical work, we learned how to install and configure a Linux real time operating system (Xenomai) on Armadeus cards, and made test about scheduling real-time Tasks compared to a "normal" policy.

We also had an approach of the proprietary Real-Time Os named VxWorks commercialized by Wind River.

(Uv obtenue avec D)


Troisième Semestre (GI03, Automne 2009)

ST40 - Stage de longue durée (6 mois), Niveau Assistant ingénieur.

J'ai effectué mon stage dans l'entreprise SmartJog qui est le leader mondial dans le transfert de fichier à destination des professionnelles du cinéma. Ce stage consistait à manipuler essentiellement des logiciels libres (Ce qui était un critère dans ma recherche de stage) et à ajouter des fonctionnalités sur la plateforme utilisée par les clients.

Un gros projet du stage a été de développer un plugin pour le logiciel libre Samba. Ce projet m'a permis d'apprendre les démarches de recherche et de développement nécessaires dans le monde de l'open source. Aussi, je fus seul responsable du bon développement de la fonctionnalité, et ce jusqu'à la documentation pour le déploiement chez le client. J’étais également en contact régulier avec le commercial initiateur du projet.

J'ai également ajouté des fonctionnalités Web sur la plateforme, et j'ai découvert le framework Django pour le développement d'applications rapides et riches.

Enfin, j'ai utilisé pendant 6 mois le gestionnaire de version distribué Git (utilisé par les développeurs du noyau Linux) couplé au Tracker de bug Redmine ce qui m'a permis d’acquérir une maîtrise de ces outils, indispensable à la gestion de projet.

Note du Maitre de Stage en entreprise : 18/20
Note du Rapport de Stage : 15/20
Note de la soutenance de stage : 14/20

(Uv obtenue avec C)


Deuxième Semestre (GI02, Printemps 2009)

AG41 (Optimisation et recherche opérationnelle)

Cette Matière nous a enseigné les principaux algorithmes utilisée pour la résolution des problèmes connus comme le Voyageur de Commerce. Nous avons étudié des principes mathématiques pour la programmation linéaire comme l'Algorithme du Simplexe, de Little, le problème d'affectation, le Steeping-stone, etc...

Nous avons vu ensuite en deuxième partie des algorithmes de coloration de graphes, des Algorithmes génétiques, le Tabou et le recuit simulé. Cette partie fût d'ailleurs enrichie d'un projet consistant à résoudre un problème de tournée de véhicule (La résolution devait s'effectuer avec la combinaison d'algorithmes cités ci-dessus).

(Uv obtenue avec D)

BD40 (Systèmes d'information)

Cette Uv nous à permis de voir les principaux concepts de modélisation de base de données. Elle consistait principalement à concevoir suivant un problème donné un schéma de base de donnée pouvant répondre au problème. Pour cela, nous avons vu les principes de conception MERISE avec des Modèles Entité-Associations et les modèles Relationnels.

Nous avons aussi du concevoir un projet de gestion de Cv sous Microsoft Access avec une gestion des Offres d'emplois et des demandeurs. La particularité de ce projet réside dans le fait que nous ne pouvions commencer sur microsoft Access seulement après une validation stricte des schémas de conception.

(Uv obtenue avec C)

IN42 (Introduction au Multimédia)

Cette matière nous a permis d'avoir une approche des technologies multimédia utilisées aujourd'hui. Nous avons abordé des concepts comme la compression (étude de l'algorithme Zip), l'indexation (avec une présentation du Page Rank de Google). Des cours théoriques sur l'image et la video sont aussi présenté.

Cependant, le principal thème de l'Unité de valeur est l'apprentissage du langage Flash, et ce à travers un projet à vocation educative. Nous avons donc choisi comme thème "Le traitement des déchets" et notre application Flash traitait ce sujet de manière ludique et éducative. Le projet fut un succès et nous avons obtenu une note supérieur à 18/20

(Uv obtenue avec A)

RE41 (Initiation aux réseaux informatiques)

Cette Uv nous a permis d'avoir une approche du fonctionnement des réseaux informatiques avec des thèmes comme le modèle en couche, la fragmentation des paquets, l'analyse des en-têtes, le fonctionnement des protocoles principaux existants (UDP, TCP). L'uv n'exigeait pas de projet, cependant, les TPs nous ont permis d'aborder des concepts de base. (Déploiement d'un Active Directory sous Windows, d'un serveur Apache sous Linux, configuration d'Iptables, Programmation et utilisation des sockets, etc...).

(Uv obtenue avec C)


Premier Semestre (GI01, Automne 2008)

IA41 (Intelligence artificielle : concepts fondamentaux et langages dédiés)

Cette matière consistait à être une introduction à l'intelligence artificielle en apprenant les concepts fondamentaux ainsi que deux langages dédiés : Le Prolog (avec le logiciel libre Swi-Prolog) et le LISP (avec le compilateur libre GNU Lisp) J'ai pu avoir un aperçu de certains concepts intéressants comme les moteurs d'inférence et les système à base de connaissance, une introduction au lambda-calcul, une vision des systèmes formels. On a pu voir également des algorithmes de planification et de stratégie de recherche dans les graphes (Min-Max, Algorithme du plus court chemin A*, Djikstra, etc...) Le projet consistait à coder en PROLOG l'intelligence d'un mineur dans un "Boulderdash-like" (Le mineur se déplace dans un univers en 2d et doit éviter les obstacles tout en ramassant le nombre de diamants nécessaire à la fin d'un niveau.) Nous avons appliqué un algorithme A* pour la recherche du plus court chemin, ainsi qu'une recherche intelligente des diamants les plus proches du mineur.

Nous avons obtenu 15/20 au projet.

(Uv obtenue avec D)

Delirium

LO41 (Architecture et utilisation des systèmes d’exploitation)

Le but de cette UV est de nous présenter les principaux concepts des systèmes d'exploitations avec plus particulièrement l'exemple de Solaris. On aborde beaucoup de concept comme :

  • Les systèmes de gestion de fichier
  • La gestion de la mémoire
  • Les entrées/Sorties
  • La synchronisation des processus
  • La gestion du partage des ressources
  • La communication entre processus
  • L'ordonnancement et l'interblocage
  • Les Sockets
  • Les Threads (Posix)

Le projet consistait à utiliser des notions de cours pour simuler le fonctionnement d'un serveur SMTP en langage C. Nous avons utiliser les files de messages (pour gérer les différents "mails" qui transitent entre le MTA, MDA et MUA), les sémaphores pour contrôler l'accès aux ressources critiques, les Sockets pour faire transiter un mail entre deux MTA's différents sur un réseau (le projet fonctionnait à travers internet), les recouvrements de processus (le MTA recouvre le MDA qui lui recouvre le MUA) et les Threads ( Pour la socket serveur sur le MTA qui est en attente bloquante sur la réception d'un message).

Nous avons obtenu la note de 12/20 au projet.

(Uv obtenue avec D)

LO43 (Bases fondamentales de la programmation orientée objet)

Cette matière consistait à nous présenter les bases de la programmation Orientée objet. Nous les avons apprises à travers deux langages : le C++ puis le JAVA (pour le projet). Nous avons aussi appris l'UML (2.0).

Le projet était très long, nous n'avions jamais fait de Java auparavant, et nous devions concevoir et programmer un jeu de labyrinthe ou un personnage doit évoluer et combattre des monstres pour gagner la partie. L'accent a été mis sur la conception du jeu et une grande partie de la note concernait les diagrammes UML. Le projet nous a permis d'approfondir les notions vues en cour et d'aller plus loin en mettant par exemple en place une architecture de type Modèle-Vue-Contrôleur. Nous avons fini par respecté le cahier des charges du projet.

Le note ne nous a pas été communiquée.

(Uv obtenue avec C)

screenshot.png

MI41 (Architecture des Systèmes informatiques)

Dans le cadre de cette Uv nous avons appris les bases de l'informatique au plus bas niveau. Arithmétique binaire, Algèbre de Boole, Circuits Logiques combinatoires et séquentiels. Nous avons aussi appris le langage VHDL, un mini projet consistait à coder sur une carte avec 3 boutons et un afficheur, une calculette réalisant les opérations +, -, et =. Nous avons donc du concevoir et coder en VHDL sur la carte. Le projet nous à également montré l'intérêt de faire un bon graphe à état pour définir les différentes étapes de l'évolution du système.

Nous avons eu des cours sur les architectures des microprocesseurs et une introduction au langage Assembleur sur processeur ARM.

(Uv obtenue avec C)


Réalisations Personnelles

Administration d'un serveur sous GNU/Linux

Administrateur d'un serveur dédié (celui ou vous vous trouvez), loué chez ovh (kimsufi). Apprentissage de nombreux outils d'administrations :

  • Mise en place d'un serveur Web Apache2 avec VirtualHost.
  • Mise en place d'un serveur Mysql et interaction avec PHP et Apache.
  • Configuration d'Apache2 en mode ssl avec certificat Signé (par StartSSL)
  • Mise en place d'un serveur Ftp avec Proftpd mais désactivé aujourd'hui pour des raisons de sécurité évidente...
  • Utilisation de Sftp avec Authentification par clés
  • Mise en place d'un serveur de Courrier. (Postfix, Dovecot et base de donnée Mysql). Intérêt particulier pour la sécurité (non Openrelay, connexion TLS et SSL, Envoit de courrier avec authentification SASL, etc..)
  • Mise en place d'un serveur DNS (bind9) pour héberger les domaines beneth.fr et lusco.fr et respect des standards pour les zones, l'AFNIC obligeant cela pour les extensions en .fr.
  • Mise en place d'adresses ipv6 pour le serveur. Ainsi, beneth.fr et lusco.fr n'ont pas la même adresse ipv6.
  • Firewall avec règles iptables.
  • Mise en place d'un tunnel VPN (openVPN) pour sécuriser des données sensibles.
  • Mise en place d'un serveur Jabber (Ejabberd) -> im.beneth.fr
  • Gestion des utilisateurs, nous sommes 3 administrateurs, il faut donc que chacun ait son espace de travail.
  • Mise en place d'un Moniteur de Log (Logwatch) avec mail journalier pour les administrateurs.
  • Sauvegarde journalière de plusieurs Go sur un FTP de backup (utilisation de Backup-manager)
  • Depuis une tentative de Hack de notre serveur par le biais d'une faille de sécurité dans Roundcube, nous mettons un point d'honneur à la sécurité du serveur. (Fail2ban pour : Apache2, attaque DNS sur Bind, attaque sur le serveur ssh, etc...)
  • Et bien d'autres expérimentations !