Museria — archivio musicale decentralizzato

Museria — archivio musicale decentralizzato

Una volta mi sono messo a scrivere un'applicazione per selezionare musica per me stesso e ascoltarla a casa/su strada/in allenamento, ecc. E affinché tutto ciò funzionasse senza il mio intervento. Ho ideato un'architettura, ho abbozzato un prototipo e alla fine mi sono imbattuto in un 'piccolo problema'.

Ma non era chiaro da dove prendere i file delle canzoni. A quel punto, VKontakte aveva già chiuso l'API, anche nei grandi portali musicali non c'era nulla, nemmeno le canzoni venivano rilasciate in piccoli pezzi per evitare il parsing. Restavano solo alcuni siti usa e getta pieni di pubblicità e spazzatura, vari programmi-grabber dubbiosi e altre opzioni 'sporche'. In generale, non esisteva una vera e propria soluzione valida. Certo, posso acquistare un abbonamento a qualche servizio musicale come Yandex Music o simili. Ma di nuovo, non c'è un'API pubblica aperta e non hai accesso alla musica tramite programmi. Alcune grandi aziende, in sostanza, hanno bloccato l'accesso alla musica per il resto. Perché è successo tutto ciò? Addentrandomi, è diventato chiaro che il problema principale risiede nei diritti d'autore. L'attuale soluzione sotto forma di abbonamenti soddisfa molti autori commerciali di opere musicali e queste stesse aziende. Nel contempo, la musica non commerciale e quella di tipo semi-commerciale rientrano anch'esse nella lista generale. O paghi per tutto, o non ascolti nulla.

E ho iniziato a riflettere su cosa farne. Come posso organizzare la distribuzione libera della musica? Cosa farei se fossi io a creare musica e volessi guadagnarci? Mi piacerebbe se le mie canzoni venissero diffuse in modo pirata? Quali sono le soluzioni alternative in generale?

Così si sono presentati due problemi principali da risolvere:

  • Organizzazione della distribuzione libera della musica con metodi convenienti per la maggior parte delle persone, compresi quelli software.
  • Offrire alternative agli autori musicali per guadagnare

Un archivio musicale globale e decentralizzato

Inizialmente ho cercato di trovare soluzioni già esistenti e costruire tutto su questa base. Dopo un po' di tempo di ricerca, il primo che mi ha colpito è stato ipfs. Ho iniziato l'implementazione della mia idea, ma dopo un po' ho scoperto alcuni problemi critici in questa soluzione:

  • Ipfs è un archivio per tutto e per tutti. Qui ci sono immagini, musica, video e qualsiasi altra cosa. Insomma, una grande "discarica" planetaria. Quindi, quando avvii il tuo nodo, ricevi subito un'enorme carico di lavoro. La macchina si contorce dal dolore.
  • Qualche meccanismo incompleto per l'assemblaggio della "spazzatura". Non so come sia ora, ma in quel momento, se nel file di configurazione indicavi che volevi limitare l'archivio a dieci gigabyte di dati, questo non significava nulla. L'archivio cresceva, ignorando molti parametri di configurazione. Alla fine, bisognava avere un enorme spazio su disco, finché ipfs non capiva come eliminare il superfluo.
  • Al momento dell'utilizzo della libreria (non so come sia ora), il client non implementava i timeout. Inviavi una richiesta per ottenere un file, e se non era presente, semplicemente restavi bloccato. Naturalmente, le persone avevano trovato varie soluzioni alternative che in parte risolvevano il problema, ma erano dei palliativi. Queste cose dovrebbero funzionare già "fuori dalla scatola".

C'erano anche molti piccoli problemi, e la sensazione che si era creata era chiara: non si poteva utilizzare per un progetto. Ho continuato a cercare archivi, studiando diverse opzioni, ma non ho trovato nulla di adatto.

Alla fine, ho deciso che valeva la pena provare a scrivere un archivio decentralizzato da solo. Anche se non ambirà a essere interplanetario, risolverà un compito specifico.

E così sono nati spreadable, storacle, metastocle, museria, museria-global.

spreadable – questo è lo strato principale, il livello più basso, che consente di unire i nodi in una rete. È basato su un algoritmo che ho implementato parzialmente calcolando per circa 10.000 server. La versione completa dell'algoritmo è molto più complessa da implementare e richiederebbe alcuni mesi aggiuntivi (forse anche di più).

