Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Développement/déploiement de la shoutbox v5 basée sur IRC
Lephenixnoir Hors ligne Administrateur Points: 24625 Défis: 170 Message

Développement/déploiement de la shoutbox v5 basée sur IRC

Posté le 17/06/2023 19:39

La shoutbox actuelle (v4) a bien besoin d'être remplacée. Je me suis penché récemment sur la question et à la vitesse où ça va la prochaine shoutbox (v5) basée sur le serveur IRC sera sans doute bientôt disponible en ligne pour le test. Ce topic sert pour les updates et recueillir votre avis.

Pourquoi remplacer la shoutbox ?

Techniquement la shoutbox v4 est assez monstrueuse. Tous les messages sont dans la base de données de Planète Casio et chaque lecture/envoi de message est une requête HTTP. Comme il n'y a aucun mécanisme pour que le serveur notifie les utilisateurs en cas de nouveau message, chaque shoutbox demande au serveur s'il y a des nouveautés toutes les quelques secondes.

Ça fait bien sûr un énorme trafic réseau. À partir de 20 onglets ouverts on peut se faire bannir temporairement par les mesures anti-DDOS de l'hébergeur (devinez comment je le sais...). Ça a aussi causé la panne récente du site à cause d'un dépassement de ressources. Avant que je ne réduise les paramètres, la shoutbox faisait environ 99% des requêtes HTTP reçues par le site...

Sur le VPS qu'on loue pour la v5, on héberge un certain nombre de services dont Gitea, Mumble, et.... un serveur IRC. IRC est une vraie technologie de chat et donc déjà ça commence beaucoup mieux.

Principe de la shoutbox v5

La shoutbox v5 est essentiellement un client IRC, ie. un logiciel de chat sur une page web. Il communique avec le serveur IRC par le biais d'un websocket et peut donc se faire notifier des nouveaux messages.

Pour l'instant il faut s'authentifier manuellement avec les identifiants v5 mais on a un plan pour pouvoir se connecter "à travers" le site web de Planète Casio.

Je suis aussi en train d'explorer les options Javascript pour que la connection au serveur IRC soit partagée par toutes les shoutbox ouvertes sur une machine donnée et ne soit pas recréée tout le temps.

Enfin, on a un plan futur pour permettre la suppression de messages de la shoutbox pour pouvoir supprimer les notifications de topic/commentaires spam, qui sont très fréquents en ce moment.

État actuel du développement

Pour l'instant c'est moi qui m'occupe du code. Le code est disponible sur le dépôt devs/v5shoutbox. Voilà à quoi ça ressemble :


Fonctionnalités implémentées:
  • Connection via websocket et authentification SASL
  • Chargement automatique des canaux #annonces, #projets et #hs avec l'historique
  • Une seule shoutbox permet d'interagir avec tous les canaux
  • Notifications dans le titre de la page (du type "(1) Shoutbox Planète Casio")

Fonctionnalités existantes sur la v4 qui manquent encore :
  • Formatage des pseudos selon les groupes, et des dates par rapport à l'instant présent
  • Le style ; Eragon est dessus (y'a zéro CSS pour l'instant)
  • Formatage des messages (ce sera du Markdown-like) et reconnaissance automatique des liens

Fonctionnalités spécifiques à la shoutbox v5 qui vont être ajoutées dans le futur :
  • Partage de la shoutbox entre toutes les pages Planète Casio ouvertes
  • Utilisation du site web comme proxy pour ne pas avoir à se connecter
  • Suppression de messages pour éviter le spam

J'en oublie peut-être, je tiendrai la liste à jour.

Fichier joint


Mb88 Hors ligne Rédacteur Points: 1213 Défis: 3 Message

Citer : Posté le 17/06/2023 20:22 | #


Moi je trouve que la possibilité de citer serait très utile ainsi que de modifier un message précédent et de faire un message sur plusieurs lignes.
Lephenixnoir Hors ligne Administrateur Points: 24625 Défis: 170 Message

Citer : Posté le 17/06/2023 20:42 | #


Hmm, je peux pas répondre de façon définitive mais je ça ne semble pas être la direction qu'on veut prendre. Les messages longs et les conversations compliquées qui se référencent les unes les autres c'est plutôt le genre de trucs qui va sur le forum. Éditer un message c'est pas possible sur le protocole IRC, et se citer à part un formatage on peut pas faire grand-chose non plus je crois.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Breizh_craft Hors ligne Modérateur Points: 1171 Défis: 7 Message

Citer : Posté le 17/06/2023 20:56 | #


Modifier un message n’est pas possible, et n’est pas forcément souhaitable (et puis pourquoi faire, tout ce qui est sur IRC est éphémère).

