Curriculum vitae as code đ§âđ»
Cela fait pas mal de temps que je cherche un moyen simple, efficace et sympa pour gĂ©rer mon CV. Avant cet article câĂ©tait, selon les pĂ©riodes, un document Word, Excel, voir mĂȘme mon profile GitHub.
Mais voilĂ , je nâai jamais Ă©tĂ© un grand amoureux des traitements de textes ou autre outils pour faire des slides. Du coup, depuis quelques mois je cherchais une façon de gĂ©nĂ©rer un CV en markdown. Les principaux avantages que jây voyais :
- le markdown est simple et relativement reproductible en terme de rendu,
- je peux gérer le CV dans des PR,
- idéalement je veux aussi gérer les données à cÎté pour apporter du dynamisme,
- je peux modifier le rendu Ă loisir (sous rĂ©serve de mes capacitĂ©s en CSS đ ),
- si câest en markdown jâaimerai lâintĂ©grer facilement Ă mon blog en Jekyll.
Les deux problĂšmes que je voyais arriver :
- la gestion dâune version immuable en PDF pour les envois Ă des recruteuses / recruteurs,
- la potentielle intégration à mon site existant.
Alors pari gagnĂ© ? Voyons ça ensemble âŹïž.
Tout en liquide ⊠đ§
Je vous lâai dit, jâai trĂšs vite exclu le fait de faire un CV statique en markdown. AprĂšs coup, je me dis que cela aurait pu ĂȘtre aussi une bonne solution mais je voulais quelque chose avec les donnĂ©es Ă part comme on peut trouver dans JSON Resume.
Pour avoir déjà un peu bidouillé Jekyll pour amener du dynamisme il est possible de faire des trucs sympas avec le moteur de templating Liquid.
En quoi cela consiste ?
Définir des templates en HTML pour y injecter du dynamisme avec des boucles par exemple ou de la donnée externe stockée dans un fichier.
Pour les plus vielles et plus vieux dâentre vous ce que lâon faisait en JSTL đ€Ș.
Un petit exemple que jâutilise sur ce blog:
1
2
3
4
5
<div class="entries-{{ entries_layout }}">
{% for post in posts %}
{% include archive-single.html type=entries_layout %}
{% endfor %}
</div>
Car oui, la bonne nouvelle est que câest nativement inclus dans Jekyll, le moteur de gĂ©nĂ©ration utilisĂ© pour ce site đ.
Mais alors comment ça marche ? âïž
Au final, il y a deux choses principales pour faire un site avec Jekyll :
- la partie design : de maniĂšre classique les compĂ©tences vont ĂȘtre axĂ©es sur le HTML, CSS et Javascript,
- la partie gĂ©nĂ©ration / dynamisme : lĂ ce sont plus des compĂ©tences algorithmiques classiques et la connaissance de Liquid qui vont ĂȘtre importantes.
Autant vous le dire tout suite : CSS / JS ne font pas bon mĂ©nage avec moi đ , plutĂŽt que de repartir de zĂ©ro et faire un truc moche, jâai donc choisi de partir dâun thĂšme Jekyll existant.
Note đ :
Un thĂšme Jekyll est composĂ© de sa partie statique (html, css, js) mais aussi dynamique (liquid). Câest en fait un site opĂ©rationnel.
La seule diffĂ©rence est que vous pouvez le rĂ©fĂ©rencer comme votre site parent et surcharger et / ou configurer les Ă©lĂ©ments de votre choix. Comme câest un site opĂ©rationnel, vous pouvez trĂšs bien choisir de tout simplement en faire un fork puis de lâadapter Ă vos besoins.
A titre dâexemple, ce blog utilise la premiĂšre option en rĂ©fĂ©rençant le thĂšme parent minimal-mistakes dans le config.yml :remote_theme: mmistakes/minimal-mistakes
.
Dans mon cas, je savais que jâaurai des modifications structurelles Ă apporter au thĂšme dâorigine. Jâai donc choisi de faire un fork. Jâen ai profitĂ© pour proposer des PR avec les modifications que jâapportais au fur et Ă mesure đ€.
Les modifications que jâai apportĂ©es au thĂšme dâorigine :
- choix de la localisation de la sidebar (droite ou gauche),
- support du multilingues pour avoir un CV en français et un en anglais.
Codons notre CV đšâđ»
Je vous lâai dit, je suis parti dâun thĂšme existant : online CV de Sharath Kumar.
Jâai beaucoup aimĂ© le look gĂ©nĂ©ral du CV et comme je vous lâai dit câĂ©tait bien au delĂ de ce que je pouvais rĂȘver arriver comme rĂ©sultat si jâĂ©tais parti de rien đ€©.
Comme dĂ©jĂ indiquĂ© dans le paragraphe prĂ©cĂ©dent, jâai customisĂ© le thĂšme pour quâil colle parfaitement Ă mes besoins.
Dans le détail quelles sont les étapes pour arriver à mon CV final ?
Fork du repository đ
Rien de bien compliquĂ©, dans ce cas Github est votre ami pour faire directement un fork đ. Ensuite lâidĂ©e Ă©tait de pouvoir continuer Ă participer au projet tout en crĂ©ant mon CV sans envoyer mes donnĂ©es dans le thĂšme dâorigine đ . Pour cela, jâai simplement crĂ©Ă© une branche my-resume qui me sert de branche de production dans Github pour la configuration de Github pages. Cette branche contient le code upstream, le code des PR que jâai proposĂ©es en attente de validation (ou pas) et le code propre Ă mon CV Ă moi.
Tout ceci se trouve ici : online-cv.
Ajout de fonctionnalitĂ©s âš
La premiĂšre fonctionnalitĂ© que jâai rajoutĂ©e permet de mettre la barre latĂ©rale dâinformations (nom, prĂ©nom, tĂ©lĂ©phone, âŠ) Ă gauche ou Ă droite. Pour cela jâai rajoutĂ© un champ de configuration dans le fichier data.yml :
1
2
sidebar:
position: left # position of the sidebar : left or right
Note đ :
Avec Jekyll et Liquid vos données sont stockées dans un fichier YAML dans le répertoire _data. Ensuite pour y accéder dans des tags Liquid :site.data.<nom du fichier>
Ensuite jâai modifiĂ© le CSS (ouh lĂ đ±) pour la prise en compte du choix :
1
2
3
4
5
6
7
8
// define variable with front matter
{% if site.data.data.sidebar.position == 'left' %}
$resume-order: 2;
$sidebar-order: 1;
{% else %}
$resume-order: 1;
$sidebar-order: 2;
{% endif %}
Ensuite il ne me restait plus quâĂ utiliser les variables dans le SCSS :
1
2
3
4
5
.sidebar-wrapper {
grid-column: span 3;
order: $sidebar-order;
// ...
}
Le dĂ©tail de cette modification est dans la PR#359 sur le repo dâorigine.
Lâautre modification consistait Ă pouvoir avoir mon CV en anglais en plus du français. Dans les issues du repository dâorigine il est indiquĂ© quâil faut crĂ©er autant de repositories que de versions du CV. Cela me dĂ©rangeait par rapport Ă la duplication de code alors que techniquement, seul le fichier data.yml change puisquâil contient lâensemble des donnĂ©es : titres de sections et informations du CV.
La premiÚre chose a été de créer un nouveau fichier de données en rajoutant la possibilité de spécifier la langue : data-fr.yml
.
Ensuite jâai crĂ©Ă© un layout par langue :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
---
#Add "layout: compress" here to compress the html code
---
<!DOCTYPE html>
<!--[if IE 8]> <html lang="en" class="ie8"> <![endif]-->
<!--[if IE 9]> <html lang="en" class="ie9"> <![endif]-->
<!--[if !IE]><!--> <html lang="en"> <!--<![endif]-->
{% include head.html %}
{% assign data = site.data.data-fr %}
<body>
<div class="wrapper">
{% include sidebar.html %}
<div class="main-wrapper">
{{ content }}
</div>
</div>
{% include footer.html %}
{% include scripts.html %}
</body>
</html>
La principale chose à retenir est la récupération du bon fichier de data : {% assign data = site.data.data-fr %}
.
Enfin, créer un nouvel index utilisant ce layout :
1
2
3
4
5
6
---
layout: default-fr
---
{% assign data = site.data.data-fr %}
{% include index-common.html %}
Le dĂ©tail de lâensemble de ces modifications se trouve dans la PR#360 dans le repository dâorigine.
Ajout des donnĂ©es đ
Câest la partie la plus simple, remplir le data.yml avec mes donnĂ©es que je souhaitais voir apparaĂźtre dans mon CV.
1
2
3
4
5
6
7
8
9
sidebar:
about: False # set to False or comment line if you want to remove the "how to use?" in the sidebar
education: True # set to False if you want education in main section instead of in sidebar
# Profile information
name: Stéphane Philippart
tagline: Developer Relation
avatar: stephane_philippart.jpg
# ...
Je vous laisse aller voir le détail sur le repository.
Lâimpression đšïž
Le thĂšme permet dâavoir une page dĂ©diĂ©e Ă lâimpression. Câest bien, mais lâidĂ©e est aussi dâavoir un PDF afin de pouvoir le fournir Ă des personnes souhaitant avoir le CV au format fichier. La problĂ©matique est dâarriver Ă gĂ©nĂ©rer un PDF propre Ă partir dâune page Web. La version imprimable nâest pas gĂ©niale et au final je pense quâun peu de CSS pourrait arranger ça mais vous me connaissez le CSS et moi đ .
Du coup, je suis parti sur utiliser un convertisseur en ligne qui fait ça trĂšs bien : https://www.freeconvert.com/webpage-to-pdf. Cerise sur le gĂąteau il gĂ©nĂšre une version PDF Ă partir de la page principale trĂšs propre đ.
En conclusion
VoilĂ il reste des choses Ă faire et Ă peaufiner, par exemple :
- gĂ©rer la langue par dĂ©faut en configuration plutĂŽt quâen dure dans les fichiers,
- ne pas avoir de duplication de code,
- optimiser le CSS,
- âŠ
Si vous ĂȘtes arrivĂ©s jusque lĂ merci de mâavoir lu et si il y a des coquilles nâhĂ©sitez pas Ă me faire une issue ou PR đ.
Merci Ă ma relectrice, Fanny, qui vous permet de lire cet article sans avoir trop les yeux qui saignent đ.
Comments