
En gÄng bestÀmde jag mig för att skriva en applikation för att vÀlja musik för mig sjÀlv att lyssna pÄ hemma, ute, under trÀning osv. Jag skissade en arkitektur, ritade en prototyp och stötte slutligen pÄ ett 'litet problem'.
Men det var oklart var jag skulle hÀmta sjÀlva lÄtarna ifrÄn. Vid det hÀr laget hade VKontakte redan stÀngt sitt API, och pÄ stora musikportaler var allt ocksÄ dött, till och med lÄtarna delades upp i bitar för att förhindra parsning. Det fanns bara nÄgra enskilda engÄngssidor med massor av reklam och skrÀp, diverse tveksamma program för nedladdning och andra 'smutsiga' alternativ. I allmÀnhet fanns det inget verkligt bra alternativ. Man kan förstÄs köpa en prenumeration pÄ nÄgon typ av Yandex Musik eller liknande. Men Äterigen, det finns ingen öppen offentlig API dÀr och du har inget programmeringsmÀssigt tillgÄng till musiken. Flera stora företag har i praktiken begrÀnsat tillgÄngen till musiken för andra. Varför hÀnde detta överhuvudtaget? NÀr jag grÀvde djupare blev det tydligt att det frÀmsta problemet ligger i upphovsrÀtten. Den nuvarande lösningen i form av prenumerationer passar mÄnga kommersiella upphovsmÀn till musikverk och dessa företag. Samtidigt hamnar ocksÄ icke-kommersiell och villkorligt kommersiell musik i den allmÀnna listan. Antingen betalar du för allt, eller sÄ lyssnar du överhuvudtaget inte pÄ nÄgot.
Och jag började tÀnka pÄ vad jag skulle göra med allt detta. Hur kan man organisera fri spridning av musik? Vad skulle jag göra om jag sjÀlv sysslade med musikskapande och ville tjÀna pengar pÄ det? Skulle jag gilla om mina lÄtar började spridas pÄ pirat sÀtt? Vad finns det för alternativa lösningar?
I slutÀndan formades tvÄ huvudproblem som mÄste lösas:
- Att organisera fri spridning av musik med metoder som Àr bekvÀma för de flesta mÀnniskor, inklusive programvarubaserade.
- Att erbjuda alternativ för skapare av musik för att tjÀna pengar.
En global, decentraliserad musiklagring.
Inledningsvis försökte jag hitta redan existerande lösningar och skapa allt baserat pÄ detta. Efter en tid av sökande, fastnade jag först för . Jag började implementera min idé, men efter ett tag upptÀckte jag flera kritiska problem med denna lösning:
- Ipfs â ett lagringssystem för allt och alla. HĂ€r finns bilder, musik, video och allt möjligt. I stort sett en stor planetarisk "soptipp". SĂ„ nĂ€r du startar din nod sĂ„ fĂ„r du omedelbart en stor belastning. Maskinen knĂ€ar under trycket.
- En slags ofullstÀndig samlingsmekanism för "skrÀp". Jag vet inte hur det Àr nu, men dÄ, om du i konfigurationsfilen angav att du ville begrÀnsa lagringen till tio gigabyte data, betydde det ingenting. Lagringen vÀxte, medan mÄnga konfigurationsparametrar ignorerades. Till slut behövde man ha en stor mÀngd hÄrddiskutrymme tills ipfs lyckades förstÄ hur man skulle slÀppa överflöden.
- Vid tidpunkten för anvÀndningen av biblioteket (jag vet inte hur det Àr nu) hade klienten inte implementerat tidsgrÀnser. Du skickade en begÀran om att hÀmta en fil, och om den inte fanns sÄ stod du bara stilla. SjÀlvklart hade mÀnniskor kommit pÄ diverse lösningar som delvis löste problemet, men det var nödlösningar. SÄdana funktioner borde finnas frÄn början.
Det fanns ocksÄ mÄnga smÄproblem, och intrycket blev dÄ entydigt: detta gÄr inte att anvÀnda för ett projekt. Jag fortsatte leta efter lagringslösningar och utforskade olika alternativ, men hittade inget passande.
Till slut bestĂ€mde jag mig för att försöka skriva ett decentraliserat lagringssystem sjĂ€lv. Ăven om det inte kommer att pĂ„stĂ„ sig vara interplanetariskt, kommer det att lösa en specifik uppgift.
SĂ„ blev det till , , , , .
spreadable â det Ă€r det grundlĂ€ggande, nedersta lagret som gör det möjligt att sammanlĂ€nka noder i ett nĂ€tverk. Det innehĂ„ller en algoritm som jag hittills har delvis implementerat med antagande om cirka 10 000 servrar. Den kompletta versionen av algoritmen Ă€r mycket mer komplex och skulle krĂ€va ytterligare nĂ„gra mĂ„nader (kanske mer).
Jag kommer inte att beskriva spreadable i detalj i denna artikel; istÀllet skriver jag hellre en separat artikel nÄgon gÄng. HÀr vill jag bara nÀmna nÄgra egenskaper:
- Den fungerar via http/https.
- Det Àr möjligt att skapa ett separat nÀtverk för en specifik uppgift, vilket avsevÀrt minskar belastningen pÄ varje enskilt projekt jÀmfört med om de alla befann sig i samma nÀtverk.
- En mekanism med tidsgrÀnser och andra smÄsaker var ursprungligen genomtÀnkt. Och det fungerar för alla metoder, bÄde i klienten och i noden. Man kan flexibelt styra parametrarna frÄn sin applikation.
- Biblioteket Àr skrivet i nodejs. Prestandaproblemen i stacken kompenseras av den decentraliserade naturen. Belastningen kan "spridas ut" genom att öka antalet noder. I gengÀld finns det mÄnga fördelar: en stor gemenskap, enkelhet och anvÀndarvÀnlighet, isomorfisk klient, avsaknad av externa beroenden, etc.
storacle â Ă€r ett lager som Ă€rvt frĂ„n spreadable, vilket möjliggör lagring av filer i nĂ€tverket. Varje fil har sin egen hash som baseras pĂ„ innehĂ„llet, vilket gör att den senare kan hĂ€mtas. Filer delas inte upp i block utan lagras i sin helhet.
metastocle â ett lager som Ă€rvt frĂ„n spreadable, vilket möjliggör lagring av data i nĂ€tverket, men inte filer. GrĂ€nssnittet liknar nosql-databaser. Man kan till exempel lĂ€gga till en fil i storacle, hĂ€mta dess hash och skriva den i metastocle kopplad till nĂ„got.
museria â Ă€rver frĂ„n storacle och metastocle. Detta lager ansvarar direkt för lagring av musik. Lagringen fungerar endast med mp3-filer och id3-taggar.
Som "nyckel" till lĂ„ten anvĂ€nds dess fullstĂ€ndiga namn i form av Artist (TPE1) â Titel (TIT2)Juniper (MX/QFX/ACX)
- Brimstone â The Burden
- Hi-rez â Lost My Way (feat. Emilio Rojas, Dani Devinci)
För att fÄ maximal information om hur lÄt titlar bildas, kan man . Man behöver kolla pÄ funktionen utils.beautifySongTitle().
En överensstÀmmelse baserad pÄ nycklar anses vara den procentandel som definieras i nodens instÀllningar. Till exempel, om vÀrdet 0,85 anges, betyder det att om nyckeljÀmförelsefunktionen (lÄt titlar) upptÀckte en likhet pÄ mer Àn 85%, sÄ Àr det samma lÄt.
Algoritmen för att bestÀmma likhet finns ocksÄ dÀr, i funktionen utils.getSongSimilarity().
Omslaget till lÄten, för senare hÀmtning, ska ocksÄ kopplas via taggar (APIC). I verktygen (utils) finns alla nödvÀndiga metoder för att hÀmta och bearbeta taggar.
Exempel pÄ hur man arbetar med lagringen via klienten kan ses i .
Alla ovan nÀmnda lager Àr sjÀlvförsörjande och kan anvÀndas separat som lÀgre lager för andra projekt. Till exempel finns det redan tankar pÄ att skapa ett lager för lagring av böcker.
museria-global â det hĂ€r Ă€r redan en konfigurerad git-repository för att starta en egen nod i det globala musiknĂ€tverket. Klona, npm i && npm start och i princip Ă€r det allt. Man kan konfigurera mer i detalj, starta i Docker, etc. Det finns detaljerad information pĂ„ .
NÀr ett repo uppdateras mÄste Àven din nod uppdateras. Om huvud- eller minorversionsnumret förÀndras Àr denna ÄtgÀrd obligatorisk, annars kommer gamla noder att ignoreras av nÀtverket.
Arbeta med lÄtar kan göras manuellt eller programmÀssigt. Varje nod startar en server för olika uppgifter. NÀr du besöker standardÀndpunkten fÄr du ett grÀnssnitt för att arbeta med musik. Till exempel kan du gÄ till (lÀnken kan bli obsolet senare, ingÄngsnoder kan Àven erhÄllas via , eller se uppdateringar pÄ GitHub).
PÄ sÄ sÀtt kan du söka och ladda ner lÄtar till lagret. Uppladdning av lÄtar kan ske i tvÄ lÀgen: vanligt och modererat. Det andra lÀget innebÀr att en mÀnniska, och inte ett program, hanterar arbetet. Om du markerar denna ruta vid tillÀgg mÄste du lösa en captcha. LÄtar kan lÀggas till med prioriteter -1, 0 eller 1. Prioritet 1 kan endast anges i det modererade lÀget. Prioriteter behövs för att lagret bÀttre ska kunna avgöra vad som ska göras nÀr du försöker ersÀtta en redan existerande lÄt med en ny. Ju högre prioritet, desto större chans att du överskrider den befintliga filen. Detta hjÀlper till att bekÀmpa spam och ökar kvaliteten pÄ de uppladdade lÄtarna.
Om du börjar lÀgga till lÄtar i lagret, försök Àven att bifoga bilder (cover), Àven om detta fÀlt inte Àr obligatoriskt. I 99% av fallen Àr de första bilderna du hittar pÄ Google med lÄttitlar albumcovers.
SÄ hÀr sker tekniskt tillÀgget av filer, i korthet:
- Klienten fÄr adressen till en ledig nod som för en tid kommer att fungera som koordinator.
- Funktionen för att lÀgga till en lÄt triggas (av en mÀnniska eller kod), en begÀran om tillÀgg skickas till koordinatorns Àndpunkt.
- Koordinatorn berÀknar hur mÄnga dubbletter som ska sparas (konfigurerbar parameter).
- De mest lÀmpliga noderna för lagring söks.
- Filen gÄr direkt till dessa noder.
SÄ hÀr sker tekniskt hÀmtning av filer:
- Klienten fÄr adressen till en ledig nod som för en tid kommer att fungera som koordinator.
- Funktionen för att hÀmta en lÄt triggas (av en mÀnniska eller kod), en begÀran om hÀmtning skickas till koordinatorns Àndpunkt.
- Koordinatorn kontrollerar om det finns en lÀnk i cachen. Om den finns och fungerar ÄterstÀlls den omedelbart till klienten, annars frÄgas noderna om de har den.
- Filen hÀmtas via lÀnken, om en sÄdan finns.
Alternativ för musikskapare
Jag har alltid undrat hur man objektivt kan vÀrdera mÄnga kreativa verk. Varför sÀtter en person till exempel sitt musikalbum till 10$? Eller 20$ eller 100$. Vad Àr algoritmen? NÀr vi pratar om en fysisk produkt, eller till och med mÄnga typer av tjÀnster, kan vi Ätminstone rÀkna kostnaden och utgÄ frÄn det.
Okej, lĂ„t oss sĂ€ga att 10$ Ă€r satt. Ăr det verkligen effektivt? LĂ„t sĂ€ga att jag lyssnar pĂ„ ett album nĂ„gonstans eller en lĂ„t dĂ€rifrĂ„n och beslutar att tacka. Men utifrĂ„n mina kĂ€nslor och min egen ekonomi Ă€r 3$ min grĂ€ns. Vad ska jag göra dĂ„? Antagligen kommer jag bara inte att göra nĂ„got, precis som de flesta.
Genom att sÀtta ett fast pris för kreativt arbete begrÀnsar du dig sjÀlv, du ger inte fler mÀnniskor möjlighet att skicka mindre pengar, vilket i summan kan bli mer Àn de som köper till det pris du satt. Jag tror att kreativitet Àr just den sfÀren dÀr donationer frÀmst bör styra. För detta behövs:
- Att lÀra mÀnniskor att tacka pÄ detta sÀtt. Skaparena sjÀlva mÄste tydligt visa att de vill ta emot donationer, lÀgga till lÀnkar till olika betalningsmetoder överallt osv.
- Fler mekanismer behövs för att förenkla och stÀrka dessa processer. Till exempel, skapa en global webbplats dÀr man kan donera för kreativitet genom egna lÀnkar.
LÄt oss sÀga att lÀnken ser ungefÀr ut sÄ hÀr:
http://someartistsdonationsite.site/category/artist?external-infoOm vi smalnar av det till musiker, dÄ:
http://someartistsdonationsite.com/music/miyagi?song=blablaArtisten behöver verifiera sitt anvÀndarnamn och koppla det till sig.
I klienten museria lÀgger vi till en funktion för att generera liknande lÀnkar, och alla projekt som anvÀnder lagringen kan placera knappar för donationer med dessa lÀnkar bredvid lÄtarna pÄ sina webbplatser/appar. AnvÀndare har möjlighet att mycket snabbt och enkelt göra en donation. SjÀlvklart kan denna metod anvÀndas i vilket projekt och kategori av kreativitet som helst, inte bara genom lagringen.
Varför, just för dig, ett musiklagringsutrymme, och hur kan man delta i detta?
- Om du arbetar med ett projekt relaterat till musik, eller planerar att skapa ett sÄdant, sÄ Àr det precis dÀrför detta har skapats. Du kan anvÀnda museria för att lagra och hÀmta lÄtar, vilket ökar flödet av lÄtar pÄ nÀtet. Om du dessutom har möjlighet att starta och upprÀtthÄlla Ätminstone en egen nod, sÄ kommer det att vara det bÀsta bidraget till nÀtverkets utveckling.
- Kanske Àr du redo att ta pÄ dig en annan roll: hjÀlpa till med koden, eller fylla i och moderera databasen, sprida information om projektet till dina bekanta, osv.
- Kanske gillar du idén och Àr villig att bidra ekonomiskt sÄ att allt kan leva vidare och utvecklas. Ju fler noder, desto fler lÄtar.
- Eller sÄ kan du bara behöva hitta och ladda ner en lÄt vid nÄgot tillfÀlle. Du kan enkelt göra det, till exempel genom .
Projektet Àr just nu i ett mycket tidigt skede. Ett testnÀt har startats, noderna kan ofta startas om, krÀva uppdateringar, osv. Om det inte uppstÄr nÄgra kritiska problem under den uppskattade perioden, kommer det hÀr nÀtverket ocksÄ att omvandlas till en huvudnÀt.
Du kan se information om noden utifrÄn: antal lÄtar, ledigt utrymme osv., pÄ en lÀnk av typen http://node-address/status eller http://node-address/status?pretty
Mina kontaktuppgifter:
KĂ€lla: habr.com
