Museria - stocare descentralizată a muzicii

Museria - stocare descentralizată a muzicii

Într-o zi m-am hotărât să scriu o aplicație pentru a selecta muzica pentru mine și a o asculta acasă/pe stradă/antrenamente etc. Și pentru ca toate acestea să funcționeze într-un flux, cu o participare minimă din partea mea. Am venit cu o arhitectură, am schițat un prototip și, în cele din urmă, am întâlnit o „mică problemă”.

Și nu este clar de unde să obțineți fișierele melodiilor în sine. Până atunci, VKontakte închisese deja API-ul, pe portalurile mari de muzică totul era, de asemenea, dezactivat, chiar și cântecele erau distribuite în bucăți pentru a nu fi analizate. Au rămas doar niște site-uri individuale fly-by-night cu o mulțime de reclame și tot felul de gunoaie, tot felul de programe de grabber dubioase și alte opțiuni „murdare”. În general, nu o singură soluție cu adevărat bună. Puteți, desigur, să cumpărați un abonament la niște muzică Yandex sau altele asemenea. Dar din nou, nu există niciun API public deschis și nu aveți acces la muzică în mod programatic. Câteva companii mari au restricționat în esență accesul altora la muzică. De ce sa întâmplat acest lucru? Săpănd mai adânc, a devenit clar că principala problemă era dreptul de autor. Soluția actuală sub formă de abonamente se potrivește multor autori comerciali de muzică și aceleași companii. În același timp, pe lista generală intră și muzica necomercială și semi-comercială. Ori plătești pentru tot, ori nu asculți nimic.

Și am început să mă gândesc ce să fac cu toate astea. Cum putem organiza distribuirea gratuită a muzicii? Ce aș face dacă aș crea muzică și aș vrea să câștig bani din asta? Mi-ar plăcea dacă melodiile mele ar fi piratate? Ce soluție alternativă există oricum?

Ca urmare, există două probleme principale care trebuie rezolvate:

  • Organizarea distribuției gratuite a muzicii folosind metode convenabile pentru majoritatea oamenilor, inclusiv software.
  • Oferirea de alternative pentru creatorii de muzică pentru a câștiga bani

Stocare globală de muzică descentralizată

Inițial, am încercat să găsesc soluții existente și să creez totul pe baza acestui lucru. După ceva timp de căutare, primul care mi-a plăcut a fost ipfs. Am început să-mi implementez ideea, dar după un timp am descoperit câteva probleme critice în această soluție:

  • Ipfs - stocare pentru orice și pentru toată lumea. Există imagini și muzică și videoclipuri și tot ce doriți. În general, un „coș de gunoi” planetar atât de mare. Prin urmare, atunci când lansați nodul, primiți imediat o sarcină uriașă. Mașina doar se zvârcește de durere.
  • Un fel de mecanism de colectare „gunoi” neterminat. Nu știu cum este acum, dar în acel moment, dacă ai scris în configurație că vrei să limitezi stocarea la zece gigaocteți de date, atunci nu a însemnat nimic. Spațiul de stocare a crescut, ignorând mulți parametri de configurare. Ca rezultat, a fost necesar să avem o rezervă uriașă de hard disk până când ipfs și-a dat seama cum să resetați ceea ce nu este necesar.
  • La momentul utilizării bibliotecii (nu știu cum este acum), clientul nu avea timeout-uri implementate. Trimiți o solicitare pentru a primi un fișier, iar dacă nu există, atunci pur și simplu blocați. Desigur, oamenii au venit cu tot felul de soluții care au rezolvat parțial problema, dar acestea erau cârje. Aceste lucruri ar trebui să iasă din cutie.

Au existat încă multe probleme minore, iar impresia era clară: aceasta nu poate fi folosită pentru proiect. Am continuat să caut o unitate de depozitare, explorând diferite opțiuni, dar nu am găsit niciodată nimic potrivit.

În cele din urmă, am decis că merită să încerc să scriu eu o stocare descentralizată. Chiar dacă nu se pretinde a fi interplanetar, va rezolva o problemă anume.

Și așa s-a dovedit răspândibil, stocacul, metastocul, museria, museria-global.

răspândibil - acesta este stratul principal, cel mai de jos, care vă permite să combinați noduri într-o rețea. Conține un algoritm pe care până acum l-am implementat parțial pe aproximativ 10000 de servere. Versiunea completă a algoritmului este mult mai dificil de implementat și ar necesita câteva luni suplimentare (poate mai multe).

Nu voi descrie în detaliu materialul răspândit în acest articol; este mai bine să scrieți unul separat cândva. Aici voi nota doar câteva caracteristici:

  • Funcționează prin http/https.
  • Puteți crea o rețea separată pentru o anumită sarcină, ceea ce va reduce semnificativ sarcina fiecărui proiect individual decât dacă ar fi toate pe aceeași rețea.
  • Inițial a fost gândit un mecanism cu timeout-uri și alte lucruri mărunte. Și aceasta funcționează pentru toate metodele atât în ​​client, cât și în nod. Puteți gestiona în mod flexibil setările din cadrul aplicației dvs.
  • Biblioteca este scrisă în nodejs. Problemele de performanță ale stivei sunt compensate de natura sa descentralizată. Sarcina poate fi „împrăștiată” prin creșterea numărului de noduri. În schimb, există multe avantaje: o comunitate uriașă, simplitate și ușurință în utilizare, un client izomorf, fără dependențe externe etc.

stocacul este un strat moștenit de la spreadable care vă permite să stocați fișiere în rețea. Fiecare fișier are propriul său hash al conținutului său, care poate fi folosit pentru a-l prelua ulterior. Fișierele nu sunt împărțite în blocuri, ci sunt stocate în întregime.

metastocul - un strat moștenit de la spreadable, care vă permite să stocați date în rețea, dar nu și fișiere. Interfața este similară cu o bază de date Nosql. Puteți, de exemplu, să adăugați un fișier în storacle, să-i obțineți hash și să-l scrieți în metastocle cu un link către ceva.

museria - mostenit din storac si metastocul. Acest strat este direct responsabil pentru stocarea muzicii. Stocarea funcționează numai cu fișiere mp3 și etichete id3.

Ca „cheie” a cântecului, numele complet este folosit în formular Artist (TPE1) - Titlu (TIT2). De exemplu:

  • Brimstone - Povara
  • Hi-rez - Lost My Way (feat. Emilio Rojas, Dani Devinci)

Puteți afla cât mai detaliat cum se formează titlurile melodiilor. aici. Trebuie să te uiți la funcție utils.beautifySongTitle().

Procentul de potriviri definit în setările nodului este considerat a fi o potrivire. De exemplu, o valoare de 0.85 înseamnă că dacă funcția de comparare a tastelor (numele melodiilor) a găsit o asemănare de peste 85%, atunci este aceeași melodie.

Algoritmul pentru determinarea asemănării este acolo, în funcție utils.getSongSimilarity().

Coperta melodiei, pentru o primire ulterioară, poate fi atașată și prin etichete (APIC). Utilitățile au toate metodele necesare pentru primirea și procesarea etichetelor.

Un exemplu de lucru cu stocarea printr-un client poate fi găsit în Readme.

Toate straturile de mai sus sunt autonome și pot fi utilizate separat ca straturi inferioare pentru alte proiecte. De exemplu, există deja o idee de a face un strat pentru depozitarea cărților.

museria-global este un depozit git deja configurat pentru lansarea propriului nod în rețeaua muzicală globală. Clonarea npm i && npm începe și practic asta e tot. Îl puteți configura mai detaliat, îl puteți rula în Docker etc. Informații detaliate sunt disponibile la github.

Când depozitul este actualizat, trebuie să vă actualizați nodul. Dacă numărul versiunii majore sau minore se modifică, atunci această acțiune este obligatorie, în caz contrar nodurile vechi vor fi ignorate de rețea.

Puteți lucra cu melodii manual și programatic. Fiecare nod rulează un server pentru sarcini diferite. Inclusiv, atunci când vizitați punctul final implicit, veți primi o interfață pentru lucrul cu muzica. De exemplu, puteți merge la nodul rădăcină (linkul poate să nu fie relevant mai târziu, nodurile de intrare pot fi, de asemenea, obținute în telegramă, sau căutați actualizări pe Github).

În acest fel, puteți căuta și încărca melodii în stocare. Încărcarea melodiilor poate avea loc în două moduri: normal și moderat. Al doilea mod înseamnă că munca este efectuată de o persoană, nu de un program. Și dacă bifați această casetă când adăugați, va trebui să rezolvați captcha. Melodiile pot fi adăugate cu prioritățile -1, 0 sau 1. Prioritatea 1 poate fi setată doar în modul moderat. Sunt necesare priorități, astfel încât stocarea să poată decide mai eficient ce să facă atunci când încercați să înlocuiți o melodie existentă cu una nouă. Cu cât prioritatea este mai mare, cu atât este mai probabil să suprascrieți un fișier existent. Acest lucru ajută la combaterea spamului și crește calitatea melodiilor descărcate.

Dacă începeți să adăugați melodii în stocarea dvs., încercați să atașați imagini (copertă), deși acest câmp nu este obligatoriu. În 99% din cazuri, primele imagini de pe Google bazate pe titlurile melodiilor sunt coperți de albume.

