Générateur de site statique

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour à tous,

Il y a un certain temps je cherchais un générateur de site statique. J’aurais surement pu trouver quelque chose répondant à mon besoin mais j’ai préféré le créer moi-même pour trois raisons :

  • Mon générateur ne feras que ce que j’ai besoin
  • Cela me donneras l’occasion de coder (je n’ai plus l’occasion depuis deux ans)
  • J’ai envie ;)

J’ai commencé aujourd’hui et j’ai produit un début : Github

Cependant je me suis rendu compte que de un j’étais vraiment nul (je le savais déjà un peu) et que j’ai plusieurs problèmes....

  • Mon plus gros problème est l’encodage, en effet ma manière de générer mes pages doit être assez sale et certains caractères ne passent pas comme les "»" sur la page d’accueil.
  • Le second problème est inhérent à ma façon de gérer les flux (un peu n’importe comment) en effet j’obtiens une génération des pages assez lente, pouvant être (je pense) optimisée

Si une âme bienveillante pouvait donc jeter un œil sur mon code (La Main) et me donner quelques conseils simples sur ce qu’il ne faut pas faire ou ce qu’il fraudait mieux faire je lui en serais fortement reconnaissant !!!

Merci d’avance pour toutes les indications que vous pourriez me donner !

+0 -0

Cette réponse a aidé l’auteur du sujet

Salut cariope,

Bon, ça va faire un peu déterrage de sujet, mais je pense qu’il y a deux-trois trucs à redire sur le projet :

  • même si ce n’est que pour toi, utiliser un outil tel que Maven te permettrait de gérer ton projet sans te prendre la tête et de tout générer/recompiler automagiquement (mais j’avoue, c’est un peu overkill pour un débutant) (et ça gère les dépendances, donc pas de .jar dans le projet git)
  • Niveau code, ça manque d’un minimum de commentaires (même si ça reste lisible)
  • Je ne comprendre pas l’intérêt des classes Auteurs, Citations et Sources, à part pour la fonction getById. Utiliser directement un conteneur standard comme la HashMap (avec comme clé l’ID de ce que tu veux stocker) est amplement suffisant pour ce que tu souhaites faire, en plus de ne pas réinventer la roue
  • Tu utilises des arrays (notation avec []), mais d’après la doc java ces arrays ont une taille statique, donc comment fais-tu pour gérer une nombre N (non constant) d’objets ? Si tu resize ton conteneur, c’est une mauvaise idée de l’utiliser.

Sinon niveau architecture du projet :

  • Pour concevoir un générateur de site statique, même simple, le must est d’avoir un exécutable qui ne contient pas les chemins en dur dans le code. Pour que le générateur soit le plus simple, il faudrait pouvoir écrire :
1
generator <dossier contenant ta base> -c <fichier de configuration> -o <dossier de sortie>
  • surcharger la méthode toString() des classes, c’est pas terrible, surtout que la bibliothèque GSon que tu utilises te permet de générer automatiquement du JSon (méthode toJson()), ce qui est beaucoup plus propre et te garantit du json bien formé à la sortie
  • Trois fichiers pour stocker si peu d’informations, je suis pas fan (et le Json non plus)

Édité par ntimeu

+1 -0
Auteur du sujet

Salut ntimeu,

Pas de soucis pour le déterrage, au contraire. Tes remarques sont exactement le genre de choses que j’attendais !

  • même si ce n’est que pour toi, utiliser un outil tel que Maven te permettrait de gérer ton projet sans te prendre la tête et de tout générer/recompiler automagiquement (mais j’avoue, c’est un peu overkill pour un débutant) (et ça gère les dépendances, donc pas de .jar dans le projet git)

C’est volontaire de pas l’avoir utilisé, comme tu dis un peu overkill si je suis tout seul en plus avec une seule dépendance. Mais ce n’est pas absurde de changer cela.

  • Niveau code, ça manque d’un minimum de commentaires (même si ça reste lisible)

Mea culpa

  • Je ne comprendre pas l’intérêt des classes Auteurs, Citations et Sources, à part pour la fonction getById. Utiliser directement un conteneur standard comme la HashMap (avec comme clé l’ID de ce que tu veux stocker) est amplement suffisant pour ce que tu souhaites faire, en plus de ne pas réinventer la roue

