Quelques extensions pour Firefox #4

Cet article est marqué comme contenant des informations dépassées depuis le 21/10/2018.
Ces extensions n'existent plus (et pour certaines depuis longtemps). JSONView peut être remplacée par JSON Lite.

JSONView

Bon, c'est encore un truc purement pour développeurs mais c'est bien pratique quand on utilise JSON comme mode de communication client/serveur sur une application web (plus compact et moins lourd à utiliser qu'XML) : elle permet de faire afficher le JSON directement dans Firefox de façon un peu lisible plutôt que de forcer l'ouverture dans un logiciel externe où on se retrouve avec tout sur une unique ligne peu lisible ^^

Browser View Plus et Open With

Ces deux extensions sont des alternatives "groupées" à toutes les extensions IE View, Opera View, Safari View, etc. Ces extensions permette d'ouvrir un lien ou la page courante dans un autre navigateur. C'est pratique si jamais la page s'affiche mal ou bien, pour un développeur web, tester une page rapidement sur différents navigateurs.

L'avantage ici est de n'avoir qu'une seule extension installée au lieu de quatre ou cinq et de gérer également les navigateurs plus confidentiels. Actuellement, j'utilise la première chez moi et la seconde au boulot, n'ayant pas encore tranché entre les deux qui se valent un peu a priori...

OptimizeGoogle

Il s'agit d'un fork de l'excellent CustomizeGoogle qui ne semble malheureusement plus maintenu depuis quelques temps (et notamment pas compatible avec Firefox 3.6)... Cette extension permet d'arranger quelques trucs dans l'interface de Google, notamment :

  • réduire un peu le nombre d'infos que Google récolte sur vous lors des recherches.
  • virer les pubs
  • transformer les liens dans Google Images en liens directs vers les images plutôt que vers une page intermédiaire.
  • ajouter un compteur à côté de chaque résultat pour connaître sa position (quand on s'intéresse au référencement d'un site, ça peut être sympa).
  • et bien d'autres mais qui personnellement ne m'intéressent pas trop...

Toutes des modifications sont activables/désactivables dans les préférences de l'extension.


Quelques trucs sur PHP #3

Auto-complétion du code avec PDT

PDT est un IDE pour PHP basé sur Eclipse relativement performant. Notamment il permet l'auto-complétion de code, ce qu'on n'a que rarement avec des éditeurs plus légers.

Sous certaines conditions (notamment avec le plugin SVN), l'auto-complétion n'est pas activée par défaut. Il y a peut-être moyen de le régler dans le labyrinthe qui sert de système d'options à Eclipse mais sinon, un moyen simple reste d'ajouter la ligne suivante dans la section natures du fichier .project du projet :

<nature>org.eclipse.php.core.PHPNature</nature>

Flux RSS et format de date

Pour formater une date en vue de générer un flux RSS, il y a plusieurs méthodes :

  1. chercher le détail du format sur le net et l'appliquer... c'est possible mais risque d'erreur.
  2. utiliser le format ‘r’ qui renvoie le bon format.
  3. utiliser la constante DateTime::RFC822... sauf que là le flux ne sera pas forcément valide et qu'il y aura potentiellement des problèmes avec certains agrégateurs.

Préférez donc la seconde solution, celle-là en principe elle marche (et en bonus c'est la plus compacte, que demander de plus ?).

Méthodes privées en PHP 5.1.6

Le principe d'une méthode privée c'est d'être interne à la classe et aucunement visible ou surchargeable depuis une classe qui l'étend (contrairement à une méthode protégée). Cependant dans certaines versions de PHP, dont la 5.1.6 (je ne sais pas quand exactement il a été corrigé mais il n'est plus présent dans les dernières 5.2.x), permet de surcharger les méthodes privées d'une classe... Ça peut arriver involontairement et ne prête pas à conséquence, sauf quand par la suite vous tentez d'exécuter votre script sur une version corrigée de PHP et là c'est pas évident de comprendre pourquoi tout d'un coup on ne passe plus dans la surcharge !

L'angoisse de la page blanche #2

J'évoquais ici le fait qu'on risquait une page blanche sans autre forme de procès en déclarant deux fois une même méthode dans une même classe et en voici un autre : déclarer comme abstraite une méthode d'une interface.

C'est peut être une déformation due au fait qu'on me l'a présenté comme ça lors de mes premiers cours de programmation objet Java mais pour moi une interface c'est pousser à l'extrême le concept de la classe abstraite : toutes les méthodes sont abstraites (et on n'a pas de champs). En Java, il me semble bien me souvenir que dans le cas d'une interface, le mot-clé abstract sur une méthode est facultatif (vu que de toutes façons toutes les méthodes d'une interface le sont). Eh bien en PHP il n'est pas facultatif mais interdit. Sinon, page blanche (du moins sous certaines versions/configurations) et bon courage pour retrouver l'erreur \o/


Modules à venir pour RBS Change

J'entame progressivement la migration de mes forums vers RBS Change, ce qui implique le développement d'un bon nombre de fonctionnalités qui ne sont pas présentes dans les modules standards. Voici une petite liste de ce que j'ai déjà commencé :

Logos aléatoires

Il s'agit simplement de reproduire l'affichage aléatoire des logos comme c'est le cas sur EDForum. La version actuelle du module se borne à ce fonctionnel strict : toutes les n minutes, on change de logos en choisissant aléatoirement parmi les logos définis en backoffice, chaque logo ayant un poids donné.

C'est clairement pas le plus utile des modules mais c'est une fonctionnalité simple et il fallait bien commencer quelque part...

Évolutions à venir

À terme, j'ajouterai sans doute une galerie des logos en cours et passés.

Micro-news

Là aussi on reproduit à l'identique une fonctionnalité d'EDForum : il s'agit simplement de mettre en avant des liens d'actualités. Chaque "micro-news" contient un libellé et un lien (soit un document du site, soit une URL externe).

Le module dispose également d'une fonction d'importation de flux RSS externes et les blocs d'affichage s'accompagnent de la génération de flux RSS.

Messagerie privée

Là on entre dans le vif du sujet : après deux modules mineurs, on arrive à une fonctionnalité importante dans tout site communautaire (donc notamment un forum).

J'ai choisi de ne pas reprendre le modèle standard de messagerie privée calquée sur les mails qu'on peut trouver dans la plupart des gestionnaires de forums pour reprendre le principe utilisé sur les forums MesDiscussions.Net (Hardware.fr, JudgeHype ou encore Doctissimo) qui présente les messages plutôt comme des conversations, sous la même forme que les sujets des forums (quand on y pense c'est nettement plus pratique et logique).

Ce module-là est encore loin d'être fini mais il permettra entre autres :

  • un nombre de participants potentiellement supérieur à 2 (nombre maximum réglable par configuration).
  • invitation de nouveaux participants en cours de route.
  • indexation des messages.
  • possibilité de modifier un message tant que personne ne l'a lu.
  • d'une manière ou d'une autre (rien n'est encore vraiment arrêté dans la façon de faire), possibilité de marquer des messages/discussions : "à traiter", "réponse attendue", "contient des informations importantes"...

Pour plus d'informations sur le développement de ce module ou discuter de ses fonctionnalités, rendez-vous sur le sujet dédié sur EDForum.

La page dédiée et le repository SVN seront créés quand j'approcherai suffisamment d'une version utilisable.

Et ensuite ?

Ensuite je passerai sans doute à la gestion des smileys, l'ajout des bbcodes non-gérés en standard par Change... Ou autre chose selon ce qui m'inspirera le plus sur le moment :p

Quand à mon module de gestion de bibliothèque que j'évoquais lors de la sortie de Change, il a pas mal avancé mais je le laisse un peu de côté pour le moment puisque je ne le mettrai pas en ligne avant d'avoir migré les forums...

EDIT 16h41 :
Finalement j'ai fini ce qui manquait dans le module Micro-news, j'ai donc ajouté la page dédiée et initialisé le repository SVN avec la première version du code.


Correction pour l'inspecteur DOM de Firefox

Cet article est marqué comme contenant des informations dépassées depuis le 21/10/2018.
Cette extension n'existent plus, remplacée par les outils de développement natifs de Firefox.

Firefox propose sous forme d'une extension (en général incluse par défaut) un inspecteur DOM. Cet outils bien pratique permet de parcourir le DOM d'une page, de voir tous les attributs de chaque nœud, les styles appliqués, le code javascript associé, bref un paquet de choses qu'on est bien content de pouvoir consulter dans certains cas.

Pour une bonne partie de ces informations, des extensions comme les bien connues Web Developer ou Firebug offrent des interfaces plus agréables mais d'une ne permettent pas d'aller aussi loin et de deux ne permettent pas d'inspecter du DOM XUL... Or dans RBS Change, le backoffice est en XUL et quand on veut faire des choses assez avancées ou débuguer, on n'y coupe pas.

Le problème c'est que dans sa version actuelle, l'inspecteur DOM est foireux en version française : certaines clés de localisation manquent, ce qui bloque carrément le fonctionnement de certaines parties de l'interface...

J'espère que la correction sera incluse dans la prochaine version mais ça fait déjà plusieurs mois que ça dure et ça commence à bien faire... Voici donc une version corrigée du fichier inspector.jar contenant lesdites clés de localisation (les fichiers modifiés dans l'archive sont locale/fr/accessibleProps.dtd et locale/fr/styleRules.dtd).

Je me suis concentré sur le fait de rajouter les clés manquantes, la traduction n'est pas forcément top, voire dans le cas où je ne voyais pas comment traduire, j'ai carrément gardé le texte anglais... L'essentiel étant d'éviter le gros message en rouge qui dit qu'il manque une entité et bloque l'interface :)

Installation : ce fichier zip contient le fichier inspector.jar qui remplace le fichier suivant (sous Windows du moins, sur un autre système il faudra chercher un peu) :

C:\Documents and Settings\<votre-profil>\Application Data\Mozilla\Firefox\Profiles\1473dcd0.default\extensions\inspector@mozilla.org\chrome\inspector.jar

Une fois le fichier remplacé, relancez Firefox et le problème est réglé \o/

P.S. : puisqu'on parle de l'inspecteur DOM, j'en profite pour évoquer Stacked inspector une micro-extension bien pratique qui ne fait qu'ajouter un bouton permettant de switcher l'interface de l'inspecteur en mode vertical ou horizontal. Ça n'a l'air de rien mais dans certains cas c'est vachement plus agréable !


iPhone : gaffe aux mises à jour d'applications

De temps en temps je mets à jour mes applications... En général je ne prends pas le temps de vérifier application par application ce qui est mis à jour, me contentant de cliquer sur "télécharger les mises à jour gratuites" dans iTunes.

Ben je pense que je vais changer de méthode et stopper toute mise à jour non-justifiée par un gros ajout !

Pourquoi ? Parce que ce matin, je télécharge donc toutes les mises à jour, puis je synchronise mon iPhone. Et là, surprise : il termine la synchro par une alerte "l'application My Shop'list n'a pas pu être installée car elle n'est pas compatible avec votre iPhone". Sauf qu'a priori il n'y a aucune raison que ce soit le cas : sur iTunes, aucune mention d'une restriction... La dernière version mentionne juste "compatible avec l'iPod Touch", mais ça ne devrait pas exclure l'iPhone, donc a priori aucune raison (visible en tous cas... j'imagine que ça doit venir de la dernière version mineure de l'OS que j'ai imprudemment installée moins de 3 mois après sa sortie).

À la base ça ne poserait pas plus de problème que ça si c'était pour une nouvelle installation : tant pis, ça marche pas, c'est pas grave, l'application est gratuite, j'ai rien perdu. Le hic c'est que là c'est une mise à jour ! Donc en gros le mécanisme super sécure implémenté par Apple c'est :

  1. je mets à jour
  2. je teste la compatibilité
  3. j'efface si c'est pas compatible

Y a comme un truc qui va pas dans la procédure ! Si l'appli est installée c'est que la version installée EST compatible. Donc avec deux sous de jugeote on teste la compatibilité de la mise à jour AVANT de l'installer et si ce n'est pas compatible, on LAISSE l'ancienne version !

C'est quand même assez impressionnant qu'une boite comme Apple commette des bourdes pareilles... Ils devraient prendre des cours chez Mozilla : ça fait bien longtemps que Firefox teste la compatibilité des extensions avant d'installer plutôt qu'après !

Bon, j'imagine que la prochaine version de l'application règlera le problème et que je récupèrerai mon appli... mais entre temps est-ce que l'iPhone conserve mes listes de courses que j'ai saisies dans l'appli et qu'en aucune manière Apple ne me permet de synchroniser (parce qu'évidemment, la synchro de données c'est réservé aux applis Apple... pourtant un synchro entre mon iPhone et mon iPod Touch je trouverais pas ça particulièrement déconnant) ou sauvegarder de quelque manière que ce soit ? Là est la question...

Bref encore un truc foireux à mettre sur le compte de la gestion des applications sur l'iPhone (qui est déjà loin d'être parfaite, comme je le disais il y a quelques temps) :blase:

