vidjil issueshttps://gitlab.inria.fr/vidjil/vidjil/-/issues2021-11-23T16:44:58+01:00https://gitlab.inria.fr/vidjil/vidjil/-/issues/2492mutliple_scatterplot : id des clones dans le dom2021-11-23T16:44:58+01:00Mathieu Giraudmutliple_scatterplot : id des clones dans le domDiscussion avec @heto et @RyanHerb : un des soucis vu par les tests fonctionnels (voir en particulier `clone_in_scatterplot` dans les tests) est qu'on va avoir plusieurs objets avec le même id type `circle45`. Ce n'est pas bien, des effe...Discussion avec @heto et @RyanHerb : un des soucis vu par les tests fonctionnels (voir en particulier `clone_in_scatterplot` dans les tests) est qu'on va avoir plusieurs objets avec le même id type `circle45`. Ce n'est pas bien, des effets bizarres peuvent survenir.
* Créer des ids différents ? `0circle45` ? Demande d'avoir un identifiant par `sp`.
* Utiliser des classes au lieu des ids ? Mais souci quand on clique dessus, est-on capable de savoir où on est ?https://gitlab.inria.fr/vidjil/vidjil/-/issues/2475Réduire le nombre de requêtes pour la requête Sample_Set2024-02-06T11:57:18+01:00Ryan HerbertRéduire le nombre de requêtes pour la requête Sample_SetDans la même veine que #2439 il serait bien de réduire la charge de la BDD, et d'essayer de rendre l'application plus rapide.
Voici ce qu'il se passe du point de vue de la BDD pour une requête de 4 patients (découpée en plusieurs blocks...Dans la même veine que #2439 il serait bien de réduire la charge de la BDD, et d'essayer de rendre l'application plus rapide.
Voici ce qu'il se passe du point de vue de la BDD pour une requête de 4 patients (découpée en plusieurs blocks à mesure que j'identifie les requêtes) :
``` SQL
SELECT 1
SET FOREIGN_KEY_CHECKS=1
SET sql_mode='NO_BACKSLASH_ESCAPES'
SELECT auth_membership.id, auth_membership.user_id, auth_membership.group_id FROM auth_membership WHERE (auth_membership.user_id = 1)
SELECT auth_group.id, auth_group.role, auth_group.description FROM auth_group WHERE (auth_group.id = 1)
SELECT auth_group.id, auth_group.role, auth_group.description FROM auth_group WHERE (auth_group.id = 2)
SELECT auth_group.id, auth_group.role, auth_group.description FROM auth_group WHERE (auth_group.id = 3)
commit
```
Ces requêtes sont de `self.has_permission()` dans `vidjil_accessible_query()`. Le but étant de vérifier si l'utilisateur a les accès "admin" pour cette table et cette action:
``` SQL
SELECT auth_membership.group_id FROM auth_membership WHERE (auth_membership.user_id = 1)
SELECT auth_permission.group_id FROM auth_permission WHERE (((auth_permission.name = 'read') AND (auth_permission.table_name = 'patient')) AND (auth_permission.record_id = 0))
```
Je suis admin, donc on renvoi tous les patients:
``` SQL
SELECT patient.id, patient.first_name, patient.last_name, patient.birth, patient.info, patient.id_label, patient.creator, patient.sample_set_id FROM patient WHERE (patient.id > 0) ORDER BY patient.id DESC LIMIT 51 OFFSET 0
```
Ici c'est un appel à `load_permissions()`, qui fait appel à `vidjil_accessible_query()` deux fois (pour charger tous les patients/runs/sets en mémoire et stocker la permission):
``` SQL
SELECT auth_membership.group_id FROM auth_membership WHERE (auth_membership.user_id = 1)
SELECT auth_permission.group_id FROM auth_permission WHERE (((auth_permission.name = 'read') AND (auth_permission.table_name = 'patient')) AND (auth_permission.record_id = 0))
SELECT patient.id FROM patient WHERE (patient.id > 0)
SELECT auth_membership.group_id FROM auth_membership WHERE (auth_membership.user_id = 1)
SELECT auth_permission.group_id FROM auth_permission WHERE (((auth_permission.name = 'admin') AND (auth_permission.table_name = 'patient')) AND (auth_permission.record_id = 0))
SELECT patient.id FROM patient WHERE (patient.id > 0)
```
Encore un appel à `load_permissions()` cette fois-ci pour les permissions anon. On n'est pas "admin" car les admins doivent voir les vrais noms de leurs patients :) :
``` SQL
SELECT auth_membership.group_id FROM auth_membership WHERE (auth_membership.user_id = 1)
SELECT auth_permission.group_id FROM auth_permission WHERE (((auth_permission.name = 'read') AND (auth_permission.table_name = 'patient')) AND (auth_permission.record_id = 0))
SELECT patient.id FROM patient WHERE (patient.id > 0)
SELECT auth_membership.group_id FROM auth_membership WHERE (auth_membership.user_id = 1)
SELECT auth_permission.group_id FROM auth_permission WHERE (((auth_permission.name = 'anon') AND (auth_permission.table_name = 'patient')) AND (auth_permission.record_id = 0))
SELECT auth_membership.group_id FROM auth_permission, auth_membership WHERE ((((auth_membership.user_id = 1) AND (auth_membership.group_id = auth_permission.group_id)) AND (auth_permission.record_id = 0)) AND (auth_permission.name = 'anon'))
SELECT patient.id FROM patient WHERE ((patient.id IN (SELECT auth_permission.record_id FROM auth_permission, auth_membership WHERE (((((auth_membership.user_id = 1) AND (auth_membership.group_id IN (1))) AND (auth_membership.group_id = auth_permission.group_id)) AND (auth_permission.name = 'access')) AND (auth_permission.table_name = 'patient')))) OR (patient.id IN (SELECT auth_permission.record_id FROM auth_permission, group_assoc, auth_membership WHERE ((((((auth_membership.user_id = 1) AND (auth_membership.group_id IN (1))) AND (auth_membership.group_id = group_assoc.second_group_id)) AND (group_assoc.first_group_id = auth_permission.group_id)) AND (auth_permission.name = 'access')) AND (auth_permission.table_name = 'patient')))))
```
Ici on a des vérifications d'existence effectuées dans les fonctions `can_view_info()`:
``` SQL
SELECT patient.id, patient.first_name, patient.last_name, patient.birth, patient.info, patient.id_label, patient.creator, patient.sample_set_id FROM patient WHERE (patient.id = 11) LIMIT 1 OFFSET 0
SELECT patient.id, patient.first_name, patient.last_name, patient.birth, patient.info, patient.id_label, patient.creator, patient.sample_set_id FROM patient WHERE (patient.id = 10) LIMIT 1 OFFSET 0
SELECT patient.id, patient.first_name, patient.last_name, patient.birth, patient.info, patient.id_label, patient.creator, patient.sample_set_id FROM patient WHERE (patient.id = 9) LIMIT 1 OFFSET 0
SELECT patient.id, patient.first_name, patient.last_name, patient.birth, patient.info, patient.id_label, patient.creator, patient.sample_set_id FROM patient WHERE (patient.id = 8) LIMIT 1 OFFSET 0
```
Ces requêtes sont relativement raisonnables. Récupèrent les noms des créateurs et les tailles des sample sets:
``` SQL
SELECT patient.id, auth_user.last_name FROM auth_user, patient WHERE ((patient.creator = auth_user.id) AND (patient.id IN (8,9,10,11)))
SELECT patient.id, sequence_file.size_file FROM sample_set_membership, patient, sequence_file WHERE (((sample_set_membership.sample_set_id = patient.sample_set_id) AND (sequence_file.id = sample_set_membership.sequence_file_id)) AND (patient.id IN (8,9,10,11)))
```
`load_config_information` contient deux `vidjil_accessible_query`:
``` SQL
SELECT auth_membership.group_id FROM auth_membership WHERE (auth_membership.user_id = 1)
SELECT auth_permission.group_id FROM auth_permission WHERE (((auth_permission.name = 'read') AND (auth_permission.table_name = 'config')) AND (auth_permission.record_id = 0))
SELECT auth_membership.group_id FROM auth_membership WHERE (auth_membership.user_id = 1)
SELECT auth_permission.group_id FROM auth_permission WHERE (((auth_permission.name = 'admin') AND (auth_permission.table_name = 'config')) AND (auth_permission.record_id = 0))
SELECT patient.id, config.name, config.id, fused_file.fused_file FROM patient, config, fused_file WHERE ((((patient.sample_set_id = fused_file.sample_set_id) AND (fused_file.config_id = config.id)) AND ((config.id >
0) OR (config.id > 0))) AND (patient.id IN (8,9,10,11)))
```
`load_permitted_groups()`:
``` SQL
SELECT patient.id, auth_group.role FROM auth_group, auth_permission, patient WHERE ((((((patient.id = auth_permission.record_id) OR (auth_permission.record_id = 0)) AND (auth_permission.table_name = 'patient')) AND (auth_permission.name = 'access')) AND (auth_group.id = auth_permission.group_id)) AND (patient.id IN (8,9,10,11)))
```
`load_anon_permissions()`... On n'avait pas fait ça plus haut ??? :
``` SQL
SELECT patient.id FROM auth_group, auth_permission, patient, auth_membership WHERE (((((((auth_permission.name = 'anon') AND (auth_permission.table_name = 'patient')) AND (patient.id = auth_permission.record_id)) AND (auth_group.id = auth_permission.group_id)) AND (auth_membership.user_id = 1)) AND (auth_membership.group_id = auth_group.id)) AND (patient.id IN (8,9,10,11)))
```
On charge tous les utilisateurs ? Pas trouvé dans le code... :
``` SQL
SELECT auth_user.id, auth_user.first_name, auth_user.last_name, auth_user.email, auth_user.password, auth_user.registration_key, auth_user.reset_password_key, auth_user.registration_id FROM auth_user WHERE (auth_user.id > 1)
```
Encore des vérifications d'existence... Pas trouvé l'endroit dans le code:
``` SQL
SELECT patient.id, patient.first_name, patient.last_name, patient.birth, patient.info, patient.id_label, patient.creator, patient.sample_set_id FROM patient WHERE (patient.id = 11) LIMIT 1 OFFSET 0
SELECT patient.id, patient.first_name, patient.last_name, patient.birth, patient.info, patient.id_label, patient.creator, patient.sample_set_id FROM patient WHERE (patient.id = 10) LIMIT 1 OFFSET 0
SELECT patient.id, patient.first_name, patient.last_name, patient.birth, patient.info, patient.id_label, patient.creator, patient.sample_set_id FROM patient WHERE (patient.id = 9) LIMIT 1 OFFSET 0
SELECT patient.id, patient.first_name, patient.last_name, patient.birth, patient.info, patient.id_label, patient.creator, patient.sample_set_id FROM patient WHERE (patient.id = 8) LIMIT 1 OFFSET 0
```
Vérifie si l'utilisateur a le droit de créer des patients/runs/sets :
``` SQL
SELECT auth_membership.group_id FROM auth_permission, auth_membership WHERE ((((auth_membership.user_id = 1) AND (auth_membership.group_id = auth_permission.group_id)) AND (auth_permission.record_id = 0)) AND (auth_permission.name = 'create'))
commit
```
A identifier:
``` SQL
SELECT 1
SET FOREIGN_KEY_CHECKS=1
SET sql_mode='NO_BACKSLASH_ESCAPES'
SELECT auth_membership.id, auth_membership.user_id, auth_membership.group_id FROM auth_membership WHERE (auth_membership.user_id = 1)
SELECT auth_group.id, auth_group.role, auth_group.description FROM auth_group WHERE (auth_group.id = 1)
SELECT auth_group.id, auth_group.role, auth_group.description FROM auth_group WHERE (auth_group.id = 2)
SELECT auth_group.id, auth_group.role, auth_group.description FROM auth_group WHERE (auth_group.id = 3)
commit
```Ryan HerbertRyan Herberthttps://gitlab.inria.fr/vidjil/vidjil/-/issues/2454Comparer des frameworks responsive2019-04-18T13:04:32+02:00Mathieu GiraudComparer des frameworks responsivecc @RyanHerb
Un côté Bootstrap/Foundation et un côte Skeleton/Xxxx/Xxxx...cc @RyanHerb
Un côté Bootstrap/Foundation et un côte Skeleton/Xxxx/Xxxx...https://gitlab.inria.fr/vidjil/vidjil/-/issues/2446Extraire une vue Info de builder.js2017-06-07T14:25:30+02:00Mathieu GiraudExtraire une vue Info de builder.jsQue fait vraiment `builder.js` ? `Builder` est une vue, qui crée entre autres l’élément `#info`, mais pas que :
* il y a au moins la gestion `#visu-separator`/`#vertical-separator` (qui serait différente dans un ~"client-responsive")...Que fait vraiment `builder.js` ? `Builder` est une vue, qui crée entre autres l’élément `#info`, mais pas que :
* il y a au moins la gestion `#visu-separator`/`#vertical-separator` (qui serait différente dans un ~"client-responsive").
* et il y a aussi des choses pour le menu `#top-container`
Afin d’y voir plus clair, une possibilité serait déjà d’extraire une nouvelle vue appelée `Info` qui ne s'occuperait que de `#info`.
@heto, comme tu as mentionné il y a pas longtemps les `separator` et les vues, est-ce que c’est quelque chose qui te tenterait ? Avant de coder, ce serait bien d'en rediscuter déjà ici.
@RyanHerb, comme tu as pas mal touché de chose dans ce fichier, tu as peut-être d'autres idées ?https://gitlab.inria.fr/vidjil/vidjil/-/issues/2444Customisation du client pour certains utilisateurs ou groupes2021-04-17T06:24:27+02:00Mathieu GiraudCustomisation du client pour certains utilisateurs ou groupesPour #1684 ou d'autres, on pourrait être tenté de faire des axes d'analyse pour certains utilisateurs, non visibles des autres. Plus généralement, on aimerait aussi parfois donner "certaines" fonctionnalités à certains utilisateurs, qu'e...Pour #1684 ou d'autres, on pourrait être tenté de faire des axes d'analyse pour certains utilisateurs, non visibles des autres. Plus généralement, on aimerait aussi parfois donner "certaines" fonctionnalités à certains utilisateurs, qu'elles soient en développement ou pertinentes pour quelques utilisateurs (#2043). Le `devel-mode` et le `beta-mode` peuvent être une solution, mais ce n'est pas très flexible...
On pourrait donner accès à un autre client, statique, quelque part, avec du `.js` modifié. Ou souhaite-t-on pouvoir donner un bout de `.js` en fonction de l'utilisateur ? Le ~server serait agnostique par rapport à cela, on aurait juste un `lille.js` quelque part ? ou bien en champ un base de données ?https://gitlab.inria.fr/vidjil/vidjil/-/issues/2439Diminuer les heartbeats sur la BDD2024-02-06T12:00:08+01:00Mikaël SalsonDiminuer les heartbeats sur la BDDDans #1985 nous avions vu que de nombreuses requêtes étaient exécutées par Web2py pour vérifier si de nouvelles tâches étaient arrivées dans la file d'attente. On avait diminué l'intervalle de vérification pour alléger la pression sur la...Dans #1985 nous avions vu que de nombreuses requêtes étaient exécutées par Web2py pour vérifier si de nouvelles tâches étaient arrivées dans la file d'attente. On avait diminué l'intervalle de vérification pour alléger la pression sur la base de données.
Le [manuel de Web2py](http://web2py.com/books/default/chapter/29/04/the-core#queue_task-) dit ceci :
> Since version 2.4.1 if you pass an additional parameter immediate=True it will force the main worker to reassign tasks. Until 2.4.1, the worker checks for new tasks every 5 cycles (so, 5*heartbeats seconds). If you had an app that needed to check frequently for new tasks, to get a snappy behaviour you were forced to lower the heartbeat parameter, putting the db under pressure for no reason. With immediate=True you can force the check for new tasks: it will happen at most as heartbeat seconds are passed
N'aurait-on pas intérêt à mettre `immediate=True` pour toutes nos tâches ? Il n'y a pas un nombre tel de jobs que cela justifie d'interroger la base de données toutes les 2 ou 3 secondes. Ça aura en plus l'intérêt d'avoir des tâches plus rapidement assignées pour nos utilisateurs ?
cc @RyanHerbhttps://gitlab.inria.fr/vidjil/vidjil/-/issues/2433algo : mauvaise dénomination du Vh si séquence trop courte2021-11-23T16:33:29+01:00Thonier Florianalgo : mauvaise dénomination du Vh si séquence trop courteLors de tests de QC à Rennes, nous nous sommes aperçu que vidjil retournait anormalement beaucoup de V4-34 là ou il aurait du y avoir des V4-(59-61, ...).
Il se trouve que sur la portion des segments V séquencée est trop courte. Ainsi, ...Lors de tests de QC à Rennes, nous nous sommes aperçu que vidjil retournait anormalement beaucoup de V4-34 là ou il aurait du y avoir des V4-(59-61, ...).
Il se trouve que sur la portion des segments V séquencée est trop courte. Ainsi, on a une identité de 100% sur plusieurs segments, et nous pourrions faire la distinction uniquement sur des données plus longues.
Cependant, nous n'avons aucun retour à l'écran sur la compatibilité de la séquence avec de nombreux sous-segments. Il faudrait donc intégrer un tel retour. C'est d'ailleurs ce que semble faire immonuSeq lorsqu'il y a des incertitudes. Il donne le segment V inconnu, et il a un champs étiquette du segmentV (segmentV-tiles) avec une liste de segments compatibles.
Concrètement, pour de la clinique, on sais que le CDR3 que l'on trouve est bon, mais le design de l'AJO peut être biaisé par cette erreur. Pour la recherche, l’interprétation aussi, puisque nombre de séquences se retrouvent finalement regroupées sous les même segments alors qu'ils s sont peut-être différents dnas la séquence manquante (et n'ont donc pas la même signification biologique).https://gitlab.inria.fr/vidjil/vidjil/-/issues/2426Ordre des chargements pour app.js/require.js2021-11-23T16:35:29+01:00Mathieu GiraudOrdre des chargements pour app.js/require.js@RyanHerb, dans 2c92e6e2, tu as amélioré l'ordre de chargement dans `app.js` pour #2412.
Est-ce que tu pourrais en profiter pour faire une autre passe pour se demander si tout est bien dans l'ordre ?
Par exemple, faudrait-il charger `m...@RyanHerb, dans 2c92e6e2, tu as amélioré l'ordre de chargement dans `app.js` pour #2412.
Est-ce que tu pourrais en profiter pour faire une autre passe pour se demander si tout est bien dans l'ordre ?
Par exemple, faudrait-il charger `model` et `model_loader` avant le reste ? D'autres choses ?
Si on fait cela, est-ce que cela aurait des conséquences sur la performance ?
Au passage, dans 6399680 j'ai mis à jour `require.js`, apparament cela a marché du premier coup.Ryan HerbertRyan Herberthttps://gitlab.inria.fr/vidjil/vidjil/-/issues/2401Intégration de Axes() dans m (Model)2022-06-21T13:35:39+02:00Ghost UserIntégration de Axes() dans m (Model)Avec le temps, on sera sans doute de plus en plus amené à utiliser les axes fournis par `Axes.available`.
Mais il faut pour cela écrire quelque chose comme
```js
(new Axes(this.m)).available()
```
(avec souvent d'autres choses derrière...Avec le temps, on sera sans doute de plus en plus amené à utiliser les axes fournis par `Axes.available`.
Mais il faut pour cela écrire quelque chose comme
```js
(new Axes(this.m)).available()
```
(avec souvent d'autres choses derrière qui plus est). Ou bien la stocker dans une variable, mais qui ne sert pas vraiment.
Devoir créer une instance de `Axes` à la volée de cette façon à chaque fois ne me paraît pas très pertinent/élégant, notamment dans la mesure où elle peut tout à fait être unique, comme pour les vues.
Je me demande donc si il ne serait pas intéressant d'en faire un attribut de `Model`, `m.ax` par exemple, pour pouvoir la récupérer facilement.https://gitlab.inria.fr/vidjil/vidjil/-/issues/2357segmenteur, gènes VDJ : quels objets créer ?2017-05-15T17:27:02+02:00Mathieu Giraudsegmenteur, gènes VDJ : quels objets créer ?Réflexion technique pour #1925/#2137. Comment rajouter les gènes VDJ dans le segmenteur ?
- **Créer des clones.** Ces clones seraient créés (et supprimés) à la volée.
Non quantifiables (type #1921), mais aussi non affichées dans liste/...Réflexion technique pour #1925/#2137. Comment rajouter les gènes VDJ dans le segmenteur ?
- **Créer des clones.** Ces clones seraient créés (et supprimés) à la volée.
Non quantifiables (type #1921), mais aussi non affichées dans liste/plot/graphe. Peut-être même non sélectionnables et non sélectionnés (mais le segmenteur les affiche). En tout cas cela permet une vue uniforme clones/gènes, les séquences s'affichent naturellement dans le segmenteur, modulo #2354/#2355. C'est l’occasion (pas facile) d’aller au bout de #1921 et de faire que les "clones" sont des objets génériques affichés ou pas dans certaines vues. Voir aussi ce qui s'affiche "à gauche" de la séquence (#1763/#2175).
- **Étendre highlight.**
Ce qui concerne ci-dessus les vues autre que le segmenteur ne se retrouve pas (mais on perd la possibilité d’utiliser les gènes VDJ dans d'autres vues.). Pour l'instant les highlights sont attachés à un clone : #2354/#2355 demandent alors une refonte complète (pas facile) de l'affichage des highlights (ce qui peut être une bonne chose), mais on risque de perdre la signification d'un highlight. Nécessite #1982 (quoique, si ce sont des séquenes de même taille), mais pas de soucis pour #1763/#2175.
- **Créer un nouvel objet à la fois pour les clones et les gènes VDJ.**
Cet objet "sequence" pourrait ressembler à un highlight étendu (mais les highlights resteraient par clone/gène VDJ, plus cohérent). Uniformise l'affichage des séquences comme dans la première solution mais ne nécessite pas de gérer les autres vues à la #1921. Demande tout de même de réfléchir à #1763/#2175.
Dans tous les cas, implique une certaine dose de ~"dev-refactor".https://gitlab.inria.fr/vidjil/vidjil/-/issues/2351Comment désactiver un compte ? Le retirer d'un groupe ?2020-06-10T22:16:52+02:00Mikaël SalsonComment désactiver un compte ? Le retirer d'un groupe ?Discussion avec @flothoni à propos d'un compte utilisateur à désactiver :
> pour le compte […] qui doit être
> désactivé, on peux se contenter de lui retirer les droits d'accès à tous
> les groupes sans pour autant lui effacé son c...Discussion avec @flothoni à propos d'un compte utilisateur à désactiver :
> pour le compte […] qui doit être
> désactivé, on peux se contenter de lui retirer les droits d'accès à tous
> les groupes sans pour autant lui effacé son compte non ? Cela assure un
> backup si pour une raison ou une autre elle revient à avoir besoin d'un
> accès à son compte ?
>
> En fait, ça me pose une seconde question. Si elle est dans plusieurs
> groupes, le sien et celui de [son hôpital], comment sont réattribué ses
> fichiers si on l’efface ou la supprime du compte de [son hôpital]?
Quel processus pour désactiver un compte ? Le supprimer du groupe de son hôpital ne permettrait plus à son hôpital d'accéder aux fichiers uploadés par l'utilisatrice. On ne peut pas retirer tout droit à l'utilisatrice car les droits pertinents ici sont ceux du groupe.
Faut-il supprimer son mot de passe pour empêcher toute connection ?
@RyanHerb, expert des groupes ?https://gitlab.inria.fr/vidjil/vidjil/-/issues/2327Export csv : autres infos2022-06-20T17:03:49+02:00Mathieu GiraudExport csv : autres infosOn n'a pas touché à l'export csv depuis plus de deux ans (e8d2913, a8b354b4, f6de8a5b6e, de79ac2a).
Profiter de #2326 pour éventuellement rajouter d'autres choses.
Productivité ? Nom original ? D'autres idées ?
cc @RyanHerb @mikael-sOn n'a pas touché à l'export csv depuis plus de deux ans (e8d2913, a8b354b4, f6de8a5b6e, de79ac2a).
Profiter de #2326 pour éventuellement rajouter d'autres choses.
Productivité ? Nom original ? D'autres idées ?
cc @RyanHerb @mikael-shttps://gitlab.inria.fr/vidjil/vidjil/-/issues/2259Lancer tous les tests should-vdj avec une seule instance de Vidjil ?2022-02-16T16:22:00+01:00Mikaël SalsonLancer tous les tests should-vdj avec une seule instance de Vidjil ?J'anticipe que les tests avec Aho seront plus longs car :
1. la construction de l'automate est plus longue que de mettre des k-mers dans une table ;
2. la destruction de l'automate est assez longue (il faut parcourir l'automate en profo...J'anticipe que les tests avec Aho seront plus longs car :
1. la construction de l'automate est plus longue que de mettre des k-mers dans une table ;
2. la destruction de l'automate est assez longue (il faut parcourir l'automate en profondeur pour le détruire).
Ce n'est pas un problème en pratique car c'est bien l'étape d'analyse des données qui dominera largement le temps. Mais c'est un problème pour les tests car Vidjil est lancé très souvent avec un rechargement à chaque fois des germlines, surtout pour les should-vdj. Pourrait-on faire un gros fichier .fa concaténant tous les should-vdj et lancer Vidjil une seule fois dessus ?
cc @magiraudhttps://gitlab.inria.fr/vidjil/vidjil/-/issues/2247Inventaire des warnings dans le fichier .vidjil et ailleurs2021-02-03T09:08:25+01:00Mathieu GiraudInventaire des warnings dans le fichier .vidjil et ailleursPour l'instant, on a quelques warnings par clone qui sont affichés, côté ~client, dans `builder.js`. On pourrait avoir un mécanisme plus général, pour afficher dans le ~client des warnings. Nous avons ajouté un champ `warn`) dans le `.v...Pour l'instant, on a quelques warnings par clone qui sont affichés, côté ~client, dans `builder.js`. On pourrait avoir un mécanisme plus général, pour afficher dans le ~client des warnings. Nous avons ajouté un champ `warn`) dans le `.vidjil, que ce soit par clone ou en global #2916. Mais cela ne suffit pas pour les ~"server-pre-process"...
Inventaire des warnings possibles, à compléter / discuter / implémenter -> https://gitlab.inria.fr/vidjil/vidjil/blob/dev/doc/warnings.md
cc @mikael-s @RyanHerb @flothoniThonier FlorianThonier Florianhttps://gitlab.inria.fr/vidjil/vidjil/-/issues/2175Liste et segmenteur : affichage flexible d'axes2017-05-11T13:27:32+02:00Mathieu GiraudListe et segmenteur : affichage flexible d'axesOn en a déjà parlé plusieurs fois, mais on vient de se rendre compte avec @RyanHerb que cela pourrait être vraiment très général.
On souhaiterait pouvoir afficher n'importe quel axe dans la liste ou le segmenteur. Pour l'instant, à côté...On en a déjà parlé plusieurs fois, mais on vient de se rendre compte avec @RyanHerb que cela pourrait être vraiment très général.
On souhaiterait pouvoir afficher n'importe quel axe dans la liste ou le segmenteur. Pour l'instant, à côté du nom du clone, on affiche la taille, le tag, et éventuellement d'autres choses dans le segmenteur (notamment la productivité). On pourrait avoir des listes pour choisir les axes à afficher (et certians axes ont des affichages / contrôles particuliers, comme les étoiles de tag.
En lien avec #1763 et #2174.
cc @mikael-s @flothonihttps://gitlab.inria.fr/vidjil/vidjil/-/issues/2131Des workers meurent silencieusement2022-06-20T15:04:27+02:00Mikaël SalsonDes workers meurent silencieusementSur vda nous n'avons que deux workers en ce moment au lieu des 4 paramétrés. Qu'est-ce qui explique ces pertes ? Les workers ne sont pas supposés se relancer à leur décès ?
cc @magiraud @RyanHerbSur vda nous n'avons que deux workers en ce moment au lieu des 4 paramétrés. Qu'est-ce qui explique ces pertes ? Les workers ne sont pas supposés se relancer à leur décès ?
cc @magiraud @RyanHerbhttps://gitlab.inria.fr/vidjil/vidjil/-/issues/2100Docker: fournir un bon moyen de changer certains mots de passe2017-10-25T04:12:33+02:00Ryan HerbertDocker: fournir un bon moyen de changer certains mots de passeLorsqu'on installe la vidjil il y a un certain nombre de mots de passe ou fichiers d'authentification/certificats qui sont créés, auxquels l'utilisateur doit fournir une entrée. Notamment le certificat ssl par défaut, et le mot de passe ...Lorsqu'on installe la vidjil il y a un certain nombre de mots de passe ou fichiers d'authentification/certificats qui sont créés, auxquels l'utilisateur doit fournir une entrée. Notamment le certificat ssl par défaut, et le mot de passe web2py.
Lors de la phase de build de l'image docker des valeurs par défaut ont dû être fournies car on n'a pas la main pour demander des entrées auprès de l'utilisateur.
Mais il n'y a pas encore de moyen facile pour les changer. Pour les certificats ssl il s'agirait d'ajouter un volume à la configuration docker-compose. Pour le mot de passe web2py il s'agirait de traiter le fichier parameters_443.py comme les autres fichiers de conf, comme conf.js et defs.py et fournir un script pour changer le mot de passe.
@mikael-s @magiraudRyan HerbertRyan Herberthttps://gitlab.inria.fr/vidjil/vidjil/-/issues/2062Authentification par LDAP2021-10-22T11:07:25+02:00Thonier FlorianAuthentification par LDAPEvoqué au CHU de Rennes :
Possibilité de passer par un system d'authentification par LDAP.
Celui-ci permettrait de révoquer ou autoriser les accès plus simplement sans avoir à gérer la création de compte pour l'admin local.
D'après ...Evoqué au CHU de Rennes :
Possibilité de passer par un system d'authentification par LDAP.
Celui-ci permettrait de révoquer ou autoriser les accès plus simplement sans avoir à gérer la création de compte pour l'admin local.
D'après eux, relativement répandu comme système de gestion des accès. Cela dit, pas obligatoire du tout.
Pour l'application à Vidjil, il faudrait quand meme que l'ensemble des comptes pointent vers un meme groupe d'utilisateurs pour partager les données et résultats de patients.
@magiraud @mikael-s @RyanHerbmarc duezmarc duezhttps://gitlab.inria.fr/vidjil/vidjil/-/issues/1955Les identifiants de clones ne sont pas uniques pour MiXCR2016-11-29T14:42:33+01:00Vidjil TeamLes identifiants de clones ne sont pas uniques pour MiXCRPour l'instant on a CDR3, gène V, gène J. Si je me souviens bien ce que nous avait dit Shugay, il manque les hypermutations. Est-ce que cela suffira ? Ou alors faut-il fusionner les ID identiques dans fuse.py (et non pas en prendre aléat...Pour l'instant on a CDR3, gène V, gène J. Si je me souviens bien ce que nous avait dit Shugay, il manque les hypermutations. Est-ce que cela suffira ? Ou alors faut-il fusionner les ID identiques dans fuse.py (et non pas en prendre aléatoirement un) ?
***
J'ai enlevé MiXCR des configs publiques puisqu'en l'état les résultats risquent d'être incorrects : ce qui est le cas pour notre fichier de démo où MiXCR ne voyait pas la rechute… en fait il semblerait plutôt que ce soit de notre faute.
***
ping : normalement tout est bon ?
***
Ces clones sont maintenant fusionnés par la sortie au format Vidjil.
***
merci
***
@magiraud @RyanHerb @mikael-shttps://gitlab.inria.fr/vidjil/vidjil/-/issues/1950Trouver une autre méthode de scheduling, indépendante de web2py2022-06-20T11:59:42+02:00Vidjil TeamTrouver une autre méthode de scheduling, indépendante de web2py(Discuté lors de la Rando 2016)
Un scheduler idéal devrait pouvoir avoir :
1) des priorités fines (petits jobs passent devant gros jobs) (et aussi users Platinium :-)
2) une suspension de tâches
3) une assignation fine de certains (gr...(Discuté lors de la Rando 2016)
Un scheduler idéal devrait pouvoir avoir :
1) des priorités fines (petits jobs passent devant gros jobs) (et aussi users Platinium :-)
2) une suspension de tâches
3) une assignation fine de certains (groupes de) workers à certaines tâches
2) ou 3) permettrait de lancer des choses annexes et rapides (type FineSegmenter ou compare patients ou ...) même si des gros Vidjil (ou autres) tournent
Enfin, penser tout cela dans le cadre d'un "noeud de calcul", possiblement indépendant du serveur web. Le serveur de calcul ne reçoit que des lignes de commande à exécuter et à accès aux fichiers nécessaires par un montage.
Rien d'urgent, à réfléchir posément dans les prochains mois.
***
Task spooler: http://vicerveza.homeunix.net/~viric/soft/ts/ présente les fonctionnalités majeures que nous cherchons (tâches interdépendantes, changement d'ordre dans la file, etc), mais n'a pas d'API pour s'en servir en réseau.
***
@RyanHerb @Duez