Home Tags Anciens articles Mon CV

Une note sur web_cv

Comme promis dans l’édito précédent, je vais vous présenter ici mon projet web_cv, ce que c’est, où ça en est et quel est son objectif.

Si vous me suivez un peu, vous connaissez sans doute mon cv en ligne. Mais voilà, il est vieillissant, en PHP, et surtout, il est statique. C’est à dire qu’il n’y a aucune base de données derrière. Chaque fois que je rajoute une compétence ou un diplôme, c’est un array ou un champs de plus dans le code PHP. Je commit, puis je met à jour la DocumentRoot sur le conteneur via une tâche Ansible. Pas très 2019, tout ça.

J’ai commencé à penser à développer un simple CV web en Flask, un micro-framework web en Python.

Note : J’aime beaucoup le Python et je trouvais Django bien trop lourd pour ce développement. En effet, contrairement à Flask, Django est “clef en main”, il embarque donc tous les modules nécessaires dans le package original. Flask est beaucoup plus léger et simple, vu qu’il n’embarque que le strict nécessaire, le reste étant disponible sous la forme de plugins, d’où la notion de micro-framework.

Ce simple CV serait donc un gros CRUD, affichant et mettant en forme le contenu d’une base de données. De ce fait, je comptais rentrer les infos à la main en base (via un PHPMyAdmin par exemple), ce qui aurait été toujours plus agréable qu’à la main dans le code PHP. Puis je me suis dit que je voulais encore moins m’embêter, j’ai donc imaginé un backoffice permettant de populer la base de données, une fois loggué à celui-ci.

Et partant de là, qu’est-ce qui empêche de rêver à une version “nue” de cela, qui serait déployable/auto-hébergeable, un peu à la Wordpress mais pour un CV? Petit à petit, l’idée s’est transformée en une idée de CMS de CV en ligne. Et pour ce faire, voici les technos choisies/utilisées :

  • MySQL

  • Python 3 / Flask pour le langage et le (micro)framework, ainsi que quelques plugins de Flask (flask-login, flask-sqlalchemy, etc…)

  • Bootstrap pour le CSS

  • Le moteur de template de Flask : Jinja

Maintenant que je vous ai exposé le projet, laissez-moi vous exposer l’avancement et ce qu’il reste à faire dessus. Ne vous affolez pas, il y a encore du boulot. J’utilise Trello pour mesurer l’avancement du projet, définir des tâches et des objectifs. J’ai donc terminé :

  • Le projet de base Flask, sa configuration et les actions de base (connexion à la base de données par ex.)

  • Le modèle de données, c’est à dire l’architecture de la base de donnée, ainsi que sa population via des scripts de migration

  • Les templates de base

  • Les vues et routes sont terminées également, hormis pour le backoffice d’administration

  • Le favicon \o/ (si, c’est important)

  • Le design de base (merci Bootstrap), même si le design de chaque template sera dépendant de son contenu

Note n°2: Je sépare et différencie évidemment les vues et les templates. Je ne vais pas faire un cours de développement Python MVT mais la vue est le code Python qui implémente les routes et passe la donnée (récupérée dans le modèle) à la template, qui elle, est en Jinja+HTML.

Modèle -> Vue -> Template

Comme vous le constatez, il reste du job. Voici donc ce que j’imagine pour la suite :

  • La rédaction des templates avec affichage de la bonne donnée en fonction de la template (ici, c’est les diplômes, ici les expériences, ici les compétences, etc…). Cette partie est déjà en cours, c’est clairement une des plus simples vu que le modèle et les données sont déjà présents, il ne s’agit au final que de SELECT et de mise en forme.

  • Sur la homepage, un petit résumé de la personne, personnalisable via le backoffice ainsi que la photo dans un coin (ou pas, au choix), l’âge, permis de conduire ou non… Les infos générales quoi.

  • Le backoffice avec tout ce qui s’en suit : formulaire de login, fonction d’ajout de contenu en fonction de ce qui est ajouté (diplôme, expérience, compétence…), fonction de suppression… C’est clairement la plus grosse partie.

  • Implémenter des tests unitaires

  • Implémenter une chaîne CI/CD digne de ce nom, pour le moment le code est dans un repository CodeCommit pour ma version, j’aimerais donc expérimenter CodeStar à cette occasion.

  • Nettoyer le code pour sortir une version “nue” sur Github, afin que les gens (vous) puissiez l’utiliser pour propulser votre propre CV en ligne.

  • Et après, pourquoi pas des thèmes, une API, la possibilité d’utiliser un backend différent de MySQL…

La plupart de ces tâches sont en cours. Je suis conscient que le projet est ambitieux, peut-être vous direz-vous que je n’en suis qu’au début et c’est sûrement vrai. Mais pour moi, c’est un projet de fond un peu laboratoire et c’est surtout quelque chose que je fais par plaisir.

Une fois que j’aurais une première version de mon CV en ligne, je ferais un autre article… Et encore un autre lorsque la version nue et utilisable par tous sera en ligne. Peut-être même que je ferais des articles intermédiaires au fur et à mesure que je testerais des technos, comme un article sur CodeStar.

J’écris, je teste, je scratch, je recommence… Mais je travaille activement. Ça sortira quand ça sortira mais lorsque ça sortira (répétition voulue), j’en serais fier. Cet article avait simplement vocation à vous présenter ce projet de fond que j’ai et son avancement, j’espère donc qu’il vous aura plu.

Enfin, comme dirait l’autre, more to come soon !