Kategorioj anstataŭ dosierujoj, aŭ la Semantika Dosiersistemo por Linukso

Klasifiko de datumoj mem estas interesa esplortemo. Mi amas kolekti informojn, kiuj ŝajnas necesaj, kaj mi ĉiam provis krei logikan dosierujojn por miaj dosieroj, kaj iun tagon en sonĝo mi vidis belan kaj oportunan programon por atribui etikedojn al dosieroj, kaj mi decidis, ke mi ne povas vivi. tiel plu.

La problemo de hierarkiaj dosiersistemoj

Uzantoj ofte alfrontas la problemon elekti kie konservi la sekvan novan dosieron kaj la problemon trovi siajn proprajn dosierojn (foje dosiernomoj tute ne intencas esti memoritaj de homo).

Eliro de la situacio povas esti semantikaj dosiersistemoj, kiuj kutime estas aldonaĵo al la tradicia dosiersistemo. Dosierujoj en ili estas anstataŭigitaj per semantikaj atributoj, ankaŭ nomitaj etikedoj, kategorioj kaj metadatenoj. Mi pli ofte uzos la terminon "kategorio", ĉar... En la kunteksto de dosiersistemoj, la vorto "etikedo" foje estas iom stranga, precipe kiam aperas "subetikedoj" kaj "etikedaj kaŝnomoj".

Asigni kategoriojn al dosieroj plejparte forigas la problemon de stokado kaj serĉado de dosiero: se vi memoras (aŭ divenas) almenaŭ unu el la kategorioj asignitaj al dosiero, tiam la dosiero neniam malaperos de vido.

Antaŭe, ĉi tiu temo estis levita pli ol unufoje ĉe Habré (fojoj, два, tri, kvar ktp.), ĉi tie mi priskribas mian solvon.

Vojo al Realigo

Tuj post la menciita sonĝo, mi priskribis en mia kajero la komandan interfacon, kiu provizas la necesan laboron kun kategorioj. Tiam mi decidis, ke post unu aŭ du semajnoj mi povus verki prototipon uzante Python aŭ Bash, kaj tiam mi devos labori pri kreado de grafika ŝelo en Qt aŭ GTK. La realo, kiel ĉiam, montriĝis multe pli severa, kaj la evoluo estis prokrastita.

La originala ideo estis antaŭ ĉio fari programon kun oportuna kaj konciza komandlinia interfaco, kiu kreus, forigus kategoriojn, asignus kategoriojn al dosieroj kaj forigus kategoriojn el dosieroj. Mi vokis la programon vitis.

Unua provo krei vitis finiĝis en nenio, ĉar multe da tempo komencis esti elspezita por laboro kaj universitato. La dua provo jam estis io: por la magistra tezo, mi sukcesis kompletigi la planitan projekton kaj eĉ fari prototipon de la GTK-ŝelo. Sed tiu versio montriĝis tiel nefidinda kaj maloportuna, ke multon oni devis repripensi.

Mi efektive uzis la trian version mem dum tre longa tempo, transdoninte plurajn milojn da miaj dosieroj al kategorioj. Tio ankaŭ estis tre faciligita per la efektivigita bash-kompletigo. Sed iuj problemoj, kiel la manko de aŭtomataj kategorioj kaj la kapablo stoki dosierojn de la sama nomo, ankoraŭ restis, kaj la programo jam estis fleksita sub sia propra komplekseco. Jen kiel mi venis al la bezono solvi kompleksajn programajn disvolvajn problemojn: verki detalajn postulojn, evoluigi funkcian testan sistemon, studi pakajn instrukciojn kaj multe pli. Mi nun alvenis al mia plano, por ke ĉi tiu humila kreaĵo estu prezentita al la libera komunumo. Specifa dosieradministrado kiel administrado per la koncepto de kategorioj levas neatenditajn problemojn kaj problemojn, kaj en solvado de ili vitis generis kvin pliajn projektojn ĉirkaŭ si, iuj el kiuj estos menciitaj en la artikolo. Ĝis nun vitis Mi ne aĉetis grafikan ŝelon, sed la oportuno uzi dosierkategoriojn de la komandlinio jam superas por mi ajnajn avantaĝojn de regula grafika dosieradministranto.

