{"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\/pt\/blog\/administrirovanie\/museria-deczentralizovannoe-hranilishhe-muzyki","title":{"rendered":"Museria \u2014 um armazenamento de m\u00fasica descentralizado","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Museria \u2014 um armazenamento de m\u00fasica descentralizado\" src=\"\/wp-content\/uploads\/2020\/05\/e5323f70f0df3f3bb6fb92ae0544ad2f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCerta vez, decidi escrever um aplicativo para selecionar m\u00fasica para mim e ouvir em casa, na rua, durante os treinos, etc. E para que tudo funcionasse em fluxo, com a minha participa\u00e7\u00e3o m\u00ednima. Elaborei a arquitetura, esbocei um prot\u00f3tipo e, no final, me deparei com um \"pequeno problema\". <br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nMas n\u00e3o estava claro de onde obter os pr\u00f3prios arquivos das m\u00fasicas. Nesse momento, o VK j\u00e1 havia fechado a API, e nos grandes portais de m\u00fasica tamb\u00e9m estava tudo parado, at\u00e9 as m\u00fasicas eram fornecidas em fragmentos para evitar a extra\u00e7\u00e3o. Restaram apenas alguns sites tempor\u00e1rios com uma tonelada de an\u00fancios e lixo, v\u00e1rios programas de captura duvidosos e outras op\u00e7\u00f5es \"sujas\". Em resumo, nenhuma solu\u00e7\u00e3o realmente boa. \u00c9 claro que poderia comprar uma assinatura de algum servi\u00e7o como Yandex Music ou semelhante. Mas, novamente, n\u00e3o h\u00e1 nenhuma API p\u00fablica aberta e voc\u00ea n\u00e3o tem acesso \u00e0 m\u00fasica programaticamente. Algumas grandes empresas, na verdade, restringiram o acesso \u00e0 m\u00fasica para os outros. Por que isso aconteceu? Ao investigar mais a fundo, ficou claro que o principal problema s\u00e3o os direitos autorais. A solu\u00e7\u00e3o atual em forma de assinaturas agrada muitos autores comerciais de obras musicais e essas mesmas empresas. Ao mesmo tempo, a m\u00fasica n\u00e3o comercial e condicionalmente comercial tamb\u00e9m entra na lista geral. Voc\u00ea paga por tudo ou n\u00e3o ouve nada.<\/p>\n<p>Ent\u00e3o, comecei a pensar no que fazer com tudo isso. Como organizar a distribui\u00e7\u00e3o livre de m\u00fasica? O que eu faria se estivesse criando m\u00fasica e quisesse lucrar com isso? Eu gostaria que minhas m\u00fasicas fossem disseminadas de maneira pirata? Qual \u00e9 a solu\u00e7\u00e3o alternativa dispon\u00edvel? <\/p>\n<p>Assim, surgiram dois problemas principais que precisam ser resolvidos:<\/p>\n<ul>\n<li>Organiza\u00e7\u00e3o da distribui\u00e7\u00e3o livre de m\u00fasica por m\u00e9todos convenientes para a maioria das pessoas, incluindo m\u00e9todos program\u00e1ticos.<\/li>\n<li>Oferecer alternativas para os criadores de m\u00fasica para sua monetiza\u00e7\u00e3o<\/li>\n<\/ul>\n<p><\/p>\n<h3>Um armazenamento musical global descentralizado<\/h3>\n<p>\nInicialmente, tentei encontrar solu\u00e7\u00f5es j\u00e1 existentes e criar tudo com base nisso. Ap\u00f3s algum tempo de pesquisa, me chamou a aten\u00e7\u00e3o <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ipfs\/ipfs\">ipfs<\/a><\/noindex>. Comecei a implementa\u00e7\u00e3o da minha ideia, mas depois de um tempo, encontrei v\u00e1rios problemas cr\u00edticos nesta solu\u00e7\u00e3o:<\/p>\n<ul>\n<li>Ipfs \u2014 um reposit\u00f3rio para tudo e qualquer coisa. Aqui est\u00e3o imagens, m\u00fasicas, v\u00eddeos e o que mais voc\u00ea quiser. De fato, \u00e9 uma grande \"lixeira\" planet\u00e1ria. Portanto, ao iniciar seu n\u00f3, voc\u00ea j\u00e1 enfrenta uma enorme carga. A m\u00e1quina simplesmente sofre. <\/li>\n<li>\u00c9 um mecanismo mal feito para coletar \"lixo\". N\u00e3o sei como est\u00e1 agora, mas naquela \u00e9poca, se voc\u00ea configurasse para limitar o armazenamento a dez gigabytes de dados, isso n\u00e3o significava nada. O armazenamento se expandia, ignorando muitos par\u00e2metros de configura\u00e7\u00e3o. No final, era preciso ter um grande espa\u00e7o em disco at\u00e9 que o ipfs conseguisse se livrar do que era desnecess\u00e1rio.<\/li>\n<li>Na \u00e9poca em que usei a biblioteca (n\u00e3o sei como est\u00e1 agora), o cliente n\u00e3o tinha implementado timeouts. Voc\u00ea faz uma solicita\u00e7\u00e3o para obter um arquivo, e se ele n\u00e3o estiver l\u00e1, voc\u00ea simplesmente fica esperando. Claro, as pessoas inventaram v\u00e1rias solu\u00e7\u00f5es alternativas que, de certa forma, resolviam o problema, mas eram gambiarras. Essas coisas devem vir por padr\u00e3o.<\/li>\n<\/ul>\n<p>\nAl\u00e9m disso, havia muitos pequenos problemas, e a impress\u00e3o ent\u00e3o foi clara: isso n\u00e3o pode ser usado em um projeto. Continuei procurando um armazenamento, estudei diversas op\u00e7\u00f5es, mas n\u00e3o encontrei nada que fosse adequado.<\/p>\n<p>No final, decidi que valia a pena tentar escrever um armazenamento descentralizado por conta pr\u00f3pria. Mesmo que n\u00e3o pretenda ser interplanet\u00e1rio, ele resolver\u00e1 a tarefa espec\u00edfica colocada.<\/p>\n<p>Assim nasceu <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 esta \u00e9 a camada b\u00e1sica, a mais baixa, que permite unir os n\u00f3s em uma rede. Cont\u00e9m um algoritmo que implementei parcialmente com base em cerca de 10.000 servidores. A vers\u00e3o completa do algoritmo \u00e9 muito mais complexa e exigiria ainda mais alguns meses adicionais (talvez mais).<\/p>\n<p>N\u00e3o vou descrever detalhadamente o spreadable neste artigo, \u00e9 melhor escrever um separado alguma hora. Aqui, apenas menciono algumas caracter\u00edsticas:<\/p>\n<ul>\n<li>Funciona via http\/https.<\/li>\n<li>\u00c9 poss\u00edvel criar uma rede separada para uma tarefa espec\u00edfica, o que reduz significativamente a carga em cada projeto individual, em compara\u00e7\u00e3o a se todos estivessem em uma \u00fanica rede.<\/li>\n<li>Desde o in\u00edcio, foi planejado um mecanismo com timeouts e outras pequenas coisas. E isso funciona para todos os m\u00e9todos, tanto no cliente quanto no n\u00f3. Voc\u00ea pode gerenciar os par\u00e2metros de forma flex\u00edvel a partir de sua aplica\u00e7\u00e3o.<\/li>\n<li>A biblioteca \u00e9 escrita em nodejs. Os problemas de desempenho da pilha s\u00e3o compensados pela natureza descentralizada. A carga pode ser \"distribu\u00edda\" aumentando o n\u00famero de n\u00f3s. Em troca, h\u00e1 muitos benef\u00edcios: uma enorme comunidade, simplicidade e facilidade de uso, cliente isom\u00f3rfico, aus\u00eancia de depend\u00eancias externas, etc.<\/li>\n<\/ul>\n<p>\n<b>storacle <\/b> \u2014 \u00e9 uma camada que herda de spreadable, permitindo armazenar arquivos na rede. Cada arquivo possui seu pr\u00f3prio hash baseado no conte\u00fado, que pode ser usado para recuper\u00e1-lo posteriormente. Os arquivos n\u00e3o s\u00e3o divididos em blocos, mas armazenados na \u00edntegra.<\/p>\n<p><b>metastocle <\/b> \u2014 camada que herda de spreadable, permitindo armazenar dados na rede, mas n\u00e3o arquivos. A interface \u00e9 semelhante a bancos de dados nosql. \u00c9 poss\u00edvel, por exemplo, adicionar um arquivo ao storacle, obter seu hash e gravar no metastocle com uma refer\u00eancia a algo.<\/p>\n<p><b>museria<\/b> \u2014 herda de storacle e metastocle. Esta camada \u00e9 respons\u00e1vel diretamente pelo armazenamento de m\u00fasica. O reposit\u00f3rio trabalha apenas com arquivos mp3 e tags id3. <\/p>\n<p>Usa-se o \"t\u00edtulo\" completo da m\u00fasica como <b>Artista (TPE1) \u2014 T\u00edtulo (TIT2)<\/b>. Por exemplo:<\/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>\nPara entender detalhadamente como os t\u00edtulos das m\u00fasicas s\u00e3o formados, \u00e9 necess\u00e1rio <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/museria\/blob\/master\/src\/utils.js\">aqui<\/a><\/noindex>ver a fun\u00e7\u00e3o <b>utils.beautifySongTitle()<\/b>.<\/p>\n<p>A correspond\u00eancia de chaves \u00e9 considerada um percentual definido nas configura\u00e7\u00f5es do n\u00f3. Por exemplo, um valor de 0.85 significa que se a fun\u00e7\u00e3o de compara\u00e7\u00e3o de chaves (t\u00edtulos das m\u00fasicas) detectar semelhan\u00e7a superior a 85%, trata-se da mesma m\u00fasica.<\/p>\n<p>O algoritmo para determinar a semelhan\u00e7a est\u00e1 l\u00e1 mesmo, na fun\u00e7\u00e3o <b>utils.getSongSimilarity()<\/b>.<\/p>\n<p>A capa da m\u00fasica, para recupera\u00e7\u00e3o posterior, tamb\u00e9m \u00e9 anexada atrav\u00e9s de tags (<b>APIC<\/b>). Nas utilidades (utils), existem todos os m\u00e9todos necess\u00e1rios para obter e processar as tags.<\/p>\n<p>Um exemplo de trabalho com o armazenamento atrav\u00e9s do cliente pode ser visto em <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/museria\">readme<\/a><\/noindex>.<\/p>\n<blockquote><p>Todas as camadas mencionadas acima s\u00e3o autossuficientes e podem ser usadas separadamente como camadas mais baixas para outros projetos. Por exemplo, j\u00e1 h\u00e1 planos para criar uma camada para armazenamento de livros.<\/p><\/blockquote>\n<p>\n<b>museria-global<\/b> \u2014 este \u00e9 um reposit\u00f3rio git j\u00e1 configurado para iniciar seu pr\u00f3prio n\u00f3 na rede global de m\u00fasica. Voc\u00ea clona, <b>npm i &amp;&amp; npm<\/b> start e, essencialmente, \u00e9 isso. \u00c9 poss\u00edvel configurar de forma mais detalhada, iniciar em docker, etc. Informa\u00e7\u00f5es detalhadas est\u00e3o dispon\u00edveis em <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/museria-global#museria-global-storage-alpha-\">github<\/a><\/noindex>.<\/p>\n<p>Quando o reposit\u00f3rio \u00e9 atualizado, voc\u00ea tamb\u00e9m precisa atualizar seu n\u00f3. Se o n\u00famero da vers\u00e3o principal ou secund\u00e1ria mudar, essa a\u00e7\u00e3o \u00e9 obrigat\u00f3ria; caso contr\u00e1rio, os n\u00f3s antigos ser\u00e3o ignorados pela rede.<\/p>\n<p>\u00c9 poss\u00edvel trabalhar com as m\u00fasicas manualmente ou programaticamente. Cada n\u00f3 inicia um servidor para diversas tarefas. Isso inclui que, ao visitar o endpoint padr\u00e3o, voc\u00ea receber\u00e1 uma interface para trabalhar com m\u00fasicas. Por exemplo, voc\u00ea pode acessar <noindex><a rel=\"nofollow\" href=\"http:\/\/storage.museria.com\">o n\u00f3 raiz<\/a><\/noindex> (o link pode n\u00e3o ser mais v\u00e1lido depois, os n\u00f3s de entrada tamb\u00e9m podem ser obtidos no <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/museria\">Telegram<\/a><\/noindex>, ou voc\u00ea pode verificar as atualiza\u00e7\u00f5es no GitHub).<\/p>\n<p>Assim, voc\u00ea pode pesquisar e carregar m\u00fasicas no armazenamento. O upload de m\u00fasicas pode ocorrer em dois modos: normal e moderado. O segundo modo significa que um ser humano, e n\u00e3o um programa, est\u00e1 conduzindo o trabalho. Se voc\u00ea marcar essa op\u00e7\u00e3o ao adicionar, ser\u00e1 necess\u00e1rio resolver um captcha. As m\u00fasicas podem ser adicionadas com prioridades -1, 0 ou 1. A prioridade 1 s\u00f3 pode ser usada no modo moderado. As prioridades s\u00e3o necess\u00e1rias para que o armazenamento tome decis\u00f5es mais eficientes quando voc\u00ea tentar substituir uma m\u00fasica existente por uma nova. Quanto maior a prioridade, maiores as chances de voc\u00ea sobrescrever um arquivo existente. Isso ajuda a combater spam e aumenta a qualidade das m\u00fasicas carregadas. <\/p>\n<p>Se voc\u00ea come\u00e7ar a adicionar m\u00fasicas ao armazenamento, tente anexar tamb\u00e9m imagens (capas), embora esse campo n\u00e3o seja obrigat\u00f3rio. Em 99% dos casos, as primeiras imagens do Google com os t\u00edtulos das m\u00fasicas s\u00e3o capas de \u00e1lbuns.<\/p>\n<p>Como tecnicamente acontece a adi\u00e7\u00e3o de arquivos, em poucas palavras:<\/p>\n<ul>\n<li>O cliente recebe o endere\u00e7o de um n\u00f3 livre, que se tornar\u00e1 o coordenador por um tempo.<\/li>\n<li>A fun\u00e7\u00e3o de adi\u00e7\u00e3o de m\u00fasica \u00e9 acionada (por um humano ou por c\u00f3digo), ocorre uma solicita\u00e7\u00e3o de adi\u00e7\u00e3o ao endpoint do coordenador.<\/li>\n<li>O coordenador calcula quantos duplicados devem ser mantidos (um par\u00e2metro configur\u00e1vel).<\/li>\n<li>Os n\u00f3s mais adequados para armazenamento s\u00e3o pesquisados.<\/li>\n<li>O arquivo, diretamente, \u00e9 enviado para esses n\u00f3s. <\/li>\n<\/ul>\n<p>\nComo tecnicamente acontece a obten\u00e7\u00e3o de arquivos:<\/p>\n<ul>\n<li>O cliente recebe o endere\u00e7o de um n\u00f3 livre, que se tornar\u00e1 o coordenador por um tempo.<\/li>\n<li>A fun\u00e7\u00e3o de obten\u00e7\u00e3o de m\u00fasica \u00e9 acionada (por um humano ou por c\u00f3digo), ocorre uma solicita\u00e7\u00e3o de obten\u00e7\u00e3o ao endpoint do coordenador.<\/li>\n<li>O coordenador verifica a exist\u00eancia do link no cache. Se ele existir e estiver funcional, \u00e9 imediatamente retornado ao cliente; caso contr\u00e1rio, os n\u00f3s s\u00e3o consultados quanto \u00e0 disponibilidade.<\/li>\n<li>Est\u00e1 ocorrendo a obten\u00e7\u00e3o do arquivo por meio do link, caso este tenha sido encontrado. <\/li>\n<\/ul>\n<p><\/p>\n<h3>Alternativas para criadores de m\u00fasica<\/h3>\n<p>\nSempre tive curiosidade sobre como podemos avaliar objetivamente o valor de muitas obras criativas. Por que, por exemplo, uma pessoa coloca seu \u00e1lbum musical \u00e0 venda por 10$? Ou por 20$ ou por 100$. Onde est\u00e1 o algoritmo? Quando falamos sobre um produto f\u00edsico, ou mesmo sobre muitos tipos de servi\u00e7os, podemos ao menos calcular o custo de produ\u00e7\u00e3o e partir disso. <\/p>\n<p>Ok, suponha que o pre\u00e7o seja 10$. Isso \u00e9 realmente eficaz? Suponha que eu escute o \u00e1lbum ou uma can\u00e7\u00e3o de l\u00e1 e decida dar uma retribui\u00e7\u00e3o. Mas, de acordo com minhas sensa\u00e7\u00f5es e possibilidades, 3$ \u00e9 meu teto. E como proceder aqui? Provavelmente n\u00e3o farei nada, assim como a maioria das pessoas. <\/p>\n<p>Ao definir um pre\u00e7o fixo pelo trabalho criativo, voc\u00ea simplesmente se limita, n\u00e3o permitindo que mais pessoas enviem quantias menores que podem, cumulativamente, ser mais significativas do que aquelas que comprariam pelo pre\u00e7o que voc\u00ea estabeleceu. Parece-me que a criatividade \u00e9 uma \u00e1rea onde, em primeiro lugar, as doa\u00e7\u00f5es devem prevalecer. Para isso \u00e9 necess\u00e1rio:<\/p>\n<ul>\n<li>Ensinar as pessoas a agradecer dessa forma. Os criadores devem demonstrar claramente que gostariam de receber doa\u00e7\u00f5es, adicionando links para diferentes m\u00e9todos de pagamento em todos os lugares, etc.<\/li>\n<li>Precisamos de mais mecanismos para simplificar e fortalecer esses processos. Por exemplo, criar um site global onde se possa fazer doa\u00e7\u00f5es por meio de links autorais.\n<p>Suponha que o link seja algo como: <\/p>\n<p><b><code>http:\/\/someartistsdonationsite.site\/category\/artist?external-info<\/code><\/b><\/p>\n<p>Se restringirmos aos m\u00fasicos, ent\u00e3o:<\/p>\n<p><b><code>http:\/\/someartistsdonationsite.com\/music\/miyagi?song=blabla<\/code><\/b><\/p>\n<p>O artista precisa verificar seu nome de usu\u00e1rio e se vincular a ele.<\/p>\n<p>No cliente museria, adicionamos a fun\u00e7\u00e3o de gera\u00e7\u00e3o de um link desse tipo, e todos os projetos que utilizam o armazenamento podem colocar em seus sites\/aplicativos bot\u00f5es para doa\u00e7\u00f5es com esses links ao lado das m\u00fasicas. Os usu\u00e1rios ter\u00e3o a oportunidade de fazer uma doa\u00e7\u00e3o de forma muito r\u00e1pida e simples. Naturalmente, essa abordagem pode ser utilizada em qualquer projeto e categoria criativa, n\u00e3o apenas atrav\u00e9s do armazenamento.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Por que, exatamente, voc\u00ea precisa de um armazenamento musical, e como voc\u00ea pode participar?<\/h3>\n<p><\/p>\n<ul>\n<li>Se voc\u00ea est\u00e1 trabalhando em um projeto relacionado \u00e0 m\u00fasica ou planeja criar um, \u00e9 para isso que tudo foi pensado. Voc\u00ea pode usar museria para armazenar e acessar m\u00fasicas, aumentando o fluxo de m\u00fasicas na rede. Se voc\u00ea tiver a capacidade de levantar e manter pelo menos um n\u00f3 pr\u00f3prio, isso ser\u00e1 a melhor contribui\u00e7\u00e3o para o desenvolvimento da rede.<\/li>\n<li>Talvez voc\u00ea esteja pronto para assumir um papel diferente: ajudar com o c\u00f3digo, ou preencher e moderar o banco de dados, espalhar informa\u00e7\u00f5es sobre o projeto para seus conhecidos etc.<\/li>\n<li>Talvez voc\u00ea tenha gostado da ideia e esteja disposto a ajudar financeiramente para que tudo isso viva e cres\u00e7a. Quanto mais n\u00f3s, mais m\u00fasicas.<\/li>\n<li>Ou talvez voc\u00ea precise simplesmente encontrar e baixar uma m\u00fasica em algum momento. Voc\u00ea poder\u00e1 fazer isso de forma muito simples, por exemplo, atrav\u00e9s do <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/MuseriaBot\">bot do Telegram<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>\nO projeto est\u00e1 atualmente em sua fase inicial. A rede de testes foi lan\u00e7ada, os n\u00f3s podem ser frequentemente reiniciados, exigir atualiza\u00e7\u00f5es, etc. Na aus\u00eancia de problemas cr\u00edticos durante o per\u00edodo de avalia\u00e7\u00e3o, essa mesma rede se transformar\u00e1 na principal.<\/p>\n<p>Voc\u00ea pode ver informa\u00e7\u00f5es sobre um n\u00f3 externamente: o n\u00famero de m\u00fasicas, espa\u00e7o livre, etc., atrav\u00e9s de um link do tipo <b><code>http:\/\/node-address\/status<\/code><\/b> ou <b><code>http:\/\/node-address\/status?pretty<\/code><\/b><\/p>\n<p>Meus contatos:<\/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\">Grupo no Telegram em ingl\u00eas.<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/museria.com\/\">E o site, gra\u00e7as ao qual essa ideia nasceu.<\/a><\/noindex><\/li>\n<\/ul>\n<p>Fonte: <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.3 - 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\/pt\/blog\/administrirovanie\/museria-deczentralizovannoe-hranilishhe-muzyki\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\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\/pt\/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 armazenamento descentralizado de m\u00fasica | ProHoster","description":"Certa vez, eu resolvi escrever um aplicativo para.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/museria-deczentralizovannoe-hranilishhe-muzyki","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/80222","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=80222"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/80222\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/80223"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=80222"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=80222"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=80222"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}