Non descriverò dettagliatamente spreadable in questo articolo, sarà meglio che ne scriva uno separato in un altro momento. Qui segnalerò solo alcune peculiarità:

  • Funziona tramite http/https.
  • È possibile creare una rete separata per specifici compiti, il che ridurrà notevolmente il carico su ogni singolo progetto, rispetto a quando sono tutti nella stessa rete.
  • È stato progettato un meccanismo con timeout e altre piccole cose fin dall'inizio. E funziona per tutti i metodi sia nel client che nel nodo. È possibile gestire in modo flessibile i parametri dalla propria applicazione.
  • La libreria è scritta in nodejs. I problemi di prestazioni dello stack sono compensati dalla natura decentralizzata. Il carico può essere "spalmato" aumentando il numero di nodi. In cambio ci sono molti vantaggi: una comunità enorme, semplicità e facilità d'uso, un client isomorfico, assenza di dipendenze esterne, ecc.

storacle — è uno strato ereditato da spreadable, che consente di memorizzare file in rete. Ogni file ha un proprio hash basato sul contenuto, tramite il quale può essere recuperato successivamente. I file non sono suddivisi in blocchi, ma memorizzati interamente.

metastocle — uno strato ereditato da spreadable, che consente di memorizzare dati in rete, ma non file. L'interfaccia è simile a un database nosql. È possibile, ad esempio, aggiungere un file in storacle, ottenere il suo hash e registrarlo in metastocle legato a qualcosa.

museria — è ereditato da storacle e metastocle. Questo strato si occupa direttamente della memorizzazione della musica. Lo storage funziona solo con file mp3 e tag id3.

Come "chiave" per la canzone viene utilizzato il suo titolo completo sotto forma di Artista (TPE1) — Titolo (TIT2). Ad esempio:

  • Brimstone — The Burden
  • Hi-rez — Lost My Way (feat. Emilio Rojas, Dani Devinci)

Per sapere nel dettaglio come vengono formati i titoli delle canzoni si può qui. Bisogna controllare la funzione utils.beautifySongTitle().

Una corrispondenza per chiavi è considerata una percentuale definita nelle impostazioni del nodo. Ad esempio, un valore di 0.85 significa che se la funzione di comparazione delle chiavi (titoli delle canzoni) rileva una somiglianza superiore all'85%, allora si tratta della stessa canzone.

L'algoritmo di determinazione della somiglianza si trova anch'esso nella funzione utils.getSongSimilarity().

La copertina della canzone, per un successivo recupero, deve essere ancorata anche tramite tag (APIC). Nelle utility (utils) ci sono tutti i metodi necessari per ottenere e elaborare i tag.

Un esempio di lavoro con lo storage tramite client può essere visto in readme.

Tutti gli strati sopra menzionati sono autonomi e possono essere utilizzati separatamente come strati inferiori per altri progetti. Ad esempio, c'è già l'idea di creare uno strato per memorizzare libri.

museria-global — è un repository git già configurato per l'avvio del proprio nodo nella rete globale della musica. Clonati, npm i && npm start ed è praticamente tutto. È possibile configurare in modo più dettagliato, eseguire in docker, ecc. Maggiori informazioni sono disponibili su GitHub.

Quando il repository viene aggiornato, è necessario aggiornare anche il proprio nodo. Se cambia il numero di versione principale o secondaria, questa azione è obbligatoria, altrimenti i nodi obsoleti saranno ignorati dalla rete.

Puoi lavorare con le canzoni manualmente o programmando. Ogni nodo avvia un server per vari compiti. Ad esempio, visitando l'endpoint predefinito, otterrai un'interfaccia per lavorare con la musica. Puoi andare su nodo principale (il link potrebbe non essere più valido in seguito, i nodi di ingresso possono essere ottenuti anche in telegramma, o puoi controllare gli aggiornamenti su GitHub).

In questo modo puoi cercare e caricare canzoni nella memoria. Il caricamento delle canzoni può avvenire in due modalità: ordinaria e moderata. La seconda modalità significa che il lavoro è svolto da una persona, non da un programma. E se selezioni questa opzione durante l'aggiunta, sarà necessario risolvere un CAPTCHA. Le canzoni possono essere aggiunte con priorità -1, 0 o 1. La priorità 1 può essere impostata solo in modalità moderata. Le priorità sono necessarie affinché la memoria prenda decisioni più efficaci quando tenti di sostituire una canzone esistente con una nuova. Maggiore è la priorità, maggiori sono le possibilità che tu sovrascriva il file esistente. Questo aiuta a combattere lo spam e aumenta la qualità delle canzoni caricate.

Se inizi ad aggiungere canzoni nella memoria, cerca di allegare anche le immagini (cover), anche se questo campo non è obbligatorio. Nel 99% dei casi, le prime immagini su Google con i titoli delle canzoni sono le copertine degli album.

