Samotná klasifikácia údajov je zaujímavou témou výskumu. Milujem zhromažďovanie informácií, ktoré sa zdajú potrebné, a vždy som sa snažil vytvárať logické hierarchie adresárov pre svoje súbory a jedného dňa som vo sne uvidel krásny a pohodlný program na priraďovanie značiek k súborom a rozhodol som sa, že nemôžem žiť takto ďalej.
Problém hierarchických súborových systémov
Používatelia sa často stretávajú s problémom výberu, kam uložiť ďalší nový súbor a problémom s nájdením vlastných súborov (niekedy nie sú názvy súborov vôbec určené na to, aby si ich človek zapamätal).
Východiskom zo situácie môžu byť sémantické súborové systémy, ktoré sú zvyčajne doplnkom k tradičnému súborovému systému. Adresáre v nich sú nahradené sémantickými atribútmi, nazývanými aj tagy, kategórie a metadáta. Termín „kategória“ budem používať častejšie, pretože... V kontexte súborových systémov je slovo „tag“ niekedy trochu zvláštne, najmä keď sa objavia „subtags“ a „tag aliasy“.
Priraďovanie kategórií súborom do značnej miery eliminuje problém s ukladaním a vyhľadávaním súboru: ak si pamätáte (alebo hádate) aspoň jednu z kategórií priradených k súboru, súbor nikdy nezmizne z dohľadu.
Predtým bola táto téma nastolená viackrát na Habré (, , , atď.), tu popisujem moje riešenie.
Cesta k realizácii
Hneď po spomínanom sne som v zápisníku opísal príkazové rozhranie, ktoré zabezpečuje potrebnú prácu s kategóriami. Potom som sa rozhodol, že za týždeň alebo dva môžem napísať prototyp pomocou Pythonu alebo Bashu a potom budem musieť pracovať na vytvorení grafického shellu v Qt alebo GTK. Realita sa ako vždy ukázala oveľa tvrdšia a vývoj sa oneskoril.
Pôvodnou myšlienkou bolo v prvom rade vytvoriť program s pohodlným a stručným rozhraním príkazového riadka, ktorý by vytváral, mazal kategórie, priraďoval kategórie k súborom a mazal kategórie zo súborov. Volal som program Šepkať.
Prvý pokus o vytvorenie Šepkať neskončilo nič, pretože veľa času sa začalo tráviť prácou a vysokou školou. Druhý pokus už bol niečo: pre diplomovú prácu sa mi podarilo dokončiť plánovaný projekt a dokonca vyrobiť prototyp plášťa GTK. Ukázalo sa však, že táto verzia je taká nespoľahlivá a nepohodlná, že bolo potrebné veľa prehodnotiť.
Tretiu verziu som skutočne používal veľmi dlho, keď som preniesol niekoľko tisíc súborov do kategórií. Tomu výrazne uľahčila aj realizovaná dostavba bashu. Niektoré problémy, ako napríklad nedostatok automatických kategórií a schopnosť ukladať súbory s rovnakým názvom, však stále pretrvávali a program sa už ohýbal pod svoju vlastnú zložitosť. Takto som dospel k potrebe riešiť zložité problémy s vývojom softvéru: napísať podrobné požiadavky, vyvinúť funkčný testovací systém, preštudovať si návod na balenie a mnoho iného. Teraz som dospel k svojmu plánu, aby sa tento skromný výtvor mohol predstaviť slobodnej komunite. Špecifická správa súborov, ako je správa prostredníctvom konceptu kategórií, vyvoláva neočakávané problémy a problémy a pri ich riešení Šepkať splodil okolo seba ďalších päť projektov, z ktorých niektoré budú spomenuté v článku. Do teraz Šepkať Nekúpil som si grafický shell, ale pohodlie používania kategórií súborov z príkazového riadku pre mňa už prevažuje nad všetkými výhodami bežného správcu grafických súborov.
Príklady použitia
Začnime jednoducho – vytvorte kategóriu:
vitis create МузыкаPridajme k tomu nejaké zloženie ako príklad:
vitis assign Музыка -f "The Ink Spots - I Don't Want To Set The World On Fire.mp3"Obsah kategórie „Hudba“ môžete zobraziť pomocou podpríkazu „show“:
vitis show МузыкаMôžete ho prehrať pomocou podpríkazu „open“.
vitis open МузыкаPretože Ak máme v kategórii „Hudba“ iba jeden súbor, spustí sa iba tento. Na účely otvárania súborov pomocou ich predvolených programov som vytvoril samostatný nástroj vts-fs-open (štandardné nástroje ako xdg-open alebo mimeopen mi z viacerých dôvodov nevyhovovali, ale ak niečo, v nastaveniach si môžete určiť inú pomôcku na univerzálne otváranie súborov). Tento nástroj funguje dobre na rôznych distribúciách s rôznymi pracovnými prostrediami, takže ho odporúčam nainštalovať spolu s vitis.
Môžete tiež priamo určiť program na otváranie súborov:
vitis open Музыка --app qmmp
Poďme vytvoriť ďalšie kategórie a pridať súbory pomocou „priradiť“. Ak sú súbory zaradené do kategórií, ktoré ešte neexistujú, zobrazí sa výzva na ich vytvorenie. Nepotrebnej požiadavke sa dá vyhnúť použitím príznaku -yes.
vitis assign Программирование R -f "Введение в R.pdf" "Статистический пакет R: теория вероятностей и матстатистика.pdf" --yesTeraz chceme pridať kategóriu „Matematika“ do súboru „Štatistický balík R: teória pravdepodobnosti a matematická štatistika.pdf“. Vieme, že tento súbor je už kategorizovaný ako „R“, a preto môžeme použiť cestu kategórie zo systému Vitis:
vitis assign Математика -v "R/Статистический пакет R: теория вероятностей и матстатистика.pdf"Našťastie to uľahčuje dokončenie bashu.
Pozrime sa, čo sa stalo, pomocou príznaku --categories zobrazíme zoznam kategórií pre každý súbor:
vitis show R --categories
Upozorňujeme, že súbory boli tiež automaticky kategorizované podľa formátu, typu (kombinuje formáty) a prípony súboru. Tieto kategórie je možné v prípade potreby deaktivovať. Neskôr ich mená určite lokalizujem.
Pridajme k „matematike“ ešte niečo pre spestrenie:
vitis assign Математика -f "Математический анализ - 1984.pdf" Перельман_Занимательная_математика_1927.djvu A teraz sú veci zaujímavé. Namiesto kategórií môžete písať výrazy s operáciami zjednotenia, prieniku a odčítania, teda použiť operácie na množinách. Napríklad priesečník "Math" s "R" bude mať za následok jeden súbor.
vitis show R i: МатематикаOdčítajme odkazy na jazyk „R“ od „matematiky“:
vitis show Математика R #или vitis show Математика c: RMôžeme bezcieľne kombinovať hudbu a jazyk R:
vitis show Музыка u: RPríznak -n vám umožňuje „vytiahnuť“ požadované súbory z výsledku požiadavky podľa čísel a/alebo rozsahov, napr. -n 3-7alebo niečo zložitejšie: -n 1,5,8-10,13. Často je to užitočné s podpríkazom open, ktorý vám umožňuje otvoriť požadované súbory zo zoznamu.

Aj keď sa vzďaľujeme od používania konvenčnej hierarchie adresárov, často je užitočné mať vnorené kategórie. Vytvorme podkategóriu „Štatistika“ v kategórii „Matematika“ a pridáme túto kategóriu do príslušného súboru:
vitis create Математика/Статистика
vitis assign Математика/Статистика -v "R/Введение в R.pdf"
vitis show Математика --categories
Vidíme, že tento súbor má teraz kategóriu „Math/Statistics“ namiesto „Math“ (sledujú sa ďalšie odkazy).
Adresovanie celej cesty môže byť nepohodlné, vytvorme si „globálny“ alias:
vitis assign Математика/Статистика -a Статистика
vitis show Статистика
Nielen bežné súbory
Internetové odkazy
Na zjednotenie ukladania akýchkoľvek informácií by bolo užitočné minimálne kategorizovať odkazy na internetové zdroje. A toto je možné:
vitis assign Хабр Цветоаномалия -i https://habr.com/ru/company/sfe_ru/blog/437304/ --yesВ специальном месте будет создан файл с заголовком HTML-страницы и с расширением .desktop. Это традиционый формат ярлыка в GNU/Linux. Такие ярлыки получают автоматическую категорию NetworkBookmarks.
Prirodzene, skratky sú vytvorené na použitie:
vitis open ЦветоаномалияVykonaním príkazu sa v prehliadači otvorí novo uložený odkaz. Kategorizované skratky k internetovým zdrojom môžu slúžiť ako náhrada za záložky prehliadača.
Fragmenty súborov
Je tiež užitočné mať kategórie pre jednotlivé časti súborov. Nie je to zlá požiadavka, však? Súčasná implementácia však zatiaľ ovplyvňuje iba obyčajné textové súbory, zvukové a video súbory. Povedzme, že potrebujete označiť určitú časť koncertu alebo vtipný moment vo filme, potom pri použití priradiť môžete použiť príznaky -fragname, -start, -finish. Uložme šetrič obrazovky z "DuckTales":
vitis assign vitis assign -c Заставки -f Duck_Tales/s01s01.avi --finish 00:00:59 --fragname "Duck Tales intro"
vitis open ЗаставкиV skutočnosti nedochádza k žiadnemu orezaniu súboru, namiesto toho sa vytvorí súbor ukazovateľa na fragment, ktorý popisuje typ súboru, cestu k súboru, začiatok a koniec fragmentu. Vytváranie a otváranie ukazovateľov na fragmenty je delegované na nástroje, ktoré som špeciálne vytvoril pre tieto účely - sú to mediafragmenter a fragplayer. Prvý vytvára, druhý otvára. V prípade audio a video nahrávok sa mediálny súbor spúšťa z určitej do určitej pozície pomocou VLC prehrávača, preto musí byť aj v systéme. Najprv som to chcel urobiť na základe mplayeru, ale z nejakého dôvodu to veľmi pokrivkávalo polohovaním v správnom momente.
V našom príklade sa vytvorí súbor „Duck Tales intro.fragpointer“ (umiestni sa na špeciálne miesto) a potom sa prehrá fragment od začiatku súboru (keďže pri vytváraní nebolo zadané –štart) až do 59. druhá značka, po ktorej sa VLC zatvorí .
Ďalším príkladom je situácia, keď sme sa rozhodli kategorizovať jedno vystúpenie na koncerte známeho umelca:
vitis assign Лепс "Спасите наши души" -f Григорий Лепc - Концерт Парус - песни Владимира Высоцкого.mp4 --fragname "Спасите наши души" --start 00:32:18 --finish 00:36:51
vitis open "Спасите наши души"Po otvorení sa súbor zaradí na požadovanú pozíciu a po štyroch a pol minútach sa zatvorí.
Ako to celé funguje + ďalšie funkcie
Ukladanie kategórií
Na samom začiatku uvažovania o organizácii sémantického súborového systému prišli na rad tri spôsoby: cez uloženie symbolických odkazov, cez databázu, cez popis v XML. Prvý spôsob vyhral, pretože... na jednej strane je to jednoduché na implementáciu a na druhej strane má používateľ možnosť pozerať sa na kategórie priamo zo súborového systému (a to je pohodlné a dôležité). Na začiatku používania Šepkať Adresár „Vitis“ a konfiguračný súbor „.config/vitis/vitis.conf“ sú vytvorené v domovskom adresári používateľa. Adresáre zodpovedajúce kategóriám sa vytvárajú v ~/Vitis a v týchto adresároch kategórií sa vytvárajú symbolické odkazy na pôvodné súbory. Aliasy kategórií sú tiež len odkazy na ne. Prítomnosť adresára „Vitis“ v domovskom adresári samozrejme nemusí niektorým ľuďom vyhovovať. Môžeme prejsť na akékoľvek iné miesto:
vitis service set path /mnt/MyFavoriteDisk/Vitis/V určitom bode sa ukáže, že nemá zmysel kategorizovať súbory roztrúsené na rôznych miestach, pretože ich umiestnenie sa môže meniť. Preto som si na začiatok vytvoril pre seba adresár, kde som hlúpo všetko vysypal a dal som tomu všetky kategórie. Potom som sa rozhodol, že by bolo pekné formalizovať tento moment na programovej úrovni. Takto sa objavil koncept „priestoru súborov“. Na začiatku používania Šepkať Nebolo by na škodu okamžite nastaviť takéto umiestnenie (budú tam uložené všetky súbory, ktoré potrebujeme) a povoliť automatické ukladanie:
vitis service add filespace /mnt/MyFavoriteDisk/Filespace/
vitis service set autosave yesBez automatického ukladania sa pri použití podpríkazu "assign" bude vyžadovať príznak --save, ak chcete uložiť pridaný súbor do súborového priestoru.
Okrem toho môžete pridať niekoľko súborových priestorov a zmeniť ich priority, čo môže byť užitočné, keď existuje veľa súborov a sú uložené na rôznych médiách. Túto možnosť tu nebudem zvažovať, podrobnosti nájdete v pomocníkovi programu.
Migrácia sémantického systému súborov
Každopádne, adresár Vitis a súborové priestory sa teoreticky niekedy môžu presúvať z miesta na miesto. Aby to fungovalo, vytvoril som samostatnú utilitu editor odkazov, ktorý môže hromadne upravovať odkazy a nahrádzať časti cesty inými:
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 -RV prvom prípade, keď sme sa presunuli z /mnt/MyFavoriteDisk/Vitis/ do domovského adresára, upravia sa symbolické odkazy spojené s aliasmi. V druhom prípade sa po zmene umiestnenia súborového priestoru všetky odkazy vo Vitis zmenia na nové v súlade s požiadavkou nahradiť časť ich cesty.
Automatické kategórie
Ak spustíte príkaz vitis service get autocategorization, môžete vidieť, že v predvolenom nastavení sú automatické kategórie priradené podľa formátu (Formát a typ) a prípony súboru (Prípona).
To je užitočné, keď napríklad potrebujete nájsť niečo medzi PDF alebo sa pozrieť, čo máte uložené z EPUB a FB2, jednoducho spustíte požiadavku
vitis show Format/MOBI u: Format/FB2Так уж получилось, что стандартные средства GNU/Linux типа file или mimetype меня не устроили именно по той причине, что они не всегда верно определяют формат, пришлось делать свою реализацию по сигнатурам файлов и расширениям. Вообще, тема для определения форматов файлов — интересная тема для исследований и заслуживает отдельной статьи. Пока могу сказать, что, возможно, не для всех форматов в мире я предусмотрел правдивое распознавание, но в целом уже сейчас оно работает неплохо. Правда, у EPUB сейчас определяется формат как ZIP (в общем-то оправданно, но на практике это не стоит считать нормальным поведением). До некоторых пор считайте эту возможность экспериментальной, о багах сообщайте. В странных ситуациях всегда можно использовать категории по расширению файлов, например, Extension/epub.
Ak sú povolené automatické kategórie podľa formátu, sú povolené aj automatické kategórie, ktoré zoskupujú niektoré formáty podľa typu: „Archívy“, „Obrázky“, „Video“, „Zvuk“ a „Dokumenty“. Pre tieto podkategórie sa vytvoria aj lokalizované názvy.
Čo sa nehovorí
Šepkať Ukázalo sa, že je to veľmi mnohostranný nástroj a je ťažké pokryť všetko naraz. Dovoľte mi stručne spomenúť, čo ešte môžete urobiť:
- kategórie môžu byť odstránené a odstránené zo súborov;
- výsledky výrazových dotazov možno skopírovať do určeného adresára;
- súbory možno spúšťať ako programy;
- Príkaz show má veľa možností, napríklad triedenie podľa názvu/dátumu úpravy alebo prístupu/veľkosti/prípony, zobrazenie vlastností súboru a cesty k originálom, povolenie zobrazenia skrytých súborov atď.;
- Keď uložíte odkazy na internetové zdroje, môžete uložiť aj lokálne kópie stránok HTML.
Všetky podrobnosti nájdete v používateľskej pomoci.
Vyhliadky
Skeptici často hovoria, že „nikto tieto značky nenastaví sám“. Na vlastnom príklade môžem dokázať opak: už som kategorizoval viac ako šesťtisíc súborov, vytvoril viac ako tisíc kategórií a aliasov a stálo to za to. Keď jeden tím vitis open План otvorte zoznam úloh alebo pomocou jedného príkazu vitis open LaTeX Keď otvoríte Stolyarovovu knihu o systéme rozloženia LaTeX, je už morálne ťažké používať súborový systém „staromódnym spôsobom“.
Na tomto základe vzniká množstvo nápadov. Môžete si napríklad vyrobiť automatické rádio, ktoré zapne tematickú hudbu podľa aktuálneho počasia, sviatku, dňa v týždni, dennej doby či roku. Ešte bližšie k téme je hudobný prehrávač, ktorý sa vyzná v kategóriách a vie prehrávať hudbu výrazom s operáciami nad kategóriami ako s množinami. Je užitočné vytvoriť démona, ktorý bude sledovať adresár „Downloads“ a ponúkne kategorizáciu nových súborov. A, samozrejme, mali by sme urobiť normálneho grafického sémantického správcu súborov. Kedysi som dokonca vytvoril webovú službu pre podnik na kolektívne používanie súborov, ale nebolo to prioritou a stalo sa irelevantným, hoci dosahovala vysokú úroveň výkonu. (Vzhľadom na veľké zmeny v Šepkať, už nie je použiteľný.)
tu je malá ukážka

Záver
vitis — не первая попытка радикально изменить стиль работы со данными, но я посчитал важным реализовать свои идеи и выложить реализацию в открытый доступ под лицензией GNU GPL. Для удобства сделан deb-пакет для x86-64, он должен работать на всех современных Debian-дистрибутивах. На ARM оказались небольшие сложности (при этом все остальные программы, связанные с Šepkať, funguje dobre), ale v budúcnosti bude pre túto platformu zostavený pracovný balík (armhf). Nateraz som prestal vytvárať RPM balíčky kvôli problémom vo Fedore 30 a ťažkostiam pri šírení v mnohých RPM distribúciách, ale neskoršie balíčky budú stále vytvorené aspoň pre pár z nich. Medzitým môžete použiť make && make install alebo checkinstall.
Ďakujem vám všetkým za pozornosť! Dúfam, že tento článok a tento projekt môžu byť užitočné.
Zdroj: hab.com