Je connaissais de nom, mais ne l’ayant jamais utilisé n’aurait pas su que ça convenait à mon problème, je vais m’y intéresser…

  • Tu utilises des arrays (notation avec []), mais d’après la doc java ces arrays ont une taille statique, donc comment fais-tu pour gérer une nombre N (non constant) d’objets ? Si tu resize ton conteneur, c’est une mauvaise idée de l’utiliser.

Si c’est ce à quoi je pense je suis passé sur des listes en améliorant le projet, je viens de mettre à jour le github (d’ailleurs si tu veux me faire d’autres retours je suis preneur)

  • Pour concevoir un générateur de site statique, même simple, le must est d’avoir un exécutable qui ne contient pas les chemins en dur dans le code.

Très bonne remarque je suis conscient du problème mais n’est encore rien fait pour le corriger.

  • surcharger la méthode toString() des classes, c’est pas terrible, surtout que la bibliothèque GSon que tu utilises te permet de générer automatiquement du JSon (méthode toJson()), ce qui est beaucoup plus propre et te garantit du json bien formé à la sortie

Cela devait être sur la version d’avant (ou alors je veux bien un lien) par ce que je retrouve pas ce dont tu parles.

  • Trois fichiers pour stocker si peu d’informations, je suis pas fan (et le Json non plus)

Je ne sais pas ce que veut dire "peu" d’informations, c’est une notion assez floue, mais l’objectif est évidement de pouvoir faire évoluer les fichiers en augmentant les attributs et le volume d’informations.

Vraiment merci pour ton retour il m’est très utile, et je pense que c’est une des meilleurs manières de progresser.

En l’état le projet correspond fonctionnellement à mes besoins je ne vais donc pas repasser tout de suite dessus mais je note tout tes indications et j’espère pouvoir les appliquer dans d’autres occasions.

Cordialement

+0 -0

Cette réponse a aidé l’auteur du sujet

Je connaissais de nom, mais ne l’ayant jamais utilisé n’aurait pas su que ça convenait à mon problème, je vais m’y intéresser…

C’est malheureusement le problème d’apprendre le code à l’école : on y apprends les bases (algorithmique, etc), mais pas les outils donnés par les bibliothèques des différents langages. C’est à la fois bien et pas bien selon moi (bien parce qu’on apprend comment ça fonctionne en réalité, et mal parce que on se retrouve avec beaucoup d’étudiants qui ne connaissent pas les outils fournis par les langages et doivent écrire du code en entreprise).

Si ça t’intéresse, voici la page des collections génériques Java, qui te permettent de faire beaucoup de choses sans avoir à réinventer la roue.

Cela devait être sur la version d’avant (ou alors je veux bien un lien) par ce que je retrouve pas ce dont tu parles.

J’ai du me tromper, tu utilises probablement toString() pour faire de l’écriture dans la console, donc ça va ^^

En l’état le projet correspond fonctionnellement à mes besoins je ne vais donc pas repasser tout de suite dessus mais je note tout tes indications et j’espère pouvoir les appliquer dans d’autres occasions.

Après, ça dépend de si tu mets ton dépôt Github pour être vu ou pour être sauvegardé, dans le premier cas je considère qu’un minimum de choses doivent être mises en place (build automagique via Makefile ou gestionnaire de projet type SBT, Cargo ou Maven; une description succinte de l’objectif du programme, son architecture, comment compiler/installer/utiliser le programme). Si tu souhaites te diriger dans une carrière de développement, savoir créer un projet "propre" avec ces outils est toujours apprécié par les recruteurs.

+0 -0
Auteur du sujet

Après, ça dépend de si tu mets ton dépôt Github pour être vu ou pour être sauvegardé, dans le premier cas je considère qu’un minimum de choses doivent être mises en place (build automagique via Makefile ou gestionnaire de projet type SBT, Cargo ou Maven; une description succinte de l’objectif du programme, son architecture, comment compiler/installer/utiliser le programme). Si tu souhaites te diriger dans une carrière de développement, savoir créer un projet "propre" avec ces outils est toujours apprécié par les recruteurs.

Non je ne fais pas état de ce dépôt Github, il me sert essentiellement pour des repository privés pour des projets perso avec des amis ou pour des sauvegardes. Je mets ces repository en public si je veux des retours comme ici.

+1 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte