Kategorieë in plaas van dopgehou, of die Semantiese lêerstelsel vir Linux

Dataklassifikasie self is 'n interessante navorsingsonderwerp. Ek is mal daaroor om inligting te versamel wat nodig lyk, en ek het nog altyd probeer om logiese gidshiërargieë vir my lêers te skep, en eendag in 'n droom het ek 'n pragtige en gerieflike program gesien om etikette aan lêers toe te ken, en ek het besluit dat ek nie kan lewe nie langer so.

Die probleem van hiërargiese lêerstelsels

Gebruikers word dikwels gekonfronteer met die probleem om te kies waar om die volgende nuwe lêer te stoor en die probleem om hul eie lêers te vind (soms is lêername glad nie bedoel om deur 'n persoon onthou te word nie).

'n Uitweg uit die situasie kan semantiese lêerstelsels wees, wat gewoonlik 'n byvoeging tot die tradisionele lêerstelsel is. Gidse daarin word vervang deur semantiese eienskappe, ook genoem merkers, kategorieë en metadata. Ek sal die term “kategorie” meer gereeld gebruik, want... In die konteks van lêerstelsels is die woord "tag" soms 'n bietjie vreemd, veral wanneer "subtags" en "tag aliasse" verskyn.

Die toewysing van kategorieë aan lêers elimineer grootliks die probleem om 'n lêer te stoor en te soek: as jy onthou (of raai) ten minste een van die kategorieë wat aan 'n lêer toegeken is, sal die lêer nooit uit die oog verdwyn nie.

Voorheen is hierdie onderwerp meer as een keer op Habré (tyd, два, 3, vier ens.), hier beskryf ek my oplossing.

Pad na verwesenliking

Onmiddellik na die genoemde droom het ek in my notaboek die opdragkoppelvlak beskryf wat die nodige werk met kategorieë verskaf. Toe besluit ek dat ek oor 'n week of twee 'n prototipe kan skryf met Python of Bash, en dan sal ek moet werk om 'n grafiese dop in Qt of GTK te skep. Die werklikheid, soos altyd, was baie harder, en ontwikkeling is vertraag.

Die oorspronklike idee was om eerstens 'n program te maak met 'n gerieflike en bondige opdragreël-koppelvlak wat kategorieë sou skep, uitvee, kategorieë aan lêers toeken en kategorieë uit lêers uitvee. Ek het die program gebel Fluister.

Eerste poging om te skep Fluister het op niks geëindig nie, aangesien baie tyd aan werk en universiteit bestee is. Die tweede poging was al iets: vir die magistertesis het ek daarin geslaag om die beplande projek te voltooi en selfs 'n prototipe van die GTK-dop te maak. Maar daardie weergawe het so onbetroubaar en ongerieflik geblyk dat baie heroorweeg moes word.

Ek het eintlik die derde weergawe self vir 'n baie lang tyd gebruik, nadat ek etlike duisende van my lêers na kategorieë oorgedra het. Dit is ook baie vergemaklik deur die geïmplementeerde bash-voltooiing. Maar sommige probleme, soos die gebrek aan outomatiese kategorieë en die vermoë om lêers met dieselfde naam te stoor, het steeds oorgebly, en die program was reeds onder sy eie kompleksiteit gebuig. Dit is hoe ek by die behoefte gekom het om komplekse sagteware-ontwikkelingsprobleme op te los: gedetailleerde vereistes skryf, 'n funksionele toetsstelsel ontwikkel, verpakkingsinstruksies bestudeer, en nog baie meer. Ek het nou by my plan uitgekom, sodat hierdie nederige skepping aan die vrye gemeenskap voorgehou kan word. Spesifieke lêerbestuur soos bestuur deur die konsep van kategorieë bring onverwagte kwessies en probleme op, en in die oplossing daarvan Fluister het nog vyf projekte rondom homself voortgebring, waarvan sommige in die artikel genoem sal word. Tot nou toe Fluister Ek het nie 'n grafiese dop gekoop nie, maar die gerief om lêerkategorieë vanaf die opdragreël te gebruik, weeg al vir my swaarder as enige voordele van 'n gewone grafiese lêerbestuurder.

Gebruiksvoorbeelde

Kom ons begin eenvoudig - skep 'n kategorie:

vitis create Музыка

Kom ons voeg 'n bietjie samestelling daarby as 'n voorbeeld:

vitis assign Музыка -f "The Ink Spots - I Don't Want To Set The World On Fire.mp3"

Jy kan die inhoud van die "Musiek"-kategorie bekyk deur die "show"-subopdrag te gebruik:

vitis show Музыка

Jy kan dit speel met die "oop" subopdrag.

vitis open Музыка

Omdat As ons net een lêer in die "Musiek"-kategorie het, sal net daardie een begin. Vir die doel om lêers met hul verstekprogramme oop te maak, het ek 'n aparte program gemaak vts-fs-oop (standaardinstrumente soos xdg-open of mimeopen het om 'n aantal redes nie by my gepas nie; maar, indien enigiets, in die instellings kan u 'n ander nutsprogram vir universele lêeropening spesifiseer). Hierdie program werk goed op verskillende verspreidings met verskillende werksomgewings, so ek beveel aan om dit saam met vitis te installeer.

U kan ook die program direk spesifiseer om lêers oop te maak:

vitis open Музыка --app qmmp

Kategorieë in plaas van dopgehou, of die Semantiese lêerstelsel vir Linux

Kom ons skep meer kategorieë en voeg lêers by met "toewys". As lêers toegewys word aan kategorieë wat nog nie bestaan ​​nie, word jy gevra om dit te skep. 'n Onnodige versoek kan vermy word deur die -ja-vlag te gebruik.

vitis assign Программирование R -f "Введение в R.pdf" "Статистический пакет R: теория вероятностей и матстатистика.pdf" --yes

Nou wil ons die “Wiskunde”-kategorie by die lêer “Statistical package R: probability theory and mathematical statistics.pdf” voeg. Ons weet dat hierdie lêer reeds as "R" gekategoriseer is en daarom kan ons die kategoriepad vanaf die Vitis-stelsel gebruik:

vitis assign Математика -v "R/Статистический пакет R: теория вероятностей и матстатистика.pdf"

Gelukkig maak bash-voltooiing dit maklik.

Kom ons kyk wat gebeur het deur die --categories-vlag te gebruik om 'n lys van kategorieë vir elke lêer te sien:

vitis show R --categories

Kategorieë in plaas van dopgehou, of die Semantiese lêerstelsel vir Linux

Let daarop dat die lêers ook outomaties volgens formaat, tipe (kombineer formate) en lêeruitbreiding gekategoriseer is. Hierdie kategorieë kan gedeaktiveer word indien verlang. Later sal ek beslis hul name lokaliseer.

Kom ons voeg iets anders by "Wiskunde" vir verskeidenheid:

vitis assign Математика -f "Математический анализ - 1984.pdf" Перельман_Занимательная_математика_1927.djvu 

En nou raak dinge interessant. In plaas van kategorieë, kan jy uitdrukkings skryf met die bewerkings van unie, kruising en aftrekking, dit wil sê, gebruik bewerkings op versamelings. Byvoorbeeld, die kruising van "Math" met "R" sal lei tot een lêer.

vitis show R i: Математика

Kom ons trek verwysings na die taal "R" van "Wiskunde" af:

vitis show Математика  R  #или vitis show Математика c: R

Ons kan musiek en die R-taal doelloos kombineer:

vitis show Музыка u: R

Die -n vlag laat jou toe om die vereiste lêers uit die versoekresultaat te “trek” deur nommers en/of reekse, byvoorbeeld, -n 3-7, of iets meer ingewikkeld: -n 1,5,8-10,13. Dit is dikwels nuttig met die oop subopdrag, wat jou toelaat om die verlangde lêers vanaf 'n lys oop te maak.

Kategorieë in plaas van dopgehou, of die Semantiese lêerstelsel vir Linux

Terwyl ons wegbeweeg van die gebruik van 'n konvensionele gidshiërargie, is dit dikwels nuttig om geneste kategorieë te hê. Kom ons skep 'n subkategorie "Statistiek" onder die kategorie "Wiskunde" en voeg hierdie kategorie by die toepaslike lêer:

vitis create Математика/Статистика

vitis assign Математика/Статистика -v "R/Введение в R.pdf"

vitis show Математика --categories

Kategorieë in plaas van dopgehou, of die Semantiese lêerstelsel vir Linux

Ons kan sien dat hierdie lêer nou die kategorie "Math/Statistics" het in plaas van "Math" (ekstra skakels word nagespoor).

Om die volle pad aan te spreek kan ongerieflik wees, kom ons skep 'n "globale" alias:

vitis assign Математика/Статистика -a Статистика

vitis show Статистика

Kategorieë in plaas van dopgehou, of die Semantiese lêerstelsel vir Linux

Nie net gewone lêers nie

Internet skakels

Om die berging van enige inligting te verenig, sal dit ten minste nuttig wees om skakels na internetbronne te kategoriseer. En dit is moontlik:

vitis assign Хабр Цветоаномалия -i https://habr.com/ru/company/sfe_ru/blog/437304/ --yes

'n Lêer met die HTML-bladsyopskrif en die .desktop-uitbreiding sal op 'n spesiale plek geskep word. Dit is die tradisionele kortpadformaat in GNU/Linux. Sulke kortpaaie word outomaties as Netwerkboekmerke gekategoriseer.

Natuurlik word kortpaaie geskep om gebruik te word:

vitis open Цветоаномалия

Die uitvoering van die opdrag veroorsaak dat die nuut gestoorde skakel in die blaaier oopgemaak word. Gekategoriseerde kortpaaie na internetbronne kan dien as 'n plaasvervanger vir blaaierboekmerke.

Lêerfragmente

Dit is ook nuttig om kategorieë vir individuele stukke lêers te hê. Nie 'n slegte versoek nie, nè? Maar die huidige implementering tot dusver raak slegs gewone tekslêers, oudio- en videolêers. Kom ons sê jy moet 'n sekere deel van 'n konsert of 'n snaakse oomblik in 'n fliek merk, dan kan jy die vlae -fragname, -start, -finish gebruik wanneer jy toewysing gebruik. Kom ons stoor die skermbewaarder van "DuckTales":

vitis assign vitis assign -c Заставки -f Duck_Tales/s01s01.avi --finish 00:00:59 --fragname "Duck Tales intro"

vitis open Заставки

In werklikheid vind geen lêersny plaas nie; In plaas daarvan word 'n wyserlêer na die fragment geskep, wat die lêertipe, die pad na die lêer, die begin en einde van die fragment beskryf. Die skep en oopmaak van wysers na fragmente word gedelegeer aan nutsprogramme wat ek spesiaal vir hierdie doeleindes gemaak het - dit is mediafragmenter en fragplayer. Die eerste skep, die tweede maak oop. In die geval van oudio- en video-opnames word die medialêer van 'n sekere na 'n sekere posisie geloods deur die VLC-speler te gebruik, dus moet dit ook in die stelsel wees. Ek wou dit eers op mplayer doen, maar om een ​​of ander rede was dit baie skeef met posisionering op die regte oomblik.
In ons voorbeeld word die lêer "Duck Tales intro.fragpointer" geskep (dit word op 'n spesiale plek geplaas), en dan word 'n fragment gespeel vanaf die begin van die lêer (aangesien –start nie gespesifiseer is tydens die skep nie) tot die 59 tweede punt, waarna VLC sluit .

Nog 'n voorbeeld is toe ons besluit het om 'n enkele optrede by 'n konsert deur 'n bekende kunstenaar te kategoriseer:

vitis assign Лепс "Спасите наши души" -f Григорий Лепc - Концерт Парус - песни Владимира Высоцкого.mp4 --fragname "Спасите наши души" --start 00:32:18 --finish 00:36:51

vitis open "Спасите наши души"

Wanneer dit oopgemaak word, sal die lêer in die verlangde posisie ingesluit word en sal dit na vier en 'n half minute toemaak.

Hoe dit alles werk + addisionele kenmerke

Berg kategorieë

Heel aan die begin van die nadenke oor die organisering van 'n semantiese lêerstelsel, het drie maniere by my opgekom: deur die stoor van simboliese skakels, deur 'n databasis, deur 'n beskrywing in XML. Die eerste metode het gewen, want... aan die een kant is dit maklik om te implementeer, en aan die ander kant het die gebruiker die geleentheid om direk vanaf die lêerstelsel na kategorieë te kyk (en dit is gerieflik en belangrik). Aan die begin van gebruik Fluister Die "Vitis"-gids en die ".config/vitis/vitis.conf"-konfigurasielêer word in die gebruiker se tuisgids geskep. Gidse wat met kategorieë ooreenstem, word in ~/Vitis geskep, en simboliese skakels na die oorspronklike lêers word in hierdie kategorie-gidse geskep. Kategoriealiasse is ook net skakels na hulle. Natuurlik sal die teenwoordigheid van die "Vitis"-gids in die tuisgids dalk nie by sommige mense pas nie. Ons kan oorskakel na enige ander ligging:

vitis service set path /mnt/MyFavoriteDisk/Vitis/

Op 'n sekere punt word dit duidelik dat dit min sin maak om lêers wat op verskillende plekke versprei is te kategoriseer, aangesien hul ligging kan verander. Daarom, om mee te begin, het ek vir myself 'n gids geskep, waar ek alles dom weggegooi het en dit alle kategorieë gegee het. Toe besluit ek dit sal lekker wees om hierdie oomblik op programvlak te formaliseer. Dit is hoe die konsep van "lêerspasie" verskyn het. Aan die begin van gebruik Fluister Dit sal nie skade doen om dadelik so 'n ligging op te stel nie (al die lêers wat ons benodig sal daar gestoor word) en outo-stoor aktiveer:

vitis service add filespace /mnt/MyFavoriteDisk/Filespace/

vitis service set autosave yes

Sonder outo stoor, wanneer die "toewys" subopdrag gebruik word, sal die --save vlag vereis word as jy die bygevoegde lêer in die lêerspasie wil stoor.

Boonop kan u verskeie lêerspasies byvoeg en hul prioriteite verander; dit kan nuttig wees as daar baie lêers is en dit op verskillende media gestoor word. Ek sal nie hierdie moontlikheid hier oorweeg nie; besonderhede kan gevind word in die programhulp.

Semantiese lêerstelselmigrasie

In elk geval, die Vitis-gids en lêerspasies kan teoreties soms van plek tot plek beweeg. Om dit te laat werk, het ek 'n aparte nut geskep skakel-redakteur, wat skakels in grootmaat kan wysig en dele van die pad met ander kan vervang:

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

In die eerste geval, nadat ons van /mnt/MyFavoriteDisk/Vitis/ na die tuisgids geskuif het, word die simboliese skakels wat met die aliasse geassosieer word, geredigeer. In die tweede geval, nadat die ligging van die lêerspasie verander is, word alle skakels in Vitis na nuwes verander in ooreenstemming met die versoek om 'n deel van hul pad te vervang.

Outomatiese kategorieë

As jy die opdrag uitvoer vitis service get autocategorization, kan jy sien dat outomatiese kategorieë by verstek volgens formaat (Formaat en Tipe) en lêeruitbreiding (Uitbreiding) toegeken word.

Dit is nuttig wanneer jy byvoorbeeld iets tussen PDF's moet vind of kyk wat jy van EPUB en FB2 gestoor het, kan jy eenvoudig die versoek laat loop

vitis show Format/MOBI u: Format/FB2

Dit het net so gebeur dat standaard GNU/Linux-nutsmiddels soos lêer of mimetipe my nie gepas het nie, juis omdat dit nie altyd die formaat korrek bepaal nie; ek moes my eie implementering maak gebaseer op lêerhandtekeninge en uitbreidings. Oor die algemeen is die onderwerp van die definisie van lêerformate 'n interessante onderwerp vir navorsing en verdien 'n aparte artikel. Vir nou kan ek sê dat ek miskien nie ware erkenning vir alle formate in die wêreld verskaf het nie, maar oor die algemeen werk dit reeds goed. Dit is waar, EPUB definieer nou die formaat as zip (in die algemeen is dit geregverdig, maar in die praktyk moet dit nie as normale gedrag beskou word nie). Oorweeg hierdie kenmerk voorlopig as eksperimenteel en rapporteer enige foute. In vreemde situasies kan jy altyd lêeruitbreidingskategorieë gebruik, byvoorbeeld Uitbreiding/epub.

As outokategorieë volgens formaat geaktiveer is, word outokategorieë wat sommige formate volgens tipe groepeer ook geaktiveer: "Argiewe", "Pictures", "Video", "Oudio" en "Dokumente". Gelokaliseerde name sal ook vir hierdie subkategorieë gemaak word.

Wat nie gesê word nie

Fluister Dit het geblyk 'n baie veelvlakkige hulpmiddel te wees, en dit is moeilik om alles gelyktydig te bedek. Laat ek kortliks noem wat jy nog kan doen:

  • kategorieë kan uitgevee en uit lêers verwyder word;
  • die resultate van uitdrukkingsnavrae kan na die gespesifiseerde gids gekopieer word;
  • lêers kan as programme uitgevoer word;
  • Die wys-opdrag het baie opsies, byvoorbeeld om volgens naam/datum van wysiging of toegang/grootte/uitbreiding te sorteer, lêereienskappe en paaie na oorspronklikes te wys, die vertoning van versteekte lêers moontlik te maak, ens.;
  • Wanneer jy skakels na internetbronne stoor, kan jy ook plaaslike kopieë van HTML-bladsye stoor.

Volledige besonderhede kan gevind word in die gebruikershulp.

Vooruitsigte

Skeptici sê dikwels dat "niemand hierdie etikette self sal stel nie." Deur my eie voorbeeld te gebruik, kan ek die teendeel bewys: ek het al meer as sesduisend lêers gekategoriseer, meer as duisend kategorieë en aliasse geskep, en dit was die moeite werd. Wanneer een span vitis open План maak jou doenlys oop of wanneer met een opdrag vitis open LaTeX Wanneer jy Stolyarov se boek oor die LaTeX-uitlegstelsel oopmaak, is dit reeds moreel moeilik om die lêerstelsel "op die outydse manier" te gebruik.

Op hierdie basis ontstaan ​​'n aantal idees. Jy kan byvoorbeeld 'n outomatiese radio maak wat tematiese musiek aanskakel volgens die huidige weer, vakansiedag, dag van die week, tyd van die dag of jaar. Selfs nader aan die onderwerp is 'n musiekspeler wat weet van kategorieë en musiek kan speel deur uitdrukking met bewerkings op kategorieë soos op stelle. Dit is nuttig om 'n daemoon te maak wat die "Downloads"-gids sal monitor en aanbied om nuwe lêers te kategoriseer. En natuurlik moet ons 'n normale grafiese semantiese lêerbestuurder maak. Ek het eens op 'n tyd selfs 'n webdiens vir die onderneming geskep vir die kollektiewe gebruik van lêers, maar dit was nie 'n prioriteit nie en het irrelevant geword, hoewel dit 'n hoë vlak van prestasie behaal het. (As gevolg van groot veranderinge in die Fluister, dit is nie meer bruikbaar nie.)

hier is 'n klein demo

Kategorieë in plaas van dopgehou, of die Semantiese lêerstelsel vir Linux

Gevolgtrekking

vitis is nie die eerste poging om die styl van werk met data radikaal te verander nie, maar ek het dit belangrik geag om my idees te implementeer en die implementering publiek beskikbaar te stel onder die GNU GPL-lisensie. Gerieflikheidshalwe is 'n deb-pakket vir x86-64 gemaak; dit behoort op alle moderne Debian-verspreidings te werk. Daar was geringe probleme op ARM (terwyl alle ander programme verband hou met Fluister, werk goed), maar in die toekoms sal 'n werkpakket vir hierdie platform (armhf) saamgestel word. Ek het vir eers opgehou om RPM-pakkette te skep weens probleme op Fedora 30 en die moeilikheid om oor baie RPM-verspreidings te versprei, maar latere pakkette sal steeds vir ten minste 'n paar van hulle gemaak word. Intussen kan jy gebruik make && make install of checkinstall.

Dankie almal vir julle aandag! Ek hoop dat hierdie artikel en hierdie projek nuttig kan wees.

Skakel na projekbewaarplek

Bron: will.com

Voeg 'n opmerking