Uzaj Ekzemploj

Ni komencu simple - kreu kategorion:

vitis create Музыка

Ni aldonu iom da komponado al ĝi kiel ekzemplon:

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

Vi povas vidi la enhavon de la kategorio "Muziko" uzante la subkomandon "montri":

vitis show Музыка

Vi povas ludi ĝin per la "malferma" subkomando.

vitis open Музыка

Ĉar Se ni havas nur unu dosieron en la kategorio "Muziko", tiam nur tiu lanĉos. Por malfermi dosierojn kun iliaj defaŭltaj programoj, mi faris apartan ilon vts-fs-malfermita (Normaj iloj kiel xdg-open aŭ mimeopen ne konvenis al mi pro kelkaj kialoj; sed, se io ajn, en la agordoj vi povas specifi alian ilon por universala dosiermalfermo). Ĉi tiu ilo funkcias bone en malsamaj distribuoj kun malsamaj labormedioj, do mi rekomendas instali ĝin kune kun Vitis.

Vi ankaŭ povas rekte specifi la programon por malfermi dosierojn:

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

Kategorioj anstataŭ dosierujoj, aŭ la Semantika Dosiersistemo por Linukso

Ni kreu pli da kategorioj kaj aldonu dosierojn per "asigni". Se dosieroj estas asignitaj al kategorioj, kiuj ankoraŭ ne ekzistas, oni petas vin krei ilin. Nenecesa peto povas esti evitita uzante la flagon -yes.

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

Nun ni volas aldoni la kategorion "Matematiko" al la dosiero "Statistical package R: probabloteorio kaj matematika statistiko.pdf". Ni scias, ke ĉi tiu dosiero jam kategoriiĝas kiel "R" kaj tial ni povas uzi la kategorivojon de la Vitis-sistemo:

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

Feliĉe, bash-kompletigo faciligas ĉi tion.

Ni vidu kio okazis, uzante la flagon --categories por vidi liston de kategorioj por ĉiu dosiero:

vitis show R --categories

Kategorioj anstataŭ dosierujoj, aŭ la Semantika Dosiersistemo por Linukso

Rimarku, ke la dosieroj ankaŭ estis aŭtomate kategoriigitaj laŭ formato, tipo (kombinas formatojn) kaj dosier-etendaĵo. Ĉi tiuj kategorioj povas esti malŝaltitaj se vi volas. Poste mi certe lokalizos iliajn nomojn.

Ni aldonu ion alian al "Matematiko" por vario:

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

Kaj nun aferoj fariĝas interesaj. Anstataŭ kategorioj, vi povas skribi esprimojn kun la operacioj de kuniĝo, intersekco kaj subtraho, tio estas, uzi operaciojn sur aroj. Ekzemple, la intersekco de "Math" kun "R" rezultigos unu dosieron.

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

Ni subtrahu referencojn al la lingvo "R" el "Matematiko":

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

Ni povas sencele kombini muzikon kaj la R-lingvon:

vitis show Музыка u: R

La -n flago permesas al vi "eltiri" la postulatajn dosierojn el la peta rezulto per nombroj kaj/aŭ intervaloj, ekzemple, -n 3-7, aŭ io pli komplika: -n 1,5,8-10,13. Ĝi estas ofte utila kun la malferma subkomando, kiu ebligas al vi malfermi la deziratajn dosierojn el listo.

Kategorioj anstataŭ dosierujoj, aŭ la Semantika Dosiersistemo por Linukso

Dum ni foriras de uzado de konvencia dosierujo-hierarkio, ofte estas utile havi nestitajn kategoriojn. Ni kreu subkategorion "Statistiko" sub la kategorio "Matematiko" kaj aldonu ĉi tiun kategorion al la taŭga dosiero:

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

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

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

Kategorioj anstataŭ dosierujoj, aŭ la Semantika Dosiersistemo por Linukso

