hfragnoli@homelab:~$ ./start_portfolio.sh

Hugo Fragnoli

Développeur systèmes & infrastructure

[SYSTEM] - [DEVSECOPS] - [INFRASTRUCTURE]

> Contact.sh

[SYSLOG] Initialisation des protocoles de communication externes...

> Proxmox_Homelab.sh

ProxmoxLXCNginx Proxy Manager

Infrastructure personnelle auto-hébergée. Isolation des services via conteneurs LXC (Monitoring, DNS, Médias), routage via Reverse Proxy et déploiement continu. Services : Jellyfish - Nginx Proxy Manager - Prometheus - Grafana - festins.hfragnoli.fr - pihole.

> Festins

ReactReact RouterCloudflareHébergement Homelab

Création de A à Z d'un site vitrine pour un restaurant (fictif), conçu pour démontrer mes compétences en développement front-end, en optimisation des performances et en infrastructure.

> Woody_Wood_Packer.exe

CASM x86-64AES Cryptography
Terminal
hfragnoli@homelab:~/WoodyWoodPacker$ ./helloHello world!hfragnoli@homelab:~/WoodyWoodPacker$ ./woody_woodpacker hello[INFO] Parsing arguments[INFO] Building woody...[DEBUG] Payload size: 15752[INFO] Payload compressed (LZ77)   Original size : 15752   Packed size   : 4632   Ratio         : 70.59% (factor 3.40x)[DEBUG] Encrypted size: 4656 (AES, PKCS#7 padding)[INFO] Key used : OUBRUQEVMBEPGXUI[INFO] woody successfully created.hfragnoli@homelab:~/WoodyWoodPacker$ ./woodyHello world!...WOODY...

Création d'un packer de binaires ELF de zéro. Injection d'une payload de chiffrement AES écrite entièrement en Assembleur. Projet axé sur la rétro-ingénierie, la manipulation de la mémoire et l'architecture des exécutables.

> Taskmaster.rs

RustUnix Syscalls
Terminal
hfragnoli@homelab:~/Taskmaster$ ./taskmaster config.yaml[Info] - Program [ping2] launch with PID 81886[Info] - Program [ping1] launch with PID 81888[Info] - Execution thread ready.taskmaster > status[Info] - [STATUS] ping2 is alive (PIDs: [81886, 81887])[Info] - [STATUS] ping1 is alive (PIDs: [81888, 81889])[Info] - [STATUS] env2 is offtaskmaster > start env2[Info] - Command start sent.[Info] - Program [env2] launch with PID 81900[Info] - Done.taskmaster > status[Info] - [STATUS] env2 is alive (PIDs: [81900])[Info] - Signal 20 received (SIGCHLD)[Error] - [env2] Crashed too quickly (retry 1/4)taskmaster > stop ping1[Info] - Command stop sent.[Info] - [STATUS] ping1 is offtaskmaster > exit[Info] - exiting...[Debug] - Killing ping2 with pid 81886[Debug] - Killing ping2 with pid 81887[Info] - Exec thread successfully quit.

Gestionnaire de processus type systemd. Gestion des threads, des signaux POSIX et de la concurrence de manière sécurisée grâce à Rust.

> malloc.c

Cmmap / munmap
Terminal
hfragnoli@homelab:~/lib_malloc$ MALLOC_DEBUG=2 ./test_debug== 1) malloc / realloc / free classiques ==malloc(32) => 0x1003b0040realloc(200) => 0x1003b0040free(0x1003b0040)== 2) scribble (visible au niveau 2) ==malloc(16) => 0x1003b0040   apres malloc : c[0]=0xAA (0xAA au niveau 2)free(0x1003b0040)   apres free   : c[0]=0x55 (0x55 au niveau 2)== 3) cas limites malloc ==   malloc(0)  => 0x0 (attendu (nil))free((nil))   free(NULL) : OK (no-op)== 4) cas limites realloc ==realloc(32) => 0x1003b0040   realloc(NULL, 32) => 0x1003b0040realloc(0) => (nil)   realloc(ptr, 0)   => 0x0 (attendu (nil))realloc(0) => (nil)   realloc(NULL, 0)  => 0x0 (attendu (nil))== 5) double free large (detecte -> abort) ==malloc(5000) => 0x1003b4020free(0x1003b4020)free(0x1003b4020)free(): double free or invalid pointer => 0x1003b4020zsh: abort      MALLOC_DEBUG=2 ./test_debug

Réécriture complète des fonctions d'allocation dynamique. Optimisation de la mémoire et gestion de la fragmentation via des listes chaînées.

> minishell

CUnix SyscallsSignals
Terminal
hfragnoli@homelab:~/minishell$ ./minishell minishell> cd /tmp minishell> pwd/private/tmp minishell> export DEMO=hello minishell> echo $DEMOhello minishell> echo abc | grep babc minishell> echo test > out.txt minishell> cat out.txttest minishell> nonexistentcmdminishell: nonexistentcmd: command not found minishell> unset DEMO minishell> echo $DEMO  minishell> exitexit

Réimplémentation d'un shell Unix interactif. Parsing, pipes, redirections, heredoc, builtins et gestion fine des signaux (SIGINT, SIGQUIT) en C.

> cub3D

CMinilibXRaycasting
Render
Rendu du moteur cub3D en raycasting sur la carte matrix.cub

Moteur de rendu 3D façon Wolfenstein, écrit de zéro en C avec MinilibX. Raycasting, parsing de cartes, textures directionnelles et portes interactives.

> Loi_&_Moi [WIP]

GOPostgreSQLETL - Pythondata.gouv.frAPI MistralReact - TypescriptAPI REST

Projet citoyen visant à rendre l'information publique et administrative accessible aux non-initiés. La donnée existe et elle est ouverte : le problème est qu'elle est éparpillée, brute et illisible pour qui n'en a pas l'habitude.

L'essentiel du travail est un pipeline d'ingestion. Les jeux de données de data.gouv.fr arrivent dans des formats hétérogènes et mouvants, qu'il faut nettoyer, normaliser et faire converger vers un schéma relationnel unique. Ces traitements ETL sont écrits en Python et alimentent une base PostgreSQL volumineuse, rejouable à chaque mise à jour des sources.

Au-dessus, une API REST en Go expose ces données à une interface React / TypeScript. Les appels à l'API Mistral interviennent en bout de chaîne, pour restituer en langage clair des contenus administratifs qui ne le sont pas.