Die Klassifizierung von Daten ist an sich ein interessantes Forschungsthema. Ich sammle gerne Informationen, die notwendig erscheinen, und habe immer versucht, logische Hierarchien von Verzeichnissen für meine Dateien zu erstellen. Einmal im Traum sah ich ein schönes und praktisches Programm zum Zuweisen von Tags zu Dateien und entschied, dass es unmöglich war, so weiterzuleben.
Das Problem hierarchischer Dateisysteme
Benutzer haben häufig das Problem, auszuwählen, wo die nächste neue Datei gespeichert werden soll, und das Problem, ihre eigenen Dateien zu finden (manchmal sind die Dateinamen überhaupt nicht für die menschliche Speicherung vorgesehen).
Der Ausweg aus dieser Situation können semantische Dateisysteme sein, die normalerweise ein Add-On zu einem herkömmlichen Dateisystem darstellen. Die Verzeichnisse in ihnen werden durch semantische Attribute ersetzt, die auch als Tags, Kategorien und Metadaten bezeichnet werden. Ich werde den Begriff "Kategorie" häufiger verwenden als Im Kontext von Dateisystemen ist das Wort "Tag" manchmal seltsam, insbesondere wenn "Subtags" und "Tag-Aliase" angezeigt werden.
Durch das Zuweisen von Kategorien zu Dateien werden die Probleme beim Speichern und Suchen von Dateien weitgehend beseitigt: Wenn Sie sich an mindestens eine der einer Datei zugewiesenen Kategorien erinnern (oder diese erraten), wird die Datei nie aus den Augen verloren.
Früher bei Habré wurde dieses Thema mehr als einmal angesprochen ( eins , zwei , drei , vier usw.), hier beschreibe ich meine Entscheidung.
Implementierungspfad
Unmittelbar nach dem oben genannten Traum habe ich in einem Notizbuch die Befehlsoberfläche beschrieben, die die notwendige Arbeit mit Kategorien bietet. Dann habe ich beschlossen, dass Sie in ein oder zwei Wochen einen Prototyp mit Python oder Bash schreiben können, und dann müssen Sie daran arbeiten, eine grafische Shell auf Qt oder GTK zu erstellen. Die Realität stellte sich wie immer als viel strenger heraus, und die Entwicklung zog sich hin.
Die ursprüngliche Idee war, zunächst ein Programm mit einer praktischen und übersichtlichen Befehlszeilenschnittstelle zu erstellen, mit der Kategorien erstellt, gelöscht, Dateien Kategorien zugewiesen und Kategorien aus Dateien entfernt werden können. Ich habe das Programm Vitis genannt .
Der erste Versuch, eine Vitis zu verursachen, endete mit nichts, da viel Zeit zur Arbeit und zum College ging. Der zweite Versuch war schon etwas: Mit der Masterarbeit gelang es uns, das geplante Projekt abzuschließen und sogar einen Prototyp der GTK-Shell zu erstellen. Aber diese Version erwies sich als so unzuverlässig und unangenehm, dass ich viel überdenken musste.
Ich habe die dritte Version schon sehr lange selbst verwendet und mehrere tausend meiner Dateien in Kategorien übersetzt. Dies wurde unter anderem durch die implementierte Bash-Fertigstellung erheblich erleichtert. Einige Probleme, wie das Fehlen automatischer Kategorien und die Möglichkeit, gleichnamige Dateien zu speichern, blieben jedoch bestehen, und das Programm war bereits unter seiner eigenen Komplexität verbogen. So kam ich zu der Notwendigkeit, die Probleme bei der Entwicklung komplexer Software zu lösen: detaillierte Anforderungen schreiben, ein Funktionstestsystem entwickeln, die Verpackungsanweisungen studieren und vieles mehr. Jetzt bin ich zu einem Plan gekommen, damit diese bescheidene Schöpfung der freien Gemeinschaft präsentiert werden kann. Eine solche spezifische Dateiverwaltung, wie die Verwaltung durch das Konzept von Kategorien, berührt unerwartete Fragen und Probleme, und bei der Lösung dieser Probleme hat vitis fünf weitere Projekte um sich herum hervorgebracht, von denen einige im Artikel erwähnt werden. Bis jetzt hat vitis keine grafische Shell erworben, aber die Bequemlichkeit der Verwendung von Dateikategorien über die Befehlszeile deckt für mich bereits alle Vorteile des üblichen grafischen Dateimanagers ab.
Anwendungsbeispiele
Beginnen wir mit einer einfachen - erstellen Sie eine Kategorie:
vitis create
Fügen wir als Beispiel eine Komposition hinzu:
vitis assign -f "The Ink Spots - I Don't Want To Set The World On Fire.mp3"
Sie können den Inhalt der Kategorie Musik mit dem Befehl show anzeigen:
vitis show
Sie können es mit dem Unterbefehl "Öffnen" abspielen
vitis open
Weil Wir haben nur eine Datei in der Kategorie "Musik", dann wird nur sie gestartet. Zum Öffnen von Dateien mit ihren Programmen habe ich standardmäßig ein separates Dienstprogramm vts-fs-open erstellt (Standardtools wie xdg-open oder mimeopen passten aus mehreren Gründen nicht zu mir; wenn überhaupt, können Sie in den Einstellungen ein anderes Dienstprogramm zum universellen Öffnen von Dateien angeben). . Dieses Dienstprogramm funktioniert gut auf verschiedenen Distributionen mit unterschiedlichen Arbeitsumgebungen. Ich empfehle daher, es zusammen mit vitis zu installieren.
Sie können das Programm zum Öffnen von Dateien auch direkt angeben:
vitis open --app qmmp

