
Rozhodol som sa raz napísať aplikáciu, ktorá by vyberala hudbu pre mňa a umožnila mi počúvať ju doma, vonku, na tréningoch atď. A aby to všetko fungovalo plynulo, s minimálnym zapojením z mojej strany. Vymyslel som architektúru, načrtl prototyp a nakoniec som sa stretol s jedným "malým problémom."
A nebolo jasné, odkiaľ získať samotné súbory piesní. V tomto momente už VKontakte uzavrelo API, na veľkých hudobných portáloch to bolo tiež bez nádeje, dokonca piesne sa poskytovali po častiach, aby sa predišlo parsovaniu. Zostali len nejaké jednorazové weby s množstvom reklamy a rôzne pochybné programy na ťahanie a iné "špinavé" možnosti. Skrátka, neexistovalo žiadne poriadne riešenie. Samozrejme, môžete si kúpiť predplatné na nejakú Yandex hudbu alebo podobne. Ale opäť, tam nikde nie je otvorené verejné API a nemáte prístup k hudbe programovo. Niekoľko veľkých spoločností v podstate obmedzilo ostatných v prístupe k hudbe. Prečo sa to vlastne stalo? Keď som sa hlbšie ponoril, bolo jasné, že hlavný problém spočíva v autorských právach. Súčasné riešenie v podobe predplatného vyhovuje mnohým komerčným autorom hudobných diel a týmto spoločnostiam. Pri tom nekomerčná a podmienečne komerčná hudba sa tiež dostáva na spoločný zoznam. Buď platíte za všetko, alebo nepočúvate vôbec nič.
A začal som rozmýšľať, čo s tým všetkým robiť. Ako by sa dalo organizovať voľné šírenie hudby? Čo by som robil, keby som sám vytváral hudbu a chcel na tom zarábať? Páčilo by sa mi, keby sa moje piesne začali šíriť pirátsky? Aké vlastne existujú alternatívne riešenia?
Nakoniec sa vytvorili dve hlavné problémy, ktoré je potrebné vyriešiť:
- Organizácia voľného šírenia hudby pohodlnými pre väčšinu ľudí metódami, vrátane programových.
- Návrh alternatív pre tvorcov hudby na zarábanie
Globálne decentralizované úložisko hudby
Na začiatku som sa pokúsil nájsť už existujúce riešenia a vytvoriť všetko na ich báze. Po určitom čase hľadania ma ako prvé upútalo . Začal som realizáciu svojej myšlienky, ale po určitom čase som objavil niekoľko kritických problémov v tomto riešení:
- Ipfs — úložisko pre všetko a všade. Obsahuje obrázky, hudbu, videá a všetko, čo si vieš predstaviť. V podstate je to obrovská planetárna «smetisko». Preto, keď spustíš svoj uzol, dostávaš sa okamžite pod obrovský tlak. Stroj doslova trpí.
- Akýsi nedokončený mechanizmus pre zber «odpadkov». Neviem, ako je to teraz, ale vtedy, ak si v konfigurácii nastavil, že chceš obmedziť úložisko na desať gigabajtov dát, tak to nič neznamenalo. Úložisko sa rozrastalo, ignorujúc mnohé konfiguračné parametre. Nakoniec bolo potrebné mať obrovský rezervný disk, kým ipfs zistí, ako zrušiť nepotrebné.
- V čase používania knižnice (neviem, ako je to teraz), klient nemal implementované časové obmedzenia. Pošleš požiadavku na získanie súboru, a ak ho niet, proste visíš. Samozrejme, ľudia vymysleli rôzne obchádzajúce cesty, ktoré čiastočne riešili problém, ale to boli len škaredé rýchle opravy. Takéto veci by mali byť prednastavené.
Bolo tam ešte veľa drobných problémov, celkový dojem bol vtedy jednoznačný: toto sa nedá použiť na projekt. Pokračoval som v hľadaní úložiska, skúmal rôzne možnosti, ale nič vhodné som nenašiel.
Nakoniec som sa rozhodol, že skúsim napísať decentralizované úložisko sám. Nech nie je medziplanetárne, ale bude riešiť konkrétny úkol.
Takto to dopadlo , , , , .
na organizáciu siete. Hlavné vlastnosti: — to je základná, najnižšia vrstva, ktorá umožňuje spojiť uzly do siete. Obsahuje algoritmus, ktorý som zatiaľ implementoval len čiastočne, predpokladajúc približne 10000 serverov. Plná verzia algoritmu je oveľa zložitejšia na implementáciu a vyžadovala by ešte niekoľko mesiacov (možno aj viac).
Podrobne to v článku spreadable nebudem opisovať, radšej napíšem samostatný článok niekedy. Tu len spomeniem niektoré špecifiká:
- Funguje cez http/https.
- Môžeš vytvoriť samostatnú sieť pre konkrétny úkol, čo výrazne zníži záťaž na každý samostatný projekt, ako keby boli všetky v jednej sieti.
- Pôvodne bol premyslený mechanizmus s časovými obmedzeniami a ďalšími drobnosťami. A to funguje pre všetky metódy, ako v klientovi, tak v uzle. Môžeš flexibilne spravovať parametre zo svojej aplikácie.
- Knižnica je napísaná v nodejs. Problémy s výkonom technológie sú kompenzované decentralizovanou povahou. Zaťaženie sa dá 'rozprestrieť' zvýšením počtu uzlov. Na oplátku ponúka veľa výhod: obrovská komunita, jednoduchosť a pohodlnosť práce, izomorfný klient, absence vonkajších závislostí atď.
storacle — je vrstva dedičná po spreadable, ktorá umožňuje ukladať súbory v sieti. Každý súbor má svoj hash podľa obsahu, na základe ktorého ho je možné neskôr získať. Súbory sa nedelía na bloky, ale ukladajú sa celé.
metastocle — vrstva dedičná po spreadable, ktorá umožňuje ukladať v sieti dáta, ale nie súbory. Rozhranie sa podobá na nosql databázy. Je možné, napríklad, pridať súbor do storacle, získať jeho hash a zapísať do metastocle s viazaním na niečo.
museria — dedí po storacle a metastocle. Táto vrstva priamo zodpovedá za ukladanie hudby. Úložisko pracuje iba so súbormi mp3 a id3 tagmi.
Ako 'kľúč' na pieseň sa používa jej celé názov vo forme Interpret (TPE1) — Názov (TIT2). Napríklad:
- Brimstone — The Burden
- Hi-rez — Lost My Way (feat. Emilio Rojas, Dani Devinci)
Maximálne podrobne zistiť, ako sa formujú názvy piesní, môžete . Musíte sa pozrieť na funkciu utils.beautifySongTitle().
Zhoda podľa kľúčov sa považuje za určitý percentuálny podiel stanovený v nastaveniach uzla. Napríklad, hodnota 0.85 znamená, že ak funkcia porovnávania kľúčov (názvov piesní) zistí podobnosť vyššiu ako 85%, ide o tú istú pieseň.
Algoritmus na určenie podobnosti je tiež tam, vo funkcii utils.getSongSimilarity().
Obal piesne, pre jeho neskoršie získanie, sa taktiež pripája cez tagy (APIC). V utilitách (utils) sú všetky potrebné metódy na získanie a spracovanie tagov.
Príklad práce so skladovaním cez klienta si môžete pozrieť v .
Všetky vyššie uvedené vrstvy sú samostatné a môžu byť použité samostatne ako nižšie vrstvy pre iné projekty. Napríklad, už je teraz myšlienka vytvoriť vrstvu pre uchovávanie kníh.
museria-global — je už nakonfigurované git-repozitár na spustenie vlastného uzla v globálnej sieti hudby. Klonujete, npm i && npm start a v podstate všetko. Môžete to nastaviť podrobnejšie, spustiť v dockeri atď. Podrobné informácie sú na .
Keď sa repozitár aktualizuje, je potrebné aktualizovať aj svoj uzol. Ak sa zmení hlavnú alebo vedľajšiu verziu, táto akcia je povinná, inak budú staré uzly sieťou ignorované.
Pracovať so skladbami je možné manuálne aj programovo. Každý uzol spúšťa server na rôzne úlohy. Medziiným, pri návšteve predvoleného koncového bodu, dostanete rozhranie na prácu s hudbou. Napríklad, môžete ísť na (odkaz môže byť neskôr neaktuálny, vstupné uzly je možné získať aj v , alebo si pozrieť aktualizácie na GitHube).
Tak môžete vyhľadávať a nahrávať skladby do úložiska. Nahrávanie skladieb môže prebiehať v dvoch režimoch: bežnom a moderovanom. Druhý režim znamená, že prácu vedie človek, nie program. Ak zaškrtnete túto možnosť pri pridávaní, bude potrebné vyriešiť captcha. Skladby je možné pridávať s prioritami -1, 0 alebo 1. Prioritu 1 je možné stanoviť iba v moderovanom režime. Priority sú potrebné na to, aby úložisko efektívnejšie rozhodovalo, čo robiť, keď sa snažíte nahradiť už existujúcu skladbu novou. Čím väčšia priorita, tým väčšia šanca, že prepíšete existujúci súbor. To pomáha bojovať proti spamu a zvyšuje kvalitu nahrávaných skladieb.
Ak začnete pridávať skladby do úložiska, snažte sa pripojiť aj obrázky (cover), aj keď toto pole nie je povinné. V 99% prípadov sú prvé obrázky v Google podľa názvov skladieb obaly albumov.
Ako technicky prebieha pridanie súborov, v skratke:
- Klient získa adresu voľného uzla, ktorý na určitý čas sa stane koordinátorom.
- Spustí sa funkcia pridania skladby (človekom alebo kódom), uskutoční sa požiadavka na pridanie na koncový bod koordinátora.
- Koordinátor vypočíta, koľko duplicitných kópií je potrebné uchovať (konfigurovateľný parameter).
- Hľadajú sa najvhodnejšie uzly na uloženie.
- Súbor sa priamo posiela na tieto uzly.
Ako technicky prebieha získavanie súborov:
- Klient získa adresu voľného uzla, ktorý na určitý čas sa stane koordinátorom.
- Spustí sa funkcia získania skladby (človekom alebo kódom), uskutoční sa požiadavka na získanie na koncový bod koordinátora.
- Koordinátor kontroluje prítomnosť odkazu v cache. Ak taký existuje a je funkčný, ihneď sa vráti klientovi, inak sa preveria uzly na prítomnosť.
- Prebieha získavanie súboru podľa odkazu, ak bol nájdený.
Alternatívy pre hudobných tvorcov
Vždy ma zaujímalo, ako možno objektívne ohodnotiť cenu mnohých kreatívnych diel. Prečo napríklad niekto ponúka svoj hudobný album za 10 $? Alebo za 20 $, či dokonca za 100 $. Kde je ten algoritmus? Keď hovoríme o fyzickom produkte, alebo aj mnohých druhoch služieb, môžeme aspoň vypočítať výrobné náklady a vychádzať z tohto.
Dobre, povedzme, že sme nastavili 10 $. Je to naozaj efektívne? Povedzme, že som si niekde vypočul album alebo pieseň z neho a rozhodol sa poďakovať. Ale podľa mojich pocitov a vlastných možností je 3 $ mojím stropom. A čo teraz? Pravdepodobne neurobím nič, tak ako väčšina ľudí.
Nastavením nejakej pevnej ceny za kreatívnu prácu sa jednoducho obmedzuješ, nedávaš väčšiemu počtu ľudí možnosť poslať ti menšie peniaze, ktoré v súčte môžu byť väčšie než to, čo kúpi niekoľko ľudí za cenu, ktorú si stanovil. Myslím, že kreativita je presne tá oblasť, kde by mali dominovať dary. Na to je potrebné:
- Naučiť ľudí ďakovať takýmto spôsobom. Tvorcovia by to mali jasne ukázať, že by chceli prijímať dary, pridávať odkazy na rôzne spôsoby platby a pod.
- Potrebujeme viac mechanizmov na zjednodušenie a posilnenie týchto procesov. Napríklad vytvoriť akúsi globálnu stránku, kde sa dajú podporiť kreatívne diela prostredníctvom autorských odkazov.
Povedzme, že odkaz je približne takýto:
http://someartistsdonationsite.site/category/artist?external-infoAk sa zameriavame na hudobníkov, takto:
http://someartistsdonationsite.com/music/miyagi?song=blablaInterpret musí overiť svoje prezývky a pripojiť sa k nim.
V klientovi museria pridáme funkciu generovania podobného odkazu, a všetky projekty využívajúce úložisko môžu umiestniť na svoje weby/aplikácie tlačidlá na dary s týmito odkazmi vedľa piesní. Používatelia majú veľmi rýchlo a jednoducho možnosť poslať dar.
Prečo je pre teba hudobné úložisko dôležité a ako sa na tom môžeš zúčastniť?
- Ak pracuješ na projekte súvisiacom s hudbou, alebo plánuješ taký vytvoriť, potom práve pre toto to všetko vzniklo. Môžeš využiť museria na ukladanie a získavanie piesní, čím zvýšiš prítok piesní v sieti. Ak máš zároveň možnosť spustiť a udržať aspoň jeden vlastný uzol, bude to najlepšia investícia do rozvoja siete.
- Možno si pripravený prevziať inú rolu: pomôcť s kódom, alebo vyplniť a moderovať databázu, šíriť informácie o projekte svojim známym atď.
- Možno sa ti táto myšlienka páči a si ochotný pomôcť finančne, aby to všetko žilo a rozvíjalo sa. Čím viac uzlov, tým viac piesní.
- Alebo možno potrebuješ len z času na čas nájsť a stiahnuť pieseň. Môžeš to urobiť veľmi jednoducho, napríklad cez .
Projekt je teraz v samotnej počiatočnej fáze. Testovacia sieť je spustená, uzly sa môžu často reštartovať, vyžadovať aktualizácie a podobne. Ak počas odhadovaného obdobia nevzniknú kritické problémy, táto sieť sa transformuje na hlavnú.
Informácie o uzle zvonka: počet piesní, voľné miesto atď. si môžeš pozrieť cez odkaz vo forme http://node-address/status alebo http://node-address/status?pretty
Moje kontakty:
Zdroj: habr.com
