Museria – decentralizuota muzikos saugykla

Museria – decentralizuota muzikos saugykla

Vieną dieną nusprendžiau parašyti aplikaciją, kad išsirinkčiau sau muziką ir pasiklausyčiau jos namuose/gatvėje/treniruotėse ir t.t. Ir taip, kad visa tai veiktų sraute, su minimaliu mano dalyvavimu. Aš sugalvojau architektūrą, nubraižiau prototipą ir galiausiai susidūriau su viena „maža problema“.

Ir neaišku, kur gauti pačių dainų failus. Iki to laiko „VKontakte“ jau buvo uždaręs API, dideliuose muzikos portaluose viskas taip pat buvo nutildyta, net dainos buvo išdalintos dalimis, kad nebūtų išanalintos. Liko tik kai kurios atskiros skraidančios svetainės su daugybe reklamos ir visokių šiukšlių, visokios abejotinos grobių programos ir kiti „nešvarūs“ variantai. Apskritai, ne vienas tikrai geras sprendimas. Žinoma, galite nusipirkti „Yandex“ muzikos ar pan. prenumeratą. Bet vėlgi, niekur nėra atviros viešosios API ir jūs neturite programinės prieigos prie muzikos. Kelios didelės įmonės iš esmės apribojo kitų prieigą prie muzikos. Kodėl išvis taip atsitiko? Pasigilinus paaiškėjo, kad pagrindinė problema – autorių teisės. Dabartinis prenumeratos sprendimas tinka daugeliui komercinės muzikos autorių ir tų pačių įmonių. Tuo pačiu į bendrą sąrašą patenka ir nekomercinė bei pusiau komercinė muzika. Arba moki už viską, arba išvis nieko neklausai.

Ir aš pradėjau galvoti, ką su visu tuo daryti. Kaip galime organizuoti nemokamą muzikos platinimą? Ką daryčiau, jei pati kurčiau muziką ir norėčiau iš to užsidirbti? Ar man patiktų, jei mano dainos būtų piratinės? Koks vis dėlto yra alternatyvus sprendimas?

Todėl yra dvi pagrindinės problemos, kurias reikia išspręsti:

  • Nemokamo muzikos platinimo organizavimas, naudojant daugeliui žmonių patogius metodus, įskaitant programinę įrangą.
  • Muzikos kūrėjams siūlomos alternatyvos užsidirbti pinigų

Pasaulinė decentralizuota muzikos saugykla

Iš pradžių bandžiau ieškoti esamų sprendimų ir pagal tai viską kurti. Po kiek laiko paieškų pirmasis man patiko ipfs. Pradėjau įgyvendinti savo idėją, bet po kurio laiko atradau keletą svarbių šio sprendimo problemų:

  • Ipfs – saugykla viskam ir visiems. Yra vaizdų, muzikos, vaizdo įrašų ir visko, ko norite. Apskritai tokia didelė planetinė „šiukšliadėžė“. Todėl paleidę mazgą iškart gaunate didžiulę apkrovą. Automobilis tiesiog raitosi iš skausmo.
  • Kažkoks nebaigtas „šiukšlių“ surinkimo mechanizmas. Nežinau, kaip yra dabar, bet tuo momentu, jei konfigūroje parašei, kad nori apriboti saugyklą iki dešimties gigabaitų duomenų, tai nieko nereiškė. Saugykla išaugo, nepaisant daugelio konfigūracijos parametrų. Dėl to reikėjo turėti didžiulį standžiojo disko rezervą, kol ipfs sugalvojo kaip iš naujo nustatyti nereikalingą.
  • Naudojimosi biblioteka metu (nežinau, kaip yra dabar) klientas neturėjo skirtojo laiko. Išsiunčiate prašymą gauti failą, o jei jo nėra, tada tiesiog pakabinate. Žinoma, žmonės sugalvojo įvairiausių būdų, kurie iš dalies išsprendė problemą, tačiau tai buvo ramentai. Šie dalykai turėtų išeiti iš dėžutės.