Les citations c’est faisable côté client, mais est-ce vraiment utile ? En général citer la personne à qui tu réponds suffit, sauf à déterrer des conversations qui auront probablement disparu avant (si on compte bien garder un historique, il ne sera certainement pas infini ni immense, si on veut qu’un échange reste dans le temps, le forum est plus adapté). À noter, en cas d’échanges intensifs sur plusieurs sujets, IRC permet la création de canaux à la demande et l’envoi de messages privés (là aussi, ça reste éphémère, attention : si tout le monde se déconnecte, le canal disparaît (sauf les trois principaux, je pense), et les MPs ne sont utilisables que si les deux personnes sont en ligne. Là encore, pour du long terme, il faut utiliser le forum).

Les messages de plusieurs lignes, je vois pas l’intérêt, tu peux faire plusieurs messages de une ligne. Les deux méthodes spamment tout autant. Si tu dois copier/coller un pavé, il faut utiliser un pastebin, si tu rédiges un pavé, le forum est probablement plus pertinent, là encore.

Bref, à voir si on veut ou pas faciliter les citations, mais le reste ça me semble peu pertinent.
Breizh.pm – Un adminsys qui aime les galettes.
Eragon Hors ligne Gardien des bots Points: 483 Défis: 0 Message

Citer : Posté le 18/06/2023 08:50 | #


Y'a un peu plus que les trois principaux canaux qui restent, j'ai enregistré #creativecalc #general et # test de mémoire.

Pour le style Lephe il faudra faire attention a bien supporter les styles d'irc (gras, italique, etc) et a faire la conversion du markdown avant l'envoi du message.
Mb88 Hors ligne Rédacteur Points: 1213 Défis: 3 Message
Eragon Hors ligne Gardien des bots Points: 483 Défis: 0 Message

Citer : Posté le 18/06/2023 10:34 | #


Les émojis unicode comme 🍿 sont parfaitement supporté par IRC.
En revanche les smileys de la v4 il faudra jouer un peu pour les supporter dans la shoutbox, ils seront probablement juste envoyé comme :E ou :lol: dans l'IRC et formaté a l'affichage dans la shoutbox. On peu pas faire mieux je pense.
Lephenixnoir Hors ligne Administrateur Points: 24625 Défis: 170 Message

Citer : Posté le 18/06/2023 11:05 | #


Eragon a écrit :
En revanche les smileys de la v4 il faudra jouer un peu pour les supporter dans la shoutbox, ils seront probablement juste envoyé comme :E ou :lol: dans l'IRC et formaté a l'affichage dans la shoutbox. On peu pas faire mieux je pense.

C'est effectivement ce que j'imagine faire.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lephenixnoir Hors ligne Administrateur Points: 24625 Défis: 170 Message

Citer : Posté le 04/07/2023 23:20 | #


Ça se voit pas encore mais j'ai commencé à travailler sur un système (avec un service worker) pour pouvoir partager une seule connexion au serveur IRC entre toutes les pages Planète Casio ouvertes.

C'est encore sur les débuts mais ça devrait faire une grosse différence sur les perfs à terme, et ça aussi faire de la shoutbox un outil plus complet, customizable, etc ce que j'apprécie toujours.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lephenixnoir Hors ligne Administrateur Points: 24625 Défis: 170 Message

Citer : Posté le 12/07/2023 01:54 | #


Update après la session de dev de ce soir : je comprends bien les service workers maintenant. Je suis confiant d'avoir réussi à gérer l'installation du worker et là il me reste surtout à décider quelle partie du code je mets dans le worker et quelle partie je garde dans chaque onglet individuel avant de continuer avec le code.

Initialement je pensais mettre le client IRC dans le service worker. La difficulté c'est que le script principal sur le site et le service worker sont pas mis à jour exactement en même temps donc c'est mieux si l'interface entre les deux est la plus petite et la plus stable possible. Le client IRC a une interface simple pour l'instant mais que j'imagine très bien changer dans le futur quand on rajoutera des fonctionnalités.

Du coup je me demande si je peux pas mettre uniquement le websocket dans le service worker et garder la logique IRC dans chaque onglet. Je crois que c'est viable, mais il est 2 heures du matin donc je suis incapable de juger correctement. On en reparle la prochaine fois.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lephenixnoir Hors ligne Administrateur Points: 24625 Défis: 170 Message

Citer : Posté le 18/07/2023 23:08 | #


Allez, encore une update. En fin de compte il est nécessaire de garder le client IRC complet dans le worker. C'est parce que si plusieurs clients envoient des messages indépendamment au serveur ça va forcément péter à un moment, il faut quelqu'un pour coordonner.

