Klasifikimi i të dhënave është vetë një temë interesante për kërkime. Më pëlqen të grumbulloj informacion që duket se është e nevojshme, dhe gjithmonë kam përpiquar të krijoj hierarkitë logjike për dosjet e mia. Një herë kur flija, pashë një program të bukur dhe praktik për t'i caktuar etiketa dosjeve, dhe vendosa se nuk mund të vazhdoja kështu më.
Problemi i sistemeve hierarkike të dosjeve
Përdoruesit shpesh përballen me problemin e zgjedhjes së vendit për të ruajtur dosjen e re dhe me problemin e gjetjes së dosjeve të tyre (ndonjëherë emrat e dosjeve as nuk janë të destinuara për t'u mbajtur mend nga njerëzit).
Zgjidhja mund të jetë sistemet semantike të dosjeve, të cilat zakonisht janë shtresa mbi sistemin tradicional të dosjeve. Drejtoritë në to zëvendësohen nga atribute semantike, gjithashtu të quajtura etiketa, kategori, metadata. Unë do të përdor më shpesh termin "kategori", pasi në kontekstin e sistemeve të dosjeve fjala "etiketë" duket ndonjëherë e çuditshme, sidomos kur dalin "nënetiketat" dhe "pseudonimet e etiketave".
Caktimi i kategorive për dosjet në masë e eliminon shumë nga problemet e vendit të ruajtjes dhe gjetjes së dosjeve: nëse e mban mend (ose e supozon) të paktën një nga kategoritë e caktuara për një dosje, ajo dosje nuk do të humbasë kurrë nga pamja.
Kjo temë ka qenë ngritur më parë në Habr (, , , etj.), këtu po përshkruaj zgjidhjen time.
Rruga drejt realizimit
Menjëherë pas atij ëndrrim, une përshkrova në një libër të vogël ndërfaqen e komandës që do të ofronte funksionalitetin e nevojshëm me kategoritë. Atëherë vendosa se brenda një jave ose dy do të isha në gjendje të shkruaja një prototip, duke përdorur Python ose Bash, dhe më pas do të duhet të punoja për të krijuar një ndërfaqe grafike me Qt ose GTK. Realiteti, si gjithmonë, u tregua më i ashpër, dhe zhvillimi u zgjat.
Ideja fillestare ishte të krijoja një program me një ndërfaqe të thjeshtë dhe elegante të komandës, e cila do të krijonte, fshinte kategori, do të caktënte kategori për dosjet dhe do të fshinte kategoritë nga dosjet. Programi e quajta vitis.
Përpjekja e parë për të krijuar vitis nuk doli asgjë, pasi shumë kohë filloi të shpenzohej për punë dhe fakultet. Përpjekja e dytë ishte më e suksesshme: me disertacionin e masterit arrita të përfundoj projektin e parashikuar dhe madje të krijoj një prototip të ndërfaqes GTK. Por ajo version doli të ishte aq e pasigurt dhe e pakëndshme, sa që detyrova të rishqyrtoj shumë aspekte.
Versioni i tretë e përdora realisht për një kohë shumë të gjatë, duke i transferuar mijëra dosje në kategori. Këtu ndihmoi shumë plotësimi automatik i bash-it. Megjithatë, disa probleme si mungesa e kategorive automatike dhe mundësia për ruajtjen e dosjeve me emra të njëjtë, megjithatë mbetën, dhe programi filloi të ishte i komplikuar. Kështu, jam detyruar të përballoja problemet e zhvillimit të softuerëve të ndërlikuar: të shkruaja kërkesat e detajuara, të zhvilloja një sistem të testimit funksional, të studioja udhëzimet për paketimin dhe shumë gjëra të tjera. Tani kam arritur në të parashikuar, kështu që kjo krijesë e vogël mund të paraqitet për komunitetin e lirë. Një menaxhim kaq specifik i dosjeve, si menaxhimi përmes konceptit të kategorive, ndikon në pyetje dhe probleme të papritura, dhe në zgjidhjen e tyre vitis kam krijuar edhe pesë projekte të tjera, disa prej të cilave do të përmenden në artikull. Akoma vitis nuk kam fituar një ndërfaqe grafike, por lehtësia e përdorimit të kategorive të dosjeve nga linja e komandës tashmë përmbush çdo avantazh të menaxherit tradicional të dosjeve grafike.
Shembuj përdorimi
Le të fillojmë me të thjeshtën — krijojmë një kategori:
vitis create MuzikëLe të shtojmë për shembull një kompozitë në të:
vitis assign Muzikë -f "The Ink Spots - I Don't Want To Set The World On Fire.mp3"Mund të shihni përmbajtjen e kategorisë "Muzikë" me komandën "show":
vitis show MuzikëMund ta luani atë me komandën "open"
vitis open MuzikëDuke qenë se në kategorinë "Muzikë" kemi vetëm një skedar, vetëm ai do të aktivizohet. Për qëllime të hapjes së skedarëve me programet e paracaktuara, kam krijuar një utilitare të veçantë vts-fs-open (mjetet standarde si xdg-open ose mimeopen nuk më kënaqin për disa arsye; por, nëse ka ndonjë nevojë, mund të përcaktoni një utilitare tjetër për hapjen universale të skedarëve në konfigurimet). Kjo utilitare punon mirë në distribucione të ndryshme me ambientet e ndryshme të punës, kështu që e rekomandoj së bashku me vitis.
Mund ta caktosh drejtpërdrejt programin për të hapur skedarët:
vitis open Muzikë --app qmmp
Le të krijojmë disa kategori dhe t'i shtojmë skedarë duke përdorur «assign». Nëse skedarët i atribuohen kategori që nuk ekzistojnë ende, do të ketë një kërkesë për krijimin e tyre. Mund të shmangim një kërkesë të panevojshme nëse përdorim flamurin —yes.
vitis assign Programming R -f "Hyrje në R.pdf" "Pako statistike R: teoria e probabiliteteve dhe statistika.pdf" --yesTani duam të shtojmë në skedarin «Pako statistike R: teoria e probabiliteteve dhe statistika.pdf» kategorinë «Matematika». E dimë që ky skedar tashmë ka kategorinë «R» dhe prandaj mund të përdorim rrugën kategorike nga sistemi Vitis:
vitis assign Matematika -v "R/Pako statistike R: teoria e probabiliteteve dhe statistika.pdf"Fatmirësisht, plotësimi automatik i bash-it do ta bëjë këtë lehtësisht.
Le të shohim çfarë kemi arritur, duke përdorur flamurin —categories, për të parë listën e kategorive për çdo skedar:
vitis show R --categories
Vëreni se skedarët gjithashtu kanë marrë kategori automatikisht sipas formatit, llojit (bashkon formate) dhe zgjerimit të skedarëve. Këto kategori mund të çaktivizohen nëse dëshirohet. Më vonë do të bëj patjetër lokalizimin e emrave të tyre.
Le të shtojmë gjithashtu diçka për ndryshim në «Matematika»:
vitis assign Matematika -f "Analiza matematike - 1984.pdf" Perelman_Matematika_Kurioze_1927.djvu Dhe tani fillon pjesa interesante. Në vend të kategorive, mund të shkruajmë shprehje me operacione bashkimi, ndërprerjeje dhe zbritjeje, dmth, të përdorim operacione mbi grupe. Për shembull, ndërprerja e «Matematika» me «R» do të japë si rezultat një skedar.
vitis show R i: MatematikaLe të zbresim përmendjet e gjuhës «R» nga «Matematika»:
vitis show Matematika R #ose vitis show Matematika c: RMund të bashkojmë me paqëllim muzikën dhe gjuhën R:
vitis show Muzika u: RFlamuri -n lejon "shkarkimin" e skedarëve të nevojshëm nga rezultati i kërkesës sipas numrave dhe/ose grupeve, për shembull, -n 3-7, ose gjë më të komplikuar: -n 1,5,8-10,13. Shpesh është e dobishme me komandën nënkomandë open, e cila lejon hapjen e skedarëve të nevojshëm nga lista.

Edhe pse jemi duke u larguar nga përdorimi i hierarkisë së zakonshme të direktorive, shpesh është e dobishme të kemi kategori të thelluara. Le të krijojmë një nënkategori «Statistika» në kategori «Matematika» dhe të shtojmë këtë kategori në një skedar të përshtatshëm:
vitis create Matematika/Statistika
vitis assign Matematika/Statistika -v "R/Hyrje në R.pdf"
vitis show Matematika --categories
Mund të shohim se ky skedar tani ka kategorinë «Matematika/Statistika» në vend të «Matematika» (lidhjet e tepërta janë të gjurmueshme).
Të referohesh me rrugën e plotë mund të jetë e pakëndshme, le të krijojmë një pseudonim «global»:
vitis assign Matematika/Statistika -a Statistika
vitis show Statistika
Jo vetëm skedarë të zakonshëm
Linket në internet
Për të unifikuar ruajtjen e çfarëdo informacioni do të ishte e dobishme, si të paktën, të kategorizojmë linket në burimet e internetit. Dhe kjo është e mundur:
vitis assign Habr Anomali ngjyrash -i https://habr.com/ru/company/sfe_ru/blog/437304/ --yesNë një vend të veçantë do të krijohet një skedar me titullin e faqes HTML dhe me zgjerimin .desktop. Ky është formati tradicional i shkurtimeve në GNU/Linux. Këto shkurtime marrin një kategori automatikisht NetworkBookmarks.
Natyrisht, shkurtime krijohen për t'u përdorur:
vitis open Anomali ngjyrashKryerja e komandës çon në hapjen në shfletuesin e lidhjes së sapo ruajtur. Shkurtime të kategorizuara për burimet e internetit mund të shërbejnë si një zëvendësim për shënimet e shfletuesit.
Fragmente skedari
Gjithashtu është e dobishme të kemi kategori për fragmente të veçanta skedarësh. Një aplikim i mirë, a jo? Por realizimi aktual përfshin vetëm skedarë të zakonshëm tekst, audio dhe video. Le të themi, ju nevojitet të shënoni një pjesë të caktuar të një koncerti ose një moment qesharak në një film, atëherë duke përdorur assign mund të shfrytëzoni flamujt —fragname, —start, —finish. Le të ruajmë hapësirën nga «Përrallat e Patkoshëve»:
vitis assign vitis assign -c Hapësira -f Duck_Tales/s01s01.avi --finish 00:00:59 --fragname "Intro Duck Tales"
vitis open HapësiraRealmente nuk ndodh asnjë prerje e skedarëve, në vend të kësaj krijohet një skedar-pikat për fragmentin, në të cilin përshkruhen lloji i skedarit, rruga drejt skedarit, fillimi dhe fundi i fragmentit. Krijimi dhe hapja e pikave të fragmentëve i delegohet mjeteve, të bëra posaçërisht për këto qëllime — kjo është mediafragmenter dhe fragplayer. E para krijon, e dyta hap. Në rastin e regjistrimeve audio dhe video, nisja e skedarëve mediatikë nga një pozicion i caktuar deri në një pozicion të caktuar ndodh me ndihmën e player-it VLC, kështu që ai duhet të jetë gjithashtu në sistem. Fillimisht doja ta bëja këtë mbi bazën e mplayer-it, por atje për ndonjë arsye ishte shumë keq me pozicionimin në momentin e duhur.
Në shembullin tonë krijohet skedari «Duck Tales intro.fragpointer» (i cili vendoset në një vend të veçantë), dhe më pas luhet një fragment nga fillimi i skedarit (pasi —start nuk u specifikua gjatë krijimit) deri në etiketën në 59 sekonda, pas së cilës VLC mbyllet.
Një shembull tjetër është se ne vendosëm të kategorizojmë një performancë të veçantë në një koncert të ndonjë këngëtari të njohur:
vitis assign Лепс "Спасите наши души" -f Григорий Лепc - Концерт Парус - песни Владимира Высоцкого.mp4 --fragname "Спасите наши души" --start 00:32:18 --finish 00:36:51
vitis open "Спасите наши души"Kur hapet, skedari do të përfshihet në pozitat e nevojshme dhe pas katër minutash e gjysmë do të mbyllet.
Si funksionon gjithçka + mundësi të tjera
Ruan kategoritë
Në fillim të mendimit të organizatës së sistemit të skedarëve semantik, më erdhi në mend tre mënyra: përmes ruajtjes së lidhjeve simbolike, përmes një baze të dhënash, përmes përshkrimit në XML. Mënyra e parë fitoi, pasi nga njëra anë ishte e thjeshtë për t'u realizuar, dhe nga ana tjetër – përdoruesi ka mundësinë të shikojë kategoritë direkt nga sistemi i skedarëve (dhe kjo është e dobishme dhe e rëndësishme). Në fillim të përdorimit vitis në direktorinë e shtëpisë së përdoruesit krijohet një drejtorinë «Vitis» dhe një skedar konfigurimi «.config/vitis/vitis.conf». Në ~/Vitis krijohen drejtoritë që përkojnë me kategoritë, dhe në këto drejtoritë-kategori krijohen lidhje simbolike në skedarët origjinalë. Pseudonimet e kategorive janë gjithashtu thjesht lidhje për to. Sigurisht, ekzistenca e drejtorisë «Vitis» në dosjen e shtëpisë mund të pakësojë disa njerëz. Mund të kalojmë në çdo vend tjetër:
vitis service set path /mnt/MyFavoriteDisk/Vitis/Në një moment bëhet e qartë se skedarët që janë shpërndarë në vende të ndryshme janë pak të kuptueshëm për t'u kategorizuar, pasi vendndodhja e tyre mund të ndryshojë. Prandaj, fillimisht krijova një direktori ku vetëm hodha gjithçka dhe i dha këtij të gjithë kategori. Më pas vendosa se do të ishte mirë ta organizoja këtë moment në nivelin programatik. Kështu lindi koncepti i «hapësirës së skedarëve». Në fillim të përdorimit vitis do të ishte e dobishme të vendosnim një vend të tillë (aty do të ruhet të gjithë skedarët e nevojshëm) dhe të aktivizojmë ruajtjen automatike:
vitis service add filespace /mnt/MyFavoriteDisk/Filespace/
vitis service set autosave yesPa ruajtjen automatike, gjatë përdorimit të nënkomandës «assign», do të kërkohet flag —save, nëse do të ketë dëshirë të ruhet skedari i shtuar në hapësirën e skedarëve.
Për më tepër, mund të shtoni disa hapësira skedarësh dhe të ndryshoni prioritetet e tyre, kjo mund të jetë e dobishme kur ka shumë skedarë dhe ata ruhen në media të ndryshme. Këtu nuk do ta shqyrtoj këtë mundësi, detajet mund të lexohen në ndihmën e programit.
Migroja e sistemit të skedarëve semantik
Ka raste që direktoria Vitis dhe hapësirat e skedarëve teorikisht mund të lëvizin nga një vend në një tjetër. Për të rikthyer funksionalitetin krijova një utilit për veprime masive link-editor, i cili mund të redaktojë masivisht lidhjet, duke zëvendësuar pjesët e rrugës me të tjera:
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 -RNë rastin e parë, pasi u transferuam nga /mnt/MyFavoriteDisk/Vitis/ në dosjen e shtëpisë, redaktohen lidhjet simbolike që lidhen me pseudonimet. Në rastin e dytë, pas ndryshimit të vendndodhjes së hapësirës së skedarëve, ndryshohen të gjitha lidhjet në Vitis për t'u përputhur me kërkesën e zëvendësimit të pjesëve të rrugës së tyre.
Kategoritë automatike
Nëse aktivizoni komandën vitis service get autocategorization, do të mund të shihni se si, nga default, janë të konfiguruara kategoritë automatike sipas formatit (Format dhe Type) dhe zgjerimit të skedarëve (Extension).
Kjo është e dobishme, kur ndoshta ju nevojitet diçka të gjeni midis PDF-ve ose të shikoni çfarë keni ruajtur nga EPUB dhe FB2, mund të thjesht kryeni një kërkesë
vitis show Format/MOBI u: Format/FB2Kështu ka ndodhur, që mjetet standarde GNU/Linux si file ose mimetype nuk më kënaqin pikërisht për shkak se ato nuk e përcaktojnë gjithmonë saktë formatin, kështu që duhej të bëja një zbatim timin sipas nënshkronjave të skedarëve dhe zgjerimeve. Në të vërtetë, tema e përcaktimit të formateve të skedarëve është një temë interesante për hulumtime dhe meriton një artikull të veçantë. Deri tani mund të them se, ndoshta, nuk kam parashikuar njohjen e saktë për të gjithë formatet në botë, por deri tani funksionon mirë. Megjithatë, për EPUB aktualisht formati përcaktohet si ZIP (me të vërtetë të arsyeshme, por në praktikë kjo nuk duhet të konsiderohet si një sjellje normale). Deri në një farë kohe, merrni këtë mundësi si eksperimentale, njoftoni për gabimet. Në situata të çuditshme gjithmonë mund të përdorni kategoritë sipas zgjerimeve të skedarëve, për shembull, Extension/epub.
Nëse kategoria automatikisht është e aktivizuar sipas formatit, gjithashtu janë të aktivizuara kategoria automatike që bashkojnë disa formate si: «Arkiva», «Imazhe», «Video», «Audio» dhe «Dokumente». Emrat e lokalizuar do të krijohen edhe për këto nënkategoritë.
Për atë që nuk përmendet
vitis u bë një mjet shumëdimensional dhe është e vështirë të përfshihen të gjitha menjëherë. Do të përmend shkurtimisht se çfarë mund të bëhet gjithashtu:
- kategoritë mund të fshihen dhe të hiqen nga skedarët;
- rezultatet e kërkimeve për shprehjet mund të kopjohen në drejtorinë e caktuar;
- skedarët mund të ekzekutohen si programe;
- ekipi i shfaqjes ka shumë mundësi, për shembull, renditje sipas emrit/ditës së modifikimit ose aksesimit/madhësisë/zgjatjes, shfaqja e pronave të skedarëve dhe rrugët për origjinat, përfshirja e shfaqjes së skedarëve të fshehur dhe të tjera;
- kur ruani lidhjet në burimet e internetit, mund të ruani gjithashtu kopje lokale të faqeve HTML.
Të gjitha detajet mund të gjenden në udhëzimet e përdoruesit.
Perspektivat
Shpesh skeptikët thonë se «askush nuk do t'i vendosë vetë këto etiketa». Nga përvoja ime mund ta provoi të kundërtën: kam kategorizuar më shumë se gjashtë mijë skedarë, kam krijuar më shumë se një mijë kategoritë dhe pseudonime, dhe kjo ia vlen. Kur me një komandë vitis open Plan hap listën e detyrave të tua ose kur me një komandë vitis open LaTeX hap librin e Stolyarov mbi sistemin e formatimit LaTeX, është moralistik e vështirë të përdorësh sistemin e skedarëve «si më parë».
Nga kjo lindin një sërë idesh. Për shembull, mund të krijohet një radio automatike që aktivizon muzikë tematikore sipas motit aktual, festave, ditës së javës, orës së ditës apo vitit. Një tjetër afër temës është një mjegullor muzikor, i cili e di për kategoritë dhe mund të luajë muzikë sipas shprehjeve me operacione mbi kategoritë si grupe. Do të ishte e dobishme të bëhej një demon që ndjek drejtorinë e «Shkarkimeve» dhe ofron kategorizimin e skedarëve të rinj. Dhe natyrisht, do të ishte e nevojshme të krijohej një menaxher i skedarëve grafik semantik në mënyrë të konsiderueshme. Dikur, madje kam krijuar një shërbim në ueb për ndarjen kolektive të skedarëve për një sipërmarrje, por ai nuk ishte prioritet dhe u bë i papërshtatshëm, edhe pse arriti një nivel të lartë funksionaliteti. (Për shkak të ndryshimeve të mëdha në vetë, vitis, ai tashmë nuk është i përdorshëm.)
këtu është një demonstrim i vogël

Përfundimi
Vitis nuk është përpjekja e parë për të ndryshuar radikalisht stilin e punës me të dhënat, por unë e konsiderova të rëndësishme të realizoj idetë e mia dhe t'i publikoj ato në akses të hapur nën licencën GNU GPL. Për lehtësim është krijuar një paketë deb për x86-64, e cila duhet të funksionojë në të gjitha shpërndarjet moderne të Debian. Në ARM pati disa vështirësi të vogla (ndërsa të gjitha programet e tjera të lidhura me, funksionojnë normalisht), por më vonë do të krijohet një paketë funksionale për këtë platformë (armhf). Krijimi i paketave RPM ka ndaluar për shkak të problemeve në Fedora 30 dhe problematikës për t'u shpërndarë në shumë shpërndarje RPM, por më vonë megjithatë do të bëhen paketa për disa prej tyre. Ndërkohë, mund të përdoren vitis, funksionojnë normalisht), por më vonë do të krijohet një paketë funksionale për këtë platformë (armhf). Krijimin e paketave RPM aktualisht e kam ndalur për shkak të problemeve në Fedora 30 dhe vështirësinë për t'u shpërndarë në shumë distribucione RPM, por më vonë gjithsesi do të krijohen paketa për disa prej tyre. Deri atëherë mund të përdoren make && make install ose checkinstall.
Përshëndetje gjithëve! Shpresoj se ky artikull dhe ky projekt do të jenë të dobishme.
Burimi: habr.com
