- portfolio.malik-dev
- Accueil.
- Profil.
- Projet.
- mon-mur
- siteweb-belindys
- futur-projet
- forum-parfum
- script-bash
- gestion-compte
- siteweb-responsive
- bomberman
- jeu-echecs
- calendrier-dynamique
- siteweb-evenementiel
- Competences.
- Contact.
- MentionsLegales.
- interfaces
- Page.
- utils
- Logger.
- DateHelper.
- exceptions
- InvalidEmailException.
- ProjetNotFoundException.
- tests
- AccueilTest.
- ProfilTest.
- ProjetTest.
- CompetencesTest.
- ContactTest.
- MentionsLegalesTest.
- README.md
Projets professionnels
Site web Belindys (2025)
-
Site web Belindys
Réalisation d'un site vitrine professionnel en PHP.
Sommaire :
Langages & outils
- PHP
- HTML
- CSS
- JavaScript
- Git
- VS Code
Structure PHP
- Environnement PHP natif (sans framework)
- Fichier config.php :
- Informations de contact
- Chemins de navigation et d’inclusions
- Icônes et URL externes
- Includes génériques :
- head.php
- header.php
- list-navigation.php
- footer.php
Ergonomie
- Navigation claire et intuitive
- Utilisation d’icônes SVG
- Menu et slider adaptés au tactile (drag)
- Effets hover sur les éléments cliquables
- Présence d’une lightbox pour les images
Optimisation
- Compression des images (WebP)
- Fichiers CSS/JS regroupés dans des bundles
- Scripts chargés en différé grâce à l’attribut defer
- Téléchargement local des dépendances (aos/, fonts/ ...)
- Préchargement des polices d’écriture
Référencement naturel (SEO)
- Métadonnées uniformisées dans head.php
- Structure hiérarchique des titres (h1, h2...)
- Contenu multilingue via data-i18n
- Intégration des avis Google via API
Responsive
- Propriétés CSS flexibles (flex-wrap, clamp...)
- Utilisation de media queries (@media...)
Multilingue
- Attributs data-i18n pour chaque texte
- Fichiers JSON contenant les traductions
- Structure facilement extensible à d’autres langues
Projets personnels
Application forum de parfum (2025)
-
Forum Parfum
Application Java de gestion et découverte de parfums avec notes, créateurs, familles et forum.
Sommaire :
Langages & outils
- Java
- JUnit
- Git
- JetBrains
Structure & organisation
- Parfum : informations sur les parfums
- Famille, Marque : classification des parfums
- Note : notes olfactives présentes dans les parfums
- Utilisateur : gestion de la garde-robe, des votes et commentaires
Fonctionnalités
- Recherche de parfums par nom, créateur, pays, maison mère ou note
- Filtrage et tri par popularité, genre, famille ou collection
- Gestion des préférences et Garde-Robe de l'utilisateur
- Votes en fonction de : genre/tenue/longévité...
- Forum : créer des questions et y répondre
Mises en cache
- Stockage temporaire des données : calcul de popularité, liste de parfums
- Optimisation du code et des temps de recherche
- Désactivation lors de nouvelles entrées
Méthode thread-safe
- Synchronisation des accès aux listes, par Collections.synchronized
- Utilisation de : AtomicLong et ConcurrentMap
- Prise en compte des risques de goulot d'étranglement
Algorithme de recherche
- Recherche sur les collections de parfums
- Scoring par filtre : expressions > mots > lettres
- Pondérations en fonction de l'ancienneté et des votes utilisateurs
Tests unitaires (JUnit)
- Couverture globale des tests de 70%
- Validation de la synchronisation thread-safe
- Tests sur l'optimisation et les caches
-
Voir le dépôt sur git
Script bash malveillant (2025)
-
Script Bash malveillant (simulation)
Projet réalisé uniquement dans un environnement autorisé et contrôlé. Aucun code malveillant n’a été exécuté.
Sommaire :
Langages & outils
- Bash
Paramètres du script
- Nom de la salle : "infoXX"
- Numéro du poste occupé : "XX"
- Nombre de dizaine de poste : "0..9"
- Nom du poste occupé : "prenom.nom"
Description
- Exploitation d'une autorisation SSH trop permissive (à but éducatif)
- Parcours des postes nommés : @info[numéro_de_salle][numéro_de_poste]
- Le poste de lancement est exclu de la boucle
- Exécution d'un script malveillant stocké dans un répertoire d'accès public
- Tentative de suppression de l'historique du terminal
- Nettoyage visuel du terminal
- Exécution du script malveillant sur le poste de lancement (en dernier)
- Disclaimer : projet purement théorique — aucune exécution réelle
Site web Responsive (2024)
Réalisation de sites en HTML, CSS et JavaScript pour découvrir les langages web.
Projets collaboratifs
PacMan JavaFX (2025)
-
Pac-Man
Reproduction du jeu Pac-Man en Java avec interface JavaFX. Ma contribution s’est concentrée sur la gestion des collisions, l’optimisation du code, la qualité Git et le débogage en équipe.
Sommaire :
Langages & outils
- Java
- Git
- Gradle
- JetBrains
Gestion complète des collisions
- Refonte complète de la logique de collision entre entités.
- Remplacement des boucles imbriquées par un système de double dispatch centré sur Pac-Man.
- Simplification du code : seules les interactions Pac-Man vs fantômes & Pac-Man vs gommes sont prises en compte.
- Optimisation des mises à jour d’état (mort, bonus, score) en fonction du type de collision détectée.
Optimisation du code
- Réduction de la complexité algorithmique de la détection de collisions.
- Centralisation de la logique de parcours et suppression des doubles itérations inutiles.
- Meilleure lisibilité et maintenance du code grâce à la réorganisation des classes impliquées.
Gestion des conflits (Git)
- Résolution de multiples conflits lors des fusions d’équipe.
- Aide à la mise en place d’un workflow Git plus clair (naming, branches, merges).
- Contrôle de la qualité du code après intégration des branches collaboratives.
Correction et assistance technique
- Correction de bugs liés aux collisions et au comportement des fantômes.
- Assistance aux membres de l’équipe pour le débogage et l’intégration de leurs fonctionnalités.
- Contribution générale à la stabilité du projet avant rendu final.
-
Voir le dépôt sur git
Bomberman JavaFX (2025)
-
Bomberman
Reproduction du jeu Bomberman, en Java et interface JavaFX
Langages & outils
- Java
- JavaFX
- Git
- Gradle
- SceneBuilder
- JetBrains
Objectif
- Faire exploser les ennemis.
- Ne pas mourir (3 vies disponibles à chaque stage).
- Avancer dans les stages (niveaux).
- Obtenir le meilleur score possible.
Stages (niveau)
- Le jeu commence au stage 1.
- Pour passer au stage suivant, vous devez tuer tous les ennemis.
- À chaque niveau supérieur :
- La carte s’agrandit de 2 cases
- Vous récupérez vos 3 vies
- Vous récupérez le minimum de bombe
Ennemies
- Toucher un ennemi vous fait perdre une vie
- Les ennemis les plus forts sont plus rares et se déplacent plus rapidement
- Ils ne se déplaceront pas dans une explosion
- Tuer plusieurs ennemies avec une bombe rapporte un bonus
Bombes
- 4 types de bombes : normal, colonne, ligne et large
- Détruit les murs de brique (coffre bonus derrière)
- L'explosion ne traverse pas les murs
Coffre bonus
- Un coffre a 33% de chance d'être caché derrière un mur
- Récompense possible :
- 30% : +1 bombe en ligne
- 30% : +1 bombe en colonne
- 10% : +1 bombe large
- 10% : +1 vie
- 20% : Aucune (coffre vide)
Commandes
- Déplacement : touches fléchées, ZQSD ou WASD
- Placer une bombe : touche E
- Choisir une bombe : inventaire ou 1,2,3,4
- Quitter : touche Échap.
-
Voir le dépôt sur git
Site web événementiel (2024)