Kategooriad, mitte kataloogid, vĂ”i Semantiline failisĂŒsteem Linuxile

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 (ĂŒks, kaks, kolmest, neli 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 Muusika

Lisame 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 Muusika

Seda saab esitada alakomandiga 'open'

vitis open Muusika

Kuna 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

Kategooriad, mitte kataloogid, vĂ”i Semantiline failisĂŒsteem Linuxile

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" --yes

NĂŒĂŒ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

Kategooriad, mitte kataloogid, vĂ”i Semantiline failisĂŒsteem Linuxile

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: Matemaatika

Lahutame „Matemaatikast“ viidatud keele „R“:

vitis show Matemaatika R #vÔi vitis show Matemaatika c: R

Saame mÔttetult liita Muusika ja R-keele:

vitis show Muusika u: R

Lipp -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.

Kategooriad, mitte kataloogid, vĂ”i Semantiline failisĂŒsteem Linuxile

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

Kategooriad, mitte kataloogid, vĂ”i Semantiline failisĂŒsteem Linuxile

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

Kategooriad, mitte kataloogid, vĂ”i Semantiline failisĂŒsteem Linuxile

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/ --yes

Spetsiaalsesse 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Ă€rvianomaalia

KÀ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Àrjed

Tegelikult 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 yes

Ilma 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 -R

Esimesel 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/FB2

Just 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

Kategooriad, mitte kataloogid, vĂ”i Semantiline failisĂŒsteem Linuxile

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.

Lingid projekti repo kohta

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster