
Един ден реших да напиша приложение, за да избирам музика за себе си и да я слушам у дома/на улицата/тренировки и т.н. И така, че всичко това да работи в поток, с минимално мое участие. Измислих архитектура, скицирах прототип и в крайна сметка се натъкнах на един „малък проблем“.
И не е ясно къде да получите самите файлове с песни. По това време VKontakte вече беше затворил api, на големите музикални портали всичко също беше заглушено, дори песните бяха раздадени на парчета, за да не бъдат анализирани. Всичко, което остана, бяха отделни сайтове за летящи нощи с тон реклами и всякакви боклуци, всякакви съмнителни програми за грабване и други „мръсни“ опции. Като цяло, нито едно наистина добро решение. Можете, разбира се, да закупите абонамент за музика на Yandex или други подобни. Но отново, никъде няма отворен публичен API и нямате програмен достъп до музика. Няколко големи компании по същество ограничиха достъпа на другите до музика. Защо изобщо се случи това? Задълбочавайки се, става ясно, че основният проблем е авторското право. Настоящото решение под формата на абонаменти устройва много автори на комерсиална музика и същите тези компании. В същото време некомерсиалната и полукомерсиалната музика също попада в общия списък. Или плащате за всичко, или не слушате нищо.
И започнах да мисля какво да правя с всичко това. Как можем да организираме безплатното разпространение на музика? Какво бих направил, ако сам създавах музика и исках да правя пари от това? Ще ми хареса ли песните ми да са пиратски? Какво алтернативно решение има все пак?
В резултат на това има два основни проблема, които трябва да бъдат решени:
- Организиране на безплатно разпространение на музика чрез удобни за повечето хора методи, включително софтуер.
- Предлагане на алтернативи за създателите на музика да правят пари
Глобално децентрализирано съхранение на музика
Първоначално се опитах да намеря съществуващи решения и да създам всичко въз основа на тях. След известно време на търсене първата, която ми хареса беше . Започнах да прилагам идеята си, но след известно време открих няколко критични проблема в това решение:
- Ipfs - хранилище за всичко и всеки. Има изображения, музика и видеоклипове и всичко, което искате. Като цяло, такава голяма планетарна „кофа за боклук“. Следователно, когато стартирате своя възел, веднага получавате огромно натоварване. Колата просто се гърчи от болка.
- Някакъв недовършен механизъм за събиране на „боклук“. Не знам как е сега, но в този момент, ако сте написали в конфигурацията, че искате да ограничите съхранението до десет гигабайта данни, това не означава нищо. Съхранението нарасна, пренебрегвайки много конфигурационни параметри. В резултат на това беше необходимо да има огромен резерв от твърд диск, докато ipfs не измисли как да нулира ненужното.
- По време на използването на библиотеката (не знам как е сега), клиентът не е имал внедрени изчаквания. Изпращате заявка за получаване на файл и ако той не съществува, просто висите. Разбира се, хората измислиха всякакви заобиколни решения, които частично решиха проблема, но това бяха патерици. Тези неща трябва да излязат от кутията.
Все още имаше много дребни проблеми и впечатлението беше ясно: това не може да се използва за проекта. Продължих да търся съоръжение за съхранение, проучвайки различни опции, но така и не намерих нищо подходящо.
В крайна сметка реших, че си струва да опитам сам да напиша децентрализирано хранилище. Дори и да не претендира да бъде междупланетен, той ще реши конкретен проблем.
И така се оказа , , , , .
разпространяващ се - това е основният, най-нисък слой, който ви позволява да комбинирате възли в мрежа. Той съдържа алгоритъм, който досега съм внедрил частично на базата на около 10000 XNUMX сървъра. Пълната версия на алгоритъма е много по-трудна за изпълнение и ще изисква няколко допълнителни месеца (може би повече).
Няма да описвам подробно разпръскването в тази статия; по-добре е някой ден да напиша отделна. Тук само ще отбележа някои функции:
- Работи през http/https.
- Можете да създадете отделна мрежа за конкретна задача, което значително ще намали натоварването на всеки отделен проект, отколкото ако всички бяха в една и съща мрежа.
- Първоначално беше обмислен механизъм с изчакване и други малки неща. И това работи за всички методи както в клиента, така и във възела. Можете гъвкаво да управлявате настройките от вашето приложение.
- Библиотеката е написана на nodejs. Проблемите с производителността на стека се компенсират от неговия децентрализиран характер. Натоварването може да бъде „разпределено“ чрез увеличаване на броя на възлите. В замяна има много предимства: огромна общност, простота и лекота на използване, изоморфен клиент, липса на външни зависимости и т.н.
хранилище е слой, наследен от spreadable, който ви позволява да съхранявате файлове в мрежата. Всеки файл има собствен хеш на съдържанието си, който може да се използва за извличане по-късно. Файловете не се разделят на блокове, а се съхраняват изцяло.
метастокъл - слой, наследен от spreadable, който ви позволява да съхранявате данни в мрежата, но не и файлове. Интерфейсът е подобен на Nosql база данни. Можете например да добавите файл към storacle, да получите неговия хеш и да го запишете в metastocle с връзка към нещо.
музерия - наследени от сторакла и метастокла. Този слой е пряко отговорен за съхраняването на музика. Паметта работи само с mp3 файлове и id3 тагове.
Като „ключ” към песента във формата се използва пълното й име Изпълнител (TPE1) - Заглавие (TIT2), Например:
- Бримстоун - Бремето
- Hi-rez - Lost My Way (feat. Emilio Rojas, Dani Devinci)
Можете да разберете възможно най-подробно как се формират заглавията на песните. . Трябва да погледнете функцията utils.beautifySongTitle().
Процентът съвпадения, дефиниран в настройките на възела, се счита за съвпадение. Например, стойност от 0.85 означава, че ако функцията за сравняване на ключове (имена на песни) намери сходство от повече от 85%, тогава това е една и съща песен.
Алгоритъмът за определяне на подобието е там, във функцията utils.getSongSimilarity().
Кавърът на песента, за по-късно получаване, може да се прикачи и чрез тагове (APIC). Помощните програми имат всички необходими методи за получаване и обработка на тагове.
Пример за работа със съхранение чрез клиент може да бъде намерен в .
Всички горепосочени слоеве са самостоятелни и могат да се използват отделно като по-ниски слоеве за други проекти. Например вече има идея да се направи слой за съхранение на книги.
museria-global е вече конфигурирано git хранилище за стартиране на ваш собствен възел в глобалната музикална мрежа. Клониране npm i && npm започнете и това е общо взето. Можете да го конфигурирате по-подробно, да го стартирате в Docker и т.н. Подробна информация е достъпна на .
Когато хранилището се актуализира, трябва да актуализирате своя възел. Ако номерът на основната или второстепенната версия се промени, тогава това действие е задължително, в противен случай старите възли ще бъдат игнорирани от мрежата.
Можете да работите с песни ръчно и програмно. Всеки възел изпълнява сървър за различни задачи. Включително, когато посетите крайната точка по подразбиране, ще получите интерфейс за работа с музика. Например, можете да отидете на (връзката може да не е подходяща по-късно, входните възли също могат да бъдат получени в или потърсете актуализации в Github).
По този начин можете да търсите и качвате песни в хранилището. Качването на песни може да се извърши в два режима: нормален и модериран. Вторият режим означава, че работата се извършва от човек, а не от програма. И ако поставите отметка в това квадратче, когато добавяте, ще трябва да разрешите captcha. Песни могат да се добавят с приоритети -1, 0 или 1. Приоритет 1 може да се задава само в модериран режим. Необходими са приоритети, така че хранилището да може по-ефективно да решава какво да прави, когато се опитате да замените съществуваща песен с нова. Колкото по-висок е приоритетът, толкова по-вероятно е да презапишете съществуващ файл. Това помага в борбата със спама и повишава качеството на изтеглените песни.
Ако започнете да добавяте песни към хранилището си, опитайте да прикачите изображения (кавър), въпреки че това поле не е задължително. В 99% от случаите първите изображения в Google въз основа на заглавията на песните са обложки на албуми.
Как технически се извършва добавянето на файлове, накратко:
- Клиентът получава адреса на свободен възел, който за известно време ще стане координатор.
- Задейства се функцията за добавяне на песен (от човек или код) и се прави заявка за добавяне на координатор към крайната точка.
- Координаторът изчислява колко дубликати трябва да бъдат съхранени (конфигурируем параметър).
- Търсят се най-подходящите възли за запис.
- Файлът отива директно към тези възли.
Как технически се получават файловете:
- Клиентът получава адреса на свободен възел, който за известно време ще стане координатор.
- Задейства се функцията за получаване на песен (от човек или код) и се прави заявка за получаването й в крайната точка на координатора.
- Координаторът проверява за наличието на връзката в кеша. Ако има и работи, веднага се връща на клиента, в противен случай възлите се анкетират за наличност.
- Файлът се получава от линка, ако се намери такъв.
Алтернативи за създателите на музика
Винаги ме е интересувал въпросът как може обективно да се оцени стойността на много творчески произведения? Защо, например, човек предлага музикалния си албум за 10 долара? Или за $20 или $100. Къде е алгоритъмът? Когато, например, говорим за някакъв физически продукт или дори за много видове услуги, тогава можем поне да изчислим себестойността и да изхождаме от това.
Добре, да кажем, че залагаме $10. Това много ли е ефективно? Да кажем, че съм слушал албум някъде или песен от там и съм решил да покажа своята благодарност. Но според моите усещания и собствените ми възможности, 3$ са моят таван. И така, какво трябва да направим? Най-вероятно просто няма да направя нищо, както повечето хора.
Определяйки някаква фиксирана цена за творческа работа, вие просто се ограничавате, предотвратявайки по-голям брой хора да ви изпращат по-малко пари, което общо може да бъде по-впечатляващо от тези, които ще купят на цената, която сте задали. Струва ми се, че креативността е точно сферата, в която дарителството трябва да властва на първо място. За да направите това ви трябва:
- Научете хората да благодарят по този начин. Самите създатели трябва ясно да покажат, че биха искали да получават дарения, да добавят връзки към различни методи на плащане навсякъде и т.н.
- Необходими са повече механизми за опростяване и укрепване на тези процеси. Например, създайте някакъв глобален уебсайт, където можете да дарите за творчество, като използвате връзки за авторски права.
Да приемем, че връзката е нещо подобно:
http://someartistsdonationsite.site/category/artist?external-infoАко го ограничим до музикантите, тогава:
http://someartistsdonationsite.com/music/miyagi?song=blablaИзпълнителят трябва да потвърди псевдонима си и да го прикачи.
Добавяме функция за генериране на такава връзка към клиента на museria и всички проекти, използващи хранилището, могат да поставят бутони за дарения с тези връзки до песните на своите уебсайтове/приложения. Потребителите имат възможност да направят дарение много бързо и лесно. Естествено, този подход може да се използва във всеки проект и категория на творчеството, не само чрез съхранение.
Защо точно имате нужда от съоръжение за съхранение на музика и как можете да участвате в него?
- Ако работите върху проект, свързан с музика, или планирате да създадете такъв, тогава всичко е предназначено за това. Можете да използвате museria за съхраняване и извличане на песни, увеличавайки потока от песни онлайн. Ако в същото време имате способността да повдигнете и задържите поне един свой възел, тогава това ще бъде най-добрият принос за развитието на мрежата.
- Може би сте готови да поемете друга роля: да помогнете с кода или да попълните и модерирате базата данни, да разпространите информация за проекта на вашите приятели и т.н.
- Може би идеята ви е харесала и сте готови да помогнете финансово, така че всичко да живее и да се развива. Колкото повече възли, толкова повече песни.
- Или просто трябва да намерите и изтеглите песен в даден момент. Можете да направите това много просто, например чрез .
Проектът вече е в начален етап. Беше стартирана тестова мрежа, възлите може да се рестартират често, да изискват актуализации и т.н. Ако няма критични проблеми по време на периода на оценка, същата тази мрежа се трансформира в основна.
Можете да видите информация за възела отвън: броя на песните, свободното място и т.н., като използвате връзка като http://node-address/status или http://node-address/status?pretty
Моите контакти:
Източник: www.habr.com
