[spip-dev] Explication documents distants?

Salut,

Fil, est-ce que tu pourrais expliquer le but pratique des documents distants? Parce qu'en l'état, c'est assez incompréhensible, et ça rend la gestion des documents totalement incohérente.

-> D'abord, je vois que ça ne recopie le document sur le site. C'est un simple lien vers une page externe.
      * Si le site distant sucre le document, on se retrouve avec de l'erreur 404 dans le site.
      * Si le site distant remplace le document, on se retrouve carrément avec n'importe quoi sur son propre site. Sur un site collaboratif ouvert aux contributions, ça ressemble à une trou de sécurité niveau contenus: quelqu'un insère un «document» dans un article proposé, on valide le truc, et ensuite l'auteur change son document chez lui. Les admins sont plantés avec un contenu affiché sur leur site qu'ils n'ont pas réellement validé.

-> La gestion de documents à l'extérieur ajoute, de plus, le problème des traitements internes de SPIP qui deviennent inopérants.
      * Si on veut développer les indexations de documents, alors il faut à chaque fois prévoir qu'on travaille sur des fichiers externes.
      * Côté portfolio, c'est la catastrophe absolue: impossible de «retailler» un fichier externe.

=> Donc, je voudrais que tu précises le but exact des documents externes.
      * Soit c'est pour référencer des documents de l'extérieur du site. Auquel cas ça pose de nombreux problèmes, c'est plus dans la logique des feeds RSS que des documents joints. Et il faut penser une ergonomie adaptée, parce que tout appel vers l'extérieur signifie contrôle des modifications, suivi des mises à jour, etc.; et c'est l'usine à gaz assurée.
      * Soit c'est une interface pour simplement installer des documents sur son propre site. Je crois que Gallery fait ce genre de choses. Dans ce cas, c'est sympa, mais alors il faut sans doute simplifier (pas besoin du petit symbole d'attachement externe).

A*

Fil, est-ce que tu pourrais expliquer le but pratique des documents
distants?

En pratique, je fais un portail (disons, par exemple, rezo.net) qui
référence un tas de saloperies sur Internet ; des articles, des PDF, des
mp3, des jeux vidéos complets, des films (le mariage de Tonton Nono en vidéo
fullscreen, la dernière release des 4 DVD de la Debian, etc.). Pour l'heure
je ne peux pas mettre ces documents sous forme de "documents" SPIP ; avec
les documents distants, je peux.

La difficulté, comme tu le soulignes, c'est que pour certains de ces
documents il est utile d'avoir une copie locale, tandis que pour d'autres il
vaut mieux éviter, citons par exemple :
- fichiers exécutables ou changeant à chaque hit
- fichiers de taille monstrueuse, que tu stockes chez free^H^H^Hailleurs
- documents non http [pas implémenté encore], du style bittorrent
- fichiers partagés entre plusieurs sites

Pour ce qui est des RSS que tu syndiques et qui contiennent des docs joints,
ton site peut être basé dessus (là tu vas vouloir ou non faire une copie
locale), ou pas (là, pas de copie locale).

Tu peux toi-même ajouter des docs joints "distants" dont certains appellent
une copie locale, d'autres non.

Donc, par défaut, il n'y a pas de copie locale obligatoire -- cependant
(hint) en fait il y en a déjà une de faite pour les vignettes, et c'est
précisément ça qu'il faut encore étendre (voir ci-dessous).

Parce qu'en l'état, c'est assez incompréhensible, et ça rend
la gestion des documents totalement incohérente.

Si tu n'as pas compris, tu ne peux pas prétendre que c'est incohérent :slight_smile:

-> D'abord, je vois que ça ne recopie le document sur le site.

Exact

C'est un simple lien vers une page externe.

Presque exact.

      * Si le site distant sucre le document, on se retrouve avec de
l'erreur 404 dans le site.
      * Si le site distant remplace le document, on se retrouve
carrément avec n'importe quoi sur son propre site. Sur un site
collaboratif ouvert aux contributions, ça ressemble à une trou de
sécurité niveau contenus: quelqu'un insère un «document» dans un
article proposé, on valide le truc, et ensuite l'auteur change son
document chez lui. Les admins sont plantés avec un contenu affiché sur
leur site qu'ils n'ont pas réellement validé.

Là c'est du pur troll ! Sinon on interdirait les liens hypertextes (mêmes
causes, mêmes conséquences), les sites référencés, etc. Le fait que
quelqu'un puisse indiquer <img src=http://monsite/xxxx.jpg&gt; dans la page est
du même niveau de "trou de sécurité contenu" que les documents distants
(c'est-à-dire pas un trou).

Non, ce qui manque à SPIP, c'est un outil de gestion des liens morts ; c'est
dans la TODO depuis 3 ans, un jour quelqu'un va s'en occuper :wink: Mais en
l'occurrence ma proposition ne change rien de ce point de vue, ni mieux, ni
pire.

-> La gestion de documents à l'extérieur ajoute, de plus, le problème
des traitements internes de SPIP qui deviennent inopérants.

Ah, voilà qui devient intéressant.

      * Si on veut développer les indexations de documents, alors il
faut à chaque fois prévoir qu'on travaille sur des fichiers externes.
      * Côté portfolio, c'est la catastrophe absolue: impossible de
«retailler» un fichier externe.

Catastophe "absolue", disons que tu exagères un *tantinet*. D'une part, dans
mon message explicatif je dis que cette partie-là n'est pas encore figée ;
d'autre part, le système actuel récupère déjà une copie locale des fichiers
dans certaines conditions (images pas trop délirantes), pour faire une
vignette.

=> Donc, je voudrais que tu précises le but exact des documents
externes.
      * Soit c'est pour référencer des documents de l'extérieur du site.
Auquel cas ça pose de nombreux problèmes, c'est plus dans la logique
des feeds RSS que des documents joints. Et il faut penser une ergonomie
adaptée, parce que tout appel vers l'extérieur signifie contrôle des
modifications, suivi des mises à jour, etc.; et c'est l'usine à gaz
assurée.
      * Soit c'est une interface pour simplement installer des documents
sur son propre site. Je crois que Gallery fait ce genre de choses. Dans
ce cas, c'est sympa, mais alors il faut sans doute simplifier (pas
besoin du petit symbole d'attachement externe).

Pourquoi "soit/soit" ? Car en fait il s'agit des deux.

Tu as mis le doigt sur le point qu'il me restait à travailler ; j'ai pas
encore fini, mais ça vient : le dernier étage, donc, de ce système, c'est un
filtre |copie_locale -- qu'on pourra/devra installer en standard dans tes
fonctions malicieuses (reduire_image, indexer_document, etc). Ce filtre fera
ce qu'on imagine, à savoir

        function copie_locale($url) {
                1. calculer adresse locale du fichier
                2. si le fichier n'existe pas, aller le chercher et le
                    sauvegarder
                3. en cas d'erreur, renvoyer ''
                4. sinon renvoyer l'url locale
        }

A ce compte-là, tu peux imaginer référencer les derniers DVD de ta
collection de films familiaux par une #URL_DOCUMENT (distante, donc, pour
les films "distants" dont tu ne veux pas dans IMG/) ; les images que tu as
téléchargé façon "gallery" par un [(#URL_DOCUMENT|copie_locale)], et
certains fichiers, pourquoi pas, par un truc composé du style :
  <a href=#URL_DOCUMENT>document</a> [- <a href=(#URL_DOCUMENT|copie_locale)>copie locale</a>]

Mais d'autres possibilités sont encore imaginables, notamment s'il s'agit de
transformer les documents distants, de les dater, de vérifier leur URL
toutes les semaines, etc. Toutes choses que tu perds si tu restes dans le
modèle "je copie localement et j'oublie l'URL de départ".

Il manquera encore, c'est sûr, quelques petites bidouilles, notamment dans
l'interface :
- pouvoir modifier l'URL distante
- pouvoir vider/mettre à jour la copie locale
- savoir, dans le portfolio, si les docs ont ou non une copie locale
  fonctionnelle (le trombone pourrait alors changer de couleur de fond ou de
  commentaire)

Une partie de ces fonctions ne sont pas spécifiques aux documents distants
(remplacer un document, par exemple) mais relèvent (comme je l'ai écrit, je
crois dans mon mail de présentation) plutôt d'une "galerie" des documents,
toujours dans la TODO.

En ce qui concerne le filtre copie_locale(), il n'est pas si trivial que ça
à implanter, à cause du charset distant, du nom qu'on veut donner au fichier
local, etc. Et il faut essayer de voir quels sont les usages possibles, y
compris ceux que je n'ai pas envisagés ; c'est aussi pour ça que j'attendais
des réactions de la liste (mais la tienne est la première).

-- Fil

... Et il faut essayer de voir quels sont les usages possibles, y
compris ceux que je n'ai pas envisagés ; c'est aussi pour ça que j'attendais
des réactions de la liste (mais la tienne est la première).

euh!! bah puisque c'est demandé je me lance au risque de dire une grosse betise : si des nouveaux mécanismes de gestion utiles sont mis en oeuvre pour les documents distants, peut etre pourrait-on imaginer que les documents locaux ne soit qu'une application particulière du mécanisme de "documents distants") . Avantage par exemple = permettre (option) aux rédacteurs de charger leurs documents via un (ou des ?) ftp spécifiques différents du répertoire upload actuel, lequel est en accès conjoint avec les fichiers de code, ce qui est pour le moins problématique si l'on veut déléguer l'usage du chargement par ftp des documents (vraiment utile pourtant, dommage)

@+ et merci aux devs de nous faire profiter aussi de leurs débats
Nicolas RIQUOIS
http://www.pucroller.com

permettre (option) aux rédacteurs de charger leurs documents via un (ou
des ?) ftp spécifiques différents du répertoire upload actuel

En fait ça serait une application directe du truc, je pense, sans code
ni graisses additionnels.

, lequel est en accès conjoint avec les fichiers de code, ce qui est pour
le moins problématique si l'on veut déléguer l'usage du chargement par ftp
des documents (vraiment utile pourtant, dommage)

Je crois que tu peux déjà redéfinir _DIR_UPLOAD de manière à corriger ça ;
mais c'est vrai que l'option "distante" résoud le problème de manière plus
générique, puisque les docs distants peuvent se trouver vraiment ailleurs.

-- Fil

(et des zips) ... et actuellement ca retombe sur les bras du webmaster
qui peut difficilement déléguer les bases ftp principaux, c'est donc
sous utilisé ... le chargement " 1 par 1" de nombreuses images ou doc
dans un article est un des trucs vécu comme le plus long/pénible par
mes rédacteurs/administrateurs restreints (nous utilisons beaucoup de
photos)

Normalement les rédacteurs peuvent déjà uploader (par http) des zip
comportant plusieurs images, et demander à SPIP de les "éclater". Il faut
juste que le zip fasse moins de x Mo, histoire que le serveur les accepte.

Ce que fait Gallery, c'est accepter l'URL d'un répertoire, dont il
télécharge ensuite tous les fichiers... si tu veux programmer ça comme
extension de ce qui existe, n'hésite pas :)) Mais ça me paraît être trop de
boulot, et trop chi*** à faire, pour obtenir une interface au final pas très
souple ni intuitive...

Tant qu'à faire il serait probablement plus rentable (rapport résultat/temps
passé) d'adopter/adapter le truc en java de gallery qui permet d'uploader
des gigas de docs directement depuis son ordi. Là, pas besoin d'un serveur
ftp transitoire, et une interface vraiment efficace (et pour cause). Je ne
sais pas comment c'est fait, mais c'est du GPL.

-- Fil

Là, je crois qu'on va directement dans le mur: on fabrique des «documents», sur la seule base du mode d'alimentation du système («machin distant»).

- Tout d'abord, les «documents» sont déjà très très très encombrés, et je me bats avec depuis plusieurs versions pour essayer d'avoir des squelettes qui les gèrent de manière un peu propre. Et on voit bien que le fait que les documents gèrent les images, les images en doc joint, les documents «multimédia» insérables (animations flash) et les documents joints classiques (PDF), ça rend la tâche particulièrement ardue. Avec en plus le besoin de gérer les documents qui sont inclus dans les articles et ceux qui ne le sont pas, on a déjà un usine à gaz de ce côté.

- Or, là, on ajoute des objets nouveaux, avec un critère de plus, et des comportements évoluants. Avec des utilisations assez différentes: des listes de liens HTML, des documents joints, des images, etc. Vraiment on va se planter maison. Mais alors, maison de chez maison. Il devient _impossible_ de faire des boucles propres, de proposer une interface de gestion cohérente (et, non, la grande «galerie» n'est pas une solution: je ne vois pas que gérer des «articles distants» en tant qu'élément «document» dans une galerie ait un sens quelconque).

- Quand on attaquera la version 2.0, ce sera justement pour faciliter ce genre de multiplication des objets, mais avec des interfaces cohérentes et, surtout, évidentes pour les utilisateurs.
      * Si on veut des listes de liens associés à un article (et, oui, ça peut vraiment être très utile), alors on pourra se fabriquer un tel objet. Et on pourra alors fournir une interface de gestion qui rendra l'utilisation évidente pour les rédacteurs. Là, se gérer une liste de liens avec des «documents», ça ne fonctionne pas. (D'autant qu'on ne peut pas prévoir si, quand on associe un document HTML à un article, c'est pour une liste de liens, ou pour fournir un exemple de code source à ses visiteurs.)
      * Si on veut faire du podcasting, alors les feed RSS peuvent servir à cela, avec des automatismes et des interfaces clairement identifiés.

- Pour l'heure, la seule fonctionnalité clairement identifiée avec les «documents distants», c'est une méthode d'upload alternative: comme Galery: j'indique une adresse, et ça me rapatrie ce dont j'ai besoin. Cela fait, la façon dont on a ramené le document devient indifférente. Ca, c'est assez simple à comprendre au niveau de l'interface.

- Que l'on réfléchisse au moyen de ramener des trucs ainsi, oui c'est pratique. Mais en balancer des documents joints, on va se planter le fonctionnement du truc illico. Par exemple: actuellement, si j'indique une page Web, le truc m'ajoute une page HTML en document joint; que cette page soit rapatriée ou non en local est assez indifférent ici: le problème, c'est qu'il n'y a pas de raison que cette page soit:
      * un exemple de HTML intéressant que je veux fournir à mes visiteurs,
      * un lien à suivre pour faire une liste de liens associés à l'article,
      * une page de gallerie dont j'aimerais tout bêtement récupérer tous les liens pour insérer les images dans mon propre article,
      * un texte qui devrait, tout simplement, intégrer ma propre base comme étant un article.

ARNO*

Là, je crois qu'on va directement dans le mur

Oui, bien sûr...

: on fabrique des «documents», sur la seule base du mode d'alimentation du
système («machin distant»).

Ah oui au passage j'ai nettoyé pas mal de code aussi. Et l'impact de ce que
j'ai fait, sur l'existant, est extrêmement limité. C'est à un ou deux
endroits qu'il faut vérifier si le doc est ou non distant.

- Tout d'abord, les «documents» sont déjà très très très encombrés,

C'est les vignettes qui les encombrent, pour le reste c'est le truc pas
clair "vignette/document/inclus/etc", mais ça c'est comme ça depuis
longtemps, et mon but n'était pas de nettoyer ce problème (ce qu'il faudra
faire à terme).

et je me bats avec depuis plusieurs versions pour essayer d'avoir des
squelettes qui les gèrent de manière un peu propre. Et on voit bien que le
fait que les documents gèrent les images, les images en doc joint, les
documents «multimédia» insérables (animations flash) et les documents
joints classiques (PDF), ça rend la tâche particulièrement ardue.

Problème antérieur

Avec en plus le besoin de gérer les documents qui sont inclus dans les
articles et ceux qui ne le sont pas, on a déjà un usine à gaz de ce côté.

Problème antérieur

- Or, là, on ajoute des objets nouveaux, avec un critère de plus, et
des comportements évoluants. Avec des utilisations assez différentes:
des listes de liens HTML, des documents joints, des images, etc.

"des listes de liens html", là c'est toi qui inventes pour charger la barque
-- je viens justement de répondre à Nicolas que ça me paraissait too much.
Donc ce sont des documents normaux, avec une URL, et éventuellement -- via
file_exists et une fonction copie_locale() -- une version locale.

Vraiment on va se planter maison. Mais alors, maison de chez maison.