Vis dar buvo daug smulkių problemų, o įspūdis buvo aiškus: to negalima panaudoti projektui. Toliau ieškojau saugyklos, tyrinėjau įvairius variantus, bet nieko tinkamo neradau.

Galiausiai nusprendžiau, kad verta pabandyti pačiam parašyti decentralizuotą saugyklą. Net jei ji neapsimetinėja tarpplanetine, ji išspręs konkrečią problemą.

Ir taip išėjo tepamas, saugykla, metastokulas, muzika, museria-global.

tepamas - tai pagrindinis, žemiausias sluoksnis, leidžiantis sujungti mazgus į tinklą. Jame yra algoritmas, kurį iki šiol įgyvendinau iš dalies, remdamasis maždaug 10000 XNUMX serverių. Pilną algoritmo versiją įgyvendinti daug sunkiau ir prireiktų kelių papildomų mėnesių (gal ir daugiau).

Šiame straipsnyje plačiau neaprašysiu tepamo; geriau kada nors parašyti atskirą. Čia tik atkreipsiu dėmesį į kai kurias funkcijas:

  • Veikia per http/https.
  • Konkrečiai užduočiai galite sukurti atskirą tinklą, kuris žymiai sumažins kiekvieno atskiro projekto apkrovą nei tuo atveju, jei jie visi būtų tame pačiame tinkle.
  • Iš pradžių buvo apgalvotas mechanizmas su skirtu laiku ir kitomis smulkmenomis. Ir tai tinka visiems metodams tiek kliente, tiek mazge. Galite lanksčiai tvarkyti nustatymus savo programoje.
  • Biblioteka parašyta nodejs. Stacko našumo problemas kompensuoja jos decentralizuotas pobūdis. Apkrovą galima „išskirstyti“ padidinus mazgų skaičių. Savo ruožtu yra daug privalumų: didžiulė bendruomenė, paprastumas ir naudojimo paprastumas, izomorfinis klientas, jokių išorinių priklausomybių ir pan.

saugykla yra sluoksnis, paveldėtas iš plintamojo, leidžiantis saugoti failus tinkle. Kiekvienas failas turi savo turinio maišą, kurį vėliau galima naudoti norint jį gauti. Failai neskirstomi į blokus, o išsaugomi visiškai.

metastokulas - sluoksnis, paveldėtas iš platinamojo, leidžiantis tinkle saugoti duomenis, bet ne failus. Sąsaja yra panaši į Nosql duomenų bazę. Pavyzdžiui, galite pridėti failą prie saugyklos, gauti jo maišą ir įrašyti jį į metastocle su nuoroda į ką nors.

muzika - paveldima iš storakulo ir metastokulo. Šis sluoksnis yra tiesiogiai atsakingas už muzikos saugojimą. Saugykla veikia tik su mp3 failais ir ID3 žymomis.

Kaip dainos „raktas“, formoje naudojamas visas jos pavadinimas Atlikėjas (TPE1) – pavadinimas (TIT2). Pavyzdžiui:

  • Brimstone – našta
  • „Hi-rez“ – „Lost My Way“ (feat. Emilio Rojas, Dani Devinci)

Galite sužinoti kuo išsamiau, kaip formuojami dainų pavadinimai. čia. Reikia žiūrėti į funkciją utils.beautifySongTitle().

Atitikčių procentas, nurodytas mazgo nustatymuose, laikomas atitikimu. Pavyzdžiui, 0.85 reikšmė reiškia, kad jei klavišų palyginimo funkcija (dainų pavadinimai) nustatė didesnį nei 85 % panašumą, tai yra ta pati daina.

Panašumo nustatymo algoritmas yra funkcijoje utils.getSongSimilarity().

Dainos viršelį, kad vėliau gautumėte, taip pat galima pritvirtinti per žymes (APIC). Komunalinės paslaugos turi visus būtinus žymų gavimo ir apdorojimo būdus.

Darbo su saugykla per klientą pavyzdį galite rasti Readme.

Visi aukščiau išvardyti sluoksniai yra savarankiški ir gali būti naudojami atskirai kaip apatiniai sluoksniai kitiems projektams. Pavyzdžiui, jau yra mintis padaryti sluoksnį knygoms laikyti.

museria-global yra jau sukonfigūruota „git“ saugykla, skirta paleisti savo mazgą pasauliniame muzikos tinkle. Klonavimas npm i && npm pradėti ir iš esmės viskas. Galite jį konfigūruoti išsamiau, paleisti „Docker“ ir pan. Išsamią informaciją rasite adresu github.

Kai saugykla atnaujinama, turite atnaujinti mazgą. Jei pasikeičia pagrindinės ar mažesnės versijos numeris, šis veiksmas yra privalomas, kitaip tinklas nepaisys senų mazgų.

Galite dirbti su dainomis rankiniu būdu ir programiškai. Kiekvienas mazgas valdo serverį skirtingoms užduotims atlikti. Įskaitant, apsilankę numatytame taške, gausite sąsają, skirtą dirbti su muzika. Pavyzdžiui, galite eiti į šaknies mazgas (nuoroda vėliau gali būti neaktuali, įvesties mazgus taip pat galima gauti telegrama, arba ieškokite atnaujinimų Github).

Tokiu būdu galite ieškoti ir įkelti dainas į saugyklą. Dainų įkėlimas gali vykti dviem režimais: įprastu ir moderu. Antrasis režimas reiškia, kad darbą atlieka žmogus, o ne programa. Ir jei pridėdami pažymėsite šį laukelį, turėsite išspręsti captcha. Dainos gali būti pridėtos su prioritetais -1, 0 arba 1. 1 prioritetą galima nustatyti tik moderuojamu režimu. Prioritetai reikalingi, kad saugykla galėtų efektyviau nuspręsti, ką daryti, kai bandote pakeisti esamą dainą nauja. Kuo didesnis prioritetas, tuo didesnė tikimybė, kad perrašysite esamą failą. Tai padeda kovoti su šlamštu ir pagerina atsisiųstų dainų kokybę.

Jei pradėsite pridėti dainų į savo saugyklą, pabandykite pridėti paveikslėlių (viršelio), nors šis laukas nėra būtinas. 99 % atvejų pirmieji „Google“ vaizdai pagal dainų pavadinimus yra albumų viršeliai.

Trumpai tariant, kaip techniškai pridedami failai:

  • Klientas gauna nemokamo mazgo adresą, kuris kurį laiką taps koordinatoriumi.
  • Įjungiama dainos pridėjimo funkcija (asmuo arba kodas), ir pateikiamas prašymas pridėti koordinatorių prie galutinio taško.
  • Koordinatorius apskaičiuoja, kiek dublikatų turi būti saugoma (konfigūruojamas parametras).
  • Ieškoma tinkamiausių mazgų išsaugojimui.
  • Failas tiesiogiai patenka į šiuos mazgus.

Kaip techniškai priimami failai:

  • Klientas gauna nemokamo mazgo adresą, kuris kurį laiką taps koordinatoriumi.
  • Įjungiama dainos gavimo (asmens ar kodo) funkcija, o koordinatoriaus galutiniame taške pateikiamas prašymas ją gauti.
  • Koordinatorius patikrina, ar talpykloje yra nuoroda. Jei toks yra ir jis veikia, jis iš karto grąžinamas klientui, kitaip mazgai apklausiami dėl pasiekiamumo.
  • Failas gaunamas iš nuorodos, jei ji rasta.

Alternatyvos muzikos kūrėjams

Mane visada domino klausimas, kaip galima objektyviai įvertinti daugelio kūrybinių darbų vertę? Kodėl, pavyzdžiui, žmogus siūlo savo muzikos albumą už 10 USD? Arba už 20 USD arba 100 USD. Kur yra algoritmas? Kai, pavyzdžiui, kalbame apie kokį nors fizinį produktą ar net apie daugybę paslaugų rūšių, galime bent jau apskaičiuoti kainą ir nuo to pradėti.

