{"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\/pl\/blog\/administrirovanie\/museria-deczentralizovannoe-hranilishhe-muzyki","title":{"rendered":"Museria \u2014 zdecentralizowane przechowywanie muzyki","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Museria \u2014 zdecentralizowane przechowywanie muzyki\" src=\"\/wp-content\/uploads\/2020\/05\/e5323f70f0df3f3bb6fb92ae0544ad2f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPewnego dnia postanowi\u0142em stworzy\u0107 aplikacj\u0119, kt\u00f3ra wybiera\u0142aby muzyk\u0119 dla mnie, abym m\u00f3g\u0142 jej s\u0142ucha\u0107 w domu, na ulicy, podczas trening\u00f3w itd. Chcia\u0142em, aby wszystko dzia\u0142a\u0142o w tle, z minimalnym moim udzia\u0142em. Wymy\u015bli\u0142em architektur\u0119, naszkicowa\u0142em prototyp i w ko\u0144cu natkn\u0105\u0142em si\u0119 na jeden \"ma\u0142y problem\". <br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nNie by\u0142o jasne, sk\u0105d bra\u0107 same pliki utwor\u00f3w. W tym czasie VKontakte ju\u017c zamkn\u0119\u0142o API, na du\u017cych portalach muzycznych te\u017c nie by\u0142o nic, nawet utwory by\u0142y udost\u0119pniane w kawa\u0142kach, aby nie da\u0142o si\u0119 ich zeskroba\u0107. Pozosta\u0142y tylko jakie\u015b pojedyncze strony-zer\u00f3wki z mn\u00f3stwem reklam i r\u00f3\u017cnych \u015bmieci, a tak\u017ce w\u0105tpliwe programy grabbers i inne \"brudne\" opcje. W sumie, \u017cadne dobre rozwi\u0105zanie. Mo\u017cna by wykupi\u0107 subskrypcj\u0119 na Yandex Muzyka lub podobne us\u0142ugi. Ale zn\u00f3w, tam nigdzie nie ma otwartego publicznego API i nie masz dost\u0119pu do muzyki programowo. Kilka du\u017cych firm praktycznie ograniczy\u0142o dost\u0119p do muzyki dla innych. Dlaczego tak si\u0119 sta\u0142o? Im g\u0142\u0119biej zag\u0142\u0119bi\u0142em si\u0119 w temat, tym bardziej zrozumia\u0142em, \u017ce g\u0142\u00f3wnym problemem s\u0105 prawa autorskie. Aktualne rozwi\u0105zanie w postaci subskrypcji zadowala wielu komercyjnych tw\u00f3rc\u00f3w muzycznych i te same firmy. Przy tym niekomercyjna i warunkowo komercyjna muzyka r\u00f3wnie\u017c trafiaj\u0105 na og\u00f3ln\u0105 list\u0119. Albo p\u0142acisz za wszystko, albo nie s\u0142uchasz w og\u00f3le.<\/p>\n<p>Zacz\u0105\u0142em my\u015ble\u0107, co z tym wszystkim zrobi\u0107. Jak mo\u017cna zorganizowa\u0107 swobodne rozpowszechnianie muzyki? Co bym zrobi\u0142, gdybym sam zajmowa\u0142 si\u0119 tworzeniem muzyki i chcia\u0142 na tym zarabia\u0107? Czy podoba\u0142oby mi si\u0119, gdyby moje utwory by\u0142y rozprowadzane w spos\u00f3b piracki? Jakie w\u0142a\u015bciwie s\u0105 alternatywne rozwi\u0105zania? <\/p>\n<p>Ostatecznie pojawi\u0142y si\u0119 dwa g\u0142\u00f3wne problemy, kt\u00f3re nale\u017cy rozwi\u0105za\u0107:<\/p>\n<ul>\n<li>Organizacja swobodnego rozpowszechniania muzyki w wygodny spos\u00f3b dla wi\u0119kszo\u015bci ludzi, w tym za pomoc\u0105 oprogramowania.<\/li>\n<li>Propozycja alternatyw dla tw\u00f3rc\u00f3w muzyki w celu zarobku.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Globalne, zdecentralizowane przechowalnie muzyki.<\/h3>\n<p>\nPocz\u0105tkowo pr\u00f3bowa\u0142em znale\u017a\u0107 ju\u017c istniej\u0105ce rozwi\u0105zania i stworzy\u0107 wszystko na ich podstawie. Po pewnym czasie poszukiwa\u0144 zwr\u00f3ci\u0142em uwag\u0119 na <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ipfs\/ipfs\">ipfs<\/a><\/noindex>. Rozpocz\u0105\u0142em realizacj\u0119 mojego pomys\u0142u, ale po pewnym czasie natkn\u0105\u0142em si\u0119 na kilka krytycznych problem\u00f3w w tym rozwi\u0105zaniu:<\/p>\n<ul>\n<li>Ipfs \u2014 przechowalnia wszystkiego i wsz\u0119dzie. S\u0105 tu zar\u00f3wno obrazy, muzyka, wideo, jak i wszystko inne. Og\u00f3lnie rzecz bior\u0105c, taka ogromna planetarna \"\u015bmietnisko\". Dlatego, gdy uruchamiasz sw\u00f3j w\u0119ze\u0142, natychmiast otrzymujesz ogromne obci\u0105\u017cenie. Maszyna po prostu krzyczy z b\u00f3lu. <\/li>\n<li>Jaki\u015b niedoko\u0144czony mechanizm zbierania \"\u015bmieci\". Nie wiem jak jest teraz, ale w tamtym momencie, je\u015bli w konfiguracji ustawi\u0142e\u015b, \u017ce chcesz ograniczy\u0107 pami\u0119\u0107 do dziesi\u0119ciu gigabajt\u00f3w danych, to nic to nie znaczy\u0142o. Pami\u0119\u0107 rozrasta\u0142a si\u0119, ignoruj\u0105c wiele parametr\u00f3w konfiguracji. W efekcie, trzeba by\u0142o mie\u0107 ogromny zapas dysku twardego, czekaj\u0105c a\u017c ipfs zdecyduje si\u0119 na usuni\u0119cie niepotrzebnych danych.<\/li>\n<li>W czasie korzystania z biblioteki (nie wiem jak jest teraz), klient nie mia\u0142 zrealizowanych timeout\u00f3w. Wysy\u0142asz zapytanie o plik, a je\u015bli go nie ma, to po prostu utkniesz. Oczywi\u015bcie, ludzie wymy\u015blili r\u00f3\u017cne obej\u015bcia, kt\u00f3re cz\u0119\u015bciowo rozwi\u0105zywa\u0142y problem, ale by\u0142y to tylko prowizorki. Takie rzeczy powinny dzia\u0142a\u0107 od razu z pude\u0142ka.<\/li>\n<\/ul>\n<p>\nBy\u0142o te\u017c wiele drobnych problem\u00f3w, wra\u017cenie jakie si\u0119 wtedy uformowa\u0142o: nie mo\u017cna tego u\u017cywa\u0107 do projektu. Kontynuowa\u0142em poszukiwania przechowalni, bada\u0142em r\u00f3\u017cne opcje, ale nic odpowiedniego nie znalaz\u0142em.<\/p>\n<p>Ostatecznie postanowi\u0142em, \u017ce warto spr\u00f3bowa\u0107 napisa\u0107 w\u0142asn\u0105 zdecentralizowan\u0105 przechowalni\u0119. Niech nie b\u0119dzie pretendowa\u0142a do roli mi\u0119dzyplanetarnej, ale b\u0119dzie rozwi\u0105zywa\u0142a skonkretyzowany problem.<\/p>\n<p>Tak i powsta\u0142y <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 to podstawowa, najni\u017csza warstwa, kt\u00f3ra pozwala na \u0142\u0105czenie w\u0119z\u0142\u00f3w w sie\u0107. Zawiera algorytm, kt\u00f3ry wst\u0119pnie zrealizowa\u0142em dla oko\u0142o 10000 serwer\u00f3w. Pe\u0142na wersja algorytmu jest znacznie bardziej skomplikowana w implementacji i wymaga\u0142aby jeszcze kilku dodatkowych miesi\u0119cy (mo\u017ce nawet wi\u0119cej).<\/p>\n<p>Nie b\u0119d\u0119 dok\u0142adnie opisywa\u0142 spreadable w tym artykule, lepiej napisz\u0119 osobno kiedy\u015b. Tu tylko zaznacz\u0119 niekt\u00f3re cechy:<\/p>\n<ul>\n<li>Dzia\u0142a przez http\/https.<\/li>\n<li>Mo\u017cna tworzy\u0107 osobn\u0105 sie\u0107 pod konkretne zadanie, co znacznie zmniejszy obci\u0105\u017cenie ka\u017cdego pojedynczego projektu, w por\u00f3wnaniu do sytuacji, gdyby wszystkie by\u0142y w jednej sieci.<\/li>\n<li>Pocz\u0105tkowo przemy\u015blano mechanizm z timeoutami i innymi drobiazgami. I to dzia\u0142a dla wszystkich metod zar\u00f3wno w kliencie, jak i w w\u0119\u017ale. Mo\u017cna elastycznie zarz\u0105dza\u0107 parametrami z w\u0142asnej aplikacji.<\/li>\n<li>Biblioteka napisana jest w nodejs. Problemy z wydajno\u015bci\u0105 stosu s\u0105 rekompensowane zdecentralizowan\u0105 natur\u0105. Obci\u0105\u017cenie mo\u017cna \u00abroz\u0142o\u017cy\u0107\u00bb poprzez zwi\u0119kszenie liczby w\u0119z\u0142\u00f3w. W zamian zyskujemy wiele zalet: ogromn\u0105 spo\u0142eczno\u015b\u0107, prostot\u0119 i wygod\u0119 pracy, izomorficznego klienta, brak zewn\u0119trznych zale\u017cno\u015bci itd.<\/li>\n<\/ul>\n<p>\n<b>storacle <\/b> \u2014 to warstwa dziedzicz\u0105ca po spreadable, kt\u00f3ra umo\u017cliwia przechowywanie plik\u00f3w w sieci. Ka\u017cdy plik ma sw\u00f3j hash oparty na zawarto\u015bci, za pomoc\u0105 kt\u00f3rego mo\u017cna go p\u00f3\u017aniej odzyska\u0107. Pliki nie s\u0105 dzielone na bloki, lecz przechowywane w ca\u0142o\u015bci.<\/p>\n<p><b>metastocle <\/b> \u2014 warstwa dziedzicz\u0105ca po spreadable, kt\u00f3ra pozwala przechowywa\u0107 w sieci dane, ale nie pliki. Interfejs przypomina bazy danych nosql. Mo\u017cna na przyk\u0142ad doda\u0107 plik do storacle, uzyska\u0107 jego hash i zapisa\u0107 w metastocle z powi\u0105zaniem do czegokolwiek.<\/p>\n<p><b>museria<\/b> \u2014 dziedziczy po storacle i metastocle. Ta warstwa odpowiada bezpo\u015brednio za przechowywanie muzyki. Magazyn obs\u0142uguje tylko pliki mp3 oraz tagi id3. <\/p>\n<p>Ca\u0142kowite nazewnictwo utworu s\u0142u\u017cy jako \u201eklucz\u201d do piosenki w postaci <b>Wykonawca (TPE1) \u2014 Tytu\u0142 (TIT2)<\/b>. Na przyk\u0142ad:<\/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>\nNajbardziej szczeg\u00f3\u0142owe informacje na temat tego, jak formu\u0142owane s\u0105 tytu\u0142y piosenek mo\u017cna znale\u017a\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/museria\/blob\/master\/src\/utils.js\">tutaj<\/a><\/noindex>. Nale\u017cy spojrze\u0107 na funkcj\u0119 <b>utils.beautifySongTitle()<\/b>.<\/p>\n<p>Zgodno\u015b\u0107 kluczy jest okre\u015blon\u0105 w ustawieniach w\u0119z\u0142a warto\u015bci\u0105 procentow\u0105. Na przyk\u0142ad warto\u015b\u0107 0.85 oznacza, \u017ce je\u015bli funkcja por\u00f3wnania kluczy (nazw utwor\u00f3w) wykryje podobie\u0144stwo wi\u0119ksze ni\u017c 85%, to jest to ta sama piosenka.<\/p>\n<p>Algorytm okre\u015blania podobie\u0144stwa znajduje si\u0119 tam\u017ce, w funkcji <b>utils.getSongSimilarity()<\/b>.<\/p>\n<p>Ok\u0142adka utworu, do p\u00f3\u017aniejszego uzyskania, jest r\u00f3wnie\u017c przymocowywana za pomoc\u0105 tag\u00f3w (<b>APIC<\/b>). W narz\u0119dziach (utils) znajduj\u0105 si\u0119 wszystkie niezb\u0119dne metody do uzyskania i przetwarzania tag\u00f3w.<\/p>\n<p>Przyk\u0142ad pracy z magazynem przez klienta mo\u017cna zobaczy\u0107 w <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/museria\">readme<\/a><\/noindex>.<\/p>\n<blockquote><p>Wszystkie powy\u017csze warstwy s\u0105 samowystarczalne i mog\u0105 by\u0107 u\u017cywane oddzielnie jako ni\u017csze warstwy dla innych projekt\u00f3w. Na przyk\u0142ad, ju\u017c teraz mo\u017cna my\u015ble\u0107 o stworzeniu warstwy do przechowywania ksi\u0105\u017cek.<\/p><\/blockquote>\n<p>\n<b>museria-global<\/b> \u2014 to ju\u017c skonfigurowane repozytorium git do uruchomienia w\u0142asnego w\u0119z\u0142a w globalnej sieci muzyki. Klonujesz, <b>npm i &amp;&amp; npm<\/b> start i w\u0142a\u015bciwie to wszystko. Mo\u017cna skonfigurowa\u0107 bardziej szczeg\u00f3\u0142owo, uruchomi\u0107 w dockerze itd. Szczeg\u00f3\u0142owe informacje s\u0105 dost\u0119pne na <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/museria-global#museria-global-storage-alpha-\">githubie<\/a><\/noindex>.<\/p>\n<p>Kiedy repozytorium jest aktualizowane, nale\u017cy zaktualizowa\u0107 r\u00f3wnie\u017c sw\u00f3j w\u0119ze\u0142. Je\u015bli zmienia si\u0119 g\u0142\u00f3wny lub podrz\u0119dny numer wersji, to dzia\u0142anie jest obowi\u0105zkowe, w przeciwnym razie stare w\u0119z\u0142y b\u0119d\u0105 ignorowane przez sie\u0107.<\/p>\n<p>Z piosenkami mo\u017cna pracowa\u0107 r\u0119cznie i programowo. Ka\u017cdy w\u0119ze\u0142 uruchamia serwer do r\u00f3\u017cnych zada\u0144. W tym r\u00f3wnie\u017c, przy odwiedzeniu domy\u015blnego punktu ko\u0144cowego, otrzymasz interfejs do pracy z muzyk\u0105. Na przyk\u0142ad, mo\u017cna wej\u015b\u0107 na <noindex><a rel=\"nofollow\" href=\"http:\/\/storage.museria.com\">g\u0142\u00f3wny w\u0119ze\u0142<\/a><\/noindex> (link mo\u017ce by\u0107 nieaktualny p\u00f3\u017aniej, w\u0119z\u0142y wej\u015bciowe mo\u017cna r\u00f3wnie\u017c uzyska\u0107 w <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/museria\">telegramie<\/a><\/noindex>, albo sprawdzi\u0107 aktualizacje na githubie).<\/p>\n<p>W ten spos\u00f3b mo\u017cesz wyszukiwa\u0107 i pobiera\u0107 piosenki w magazynie. Pobieranie piosenek mo\u017ce odbywa\u0107 si\u0119 w dw\u00f3ch trybach: zwyk\u0142ym i moderowanym. Drugi tryb oznacza, \u017ce prace prowadzi cz\u0142owiek, a nie program. A je\u015bli zaznaczysz ten checkbox podczas dodawania, to b\u0119dziesz musia\u0142 rozwi\u0105za\u0107 CAPTCHA. Piosenki mo\u017cna dodawa\u0107 z priorytetami -1, 0 lub 1. Priorytet 1 mo\u017cna ustawi\u0107 tylko w trybie moderowanym. Priorytety s\u0105 potrzebne, aby magazyn efektywniej podejmowa\u0142 decyzje, co zrobi\u0107, gdy pr\u00f3bujesz zast\u0105pi\u0107 istniej\u0105c\u0105 piosenk\u0119 now\u0105. Im wy\u017cszy priorytet, tym wi\u0119ksze szanse, \u017ce zast\u0105pisz istniej\u0105cy plik. Pomaga to zwalcza\u0107 spam i zwi\u0119ksza jako\u015b\u0107 pobieranych piosenek. <\/p>\n<p>Je\u015bli zaczniesz dodawa\u0107 piosenki do magazynu, staraj si\u0119 do\u0142\u0105cza\u0107 tak\u017ce obrazy (ok\u0142adki), mimo \u017ce to pole nie jest obowi\u0105zkowe. W 99% przypadk\u00f3w pierwsze zdj\u0119cia w Google po nazwach piosenek to ok\u0142adki album\u00f3w.<\/p>\n<p>Jak technicznie odbywa si\u0119 dodawanie plik\u00f3w, w skr\u00f3cie:<\/p>\n<ul>\n<li>Klient otrzymuje adres wolnego w\u0119z\u0142a, kt\u00f3ry na jaki\u015b czas stanie si\u0119 koordynatorem.<\/li>\n<li>Funkcja dodawania piosenki (przez cz\u0142owieka lub kod) jest wywo\u0142ywana, nast\u0119puje zapytanie o dodanie do punktu ko\u0144cowego koordynatora.<\/li>\n<li>Koordynator oblicza, ile duplikat\u00f3w nale\u017cy zachowa\u0107 (parametr konfigurowalny).<\/li>\n<li>Szukane s\u0105 najbardziej odpowiednie w\u0119z\u0142y do przechowywania.<\/li>\n<li>Plik bezpo\u015brednio trafia na te w\u0119z\u0142y. <\/li>\n<\/ul>\n<p>\nJak technicznie odbywa si\u0119 pobieranie plik\u00f3w:<\/p>\n<ul>\n<li>Klient otrzymuje adres wolnego w\u0119z\u0142a, kt\u00f3ry na jaki\u015b czas stanie si\u0119 koordynatorem.<\/li>\n<li>Funkcja pobierania piosenki (przez cz\u0142owieka lub kod) jest wywo\u0142ywana, nast\u0119puje zapytanie o pobranie do punktu ko\u0144cowego koordynatora.<\/li>\n<li>Koordynator sprawdza dost\u0119pno\u015b\u0107 linku w pami\u0119ci podr\u0119cznej. Je\u015bli taki istnieje i jest aktywny, zostaje od razu zwr\u00f3cony klientowi, w przeciwnym razie w\u0119z\u0142y s\u0105 zapytane o dost\u0119pno\u015b\u0107.<\/li>\n<li>Rozpoczyna si\u0119 pobieranie pliku z linku, je\u015bli taki istnieje. <\/li>\n<\/ul>\n<p><\/p>\n<h3>Alternatywy dla tw\u00f3rc\u00f3w muzyki<\/h3>\n<p>\nZawsze interesowa\u0142o mnie, jak obiektywnie mo\u017cna oceni\u0107 warto\u015b\u0107 wielu dzie\u0142 tw\u00f3rczych? Dlaczego na przyk\u0142ad cz\u0142owiek wycenia sw\u00f3j album muzyczny na 10$? Albo na 20$ lub 100$? Gdzie jest algorytm? Kiedy m\u00f3wimy o fizycznym produkcie lub nawet wielu rodzajach us\u0142ug, przynajmniej mo\u017cemy obliczy\u0107 koszty produkcji i na tym si\u0119 opiera\u0107. <\/p>\n<p>OK, za\u0142\u00f3\u017cmy, \u017ce ustalono 10$. Czy to jest naprawd\u0119 efektywne? Za\u0142\u00f3\u017cmy, \u017ce przes\u0142ucha\u0142em album gdzie\u015b lub piosenk\u0119 z niego i postanowi\u0142em podzi\u0119kowa\u0107. Jednak wed\u0142ug moich odczu\u0107 i w\u0142asnych mo\u017cliwo\u015bci 3$ to moja maksymalna kwota. Jak w takim razie post\u0105pi\u0107? Prawdopodobnie po prostu nic nie zrobi\u0119, jak wi\u0119kszo\u015b\u0107 ludzi. <\/p>\n<p>Ustalaj\u0105c jak\u0105\u015b sta\u0142\u0105 cen\u0119 za tw\u00f3rczy trud, po prostu ograniczasz si\u0119, nie pozwalaj\u0105c wi\u0119kszej liczbie ludzi wp\u0142aci\u0107 ci mniejszych kwot, kt\u00f3re w sumie mog\u0105 by\u0107 bardziej znacz\u0105ce ni\u017c od tych, kt\u00f3rzy kupi\u0105 to po ustalonej przez ciebie cenie. Uwa\u017cam, \u017ce tw\u00f3rczo\u015b\u0107 to w\u0142a\u015bnie ta dziedzina, w kt\u00f3rej w pierwszej kolejno\u015bci powinny dominowa\u0107 datki. \u017beby to osi\u0105gn\u0105\u0107 potrzebne jest:<\/p>\n<ul>\n<li>Nauczy\u0107 ludzi, jak dzi\u0119kowa\u0107 w taki spos\u00f3b. Tw\u00f3rcy powinni jasno pokazywa\u0107, \u017ce chcieliby otrzymywa\u0107 datki, dodaj\u0105c wsz\u0119dzie linki do r\u00f3\u017cnych metod p\u0142atno\u015bci itd.<\/li>\n<li>Potrzebujemy wi\u0119cej mechanizm\u00f3w do uproszczenia i wzmocnienia tych proces\u00f3w. Na przyk\u0142ad stworzy\u0107 pewn\u0105 globaln\u0105 stron\u0119, na kt\u00f3r\u0105 mo\u017cna wp\u0142aca\u0107 datki za tw\u00f3rczo\u015b\u0107 za pomoc\u0105 link\u00f3w autorskich.\n<p>Za\u0142\u00f3\u017cmy, \u017ce link wygl\u0105da mniej wi\u0119cej tak: <\/p>\n<p><b><code>http:\/\/someartistsdonationsite.site\/category\/artist?external-info<\/code><\/b><\/p>\n<p>Je\u015bli zaw\u0119zi\u0107 do muzyk\u00f3w, to:<\/p>\n<p><b><code>http:\/\/someartistsdonationsite.com\/music\/miyagi?song=blabla<\/code><\/b><\/p>\n<p>Wykonawca musi zweryfikowa\u0107 sw\u00f3j pseudonim i przypisa\u0107 si\u0119 do niego.<\/p>\n<p>W kliencie museria dodajemy funkcj\u0119 generowania takich link\u00f3w, a wszystkie projekty korzystaj\u0105ce z magazynu mog\u0105 umieszcza\u0107 na swoich stronach\/aplikacjach przyciski do datk\u00f3w z tymi linkami obok piosenek. U\u017cytkownicy maj\u0105 mo\u017cliwo\u015b\u0107 bardzo szybkie i proste wp\u0142acenie datku. Oczywi\u015bcie, to podej\u015bcie mo\u017cna wykorzysta\u0107 w ka\u017cdym projekcie i kategorii tw\u00f3rczo\u015bci, nie tylko przez magazyn.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Dlaczego, dok\u0142adnie ty, muzyczne magazynie, i jak mo\u017cna w tym uczestniczy\u0107?<\/h3>\n<p><\/p>\n<ul>\n<li>Je\u015bli pracujesz nad projektem zwi\u0105zanym z muzyk\u0105 lub planujesz taki stworzy\u0107, to wszystko po to, aby to zrealizowa\u0107. Mo\u017cesz u\u017cywa\u0107 muserii do przechowywania i pobierania utwor\u00f3w, zwi\u0119kszaj\u0105c strumie\u0144 muzyki w sieci. Je\u015bli masz mo\u017cliwo\u015b\u0107 uruchomienia i utrzymania przynajmniej jednego w\u0142asnego w\u0119z\u0142a, to b\u0119dzie to najlepszy wk\u0142ad w rozw\u00f3j sieci.<\/li>\n<li>Mo\u017ce jeste\u015b got\u00f3w podj\u0105\u0107 inn\u0105 rol\u0119: pom\u00f3c w kodowaniu, moderowa\u0107 baz\u0119 danych, rozpowszechnia\u0107 informacje o projekcie w\u015br\u00f3d znajomych itd.<\/li>\n<li>Mo\u017ce spodoba\u0142a ci si\u0119 ta idea i chcesz wesprze\u0107 j\u0105 finansowo, aby mog\u0142a istnie\u0107 i rozwija\u0107 si\u0119. Im wi\u0119cej w\u0119z\u0142\u00f3w, tym wi\u0119cej utwor\u00f3w.<\/li>\n<li>Lub po prostu pewnego momentu mo\u017cesz potrzebowa\u0107 znale\u017a\u0107 i pobra\u0107 piosenk\u0119. Mo\u017cesz to zrobi\u0107 bardzo \u0142atwo, na przyk\u0142ad przez <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/MuseriaBot\">bota telegramowego.<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>\nProjekt jest obecnie na najwcze\u015bniejszym etapie. Uruchomiona zosta\u0142a sie\u0107 testowa, w\u0119z\u0142y mog\u0105 cz\u0119sto si\u0119 restartowa\u0107, wymaga\u0107 aktualizacji itd. W przypadku braku krytycznych problem\u00f3w w trakcie okresu oceny, ta sama sie\u0107 zostanie przekszta\u0142cona w g\u0142\u00f3wn\u0105.<\/p>\n<p>Informacje o w\u0119\u017ale na zewn\u0105trz: liczba utwor\u00f3w, wolne miejsce itd. mo\u017cna znale\u017a\u0107 pod linkiem w formacie <b><code>http:\/\/node-address\/status<\/code><\/b> lub <b><code>http:\/\/node-address\/status?pretty<\/code><\/b><\/p>\n<p>Moje kontakty:<\/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\">Grupa na Telegramie w j\u0119zyku angielskim.<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/museria.com\/\">No i strona, dzi\u0119ki kt\u00f3rej ta idea si\u0119 zrodzi\u0142a.<\/a><\/noindex><\/li>\n<\/ul>\n<p>\u0179r\u00f3d\u0142o: <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.1.1 - 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\/pl\/blog\/administrirovanie\/museria-deczentralizovannoe-hranilishhe-muzyki\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\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\/pl\/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 zdecentralizowane przechowywanie muzyki | ProHoster","description":"Pewnego razu postanowi\u0142em napisa\u0107 aplikacj\u0119, aby.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/museria-deczentralizovannoe-hranilishhe-muzyki","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","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\/pl\/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\/pl\/wp-json\/wp\/v2\/posts\/80222","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=80222"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/80222\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/80223"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=80222"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=80222"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=80222"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}