Voilà une phrase très convaincante ! Je dirais même un argument en béton !
Là où tu galères, tu mets juste "AND NOT (distant='oui')" et ça passera.

Il devient _impossible_ de faire des boucles propres

{distant!=oui}

, de proposer une interface de gestion cohérente

Mais si, avec un peu de bonne volonté. Au pire on passe les docs et images
distantes dans un autre bloc, après "portffolio" et "documents". Je pense
pour ma part que le trombone suffit, mais c'est toi le spécialiste de
l'interface

(et, non, la grande «galerie» n'est pas une solution: je ne vois pas que
gérer des «articles distants» en tant qu'élément «document» dans une
galerie ait un sens quelconque).

Je disais ça comme ça ; la chose est qu'on ne peut toujours pas
"modifier/remplacer" un document.

- Quand on attaquera la version 2.0, ce sera justement pour faciliter
ce genre de multiplication des objets, mais avec des interfaces
cohérentes et, surtout, évidentes pour les utilisateurs.
     * Si on veut des listes de liens associés à un article (et, oui,
ça peut vraiment être très utile), alors on pourra se fabriquer un tel
objet. Et on pourra alors fournir une interface de gestion qui rendra
l'utilisation évidente pour les rédacteurs. Là, se gérer une liste de
liens avec des «documents», ça ne fonctionne pas. (D'autant qu'on ne
peut pas prévoir si, quand on associe un document HTML à un article,
c'est pour une liste de liens, ou pour fournir un exemple de code
source à ses visiteurs.)
     * Si on veut faire du podcasting, alors les feed RSS peuvent
servir à cela, avec des automatismes et des interfaces clairement
identifiés.

Tu n'as pas compris l'intérêt du truc, je vois. Mais tes craintes ne sont
pas fondées. Cela étant, si la version 2 est capable de faire mieux je
m'engage solennellement à écrire le script qui fera la migration des
documents distants actuels vers le super-système de la mort de la version 2.

- Pour l'heure, la seule fonctionnalité clairement identifiée avec les
«documents distants», c'est une méthode d'upload alternative: comme
Galery: j'indique une adresse, et ça me rapatrie ce dont j'ai besoin.
Cela fait, la façon dont on a ramené le document devient indifférente.
Ca, c'est assez simple à comprendre au niveau de l'interface.

Non, ça c'est marginal. L'intérêt principal c'est de référencer des énormes
docs que tu mets à disposition sur un autre serveur.

[HTML] problème, c'est qu'il n'y a pas de raison que cette page soit:
     * un exemple de HTML intéressant que je veux fournir à mes
visiteurs,
     * un lien à suivre pour faire une liste de liens associés à
l'article,
     * une page de gallerie dont j'aimerais tout bêtement récupérer
tous les liens pour insérer les images dans mon propre article,
     * un texte qui devrait, tout simplement, intégrer ma propre base
comme étant un article.

Oui, ça ne peut pas se déduire automatiquement ; c'est d'ailleurs pour ça
qu'il faut des outils différents (hint : le bouton mémo fait le dernier
point).

-- Fil

Salut,

Je ne reviens pas sur l'ensemble des explications de Fil, auxquelles j'abonde. Je vous propose en complément des retours de mes usages concrets des documents distants, ca aidera peut-etre à y voir plus clair.

D'abord un cas simple d'utilisation des documents distants.

Sur un site musical, on chronique dans des articles des morceaux de musique proposés par ailleurs sur l'internet : on attache les documents audios distants à l'article. Pour que ce soit plus sympa, on propose aussi un petit player qui permet d'écouter une liste de l'ensemble des documents distants attachés aux articles de la rubrique, et de retrouver l'article d'origine pour avoir plus de détails sur ce que l'on écoute.

http://www.blogotheque.net/mp3/

Maintenant des cas plus complexes, avec la syndication et le podcasting :

Fil a écrit :

Pour ce qui est des RSS que tu syndiques et qui contiennent des docs joints,
ton site peut être basé dessus

Tout à fait :slight_smile:

Un exemple d'application est le portail de podcasts. Sur le web, il y a un tas de sites (de plus en plus) qui proposent des émissions radio sous forme de fichier audio, ou bien des chroniques (écrites) de morceaux de musique.

Conceptuellement il s'agit souvent d'un article avec un /plusieurs documents joints distribués en RSS2.

Il peut aussi s'agir de playlistes audios entières, au format XSPF

On peut en tand que webmaster récuperer ces articles syndiqués pour faire des playlistes audios, avec un lien vers l'article d'origine : un portail audio quoi. J'adore cette idée :

1) On ecoute des sons triés deux fois : une fois par le webmestre du site émetteur, une autre par le portail -> des playlistes de qualité !

2) Pour chaque musique, ou émission, on peut acceder à plus d'information en remontant à l'article d'origine.

Voir mon site de test de tout cela : http://leradiophone.net/

(là tu vas vouloir ou non faire une copie locale), ou pas (là, pas de copie locale).

Dans le cadre du podcasting la copie locale permettrait aussi une application à la marge, une bonne pratique : lorsqu'on référence des liens audios, faire une copie locale et prévenir le site d'origine qu'il peut indiquer dans ses RSS une adresse alternative (chez nous) pour le fichier audio, permettrait de se répartir la charge de bande passante entre sites, et garantir la disponibilité du fichier partagé. En ce moment avec le podcasting, plus le fichier est interressant, moins on a de chance de l'écouter car la bande passante du site d'origine n'est pas illimitée (*).

ce qui manque à SPIP, c'est un outil de gestion des liens morts

Oui c'est vrai que ca éviterait les problèmes justement soulevés par ARNO*, à savoir les documents distants qui n'existent plus ; ca arrive structurellement tout le temps avec le podcasting : souvent au bout d'un mois ou deux les documents audios sont effacés de l'espace d'hebergement pour laisser de la place pour stocker les nouveaux fichiers.

  le dernier étage, donc, de ce système, c'est un

filtre |copie_locale -- qu'on pourra/devra installer en standard dans tes
fonctions malicieuses (reduire_image, indexer_document, etc).

C'est là que je verrais bien, à terme, pour les documents récupérés par syndication, l'envoi d'un signal sur le site d'origine pour qu'il puisse signaler la source alternative pour le document dans son RSS (on partage au lieu d'utiliser systématiquement un document qui n'est pas chez nous).

Il manquera encore, c'est sûr, quelques petites bidouilles, notamment dans
l'interface :
- pouvoir modifier l'URL distante
- pouvoir vider/mettre à jour la copie locale
- savoir, dans le portfolio, si les docs ont ou non une copie locale
  fonctionnelle (le trombone pourrait alors changer de couleur de fond ou de
  commentaire)

Oui, et pouvoir lorsqu'on valide un article syndiqué, faire le tri parmis les documents attachés.

BoOz

(*) Une autre solution de ce genre est de passer par des documents partagés sur un réseau peer too peer, dans ce cas on indiquerait l'adresse du lien bit torrent comme url du document distant : mais cela suppose d'avoir des clients RSS/XML qui sont aussi des clients bit torrent.

Voir mon site de test de tout cela : http://leradiophone.net/

Ouch, ça fait mal :

[playlist]
File1=http://www.marcusmiller.com/media/boomerang.mp3
Title1=marcusmiller.com/media/boomerang
Length1=-1
File2=http://leradiophone.net/listen.pls
Title2= fin de la programmation - Le Radiophone -
Length2=-1
NumberOfEntries=2
Version=2
<br />
<b>Fatal error</b>: Allowed memory size of 16777216 bytes exhausted (tried
to allocate 14811 bytes) in
<b>/back1/www/net/e/n/leradiophone.net/www/htdocs/ecrire/inc_sites.php3</b>
on line <b>438</b><br />

-- Fil

Fil a écrit :

Voir mon site de test de tout cela : http://leradiophone.net/

Ouch, ça fait mal :

   Allowed memory size of 16777216 bytes exhausted (tried

to allocate 14811 bytes) in
<b>/back1/www/net/e/n/leradiophone.net/www/htdocs/ecrire/inc_sites.php3</b>

Hihi, oui des fois ca rame un peu quand j'active mon hack permettant de syndiquer des sites qui n'ont pas de fils de syndication...

Je devrais peut etre le mettre ailleur que dans inc_sites.

Il faut recliquer dans ce cas :wink: