Museria - storan muzik terdesentralisasi

Museria - storan muzik terdesentralisasi

Suatu hari saya memutuskan untuk menulis aplikasi untuk memilih muzik untuk diri saya sendiri dan mendengarnya di rumah/di jalanan/senaman, dsb. Dan supaya semua ini berfungsi dalam aliran, dengan penyertaan minimum daripada saya. Saya menghasilkan seni bina, melakar prototaip, dan akhirnya menghadapi satu "masalah kecil."

Dan tidak jelas di mana untuk mendapatkan fail lagu itu sendiri. Pada masa ini, VKontakte telah pun menutup api, pada portal muzik besar semuanya juga diredam, malah lagu-lagu dikeluarkan secara berkeping-keping supaya tidak dihuraikan. Yang tinggal hanyalah beberapa tapak terbang demi malam individu dengan banyak pengiklanan dan pelbagai jenis sampah, pelbagai program perebut yang meragukan dan pilihan "kotor" lain. Secara umum, tiada satu pun penyelesaian yang benar-benar baik. Anda boleh, sudah tentu, membeli langganan kepada beberapa muzik Yandex atau sebagainya. Tetapi sekali lagi, tiada API awam terbuka di mana-mana dan anda tidak mempunyai akses kepada muzik secara pemrograman. Beberapa syarikat besar pada dasarnya telah menyekat akses orang lain kepada muzik. Mengapa ini berlaku sama sekali? Menggali lebih dalam, menjadi jelas bahawa masalah utama adalah hak cipta. Penyelesaian semasa dalam bentuk langganan sesuai dengan banyak pengarang muzik komersial dan syarikat yang sama ini. Pada masa yang sama, muzik bukan komersial dan separa komersial juga termasuk dalam senarai umum. Anda sama ada membayar untuk segala-galanya atau tidak mendengar langsung.

Dan saya mula berfikir apa yang perlu dilakukan dengan semua ini. Bagaimanakah kita boleh mengatur pengedaran muzik secara percuma? Apakah yang akan saya lakukan jika saya mencipta muzik sendiri dan ingin menjana wang daripadanya? Adakah saya suka jika lagu saya dicetak rompak? Apakah penyelesaian alternatif yang ada?

Akibatnya, terdapat dua masalah utama yang perlu diselesaikan:

  • Organisasi pengedaran percuma muzik menggunakan kaedah yang sesuai untuk kebanyakan orang, termasuk perisian.
  • Menawarkan alternatif untuk pencipta muzik untuk menjana wang

Storan muzik terdesentralisasi global

Pada mulanya, saya cuba mencari penyelesaian sedia ada dan mencipta segala-galanya berdasarkan ini. Selepas beberapa lama mencari, yang pertama saya suka ialah ipfs. Saya mula melaksanakan idea saya, tetapi selepas beberapa ketika saya menemui beberapa masalah kritikal dalam penyelesaian ini:

  • Ipfs - storan untuk semua dan semua orang. Terdapat imej dan muzik dan video serta semua yang anda mahukan. Secara umum, "tong sampah" planet yang begitu besar. Oleh itu, apabila anda melancarkan nod anda, anda serta-merta menerima beban yang besar. Kereta itu hanya menggeliat kesakitan.
  • Beberapa jenis mekanisme pengumpulan "sampah" yang belum selesai. Saya tidak tahu bagaimana keadaannya sekarang, tetapi pada masa itu, jika anda menulis dalam konfigurasi bahawa anda mahu mengehadkan storan kepada sepuluh gigabait data, maka ia tidak bermakna apa-apa. Storan bertambah, mengabaikan banyak parameter konfigurasi. Akibatnya, adalah perlu untuk mempunyai rizab cakera keras yang besar sehingga ipfs mengetahui cara untuk menetapkan semula yang tidak perlu.
  • Pada masa menggunakan perpustakaan (saya tidak tahu bagaimana keadaannya sekarang), pelanggan tidak mempunyai tamat masa yang dilaksanakan. Anda menghantar permintaan untuk menerima fail, dan jika ia tidak wujud, maka anda hanya menggantung. Sudah tentu, orang ramai datang dengan pelbagai cara penyelesaian yang sebahagiannya menyelesaikan masalah, tetapi ini adalah tongkat. Perkara-perkara ini sepatutnya keluar dari kotak.

