This commit is contained in:
violette 2025-05-02 13:46:05 -04:00
parent 6d4a818b49
commit d0e6a2bbce
6 changed files with 605 additions and 128 deletions

254
config.json Normal file
View file

@ -0,0 +1,254 @@
{
"contacts": {
"name": "Violette Paulin",
"email": "paum1202@usherbrooke.ca",
"website": "violette.town",
"nationality": "French",
"git": "https://git.violette.town/violette"
},
"skills": [
{
"name": "Programming Languages",
"items": [
"C / C++ / Rust",
"Java",
"Python / Shell Scripting",
"JavaScript / TypeScript"
]
},
{
"name": "Data Analysis",
"items": [
"Data Visualization",
"Statistics"
]
},
{
"name": "System Development",
"items": [
"Embedded",
"Distributed Systems",
"BSD / Linux / Unix like"
]
},
{
"name": "Database Management",
"items": [
"noSQL",
"SQL",
"Blockchain"
]
},
{
"name": "Web Development",
"items": [
"Spring",
"Angular.js"
]
}
],
"languages": [
{
"name": "French",
"proficiency": 5,
"comment": "None"
},
{
"name": "English",
"proficiency": 4,
"comment": "None"
},
{
"name": "German",
"proficiency": 2,
"comment": "None"
}
],
"jobs": [
{
"position": "R & D, Software Developer Intern",
"company": {
"name": "TransTech innovations",
"link": "https://transtechinnovations.com"
},
"description": [
"Creating a parser for a proprietary logger (java spring boot, angular JS)",
"Creating a proof of concept for a module in embedded devices (C++23)"
],
"from": "2024 Sept.",
"to": "2025 Feb.",
"tags": [
"Embedded systems",
"Fullstack",
"Java Spring Boot",
"Angular",
"C / C++"
]
},
{
"position": "SysAdmin",
"company": {
"name": "TransEstrie",
"link": "https://transestrie.org"
},
"from": "2024 Jul",
"to": "2024 Aug.",
"description": [
"Maintaining and upgrading the internal network",
"Setting up diverse services (NextCloud, VPN, securing data, creating backups...)"
],
"tags": [
"SysAdmin",
"Autonomy",
"Self Teaching"
]
},
{
"position": "R & D, Software Developer Intern",
"company": {
"name": "LISTIC Annecy",
"link": "https://www.univ-smb.fr/listic/en/"
},
"description": [
"Building a distributed caching system, and storing logs within a Blockchain",
"Internship in a informatic research laboratory",
"Suppervised by Sébastien Monnet & Kavé Salamatian"
],
"from": "2023 May.",
"to": "2023 Aug.",
"tags": [
"Distributed System design",
"Rust",
"Blockchain Programming",
"Web Programming - Backend & Frontend",
"Self Teaching"
]
},
{
"position": "SEO Agent",
"company": {
"name": "BIWA Annecy",
"link": "https://box-evidence.com"
},
"description": [
"Optimise web ranking of different websites"
],
"from": "2022 May.",
"to": "2022 Jul.",
"tags": [
"Autonomy",
"SEO"
]
}
],
"education": [
{
"university": {
"name": "Polytech Annecy Chambéry",
"link": "https://www.polytech.univ-smb.fr/"
},
"degree": "Engineering Degree (France)",
"major": "Computer Science",
"track": "Informatic Data Usage",
"from": "2021",
"to": "2025"
},
{
"university": {
"name": "Sherbrooke University",
"link": "https://usherbrooke.ca"
},
"degree": "M.Sc.",
"major": "Computer Science",
"track": "None",
"from": "2023",
"to": "2025"
}
],
"projects": {
"personnal": [
{
"main": {
"name": "Discsord Bot",
"link": "https://github.com/storca/vhbot"
},
"description": [
"Automate actions during class",
"Useful for our teachers",
"List people attending class",
"Wishes birthday to our teachers"
],
"tags": [
"Python",
"Teamwork",
"Git"
],
"year": 2020
}
],
"school": [
{
"main": {
"name": "DHTea",
"link": "https://github.com/phoqueEberlue/DHTea"
},
"description": [
"Distributed hash table",
"Written in rust from scratch",
"Stores files / data"
],
"tags": [
"Rust",
"Distributed system",
"Self Teaching",
"Git",
"Shell scripting"
],
"year": 2023
},
{
"main": {
"name": "Proxy",
"link": "https://github.com/TheBigBlase/proxy"
},
"description": [
"Proxy",
"Written in Python and Rust"
],
"tags": [
"Teamwork / Team management",
"Git"
],
"year": 2022
},
{
"main": {
"name": "kr00k",
"link": "https://github.com/thebigblase/kr00k"
},
"description": [
"Proof of concept for a security vulnerability (CVE-2019-15126)",
"Used as my final projects for MPSI / MP classes."
],
"tags": [
"Cybersecurity",
"Python",
"Self Teaching"
],
"year": 2021
}
]
},
"hobbies": {
"tech": [
"seeing how things are done under the hood",
"low level-ish dev",
"resurecting old tech"
],
"other": [
"music",
"playing the guitar",
"cooking"
]
}
}

