Bonjour tout le monde,
Ici SpaceFox, renard navigant dans les immensités de l'univers, développeur en Java et en Python de temps à autres, et écrivain à ses heures perdues. Le Java c'est surtout professionnel ou pour des tests, j'ai découvert la véritable pratique de Python et Django en contribuant à Zeste de Savoir. Quant au dernier point, peut-être que vous êtes déjà tombés sur ce vieux topic sur le Site du Zéro (à l'époque, c'était encore le Site du Zéro).
Eh bien cette année encore, je vais participer au NaNoWriMo, qui consiste en gros à écrire un maximum pendant le mois de novembre. Et c'est là qu'arrive le projet…
Les textes du renard
Genèse
J'ai un certain nombre de textes à présenter. Bon d'accord, pas assez, mais quand même. J'avais envie de faire un site pour les rendre accessible au public (sous licence CC-BY-NC-ND, parce que je ne crois pas à la liberté au sens "librement modifiable" dans les œuvres littéraires – mais ce débat risquerait de nous entraîner trop loin).
Et plutôt que de m'héberger un blog dans lequel je ne maîtrise rien, je me suis dit "pourquoi pas jouer avec Django pour voir ce qu'on peut lui faire cracher en peu de temps" ?
Ça, c'était vendredi soir (le 24 octobre). Là j'écris ces lignes le mardi 28 octobre à 24h36 (il n'y a pas d'erreur), et je peux vous présenter quelque chose. En ayant fait autre chose presque tout le WE.
Comme quoi, hein.
Généralités et avancement
Les fonctionnalités indispensables et donc implémentées sont les suivantes :
- Affichage de nouvelles et de "romans" (en fait des textes découpés en plusieurs chapitres)
- Édition facile mais souple. J'ai en particulier une nouvelle qui est particulièrement immonde au niveau de la complexité de mise en forme.
- Possibilité de mettre des "commentaires de l'auteur" sur les textes
Fonctionnalités que je ferai un jour si j'ai le temps :
- Possibilité de mettre des commentaires pour les lecteurs
- Flux RSS des nouveaux textes / mises à jour
- Partages sociaux
- Export dans divers formats (PDF, ePub, …)
Fonctionnalités que je ne souhaite pas gérer au moins dans un futur proche :
- Auteurs multiples. C'est mon site, je me fiche d'avoir d'autres auteurs dessus. Je sais, c'est égoïste.
Objectifs
Deux objectifs principaux ont guidé mon développement :
- Simplicité
- Simplicité
Là non plus il n'y a pas d'erreur.
Le premier concerne le code en lui-même, le second la présentation. Le code parce que je n'ai pas envie de réinventer la roue. Quant au site, il est prévu pour lire du texte : sur écran c'est vite casse-pieds, alors il faut simplifier la vie au maximum à l'utilisateur.
Le projet et son originalité
J'ai donc développé en quelques heures (et bien moins si j'était 1. meilleur en Python, 2. meilleur en Django et 3. que j'avais rationalisé tous mes petits bouts de développement) :
D'un point de vue fonctionnel, le seul maître mot, c'est "lisibilité". Ca implique concrètement :
- Une police spécifique
- Une largeur de ligne de 80 colonnes environ
- Pas de justification : les moteurs d'affichage des sites web sont infoutus de gérer des césures (et le peu qui le font coupent comme des porcs), donc la justification est immonde surtout sur des colonnes relativement étroite
- Une interface simplissime réduite au minimum
Résultat : passé le haut de la page, il n'y a plus que le texte, sur une colonne centrale, à l'écran. Fonctionnellement je pense que c'est assez réussi, donc.
D'un point de vue technique / back, c'est du Django 1.7, Python 2.7, MySQL 5.5. Pourquoi ? Parce que Python 2.7 et MySQL 5.5 c'est ce que j'ai déjà sur mon hébergement. Rappelez-vous : "simplicité" : je n'ai pas envie (et pas le temps) de me lancer dans l'étude d'un double hébergement Python 2 / Python 3.
La mise en page est faite avec markdown, qui a en plus la gentillesse d'accepter le formatage HTML, ce qui m'a bien aidé dans certains cas.
Pour ceux que ça intéresse, le code est disponible sur Github et sous licence MIT (parce que par contre je crois au libre dans l'informatique). L'arbre de commit est sans doute immonde, de même qu'il y a très probablement des horreurs dans le code.
Entre autre le fait que la plupart des pages ont tendance à charger toute la base pour s'afficher… du coup, le site étant principalement statique, j'ai collé un gros cache sur l'intégralité de la chose.
Oui, je sais…
D'un point de vue technique / front, c'est du Bootstrap, que je n'avais jamais touché avant. Là j'en vois qui font des crises cardiaques. Oui, je charge Boostrap pour un site qui ne fait à peu près rien (sérieusement : il n'y a même pas une seule image !).
Et vous savez quoi ? J'en suis très content. Non seulement ça m'a permis de faire exactement ce que je voulais en quelques lignes ; mais en plus ça me permet de gérer ce genre d'horreurs de mise en page sans ajouter le moindre CSS spécifique à la nouvelle, uniquement en jouant avec le formatage HTML et les classes CSS.
Alors oui, je charge Bootstrap + 2 polices spécifiques pour chaque page, mais je considère que ce n'est pas grave étant donné que ce sont des textes littéraires donc des pages sur lesquelles on reste longtemps.
Voilà ce que j'ai à vous montrer.
Je vous remets le lien : Les textes du renard
Si vous voulez tester la lisibilité avec un vrai texte, préférez Inattendu, qui est le meilleur texte du site (puisque c'est le seul a avoir été publié…)
Qu'en pensez-vous ?