Open RobinLallier opened 5 years ago
Mock-up attached :
It can be emulated by posting a comment with a link in it (see feature #47). However this is not bidirectional and you don't have the thumbnail in it.
Studying Abroad : It would be interesting to allow students to have access to suggestions of UEs based on one another to help them find other UEs that might be of interest to them.
Dans le cadre de l'Archéologie Grecque, cela pourrait être utile de lier des vitraux du même artiste, ou du même lieux.
Dans le cadre de l'Archéologie Grecque, cela pourrait être utile de lier des vitraux du même artiste, ou du même lieux.
@hebertquentin Des vitraux ?!
Notez que s'il s'agit du même artiste, comme il s'agit d'une catégorie, le lien est déjà disponible (voir https://github.com/Hypertopic/Porphyry/blob/v7/features/items_with_same_topic.feature). Pour le même lieu (mais reste à savoir ce que ça veut dire exactement), vous devez chercher le ticket qui correspond (sachant que le lieu est un attribut).
@benel Des vases*
Hum... Je pense supprimer cette carte alors. J'avais mal compris la fonctionnalité.
@hebertquentin Vous pouvez laisser votre commentaire, ça rendra peut-être service à d'autres équipes pour ne pas faire la même erreur.
Pour le partage d'expériences cela permettra de définir des compétences transversales à certaines expériences, qui permettront de faire le lien entre plusieurs articles de domaines différents
Pour le partage d'expériences cela permettra de définir des compétences transversales à certaines expériences, qui permettront de faire le lien entre plusieurs articles de domaines différents
@Ocynox Pourquoi pas, mais vérifiez que le fait d'utiliser une catégorie transversale ne règle pas déjà le problème.
Projet Approche par compétences de la formation : Lien entre UE qu'il faut déjà avoir fait pour en faire une autre
Projet sur les vitraux: Cette fonctionnalité serait utile pour pouvoir faire le lien et circuler entre les vitraux ayant des points communs intuitivement sans devoir repasser par la recherche à chaque fois
@Morillev Faites bien la différence entre une interface plus simple et une nouvelle fonctionnalité. Là présentement, il n'existera de lien que si quelqu'un le crée. La structure des données sera différente.
Pour l'équipe Approche par compétences de la formation :
Le binôme @MartiSalty et @tinidec s'occuperont du livrable Stratégie d'implémentation de ce ticket (#188).
Le binôme @ChloeChamaillard et @gabyseg s'occuperont du livrable Scénario de ce ticket (#188).
Fonctionnalité : À partir d'un item, obtenir ceux qui sont similaires
Scénario :
Soit l’utilisateur consulte un item « IF05 » Et la liste des items « GL02, EG23, IF14 » similaires est visible dans la rubrique « Voir aussi » Quand l’utilisateur choisit l’item « GL02 » dans la rubrique « Voir aussi » Et l'item « GL02 » est affiché Et l'item « IF05 » est visible dans la rubrique « Voir aussi »
Fonctionnalité : Ajouter un item similaire à un autre item
Scénario :
Soit l’utilisateur créer un item « IF05 » Et l’attribut « items similaires » dans la rubrique « Voir aussi » vide Quand l’utilisateur indique « GL02 » comme valeur pour l’attribut « items similaires » dans la rubrique « Voir aussi » Et l’item « GL02 » est visible dans la liste des « items similaires »
Rédigé par @ChloeChamaillard et @gabyseg
@Hypertopic/approche-par-competences-de-la-formation Je me suis occupé de la partie CouchDB (Hypertopic/Argos#58) comme ça vous pouvez vous concentrer sur la partie React (Porphyry#188).
Stratégie d'implémentation
Quelle partie du code sera impactée (classes, méthodes) ? Le composant “Item” sera modifié. Une section “Objet en liens” sera ajouté en dessous des “Viewpoints”. Le composant “LinkedItems” sera ajouté dans “itemPage”.
Y aura-t-il des difficultés d'un point de vue algorithmique ? Avez-vous des pistes pour les résoudre ? Nous n’aurons pas d'algorithme dans notre intégration, nous utiliserons seulement de la récupération.
Les données dont vous avez besoin sont-elles déjà chargées par la page ? 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 ? Il faudrait ajouter dans la base de données un nouvel attribut multivalué à “Item”. Cette attribut contiendrait une référence à un Item existant ainsi qu’un petit texte de description. Comme dans notre séance sur le développement, vous pouvez tester des petits bouts de code indépendants et les associer à votre stratégie (avec éventuellement des exemples de données, voire même des temps d'exécution).
Existe-t-il des bibliothèques qui pourraient simplifier l'implémentation ? Non, nous avons pas besoin de bibliothèques.
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 ne seront pas nécessaires non plus.
Chaque item pourra être relié à un ou plusieurs autres items avec un petit texte expliquant la relation.
Rédigé par @MartiSalty et @tinidec
Les liens se trouveront au dessus des commentaires dans une section "Voir aussi".
Il faudrait ajouter dans la base de données un nouvel attribut multivalué à “Item”. Cette attribut contiendrait une référence à un Item existant ainsi qu’un petit texte de description.
Avez-vous bien noté que c'est déjà fait ? Avez-vous pu le tester en faisant des requêtes comme je vous y avais invité•e•s ?
Oui on a bien noté que c'est déjà fait, on avait juste pas changé ce qui avait été rédigé. Et on est en train de le tester.
Nous rencontrons un problème lors de l'ajout d'un item lié. Nous aimerions savoir pourquoi l'item pourquoi nous n'arrivons pas ajouter un item dans Argos. Voici le code qui permet d'ajouter un item à un autre item.
_setLinkedItem = async (linkedItem) => {
if (linkedItem!=='') {
let hypertopic = new Hypertopic((await conf).services);
return hypertopic
.get({
_id: this.props.match.params.item,
item_corpus: this.props.match.params.corpus
})
.then(x => Object.assign(x, {item: linkedItem}))
.then(hypertopic.post)
.catch((x) => console.error(x.message));
} else {
console.error('Créez un attribut non vide');
return new Promise().fail();
}
}
@gabyseg @LeonVongphanith @MartiSalty
J’ai réécrit les scénarios pour qu’ils correspondent aux Vitraux pour les tests, ce qui donne cela : Fonctionnalité : Créer un lien bidirectionnel entre deux items
Scénario : À partir d'un item, obtenir ceux qui sont similaires Soit "SNZ 006" l'item affiché Et la liste des items "SM 008" similaires est visible dans la rubrique "Voir aussi" Quand l’utilisateur choisit l’item "SM 008" dans la rubrique "Voir aussi" Alors l'item "SM 008" est affiché Et l'item "SNZ 006" est visible dans la rubrique "Voir aussi"
Scénario : Ajouter un item similaire à un autre item Soit l’utilisateur créer un item "SNZ 006" Et l’attribut "items" dans la rubrique "Voir aussi" vide Et l'utilisateur "alice" connecté Quand l’utilisateur indique "SM 008" comme valeur pour l’attribut "items" dans la rubrique "Voir aussi" Alors l’item "SM 008" est visible dans la liste des "items"
Ils ont été mis dans un nouveau fichier dans le dossier features et ensuite il faut modifier les fichiers context.rb, event.rb et outcome.rb pour chaque ligne des scénarios qui n’est pas déjà présente dedans. Est-ce bien cela ?
@MartiSalty
Nous rencontrons un problème lors de l'ajout d'un item lié. Nous aimerions savoir pourquoi l'item pourquoi nous n'arrivons pas ajouter un item dans Argos.
Quel genre de problème ? Message d'erreur ? Code et messages de retour HTTP ?
@MartiSalty Quelle est la structure de votre linked_item
?
@gabyseg @LeonVongphanith @MartiSalty
Est-ce que vous avez noté la structure que ça doit avoir dans le document stocké ?
Ce n'est pas la même structure que dans les vues : le champ a pour clef items
(et non item
) et sa valeur est une sorte de hashmap (plus compacte en stockage et plus efficace pour les recherches) :
"items":{"710a9531a5f6991321d3f27b637648c0cd5b7926":{"corpus":"Vitraux - Bénel"}}
@MartiSalty
Nous rencontrons un problème lors de l'ajout d'un item lié. Nous aimerions savoir pourquoi l'item pourquoi nous n'arrivons pas ajouter un item dans Argos.
Quel genre de problème ? Message d'erreur ? Code et messages de retour HTTP ?
Nous n'arrivons pas à ajouter une valeur à items de corpus. Nous n'avons pas non plus de message d'erreur. De plus, nous n'arrivons pas à effectuer des updates sur runkit.
@MartiSalty Quelle est la structure de votre
linked_item
?
'linked_item' n'avait pas de structure mais nous avons pris note de votre dernier message.
De plus, nous rencontrons depuis cette après-midi soit une 'internal error' ou une 'TypeError: Cannot read property 'value' of undefined' sur nos tests de requête sur runkit.
@gabyseg @LeonVongphanith @MartiSalty
@MartiSalty J'ai un peu de mal à relier dans ma tête tous les messages pour avoir l'ensemble de l'histoire... Si j'ai bien compris, vous essayez de tester un bout de code à part (indépendant de Porphyry) qui crée (ou modifie ?) un item avec un item relié. C'est ça ?
Si c'est le cas pourriez-vous me mettre le code complet ?
Notez bien, si vous êtes en binôme sur ce ticket, qu'un autre étudiant peut s'occuper pendant ce temps de l'affichage de ces items reliés (l'un est indépendant de l'autre).
@Hypertopic/etudes-a-l-etranger-1
Bonjour,
Nous allons voir pour intégrer cette fonctionnalité dans le projet d'étude à l'étranger. Cela nous servirait à relier des matières entre elles. Par exemple, nous pourrions indiquer que des UEs en France possède des équivalents à l'étranger, et relier ces matières entre elles. De plus, nous pourrons lier des matières avec leur prérequis lorsqu'elles en ont.
@Hypertopic/competences-eut
Cette fonctionnalité est intéressante pour notre projet étant donné que nous avons deux items (UE et Compétences), cela nous permet de relier une UE avec ces compétences ou inversement.
Cette fonctionnalité est intéressante pour notre projet étant donné que nous avons deux items (UE et Compétences), cela nous permet de relier une UE avec ces compétences ou inversement.
@cedfre @Hypertopic/competences-eut Comme discuté ce matin, ce catalogue mixte UE/compétences correspondrait à une troisième approche (la première étant un catalogue des UE avec une catégorisation notamment par compétence, et la seconde étant un catalogue des compétences avec catégorisation entre autres par UE). Cette troisième approche n'est pas la plus facile à imaginer : je ne vois pas bien encore ce que seront les catégories dans un tel cas...
Pour le projet Graines d'artistes , l'idée est d'ajouter des liens de quelques tableaux dans la page d'afficher un tableau. L'idée est de permettre aux visiteurs de voir directement les tableaux de le même concours ou de le même thème annuel.
@therealdarkflamemaster @Hypertopic/graines-d-artistes-1
Pour le projet Graines d'artistes , l'idée est d'ajouter des liens de quelques tableaux dans la page d'afficher un tableau. L'idée est de permettre aux visiteurs de voir directement les tableaux de le même concours ou de le même thème annuel.
Notez que les liens bidirecetionnels sont de 1 à 1... Pour faire ce que vous ditez, pour 100 dessins, il vous faudrait 99+98+...+1 liens. Si je me souviens bien de mes cours de maths, ça fait 5000. En tout cas ça fait beaucoup de liens... Ce n'est visiblement pas la bonne manière de faire.
La manière la plus évidente pour faire ce que vous dites est d'avoir la même valeur d'attribut ou la même catégorie. Ces fonctionnalité existent déjà.
On voit qu'il est important de réfléchir d'abord à comment utiliser les fonctionnalités existantes avant de voir ce qu'il manque. Dans ce cas précis, d'ailleurs, la catégorie à laquelle vous avez pensé a déjà été mise dans votre preuve de concept par les étudiants de l'an dernier. Il s'agit de ce qu'ils ont appelé les "thèmes annuels" (le concours a en effet un sujet différent chaque année).
Les étudiants de l'an dernier avaient d'ailleurs déjà pensé à cette catégorie (thème annuel)
Merci pour votre réponse.
On voit qu'il est important de réfléchir d'abord à comment utiliser les fonctionnalités existantes avant de voir ce qu'il manque. Dans ce cas précis, d'ailleurs, la catégorie à laquelle vous avez pensé a déjà été mise dans votre preuve de concept par les étudiants de l'an dernier. Il s'agit de ce qu'ils ont appelé les "thèmes annuels" (le concours a en effet un sujet différent chaque année).
En fait, ce que j'ai envisagé est d'ajouter les autres tableaux du même "thèmes annuels" en format image dans un endroit de la page. Par exemple :
@therealdarkflamemaster @Hypertopic/graines-d-artistes-1
En fait, ce que j'ai envisagé est d'ajouter les autres tableaux du même "thèmes annuels" en format image dans un endroit de la page.
C'est intéressant, mais du coup ce serait un autre ticket.
Notez par ailleurs que le logiciel ne peut pas savoir quelle catégorie vous intéresse. Il faudrait tenir compte de toutes les catégories (l'une après l'autre, ou mélangées). Ce serait en fait l'union de tous les items correspondant à toutes les catégories.
Point importants à approfondir lors du maquettage :
@Hypertopic/graines-d-artistes-1
- La zone des items ayant le même nom n'est pas représentée sur votre maquette. Votre zone est-elle dessus ou dessous ? Y a-t-il la place des deux ?
Je voudrais placer cette zone seulement dans la page présentant un item/tableau ( la page qui a une zone Description
). Dans ce cas, normalement, le tableau présenté est plus grand que la zone Description
en gauche. Je trouvais que l'on peut placer la zone items liés
en dessous.
Exemple :
- Les images ne sont pas représentées sur votre maquette. Si elles l'étaient, comment éviter la confusion visuelle entre les deux ?
Je pense qu'il est possible de faire un filtrage complètement en Front-End, réalisé en JS. Au cas où il y a trop d'items dans un catégorie, on peut arrêter le filtrage quand on a obtenu les 3 premiers items.
- Vous mettez des points de suspension, mais justement, que se passe-t-il quand il y a beaucoup d'items ?
Je pense qu'il vaut mieux d'avoir 3 items maximum. Quand il y a beaucoup d'items, on peut choisir les 3 premiers items.
- Le titre indique "Tableaux liés". Attention, le logiciel est générique : il n'est pas fait que pour des tableaux.
Bien entendu.
@therealdarkflamemaster @Hypertopic/graines-d-artistes-1
La zone des items ayant le même nom n'est pas représentée sur votre maquette. Votre zone est-elle dessus ou dessous ? Y a-t-il la place des deux ?
Je voudrais placer cette zone seulement dans la page présentant un item/tableau ( la page qui a une zone Description). Dans ce cas, normalement, le tableau présenté est plus grand que la zone Description en gauche. Je trouvais que l'on peut placer la zone items liés en dessous.
Je viens de comprendre pourquoi on ne se comprenait pas. En fait, comme dans votre site il n'y a pas d'items portant le même nom, vous ne voyez pas la zone correspondante. Par contre, elle apparaît dans d'autres sites :
Comme votre fonctionnalité doit marcher sur tous les sites, il faudra quand même décider de placer votre zone dessus ou dessous la zone existante.
@therealdarkflamemaster @Hypertopic/graines-d-artistes-1
Et n'oubliez pas de créer un autre ticket pour votre fonctionnalité puisque ce que vous prévoyez de faire ne correspond pas au lien bidirectionnel entre deux items.
Maquette fait avec @Antoine-thz. Ces maquettes permettent de visualiser la fonctionnalité "create a bidirectional link between two items". Nous avons illustré cela avec le liens bi directionnels entre les Itemps "UE". Une UE peut être pré requis d'une autre UE . Une UE peut être également une approfondissement d'une autre UE de sorte que si A est pré-requis de B alors A sera approfondissement de B
@TheoHoenen @Antoine-thz
Merci de cette nouvelle maquette.
NF05 --pré-requis--> NF04
, vous avez aussi NF04 <--pré-requis-- NF05
.Nous avons refait la maquette pour la création d'un lien bi directionnel ( Fait avec @Antoine-thz )
Il faut tout d'abord cliquer sur le bouton " + Ajouter un lien bi directionnel"
Ensuite rentrer les deux matières concernés par le lien en respectant l'ordre indiqué par la flèche
Puis valider
Merci pour cette nouvelle maquette @TheoHoenen @Antoine-thz.
Vous avez effectivement besoin de saisir deux données complémentaires :
NF04
c'est vrai, NF05
, puisque vous êtes déjà dessus,pré-requis
, l'étiquette du lien.Une fois ce problème réglé, vous vous trouvez face à un autre problème : NF04
n'est qu'un nom, pas un identifiant...
Si vous le tapez dans un champ de recherche, vous aurez possiblement plusieurs réponses. Il faudrait donc arriver à les distinguer, soit grâce à un identifiant (certains sites parlent "d'ADN" de l'objet) soit grâce à d'autres attributs (en espérant qu'il y en ait d'autres et qu'ils soient suffisamment différents).
Nouvelle maquette pour la création du lien bidirectionnel avec @TheoHoenen
Merci @Antoine-thz et @TheoHoenen.
L'idée de créer aussi des liens ayant non pas pour origine mais pour destination la page courante est intéressante mais elle pose de nouveaux problèmes. Je vous conseille d'en faire un autre ticket.
Rappelons les problèmes de conception à résoudre :
NF05
), il faut deux champs de saisie : un pour l'étiquette du lien (ex : pré-requis
) l'autre pour la destination du lien (ex : NF04
) ; NF04
soit choisi dans une liste,NF04
à l'UTT et NF04
à l'UTC), il faudrait un moyen de les différencier (par exemple en indiquant en outre son identifiant ou ses autres attributs – mais ce n'est pas certain que les attributs soient suffisants pour distinguer un item de ses hononymes).OK ?
@benel Voici notre stratégie d'implémentation réalisée avec @maxpid pour cette fonctionnalité. Nous nous sommes d'avantage penchés sur le front-end et avons commencé à réfléchir au back-end. Nous attendons votre premier retour pour finaliser la partie backend.
La stratégie d’implémentation doit répondre aux points suivants :
Pour répondre à ces différents points, nous avons pensé aux stratégies de développement suivantes :
Tout d’abord, il faudra recréer un nouveau component React que l’on pourra nommer
BidirectionnalLink.jsx
Ce composant react sera appelé dans Item.jsx
au même endroit que les viewpoints
Les étiquettes
On aura tout simplement 2 inputs sans aucunes suggestions avec comme placeholders :
On pourra utiliser le code suivant :
<div class="d-none d-sm-block"><form class="AttributeForm input-group inactive">
<div class="attributeInput">
<input id="new-attribute" class="form-control" placeholder="Renseigner l'étiquette de l'item actuel" type="text" value="">
</div>
</form>
</div>
L’input avec les suggestions
Pour implémenter les inputs permettant de choisir les différents items, on pourra réutiliser le composant InputWithSuggestions
<div className="d-none d-sm-block">
<InputWithSuggestions candidates={candidates}
onSuggestionSelected={this.onSuggestionSelected}
inputProps={inputProps}
id={this.props.id}
/>
</div>
Les candidats seront récupérés avec le point 4.
Le bouton valider
On aura un bouton pour valider l’ajout, on pourra utiliser ce code suivant :
<button type="button" className="btn btn-sm ValidateButton btn" onClick={() => {gestion du backend}
qui s’occupera de vérifier que tout est OK et d’ajouter l’attribut si c’est bon
Récupérer la liste des items
Afin de permettre d’avoir un input avec des suggestions, on doit récupérer la liste des items pour la renseigner en tant que candidates dans le composant InputWithSuggestions
. On pourra utiliser le code suivant :
attributesCandidates = memoize(
(items) => new Items(
items
).getAttributes()
.map(([key, value]) => key.concat(' : ', value))
.map(x => ({id: x, name: x, type: 'attribute'}))
);
Merci pour cette première version de votre stratégie d'implémentation @dutoural et @maxpid
Il doit être possible de renseigner 2 étiquettes : celle de l’item actuel et celle de l’item de destination (ex : pour NF04 / NF05 → étiquette pré requis pour NF05 et étiquette cours suivant pour NF04)
Sur ce point, j'ai déjà dit aux autres binômes ayant travaillé sur ce ticket de ne prévoir qu'une seule étiquette et par contre d'indiquer dans l'interface dans quel sens on doit la lire.
Certes on aurait pu le concevoir différemment, mais ce n'est pas vous qui durant les 10 prochaines années devra expliquer ce qu'est une relation converse aux usagers. Déjà les étudiants en informatique ont parfois du mal à comprendre, alors je ne vous dis pas pour des personnes d'autres domaines...
OK ?
Afficher un InputWithSuggestions pour permettre de renseigner l’item de destination
Tout à fait.
Tout d’abord, il faudra recréer un nouveau component React que l’on pourra nommer
BidirectionnalLink.jsx
Je n'ai pas compris si vous parliez du composant qui correspond à la primitive au singulier ou au pluriel. Je m'explique : si vous regardez la plupart des autres composants à gauche de la page des items : le composant au pluriel contient :
J'ai l'impression que vous aviez oublié d'afficher les liens existants, je me trompe ?
Afin de permettre d’avoir un input avec des suggestions, on doit récupérer la liste des items pour la renseigner en tant que candidates dans le composant InputWithSuggestions. On pourra utiliser le code suivant : (...)
C'est effectivement avec InputWithSuggestions et vous pouvez effectivement vous inspirer de son usage pour les attributes
... mais aussi son usage pour les topics
: cela vous permettra de monter en généralité.
Car dans votre cas, ce ne seront pas des attributs mais des liens. La structure des données ne sera pas strictement la même.
(nous) avons commencé à réfléchir au back-end. Nous attendons votre premier retour pour finaliser la partie backend.
Notez bien qu'une première ébauche est déjà implémentée notamment son caractère bidirectionnel. Par contre, il n'y avait pas encore d'étiquette.
Je peux me charger d'ajouter la gestion de l'étiquette dans le backend. Par contre, il faudra que vous éclaircissiez la manière dont :
/item/Vitraux%20-%20Bénel/8a1750b17b11944108efaac593f4448e4e9f966b
et /item/Vitraux%20-%20Bénel/710a9531a5f6991321d3f27b637648c0cd5b7926
du jeu de test, mais donc sans les étiquettes pour l'instant).D'accord ?
vous récupèrerez les données (en fait vous les avez déjà
On voit ici le lien entre SNZ 006
(à l'écran) et SM 008
dans les données du corpus (chargées par cette page) :
@benel Je suis d'accord avec vous pour l'ensemble des remarque sauf peut-être une.
Je ne vois pas comment à l'aide d'une seule étiquette il sera possible de généraliser les étiquettes à d'autres sujets que les matières. Certes il est très facile de mettre cours suivants / cours prérequis mais qu'en est-il pour des vitraux ou autres ? J'aimerai avoir votre avis avant de rédiger la stratégie d'implémentation finale
Edit :
Je n'ai pas compris si vous parliez du composant qui correspond à la primitive au singulier ou au pluriel.
Nous parlions du composant qui correspond à la primitive au singulier à l'instar de
Resource.jsx
ou encoreAttribute.jsx
@dutoural
Je ne vois pas comment à l'aide d'une seule étiquette il sera possible de généraliser les étiquettes à d'autres sujets que les matières. Certes il est très facile de mettre cours suivants / cours prérequis mais qu'en est-il pour des vitraux ou autres ? J'aimerai avoir votre avis avant de rédiger la stratégie d'implémentation finale
Je pense que vous n'avez pas compris ce que je disais. Voici un diagramme de classe du modèle dont je vous parle :
Est-ce plus clair ? Ou avez-vous besoin d'exemples ?
En modèle relationnel ça donne ceci :
link(origin, label, destination)
Exemple :
link('NF05'`, 'prérequis', 'NF04')
Bien entendu on peut le lire dans les deux sens :
NF05
a pour prérequis
NF04
NF04
est le prérequis
de NF05
Donc que sur la fiche de NF05, on aura :
prérequis> NF04
Et sur la fiche de NF04, on aura :
<prérequis NF05
D'accord c'est plus clair. Merci. Je vais réécrire la stratégie pour coller à cela
done with @Antoine-thz
Création du lien
Affichage du lien crée
@benel
Description
Allow users to link an item to others, into a new "Description" section. This can help highlight similarities between two or more items. A small text can describe what the link is used for.
Deliverables status
Phase 1
Phase 2
Phase 3