Je crois bien que dans deux ans, quand se posera la question du renouvellement (et donc du changement de téléphone), je regarderai plus attentivement ce qui se fait ailleurs... Parce que ce système du tout fermé avec des mécanismes complètement foireux laissés au bon vouloir d'Apple, ça commence à me gonfler. Parce que je ne sais pas ce qui se fait sur les autres téléphones mais sur un ordinateur je peux sauvegarder mes données quand j'en ai envie ! Je ne suis pas tributaire des fonctions que propose l'éditeur de l'OS. J'imagine que sur les téléphones disposant d'un OS plus ouvert on doit pouvoir le faire...

EDIT à 18h52 :
En fait je suis passé trop vite aux conclusions : ce n'était que dans l'affichage d'iTunes qu'il me l'avait enlevé. Sur l'iPhone elle était toujours là. Ce n'est que lors de la synchro suivante qu'il l'a supprimée vu qu'il l'avait virée de la liste dans l'interface d'iTunes... Donc si un cas comme ça se présente, on a jusqu'à la synchro suivante pour récupérer ses données :)

Par contre, détail amusant : dans l'interface d'iTunes il l'a retirée et remplacée par une autre (placée en fin de page), vu que j'ai plus d'applis que de pages pour les ranger. Puis après syncro je me retrouve sur l'iPhone avec une autre appli à la place et pas à la fin de la page mais là où mon appli était placée... Ça sent le truc pas du tout réfléchi et qui marche par chance :eyes:

Ensuite j'ai poussé le test en remettant l'application dans l'interface puis en relançant encore une synchro : surprise ! Cette fois elle s'installe sans problème... Donc effectivement il n'y avait aucun problème de compatibilité. Par contre, comme je le soupçonnais, j'ai perdu toutes les données enregistrées dans l'application... Heureusement que ce n'était que des listes de courses et rien de plus important...

Bref c'est pas au point leur truc...