Le palais des milles et une rubriques (ben sinon ce serait pas 'multi-thème')    —  Pierceb

Discussions

Lexpage (enfin) sur GitHub !

Tchou 3555 Bob
Reprise automatique du message précédent.
5-10 secondes en mode 100Gb/s au cul de la fibre par beau temps sur une fenêtre de 1500px de large, ou 5-10 secondes sur une connexion anémique en limite basse de 2G, sur un écran de petit smartphone où tu ne regardes que le haut de l'écran car tu n'iras de toute façon pas filer 3-4 pichenettes pour aller au minichat ? Non seulement la page s'est chargée bien plus lentement, mais en plus voir cette information minichat prend vachement plus de temps.

Il y a trop de scénarios possibles pour que cette feature fasse l'objet d'une définition objective logique.

Une visite "classique" de la lexpage pour moi, c'est ctrl-l, 'le' <entrée>, ça s'affiche en 1 sec (le js commence à se lancer au bout de cette période environ), j'ai besoin de moins d'un seconde pour voir si visuellement il y a du rouge sur le forum, éventuellement je regarde le minichat, et je suis déjà sur un ctrl-l pour changer de site (le ctrl-l me bouffant une seconde environ). Ma visite "typique" doit durer 3 secondes, sur un smartphone effectivement je dois approcher les 10 car c'est bien plus long de voir l'info avec.
Guybrush 8343 Bob
Une mise à jour du Lexpage a été déployée. Pour la partie visible, il s'agit essentiellement d'une refonte des archives du minichat pour avoir un rendu plus proche du "vrai" minichat. A noter que si vous recevez une notification impliquant un message du minichat, et que vous cliquez dessus, le message sera mis en évidence sur la page des archives.

Le système n'est pas encore parfait (notamment au niveau des flags de lecture), mais c'est mieux que rien.

Le changement moins visible, c'est la suppression des websockets. Roidelapluie m'en veut certainement d'avoir fait machine arrière par rapport aux WS, mais j'ai trop de "mal" à gérer tout ça et à m'assurer que ça ne sera pas un problème de maintenance le jour où RDLP ne met plus les mains de le cambouis du Lexpage (des histoires impliquant Selenium aussi ^^).

L'alternative est plus proche de l'ancien système que des WS : il s'agit d'un pooling à intervalle régulier, à la fois pour les notifications et le minichat. Le délai est assez court : 10 secondes environ, mais un système de cache à base d'ETag est en place, ce qui (1) évite de recharger trop souvent le minichat si rien n'a été changé (il y a un cache basé sur Redis qui s'adapte dès qu'un message/notification est modifiée pour un utilisateur, et l'ETag est généré sur base de cette valeur, invalidée au bout de 60 secondes max) et (2) évite de regénérer de l'HTML à la volée si le contenu n'a pas changé (ce qui devrait limiter l'usage de la batterie de vos mobiles !).

A coté de ça, de petits changements :
- Le code JS du minichat et des notifications est complètement revu, plus simple à maintenir et à organiser (pour les amateurs, ils iront voir sur Github).
- Les notifications en rapport avec le minichat ont leur texte qui s'adaptent au cas où le message concerné est modifié par l'utilisateur (ce qui ne peut être fait que pendant les 5 premières minutes).

Important : le système de cache actuel pour le minichat et les notifications ne fonctionnent pas. Ne vous étonnez donc pas d'avoir un pooling retournant du 200 au lieu de 304 en permanence. Visiblement, Nginx retire l'entête ETag dès qu'il active la compression de la page. Je travaille dessus, mais il va me falloir probablement gérer ça au niveau de Django car Nginx ne semble pas pouvoir être configuré pour arrêter de se mêler de ce qui ne le regarde pas ;-)
Tchou 3555 Bob
Mon smartphone a une notification, mon desktop ne l'a pas. Et je ne peux pas l'ouvrir sur le smartphone, clicker doigter sur l'icône ouvre le menu et c'est tout. J'ignore si le bug est là en permanence, j'ouvre jamais une notif sur portable. (et recharger 20 fois ne change rien, et ctrl+shift+r, c'est plus dur sans clavier).

C'est un coup de pas de bol lié à la transition, ou le bug est autre ?

Je pense que c'est un pm non lu, je l'ai ouvert, je l'ai lu (donc absence de notif sur la partie desktop lors qu'un mail était non lu), je retourne sur le smartphone, toujours une notif' alors que cette fois-ci je n'ai plus de mail non lu.
Guybrush 8343 Bob
TchouMon smartphone a une notification, mon desktop ne l'a pas.
Ca ne devrait pas arriver, surtout vu que le cache ne fonctionne pas pour l'instant.
Peux-tu forcer le refresh coté desktop, afin de voir si la notification n'apparait toujours pas ?
TchouEt je ne peux pas l'ouvrir sur le smartphone, clicker doigter sur l'icône ouvre le menu et c'est tout.
J'ai modifié le mécanisme d'affichage des notifications, je vais vérifier et voir si j'ai le même souci. Je ne l'ai pas testé sur smartphone à vrai dire avant de le mettre en prod.
TchouJe pense que c'est un pm non lu, je l'ai ouvert, je l'ai lu (donc absence de notif sur la partie desktop lors qu'un mail était non lu), je retourne sur le smartphone, toujours une notif' alors que cette fois-ci je n'ai plus de mail non lu.
C'est normal ça : la notification ne disparait pas quand on lit le mail non-lu, la seule façon de la faire disparaitre est de cliquer sur le titre dans la notification. Il est prévu (peut-être ^^) que cela se fasse automatiquement dans le futur, mais je ne suis pas encore convaincu que ça soit une bonne chose (notamment parce que le comportement ne serait pas uniforme alors entre toutes les notifications).

J'ai fini d'implémenter le cache au niveau de Django pour contourner Nginx. Je lance la batterie de tests, je vérifie ce que ça donne sur appareils mobiles, et puis je le passe en prod.
Guybrush 8343 Bob
Le nouveau système de cache est prêt et passe les tests. Par contre, y a un vieux bug idiot dans Firefox que j'aimerai contourner. En gros, quand on renvoie un 304 ("non-modifié"), Firefox essaie de parser le contenu de la réponse (typiquement, vide !) avec le parseur correspondant au content-type de la requête (vu que la réponse ne définit aucun contenu, donc aucun content-type). Or, par défaut, XMLHttpRequest, bah c'est du XML, et donc il fait une erreur "Aucun élément trouvé" sur le data de 0 octet. Ouais, il est con Firefox par moment :-D

Donc je dois contourner la génération automatique des 304 pour injecter un contenu inutile et forcer le content-type à text/html. Normalement, c'est bon (au moins en local). Je lance les tests, puis je m'attaque au bug signalé par Tchou sur les mobiles, je confirme que ça ne marche plus.
Guybrush 8343 Bob
Bug du bouton sur appareil mobile identifié. Essentiellement, le souci vient du fait que l'ensemble (bouton + contenu) est maintenant généré et injecté via JS (nunjucks), et donc l'élément dropdown de Bootstrap ne fait pas partie du dom au moment où bootstrap s'initialise.

Je lance les tests, et je mets en prod.
Guybrush 8343 Bob
Voilà, c'est déployé. n'hésitez pas à remonter les problèmes rencontrés !

Si vous avez genre 50 000 notifications qui s'affichent (et que ça freeze le navigateur au passage), pensez à actualiser la page/vider le cache, le JS a changé et votre navigateur doit encore en prendre connaissance.
PetitCalgon 2660 Bob
Vous ne voulez pas mettre l'année et la date en format complet (= 6 juin 2015) sur les archives des brèves.
Exemple:
www.lexpage.net/posts/ta…

(Et puis tant qu'on y est, retirer l'heure qui ne sert vraiment à rien)
Parce que :
- Samedi 22/11
- Vendredi 30/01
- Jeudi 19/03
- Mercredi 20/05
- Samedi 06/06
- Lundi 29/06
- Mardi 01/12
- Samedi 06/02
J'avoue avoir un peu de mal à savoir quoi est vieux, quoi est neuf
Guybrush 8343 Bob
Oui, je vais faire ça dès que j'ai du temps, c'est une bonne idée.
C'est hérité de l'ancien affichage des billets, il faudrait que je retire ça ;-)
Guybrush 8343 Bob
Tchou va être content, depuis le temps qu'il le demande, le markup du forum supporte maintenant correctement les URL copiées-collées (sans interférer avec les balises existantes).

Il accepte et effectue la conversion automatiquement pour les liens entourés d'un espace (ou d'un début/fin de ligne), de parenthèses ou de crochets (en gardant ces derniers). Tout autre caractères "autour" de l'url empêchera la conversion.

- simple : www.lexpage.net/
- entre parenthèses : (www.lexpage.net/)
- entre crochets : [www.lexpage.net]

A noter que [url=x]y[/url] et [url]y[/url] sont plus restrictifs (la preuve : vous pouvez les lire sans souci, car "y" n'est pas une url). Les URL doivent débuter par http:// ou https:// et faire un minimum de 3 caractères (arbitraire). Le support pour le reste est droppé (liens locaux, ftp, file, ...).

Répondre

Vous devez être inscrit et identifié.