Come avviene tecnicamente l'aggiunta di file, in poche parole:

  • Il client riceve l'indirizzo di un nodo libero, che diventerà coordinatore per un certo periodo.
  • Viene attivata la funzione di aggiunta della canzone (da parte di una persona o da codice), e si invia una richiesta per aggiungere all'endpoint del coordinatore.
  • Il coordinatore calcola quanti duplicati devono essere mantenuti (parametro configurabile).
  • Vengono cercati i nodi più adatti per il salvataggio.
  • Il file, direttamente, viene inviato a questi nodi.

Come avviene tecnicamente il recupero dei file:

  • Il client riceve l'indirizzo di un nodo libero, che diventerà coordinatore per un certo periodo.
  • Viene attivata la funzione di recupero della canzone (da parte di una persona o da codice), e si invia una richiesta per il recupero all'endpoint del coordinatore.
  • Il coordinatore controlla la presenza del link nella cache. Se esiste ed è funzionante, viene restituito immediatamente al client, altrimenti vengono interrogati i nodi per verificarne la disponibilità.
  • Si sta recuperando il file dal link, se disponibile.

Alternative per i creatori di musica

Mi sono sempre chiesto come si possa valutare obiettivamente il prezzo di molte opere creative. Perché, ad esempio, una persona mette il proprio album musicale a 10$? O a 20$ o a 100$. Qual è l'algoritmo? Quando, ad esempio, parliamo di un prodotto fisico, o anche di molti tipi di servizi, possiamo almeno calcolare il costo e partire da quello.

Ok, supponiamo che abbiamo messo 10$. È davvero efficace? Supponiamo di aver ascoltato un album da qualche parte o una canzone da lì e di aver deciso di ringraziare. Ma secondo le mie sensazioni e le mie possibilità, 3$ è il mio tetto. E come ci si comporta in questo caso? Probabilmente non farò nulla, come la maggior parte delle persone.

Impostando un prezzo fisso per il lavoro creativo, ti limiti semplicemente, non permetti a più persone di inviarti somme inferiori che, sommate, potrebbero essere più consistenti rispetto a coloro che acquistano al prezzo stabilito da te. Penso che la creatività sia proprio un settore dove le donazioni dovrebbero dominare. Per questo è necessario:

  • Insegnare alle persone a ringraziare in questo modo. I creatori devono mostrare chiaramente che vorrebbero ricevere donazioni, aggiungendo link su diversi metodi di pagamento ovunque.
  • Ci sono bisogno di più meccanismi per semplificare e potenziare questi processi. Ad esempio, creare un sito globale dove si possano fare donazioni per la creatività tramite link personalizzati.

    Supponiamo che il link sia più o meno così:

    http://someartistsdonationsite.site/category/artist?external-info

    Se restringiamo ai musicisti, allora:

    http://someartistsdonationsite.com/music/miyagi?song=blabla

    L'artista deve verificare il proprio nickname e associarsi ad esso.

    Nel client museria aggiungiamo una funzione di generazione di link simili, e tutti i progetti che utilizzano il repository possono posizionare nei propri siti/applicazioni dei pulsanti per le donazioni con questi link accanto alle canzoni. Gli utenti hanno la possibilità di fare una donazione in modo molto rapido e semplice. Ovviamente, questo approccio può essere utilizzato in qualsiasi progetto e categoria creativa, non solo attraverso il repository.

Perché, proprio per te, uno storage musicale, e come puoi partecipare

  • Se lavori a un progetto legato alla musica o stai pianificando di crearne uno, allora tutto questo è stato concepito per te. Puoi utilizzare museria per archiviare e ottenere canzoni, aumentando il flusso musicale nella rete. Se hai la possibilità di gestire e mantenere almeno un nodo, sarà il miglior contributo allo sviluppo della rete.
  • Forse sei pronto a assumerti un altro ruolo: aiutare con il codice, o compilare e moderare il database, diffondere informazioni sul progetto ai tuoi conoscenti, ecc.
  • Forse ti è piaciuta l'idea e sei disposto ad aiutare materialmente affinché tutto questo viva e si sviluppi. Più nodi ci sono, più canzoni ci saranno.
  • Oppure a un certo punto potresti avere semplicemente bisogno di trovare e scaricare una canzone. Potrai farlo molto facilmente, ad esempio tramite un bot di telegram.

Il progetto è attualmente nella sua fase iniziale. È stata avviata una rete di test, i nodi potrebbero riavviarsi frequentemente, richiedere aggiornamenti, ecc. In assenza di problemi critici durante il periodo di valutazione, questa rete sarà trasformata nella rete principale.

Puoi visualizzare le informazioni su un nodo dall'esterno: numero di canzoni, spazio libero, ecc., tramite un link del tipo http://node-address/status o http://node-address/status?pretty

I miei contatti:

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster