cv/main.typ

172 lines
4.7 KiB
Plaintext

#import "template.typ"
#show: doc => template.apply(doc)
#v(1cm)
#grid(
columns: (6cm, 1fr),
[],
[
#v(-0.25cm)
#set text(size: 40pt, fill: white)
Thomas Forgione \
#set text(size: 18pt, style: "italic")
Docteur en informatique et télécommunications
],
)
#v(1cm)
#set text(size: 12pt)
#let leftcolumn = [
#show link: content => {
underline(content)
}
#show heading.where(level: 1): it => {
v(0.75cm)
text(size: 16pt, weight: "bold", it.body)
v(-0.5cm)
line(length: 5cm)
}
#v(-0.5cm)
= Contact
#align(left + top, [
#grid(columns: (auto, auto), row-gutter: 0.5cm, column-gutter: 0.2cm,
[ #image("assets/icons/location.svg", height: 10pt) ],
[ 9 bd de la Gare, appt 83 \
31500 Toulouse France
],
[ #image("assets/icons/phone.svg", height: 10pt) ], [ 06.71.22.05.84 ],
[ #image("assets/icons/mail.svg", height: 10pt) ], [ #link("mailto:thomas@forgione.fr")[thomas\@forgione.fr] ],
[ #image("assets/icons/world.svg", height: 10pt) ], [ #link("https://tforgione.fr")[https://tforgione.fr] ],
[ #image("assets/icons/github.svg", height: 10pt) ], [ #link("https://github.com/tforgione")[\@tforgione] ]
)
])
= Programmation
#align(left + top, [
#grid(columns: (2cm, auto), row-gutter: 0.5cm, column-gutter: 0.5cm,
[ Rust ], [ #template.score(level: 4) ],
[ Elm ], [ #template.score(level: 4) ],
[ JS ], [ #template.score(level: 4) ],
[ C++ ], [ #template.score(level: 3) ],
[ Python ], [ #template.score(level: 3) ],
[ Java ], [ #template.score(level: 3) ],
[ Shell ], [ #template.score(level: 4) ],
)
])
= DevOps
#align(left + top, [
#grid(columns: (2cm, auto), row-gutter: 0.5cm, column-gutter: 0.5cm,
[ Docker ], [ #template.score(level: 3) ],
[ Kubernetes ], [ #template.score(level: 3) ],
[ RabbitMQ ], [ #template.score(level: 2) ],
[ S3 ], [ #template.score(level: 3) ],
)
])
= Langues
#align(left + top, [
#grid(columns: (auto, auto), row-gutter: 0.5cm, column-gutter: 0.3cm,
[ *Français* ], [ _Langue maternelle_ ],
[ *Anglais* ], [ _Niveau C1_ ]
)
])
]
#leftcolumn
#style(styles => {
let size = measure(leftcolumn, styles)
v(-size.height - 0.75cm)
})
#show link: content => {
set text(fill: blue)
underline(content)
}
#v(0.21cm)
= Parcours
#template.entry2(
left: image(height: 15pt, "./assets/icons/adjust.svg"),
heading: [*Polymny Studio*, _Toulouse_, #link("https://polymny.studio")],
description: [ Logiciel SAAS permettant la réalisation de MOOC facilement ],
note: [
Co-fondateur, responsable R&D, développeur
- président de l'Association Polymny Studio jusqu'en Sept 2022
- base de données unique pour deux instances : gratuite / payante
- partie gratuite auto-hébergée chez tetaneutral
- partie payante sur cluster kubernetes OVHcloud avec stockage S3
]
)
#template.entry2(
left: [2019],
heading: [*Doctorat*, _Toulouse INP_, #link("https://tforgione.fr/phd/")],
description: [Doctorat en informatique et télécommunications],
note: [
Transmission adaptative de modèles 3D massifs
- encodage de modèle 3D optimisé pour le streaming interactif
- streaming adapté au point de vue
- interface du bureau avec clavier / souris
- interface smartphone avec joystick virtuel et gyroscope
]
)
#template.entry2(
left: [2015],
heading: [*Diplôme d'ingénieur*, _ENSEEIHT_],
description: [_Diplôme d'ingénieur en informatique et mathématiques appliquées_],
note: [_Spécialisation en multimédia et traitement d'images_]
)
= Projets
#template.entry2(
left: [2021],
heading: [*Ergol*, #link("https://ergol-rs.github.io")],
description: [ORM asynchrone pour Rust],
note: [
- proc macro via annotation pour génération de code lié aux tables
- gestion des one-to-one, one-to-many, many-to-many
- création / réinitialisation de tables automatiques
- fonctions utilitaires pour SELECT, UPDATE, DELETE
- intégration avec le framework web Rocket
]
)
#template.entry2(
left: [2019],
heading: [*My Twitch Replays*, #link("https://twitch.tforgione.fr")],
description: [Plate-forme de vidéo à la demande serverless via HTTP],
note: [
- encodage vidéo multi-résolution en HLS avec FFmpeg
- lecteur vidéo custom en elm avec miniatures de navigation
- selection manuelle ou automatique de la résolution via hls.js
]
)
= Loisirs
#template.entry(left: [Sport])[*jiujitsu brésilien depuis 2021, ceinture bleue*]
#template.entry(left: [Moto])[*permis A2 depuis 2016, permis A depuis 2018*]
#template.entry(left: [Musique])[*guitare acoustique et éléctrique depuis 2008*]