Museria — decentralizirano skladište glazbe

Museria — decentralizirano skladište glazbe

Jednom sam odlučio napisati aplikaciju za odabir glazbe koju bih slušao kod kuće, vani, tijekom treninga itd. I da sve to radi u pozadini, s minimalnim mojim sudjelovanjem. Smislio sam arhitekturu, skicirao prototip i na kraju se suočio s jednim "malim problemom".

Ali nije bilo jasno odakle uzeti same datoteke pjesama. Do tog trenutka, VKontakte je već zatvorio API, na velikim glazbenim portalima također nema ništa, čak se i pjesme isporučuju u komadima, kako ih ne bi parsirali. Ostali su samo neki odvojeni site-ovi s puno reklama i smeća, razne sumnjive programe za grabljenje i druge "prljave" opcije. Uglavnom, nijedno valjano dobro rješenje. Naravno, moglo bi se kupiti pretplatu na neku Yandex glazbu ili slično. Ali opet, nigdje nema otvorenog javnog API-ja i nemaš pristup glazbi programatski. Nekoliko velikih kompanija, u suštini, ograničilo je drugim pristup glazbi. Zašto se to uopće dogodilo? Kada smo dublje istražili, postalo je jasno da je osnovni problem u autorskim pravima. Trenutno rješenje u obliku pretplata zadovoljava mnoge komercijalne autore glazbenih djela i te iste kompanije. U isto vrijeme, nekomercijalna i uvjetno komercijalna glazba također ulaze u opći popis. Ili plaćaš za sve ili ne slušaš ništa.

I počeo sam razmišljati što učiniti s tim svime. Kako organizirati slobodno širenje glazbe? Što bih radio da se sam bavim stvaranjem glazbe i želio bih zarađivati na tome? Bi li mi se svidjelo da se moje pjesme počnu širenjem piratski? Koje alternativno rješenje uopće postoji?

Na kraju su se stvorila dva osnovna problema koja treba riješiti:

  • Organizacija slobodnog širenja glazbe na način koji je prikladan većini ljudi, uključujući programske metode.
  • Ponuda alternativa kreatorima glazbe za zaradu

Globalno decentralizirano skladište glazbe

Isprva sam pokušao pronaći već postojeća rješenja i izgraditi sve na bazi toga. Nakon nekog vremena pretraživanja, prvo što mi je zapelo za oko ipfs. Počeo sam realizirati svoju ideju, ali nakon nekog vremena otkrio nekoliko kritičnih problema u ovom rješenju:

  • Ipfs — spremište za sve i svašta. Ovdje su slike, muzika, video i sve što možeš zamisliti. Uglavnom, velika planetary „deponija“. Stoga, kada pokreneš svoj čvor, odmah dobijaš ogroman teret. Računar se jednostavno muči od boli.
  • Neki nedovršeni mehanizam za sklapanje „otpada“. Ne znam kako je sada, ali tada, ako si u konfiguraciji naveo da želiš ograničiti pohranu na deset gigabajta podataka, to nije značilo ništa. Pohrana se širila, ignorirajući mnoge parametre konfiguracije. Na kraju, trebao si imati ogroman kapacitet diska dok ipfs shvati kako se osloboditi nepotrebnog.
  • U trenutku korištenja biblioteke (ne znam kako je sada), klijent nije imao implementirane vrijeme isteka. Pošalješ zahtjev za preuzimanje datoteke, i ako je nema, jednostavno visiš. Naravno, ljudi su smislili razne zaobilazne puteve koji su djelomično rješavali problem, ali to su bili improvizirani lijekovi. Takve stvari treba imati iz kutije.

Bilo je još mnogo manjih problema, pa me dojam bio nedvojben: to se ne može koristiti za projekt. Nastavio sam tražiti skladište, proučavao različite opcije, ali nisam pronašao ništa prikladno.

Na kraju, odlučio sam pokušati napisati decentralizirano skladište sam. Neka ne pretendira na međuzvjezdano, ali će rješavati konkretan zadatak.

Tako su nastali spreadable, storacle, metastocle, museria, museria-global.

spreadable — to je osnovni, najdonji sloj koji omogućuje povezivanje čvorova u mrežu. U njemu je ugrađen algoritam koji sam za sada implementirao djelomično s predviđanjem za otprilike 10000 servera. Potpuna verzija algoritma bila bi mnogo složenija za implementaciju i zahtijevala bi još nekoliko dodatnih mjeseci (možda i više).

