The QuiZz : Partie 2
Comme promis, la partie 2 ne va s'atteler qu'à fournir le même cahier des charges que le soft de la partie 1 mais pour une appli web.
Pré-requis
Pour suivre, il vous faudra connaitre les grandes lignes de fonctionnement du dev web.
On va donc utiliser le mini-framework Iron pour celà et quelques plugins utiles (rajouté dans le fichier cargo.toml).
Pour donner un peu de charme au projet, je lui cole le framework Bootstrap avec le thème libre SB-Admin-2
Ok, c'est vraiment too much pour une partie 2 mais ça met les bases pour les étapes suivantes.
côté serveur (Rust)
Nous avons désormais plusieurs binaires à gérer.
Désormais pour lancer l'appli Cli :
cargo run --bin the_quizz
Et pour l'appli web :
cargo run --bin the_quizz_web
Les plugins
- staticfile : permet d'inclure des fichiers statiques (javascript, css, html, polices, images etc.)
- router : préciser les différentes urls de l'applicatif (en GET et POST)
- mount : outil glue permettant de délivrer des routes et des données statiques au sein du même serveur.
Templates
Je suis encore un utilisateur de Django et Flask et des langages de templates tel que Jinja.
J'ai découvert que Jinja était en parti supporté par Rust via Tera
Vu que j'ai carte libre, je parts donc sur cette techno.
Pour compiler le template, il suffit d'utiliser
cargo run --bin compile_templates
Refactoring
Vu que l'on a désormais 2 applicatifs (cli et web), il est utile de partager des ressources en commun : tout est centralisé dans le fichier lib.rs
Côté client
Pour ceux qui ne l'on pas encore compris, j'ai un vrai mépris pour les technos autours de Javascript : c'est unsafe à souhait et à tous les désavantages d'un langage interpreté.
Néanmoins, je vais essayer d'en tirer le meilleur en utilisant ma nouvelle stack frontend
Afin de créer l'ensemble des fichiers statiques du projet, il vous suffirat de faire :
cd static && gulp
IHM
L'utilisation d'une interface web n'étant pas véritablement équivalente, il y a quelques différences :
- pas de possibilité de quitter l'applicatif
- les raccourcis clavier ne peuvent être équivalent : en revanche, vous pouvez passez d'un bouton à un autre avec Tab ou MAJ + Tab et valider ce choix avec ↵ (touche entrée)
Si vous utilisez une mauvaise version de NodeJS
Plusieurs librairies sont encore imcompatibles avec la dernière version de NodeJS (6). Un sous-dépendance me pose encore soucis à l'heure actuel : il est donc nécessaire de passer par une version plus ancienne. Si vous souhaitez être tranquille, je pense que Node 4 (une version LTS) me semble le plus approprié.
-
1 Vider le cache de NPM
sudo npm cache clean -f
-
2 Installer un mini soft appelé tout simplement n qui gère exclusivement l'installation de Node
sudo npm install -g n
-
3 Installer la dernière version stable de NPM
sudo n stable # pour node 5 et sudo n lts pour la version 4
Bounty
Si vous utilisez Tmux et Tmuxp, voici une petite config qui devrait vous simplifier la vie :
session_name: the quizz
windows:
- window_name: watch (web)
layout: main-vertical
shell_command_before:
- cd ~/misc/rust/the_quizz
panes:
- shell_command:
- cd static
- echo 'gulp'
- gulp
- cargo run --bin compile_templates
- cargo run --bin the_quizz_web
- window_name: cli
layout: main-vertical
shell_command_before:
- cd ~/misc/rust/the_quizz
panes:
- shell_command:
- cargo run --bin the_quizz
- git status
Conclusion
Y'a vraiment beaucoup de dépendances abordées dans cette étape.
D'ailleurs, il est désormais possible de les voir via un graphique.
Vous pouvez en faire autant : créer un graphique de dépendance Rust
Les évolutions devraient ralentir de ce côté pour la suite.
Evolution pour l'étape n° 3
-
Je viens de découvrir un ORM (viable) pour Rust : diesel ça serait vraiment bête de s'en priver!
-
Utilisation des API Html5 de stockage et d'utilisation du mode offline
-
Version Cli : détection des évènements souris
Comments
comments powered by Disqus