Catégories au lieu de répertoires, ou le système de fichiers sémantique pour Linux

La classification des données en elle-même est un sujet de recherche intéressant. J'aime collecter des informations qui semblent nécessaires et j'ai toujours essayé de créer des hiérarchies de répertoires logiques pour mes fichiers, et un jour dans un rêve, j'ai vu un programme magnifique et pratique pour attribuer des balises aux fichiers, et j'ai décidé que je ne pourrais pas vivre comme ça plus longtemps.

Le problème des systèmes de fichiers hiérarchiques

Les utilisateurs sont souvent confrontés au problème de choisir où enregistrer le prochain nouveau fichier et au problème de trouver leurs propres fichiers (parfois les noms de fichiers ne sont pas du tout destinés à être mémorisés par une personne).

Les systèmes de fichiers sémantiques, qui sont généralement un complément au système de fichiers traditionnel, peuvent constituer une solution à cette situation. Les répertoires qu'ils contiennent sont remplacés par des attributs sémantiques, également appelés balises, catégories et métadonnées. J'utiliserai plus souvent le terme « catégorie », car... Dans le contexte des systèmes de fichiers, le mot « tag » est parfois un peu étrange, notamment lorsque des « sous-balises » et des « alias de balises » apparaissent.

L'attribution de catégories aux fichiers élimine en grande partie le problème du stockage et de la recherche d'un fichier : si vous vous souvenez (ou devinez) d'au moins une des catégories attribuées à un fichier, alors le fichier ne disparaîtra jamais de la vue.

Auparavant, ce sujet a été soulevé plus d'une fois sur Habré (temps, два, trois, quatre etc.), je décris ici ma solution.

Chemin vers la réalisation

Immédiatement après le rêve mentionné, j'ai décrit dans mon cahier l'interface de commande qui fournit le travail nécessaire avec les catégories. Ensuite, j'ai décidé que dans une semaine ou deux, je pourrais écrire un prototype en utilisant Python ou Bash, puis je devrais travailler sur la création d'un shell graphique dans Qt ou GTK. La réalité, comme toujours, s’est avérée bien plus dure et le développement a été retardé.

L'idée originale était tout d'abord de créer un programme avec une interface de ligne de commande pratique et concise qui créerait, supprimerait des catégories, attribuerait des catégories aux fichiers et supprimerait des catégories des fichiers. J'ai appelé le programme vitite.

Première tentative de création vitite n'a abouti à rien, puisque beaucoup de temps a commencé à être consacré au travail et à l'université. La deuxième tentative était déjà quelque chose : pour le mémoire de master, j'ai réussi à réaliser le projet prévu et même à réaliser un prototype du shell GTK. Mais cette version s’est avérée si peu fiable et peu pratique qu’il a fallu repenser beaucoup de choses.

En fait, j'ai moi-même utilisé la troisième version pendant très longtemps, après avoir transféré plusieurs milliers de mes fichiers dans des catégories. Cela a également été grandement facilité par la complétion bash implémentée. Mais certains problèmes, tels que le manque de catégories automatiques et la possibilité de stocker des fichiers du même nom, subsistaient, et le programme était déjà plié sous sa propre complexité. C'est ainsi que j'ai eu besoin de résoudre des problèmes complexes de développement logiciel : rédiger des exigences détaillées, développer un système de tests fonctionnels, étudier les instructions de packaging et bien plus encore. J'en suis maintenant à mon projet, pour que cette humble création puisse être présentée à la communauté libre. La gestion de fichiers spécifiques telle que la gestion à travers le concept de catégories soulève des questions et des problèmes inattendus, et pour les résoudre vitite a donné naissance à cinq autres projets autour de lui, dont certains seront mentionnés dans l'article. Jusqu'à maintenant vitite Je n'ai pas acheté de shell graphique, mais la commodité d'utiliser les catégories de fichiers à partir de la ligne de commande l'emporte déjà pour moi sur les avantages d'un gestionnaire de fichiers graphique classique.

Exemples d'utilisation

Commençons simplement : créez une catégorie :

vitis create Музыка

Ajoutons-y quelques compositions à titre d'exemple :

vitis assign Музыка -f "The Ink Spots - I Don't Want To Set The World On Fire.mp3"

Vous pouvez visualiser le contenu de la catégorie « Musique » à l'aide de la sous-commande « show » :

vitis show Музыка

Vous pouvez y jouer en utilisant la sous-commande « open ».

vitis open Музыка

Parce que Si nous n'avons qu'un seul fichier dans la catégorie « Musique », alors seul celui-là sera lancé. Dans le but d'ouvrir des fichiers avec leurs programmes par défaut, j'ai créé un utilitaire distinct vts-fs-ouvert (les outils standards comme xdg-open ou mimeopen ne me convenaient pas pour un certain nombre de raisons ; mais, le cas échéant, dans les paramètres, vous pouvez spécifier un autre utilitaire pour l'ouverture universelle de fichiers). Cet utilitaire fonctionne bien sur différentes distributions avec différents environnements de travail, je recommande donc de l'installer avec vitis.

Vous pouvez également spécifier directement le programme pour ouvrir les fichiers :

vitis open Музыка --app qmmp

Catégories au lieu de répertoires, ou le système de fichiers sémantique pour Linux

Créons plus de catégories et ajoutons des fichiers en utilisant « attribuer ». Si des fichiers sont affectés à des catégories qui n'existent pas encore, vous êtes invité à les créer. Une requête inutile peut être évitée en utilisant l'indicateur -yes.

vitis assign Программирование R -f "Введение в R.pdf" "Статистический пакет R: теория вероятностей и матстатистика.pdf" --yes

Nous souhaitons maintenant ajouter la catégorie « Mathématiques » au fichier « Package statistique R : théorie des probabilités et statistiques mathématiques.pdf ». Nous savons que ce fichier est déjà classé comme « R » et nous pouvons donc utiliser le chemin de catégorie du système Vitis :

vitis assign Математика -v "R/Статистический пакет R: теория вероятностей и матстатистика.pdf"

Heureusement, la complétion bash rend cela facile.

Voyons ce qui s'est passé, en utilisant l'indicateur --categories pour voir une liste de catégories pour chaque fichier :

vitis show R --categories

Catégories au lieu de répertoires, ou le système de fichiers sémantique pour Linux

Notez que les fichiers ont également été automatiquement classés par format, type (combine les formats) et extension de fichier. Ces catégories peuvent être désactivées si vous le souhaitez. Plus tard, je localiserai certainement leurs noms.

Ajoutons autre chose à « Mathématiques » pour plus de variété :

vitis assign Математика -f "Математический анализ - 1984.pdf" Перельман_Занимательная_математика_1927.djvu 

Et maintenant, les choses deviennent intéressantes. Au lieu de catégories, vous pouvez écrire des expressions avec les opérations d'union, d'intersection et de soustraction, c'est-à-dire utiliser des opérations sur des ensembles. Par exemple, l'intersection de « Math » avec « R » donnera lieu à un seul fichier.

vitis show R i: Математика

Soustrayons les références au langage « R » de « Mathématiques » :

vitis show Математика  R  #или vitis show Математика c: R

Nous pouvons combiner sans but la musique et le langage R :

vitis show Музыка u: R

L'indicateur -n vous permet de « extraire » les fichiers requis du résultat de la requête par nombres et/ou plages, par exemple : -n 3-7, ou quelque chose de plus compliqué : -n 1,5,8-10,13. C'est souvent utile avec la sous-commande open, qui permet d'ouvrir les fichiers souhaités à partir d'une liste.

Catégories au lieu de répertoires, ou le système de fichiers sémantique pour Linux

Alors que nous nous éloignons de l’utilisation d’une hiérarchie de répertoires conventionnelle, il est souvent utile d’avoir des catégories imbriquées. Créons une sous-catégorie « Statistiques » sous la catégorie « Mathématiques » et ajoutons cette catégorie au fichier approprié :

vitis create Математика/Статистика

vitis assign Математика/Статистика -v "R/Введение в R.pdf"

vitis show Математика --categories

Catégories au lieu de répertoires, ou le système de fichiers sémantique pour Linux

Nous pouvons voir que ce fichier a désormais la catégorie « Math/Statistiques » au lieu de « Math » (les liens supplémentaires sont suivis).

Aborder le chemin complet peut être peu pratique, créons un alias « global » :

vitis assign Математика/Статистика -a Статистика

vitis show Статистика

Catégories au lieu de répertoires, ou le système de fichiers sémantique pour Linux

Pas seulement des fichiers normaux

Liens Internet

Pour unifier le stockage de toute information, il serait utile, au minimum, de catégoriser les liens vers les ressources Internet. Et c'est possible :

vitis assign Хабр Цветоаномалия -i https://habr.com/ru/company/sfe_ru/blog/437304/ --yes

Un fichier avec l'en-tête de la page HTML et l'extension .desktop sera créé à un endroit spécial. Il s'agit du format de raccourci traditionnel sous GNU/Linux. Ces raccourcis sont automatiquement classés comme NetworkBookmarks.

Naturellement, des raccourcis sont créés pour être utilisés :

vitis open Цветоаномалия

L'exécution de la commande entraîne l'ouverture du lien nouvellement enregistré dans le navigateur. Des raccourcis classés vers des sources Internet peuvent remplacer les signets du navigateur.

Fragments de fichiers

Il est également utile d'avoir des catégories pour des morceaux de fichiers individuels. Ce n’est pas une mauvaise demande, hein ? Mais la mise en œuvre actuelle n’affecte jusqu’à présent que les fichiers texte brut, les fichiers audio et vidéo. Disons que vous devez marquer une certaine partie d'un concert ou un moment amusant dans un film, alors lorsque vous utilisez assign, vous pouvez utiliser les drapeaux -fragname, -start, -finish. Sauvons l'économiseur d'écran de DuckTales :

vitis assign vitis assign -c Заставки -f Duck_Tales/s01s01.avi --finish 00:00:59 --fragname "Duck Tales intro"

vitis open Заставки

En réalité, aucune découpe de fichier n'a lieu ; à la place, un fichier pointeur vers le fragment est créé, qui décrit le type de fichier, le chemin d'accès au fichier, le début et la fin du fragment. La création et l'ouverture de pointeurs vers des fragments sont déléguées à des utilitaires que j'ai spécialement conçus à cet effet - il s'agit de mediafragmenter et fragplayer. Le premier crée, le second ouvre. Dans le cas d'enregistrements audio et vidéo, le fichier multimédia est lancé d'une certaine position à une certaine position à l'aide du lecteur VLC, il doit donc également se trouver dans le système. Au début, je voulais faire cela en me basant sur mplayer, mais pour une raison quelconque, le positionnement au bon moment était très compliqué.
Notre exemple crée un fichier « Duck Tales intro.fragpointer » (il est placé dans un endroit spécial), puis lit un fragment depuis le début du fichier (puisque --start n'a pas été spécifié lors de la création) jusqu'à la marque des 59 secondes, après quoi VLC se ferme.

Un autre exemple est lorsque nous avons décidé de catégoriser une seule performance lors d'un concert d'un artiste célèbre :

vitis assign Лепс "Спасите наши души" -f Григорий Лепc - Концерт Парус - песни Владимира Высоцкого.mp4 --fragname "Спасите наши души" --start 00:32:18 --finish 00:36:51

vitis open "Спасите наши души"

Une fois ouvert, le fichier sera inclus dans la position souhaitée et se fermera après quatre minutes et demie.

Comment tout cela fonctionne + fonctionnalités supplémentaires

Stockage des catégories

Au tout début de la réflexion sur l'organisation d'un système de fichiers sémantiques, trois voies sont venues à l'esprit : via le stockage de liens symboliques, via une base de données, via une description en XML. La première méthode a gagné, parce que... d'une part, il est facile à mettre en œuvre et, d'autre part, l'utilisateur a la possibilité de consulter les catégories directement depuis le système de fichiers (et c'est pratique et important). Au début de l'utilisation vitite Le répertoire « Vitis » et le fichier de configuration « .config/vitis/vitis.conf » sont créés dans le répertoire personnel de l'utilisateur. Les répertoires correspondant aux catégories sont créés dans ~/Vitis, et des liens symboliques vers les fichiers originaux sont créés dans ces répertoires de catégories. Les alias de catégorie ne sont également que des liens vers celles-ci. Bien entendu, la présence du répertoire « Vitis » dans le répertoire personnel peut ne pas convenir à certaines personnes. Nous pouvons passer à n’importe quel autre endroit :

vitis service set path /mnt/MyFavoriteDisk/Vitis/

À un moment donné, il devient évident que cela n’a pas de sens de catégoriser des fichiers dispersés à différents endroits, puisque leur emplacement peut changer. Par conséquent, pour commencer, j'ai créé un répertoire pour moi-même, où j'ai bêtement tout vidé et lui ai donné toutes les catégories. Ensuite, j'ai décidé qu'il serait bien d'officialiser ce moment au niveau du programme. C'est ainsi qu'est apparue la notion d'« espace fichier ». Au début de l'utilisation vitite Cela ne ferait pas de mal de configurer immédiatement un tel emplacement (tous les fichiers dont nous avons besoin y seront stockés) et d'activer la sauvegarde automatique :

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Sans sauvegarde automatique, lors de l'utilisation de la sous-commande "assign", l'indicateur --save sera requis si vous souhaitez enregistrer le fichier ajouté dans l'espace fichier.

De plus, vous pouvez ajouter plusieurs espaces fichiers et modifier leurs priorités ; cela peut être utile lorsqu'il y a beaucoup de fichiers et qu'ils sont stockés sur des supports différents. Je n'envisagerai pas cette possibilité ici ; les détails peuvent être trouvés dans l'aide du programme.

Migration du système de fichiers sémantique

Quoi qu'il en soit, le répertoire et les espaces fichiers de Vitis peuvent théoriquement parfois se déplacer d'un endroit à l'autre. Pour que cela fonctionne, j'ai créé un utilitaire distinct éditeur de liens, qui peut modifier en bloc les liens, en remplaçant des parties du chemin par d'autres :

cp -r /mnt/MyFavoriteDisk/Vitis/ ~/Vitis
link-editor -d ~/Vitis/ -f /mnt/MyFavoriteDisk/Vitis/ -r ~/Vitis/ -R
cp -r /mnt/MyFavoriteDisk/Filespace/ ~/MyFiles
link-editor -d ~/Vitis/ -f /mnt/FlashDrive-256/Filespace/ -r ~/MyFiles -R

Dans le premier cas, après être passé de /mnt/MyFavoriteDisk/Vitis/ vers le répertoire personnel, les liens symboliques associés aux alias sont édités. Dans le second cas, après avoir modifié l'emplacement de l'espace fichier, tous les liens dans Vitis sont remplacés par de nouveaux conformément à la demande de remplacement d'une partie de leur chemin.

Catégories automatiques

Si vous exécutez la commande vitis service get autocategorization, vous pouvez voir que par défaut, les catégories automatiques sont attribuées par format (Format et Type) et extension de fichier (Extension).

Ceci est utile lorsque, par exemple, vous avez besoin de trouver quelque chose parmi des PDF ou de regarder ce que vous avez stocké depuis EPUB et FB2, vous pouvez simplement exécuter la requête

vitis show Format/MOBI u: Format/FB2

Il se trouve que les outils standards GNU/Linux tels que file ou mimetype ne me convenaient pas précisément parce qu'ils ne déterminent pas toujours correctement le format ; j'ai dû faire ma propre implémentation basée sur les signatures et les extensions de fichiers. De manière générale, le sujet de la définition des formats de fichiers est un sujet de recherche intéressant et mérite un article séparé. Pour l’instant, je peux dire que je n’ai peut-être pas assuré une véritable reconnaissance pour tous les formats dans le monde, mais en général, cela fonctionne déjà bien. Certes, EPUB définit désormais le format comme ZIP (en général, cela est justifié, mais en pratique, cela ne doit pas être considéré comme un comportement normal). Pour le moment, considérez cette fonctionnalité comme expérimentale et signalez tout bug. Dans des situations étranges, vous pouvez toujours utiliser des catégories d'extension de fichier, par exemple Extension/epub.

Si les catégories automatiques par format sont activées, les catégories automatiques qui regroupent certains formats par type sont également activées : « Archives », « Images », « Vidéo », « Audio » et « Documents ». Des noms localisés seront également créés pour ces sous-catégories.

Ce qui n'est pas dit

vitite Il s’est avéré être un outil très polyvalent et il est difficile de tout couvrir en même temps. Permettez-moi de mentionner brièvement ce que vous pouvez faire d'autre :

  • les catégories peuvent être supprimées et supprimées des fichiers ;
  • les résultats des requêtes d'expression peuvent être copiés dans le répertoire spécifié ;
  • les fichiers peuvent être exécutés en tant que programmes ;
  • La commande show a de nombreuses options, par exemple trier par nom/date de modification ou accès/taille/extension, afficher les propriétés des fichiers et les chemins d'accès aux originaux, permettre l'affichage des fichiers cachés, etc.
  • Lorsque vous enregistrez des liens vers des sources Internet, vous pouvez également enregistrer des copies locales de pages HTML.

Tous les détails peuvent être trouvés dans l’aide utilisateur.

Perspectives

Les sceptiques disent souvent que « personne ne définira ces balises lui-même ». En utilisant mon propre exemple, je peux prouver le contraire : j'ai déjà catégorisé plus de six mille fichiers, créé plus d'un millier de catégories et d'alias, et cela en valait la peine. Quand une équipe vitis open План ouvrez votre liste de tâches ou quand avec une seule commande vitis open LaTeX Lorsque vous ouvrez le livre de Stolyarov sur le système de mise en page LaTeX, il est déjà moralement difficile d'utiliser le système de fichiers « à l'ancienne ».

Sur cette base, plusieurs idées émergent. Par exemple, vous pouvez créer une radio automatique qui active de la musique thématique en fonction de la météo, des vacances, du jour de la semaine, de l'heure de la journée ou de l'année. Encore plus proche du sujet se trouve un lecteur de musique qui connaît les catégories et peut jouer de la musique par expression avec des opérations sur les catégories comme sur les ensembles. Il est utile de créer un démon qui surveillera le répertoire "Téléchargements" et proposera de catégoriser les nouveaux fichiers. Et, bien sûr, nous devrions créer un gestionnaire de fichiers sémantique graphique normal. Il était une fois, j'ai même créé un service Web pour l'entreprise pour l'utilisation collective des fichiers, mais ce n'était pas une priorité et est devenu hors de propos, même s'il atteignait un haut niveau de performance. (En raison de changements majeurs dans le vitite, il n'est plus utilisable.)

voici une petite démo

Catégories au lieu de répertoires, ou le système de fichiers sémantique pour Linux

Conclusion

Vitis n'est pas la première tentative visant à changer radicalement le style de travail avec les données, mais j'ai considéré qu'il était important de mettre en œuvre mes idées et de rendre l'implémentation accessible au public sous la licence GNU GPL. Pour plus de commodité, un paquet deb a été créé pour x86-64 ; il devrait fonctionner sur toutes les distributions Debian modernes. Il y a eu des difficultés mineures sur ARM (alors que tous les autres programmes liés à vitite, fonctionne bien), mais à l'avenir, un package de travail sera compilé pour cette plate-forme (armhf). J'ai arrêté de créer des packages RPM pour l'instant en raison de problèmes sur Fedora 30 et de la difficulté de se propager sur de nombreuses distributions RPM, mais des packages ultérieurs seront toujours créés pour au moins quelques-unes d'entre elles. En attendant, vous pouvez utiliser make && make install ou checkinstall.

Merci à tous pour votre attention ! J'espère que cet article et ce projet pourront être utiles.

Lien vers le référentiel du projet

Source: habr.com

Ajouter un commentaire