Lassen Sie uns weitere Kategorien erstellen und Dateien mit "Zuweisen" hinzufügen. Wenn Dateien Kategorien zugeordnet sind, die noch nicht vorhanden sind, wird eine Anforderung für deren Erstellung ausgegeben. Eine unnötige Anforderung kann durch Verwendung des Flags --yes vermieden werden.
vitis assign R -f " R.pdf" " R: .pdf" --yes
Nun wollen wir der Kategorie "Statistisches Paket R: Wahrscheinlichkeitstheorie und Statistik .pdf" die Kategorie "Mathematik" hinzufügen. Wir wissen, dass diese Datei bereits die Kategorie "R" hat und können daher den kategorialen Pfad aus dem Vitis-System verwenden:
vitis assign -v "R/ R: .pdf"
Glücklicherweise macht die automatische Vervollständigung von Bash dies einfach.
Sehen Sie sich an, was mit dem Flag --categories passiert ist, um eine Liste der Kategorien für jede Datei anzuzeigen:
vitis show R --categories

Beachten Sie, dass den Dateien auch automatische Kategorien nach Format, Typ (kombiniert Formate) und Dateierweiterung zugewiesen wurden. Diese Kategorien sind optional deaktiviert. Später werde ich definitiv die Lokalisierung ihrer Namen vornehmen.
Zur Abwechslung werden wir der "Mathematik" noch etwas hinzufügen:
vitis assign -f " - 1984.pdf" ___1927.djvu
Und jetzt beginnt der Spaß. Anstelle von Kategorien können Sie Ausdrücke mit Operationen der Vereinigung, Schnittmenge und Subtraktion schreiben, dh Operationen für Mengen verwenden. Beispielsweise ergibt der Schnittpunkt von "Mathematik" mit "R" eine Datei.
vitis show R i:
Subtrahieren Sie von den "Mathematik" Verweisen auf die Sprache "R":
vitis show \\ R # vitis show c: R
Wir können die Musik und die R-Sprache nahtlos kombinieren:
vitis show u: R
Mit dem Flag -n können Sie die erforderlichen Dateien aus dem Abfrageergebnis nach Zahlen und / oder Bereichen "herausziehen", z. B. -n 3-7
oder komplizierter: -n 1,5,8-10,13
. Dies ist häufig beim Unterbefehl open hilfreich, mit dem Sie die benötigten Dateien aus der Liste öffnen können.

Obwohl wir uns von der üblichen Verzeichnishierarchie entfernen, ist es oft nützlich, verschachtelte Kategorien zu haben. Erstellen Sie eine Unterkategorie "Statistik" für die Kategorie "Mathematik" und fügen Sie diese Kategorie der entsprechenden Datei hinzu:
vitis create / vitis assign / -v "R/ R.pdf" vitis show --categories

Wir können sehen, dass diese Datei jetzt die Kategorie "Mathematik / Statistik" anstelle von "Mathematik" hat (zusätzliche Links werden verfolgt).
Der Zugriff auf den vollständigen Pfad kann unpraktisch sein. Erstellen Sie einen "globalen" Alias:
vitis assign / -a vitis show

Nicht nur normale Dateien
Internet-Links
Um die Speicherung von Informationen zu vereinheitlichen, wäre es zumindest nützlich, Links zu Internetressourcen zu kategorisieren. Und es ist möglich:
vitis assign -i https://habr.com/ru/company/sfe_ru/blog/437304/ --yes
An einer bestimmten Stelle wird eine Datei mit dem Header der HTML-Seite und der Erweiterung .desktop erstellt. Dies ist das traditionelle Verknüpfungsformat in GNU / Linux. Solche Verknüpfungen erhalten die automatische Kategorie NetworkBookmarks.
Natürlich werden Verknüpfungen erstellt, um sie zu verwenden:
vitis open
Die Ausführung des Befehls führt zum Öffnen des gerade gespeicherten Links im Browser. Kategorisierte Verknüpfungen zu Internetquellen können Browser-Lesezeichen ersetzen.
Dateifragmente
Es ist auch nützlich, Kategorien für einzelne Dateifragmente zu haben. Nettes Angebot, oder? Die derzeitige Implementierung betrifft jedoch nur normale Textdateien, Audio- und Videodateien. Angenommen, Sie müssen ein bestimmtes Stück eines Konzerts oder einen lustigen Moment im Film notieren. Wenn Sie Assign verwenden, können Sie die Flags --fragname, --start, --finish verwenden. Speichern Sie den Bildschirmschoner von Duck Tales:
vitis assign -c -f Duck_Tales/s01s01.avi --finish 00:00:59 --fragname "Duck Tales intro" vitis open
Tatsächlich findet kein Abschneiden von Dateien statt. Stattdessen wird ein Dateizeiger auf ein Fragment erstellt, der den Dateityp, den Pfad zur Datei sowie den Anfang und das Ende des Fragments beschreibt. Das Erstellen und Öffnen von Zeigern auf Fragmente wird an Dienstprogramme delegiert, die speziell für diese Zwecke von mir erstellt wurden - dies sind Mediafragmenter und Fragplayer. Der erste erstellt, der zweite öffnet sich. Bei Audio- und Videoaufnahmen erfolgt der Start einer Mediendatei von einer bestimmten zu einer bestimmten Position mit dem VLC-Player. Sie muss sich also auch im System befinden. Anfangs wollte ich das auf der Basis von mplayer machen, aber aus irgendeinem Grund war es dort sehr schief mit der Positionierung im richtigen Moment.
In unserem Beispiel wird die Datei "Duck Tales intro.fragpointer" erstellt (sie wird an einer bestimmten Stelle platziert), und dann wird ein Fragment vom Anfang der Datei (da --start beim Erstellen nicht angegeben wurde) bis zur Markierung in 59 Sekunden abgespielt. Danach wird VLC schließt.
Ein weiteres Beispiel: Wir haben beschlossen, eine separate Aufführung bei einem Konzert eines berühmten Künstlers zu kategorisieren:
vitis assign " " -f \ c\ -\ \ \ -\ \ \ .mp4 --fragname " " --start 00:32:18 --finish 00:36:51 vitis open " "
Wenn Sie die Datei öffnen, wird sie an der gewünschten Position eingefügt und nach viereinhalb Minuten geschlossen.
Wie das alles funktioniert + zusätzliche Funktionen
Kategoriespeicher
Ganz am Anfang meiner Überlegungen zur Organisation des semantischen Dateisystems habe ich drei Möglichkeiten gefunden: durch Speichern symbolischer Links, durch eine Datenbank, durch eine Beschreibung in XML. Die erste Methode hat gewonnen, weil Einerseits ist es einfach zu implementieren, und andererseits hat der Benutzer die Möglichkeit, Kategorien direkt aus dem Dateisystem heraus zu betrachten (und dies ist bequem und wichtig). Zu Beginn der Verwendung von vitis werden das Verzeichnis „Vitis“ und die Konfigurationsdatei „.config / vitis / vitis.conf“ im Home-Verzeichnis des Benutzers erstellt. ~ / Vitis erstellt Verzeichnisse, die Kategorien entsprechen, und in diesen Kategorien erstellen Verzeichnisse symbolische Links zu den Originaldateien. Kategorie-Aliase sind auch nur Links zu ihnen. Natürlich ist das Vorhandensein des Verzeichnisses "Vitis" im Ausgangsverzeichnis möglicherweise nicht für jemanden geeignet. Wir können an jeden anderen Ort wechseln:
vitis service set path /mnt/MyFavoriteDisk/Vitis/
Ab einem bestimmten Punkt wird deutlich, dass Dateien, die an verschiedenen Orten verstreut sind, nicht mehr kategorisiert werden können, da sich ihr Speicherort ändern kann. Deshalb habe ich für den Anfang ein Verzeichnis für mich erstellt, in dem ich dumm alles abgeladen und alles mit Kategorien versehen habe. Dann entschied er, dass es schön wäre, diesen Moment auf Software-Ebene zu formalisieren. So erschien das Konzept des "Dateibereichs". Zu Beginn der Verwendung von vitis würde es nicht schaden, einen solchen Ort sofort einzurichten (alle benötigten Dateien werden dort gespeichert) und die automatische Speicherung zu aktivieren:
vitis service add filespace /mnt/MyFavoriteDisk/Filespace/ vitis service set autosave yes
Ohne automatische Speicherung erfordert die Verwendung des Unterbefehls "Zuweisen" das Flag --save, wenn Sie die hinzugefügte Datei im Dateibereich speichern möchten.
Darüber hinaus können Sie mehrere Dateibereiche hinzufügen und deren Prioritäten ändern. Dies kann hilfreich sein, wenn viele Dateien vorhanden sind und diese auf verschiedenen Medien gespeichert sind. Hier werde ich diese Möglichkeit nicht berücksichtigen, Details finden Sie in der Hilfe zum Programm.
Migration des semantischen Dateisystems
Auf die eine oder andere Weise können sich das Vitis-Verzeichnis und die Dateibereiche theoretisch manchmal von Ort zu Ort bewegen. Damit es funktioniert, habe ich ein separates Dienstprogramm für den Link-Editor erstellt, mit dem Links massenweise bearbeitet und Teile des Pfads durch andere ersetzt werden können:
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
Im ersten Fall werden die mit den Aliasnamen verknüpften symbolischen Links bearbeitet, nachdem wir von / mnt / MyFavoriteDisk / Vitis / in das Ausgangsverzeichnis verschoben wurden. Im zweiten Fall werden nach dem Ändern des Speicherorts des Dateibereichs alle Links in Vitis entsprechend der Anforderung, einen Teil ihres Pfads zu ersetzen, in neue geändert.
Automatische Kategorien
Wenn Sie den vitis service get autocategorization
, sehen Sie, dass die Standardeinstellung für automatische Kategorien nach Format (Format und Typ) und Dateierweiterung (Erweiterung) erfolgt.
Dies ist nützlich, wenn Sie beispielsweise etwas in PDFs finden oder sich ansehen müssen, was Sie in MOBI und FB2 gespeichert haben. Sie können die Anforderung einfach ausführen
vitis show Format/MOBI u: Format/FB2
Es ist einfach so passiert, dass die Standard-GNU / Linux-Tools wie Datei oder Mimetyp nicht genau zu mir passten, weil sie das Format nicht immer richtig bestimmen. Ich musste meine eigene Implementierung basierend auf Dateisignaturen und -erweiterungen durchführen. Im Allgemeinen ist das Thema zur Bestimmung von Dateiformaten ein interessantes Forschungsthema und verdient einen separaten Artikel. Im Moment kann ich sagen, dass ich vielleicht nicht für alle Formate auf der Welt für echte Anerkennung gesorgt habe, aber im Allgemeinen funktioniert es momentan recht gut. Das EPUB-Format ist jetzt zwar als ZIP definiert (im Allgemeinen ist es gerechtfertigt, aber in der Praxis sollte dies nicht als normales Verhalten angesehen werden). Betrachten Sie diese Funktion bisher als experimentell und melden Sie Fehler. In seltsamen Situationen können Sie Kategorien immer nach Dateierweiterung verwenden, z. B. Erweiterung / epub.
Wenn automatische Kategorien nach Format enthalten sind, sind auch automatische Kategorien enthalten, die einige Formate nach Typ kombinieren: "Archive", "Bilder", "Video", "Audio" und "Dokumente". Für diese Unterkategorien werden auch lokalisierte Namen erstellt.
Was nicht gesagt wird
Vitis erwies sich als ein sehr facettenreiches Werkzeug, und es ist schwierig, alles auf einmal abzudecken. Erwähnen Sie kurz, was Sie sonst noch tun können:
- Kategorien können gelöscht und aus Dateien entfernt werden.
- Abfrageergebnisse für Ausdrücke können in das angegebene Verzeichnis kopiert werden.
- Dateien können als Programme ausgeführt werden;
- Der Befehl show bietet viele Optionen, z. B. Sortieren nach Name / Änderungsdatum oder Zugriff / Größe / Erweiterung, Anzeigen von Dateieigenschaften und Pfaden zu Originalen, Aktivieren der Anzeige versteckter Dateien usw.;
- Wenn Sie Links zu Internetquellen speichern, können Sie auch lokale Kopien von HTML-Seiten speichern.
Alle Details finden Sie in der Benutzerhilfe.
Perspektiven
Oft sagen Skeptiker, dass "niemand diese Tags selbst setzen wird". Anhand meines Beispiels kann ich das Gegenteil beweisen: Ich habe bereits mehr als sechstausend Dateien kategorisiert, mehr als tausend Kategorien und Aliase erstellt und es hat sich gelohnt. Wenn Sie eine Liste Ihrer Angelegenheiten mit einem vitis open
Team vitis open
oder wenn Sie Stolyarovs Buch über das LaTeX-Layoutsystem mit einem vitis open LaTeX
Team vitis open LaTeX
, ist es moralisch schwierig, das „altmodische“ Dateisystem zu verwenden.
Auf dieser Basis entstehen eine Reihe von Ideen. Sie können beispielsweise ein automatisches Radio erstellen, das Themenmusik entsprechend dem aktuellen Wetter, Feiertag, Wochentag, Tageszeit oder Jahr enthält. Noch nah am Thema ist ein Musik-Player, der sich mit Kategorien auskennt und Musik durch Ausdruck mit Operationen an Kategorien wie an Sets abspielen kann. Es ist nützlich, einen Daemon zu erstellen, der das Download-Verzeichnis verfolgt und die Kategorisierung neuer Dateien anbietet. Natürlich sollten Sie einen normalen grafischen semantischen Dateimanager erstellen. Einmal habe ich sogar einen Webdienst für das Unternehmen für die Dateifreigabe erstellt, der jedoch keine Priorität hatte und irrelevant wurde, obwohl er ein hohes Leistungsniveau erreichte. (Aufgrund der großen Veränderungen der Vitis selbst ist sie bereits unbrauchbar.)
Hier ist eine kleine Demonstration Fazit
Vitis ist nicht der erste Versuch, den Arbeitsstil mit Daten radikal zu ändern, aber ich hielt es für wichtig, meine Ideen umzusetzen und die Implementierung unter der GNU GPL-Lizenz öffentlich zugänglich zu machen. Der Einfachheit halber wurde ein Deb-Paket für x86-64 erstellt, das auf allen modernen Debian-Distributionen funktionieren sollte. Bei ARM gab es kleinere Schwierigkeiten (während alle anderen Programme im Zusammenhang mit Vitis einwandfrei funktionieren), aber in Zukunft wird auch für diese Plattform (armhf) ein Arbeitspaket erstellt. Bisher habe ich die Erstellung von RPM-Paketen aufgrund von Problemen mit Fedora 30 und der Schwierigkeit, auf viele RPM-Distributionen zu sprühen, eingestellt, aber später werden trotzdem Pakete für mindestens einige von ihnen erstellt. In der Zwischenzeit können Sie make && make install
oder checkinstall
.
Vielen Dank für Ihre Aufmerksamkeit! Ich hoffe, dieser Artikel und dieses Projekt können nützlich sein.
Link zum Projekt-Repository