Ma veille informatique s'articule autour de plusieurs sources complémentaires. J'utilise principalement YouTube, dont l'algorithme me permet de découvrir du contenu pertinent adapté à mes centres d'intérêt. Je consulte également CERT-FR pour rester informé des dernières actualités en cybersécurité, et le feed Perplexity AI car je peux ensuite interroger l'IA si quelque chose m'interpelle.
Les domaines qui retiennent particulièrement mon attention sont les nouvelles technologies (IA, robotique), la cybersécurité, le graphisme (UI/UX, logos...), ainsi que le développement (petits outils, jeux, simulations...).
Je suis convaincu que l'apprentissage est plus efficace lorsqu'il naît de la curiosité et de la résolution de problèmes concrets. Cette démarche est avant tout motivée par ma passion envers ces domaines, et même si c'est moins efficace qu'une veille classique, je la fais avec plaisir et non par devoir.
Pour mettre en pratique mes découvertes, j'ai configuré une ThinkStation sous Debian qui me sert d'environnement de test. J'utilise notamment Docker pour créer des environnements isolés, propres (vides) et faciliter l'archivage.
J'ai effectué mon BTS SIO en alternance, de 2023 à 2025, en tant que technicien SI au sein de la DSEM de La Poste. J'ai eu un rôle assez polyvalent, je suis intervenu un peu partout en Corse-du-Sud, et parfois aussi en Haute-Corse. Parfois à distance, mais souvent en présentiel. J'ai travaillé sur des domaines variés : le matériel informatique classique, le réseau, les automates ou encore les systèmes de sûreté. Je devais assurer le suivi complet des incidents : réception des fiches d'intervention, analyse et préparation, déplacement si nécessaire, gestion du matériel, puis clôture des interventions.
La gestion de l'inventaire était un point central. Chaque équipement et type d'équipement était tracé, on gérait les stocks et on s'assurait que rien ne manquait pour les interventions. Cette logistique était essentielle car elle évitait les déplacements inutiles et garantissait qu'on arrivait sur site avec les bonnes pièces.
Côté réseau, selon moi la partie la plus intéressante, j'ai eu l'occasion de participer à des missions plus poussées, comme l'optimisation du trafic dans des bâtiments administratifs, la mise en place de VLANs ou la réorganisation complète de segments réseau en collaboration avec Orange Business Services. Ces missions demandaient un vrai diagnostic terrain, des tests de ports et de VLAN, des analyses de trafic, puis du brassage physique et des configurations de base avant de passer le relais à Orange pour les paramétrages avancés.
Globalement, mon alternance s'est très bien passée, autant pour moi que pour mes collègues. C'est d'ailleurs pour ça qu'après la fin de mon contrat, ils m'ont recontacté et repris en intérim dès septembre.
Je n'ai malheureusement pas d'images ou de schémas pour illustrer mes propos, car il s'agit de protocoles internes confidentiels. Je vous invite cependant à jeter un coup d'œil à la présentation de la DSEM.
Durant ma deuxième année de BTS SIO, notre principale mission fut de déployer une
infrastructure
réseau pour une agence fictive située en Californie. Pour cela, nous avons utilisé les équipements
suivants :
routeur pare-feu Stormshield SN210, deux serveurs HPE ProLiant DL20 Gen11,
Raspberry Pi 5, deux commutateurs HPE Aruba (Instant On 1930 8G et 2930f 8G), ainsi que
l'infrastructure adjacente déjà présente (matériel de baie déjà brassé, DMZ...).
La documentation du projet était centralisée sur Tuleap et
GitLab : Tuleap permet un
suivi des
tâches et actions effectuées, car nous étions trois à travailler sur cette infrastructure, tandis
que GitLab regroupe
le cahier des charges, la documentation technique (la plus importante) et les backups des
configurations des équipements.
La documentation complète présente sur GitLab n'est plus accessible aujourd'hui, car chaque année de
nouveaux élèves recréent la plateforme en repartant de zéro. J'ai cependant un backup, n'hésitez pas
à me le demander si vous êtes curieux.
Voici une liste illustrant les actions réalisées :
Il est difficile de tout expliquer et illustrer ici, surtout sans documentation technique pour appuyer mes propos, ce qui aurait été beaucoup plus intéressant qu'un simple résumé. Voici quelques schémas de l'infrastructure :
Je tiens à préciser que l'infrastructure n'était pas vraiment située dans le désert de Californie comme sur l'image. On ne sait jamais.
J'ai développé un petit système de RAG (Retrieval-Augmented Generation) qui communique avec des LLMs (Large Language Models) qui tournent en local, en utilisant Ollama. Le script est codé en Python. Le RAG est un concept simple : utiliser une intelligence artificielle (LLM) et la guider ainsi que son contexte afin qu'elle ne réponde que selon le contenu qui lui est fourni.
Car les modèles comme ChatGPT ont tous le même défaut : ils ont tendance à "halluciner" (inventer de fausses informations), surtout lorsqu'on leur donne un trop grand contexte (de trop gros documents).
Le système de RAG découpe automatiquement les documents que l'on souhaite en petits morceaux (chunks), les transforme en vecteurs mathématiques (définition du "sens" des phrases et mots pour un LLM), puis retrouve les passages les plus pertinents selon la demande de l'utilisateur et les donne à l'IA pour qu'elle génère une réponse.
Ça permet de diminuer le contexte et donc les hallucinations, et force le modèle à utiliser uniquement nos documents et non ses connaissances (grâce au system prompt). En bonus, étant donné que l'on peut nous-même héberger le modèle, nous pouvons lui fournir des documents contenant des informations sensibles sans aucun risque, le modèle tourne hors ligne sur la machine de notre choix !
J'ai implémenté deux stratégies de découpage selon le type de document, du traitement parallèle pour accélérer l'indexation, et une interface CLI (en ligne de commande) assez complète avec des paramètres modifiables.
Je l'ai utilisé notamment pour chercher efficacement parmi toutes les documentations (permet une recherche de sens et non de mots, permet de chercher avec un langage naturel) lors de mes interventions en tant que technicien.
Le code est disponible sur Github EN CLIQUANT ICI avec une documentation très complète pour bien le comprendre et l'utiliser.
Voici un schéma qui vulgarise bien la chose :
J'ai d'autres projets sur mon GitHub, qui peuvent être intéressants mais qui ne méritent pas forcément leur propre carte sur mon portfolio.
Pour commencer, voici mon profil GitHub.
Parmi ces projets, sur lesquels je ne m'attarde pas trop ici (notamment parce qu'ils ne mettent pas
en avant de compétences particulières ou qu'ils sont 'vibecodés'), il y a un éditeur de texte avec
une interface très propre. L'éditeur efface le texte quand on s'arrête d'écrire, pour forcer
l'inspiration même dans la panique. Je l'ai fait pour dépasser mes blocages, et ça marche plutôt
bien. Inspiré de ce site web.
Il y a aussi une grande documentation qui regroupe toutes les petites astuces pour les hardcore
users de PC que j'ai trouvées au fil du temps et que j'applique moi-même. Il y a aussi Bitsight, un outil qui permet de visualiser des images bit par bit, afin de détecter des artefacts, notamment de la stéganographie (le fait d'encoder des messages dans des images).
Sinon, des projets encore en cours ou pas encore publiés :
- une application Android simple utilisant Flutter et Dart
- un simulateur d'interactions avec des particules (individus), réparties en espèces
- un outil web de maintenance de véhicule (qui suit et rappelle les choses à faire dessus)
- un outil de statistiques personnelles, qui permet de visualiser les données qu'on veut de manière
simple et de les comparer entre elles
Ces projets sont pour la plupart à leurs débuts et je ne sais pas s'ils seront un jour publiés. Si
vous avez des questions, n'hésitez pas.
Network Manager est une application Web développée par les étudiants de l'option SLAM, qui permet, via une interface graphique, la création, suppression et modification d'entrées DNS sur le domaine de CUB, et a vocation de simplifier l'administration de tous les autres services offerts. Les étudiants qui travaillent sur cette application doivent pouvoir la déployer rapidement dans leur environnement de développement et peuvent être amenés à tester (tout en conservant les données) plusieurs environnements (comme une version différente de PHP).
Il a donc été décidé de déployer cette application avec Docker.
Cette documentation détaille la version déployable de NetworkManager, incluant le contenu et l'explication des fichiers:
dockerfile_webdockerfile_bddcompose.yamlElle explique l'utilité et la fonction de chaque fichier, leurs interactions, la persistance des données, et le déploiement de NetworkManager.
Pour faire fonctionner NetworkManager, deux conteneurs sont définis : Le conteneur WEB pour l'application, et le conteneur BDD pour la base de données. Pour chaque conteneur, un dockerfile est créé. Ces derniers sont une sorte de template, ils créent une image personnalisée et on peut ensuite créer un conteneur à partir de cette image. L'image définit comment un conteneur se comporte et exécute des commandes à la création. Cela permet que chaque conteneur créé à partir d'une même image soit créé à partir d'une même base.
Le fichier compose, quant à lui, orchestre le déploiement, il construit les images à partir des dockerfiles, crée des conteneurs basés sur ces images, les met en relation, et crée un volume, un espace sur lequel les données persisteront même si les conteneurs sont supprimés. Il suffit de l'éxecuter et NetworkManager est instantanément opérationnel, peu importe la machine (du moment que docker est installé et que les fichiers sont tous au même endroit).
apt update && apt upgrade -y
apt install apt-transport-https ca-certificates curl gnupg lsb-release -y
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update && apt upgrade -y
apt install docker-ce docker-ce-cli containerd.io -y
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
Pour déployer NetworkManager, une fois docker installé, et les fichiers importés, il suffit d'éxecuter cette commande :
docker compose -f compose.yaml -p network_manager up -d
Ici, nous avons lancé le déploiement de NetworkManager via le fichier compose.yaml, et
créé un projet nommé network_manager. Cela a créé deux conteneurs,
conteneur_web et conteneur_bdd, qui resteront actifs. Nous pouvons les
visualiser avec la commande docker ps. Pour utiliser l'un d'entre eux via un terminal
bash, il suffit d'éxecuter la commande docker exec -it conteneur_xxx bash.
Le compose a également créé un volume, un espace sur lequel les données seront persistantes, et
conservées même si les conteneurs sont supprimés. Ce volume, nommé
network_manager_volume_bdd et visible en utilisant docker volume list, est
dédié à la protection des données de la base de données.
Enfin, ces deux conteneurs web et bdd sont basés sur les images image_web et
image_bdd construites à partir de leurs dockerfiles respectifs lors du compose. On peut
les voir en utilisant la commande docker images.
Si, à des fins de test, il est nécessaire de modifier un de ces fichiers et de redéployer le site,
j'ai mis à disposition un script bash, clean.sh (inclus dans les fichiers à
télécharger) permettant de supprimer tout le contenu d'un précédent déploiement (à noter qu'il ne
supprime pas le volume, pour que les données de la base de données persistent même après suppression
du conteneur_bdd). Pour l'exécuter, il suffit d'entrer :
bash clean.sh
compose.yaml :services:
WEB:
build:
context: .
dockerfile: dockerfile_web
image: image_web
container_name: conteneur_web
ports:
- "443:443"
depends_on:
- BDD
environment:
DB_HOST: conteneur_bdd
DB_PORT: 3306
DB_DATABASE: network_manager
DB_USERNAME: root
DB_PASSWORD: DBpassword
BDD:
build:
context: .
dockerfile: dockerfile_bdd
image: image_bdd
container_name: conteneur_bdd
environment:
MYSQL_ROOT_PASSWORD: DBpassword
MYSQL_DATABASE: network_manager
ports:
- "3306:3306"
restart: unless-stopped
volumes:
- volume_bdd:/var/lib/mysql
volumes:
volume_bdd:
Le fichier compose.yaml est utilisé pour orchestrer ce processus de déploiement. Il
définit deux "services" :
image_web construite à partir du fichier
dockerfile_web. Le port 443 du conteneur s'expose sur le port 443 de la machine sur
laquelle il est hébergé. Il dépend du service BDD pour se connecter à la base
de données, c'est à dire qu'il écoute ce qu'il s'y passe. Les variables d'environnement
nécessaires à la connexion à la base de données sont définies afin que le conteneur ait
l'autorisation de la consulter.
image_bdd construite à partir du fichier
dockerfile_bdd. Le port 3306 du conteneur s'expose sur le port 3306 de la machine
sur laquelle il est hébergé. Les variables d'environnement définissent le mot de passe root de
la base de données ainsi que le nom de la base de données, ces variables doivent correspondre à
celles fournies au conteneur_web. Le conteneur est configuré pour redémarrer
automatiquement sauf s'il est arrêté manuellement (car contrairement au service web, mariadb ne
tourne pas en arrière plan). Un volume, nommé volume_bdd, est également créé pour
faire persister les données de la base de données même si les conteneurs sont supprimés. Ainsi,
on peut déployer une nouvelle version de NetworkManager tout en conservant les modifications
ayant été faites sur la bdd depuis l'ancien déploiement. Lors du déploiement, ce volume
s'attache au nom du projet, il devient network_manager_volume_bdd (si on utilise ma
commande).
dockerfile_web :FROM debian:latest
RUN apt update && apt install -y \
apache2 \
ca-certificates \
ssl-cert \
composer \
apt-transport-https \
gpg \
php \
php-xml \
php-curl \
php-twig \
php-twig-i18n-extension \
php-zip \
php-tcpdf \
php-webmozart-assert \
php-symfony-yaml \
php-symfony-var-exporter \
php8.2-bz2 \
php8.2-gd \
php8.2-mysql \
php8.2-zip \
unzip \
git \
mariadb-client \
vim \
nano \
sudo \
net-tools \
dnsutils \
iputils-ping \
wget \
curl \
nmap \
tcpdump \
openssh-server \
locales
RUN wget -O composer-setup.php https://getcomposer.org/installer && \
php composer-setup.php --install-dir=/usr/local/bin --filename=composer && \
composer self-update
WORKDIR /var/www/html/
RUN git clone https://gitlab.com/siollb/NetworkManager.git && \
chown -R www-data:www-data NetworkManager
WORKDIR /var/www/html/NetworkManager
RUN composer install
RUN echo "APP_NAME=NetworkManager\n\
APP_ENV=local\n\
APP_KEY=base64:6lBl6mDUsxlF34f6V0Imc6KI2jZYi67GVhqW6VffmhE=\n\
APP_DEBUG=true\n\
WWWUSER=root\n\
WWWGROUP=root\n\
\n\
LOG_CHANNEL=stack\n\
LOG_LEVEL=debug\n\
\n\
DB_CONNECTION=mysql\n\
DB_HOST=conteneur_bdd\n\
DB_PORT=3306\n\
DB_DATABASE=network_manager\n\
DB_USERNAME=root\n\
DB_PASSWORD=DBpassword\n\
\n\
BIND_BASE_URL=172.31.30.109:8000\n\
BIND_API_KEY=tfgz0FUNHop4JRtLw2st/YyFavu3UMow8vsadVC7t44f5EkVQ4o4IsDZHXO/MLHg\n\
\n\
BROADCAST_DRIVER=log\n\
CACHE_DRIVER=file\n\
QUEUE_CONNECTION=sync\n\
SESSION_DRIVER=file\n\
SESSION_LIFETIME=120\n\
\n\
MEMCACHED_HOST=memcached" > .env
WORKDIR /etc/apache2/sites-available/
RUN echo "\n\
\n\
ServerAdmin webmaster@localhost\n\
DocumentRoot /var/www/html/NetworkManager/public\n\
\n\
\n\
Options Indexes FollowSymLinks MultiViews\n\
AllowOverride All\n\
\n\
\n\
\n\
Options Indexes FollowSymLinks MultiViews\n\
AllowOverride None\n\
Order allow,deny\n\
allow from all\n\
\n\
\n\
ErrorLog ${APACHE_LOG_DIR}/error.log\n\
CustomLog ${APACHE_LOG_DIR}/access.log combined\n\
SSLEngine on\n\
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem\n\
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key\n\
\n\
\n\
SSLOptions +StdEnvVars\n\
\n\
\n\
SSLOptions +StdEnvVars\n\
\n\
\n\
" > default-ssl.conf
RUN a2enmod rewrite && \
a2enmod ssl && \
a2ensite default-ssl.conf
CMD ["apache2ctl", "-D", "FOREGROUND"]
Le fichier dockerfile_web définit l'image Docker qui sera utilisée pour le conteneur
WEB de l'application NetworkManager. Il se base sur la dernière image de Debian
(debian:latest), et procède à l'installation de tous les paquets nécessaires au
fonctionnement de l'application :
Une fois les paquets installés, le Dockerfile clone le dépôt Git de l'application NetworkManager dans
le répertoire /var/www/html/NetworkManager et installe les dépendances PHP de
l'application à l'aide de Composer. Ensuite, il crée un fichier .env avec les
paramètres de configuration de l'application. À noter que BIND_BASE_URL utilise une ip
et non un nom de domaine, car la résolution DNS était impossible (mais l'IP ping, et avec NMAP, on
constate que le port 8000 est effectivement ouvert).
Puis il crée un fichier de configuration Apache default-ssl.conf pour configurer le
serveur web et activer le support SSL (car l'application utilise https, même si le certificat est
expiré).
Enfin, il active les modules Apache nécessaires à la mise en ligne du site et démarre le serveur Apache en tant que processus principal du conteneur (qui tournera en arrière plan, et donc laissera le conteneur actif).
dockerfile_bdd :FROM mariadb:lts
RUN apt update && apt install -y \
vim \
nano \
sudo \
net-tools \
dnsutils \
iputils-ping \
wget \
curl \
nmap \
tcpdump \
openssh-server \
locales
COPY network_manager.sql /docker-entrypoint-initdb.d/
Le fichier dockerfile_bdd définit l'image Docker qui sera utilisée pour le conteneur
BDD de la base de données de l'application NetworkManager. Il se base sur l'image
mariadb:lts (qui signifie Long Term Support et non latest :))
En plus de l'image de base, le Dockerfile installe quelques outils supplémentaires pour pouvoir debugger facilement.
Enfin, il copie le contenu du fichier network_manager.sql dans le répertoire
/docker-entrypoint-initdb.d/. Ce répertoire exécute automatiquement son contenu lors du
démarrage du conteneur. Cela permet d'initialiser la base de données avec les tables et les données
nécessaires au fonctionnement de l'application NetworkManager durant le déploiement. Pour des
raisons de lisibilité (et par manque de compétence), la documentation n'inclut pas le contenu du
fichier SQL, car il est très long et difficile à comprendre.
Je fais de petites créations graphiques pendant mon temps libre. J'ai appris en autodidacte, un peu de la même manière que je fais ma veille informatique. C'est une passion, alors j'ai naturellement pratiqué, recherché et progressé. Je m'oriente surtout sur les maquettes, de schémas ou d'interfaces, mais il m'arrive de créer d'autres choses (par exemple, je fais souvent mes propres fonds d'écran, et j'ai réalisé la quasi-totalité des miniatures du portfolio).
Ici, je vais vous montrer quelques-unes de mes productions, celles que je trouve les plus intéressantes et les plus diverses. Voyons ça :
L'image de la miniature est elle-même un de mes petits projets ! J'ai toujours voulu faire quelque chose de ce style (inspiré du design 'Printstream'), et je me suis dit que c'était l'occasion. C'est une sorte de croquis digital, avec des repères et des motifs (patterns)... On peut voir que je travaille avec Illustrator.
Si cette maquette d'interface vous dit quelque chose, c'est normal. À l'époque où je faisais du freelance, j'ai travaillé sur un premier design (plus tard adopté, mais je crois qu'il a changé maintenant) de l'interface d'un VPN très connu, qui portait le nom temporaire de PlasmaVPN lors de son développement. C'était à mes débuts, mais je trouve que c'est quand même intéressant. Je vous laisse deviner de quel VPN il s'agit
Ici aussi, un exemple d'un petit projet : j'ai voulu faire plus qu'un simple schéma Mermaid que j'aurais très bien pu générer par IA. J'ai voulu imiter le style visuel d'Android avec son interface Material Design.
Ici, un essai d'UI 'squelette', c'est-à-dire une interface présente pour prototyper ou avant le chargement du contenu concret. Je l'avais envoyé à Discord et ils m'avaient dit que c'était très propre. Anecdotique, mais sympa.
Enfin, pour changer un peu, une tentative d'imitation du style flat design, notamment inspiré par la chaîne YouTube In a Nutshell (Kurzgesagt). Aucun réel intérêt, sinon pour mon propre divertissement
Ce ne sont que des exemples parmi beaucoup d'autres, mais j'ai essayé de couvrir les domaines les plus intéressants pour montrer où je suis bon. Je ne fais pas que du dessin digital, j'ai aussi beaucoup d'expérience dans la photographie (et astrophotographie), ainsi que la retouche photo en général. J'utilise Photoshop. Cependant, j'estime (peut-être à tort) que ces domaines n'intéresseront pas grand monde, notamment car mon expérience en design graphique est plus prononcée que dans ces domaines. Et puis, sincèrement, je doute que quiconque ait exploré mon portfolio jusqu'ici.