
Një herë kam vendosur të shkruaj një aplikacion për të përzgjedhur muzikë për vete dhe për ta dëgjuar në shtëpi/në rrugë/gjatë stërvitjes etj. Dhe që gjithçka të funksiononte në mënyrë automatike, me pjesëmarrje minimale nga ana ime. Krijova arkitekturën, përgatita një prototip dhe në fund u përballa me një "problem të vogël".
Por të marrë vetë skedarët e këngëve është e paqartë. Në këtë moment, VKontakte ka mbyllur API-në, në portalet e mëdha muzikore gjithashtu gjendja është e zymtë, madje këngët jepen në copa, për të mos lejuar përpunimin. Kanë mbetur vetëm disa faqe të veçanta që janë të përkohshme me shumë reklama dhe të gjithë lloje plehrash, programe të dyshimta që grumbullojnë dhe opsione të tjera 'të ndyra'. Në përgjithësi, nuk ka një zgjidhje të vlefshme dhe të mirë. Mund të blini një abonnim për muzikën e Yandex ose ndonjë gjë të ngjashme. Por përsëri, atje nuk ka API të hapur publik dhe nuk keni akses në muzikë programatikisht. Disa kompani të mëdha, në thelb, kufizuan qasjen e të tjerëve në muzikë. Pse ndodhi kështu? Duke e thelluar më tej, u kuptua se problemi kryesor ishte të drejtat e autorit. Zgjidhja aktuale në formën e abonimeve i përshtatet shumë autorëve komercialë të veprave muzikore dhe këto kompani. Në të njëjtën kohë, muzika jo-komerciale dhe nënkuptimisht komerciale gjithashtu përfshihen në listën e përgjithshme. Ju ose paguani për të gjitha, ose nuk dëgjoni asgjë.
Dhe kam filluar tĂ« mendoj se çfarĂ« tĂ« bĂ«j me gjithĂ« kĂ«tĂ«. Si mund tĂ« organizohet shpĂ«rndarja e lirĂ« e muzikĂ«s? ĂfarĂ« do tĂ« bĂ«ja nĂ«se do tĂ« merresha me krijimin e muzikĂ«s dhe do tĂ« doja tĂ« fitonja nga kjo? A do tĂ« mĂ« pĂ«lqente nĂ«se kĂ«ngĂ«t e mia do tĂ« shpĂ«rndaheshin nĂ« mĂ«nyrĂ« piratçkie? ĂfarĂ« alternative ka nĂ« tĂ« vĂ«rtetĂ«?
Së fundmi, u formuan dy probleme kryesore që duhen zgjidhur:
- Organizimi i shpërndarjes së lirë të muzikës me metoda të përshtatshme për shumicën e njerëzve, përfshirë atyre programore.
- Ofertë alternativësh për krijuesit e muzikës për të fituar
Një depo globale dhe të decentralizuar muzikore
Fillimisht, kam provuar të gjej zgjidhje ekzistuese dhe të krijoj gjithçka mbi këtë bazë. Pas disa kohësh kërkimi, e para që më bëri përshtypje ishte . Fillova realizimin e ideve të mia, por pas një kohe të shkurtër zbulova disa probleme kritike në këtë zgjidhje:
- Ipfs është një depo për gjithçka. Këtu ka imazhe, muzikë, video dhe gjithçka tjetër. Në thelb, është një "zhurmë" planetare e madhe. Prandaj, kur nis nodin tënd, menjëherë përballesh me një ngarkesë të madhe. Makina thjesht gjunjëzohet nga dhimbja.
- Një mekanizëm i papërfunduar për mbledhjen e 'papërmbushjeve'. Nuk e di sesi është tani, por në atë moment, nëse e shkruaje në konfigurim se doje të kufizosh depozitimin në dhjetë gigabajt të dhënash, kjo nuk kishte asnjë kuptim. Depozita zgjerohej, duke injoruar shumë parametra të konfigurimit. Në fund, duhej të kishe një rezervë të madhe disku të fortë, derisa ipfs të kuptonte si të shkarkonte të panevojshmet.
- Në momentin e përdorimit të bibliotekës (nuk e di sesi është tani), klientit nuk i ishin implementuar kohëzgjatjet. Dërgon një kërkesë për të marrë një skedë, dhe nëse ajo nuk është aty, thjesht ngec. Sigurisht, njerëzit shpikën disa mënyra për ta anashkaluar këtë, të cilat pjesërisht zgjidhnin problemin, por ato ishin 'kosti'. Këto gjëra duhet të jenë gati nga kutia.
Ishin gjithashtu shumë probleme të vogla, përshtypja e formuar atëherë ishte e qartë: kjo nuk mund të përdoret për një projekt. Vazhdova të kërkoj depozita, studiuam mundësi të ndryshme, por nuk gjeta asgjë të përshtatshme.
Në fund, vendosa se ia vlen të provoj të shkruaj një depozitë të decentralizuar vetë. Le të mos pretendojë të jetë ndërplanetare, por do të zgjidhë detyrën e caktuar.
Kështu erdhën , , , , .
spreadable â Ă«shtĂ« shtresa kryesore, mĂ« e ulĂ«t, e cila lejon lidhjen e nyjeve nĂ« njĂ« rrjet. NĂ« tĂ« Ă«shtĂ« integruar algoritmi, i cili deri tani Ă«shtĂ« implementuar pjesĂ«risht pĂ«r rreth 10,000 serverĂ«. Versioni i plotĂ« i algoritmit Ă«shtĂ« shumĂ« mĂ« i komplikuar pĂ«r tâu zbatuar dhe do tĂ« kĂ«rkonte disa muaj tĂ« tjerĂ« tĂ« shtuar (nĂ« disa raste edhe mĂ« shumĂ«).
Nuk do të përshkruaj detajet e spreadable në këtë artikull, më mirë do të shkruaj një të veçantë ndonjëherë. Këtu vetëm do të theksoj disa veçori:
- Funksionon përmes http/https.
- Mund të krijoni një rrjet të veçantë për një detyrë të caktuar, gjë që do të zvogëlojë ndjeshëm ngarkesën në çdo projekt të veçantë, sesa nëse të gjitha do të ishin në një rrjet të vetëm.
- Fillimisht u mendua mekanizmi me kohëmatës dhe gjëra të tjera të vogla. Dhe kjo funksionon për të gjitha metodat, si në klient ashtu edhe në nyje. Mund të menaxhoni parametrat në mënyrë fleksibile nga aplikacioni juaj.
- Biblioteka është e shkruar në nodejs. Problemet me performancën e stack-ut kompenzohen nga natyra decentralizuese. Ngarkesa mund të "shpërndahet" duke rritur numrin e nyjeve. Në këmbim ka shumë avantazhe: një komunitet të madh, thjeshtësi dhe lehtësi në punë, klient izomorfik, mungesë varësish të jashtme, etj.
storacle â njĂ« shtresĂ« qĂ« trashĂ«gohet nga spreadable, e cila lejon ruajtjen e skedarĂ«ve nĂ« rrjet. Ădo skedar ka hash-in e vet sipas pĂ«rmbajtjes, me tĂ« cilin mund tĂ« aksesohesh mĂ« vonĂ«. SkedarĂ«t nuk ndahen nĂ« blloqe, por ruhen tĂ«rĂ«sisht.
metastocle â njĂ« shtresĂ« qĂ« trashĂ«gohet nga spreadable, e cila lejon ruajtjen e tĂ« dhĂ«nave nĂ« rrjet, por jo skedarĂ«ve. NdĂ«rfaqja Ă«shtĂ« e ngjashme me bazat e tĂ« dhĂ«nave 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. Kjo shtresĂ« Ă«shtĂ« pĂ«rgjegjĂ«se drejtpĂ«rdrejt pĂ«r ruajtjen e muzikĂ«s. Depozita punon vetĂ«m me skedarĂ«t mp3 dhe etiketat id3.
Si "çelĂ«si" pĂ«r kĂ«ngĂ«n pĂ«rdoret emri i plotĂ« i saj nĂ« formĂ«n Interpretuesi (TPE1) â Titulli (TIT2). PĂ«r shembull:
- Brimstone â The Burden
- Hi-rez â Lost My Way (feat. Emilio Rojas, Dani Devinci)
Mund të mësosh maksimalisht se si formohen emrat e këngëve . Duhet të shikosh funksionin utils.beautifySongTitle().
Një përputhje sipas çelimeve konsiderohet përqindja e përcaktuar në cilësimet e nyjës. Për shembull, vlera 0.85 do të thotë se nëse funksioni i krahasimit të çelimeve (emrave të këngëve) ka zbuluar një ngjashmëri më shumë se 85%, atëherë kjo është e njëjta këngë.
Algoritmi i përcaktimit të ngjashmërisë është atje, në funksionin utils.getSongSimilarity().
Kover për këngën, që do të shkarkohet pas, gjithashtu do të bashkëngjitet përmes etiketave (APIC). Në utilitetet (utils) janë të gjitha metodat e nevojshme për të marrë dhe përpunuar etiketat.
Shembulli i punës me depozitën përmes klientit mund të shikohet në .
Të gjitha shtresat e përmendura më sipër janë të vetë-mjaftueshme dhe mund të përdoren veçmas si shtresa më të ulëta për projekte të tjera. Për shembull, tani ekziston ideja për të bërë një shtresë për magazinimin e librave.
museria-global â Ă«shtĂ« tashmĂ« njĂ« depo e konfiguruar git pĂ«r tĂ« nisur nodin tuaj nĂ« rrjetin global tĂ« muzikĂ«s. Kloni, npm i && npm start dhe nĂ« thelb Ă«shtĂ« gjithçka. Mund tĂ« vendosni mĂ« nĂ« detaje, tĂ« nisni nĂ« docker etj. Informacione mĂ« tĂ« detajuar gjenden nĂ« .
Kur depoja përditësohet, duhet të përditësoni edhe nodin tuaj. Nëse ndërron numri major ose minor i versionit, atëherë ky veprim është i domosdoshëm, përndryshe nodet e vjetra do të injorohen nga rrjeti.
TĂ« punosh me kĂ«ngĂ«t mund tĂ« bĂ«het manualisht dhe programatikisht. Ădo nod nis njĂ« server pĂ«r detyra tĂ« ndryshme. Po ashtu, kur vizitoni endpoint-in default, do tĂ« merrni njĂ« ndĂ«rfaqe pĂ«r tĂ« punuar me muzikĂ«n. PĂ«r shembull, mund tĂ« hyni nĂ« (linku mund tĂ« mos jetĂ« mĂ« i vlefshĂ«m mĂ« vonĂ«, nyjtĂ« e hyrjes mund tĂ« merren gjithashtu nĂ« , ose mund tĂ« shikoni pĂ«rditĂ«simet nĂ« github).
Kështu mund të kërkoni dhe të ngarkoni këngë në depo. Ngarkimi i këngëve mund të ndodhë në dy moda: të zakonshme dhe të moderuara. Moda e dytë do të thotë se një person e drejton punën, jo një program. Dhe nëse e vendosni këtë kutinë gjatë shtimit, do t'ju duhet të zgjidhni CAPTCHA. Këngët mund të shtohen me përparësi -1, 0 ose 1. Përparësia 1 mund të vendoset vetëm në modin e moderuar. Përparësitë janë të nevojshme që depoja të marrë vendime më efektive kur përpiqeni të zëvendësoni një këngë ekzistuese me të re. Sa më e lartë të jetë përparësia, aq më shumë shanse keni për të riparuar 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), edhe pse ky fushë nuk është i detyrueshëm. Në 99% të rasteve, të parat imazhe në Google për emrat e këngëve janë kopertina albumesh.
Si ndodh teknikasht shtimi i skedareve, me dy fjalë:
- Klienti merr adresën e nodit të lirë, i cili për një kohë të shkurtër do të bëhet koordinatori.
- Aktivizohet funksioni i shtimit të këngës (nga një njeri ose me kod), dhe ndodh kërkesa për të shtuar në endpoint-in e koordinatorit.
- Koordinatori llogarit se sa kopje duhet të ruhen (parametër i konfigurable).
- Kërkohen nodet më të përshtatshme për ruajtje.
- Skedari drejtpërdrejt dërgohet në këto node.
Si ndodh tekniksht marrja e skedarëve:
- Klienti merr adresën e nodit të lirë, i cili për një kohë të shkurtër do të bëhet koordinatori.
- Aktivizohet funksioni i marrjes së këngës (nga një njeri ose me kod), dhe ndodh kërkesa për të marrë në endpoint-in e koordinatorit.
- Koordinatori kontrollon nëse ka një lidhje në cache. Nëse ka dhe është funksionale, atëherë kthehet menjëherë te klienti, ndryshe vizitohen node-t për të kontrolluar disponueshmërinë.
- Merret skedari përmes lidhjes, nëse e tillë është gjetur.
Alternativa për krijuesit e muzikës.
Mua ka ka që më ka interesuar gjithmonë, si mund të vlerësohet objektivisht çmimi i shumë veprave krijuese? Pse, për shembull, një person e përcakton albumin e tij muzikor për 10$? Ose për 20$ apo 100$. Ku është algoritmi? Kur, për shembull, flasim për një produkt fizike, ose madje për shumë lloje shërbimesh, ne mund ta llogarisim të paktën koston e prodhimit dhe të dalim nga ajo.
Ok, le të themi se çmimi është 10$. A është kjo efektive? Le të themi se dëgjova albumin diku ose ndonjë këngë prej aty dhe vendosa ta falenderoj. Por sipas ndjenjave dhe mundësive të mia, 3$ është kufiri im. Dhe çfarë të bëj këtu? Ndërsa ka shumë mundësi, thjesht nuk do të bëj asgjë, ashtu si shumica e njerëzve.
Duke vendosur një çmim të caktuar për punën kreative, thjesht e kufizon veten, nuk i jep një numri më të madh njerëzish mundësinë për të të dërguar para më të vogla, të cilat në total mund të jenë më të konsiderueshme se ata që do të blejnë sipas çmimit që ke vendosur. Më duket se krijimtaria është pikërisht ajo fushë ku donacionet duhet të drejtojnë në mënyrë të parë. Për këtë, nevojitet:
- Të mësojmë njerëzit të falenderojnë në këtë mënyrë. Krijuesit vetë duhet ta tregojnë qartë se dëshirojnë të marrin dhurata, të shtojnë gjithandej linke për mënyra të ndryshme pagese, etj.
- Duhet më shumë mekanizma për të thjeshtuar dhe forcuar këto procese. Për shembull, të krijohet një faqe globale, ku mund të dhurohet për krijimtarinë nëpërmjet linkeve autorësore.
Le të themi, linku është diçka si:
http://someartistsdonationsite.site/category/artist?external-infoNëse e ngushtojmë për muzikantët, atëherë:
http://someartistsdonationsite.com/music/miyagi?song=blablaArtistit i nevojitet të vërtetojë pseudonimin e tij dhe të lidhet me të.
Në klientin museria, shtojmë funksionin për gjenerimin e një linku të tillë, dhe të gjithë projektet që përdorin depozita, mund të vendosin në faqet/aplikacionet e tyre butona për dhurata me këto linke pranë këngëve. Përdoruesit kanë mundësinë për të bërë një dhuratë shumë shpejt dhe lehtësisht. Natyrisht, ky qasje mund të përdoret në çdo projekt dhe kategori krijimtarie, jo vetëm përmes depozitave.
Përse, pikërisht për ty, një depo muzikore, dhe si mund të merrni pjesë në këtë?
- Nëse po punon në një projekt që ka lidhje me muzikën, ose planifikon të krijosh një të tillë, kjo ishte arsyeja për të cilën u mendua. Mund të përdorësh museria për të ruajtur dhe marrë këngë, duke rritur fluksin e këngëve në rrjet. Nëse, për më tepër, ke mundësinë të ngresh dhe të mbash të paktën një nod tëndin, kjo do të jetë kontributi më i mirë për zhvillimin e rrjetit.
- Ndoshta je i gatshëm të marrësh ndonjë rol tjetër: të ndihmosh me kodin, ose të mbushësh dhe moderosh bazën, të shpërndash informacionin për projektin tek miqtë dhe etj.
- Mund të të ketë pëlqyer ideja dhe je i gatshëm të ndihmosh financiarisht, që kjo të jetojë dhe të zhvillohet. Sa më shumë nodë, aq më shumë këngë.
- Ose ndoshta një moment do të duhet të gjesh dhe shkarkosh një këngë. Mund ta bësh këtë shpejt dhe lehtë, për shembull, përmes .
Projekti aktualisht është në fazën më të hershme. është aktive një rrjet testues, nodet mund të rinisën shpesh, të 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ë kryesore.
Shikoni informacionin për nyjën nga jashtë: numri i këngëve, hapësira e lirë, etj., mund të bëhet përmes një linku të tillë http://node-address/status ose http://node-address/status?pretty
Kontaktet e mia:
Burimi: habr.com
