Hypertopic / Porphyry

Corpus analyses confrontation
https://hypertopic.org/porphyry
GNU Affero General Public License v3.0
21 stars 165 forks source link

Sort items according to the values of a given attribute #38

Closed benel closed 4 years ago

benel commented 7 years ago

Phase 1

benel commented 5 years ago

As reported by @gumn, this could be useful for the Cité du vitrail (esp. for the spatial attribute, like in #121).

sbramstein commented 4 years ago

Thsi could be really usefull for the different users to have the possibility to have the possibility to sort the vases based on their precise location or on their style or any kind of usefull attributes. So this should be quite high in our ranking.

lerideew commented 4 years ago

It would be interesting for the project "Study abroad" to allow the users to sort the UEs based on the University in which you can follow the course, the country of the University, the number of credits or any other given attributes.

Gaetanherry commented 4 years ago

Cela pourrait être utile dans les récits d'expériences pour trier les items selon partages, likes, etc

Starangon commented 4 years ago

Projet Visite sur site de vitraux : On pourrait utiliser cette fonctionnalité pour mieux s'y retrouver dans les endroits ou se trouvent les vitraux et quels sont leurs auteurs par exemple.

benel commented 4 years ago

Cela pourrait être utile dans les récits d'expériences pour trier les items selon partages, likes, etc

@Ocynox Intéressant, mais ce serait une autre fonctionnalité. En effet, les partages et 'likes' ne sont pas des attributs de Porphyry. Les attributs doivent être consensuels alors que ces éléments participatifs sont par définition très différents d'un participant à l'autre.

benel commented 4 years ago

On pourrait utiliser cette fonctionnalité pour mieux s'y retrouver dans les endroits ou se trouvent les vitraux et quels sont leurs auteurs par exemple.

@TheStarTom Les auteurs des vitraux ou des photographies ?

benel commented 4 years ago

On pourrait utiliser cette fonctionnalité pour mieux s'y retrouver dans les endroits ou se trouvent les vitraux et quels sont leurs auteurs par exemple.

@TheStarTom Je vous invite à creuser l'usage de cette fonctionnalité pour votre projet. Je pense effectivement qu'elles est très importante pour vous.

yvan-noume commented 4 years ago

Projet Visite sur site de vitraux : Cette fonctionnalité permettrait à l'utilisateur d'avoir la liste de tous les items correspondant à la valeur d'un attribut.

FirielEinor commented 4 years ago

Projet Visite sur site de vitraux : Cette fonctionnalité pourrait par exemple permettre de trier tout les vitraux par lieux.

benel commented 4 years ago

@yvan-noume Ne restez pas dans une description générale. Donnez des exemples pour votre projet précis.

Starangon commented 4 years ago

Vitraux : L'utilisateur tri par la liste des lieux, et sait ou il doit aller pour voir tel ou tel vitrail, et ce qui peut lui rester a visiter

yvan-noume commented 4 years ago

@yvan-noume Ne restez pas dans une description générale. Donnez des exemples pour votre projet précis.

Du coup cette fonctionnalité pourrait permettre à l'utilisateur d'avoir une liste de tous les vitraux qui appartiennent à un auteur précis ou encore avoir la liste de tous les vitraux issu d'une période donnée.

benel commented 4 years ago

Du coup cette fonctionnalité pourrait permettre à l'utilisateur d'avoir une liste de tous les vitraux qui appartiennent à un auteur précis ou encore avoir la liste de tous les vitraux issu d'une période donnée.

@yvan-noume Notez bien que si vous parlez de l'auteur du vitrail ou de sa datation, vous n'avez pas besoin de cette fonctionnalité, car il s'agit de catégories et que la fonctionnalité existe déjà pour les catégories.

Par contre, si vous voulez le faire sur l'auteur de la photographie ou sur la date de prise de vue, effectivement vous en aurez besoin. Par contre, sur cet exemple, je ne vois pas trop l'intérêt (à moins que quelqu'un cherche à retracer le week-end d'un des photographes... ce qui serait un peu bizarre).

gabyseg commented 4 years ago

Approche par compétences de la formation : Cette fonctionnalité pourrait permettre de trier les ue selon différents critères : le nombre d'heures qui la composent…

Damien71 commented 4 years ago

Page d’accueil :

image

Scénario 1 : L'utilisateur sélectionne le nom de l'université qu'il recherche puis il trie les UE correspondantes par semestre.

image

Scénario 2 : L'utilisateur sélectionne le domaine de l'université qu'il intéresse puis il trie les UE correspondantes en fonction du pays.

image

Pour ces deux scénarios, l'utilisateur peut effectuer un tri croissant ou décroissant à l'aide des flèches disponibles à côté du choix de l'attribut.

Damien71 commented 4 years ago

Voici notre stratégie d'implémentation

Quelle partie du code sera impactée (classes, méthodes) ? La classe Corpora sera impactée car c'est dans celle-ci que les items sont affichés. La méthode render notamment car c'est elle qui traite cet affichage.

Y aura-t-il des difficultés d'un point de vue algorithmique ? Avez-vous des pistes pour les résoudre ? Les difficultés peuvent provenir de la liste des attributs du filtrage qu'il faut aller chercher car il faut parcourir tous les items pour avoir cette liste. Également, des difficultés peuvent être rencontrées lorsque nous allons nous trier les items et les ré-afficher car les items sont rechargés de manière automatique et qui ne prend en compte notre filtrage.

Les données dont vous avez besoin sont-elles déjà chargées par la page ? Oui, les items à trier sont déjà chargés par la page.

Existe-t-il des bibliothèques qui pourraient simplifier l'implémentation ? Non.

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 ? Non.

benel commented 4 years ago

Existe-t-il des bibliothèques qui pourraient simplifier l'implémentation ?

Non.

@Damien71 Avez-vous regardé la documentation de la fonction sort d'EcmaScript ?

Damien71 commented 4 years ago

Existe-t-il des bibliothèques qui pourraient simplifier l'implémentation ?

Non.

@Damien71 Avez-vous regardé la documentation de la fonction sort d'EcmaScript ?

  • Avec ou sans paramètre ? Si oui, avec quel paramètre ? Avez-vous fait un test proche de ce que vous devrez implémenter ?

Nous avons utilisé une fonction de comparaison utilisant localeCompare en paramètre du sort.

  • Influence de la langue utilisée (locale) ?

D'après la doc, le sort trie selon le code UTF-16 des caractères. Je pense qu'un problème peut exister si la langue utilisée est différente suivant les items à traiter, il faudra donc une seule langue pour toutes les informations (anglais) afin d'éviter ce problème.

  • Que pensez-vous de la stabilité du tri (stable sort(ing)) ? Est-ce important dans votre cas ?

D'après ce que je comprends, le tri stable fait que si deux éléments sont égaux, on change pas leur position dans le tri. Je ne sais pas trop si nous avons l'utilité de cette stabilité dans notre tri.

benel commented 4 years ago

Avec ou sans paramètre ? Si oui, avec quel paramètre ? Avez-vous fait un test proche de ce que vous devrez implémenter ?

Nous avons utilisé une fonction de comparaison utilisant localeCompare en paramètre du sort.

@Damien71 Je pensais surtout au fait que vous n'allez pas comparer des types primitifs comme des chaînes de caractère ou des nombres mais des "items" (des objets avec notamment un certain nombre d'attributs). Ce qui veut dire qu'il vous faudra définir une fonction de comparaison pour les trier en fonction d'un attribut de cet item (qui par ailleurs est variable !).

