
Një herë, vendosa të krijoj një aplikacion për të përzgjedhur muzikën për vete dhe për ta dëgjuar në shtëpi/faqe ose gjatë stërvitjeve, etj. Dhe që gjithçka të funksiononte në mënyrë të vazhdueshme, me ndërhyrjen time minimale. Krijova arkitekturën, skicova një prototip dhe në fund u përballa me një "problem të vogël".
Por nuk ishte e qartë se nga t'i merrja vetë skedarët e këngëve. Në këtë moment, VK kishte mbyllur API-në, në portalet e mëdha muzikore gjithashtu nuk kishte asgjë, madje edhe këngët jepeshin në pjesë, për të mos treguar. Kishin mbetur vetëm disa faqe të veçanta me shumë reklama dhe plehra, gjithashtu programe të dyshimta dhe opsione "të ndotura". Në përgjithësi, asnjë zgjidhje funksionale e mirë. Sigurisht, mund të blej një abonim për ndonjë muzikë si Yandex, ose diçka tjetër. Por prapë, atje nuk kishte asnjë API publik të hapur dhe nuk kishe qasje në muzikë programatikisht. Disa kompani të mëdha, në thelb, kufizuan qasjen e tjerëve në muzikë. Pse ndodhi kështu? Duke kërkuar më thellë, është e qartë se problemi kryesor është në të drejtat e autorit. Zgjidhja aktuale në formën e abonimeve kënaq shumë autorët komercialë të produksioneve muzikore dhe këto kompani. Gjithashtu, muzika jo-komerciale dhe ndonjëherë komerciale gjithashtu përfshihen në listën e përgjithshme. Ti ose paguan për gjithçka ose nuk dëgjon fare.
Dhe fillova tĂ« mendoj se çfarĂ« tĂ« bĂ«j me tĂ« gjitha kĂ«to. Si mund tĂ« organizoj shpĂ«rndarjen e lirĂ« tĂ« muzikĂ«s? ĂfarĂ« do bĂ«ja, nĂ«se do tĂ« merresha me krijimin e muzikĂ«s dhe do tĂ« doja tĂ« fitonja nga kjo? A do mĂ« pĂ«lqente nĂ«se kĂ«ngĂ«t e mia do tĂ« shpĂ«rndaheshin nĂ« mĂ«nyrĂ« piratike? ĂfarĂ« zgjidhje alternative ekziston?
Në fund, u formuan dy probleme kryesore që duhej të zgjidheshin:
- Organizimi i shpërndarjes së lirë të muzikës me metoda të përshtatshme për shumicën e njerëzve, përfshirë metodologjitë programatike.
- Ofertë alternative për krijuesit e muzikës për të fituar
Një depo globale dhe të decentralizuar muzikore
Fillimisht, përpiqesha të gjeja zgjidhje ekzistuese dhe të krijoja gjithçka mbi këtë bazë. Pas pak kohësh kërkimesh, më ra në sy . Fillova realizimin e ideve të mia, por pas disa kohësh, zbulova disa probleme kritike në këtë zgjidhje:
- Ipfs â njĂ« depo pĂ«r gjithçka. KĂ«tu ka imazhe, muzikĂ«, video dhe gjithçka tjetĂ«r. TĂ« themi se Ă«shtĂ« njĂ« «depozitë» planetare e madhe. Prandaj, kur fillon nodin tĂ«nd, menjĂ«herĂ« ndjen njĂ«ngarkesĂ« tĂ« madhe. Pjesa e makinĂ«s thjesht nxjerr zĂ« nga dhimbja.
- Një mekanizëm ndërtimi «mbeturinash» i papërfunduar. Nuk e di si është tani, por në atë moment, nëse e vendosje në konfigurim se doje ta kufizoje hapësirën në dhjetë gigabajt të dhënash, kjo nuk do të thoshte asgjë. Hapesira shtrihej, duke injoruar shumë parametra të konfigurimit. Në fund, duhej të kishe një rezervë të madhe disku, derisa ipfs të kuptonte si të hiqte gjërat e panevojshme.
- Në momentin e përdorimit të bibliotekës (nuk e di si është tani), klienti nuk kishte implementuar timeout-et. Dergoje një kërkesë për të marrë një skedar, dhe nëse nuk ka, thjesht vjesh. Sigurisht, njerëzit shpikën disa rrugë alternative që pjesërisht zgjidhnin problemin, por këto ishin zgjidhje të përkohshme. Këto gjëra duhet të ishin gati nga kutia.
Ishte dhe shumë probleme të vogla, përshtypja që krijova atëherë ishte e qartë: kjo nuk mund të përdoret për një projekt. Unë vazhdova kërkimin për një depo, studioja variante të ndryshme, por nuk gjeta asgjë të përshtatshme.
Në fund, vendosa se ia vlen të provoja të shkruaja një depo decentralizuar vetë. Le të mos pretendojë të jetë ndërplanetare, por do të zgjidhë detyrën e caktuar.
Kështu e arritën , , , , .
spreadable â kjo Ă«shtĂ« shtresa kryesore, mĂ« e ulĂ«t, qĂ« lejon bashkimin e nodeve nĂ« rrjet. NĂ« tĂ« Ă«shtĂ« i inkorporuar njĂ« algoritĂ«m, tĂ« cilin e kam implementuar pjesĂ«risht deri nĂ« 10000 serverĂ«. Versioni i plotĂ« i algoritmit Ă«shtĂ« shumĂ« mĂ« i ndĂ«rlikuar nĂ« zbatim dhe do tĂ« kĂ«rkonte disa muaj shtesĂ« (ndoshta edhe mĂ« shumĂ«).
Nuk do të hyj në detaje të spreadable në këtë artikull, më mirë do të shkruaj një të veçantë ndonjëherë. Këtu do të theksoj disa veçori:
- Punon përmes http/https.
- Mund të krijosh një rrjet të veçantë për një detyrë specifike, gjë që ndjeshëm do të ulej ngarkesa në çdo projekt individual, përveç nëse të gjitha do të ishin në një rrjet.
- Fillimisht është menduar mekanizmi me timeout-et dhe gjëra të tjera të vogla. Dhe kjo funksionon për të gjitha metodat dhe në klient dhe në nod. Mund të menaxhosh parametrat fleksibël nga aplikacioni yt.
- Biblioteka është shkruar në nodejs. Problemet me performancën e grumbullit kompensohen nga natyra e decentralizuar. Ngarkesa mund të "shpërndahet" duke rritur numrin e nyjeve. Në vend të kësaj, ka shumë përfitime: një komunitet të madh, thjeshtësi dhe lehtësi në punë, klient izomorfik, mungesë e varësive të jashtme, etj.
storacle â Ă«shtĂ« njĂ« sloj, qĂ« trashĂ«gohet nga spreadable, i cili lejon ruajtjen e skedarĂ«ve nĂ« rrjet. Ădo skedar ka njĂ« hash sipas pĂ«rmbajtjes, me tĂ« cilin mund tĂ« merret mĂ« vonĂ«. SkedarĂ«t nuk ndahen nĂ« blloqe, por ruhen tĂ«rĂ«sisht.
metastocle â sloj qĂ« trashĂ«gohet nga spreadable, i cili lejon ruajtjen e tĂ« dhĂ«nave nĂ« rrjet, por jo tĂ« skedarĂ«ve. NdĂ«rfaqja Ă«shtĂ« e ngjashme me databazat nosql. Mund, pĂ«r shembull, tĂ« shtosh njĂ« skedar nĂ« storacle, tĂ« marrĂ«sh hash-in e tij dhe ta regjistrosh nĂ« metastocle lidhur me diçka.
museria â trashĂ«gohet nga storacle dhe metastocle. Ky sloj Ă«shtĂ« pĂ«rgjegjĂ«s drejtpĂ«rdrejt pĂ«r ruajtjen e muzikĂ«s. Depoja punon vetĂ«m me skedarĂ« mp3 dhe etiketat id3.
Si "çelĂ«si" pĂ«r kĂ«ngĂ«n pĂ«rdoret emri i saj i plotĂ« nĂ« formĂ«n Interpretuesi (TPE1) â Titulli (TIT2). PĂ«r shembull:
- Brimstone â The Burden
- Hi-rez â Lost My Way (feat. Emilio Rojas, Dani Devinci)
Për të mësuar sa më detajisht si formohen titujt e këngëve, mund të . Duhet të shikosh funksionin utils.beautifySongTitle().
Një përputhje sipas çelësave konsiderohet një përqindje e caktuar e caktuar në cilësimet e nyjës. Për shembull, vlera 0.85 do të thotë se nëse funksioni i krahasimit të çelësave (titujve të këngëve) prej dëshmoi ngjashmëri më shumë se 85%, atëherë kjo është e njëjta këngë.
Algoritmi i përcaktimit të ngjashmërisë është po aty, në funksionin utils.getSongSimilarity().
Cover-i për këngën, për marrjen e mëvonshme, gjithashtu lidhet përmes etiketave (APIC). Në utilitetet (utils) ka të gjitha metodat e nevojshme për marrjen dhe përpunimin e etiketimeve.
Një shembull i punës me depot përmes klientit mund të shihet në .
Të gjitha slojrat e mësipërme janë të vetëqëndrueshme dhe mund të përdoren veçmas si slojra më të ulta për projekte të tjera. Për shembull, tashmë ka mendim për të bërë një sloj për ruajtjen e librave.
museria-global â Ă«shtĂ« njĂ« git-repozitor i konfiguruar tashmĂ« pĂ«r tĂ« nisur nyjĂ«n tuaj nĂ« rrjetin global tĂ« muzikĂ«s. E klononi, npm i && npm start dhe nĂ« thelb Ă«shtĂ« gjithçka. Mund tĂ« konfiguroni mĂ« nĂ« detaje, ta nisni nĂ« docker etj. Informacione tĂ« detajuara ka nĂ« .
Kur repozitoriumi përditësohet, duhet të përditësohet edhe nyja juaj. Nëse ndryshon numri i versionit të madh ose të vogël, atëherë kjo veprim është e domosdoshme, përndryshe nyjat e vjetra do të injorohen nga rrjeti.
Mund tĂ« punoni me kĂ«ngĂ«t manualisht dhe nĂ« mĂ«nyrĂ« programore. Ădo nyjĂ« aktivizon njĂ« server pĂ«r detyra tĂ« ndryshme. PĂ«rfshirĂ«, kur vizitoni endpoint-in e paracaktuar, do tĂ« merrni njĂ« ndĂ«rfaqe pĂ«r tĂ« punuar me muzikĂ«n. PĂ«r shembull, mund tĂ« shkoni nĂ« (linku mund tĂ« mos jetĂ« mĂ« aktual mĂ« vonĂ«, nyjat hyrĂ«se mund tĂ« merren gjithashtu nĂ« , ose tĂ« shihni pĂ«rditĂ«simet nĂ« GitHub).
Kështu mund të kërkoni dhe ngarkoni këngët në depo. Ngarkimi i këngëve mund të ndodhë në dy mënyra: normale dhe të moderuara. Mënyra e dytë do të thotë se puna udhëhiqet nga një person dhe jo nga një program. Dhe nëse e vendosni këtë shenjë gjatë shtimit, do të duhet të zgjidhni kapçen. Këngët mund të shtohen me prioritete -1, 0 ose 1. Prioriteti 1 mund të vendoset vetëm në mënyrën e moderuar. Prioritetet janë të nevojshme për të ndihmuar depon në marrjen e vendimeve më efikase kur përpiqeni të zëvendësoni një këngë ekzistuese me një të re. Sa më i madh të jetë prioriteti, aq më shumë mundësi keni që të zëvendësoni skedarin ekzistues. Kjo ndihmon në luftimin e spam-it dhe rrit cilësinë e këngëve të ngarkuara.
Nëse filloni të shtoni këngë në depo, përpiquni të bashkëngjitni edhe imazhe (cover), megjithëse ky fushë nuk është e detyrueshme. Në 99% të rasteve, imazhet e para në Google sipas emrave të këngëve janë kopertinat e albumeve.
Si ndodh teknikisht shtimi i skedarëve, në dy fjalë:
- Klienti merr adresën e një nyje të lirë, e cila për një kohë të caktuar do të bëhet koordinatori.
- Aktivizohet funksioni i shtimit të këngës (nga një person ose nga kodi), pranohet një kërkesë për shtim në endpoint-in e koordinatori.
- Koordinatori llogarit se sa kopje duhet të ruhen (parametr i konfigurueshëm).
- Kërkohen nyjat më të përshtatshme për ruajtje.
- Skedari, direkt, shkon në këto nyja.
Si ndodh teknikisht marrja e skedarëve:
- Klienti merr adresën e një nyje të lirë, e cila për një kohë të caktuar do të bëhet koordinatori.
- Aktivizohet funksioni i marrjes së këngës (nga një person ose nga kodi), pranohet një kërkesë për marrje në endpoint-in e koordinatori.
- Koordinatori kontrollon nëse linku është në cache. Nëse është kështu dhe është funksional, ai menjëherë kthehet te klienti, përndryshe nyjat pyeten për të gjetur nëse e kanë.
- Po shkarkohet skedari nga lidhja, nëse një e tillë është gjetur.
Alternativat për krijuesit e muzikës
Ndonjëherë më ka interesuar si mund të vlerësohet objektivisht çmimi i shumë veprave krijuese? Pse, për shembull, një person e nxjerr albumin e tij muzikor për 10$? Apo për 20$ ose 100$. Ku është algoritmi? Kur, për shembull, flasim për ndonjë produkt fizik, ose madje për shumë lloje shërbimesh, mund të llogarisim së paku kosto dhe të fillojmë nga aty.
Ok, le tĂ« themi se çmimi Ă«shtĂ« 10$. A Ă«shtĂ« kjo njĂ« strategji efektive? Le tĂ« themi se e kam dĂ«gjuar albumin diku ose njĂ« kĂ«ngĂ« prej tij dhe vendosa tĂ« kontribuoj. Por pĂ«r ndjenjat dhe mundĂ«sitĂ« e mia, 3$ janĂ« maksimumi qĂ« mund tĂ« jap. ĂfarĂ« duhet bĂ«rĂ« nĂ« kĂ«tĂ« rast? MĂ« shumĂ« gjasa nuk do tĂ« bĂ«j asgjĂ«, ashtu si shumica e njerĂ«zve.
Duke vendosur një çmim të fiksuar për punën krijuese, në fakt po e kufizoni veten, duke mos lejuar një numër më të madh njerëzish të dërgojnë ndihma më të vogla që në përllogaritje mund të jenë më të rëndësishme se ata që do të blejnë sipas çmimit që keni vendosur. Më duket se krijimtaria është një fushë ku donacionet duhet të jenë prioritet. Për këtë nevojiten:
- Të mësojmë njerëzit të falënderojnë pikërisht në këtë mënyrë. Krijuesit vetë duhet ta tregojnë qartë se dëshirojnë të marrin donacione, të shtojnë lidhje për metoda të ndryshme pagesash kudo, etj.
- Duhet të krijohen më shumë mekanizma për të thjeshtuar dhe përforcuar këto procese. Për shembull, të krijohet një sit global ku mund të dërgohen donacione për krijime përmes lidhjeve të autorëve.
Le të themi se lidhja është rreth kësaj:
http://someartistsdonationsite.site/category/artist?external-infoNëse e ngushtojmë për muzikantët, atëherë:
http://someartistsdonationsite.com/music/miyagi?song=blablaKrijuesi duhet të verifikojë emrin e tij dhe të lidhet me të.
Në klientin museria, të shtojmë funksionin e gjenerimit të një lidhjeje të tillë, dhe të gjitha projektet që përdorin ruajtjen, mund të vendosin në faqet e tyre/aplikacionet butona për donacione me këto lidhje pranë këngëve. Përdoruesit kanë mundësi të bëjnë donacione shumë shpejt dhe lehtë. Sigurisht, ky qasje mund të përdoret në çdo projekt dhe kategori krijimi, jo vetëm përmes ruajtjes.
Pse, pikërisht ti, ruajtja muzikore, dhe si mund të marrësh pjesë në këtë?
- Nëse po punon në një projekt që ka të bëjë me muzikën, ose po planifikon të krijosh një të tillë, atëherë për këtë gjithçka është menduar. Mund të përdorësh museria për të ruajtur dhe marrë këngë, duke rritur rrjedhën e këngëve në internet. Nëse, për më tepër, ke mundësi të ngrish dhe mbash të paktën një nod tëndin, kjo do të ishte kontribuimi më i mirë për zhvillimin e rrjetit.
- Ndoshta je gati të marrësh një rol tjetër mbi vete: të ndihmosh me kodin, ose të plotësosh dhe moderosh bazën, të përhapësh informacionin për projektin tek njohurit e tu, etj.
- Mund të të pëlqejë ideja dhe je gati të ndihmosh financiarisht, që gjithçka të jetojë dhe të zhvillohet. Sa më shumë nod, aq më shumë këngë.
- Ose, ndoshta, në një moment të caktuar do të të nevojitet të gjesh dhe shkarkosh një këngë. Mund ta bësh këtë shumë lehtë, për shembull, përmes .
Projekti është aktualisht në fazën më të hershme. Një rrjet testimi është aktiv, nodet mund të ribashkohen shpesh, kërkojnë përditësime, etj. Në rast se nuk ka probleme kritike gjatë periudhës së vlerësimit, ky rrjet do të transformohet në atë kryesor.
Të shikosh informacionin për nodin nga jashtë: numri i këngëve, hapësira e lirë, etj., mund të bëhet përmes një lidhjeje të formatit http://node-address/status ose http://node-address/status?pretty
Kontaktet e mia:
Burimi: habr.com
