Andmete klassifitseerimine iseenesest on huvitav uurimisteema. Mulle meeldib koguda teavet, mis nĂ€ib olevat vajalik, ja olen alati pĂŒĂŒdnud luua loogilisi kaustastruktuure oma failide jaoks. Ăhel ööl nĂ€gin ilusat ja mugavat programmi, mis mÀÀrab failidele silte, ning otsustasin, et niimoodi edasi elada ei saa.
Hierarhiliste failisĂŒsteemide probleem
Kasutajad seisavad tihti silmitsi kĂŒsimusega, kuhu salvestada uus fail ning kuidas leida oma faile (mĂ”nikord ei ole failide nimed inimestele mĂ”istetavad).
Lahenduseks vĂ”ivad olla semantilised failisĂŒsteemid, mis on tavaliselt traditsiooniliste failisĂŒsteemide pealseteks. Nendes asendatakse kaustad semantiliste atribuutidega, mida nimetatakse ka siltideks, kategooriateks vĂ”i metaandmeteks. Ma kasutan sagedamini terminit 'kategooria', kuna failisĂŒsteemide kontekstis tundub sĂ”na 'silt' mĂ”nikord veider, eriti kui esinevad 'alam-sildid' ja 'siltide pseudonĂŒĂŒdid'.
Failidele kategooriate mÀÀramine kĂ”rvaldab paljuski probleeme salvestamisruumi ja failide leidmisega: kui sa mĂ€letad (vĂ”i aimad) vĂ€hemalt ĂŒhte mÀÀratud kategooriat, siis fail ei jÀÀ enam kunagi varju.
Varem on Habr's seda teemat korduvalt kÀsitletud (, , , jne), siin kirjeldan oma lahendust.
Tee elluviimiseni
Tasusest pĂ€rast mainitud und kirjutasin vihikusse kĂ€surea liidese, mis vĂ”imaldab vajalikku tööd kategooriatega teha. Siis otsustasin, et ĂŒhe vĂ”i kahe nĂ€dalaga saab prototĂŒĂŒbi valmis kirjutada, kasutades Pythonit vĂ”i Bash'i, ja hiljem tuleb teha tööd graafilise liidese loomisel Qt vĂ”i GTK-l. Reaalsus oli, nagu alati, palju karmim ning arendus venis.
Esialgne idee oli luua programm, millel on mugav ja lĂŒhike kĂ€surea liides, mis vĂ”imaldab luua ja kustutada kategooriaid, mÀÀrata kategooriaid failidele ja kustutada kategooriaid failidest. Nimesin programmi vitis.
Esimene katse luua vitis lĂ”ppes mittemillegagi, kuna palju aega kulus tööle ja ĂŒlikoolile. Teine katse oli juba midagi: magistritöö jaoks Ă”nnestus lĂ”petada planeeritud projekt ja isegi GTK-liidese prototĂŒĂŒp valmis teha. Kuid see versioon osutus nii ebausaldusvÀÀrseks ja ebamugavaks, et tuli palju ĂŒmber mĂ”elda.
Kolmandat versiooni kasutasin ma ise vĂ€ga pikka aega, jagades kategooriatesse mitu tuhat oma faili. Sellele aitas oluliselt kaasa rakendatud bash'i autokomplekteerimine. Kuid mĂ”ned probleemid, nagu automaatsete kategooriate puudumine ja samade nimedega failide sĂ€ilitamise vĂ”imalus, jĂ€id siiski alles, ja programm hakkas juba enda keerukuse all kokku kukkuma. N nii jĂ”udsin ma vajaduseni lahendada keerulise tarkvara arendamise probleeme: kirjutada pĂ”hjalikud nĂ”uded, arendada funktsionaalse testimise sĂŒsteem, uurida pakendamisjuhiseid ja palju muud. Praegu olen jĂ”udnud soovitud tulemusele, nii et see tagasihoidlik looming vĂ”ib olla esitatud vabale kogukonnale. Selline spetsiifiline failihaldus, nagu kategooriate kaudu haldamine, toob esile ootamatuid kĂŒsimusi ja probleeme ning nende lahendemine vitis sĂŒnnitas enda ĂŒmber veel viis projekti, millest mĂ”ned mainitakse artiklis. Kuni tĂ€naseni vitis ei ole ma graafilist liidest omandanud, kuid failikategooriate kasutamise mugavus kĂ€surealt ĂŒletab juba minu jaoks kĂ”ik tavalise graafilise failihalduri eelised.
Kasutamise nÀited
Alustame lihtsast â loome kategooria:
vitis create MuusikaLisame sellesse nÀitena mÔne loo:
vitis assign Muusika -f "The Ink Spots - I Don't Want To Set The World On Fire.mp3"Kategooria 'Muusika' sisu saab vaadata alakomandiga 'show':
vitis show MuusikaSeda saab esitada alakomandiga 'open'
vitis open MuusikaKuna meil on kategoorias 'Muusika' vaid ĂŒks fail, siis kĂ€ivitatakse ainult see. Failide avamiseks vaikimisi programmide kaudu tegin eraldi utiliidi vts-fs-open (tavalised vahendid nagu xdg-open vĂ”i mimeopen ei rahuldanud mind mitmel pĂ”hjusel; kuid kui soovite, vĂ”ite seadetes mÀÀrata teise utiliidi failide universaalseks avamiseks). See utiliit töötab hĂ€sti erinevates distributsioonides erinevate graafiliste keskkondadega, seega soovitan koos vitisega ka selle paigaldada.
Saame otse mÀÀrata ka programmi failide avamiseks:
vitis open Muusika --app qmmp
Loome veel kategooriaid ja lisame faile kasutades âassignâ. Kui failid mÀÀratakse veel mitteolevatele kategooriatele, saadetakse taotlus nende loomiseks. Ăksikute taotluste vĂ€ltimiseks on mĂ”istlik kasutada flikki âyes.
vitis assign Programmeerimine R -f "Sissejuhatus R.pdf" "Statistiline paket R: tĂ”enĂ€osusteooria ja matemaatika statistika.pdf" --yesNĂŒĂŒd soovime lisada failile âStatistiline paket R: tĂ”enĂ€osusteooria ja matemaatika statistika.pdfâ kategooria âMatematikaâ. Me teame, et sellel failil on juba kategooria âRâ ja seetĂ”ttu saame kasutada Vitis-sĂŒsteemi kategooriate teed:
vitis assign Matemaatika -v "R/Statistiline paket R: tĂ”enĂ€osusteooria ja matemaatika statistika.pdf"Ănneks vĂ”imaldab bash'i automaatne tĂ€iendamine seda kergelt teha.
Vaadakem, mis meil on, kasutades lippu âcategories, et nĂ€ha iga faili kategooriate nimekirja:
vitis show R --categories
Pange tĂ€hele, et failidele on mÀÀratud ka automaatsed kategooriad sisu formaadi, tĂŒĂŒbi (koondab formaate) ja faililaiendi jĂ€rgi. Soovi korral on neid kategooriaid vĂ”imalik vĂ€ljalĂŒlitada. Hiljem teen kindlasti nende nimede lokaliseerimise.
Lisame âMatemaatikasseâ veel midagi huvitavat:
vitis assign Matemaatika -f "Matemaatika analĂŒĂŒs - 1984.pdf" Perelman_Huvitav_matemaatika_1927.djvu NĂŒĂŒd saab huvitavaks. Kategooriate asemel saab kirjutada vĂ€ljendeid, mis sisaldavad liitmise, ristumise ja lahutamise operatsioone, seega saab kasutada hulkade operatsioone. NĂ€iteks âMatemaatikaâ ristamine âRâ-iga annab tulemuseks ĂŒhe faili.
vitis show R i: MatemaatikaLahutame âMatemaatikastâ viidatud keele âRâ:
vitis show Matemaatika R #vÔi vitis show Matemaatika c: RSaame mÔttetult liita Muusika ja R-keele:
vitis show Muusika u: RLipp -n vĂ”imaldab âvĂ€lja tĂ”mmataâ pĂ€ringutulemustest vajalikud failid numbrite ja/vĂ”i vahemike kaupa, nĂ€iteks -n 3-7, vĂ”i midagi keerulisemat: -n 1,5,8-10,13. Sageli on see kasulik koos alakomandiga open, mis vĂ”imaldab avada vajalikud failid loendist.

