Blog

635b9bccd60b5.png

Suppression de jQuery

28/10/2022 | 0 commentaire | Non classé

C'était une idée voulue depuis le départ, la suppression de jQuery dans 299Ko. Faute de temps, et de priorité, cela n'a pas pu être fait dans la version 1. Mais j'ai pu avoir un énorme coup de main 😃

jQuery

Pour ceux qui ne connaissent pas, jQuery est une bibliothèque JavaScript permettant de simplifier l'écriture des scripts coté navigateur. De façon moins théorique, il facilite les effets visuels des pages Internet comme un affichage progressif des éléments masqués (Slide), ou une manipulation des éléments du DOM.

Il faut avouer que lorsqu'on est plutôt comme moi orienté back-end, comprenez langage serveur (PHP ici), jQuery a grandement facilité ce coté des choses, puisqu'il possédait une courbe d'apprentissage bien plus rapide que le JavaScript pur (vanilla JS). De plus, à la création de 99ko (2010 je crois), certaines fonctionnalités de cette librairie était très difficiles à mettre en place pour les non initiés.

Alors, pourquoi s'en passer ?

Notez bien que j'ai dit "possédait". Et oui, si jQuery n'a pas énormément changé depuis 2010, les navigateurs l'ont fait, et surtout depuis 2015, avec la norme ECMAScript 2015. Concrètement, cela signifie que les navigateurs ont dû implémenter la majorité des fonctionnalités de jQuery en natif. Et ça ça change la donne. A tel point qu'à présent, sans trop peu d'efforts, on peut se permettre de s'en passer.

Car il y a toujours un revers de médaille. Forcément, même si 299Ko appelait jQuery depuis un CDN, cela ajoutait malgré tout une latence supplémentaire, comme à chaque appel de fichier. De plus, celui-ci charge énormément de fonctions alors que notre CMS n'en utilise peut-être que 3 ou 4.

Aussi, c'était déjà décidé, encore fallait-il le faire.

Merci

Pour cela, j'ai pu compter sans même lui demander sur un blogueur que je connaissais déjà depuis 4 ou 5 ans. Il s'agit de ShevAbam, qui a réécrit quasiment toute la partie JS de 299Ko, faisant bondir le projet de suppression de jQuery d'un énorme pas en avant.

Par exemple :

// jQuery
$(document).ready(function () {
    $(".msg").each(function (index) {
        $(this).children(".msg-button-close").click(function () {
            $(this).parent().dequeue();
        });
        $(this).delay(5000 + index * 5000).slideUp();
    });

// vanilla

    function fadeOut(el) {
        el.style.opacity = 1;
        (function fade() {
                if ((el.style.opacity -= .03) < 0) {
                        el.style.display = "none";
                } else {
                        requestAnimationFrame(fade);
                }
        })();
    }

document.addEventListener("DOMContentLoaded", function () {
        document.querySelectorAll('.msg').forEach(function (item, index) {
        item.querySelector('.msg-button-close').addEventListener('click', function () {
            fadeOut(item);
        });
        setTimeout(function () {
            fadeOut(item);
        }, 5000 + index * 5000);
    });

Il n'y avait plus qu'à supprimer l'appel à la librairie dans le cœur du CMS, et c'est fini.

Un énorme merci à ce touche à tout. Je vous incite d'ailleurs à jeter un œil à son blog, plein de bonnes lectures. Vous y trouverez des réalisations persos ou des liens intéressants, comme de la génération de données JSON que j'utilise souvent :)

Normalize

Pendant qu'on y était, la librairie CSS normalize a également été supprimée au profit d'un simple Reset CSS inclut directement dans le thème, afin de pouvoir supprimer ce reset dans le thème utilisateur et encore et surtout, gagner encore un peu de temps à l'affichage d'une page :)

635a38417e9bc.png

PHP 7.4 sera nécessaire pour la v2 de 299Ko

26/10/2022 | 0 commentaire | Non classé

A l'heure où j'écris ces lignes, je me penche déjà sur la prochaine version majeure de 299Ko. La v 1.0 vient de sortir, et déjà le gros chantier est en cours 😊

Une V1 sortie rapidement

En effet, la première version a été proposée quasiment 2 mois après la première modification du code. Certaines choses ont été faites, par exemple l'intégration de la LightBox (FancyApps), les formats acceptés de la galerie, ou un plugin pour rédiger en MarkDown. Mais tout cela ne m'a pas prit énormément de temps, tout comme je ne me suis pas attardé pour créer un vrai thème pour ce site, ou comme je n'ai pas modifié le thème défaut. La priorité n'était pas là.

La première raison qui m'a fait continuer le projet 99ko, c'est bien sûr que j'avais besoin d'un CMS et que je souhaitais continuer à l'utiliser. Mais surtout, que l'installation de celle-ci était bloquée sur les serveurs Linux, à cause des permissions sur les dossiers et fichiers. Une fois ces petites erreurs corrigées, je suis rapidement passé à 2-3 fioritures et j'ai poussé le tout pour sortir une version 1 utilisable, très rapidement. Mais là n'était pas le but final.

Des besoins plus poussés

Une fois le blog en place, outre le contenu, il faut tâcher de l'améliorer. Et là est mon principal objectif. Pour ma part, j'estime qu'un système de blog a besoin d'une gestion des catégories afin de pouvoir s'y retrouver. Et quitte à créer un système de catégories, autant créer un système de catégories utilisable pour tous les plugins qui en ont besoin, et simplifier le développement d'éventuels futurs plugins. Mais tout ça c'est long, c'est d'ailleurs pour ça que je n'écris pas plus, je suis un peu la tête dans le guidon pendant le peu de moments libres que j'ai.

PHP 7.4

J'y arrive. Au fur et à mesure que je touche aux fichiers originels du projet, j'essaye de commenter, modifier, et optimiser un peu les sources du CMS. Et pour optimiser, quoi de mieux que de passer aux plus récentes versions ? En effet, PHP 7.4 a introduit de nombreuses fonctionnalités bien pratiques, notamment le typage des propriétés des classes. Cela m'aide énormément au débogage, car l'erreur affichée est vraiment explicite. Cette fonctionnalité évite aussi les 'bidouillages' que l'on peut faire avec. Je trouve pratique également l'opérateur d'assignement de fusion Null, qui réduit la quantité de code à écrire lorsqu'on teste des variables ou des entrées utilisateur. Mais surtout, je souhaite que les utilisateurs de 299Ko ne se retrouvent pas bloqués en devant garder une version de PHP quasi "obsolète". Aussi même si le développement se limite à PHP 7.4, la version 2 de 299Ko sera compatible PHP 8.1. En effet, il est souhaitable pour tout le monde que les serveurs passent sous les versions récentes des projets, et PHP n'est pas une exception. Pour vous en convaincre, sachez qu'avec une même machine avec un WordPress, PHP 7.4 exécute 2 fois plus de requêtes en une seconde que PHP 5.6.

PHP 7.4 est sortie fin 2019, aussi j'estime que 3 ans après, il n'est pas délirant d'espérer avoir un serveur qui supporte cette version au minimum.

A venir

Je communiquerai au fur et à mesure des avancées sur les fonctionnalités à venir, mais sachez qu'il y en a déjà pas mal de prévues voir d'implémentées 😃

63277b0c7fd6e.jpg

Sortie d'un container Docker

18/09/2022 | 0 commentaire | Non classé

Pour aider ceux qui souhaiteraient tester rapidement 299Ko, j'ai mis en place à l'instant un container Docker afin de ne pas s'embêter à installer un Apache etc uniquement pour ça. Il est disponible sur le Docker Hub.

Si vous avez Docker installé sur votre PC, il suffit de taper ces 2 lignes dans une console pour pouvoir tester 299Ko :

    docker pull maxkoder/299ko-cms


    docker run --name 299ko -p 8080:80 maxkoder/299ko-cms

Puis lancez votre navigateur, et allez à l'adresse localhost:8080, et c'est tout !

6324a0a631f88.png

Installer 299Ko sur Debian

16/09/2022 | 2 commentaires | Non classé

Pour faire fonctionner 299Ko, nous avons besoin d'un serveur Apache, installé sur une version de Linux, avec PHP d'installé. Vous trouverez l'appelation LAMP pour désigner tous ces services :

  • Linux
  • Apache
  • Mysql
  • PHP

A l'exclusion de Mysql, puisque 299Ko n'utilise pas de base de données mais écrit tout sur des fichiers JSON.

Installation de LAMP

On va tout d'abord ouvrir un terminal, et se connecter en root pour avoir les droits requis :

    su root

Tapez le mot de passe du superutilisateur et validez. Tout d'abord on va mettre le système à jour :

apt update
apt full-upgrade

On installe Apache et son module qui permet de gérer PHP

    apt install apache2 libapache2-mod-php

Si tout s'est bien passé, en allant à l'adresse localhost avec votre navigateur, vous devriez avoir la page d'accueil d'Apache :

localhost apache

Ensuite on va activer le démarrage automatique d'Apache au lancement du système

    systemctl enable apache2

Puis on installe PHP et PHP-CLI (qui permet de lancer des instructions PHP depuis le terminal) :

    apt install php php-cli

Après ça vient les librairies à installer :

    apt install php-{curl,gd,intl,xml,mbstring,json}

Puis on active le module rewrite, qui sert à la réécriture des URL :

    sudo a2enmod rewrite

Enfin, on redémarre Apache :

    systemctl restart apache2

Les droits

Pour gérer les fichiers et laisser à 299Ko le soin de créer et modifier les fichiers dont il a besoin, on a plusieurs manipulations à faire. On va d'abord ajouter l'utilisateur courant, celui avec lequel vous vous logguez, au groupe www-data :

    sudo usermod -a -G www-data max

Remplacez max, mon nom d'utilisateur, par le vôtre bien sûr.

Puis on va donner les droits à l'utilisateur et groupe www-data de modifier et créer des fichiers dans le dossier /var/www

    sudo chown -R www-data:www-data /var/www
    chmod 775 -R /var/www

Puis téléchargez la dernière version de 299Ko et décompressez le fichier dans le dossier /var/www/html. Si nécessaire, renommez le dossier 299Ko :

localhost apache

Installation de 299Ko

Puis accédez à l'adresse localhost/299ko, où vous serez redirigé vers l'installation :

localhost apache

Entrez votre adresse mail, c'est celle-ci qu'utilisera 299Ko pour vous transmettre des informations, comme un utilisateur qui utilise le module contact par exemple, et un mot de passe assez secure.

localhost apache

Si le navigateur vous propose d'enregistrer cet identifiant, refusez. J'ai eu des soucis de connexion avec Firefox qui mettait l'adresse mail entrée ici dans un champ réservé à l'antispam 😖

Si tout s'est bien passé, vous devriez voir apparaître la fenêtre de connexion. Entrez les informations que vous venez de soumettre et validez. Vous tomberez alors sur la page d'accueil de l'administration :

localhost apache

Bienvenue ! 😀

Si vous avez des soucis d'installation, réessayez de faire un

    sudo chown -R www-data:www-data /var/www

Et retentez l'installation, en supprimant le fichier data/config.json si besoin.

62fa6aaad5e0a.png

299Ko, c'est parti

15/08/2022 | 0 commentaire | Non classé

Nous y voilà, le site est en ligne, hébergé grâce à TuxFamily, j'espère pouvoir le remplir dans les mois/années à venir 🤞 Dans cet article, je vous parle de moi, de ce projet, de ce site.

Qui suis-je ?

J'écris ces quelques lignes depuis mon canapé, à coté de mes gamins qui se battent ^^ Prénommé Maxence depuis environ 35 ans, j'habite dans l'Est de la France, près de la Suisse. Je ne suis pas du tout informaticien, c'est un hobby auquel je tiens depuis mon premier vrai PC, un IBM 64Mo de RAM avec un forfait AOL, le tout en 56K of course. Ouais, ça remonte. Si je parle de moi, c'est parce que je tiens aussi à écrire sur moi, le développement, mes choix, ... Bien entendu, le sujet principal reste le projet que je vais vous présenter : 299Ko

299Ko

Il y a quelques années, j'avais besoin d'un blog perso. Bien entendu, je connais WordPress et consorts, mais je voulais un truc léger, facile à déplacer, à maintenir, à faire évoluer selon MES besoins. Je suis alors tombé sur 99ko, un CMS français, très facile à prendre en main, et à faire évoluer. J'ai donc fait évoluer par exemple le module Antispam avec l'aide de son créateur, Jonathan Coulet, j'y ai participé un peu puis le temps a fait que j'avais une vie réelle bien chargée, aussi j'ai lâché complètement l'informatique pour me consacrer au déménagement, changement de région, aux travaux de la maison, et à ma vie de famille.

Puis il y a quelques mois, je sortais le PC du placard, et avais envie de me monter un petit site perso avec peu d'exigences : Un blog, des pages, une galerie. Je me suis naturellement tourné à nouveau vers 99ko, mais le site n'a plus d'actualité, le forum a été choucrouté, et pas la moindre modification du code depuis 1 an. Pas de problème, j'installe ça sur mon serveur et je pourrais modifier ça à ma guise plus tard. Malheureusement, l'install neuve ne passe pas sur mon serveur Linux, problème de droits sur les fichiers. J'ai donc commencé à fixer les erreurs que je rencontrais, j'en ai profité pour régler les issues GitHub du projet, et j'ai proposé les modifs via une Pull Request.

Quelques semaines plus tard, j'écrivais un mail à Jonathan, pour lui demander des nouvelles. J'ai eu une réponse rapidement, malheureusement il a complètement lâché le CMS. J'ai donc continué mes bidouilles de mon coté, et au final, je me dis que ce n'est pas grand chose de plus que de faire profiter les modifications à tous. J'ai donc forké le projet, et tout poussé dessus. Aujourd'hui, j'ai changé le nom du dépôt pour 299Ko, car le code n'est pas entièrement compatible entre l'un et l'autre.

Par exemple, j'écris cet article avec un plugin qui permet de composer en MarkDown, ce qui selon moi est bien plus rapide que les éditeurs WYSIWYG à la TinyMCE. Mais pour pouvoir incorporer un tel module, le code du coeur a dû légèrement être modifié. Aussi, ce plugin n'est plus compatible avec 99Ko. Evidemment, tout le code est toujours sous licence GPL v3, c'est à dire qu'il est libre, modifiable, utilisable etc gratuitement. J'ai volontairement changé les entêtes de fichiers en gardant les différents auteurs bien sûr.

Pour le moment, tout le contenu d'un site créé avec 99Ko est compatible avec 299Ko. Il suffit d'en prendre les données, de créer une installation neuve de 299Ko de de placer les données dans ce nouveau site, et pas de problème 😀

Quel but ?

Je souhaite que 299Ko garde le même état d'esprit que Jonathan s'était fixé avec 99Ko : L'anti usine à gaz. Cela veut dire que l'objectif premier reste de fournir un CMS très léger, rapide et très facile à appréhender, mais aussi à modifier. Pour le moment, après quelques mois de travail et une version bientôt prête à sortir, les modifications qui ont eu lieu n'ont été faites que pour mes besoins, pour mon blog perso. Bien sûr, et c'est la raison première du partage de 299Ko, c'est que tout cela est profitable à tous, par exemple :

  • Les erreurs de l'installation sur un serveur Linux ont été réparées (c'était la priorité logique ^^)

  • On peut à présent mettre des icônes partout, merci

  • La galerie accepte à présent les images png, jpg, jpeg et gif, et ne limite plus aux simples jpg

  • La librairie FancyApps est intégrée partout. Il n'a jamais été aussi facile d'intégrer un caroussel sur votre page d'accueil 😀

  • ...

    Mais si d'aventure ce CMS intéresse quelqu'un, les évolutions iraient dans le sens des besoins communs.

Et maintenant ?

A présent, le CMS est complètement utilisable. Je suis encore dessus pour fignoler 2 - 3 trucs, notamment sur le design, régler des erreurs d'affichage, mais rien de plus, j'estime avoir testé pas mal le truc pour pouvoir dire que le code fonctionne.

Le gros point à traiter est le reste. Il faut que j'essaye de sortir un autre thème (au moins), mettre en avant les 2 plugins déjà écrits pour le CMS (déjà dispo). Tout cela ajouté à un peu de com' sur les réseaux sociaux, je n'en suis pas fan mais c'est le seul vrai moyen de promouvoir quelque chose, et surtout écrire la documentation qui est inexistante. Encore du taf, pas forcément le plus intéressant, mais bon ^^

Pour une prochaine version, j'essayerai de modifier surtout le HTML généré, afin d'être plus à jour niveau HTML5 (utilisation des balises article au lieu des ul li par exemple, et voir pour les balises meta s'il y a des choses à améliorer. Pour le reste, ça viendra au fur et à mesure. J'aimerai supprimer la dépendance à jQuery et normalize, à voir comment cela peut être fait.

Enjoy 😊