
Olin ĂŒhel pĂ€eval otsustanud kirjutada rakenduse, et valida muusikat endale ning kuulata seda kodus/vĂ€ljas/trenni jne. Ja et kĂ”ik see toimiks sujuvalt, minimaalse mu osalusega. MĂ”tlesin vĂ€lja arhitektuuri, joonistasin prototĂŒĂŒbi ja lĂ”puks kohtusin ĂŒhe "vĂ€ikse probleemiga".
Aga ei ole selge, kust vĂ”tta muusikafailid. Sel hetkel oli VKontakte juba sulgenud API, suurtes muusikaportaalides oli samuti kĂ”ik vaikne, isegi laulud anti plaate jupikaupa, et neid ei saaks kraapida. JÀÀnud olid ainult mingid eraldi pĂ€eva veebisaidid tohutu reklaami ja igasuguse jamaga, kahtlased grabber programm ja muud "rĂ€pased" variantid. KokkuvĂ”ttes ei olnud ĂŒhtegi tĂ”eliselt head lahendust. Muidugi, vĂ”iks osta tellimuse mingisse Yandex Muusika vĂ”i sarnasesse teenusesse. Kuid jĂ€lle, seal ei ole kuskil avatud avalikku API-d ja sul ei ole juurdepÀÀsu muusikale programmide kaudu. Mitmed suured ettevĂ”tted on pĂ”himĂ”tteliselt piiranud teiste juurdepÀÀsu muusikale. Kuidas see ĂŒldse juhtus? SĂŒgavamale kaevates sai selgeks, et peamine probleem on autorikaitse. Praegune lahendus tellimuste nĂ€ol rahuldab paljusid kommertsautori muusikateoseid ja neid samu ettevĂ”tteid. Samuti langeb kĂ”igi teiste mittekommertsliku ja tingimuslikult kommertsmuusika ĂŒldisesse nimekirja. Sa kas maksad kĂ”igi eest vĂ”i ei kuule ĂŒldse midagi.
Ja ma hakkasin mĂ”tlema, mida sellega teha. Kuidas korraldada muusika vabalt levitamist? Mida ma teeksin, kui ma ise teeksin muusikat ja sooviksin sellega raha teenida? Kas mulle meeldiks, kui mu laule hakata levitama salaja? Millised on ĂŒldse alternatiivsed lahendused?
LÔpuks kujunesid vÀlja kaks peamist probleemi, mida tuleb lahendada:
- Muusika vabalt levitamise korraldamine enamiku inimeste jaoks mugavates vormides, sealhulgas programmiliselt.
- Alternatiivide pakkumine muusika loojatele raha teenimiseks
Globaalselt detsentraliseeritud muusikalaos
Alguses proovisin leida juba olemasolevaid lahendusi ja luua kÔik selle alusel. PÀrast mÔningaid otsinguid jÀi silma esimene . Alustasin oma idee elluviimist, kuid mÔne aja pÀrast avastasin selle lahenduse juures mitu kriitilist probleemi:
- Ipfs â salvestus kĂ”igile ja kĂ”igest. Siit leiad nii pilte kui muusikat, videoid ja kĂ”ike muud. ĂhesĂ”naga, suur planeetaarne âprĂŒgikastâ. SeetĂ”ttu, kui sa kĂ€ivitad oma sĂ”lme, saad koheselt tohutu koormuse. Masin lihtsalt vaevleb valust.
- Mingisugune saamatu prĂŒgi kogumise mehhanism. Ma ei tea, kuidas sellega praegu on, aga tookord, kui sa seadetes ĂŒtlesid, et tahad salvestust piirata kĂŒmne gigabaidiga, ei tĂ€hendanud see midagi. Salvestus laienes, jĂ€ttes paljud konfigureerimisparameetrid tĂ€helepanuta. LĂ”ppude lĂ”puks tuli sul olla tohutult kĂ”vakettaruumi, kuni ipfs suutis aru saada, kuidas ĂŒleliigset mahaviskamist ette vĂ”tta.
- Raamatukogu kasutamise hetkel (ma ei tea, kuidas praegu on) ei olnud kliendil rakendatud ajapiiranguid. Saatsid faili saamise pÀringu, ja kui seda ei olnud, lihtsalt rippusid. Loomulikult, inimesed töötasid vÀlja erinevaid kÔrvalteid, mis osaliselt lahendasid probleemi, kuid see oli nagu karkudega kÀimine. Sellised asjad peaksid olema vÀlja töötatud toote osana.
Lisaks oli palju vÀiksemaid probleeme ning mul jÀi selge mulje, et seda ei saa projekti jaoks kasutada. Otsisin edasi salvestuslahendusi, uurisin erinevaid vÔimalusi, kuid ei leidnud midagi sobivat.
LĂ”puks otsustasin, et prooviks ise kirjutada detsentraliseeritud salvestuse. Las see ei pretendeeri planeetidevahelisele rollile, aga lahendab kindla ĂŒlesande.
Nii saigi hakkama , , , , .
spreadable â see on pĂ”hikiht, mis vĂ”imaldab sĂ”lmi omavahel vĂ”rku ĂŒhendada. Sellel on algoritm, mille ma olen osaliselt rakendanud ligikaudu 10000 serveri jaoks. TĂ€ielik algoritmi versioon on palju keerulisem ellu viia ja nĂ”uaks veel mĂ”nda tĂ€iendavat kuud (vĂ”ib-olla isegi rohkem).
Ma ei hakka spreadable'i detailselt selle artikli raames kirjeldama, parem kirjutan sellest millalgi eraldi. Siin mainin vaid mÔningaid eripÀra:
- Töötatakse lÀbi http/https.
- VĂ”imalik on luua eraldi vĂ”rk konkreetse ĂŒlesande jaoks, mis vĂ€hendab oluliselt koormust iga eraldi projekti peal, vĂ”rreldes olukorraga, kui kĂ”ik oleksid ĂŒhes vĂ”rgus.
- Algusest peale oli mÔeldud mehhanism ajapiirangutega ja teiste vÀikeste detailidega. Ja see töötab kÔigi meetodite jaoks nii kliendil kui ka sÔlmel. Sa saad paindlikult hallata parameetreid oma rakendusest.
- Raamatukogu on kirjutatud nodejs-is. Stekki jÔudlusprobleemide kompenseerimine toimub tÀnu detsentraliseeritud iseloomule. Koormust saab "laiali jagada" sÔlmede arvu suurendamisega. Vastutasuks on palju eeliseid: tohutu kogukond, lihtsus ja mugavustunne, isomorfne klient, vÀliste sÔltuvuste puudumine jne.
storacle â see on kihistumine, mis pĂ€rineb spreadable-ilt ja vĂ”imaldab salvestada vĂ”rku faile. Igal failil on oma hash sisu jĂ€rgi, mille kaudu saab selle hiljem kĂ€tte. Faile ei jaotata blokiks, vaid need salvestatakse tervikuna.
metastocle â kihistumine, mis pĂ€rineb spreadable-ilt ja vĂ”imaldab vĂ”rgus andmete salvestamist, kuid mitte faile. Liides on sarnane nosql andmebaasidega. Saate nĂ€iteks lisada faili storacleâi, saada selle hash ja salvestada metastocleâi seosega millelegi.
museria â pĂ€rineb storacle-ilt ja metastocle-ilt. See kiht vastutab otseselt muusika salvestamise eest. Ladustamine töötab ainult mp3 failidega ja id3 siltidega.
Laulu "vĂ”tmena" kasutatakse selle tĂ€isnime kujul Esitaja (TPE1) â Nimi (TIT2). NĂ€iteks:
- Brimstone â The Burden
- Hi-rez â Lost My Way (feat. Emilio Rojas, Dani Devinci)
Maksimaalselt ĂŒksikasjalikult Ă”ppida, kuidas laulu nimesid formuleeritakse, saab . Tuleb vaadata funktsiooni utils.beautifySongTitle().
VĂ”tmete (laulunimede) sarnasuseks loetakse sĂ”lme seadistustes mÀÀratud protsent. NĂ€iteks vÀÀrtus 0.85 tĂ€hendab, et kui vĂ”tmete vĂ”rdlemise funktsioon on leidnud sarnase ĂŒle 85%, siis on see sama laul.
Sarnasuse mÀÀramise algoritm on seal, funktsiooni sees utils.getSongSimilarity().
Laulu kaanepilt, edasise saamiseks kinnitatakse samuti siltide kaudu (APIC). Utiliidid (utils) sisaldavad kÔiki vajalikke meetodeid siltide saamiseks ja töötlemiseks.
NÀidet töö tegemisest salvestustega kliendi kaudu saab vaadata .
KĂ”ik ĂŒlaltoodud kihid on iseseisvad ja neid saab kasutada eraldi kui madalamaid kihte teiste projektide jaoks. NĂ€iteks on juba praegu plaanis luua kiht raamatute salvestamiseks.
museria-global â see on juba konfigureeritud git-repo oma sĂ”lme kĂ€ivitamiseks globaalsetes muusikasĂŒsteemides. Kloonige, npm i && npm start ja pĂ”himĂ”tteliselt ongi kĂ”ik. Saab seadistada detailsemalt, kĂ€ivitada dockeris jne. Ăksikasjalik teave on olemas .
Kui repotite uuendatakse, tuleb samuti uuendada oma sÔlme. Kui versiooni peamine vÔi vÀike number muutub, on see tegevus kohustuslik, vastasel juhul vanad sÔlmed ignoreeritakse vÔrgu poolt.
Lauludega saab töötada kĂ€sitsi ja programmeeritult. Iga sĂ”lm kĂ€ivitab teenuse erinevate ĂŒlesannete jaoks. Sealhulgas, kui kĂŒlastate vaike lĂ”pp-punkti, saate liidese muusika töötlemiseks. NĂ€iteks saate minna (link vĂ”ib hiljem muutuda ebaaktiivseks, sisenemis-sĂ”lmed on saadaval ka , vĂ”i saate jĂ€lgida uuendusi GitHubis).
Nii saate otsida ja alla laadida laule andmebaasi. Laulude ĂŒleslaadimine vĂ”ib toimuda kahes reĆŸiimis: tavaline ja modereeritud. Teine reĆŸiim tĂ€hendab, et tööd juhib inimene, mitte programm. Ja kui mĂ€rkite selle ruudu lisamise ajal, peate lahendama captcha. Laulesid saab lisada prioriteetidega -1, 0 vĂ”i 1. Prioriteeti 1 saab seada ainult modereeritud reĆŸiimis. Prioriteedid on vajalikud, et andmebaas saaks efektiivsemalt otsustada, mida teha, kui proovite asendada juba olemasolevat laulu uuega. Mida kĂ”rgem on prioriteet, seda suuremad on tĂ”enĂ€osused, et asendate olemasoleva faili. See aitab vĂ”idelda rĂ€mpsposti ja tĂ”stab ĂŒleslaaditud laulude kvaliteeti.
Kui hakkate laule andmebaasi lisama, pĂŒĂŒdke lisada ka pilte (cover), kuigi see vĂ€li ei ole kohustuslik. 99% juhtudel on esimeste piltide hulgas Google'is laulunimetuste jĂ€rgi albumikaaned.
Kuidas toimub failide lisamine tehniliselt, hoides kaks sÔna:
- Kliendile antakse aadress vaba sÔlme, mis mÔneks ajaks muutub koordinaatoriks.
- KÀivitub laulu lisamise funktsioon (inimese vÔi koodi poolt), toimub pÀring lisamise kohta koordinaatori lÔpp-punktile.
- Koordinaator arvutab, kui palju koopiaid sÀilitada (konfigureeritav parameeter).
- Otsitakse sobivamaid sÔlmi salvestamiseks.
- Fail saadetakse otse nendele sÔlmedele.
Kuidas toimub failide hankimine tehniliselt:
- Kliendile antakse aadress vaba sÔlme, mis mÔneks ajaks muutub koordinaatoriks.
- KÀivitub laulu hankimise funktsioon (inimese vÔi koodi poolt), toimub pÀring hankimise kohta koordinaatori lÔpp-punktile.
- Koordinaator kontrollib, kas link on vahemĂ€lus. Kui see on olemas ja töötab, tagastatakse see koheselt kliendile, vastasel juhul kĂŒsitakse sĂ”lmedelt olemasolu kohta.
- Faili hankimiseks kasutatakse linki, kui see leitakse.
Alternatiivid muusikategijatele
Mind on alati huvitanud kĂŒsimus, kuidas saab objektiivselt hinnata paljude loominguliste teoste vÀÀrtust? Miks, nĂ€iteks, pakub inimene oma muusikaalbumit 10 dollari eest? VĂ”i 20 dollari vĂ”i 100 dollari eest. Kus on algoritm? Kui me rÀÀgime mingist fĂŒĂŒsilisest tootest vĂ”i isegi paljudest teenustest, saame vĂ€hemalt arvutada omahinna ja sellest lĂ€htuda.
Okei, oletame, et 10 dollarit on seatud. Kas see on tÔeliselt efektiivne? Oletame, et ma kuulasin albumit kuskil vÔi laulu sealt ja otsustasin tÀnada. Aga minu tunnetuse ja vÔimaluste jÀrgi on 3 dollarit minu maksimum. Kuidas siis edasi? TÔenÀoliselt ei tee ma midagi, nagu ka enamik inimesi.
Seades mingisuguse kindla hinna loomingulise töö eest, piirad sa lihtsalt ennast, ei luba suuremal arvul inimestel saata sulle vÀiksemaid summasid, mis kokku vÔivad olla suuremad, kui need, kes ostavad sinu seatud hinnaga. Minu arvates on looming just see valdkond, kus peaksid esmatÀhtsad olema annetused. Selleks on vajalik:
- Inimesi tuleb Ôpetada tÀnama just niimoodi. Loome ise peavad selgelt nÀitama, et nad soovivad saada annetusi, lisama igale poole linke erinevatele makseviisidele jne.
- Vaja on rohkem mehhanisme nende protsesside lihtsustamiseks ja tugevdamiseks. NĂ€iteks luua mingi globaalne sait, kuhu saab annetada loomingute eest autorite linkide kaudu.
Oletame, et link on umbes selline:
http://someartistsdonationsite.site/category/artist?external-infoKui kitsendada muusikutele, siis:
http://someartistsdonationsite.com/music/miyagi?song=blablaEsitajal on vaja oma hĂŒĂŒdnime verifitseerida ja sellega siduda.
Kliendi muserias lisame sarnase lingi genereerimise funktsiooni ning kÔik projektid, mis kasutavad salvestust, saavad oma saitidel/rakendustes paigutada nuppu annetuste jaoks koos nende linkidega laulude kÔrval. Kasutajad saavad vÀga kiiresti ja lihtsalt annetada. Loomulikult saab seda lÀhenemist rakendada igasugustes projektides ja loomingukategooriates, mitte ainult salvestuse kaudu.
Miks on just sina, muusika salvestus, ja kuidas selles osaleda
- Kui töötad muusikaga seotud projekti kallal vĂ”i plaanid sellist luua, siis on see kĂ”ik selleks mĂ”eldud. Sa saad kasutada museriat laulude salvestamiseks ja saamiseks, suurendades laulude voogu vĂ”rgus. Kui sul on vĂ”imalus ĂŒles seada ja hoida vĂ€hemalt ĂŒks oma node, siis on see parim panus vĂ”rgu arendamisse.
- VÔib-olla oled valmis vÔtma endale mÔne teise rolli: aitama koodi kirjutada, tÀitma ja modereerima andmebaasi, levitama teavet projekti kohta oma tuttavatele jne.
- VÔib-olla meeldib sulle idee ja oled valmis aitama rahaliselt, et see kÔik elaks ja areneks. Mida rohkem node, seda rohkem laule.
- VÔi vÔib-olla vajad sa lihtsalt mingil hetkel laulu leidmiseks ja allalaadimiseks. Seda saad teha vÀga lihtsalt, nÀiteks lÀbi .
Projekt on hetkel algstaadiumis. TestvÔrk on kÀivitatud, node vÔivad tihti taaskÀivituda, vajada pÔhikirju jne. Kui kriitilisi probleeme ei esine hindamisperioodi jooksul, muudetakse sama vÔrku pÔhivÔrguks.
Node'i vĂ€lise teabe nĂ€gemiseks: laulude arv, vaba ruum jne, saad ĂŒle vaadata lingil kujul http://node-address/status vĂ”i http://node-address/status?pretty
Minu kontaktid:
Allikas: habr.com
