mirror of
https://github.com/mx42/cv.git
synced 2026-01-14 13:19:50 +01:00
feat: create FR + EN files & adapt Justfile
This commit is contained in:
18
Justfile
18
Justfile
@@ -1,5 +1,15 @@
|
|||||||
build:
|
default:
|
||||||
typst compile cv.typ
|
@just pdf "en"
|
||||||
|
@just pdf "fr"
|
||||||
|
|
||||||
watch:
|
build lang="en":
|
||||||
typst watch cv.typ
|
typst compile cv_{{lang}}.typ
|
||||||
|
|
||||||
|
pdf lang="en":
|
||||||
|
typst compile cv_{{lang}}.typ --format pdf
|
||||||
|
|
||||||
|
image lang="en":
|
||||||
|
typst compile cv_{{lang}}.typ --format png
|
||||||
|
|
||||||
|
watch lang="en":
|
||||||
|
typst watch cv_{{lang}}.typ
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#show: modern-resume.with(
|
#show: modern-resume.with(
|
||||||
author: "Xavier Morel",
|
author: "Xavier Morel",
|
||||||
job-title: "Developer (15 years of experience)",
|
job-title: "Software & Data Engineer (15 years of experience)",
|
||||||
// bio: "15 YoE",
|
// bio: "15 YoE",
|
||||||
// avatar: image(...)
|
// avatar: image(...)
|
||||||
contact-options: (
|
contact-options: (
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
// == Skills
|
// == Skills
|
||||||
|
|
||||||
Skills: #pill("Software", fill: true)
|
#pill("Software", fill: true)
|
||||||
#pill("Data", fill: true)
|
#pill("Data", fill: true)
|
||||||
#pill("CI/CD", fill: true)
|
#pill("CI/CD", fill: true)
|
||||||
#pill("Git", fill: true)
|
#pill("Git", fill: true)
|
||||||
@@ -24,22 +24,53 @@ Skills: #pill("Software", fill: true)
|
|||||||
|
|
||||||
// === Programming Languages
|
// === Programming Languages
|
||||||
|
|
||||||
#pill("Rust ★⯪☆ ♥︎♥︎♥︎")
|
#block(
|
||||||
#pill("Scala ★★☆ ♥︎♥︎♡")
|
stroke: black,
|
||||||
#pill("Haskell ★☆☆ ♥︎♥︎♡")
|
radius: 5pt,
|
||||||
#pill("Python ★★★ ♥︎♡♡")
|
table(
|
||||||
|
columns: (1.3fr, 1fr, 1fr, 1fr),
|
||||||
|
align: (center + horizon),
|
||||||
|
stroke: (x, y) => (
|
||||||
|
top: if y > 0 { black },
|
||||||
|
left: if x > 0 { black },
|
||||||
|
),
|
||||||
|
table.header(
|
||||||
|
[Proficiency #sym.arrow \ vs Affinity #sym.arrow.b],
|
||||||
|
[★☆☆], [★★☆], [★★★],
|
||||||
|
),
|
||||||
|
[♥︎♡♡], [], [], [Python],
|
||||||
|
[♥︎♥︎♡], [Haskell], [Scala], [],
|
||||||
|
[♥︎♥︎♥︎], [], [Rust], [],
|
||||||
|
)
|
||||||
|
)
|
||||||
|
// #pill("Rust ★⯪☆
|
||||||
|
// ♥︎♥︎♥︎
|
||||||
|
// ")
|
||||||
|
// #pill("Scala ★★☆
|
||||||
|
// ♥︎♥︎♡
|
||||||
|
// ")
|
||||||
|
// #pill("Haskell ★☆
|
||||||
|
// ☆
|
||||||
|
// ♥︎♥︎♡")
|
||||||
|
// #pill("Python ★★
|
||||||
|
// ★
|
||||||
|
// ♥︎♡♡
|
||||||
|
// ")
|
||||||
|
|
||||||
// === Languages
|
// === Languages
|
||||||
Languages: #pill("French (Native)", fill: true)
|
#pill("French (Native)", fill: true)
|
||||||
#pill("English (Fluent)", fill: true)
|
#pill("English (Fluent)", fill: true)
|
||||||
|
|
||||||
== Work Experience
|
// == Experiences
|
||||||
|
|
||||||
#experience-work(
|
#v(10pt)
|
||||||
|
|
||||||
|
#experience(
|
||||||
title: "Senior Data Engineer",
|
title: "Senior Data Engineer",
|
||||||
subtitle: "Prophesee",
|
subtitle: "Prophesee",
|
||||||
date-from: "Sept 2023",
|
date-from: "Sept 2023",
|
||||||
date-to: "Present (1yr+)",
|
date-to: "Present (1yr+)",
|
||||||
|
label: "",
|
||||||
task-description: [
|
task-description: [
|
||||||
- Design & development of the whole data infrastructure to process, store and restitute data for ML training
|
- Design & development of the whole data infrastructure to process, store and restitute data for ML training
|
||||||
- Development of some GUI tooling for data validation
|
- Development of some GUI tooling for data validation
|
||||||
@@ -51,16 +82,17 @@ Languages: #pill("French (Native)", fill: true)
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
#experience-work(
|
#experience(
|
||||||
title: "Senior Data Engineer",
|
title: "Senior Data Engineer",
|
||||||
subtitle: "CybelAngel",
|
subtitle: "CybelAngel",
|
||||||
date-from: "May 2019",
|
date-from: "May 2019",
|
||||||
date-to: "Sept 2023 (4yr 5mo)",
|
date-to: "Sept 2023 (4yr 5mo)",
|
||||||
|
label: "",
|
||||||
task-description: [
|
task-description: [
|
||||||
- Migration of an unscalable ML monolithic app to more adapted micro-services
|
- Migration of an unscalable ML monolithic app to more adapted micro-services
|
||||||
- Integration of a Data Warehouse on BigQuery to collect company data using Airflow and Pub/Sub + Apache Beam (Dataflow)
|
- Integration of a Data Warehouse on BigQuery to collect company data using Airflow and Pub/Sub + Apache Beam (Dataflow)
|
||||||
- Transformation on BigQuery with Airflow and DBT
|
- Transformation on BigQuery with Airflow and DBT
|
||||||
- Dashboards using Data Studio (Looker Studio) to give back data to different shareholders
|
- Dashboards using Data Studio (Looker Studio) to give back data to different stakeholders
|
||||||
#pill("Python")
|
#pill("Python")
|
||||||
#pill("Airflow")
|
#pill("Airflow")
|
||||||
#pill("BigQuery")
|
#pill("BigQuery")
|
||||||
@@ -79,11 +111,12 @@ Languages: #pill("French (Native)", fill: true)
|
|||||||
|
|
||||||
#v(30pt)
|
#v(30pt)
|
||||||
|
|
||||||
#experience-work(
|
#experience(
|
||||||
title: "Data Engineer",
|
title: "Data Engineer",
|
||||||
subtitle: "Hellowork",
|
subtitle: "Hellowork",
|
||||||
date-from: "June 2017",
|
date-from: "June 2017",
|
||||||
date-to: "May 2019 (2yr)",
|
date-to: "May 2019 (2yr)",
|
||||||
|
label: "",
|
||||||
task-description: [
|
task-description: [
|
||||||
- Data collection pipelines using Airflow on Azure Cloud
|
- Data collection pipelines using Airflow on Azure Cloud
|
||||||
- Setup of a small Hadoop cluster (YARN+HDFS) to run local transform Spark pipelines
|
- Setup of a small Hadoop cluster (YARN+HDFS) to run local transform Spark pipelines
|
||||||
@@ -101,11 +134,12 @@ Languages: #pill("French (Native)", fill: true)
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
#experience-work(
|
#experience(
|
||||||
title: "Software Engineer",
|
title: "Software Engineer",
|
||||||
subtitle: "Keyade (GroupM/WPP)",
|
subtitle: "Keyade (GroupM/WPP)",
|
||||||
date-from: "July 2012",
|
date-from: "July 2012",
|
||||||
date-to: "June 2017 (5 yr)",
|
date-to: "June 2017 (5 yr)",
|
||||||
|
label: "",
|
||||||
task-description: [
|
task-description: [
|
||||||
- Integrating remote API data into the company infra
|
- Integrating remote API data into the company infra
|
||||||
- Writing ad-revenue attribution engine
|
- Writing ad-revenue attribution engine
|
||||||
@@ -122,12 +156,13 @@ Languages: #pill("French (Native)", fill: true)
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
#experience-work(
|
#experience(
|
||||||
title: "Web Developer",
|
title: "Web Developer",
|
||||||
subtitle: "RegimeCoach",
|
subtitle: "RegimeCoach",
|
||||||
facility-description: "Intern Nov 2008 ~ Sept 2009 (11mo)",
|
facility-description: "Intern Nov 2008 ~ Sept 2009 (11mo)",
|
||||||
date-from: "Sept 2009",
|
date-from: "Sept 2009",
|
||||||
date-to: "July 2012 (2yr 11mo)",
|
date-to: "July 2012 (2yr 11mo)",
|
||||||
|
label: "",
|
||||||
task-description: [
|
task-description: [
|
||||||
- Joomla! CMS maintenance
|
- Joomla! CMS maintenance
|
||||||
- Development of some rule engine using logic programming (Smodels + Lparse)
|
- Development of some rule engine using logic programming (Smodels + Lparse)
|
||||||
207
cv_fr.typ
Normal file
207
cv_fr.typ
Normal file
@@ -0,0 +1,207 @@
|
|||||||
|
#import "@preview/modern-resume:0.1.0": *
|
||||||
|
|
||||||
|
#set text(lang: "fr");
|
||||||
|
|
||||||
|
#show: modern-resume.with(
|
||||||
|
author: "Xavier Morel",
|
||||||
|
job-title: "Software & Data Engineer (15 ans d'expérience)",
|
||||||
|
// bio: "15 YoE",
|
||||||
|
// avatar: image(...)
|
||||||
|
contact-options: (
|
||||||
|
email: link("mailto:morelx42@protonmail.com")[morelx42\@protonmail.com],
|
||||||
|
mobile: "(+33)6.63.58.81.45",
|
||||||
|
location: "France (remote)",
|
||||||
|
linkedin: link("https://linkedin.com/in/xavier-morel-08307b261")[linkedin/xavier-morel],
|
||||||
|
github: link("https://github.com/mx42")[github/mx42],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
// == Compétences
|
||||||
|
|
||||||
|
#pill("Logiciel", fill: true)
|
||||||
|
#pill("Data", fill: true)
|
||||||
|
#pill("CI/CD", fill: true)
|
||||||
|
#pill("Git", fill: true)
|
||||||
|
#pill("Infra-as-Code", fill: true)
|
||||||
|
|
||||||
|
// === Langages de programmation
|
||||||
|
|
||||||
|
#block(
|
||||||
|
stroke: black,
|
||||||
|
radius: 5pt,
|
||||||
|
table(
|
||||||
|
columns: (1.3fr, 1fr, 1fr, 1fr),
|
||||||
|
align: (center + horizon),
|
||||||
|
stroke: (x, y) => (
|
||||||
|
top: if y > 0 { black },
|
||||||
|
left: if x > 0 { black },
|
||||||
|
),
|
||||||
|
table.header(
|
||||||
|
[Efficacité #sym.arrow \ vs Affinité #sym.arrow.b],
|
||||||
|
[★☆☆], [★★☆], [★★★],
|
||||||
|
),
|
||||||
|
[♥︎♡♡], [], [], [Python],
|
||||||
|
[♥︎♥︎♡], [Haskell], [Scala], [],
|
||||||
|
[♥︎♥︎♥︎], [], [Rust], [],
|
||||||
|
)
|
||||||
|
)
|
||||||
|
// #pill("Rust ★⯪☆
|
||||||
|
// ♥︎♥︎♥︎
|
||||||
|
// ")
|
||||||
|
// #pill("Scala ★★☆
|
||||||
|
// ♥︎♥︎♡
|
||||||
|
// ")
|
||||||
|
// #pill("Haskell ★☆
|
||||||
|
// ☆
|
||||||
|
// ♥︎♥︎♡")
|
||||||
|
// #pill("Python ★★
|
||||||
|
// ★
|
||||||
|
// ♥︎♡♡
|
||||||
|
// ")
|
||||||
|
|
||||||
|
// === Languages
|
||||||
|
#pill("Français (Natif)", fill: true)
|
||||||
|
#pill("Anglais (Professionnel)", fill: true)
|
||||||
|
|
||||||
|
// == Experiences
|
||||||
|
|
||||||
|
#v(10pt)
|
||||||
|
|
||||||
|
#experience(
|
||||||
|
title: "Senior Data Engineer",
|
||||||
|
subtitle: "Prophesee",
|
||||||
|
date-from: "Sept 2023",
|
||||||
|
date-to: "Présent (1an+)",
|
||||||
|
label: "",
|
||||||
|
task-description: [
|
||||||
|
- Design & développement de l'infrastructure pour traîter, stocker et restituer les données pour l'entraînement ML
|
||||||
|
- Développement d'outils et IU pour la validation des données
|
||||||
|
- Assistance à la mise en place de pratiques de développement standard pour l'industrie
|
||||||
|
#pill("Python") #pill("Rust")
|
||||||
|
#pill("Github Actions")
|
||||||
|
#pill("PyQT") #pill("AWS S3") #pill("MongoDB") #pill("API")
|
||||||
|
#pill("Télétravail complet: Paris + Grenoble, France")
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
#experience(
|
||||||
|
title: "Senior Data Engineer",
|
||||||
|
subtitle: "CybelAngel",
|
||||||
|
date-from: "Mai 2019",
|
||||||
|
date-to: "Sept 2023 (4 ans 5 mois)",
|
||||||
|
label: "",
|
||||||
|
task-description: [
|
||||||
|
- Migration d'une application monolithique ML en micro-services mieux adaptés
|
||||||
|
- Intégration d'un Data Warehouse sur BigQuery pour collecter les données de l'entreprise en utilisant Airflow, Pub/Sub et Apache Beam (Dataflow)
|
||||||
|
- Transformations sur BigQuery avec Airflow et DBT
|
||||||
|
- Tableaux de bord Data Studio (Looker Studio) pour restituer la donnée aux décideurs
|
||||||
|
#pill("Python")
|
||||||
|
#pill("Airflow")
|
||||||
|
#pill("BigQuery")
|
||||||
|
#pill("DBT")
|
||||||
|
#pill("Java")
|
||||||
|
#pill("Apache Beam")
|
||||||
|
#pill("BigTable")
|
||||||
|
#pill("Pub/Sub")
|
||||||
|
#pill("RabbitMQ")
|
||||||
|
#pill("Kubernetes")
|
||||||
|
#pill("Terraform")
|
||||||
|
#pill("Google Cloud")
|
||||||
|
#pill("Télétravail complet: Paris, France")
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
#v(30pt)
|
||||||
|
|
||||||
|
#experience(
|
||||||
|
title: "Data Engineer",
|
||||||
|
subtitle: "Hellowork",
|
||||||
|
date-from: "Juin 2017",
|
||||||
|
date-to: "Mai 2019 (2 ans)",
|
||||||
|
label: "",
|
||||||
|
task-description: [
|
||||||
|
- Pipeline de collecte de données utilisant Airflow, sur le Cloud Azure
|
||||||
|
- Mise en place d'un cluster Hadoop (YARN+HDFS) pour exécuter des pipelines de transformations locales avec Spark
|
||||||
|
#pill("Scala")
|
||||||
|
#pill("Python")
|
||||||
|
#pill("Airflow")
|
||||||
|
#pill("Apache Spark")
|
||||||
|
#pill("Azure")
|
||||||
|
#pill("Hadoop Setup")
|
||||||
|
#pill("Apache YARN")
|
||||||
|
#pill("HDFS")
|
||||||
|
#pill("Cassandra")
|
||||||
|
#pill("Puppet")
|
||||||
|
#pill("Télétravail hybride: Rennes, France")
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
#experience(
|
||||||
|
title: "Software Engineer",
|
||||||
|
subtitle: "Keyade (GroupM/WPP)",
|
||||||
|
date-from: "Juillet 2012",
|
||||||
|
date-to: "Juin 2017 (5 ans)",
|
||||||
|
label: "",
|
||||||
|
task-description: [
|
||||||
|
- Intégration des données des API externes dans l'infrastructure de l'entreprise
|
||||||
|
- Écriture du moteur d'attribution des revenus publicitaires
|
||||||
|
- Migration sur des technologies Big Data Hadoop (HDFS/HBase) avec Apache Storm et MapReduce
|
||||||
|
#pill("PHP")
|
||||||
|
#pill("Java")
|
||||||
|
#pill("Apache Storm")
|
||||||
|
#pill("MapReduce")
|
||||||
|
#pill("MySQL")
|
||||||
|
#pill("HBase")
|
||||||
|
#pill("HDFS")
|
||||||
|
#pill("API")
|
||||||
|
#pill("Sur site: Paris, France")
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
#experience(
|
||||||
|
title: "Web Developer",
|
||||||
|
subtitle: "RegimeCoach",
|
||||||
|
facility-description: "Stage Nov 2008 ~ Sept 2009 (11 mois)",
|
||||||
|
date-from: "Sept 2009",
|
||||||
|
date-to: "Juillet 2012 (2 ans 11 mois)",
|
||||||
|
label: "",
|
||||||
|
task-description: [
|
||||||
|
- Maintenance d'un site sur Joomla!
|
||||||
|
- Développement d'un moteur de règles en utilisant de la programmation logique (Smodels+Lparse)
|
||||||
|
- Développement d'outils backend sur PHP, ordonnancement de tâches en utilisant Gearman
|
||||||
|
- Initiation à la gestion de projets professionnels (travail d'équipe, ticketing, versionnage, etc)
|
||||||
|
#pill("PHP")
|
||||||
|
#pill("Javascript")
|
||||||
|
#pill("HTML/CSS")
|
||||||
|
#pill("MySQL")
|
||||||
|
#pill("Joomla!")
|
||||||
|
#pill("Gearman")
|
||||||
|
#pill("Smodels")
|
||||||
|
#pill("On-site: Paris, France")
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
// == Education
|
||||||
|
|
||||||
|
// #experience(
|
||||||
|
// title: "Eq. Master's degree",
|
||||||
|
// subtitle: "Epitech Paris",
|
||||||
|
// date-from: "Sept 2006",
|
||||||
|
// date-to: "Sept 2009",
|
||||||
|
// label: ""
|
||||||
|
// )
|
||||||
|
|
||||||
|
// #experience-edu(
|
||||||
|
// title: "Baccalauréat Scientifique",
|
||||||
|
// subtitle: "Lycée Marie-Curie, Nogent-sur-Oise (60)",
|
||||||
|
// date-from: "2003",
|
||||||
|
// date-to: "2006",
|
||||||
|
// task-description: [
|
||||||
|
// - Maths option
|
||||||
|
// ]
|
||||||
|
// )
|
||||||
|
|
||||||
|
// == Languages
|
||||||
|
|
||||||
|
// #pill("French (Native)", fill: true)
|
||||||
|
// #pill("English (Fluent)", fill: true)
|
||||||
Reference in New Issue
Block a user