feat: create FR + EN files & adapt Justfile

This commit is contained in:
installer
2025-01-16 18:28:22 +01:00
parent 90ec5b4acf
commit 77a4914ac1
3 changed files with 270 additions and 18 deletions

View File

@@ -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

View File

@@ -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
View 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)