Klasifikimi i të dhënave është një temë e interesantë për kërkime. Më pëlqen të mbledh informacion që duket i nevojshëm dhe gjithmonë kam përpiquar të krijoj hierarki logjike për dosjet e mia, dhe një herë në ëndërr pashë një program të bukur dhe praktik për caktimin e etiketave për dosjet, dhe vendosa që nuk mund të vazhdoj më kështu.
Problemi i sistemeve hierarkike të dosjeve
Përdoruesit shpesh përballen me problemin e seleksionit të vendit për ruajtjen e një dosjeje të re dhe problemin e gjetjes së dosjeve të veta (ndonjëherë emrat e dosjeve nuk janë aspak të dizajnuar për t'u mbajtur mend nga njeri).
Zgjidhja mund të jenë sistemet e dosjeve semantike, të cilat zakonisht janë një shtresë mbi sistemet tradicionale të dosjeve. Dosjet në to zëvendësohen me atribute semantike, të njohura gjithashtu si etiketa, kategori, metadata. Do ta përdor më shpesh termin "kategori", pasi në konteksin e sistemeve të dosjeve fjala "etiketë" duket ndonjëherë e çuditshme, veçanërisht kur shfaqen "nën-etiketa" dhe "pseudonime etiketash".
Caktimi i kategorive për dosjet në masë të madhe shpëton nga problemet e ruajtjes dhe gjetjes së dosjeve: nëse e kujton (apo e supozon) të paktën një nga kategoritë e caktuara për dosjen, atëherë dosja kurrë nuk do të humbasë nga sytë.
Më parë në Habrë është trajtuar disa herë kjo temë (, , , etj.), këtu po përshkruaj zgjidhjen time.
Rruga drejt realizimit
Menjëherë pas ëndrrës së përmendur, e përshkrova në një tabletë ndërfaqen e komandave që siguron punën e nevojshme me kategoritë. Atëherë vendosa se brenda një jave-dy mund të shkruaja një prototip duke përdorur Python ose Bash, pastaj do të duhej të punoja në krijimin e një ndërfaqe grafike në Qt ose GTK. Realiteti, si gjithmonë, doli të ishte shumë më i ashpër, dhe zhvillimi u zgjat.
Ideja fillestare ishte që të bëja së pari një program me një ndërfaqe të rehatshme dhe të qartë të linjës së komandës, e cila do të krijonte, fshinte kategoritë, caktonte kategoritë për dosjet dhe fshinte kategoritë nga dosjet. Programin e quajtëm vitis.
Përpjekja e parë për të krijuar vitis mbarë pa kurrfarë rezultati, sepse për shumë kohë u largova në punë dhe në institucion. Përpjekja e dytë ishte më e suksesshme: për disertacionin e magjistraturës arrita të përfundoj projektin e parashikuar dhe madje të krijoj një prototip të ndërfaqes GTK. Por ajo version ishte kaq e paqëndrueshme dhe e palakmueshme, saqë duhej të rishikoja shumë gjëra.
Versioni i tretë unë e përdora vërtet për një kohë shumë të gjatë, duke kategorizuar disa mijëra skedarë të mi. Kjo gjithashtu u ndihmua shumë nga implementimi i autokompletimeve në bash. Por disa probleme, si mungesa e kategorive automatike dhe mundësia e ruajtjes së skedarëve me emra të njëjtë, ende mbetën, madje programi po dështonte nga komplekse të veta. Kështu, arrita në nevojën për të zgjidhur problemet e zhvillimit të softuerit kompleks: të shkruaj kërkesat përkatëse, të zhvilloj një sistem testimi funksional, të studioj udhëzimet për paketimin dhe shumë të tjera. Tani kam arritur në atë që kishe parashikuar, kështu që ky krijim modeste mund të paraqitet për komunitetin e hapur. Menaxhimi i dosjeve në një mënyrë kaq specifike, si menaxhimi përmes konceptit të kategorive, ngre pyetje dhe probleme të papritura, dhe në zgjidhjen e tyre vitis ka lindur rreth vetes edhe pesë projekte, disa prej të cilave do të përmenden në artikull. Akoma vitis nuk kam marrë një ndërfaqe grafike, por lehtësia e përdorimit të kategorive të dosjeve nga linja e komandës tashmë e tejkalon për mua çdo përfitim të menaxhuesit të dosjeve grafike të zakonshëm.
Shembuj përdorimi
Të fillojmë me të thjeshtin — të krijojmë një kategori:
vitis create MuzikëShtoni në të për shembull ndonjë kompozim:
vitis assign Muzikë -f "The Ink Spots - I Don't Want To Set The World On Fire.mp3"Mund të shikoni përmbajtjen e kategorisë 'Muzikë' me komandën 'show':
vitis show MuzikëTë luani atë mund të bëhet me komandën 'open'
vitis open MuzikëDuke qenë se në kategorinë 'Muzikë' kemi vetëm një skedar, vetëm ai do të nisë. Për qëllimet e hapjes së skedarëve me programet përkatëse, kam bërë një utilitare të veçantë vts-fs-open (mjetet standarde si xdg-open ose mimeopen nuk më përshtaten për disa arsye; por, nëse ndodh, në cilësimet mund të tregoni një utilitare tjetër për hapjen universale të skedarëve). Ky utilitar punon mirë në distribuime të ndryshme me ambiente të ndryshme të punës, kështu që rekomandoj që së bashku me vitis ta instaloni edhe atë.
Mund ta dhe të jepni direkt programin për hapjen e skedarëve:
vitis open Muzikë --app qmmp
Le të krijojmë disa kategori të tjera dhe të shtojmë skedarë duke përdorur «assign». Nëse skedarët i caktohen kategorive që nuk ekzistojnë ende, do të kërkohet që ato të krijohen. Mund të shmangim një kërkesë të panevojshme duke përdorur flakën —yes.
vitis assign Programim R -f "Hyrje në R.pdf" "Paketa statistike R: teoria e probability dhe statistika.pdf" --yesTani duam të shtojmë skedarit "Paketa statistike R: teoria e probability dhe statistika.pdf" kategorinë "Matematika". E dimë se ky skedar tashmë ka kategorinë "R" dhe prandaj mund ta përdorim rrugën e kategorisë nga sistemi Vitis:
vitis assign Matematika -v "R/ Paketa statistike R: teoria e probability dhe statistika.pdf"Faleminderit, autokompletimi bash do ta lejojë këtë të bëhet lehtë.
Shikojmë çfarë kemi arritur, duke përdorur flakën —categories, për të parë listën e kategorive për çdo skedar:
vitis show R --categories
Vëreni se skedarët gjithashtu iu caktuan kategori automatike sipas formatit, tipit (bashkon formate) dhe zgjerimit të skedarëve. Këto kategori mund të deaktivizohen nëse është e nevojshme. Më vonë unë do të bëj patjetër lokalizimin e emrave të tyre.
Le të shtojmë diçka tjetër për diversitet në "Matematika":
vitis assign Matematika -f "Analiza matematikore - 1984.pdf" Perelman_Dhëna_e_matematikës_1927.djvu Tani fillon e interesantja. Në vend të kategorive, mund të shkruajmë shprehje me operacione bashkimi, ndërprerjeje dhe zbritjeje, pra të përdorim operacione mbi grupe. Për shembull, ndërprerja e "Matematikës" me "R" do të japë një skedar.
vitis show R i: MatematikaLe ta heqim nga "Matematika" përmendjet e gjuhës "R":
vitis show Matematika R #ose vitis show Matematika c: RMund të bashkojmë në mënyrë pa qëllim muzikën dhe gjuhën R:
vitis show Muzikë u: RFlaka -n lejon "të nxjerrësh" skedarët e duhur nga rezultati i kërkesës sipas numrave dhe/ose grupeve, për shembull, -n 3-7, ose diçka më të komplikuar: -n 1,5,8-10,13. Shpesh është e dobishme me nënkomandën open, e cila lejon hapjen e skedarëve të nevojshëm nga lista.

Edhe pse po largohemi nga përdorimi i hierarkisë tradicionale të dosjeve, shpesh është e dobishme të kemi kategori të ngulitura. Le të krijojmë një nënkategori "Statistika" brenda kategorisë "Matematika" dhe të shtojmë këtë kategori në skedarin përkatës:
vitis create Matematika/Statistika
vitis assign Matematika/Statistika -v "R/Hyrja në R.pdf"
vitis show Matematika --categories
Mund të shohim se ky skedar tani ka kategorinë «Matematika/Statistika» në vend të «Matematika» (linket e tepërta po monitorohen).
Të adresosh 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 e internetit
Për unifikimin e ruajtjes së çdo informacioni do të ishte e dobishme, të paktën, të kategorizojmë linket në burimet e internetit. Dhe kjo është e mundur:
vitis assign Habr Anomalitë e Ngjyrave -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 zgjatjen .desktop. Ky është një format tradicional për ikonat në GNU/Linux. Këto ikona marrin automatikisht kategorinë NetworkBookmarks.
Sigurisht, ikonat krijohen për t'u përdorur:
vitis open Anomalitë e NgjyraveEkzekutimi i komandës çon në hapjen në shfletuesin e lidhjes së sapo ruajtur. Ikonat e kategorizuara në burimet e internetit mund të shërbejnë si zëvendësim për shenjat e shfletuesit.
Fragmente skedarësh
Gjithashtu është e dobishme të kemi kategori për fragmente të veçanta skedarësh. Një propozim i mirë, apo jo? Por realizimi aktual prek vetëm skedarët e zakonshëm të tekstit, audio dhe video. Le t'i themi, ju nevojitet të shënoni një pjesë të caktuar të ndonjë koncerti ose një moment qesharak në një film, atëherë duke përdorur assign mund të përfitoni nga flamujt —fragname, —start, —finish. Le të ruajmë intro-n nga «Histori të Patajtë»:
vitis assign vitis assign -c Intro -f Duck_Tales/s01s01.avi --finish 00:00:59 --fragname "Duck Tales intro"
vitis open IntroNë të vërtetë, nuk ka ndonjë prerje skedarësh, përkundrazi, krijohet një skedar-referencë për fragmentin, në të cilin përshkruhet lloji i skedarit, rruga e skedarit, fillimi dhe fundi i fragmentit. Krijimi dhe hapja e referencave për fragmente i delegohet utiliteteve, të krijuara nga unë posaçërisht për këto qëllime — mediafragmenter dhe fragplayer. E para krijon, ndërsa e dyta hap. Në rastin e regjistrimeve audio dhe video, fillimi i skedarit mediatik nga një pozite e caktuar deri në një pozite tjetër bëhet me ndihmën e player-it VLC, kështu që ai gjithashtu duhet të jetë 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 kërkuar.
Në shembullin tonë krijohet skedari "Duck Tales intro.fragpointer" (ai vendoset në një vend të veçantë), dhe më pas riprodhohet fr لقاء I prafeminë nga fillimi i skedarit (pasi -start nuk u specifikua gjatë krijimit) deri në shenjën në 59 sekonda, pas së cilës VLC mbyllet.
Një shembull tjetër është se vendosëm të kategorizojmë një performancë të veçantë në koncertin e ndonjë artisti të njohur:
vitis assign Лепс "Спасите наши души" -f Григорий Лепc - Концерт Парус - песни Владимира Высоцкого.mp4 --fragname "Спасите наши души" --start 00:32:18 --finish 00:36:51
vitis open "Спасите наши души"Kur të hapet, skedari do të përfshihet në pozitat e duhura dhe pas katër minutash e gjysmë do të mbyllet.
Si funksionon gjithçka + mundësi shtesë
Ruajtja e kategorive
Në fillim të mendimit për organizimin e 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ë, ajo është 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 përshtatshme dhe e rëndësishme). Në fillim të përdorimit vitis në drejtorinë e shtëpisë së përdoruesit krijohet një drejtor për "Vitis" dhe një skedari konfigurimi " .config/vitis/vitis.conf". Në ~/Vitis krijohen drejtoritë që përputhen me kategoritë, dhe në këto drejtoritë-kategoritë krijohen lidhje simbolike për skedarët origjinalë. Pseudonimet e kategorive janë gjithashtu thjesht lidhje për to. Sigurisht, ekzistenca e drejtorisë "Vitis" në katalogun e shtëpisë mund të mos kënaqë disa njerëz. Mund të kalojmë në ndonjë vend tjetër:
vitis service set path /mnt/MyFavoriteDisk/Vitis/Në një moment bëhet e qartë se kategorizimi i skedareve të shpërndara në vende të ndryshme nuk ka shumë kuptim, pasi pozita e tyre mund të ndryshojë. Prandaj fillimisht krijova një drejtor për të hedhur gjithçka dhe t'i jepja këtyre kategoritë. Më pas vendosa se nuk do të ishte keq të organizohej ky moment në nivelin programor. Kështu, u shfaq koncepti i "hapësirës së skedarëve". Në fillim të përdorimit vitis menjëherë do të ishte e dobishme të konfigurohej një vend (aty do të ruhen të gjitha skedarët që na duhen) dhe të përfshihej ruajtja automatikisht:
vitis service add filespace /mnt/MyFavoriteDisk/Filespace/
vitis service set autosave yesPa përdorimin e nënkomandës «assign» do të kërkohet flamuri —save, nëse dëshiron të ruash skedarin e shtuar në hapësirën e skedarëve.
Më tepër, mund të shtosh disa hapësira skedarësh dhe të ndryshosh prioritete të ndryshme, çka mund të jetë e dobishme kur ke shumë skeda dhe ato ruajnë në media të ndryshme. Këtu nuk do të shqyrtoj këtë mundësi, detajet mund të lexohen në ndihmën e programit.
Migrimi i sistemit të skedarëve semantikë
Ndonjëherë, direktorja Vitis dhe hapësirat e skedarëve teoriht mund të lëvizin nga vendi në vend. Për ta bërë funksional unë krijova një utilitar të veçantë link-editor, i cili mund të editon masivisht lidhjet, duke zëvendësuar pjesë të 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 trasferuam nga /mnt/MyFavoriteDisk/Vitis/ në direktorinë e shtëpisë, redaktohen lidhjet simbolike që lidhen me pseudonimet. Në rastin e dytë, pasi ndryshon vendndodhja e hapësirës së skedarëve, të gjitha lidhjet në Vitis ndryshohen në të rejat përkatëse për kërkesën e zëvendësimit të pjesës së rrugës së tyre.
Kategoritë automatikisht
Nëse ekzekuton komandën vitis service get autocategorization, mund të shohësh se siç është paracaktuar përcaktimi i kategorive automatike sipas formatit (Format dhe Tipi) dhe zgjerimit të skedarëve (Extension).
Kjo është e dobishme, kur për shembull ke nevojë të gjesh diçka mes PDF-ëve ose të shohësh çfarë ke ruajtur nga EPUB dhe FB2, mund të thjesht ekzekutosh kërkesën
vitis show Format/MOBI u: Format/FB2Kaq ndodhi, që mjetet standarde GNU/Linux si file ose mimetype nuk më përmbushën, pikërisht sepse ato nuk e përcaktojnë gjithmonë saktë formatin. Më duhej të krijoja një implementim të vetin përmes nënshkrimeve të skedarëve dhe zgjerimeve. Në përgjithësi, tema e përcaktimit të formateve të skedarëve është një temë interesante për hulumtime dhe meriton një artikull të veçantë. Duke parë, ndoshta nuk kam menduar për të gjitha formatet në botë për një njohje të saktë, por në përgjithësi, tashmë funksionon mjaft mirë. Megjithatë, për EPUB tani format përcaktohet si ZIP (në fakt të arsyeshme, por në praktikë kjo nuk duhet të merret si një sjellje normale). Për një kohë të gjatë, konsideroni këtë mundësi si eksperimentale, njoftoni për defektet. Në situata të çuditshme, gjithmonë mund të përdorni kategori sipas zgjerimeve të skedarëve, për shembull, Extension/epub.
Nëse janë të aktivizuara kategoritë automatike sipas formatit, gjithashtu janë të aktivizuara kategoritë automatike që bashkojnë disa formate sipas llojit: «Arkiva», «Imazhe», «Video», «Audio» dhe «Dokumente». Për këto nënkategori do të bëhen gjithashtu emra të lokalizuar.
Për atë që nuk është thënë
vitis u bë një mjet shumë dimensional, dhe është e vështirë të përfshihen të gjitha menjëherë. Në mënyrë të shkurtër, do të përmend se çfarë tjetër mund të bëhet:
- kategoritë mund të hiqen dhe të largohen nga skedarët;
- rezultatet e kërkimeve për shprehjet mund të kopjohen në dosjen e caktuar;
- skedarët mund të ekzekutohen si programe;
- komanda show ka shumë opsione, për shembull, renditja sipas emrit/datat e ndryshimit ose përmasës/zgjerimit, shfaqja e pronave të skedarëve dhe rrugët e origjinave, aktivizimi i shfaqjes së skedarëve të fshehur etj.;
- kur ruani lidhjet në burimet në Internet, gjithashtu mund të ruani kopje lokale të faqeve HTML.
Të gjitha detajet mund të gjenden në ndihmën e përdoruesit.
Perspektivat
Shpesh skeptikët thonë se «askush nuk do t'i vendosë vetë këta etiketim». Nga përvoja ime mund të provojnë që është e kundërta: unë kam kategorisëzuar më shumë se gjashtë mijë skedarë, kam krijuar më shumë se një mijë kategori dhe pseudonime, dhe ia vlen. Kur me një komandë vitis open Plan hap listën e punëve të tua ose kur me një komandë vitis open LaTeX hap librin e Stolyarov për sistemin e formatimit LaTeX, atëherë është morale e vështirë të përdorësh sistemin e skedarëve «sipër së vjetri».
Nga kjo, lindin disa ide. Për shembull, mund të krijohet një radio automatike që luan muzikë tematike në përputhje me motin aktual, festat, ditën e javës, orën e ditës ose vitin. Një tjetër ide e afërt është një player muzikor që di për kategoritë dhe mund të luajë muzikë sipas shprehjeve të kategorive si operacione mbi grupe. Do të ishte e dobishme të bëhet një demon që do të monitoronte katalogun "Shkarkimet" dhe do të propozonte kategoritizimin e skedarëve të rinj. Dhe, sigurisht, do të duhej bërë një menaxher skedarësh grafik semantik normal. Dikur, madje kam krijuar një shërbim web për ndërmarrjen për përdorim kolektiv të skedareve, por ai nuk ishte prioritet dhe u bë i papërshtatshëm, ndonëse arriti një nivel të lartë funksionaliteti. (Për shkak të ndryshimeve të mëdha në vetë vitis, ai tashmë nuk është i përshtatshëm për përdorim.)
këtu është një demonstrim i vogël

Përfundim
Vitis — nuk është përpjekja e parë për të ndryshuar radikalisht stilin e punës me të dhëna, por e konsiderova të rëndësishme të realizoj idetë e mia dhe të publikoj implementimin në dispozitë të hapur nën licencën GNU GPL. Për lehtësi është krijuar një paketë deb për x86-64, e cila duhet të funksionojë në të gjitha shpërndarjet moderne të Debian. Në ARM kishte disa vështirësi të vogla (ndonëse të gjitha programet e tjera lidhur me vitis, funksionojnë normalisht), por më vonë do të ndërtohet një paketë funksionale edhe për këtë platformë (armhf). Kam ndaluar përkohësisht krijimin e paketave RPM për shkak të problemeve në Fedora 30 dhe vështirësive për t'u shpërndarë në shumë shpërndarje RPM, por më vonë për disa prej tyre do të bëhen paketat. Ndërkohë, mund të përdorni make && make install ose checkinstall.
Faleminderit të gjithëve për vëmendjen! Shpresoj që ky artikull dhe ky projekt të jenë të dobishëm.
Burimi: habr.com