Gerai, tarkime, statome 10 USD. Ar tai labai veiksminga? Tarkime, klausiau kažkur albumo ar dainos iš ten ir nusprendžiau parodyti savo dėkingumą. Bet pagal mano jausmus ir savo galimybes, mano lubos yra 3 USD. Taigi ką turėtume daryti? Greičiausiai aš tiesiog nieko nedarysiu, kaip ir dauguma žmonių.

Nustatydami kažkokią fiksuotą kūrybinio darbo kainą, jūs tiesiog apribojate save, neleisdami didesniam skaičiui žmonių atsiųsti jums mažiau pinigų, kurie sumoje gali būti įspūdingesni nei tie, kurie pirks už jūsų nustatytą kainą. Man atrodo, kad būtent kūryba yra ta sritis, kurioje pirmiausia turėtų viešpatauti aukos. Norėdami tai padaryti, jums reikia:

  • Išmokykite žmones taip dėkoti. Patys kūrėjai turi aiškiai parodyti, kad norėtų gauti aukų, visur pridėti nuorodas į skirtingus mokėjimo būdus ir pan.
  • Šiems procesams supaprastinti ir sustiprinti reikia daugiau mechanizmų. Pavyzdžiui, sukurkite kokią nors pasaulinę svetainę, kurioje galėtumėte paaukoti kūrybiškumui naudodami autorių teisių nuorodas.

    Tarkime, nuoroda yra maždaug tokia:

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

    Jei susiaurinsime iki muzikantų, tada:

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

    Atlikėjas turi patikrinti savo slapyvardį ir prie jo pridėti.

    Pridedame tokios nuorodos generavimo funkciją į museria klientą, o visi saugyklą naudojantys projektai savo svetainėse/aplikacijose prie dainų gali patalpinti aukojimo mygtukus su šiomis nuorodomis. Vartotojai turi galimybę labai greitai ir paprastai paaukoti. Natūralu, kad šis metodas gali būti naudojamas bet kuriame projekte ir kūrybiškumo kategorijoje, o ne tik saugykloje.

Kodėl būtent jums reikalinga muzikos saugykla ir kaip galite joje dalyvauti?

  • Jei dirbate prie projekto, susijusio su muzika, arba planuojate jį sukurti, tai viskas buvo skirta tam. Galite naudoti „museria“ dainoms saugoti ir atkurti, taip padidindami dainų srautą internete. Jei tuo pačiu metu turite galimybę pakelti ir išlaikyti bent vieną savo mazgą, tai bus geriausias indėlis į tinklo plėtrą.
  • Galbūt esate pasirengęs imtis kitokio vaidmens: padėti su kodu arba užpildyti ir moderuoti duomenų bazę, platinti informaciją apie projektą savo draugams ir pan.
  • Galbūt jums patiko idėja ir esate pasirengęs padėti finansiškai, kad visa tai gyvuotų ir vystytųsi. Kuo daugiau mazgų, tuo daugiau dainų.
  • Arba tam tikru momentu tiesiog reikia rasti ir atsisiųsti dainą. Tai galite padaryti labai paprastai, pavyzdžiui, per telegramų botas.

Projektas šiuo metu yra pačioje pradžioje. Buvo paleistas bandomasis tinklas, mazgai gali dažnai persikrauti, reikalauti atnaujinimų ir pan. Jei vertinimo laikotarpiu nekyla kritinių problemų, tas pats tinklas transformuojamas į pagrindinį.

Informaciją apie mazgą galite peržiūrėti iš išorės: dainų skaičių, laisvą vietą ir pan., naudodamiesi tokia nuoroda kaip http://node-address/status arba http://node-address/status?pretty

Mano kontaktai:

Šaltinis: www.habr.com

Добавить комментарий