Detaljno neću opisivati spreadable u ovom članku, bolje ću pisati poseban neki put. Ovdje ću samo napomenuti neke posebnosti:

  • Radi preko http/https.
  • Možeš stvoriti posebnu mrežu za specifičan zadatak, što znatno smanjuje opterećenje na svaki pojedinačni projekt, u usporedbi s tim da su svi u jednoj mreži.
  • U početku je osmišljen mehanizam s vremenima isteka i drugim sitnicama. I to radi za sve metode, i u klijentu i u čvoru. Možeš fleksibilno upravljati parametrima iz svoje aplikacije.
  • Biblioteka je napisana u nodejs-u. Problemi s performansama stoga nadoknađuju decentralizirana priroda. Opterećenje se može 'rasporediti' povećanjem broja čvorova. U zamjenu, postoje mnoge prednosti: ogromna zajednica, jednostavnost i praktičnost korištenja, izomorfni klijent, odsutnost vanjskih ovisnosti itd.

storacle — to je sloj koji nasljeđuje od spreadable, koji omogućava pohranu datoteka u mreži. Svaka datoteka ima svoj hash prema sadržaju, prema kojem se kasnije može dohvatiti. Datoteke se ne dijele na blokove, već se pohranjuju u cjelini.

metastocle — sloj koji nasljeđuje od spreadable, koji omogućava pohranu podataka u mreži, ali ne i datoteka. Sučelje je slično nosql bazama podataka. Na primjer, možete dodati datoteku u storacle, dobiti njen hash i zapisati u metastocle s povezivanjem na nešto.

museria — nasljeđuje od storacle i metastocle. Ovaj sloj izravno odgovara za pohranu glazbe. Skladište radi isključivo s mp3 datotekama i id3 tagovima.

Kao "ključ" za pjesmu koristi se njezin puni naziv u obliku Izvođač (TPE1) — Naziv (TIT2). Na primjer:

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

Najdetaljnije saznati kako se formiraju nazivi pjesama možete ovdje. Treba pogledati funkciju utils.beautifySongTitle().

Poklapanje prema ključevima smatra se određenim postotkom definiranom u postavkama čvora. Na primjer, vrijednost 0.85 označava da ako funkcija usporedbe ključeva (naziva pjesama) otkrije sličnost veću od 85%, to je ista pjesma.

Algoritam za određivanje sličnosti nalazi se također u funkciji utils.getSongSimilarity().

Omot za pjesmu, za naknadno dobivanje, također se pričvršćuje putem tagova (APIC). U alatima (utils) postoje sve potrebne metode za dobivanje i obradu tagova.

Primjer rada s skladištem putem klijenta možete vidjeti u readme.

Svi gornji slojevi su samodostatni i mogu se koristiti odvojeno kao niži slojevi za druge projekte. Na primjer, već sada postoji ideja o stvaranju sloja za pohranu knjiga.

museria-global — to je već konfigurirani git repozitorij za pokretanje vlastitog čvora u globalnoj mreži glazbe. Klonirajte, npm i && npm start i u suštini to je to. Možete detaljnije konfigurirati, pokrenuti u Dockeru itd. Detaljne informacije nalaze se na githubu.

Kada se repozitorij ažurira, potrebno je ažurirati i svoj čvor. Ako se mijenja glavni ili sekundarni broj verzije, tada je ova radnja obavezna, inače će stari čvorovi biti ignorirani od strane mreže.

Rad s pjesmama može se obavljati ručno ili programski. Svaki čvor pokreće server za različite zadatke. Uključujući, kada posjetite zadani endpoint, dobit ćete sučelje za rad s muzikom. Na primjer, možete posjetiti glavni čvor (- poveznica možda više neće biti aktualna kasnije, ulazni čvorovi se također mogu dobiti na Telegramu, ili pogledati ažuriranja na GitHub-u).

Tako možete pretraživati i preuzimati pjesme u skladištu. Preuzimanje pjesama može se odvijati u dva moda: obični i moderirani. Drugi način znači da posao vodi čovjek, a ne program. Ako označite ovu opciju prilikom dodavanja, morat ćete riješiti CAPTCHA. Pjesme se mogu dodavati s prioritetima -1, 0 ili 1. Prioritet 1 može se postaviti samo u moderiranom režimu. Prioriteti su potrebni kako bi skladište bolje odlučilo što učiniti kada pokušavate zamijeniti već postojeću pjesmu novom. Što je veći prioritet, to su veće šanse da ćete prepisati postojeću datoteku. To pomaže u borbi protiv spama i povećava kvalitetu preuzimanih pjesama.

Ako počnete dodavati pjesme u skladište, pokušajte dodati i slike (cover), iako ovo polje nije obavezno. U 99% slučajeva prve slike u Googleu prema nazivima pjesama su coveri albuma.

