[spip-dev] Librairies des plugins

J'ouvre un autre thread sur ce sujet: on a un mécanisme de librairires (lib) dans SPIP, mais c'est peu documenté et, surtout, pas concerté (à ma connaissance). Or, de ma faible expérience des plugins, je tombe régulièrement sur des morceaux de code dans les squelettes qui devraient être logiquement dans des libraires partagées.

Cependant, ça n'a rien d'évident:
- il faut un minimum de concertation,
- il faudrait une structure dédiée sur la Zone, avec des compactages de zip faciles à partager,
- problèmes de versions, éventuellement, à surveiller et gérer.

Je vois notamment deux types de codes qui reviennent régulièrement:
- des extensions jquery; par exemple le sélecteur de couleur, que nous sommes plusieurs à utiliser,
- des bouts de PHP; par exemple phpMailer, que nous sommes également plusieurs à utiliser.

Ca serait vraiment intéressant, maintenant qu'on bascule en 2.0, que les développeurs (de plugins) commencent à travailler sur ces librairies, ce qui devrait éviter notamment les incompatibilités entre plugins. Comme on a tous plus ou moins commencé les travaux d'adaptation de nos plugins pour qu'ils tournent en 2.0, ça me semble la bonne période.

Deux chantiers pour faciliter ça:
=> documenter (même rapidement) le principe des librairies;
=> répertorier collectivement ces éléments que l'on utilise chacun de son côté, histoire de pouvoir se mettre d'accord sur les «libs» que l'on pourrait mettre en place;
=> mettre en place (après concertation) un espace /lib dans la Zone (avec éventuellement /lib/php et /lib/javascript). (Si ça existe déjà, désolé.)

ARNO*

Juste une remarque : il ne faut pas confondre plugin et API de Spip.
Spip fournit tout un tas de mecanismes permettant d'etendre ou de modifier son fonctionnement, mais pas forcement via des plugins.
Documenter la construction d'un plugins avec les "bonnes pratiques", c'est clair que ca aiderait pas mal de monde à démarrer, mais amha, il ne faut pas melanger ca avec la documentation des APIs (fonctions _dist surchargeables, pipelines, globals de parametrage...) qui ne sont pas forcement utilisées dans le cadre d'un plugin (avec /squelettes, mes_fonctions et mes_options, on peut faire la meme chose)

mes 2 sous.
@++

Est-ce que ces librairies ne pourraient tout simplement pas être packagées sous forme de plugins, les autres plugins les utilisants les mettant alors dans leurs dépendances ?

On pourrait ainsi ajouter une catégorie de plugins ne faisant rien tout seuls, que l'on nommerait « librairies ».

Comme ça, pas de multiplication des méthodes de mise en oeuvre.

-Nicolas

On pourrait ainsi ajouter une catégorie de plugins ne faisant rien tout
seuls, que l'on nommerait « librairies ».

+1

-- Fil

Et dans ce cas le plugin palette est un bon exemple de "plugin
librairie" car il met à disposition des webmestres la librairie
farbastic pour les sélecteurs de couleur.

b_b

Fil a écrit :

On pourrait ainsi ajouter une catégorie de plugins ne faisant rien tout
seuls, que l'on nommerait « librairies ».

+1

C'est intéressant comme point de vue.

Le problème avec le téléchargement automatique des librairies, <necessite id="lib:..." > actuel dans spip, c'est qu'il est dépendant de plusieurs choses :
- url de l'archive (format zip uniquement), qui change avec le temps ou les versions
- nom du dossier de l'archive dezippe

Car pour retrouver une librairie telechargee, on l'appelle avec
_DIR_RACINE.'lib/nom_du_dossier/chose...'

On, le nom du dossier varie très souvent avec la version de la librairie (plus frequent encore que l'adresse de l'archive), ce qui fait qu'un plugin qui utilise une lib de la sorte a un fort risque de ne pas fonctionner correctement s'il est installé quelques mois après son écriture.

La solution que vous proposez semble bien plus perenne (et permettrait en plus des surcharges de certains fichiers de ces librairies en utilisant les fonctions de SPIP)

Il serait bien de faire générer ces zips dans un sous dossier de files.spip.org pour les distinguer, si l'on part vers cette solution.

Par contre, on va vite être confronté aux mêmes problèmes qui a incité à créer le téléchargement auto de lib :
- copie des fichiers des librairies sur la zone
- comment gérer la mise à jour de ces plugins, en restant compatible avec les plugins qui l'utilisent ...

