42 sh

Projet système réalisé en S5 à EPITA, développé en équipe de 4 en langage C sur une période d’un mois (2023-2024)

Implémentation complète d’un shell POSIX (42sh) respectant les spécifications POSIX et capable d’exécuter des commandes simples et complexes.

Technologies :
C Bash POSIX Autotools
  • Construction d’un lexer récursif pour l’analyse des tokens
  • Implémentation d’un parser récursif descendant
  • Conception d’un AST permettant de représenter toutes les constructions shell
  • Mécanisme d’expansion des variables conforme à POSIX
  • Gestion des descripteurs de fichiers pour les redirections
  • Synchronisation des processus pour les pipelines
  • Test unitaire et fonctionnel
  • Commandes simples et listes de commandes
  • Structures de contrôle (if/then/else, while, until, for, case)
  • Redirection des entrées/sorties
  • Gestion des pipelines et opérateurs logiques (&&, ||)
  • Variables d’environnement et variables shell
  • Fonctions shell et sous-shells
  • Builtins conformes POSIX (cd, exit, export, etc.)
  • Gestion des signaux et des erreurs

BitToreent

Projet réseau réalisé en S5 à EPITA, développé en binôme en langage C sur une période de deux semaines (2023-2024).

Implémentation d’un client BitTorrent simplifié permettant le téléchargement et le partage de fichiers via le protocole BitTorrent standard (BEP 0003). Le projet consistait à développer un client P2P fonctionnel capable de parser des fichiers torrent, communiquer avec des trackers, et échanger des données avec d’autres pairs.

Technologies :
C Meson Programmation modulaire
  • Programmation réseau avancée en C
  • Conception d’architectures modulaires à base de bibliothèques
  • Communication entre pairs dans un réseau P2P
  • Gestion efficace de la mémoire en C
  • Parsing complet des fichiers .torrent (format Bencode)
  • Création de fichiers torrent à partir de fichiers/dossiers existants
  • Communication avec trackers via le protocole compact (BEP 0023)
  • Connexion simultanée avec plusieurs pairs via epoll
  • Implémentation complète du protocole de pièces BitTorrent
  • Vérification d’intégrité des pièces via hachage SHA-1
  • Gestion des torrents à fichier unique et multifichiers

MyMalloc

Projet réalisé au 5ème semestre à EPITA, développé individuellement en langage C pendant 1 semaine.

Implémentation d’une bibliothèque d’allocation mémoire dynamique personnalisée, remplaçant les fonctions standard malloc, free, calloc et realloc. Ce projet visait à créer un allocateur de mémoire capable de gérer efficacement l’espace mémoire.

Technologies :
C Appels système Bibliothèque partagée
  • Compréhension approfondie de la gestion de mémoire bas niveau
  • Maîtrise des appels système POSIX pour la gestion mémoire
  • Techniques d’optimisation d’allocation mémoire
  • Débogage avec des outils comme GDB.
  • Allocation mémoire alignée (malloc)
  • Libération de mémoire et gestion des pages (free)
  • Allocation avec initialisation à zéro (calloc)
  • Redimensionnement intelligent des allocations (realloc)
  • Optimisation de l’empreinte mémoire
  • Gestion efficace de la fragmentation mémoire

MyFind

Projet réalisé au 5ème semestre à EPITA, développé individuellement en langage C pendant 1 semaine.

Implémentation d’une version simplifiée de la commande Unix find, permettant de rechercher des fichiers dans une arborescence de répertoires selon divers critères. Ce projet a mis l’accent sur la manipulation des fichiers et répertoires via l’API Unix, la gestion d’expressions complexes, et l’exécution de commandes externes.

Technologies :
C API Unix AST
  • Programmation système en C
  • Manipulation avancée de l’API fichier Unix
  • Conception d’algorithmes de parcours d’arbres
  • Analyse et traitement d’expressions complexes
  • Tests de régression pour garantir la fiabilité
  • Parcours récursif d’arborescences de fichiers
  • Recherche par nom avec support des motifs (globbing)
  • Filtrage par type de fichier (fichiers réguliers, répertoires, liens symboliques…)
  • Opérateurs logiques (AND, OR, NOT) pour combiner les expressions
  • Comparaison de dates de modification
  • Exécution de commandes sur les fichiers trouvés
  • Options de contrôle du comportement

OCR : Sudoku Solver

Projet réalisé en 3ème semestre à EPITA, en équipe de 5 étudiants (Vous trouverez dans l’annexe le rapport de projet ainsi que le site web pour télécharger le projet).

Développement d’une application capable d’analyser et de résoudre automatiquement un sudoku à partir d’une image. Le projet visait à appliquer des concepts de traitement d’images et d’intelligence artificielle pour créer un outil fonctionnel.

Technologies :
C SDL2 GDK Réseau de neuronnes HTML/CSS/JS
  • Prétraitement d’image : Conversion en niveaux de gris, normalisation de luminosité, binarisation
  • Détection de grille : Utilisation de la transformée de Hough pour identifier les lignes et extraire la grille
  • Découpage et traitement : Division de l’image en 81 cases individuelles et préparation pour l’analyse
  • Reconnaissance de caractères : Développement d’un réseau de neurones entrainé sur un dataset de chiffres
  • Résolution du sudoku : Implémentation d’un algorithme récursif de backtracking
  • Interface utilisateur : Création d’une interface intuitive avec possibilité d’entrée manuelle
  • Traitement d’image numérique
  • Principes fondamentaux de l’intelligence artificielle
  • Programmation en C
  • Travail d’équipe et gestion de projet
  • Conception d’interface utilisateur

The Lost Mustache – Projet Jeu Vidéo S2 EPITA

Projet de développement de jeu vidéo réalisé en équipe au second semestre de prépa à EPITA, développé avec Unity et C#.

Création d’un jeu de rôle solo original combinant des éléments de RPG classiques avec une histoire humoristique. Le joueur incarne Juan, un Mexicain parti à la recherche de sa moustache volée à travers trois zones distinctes du Mexique.

Technologies :
Unity Engine c# assets graphiques Composition musicale HTML/CSS/JS
  • Système de combat tour par tour avec mécaniques originales :
  • Système d’esquive basé sur la statistique de vitesse
  • Calculs de dégâts prenant en compte l’attaque et la défense
  • Animations de combat et effets de particules
  • Gestion des collisions et des transitions entre zones
  • Animation du personnage principal (déplacements dans 4 directions)
  • Interface de combat inspirée des RPG classiques
  • Système de progression des statistiques du personnage
  • Game design et level design
  • Programmation orientée objet en C#
  • Utilisation d’un moteur de jeu professionnel (Unity)
  • Création d’assets graphiques et sonores
  • Gestion de projet et adaptation aux contraintes

Stage à Zurich

Stage d’observation d’une semaine réalisé en classe de Première dans une entreprise suisse développant Arcano, une solution d’échange de fichiers.

Immersion dans une entreprise internationale spécialisée dans le développement d’Arcano, une plateforme de transfert de fichiers. Le logiciel permet aux entreprises et aux particuliers d’échanger des documents confidentiels de manière sécurisée et simple d’utilisation.

  • Compréhension des enjeux de confidentialité des données
  • Familiarisation avec les standards de sécurité en entreprise
  • Adaptation à un environnement professionnel international
  • Découverte des enjeux de la cybersécurité et du cryptage des données
  • Participation à l’analyse de la sécurité de la plateforme
  • Observation des processus de développement
  • Contact avec une équipe internationale dans un environnement germanophone

Snake avec Machine Learning

Projet de spécialité NSI en Terminale, réalisé en binôme sur un semestre.

Développement d’une version innovante du jeu Snake utilisant le machine learning. L’algorithme permet au serpent d’apprendre automatiquement les meilleures stratégies de jeu en analysant ses performances et en s’adaptant progressivement.

Technologies :
Python Pygame Pygame Matplotlib
  • Architecture du réseau de neurones adaptée au jeu Snake
  • Système d’évaluation basé sur le score
  • Points positifs pour la collecte de nourriture
  • Points négatifs pour les collisions
  • Analyse des performances
  • Progression rapide dans les premiers cycles d’apprentissage
  • Atteinte d’un plateau de performance après plusieurs itérations
  • Score maximal documenté
  • Machine Learning et réseaux de neurones
  • Programmation Python avancée
  • Analyse de données et visualisation
  • Travail collaboratif en binôme