-
Notifications
You must be signed in to change notification settings - Fork 165
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Get notified on changes related to a topic #152
Comments
For "studies abroad" project, it would be interesting to be informed at the end of each semester when new courses have been add to a topic (by school, or by spacialization), especially by e-mail. |
Cela peut être utile pour les retours d'expérience pour ne rien rater sur un topic donné |
Besoin identique |
@YaellePihan @Hypertopic/cite-du-vitrail Pourriez-vous expliciter une situation concrète dans votre domaine ? Qui ? À propos de quoi ? Pourquoi ? |
Pour le groupe "EUT+" nous pensons qu'il serait intéressant de suivre des formations (exemple ISI, RT, ou autre à l'étranger) ou des domaines (informatique,...) de cette manière il pourrait on pourrait voir les ajouts de matières ou les modifications dans une formation/un domaine qui nous intéresse. |
Projet Cité du vitrail (Orienté communication) : |
@YaellePihan @Hypertopic/cite-du-vitrail Effectivement... Pourquoi pas... D'ici la prochaine semaine, pour votre maquette, il faudra que vous réfléchissiez à un exemple de sujet qui pourrait de manière réaliste intéresser les gens qui suivent la Cité du vitrail sur les réseaux (inspirez-vous peut-être de leurs commentaires sur Facebook ou Instagram... mais j'ai l'impression qu'ils sont assez timides et discrets...). |
Pour "graine d'artiste" cela permettrait aux "spectateurs" d'être notifié que lorsque le sujet de l'oeuvre les intéressent. |
@lildelfino @Hypertopic/graines-d-artistes-1 |
OK @cedricleandres. C'est beaucoup plus clair. Pour la présentation à l'oral, il faudra peut-être dire tout haut ce à quoi les gens vont penser, pour les rassurer : lorsque l'on voit la source XML du flux avec InoReader, expliciter le fait que l'affichage de ce XML n'est évidemment pas très parlant et que c'est un choix un peu surprenant de InoReader, mais que l'on peut être rassuré : on n'a pas besoin de le lire et qu'ensuite, une fois abonné, les données sont mises en forme dans une jolie interface... |
Bonjour, voici la stratégie d'implémentation à laquelle nous avons réfléchi avec @maelht : L’idée générale pour implémenter cette fonctionnalité serait de créer un flux RSS pour chaque topic du site, afin que n’importe qui puisse les récupérer et le consulter via des agrégateurs de flux RSS comme Feedly, Ino reader, etc… . Quelle partie du code sera impactée (classes, méthodes) ? La première chose à faire est de créer le bouton permettant au visiteur de récupérer le flux. Le bouton donne un lien comme https://dessins.porphyry.org/rss, qui sera une page permettant de choisir de s'abonner soit à un corpus, ou soit à un topic. Ensuite si on s’intéresse uniquement à notre fonctionnalité, et si nous nous abonnons à un topic en particulier, nous aurons un lien vers le fichier XML lié au flux RSS du topic par exemple : https://dessins.porphyry.org/rss/Lauréat.xml Ensuite il faudra : Si le code est fonctionnel, un fichier xml pour le feed créé sera mis à jour à chaque modification/création d’un item, permettant, à partir d’un agrégateur de flux rss, d’avoir un aperçu de l’item et un lien vers porphyry pour constater les changements. Y aura-t-il des difficultés d'un point de vue algorithmique ? Avez-vous des pistes pour les résoudre ? Non, la difficulté réside plus dans l’organisation des fichiers, des classes et des méthodes que dans un quelconque algorithme. Les données dont vous avez besoin sont-elles déjà chargées par la page ? Si oui, quelle est la structure des données et comment allez-vous récupérer précisément celles qui vous intéressent ? Si non, quelle sera la requête la plus efficace et comment allez-vous récupérer dans la structure de données précisément celles qui vous intéressent ? Les données envoyées sont celles entrées à la création d’un item, quand l’item est créé on peut donc directement les récupérer pour créer notre flux RSS avant de les envoyer dans la bdd. Existe-t-il des bibliothèques qui pourraient simplifier l'implémentation ? Il existe la bibliothèque https://github.com/phi-jp/rss-generator . Cette bibliothèque JS permet de simplifier la génération de fichier XML adaptés aux flux RSS. Mais pour nous allons plutôt générer le XML avec le SGBD couchdb. Il faudra donc commencer par classer la base de données par date de modification des items, pour simplifier la récupération des items qui nous intéressent. Ensuite on utilisera couchdb pour générer le fichier XML lié à un flux RSS, en fonction du topic. On créera ensuite une vue pour récupérer le lien du fichier généré sur le coup. Doit-on intégrer des services extérieurs (ex : cartographie) ? De quelles fonctionnalités en particulier aura-t-on besoin ? Est-ce que le service choisi les propose ou doit-on passer chez un concurrent ? Comment s'utilisent ces fonctionnalités ? avec quels paramètres ? Des services extérieurs seront nécessaires pour utiliser la fonctionnalité mais ils ne seront pas à intégrer dans notre application ; on fournit simplement le fichier permettant aux services de lire notre flux. Des étapes préalables de développement, testables, sont-elles envisageables afin de diminuer la complexité de la livraison ? Refactoring (livrable à part entière, isofonctionnel) ? Code développable et testable de manière externe au logiciel ? Étape du scénario (non livrable en tant que tel mais dont l’effet peut être testé) ? Le développement pourra être moins complexe, avec la possibilité avec couchdb et argos de faire de faire des tests de manière locale avec notre base de donnée de test. |
Ci-dessous la stratégie d'implémentation du back-end: Vue Couchdb : function (doc) { Rewrite Couchdb : {
function (head, req) { |
Merci @cedricleandres et @maelht pour cet essai de stratégie d'implémentation. Cependant je suis extrèmement étonné par son contenu : c'est comme si vous ne teniez pas du tout compte :
|
@cedricleandres @maelht Je vous invite fortement à vous rapprocher de @sarah-ngn et @lildelfino pour qu'ils vous expliquent comment on se sert de leur code et comment ça marche (ce qui vous permettra de voir ce qu'il faudrait changer à leur code pour monter en généralité et gérer à la fois les corpus et les topics). |
Cette partie est mieux. Mais elle fait comme s'il fallait refaire "en double" pour les topics ce qui a été fait pour les corpus. Au contraire vous devez voir ce qu'il faudrait modifier dans ce qui a été fait pour les corpus pour monter en généralité et gérer aussi les topics. |
Merci @benel pour le retour. Effectivement j'ai essayé de relire le ticket #517 pour faire un résumé de toute la discussion sur la stratégie d'impémentation, mais c'est pas encore ça. C'est pourquoi j'ai mis la stratégie particuliement sur le back end en bas, car je me suis plus appliqué a comprendre le code du back-end et l'intégrer à notre ticket avec @sarah-ngn et @lildelfino qui nous ont beaucoup aidé. |
Effectivement, nous avons pensé à généraliser avec ce qui a été fait pour le corpus, mais étant donné que ce ne sont pas les mêmes données qui sont retournés par exemple dans la couchdb, c'est un compliqué de tout intégrer dans la même vue, je vais tout de même continué à éssayer. J'ai une question. dans la liste que j'ai crée, j'ai accès à ma startkey qui est un identifiant de topic. Si je veux par exemple dans la description, intégrer le nom du topic qui à été modifié et non uniquement son identifiant est-ce possible? |
L'idée générale qui doit guider votre stratégie est de généraliser ce que vous aviez pour un corpus afin que ça marche aussi pour un topic. Donc, en particulier, à chaque fois que vous aviez un identifiant de corpus, vous aurez un identifiant "d'objet" (corpus ou topic). |
C'est faisable a priori avec une technique Map/Reduce appelée "collation" (on se sert du tri des clés pour mettre à côté des données provenant d'objets différents). |
Co-authored-by: Thomas Godard <thomas.godard@utt.fr> Check Hypertopic/Porphyry#152 for more details
Ci-dessous la nouvelle stratégie. Merci à @lildelfino de nous avoir aidé à mutualiser les fichiers. Vue Couchdb : function (doc) {
if (doc.item_corpus && doc.record.modified) {
emit([doc.item_corpus, doc.record.modified]);
if(doc.topics && doc.record.modified){
for (var t in doc.topics){
emit([t, doc.record.modified]);
}
}
}
} Rewrite Couchdb : {
"from": "feed/:corpus",
"to": "_list/feed/modified",
"query": {
"include_docs": "true",
"startkey": [":corpus"],
"endkey": [":corpus",{}]
}
} List Couchdb : Nous avons décidé de concerver le fichier Argos/app/lists/feed.js, en intégrant des modifications permettant de ressortir les résultats en fonction de la demande dans l'uri. function (head, req) {
start({
'headers': {
'Content-Type': 'text/xml'
}
});
uri = req.query.app;
send('<rss><channel><title>' + req.query.startkey + '</title><link>');
send(uri);
send('</link><description>Created or updated items.</description>');
while(row = getRow()){
var i=0;
var topic="";
for (var t in row.doc.topics){
topic+=t+", ";
}
send(''.concat(
'<item>',
'<title>' + row.doc.item_name + '</title>',
'<description> Lieu : ' + row.doc.spatial + ' Créé le : ' + row.doc.created + ' Catégorie(s) : ' + topic + '</description>',
'<link>' + uri + '/item/' + row.doc.item_corpus + '/' + row.id + '</link>',
'</item>'
));
}
send('</channel></rss>');
} |
@cedricleandres Pouvez-vous utiliser le mode de coloration syntaxique de GitHub ? Si vous écrivez par exemple :
ça donnera : for (;;) {
console.log('Hello World!');
} Ça rendra la relecture beaucoup plus facile... |
@benel c'est fait. |
&& Get notified on changes related to a topic (Hypertopic#152)
&& Get notified on changes related to a topic (Hypertopic#152)
&& Get notified on changes related to a topic (Hypertopic#152)
&& Get notified on changes related to a topic (Hypertopic#152)
&& Get notified on changes related to a topic (Hypertopic#152)
&& Get notified on changes related to a topic (Hypertopic#152)
Description
A given user, interested in a topic, could register to a topic in order to be notified whenever a new item is described by this topic or one of this children.
What is the valuable outcome that cannot be achieved with current features?
For which stakeholder (people, role, project, domain) is it important?
Suggested by @heliacerbonne for the open-access project.
Which user action should be enabled (or restricted)? For who?
Additional details (solutions you think about, or workarounds you tried)
Deliverables status
Phase 1
Phase 2
Phase 3
The text was updated successfully, but these errors were encountered: