Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d8ffa983b5 |
@@ -7,28 +7,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
## [1.1.0] — 2026-07-23
|
|
||||||
|
|
||||||
Profile geography moved to the Loire-Atlantique · Vendée · Morbihan zone, and
|
|
||||||
the CV restructured.
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
- Landing profile block: `Zone` (Loire-Atlantique · Vendée · Morbihan) replaces
|
|
||||||
the former `Localisation actuelle`; every mention of Yerres and of the planned
|
|
||||||
Nantes relocation removed, including the ZenQuality timeline entry.
|
|
||||||
- Presence stated as an explicit order of preference on both surfaces — full
|
|
||||||
remote, then hybrid or on-site inside the zone, Paris only as a fallback and
|
|
||||||
capped at 1–2 days per month.
|
|
||||||
- CV restructured: technical skills promoted above professional experience,
|
|
||||||
"Centres d'intérêt" dropped, markup trimmed 656 → 424 lines.
|
|
||||||
- `CLAUDE.md` content rules: geography note rewritten to the zone model, with an
|
|
||||||
explicit guard against reintroducing Yerres.
|
|
||||||
|
|
||||||
### Added
|
|
||||||
- `CV_Bastien_CHANOT_General.{html,pdf}` — general CV variant kept beside the
|
|
||||||
served one. Repo-only: not linked from the landing, not in the Dockerfile
|
|
||||||
COPY whitelist.
|
|
||||||
|
|
||||||
## [1.0.0] — 2026-07-06
|
## [1.0.0] — 2026-07-06
|
||||||
|
|
||||||
First tagged release. Landing page + CV live at https://bchanot.fr, served by
|
First tagged release. Landing page + CV live at https://bchanot.fr, served by
|
||||||
|
|||||||
@@ -122,10 +122,9 @@ Forbidden:
|
|||||||
- Profile state, including job search context, must stay consistent across
|
- Profile state, including job search context, must stay consistent across
|
||||||
index.html and CV. Currently: looking for **CDI** in embedded / systems
|
index.html and CV. Currently: looking for **CDI** in embedded / systems
|
||||||
software first; freelance missions (ZenQuality) in parallel.
|
software first; freelance missions (ZenQuality) in parallel.
|
||||||
- Geography: zone **Loire-Atlantique · Vendée · Morbihan**. Never mention
|
- Geography: Yerres (91) currently; relocation to the Nantes area (Pays de
|
||||||
Yerres or the Essonne. Presence, in order of preference: full remote →
|
la Loire) planned mid-term; full remote preferred, hybrid possible in
|
||||||
hybrid in the zone → on-site in the zone → Paris only as a fallback, and
|
Nantes, or hybrid 1–2 days/month if Paris.
|
||||||
only hybrid at 1–2 days per month maximum.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -1,424 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<!--
|
|
||||||
=====================================================================
|
|
||||||
CV MAÎTRE — Bastien Chanot
|
|
||||||
Personnalisation par offre : édite UNIQUEMENT les 3 zones marquées
|
|
||||||
▼ ZONE 1 : TITRE (la ligne sous le nom)
|
|
||||||
▼ ZONE 2 : ACCROCHE (2-3 lignes d'objectif, à adapter à l'entreprise)
|
|
||||||
▼ ZONE 3 : ORDRE (réordonne les <li> / blocs compétences selon l'offre)
|
|
||||||
Le reste (faits, dates, réalisations) ne bouge pas.
|
|
||||||
TODO une fois pour toutes : remplace les URLs LinkedIn / GitHub réelles
|
|
||||||
dans la ligne de contact (cherche "TODO-LIENS").
|
|
||||||
Palette reprise du CV v2.
|
|
||||||
=====================================================================
|
|
||||||
-->
|
|
||||||
<html lang="fr">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<title>Bastien Chanot — CV</title>
|
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
||||||
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400&display=swap" rel="stylesheet">
|
|
||||||
<style>
|
|
||||||
:root{
|
|
||||||
--ink:#14201a;
|
|
||||||
--paper:#eeebe0;
|
|
||||||
--band:#0d1b12;
|
|
||||||
--band2:#16301f;
|
|
||||||
--name:#ffffff;
|
|
||||||
--sage:#61ab7f;
|
|
||||||
--band-muted:#b7bbb8;
|
|
||||||
--green-deep:#1b5e3b;
|
|
||||||
--muted:#586b60;
|
|
||||||
--rule:#d6d2c3;
|
|
||||||
--chip-bg:#e6e2d4;
|
|
||||||
--chip-bd:#cfcabb;
|
|
||||||
--chip-ink:#1b5e3b;
|
|
||||||
}
|
|
||||||
|
|
||||||
*{ box-sizing:border-box; margin:0; padding:0; }
|
|
||||||
html{ background:#dcdfda; }
|
|
||||||
|
|
||||||
body{
|
|
||||||
font-family:"IBM Plex Sans", system-ui, "Segoe UI", Roboto, sans-serif;
|
|
||||||
color:var(--ink);
|
|
||||||
font-size:10.4pt;
|
|
||||||
line-height:1.42;
|
|
||||||
-webkit-font-smoothing:antialiased;
|
|
||||||
}
|
|
||||||
|
|
||||||
.page{
|
|
||||||
background:var(--paper);
|
|
||||||
width:210mm;
|
|
||||||
min-height:297mm;
|
|
||||||
margin:24px auto;
|
|
||||||
padding:0;
|
|
||||||
box-shadow:0 8px 40px rgba(0,0,0,.18);
|
|
||||||
overflow:hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------- HEADER BAND (full-bleed) ---------- */
|
|
||||||
.band{
|
|
||||||
background:linear-gradient(125deg, var(--band) 0%, var(--band2) 100%);
|
|
||||||
padding:11mm 14mm 8mm;
|
|
||||||
}
|
|
||||||
.head{
|
|
||||||
display:flex;
|
|
||||||
justify-content:space-between;
|
|
||||||
align-items:flex-start;
|
|
||||||
gap:18px;
|
|
||||||
}
|
|
||||||
.name{
|
|
||||||
font-size:26pt;
|
|
||||||
font-weight:700;
|
|
||||||
letter-spacing:-.02em;
|
|
||||||
line-height:1;
|
|
||||||
color:var(--name);
|
|
||||||
}
|
|
||||||
.name em{ font-style:normal; color:var(--sage); }
|
|
||||||
.title{
|
|
||||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
|
||||||
font-size:9.2pt;
|
|
||||||
font-weight:500;
|
|
||||||
letter-spacing:.05em;
|
|
||||||
color:var(--sage);
|
|
||||||
text-transform:uppercase;
|
|
||||||
margin-top:7px;
|
|
||||||
}
|
|
||||||
.contact{
|
|
||||||
text-align:right;
|
|
||||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
|
||||||
font-size:8.1pt;
|
|
||||||
line-height:1.75;
|
|
||||||
color:var(--band-muted);
|
|
||||||
white-space:nowrap;
|
|
||||||
}
|
|
||||||
.contact a{ color:var(--sage); text-decoration:none; }
|
|
||||||
.contact .strong{ color:var(--name); font-weight:500; }
|
|
||||||
|
|
||||||
/* ---------- CONTENT WRAPPER ---------- */
|
|
||||||
.content{ padding:13px 14mm 0; }
|
|
||||||
|
|
||||||
.status{
|
|
||||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
|
||||||
font-size:8.2pt;
|
|
||||||
font-weight:500;
|
|
||||||
letter-spacing:.04em;
|
|
||||||
color:var(--sage);
|
|
||||||
margin-top:6px;
|
|
||||||
}
|
|
||||||
.avail{
|
|
||||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
|
||||||
font-size:8.3pt;
|
|
||||||
color:var(--muted);
|
|
||||||
margin:2px 0 12px 0;
|
|
||||||
}
|
|
||||||
.avail b{ color:var(--green-deep); font-weight:600; }
|
|
||||||
|
|
||||||
/* ---------- PROFIL ---------- */
|
|
||||||
.profil{ margin-top:13px;
|
|
||||||
font-size:10.2pt;
|
|
||||||
line-height:1.5;
|
|
||||||
color:#22302a;
|
|
||||||
border-left:3px solid var(--green-deep);
|
|
||||||
padding-left:12px;
|
|
||||||
margin:0 0 15px 0;
|
|
||||||
max-width:172mm;
|
|
||||||
}
|
|
||||||
.profil strong{ color:var(--green-deep); font-weight:600; }
|
|
||||||
|
|
||||||
/* ---------- SECTION HEADERS ---------- */
|
|
||||||
.sec{
|
|
||||||
display:flex;
|
|
||||||
align-items:center;
|
|
||||||
gap:10px;
|
|
||||||
margin:0 0 9px 0;
|
|
||||||
break-after:avoid;
|
|
||||||
}
|
|
||||||
.sec h2{
|
|
||||||
font-size:10.5pt;
|
|
||||||
font-weight:600;
|
|
||||||
letter-spacing:.13em;
|
|
||||||
text-transform:uppercase;
|
|
||||||
color:var(--ink);
|
|
||||||
white-space:nowrap;
|
|
||||||
}
|
|
||||||
.sec .tok{
|
|
||||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
|
||||||
font-size:8pt;
|
|
||||||
color:var(--green-deep);
|
|
||||||
font-weight:500;
|
|
||||||
}
|
|
||||||
.sec .line{ flex:1; height:1px; background:var(--rule); }
|
|
||||||
|
|
||||||
section{ margin-bottom:14px; }
|
|
||||||
|
|
||||||
/* ---------- COMPÉTENCES ---------- */
|
|
||||||
.skills{ margin-left:2px; }
|
|
||||||
.skill-row{
|
|
||||||
display:grid;
|
|
||||||
grid-template-columns:34mm 1fr;
|
|
||||||
gap:8px;
|
|
||||||
padding:2.5px 0;
|
|
||||||
align-items:baseline;
|
|
||||||
}
|
|
||||||
.skill-row + .skill-row{ border-top:1px solid var(--rule); }
|
|
||||||
.skill-k{
|
|
||||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
|
||||||
font-size:8.2pt;
|
|
||||||
font-weight:500;
|
|
||||||
color:var(--green-deep);
|
|
||||||
letter-spacing:.01em;
|
|
||||||
}
|
|
||||||
.skill-v{ font-size:9.6pt; color:#22302a; }
|
|
||||||
.skill-v .sep{ color:var(--chip-bd); padding:0 1px; }
|
|
||||||
|
|
||||||
/* ---------- EXPÉRIENCE ---------- */
|
|
||||||
.entry{ margin-bottom:11px; }
|
|
||||||
.entry-top, .entry-role{ break-after:avoid; }
|
|
||||||
.entry-top{
|
|
||||||
display:flex;
|
|
||||||
justify-content:space-between;
|
|
||||||
align-items:baseline;
|
|
||||||
gap:12px;
|
|
||||||
}
|
|
||||||
.entry-co{ font-size:12pt; font-weight:600; color:var(--ink); }
|
|
||||||
.entry-date{
|
|
||||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
|
||||||
font-size:8.4pt;
|
|
||||||
color:var(--muted);
|
|
||||||
white-space:nowrap;
|
|
||||||
}
|
|
||||||
.entry-role{
|
|
||||||
font-size:9.7pt;
|
|
||||||
color:var(--green-deep);
|
|
||||||
font-weight:500;
|
|
||||||
margin:1px 0 5px;
|
|
||||||
}
|
|
||||||
.entry-role .meta{ color:var(--muted); font-weight:400; }
|
|
||||||
ul.bul{ list-style:none; orphans:2; widows:2; }
|
|
||||||
ul.bul li{
|
|
||||||
list-style:"▸ ";
|
|
||||||
margin-left:13px;
|
|
||||||
margin-bottom:3.5px;
|
|
||||||
font-size:9.7pt;
|
|
||||||
line-height:1.4;
|
|
||||||
color:#212d27;
|
|
||||||
break-inside:avoid;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul.bul li b{ color:var(--ink); font-weight:600; }
|
|
||||||
code.k{
|
|
||||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
|
||||||
font-size:8.4pt;
|
|
||||||
background:var(--chip-bg);
|
|
||||||
color:var(--chip-ink);
|
|
||||||
border:1px solid var(--chip-bd);
|
|
||||||
padding:.5px 4px;
|
|
||||||
border-radius:3px;
|
|
||||||
white-space:nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------- PROJETS / FORMATION grid ---------- */
|
|
||||||
.two{ display:grid; grid-template-columns:1fr 1fr; gap:9px 22px; }
|
|
||||||
.blk-h{ font-size:10.2pt; font-weight:600; color:var(--ink); }
|
|
||||||
.blk-sub{
|
|
||||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
|
||||||
font-size:8pt; color:var(--muted); margin:1px 0 4px;
|
|
||||||
}
|
|
||||||
.blk p{ font-size:9.4pt; line-height:1.4; color:#28332d; }
|
|
||||||
.blk a{ color:var(--green-deep); text-decoration:none; }
|
|
||||||
|
|
||||||
.langs{ font-size:9.8pt; color:#22302a; margin-left:2px; }
|
|
||||||
.langs b{ color:var(--ink); font-weight:600; }
|
|
||||||
.langs .sep{ color:var(--chip-bd); padding:0 6px; }
|
|
||||||
|
|
||||||
/* ---------- SCREEN FOOTER BAND ---------- */
|
|
||||||
.screen-foot{
|
|
||||||
background:var(--band);
|
|
||||||
color:#7e8b84;
|
|
||||||
font-family:"IBM Plex Mono", ui-monospace, monospace;
|
|
||||||
font-size:7.6pt;
|
|
||||||
padding:7px 14mm;
|
|
||||||
display:flex;
|
|
||||||
justify-content:space-between;
|
|
||||||
margin-top:18px;
|
|
||||||
}
|
|
||||||
.screen-foot a, .pdf-foot a{ color:inherit; text-decoration:none; }
|
|
||||||
|
|
||||||
/* ---------- PDF BACKDROP + FOOTER ---------- */
|
|
||||||
.bg{ display:none; }
|
|
||||||
.pdf-foot{ display:none; }
|
|
||||||
|
|
||||||
/* ---------- PRINT / PDF ---------- */
|
|
||||||
/* marges : 14mm haut (sauf p.1) · 0 L/R (bleed) · 13mm bas (réserve footer) */
|
|
||||||
@page{ size:A4; margin:14mm 0 13mm 0; }
|
|
||||||
@page :first{ margin-top:0; }
|
|
||||||
@media print{
|
|
||||||
html{ background:#fff; }
|
|
||||||
.two{ display:block; }
|
|
||||||
.two .blk{ margin-bottom:7px; break-inside:avoid; }
|
|
||||||
.page{ width:auto; min-height:0; margin:0; box-shadow:none; overflow:visible; background:transparent; }
|
|
||||||
.screen-foot{ display:none; }
|
|
||||||
/* fond crème pleine feuille, répété chaque page (déborde dans les marges) */
|
|
||||||
.bg{
|
|
||||||
display:block; position:fixed;
|
|
||||||
top:-14mm; bottom:-13mm; left:0; right:0;
|
|
||||||
background:var(--paper);
|
|
||||||
z-index:-1;
|
|
||||||
}
|
|
||||||
.pdf-foot{
|
|
||||||
display:flex;
|
|
||||||
position:fixed;
|
|
||||||
bottom:-13mm; left:0; right:0;
|
|
||||||
height:9mm;
|
|
||||||
align-items:center;
|
|
||||||
justify-content:space-between;
|
|
||||||
padding:0 14mm;
|
|
||||||
background:var(--band);
|
|
||||||
color:#8a968f;
|
|
||||||
font-family:"IBM Plex Mono", monospace;
|
|
||||||
font-size:7.4pt;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="page">
|
|
||||||
<div class="bg"></div>
|
|
||||||
|
|
||||||
<!-- ===== HEADER BAND ===== -->
|
|
||||||
<div class="band">
|
|
||||||
<header class="head">
|
|
||||||
<div>
|
|
||||||
<div class="name">Bastien <em>Chanot</em></div>
|
|
||||||
<!-- ▼ ZONE 1 : TITRE — adapte au poste visé (format court, séparé par ·) -->
|
|
||||||
<div class="title">Développeur Systèmes & Backend · C · Rust · Linux</div>
|
|
||||||
<div class="status">CDI · disponible</div>
|
|
||||||
<!-- ▲ ZONE 1 -->
|
|
||||||
</div>
|
|
||||||
<div class="contact">
|
|
||||||
<a href="tel:+33778822297" class="strong">+33 7 78 82 22 97</a><br>
|
|
||||||
<a href="mailto:bastien@bchanot.fr">bastien@bchanot.fr</a><br>
|
|
||||||
<a href="https://bchanot.fr">bchanot.fr</a> · <a href="https://git.bchanot.fr/bchanot">git.bchanot.fr</a><br>
|
|
||||||
<!-- TODO-LIENS : remplace par tes URLs réelles -->
|
|
||||||
<a href="https://www.linkedin.com/in/bastien-chanot-4075a0a3/">linkedin.com/in/bastien-chanot</a><br><a href="https://github.com/bchanot">github.com/bchanot</a><br>
|
|
||||||
Loire-Atlantique · Vendée · Morbihan<br>full remote ou hybride<br>Permis B & A
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- ===== CONTENT ===== -->
|
|
||||||
<div class="content">
|
|
||||||
|
|
||||||
<!-- ▼ ZONE 2 : ACCROCHE — réécris 2-3 lignes orientées vers l'entreprise / le poste -->
|
|
||||||
<p class="profil">
|
|
||||||
Développeur <strong>systèmes & backend</strong>, 7 ans en <strong>C et Rust sur Linux bare-metal</strong>. Du <strong>module kernel</strong> au backend temps réel : drivers, conteneurs (Docker / LXC / QEMU), exploitation d'une <strong>fleet GPU bare-metal</strong> en production, automatisation et CI/CD. Compréhension globale de la stack, du matériel au service.
|
|
||||||
</p>
|
|
||||||
<!-- ▲ ZONE 2 -->
|
|
||||||
|
|
||||||
<!-- ================= COMPÉTENCES ================= -->
|
|
||||||
<section>
|
|
||||||
<div class="sec"><span class="tok">~/</span><h2>Compétences techniques</h2><span class="line"></span></div>
|
|
||||||
<!-- ▼ ZONE 3a : réordonne les lignes selon l'offre -->
|
|
||||||
<div class="skills">
|
|
||||||
<div class="skill-row"><div class="skill-k">Langages</div><div class="skill-v">C <span class="sep">·</span> Rust <span class="sep">·</span> C++ <span class="sep">·</span> Bash <span class="sep">·</span> Python <span class="sep">·</span> Java (AOSP/Android)</div></div>
|
|
||||||
<div class="skill-row"><div class="skill-k">Systèmes & Embarqué</div><div class="skill-v">Linux kernel drivers <span class="sep">·</span> AOSP <span class="sep">·</span> ARM / x86 <span class="sep">·</span> GPIO <span class="sep">·</span> NFC <span class="sep">·</span> cross-compilation GCC <span class="sep">·</span> systemd <span class="sep">·</span> SELinux</div></div>
|
|
||||||
<div class="skill-row"><div class="skill-k">Conteneurs / Virtu.</div><div class="skill-v">Docker <span class="sep">·</span> LXC / LXD <span class="sep">·</span> QEMU <span class="sep">·</span> cgroups <span class="sep">·</span> namespaces</div></div>
|
|
||||||
<div class="skill-row"><div class="skill-k">Cloud & Infra</div><div class="skill-v">AWS (EC2, g4dn bare-metal, IAM, S3, CloudWatch) <span class="sep">·</span> Scaleway <span class="sep">·</span> OVH / Hetzner <span class="sep">·</span> Nginx</div></div>
|
|
||||||
<div class="skill-row"><div class="skill-k">DevOps & Outils</div><div class="skill-v">Git <span class="sep">·</span> GitHub Actions <span class="sep">·</span> GitLab CI <span class="sep">·</span> CI/CD <span class="sep">·</span> Claude Code (agents/skills custom) <span class="sep">·</span> N8N</div></div>
|
|
||||||
</div>
|
|
||||||
<!-- ▲ ZONE 3a -->
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- ================= EXPÉRIENCE ================= -->
|
|
||||||
<section>
|
|
||||||
<div class="sec"><span class="tok">~/</span><h2>Expérience professionnelle</h2><span class="line"></span></div>
|
|
||||||
|
|
||||||
<div class="entry">
|
|
||||||
<div class="entry-top"><div class="entry-co">ZenQuality</div><div class="entry-date">2026 — présent</div></div>
|
|
||||||
<div class="entry-role">Développeur indépendant · Infra & dév web <span class="meta">· zenquality.fr</span></div>
|
|
||||||
<ul class="bul">
|
|
||||||
<li>Déployé et opéré en production l'<b>infrastructure auto-hébergée</b> (uptime continu) en conteneurisant une stack <code class="k">Astro</code> <code class="k">React</code> <code class="k">PHP 8</code> <code class="k">PostgreSQL</code> sur VPS <code class="k">Scaleway</code>, avec pipeline de déploiement automatisé.</li>
|
|
||||||
<li>Livré <b>5 projets clients de bout en bout</b> depuis avril 2026 — conception, intégration, déploiement, hébergement et support continu.</li>
|
|
||||||
<li>Réalisé des <b>audits techniques</b> (Core Web Vitals, Schema.org) et la <b>mise en conformité légale</b> (RGPD, CGV B2B/B2C, médiateur CM2C) pour des PME — plan d'action sur 12 sprints.</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="entry">
|
|
||||||
<div class="entry-top"><div class="entry-co">CareGame</div><div class="entry-date">2019 — 2025</div></div>
|
|
||||||
<div class="entry-role">Développeur logiciel · Systèmes & Backend <span class="meta">· Paris · full remote dès 2020</span></div>
|
|
||||||
<!-- ▼ ZONE 3b : remonte les bullets les plus alignés avec l'offre -->
|
|
||||||
<ul class="bul">
|
|
||||||
<li>Conçu et maintenu les <b>modules kernel Linux en C</b> (x86 / ARM) assurant la communication bidirectionnelle hôte ↔ instances AOSP conteneurisées — drivers d'interface, brique critique du pipeline d'exécution serveur.</li>
|
|
||||||
<li>Co-développé le <b>backend Rust</b> orchestrant le cycle de vie des conteneurs AOSP (<code class="k">WebSocket</code> temps réel clients ↔ instances, scheduling sur la fleet GPU, intégration <code class="k">Docker</code> + <code class="k">LXC</code>) — support de <b>plusieurs centaines de joueurs simultanés</b>.</li>
|
|
||||||
<li>Porté la densité de production à <b>32 sessions de jeu AAA stables par serveur</b> en concevant l'isolation <b>CPU/GPU par session</b> — adaptation de modules GPU <code class="k">Nvidia</code>, partitionnement 2 cœurs/session (physiques et émulés), sérialisation des accès concurrents sur zones GPU partagées.</li>
|
|
||||||
<li>Architecturé et exploité une <b>fleet GPU bare-metal</b> <code class="k">AWS g4dn.metal</code> (8× T4, 64 vCPU, ~20 serveurs en pic) servant plusieurs centaines de joueurs en parallèle — isolation 2 cœurs CPU/session, ramdisk I/O (Asphalt 9 : 3 sessions / T4).</li>
|
|
||||||
<li>Industrialisé jusqu'en production un <b>PoC LXD + Docker</b> issu d'une R&D Nvidia — débogage kernel/conteneur, performance validée par les équipes Nvidia comme dépassant le scope initial du PoC.</li>
|
|
||||||
<li>Collaboré techniquement en <b>anglais</b> avec <b>Canonical</b> (Anbox, builds LXC/LXD non commerciaux, remontée bugs et feature requests) et <b>Ampere Computing</b> (benchmark de serveurs ARM pré-commerciaux pour évaluation de migration de fleet).</li>
|
|
||||||
<li>Automatisé l'installation des jeux AOSP et la persistance des sauvegardes (fusion Android Backup + scripts custom couvrant DRM et données externes) et développé un <b>outil d'orchestration Bash modulaire (1000+ lignes)</b> appelé par la CI et le backend Rust.</li>
|
|
||||||
<li>Atteint une <b>latence compatible gameplay AAA temps réel</b> en développant les virtual input devices AOSP en <code class="k">Java</code> (touchscreen, gamepad) sur le pipeline complet frontend → backend Rust → drivers hôtes → injection AOSP.</li>
|
|
||||||
</ul>
|
|
||||||
<!-- ▲ ZONE 3b -->
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="entry">
|
|
||||||
<div class="entry-top"><div class="entry-co">Deewee</div><div class="entry-date">2017</div></div>
|
|
||||||
<div class="entry-role">Développeur C · Système embarqué <span class="meta">· Ivry-sur-Seine · stage 42 (6 mois) puis CDD (4 mois)</span></div>
|
|
||||||
<ul class="bul">
|
|
||||||
<li>Développé en <b>C</b> le logiciel embarqué d'un boîtier connecté <code class="k">Orange Pi</code> (Debian ARM) interceptant le flux <b>ESC/POS</b> d'une imprimante thermique pour générer le PNG du ticket et le transférer en WiFi direct vers mobile.</li>
|
|
||||||
<li>Intégré le matériel : <b>GPIO</b> physique (bouton + timeout), hotspot WiFi embarqué avec appairage automatique par diffusion <b>NFC</b> des credentials.</li>
|
|
||||||
<li>Travaillé en cycle court sur un prototype fonctionnel — cross-compilation ARM, débogage sur cible, itérations rapides entre intégration matérielle et logiciel embarqué.</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- ================= PROJETS ================= -->
|
|
||||||
<section>
|
|
||||||
<div class="sec"><span class="tok">~/</span><h2>Projets & réalisations</h2><span class="line"></span></div>
|
|
||||||
<div class="two">
|
|
||||||
<div class="blk">
|
|
||||||
<div class="blk-h">Homelab — infrastructure personnelle</div>
|
|
||||||
<div class="blk-sub">en continu</div>
|
|
||||||
<p>Auto-hébergement Git / DNS / VPN / SMB — NAS Asustor, WireGuard site-to-site, Pi-hole, segmentation réseau, hardening fail2ban, gocryptfs sur dossiers sensibles.</p>
|
|
||||||
</div>
|
|
||||||
<div class="blk">
|
|
||||||
<div class="blk-h">Code source & projets persos</div>
|
|
||||||
<div class="blk-sub"><a href="https://git.bchanot.fr/bchanot">git.bchanot.fr/bchanot</a></div>
|
|
||||||
<p>Serveur Git auto-hébergé en production. Configuration Claude Code (agents/skills custom), dotfiles, projets bas-niveau C / Rust. Mirror automatique vers GitHub via push hook.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- ================= FORMATION ================= -->
|
|
||||||
<section>
|
|
||||||
<div class="sec"><span class="tok">~/</span><h2>Formation</h2><span class="line"></span></div>
|
|
||||||
<div class="two">
|
|
||||||
<div class="blk">
|
|
||||||
<div class="blk-h">École 42 — programmation informatique</div>
|
|
||||||
<div class="blk-sub">2015 — 2019 · Clichy</div>
|
|
||||||
<p>Kernel / systèmes (ft_linux, kfs-1, drivers, malloc), bas niveau (nm, 42sh POSIX, ft_ls), sécurité & algorithmie (snow crash, ft_ssl_md5, lem-in).</p>
|
|
||||||
</div>
|
|
||||||
<div class="blk">
|
|
||||||
<div class="blk-h">TSRIT — Next Formation</div>
|
|
||||||
<div class="blk-sub">2013 — 2015 · Vincennes · Félicitations du jury</div>
|
|
||||||
<p>BTS Technicien Supérieur Réseaux & Télécoms. Socle réseau (OSI, TCP/IP), administration Linux / Windows Server, virtualisation.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- ================= LANGUES ================= -->
|
|
||||||
<section>
|
|
||||||
<div class="sec"><span class="tok">~/</span><h2>Langues</h2><span class="line"></span></div>
|
|
||||||
<div class="langs"><b>Anglais</b> C2 <span class="sep">·</span> <b>Espagnol</b> B1 <span class="sep">·</span> <b>Français</b> natif</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
</div><!-- /content -->
|
|
||||||
|
|
||||||
<div class="screen-foot"><a href="https://bchanot.fr">bchanot.fr</a><span>Bastien Chanot · CV 2026</span></div>
|
|
||||||
<div class="pdf-foot"><a href="https://bchanot.fr">bchanot.fr</a><span>Bastien Chanot · CV 2026</span></div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
Binary file not shown.
+600
-368
File diff suppressed because it is too large
Load Diff
Binary file not shown.
+5
-5
@@ -1016,17 +1016,17 @@
|
|||||||
<p>Ce qui m'intéresse, c'est descendre jusqu'à ce qu'il n'y ait plus de magie — <strong>kernel, hardware, drivers</strong>. Là, soit ça marche, soit ça ne marche pas.</p>
|
<p>Ce qui m'intéresse, c'est descendre jusqu'à ce qu'il n'y ait plus de magie — <strong>kernel, hardware, drivers</strong>. Là, soit ça marche, soit ça ne marche pas.</p>
|
||||||
<p>C'est ce confort-là que je cherche dans une équipe : <strong>systèmes, embarqué, backend bas niveau</strong>, sur une stack dont on peut lire le code source. Pas envie d'aller vers le buzzword-driven — microservices à tout prix, framework du mois, archi conçue pour le pitch deck.</p>
|
<p>C'est ce confort-là que je cherche dans une équipe : <strong>systèmes, embarqué, backend bas niveau</strong>, sur une stack dont on peut lire le code source. Pas envie d'aller vers le buzzword-driven — microservices à tout prix, framework du mois, archi conçue pour le pitch deck.</p>
|
||||||
<p>Aujourd'hui indépendant sous la marque <strong>ZenQuality</strong>, mais avant tout en recherche d'un <strong>CDI en systèmes embarqués ou logiciel</strong> — les missions freelance se font en parallèle.</p>
|
<p>Aujourd'hui indépendant sous la marque <strong>ZenQuality</strong>, mais avant tout en recherche d'un <strong>CDI en systèmes embarqués ou logiciel</strong> — les missions freelance se font en parallèle.</p>
|
||||||
<p>Côté présence : <strong>full remote</strong> idéalement, sinon <strong>hybride ou présentiel</strong> en <strong>Loire-Atlantique · Vendée · Morbihan</strong>. Si l'équipe est à Paris, uniquement en <strong>hybride, 1 à 2 jours par mois maximum</strong>.</p>
|
<p>Côté présence : <strong>full remote</strong> idéalement, <strong>hybride possible sur Nantes</strong>, ou <strong>1 à 2 jours par mois</strong> si l'équipe est à Paris. Installation en <strong>région nantaise</strong> prévue à moyen terme.</p>
|
||||||
</div>
|
</div>
|
||||||
<dl class="about-callout">
|
<dl class="about-callout">
|
||||||
<dt>Recherche prioritaire</dt>
|
<dt>Recherche prioritaire</dt>
|
||||||
<dd>CDI systèmes embarqués / logiciel</dd>
|
<dd>CDI systèmes embarqués / logiciel</dd>
|
||||||
<dt>En parallèle</dt>
|
<dt>En parallèle</dt>
|
||||||
<dd>Missions freelance · ZenQuality</dd>
|
<dd>Missions freelance · ZenQuality</dd>
|
||||||
<dt>Zone</dt>
|
<dt>Localisation actuelle</dt>
|
||||||
<dd>Loire-Atlantique · Vendée · Morbihan</dd>
|
<dd>Yerres (91) · installation région nantaise prévue</dd>
|
||||||
<dt>Présence</dt>
|
<dt>Présence</dt>
|
||||||
<dd>Full remote · hybride ou présentiel dans la zone · Paris 1–2 j/mois max</dd>
|
<dd>Full remote · hybride Nantes · ou 1–2 j/mois Paris</dd>
|
||||||
<dt>Site pro</dt>
|
<dt>Site pro</dt>
|
||||||
<dd><a href="https://zenquality.fr" target="_blank" rel="noopener">zenquality.fr ↗</a></dd>
|
<dd><a href="https://zenquality.fr" target="_blank" rel="noopener">zenquality.fr ↗</a></dd>
|
||||||
</dl>
|
</dl>
|
||||||
@@ -1175,7 +1175,7 @@
|
|||||||
<div class="timeline-meta">
|
<div class="timeline-meta">
|
||||||
<span class="period">avr. 2026 — présent</span>
|
<span class="period">avr. 2026 — présent</span>
|
||||||
<span class="badge">En cours</span>
|
<span class="badge">En cours</span>
|
||||||
<span>Full remote</span>
|
<span>Yerres · Full remote</span>
|
||||||
</div>
|
</div>
|
||||||
<h3><a href="https://zenquality.fr" target="_blank" rel="noopener">ZenQuality</a></h3>
|
<h3><a href="https://zenquality.fr" target="_blank" rel="noopener">ZenQuality</a></h3>
|
||||||
<p class="timeline-role">Développeur indépendant · Systèmes & Backend</p>
|
<p class="timeline-role">Développeur indépendant · Systèmes & Backend</p>
|
||||||
|
|||||||
+1
-1
@@ -1 +1 @@
|
|||||||
1.1.0
|
1.0.0
|
||||||
|
|||||||
Reference in New Issue
Block a user