Bonjour tout le monde !
Je suis Baptiste, alias Bat' sur Zeste de Savoir et sur Internet en général. Je suis intéréssé par l'informatique depuis environ deux ans. Je développe donc en tant qu'amateur dans différents langages comme C#, JavaScript, HTML/CSS, et bien-sûr Vala. Aujourd'hui je viens vous présenter un petit projet que j'ai créé avec ce langage.
En savoir plus sur le projet
Genèse
Il y a quelques temps, j'ai découvert la bibliothèque Valum qui permettait de créer des sites web à l'aide du langage Vala. J'ai voulu l'essayer. Seulement, elle est développée sous Linux et la compatibilité Windows (avec lequel je travaille) … c'est pas vraiment ça. J'ai même essayé sous Linux, ça na pas été forcement plus simple. J'ai donc décidé de créer ma propre bibliothèque pour créer des sites webs dynamiques avec Vala.
Généralités et avancement
Le projet est encore assez jeune. Il est donc tout à fait probable que le code que l'on écit aujourd'hui ne soit plus fonctionnel demain.
De plus, je suis amateur, je vais aussi à l'école à côté et ce n'est pas ma seule activité. Il se peut que le projet ne soit pas toujours très actif.
Mais depuis le mois d'avril, Wizix et Folaefolc m'aident sur le projet !
Objectifs personnels
Mes objectifs sont très simples :
- M'amuser. Je fait ce projet sur mon temps libre, ce n'est pas quelque chose que je suis obligé de faire, je veux que ça me plaise.
- Progresser. Je connais assez bien Vala, mais certaines bibliothèques, comme libsoup que j'utilise dans ce projet, me sont inconnues. C'est donc aussi l'occasion d'apprendre de nouvelles choses.
Me faire repérer par une grosse boîte de la Silicon Valley, vendre le framework puis nager dans ma piscine de billets.
Rien de bien original ici, donc.
Le projet et son orignialité
Ce projet n'est pas le premier framework web en Vala (il existe aussi Valum, comme je l'ai dit plus haut). Cependant je crois que c'est l'un des premier à respecter le pattren MVC. Il fonctionne aussi parfaitement sous Windows.
Pour ceux qui ne savent pas ce qu'est le pattern MVC, c'est une architecture surtout utilisée dans les sites webs dynamiques. Le code est alors divisé en trois parties :
- Les modèles, qui décrivent les différentes données (utilisateurs, tutoriels, articles, forums, etc dans le cas de Zeste de Savoir)
- Les vues, qui sont des fichiers contenant une sorte de HTML. Ils sont interprétés pour afficher des informations à l'utilisateurs.
- Les controlleurs, qui font toute la logique du site web. Ils donnent les bons modèles à nos vues, gèrent l'upload de fichiers, etc.
Valse est donc un framework qui vous permet de créer des sites dynamiques en utilisant cette architecture.
Objectifs du projet
En plus de mes objectifs personnels, j'aimerai :
Vraiment utiliser MVCFait- Avoir un meilleur moteur de rendu En cours, sur du long terme
- Créer un petit programme en ligne de commande pour générer les fichiers d'un site web automatiquement En cours, sur du long terme aussi
- Avoir un meilleur méchanisme de routage Plus ou moins fait
- Documenter le code et écrire une doc pour guider les développeurs intéréssés Fait
- Faciliter la gestion de bases de données Fait
- Supporter des choses comme les WebSockets
- Et sûrement d'autres qui vont venir plus tard
Comment ça marche
Le projet propose dès le début un moteur de rendu appelé Wala. Il propose une syntaxe assez similaire à Twig ou Jinja (avec des {{ }}
). Il peut afficher des variables du modèle, afficher son nom, inclure d'autres fichiers et utiliser des tags. Mais si Wal ne vous convient pas, vous pouvez très facilement créer votre propre moteur de rendu.
Pour avoir un site web fonctionnel et propre, il vous faudra au moins quatres fichiers (pour quelque chose de sale, trois suffisent. Vous pouvez même en avoir qu'un seul, mais c'est vraiment moche) :
main.vala
qui associera vos controlleurs avec une route et qui lancera le serveurmon-modele.vala
qui décrira notre modèlemon-controlleur.vala
qui fera le rendu de votre page (et éventuellement un peu de logique)ma-page.wala
qui contiendra la page qu'il faudra rendre avec Wala
On peut alors avoir quelque chose comme ça :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | using Valse; void main (string[] args) { // On crée le serveur Router r = new Router (); // On crée un controlleur et on l'associe à la route /zds ZdSController zds = new ZdSController (); r.register ("/zds", zds); // On lance le serveur r.listen (); } |
main.vala
1 2 3 | public class ZdSModel : Object { public string greeter {get; set;} } |
zds-controller.vala
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | using Valse; using Gee; public class ZdSController : Controller { public ZdSController () { // On lie l'action par défaut (index) à notre méthode index this.add_action ("index", this.index); } public override Response index () { // La méthode index correspond à la racine de la route associée au controlleur // On crée le modèle ZdSModel model = new ZdSModel (); model.greeter = "Hello ZdS !"; // On fait un rendu de la page en utilisant la méthode page de la classe Controller qui fait tout pour nous return page ("zds.wala", model); } } |
zds-controlleur.vala
1 2 3 4 5 6 7 8 9 10 11 | <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Zeste de Savoir</title> </head> <body> <h1>{{ mod.greeter }}</h1><!-- On utilise une variable du modèle --> <p>Cette page a été rendue avec {{ render_engine }}</p> <!-- On affiche le nom du moteur de rendu (Wala) --> </body> </html> |
zds.wala
Je rédigerai surement une doc (et peut être même un tuto ici) une fois que l'API sera stabilisée. Si vous voulez vous amuser avec Valse dès maintenant clonez le repo git (voir à la fin du message) et compilez avec le script build.ps1
. Il vous faudra Vala 0.20 minimum. Ensuite, vous pouvez vous amuser à créer de nouveaux controlleurs ou modifier ceux de test.
En savoir plus
Si vous voulez aider, n'hésitez pas ! Même si vous débutez en Vala, je serai là pour vous guider. Le dépôt Gitlab (ou plutôt Framagit) est disponible juste là.
Voilà ! Si vous avez des remarques, critiques ou suggestions, allez y ! Je suis là pour ça. En tout cas, merci de m'avoir lu, j'espère vous avoir donné envie d'essayer mon petit framework ou au moins de suivre l'évolution du projet.