From 77a4914ac102557e2404504838ba14d27cfc2494 Mon Sep 17 00:00:00 2001 From: installer Date: Thu, 16 Jan 2025 18:28:22 +0100 Subject: [PATCH] feat: create FR + EN files & adapt Justfile --- Justfile | 18 +++- cv.typ => cv_en.typ | 63 +++++++++++--- cv_fr.typ | 207 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 270 insertions(+), 18 deletions(-) rename cv.typ => cv_en.typ (80%) create mode 100644 cv_fr.typ diff --git a/Justfile b/Justfile index 6c007a9..1a24555 100644 --- a/Justfile +++ b/Justfile @@ -1,5 +1,15 @@ -build: - typst compile cv.typ +default: + @just pdf "en" + @just pdf "fr" -watch: - typst watch cv.typ +build lang="en": + 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 diff --git a/cv.typ b/cv_en.typ similarity index 80% rename from cv.typ rename to cv_en.typ index d7e11bb..41cc18c 100644 --- a/cv.typ +++ b/cv_en.typ @@ -2,7 +2,7 @@ #show: modern-resume.with( author: "Xavier Morel", - job-title: "Developer (15 years of experience)", + job-title: "Software & Data Engineer (15 years of experience)", // bio: "15 YoE", // avatar: image(...) contact-options: ( @@ -16,7 +16,7 @@ // == Skills -Skills: #pill("Software", fill: true) +#pill("Software", fill: true) #pill("Data", fill: true) #pill("CI/CD", fill: true) #pill("Git", fill: true) @@ -24,22 +24,53 @@ Skills: #pill("Software", fill: true) // === Programming Languages -#pill("Rust ★⯪☆ ♥︎♥︎♥︎") -#pill("Scala ★★☆ ♥︎♥︎♡") -#pill("Haskell ★☆☆ ♥︎♥︎♡") -#pill("Python ★★★ ♥︎♡♡") +#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( + [Proficiency #sym.arrow \ vs Affinity #sym.arrow.b], + [★☆☆], [★★☆], [★★★], + ), + [♥︎♡♡], [], [], [Python], + [♥︎♥︎♡], [Haskell], [Scala], [], + [♥︎♥︎♥︎], [], [Rust], [], + ) +) +// #pill("Rust ★⯪☆ +// ♥︎♥︎♥︎ +// ") +// #pill("Scala ★★☆ +// ♥︎♥︎♡ +// ") +// #pill("Haskell ★☆ +// ☆ +// ♥︎♥︎♡") +// #pill("Python ★★ +// ★ +// ♥︎♡♡ +// ") // === Languages -Languages: #pill("French (Native)", fill: true) +#pill("French (Native)", fill: true) #pill("English (Fluent)", fill: true) -== Work Experience +// == Experiences -#experience-work( +#v(10pt) + +#experience( title: "Senior Data Engineer", subtitle: "Prophesee", date-from: "Sept 2023", date-to: "Present (1yr+)", + label: "", task-description: [ - Design & development of the whole data infrastructure to process, store and restitute data for ML training - 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", subtitle: "CybelAngel", date-from: "May 2019", date-to: "Sept 2023 (4yr 5mo)", + label: "", task-description: [ - 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) - 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("Airflow") #pill("BigQuery") @@ -79,11 +111,12 @@ Languages: #pill("French (Native)", fill: true) #v(30pt) -#experience-work( +#experience( title: "Data Engineer", subtitle: "Hellowork", date-from: "June 2017", date-to: "May 2019 (2yr)", + label: "", task-description: [ - Data collection pipelines using Airflow on Azure Cloud - 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", subtitle: "Keyade (GroupM/WPP)", date-from: "July 2012", date-to: "June 2017 (5 yr)", + label: "", task-description: [ - Integrating remote API data into the company infra - Writing ad-revenue attribution engine @@ -122,12 +156,13 @@ Languages: #pill("French (Native)", fill: true) ] ) -#experience-work( +#experience( title: "Web Developer", subtitle: "RegimeCoach", facility-description: "Intern Nov 2008 ~ Sept 2009 (11mo)", date-from: "Sept 2009", date-to: "July 2012 (2yr 11mo)", + label: "", task-description: [ - Joomla! CMS maintenance - Development of some rule engine using logic programming (Smodels + Lparse) diff --git a/cv_fr.typ b/cv_fr.typ new file mode 100644 index 0000000..619b323 --- /dev/null +++ b/cv_fr.typ @@ -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)