Museria - decentralizovana pohrana muzike

Museria - decentralizovana pohrana muzike

Jednog dana sam odlučio da napišem aplikaciju da biram muziku za sebe i slušam je kod kuće/na ulici/treninzima itd. I tako da sve ovo radi u toku, uz minimalno moje učešće. Osmislio sam arhitekturu, skicirao prototip i na kraju naišao na jedan „mali problem“.

I nije jasno gdje nabaviti same fajlove pjesama. U to vrijeme, VKontakte je već zatvorio api, na velikim muzičkim portalima sve je takođe bilo utišano, čak su i pjesme davane u komadima kako se ne bi raščlanile. Preostali su samo neki pojedinačni sajtovi za letenje po noći sa gomilom reklama i svakojakog smeća, svakakvim sumnjivim grabber programima i drugim „prljavim“ opcijama. Općenito, ni jedno stvarno dobro rješenje. Možete, naravno, kupiti pretplatu na neku Yandex muziku ili slično. Ali opet, nigdje nema otvorenog javnog API-ja i nemate pristup muzici programski. Nekoliko velikih kompanija je suštinski ograničilo pristup muzici drugima. Zašto se to uopšte dogodilo? Kopajući dublje, postalo je jasno da su glavni problem autorska prava. Sadašnje rješenje u vidu pretplate odgovara mnogim komercijalnim muzičkim autorima i istim tim kompanijama. Istovremeno, nekomercijalna i polukomercijalna muzika takođe spada u opštu listu. Ili plaćate sve ili ne slušate ništa.

I počeo sam da razmišljam šta da radim sa svim ovim. Kako možemo organizovati besplatnu distribuciju muzike? Šta bih radio da sam stvarao muziku i želeo da zaradim od toga? Da li bih voleo da su moje pesme piratske? Koje alternativno rješenje uopće postoji?

Kao rezultat toga, postoje dva glavna problema koja treba riješiti:

  • Organizacija besplatne distribucije muzike koristeći metode pogodne za većinu ljudi, uključujući softver.
  • Nudi alternative za muzičke kreatore da zarade novac

Globalna decentralizovana pohrana muzike

U početku sam pokušavao pronaći postojeća rješenja i kreirati sve na osnovu toga. Nakon nekog vremena traženja, prva koja mi se svidjela je ipfs. Počeo sam implementirati svoju ideju, ali sam nakon nekog vremena otkrio nekoliko kritičnih problema u ovom rješenju:

  • Ipfs - skladište za sve i svakoga. Tu su slike i muzika i video zapisi i sve što želite. Općenito, tako velika planetarna "kanta za smeće". Stoga, kada pokrenete svoj čvor, odmah dobijate ogromno opterećenje. Auto se samo grči od bolova.
  • Neka vrsta nedovršenog mehanizma za sakupljanje "smeća". Ne znam kako je sada, ali u tom trenutku, ako ste u konfiguraciji napisali da želite ograničiti skladištenje na deset gigabajta podataka, onda to nije ništa značilo. Pohrana je rasla, ignorirajući mnoge konfiguracijske parametre. Kao rezultat toga, bilo je potrebno imati ogromnu rezervu tvrdog diska dok ipfs ne shvati kako da resetuje nepotrebno.
  • U vrijeme korištenja biblioteke (ne znam kako je sada) klijent nije imao implementiran timeout. Šaljete zahtjev za prijem fajla, a ako ne postoji, onda samo visite. Naravno, ljudi su smislili razna rješenja koja su djelimično riješila problem, ali to su bile štake. Ove stvari bi trebale izaći iz kutije.

Bilo je još mnogo manjih problema, a utisak je bio jasan: ovo se ne može iskoristiti za projekat. Nastavio sam tražiti skladište, istražujući različite opcije, ali nikada nisam našao ništa prikladno.

Na kraju sam odlučio da je vrijedno pokušati sam napisati decentralizirano skladište. Čak i ako ne pretenduje da je međuplanetarna, riješit će određeni problem.

I tako je ispalo maziva, storacle, metastokula, museria, museria-global.

maziva - ovo je glavni, najniži sloj koji vam omogućava kombiniranje čvorova u mrežu. Sadrži algoritam, koji sam do sada implementirao djelomično na oko 10000 servera. Punu verziju algoritma je mnogo teže implementirati i zahtijevalo bi nekoliko dodatnih mjeseci (možda i više).

Neću detaljno opisivati ​​proširivo u ovom članku, bolje je jednog dana napisati poseban. Ovdje ću samo napomenuti neke karakteristike:

  • Radi preko http/https.
  • Možete kreirati zasebnu mrežu za određeni zadatak, što će značajno smanjiti opterećenje na svakom pojedinačnom projektu nego da su svi na istoj mreži.
  • U početku je osmišljen mehanizam sa tajm-autima i drugim sitnicama. I ovo radi za sve metode i u klijentu i u čvoru. Možete fleksibilno upravljati postavkama unutar svoje aplikacije.
  • Biblioteka je napisana u nodejs. Problemi sa performansama steka nadoknađeni su njegovom decentralizovanom prirodom. Opterećenje se može "rasprostirati" povećanjem broja čvorova. Zauzvrat, postoje mnoge prednosti: ogromna zajednica, jednostavnost i lakoća korištenja, izomorfni klijent, bez vanjskih ovisnosti itd.

storacle je sloj naslijeđen od proširivog koji vam omogućava pohranjivanje datoteka na mreži. Svaka datoteka ima svoj vlastiti hash svog sadržaja, koji se može koristiti za kasnije preuzimanje. Fajlovi se ne dijele na blokove, već se pohranjuju u cijelosti.

metastokula - sloj naslijeđen od širine, koji vam omogućava pohranjivanje podataka na mreži, ali ne i datoteka. Interfejs je sličan Nosql bazi podataka. Možete, na primjer, dodati datoteku u storacle, dobiti njen hash i zapisati je u metastocle sa vezom do nečega.

museria - naslijeđeno od storacle i metastocle. Ovaj sloj je direktno odgovoran za pohranjivanje muzike. Pohrana radi samo sa mp3 datotekama i id3 oznakama.

Kao „ključ“ za pjesmu, njen puni naziv se koristi u obrascu Izvođač (TPE1) - Naslov (TIT2). Na primjer:

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

Možete saznati što je moguće detaljnije kako se formiraju naslovi pjesama. ovdje. Morate pogledati funkciju utils.beautifySongTitle().

Postotak podudaranja definiranih u postavkama čvora smatra se podudaranjem. Na primjer, vrijednost 0.85 znači da ako je funkcija poređenja ključeva (nazivi pjesama) pronašla sličnost veću od 85%, onda je riječ o istoj pjesmi.

Algoritam za određivanje sličnosti je tu, u funkciji utils.getSongSimilarity().

Obrada pesme, za kasniji prijem, može se priložiti i preko tagova (APIC). Uslužni programi imaju sve potrebne metode za primanje i obradu oznaka.

Primjer rada sa pohranom putem klijenta možete pronaći u readme.

Svi gornji slojevi su samostalni i mogu se koristiti zasebno kao niži slojevi za druge projekte. Na primjer, već postoji ideja da se napravi sloj za pohranjivanje knjiga.

museria-global je već konfigurisano git spremište za pokretanje vašeg sopstvenog čvora u globalnoj muzičkoj mreži. Kloniranje npm i && npm počnite i to je u suštini to. Možete ga detaljnije konfigurirati, pokrenuti u Dockeru itd. Detaljne informacije dostupne su na github.

Kada se spremište ažurira, morate ažurirati svoj čvor. Ako se promijeni glavni ili manji broj verzije, tada je ova radnja obavezna, inače će stari čvorovi biti ignorisani od strane mreže.

Sa pjesmama možete raditi ručno i programski. Svaki čvor pokreće server za različite zadatke. Uključujući, kada posetite podrazumevanu krajnju tačku, dobićete interfejs za rad sa muzikom. Na primjer, možete otići na korijenski čvor (veza možda neće biti relevantna kasnije, ulazni čvorovi se također mogu dobiti u telegram, ili potražite ažuriranja na Githubu).

Na ovaj način možete pretraživati ​​i otpremati pjesme u skladište. Učitavanje pjesama može se odvijati u dva načina: normalnom i moderiranom. Drugi način znači da posao obavlja osoba, a ne program. A ako označite ovo polje prilikom dodavanja, morat ćete riješiti captcha. Pjesme se mogu dodati s prioritetima -1, 0 ili 1. Prioritet 1 se može postaviti samo u moderiranom načinu. Prioriteti su potrebni kako bi skladište mogao efikasnije odlučiti šta da radi kada pokušate da zamenite postojeću pesmu novom. Što je prioritet veći, veća je vjerovatnoća da ćete prepisati postojeći fajl. Ovo pomaže u borbi protiv neželjene pošte i povećava kvalitet preuzetih pjesama.

Ako počnete da dodajete pesme u svoju memoriju, pokušajte da priložite slike (korica), iako ovo polje nije obavezno. U 99% slučajeva prve slike na Google-u na osnovu naslova pjesama su naslovnice albuma.