Kako tehnički izgleda dodavanje datoteka, u dvije riječi:

  • Klijent dobiva adresu slobodnog čvora, koji će na neko vrijeme postati koordinator.
  • Aktivira se funkcija dodavanja pjesme (od strane osobe ili koda), dolazi do zahtjeva za dodavanje na endpoint koordinatora.
  • Koordinator izračunava koliko duplikata treba sačuvati (konfigurabilni parametar).
  • Traže se najprikladniji čvorovi za pohranu.
  • Datoteka, izravno, odlazi na te čvorove.

Kako tehnički izgleda preuzimanje datoteka:

  • Klijent dobiva adresu slobodnog čvora, koji će na neko vrijeme postati koordinator.
  • Aktivira se funkcija preuzimanja pjesme (od strane osobe ili koda), dolazi do zahtjeva za preuzimanje na endpoint koordinatora.
  • Koordinator provjerava postoji li veza u predmemoriji. Ako je postoji i radi, odmah se vraća klijentu, inače se ispituju čvorovi o prisutnosti.
  • Preuzimanje datoteke putem poveznice, ako je pronađena.

Alternativa za glazbene stvaratelje

Oduvijek me zanimalo kako objektivno procijeniti cijenu mnogih kreativnih djela? Zašto, na primjer, netko postavlja svoj glazbeni album na 10 dolara? Ili na 20 dolara ili na 100 dolara? Gdje je algoritam? Kada, na primjer, govorimo o nekom fizičkom proizvodu ili čak o mnogim vrstama usluga, možemo barem izračunati troškovnu cijenu i krenuti od toga.

U redu, pretpostavimo da smo postavili cijenu od 10 dolara. Je li to zaista učinkovito? Recimo da sam slušao album negdje ili pjesmu s njega i odlučio zahvaliti. No prema mojim osjećajima i mogućnostima, 3 dolara je moj maksimum. Kako onda postupiti? Vjerojatno neću učiniti ništa, kao ni većina ljudi.

Postavljanjem fiksne cijene za kreativni rad jednostavno se ograničavaš, ne dozvoljavaš većem broju ljudi da ti pošalje manje iznose koji u zbiru mogu biti značajniji od onih koji kupuju po tvojim postavljenim cijenama. Smatram da bi kreativnost trebala biti područje gdje donacije trebaju prvi vladati. Za to je potrebno:

  • Naučiti ljude da zahvaljuju na taj način. Stvaratelji sami trebaju jasno pokazati da bi željeli primati donacije, dodati poveznice na različite metode plaćanja svuda.
  • Potrebno je više mehanizama za pojednostavljenje i jačanje tih procesa. Na primjer, stvoriti neku globalnu stranicu na kojoj se može donirati za kreativnost putem autorskih poveznica.

    Pretpostavimo, poveznica bi otprilike izgledala ovako:

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

    Ako se suzimo na glazbenike, onda:

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

    Izvođač treba potvrditi svoj nadimak i povezati se s njim.

    U klijent museria dodajemo funkciju generiranja slične poveznice, a svi projekti koji koriste skladište mogu na svojim stranicama/ aplikacijama postaviti gumbe za donacije s tim poveznicama uz pjesme. Korisnici imaju mogućnost vrlo brzo i jednostavno donirati. Naravno, ovaj pristup može se koristiti u bilo kojem projektu i kategoriji kreativnosti, ne samo preko skladišta.

Zašto, upravo tebi, glazbeno skladište, i kako se u to možeš uključiti?

  • Ako radiš na projektu vezanom za muziku ili planiraš takav stvoriti, sve je to zamišljeno za tu svrhu. Možeš koristiti museria za pohranu i preuzimanje pjesama, povećavajući protok pjesama na mreži. Ako pri tome imaš mogućnosti podići i zadržati barem jedan vlastiti čvor, to će biti najbolji doprinos razvoju mreže.
  • Možda si spreman preuzeti neku drugu ulogu: pomoći s kodiranjem, ili ispunjavati i moderirati bazu, širiti informacije o projektu svojim poznanicima itd.
  • Možda ti se svidjela ideja i spreman si pomoći finansijski da sve to živi i razvija se. Što više čvorova, to više pjesama.
  • Ili ti samo u nekom trenutku zatreba da pronađeš i preuzmeš pjesmu. Možeš to učiniti vrlo jednostavno, na primjer, preko telegram bota.

Projekt je trenutno u samoj početnoj fazi. Pokrenuta je testna mreža, čvorovi se mogu često ponovo pokretati, zahtijevati ažuriranja itd. U slučaju da ne bude kritičnih problema tokom procjenjivanja, ova mreža će se transformirati u glavnu.

Informacije o čvoru izvana: broj pjesama, slobodnog prostora itd., možeš vidjeti putem poveznice tipa http://node-address/status ili http://node-address/status?pretty

Moji kontakti:

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster