Add work experience

master
Félix Desmaretz 2024-01-23 19:22:48 +01:00
parent 6c0abb045c
commit 796e41ff9c
5 changed files with 174 additions and 88 deletions

View File

@ -31,7 +31,6 @@
#if (uservars.at("headingsmallcaps", default:false)) { #if (uservars.at("headingsmallcaps", default:false)) {
smallcaps(it.body) smallcaps(it.body)
} else { } else {
// upper(it.body)
it.body it.body
} }
#v(-0.75em) #line(length: 100%, stroke: 1pt + black) // draw a line #v(-0.75em) #line(length: 100%, stroke: 1pt + black) // draw a line
@ -109,15 +108,17 @@
] ]
} }
#let cvwork(info, isbreakable: true) = { #let cvwork(lang, info, isbreakable: true) = {
if info.experience != none {block[ if info.experience != none {block[
== Work Experience == #utils.getWithLang(lang, info.experience.title)
#for w in info.experience { #for w in info.experience.content {
let wwith = utils.getWithLang(lang, w.with)
let wwhere = utils.getWithLang(lang, w.where)
block(width: 100%, breakable: isbreakable)[ block(width: 100%, breakable: isbreakable)[
#if w.url != none [ #if w.url != none [
*#link(w.url)[#w.with]* #h(1fr) *#w.where* \ *#link(utils.getWithLang(lang, w.url))[#wwith]* #h(1fr) *#wwhere* \
] else [ ] else [
*#w.with* #h(1fr) *#w.where* \ *#wwith* #h(1fr) *#wwhere* \
] ]
] ]
// create a block layout for each work entry // create a block layout for each work entry
@ -126,14 +127,14 @@
if index != 0 {v(0.6em)} if index != 0 {v(0.6em)}
block(width: 100%, breakable: isbreakable, above: 0.6em)[ block(width: 100%, breakable: isbreakable, above: 0.6em)[
// parse ISO date strings into datetime objects // parse ISO date strings into datetime objects
#let start = utils.strpdate(p.startDate) #let start = utils.strpdate(lang, p.startDate)
#let end = utils.strpdate(p.endDate) #let end = utils.strpdate(lang, p.endDate)
// line 2: position and date range // line 2: position and date range
#text(style: "italic")[#p.what] #h(1fr) #text(style: "italic")[#utils.getWithLang(lang, p.what)] #h(1fr)
#start #sym.dash.en #end \ #start #sym.dash.en #end \
// highlights or description // highlights or description
#for hi in p.why [ #for hi in utils.getWithLang(lang, p.why) [
- #eval(hi, mode: "markup") - #eval(utils.getWithLang(lang, hi), mode: "markup")
] ]
] ]
index = index + 1 index = index + 1
@ -142,12 +143,12 @@
]} ]}
} }
#let cveducation(info, isbreakable: true) = { #let cveducation(lang, info, isbreakable: true) = {
if info.education != none {block[ if info.education != none {block[
== Education == Education
#for edu in info.education { #for edu in info.education {
let start = utils.strpdate(edu.startDate) let start = utils.strpdate(lang, edu.startDate)
let end = utils.strpdate(edu.endDate) let end = utils.strpdate(lang, edu.endDate)
let edu-items = "" let edu-items = ""
if edu.honors != none {edu-items = edu-items + "- *Honors*: " + edu.honors.join(", ") + "\n"} if edu.honors != none {edu-items = edu-items + "- *Honors*: " + edu.honors.join(", ") + "\n"}
@ -176,13 +177,13 @@
]} ]}
} }
#let cvaffiliations(info, isbreakable: true) = { #let cvaffiliations(lang, info, isbreakable: true) = {
if info.affiliations != none {block[ if info.affiliations != none {block[
== Leadership & Activities == Leadership & Activities
#for org in info.affiliations { #for org in info.affiliations {
// parse ISO date strings into datetime objects // parse ISO date strings into datetime objects
let start = utils.strpdate(org.startDate) let start = utils.strpdate(lang, org.startDate)
let end = utils.strpdate(org.endDate) let end = utils.strpdate(lang, org.endDate)
// create a block layout for each affiliation entry // create a block layout for each affiliation entry
block(width: 100%, breakable: isbreakable)[ block(width: 100%, breakable: isbreakable)[
@ -206,13 +207,13 @@
]} ]}
} }
#let cvprojects(info, isbreakable: true) = { #let cvprojects(lang, info, isbreakable: true) = {
if info.projects != none {block[ if info.projects != none {block[
== Projects == Projects
#for project in info.projects { #for project in info.projects {
// parse ISO date strings into datetime objects // parse ISO date strings into datetime objects
let start = utils.strpdate(project.startDate) let start = utils.strpdate(lang, project.startDate)
let end = utils.strpdate(project.endDate) let end = utils.strpdate(lang, project.endDate)
// create a block layout for each project entry // create a block layout for each project entry
block(width: 100%, breakable: isbreakable)[ block(width: 100%, breakable: isbreakable)[
// line 1: project name // line 1: project name
@ -232,12 +233,12 @@
]} ]}
} }
#let cvawards(info, isbreakable: true) = { #let cvawards(lang, info, isbreakable: true) = {
if info.awards != none {block[ if info.awards != none {block[
== Honors & Awards == Honors & Awards
#for award in info.awards { #for award in info.awards {
// parse ISO date strings into datetime objects // parse ISO date strings into datetime objects
let date = utils.strpdate(award.date) let date = utils.strpdate(lang, award.date)
// create a block layout for each award entry // create a block layout for each award entry
block(width: 100%, breakable: isbreakable)[ block(width: 100%, breakable: isbreakable)[
// line 1: award title and location // line 1: award title and location
@ -259,13 +260,13 @@
]} ]}
} }
#let cvcertificates(info, isbreakable: true) = { #let cvcertificates(lang, info, isbreakable: true) = {
if info.certificates != none {block[ if info.certificates != none {block[
== Licenses & Certifications == Licenses & Certifications
#for cert in info.certificates { #for cert in info.certificates {
// parse ISO date strings into datetime objects // parse ISO date strings into datetime objects
let date = utils.strpdate(cert.date) let date = utils.strpdate(lang, cert.date)
// create a block layout for each certificate entry // create a block layout for each certificate entry
block(width: 100%, breakable: isbreakable)[ block(width: 100%, breakable: isbreakable)[
// line 1: certificate name // line 1: certificate name
@ -281,12 +282,12 @@
]} ]}
} }
#let cvpublications(info, isbreakable: true) = { #let cvpublications(lang, info, isbreakable: true) = {
if info.publications != none {block[ if info.publications != none {block[
== Research & Publications == Research & Publications
#for pub in info.publications { #for pub in info.publications {
// parse ISO date strings into datetime objects // parse ISO date strings into datetime objects
let date = utils.strpdate(pub.releaseDate) let date = utils.strpdate(lang, pub.releaseDate)
// create a block layout for each publication entry // create a block layout for each publication entry
block(width: 100%, breakable: isbreakable)[ block(width: 100%, breakable: isbreakable)[
// line 1: publication title // line 1: publication title

View File

@ -1,42 +1,42 @@
#let months = yaml("../data/months.yaml")
#let getWithLang(lang, data) = {
if type(data) == dictionary {
data.at(lang)
} else {
data
}
}
#let display = getWithLang("fr", months.at("short")).at(1)
// Helper Functions // Helper Functions
#let monthname(n, display: "short") = { #let monthname(lang, n, display: "short") = {
n = int(n) n = int(n)
let month = "" let month = ""
if n == 1 { month = "January" } let displayMonths = getWithLang(lang, months.at(display))
else if n == 3 { month = "March" }
else if n == 2 { month = "February" } if (n > 0 and n <= 12) {
else if n == 4 { month = "April" } month = displayMonths.at(n - 1)
else if n == 5 { month = "May" }
else if n == 6 { month = "June" }
else if n == 7 { month = "July" }
else if n == 8 { month = "August" }
else if n == 9 { month = "September" }
else if n == 10 { month = "October" }
else if n == 11 { month = "November" }
else if n == 12 { month = "December" }
else { result = none }
if month != none {
if display == "short" {
month = month.slice(0, 3)
} else {
month
}
} }
month month
} }
#let strpdate(isodate) = { #let strpdate(lang, isodate) = {
let date = "" let date = ""
if lower(isodate) != "present" { let isodate = getWithLang(lang, isodate)
if (regex("\d{4}-\d{2}-\d{2}") in isodate) {
date = datetime( date = datetime(
year: int(isodate.slice(0, 4)), year: int(isodate.slice(0, 4)),
month: int(isodate.slice(5, 7)), month: int(isodate.slice(5, 7)),
day: int(isodate.slice(8, 10)) day: int(isodate.slice(8, 10))
) )
date = date.display("[month repr:short]") + " " + date.display("[year repr:full]") date = monthname(lang, date.month()) + " " + date.display("[year repr:full]")
} else if lower(isodate) == "present" { } else {
date = "Present" date = isodate
} }
return date return date
} }

View File

@ -1,32 +1,63 @@
- where: Paris, France title:
with: Diggers en: Work Experience
url: https://diggers-consulting.com/ fr: Expérience Professionnelle
what: content:
- startDate: 2022-02-04 - where:
endDate: present en: Paris, France
what: Data Engineer Consultant - Natixis fr: Paris (75)
why: with: Diggers
- Management, design and implementation of multi-stream data producer computing and sending up to 1 billion messages per day. url: https://diggers-consulting.com/
- Implementation of financial data computation in a distributed environment. what:
- Scala, SQL, Spark, Kafka, Hive, Typelevel - startDate: 2022-02-04
- where: Montrouge, France endDate:
with: Crédit Agricole Leasing & Factoring en: present
url: https://www.ca-leasingfactoring.com/ fr: actuellement
what: what:
- startDate: 2021-04-16 en: Data Engineer Consultant - Natixis
endDate: 2021-10-16 fr: Consultant Data Engineer - Natixis
what: Data Scientist Intern why:
why: en:
- "Feature Engineering via network modeling \\& analysis giving a 10\\% score improvement for prediction models" - Management, design and implementation of multi-stream data producer computing and sending up to 1 billion messages per day.
- Development of a multi-environment pipeline execution program allowing the usage of tools missing in one or another - Implementation of financial data computation in a distributed environment.
- Python, Scala, SQL, Spark, Pandas, Hive, XGBoost, iGraph, GraphX - Scala, SQL, Spark, Kafka, Hive, Typelevel
- with: University Association IP7 fr:
where: Paris, France - Gestion, conception et développement d'un service d'alimentation de données multi-flux calculant et produisant jusqu'à 1 milliard de messages par jour.
url: http://ip7.informatique.univ-paris-diderot.fr:8080/ - Développement de batchs de calculs de données financières en environnement distribué.
what: - Scala, SQL, Spark, Kafka, Hive, Typelevel
- what: Volunteer - where:
startDate: 2018-09-01 en: Montrouge, France
endDate: 2021-06-01 fr: Montrouge (92)
why: with: Crédit Agricole Leasing & Factoring
- "Help in setting up a programming contest \\& writing algorithmic problems" url: https://www.ca-leasingfactoring.com/
- Facilitator for multiple Linux installation parties what:
- startDate: 2021-04-16
endDate: 2021-10-16
what:
en: Data Scientist Intern
fr: Data Scientist Stagiaire
why:
- en: "Feature Engineering via network modeling \\& analysis giving a 10\\% score improvement for prediction models"
fr: "Feature engineering via modélisation \\& analyse de graphes augmentant les scores des modèles de prédictions de 10\\%"
- en: Development of a multi-environment pipeline execution program allowing the usage of tools missing in one or another
fr: Développement d'une solution d'exécution de chaînes de traitement multi-environnements permettant un plus large choix d'outils.
- Python, Scala, SQL, Spark, Pandas, Hive, XGBoost, iGraph, GraphX
- with:
en: University Association IP7
fr: Association Universitaire IP7
where:
en: Paris, France
fr: Paris (75)
url: http://ip7.informatique.univ-paris-diderot.fr:8080/
what:
- what:
en: Volunteer
fr: Bénévole
startDate: 2018-09-01
endDate: 2021-06-01
why:
en:
- "Help in setting up a programming contest \\& writing algorithmic problems"
- Facilitator for multiple Linux installation parties
fr:
- "Mise en place dun concours de programmation \\& écriture de problèmes algorithmiques"
- Animateur de plusieurs install party Linux

54
data/months.yaml Normal file
View File

@ -0,0 +1,54 @@
long:
en:
- January
- February
- March
- April
- May
- June
- July
- August
- September
- October
- November
- December
fr:
- Janvier
- Février
- Mars
- Avril
- Mai
- Juin
- Juillet
- Août
- Septembre
- Octobre
- Novembre
- Décembre
short:
en:
- Jan
- Feb
- Mar
- Apr
- May
- Jun
- Jul
- Aug
- Sep
- Oct
- Nov
- Dec
fr:
- Janv.
- Févr.
- Mars
- Avr.
- Mai
- Juin
- Juill.
- Août
- Sept.
- Oct.
- Nov.
- Déc.

View File

@ -3,10 +3,10 @@
#let language = "en" #let language = "en"
#let cvdata = ( #let cvdata = (
personal: yaml(("data/", language, "/personal.yaml").join()), personal: yaml(("data/", "en", "/personal.yaml").join()),
experience: yaml(("data/", language, "/experience.yaml").join()), experience: yaml(("data/", "en", "/experience.yaml").join()),
education: yaml(("data/", language, "/education.yaml").join()), education: yaml(("data/", "en", "/education.yaml").join()),
skills: yaml(("data/", language, "/skills.yaml").join()) skills: yaml(("data/", "en", "/skills.yaml").join())
) )
#let uservars = ( #let uservars = (
@ -42,7 +42,7 @@
#show: doc => cvinit(doc) #show: doc => cvinit(doc)
#cvheading(cvdata, uservars) #cvheading(cvdata, uservars)
#cvwork(cvdata) #cvwork(language, cvdata)
// #cveducation(cvdata) // #cveducation(cvdata)
// #cvskills(cvdata) // #cvskills(cvdata)
#endnote() #endnote()