Add work experience
parent
6c0abb045c
commit
796e41ff9c
53
cv/cv.typ
53
cv/cv.typ
|
|
@ -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
|
||||||
|
|
|
||||||
50
cv/utils.typ
50
cv/utils.typ
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
@ -1,32 +1,63 @@
|
||||||
- where: Paris, France
|
title:
|
||||||
|
en: Work Experience
|
||||||
|
fr: Expérience Professionnelle
|
||||||
|
content:
|
||||||
|
- where:
|
||||||
|
en: Paris, France
|
||||||
|
fr: Paris (75)
|
||||||
with: Diggers
|
with: Diggers
|
||||||
url: https://diggers-consulting.com/
|
url: https://diggers-consulting.com/
|
||||||
what:
|
what:
|
||||||
- startDate: 2022-02-04
|
- startDate: 2022-02-04
|
||||||
endDate: present
|
endDate:
|
||||||
what: Data Engineer Consultant - Natixis
|
en: present
|
||||||
|
fr: actuellement
|
||||||
|
what:
|
||||||
|
en: Data Engineer Consultant - Natixis
|
||||||
|
fr: Consultant Data Engineer - Natixis
|
||||||
why:
|
why:
|
||||||
|
en:
|
||||||
- Management, design and implementation of multi-stream data producer computing and sending up to 1 billion messages per day.
|
- Management, design and implementation of multi-stream data producer computing and sending up to 1 billion messages per day.
|
||||||
- Implementation of financial data computation in a distributed environment.
|
- Implementation of financial data computation in a distributed environment.
|
||||||
- Scala, SQL, Spark, Kafka, Hive, Typelevel
|
- Scala, SQL, Spark, Kafka, Hive, Typelevel
|
||||||
- where: Montrouge, France
|
fr:
|
||||||
|
- 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.
|
||||||
|
- Développement de batchs de calculs de données financières en environnement distribué.
|
||||||
|
- Scala, SQL, Spark, Kafka, Hive, Typelevel
|
||||||
|
- where:
|
||||||
|
en: Montrouge, France
|
||||||
|
fr: Montrouge (92)
|
||||||
with: Crédit Agricole Leasing & Factoring
|
with: Crédit Agricole Leasing & Factoring
|
||||||
url: https://www.ca-leasingfactoring.com/
|
url: https://www.ca-leasingfactoring.com/
|
||||||
what:
|
what:
|
||||||
- startDate: 2021-04-16
|
- startDate: 2021-04-16
|
||||||
endDate: 2021-10-16
|
endDate: 2021-10-16
|
||||||
what: Data Scientist Intern
|
what:
|
||||||
|
en: Data Scientist Intern
|
||||||
|
fr: Data Scientist Stagiaire
|
||||||
why:
|
why:
|
||||||
- "Feature Engineering via network modeling \\& analysis giving a 10\\% score improvement for prediction models"
|
- en: "Feature Engineering via network modeling \\& analysis giving a 10\\% score improvement for prediction models"
|
||||||
- Development of a multi-environment pipeline execution program allowing the usage of tools missing in one or another
|
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
|
- Python, Scala, SQL, Spark, Pandas, Hive, XGBoost, iGraph, GraphX
|
||||||
- with: University Association IP7
|
- with:
|
||||||
where: Paris, France
|
en: University Association IP7
|
||||||
|
fr: Association Universitaire IP7
|
||||||
|
where:
|
||||||
|
en: Paris, France
|
||||||
|
fr: Paris (75)
|
||||||
url: http://ip7.informatique.univ-paris-diderot.fr:8080/
|
url: http://ip7.informatique.univ-paris-diderot.fr:8080/
|
||||||
what:
|
what:
|
||||||
- what: Volunteer
|
- what:
|
||||||
|
en: Volunteer
|
||||||
|
fr: Bénévole
|
||||||
startDate: 2018-09-01
|
startDate: 2018-09-01
|
||||||
endDate: 2021-06-01
|
endDate: 2021-06-01
|
||||||
why:
|
why:
|
||||||
|
en:
|
||||||
- "Help in setting up a programming contest \\& writing algorithmic problems"
|
- "Help in setting up a programming contest \\& writing algorithmic problems"
|
||||||
- Facilitator for multiple Linux installation parties
|
- Facilitator for multiple Linux installation parties
|
||||||
|
fr:
|
||||||
|
- "Mise en place d’un concours de programmation \\& écriture de problèmes algorithmiques"
|
||||||
|
- Animateur de plusieurs install party Linux
|
||||||
|
|
@ -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.
|
||||||
10
main.typ
10
main.typ
|
|
@ -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()
|
||||||
Loading…
Reference in New Issue