Kuigi me eemalduvad tavapĂ€rase kaustade hierarhia kasutamisest, on tihti kasulik omada alamkategooriaid. Loome kategooria âStatistikaâ kategoorias âMatematikaâ ja lisame selle sobivale failile:
vitis create Matemaatika/Statistika
vitis assign Matemaatika/Statistika -v "R/Sissejuhatus R.pdf"
vitis show Matemaatika --categories
NĂ€eme, et see fail on nĂŒĂŒd kategooria "Matemaatika/Statistika" asemel "Matemaatika" (liigsed lingid jĂ€lgitakse).
Kogu tee kasutamine vĂ”ib olla ebamugav, loome "globaalset" hĂŒĂŒdnime:
vitis assign Matemaatika/Statistika -a Statistika
vitis show Statistika
Mitte ainult tavaliseks failideks
Interneti-lingid
Iga info ĂŒhtse hoidmise jaoks oleks kasulik, vĂ€hemalt, kategooriate kaudu korraldada linke internetiressurssidele. Ja see on vĂ”imalik:
vitis assign Habr VĂ€rvianomaalia -i https://habr.com/ru/company/sfe_ru/blog/437304/ --yesSpetsiaalsesse kohta luuakse fail, millel on HTML-lehe pealkiri ja laiend .desktop. See on traditsiooniline otsetee formaat GNU/Linuxis. Sellised otseteed saavad automaatse kategooria NetworkBookmarks.
Muidugi, otseteed loodi nende kasutamiseks:
vitis open VÀrvianomaaliaKÀskluse tÀitmine avab brauseris just Àsja salvestatud lingi. Kategooriatud otseteed internetiressurssidele vÔivad toimida brauseri jÀrjehoidjate asendajatena.
Failijupid
Samuti on kasulik, et eraldi failijuppidel oleks kategooriad. Ei ole paha ettepanek, eks? Kuid praegune teostus puudutab ainult tavalisi teksti faile, audio- ja videofaile. Ătleme, et peate mĂ€rkima teatud osa mĂ”nest kontserdist vĂ”i toredast hetkest filmis, siis assign'i kasutamisel vĂ”ite kasutada lipukesi âfragname, âstart, âfinish. Salvestame "Kanuu lugude" algusjĂ€rje:
vitis assign vitis assign -c AlgusjÀrjed -f Duck_Tales/s01s01.avi --finish 00:00:59 --fragname "Kanuu lugude intro"
vitis open AlgusjĂ€rjedTegelikult ei toimu mitte mingit failide katkestamist, selle asemel luuakse fail, mis osutab fragmentidele, milles on kirjas faili tĂŒĂŒp, faili tee, algus ja lĂ”pu fragment. Fragmentide osutajate loomine ja avamine on usaldatud utiliidile, mille ma olen spetsiaalselt nende eesmĂ€rkide jaoks loonud â see on mediafragmenter ja fragplayer. Esimene loob, teine avab. Audio- ja videofailide puhul toimub meediafaili kĂ€ivitamine kindlast kuni kindla positsioonini VLC mĂ€ngija kaudu, nii et see peab ka sĂŒsteemis olema. Alguses tahtsin selle teha mplayer'iga, kuid seal oli mingil pĂ”hjusel positsioneerimisega vĂ€ga kehvasti.
Meie nĂ€ites luuakse fail «Duck Tales intro.fragpointer» (see asetatakse erikohta), seejĂ€rel mĂ€ngitakse faili algusest fragment (sest âstart ei olnud loomisel mĂ€rgitud) kuni 59 sekundi mĂ€rgini, pĂ€rast mida VLC sulgub.
Teine nĂ€ide â me otsustasime kategoriseerida eraldised mĂ”ne kuulsuse kontserdilt:
vitis assign LepŃ "Salvage Our Souls" -f Grigori LĐ”ĐżŃ - Kontsert PаŃŃŃ - Vladimir ĐŃŃĐŸŃĐșĐžĐč laulud.mp4 --fragname "Salvage Our Souls" --start 00:32:18 --finish 00:36:51
vitis open "Salvage Our Souls"Fail avamisel mÀngitakse see vajalikus asendis ja sulgub nelja ja poole minuti pÀrast.
Kuidas see kÔik töötab + tÀiendavad vÔimalused
Kategooriate hoidmine
Alguses, kui mĂ”tlesin vĂ€lja semantilise failisĂŒsteemi korralduse, tuli mul pĂ€he kolm vĂ”imalust: sĂŒmboolsete linkide hoidmise kaudu, andmebaasi abil, XML-i kaudu. Esimene meetod vĂ”itis, kuna see on ĂŒhelt poolt lihtne rakendada ja teiselt poolt vĂ”imaldab kasutajal vaadata kategooriaid otse failisĂŒsteemist (ja see on mugav ja oluline). Alguses kasutamise vitis kasutaja kodukataloogis luuakse kataloog «Vitis» ja konfiguratsioonifail «.config/vitis/vitis.conf». Kataloogis ~ /Vitis luuakse kategooriatega seotud kataloogid ja nende kategooriate kataloogidesse luuakse sĂŒmboolsed lingid originaalfailidele. Kategooriate hĂŒĂŒdnimed on samuti lihtsalt lingid neile. Loomulikult vĂ”ib kellegi jaoks olla probleemiks kodukataloogis «Vitis» olemasolu. Saame minna ĂŒle mistahes muusse kohta:
vitis service set path /mnt/MyFavoriteDisk/Vitis/Teatud hetkel saab selgeks, et erinevates kohtades paiknevaid faile on mÔttetu kategoriseerida, kuna nende asukoht vÔib muutuda. SeetÔttu lÔin alguses enda jaoks katalooge, kuhu ladusin kÔik kokku ja andsin sellele kÔikidele kategooriad. Siis mÔtlesin, et oleks hea, kui see hetk oleks programmeeritaval tasemel seotud. Nii sai alguse mÔisted «failiruumi». Alguses kasutamise vitis ei teeni kohe mitte Àra seadistada sellist kohta (kuhu ladustatakse kÔik meie jaoks vajalikud failid) ja lubada automaatne salvestamine:
vitis service add filespace /mnt/MyFavoriteDisk/Filespace/
vitis service set autosave yesIlma automaatset salvestamist «assign» alamkomandi kasutamisel on vajalik lipp âsave, kui soovite salvestada lisatavat faili failiruumi.
Lisaks sellele on vÔimalik lisada mitu failiruumi ja muuta nende prioriteete, mis vÔib olla kasulik, kui faile on palju ja need on erinevates seadmetes. Siin ma seda vÔimalust ei kÀsitle, rohkem informatsiooni leiate programmi abist.
Semantilise failisĂŒsteemi migratsioon
Igatahes vÔivad Vitis kataloog ja failiruumi teoreetiliselt mÔnikord asukohta vahetada. Tööle viimiseks lÔin eraldi utiliidi link-editor, mis suudab massiliselt redigeerida linke, vahetades tee osi teiste vastu:
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 -REsimesel juhul, pĂ€rast kolimist /mnt/MyFavoriteDisk/Vitis/ oma kodukatalooge, redigeeritakse sĂŒmboolseid linke, mis on seotud alias'tega. Teisel juhul, pĂ€rast failiruumi asukoha muutmist, muudetakse kĂ”ik Vitis linkide teed vastavalt nende uute asukohtade nĂ”udmisele.
Automaatne kategooria
Kui kÀivitada kÀsk vitis service get autocategorization, siis on nÀha, et vaikimisi on automaatsete kategooriate mÀÀramine seadistatud formaadi (Format ja Type) ja faililaiendi (Extension) alusel.
See on kasulik, kui nÀiteks vajate mÔnda PDF-i leidmiseks vÔi soovite vaadata, mis teil on sÀilitatuna EPUB ja FB2 formaadis, saate lihtsalt sisestada pÀringu
vitis show Format/MOBI u: Format/FB2Just so happened that standard GNU/Linux tools like file or mimetype did not satisfy me precisely because they do not always determine the format correctly, I had to create my own implementation based on file signatures and extensions. In general, the topic of determining file formats is an interesting area for research and deserves a separate article. For now, I can say that I may not have provided accurate recognition for all formats in the world, but overall it works quite well already. However, EPUB is currently identified as ZIP (which is generally justified, but in practice, this should not be considered normal behavior). For some time, consider this feature experimental; please report any bugs. In unusual situations, you can always use categories by file extension, for example, Extension/epub.
If auto-categorization by format is enabled, auto-categorization that groups certain formats by type: 'Archives', 'Pictures', 'Video', 'Audio', and 'Documents' is also enabled. Localized names will be created for these subcategories as well.
What is not said
vitis became a very multifaceted tool, and it is difficult to cover everything at once. Briefly, I will mention what else can be done:
- categories can be deleted and removed from files;
- query results based on expressions can be copied to the specified directory;
- files can be launched as programs;
- the show command has many options, for example, sorting by name/date of modification or by access/size/extension, displaying file properties and paths to originals, including the option to show hidden files, and more;
- when saving links to internet sources, local copies of HTML pages can also be saved.
All details can be found in the user help.
Prospects
Often skeptics say that 'no one will set these tags themselves.' From my own experience, I can prove the opposite: I have already categorized more than six thousand files, created more than a thousand categories and aliases, and it was worth it. With one command vitis open Plan you open the list of your tasks or with one command vitis open LaTeX you open Stolyarov's book about the LaTeX typesetting system, it already becomes mentally challenging to use the file system 'the old way.'
Sellel pinnasel tekivad mitmed ideed. NĂ€iteks vĂ”iks luua automaatse raadio, mis mĂ€ngib temaatilist muusikat vastavalt praegusele ilmale, pĂŒhadele, nĂ€dala pĂ€evadele, pĂ€eva ajale vĂ”i aastaaegadele. Lisaks on lĂ€hedane teema muusikamĂ€ngija, mis tunneb kategooriaid ja suudab mĂ€ngida muusikat kategooriate ĂŒle tegelevate avalduste alusel. Kasulik oleks luua demon, mis jĂ€lgib kausta âAllalaadimisedâ ja pakub uute failide kategooriateks jagumist. Ja muidugi tuleks luua ka korralik graafiline semantiline failihaldur. Kunagi tegin ma isegi ettevĂ”ttele veebiteenuse failide ĂŒhiseks kasutamiseks, kuid see ei olnud prioriteet ja muutus ebaoluliseks, kuigi saavutas kĂ”rge töökindluse taseme. (Suuremate muutuste tĂ”ttu selles vitis, ei ole see enam kasutamiseks sobiv.)
siin on vÀike demonstreerimine

KokkuvÔte
Vitis ei ole esimene katse radikaalselt muuta andmetöötluse stiili, kuid pidasin oluliseks oma ideid teostada ja avaldada teostust avatud juurdepÀÀsu all GNU GPL litsentsi alusel. Mugavuse huvides on loodud deb-pakett x86-64 jaoks, see peaks töötama kÔigil kaasaegsetel Debian-distrodel. ARM-il esines vÀikseid keerukusi (kui kÔik muud programmid, mis on seotud vitis, töötavad normaalselt), kuid hiljem koostatakse ka sellele platvormile (armhf) töötav pakett. RPM-pakettide loomisega olen praegu lÔpetanud seoses probleemidega Fedora 30-ga ja keerukusega hajutuda paljudele RPM-distrodele, kuid hiljem vÀhemalt paariks neist ikkagi pakette tehakse. Seni saab kasutada make && make install vÔi checkinstall.
Suur tÀnu tÀhelepanu eest! Loodan, et see artikkel ja projekt osutuvad kasulikuks.
Allikas: habr.com
