{"id":80222,"date":"2020-05-04T13:42:18","date_gmt":"2020-05-04T11:42:18","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/museria-deczentralizovannoe-hranilishhe-muzyki"},"modified":"2020-05-04T13:42:18","modified_gmt":"2020-05-04T11:42:18","slug":"museria-deczentralizovannoe-hranilishhe-muzyki","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/museria-deczentralizovannoe-hranilishhe-muzyki","title":{"rendered":"Museria \u2014 ett decentraliserat musikarkiv","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Museria \u2014 ett decentraliserat musikarkiv\" src=\"\/wp-content\/uploads\/2020\/05\/e5323f70f0df3f3bb6fb92ae0544ad2f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn g\u00e5ng best\u00e4mde jag mig f\u00f6r att skriva en applikation f\u00f6r att v\u00e4lja musik f\u00f6r mig sj\u00e4lv att lyssna p\u00e5 hemma, ute, under tr\u00e4ning osv. Jag skissade en arkitektur, ritade en prototyp och st\u00f6tte slutligen p\u00e5 ett 'litet problem'. <br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nMen det var oklart var jag skulle h\u00e4mta sj\u00e4lva l\u00e5tarna ifr\u00e5n. Vid det h\u00e4r laget hade VKontakte redan st\u00e4ngt sitt API, och p\u00e5 stora musikportaler var allt ocks\u00e5 d\u00f6tt, till och med l\u00e5tarna delades upp i bitar f\u00f6r att f\u00f6rhindra parsning. Det fanns bara n\u00e5gra enskilda eng\u00e5ngssidor med massor av reklam och skr\u00e4p, diverse tveksamma program f\u00f6r nedladdning och andra 'smutsiga' alternativ. I allm\u00e4nhet fanns det inget verkligt bra alternativ. Man kan f\u00f6rst\u00e5s k\u00f6pa en prenumeration p\u00e5 n\u00e5gon typ av Yandex Musik eller liknande. Men \u00e5terigen, det finns ingen \u00f6ppen offentlig API d\u00e4r och du har inget programmeringsm\u00e4ssigt tillg\u00e5ng till musiken. Flera stora f\u00f6retag har i praktiken begr\u00e4nsat tillg\u00e5ngen till musiken f\u00f6r andra. Varf\u00f6r h\u00e4nde detta \u00f6verhuvudtaget? N\u00e4r jag gr\u00e4vde djupare blev det tydligt att det fr\u00e4msta problemet ligger i upphovsr\u00e4tten. Den nuvarande l\u00f6sningen i form av prenumerationer passar m\u00e5nga kommersiella upphovsm\u00e4n till musikverk och dessa f\u00f6retag. Samtidigt hamnar ocks\u00e5 icke-kommersiell och villkorligt kommersiell musik i den allm\u00e4nna listan. Antingen betalar du f\u00f6r allt, eller s\u00e5 lyssnar du \u00f6verhuvudtaget inte p\u00e5 n\u00e5got.<\/p>\n<p>Och jag b\u00f6rjade t\u00e4nka p\u00e5 vad jag skulle g\u00f6ra med allt detta. Hur kan man organisera fri spridning av musik? Vad skulle jag g\u00f6ra om jag sj\u00e4lv sysslade med musikskapande och ville tj\u00e4na pengar p\u00e5 det? Skulle jag gilla om mina l\u00e5tar b\u00f6rjade spridas p\u00e5 pirat s\u00e4tt? Vad finns det f\u00f6r alternativa l\u00f6sningar? <\/p>\n<p>I slut\u00e4ndan formades tv\u00e5 huvudproblem som m\u00e5ste l\u00f6sas:<\/p>\n<ul>\n<li>Att organisera fri spridning av musik med metoder som \u00e4r bekv\u00e4ma f\u00f6r de flesta m\u00e4nniskor, inklusive programvarubaserade.<\/li>\n<li>Att erbjuda alternativ f\u00f6r skapare av musik f\u00f6r att tj\u00e4na pengar.<\/li>\n<\/ul>\n<p><\/p>\n<h3>En global, decentraliserad musiklagring.<\/h3>\n<p>\nInledningsvis f\u00f6rs\u00f6kte jag hitta redan existerande l\u00f6sningar och skapa allt baserat p\u00e5 detta. Efter en tid av s\u00f6kande, fastnade jag f\u00f6rst f\u00f6r <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ipfs\/ipfs\">ipfs<\/a><\/noindex>. Jag b\u00f6rjade implementera min id\u00e9, men efter ett tag uppt\u00e4ckte jag flera kritiska problem med denna l\u00f6sning:<\/p>\n<ul>\n<li>Ipfs \u2014 ett lagringssystem f\u00f6r allt och alla. H\u00e4r finns bilder, musik, video och allt m\u00f6jligt. I stort sett en stor planetarisk \"soptipp\". S\u00e5 n\u00e4r du startar din nod s\u00e5 f\u00e5r du omedelbart en stor belastning. Maskinen kn\u00e4ar under trycket. <\/li>\n<li>En slags ofullst\u00e4ndig samlingsmekanism f\u00f6r \"skr\u00e4p\". Jag vet inte hur det \u00e4r nu, men d\u00e5, om du i konfigurationsfilen angav att du ville begr\u00e4nsa lagringen till tio gigabyte data, betydde det ingenting. Lagringen v\u00e4xte, medan m\u00e5nga konfigurationsparametrar ignorerades. Till slut beh\u00f6vde man ha en stor m\u00e4ngd h\u00e5rddiskutrymme tills ipfs lyckades f\u00f6rst\u00e5 hur man skulle sl\u00e4ppa \u00f6verfl\u00f6den.<\/li>\n<li>Vid tidpunkten f\u00f6r anv\u00e4ndningen av biblioteket (jag vet inte hur det \u00e4r nu) hade klienten inte implementerat tidsgr\u00e4nser. Du skickade en beg\u00e4ran om att h\u00e4mta en fil, och om den inte fanns s\u00e5 stod du bara stilla. Sj\u00e4lvklart hade m\u00e4nniskor kommit p\u00e5 diverse l\u00f6sningar som delvis l\u00f6ste problemet, men det var n\u00f6dl\u00f6sningar. S\u00e5dana funktioner borde finnas fr\u00e5n b\u00f6rjan.<\/li>\n<\/ul>\n<p>\nDet fanns ocks\u00e5 m\u00e5nga sm\u00e5problem, och intrycket blev d\u00e5 entydigt: detta g\u00e5r inte att anv\u00e4nda f\u00f6r ett projekt. Jag fortsatte leta efter lagringsl\u00f6sningar och utforskade olika alternativ, men hittade inget passande.<\/p>\n<p>Till slut best\u00e4mde jag mig f\u00f6r att f\u00f6rs\u00f6ka skriva ett decentraliserat lagringssystem sj\u00e4lv. \u00c4ven om det inte kommer att p\u00e5st\u00e5 sig vara interplanetariskt, kommer det att l\u00f6sa en specifik uppgift.<\/p>\n<p>S\u00e5 blev det till <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/spreadable\">spreadable<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/storacle\/\">storacle<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/metastocle\">metastocle<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/museria\">museria<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/museria-global\">museria-global<\/a><\/noindex>. <\/p>\n<p><b>spreadable <\/b> \u2014 det \u00e4r det grundl\u00e4ggande, nedersta lagret som g\u00f6r det m\u00f6jligt att sammanl\u00e4nka noder i ett n\u00e4tverk. Det inneh\u00e5ller en algoritm som jag hittills har delvis implementerat med antagande om cirka 10 000 servrar. Den kompletta versionen av algoritmen \u00e4r mycket mer komplex och skulle kr\u00e4va ytterligare n\u00e5gra m\u00e5nader (kanske mer).<\/p>\n<p>Jag kommer inte att beskriva spreadable i detalj i denna artikel; ist\u00e4llet skriver jag hellre en separat artikel n\u00e5gon g\u00e5ng. H\u00e4r vill jag bara n\u00e4mna n\u00e5gra egenskaper:<\/p>\n<ul>\n<li>Den fungerar via http\/https.<\/li>\n<li>Det \u00e4r m\u00f6jligt att skapa ett separat n\u00e4tverk f\u00f6r en specifik uppgift, vilket avsev\u00e4rt minskar belastningen p\u00e5 varje enskilt projekt j\u00e4mf\u00f6rt med om de alla befann sig i samma n\u00e4tverk.<\/li>\n<li>En mekanism med tidsgr\u00e4nser och andra sm\u00e5saker var ursprungligen genomt\u00e4nkt. Och det fungerar f\u00f6r alla metoder, b\u00e5de i klienten och i noden. Man kan flexibelt styra parametrarna fr\u00e5n sin applikation.<\/li>\n<li>Biblioteket \u00e4r skrivet i nodejs. Prestandaproblemen i stacken kompenseras av den decentraliserade naturen. Belastningen kan \"spridas ut\" genom att \u00f6ka antalet noder. I geng\u00e4ld finns det m\u00e5nga f\u00f6rdelar: en stor gemenskap, enkelhet och anv\u00e4ndarv\u00e4nlighet, isomorfisk klient, avsaknad av externa beroenden, etc.<\/li>\n<\/ul>\n<p>\n<b>storacle <\/b> \u2014 \u00e4r ett lager som \u00e4rvt fr\u00e5n spreadable, vilket m\u00f6jligg\u00f6r lagring av filer i n\u00e4tverket. Varje fil har sin egen hash som baseras p\u00e5 inneh\u00e5llet, vilket g\u00f6r att den senare kan h\u00e4mtas. Filer delas inte upp i block utan lagras i sin helhet.<\/p>\n<p><b>metastocle <\/b> \u2014 ett lager som \u00e4rvt fr\u00e5n spreadable, vilket m\u00f6jligg\u00f6r lagring av data i n\u00e4tverket, men inte filer. Gr\u00e4nssnittet liknar nosql-databaser. Man kan till exempel l\u00e4gga till en fil i storacle, h\u00e4mta dess hash och skriva den i metastocle kopplad till n\u00e5got.<\/p>\n<p><b>museria<\/b> \u2014 \u00e4rver fr\u00e5n storacle och metastocle. Detta lager ansvarar direkt f\u00f6r lagring av musik. Lagringen fungerar endast med mp3-filer och id3-taggar. <\/p>\n<p>Som \"nyckel\" till l\u00e5ten anv\u00e4nds dess fullst\u00e4ndiga namn i form av <b>Artist (TPE1) \u2014 Titel (TIT2)<\/b>Juniper (MX\/QFX\/ACX)<\/p>\n<ul>\n<li>Brimstone \u2014 The Burden<\/li>\n<li>Hi-rez \u2014 Lost My Way (feat. Emilio Rojas, Dani Devinci)<\/li>\n<\/ul>\n<p>\nF\u00f6r att f\u00e5 maximal information om hur l\u00e5t titlar bildas, kan man <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/museria\/blob\/master\/src\/utils.js\">). Ett typiskt exempel p\u00e5 anv\u00e4ndning:<\/a><\/noindex>. Man beh\u00f6ver kolla p\u00e5 funktionen <b>utils.beautifySongTitle()<\/b>.<\/p>\n<p>En \u00f6verensst\u00e4mmelse baserad p\u00e5 nycklar anses vara den procentandel som definieras i nodens inst\u00e4llningar. Till exempel, om v\u00e4rdet 0,85 anges, betyder det att om nyckelj\u00e4mf\u00f6relsefunktionen (l\u00e5t titlar) uppt\u00e4ckte en likhet p\u00e5 mer \u00e4n 85%, s\u00e5 \u00e4r det samma l\u00e5t.<\/p>\n<p>Algoritmen f\u00f6r att best\u00e4mma likhet finns ocks\u00e5 d\u00e4r, i funktionen <b>utils.getSongSimilarity()<\/b>.<\/p>\n<p>Omslaget till l\u00e5ten, f\u00f6r senare h\u00e4mtning, ska ocks\u00e5 kopplas via taggar (<b>APIC<\/b>). I verktygen (utils) finns alla n\u00f6dv\u00e4ndiga metoder f\u00f6r att h\u00e4mta och bearbeta taggar.<\/p>\n<p>Exempel p\u00e5 hur man arbetar med lagringen via klienten kan ses i <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/museria\">readme<\/a><\/noindex>.<\/p>\n<blockquote><p>Alla ovan n\u00e4mnda lager \u00e4r sj\u00e4lvf\u00f6rs\u00f6rjande och kan anv\u00e4ndas separat som l\u00e4gre lager f\u00f6r andra projekt. Till exempel finns det redan tankar p\u00e5 att skapa ett lager f\u00f6r lagring av b\u00f6cker.<\/p><\/blockquote>\n<p>\n<b>museria-global<\/b> \u2014 det h\u00e4r \u00e4r redan en konfigurerad git-repository f\u00f6r att starta en egen nod i det globala musikn\u00e4tverket. Klona, <b>npm i &amp;&amp; npm<\/b> start och i princip \u00e4r det allt. Man kan konfigurera mer i detalj, starta i Docker, etc. Det finns detaljerad information p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/museria-global#museria-global-storage-alpha-\">GitHub<\/a><\/noindex>.<\/p>\n<p>N\u00e4r ett repo uppdateras m\u00e5ste \u00e4ven din nod uppdateras. Om huvud- eller minorversionsnumret f\u00f6r\u00e4ndras \u00e4r denna \u00e5tg\u00e4rd obligatorisk, annars kommer gamla noder att ignoreras av n\u00e4tverket.<\/p>\n<p>Arbeta med l\u00e5tar kan g\u00f6ras manuellt eller programm\u00e4ssigt. Varje nod startar en server f\u00f6r olika uppgifter. N\u00e4r du bes\u00f6ker standard\u00e4ndpunkten f\u00e5r du ett gr\u00e4nssnitt f\u00f6r att arbeta med musik. Till exempel kan du g\u00e5 till <noindex><a rel=\"nofollow\" href=\"http:\/\/storage.museria.com\">rotnoden<\/a><\/noindex> (l\u00e4nken kan bli obsolet senare, ing\u00e5ngsnoder kan \u00e4ven erh\u00e5llas via <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/museria\">telegram<\/a><\/noindex>, eller se uppdateringar p\u00e5 GitHub).<\/p>\n<p>P\u00e5 s\u00e5 s\u00e4tt kan du s\u00f6ka och ladda ner l\u00e5tar till lagret. Uppladdning av l\u00e5tar kan ske i tv\u00e5 l\u00e4gen: vanligt och modererat. Det andra l\u00e4get inneb\u00e4r att en m\u00e4nniska, och inte ett program, hanterar arbetet. Om du markerar denna ruta vid till\u00e4gg m\u00e5ste du l\u00f6sa en captcha. L\u00e5tar kan l\u00e4ggas till med prioriteter -1, 0 eller 1. Prioritet 1 kan endast anges i det modererade l\u00e4get. Prioriteter beh\u00f6vs f\u00f6r att lagret b\u00e4ttre ska kunna avg\u00f6ra vad som ska g\u00f6ras n\u00e4r du f\u00f6rs\u00f6ker ers\u00e4tta en redan existerande l\u00e5t med en ny. Ju h\u00f6gre prioritet, desto st\u00f6rre chans att du \u00f6verskrider den befintliga filen. Detta hj\u00e4lper till att bek\u00e4mpa spam och \u00f6kar kvaliteten p\u00e5 de uppladdade l\u00e5tarna. <\/p>\n<p>Om du b\u00f6rjar l\u00e4gga till l\u00e5tar i lagret, f\u00f6rs\u00f6k \u00e4ven att bifoga bilder (cover), \u00e4ven om detta f\u00e4lt inte \u00e4r obligatoriskt. I 99% av fallen \u00e4r de f\u00f6rsta bilderna du hittar p\u00e5 Google med l\u00e5ttitlar albumcovers.<\/p>\n<p>S\u00e5 h\u00e4r sker tekniskt till\u00e4gget av filer, i korthet:<\/p>\n<ul>\n<li>Klienten f\u00e5r adressen till en ledig nod som f\u00f6r en tid kommer att fungera som koordinator.<\/li>\n<li>Funktionen f\u00f6r att l\u00e4gga till en l\u00e5t triggas (av en m\u00e4nniska eller kod), en beg\u00e4ran om till\u00e4gg skickas till koordinatorns \u00e4ndpunkt.<\/li>\n<li>Koordinatorn ber\u00e4knar hur m\u00e5nga dubbletter som ska sparas (konfigurerbar parameter).<\/li>\n<li>De mest l\u00e4mpliga noderna f\u00f6r lagring s\u00f6ks.<\/li>\n<li>Filen g\u00e5r direkt till dessa noder. <\/li>\n<\/ul>\n<p>\nS\u00e5 h\u00e4r sker tekniskt h\u00e4mtning av filer:<\/p>\n<ul>\n<li>Klienten f\u00e5r adressen till en ledig nod som f\u00f6r en tid kommer att fungera som koordinator.<\/li>\n<li>Funktionen f\u00f6r att h\u00e4mta en l\u00e5t triggas (av en m\u00e4nniska eller kod), en beg\u00e4ran om h\u00e4mtning skickas till koordinatorns \u00e4ndpunkt.<\/li>\n<li>Koordinatorn kontrollerar om det finns en l\u00e4nk i cachen. Om den finns och fungerar \u00e5terst\u00e4lls den omedelbart till klienten, annars fr\u00e5gas noderna om de har den.<\/li>\n<li>Filen h\u00e4mtas via l\u00e4nken, om en s\u00e5dan finns. <\/li>\n<\/ul>\n<p><\/p>\n<h3>Alternativ f\u00f6r musikskapare<\/h3>\n<p>\nJag har alltid undrat hur man objektivt kan v\u00e4rdera m\u00e5nga kreativa verk. Varf\u00f6r s\u00e4tter en person till exempel sitt musikalbum till 10$? Eller 20$ eller 100$. Vad \u00e4r algoritmen? N\u00e4r vi pratar om en fysisk produkt, eller till och med m\u00e5nga typer av tj\u00e4nster, kan vi \u00e5tminstone r\u00e4kna kostnaden och utg\u00e5 fr\u00e5n det. <\/p>\n<p>Okej, l\u00e5t oss s\u00e4ga att 10$ \u00e4r satt. \u00c4r det verkligen effektivt? L\u00e5t s\u00e4ga att jag lyssnar p\u00e5 ett album n\u00e5gonstans eller en l\u00e5t d\u00e4rifr\u00e5n och beslutar att tacka. Men utifr\u00e5n mina k\u00e4nslor och min egen ekonomi \u00e4r 3$ min gr\u00e4ns. Vad ska jag g\u00f6ra d\u00e5? Antagligen kommer jag bara inte att g\u00f6ra n\u00e5got, precis som de flesta. <\/p>\n<p>Genom att s\u00e4tta ett fast pris f\u00f6r kreativt arbete begr\u00e4nsar du dig sj\u00e4lv, du ger inte fler m\u00e4nniskor m\u00f6jlighet att skicka mindre pengar, vilket i summan kan bli mer \u00e4n de som k\u00f6per till det pris du satt. Jag tror att kreativitet \u00e4r just den sf\u00e4ren d\u00e4r donationer fr\u00e4mst b\u00f6r styra. F\u00f6r detta beh\u00f6vs:<\/p>\n<ul>\n<li>Att l\u00e4ra m\u00e4nniskor att tacka p\u00e5 detta s\u00e4tt. Skaparena sj\u00e4lva m\u00e5ste tydligt visa att de vill ta emot donationer, l\u00e4gga till l\u00e4nkar till olika betalningsmetoder \u00f6verallt osv.<\/li>\n<li>Fler mekanismer beh\u00f6vs f\u00f6r att f\u00f6renkla och st\u00e4rka dessa processer. Till exempel, skapa en global webbplats d\u00e4r man kan donera f\u00f6r kreativitet genom egna l\u00e4nkar.\n<p>L\u00e5t oss s\u00e4ga att l\u00e4nken ser ungef\u00e4r ut s\u00e5 h\u00e4r: <\/p>\n<p><b><code>http:\/\/someartistsdonationsite.site\/category\/artist?external-info<\/code><\/b><\/p>\n<p>Om vi smalnar av det till musiker, d\u00e5:<\/p>\n<p><b><code>http:\/\/someartistsdonationsite.com\/music\/miyagi?song=blabla<\/code><\/b><\/p>\n<p>Artisten beh\u00f6ver verifiera sitt anv\u00e4ndarnamn och koppla det till sig.<\/p>\n<p>I klienten museria l\u00e4gger vi till en funktion f\u00f6r att generera liknande l\u00e4nkar, och alla projekt som anv\u00e4nder lagringen kan placera knappar f\u00f6r donationer med dessa l\u00e4nkar bredvid l\u00e5tarna p\u00e5 sina webbplatser\/appar. Anv\u00e4ndare har m\u00f6jlighet att mycket snabbt och enkelt g\u00f6ra en donation. Sj\u00e4lvklart kan denna metod anv\u00e4ndas i vilket projekt och kategori av kreativitet som helst, inte bara genom lagringen.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Varf\u00f6r, just f\u00f6r dig, ett musiklagringsutrymme, och hur kan man delta i detta?<\/h3>\n<p><\/p>\n<ul>\n<li>Om du arbetar med ett projekt relaterat till musik, eller planerar att skapa ett s\u00e5dant, s\u00e5 \u00e4r det precis d\u00e4rf\u00f6r detta har skapats. Du kan anv\u00e4nda museria f\u00f6r att lagra och h\u00e4mta l\u00e5tar, vilket \u00f6kar fl\u00f6det av l\u00e5tar p\u00e5 n\u00e4tet. Om du dessutom har m\u00f6jlighet att starta och uppr\u00e4tth\u00e5lla \u00e5tminstone en egen nod, s\u00e5 kommer det att vara det b\u00e4sta bidraget till n\u00e4tverkets utveckling.<\/li>\n<li>Kanske \u00e4r du redo att ta p\u00e5 dig en annan roll: hj\u00e4lpa till med koden, eller fylla i och moderera databasen, sprida information om projektet till dina bekanta, osv.<\/li>\n<li>Kanske gillar du id\u00e9n och \u00e4r villig att bidra ekonomiskt s\u00e5 att allt kan leva vidare och utvecklas. Ju fler noder, desto fler l\u00e5tar.<\/li>\n<li>Eller s\u00e5 kan du bara beh\u00f6va hitta och ladda ner en l\u00e5t vid n\u00e5got tillf\u00e4lle. Du kan enkelt g\u00f6ra det, till exempel genom <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/MuseriaBot\">telegrambotten<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>\nProjektet \u00e4r just nu i ett mycket tidigt skede. Ett testn\u00e4t har startats, noderna kan ofta startas om, kr\u00e4va uppdateringar, osv. Om det inte uppst\u00e5r n\u00e5gra kritiska problem under den uppskattade perioden, kommer det h\u00e4r n\u00e4tverket ocks\u00e5 att omvandlas till en huvudn\u00e4t.<\/p>\n<p>Du kan se information om noden utifr\u00e5n: antal l\u00e5tar, ledigt utrymme osv., p\u00e5 en l\u00e4nk av typen <b><code>http:\/\/node-address\/status<\/code><\/b> eller <b><code>http:\/\/node-address\/status?pretty<\/code><\/b><\/p>\n<p>Mina kontaktuppgifter:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/ortex\">@ortex<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"mailto:mywebstreet@gmail.com\">mywebstreet@gmail.com<\/a><\/noindex>\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/museria\">Gruppen p\u00e5 Telegram p\u00e5 engelska.<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/museria.com\/\">Och hemsidan tack vare vilken hela denna id\u00e9 f\u00f6ddes.<\/a><\/noindex><\/li>\n<\/ul>\n<p>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495058\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u044f \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0431\u0438\u0440\u0430\u0442\u044c \u043c\u0443\u0437\u044b\u043a\u0443 \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0438 \u0441\u043b\u0443\u0448\u0430\u0442\u044c \u0434\u043e\u043c\u0430\/\u043d\u0430 \u0443\u043b\u0438\u0446\u0435\/\u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0430\u0445 \u0438.\u0442.\u0434. \u0418 \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0432 \u043f\u043e\u0442\u043e\u043a\u0435, \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u043c\u043e\u0438\u043c \u0443\u0447\u0430\u0441\u0442\u0438\u0435\u043c. \u041f\u0440\u0438\u0434\u0443\u043c\u0430\u043b \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443, \u043d\u0430\u0431\u0440\u043e\u0441\u0430\u043b \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u0438 \u0432 \u0438\u0442\u043e\u0433\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u043e\u0434\u043d\u043e\u0439 \u201c\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439\u201d. \u0410 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u0440\u0430\u0442\u044c \u0441\u0430\u043c\u0438 \u0444\u0430\u0439\u043b\u044b \u043f\u0435\u0441\u0435\u043d. \u041a \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u0432\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 \u0443\u0436\u0435 \u0437\u0430\u043a\u0440\u044b\u043b\u0430 api, \u043d\u0430 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u043c\u0443\u0437\u044b\u043a\u0430\u043b\u044c\u043d\u044b\u0445 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":80223,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-80222","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u044f \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/museria-deczentralizovannoe-hranilishhe-muzyki\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Museria \u2014 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043c\u0443\u0437\u044b\u043a\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u044f \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/museria-deczentralizovannoe-hranilishhe-muzyki\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-04T11:42:18+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-04T11:42:18+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Museria \u2014 ett decentraliserat musiklager | ProHoster","description":"En g\u00e5ng t\u00e4nkte jag skriva en applikation f\u00f6r att.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/museria-deczentralizovannoe-hranilishhe-muzyki","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Museria \u2014 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043c\u0443\u0437\u044b\u043a\u0438 | ProHoster","og:description":"\u0421\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u044f \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b.","og:url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/museria-deczentralizovannoe-hranilishhe-muzyki","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-04T11:42:18+00:00","article:modified_time":"2020-05-04T11:42:18+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"80222","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:22:48","updated":"2022-10-08 10:56:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/80222","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=80222"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/80222\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/80223"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=80222"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=80222"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=80222"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}