Donc ce soir j'ai presque fini de découpler le client IRC et la shoutbox et ne gardant entre les deux qu'une interface de passage de messages, le mécanisme utilisé pour permettre à un onglet de communiquer avec son service worker. (Le client IRC est pas encore dans le service worker, ça vient.)

Grosse bonne idée par contre, j'ai discuté avec Darks des options pour l'authentification. On avait précédemment imaginé des systèmes compliqués pour pouvoir se connecter à l'IRC sans redemander tout le temps le mot de passe. En réfléchissant on est tombés sur un bien meilleur design : Anope peut authentifier non seulement par LDAP mais aussi par une requête SQL à une base de données (module m_sql_authentication). Cette base de données est un excellent moyen de communiquer entre le site web et le serveur IRC. En clair, l'idée est la suivante :

1. Quand on se connecte au site web le site web dépose un cookie de session IRC avec la même expiration que le cookie de session normal.
2. Le serveur stocke en même temps le cookie de session IRC dans la base de données commune avec Anope.
3. La shoutbox stocke ce cookie dans le cache du navigateur et s'authentifie avec.
4. Anope accepte la connexion en consultant la base de données commune.
→ Et donc authentification automatique sans stockage du mot de passe.

C'est sans doute à peaufiner mais je suis optimiste pour le coup !
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Mb88 Hors ligne Rédacteur Points: 1213 Défis: 3 Message

Citer : Posté le 18/07/2023 23:27 | #


Les CSS avec le fallback fonctionnent, mais vous m'avez toujours pas dit ce que vous voulez comme boutons pour naviguer entre les canaux.

EDIT :

D'ailleurs, comment on peut tester la nouvelle version ?
Lephenixnoir Hors ligne Administrateur Points: 24625 Défis: 170 Message

Citer : Posté le 08/08/2023 21:24 | # | Fichier joint


En discutant avec Breizh et Eragon au sujet du formatage (gras/liens/etc), j'ai découvert qu'il existe un système de formatage de messages pour IRC. Pas universellement supporté, mais décemment. Du coup au lieu de hacker comme des bourrins j'ai modifié la v4 et le bridge IRC pour que les messages de la shout transmettent leur formatage sur IRC. Voilà le résultat :


Comme vous pouvez le voir, les formatages classiques (gras, italique, souligné, etc, code) sont supportés, les couleurs non (c'est possible mais un peu le bordel donc plus tard). Mon client HexChat n'affiche pas le code, mais c'est « sa faute ». D'autres clients peuvent ne pas afficher tous les formats non plus.

Du coup je vais aller programmer la shoutbox v5 pour qu'elle les affiche aussi.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lephenixnoir Hors ligne Administrateur Points: 24625 Défis: 170 Message

Citer : Posté le 08/08/2023 21:53 | # | Fichier joint


Finalement ajouté les couleurs basiques aussi, histoire que les notifications de GLaDOS soient mieux. Les couleurs supportées (par le protocole IRC basique / ANSI) sont les suivantes :

  • [red], [blue], [green], [yellow], [maroon], [purple], [gray], [brown]
  • [color=white], [color=black], [color=magenta], [color=orange], [color=lightgreen], [color=cyan], [color=lightcyan], [color=lightblue], [color=pink], [color=lightgray]


Et du coup les notifications de GLaDOS se voient enfin bien !


Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lephenixnoir Hors ligne Administrateur Points: 24625 Défis: 170 Message

Citer : Posté le 21/08/2023 01:30 | # | Fichier joint


Update : ça marche sur la shoutbox v5


Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lephenixnoir Hors ligne Administrateur Points: 24625 Défis: 170 Message

Citer : Posté le 29/08/2023 23:02 | #


Update de la semaine : j'ai déplacé le client IRC dans le service worker (ç'a pas été trivial donc il reste un gros hack et des détails à peaufiner). C'est un assez gros changement qui sera au coeur du partage de shoutbox entre plusieurs onglets et du maintien de la connexion pendant la navigation. Du coup le dev est un peu lent mais ça va être un beau résultat à la fin
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Lephenixnoir Hors ligne Administrateur Points: 24625 Défis: 170 Message

Citer : Posté le 02/11/2023 23:11 | # | Fichier joint


Alright, la shoutbox est déployée pour test sur la page d'accueil de la v5 : https://v5.planet-casio.com/ ainsi que sur la page dédiée : https://v5.planet-casio.com/chat

Notez qu'il faut probablement charger la page deux fois la première fois parce que l'installation d'un service worker c'est un truc "bizarre".


J'ai l'impression qu'il y a des choses qui se passent pas comme en local, donc ne vous étonnez pas si c'est pas fluide encore. Par contre je veux bien être mis au courant de tous les trucs pas normaux que vous croisez.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 35 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd