diff --git a/config.json b/config.json new file mode 100644 index 0000000..3819290 --- /dev/null +++ b/config.json @@ -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" + ] + } +} diff --git a/config_fr.json b/config_fr.json new file mode 100644 index 0000000..c9bc91c --- /dev/null +++ b/config_fr.json @@ -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)" + ] + } +} diff --git a/config_fr.yaml b/config_fr.yaml index d474000..79ed384 100644 --- a/config_fr.yaml +++ b/config_fr.yaml @@ -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 diff --git a/main.typ b/main.typ index 11bf147..d9a6f71 100644 --- a/main.typ +++ b/main.typ @@ -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 } ] - ] ] } ]} diff --git a/main_fr.typ b/main_fr.typ index 65924a9..0fb36ec 100644 --- a/main_fr.typ +++ b/main_fr.typ @@ -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, + ) +} diff --git a/settings.yaml b/settings.yaml index d48b347..7c73b2b 100644 --- a/settings.yaml +++ b/settings.yaml @@ -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