
Eines Tages beschloss ich, eine App zu entwickeln, um Musik für mich auszuwählen und sie zu Hause, draußen, beim Training usw. zu hören. Ich entwarf die Architektur, skizzierte einen Prototyp und stieß letztendlich auf ein "kleines Problem".
Es ist unklar, woher man die Musikdateien bekommen soll. Inzwischen hat ВКонтакте bereits die API geschlossen, und auch auf großen Musikportalen ist es ganz still. Selbst die Lieder werden nur in Teilen bereitgestellt, um das Parsen zu verhindern. Es blieben nur einige zwielichtige Ein-Seiten-Websites mit jeder Menge Werbung und Schrott sowie fragwürdige Grabber-Programme und andere "schmutzige" Optionen. Im Grunde gibt es keine echten, guten Lösungen. Natürlich kann man ein Abonnement für einen Musikdienst wie Yandex.Music oder Ähnliches erwerben. Aber auch dort gibt es keine offene, öffentliche API, und man hat keinen programmgesteuerten Zugang zur Musik. Mehrere große Firmen haben de facto den Zugang zur Musik für andere eingeschränkt. Wie kam es überhaupt dazu? Bei näherer Betrachtung wird offensichtlich, dass das Hauptproblem in den Urheberrechten liegt. Die aktuelle Lösung in Form von Abonnements ist für viele kommerzielle Urheber von Musikwerken und die entsprechenden Firmen akzeptabel. Dabei fallen auch nicht-kommerzielle und bedingt kommerzielle Musikstücke in die allgemeine Liste. Entweder man bezahlt für alles oder man hört überhaupt nichts.
Ich begann darüber nachzudenken, was ich mit all dem tun sollte. Wie kann man die freie Verbreitung von Musik organisieren? Was würde ich tun, wenn ich selbst Musik erstellen würde und damit Geld verdienen möchte? Würde es mir gefallen, wenn meine Lieder auf illegale Weise verbreitet würden? Gibt es überhaupt alternative Lösungen?
Letztendlich gibt es zwei Hauptprobleme, die gelöst werden müssen:
- Die Organisation der freien Verbreitung von Musik auf für die meisten Menschen bequeme Weise, einschließlich technischer Lösungen.
- Das Angebot von Alternativen für Musikschaffende, um Geld zu verdienen.
Ein globaler, dezentralisierter Musikspeicher.
Zunächst versuchte ich, bereits bestehende Lösungen zu finden und alles darauf aufzubauen. Nach einigem Suchen fiel mir als erstes auf. Ich begann mit der Umsetzung meiner Idee, stellte jedoch nach einiger Zeit mehrere kritische Probleme mit dieser Lösung fest:
- Ipfs ist ein Speicher für alles Mögliche. Hier gibt es Bilder, Musik, Videos und alles, was man sich vorstellen kann. Im Grunde genommen eine große planetarische "Müllhalde". Daher erhält man, sobald man seinen eigenen Knoten startet, sofort eine enorme Belastung. Die Maschine kämpft einfach ums Überleben.
- Ein unvollständiger Mechanismus zur Erstellung von 'Müll'. Ich weiß nicht, wie das heute aussieht, aber damals bedeutete es nichts, wenn man in der Konfiguration angegeben hat, dass man den Speicher auf zehn Gigabyte Daten beschränken möchte. Der Speicher wuchs, ignorierte viele Konfigurationsparameter. Am Ende musste man viel Platz auf der Festplatte haben, während IPFS herausfand, wie man den unnötigen Datenmüll loswird.
- Zum Zeitpunkt der Nutzung der Bibliothek (ich weiß nicht, wie es jetzt ist) hatte der Client keine Timeout-Implementierungen. Man schickt eine Anfrage, um eine Datei zu erhalten, und wenn sie nicht da ist, hängt man einfach. Natürlich haben die Leute verschiedene Umgehungslösungen gefunden, die das Problem teilweise lösten, aber das waren eher Notlösungen. Solche Dinge sollten von Anfang an funktionieren.
Es gab noch viele kleinere Probleme, und der Eindruck war eindeutig: Das kann man nicht für ein Projekt verwenden. Ich setzte meine Suche nach einem Speicher fort, untersuchte verschiedene Optionen, fand aber nichts Geeignetes.
Schließlich kam ich zu dem Entschluss, dass ich versuchen sollte, selbst ein dezentrales Speichersystem zu schreiben. Es muss nicht interplanetarisch sein, aber es sollte die spezifische Aufgabe erfüllen.
So entstanden , , , , .
spreadable — ist die Grundlage, die es ermöglicht, Knoten in ein Netzwerk zu integrieren. Darin ist ein Algorithmus implementiert, den ich bisher teilweise für etwa 10.000 Server realisiert habe. Die vollständige Version des Algorithmus ist viel komplexer in der Umsetzung und würde zusätzliche Monate (vielleicht sogar mehr) erfordern.
Ich werde nicht ausführlich darauf eingehen, besser schreibe ich irgendwann einen separaten Artikel. Hier möchte ich nur einige Besonderheiten hervorheben:
- Funktioniert über http/https.
- Es können separate Netzwerke für spezifische Aufgaben erstellt werden, wodurch die Last auf jedes einzelne Projekt erheblich reduziert wird, im Vergleich zu einer gemeinsamen Netzwerkstruktur.
- Ursprünglich wurde ein Mechanismus mit Timeouts und anderen Feinheiten durchdacht. Und das funktioniert für alle Methoden, sowohl im Client als auch im Knoten. Parameter können flexibel aus Ihrer Anwendung gesteuert werden.
- Die Bibliothek ist in Node.js geschrieben. Leistungsprobleme des Stacks werden durch die dezentrale Natur kompensiert. Die Last kann durch Erhöhung der Anzahl der Knoten 'verteilt' werden. Im Gegenzug gibt es viele Vorteile: eine riesige Community, einfache und komfortable Nutzung, isomorpher Client, keine externen Abhängigkeiten usw.
storacle — ist eine von spreadable abgeleitete Schicht, die es ermöglicht, Dateien im Netzwerk zu speichern. Jede Datei hat ihren eigenen Hash basierend auf ihrem Inhalt, über den sie später abgerufen werden kann. Die Dateien werden nicht in Blöcke unterteilt, sondern vollständig gespeichert.
metastocle — ist eine von spreadable abgeleitete Schicht, die es ermöglicht, Daten im Netzwerk zu speichern, aber keine Dateien. Die Schnittstelle ähnelt NoSQL-Datenbanken. Man kann zum Beispiel eine Datei in storacle hinzufügen, ihren Hash abrufen und ihn in metastocle in Verbindung mit etwas aufzeichnen.
museria — wird von storacle und metastocle abgeleitet. Diese Schicht ist direkt verantwortlich für die Speicherung von Musik. Das Speicherformat arbeitet nur mit mp3-Dateien und id3-Tags.
Als "Schlüssel" zum Song wird der vollständige Titel in der Form Künstler (TPE1) — Titel (TIT2)verwendet. Zum Beispiel:
- Brimstone — The Burden
- Hi-rez — Lost My Way (feat. Emilio Rojas, Dani Devinci)
Um herauszufinden, wie die Titel von Songs gebildet werden, kann man nachsehen, welche Funktion utils.beautifySongTitle().
Eine Übereinstimmung nach Schlüsseln gilt als Prozentsatz, der in den Node-Einstellungen definiert ist. Zum Beispiel bedeutet der Wert 0.85, dass, wenn die Funktion zur Vergleichsprüfung von Schlüsseln (Songtiteln) eine Ähnlichkeit von mehr als 85% festgestellt hat, es sich um denselben Song handelt.
Der Algorithmus zur Bestimmung der Ähnlichkeit befindet sich ebenfalls in der Funktion utils.getSongSimilarity().
Cover für das Lied, um anschließend auch über Tags angehängt zu werden (APIC). In den Utilities (utils) gibt es alle notwendigen Methoden zum Abrufen und Verarbeiten von Tags.
Ein Beispiel für den Umgang mit dem Speicher über den Client finden Sie in .
Alle oben genannten Schichten sind eigenständig und können separat als niedrigere Schichten für andere Projekte verwendet werden. Zum Beispiel gibt es bereits die Idee, eine Schicht für die Speicherung von Büchern zu erstellen.
museria-global — dies ist bereits ein konfiguriertes Git-Repository zum Starten eines eigenen Knotens im globalen Musiknetzwerk. Klonen Sie, npm i && npm start und das war's im Wesentlichen. Es kann detaillierter konfiguriert werden, in Docker gestartet werden usw. Detaillierte Informationen finden Sie auf .
Wenn das Repository aktualisiert wird, muss auch Ihr Knoten aktualisiert werden. Wenn die Haupt- oder Nebenversion geändert wird, ist dieser Schritt zwingend erforderlich, andernfalls werden alte Knoten vom Netzwerk ignoriert.
Sie können mit den Songs sowohl manuell als auch programmatisch arbeiten. Jeder Knoten startet einen Server für unterschiedliche Aufgaben. Wenn Sie den Standard-Endpunkt besuchen, erhalten Sie eine Benutzeroberfläche zum Arbeiten mit Musik. Zum Beispiel können Sie auf (der Link könnte später nicht mehr aktuell sein, die Eingangsnode können auch in , oder Sie können die Updates auf GitHub ansehen).
So können Sie Songs im Speicher suchen und hochladen. Der Upload von Songs kann in zwei Modi erfolgen: normal und moderiert. Der zweite Modus bedeutet, dass die Arbeit von einer Person und nicht von einem Programm durchgeführt wird. Wenn Sie dieses Kästchen beim Hinzufügen ankreuzen, müssen Sie ein Captcha lösen. Songs können mit Prioritäten -1, 0 oder 1 hinzugefügt werden. Priorität 1 kann nur im moderierten Modus vergeben werden. Prioritäten sind notwendig, damit der Speicher effizienter entscheiden kann, was zu tun ist, wenn Sie versuchen, einen bereits vorhandenen Song durch einen neuen zu ersetzen. Je höher die Priorität, desto größer sind die Chancen, dass Sie die bestehende Datei überschreiben. Dies hilft, Spam zu bekämpfen und die Qualität der hochgeladenen Songs zu erhöhen.
Wenn Sie beginnen, Songs im Speicher hinzuzufügen, versuchen Sie, auch Bilder (Cover) anzuhängen, auch wenn dieses Feld nicht obligatorisch ist. In 99 % der Fälle sind die ersten Bilder, die Sie bei Google unter den Songtiteln finden, Albumcover.
Wie das Hinzufügen von Dateien technisch abläuft, in Kürze:
- Der Kunde erhält die Adresse eines freien Knotens, der für eine gewisse Zeit als Koordinator fungiert.
- Die Funktion zum Hinzufügen eines Songs wird ausgelöst (durch eine Person oder einen Code), es erfolgt eine Anfrage zum Hinzufügen an den Endpunkt des Koordinators.
- Der Koordinator berechnet, wie viele Duplikate gespeichert werden müssen (konfigurierbarer Parameter).
- Die am besten geeigneten Knoten zum Speichern werden gesucht.
- Die Datei wird direkt an diese Knoten gesendet.
So erfolgt technisch das Abrufen von Dateien:
- Der Kunde erhält die Adresse eines freien Knotens, der für eine gewisse Zeit als Koordinator fungiert.
- Die Funktion zum Abrufen eines Songs wird ausgelöst (durch eine Person oder einen Code), es erfolgt eine Anfrage zum Abrufen an den Endpunkt des Koordinators.
- Der Koordinator überprüft, ob ein Link im Cache vorhanden ist. Wenn ja und er funktioniert, wird er sofort an den Kunden zurückgegeben, andernfalls werden die Knoten nach Verfügbarkeit befragt.
- Die Datei wird durch den Link abgerufen, sofern einer gefunden wurde.
Alternativen für Musikschaffende
Ich habe mich schon immer gefragt, wie man den Wert vieler kreativer Werke objektiv einschätzen kann. Warum zum Beispiel stellt jemand sein Musikalbum für 10 € aus? Oder für 20 € oder 100 €. Wo ist der Algorithmus? Wenn wir über ein physisches Produkt oder sogar viele Arten von Dienstleistungen sprechen, können wir mindestens die Kosten berechnen und darauf basieren.
Okay, sagen wir, 10 € wurden festgelegt. Ist das wirklich effektiv? Angenommen, ich habe irgendwo das Album oder einen Song daraus gehört und möchte danken. Aber nach meinem Gefühl und meinen Möglichkeiten sind 3 € mein Maximum. Was soll ich also tun? Wahrscheinlich werde ich einfach nichts tun, so wie die meisten Menschen.
Wenn du einen festen Preis für kreative Arbeit aufstellst, schränkst du dich einfach ein und gibst vielen Menschen nicht die Möglichkeit, dir geringere Beträge zu schicken, die insgesamt höher sein könnten als die, die bei dem von dir festgelegten Preis kaufen. Ich denke, Kreativität ist genau das Gebiet, in dem Spenden an erster Stelle stehen sollten. Dafür ist es notwendig:
- Menschen beizubringen, auf diese Weise zu danken, ist entscheidend. Die Kreativen müssen klar zeigen, dass sie Spenden wünschen, indem sie überall Links zu verschiedenen Zahlungsmethoden hinzufügen usw.
- Es braucht mehr Mechanismen, um diese Prozesse zu vereinfachen und zu verstärken. Zum Beispiel könnte man eine globale Website erstellen, auf der man kreativ arbeiten kann und durch spezielle Links spenden kann.
Angenommen, der Link sieht etwa so aus:
http://someartistsdonationsite.site/category/artist?external-infoWenn wir uns auf Musiker konzentrieren, dann:
http://someartistsdonationsite.com/music/miyagi?song=blablaDer Künstler muss seinen Nicknamen verifizieren und sich daran anheften.
Im Museria-Client fügen wir eine Funktion zur Generierung eines solchen Links hinzu, und alle Projekte, die das Speicherangebot nutzen, können auf ihren Websites/Apps Spenden-Buttons mit diesen Links neben den Songs platzieren. Benutzer haben die Möglichkeit, sehr schnell und einfach eine Spende zu machen. Natürlich kann dieser Ansatz in jedem Projekt und jeder kreativen Kategorie verwendet werden, nicht nur über das Speicherangebot.
Warum solltest gerade du ein Musikspeicher sein und wie kannst du teilnehmen?
- Wenn du an einem Musikprojekt arbeitest oder planst, eines zu erstellen, dann ist museria genau dafür gedacht. Du kannst museria nutzen, um Songs zu speichern und abzurufen, wodurch der Songfluss im Netzwerk erhöht wird. Wenn du in der Lage bist, mindestens einen eigenen Knoten hochzufahren und zu betreiben, wäre das der beste Beitrag zur Weiterentwicklung des Netzwerks.
- Vielleicht bist du bereit, eine andere Rolle zu übernehmen: Hilfe beim Kodieren, die Datenbank zu pflegen und zu moderieren, Informationen über das Projekt mit Freunden zu teilen usw.
- Vielleicht gefiel dir die Idee und du bist bereit, finanziell zu unterstützen, damit das Projekt lebt und sich weiterentwickelt. Je mehr Knoten vorhanden sind, desto mehr Songs können verfügbar sein.
- Oder du wirst einfach irgendwann auf der Suche nach einem Song sein. Du kannst das ganz einfach machen, zum Beispiel über einen .
Das Projekt befindet sich derzeit in der Anfangsphase. Ein Testnetz wurde gestartet, Knoten können häufig neu starten, Updates benötigen usw. Sofern es während des Einschätzungszeitraums keine kritischen Probleme gibt, wird dasselbe Netzwerk in das Hauptnetz überführt.
Information über den Knoten von außen ansehen: Anzahl der Songs, freier Speicherplatz usw. ist über einen Link wie folgt möglich http://node-address/status oder http://node-address/status?pretty
Meine Kontakte:
Quelle: habr.com
