MilekatUtils
Bibliothèque Java partagée par mes plugins Minecraft. Elle abstrait le stockage (MySQL, MariaDB, PostgreSQL, Elasticsearch) et la messagerie RabbitMQ.
- Java
- MySQL
- PostgreSQL
- RabbitMQ
README.md
Le cloud à portée d'idée.
Software DevOps Engineer
Avant l'informatique, j'ai fait de l'électrotechnique et de la robotique industrielle, avec un BTS en 2017 puis une licence d'automatisme en alternance. En 2020, pendant le confinement, j'ai appris Java en écrivant des plugins Minecraft, et je suis entré à EPITECH en alternance chez Société Générale CIB, où je suis aujourd'hui Software DevOps Engineer. À côté, je m'occupe de l'infrastructure des événements Minecraft d'Equinox Studios, jusqu'à une LAN de 108 joueurs à la Grande Arche de La Défense.
Mon parcours sous forme d'historique Git. Cliquez sur un commit pour le détail.
Quelques réalisations.
Bibliothèque Java partagée par mes plugins Minecraft. Elle abstrait le stockage (MySQL, MariaDB, PostgreSQL, Elasticsearch) et la messagerie RabbitMQ.
Plugin Bukkit de boutiques d'échange, avec une API et des tags personnalisables. Il gère plusieurs agencements, les échanges d'objets et d'argent et des modificateurs par joueur, et stocke ses données en SQL ou dans Elasticsearch.
Panneau de contrôle Kubernetes en temps réel, avec une carte des workloads et le pilotage du scaling KEDA via le RBAC natif.
Plugin Bukkit de gestion d'argent. Les joueurs sont regroupés par tags, une API publique permet d'en ajouter, et l'historique des transactions part dans Elasticsearch pour être visualisé dans Kibana.
Plugin de PNJ léger. Il utilise les Mannequins natifs sur Paper 1.21.9+ et se rabat sur NMS/ProtocolLib pour les versions plus anciennes, avec des événements d'interaction et des skins personnalisables.
Un des premiers systèmes de chat Minecraft que j'ai écrits, en Skript (2018).
Les technologies que j'utilise le plus, au travail comme sur mes projets.
Elasticsearch, c'est l'outil vers lequel je me tourne dès qu'il faut chercher dans des données ou les surveiller.
POST /incidents/_search
{
"query": {
"semantic": {
"field": "report",
"query": "players stuck in the nether portal"
}
},
"aggs": {
"by_server": { "terms": { "field": "server" } }
}
}
took: 18 ms · hits: 3 0.94 "Portal to the nether freezes on join" 0.91 "Stuck loading after entering the nether" 0.87 "Nether portal sends me back to spawn" aggregations.by_server: lobby-2 (2) · survival-1 (1)
J'utilise des agents IA pour opérer de vraies infrastructures, encadrés par des règles écrites à l'avance.
« Liste mes VMs chez mon hébergeur cloud. »
Les déclencheurs « VMs » et « hébergeur » correspondent à la skill hetzner, qui est chargée.
.claude/skills/hetzner/SKILL.md
C'est une lecture, donc l'agent prend le jeton en lecture seule et ne demande pas de confirmation. Le secret est lu depuis un fichier et n'est jamais affiché.
secrets/hetzner/<project>.env → HCLOUD_READ_TOKEN=••••••••
L'agent lance la CLI officielle hcloud.
$ hcloud server list -o columns=name,status,type
NAME STATUS TYPE
web-01 running cax21
lab-02 off cax11
Deux serveurs, dont un éteint. Rien n'a été modifié.
Exécutions reconstituées et anonymisées, fidèles au fonctionnement réel de mes skills.
Chaque intégration (SQL, Elasticsearch, Kubernetes, cloud) est une skill versionnée, avec ses déclencheurs, sa CLI officielle et l'emplacement de ses secrets. Je n'ai pas besoin de redonner la syntaxe à chaque demande.
Chaque intégration a deux jetons, un en lecture et un en écriture. L'agent utilise la lecture par défaut, et toute action qui modifie un état (DNS, cluster, base de données) attend ma confirmation explicite. Les secrets ne sont jamais affichés ni commités.
Ce qui se passe entre votre navigateur et mes services.
Envie d'échanger ? C'est par ici.
[email protected]:~$arthur contact --list
Vous êtes arrivé au bout de la page.