URL: https://linuxfr.org/users/deber/journaux/fblog Title: fBlog Authors: Denis Bernard Date: 2015年03月14日T00:07:08+01:00 License: CC By-SA Tags: fortran, ada et ordinosaure Score: 12 Amis lecteurs, vous avez été nombreux à répondre au [sondage](http://linuxfr.org/sondages/ma-page-perso-est-hebergee-sur) que j’avais initié sur les pages perso. J’avais un projet de moteur de page perso / blog minimaliste en cours depuis des années et vos réponses m’ont donné un nouvel élan. **Version courte** fBlog est un moteur de blog utilisable par toute personne ayant déjà mis en ligne ses pages Web et possédant des notions de HTML et CSS. Son interface utilisateur est soit la ligne de commande classique ou un mode interactif à la console d'un genre nouveau. Contrairement à la plupart des [autres logiciels](https://staticsitegenerators.net/) de ce genre, fBlog est un binaire exécutable. Il est sans dépendance à la compilation mais à l’exécution il requiert quelques commandes externes Posix et un quelconque éditeur de texte. Il s’installe aisément en suivant les instructions sur la console et il est immédiatement fonctionnel sur tout système Linux de base. fBlog n’est basé sur aucun _framework_ et les pages générées ont toutes à peu près le même source HTML. La personnalisation du HTML des pages est faite par un fichier de configuration où l’on défini le titre, l’introduction, le pied de page, etc. L’aspect des pages générées est entièrement fondé sur la feuille de style externe (qui n’est même pas obligatoire). fBlog est minimaliste et ne supporte pas les commentaires (ça a permis d’éviter JavaScript et *SQL) ni les catégories. Les billets sont des fichiers texte individuels où le nom de fichier est la date et l’heure de création, le premier enregistrement est le titre et le restant le corps du texte rédigé en HTML (Markdown non supporté). fBlog est en libre téléchargement depuis SourceForge. Il y a un binaire pour les PC mais il est vraiment facile de le compiler en suivant les instructions. La seule chose dont vous ayez besoin est le compilateur GCC (pas plus vieux que la version 4.7.3) avec l’option gFortran. Concernant la discussion hébergement à domicile vs hébergement pro vous pouvez tester mes pages en changeant le TLD de « .com » en « .fr ». Tout ce qui est sous le TLD « .com » est chez moi sous modem ADSLv1 alors que ce qui est sous le TLD « .fr » est un miroir chez un hébergeur bien connu. Liens : * [Sourceforge](http://sourceforge.net/projects/fortranblog/) (site officiel) * [Page perso](http://oceamer.com/) (HTML sans style) * [Blog de démo](http://oceamer.com/blog/) (style fBlog standard) **Version longue** Au commencement, c’était une histoire de bateau ! En 2006, je mettais en chantier une coque de voilier pour faire un tour du monde et j’éprouvais le besoin de bloguer sur cette aventure. Aujourd’hui le voilier n’est pas tout à fait terminé, contrairement à ce que j’avais planifié. Mais ça, c’est une autre histoire. Donc, en 2006, je prospectais ce qui existait en matière de logiciels de blog. (Je n’étais pas totalement novice car j’avais déjà mis en place le site Web d’une association composé de pages statiques, écrites à la main, hébergées sur le compte Free d’un adhérant.) Le logiciel devait répondre à des besoins très précis en matière d’administration : je devais pouvoir tout faire à distance, depuis un cybercafé doté d’une connexion pourrie. Dans le contexte de l’époque, c’était du Telnet avec Putty sous Windows. Le moteur de blog devait être administrable à la ligne de commande. J’ai donc choisi NB (NanoBlogger) ; que j’ai adoré au point de m’y impliquer dans sa traduction et de fédérer quelques utilisateurs francophones. Mais NB était une horripilante lenteur lorsque il atteignait une centaine de billets. (C’est beaucoup moins vrai aujourd’hui avec la puissance actuelle des machines ; et il y a encore des fidèles qui ont maintenant des centaines de billets.) Donc, juste pour cette question de lenteur, je me suis résolu à écrire mon propre logiciel. Le seul moyen que je voyais était de le programmer plutôt que de le scripter. J’avais pris conscience de la dépendance aux langages interprétés qui oblige à intervenir souvent sur le code lors des nouvelles versions du langages (Bash pour NB). Concernant le choix du langage capable de générer un binaire, la liste était très courte: il n’y avait pas de Basic (à l’époque) pour Linux ; restait le langage C, Ada et Fortran. Le langage C, j’oubliais vite car j’étais un marin pas un informaticien professionnel. Ada me tentait assez mais Fortran m’a paru plus évident car je m’y était déjà un peu essayé en guise de remplacement du Basic anciennement pratiqué avec MS-DOS. En 2009, j’ai commencé mes premiers pas en programmation Fortran et ça n’a pas été facile. Ce langage a connu de si profonds changements que les quelques rudiments que j’avais pu assimiler quelques années avant se sont avérés insuffisants. Pour faire bref, la glorieuse époque de Fortran est celle de la version F77 ; laquelle faisait à peu près tout ce que l’on peut faire avec du scripting Bash mais en infiniment plus vite. F77 ne connaissait pas encore les pointeurs, les allocations dynamiques et bien évidement pas les modules et autres facilités du génie logiciel moderne. Il m’a fallu me mettre à jour et ingurgiter des savoirs avec une maigre documentation et absolument aucun exemple à me mettre sous les yeux autres que ceux illustrant la norme. Et aujourd’hui encore, je n’ai pas connaissance d’un source Fortran qui ne soit pas le replâtrage d’un vieux soft écrit en F77 ou F90. Et je ne connais aucun logiciel écrit en Fortran pour faire autre chose que du calcul intensif ! J’ai choisi gfortran qui vient avec GCC et qui profite de la même infrastructure que le langage C. À ce moment là, gfortran couvrait la totalité de la norme 77, la quasi totalité de F90 et F95 et introduisait F2003. Aujourd’hui gfortran commence à introduire la norme F2015 (à partir de GCC-5.0) mais ne couvre pas encore la totalité de F2003 et F2008. Depuis 2009, j’ai eu l’occasion de tester les nouveautés de ce langage et elles ont été nombreuses et intéressantes ! Je dois dire que l’abondance de ces nouveautés logicielles m’a fait perdre beaucoup de temps ! Si j’en étais resté au Fortran 77, je n’aurais eu qu’à faire une traduction du script Bash qu’est NanoBlogger et la messe aurait été dite depuis longtemps. Mais là je me suis trouvé devant plein d’options différentes et je me suis livré à de longs errements. Du genre, module ou pas module ? Et si module, procédures dedans ou seulement des variables communes ? Variables globales à tout le programme ou panachage avec des variables mises en modules ? Un autre point aussi qui m’a pesé : le « coding style ». Si l’on peut à la rigueur écrire un source F90 à la manière de F77, avec les dernières normes ce n’est plus envisageable : par cause de la longueur des noms des nouvelles procédures intrinsèques et leur cortège d’options. Je me suis créé donc mon propre style, un peu à la manière du langage C. Il y avait aussi le choix de rester dans la concision du style F77 ou la verbosité dorénavant permise par la norme. J’ai fait le choix de la verbosité car je me suis aperçu que c’était plus facile pour me relire plus tard. C’est vraiment là que l’on souffre de ne pas pouvoir lire du code récent écrit par d’autres. Comme je ne me suis pas stabilisé immédiatement en style, j’ai donc eu à réécrire plusieurs fois l’intégralité du code. En dehors du langage de programmation, j’ai eu à faire d’autres choix qui auraient de toute façon été à faire quelque soit le langage choisi et qui concerne l’ossature du moteur de blog. Le tout premier était de choisir entre une base de donnée interne ou externe. Le choix fut rapide et le même que pour NanoBlogger : pas de base de données externe à la SQL mais des billets saisis sur un fichier plat individuel. Chaque fichier prend pour nom la date et l’heure de création et il est facile d’en faire le tri avec la commande externe « ls ». La création ou modification ultérieure d’un fichier se résume à y faire intervenir un éditeur de texte externe. Comme Fortran peut utiliser la ligne de commande, je pouvais faire comme si je scriptais en Bash. Le second choix, plus difficile, fut la question linguistique. Devais-je rédiger en français, en anglais ? Devais-je rendre le logiciel facilement adaptable dans une autre langue, le proposer à la fois en français et en anglais ? Dès le départ j’avais dans l’idée de faire un vrai projet, donc l’anglais s’imposait. Je me suis posé la question pendant plusieurs années. Vraiment. Aujourd’hui, j’ai le parti pris de l’anglais comme langue unique mais j’ai fait en sorte que tout se tienne dans le même module de façon à ce qu’un traducteur éventuel puisse ne pas trop souffrir. De toute façon, l’utilisateur de ce genre de logiciel en ligne de commande doit maîtriser un peu l’anglais. Et la base d’utilisateur est très faible au vu du nombre des usagers de NanoBlogger. Se limiter à la sphère française, serait coder pour une poignée d’individus. Je voulais aussi expérimenter une autre interface utilisateur que la seule ligne de commande mais qui soit compatible avec une session Telnet/ssh. Je ne voulais pas me perdre avec une interface à fenêtres avec ncurses (et surtout pas à jouer avec la programmation mixte !). J’ai donc créé une interface d'un genre nouveau qui fait absolument tout ce que la ligne de commande faisait déjà, un peu comme avec ncurses au niveau des touches à action instantanée (dit-on « hot key » ?) mais en mode ligne plutôt qu'en page écran. Ceci a eu pour effet d’introduire des tas de bugs qui n’avaient pas de raison d’apparaître à la seule ligne de commande qui fait un traitement linéaire. Autant dire que le seul ajout de cette nouvelle interface utilisateur m’a obligé réécrire quasiment entièrement un code déjà parfaitement fonctionnel à la seule ligne de commande ! Mais bon, maintenant ça marche et c’est joli. Un autre choix drastique a concerné la partie HTML, CSS et JavaScript. Je n’ai pas voulu m’embêter avec JavaScript (que je n’ai jamais pratiqué) car avec NanoBlogger on arrivait bien à s’en passer. De plus il n’y a pas le support des commentaires qui l’aurait rendu nécessaire. Reste que HTML venait de passer à la version 5 (bang, encore un apprentissage) et que CSS montait aussi à la version 3 (re-bang !). De tous les mois que j’ai pu consacrer à ce projet, je crois que la seule partie concernant les CSS m’a pris la moitié du temps. Contrairement au codage en Fortran, c’est pas fatiguant mais c’est long ! Encore une fois, j’ai pris une option de codage risquée mais qui semble prometteuse. Avec l'inflation du vocabulaire en HTML 5 il est devenu plus facile d’amarrer du style à toutes ces balises. Au point que j’ai pensé supprimer les balises DIV et faire appel aux pseudo classes en CSS. Ça a marché. Alors j’ai supprimé aussi les balises SPAN par la même occasion ! Encore une fois, ça a marché. Puis ce fut le défi imposé par la dernière mode, les feuilles de style « responsives ». Quelques dizaines d’heures encore plus tard... Ouf ! Au final, le moyen que j’ai trouvé pour réussir le couplage HTML – CSS, ce fut de ne concentrer que sur le seul HTML et de ne faire les CSS qu’ensuite. Aujourd’hui, on a la chance que les navigateurs traitent grosso modo le style par défaut de la même manière. (Comme si, par exemple, votre feuille CSS ne contenait aucun code.) Donc si le code HTML affiché par défaut dans le navigateur suffit à la bonne compréhension du blog, le fichier CSS est juste du bonus. Et le site est compatible pour les navigateurs en mode texte. J’arrive maintenant au bout de la première étape que je m’étais fixée, celle d’un moteur de blog qui convienne à mes besoins initiaux. Mais comme j’ai déjà bien d’autres envies, il y aura de nouvelles fonctionnalités dans les versions futures de fBlog. Et ce, jusqu’à la version 1.0 . Ensuite, ça ne sera plus que de la maintenance. Le code HTML généré depuis la version présente jusqu’à la future version stable 1.0 ne devrait plus beaucoup bouger. Une feuille de style personnalisée par vos soins aujourd’hui devrait pouvoir supporter les mises à jour sans trop de souci. Exemples de blogs générés par fBlog : * [blog du site officiel](http://fortranblog.sourceforge.net/blog/) (style conçu pour se rapprocher de celui de SourceForge) ; * [mon blog principal](http://oceamer.com/blog/) (style non modifié livré avec fBlog) portant surtout sur le cinéma ; * [photo blog](http://oceamer.com/promenades/) ; * [cargo](http://oceamer.com/cargos/) (style non modifié livré avec fBlog), un blog rétrospectif sur mon ancienne carrière de marin au long cours ; * [le blog sur mon voilier](http://oceamer.com/voilier/) (celui qui est à l'origine de cette aventure !) ; * [code de nuit](http://oceamer.com/code/) (style ordinausaure), divagations sur l'informatique.