Ni povas vidi, ke ĉi tiu dosiero nun havas la kategorion "Matematiko/Statistiko" anstataŭ "Math" (ekstraj ligiloj estas spuritaj).

Trakti la plenan vojon povas esti maloportuna, ni kreu "tutmondan" kaŝnomon:

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

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

Kategorioj anstataŭ dosierujoj, aŭ la Semantika Dosiersistemo por Linukso

Ne nur regulaj dosieroj

Interretaj ligiloj

Por unuigi la konservadon de ajnaj informoj, estus utile, minimume, kategoriigi ligilojn al Interretaj rimedoj. Kaj ĉi tio eblas:

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

Dosiero estos kreita en speciala loko kun la kaplinio de la HTML-paĝo kaj la etendo .desktop. Ĉi tiu estas la tradicia ŝparvoja formato en GNU/Linukso. Tiaj ŝparvojoj estas aŭtomate kategoriitaj kiel Retaj Legomarkoj.

Kompreneble, ŝparvojoj estas kreitaj por esti uzataj:

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

Efektivigo de la komando igas la lastatempe konservitan ligilon malfermiĝi en la retumilo. Kategoriigitaj ŝparvojoj al Interretaj fontoj povas servi kiel anstataŭaĵo por retumiloj legosignoj.

Dosieraj fragmentoj

Estas ankaŭ utile havi kategoriojn por individuaj dosieroj. Ne malbona peto, ĉu? Sed la nuna efektivigo ĝis nun nur influas simplajn tekstajn dosierojn, sondosierojn kaj videajn dosierojn. Ni diru, ke vi devas marki certan parton de koncerto aŭ amuzan momenton en filmo, tiam kiam vi uzas assign vi povas uzi la flagojn -fragname, -start, -finish. Ni konservu la ekranŝirmilon de "DuckTales":

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

vitis open Заставки

En realeco, neniu dosiertranĉado okazas; anstataŭe, montrodosiero al la fragmento estas kreita, kiu priskribas la dosierspecon, la vojon al la dosiero, la komencon kaj finon de la fragmento. La kreado kaj malfermo de montriloj al fragmentoj estas delegitaj al iloj, kiujn mi speciale faris por ĉi tiuj celoj - ĉi tiuj estas mediafragmenter kaj fragplayer. La unua kreas, la dua malfermas. En la kazo de sonaj kaj videoregistraĵoj, la amaskomunikila dosiero estas lanĉita de certa al certa pozicio uzante la VLC-ludilon, do ĝi ankaŭ devas esti en la sistemo. Komence mi volis fari ĉi tion surbaze de mplayer, sed ial ĝi estis tre kurba kun poziciigado en la ĝusta momento.
En nia ekzemplo, la dosiero "Duck Tales intro.fragpointer" estas kreita (ĝi estas metita en specialan lokon), kaj tiam fragmento estas ludata de la komenco de la dosiero (ĉar –start ne estis specifita dum kreado) ĝis la 59. dua marko, post kiu VLC fermas.

Alia ekzemplo estas kiam ni decidis klasifiki ununuran prezenton ĉe koncerto de fama artisto:

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

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

Kiam malfermiĝas, la dosiero estos inkluzivita en la dezirata pozicio kaj fermiĝos post kvar minutoj kaj duono.

Kiel ĉio funkcias + kromaj funkcioj

Stokado de kategorioj

Je la komenco mem de pensado pri organizado de semantika dosiersistemo venis en menso tri manieroj: per konservado de simbolaj ligiloj, per datumbazo, per priskribo en XML. La unua metodo venkis, ĉar... unuflanke, ĝi estas facile efektivigi, kaj aliflanke, la uzanto havas la ŝancon rigardi kategoriojn rekte de la dosiersistemo (kaj tio estas oportuna kaj grava). Komence de uzo vitis La dosierujo "Vitis" kaj la agorda dosiero ".config/vitis/vitis.conf" estas kreitaj en la hejma dosierujo de la uzanto. Dosierujoj respondaj al kategorioj estas kreitaj en ~/Vitis, kaj simbolaj ligiloj al la originalaj dosieroj estas kreitaj en ĉi tiuj kategoriaj dosierujoj. Kategoriaj kaŝnomoj ankaŭ estas nur ligiloj al ili. Kompreneble, la ĉeesto de la dosierujo "Vitis" en la hejma dosierujo eble ne konvenas al iuj homoj. Ni povas ŝanĝi al iu ajn alia loko:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

Je certa punkto, evidentiĝas, ke estas malmulte da senco kategoriigi dosierojn disigitajn en malsamaj lokoj, ĉar ilia loko povas ŝanĝiĝi. Tial, por komenci, mi kreis dosierujon por mi, kie mi stulte forĵetis ĉion kaj donis al ĝi ĉiujn kategoriojn. Tiam mi decidis, ke estus bone formaligi ĉi tiun momenton je la programo. Jen kiel aperis la koncepto "dosierspaco". Komence de uzo vitis Ne malutilus tuj agordi tian lokon (ĉiuj dosieroj, kiujn ni bezonas, estos konservitaj tie) kaj ebligi aŭtomatan konservadon:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Sen aŭtomata konservado, kiam vi uzas la subkomandon "asigni", la flago --save estos postulata se vi volas konservi la aldonitan dosieron al la dosierspaco.

Krome, vi povas aldoni plurajn dosierspacojn kaj ŝanĝi iliajn prioritatojn; ĉi tio povas esti utila kiam estas multaj dosieroj kaj ili estas konservitaj en malsamaj amaskomunikiloj. Mi ne konsideros ĉi tiun eblecon ĉi tie; detaloj troveblas en la programhelpo.

Semantika Dosiera Sistemo Migrado

Ĉiuokaze, la Vitis-dosierujo kaj dosierspacoj teorie povas foje moviĝi de loko al loko. Por ke ĝi funkciu, mi kreis apartan ilon ligilo-redaktilo, kiu povas amasigi redakti ligilojn, anstataŭigante partojn de la vojo per aliaj:

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

En la unua kazo, post kiam ni moviĝis de /mnt/MyFavoriteDisk/Vitis/ al la hejma dosierujo, la simbolaj ligiloj asociitaj kun la kaŝnomoj estas redaktitaj. En la dua kazo, post ŝanĝi la lokon de la dosierspaco, ĉiuj ligiloj en Vitis estas ŝanĝitaj al novaj laŭ la peto anstataŭigi parton de sia vojo.

Aŭtomataj kategorioj

Se vi rulas la komandon vitis service get autocategorization, vi povas vidi, ke defaŭlte, aŭtomataj kategorioj estas atribuitaj laŭ formato (Formato kaj Tipo) kaj dosiera etendo (Etendaĵo).

Ĉi tio estas utila kiam, ekzemple, vi bezonas trovi ion inter PDF-oj aŭ rigardi tion, kion vi konservis el EPUB kaj FB2, vi povas simple ruli la peton.

vitis show Format/MOBI u: Format/FB2

Okazis, ke normaj GNU/Linukso iloj kiel dosiero aŭ mimetipo ne konvenis al mi ĝuste ĉar ili ne ĉiam ĝuste determinas la formaton; mi devis fari mian propran efektivigon surbaze de dosiersubskriboj kaj etendaĵoj. Ĝenerale, la temo pri difino de dosierformatoj estas interesa temo por esploro kaj meritas apartan artikolon. Nuntempe mi povas diri, ke eble mi ne donis veran rekonon por ĉiuj formatoj en la mondo, sed ĝenerale ĝi jam bone funkcias. Vere, EPUB nun difinas la formaton kiel ZIP (ĝenerale tio estas pravigita, sed praktike tio ne estu konsiderata normala konduto). Por la momento, konsideru ĉi tiun funkcion eksperimenta kaj raportu iujn ajn erarojn. En strangaj situacioj, vi ĉiam povas uzi kategoriojn de etendaj dosieroj, ekzemple Etendo/epub.

Se aŭtkategorioj laŭ formato estas ebligitaj, aŭtkategorioj kiuj grupigas kelkajn formatojn laŭ tipo ankaŭ estas ebligitaj: "Arĥivoj", "Bildoj", "Video", "Audio" kaj "Dokumentoj". Lokigitaj nomoj ankaŭ estos faritaj por ĉi tiuj subkategorioj.

Kio ne estas dirita

vitis Ĝi rezultis esti tre multfaceta ilo, kaj estas malfacile kovri ĉion samtempe. Lasu min mallonge mencii kion alian vi povas fari:

  • kategorioj povas esti forigitaj kaj forigitaj de dosieroj;
  • la rezultoj de esprimo-demandoj povas esti kopiitaj al la specifita dosierujo;
  • dosieroj povas esti rulitaj kiel programoj;
  • La montra komando havas multajn eblojn, ekzemple, ordigi laŭ nomo/dato de modifo aŭ aliro/grandeco/etendo, montrante dosierpropraĵojn kaj vojojn al originaloj, ebligante la montradon de kaŝitaj dosieroj ktp.;
  • Kiam vi konservas ligilojn al Interretaj fontoj, vi ankaŭ povas konservi lokajn kopiojn de HTML-paĝoj.

Plenaj detaloj troveblas en la uzanthelpo.

Perspektivoj

Skeptikuloj ofte diras, ke "neniu starigos ĉi tiujn etikedojn mem." Per propra ekzemplo, mi povas pruvi la malon: mi jam kategoriigis pli ol ses mil dosierojn, kreis pli ol mil kategoriojn kaj kaŝnomojn, kaj valoris. Kiam unu teamo vitis open План malfermu vian faroliston aŭ kiam per unu komando vitis open LaTeX Kiam vi malfermas la libron de Stolyarov pri la enpaĝigsistemo LaTeX, estas jam morale malfacile uzi la dosiersistemon "la malnovmoda maniero".

Sur ĉi tiu bazo ekestas kelkaj ideoj. Ekzemple, vi povas fari aŭtomatan radion, kiu ŝaltas teman muzikon laŭ la nuna vetero, ferio, semajnotago, horo de tago aŭ jaro. Eĉ pli proksime al la temo estas muzikludanto, kiu scias pri kategorioj kaj povas ludi muzikon per esprimo kun operacioj sur kategorioj kiel sur aroj. Estas utile fari demonon, kiu kontrolos la dosierujon "Elŝutoj" kaj ofertos kategoriigi novajn dosierojn. Kaj, kompreneble, ni faru normalan grafikan semantikan dosieradministranton. Iam mi eĉ kreis TTT-servon por la entrepreno por kolektiva uzo de dosieroj, sed ĝi ne estis prioritato kaj iĝis sensigniva, kvankam ĝi atingis altan rendimenton. (Pro gravaj ŝanĝoj en la vitis, ĝi ne plu estas uzebla.)

jen malgranda demo

Kategorioj anstataŭ dosierujoj, aŭ la Semantika Dosiersistemo por Linukso

konkludo

vitis ne estas la unua provo radikale ŝanĝi la stilon labori kun datumoj, sed mi konsideris grava efektivigi miajn ideojn kaj disponigi la efektivigon publike sub la permesilo GNU GPL. Por komforto, deb-pakaĵo estis farita por x86-64; ĝi devus funkcii ĉe ĉiuj modernaj Debianaj distribuoj. Ekzistis negravaj malfacilaĵoj sur ARM (dum ĉiuj aliaj programoj rilatis al vitis, funkcias bone), sed estonte estos kompilita laborpakaĵo por ĉi tiu platformo (armhf). Mi ĉesis krei RPM-pakaĵojn nuntempe pro problemoj ĉe Fedora 30 kaj la malfacileco disvastiĝi tra multaj RPM-distribuoj, sed pli postaj pakaĵoj ankoraŭ estos faritaj por almenaŭ kelkaj el ili. Dume vi povas uzi make && make installcheckinstall.

Dankon al ĉiuj pro via atento! Mi esperas, ke ĉi tiu artikolo kaj ĉi tiu projekto povas esti utilaj.

Ligo al projekta deponejo

fonto: www.habr.com

Aldoni komenton