Ukratko kako dolazi do tehničkog dodavanja datoteka:

  • Klijent dobija adresu besplatnog čvora, koji će neko vreme postati koordinator.
  • Pokreće se funkcija dodavanja pjesme (od strane osobe ili koda) i postavlja se zahtjev za dodavanje koordinatora krajnjoj tački.
  • Koordinator izračunava koliko duplikata treba pohraniti (podesivi parametar).
  • Traže se najpogodniji čvorovi za spremanje.
  • Fajl direktno ide na ove čvorove.

Kako su tehnički primljeni fajlovi:

  • Klijent dobija adresu besplatnog čvora, koji će neko vreme postati koordinator.
  • Pokreće se funkcija prijema pjesme (od strane osobe ili koda) i postavlja se zahtjev za prijem na krajnjoj tački koordinatora.
  • Koordinator provjerava prisutnost veze u kešu. Ako postoji i radi, odmah se vraća klijentu, inače se čvorovi prozivaju za dostupnost.
  • Datoteka se prima sa veze, ako je pronađena.

Alternative za muzičke kreatore

Oduvijek me zanimalo kako se objektivno može ocijeniti vrijednost mnogih kreativnih djela? Zašto, na primjer, osoba nudi svoj muzički album za 10 dolara? Ili za 20 ili 100 dolara. Gdje je algoritam? Kada je, na primjer, riječ o nekom fizičkom proizvodu, ili čak o mnogim vrstama usluga, onda možemo barem izračunati cijenu i poći od toga.

U redu, recimo da se kladimo 10$. Da li je ovo veoma efikasno? Recimo da sam negdje preslušao album ili pjesmu odatle i odlučio da se zahvalim. Ali prema mojim osjećajima i vlastitim mogućnostima, 3 dolara je moj plafon. Pa šta da radimo? Najvjerovatnije jednostavno neću ništa učiniti, kao većina ljudi.

Određivanjem neke vrste fiksne cijene za kreativni rad jednostavno se ograničavate, sprječavajući veći broj ljudi da vam pošalje manje novca, što ukupno može biti impresivnije od onih koji će kupovati po cijeni koju vi odredite. Čini mi se da je kreativnost upravo oblast u kojoj bi donacije trebalo da prevladaju. Da biste to uradili potrebno vam je:

  • Naučite ljude da zahvaljuju na ovaj način. Sami kreatori moraju jasno pokazati da bi željeli primati donacije, svuda dodati linkove na različite načine plaćanja itd.
  • Potrebno je više mehanizama za pojednostavljenje i jačanje ovih procesa. Na primjer, napravite neku vrstu globalne web stranice na kojoj možete donirati za kreativnost koristeći linkove za autorska prava.

    Recimo da je link otprilike ovako:

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

    Ako to suzimo na muzičare, onda:

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

    Izvođač mora potvrditi svoj nadimak i priložiti ga.

    Dodajemo funkciju za generiranje takvog linka klijentu museria, a svi projekti koji koriste spremište mogu postaviti gumbe za donacije sa ovim linkovima pored pjesama na svojim web stranicama/aplikacijama. Korisnici imaju priliku da doniraju vrlo brzo i jednostavno. Naravno, ovaj pristup se može koristiti u bilo kojem projektu i kategoriji kreativnosti, ne samo kroz skladištenje.

Zašto vam je tačno potreban prostor za skladištenje muzike i kako možete učestvovati u njemu?

  • Ako radite na projektu koji se odnosi na muziku, ili planirate da ga kreirate, onda je sve za to bilo namijenjeno. Možete koristiti museria za pohranjivanje i preuzimanje pjesama, povećavajući protok pjesama na mreži. Ako u isto vrijeme imate mogućnost da podignete i držite barem jedan vlastiti čvor, onda će to biti najbolji doprinos razvoju mreže.
  • Možda ste spremni preuzeti neku drugu ulogu: pomoći oko koda, ili ispuniti i moderirati bazu podataka, distribuirati informacije o projektu svojim prijateljima itd.
  • Možda vam se svidjela ideja i spremni ste financijski pomoći da sve to zaživi i razvije. Što više čvorova, više pjesama.
  • Ili jednostavno trebate pronaći i preuzeti pjesmu u nekom trenutku. To možete učiniti vrlo jednostavno, na primjer, kroz telegram bot.

Projekat je sada u samoj početnoj fazi. Pokrenuta je probna mreža, čvorovi se mogu često ponovo pokretati, zahtijevati ažuriranja itd. Ako nema kritičnih problema tokom perioda evaluacije, ova ista mreža se transformiše u glavnu.

Možete pogledati informacije o čvoru izvana: broj pjesama, slobodan prostor, itd., koristeći link kao što je http://node-address/status ili http://node-address/status?pretty

Moji kontakti:

izvor: www.habr.com

Dodajte komentar