Az adatok osztályozása önmagában is érdekes kutatási téma. Szeretem gyűjteni a látszólag szükséges információkat, és mindig is próbáltam logikus könyvtári hierarchiákat létrehozni a fájljaimhoz, és egyszer álomban egy szép és kényelmes programot láttam, amely fájlokhoz címkéket rendel, és eldöntöttem, hogy ezen a módon nem lehet tovább élni.
A hierarchikus fájlrendszerek problémája
A felhasználók gyakran találkoznak azzal a problémával, hogy hol tárolják az új fájlokat, valamint a keresés nehézségeivel (néha a fájlnevek egyáltalán nem könnyen megjegyezhetők az emberek számára).
A megoldás a szemantikai fájlrendszerekben rejlik, amelyek általában a hagyományos fájlrendszer fölé épülnek. A könyvtárakat szemantikai attribútumok, más néven címkék, kategóriák, metadaták cserélik fel. Én a 'kategória' kifejezést fogom használni gyakrabban, mert a fájlrendszerek kontextusában a 'címke' néha furcsán hangzik, különösen, amikor 'alcímkék' és 'címkeálnevek' jelennek meg.
A fájlokhoz kategóriák rendelése nagyban megkönnyíti a fájlok tárolásának és keresésének problémáit: ha emlékszel (vagy sejtéssel bírsz) legalább egy kategóriára, amelyet a fájlhoz rendeltek, akkor a fájl sosem vész el a látótérből.
Korábban a Habr-on többször felmerült ez a téma (, , , stb.), itt részletezem a saját megoldásomat.
Az implementáció útja
Közvetlenül az említett álom után leírtam egy jegyzetfüzetben egy parancssori interfészt, amely biztosítja a szükséges munkát a kategóriákkal. Akkor úgy döntöttem, hogy egy-két héten belül prototípust tudok írni Python vagy Bash használatával, aztán grafikus felületet kell készíteni Qt vagy GTK segítségével. A valóság, mint mindig, sokkal keményebbnek bizonyult, és a fejlesztés elhúzódott.
Az eredeti elképzelés az volt, hogy mindenekelőtt egy kényelmes és tömör parancssori interfészt készítsek, amely létrehozza, törli a kategóriákat, hozzárendel kategóriákat a fájlokhoz és eltávolítja a kategóriákat a fájlokból. A programot elneveztem vitis.
Első próbálkozásom általában vitis nemmiért végződött, mivel túl sok idő ment el a munkára és az intézetre. A második próbálkozás már valamivel több volt: a mesterdolgozathoz sikerült befejezni a tervezett projektet, és még egy GTK interfész prototípust is készítettem. De az a verzió annyira megbízhatatlannak és kényelmetlennek bizonyult, hogy sok mindent újra kellett gondolnom.
A harmadik verziót már nagyon sokáig használtam, átkategorizálva több ezer fájlomat. Ebben nagyban segítette a megvalósított bash automatikus kiegészítés. De néhány probléma, mint például az automatikus kategóriák hiánya és a azonos nevű fájlok tárolásának lehetősége, még mindig fennállt, és a program már a saját bonyolultsága alatt szenvedett. Így jutottam el a nehéz szoftverfejlesztési problémák megoldásához: részletes követelmények megírása, funkcionális tesztelési rendszer tervezése, csomagolási útmutatók tanulmányozása és sok más. Most eljutottam a megálmodott célhoz, így ez az egyszerű alkotás bemutatható a szabad közösségnek. Az oly különös fájlkezelés, mint a kategóriákon keresztüli kezelés, váratlan kérdéseket és problémákat vet fel, és ezek megoldása. vitis további öt projektet generált körülötte, amelyek közül néhányat említeni fogok a cikkben. A mai napig vitis nem szereztem be grafikus felületet, de a fájl kategóriák parancssorbeli használatának kényelme már felülmúlja számomra a hagyományos grafikus fájlkezelő bármilyen előnyét.
Használati példák
Kezdjük az egyszerűvel — hozzunk létre egy kategóriát:
vitis create ZeneAdjunk hozzá például egy dalt:
vitis assign Zene -f "The Ink Spots - I Don't Want To Set The World On Fire.mp3"A "Zene" kategória tartalmát a "show" alparanccsal nézhetjük meg:
vitis show ZeneLejátszhatjuk a "open" alparanccsal
vitis open ZeneMivel a "Zene" kategóriában csak egy fájl van, csak az fog elindulni. A fájlok alapértelmezett programmal való megnyitásához külön eszközt készítettem. vts-fs-open (A standard tools like xdg-open or mimeopen don't suit me for various reasons; however, you can specify another utility for universal file opening in the settings if needed). This utility works well on different distributions with various desktop environments, so I recommend installing it along with vitis.
You can also directly specify the program to open files:
vitis open Zene --app qmmp
Let's create more categories and add files using 'assign'. If the files are assigned to non-existent categories, a request for their creation is issued. You can avoid extra requests by using the --yes flag.
vitis assign Programozás R -f "Bevezetés a R-be.pdf" "Statisztikai csomag R: valószínűségi elmélet és matematikai statisztika.pdf" --yesNow we want to add the file "Statisztikai csomag R: valószínűségi elmélet és matematikai statisztika.pdf" to the category "Matematika". We know that this file already has the category "R", and therefore we can use the category path from the Vitis system:
vitis assign Matematika -v "R/Statisztikai csomag R: valószínűségi elmélet és matematikai statisztika.pdf"Fortunately, bash autocompletion will make this easy.
Let's see what we got by using the --categories flag to see the list of categories for each file:
vitis show R --categories
Note that files were also assigned automatic categories based on format, type (which combines formats), and file extension. These categories can be disabled if desired. I will definitely localize their names later.
Let's add something else for variety in "Matematika":
vitis assign Matematika -f "Matematikai elemzés - 1984.pdf" Perelman_Érdekes_matematika_1927.djvu And now it gets interesting. Instead of categories, you can write expressions with union, intersection, and subtraction operations, that is, use set operations. For example, the intersection of "Matematika" with "R" will result in a single file.
vitis show R i: MatematikaLet's subtract mentions of language "R" from "Matematika":
vitis show Matematika R #or vitis show Matematika c: RWe can aimlessly union music and language R:
vitis show Zene u: RThe -n flag allows you to 'pull out' the required files by numbers and/or ranges from the query results, for example, -n 3-7, or something more complex: -n 1,5,8-10,13. It is often useful with the open subcommand, which allows opening necessary files from the list.

Bár eltávolodunk a hagyományos könyvtári hierarchiától, gyakran hasznos lehet, ha vannak almappák. Hozzunk létre egy „Statisztika” almappát a „Matematika” kategórián belül, és adjuk hozzá ezt a kategóriát a megfelelő fájlhoz:
vitis create Matematika/Statisztika
vitis assign Matematika/Statisztika -v "R/Bemutató az R-ről.pdf"
vitis show Matematika --categories
Látjuk, hogy ez a fájl most a „Matematika/Statisztika” kategóriához tartozik a „Matematika” helyett (a felesleges linkek nyomon követésre kerülnek).
A teljes útvonal használata kényelmetlen lehet, így létrehozunk egy „globális” álnevet:
vitis assign Matematika/Statisztika -a Statisztika
vitis show Statisztika
Nem csak a hagyományos fájlok
Internet-hivatkozások
Az információk tárolásának egységesítése érdekében hasznos lenne legalább az internetes források hivatkozásait kategorizálni. És ez lehetséges:
vitis assign Habr Színanomália -i https://habr.com/ru/company/sfe_ru/blog/437304/ --yesEgy speciális helyen létrejön egy fájl a HTML-oldal címével és .desktop kiterjesztéssel. Ez a GNU/Linux hagyományos parancsikon formátuma. Ezek a parancsikonok automatikus NetworkBookmarks kategóriát kapnak.
Természetesen a parancsikonokat használni kell:
vitis open SzínanomáliaA parancs végrehajtása megnyitja a böngészőben azonnal elmentett hivatkozást. A kategorizált hivatkozók az internetes forrásokhoz alternatívaként szolgálhatnak a böngésző könyvjelzői helyett.
Fájlok töredékei
Érdemes kategóriákat létrehozni a különálló fájltöredékek számára is. Nem rossz javaslat, ugye? De a jelenlegi megvalósítás csak a hagyományos szöveges fájlokra, audio- és videofájlokra vonatkozik. Tegyük fel, hogy szeretnéd megjelölni egy koncert bizonyos részét vagy egy vicces pillanatot egy filmben; ilyenkor az assign használatával használhatod a --fragname, --start, --finish flagokat. Mentjük az „Kacsa mesék” főcímdala részletét:
vitis assign vitis assign -c Főcímdala -f Duck_Tales/s01s01.avi --finish 00:00:59 --fragname "Duck Tales intro"
vitis open FőcímdalaValójában nem történik fájlok levágása, ehelyett egy mutatófájl jön létre a töredékről, amely leírja a fájl típusát, a fájl elérési útját, a töredék kezdetét és végét. A töredékekre mutatók létrehozása és megnyitása olyan segédprogramokra van bízva, amelyeket kifejezetten ezekre a célokra készítettem — ez a mediafragmenter és fragplayer. Az első létrehoz, a második megnyit. Hang- és videofelvételek esetén a médiafájl elindítása egy bizonyos pozíciótól egy másikig a VLC médialejátszó segítségével történik, így annak is a rendszerben kell lennie. Eleinte a mplayer alapjaira akartam építeni, de valamiért ott nagyon rosszul működött a pozicionálás a megfelelő pillanatban.
Példánkban létrejön a "Duck Tales intro.fragpointer" fájl (ez egy külön helyen van elhelyezve), majd a töredék lejátszása a fájl elejétől (mivel a —start nem lett megadva a létrehozáskor) 59 másodpercig történik, majd a VLC bezárul.
Egy másik példa — úgy döntöttünk, hogy kategorizáljuk egy ismert előadó koncertjén tett külön fellépést:
vitis assign Lépz "Spasite nashi dushi" -f Grigorij Lepc - Koncert Parus - Vladimir Viszotski dalai.mp4 --fragname "Spasite nashi dushi" --start 00:32:18 --finish 00:36:51
vitis open "Spasite nashi dushi"A megnyitáskor a fájl a megfelelő pozícióban fog bekerülni, és négy és fél perc múlva bezárul.
Hogyan működik mindez + további lehetőségek
Kategóriák tárolása
A szemantikus fájlrendszer megszervezésének tervezésének elején három módszer jutott eszembe: szimbolikus linkek tárolása, adatbázison keresztüli tárolás, XML-ben való leírás. Az első módszer győzött, mivel egyrészt egyszerűen megvalósítható, másrészt pedig a felhasználó a fájlrendszerből közvetlenül nézheti a kategóriákat (ami kényelmes és fontos). A használat elején vitis a felhasználó otthoni könyvtárában létrejön a "Vitis" könyvtár és a ".config/vitis/vitis.conf" konfigurációs fájl. A ~ /Vitis könyvtárban létrejönnek a kategóriáknak megfelelő könyvtárak, és ezekben a kategória könyvtárakban szimbolikus linkek jönnek létre az eredeti fájlokra. A kategóriák álnévként szintén egyszerűen hivatkozások ezekre. Természetesen a "Vitis" könyvtár megléte a felhasználó otthoni mappájában valakit zavarhat. Átválthatunk bármely más helyre:
vitis service set path /mnt/MyFavoriteDisk/Vitis/Egy adott pillanatban világossá válik, hogy a különböző helyeken lévő fájlokat nincs értelme külön kategorizálni, mivel a helyük változhat. Ezért először létrehoztam egy mappát, ahová egyszerűen minden fájlt elhelyeztem és kategóriákat adtam nekik. Aztán úgy döntöttem, hogy ezt a folyamatot programozott szinten is megszervezem. Így született meg a "fájlterület" fogalma. A használat kezdetén vitis azonnal érdemes lenne beállítani egy ilyen helyet (ide fogjuk tárolni az összes szükséges fájlt) és bekapcsolni az automatikus mentést:
vitis service add filespace /mnt/MyFavoriteDisk/Filespace/
vitis service set autosave yesAutomatikus mentés nélkül az „assign” alművelet használatakor szükség lesz a --save jelzőre, ha azt szeretnénk, hogy a hozzáadott fájl mentésre kerüljön a fájlterületbe.
Sőt, több fájlterületet is hozzá lehet adni és meg lehet változtatni a prioritásukat, ami hasznos lehet, ha sok fájl van és ezek különböző adathordozókon tárolódnak. Ezt a lehetőséget itt nem fogom tárgyalni, a programhoz tartozó útmutatóban bővebben olvashat róla.
A szemantikus fájlrendszer migrációja
Bármilyen módon, a Vitis mappa és a fájlterületek elméletileg néha helyet változtatnak. Az működőképesség visszaállítása érdekében létrehoztam egy külön eszközt link-editor, amely képes tömegesen szerkeszteni a hivatkozásokat, cserélve az útvonal részleteit másokra:
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 -RAz első esetben, miután átköltöztünk a /mnt/MyFavoriteDisk/Vitis/ mappából a saját könyvtárunkba, a szimbolikus hivatkozások szerkesztésre kerülnek, amelyek a hamis nevekkel kapcsolatosak. A második esetben, miután a fájlterület helyzete megváltozik, minden hivatkozás a Vitisben újakká válik, az útvonal részének cseréje szerint.
Automatikus kategóriák
Ha futtatjuk a parancsot vitis service get autocategorization, láthatjuk, hogy alapértelmezés szerint az automatikus kategóriák hozzáadása formátum (Format és Type) és fájlkiterjesztés (Extension) szerint van beállítva.
Ez hasznos, amikor például valamit kell keresni a PDF-ek között, vagy megnézni, hogy mit tárolunk EPUB és FB2 formátumban, egyszerűen meg lehet hajtani a lekérdezést
vitis show Format/MOBI u: Format/FB2Úgy alakult, hogy a GNU/Linux szabványos eszközei, mint a file vagy mimetype, nem feleltek meg az elvárásaimnak, mivel nem mindig határozzák meg pontosan a fájlok formátumát. Ezért saját megvalósítást kellett készítenem a fájlszigetelések és kiterjesztések alapján. Egyébként a fájlformátumok meghatározása izgalmas kutatási téma, és megér egy külön cikket. Jelenleg elmondhatom, hogy valószínűleg nem minden formátumra gondoltam a pontos azonosítást, de összességében már most jól működik. Igaz, hogy az EPUB esetében a formátumot ZIP-ként azonosítják (ez általában indokolt, de a gyakorlatban nem lenne normális viselkedés). Egy ideig tekintse ezt a lehetőséget kísérletinek, és hibákról számoljon be. Furcsa helyzetekben mindig használhatja a fájlkiterjesztések kategóriáit, például Extension/epub.
Ha az automatikus kategóriák a formátum alapján be vannak kapcsolva, akkor az automatikus kategóriák is be vannak kapcsolva, amelyek bizonyos formátumokat egyesítenek, mint például: «Archívumok», «Képek», «Videók», «Zene» és «Dokumentumok». Ezekhez az alkategóriákhoz is lokalizált neveket fognak készíteni.
Amiről nem esett szó
vitis egy nagyon sokoldalú eszközzé vált, és nehéz mindent egyszerre áttekinteni. Röviden említeném, hogy még mit lehet tenni:
- a kategóriákat el lehet távolítani és el lehet távolítani a fájloktól;
- a kifejezésekre vonatkozó keresési eredményeket egy megadott könyvtárba lehet másolni;
- a fájlokat programként lehet futtatni;
- a show parancsnak számos lehetősége van, például név/dátum módosítás/lekérdezés/méret/kiterjesztés szerinti rendezés, a fájlok és az eredeti helyek tulajdonságainak megjelenítése, rejtett fájlok megjelenítésének engedélyezése stb.;
- az internetes források hivatkozásainak mentésével helyi másolatokat is lehet menteni HTML-oldalakról.
Minden részletet megtalálhat a felhasználói dokumentációban.
Kilátások
Gyakran a szkeptikusok azt mondják, hogy «senki sem fogja ezeket a címkéket saját magától beállítani». A saját példámmal ellenkezőleg tudom bizonyítani: már több mint hatezer fájlt kategorizáltam, több mint ezer kategóriát és álnév létrehoztam, és megérte. Mikor egy parancsra vitis open Terv megnyitja a teendői listáját, vagy mikor egy parancsra vitis open LaTeX megnyitja Stolyarov könyvét a LaTeX tördelési rendszerről, akkor már lelkileg nehéz «a régi módon» használni a fájlrendszert.
Ez alapján több ötlet is felmerül. Például készíthetünk egy automatikus rádiót, amely a témához illő zenéket játszik a jelenlegi időjárás, ünnep, hét napja, napszak vagy évszak szerint. Szintén releváns a téma szempontjából egy zenelejátszó, amely ismeri a kategóriákat, és képes zenét lejátszani a kategóriák feletti műveletek kifejezése alapján, mint halmazokon. Hasznos lenne egy démon, amely figyelné a „Letöltések” könyvtárat, és javasolná az új fájlok kategorizálását. Nos, természetesen készíteni kellene egy megfelelő grafikus szemantikai fájlkezelőt. Valamikor készítettem egy webszolgáltatást a fájlok közös használatához, de ez nem volt prioritás, és elavult, bár elérte a magas működési szintet. (A nagyobb változások miatt... vitis, már nem használható.)
itt egy kis bemutató

Zárás
Vitis — nem az első kísérlet radikálisan megváltoztatni az adatokkal való munkát, de fontosnak tartottam megvalósítani az ötleteimet és nyilvánosságra hozni a megvalósítást a GNU GPL licenc alatt. A kényelem kedvéért készült egy deb csomag x86-64 architektúrára, amelynek működnie kell minden modern Debian disztribúcióval. Az ARM-on kisebb nehézségek adódtak (míg a többi, azzal kapcsolatos program... vitis, jól működik), de később erre a platformra (armhf) is készülni fog egy működő csomag. Az RPM csomagok készítésével egyelőre felhagytam, a Fedora 30 miatt felmerült problémák és a sok RPM disztribúcióra való elágazás nehézsége miatt, de később néhányhoz mindenképpen készülnek csomagok. Egyelőre lehet használni make && make install vagy checkinstall.
Köszönöm mindenkinek a figyelmet! Remélem, ez a cikk és ez a projekt hasznosnak bizonyul.
Forrás: habr.com