Oui mais alors pourquoi on a ce système de /lib? Système qui a des avantages sur les plugins (install automatique notamment), me semble-t-il. Autant virer ce mécanisme si on décide qu'il est préférable d'utiliser des «plugins muets», non?

Perso, je ne les ai pas encore utilisés, mais j'aime bien ce principe de libs, j'aime bien aussi l'idée que ça ne ressemble pas à une bidouille. :-))

A*

Oui mais alors pourquoi on a ce système de /lib? Système qui a des avantages sur les plugins (install automatique notamment), me semble-t-il. Autant virer ce mécanisme si on décide qu'il est préférable d'utiliser des «plugins muets», non?

Oui, c'était sous entendu dans ma proposition.

Les plugins aussi peuvent être téléchargés automatiquement, donc les librairies ont-elles encore un avantage ?

Perso, je ne les ai pas encore utilisés, mais j'aime bien ce principe de libs, j'aime bien aussi l'idée que ça ne ressemble pas à une bidouille. :-))

Qui a parlé de bidouille ? Au contraire, ce serait une rationalisation de deux choses déjà très similaires mais faites différemment.

-Nicolas

Que se passe t il des lib qui ne sont pas des plugins ?

L'avantage de lib/ c'est pouvoir charger une lib externe non SPIP qui
ne sera jamais formatée comme un plugin.

Exemple : la lib js utilisée par le plugin qui formate les equations Latex
(on en avait parlé à un apéro SPIP Lyon) et qui se compose d'un énorme
fichier Javascript.

-----Message d'origine-----

Samy RABIH a écrit :

Exemple : la lib js utilisée par le plugin qui formate les equations Latex
(on en avait parlé à un apéro SPIP Lyon) et qui se compose d'un énorme
fichier Javascript.

-----Message d'origine-----
De : spip-dev-bounces@rezo.net [mailto:spip-dev-bounces@rezo.net] De la part
de cam.lafit@azerttyu.net
Envoyé : mardi 18 novembre 2008 22:05
À : Nicolas Hoizey
Cc : Spip-dev SPIP
Objet : Re: [spip-dev] Librairies des plugins

Que se passe t il des lib qui ne sont pas des plugins ?

L'avantage de lib/ c'est pouvoir charger une lib externe non SPIP qui
ne sera jamais formatée comme un plugin.
_______________________________________________
liste: http://listes.rezo.net/mailman/listinfo/spip-dev
doc: http://www.spip.net/
dev: http://trac.rezo.net/trac/spip/
irc://irc.freenode.net/spip

Ce ne serait pas une mauvaise idée de faire des lib des plugins muets. Cependant, je vois déjà plusieurs problèmes, à moins que vous y avez déjà pensé et trouvé des solutions.
Premier problème : Imaginons qu’un plugin A utilise une lib (qui sera un plugin) de version 1.0 et un plugin B qui utilise la même lib mais la version 1.x qui comme par hasard casse le plugin A puisqu’il se peut que des fonctions ait été modifiées voir supprimées ou que le core de la lib soit totalement chamboulé entre les 2 versions. D'ou ma question, en supposant que qu'on installe sur le même SPIP les plugins A er B par l'install automatique, quelle version du plugin lib sera installé ? Cela veut dire également que les plugins devront être constamment à jour par rapport à la dernière version de la lib qu'ils utilisent. Ce qui n'est pas une mauvaise chose en soi :).

Deuxième problème potentielle, c'est la possible incompatibilité entre lib différentes soit parce qu'ils utilisent des noms de fonctions identiques, soit ont les même noms de fichiers à des emplacements identiques. Par exemple, si je veux faire include_spip('inc/toto') (qui je rappel inclue le premier fichier trouvé) ou toto.php existe aussi bien dans le répertoire inc de deux lib qui serait installé sur le spip. Le problème est identique si une lib entre en conflit avec un autre vrai plugin qui ne l’utiliserait même pas. (Un vrai cercle vicieux quoi :D)

Dernier problème, qui est le plus compliqué je pense. Je suis d'accord avec toi Martin qu’il faut référencer les libs communément utilisées, qui sont les plus connues, potentiellement les plus pérennes, les plus stables et performantes et qui ne pausent pas de problème de compatibilité. Cependant cela ne vas pas empêcher aux développeurs de plugin d'utiliser des lib exotiques, pour x raisons. Est ce que cette liste de lib que tu proposes de réaliser sera restreinte à des lib identifiés et jugés ok ou tout le monde pourra ajouter sa lib la jugeant meilleurs à d'autres sur un aspect au un autre. Ce qui pourrait être vrai.

En fait le seul gros problème c'est la comptabilité. Il y a de plus en plus de plugins qui sont développé et cette croissance est proportionnelle au risque d'incompatibilité. Si on fait des lib des plugins, ça risque de devenir un cauchemar. Enfin même des lib dans un répertoire /lib poserait ce problème. Enfin bon, Dans des lib en plugin, je pense que ça serait une solution plus viable, si tous les développeurs de plugins prennent toutes les précautions nécessaires. Ce qui ne sera pas évident.

Cordialement,

GUIOUBLY William

Hello,

Les inconvénients de transformer les libs en «plugins qui ne font rien»... (à mon avis).

1. Dans ma perception de la chose, un plugin doit faire quelque chose. Facile à dire, évidemment, puisque dans plugins.spip, il y a une rubrique «outils pour développeurs» qui regroupe quelques plugins qui, justement, ne font pas grand chose par eux-mêmes... (boucles XML, CSS imbriqués, champs extra...). Cela dit, par rapport à des lib, ils ont comme particularité d'être auto-suffisants, il n'est pas nécessaire d'installer un autre plugin pour les faire fonctionner.

Pour certaines de fonctionnalités de SPIP, les évolutions historiques amènent à des difficultés de compréhensions, parce qu'un même outil sert à faire plusieurs choses. Du coup, on a cette fonctionnalité de lib, et cette autre fonctionnalité de plugins, qui fonctionnent différemment avec des logiques différentes. Avec ces deux fonctionnalités clairement identifiées, on a moyen de travailler les méthodes différentes et les ergonomies adaptées. Si on utilise l'un pour l'autre, il ne sera plus possible par la suite de vouloir améliorer ces méthodes de manière clairement différenciées.

Perso, je considère que:
- les libs comme un outil purement technique à usage des développeurs; fonctionnement transparent («caché»);
- les plugins avant tout comme un outil pour les utilisateurs développeurs de sites; fonctionnement que l'on prend en main soit-même, descriptifs avant activation, sites et référencements clairs orientés pour les utilisateurs.

D'où l'intérêt principal de ne pas détourner les plugins (orientés usagers) pour en faire des libs (orientées technique, cachées).

2. Puisqu'on s'égorge sur le STRICT ou le TRANSITIONAL, il n'est pas illégitime de trouver que l'utilisation des /lib sont aussi un signal envoyé quant à la «qualité» du système de développement de SPIP. Ces trucs partagés clairement identifiés comme tels, en tant que briques informatiques connues (des librairies, ça veut bien dire ce que ça veut dire), ça donne bonne mine.

Genre: «oh, dans SPIP, ils ont un mécanisme de librairies, comme ça le code est bien rangé, c'est clair, moi j'ai lu un livre sur le C++, j'ai rien compris mais je peux vous dire que les librairies c'est vachement bien». Le genre de commentaire qui montre bien à quel point, désormais, SPIP est un vrai outil bien gaulé développé par des velus.

3. Y'a ce mécanisme de /libs. J'y suis pour rien, mais je trouve ça chouettos. D'où l'argument number trois: si on a introduit là maintenant un truc qu'on décide là maintenant de ne pas utiliser, il vaudrait mieux le supprimer là maintenant. Sinon on va se traîner un poids mort à maintenir.

4. Y'a ce mécanisme des /libs (bis). Donc: une partie des développeurs de plugins vont les utiliser, une partie ne va pas les utiliser et faire éventuellement des «plugins qui font rien». Et on va avoir d'autant plus de difficultés à tenter de coordonner ces développements dont, la plupart des mails de ce thread le souligne, demandent à être coordonnées (suivis des versions, éviter les incompatibilités, etc.).

Or, ça me semble plus facile si on sépare clairement libs et plugins, toujours parce que les premiers sont pour développeurs, les seconds sont bourrés de considérations totalement différentes (orientées utilisation). Si on discute d'une librairies, la discussion se borne à la technique (choix des versions, des points d'entrée, du nom des fonctions); si c'est un plugin, les espaces où ça va se dérouler vont forcément partir sur plein d'autres considérations qui n'ont pas grand chose à voir avec le simple besoin de mutualiser des morceaux de code.

Hello,

Les inconvénients de transformer les libs en «plugins qui ne font rien»...
(à mon avis).

...
. Cela dit, par rapport à des lib, ils ont comme particularité

d'être auto-suffisants, il n'est pas nécessaire d'installer un autre plugin
pour les faire fonctionner.

heu pas d'accord il y a déjà des plugins interdépendants (et la mise
en place de nécessite s'est d'ailleurs révélé nécessaire)

A+