{"id":80222,"date":"2020-05-04T13:42:18","date_gmt":"2020-05-04T11:42:18","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/museria-deczentralizovannoe-hranilishhe-muzyki"},"modified":"2020-05-04T13:42:18","modified_gmt":"2020-05-04T11:42:18","slug":"museria-deczentralizovannoe-hranilishhe-muzyki","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/museria-deczentralizovannoe-hranilishhe-muzyki","title":{"rendered":"Museria \u2014 un depozit descentralizat de muzic\u0103","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Museria \u2014 un depozit descentralizat de muzic\u0103\" src=\"\/wp-content\/uploads\/2020\/05\/e5323f70f0df3f3bb6fb92ae0544ad2f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOdat\u0103, m-am g\u00e2ndit s\u0103 scriu o aplica\u021bie pentru a selecta muzica pentru mine \u0219i a o asculta acas\u0103 \/ afar\u0103 \/ \u00een timpul antrenamentelor etc. \u0218i pentru ca totul s\u0103 func\u021bioneze \u00een flux, cu o implicare minim\u0103 din partea mea. Am conceput arhitectura, am schi\u021bat un prototip \u0219i, \u00een cele din urm\u0103, m-am confruntat cu o \"problem\u0103 mic\u0103\". <br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nDar nu era clar de unde s\u0103 ob\u021bin fi\u0219ierele muzicale. La acel moment, VKontakte deja \u00eenchise API-ul, iar pe marile portaluri muzicale nu era nimic, chiar \u0219i piesele erau oferite \u00een buc\u0103\u021bi pentru a evita parsarea. R\u0103maser\u0103 doar c\u00e2teva site-uri de o zi, pline de reclame \u0219i tot felul de mizerie, programe-grabbere dubioase \u0219i alte variante \"necurate\". \u00cen general, nu exista nicio solu\u021bie bun\u0103 \u0219i valabil\u0103. Bine\u00een\u021beles, ai putea cump\u0103ra un abonament la vreun serviciu de muzic\u0103, cum ar fi Yandex Music. Dar din nou, nu exist\u0103 un API public deschis \u0219i nu ai acces la muzic\u0103 programatic. C\u00e2teva mari companii, practic, au restric\u021bionat accesul altora la muzic\u0103. De ce s-a \u00eent\u00e2mplat asta? Dup\u0103 o cercetare mai aprofundat\u0103, am realizat c\u0103 problema principal\u0103 este dreptul de autor. Solu\u021bia actual\u0103 sub form\u0103 de abonamente \u00eei mul\u021bume\u0219te pe mul\u021bi autori comerciali de muzical\u0103 \u0219i pe aceste companii. \u00cen acela\u0219i timp, muzica non-comercial\u0103 \u0219i cea condi\u021bionat comercial\u0103 ajung \u0219i ele \u00een lista general\u0103. Fie pl\u0103te\u0219ti pentru tot, fie nu ascul\u021bi deloc.<\/p>\n<p>A\u0219a c\u0103 am \u00eenceput s\u0103 m\u0103 g\u00e2ndesc ce s\u0103 fac cu toate acestea. Cum a\u0219 putea organiza distribu\u021bia liber\u0103 a muzicii? Ce a\u0219 face dac\u0103 a\u0219 fi eu cel care creeaz\u0103 muzica \u0219i a\u0219 vrea s\u0103 c\u00e2\u0219tig din asta? Mi-ar pl\u0103cea dac\u0103 piesele mele ar fi distribuite pe cale pirat? <\/p>\n<p>\u00cen cele din urm\u0103, au ap\u0103rut dou\u0103 probleme principale care trebuie rezolvate:<\/p>\n<ul>\n<li>Organizarea distribu\u021biei libere a muzicii prin metode convenabile pentru majoritatea oamenilor, inclusiv cele programatice.<\/li>\n<li>Oferirea de alternative creatorilor de muzic\u0103 pentru a c\u00e2\u0219tiga<\/li>\n<\/ul>\n<p><\/p>\n<h3>Un depozit muzical global \u0219i descentralizat<\/h3>\n<p>\nLa \u00eenceput, am \u00eencercat s\u0103 g\u0103sesc solu\u021bii deja existente \u0219i s\u0103 construiesc totul pe baza acestora. Dup\u0103 o vreme de c\u0103ut\u0103ri, ceea ce mi-a atras aten\u021bia pentru prima dat\u0103 a fost <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ipfs\/ipfs\">ipfs<\/a><\/noindex>. Am \u00eenceput implementarea ideii mele, dar dup\u0103 un timp am descoperit c\u00e2teva probleme critice cu aceast\u0103 solu\u021bie:<\/p>\n<ul>\n<li>Ipfs \u2014 un stoc\u0103tor pentru orice \u0219i toate. Aici se g\u0103sesc imagini, muzic\u0103, videoclipuri \u0219i orice altceva. Practic, o mare \u00abg\u0103leat\u0103\u00bb planetar\u0103. A\u0219adar, atunci c\u00e2nd \u00ee\u021bi lansezi nodul, prime\u0219ti imediat o \u00eenc\u0103rc\u0103tur\u0103 uria\u0219\u0103. Ma\u0219ina pur \u0219i simplu se chinuie. <\/li>\n<li>O oarecare mecansim neterminat pentru colectarea \u00abgunoiului\u00bb. Nu \u0219tiu cum stau lucrurile acum, dar \u00een acel moment, dac\u0103 \u00een configurare specificai c\u0103 vrei s\u0103 limitezi stocarea la zece gigabai\u021bi de date, nu \u00eensemna nimic. Stocarea se extindea, ignor\u00e2nd multe dintre parametrii de configurare. \u00cen cele din urm\u0103, era nevoie de un spa\u021biu mare pe hard disk, p\u00e2n\u0103 c\u00e2nd ipfs \u00ee\u0219i d\u0103dea seama cum s\u0103 elimine inutilul.<\/li>\n<li>La momentul utiliz\u0103rii bibliotecii (nu \u0219tiu cum stau lucrurile acum), clientul nu avea implementate time-out-uri. Trimiteai o cerere pentru a ob\u021bine un fi\u0219ier, \u0219i dac\u0103 nu era, pur \u0219i simplu r\u0103m\u00e2neai suspendat. Desigur, oamenii au inventat diverse solu\u021bii de ocolire, care rezolvau par\u021bial problema, dar erau ni\u0219te solu\u021bii improvizate. Astfel de lucruri ar trebui s\u0103 fie incluse din cutie.<\/li>\n<\/ul>\n<p>\nDe asemenea, au existat multe probleme minore, iar impresia format\u0103 era clar\u0103: nu se putea folosi pentru un proiect. Am continuat c\u0103ut\u0103rile pentru un stoc\u0103tor, am studiat diverse op\u021biuni, dar nu am g\u0103sit nimic potrivit.<\/p>\n<p>\u00cen cele din urm\u0103, am decis c\u0103 ar trebui s\u0103 \u00eencerc s\u0103 scriu un stoc\u0103tor descentralizat singur. Chiar dac\u0103 nu va pretinde s\u0103 fie unul interplanetar, va \u00eendeplini sarcina specific\u0103.<\/p>\n<p>A\u0219a au rezultat <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/spreadable\">spreadable<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/storacle\/\">storacle<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/metastocle\">metastocle<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/museria\">museria<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/museria-global\">museria-global<\/a><\/noindex>. <\/p>\n<p><b>spreadable <\/b> \u2014 este stratul principal, cel mai de baz\u0103, care permite conectarea nodurilor \u00eentr-o re\u021bea. \u00cenglobeaz\u0103 un algoritm, pe care p\u00e2n\u0103 acum l-am implementat par\u021bial, estim\u00e2nd pentru aproximativ 10.000 de servere. Versiunea complet\u0103 a algoritmului este mult mai complicat\u0103 din punct de vedere al implement\u0103rii \u0219i ar necesita c\u00e2teva luni suplimentare (sau chiar mai mult).<\/p>\n<p>Nu voi descrie \u00een detaliu spreadable \u00een acest articol, mai bine voi scrie separat odat\u0103. Aici doar voi sublinia c\u00e2teva caracteristici:<\/p>\n<ul>\n<li>Func\u021bioneaz\u0103 prin http\/https.<\/li>\n<li>Po\u021bi crea o re\u021bea separat\u0103 pentru o sarcin\u0103 specific\u0103, ceea ce va reduce semnificativ \u00eenc\u0103rc\u0103tura pe fiecare proiect \u00een parte, comparativ cu dac\u0103 ar fi toate \u00eentr-o singur\u0103 re\u021bea.<\/li>\n<li>Ini\u021bial, a fost g\u00e2ndit un mecanism cu time-out-uri \u0219i alte detalii. \u0218i func\u021bioneaz\u0103 pentru toate metodele, at\u00e2t \u00een client, c\u00e2t \u0219i \u00een nod. Po\u021bi gestiona flexibil parametrii din aplica\u021bia ta.<\/li>\n<li>Biblioteca este scris\u0103 \u00een nodejs. Problemele de performan\u021b\u0103 ale stivei sunt compensate de natura descentralizat\u0103. Sarcina poate fi \u201e\u00eentins\u0103\u201d prin cre\u0219terea num\u0103rului de noduri. \u00cen schimb, sunt multe avantaje: o comunitate uria\u0219\u0103, simplitate \u0219i u\u0219urin\u021b\u0103 \u00een utilizare, client izomorf, f\u0103r\u0103 dependen\u021be externe etc.<\/li>\n<\/ul>\n<p>\n<b>storacle <\/b> \u2014 este un strat care se mo\u0219tene\u0219te de la spreadable, care permite stocarea fi\u0219ierelor \u00een re\u021bea. Fiecare fi\u0219ier are un hash generat pe baza con\u021binutului s\u0103u, ceea ce permite accesarea acestuia ulterior. Fi\u0219ierele nu sunt fragmentate \u00een blocuri, ci sunt stocate \u00een \u00eentregime.<\/p>\n<p><b>metastocle <\/b> \u2014 este un strat care se mo\u0219tene\u0219te de la spreadable, care permite stocarea datelor \u00een re\u021bea, dar nu a fi\u0219ierelor. Interfa\u021ba este similar\u0103 cu bazele de date nosql. De exemplu, se poate ad\u0103uga un fi\u0219ier \u00een storacle, se poate ob\u021bine hash-ul s\u0103u \u0219i se poate \u00eenregistra \u00een metastocle legat de ceva.<\/p>\n<p><b>museria<\/b> \u2014 se mo\u0219tene\u0219te de la storacle \u0219i metastocle. Acest strat se ocup\u0103 direct cu stocarea muzicii. Stocarea func\u021bioneaz\u0103 doar cu fi\u0219iere mp3 \u0219i cu etichete id3. <\/p>\n<p>Ca \u201echeie\u201d pentru melodie se folose\u0219te denumirea complet\u0103 sub form\u0103 de <b>Artist (TPE1) \u2014 Titlu (TIT2)<\/b>. De exemplu:<\/p>\n<ul>\n<li>Brimstone \u2014 The Burden<\/li>\n<li>Hi-rez \u2014 Lost My Way (feat. Emilio Rojas, Dani Devinci)<\/li>\n<\/ul>\n<p>\nPentru a \u00een\u021belege c\u00e2t mai detaliat cum se formeaz\u0103 titlurile melodiilor, putem <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/museria\/blob\/master\/src\/utils.js\">aici<\/a><\/noindex>Verific\u0103m func\u021bia <b>utils.beautifySongTitle()<\/b>.<\/p>\n<p>O potrivire pe chei este definit\u0103 printr-un procent stabilit \u00een set\u0103rile nodului. De exemplu, o valoare de 0.85 \u00eenseamn\u0103 c\u0103, dac\u0103 func\u021bia care compar\u0103 cheile (titlurile melodiilor) a detectat o similaritate de peste 85%, atunci este aceea\u0219i melodie.<\/p>\n<p>Algoritmul de determinare a similarit\u0103\u021bii este acela\u0219i, \u00een func\u021bia <b>utils.getSongSimilarity()<\/b>.<\/p>\n<p>Coperta melodiei, pentru ob\u021binerea ulterioar\u0103, se ata\u0219eaz\u0103 de asemenea prin etichete (<b>APIC<\/b>). \u00cen utilitare (utils) exist\u0103 toate metodele necesare pentru ob\u021binerea \u0219i procesarea etichetelor.<\/p>\n<p>Un exemplu de lucru cu stocarea prin client poate fi v\u0103zut \u00een <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/museria\">readme<\/a><\/noindex>.<\/p>\n<blockquote><p>Toate straturile men\u021bionate mai sus sunt auto-sufficiente \u0219i pot fi utilizate separat ca straturi inferioare pentru alte proiecte. De exemplu, exist\u0103 deja g\u00e2ndul de a crea un strat pentru stocarea c\u0103r\u021bilor.<\/p><\/blockquote>\n<p>\n<b>museria-global<\/b> \u2014 acesta este un depozit git deja configurat pentru a lansa propriul nod \u00een re\u021beaua global\u0103 de muzic\u0103. Clona\u021bi, <b>npm i &amp;&amp; npm<\/b> start \u0219i, practic, asta e tot. Po\u021bi configura mai detaliat, lansa \u00een docker etc. Informa\u021bii detaliate sunt disponibile pe <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/museria-global#museria-global-storage-alpha-\">GitHub<\/a><\/noindex>.<\/p>\n<p>Atunci c\u00e2nd depozitul este actualizat, trebuie s\u0103 \u00ee\u021bi actualizezi \u0219i nodul. Dac\u0103 se schimb\u0103 num\u0103rul major sau minor al versiunii, aceast\u0103 ac\u021biune este obligatorie, altfel nodurile vechi vor fi ignorate de re\u021bea.<\/p>\n<p>Lucrul cu melodiile se poate face manual sau programatic. Fiecare nod porne\u0219te un server pentru diverse sarcini. De asemenea, la accesarea punctului final implicit, ve\u021bi ob\u021bine o interfa\u021b\u0103 pentru lucrul cu muzica. De exemplu, pute\u021bi accesa <noindex><a rel=\"nofollow\" href=\"http:\/\/storage.museria.com\">nodul r\u0103d\u0103cin\u0103<\/a><\/noindex> (linkul poate fi neactualizat mai t\u00e2rziu, nodurile de intrare pot fi ob\u021binute \u0219i \u00een <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/museria\">Telegram<\/a><\/noindex>, sau pute\u021bi verifica actualiz\u0103rile pe GitHub).<\/p>\n<p>Astfel, pute\u021bi c\u0103uta \u0219i desc\u0103rca melodii \u00een depozit. Desc\u0103rcarea melodiilor poate avea loc \u00een dou\u0103 moduri: obi\u0219nuit \u0219i moderat. Al doilea mod \u00eenseamn\u0103 c\u0103 lucrurile sunt gestionate de o persoan\u0103, nu de un program. Iar dac\u0103 bifezi aceast\u0103 op\u021biune la ad\u0103ugare, va trebui s\u0103 rezolvi un captcha. Melodiile pot fi ad\u0103ugate cu priorit\u0103\u021bi -1, 0 sau 1. Prioritatea 1 poate fi setat\u0103 doar \u00een modul moderat. Priorit\u0103\u021bile sunt necesare pentru ca depozitul s\u0103 decid\u0103 mai eficient ce s\u0103 fac\u0103 atunci c\u00e2nd \u00eencerci s\u0103 \u00eenlocuie\u0219ti o melodie existent\u0103 cu una nou\u0103. Cu c\u00e2t prioritatea este mai mare, cu at\u00e2t mai multe \u0219anse ai s\u0103 suprascrii un fi\u0219ier existent. Aceasta ajut\u0103 la combaterea spamului \u0219i \u00eembun\u0103t\u0103\u021be\u0219te calitatea melodiilor desc\u0103rcate. <\/p>\n<p>Dac\u0103 \u00eencepi s\u0103 adaugi melodii \u00een depozit, \u00eencearc\u0103 s\u0103 ata\u0219ezi \u0219i imagini (cover), de\u0219i acest c\u00e2mp nu este obligatoriu. \u00cen 99% din cazuri, primele imagini g\u0103site pe Google dup\u0103 numele melodiilor sunt copertile albumelor.<\/p>\n<p>Cum se adaug\u0103 tehnic fi\u0219ierele, \u00een c\u00e2teva cuvinte:<\/p>\n<ul>\n<li>Clientul prime\u0219te adresa unui nod liber, care va deveni coordonator pentru o perioad\u0103.<\/li>\n<li>Se declan\u0219eaz\u0103 func\u021bia de ad\u0103ugare a melodiei (de c\u0103tre o persoan\u0103 sau un cod), se face o cerere de ad\u0103ugare la punctul final al coordonatorului.<\/li>\n<li>Coordonatorul calculeaz\u0103 c\u00e2te duplicate trebuie p\u0103strate (parametru configurabil).<\/li>\n<li>Se caut\u0103 nodurile cele mai potrivite pentru stocare.<\/li>\n<li>Fi\u0219ierul, \u00een mod direct, este trimis c\u0103tre aceste noduri. <\/li>\n<\/ul>\n<p>\nCum se ob\u021bin tehnic fi\u0219ierele:<\/p>\n<ul>\n<li>Clientul prime\u0219te adresa unui nod liber, care va deveni coordonator pentru o perioad\u0103.<\/li>\n<li>Se declan\u0219eaz\u0103 func\u021bia de ob\u021binere a melodiei (de c\u0103tre o persoan\u0103 sau un cod), se face o cerere de ob\u021binere la punctul final al coordonatorului.<\/li>\n<li>Coordonatorul verific\u0103 existen\u021ba linkului \u00een cache. Dac\u0103 exist\u0103 \u0219i este func\u021bional, este returnat imediat clientului, altfel nodurile sunt interogate pentru a verifica disponibilitatea.<\/li>\n<li>Se ob\u021bine fi\u0219ierul prin link, dac\u0103 acesta a fost g\u0103sit. <\/li>\n<\/ul>\n<p><\/p>\n<h3>Alternative pentru creatorii de muzic\u0103<\/h3>\n<p>\nM-a interesat mereu cum putem evalua obiectiv pre\u021bul multor lucr\u0103ri creative. De ce, de exemplu, cineva \u00ee\u0219i vinde albumul muzical cu 10$? Sau cu 20$ sau cu 100$. Unde este algoritmul? C\u00e2nd, de exemplu, vorbim despre un produs fizic sau chiar despre multe tipuri de servicii, putem, m\u0103car, s\u0103 calcul\u0103m costul de produc\u021bie \u0219i s\u0103 ne baz\u0103m pe acesta. <\/p>\n<p>Ok, s\u0103 presupunem c\u0103 am stabilit 10$. Este oare eficient? S\u0103 zicem c\u0103 am ascultat albumul sau o melodie de acolo \u0219i am decis s\u0103 ofer un suport. Dar, din p\u0103cate, impresiile \u0219i posibilit\u0103\u021bile mele indic\u0103 c\u0103 3$ sunt limita mea. \u0218i cum trebuie s\u0103 fac? Cel mai probabil, nu voi face nimic, la fel ca majoritatea oamenilor. <\/p>\n<p>Stabilind un pre\u021b fix pentru munca creativ\u0103, te auto-limitezi, nu permi\u021bi unui num\u0103r mai mare de oameni s\u0103 \u00ee\u021bi trimit\u0103 sume mai mici, care \u00een sum\u0103 ar putea fi mai mari dec\u00e2t cei care cump\u0103r\u0103 la pre\u021bul stabilit de tine. Cred c\u0103 arta este exact domeniul \u00een care contribu\u021biile ar trebui s\u0103 domine. Pentru asta este nevoie de:<\/p>\n<ul>\n<li>S\u0103 \u00eenv\u0103\u021b\u0103m oamenii s\u0103 aprecieze \u00een acest mod. Creatorii trebuie s\u0103 arate clar c\u0103 ar dori s\u0103 primeasc\u0103 dona\u021bii, s\u0103 adauge linkuri la diverse metode de plat\u0103 etc.<\/li>\n<li>Este nevoie de mai multe mecanisme pentru simplificarea \u0219i \u00eent\u0103rirea acestor procese. De exemplu, s\u0103 cre\u0103m un site global unde se pot face dona\u021bii pentru art\u0103 prin linkuri de autor.\n<p>S\u0103 presupunem c\u0103 linkul este aproximativ a\u0219a: <\/p>\n<p><b><code>http:\/\/someartistsdonationsite.site\/category\/artist?external-info<\/code><\/b><\/p>\n<p>Dac\u0103 ne concentr\u0103m pe muzicieni, atunci:<\/p>\n<p><b><code>http:\/\/someartistsdonationsite.com\/music\/miyagi?song=blabla<\/code><\/b><\/p>\n<p>Artistul trebuie s\u0103 \u00ee\u0219i verifice numele de utilizator \u0219i s\u0103 se alinieze cu acesta.<\/p>\n<p>\u00cen clientul museria, ad\u0103ug\u0103m func\u021bia de generare a unui astfel de link, iar toate proiectele care folosesc stocarea pot plasa pe site-urile sau aplica\u021biile lor butoane pentru dona\u021bii cu aceste linkuri l\u00e2ng\u0103 melodii. Utilizatorii au posibilitatea de a face dona\u021bii foarte rapid \u0219i simplu. Evident, aceast\u0103 abordare poate fi utilizat\u0103 \u00een orice proiect \u0219i categorie de art\u0103, nu doar prin stocare.<\/li>\n<\/ul>\n<p><\/p>\n<h3>De ce, anume \u021bie, un stoc muzical, \u0219i cum po\u021bi participa?<\/h3>\n<p><\/p>\n<ul>\n<li>Dac\u0103 lucrezi la un proiect legat de muzic\u0103 sau inten\u021bionezi s\u0103 creezi unul, acest lucru a fost conceput pentru asta. Po\u021bi folosi museria pentru a stoca \u0219i ob\u021bine melodii, cresc\u00e2nd fluxul de melodii \u00een re\u021bea. Dac\u0103 ai posibilitatea s\u0103 ridici \u0219i s\u0103 men\u021bii m\u0103car un nod propriu, acesta va fi cel mai bun aport la dezvoltarea re\u021belei.<\/li>\n<li>Poate c\u0103 e\u0219ti gata s\u0103 \u00ee\u021bi asumi un alt rol: s\u0103 aju\u021bi cu codul, s\u0103 completezi \u0219i s\u0103 moderezi baza de date, s\u0103 r\u0103sp\u00e2nde\u0219ti informa\u021bii despre proiect prietenilor t\u0103i etc.<\/li>\n<li>Poate \u021bi-a pl\u0103cut ideea \u0219i e\u0219ti dispus s\u0103 aju\u021bi material, astfel \u00eenc\u00e2t totul s\u0103 existe \u0219i s\u0103 se dezvolte. Cu c\u00e2t sunt mai multe noduri, cu at\u00e2t sunt mai multe melodii.<\/li>\n<li>Sau poate c\u0103 \u00eentr-un anumit moment vei avea nevoie s\u0103 g\u0103se\u0219ti \u0219i s\u0103 descarci o melodie. Vei putea face acest lucru foarte simplu, de exemplu, prin <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/MuseriaBot\">un bot de Telegram<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>\nProiectul se afl\u0103 \u00een prezent \u00een stadiul incipient. A fost lansat\u0103 o re\u021bea de testare, nodurile pot fi restartate frecvent, pot necesita actualiz\u0103ri etc. \u00cen cazul \u00een care nu exist\u0103 probleme critice \u00een perioada de evaluare, aceast\u0103 re\u021bea se va transforma \u00een re\u021beaua principal\u0103.<\/p>\n<p>Po\u021bi vizualiza informa\u021bii despre nod din exterior: num\u0103rul de melodii, spa\u021biul liber etc. la un link de tipul <b><code>http:\/\/node-address\/status<\/code><\/b> sau <b><code>http:\/\/node-address\/status?pretty<\/code><\/b><\/p>\n<p>Contactele mele:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/ortex\">@ortex<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"mailto:mywebstreet@gmail.com\">mywebstreet@gmail.com<\/a><\/noindex>\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/museria\">Grup \u00een Telegram \u00een englez\u0103.<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/museria.com\/\">\u0218i site-ul, datorit\u0103 c\u0103ruia a luat na\u0219tere toat\u0103 aceast\u0103 idee.<\/a><\/noindex><\/li>\n<\/ul>\n<p>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495058\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u044f \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0431\u0438\u0440\u0430\u0442\u044c \u043c\u0443\u0437\u044b\u043a\u0443 \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0438 \u0441\u043b\u0443\u0448\u0430\u0442\u044c \u0434\u043e\u043c\u0430\/\u043d\u0430 \u0443\u043b\u0438\u0446\u0435\/\u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0430\u0445 \u0438.\u0442.\u0434. \u0418 \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0432 \u043f\u043e\u0442\u043e\u043a\u0435, \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u043c\u043e\u0438\u043c \u0443\u0447\u0430\u0441\u0442\u0438\u0435\u043c. \u041f\u0440\u0438\u0434\u0443\u043c\u0430\u043b \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443, \u043d\u0430\u0431\u0440\u043e\u0441\u0430\u043b \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u0438 \u0432 \u0438\u0442\u043e\u0433\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u043e\u0434\u043d\u043e\u0439 \u201c\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439\u201d. \u0410 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u0440\u0430\u0442\u044c \u0441\u0430\u043c\u0438 \u0444\u0430\u0439\u043b\u044b \u043f\u0435\u0441\u0435\u043d. \u041a \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u0432\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 \u0443\u0436\u0435 \u0437\u0430\u043a\u0440\u044b\u043b\u0430 api, \u043d\u0430 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u043c\u0443\u0437\u044b\u043a\u0430\u043b\u044c\u043d\u044b\u0445 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":80223,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-80222","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u044f \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/museria-deczentralizovannoe-hranilishhe-muzyki\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Museria \u2014 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043c\u0443\u0437\u044b\u043a\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u044f \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/museria-deczentralizovannoe-hranilishhe-muzyki\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-04T11:42:18+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-04T11:42:18+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Museria \u2014 un depozit de muzic\u0103 descentralizat | ProHoster","description":"M-am g\u00e2ndit odat\u0103 s\u0103 scriu o aplica\u021bie, astfel \u00eenc\u00e2t.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/museria-deczentralizovannoe-hranilishhe-muzyki","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Museria \u2014 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043c\u0443\u0437\u044b\u043a\u0438 | ProHoster","og:description":"\u0421\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u044f \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b.","og:url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/museria-deczentralizovannoe-hranilishhe-muzyki","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-04T11:42:18+00:00","article:modified_time":"2020-05-04T11:42:18+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"80222","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:22:48","updated":"2022-10-08 10:56:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/80222","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=80222"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/80222\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/80223"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=80222"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=80222"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=80222"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}