Projets perso

0B3Y

Chiffrement symétrique basé sur un algorithme maison avec transposition/permutation et substitution type chiffre de Vigenère.
Capable de chiffrer et déchiffrer des fichiers, dossiers, ou même une arborescence complète. Les fichiers traités peuvent aussi être combinés en une archive chiffrée non-compressée, à la manière d’une archive .tar avec chiffrement.
Technos : C++, mutltihread
Plateformes : Windows x86_64, Linux x86_64, Linux aarch64, macOS x86_64
IDEs : Visual Studio, Visual Studio Code, Netbeans, Clion
Statut : Terminé



Naga

Moteur d’animation 2D de type « pantins » conçu pour permettre d’animer facilement des éléments en les constituant de multiples sprites et en leur ajoutant des clés d’animation. Peut lire et écrire des projets vers/depuis des fichiers au format texte comme binaire, en respectant une spec personnalisée. Développé en C++, avec à côté un portage Python.
Technos : C++, SFML, Python
Plateformes : Windows, Linux
IDEs : Visual Studio, Netbeans
Statut : Moteur terminé, un logiciel d’animation construit autour est à l’étude, une version macOS et un projet CMakeLists pour CLion sont à prévoir



VaporRay

Moteur de rendu simplifié fonctionnant avec des lancers de rayon. Développé au fur et à mesure en suivant le livre « The Ray Tracer Challenge ». Le moteur est actuellement capable de réaliser un rendu de sphères avec du Phong shading. Les calculs se font actuellement uniquement sur CPU. Une version multithread, et des accélérations CUDA/OpenCL sont à l’étude.
Technos : C++, TDD
Plateformes : Windows x86_64, Linux x86_64, macOS x86_64
IDEs : Visual Studio, Visual Studio Code, Netbeans, CLion
Statut : En cours

Rendu obtenu avec Phong shading sur une sphère
Rendu obtenu sur une scène composée de sphères, de murs et d’une caméra avec sa propre matrice de vue, avec implémentation de phong shading et d’ombres.



TKPU

Pour « Turtle KISS Processing Unit ». L’idée était d’imaginer un jeu d’instructions le plus réduit possible. Au strict minimum. Bien plus qu’un jeu d’instructions ARM qui n’est pas si réduit (RISC) que ça !
Seul, ce jeu d’instructions ne servirait à rien, il a donc fallu développer une application qui serait capable de lire des programmes, les interpréter, et afficher le contenu des registres en fin d’exécution afin de contrôler les résultats. C’est très semblable à ce que ferait un émulateur, au final.
Une interface graphique est en cours d’étude, laquelle permettrait d’effectuer du débogage pas-à-pas tout en contrôlant les changements dans les registres à chaque instruction exécutée.
Technos : C++,
Plateformes : Windows x86_64, macOS x86_64
IDEs : Visual Studio Code
Statut : En cours. La lecture des programmes en texte est implémentée (celle en binaire n’est pas encore disponible), ainsi que l’exécution et l’affichage des registres. Ce programme permet donc déjà, en l’état, d’exécuter des programmes écrits avec ce jeu d’instructions très réduit.

BinaireHexa NomParam 1Param 2Param 3Description
00000x0SETVALREGVALÉcrit VAL dans le registre REG.
00010x1SETREGREG1REG2Copie la valeur actuelle du registre REG2 vers le registre REG1.
00100x2INCRREGVALAjoute VAL à la valeur actuelle dans le registre REG.
00110x3MULREGVALMultiplie par VAL la valeur actuelle dans le registre REG.
01000x4DIVREGVALDivise par VAL la valeur actuelle dans le registre REG.
01010x5EQVALREGRREGVVALVérifie l’égalité entre la valeur actuelle dans le registre REGV et VAL, et écrit le résultat dans le registre REGR : 1 si égalité, sinon 0.
01100x6EQREGREGRREG1REG2Vérifie l’égalité entre les valeurs dans les registres REG1 et REG2, et écrit le résultat dans le registre REGR : 1 si égalité, sinon 0.
01110x7NOTREGInversion logique de la valeur dans le registre REG.
10000x8TAGNUMPositionne le jeton NUM à la ligne actuelle pour pouvoir s’y positionner ultérieurement.
10010x9IFREGNUMRupture de séquence conduisant à la ligne du tag NUM si la valeur logique dans le registre REG est vraie.
# This program will determine the greatest multiple of 3 from
# range [0 ; 20[
SETVAL 7 1
SETVAL 0 0
SETVAL 1 20
SETVAL 2 3
SETVAL 3 0
IF 7 1
TAG 0
SETREG 3 4
IF 7 2
TAG 1
SETREG 4 0
DIV 4 3
MUL 4 3
EQREG 5 0 4
IF 5 0
TAG 2
INCR 0 1
EQREG 6 0 1
NOT 6
IF 6 1
Le résultat est… 18 ! Quelle surprise ! 😀



Obey Password Manager

Gestionnaire de mots de passe simplifié basé sur l’outil de chiffrement symétrique 0B3Y. Permet de rechercher des entrées, les trier par catégorie, afficher les identifiants et copier les mots de passe associés vers le presse-papiers.
Technos : C#, WPF
Plateformes : Windows
IDEs : Visual Studio
Statut : Terminé, des améliorations de la recherche intelligente sont possibles, une protection de l’espace mémoire du processus serait nécessaire pour une utilisation en conditions réelles



Développement PS2

Je m’intéresse aussi au développement sur PlayStation 2. Cela mêle entre autres des thématiques hardware, de bas niveau et de pipeline de rendu… que des sujets passionnants. J’ai déjà pu expérimenter avec l’installation de la toolchain proposée par la communauté, et je me renseigne sur l’architecture de la console en soi, réputée pour sa complexité d’un point de vue programmation.
Dans ce cadre, je participe à la traduction du document PlayStation 2 Architecture, a practical analysis rédigé par Rodrigo Copetti. Environ deux tiers de ce document sont maintenant traduits, mais nécessiteront des retouches et des relectures. Vous pouvez suivre la progression de cette traduction depuis la page Crowdin du projet.
Qui sait, un jour peut-être, je proposerai un petit jeu sur PS2 ? Mais ce sera assurément plus un Pong qu’un Read Dead Redemption… 😉
Technos : C
Plateformes : Windows/Linux
IDEs : Code Blocks
Statut : Des phases préparatoires sont en cours