Si j'étais à votre place, je testerai ça avant de me lancer dans le code de Porphyry (en lançant node en mode interactif sur quelques exemples simples)...

benel commented 4 years ago

D'après la doc, le sort trie selon le code UTF-16 des caractères. Je pense qu'un problème peut exister si la langue utilisée est différente suivant les items à traiter, il faudra donc une seule langue pour toutes les informations (anglais) afin d'éviter ce problème.

@Damien71 Visiblement vous n'avez pas compris ce qu'apporte localeCompare... Faites un test dans Node (en mode interactif) du tri avec et sans localeCompare du tableau ['Århus', 'Aarhus','Bâle','Barcelone'].

benel commented 4 years ago

Que pensez-vous de la stabilité du tri (stable sort(ing)) ? Est-ce important dans votre cas ? D'après ce que je comprends, le tri stable fait que si deux éléments sont égaux, on change pas leur position dans le tri. Je ne sais pas trop si nous avons l'utilité de cette stabilité dans notre tri.

@Damien71 Sachant que les données sont rechargées toutes les 20s et que React modifie le DOM pour chaque partie de l'état qui a changé, que risquerait-il de se passer si le tri des items n'était pas stable ?

Damien71 commented 4 years ago

D'après la doc, le sort trie selon le code UTF-16 des caractères. Je pense qu'un problème peut exister si la langue utilisée est différente suivant les items à traiter, il faudra donc une seule langue pour toutes les informations (anglais) afin d'éviter ce problème.

@Damien71 Visiblement vous n'avez pas compris ce qu'apporte localeCompare... Faites un test dans Node (en mode interactif) du tri avec et sans localeCompare du tableau ['Århus', 'Aarhus','Bâle','Barcelone'].

Sans localeCompare, le tableau trié est ["Aarhus", "Barcelone", "Bâle", "Århus"] alors qu'avec localeCompare : ["Aarhus", "Århus", "Bâle", "Barcelone"]. Cela permet de trier dans le bon ordre les caractères non-ASCII comme dans notre exemple avec nos accents !

Que pensez-vous de la stabilité du tri (stable sort(ing)) ? Est-ce important dans votre cas ? D'après ce que je comprends, le tri stable fait que si deux éléments sont égaux, on change pas leur position dans le tri. Je ne sais pas trop si nous avons l'utilité de cette stabilité dans notre tri.

@Damien71 Sachant que les données sont rechargées toutes les 20s et que React modifie le DOM pour chaque partie de l'état qui a changé, que risquerait-il de se passer si le tri des items n'était pas stable ?

A chaque rechargement, notre tri serai susceptible de changer et donc le rendrai caduc. Alors qu'avec un tri stable, lors du rechargement, les items gardent leur ordre et ne bougent pas. Donc on a bien besoin d'un tri stable pour notre feature !

Damien71 commented 4 years ago

Liste des sous-livrables :

benel commented 4 years ago

@Damien71 Pour voir la barre de progression dans votre kanban, il faut cocher les cases dans le tout premier commentaire. Normalement vous devez pouvoir le faire. Dites moi si ça ne fonctionne pas.

Damien71 commented 4 years ago

@Damien71 Pour voir la barre de progression dans votre kanban, il faut cocher les cases dans le tout premier commentaire. Normalement vous devez pouvoir le faire. Dites moi si ça ne fonctionne pas.

Effectivement, je ne peux pas cocher les cases dans le premier message.

benel commented 4 years ago

Ah c'est curieux. Dans ce cas, je reporterai les cases que vous avez cochées...

HONGXinY commented 4 years ago

Bonsoir monsieur, J'ai trouvé le moyen pour tester si les items sont en bon ordre. Et j'ai fait le test sur Porphyry (pas encore sur notre projet). Donc c'est la logique que je vais utiliser pour trier les items. Voici c'est les scénarios:

Scénario: 38 Soit "vitraux" le portfolio ouvert Et "SM 001 m" un des items affichés Et "SM 001 n" un des items affichés Et "SR 005" un des items affichés Et "Datation" une des rubriques développées Quand on sélectionne la rubrique "XIXe s." Alors je vois en ordre la liste |Items| |SM 001 m| |SM 001 n| |SR 005|

La définition de la dernière étape Alors("je vois en ordre la liste") do |table| results=[['Items']]+page.all('div.Item div').map do |div| [div.text] end table.diff!(results) end

Résultat de test IMG_E0170

Comment vous en pensez de ce test ?

HONGXinY commented 4 years ago

Pour notre projet, je vais changer le scénario comme ci-dessous et ajouter les définitions précises pour chaque étape.

Scénario: 38 Soit "CATALOGUE DE COURS" le portfolio ouvert Et "GE34" un des items affichés Et "IF05" un des items affichés Et "LO10" un des items affichés Et "IF31" un des items affichés Et "Nom de l'université" une des rubriques développées Et le sélecteur développé Et la flèche dévelopée Quand on sélectionne la rubrique "UTT" Et on sélectionne "Semestre" Et on voudrais mettre en ordre "croissant" Alors je vois en ordre la liste |Items| |GE04| |IF05| |IF31| |LO10|

benel commented 4 years ago

@HONGXinY

Effectivement, pour vérifier que les éléments sont dans l'ordre, il faut mettre les éléments triés dans le même Alors (avec un tableau comme vous le faites, ou dans la même chaîne de caractère avec un séparateur). Par contre, Il y a un problème avec votre Quand, l'action doit correspondre à votre fonctionnalité donc au changement de l'ordre de tri.

Autrement dit :

Soit une sélection donnée (il est en effet déconseillé de faire le test sur l'ensemble des éléments pour éviter de trop charger le serveur de test). Vous avez les éléments dans un ordre donné. Quand vous changez le critère de tri. Alors les éléments apparaissent dans un ordre différent.

yiyi1998 commented 4 years ago

Bonjour Monsieur,

Soit on sélectionne la rubrique “UTT” Et "GE34" un des items affichés Et "IF05" un des items affichés Et on met en ordre "croissant" Et on a en ordre la liste |Items| |GE34| |IF05| Quand on voudrait mettre en ordre “décroissant” Alors on voit en ordre la liste |Items| |IF05| |GE34|

Est-ce que cela vous semble mieux?

HONGXinY commented 4 years ago

@benel D'accord, donc on met le 'sélectionne la rubrique UTT' dans le 'soit' comme le quel yiyi a commenté, et dans le 'quand' on choisi le 'semestre' et 'croissant/décrossant' pour définir l'ordre qu'on veux ? image

benel commented 4 years ago

@yiyi1998

Et on met en ordre "croissant"

Non, ça c'est l'action. Ça doit être un Quand.

Et on a en ordre la liste |Items| |GE34| |IF05|

Non, ça c'est la conséquence. Ça doit être dans un Alors.

Quand on voudrait mettre en ordre “décroissant” Alors on voit en ordre la liste |Items| |IF05| |GE34|

Dans les scénarios Gherkin, on ne peut pas avoir plusieurs actions. Si vous voulez en tester plusieurs, il faut écrire plusieurs scénarios.

benel commented 4 years ago

Et on met en ordre "croissant"

Par ailleurs, ce qui est important ce n'est pas "croissant" ou "décroissant" (vous n'êtes pas obligé de l'implémenter, moi, à votre place, je ne l'implémenterais pas tant qu'il n'y a pas de ticket qui le demande clairement), le titre du ticket c'est "Sort items according to the values of a given attribute". Autrement dit, ce qui compte c'est l'attribut sur lequel va être fait le tri : dans les maquettes je vois par exemple le "pays" et le "semestre".

HONGXinY commented 4 years ago

Merci ! Selon ce que je comprends, je change le code comme ci-dessous (pour le porphyry)

Soit "vitraux" le portfolio ouvert Et "SM 001 m" un des items affichés Et "SM 001 n" un des items affichés Et "SR 005" un des items affichés Et "Datation" une des rubriques développées Et la rubrique "XIXe s." choisi (dans notre projet, ajouter Quand on sélectionne "Semestre" ) Alors je vois en ordre la liste |Items| |SM 001 m| |SM 001 n| |SR 005|

Dans le context.rb Soit("la rubrique {string} choisi") do |topic| click_on topic end

Est-ce que c'est mieux comme ça ?

benel commented 4 years ago

@HONGXinY Je ne comprends pas bien votre proposition.

Soit "vitraux" le portfolio ouvert Et "SM 001 m" un des items affichés Et "SM 001 n" un des items affichés Et "SR 005" un des items affichés Et "Datation" une des rubriques développées Et la rubrique "XIXe s." choisi

Là on est dans un tout autre domaine d'application... On est très loin des UE !

Quand on sélectionne "Semestre"

OK.

Alors je vois en ordre la liste |Items| |SM 001 m| |SM 001 n| |SR 005|

Pourquoi vous ne gardez pas (pour l'instant) votre exemple avec des UE ?

Notez qu'il faudrait le même genre de phrase pour le Soit, ce qui permettrait de voir la différence d'ordre entre les deux (avant, après).

Dans le context.rb Soit("la rubrique {string} choisi") do |topic| click_on topic end

Cette phrase vous n'avez pas besoin de la définir, elle existe déjà (et elle est même plus générique). Par contre, il faut l'instancier dans votre scénario par exemple avec UTT comme l'avait fait @yiyi1998 dans son scénario.

benel commented 4 years ago

@HONGXinY @yiyi1998 On va faire autrement...

  1. Donnez moi les intitulés (et non les codes) de plusieurs UE de l'UTT (mettons 5), dont certaines sont à l'automne et d'autres au printemps et triez en fonction de cet intitulé.
  2. Donnez moi la liste de ces mêmes intitulés mais triés maintenant en fonction de leur semestre.
yiyi1998 commented 4 years ago

Liste d’UEs triés par intitulé

IF05 LO02 LO07 LO10 NF16

Liste d’UEs triés par semestre

(Automne) LO02 NF16 (Printemps) IF05 LO07 LO10

HONGXinY commented 4 years ago

Ici c'est la partie de tester dans le porphyry pour vérifier si la fonction marche, et si oui je changerai les noms des items qui correspondent 'UTT' et des cours

Soit "vitraux" le portfolio ouvert Et "SM 001 m" un des items affichés Et "SM 001 n" un des items affichés Et "SR 005" un des items affichés Et "Datation" une des rubriques développées Et la rubrique "XIXe s." choisi

J'ai pas compris cette phrase ...

Notez qu'il faudrait le même genre de phrase pour le Soit, ce qui permettrait de voir la différence d'ordre entre les deux (avant, après).

benel commented 4 years ago

Liste d’UEs triés par intitulé : IF05 LO02 LO07 LO10 NF16 Liste d’UEs triés par semestre (Automne) LO02 NF16 (Printemps) IF05 LO07 LO10

Merci @yiyi1998

Il faudrait les titres et non les codes...

Par contre ce que je trouve TRÈS intéressant, c'est qu'effectivement trier par semestre nécessite une section par semestre ("Automne", "Printemps"). Ça me semble absolument nécessaire dans l'interface et les tests (d'autant plus qu'on ne sait pas si à l'intérieur d'une section les items sont triés et comment).

yiyi1998 commented 4 years ago

Bonjour Monsieur,

"Il faudrait les titres et non les codes"

Est-que ça veut dire : pas "IF05" mais "Qualité du logiciel" ?

Merci

benel commented 4 years ago

Est-que ça veut dire : pas "IF05" mais "Qualité du logiciel" ?

Tout à fait @yiyi1998.

HONGXinY commented 4 years ago

Voici le scénario du projet

Scénario: Sort items according to the values of a given attribute

Soit " CATALOGUE DE COURS" le portfolio ouvert Et "Qualité du logiciel" un des items affichés Et "Principe et pratique de la programmation objets" un des items affichés Et " Technologies du web" un des items affichés Et "Design patterns pour systèmes orientés services" un des items affichés Et "Bases de données" un des items affichés Et "Nom de l'université" une des rubriques développées Et on sélectionne la rubrique "UTT" Quand on sélectionne le sélecteur "Semestre" Alors je vois en ordre la liste |Items| |Bases de données| |Principe et pratique de la programmation objets| |Design patterns pour systèmes orientés services| |Qualité du logiciel| |Technologies du web|

HONGXinY commented 4 years ago

Voici les deux ajouts dans les fichier.rb

event.rb Quand("on sélectionne le sélecteur {string}") do |attribut| page.all('div.selectAttributes select') do |select| select attribut, from: select.id end end

outcome.rb Alors("je vois en ordre la liste") do |table| results=[['Items']]+page.all('div.Item div').map do |div| [div.text] end table.diff!(results) end

Merci de vérifier

garnier5 commented 4 years ago

@HONGXinY je pense que tu devrais rédiger les mêmes tests pour les vitraux Et ensuite tu pourras faire une demande d’intégration 😉

garnier5 commented 4 years ago

Travis, l’outil d’intégration continue, réalise ses tests avec une source de données correspondant aux vitraux : argos2.test.hypertopic.org Les tests avec les UE ne pourront pas être accepté par Travis