246
config_fr.json Normal file
View file

@ -0,0 +1,246 @@
{
"contacts": {
"name": "Violette Paulin",
"email": "paum1202@usherbrooke.ca",
"website": "violette.town",
"nationality": "Française",
"git": "https://git.violette.town/violette"
},
"skills": [
{
"name": "Langages de programmation",
"items": [
"C / C++ / Rust",
"Python / Node.js / Shell Scripting",
"JavaScript / TypeScript"
]
},
{
"name": "Analyse de données",
"items": [
"Visualisations de données",
"Statistiques"
]
},
{
"name": "Systèmes",
"items": [
"Systèmes embarqués",
"Systèmes distribués",
"BSD / Linux / Unix like"
]
},
{
"name": "Bases de données",
"items": [
"noSQL",
"SQL",
"Blockchain"
]
},
{
"name": "Développement Web",
"items": [
"Spring",
"Angular.js"
]
}
],
"languages": [
{
"name": "Francais",
"proficiency": 5,
"comment": "None"
},
{
"name": "Anglais",
"proficiency": 4,
"comment": "None"
},
{
"name": "Allemand",
"proficiency": 2,
"comment": "None"
}
],
"jobs": [
{
"position": "R&D, développement logiciel",
"company": {
"name": "TransTech innovations",
"link": "https://transtechinnovations.com"
},
"description": [
"Créer un parseur de log, et son front end (java spring boot, angular JS)",
"Design et implémentation de modules embarqués pour un système temps réel (C++23)"
],
"from": "Septembre 2024",
"to": "Février 2025",
"tags": [
"Systèmes embarqués",
"Fullstack",
"Java Spring Boot",
"Angular",
"C / C++"
]
},
{
"position": "SysAdmin",
"company": {
"name": "TransEstrie",
"link": "https://transestrie.org"
},
"description": [
"Maintenance et mise à jour des infrastructures réseaux",
"Mise en place de divers services (NextCloud, VPN, chiffrement des données, création de backup...)"
],
"from": "Juillet 2024",
"to": " Aout 2024",
"tags": [
"SysAdmin",
"Autonomie"
]
},
{
"position": "Stage en R&D logiciel",
"company": {
"name": "LISTIC, USMB",
"link": "https://www.univ-smb.fr/listic/en/"
},
"description": [
"Stage effectué dans un laboratoire d'informatique public",
"Design et implémentation d'un système de cache avec blockchain"
],
"from": "Mai 2023",
"to": "Aout 2023",
"tags": [
"Design de système distribué",
"Programmation de blockchain",
"Interface web - Backend & Frontend",
"Autonomie"
]
},
{
"position": "Rédactrice SEO",
"company": {
"name": "Box évidence",
"link": "https://box-evidence.com/"
},
"description": [
"Rédaction d'articles et optimisation de contenu pour moteur de recherche"
],
"from": "Mai 2022",
"to": "Juillet 2022",
"tags": [
"Autonomie",
"SEO"
]
}
],
"education": [
{
"university": {
"name": "Université de Sherbrooke",
"link": "https://usherbrooke.ca"
},
"degree": "Maitrise",
"major": "d'informatique",
"track": "None",
"from": "2023",
"to": "2025"
},
{
"university": {
"name": "Polytech Annecy Chambéry",
"link": "https://www.polytech.univ-smb.fr/"
},
"degree": "Maitrise",
"major": "d'informatique",
"track": "Informatique Données Usage",
"from": "2021",
"to": "2025"
}
],
"projects": {
"personnal": [
{
"main": {
"name": "Bot Discsord",
"link": "https://github.com/storca/vhbot"
},
"description": [
"Fait des actions comme faire l'appel de la classe pendant le confinement"
],
"year": 2020,
"tags": [
"Python",
"En équipe",
"Git"
]
}
],
"school": [
{
"main": {
"name": "DHTea",
"link": "https://github.com/phoqueEberlue/DHTea"
},
"description": [
"Table de Hash distribuée",
"Stockage d'information / fichiers distribué",
"Ecrit from scratch"
],
"tags": [
"Rust",
"Systèmes distribués",
"Autonomie",
"Git",
"Shell scripting"
],
"year": 2023
},
{
"main": {
"name": "Proxy",
"link": "https://github.com/tartesauxpommes/proxy"
},
"description": [
"Proxy",
"Ecrit en Python et Rust"
],
"tags": [
"Travail et gestion d'équipe",
"Git"
],
"year": 2022
},
{
"main": {
"name": "kr00k",
"link": "https://github.com/tartesauxpommes/kr00k"
},
"description": [
"Preuve de concept pour une faille de sécurité (CVE-2019-15126)",
"Remis comme projet final TIPE de MPSI / MP"
],
"tags": [
"Sécurité informatique",
"Python",
"Autonomie"
],
"year": 2021
}
]
},
"hobbies": {
"tech": [
"Aller fouiller sous le capot de mes outils",
"réssuciter des vieux objets électroniques"
],
"other": [
"cuisine",
"guitare",
"musique (jazz / blues)"
]
}
}

View file

@ -81,7 +81,7 @@ jobs:
- Autonomie
- position: "Stage en R&D logiciel"
company:
name: LISTIC, Université Savoie Mt-blanc
name: LISTIC, USMB
link: https://www.univ-smb.fr/listic/en/
description:
- Stage effectué dans un laboratoire d'informatique public

View file

@ -1,8 +1,9 @@
#let config = yaml("config.yaml")
#let config = json("config.json")
#let settings = yaml("settings.yaml")
#let personnal = yaml("personnal.yaml")
#show link: set text(blue)
#let color = purple
#show link: set text(color)
#show heading: h => [
#set text(
@ -14,29 +15,21 @@
#let sidebarSection = {[
#par(justify: true)[
#par[
#set text(
size: eval(settings.font.size.contacts),
font: settings.font.minor_highlight,
)
Email: #link("mailto:" + config.contacts.email)\
#if (not settings.public) {
[Phone: #link("tel:" + personnal.contacts.phone)\ ]
}
Git: #link(config.contacts.git) \
Website: #link(config.contacts.website) \
#if (not settings.public) {
personnal.contacts.address
}
]
#line(length: 100%, stroke: blue + 0.5pt)
]
#line(length: 100%, stroke: color + 0.5pt)
= Summary
@ -45,8 +38,9 @@
eval(settings.font.size.education_description),
font: settings.font.minor_highlight,
)
A *software developer* with a confident grasp of *infrastructure*, *system design*, and *DevOps*, now seeking opportunities to excel in the realms of solution architecture.
A *software developer* with a confident grasp of *infrastructure*, *system
design*, *System administration*, as well as *DevOps*, now seeking opportunities to excel in the realms of
solution architecture.\
Open to roles ranging from *software developer* to *DevOps*.
]
@ -72,8 +66,6 @@
#{
for lang in config.languages [
#par(leading: 0pt)[
#set text(
size: eval(settings.font.size.description),
font: settings.font.minor_highlight,
@ -86,10 +78,10 @@
let count = 0
while count < 5 {
if (count < lang.proficiency) {
text(blue, size: 15pt)[#sym.circle.filled]
text(color, size: 15pt)[#sym.circle.filled]
}
else {
text(blue, size: 15pt)[#sym.circle]
text(color, size: 15pt)[#sym.circle]
}
count = count + 1
}
@ -99,11 +91,10 @@
}
)
]
]
}
#line(length: 100%, stroke: blue + 0.5pt)
#line(length: 100%, stroke: color + 0.5pt)
= Hobbies
#{
@ -113,9 +104,8 @@
)[
#set text(
size: eval(settings.font.size.tags),
font: settings.font.general
font: settings.font.minor_highlight
)
#config.hobbies.tech.join(" ")
]
@ -125,9 +115,8 @@
)[
#set text(
size: eval(settings.font.size.tags),
font: settings.font.general
font: settings.font.minor_highlight
)
#config.hobbies.other.join(" ")
]
@ -157,16 +146,15 @@
#{
for place in config.education [
#par[
#par(spacing: 0em)[
#set block(spacing: eval(settings.paragraph.spacing))
#set text(
size: eval(settings.font.size.heading),
font: settings.font.general
)
#place.from #place.to \
#link(place.university.link)[#place.university.name]
#place.from #place.to #text(color.darken(30%))[::] #link(place.university.link)[#place.university.name]
]
#par[
#par(spacing: 0.7em)[
#set block(spacing: eval(settings.paragraph.spacing))
#set text(
eval(settings.font.size.education_description),
@ -182,29 +170,29 @@
]
}
#line(length: 100%, stroke: color + 0.5pt)
= Revelant Experience
#{
for job in config.jobs [
#par(justify: false)[
#par(justify: false, spacing: 0em)[
#set block(spacing: eval(settings.paragraph.spacing))
#set text(
size: eval(settings.font.size.heading),
font: settings.font.general
)
#job.from #job.to \
*#job.position*
#job.from #job.to #text(color)[::] *#job.position*
#link(job.company.link)[\@ #job.company.name]
]
#par(
justify: false,
leading: eval(settings.paragraph.leading)
leading: eval(settings.paragraph.leading),
spacing: 0.7em
)[
#set block(spacing: eval(settings.paragraph.spacing))
#set text(
size: eval(settings.font.size.description),
font: settings.font.general
font: settings.font.minor_highlight
)
#{
for point in job.description [
@ -215,6 +203,7 @@
#par(
justify: true,
leading: eval(settings.paragraph.leading),
spacing: 0.7em
)[
#set text(
size: eval(settings.font.size.tags),
@ -229,15 +218,12 @@
]
}
#line(length: 100%, stroke: color + 0.5pt)
= School related Projects
#{
for project in config.projects.school [
#par(
justify: true,
leading: eval(settings.paragraph.leading)
)[
#par[
#block(spacing: 0.7em)[
#set block(spacing: eval(settings.paragraph.spacing))
#set text(
size: eval(settings.font.size.heading),
@ -249,11 +235,11 @@
}
#link(project.main.link)[#project.main.name]
]
#par[
#par(spacing: 0.7em,)[
#set block(spacing: eval(settings.paragraph.spacing))
#set text(
size: eval(settings.font.size.description),
font: settings.font.general
font: settings.font.minor_highlight
)
#{
for point in project.description [
@ -264,6 +250,7 @@
#par(
justify: true,
leading: eval(settings.paragraph.leading),
spacing: 0.7em,
)[
#set block(spacing: eval(settings.paragraph.spacing))
#set text(
@ -275,7 +262,6 @@
tag_line
}
]
]
]
}
]}

View file

@ -1,8 +1,9 @@
#let config = yaml("config_fr.yaml")
#let config = json("config_fr.json")
#let settings = yaml("settings.yaml")
#let personnal = yaml("personnal.yaml")
#show link: set text(blue)
#let color = purple
#show link: set text(color)
#show heading: h => [
#set text(
@ -14,42 +15,31 @@
#let sidebarSection = {[
#par(justify: true)[
#par[
#set text(
size: eval(settings.font.size.contacts),
font: settings.font.minor_highlight,
)
Couriel : #link("mailto:" + config.contacts.email)\
Email: #link("mailto:" + config.contacts.email)\
#if (not settings.public) {
[Cellulaire : #link("tel:" + personnal.contacts.phone)\ ]
[Phone: #link("tel:" + personnal.contacts.phone)\ ]
}
Git : #link(config.contacts.git) \
Website : #link(config.contacts.website) \
Git: #link(config.contacts.git) \
Website: #link(config.contacts.website) \
#if (not settings.public) {
personnal.contacts.address
}
]
#line(length: 100%, stroke: blue + 0.5pt)
]
#line(length: 100%, stroke: color + 0.5pt)
= Simplement :
= Rapidement
#par(justify: true)[
#par[
#set text(
eval(settings.font.size.education_description),
font: settings.font.minor_highlight,
hyphenate: false
eval(settings.font.size.education_description),
font: settings.font.minor_highlight,
)
Je suis une développeuse ayant des capacités pertinantes en tant que
*DevOps*, et en conception de systèmes répartis.
*DevOps*, *Embarqué*, *SysAdmin* et en *conception de systèmes répartis*.
]
= Compétences
@ -61,6 +51,7 @@
size: eval(settings.font.size.description),
)
#set text(
// size: eval(settings.font.size.tags),
font: settings.font.minor_highlight,
)
*#skill.name*
@ -69,13 +60,10 @@
]
]
}
= Langues
= Langues
#{
for lang in config.languages [
#par(leading: 0pt)[
#set text(
size: eval(settings.font.size.description),
font: settings.font.minor_highlight,
@ -88,10 +76,10 @@
let count = 0
while count < 5 {
if (count < lang.proficiency) {
text(blue, size: 15pt)[#sym.circle.filled]
text(color, size: 15pt)[#sym.circle.filled]
}
else {
text(blue, size: 15pt)[#sym.circle]
text(color, size: 15pt)[#sym.circle]
}
count = count + 1
}
@ -101,23 +89,21 @@
}
)
]
]
}
#line(length: 100%, stroke: blue + 0.5pt)
#line(length: 100%, stroke: color + 0.5pt)
= Loisirs
#{
#{
par(
justify: true,
leading: eval(settings.paragraph.leading)
)[
#set text(
size: eval(settings.font.size.tags),
font: settings.font.general
font: settings.font.minor_highlight
)
#config.hobbies.tech.join(" ")
]
@ -127,17 +113,25 @@
)[
#set text(
size: eval(settings.font.size.tags),
font: settings.font.general
font: settings.font.minor_highlight
)
#config.hobbies.other.join(" ")
]
}
]}
#let mainSection = {[
// #par[
// #set align(center)
// #figure(
// image("images/Kodak 20 Zanvoort Lumi.jpg", width: 6em),
// placement: top,
// )
// ]
#par[
#set text(
size: eval(settings.font.size.heading_huge),
@ -150,52 +144,53 @@
#{
for place in config.education [
#par[
#set block(spacing: eval(settings.paragraph.spacing))
#set text(
size: eval(settings.font.size.heading),
font: settings.font.general
)
#place.from #place.to \
#link(place.university.link)[#place.university.name]
]
#par[
#set block(spacing: eval(settings.paragraph.spacing))
#set text(
eval(settings.font.size.education_description),
font: settings.font.minor_highlight,
)
*#place.degree #place.major* \
#if (place.at("track") != "None"){
[#place.track]
}
]
#par(spacing: 0em)[
#set block(spacing: eval(settings.paragraph.spacing))
#set text(
size: eval(settings.font.size.heading),
font: settings.font.general
)
#place.from #place.to #text(color.darken(30%))[::] #link(place.university.link)[#place.university.name]
]
#par(spacing: 0.7em)[
#set block(spacing: eval(settings.paragraph.spacing))
#set text(
eval(settings.font.size.education_description),
font: settings.font.minor_highlight,
)
#h(0.5cm)
#place.degree - #place.major \
#if (place.at("track") != "None"){
h(0.5cm)
[#place.track]
}
]
]
}
#line(length: 100%, stroke: color + 0.5pt)
= Expérience utile
#{
for job in config.jobs [
#par(justify: false)[
#par(justify: false, spacing: 0em)[
#set block(spacing: eval(settings.paragraph.spacing))
#set text(
size: eval(settings.font.size.heading),
font: settings.font.general
)
#job.from #job.to \
*#job.position*
#link(job.company.link)[#job.company.name]
#job.from #job.to #text(color)[::] *#job.position*
#link(job.company.link)[\@ #job.company.name]
]
#par(
justify: false,
leading: eval(settings.paragraph.leading)
leading: eval(settings.paragraph.leading),
spacing: 0.7em
)[
#set block(spacing: eval(settings.paragraph.spacing))
#set text(
size: eval(settings.font.size.description),
font: settings.font.general
font: settings.font.minor_highlight
)
#{
for point in job.description [
@ -206,12 +201,13 @@
#par(
justify: true,
leading: eval(settings.paragraph.leading),
spacing: 0.7em
)[
#set block(spacing: eval(settings.paragraph.spacing))
#set text(
size: eval(settings.font.size.tags),
font: settings.font.minor_highlight
)
#set block(spacing: eval(settings.paragraph.spacing))
#{
let tag_line = job.tags.join(" ")
tag_line
@ -220,15 +216,12 @@
]
}
#line(length: 100%, stroke: color + 0.5pt)
= Projets Scolaires
#{
for project in config.projects.school [
#par(
justify: true,
leading: eval(settings.paragraph.leading)
)[
#par[
#block(spacing: 0.7em)[
#set block(spacing: eval(settings.paragraph.spacing))
#set text(
size: eval(settings.font.size.heading),
@ -240,11 +233,11 @@
}
#link(project.main.link)[#project.main.name]
]
#par[
#par(spacing: 0.7em,)[
#set block(spacing: eval(settings.paragraph.spacing))
#set text(
size: eval(settings.font.size.description),
font: settings.font.general
font: settings.font.minor_highlight
)
#{
for point in project.description [
@ -255,6 +248,7 @@
#par(
justify: true,
leading: eval(settings.paragraph.leading),
spacing: 0.7em,
)[
#set block(spacing: eval(settings.paragraph.spacing))
#set text(
@ -266,19 +260,16 @@
tag_line
}
]
]
]
}
]}
]}
#{
grid(
columns: (2fr, 5fr),
column-gutter: 3em,
sidebarSection,
mainSection,
)
}
#{
grid(
columns: (2fr, 5fr),
column-gutter: 3em,
sidebarSection,
mainSection,
)
}

View file

@ -7,13 +7,13 @@ font:
tags: 8pt
education_description: 8pt
contacts: 8pt
general: "Helvetica Neue"
minor_highlight: "Helvetica Neue"
general: "LiveOverfont"
minor_highlight: "libertinus serif"
paragraph:
# Distance between lines
leading: 4pt
spacing: 0.9em
spacing: 0.0em
# dont show address & phone number
public: false