bchanot-cv/CV_Bastien_Chanot.html
Bastien Chanot 1ae73e0534 cv definitif
2026-05-17 04:26:29 +02:00

705 lines
23 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<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 href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;600;700&family=Fraunces:ital,wght@0,300;0,600;0,700;1,300&family=DM+Sans:wght@300;400;500&display=swap" rel="stylesheet">
<style>
:root {
/* Zones sombres (header, footer) */
--dark: #0d1b12;
--dark-mid: #183325;
/* Échelle verte — même teinte, 5 niveaux */
--g900: #0e3320; /* texte sur fond clair : très fort */
--g700: #1b5e3b; /* titres section, rôles, accroches */
--g500: #2d7a4f; /* bordures accent, liens */
--g300: #6ab98a; /* sur fond sombre : lisible */
--g100: #dff0e7; /* tag bg clair */
--g050: #eef7f1; /* skills block bg */
/* Typographie — neutrals chauds */
--ink-1: #111111; /* noms entreprises, school, titres forts */
--ink-2: #1e1e1e; /* corps de texte, bullets */
--ink-3: #636363; /* dates, lieux, labels légers */
/* Surfaces */
--page: #f5f3ec; /* fond document */
--rule: #d8d4c8; /* séparateurs */
--tag: #e6e2d8; /* tag générique */
--mono: 'JetBrains Mono', monospace;
--serif: 'Fraunces', serif;
--sans: 'DM Sans', sans-serif;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background: #fff;
font-family: var(--sans);
-webkit-font-smoothing: antialiased;
margin: 0;
padding: 0;
}
.page {
width: 210mm;
max-width: 100%;
margin: 0 auto;
background: var(--page);
overflow: hidden;
}
/* ── HEADER DARK BLOCK ── */
.cv-header {
background: var(--dark);
background-image: radial-gradient(ellipse 120% 200% at 0% 50%, var(--dark-mid) 0%, var(--dark) 60%);
padding: 18px 20mm 14px;
display: flex;
justify-content: space-between;
gap: 20px;
align-items: center;
position: relative;
overflow: hidden;
}
.cv-header::before {
content: '';
position: absolute;
left: 0; top: 0; bottom: 0;
width: 4px;
background: linear-gradient(to bottom, var(--g300), var(--g700));
}
.cv-header::after {
content: '';
position: absolute;
right: -40px; top: -40px;
width: 200px; height: 200px;
border-radius: 50%;
background: radial-gradient(circle, rgba(45,122,79,0.12) 0%, transparent 70%);
pointer-events: none;
}
.header-name {
font-family: var(--serif);
font-size: 26pt;
font-weight: 700;
color: #fff;
line-height: 1;
letter-spacing: -0.5px;
white-space: nowrap;
}
.header-title {
font-family: var(--mono);
font-size: 9pt;
font-weight: 600;
color: var(--g300);
letter-spacing: 2.5px;
text-transform: uppercase;
margin-top: 6px;
opacity: 0.9;
}
.header-contact {
text-align: right;
font-family: var(--mono);
font-size: 7.5pt;
color: rgba(255,255,255,0.55);
line-height: 1.8;
white-space: nowrap;
min-width: 240px;
flex-shrink: 0;
}
.contact-sep {
color: rgba(106,185,138,0.4);
margin: 0 4px;
}
.header-contact a {
color: rgba(255,255,255,0.8);
text-decoration: underline;
text-decoration-color: rgba(106,185,138,0.5);
text-underline-offset: 2px;
}
/* ── BODY ── */
.cv-body {
padding: 10px 20mm 12px;
background:
url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='6'%3E%3Ccircle cx='1' cy='1' r='0.6' fill='rgba(26,71,48,0.05)'/%3E%3C/svg%3E"),
linear-gradient(160deg, #f5f3ec 0%, #edeadf 55%, #f2efe6 100%);
}
.accroche {
font-family: var(--serif);
font-style: italic;
font-weight: 400;
font-size: 11pt;
color: var(--ink-2);
line-height: 1.55;
border-left: 3px solid var(--g500);
padding: 5px 0 5px 12px;
margin: 8px 0;
background: linear-gradient(to right, rgba(14,51,32,0.04), transparent);
}
.rule {
height: 1px;
background: linear-gradient(to right, var(--rule), rgba(216,212,200,0));
margin: 5px 0;
}
.section { margin-bottom: 6px; }
.section-title {
font-family: var(--mono);
font-size: 9pt;
font-weight: 700;
letter-spacing: 2.5px;
text-transform: uppercase;
color: var(--g700);
margin-bottom: 7px;
display: flex;
align-items: center;
gap: 8px;
}
.section-title::after {
content: '';
flex: 1;
height: 1px;
background: var(--rule);
}
/* ── XP ── */
.xp-block { margin-bottom: 6px; }
.xp-header {
display: flex;
justify-content: space-between;
align-items: baseline;
margin-bottom: 1px;
}
.xp-company {
font-family: var(--mono);
font-size: 12pt;
font-weight: 700;
color: var(--ink-1);
}
.xp-dates {
font-family: var(--mono);
font-size: 8.5pt;
color: var(--ink-3);
white-space: nowrap;
background: var(--tag);
padding: 1px 6px;
border-radius: 2px;
}
.xp-role {
font-size: 10pt;
font-weight: 500;
color: var(--g700);
margin-bottom: 3px;
}
.xp-loc {
font-size: 7.5pt;
color: var(--ink-3);
font-style: italic;
}
.xp-contract {
font-size: 8.5pt;
color: var(--ink-3);
font-style: italic;
margin-bottom: 3px;
margin-top: -2px;
}
ul.bullets { list-style: none; }
ul.bullets li {
padding-left: 13px;
position: relative;
margin-bottom: 2px;
font-size: 10pt;
font-weight: 500;
color: var(--ink-2);
line-height: 1.45;
}
ul.bullets li::before {
content: '▸';
position: absolute;
left: 0;
color: var(--g300);
font-size: 7pt;
top: 2px;
}
.tag {
display: inline-block;
background: var(--g100);
border: 1px solid #a8d4bc;
font-family: var(--mono);
font-size: 6.5pt;
padding: 1px 5px;
border-radius: 3px;
color: var(--g900);
margin: 0 1px;
white-space: nowrap;
}
/* ── PROJECTS ── */
.project-block { margin-bottom: 5px; }
.project-header {
display: flex;
justify-content: space-between;
align-items: baseline;
margin-bottom: 1px;
}
.project-name {
font-family: var(--mono);
font-size: 10.5pt;
font-weight: 700;
color: var(--ink-1);
}
.project-tagline {
font-size: 10pt;
font-weight: 500;
color: var(--g700);
font-style: italic;
}
.project-dates {
font-family: var(--mono);
font-size: 8pt;
color: var(--ink-3);
white-space: nowrap;
background: var(--tag);
padding: 1px 6px;
border-radius: 2px;
}
.project-desc {
font-size: 10pt;
font-weight: 500;
color: var(--ink-2);
line-height: 1.45;
}
.project-link {
font-family: var(--mono);
font-size: 8pt;
color: var(--g500);
margin-top: 1px;
}
/* ── SKILLS ── */
.skills-grid {
display: grid;
grid-template-columns: 115px 1fr;
gap: 1px 10px;
font-size: 8.4pt;
}
.skill-label {
font-family: var(--mono);
font-size: 9.5pt;
font-weight: 700;
color: var(--g700);
padding-top: 1px;
}
.skill-label::after {
content: " :";
}
.skill-values { font-size: 10pt; font-weight: 500; color: var(--ink-2); }
/* ── EDU ── */
.edu-block { margin-bottom: 5px; }
.edu-header {
display: flex;
justify-content: space-between;
align-items: baseline;
}
.edu-school {
font-family: var(--mono);
font-size: 11.5pt;
font-weight: 700;
color: var(--ink-1);
}
.edu-dates {
font-family: var(--mono);
font-size: 7.2pt;
color: var(--ink-3);
background: var(--tag);
padding: 1px 6px;
border-radius: 2px;
}
.edu-degree {
font-size: 10pt;
font-weight: 500;
color: var(--g700);
margin-bottom: 3px;
}
.edu-detail {
font-size: 10pt;
font-weight: 500;
color: var(--ink-2);
line-height: 1.55;
}
/* ── TWO COL BOTTOM ── */
.two-col {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 0 20px;
}
.lang-row { display: flex; gap: 4px; flex-wrap: wrap; }
.lang-item {
font-family: var(--mono);
font-size: 8.5pt;
color: var(--g900);
background: var(--g100);
padding: 2px 8px;
border-radius: 10px;
}
.lang-item .level {
color: var(--ink-3);
font-size: 7.5pt;
}
.interests { display: flex; flex-wrap: wrap; gap: 4px; }
.interest-tag {
font-family: var(--mono);
font-size: 8.5pt;
color: var(--g900);
background: var(--g100);
padding: 2px 8px;
border-radius: 10px;
}
/* ── FOOTER ── */
.footer-bar {
position: running(siteFooter);
background: var(--dark);
padding: 5px 20mm;
display: flex;
justify-content: space-between;
align-items: center;
}
.footer-bar span {
font-family: var(--mono);
font-size: 6.8pt;
color: rgba(255,255,255,0.3);
}
.footer-bar a {
font-family: var(--mono);
font-size: 6.8pt;
color: var(--g300);
text-decoration: none;
opacity: 0.7;
}
/* ── PRINT ── */
@media print {
body {
background:
url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='6'%3E%3Ccircle cx='1' cy='1' r='0.6' fill='rgba(26,71,48,0.05)'/%3E%3C/svg%3E"),
linear-gradient(160deg, #f5f3ec 0%, #edeadf 55%, #f2efe6 100%);
padding: 0;
}
.screen-label { display: none; }
.page { box-shadow: none; background: transparent; }
.cv-header { padding: 18px 14mm 14px; }
.cv-body { padding: 10px 14mm 12px; background: transparent; }
/* Saut de page forcé avant Deewee */
.break-before-page {
break-before: page;
page-break-before: always;
}
/* Cache le footer HTML, remplacé par le footer @page (auto-numéroté) */
.footer-bar { display: none; }
/* Footer pleine largeur sur chaque page, avec numérotation auto */
@page {
size: A4;
margin: 0 0 8mm 0;
@bottom-left-corner {
content: "\00a0";
background: #0d1b12;
}
@bottom-left {
content: "bchanot.fr";
background: #0d1b12;
color: #6ab98a;
font-family: 'JetBrains Mono', monospace;
font-size: 6.8pt;
padding-left: 20mm;
text-align: left;
vertical-align: middle;
width: 80mm;
}
@bottom-center {
content: "\00a0";
background: #0d1b12;
width: 50mm;
}
@bottom-right {
content: "Bastien Chanot · CV 2026 · " counter(page) "/" counter(pages);
background: #0d1b12;
color: rgba(255, 255, 255, 0.5);
font-family: 'JetBrains Mono', monospace;
font-size: 6.8pt;
padding-right: 20mm;
text-align: right;
vertical-align: middle;
width: 80mm;
}
@bottom-right-corner {
content: "\00a0";
background: #0d1b12;
}
}
}
</style>
</head>
<body>
<div class="page">
<div class="cv-header">
<div>
<div class="header-name">Bastien Chanot</div>
<div class="header-title">Développeur Systèmes &nbsp;·&nbsp; Embarqué &nbsp;·&nbsp; Backend</div>
</div>
<div class="header-contact">
<a href="tel:+33778822297">+33 7 78 82 22 97</a> <span class="contact-sep">·</span> <a href="mailto:bastien@bchanot.fr">bastien@bchanot.fr</a><br>
Yerres (91) · installation région nantaise prévue<br>
Full remote <span class="contact-sep">·</span> hybride Nantes <span class="contact-sep">·</span> ou 12 j/mois Paris<br>
Permis B &amp; A<br>
<a href="https://github.com/bchanot">GitHub</a> <span class="contact-sep">·</span> <a href="https://www.linkedin.com/in/bastien-chanot-4075a0a3/">LinkedIn</a> <span class="contact-sep">·</span> <a href="https://bchanot.fr">bchanot.fr</a>
</div>
</div>
<div class="cv-body">
<div class="accroche">
Développeur systèmes senior, 7 ans en C sur Linux bare-metal, kernel drivers et AOSP.
Conception, développement et déploiement de la stack cloud gaming serveur en production
(kernel, conteneurs AOSP, backend Rust temps réel, fleet GPU bare-metal) servant plusieurs centaines de joueurs simultanés.
Collaboration technique directe avec Canonical (Anbox) et Nvidia.
En recherche d'un CDI systèmes ou embarqué.
</div>
<div class="rule"></div>
<div class="section">
<div class="section-title">Expérience professionnelle</div>
<div class="xp-block">
<div class="xp-header">
<span class="xp-company">ZenQuality</span>
<span class="xp-dates">Apr 2026 - present</span>
</div>
<div class="xp-role">Développeur indépendant <span class="xp-loc">· Yerres · <a href="https://zenquality.fr" style="color:var(--g500);text-decoration:none;border-bottom:1px solid var(--g300);">zenquality.fr</a></span></div>
<ul class="bullets">
<li>Mission SEO et conformité légale RGPD pour PME service (Île-de-France) — audit technique Core Web Vitals + Schema.org + NAP, refonte CGV B2B/B2C, RGPD, mentions légales, mise en conformité médiateur CM2C. Plan d'action 12 sprints.</li>
<li>Site vitrine WordPress (<span class="tag">Gutenverse</span>) pour PME esthétique — conception, intégration, déploiement et support continu (hébergement client).</li>
<li>Setup et auto-hébergement de l'infra ZenQuality sur VPS <span class="tag">Scaleway</span> — stack <span class="tag">Astro</span> / <span class="tag">React</span> / <span class="tag">PHP 8</span> / <span class="tag">PostgreSQL</span> conteneurisée <span class="tag">Docker</span>, déploiement automatisé, pipeline de production complet.</li>
</ul>
</div>
<div class="xp-block">
<div class="xp-header">
<span class="xp-company">CareGame</span>
<span class="xp-dates">Mar 2019 - Mar 2025</span>
</div>
<div class="xp-role">Développeur logiciel — Systèmes &amp; Backend <span class="xp-loc">· Paris · Full remote dès 2020</span></div>
<ul class="bullets">
<li>Conception et maintenance de modules kernel Linux en <span class="tag">C</span> (x86 / ARM) — drivers d'interface hôte/conteneur orchestrant la communication bidirectionnelle entre Linux hôte et instances AOSP conteneurisées.</li>
<li>Conception de l'isolation CPU/GPU par session sur la fleet bare-metal — adaptation de modules GPU Nvidia, partitionnement 2 cœurs/session (physiques et émulés), sérialisation des accès concurrents sur zones GPU partagées. Résultat : passage à 32 sessions AAA stables/serveur.</li>
<li>Co-développement du backend <span class="tag">Rust</span> orchestrant le cycle de vie des conteneurs AOSP — communication WebSocket temps réel clients ↔ instances, intégration <span class="tag">Docker</span> et <span class="tag">LXC</span>, scheduling des sessions sur la fleet GPU.</li>
<li>Développement de virtual input devices AOSP en <span class="tag">Java</span> (touchscreen, gamepad) — pipeline complet inputs frontend → backend Rust → drivers hôtes → injection AOSP, optimisé pour latence temps réel gameplay AAA.</li>
<li>Architecture et exploitation de fleet GPU bare-metal <span class="tag">AWS g4dn.metal</span> (8× GPU T4, 64 vCPU, ~20 serveurs en pic) — isolation 2 cœurs CPU/session, ramdisk I/O, 32 sessions AAA simultanées par serveur. Plusieurs centaines de joueurs servis en parallèle (Asphalt 9 : 3 sessions / GPU T4).</li>
<li>Reprise et hardening d'un PoC <span class="tag">LXD</span> + <span class="tag">Docker</span> issu d'une R&amp;D Nvidia (intégration côté Docker principalement) — adaptation à la production cloud gaming, débogage kernel/conteneur, performance validée par les équipes Nvidia comme dépassant le scope initial du PoC.</li>
<li>Collaboration technique directe en anglais avec Canonical (<span class="tag">Anbox</span> + builds LXC/LXD non commerciaux, remontée bugs et feature requests) et Ampere Computing (intégration et benchmark de serveurs ARM pré-commerciaux pour évaluation de migration de fleet).</li>
<li>Pipeline d'installation automatique de jeux AOSP et persistance des sauvegardes utilisateur — fusion Android Backup natif + scripts custom pour couvrir les cas non gérés nativement (DRM, données externes).</li>
<li>Développement d'un outil d'orchestration <span class="tag">Bash</span> modulaire (1000+ lignes) pour la gestion du cycle de vie des conteneurs et l'intégration en production — parsing avancé des arguments Docker, préparation et lancement automatisé des conteneurs AOSP, brique appelée par la CI et le backend Rust.</li>
</ul>
</div>
<div class="xp-block break-before-page">
<div class="xp-header">
<span class="xp-company">Deewee</span>
<span class="xp-dates">Feb 2017 - Nov 2017</span>
</div>
<div class="xp-role">Développeur C — Système embarqué <span class="xp-loc">· Ivry-sur-Seine</span></div>
<div class="xp-contract">Stage 42 (6 mois) puis CDD (4 mois)</div>
<ul class="bullets">
<li>Développement du logiciel embarqué en <span class="tag">C</span> pour boîtier connecté basé Orange Pi (<span class="tag">Debian ARM</span>) — interception du flux <span class="tag">ESC/POS</span> d'une imprimante thermique, génération PNG du ticket, transfert WiFi direct vers application mobile à la connexion.</li>
<li>Intégration matérielle : <span class="tag">GPIO</span> physique (bouton + timeout), hotspot WiFi embarqué avec diffusion des credentials via <span class="tag">NFC</span> pour appairage automatique.</li>
</ul>
</div>
</div>
<div class="rule"></div>
<div class="section">
<div class="section-title">Projets &amp; Réalisations</div>
<div class="project-block">
<div class="project-header">
<div>
<span class="project-name">Code source &amp; projets persos</span>
<span class="project-tagline"> — serveur Git auto-hébergé en production</span>
</div>
<span class="project-dates">en continu</span>
</div>
<div class="project-desc">
Configuration Claude Code, dotfiles, projets bas-niveau (42, expérimentations C/Rust) — accessibles publiquement. Mirror automatique vers GitHub via push hook.
</div>
<div class="project-link"><a href="https://git.bchanot.fr/bchanot" style="color:var(--g500);text-decoration:none;border-bottom:1px solid var(--g300);">git.bchanot.fr/bchanot</a></div>
</div>
<div class="project-block">
<div class="project-header">
<div>
<span class="project-name">Homelab</span>
<span class="project-tagline"> — Infrastructure personnelle</span>
</div>
<span class="project-dates">en continu</span>
</div>
<div class="project-desc">
Auto-hébergement Git (<span class="tag">Gogs</span>) / DNS / VPN / SMB — NAS Asustor, Freebox <span class="tag">WireGuard</span> VPN site-to-site, Pi-hole, segmentation réseau, hardening <span class="tag">fail2ban</span>, <span class="tag">gocryptfs</span> sur dossiers sensibles.
</div>
</div>
</div>
<div class="rule"></div>
<div class="section">
<div class="section-title">Formation</div>
<div class="edu-block">
<div class="edu-header">
<span class="edu-school">École 42</span>
<span class="edu-dates">2015 2019</span>
</div>
<div class="edu-degree">Programmation informatique <span class="xp-loc">· Clichy</span></div>
<div class="edu-detail">
<strong>Systèmes / Kernel :</strong> ft_linux &amp; kfs-1 (Linux From Scratch — bootloader ASM, GDT, interruptions, driver char device) · drivers &amp; interrupt · process &amp; memory · little penguin<br>
<strong>Bas niveau :</strong> malloc (allocateur mémoire) · nm (parsing ELF) · ft_ls · ft_select · 42sh (shell POSIX complet)<br>
<strong>Réseau / Sécurité :</strong> ft_ssl_md5 (crypto) · snow crash (exploitation système) · lem-in · push-swap · doctor quine
</div>
</div>
<div class="edu-block">
<div class="edu-header">
<span class="edu-school">Next Formation</span>
<span class="edu-dates">2013 2015</span>
</div>
<div class="edu-degree">TSRIT — Technicien Supérieur Réseaux &amp; Télécoms, <em>Félicitations du jury</em> <span class="xp-loc">· Vincennes</span></div>
</div>
</div>
<div class="rule"></div>
<div class="section">
<div class="section-title">Compétences techniques</div>
<div class="skills-grid">
<div class="skill-label">Langages</div>
<div class="skill-values">C · Rust · Bash · Python · Java (AOSP/Android)</div>
<div class="skill-label">Embarqué</div>
<div class="skill-values">Linux kernel drivers · AOSP · ARM / x86 · GPIO · NFC · ESC/POS · Orange Pi · cross-compilation GCC</div>
<div class="skill-label">Conteneurs</div>
<div class="skill-values">Docker · LXC / LXD · QEMU · cgroups · namespaces</div>
<div class="skill-label">Backend</div>
<div class="skill-values">Rust · WebSocket · architecture GPU bare-metal · ramdisk I/O</div>
<div class="skill-label">Systèmes</div>
<div class="skill-values">Linux bare-metal · AOSP · Android Backup · systemd · SELinux</div>
<div class="skill-label">Cloud / Infra</div>
<div class="skill-values">AWS (EC2, g4dn bare-metal, IAM, S3, CloudWatch) · Scaleway VPS · OVH / Hetzner · Nginx · Apache · Let's Encrypt</div>
<div class="skill-label">DevOps</div>
<div class="skill-values">Git · GitHub Actions · GitLab · CI/CD</div>
<div class="skill-label">IA / Outils</div>
<div class="skill-values">Claude Code (agents/skills custom) · N8N · automatisation</div>
<div class="skill-label">Familier avec</div>
<div class="skill-values">C++</div>
</div>
</div>
<div class="rule"></div>
<div class="two-col">
<div class="section">
<div class="section-title">Langues</div>
<div class="lang-row">
<div class="lang-item">Anglais <span class="level">C2</span></div>
<div class="lang-item">Espagnol <span class="level">B1</span></div>
<div class="lang-item">Français <span class="level">natif</span></div>
</div>
</div>
<div class="section">
<div class="section-title">Centres d'intérêt</div>
<div class="interests">
<span class="interest-tag">Voyage</span>
<span class="interest-tag">Sciences</span>
<span class="interest-tag">Astronomie</span>
<span class="interest-tag">Nature</span>
<span class="interest-tag">Jeux vidéo</span>
<span class="interest-tag">Musique</span>
</div>
</div>
</div>
</div>
<div class="footer-bar">
<a href="https://bchanot.fr">bchanot.fr</a>
<span>Bastien Chanot · CV 2026</span>
</div>
</div>
</body>
</html>