Cum se produce adăugarea de fișiere din punct de vedere tehnic, pe scurt:

  • Clientul primește adresa unui nod liber, care va deveni coordonator pentru o perioadă.
  • Funcția de adăugare a unui cântec este declanșată (de către o persoană sau un cod) și se face o solicitare pentru adăugarea unui coordonator la punctul final.
  • Coordonatorul calculează câte duplicate ar trebui să fie stocate (parametru configurabil).
  • Se caută nodurile cele mai potrivite pentru salvare.
  • Fișierul merge direct la aceste noduri.

Cât de tehnic sunt primite fișierele:

  • Clientul primește adresa unui nod liber, care va deveni coordonator pentru o perioadă.
  • Funcția de primire a unui cântec (de către o persoană sau un cod) este declanșată și se face o solicitare pentru a o primi la punctul final al coordonatorului.
  • Coordonatorul verifică prezența link-ului în cache. Dacă există unul și funcționează, acesta este imediat returnat clientului, altfel nodurile sunt interogate pentru disponibilitate.
  • Fișierul este primit de la link, dacă se găsește unul.

Alternative pentru creatorii muzicali

Am fost întotdeauna interesat de întrebarea cum se poate evalua în mod obiectiv valoarea multor lucrări creative? De ce, de exemplu, o persoană oferă albumul său muzical pentru 10 USD? Fie pentru 20 de dolari, fie pentru 100 de dolari. Unde este algoritmul? Când, de exemplu, vorbim de un produs fizic, sau chiar de multe tipuri de servicii, atunci putem măcar să calculăm costul și să pornim de la asta.

Bine, să presupunem că pariem 10 USD. Este acest lucru foarte eficient? Să presupunem că am ascultat undeva un album sau o melodie de acolo și am decis să-mi arăt recunoștința. Dar, în funcție de sentimentele mele și de propriile mele capacități, 3 dolari este plafonul meu. Deci ce ar trebui sa facem? Cel mai probabil nu voi face nimic, ca majoritatea oamenilor.

Prin stabilirea unui fel de preț fix pentru munca de creație, pur și simplu te limitezi, împiedicând un număr mai mare de oameni să-ți trimită mai puțini bani, ceea ce în total poate fi mai impresionant decât cei care vor cumpăra la prețul pe care l-ai stabilit. Mi se pare că creativitatea este exact domeniul în care donațiile ar trebui să domine în primul rând. Pentru a face acest lucru aveți nevoie de:

  • Învață-i pe oameni să mulțumească în acest fel. Creatorii înșiși trebuie să arate clar că ar dori să primească donații, să adauge peste tot link-uri către diferite metode de plată etc.
  • Sunt necesare mai multe mecanisme pentru simplificarea și consolidarea acestor procese. De exemplu, creați un fel de site web global unde puteți dona pentru creativitate folosind link-uri pentru drepturi de autor.

    Să presupunem că linkul este cam așa:

    http://someartistsdonationsite.site/category/artist?external-info

    Dacă o limităm la muzicieni, atunci:

    http://someartistsdonationsite.com/music/miyagi?song=blabla

    Artistul trebuie să își verifice porecla și să-l atașeze.

    Adăugăm o funcție pentru generarea unui astfel de link către clientul museria, iar toate proiectele care utilizează depozitul pot plasa butoane de donație cu aceste link-uri lângă melodiile de pe site-urile/aplicațiile lor. Utilizatorii au posibilitatea de a face o donație foarte rapid și ușor. Desigur, această abordare poate fi folosită în orice proiect și categorie de creativitate, nu doar prin stocare.

De ce aveți nevoie exact de un spațiu de stocare a muzicii și cum puteți participa la el?

  • Dacă lucrați la un proiect legat de muzică sau plănuiți să creați unul, atunci acesta este scopul pentru care totul a fost destinat. Puteți folosi museria pentru a stoca și a prelua melodii, crescând fluxul de melodii online. Dacă, în același timp, aveți capacitatea de a ridica și de a deține cel puțin un nod al dvs., atunci aceasta va fi cea mai bună contribuție la dezvoltarea rețelei.
  • Poate că sunteți gata să vă ocupați de un alt rol: ajutați cu codul sau completați și moderați baza de date, distribuiți informații despre proiect prietenilor dvs. etc.
  • Poate ți-a plăcut ideea și ești gata să ajuți financiar pentru ca totul să trăiască și să se dezvolte. Cu cât sunt mai multe noduri, cu atât mai multe cântece.
  • Sau trebuie doar să găsiți și să descărcați o melodie la un moment dat. Puteți face acest lucru foarte simplu, de exemplu, prin telegram bot.

Proiectul este acum la stadiul de început. A fost lansată o rețea de testare, nodurile se pot reporni frecvent, necesită actualizări etc. Dacă nu există probleme critice în perioada de evaluare, aceeași rețea este transformată în cea principală.

Puteți vizualiza informații despre nod din exterior: numărul de melodii, spațiul liber etc., folosind un link ca http://node-address/status sau http://node-address/status?pretty

Contactele mele:

Sursa: www.habr.com

Adauga un comentariu