Masih terdapat banyak masalah kecil, dan tanggapannya jelas: ini tidak boleh digunakan untuk projek itu. Saya terus mencari kemudahan penyimpanan, meneroka pilihan yang berbeza, tetapi tidak pernah menemui apa-apa yang sesuai.

Pada akhirnya, saya memutuskan bahawa ia patut cuba menulis storan terdesentralisasi sendiri. Walaupun ia tidak berpura-pura menjadi antara planet, ia akan menyelesaikan masalah tertentu.

Dan begitulah ternyata boleh disebarkan, storacle, metastokel, museria, museria-global.

boleh disebarkan - ini adalah lapisan utama, paling rendah yang membolehkan anda menggabungkan nod ke dalam rangkaian. Ia mengandungi algoritma, yang setakat ini telah saya laksanakan sebahagiannya berdasarkan kira-kira 10000 pelayan. Versi penuh algoritma adalah lebih sukar untuk dilaksanakan dan memerlukan beberapa bulan tambahan (mungkin lebih).

Saya tidak akan menerangkan yang boleh disebarkan secara terperinci dalam artikel ini; adalah lebih baik untuk menulis yang berasingan suatu hari nanti. Di sini saya hanya akan perhatikan beberapa ciri:

  • Berfungsi melalui http/https.
  • Anda boleh membuat rangkaian berasingan untuk tugas tertentu, yang akan mengurangkan beban pada setiap projek individu dengan ketara berbanding jika mereka semua berada pada rangkaian yang sama.
  • Mekanisme dengan tamat masa dan perkara kecil lain pada mulanya difikirkan. Dan ini berfungsi untuk semua kaedah dalam klien dan dalam nod. Anda boleh mengurus tetapan secara fleksibel dari dalam aplikasi anda.
  • Perpustakaan ditulis dalam nodejs. Isu prestasi tindanan diimbangi oleh sifatnya yang tidak berpusat. Beban boleh "disebar" dengan menambah bilangan nod. Sebagai balasan, terdapat banyak kelebihan: komuniti yang besar, kesederhanaan dan kemudahan penggunaan, pelanggan isomorfik, tiada kebergantungan luaran, dsb.

storacle ialah lapisan yang diwarisi daripada boleh disebarkan yang membolehkan anda menyimpan fail pada rangkaian. Setiap fail mempunyai cincang kandungannya sendiri, yang boleh digunakan untuk mendapatkannya kemudian. Fail tidak dibahagikan kepada blok, tetapi disimpan sepenuhnya.

metastokel - lapisan yang diwarisi daripada boleh disebarkan, yang membolehkan anda menyimpan data pada rangkaian, tetapi bukan fail. Antara muka adalah serupa dengan pangkalan data Nosql. Anda boleh, sebagai contoh, menambah fail ke storacle, mendapatkan cincangnya dan menulisnya ke metastocle dengan pautan ke sesuatu.

museria - diwarisi daripada storacle dan metastocle. Lapisan ini bertanggungjawab secara langsung untuk menyimpan muzik. Storan berfungsi hanya dengan fail mp3 dan tag id3.

Sebagai "kunci" kepada lagu, nama penuhnya digunakan dalam bentuk Artis (TPE1) - Tajuk (TIT2). Sebagai contoh:

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

Anda boleh mengetahui dengan terperinci yang mungkin bagaimana tajuk lagu dibentuk. di sini. Anda perlu melihat fungsinya utils.beautifySongTitle().

Peratusan padanan yang ditakrifkan dalam tetapan nod dianggap sebagai padanan. Sebagai contoh, nilai 0.85 bermakna jika fungsi perbandingan kunci (nama lagu) mendapati persamaan lebih daripada 85%, maka ia adalah lagu yang sama.

Algoritma untuk menentukan persamaan ada, dalam fungsi utils.getSongSimilarity().

Cover lagu, untuk resit kemudian, boleh juga dilampirkan melalui tag (APIC). Utiliti mempunyai semua kaedah yang diperlukan untuk menerima dan memproses teg.

Contoh bekerja dengan storan melalui pelanggan boleh didapati di readme.

Semua lapisan di atas adalah serba lengkap dan boleh digunakan secara berasingan sebagai lapisan bawah untuk projek lain. Sebagai contoh, sudah ada idea untuk membuat lapisan untuk menyimpan buku.

museria-global ialah repositori git yang telah dikonfigurasikan untuk melancarkan nod anda sendiri dalam rangkaian muzik global. Pengklonan npm i && npm mulakan dan itu pada asasnya. Anda boleh mengkonfigurasinya dengan lebih terperinci, jalankannya di Docker, dsb. Maklumat terperinci boleh didapati di github.

Apabila repositori dikemas kini, anda perlu mengemas kini nod anda. Jika nombor versi major atau minor berubah, maka tindakan ini adalah wajib, jika tidak, nod lama akan diabaikan oleh rangkaian.

Anda boleh bekerja dengan lagu secara manual dan program. Setiap nod menjalankan pelayan untuk tugas yang berbeza. Termasuk, apabila anda melawati titik akhir lalai, anda akan menerima antara muka untuk bekerja dengan muzik. Sebagai contoh, anda boleh pergi ke nod akar (pautan mungkin tidak berkaitan kemudian, nod input juga boleh diperolehi dalam telegram, atau cari kemas kini pada Github).

Dengan cara ini anda boleh mencari dan memuat naik lagu ke storan. Memuat naik lagu boleh dilakukan dalam dua mod: biasa dan sederhana. Mod kedua bermaksud kerja itu dijalankan oleh seseorang, bukan program. Dan jika anda menandai kotak ini semasa menambah, anda perlu menyelesaikan captcha. Lagu boleh ditambah dengan keutamaan -1, 0 atau 1. Keutamaan 1 hanya boleh ditetapkan dalam mod sederhana. Keutamaan diperlukan supaya storan boleh memutuskan perkara yang perlu dilakukan dengan lebih berkesan apabila anda cuba menggantikan lagu sedia ada dengan lagu baharu. Lebih tinggi keutamaan, lebih besar kemungkinan anda untuk menulis ganti fail sedia ada. Ini membantu melawan spam dan meningkatkan kualiti lagu yang dimuat turun.

Jika anda mula menambah lagu pada storan anda, cuba lampirkan imej (muka depan), walaupun medan ini tidak diperlukan. Dalam 99% kes, imej pertama di Google berdasarkan tajuk lagu ialah kulit album.

Cara penambahan fail secara teknikal berlaku, secara ringkas:

  • Pelanggan menerima alamat nod percuma, yang akan menjadi penyelaras untuk seketika.
  • Fungsi menambah lagu dicetuskan (oleh seseorang atau kod), dan permintaan dibuat untuk menambah penyelaras pada titik akhir.
  • Penyelaras mengira bilangan pendua yang perlu disimpan (parameter boleh dikonfigurasikan).
  • Nod yang paling sesuai untuk disimpan dicari.
  • Fail terus pergi ke nod ini.

Bagaimana secara teknikal fail diterima:

  • Pelanggan menerima alamat nod percuma, yang akan menjadi penyelaras untuk seketika.
  • Fungsi menerima lagu (oleh seseorang atau kod) dicetuskan, dan permintaan dibuat untuk menerimanya di titik akhir penyelaras.
  • Penyelaras menyemak kehadiran pautan dalam cache. Jika ada dan ia berfungsi, ia segera dikembalikan kepada pelanggan, jika tidak, nod akan ditinjau untuk ketersediaan.
  • Fail diterima daripada pautan, jika ada yang ditemui.

Alternatif untuk Pencipta Muzik

Saya sentiasa berminat dengan persoalan bagaimana seseorang boleh menilai secara objektif nilai banyak karya kreatif? Mengapa, sebagai contoh, seseorang menawarkan album muziknya dengan harga $10? Sama ada untuk $20 atau $100. Di manakah algoritma? Apabila, sebagai contoh, kita bercakap tentang beberapa produk fizikal, atau bahkan banyak jenis perkhidmatan, maka kita sekurang-kurangnya boleh mengira kos dan meneruskan daripada itu.

Baiklah, katakan kita bertaruh $10. Adakah ini sangat berkesan? Katakan saya mendengar album di suatu tempat atau lagu dari sana dan memutuskan untuk menunjukkan rasa terima kasih saya. Tetapi mengikut perasaan saya dan keupayaan saya sendiri, $3 adalah siling saya. Jadi apa yang patut kita buat? Kemungkinan besar saya tidak akan melakukan apa-apa, seperti kebanyakan orang.

Dengan menetapkan beberapa harga tetap untuk kerja kreatif, anda hanya mengehadkan diri anda, menghalang bilangan orang yang lebih besar daripada menghantar wang kepada anda lebih sedikit, yang secara keseluruhannya boleh menjadi lebih mengagumkan daripada mereka yang akan membeli pada harga yang anda tetapkan. Nampaknya kreativiti adalah kawasan di mana derma harus diutamakan. Untuk melakukan ini anda perlukan:

  • Ajar orang untuk bersyukur dengan cara ini. Pencipta sendiri mesti menunjukkan dengan jelas bahawa mereka ingin menerima derma, menambah pautan ke kaedah pembayaran yang berbeza di mana-mana, dsb.
  • Lebih banyak mekanisme diperlukan untuk memudahkan dan mengukuhkan proses ini. Sebagai contoh, buat beberapa jenis tapak web global di mana anda boleh menderma untuk kreativiti menggunakan pautan hak cipta.

    Katakan pautannya adalah seperti ini:

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

    Jika kita menyempitkannya kepada pemuzik, maka:

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

    Pelaku perlu mengesahkan nama panggilannya dan melampirkannya.

    Kami menambah fungsi untuk menjana pautan sedemikian kepada pelanggan museria, dan semua projek yang menggunakan repositori boleh meletakkan butang derma dengan pautan ini di sebelah lagu di tapak web/aplikasi mereka. Pengguna berpeluang untuk membuat sumbangan dengan cepat dan mudah. Sememangnya, pendekatan ini boleh digunakan dalam mana-mana projek dan kategori kreativiti, bukan hanya melalui penyimpanan.

Mengapa sebenarnya anda memerlukan kemudahan storan muzik, dan bagaimana anda boleh menyertainya?

  • Jika anda sedang mengerjakan projek yang berkaitan dengan muzik, atau merancang untuk menciptanya, maka ini adalah tujuan segala-galanya. Anda boleh menggunakan museria untuk menyimpan dan mendapatkan semula lagu, meningkatkan aliran lagu dalam talian. Jika, pada masa yang sama, anda mempunyai keupayaan untuk menaikkan dan memegang sekurang-kurangnya satu nod anda sendiri, maka ini akan menjadi sumbangan terbaik kepada pembangunan rangkaian.
  • Mungkin anda sudah bersedia untuk mengambil beberapa peranan lain: membantu dengan kod, atau mengisi dan menyederhanakan pangkalan data, mengedarkan maklumat tentang projek kepada rakan anda, dsb.
  • Mungkin anda menyukai idea itu dan bersedia untuk membantu dari segi kewangan supaya semuanya hidup dan berkembang. Lebih banyak nod, lebih banyak lagu.
  • Atau anda hanya perlu mencari dan memuat turun lagu pada satu ketika. Anda boleh melakukan ini dengan sangat mudah, sebagai contoh, melalui bot telegram.

Projek itu kini berada di peringkat permulaan. Rangkaian ujian telah dilancarkan, nod mungkin but semula dengan kerap, memerlukan kemas kini, dsb. Sekiranya tiada masalah kritikal semasa tempoh penilaian, rangkaian yang sama ini diubah menjadi yang utama.

Anda boleh melihat maklumat tentang nod dari luar: bilangan lagu, ruang kosong, dsb., menggunakan pautan seperti http://node-address/status atau http://node-address/status?pretty

kenalan saya:

Sumber: www.habr.com

Tambah komen