Museria - merkezi olmayan müzik depolama

Museria - merkezi olmayan müzik depolama

Bir gün kendim için müzik seçip evde/sokakta/antrenmanda vb. dinlemek için bir uygulama yazmaya karar verdim. Ve böylece tüm bunlar benim minimum katılımımla bir akış içinde işliyor. Bir mimari buldum, bir prototip çizdim ve sonunda "küçük bir sorunla" karşılaştım.

Ve şarkı dosyalarının nereden alınacağı da belli değil. Bu zamana kadar VKontakte API'yi çoktan kapatmıştı, büyük müzik portallarında da her şey sessize alınmıştı, hatta şarkılar bile ayrıştırılmaması için parçalar halinde dağıtılıyordu. Geriye kalan tek şey, tonlarca reklam ve her türlü çöpün, her türlü şüpheli kapma programının ve diğer "kirli" seçeneklerin bulunduğu bazı bireysel gece uçuş siteleriydi. Genel olarak gerçekten iyi bir çözüm yok. Elbette bazı Yandex müziklerine veya benzerlerine abonelik satın alabilirsiniz. Ancak yine de hiçbir yerde açık, halka açık bir API yok ve programlı olarak müziğe erişiminiz yok. Birçok büyük şirket aslında başkalarının müziğe erişimini kısıtladı. Bu neden oldu? Daha derine inildiğinde asıl sorunun telif hakkı olduğu ortaya çıktı. Abonelik şeklindeki mevcut çözüm, birçok ticari müzik yazarına ve aynı şirketlere uygundur. Aynı zamanda ticari olmayan ve yarı ticari müzik de genel listeye giriyor. Ya her şeyin parasını ödersiniz ya da hiçbir şeyi dinlemezsiniz.

Ve tüm bunlarla ne yapacağımı düşünmeye başladım. Müziğin ücretsiz dağıtımını nasıl organize edebiliriz? Kendim müzik yapıyor olsaydım ve bundan para kazanmak isteseydim ne yapardım? Şarkılarımın korsan olması hoşuma gider mi? Zaten hangi alternatif çözüm var?

Sonuç olarak çözülmesi gereken iki temel sorun vardır:

  • Yazılım dahil çoğu insan için uygun yöntemleri kullanarak müziğin ücretsiz dağıtımının organizasyonu.
  • Müzik yaratıcılarına para kazanmaları için alternatifler sunmak

Küresel merkezi olmayan müzik depolama

Başlangıçta mevcut çözümleri bulmaya ve her şeyi buna dayanarak yaratmaya çalıştım. Bir süre aradıktan sonra ilk hoşuma giden şey şuydu: ipf'ler. Fikrimi uygulamaya başladım ancak bir süre sonra bu çözümde birkaç kritik sorun keşfettim:

  • Ipfs - her şey ve herkes için depolama. Resimler, müzik, videolar ve istediğiniz her şey var. Genel olarak, çok büyük bir gezegensel "çöp kutusu". Bu nedenle, düğümünüzü başlattığınızda hemen büyük bir yük alırsınız. Araba acıdan kıvranıyor.
  • Bir çeşit tamamlanmamış “çöp” toplama mekanizması. Şimdi nasıl olduğunu bilmiyorum ama o anda yapılandırmada depolamayı on gigabayt veriyle sınırlamak istediğinizi yazdıysanız, o zaman bunun hiçbir anlamı yoktu. Depolama, birçok yapılandırma parametresi göz ardı edilerek büyüdü. Sonuç olarak, ipfs gereksiz olanı nasıl sıfırlayacağını bulana kadar büyük bir sabit disk rezervine sahip olmak gerekiyordu.
  • Kütüphaneyi kullanırken (şu anda nasıl olduğunu bilmiyorum), istemcide zaman aşımı uygulanmamıştı. Bir dosyayı almak için bir istek gönderirsiniz ve eğer mevcut değilse, o zaman askıda kalırsınız. Elbette insanlar sorunu kısmen çözen her türlü geçici çözümü buldular, ancak bunlar koltuk değneğiydi. Bu şeylerin kutudan çıkması gerekir.

Hala birçok küçük sorun vardı ve izlenim açıktı: bu proje için kullanılamaz. Bir depolama tesisi aramaya devam ettim, farklı seçenekleri araştırdım ama hiçbir zaman uygun bir şey bulamadım.

Sonunda, merkezi olmayan bir depolamayı kendim yazmayı denemeye değer olduğuna karar verdim. Gezegenlerarası gibi görünmese bile belirli bir sorunu çözecektir.

Ve böylece ortaya çıktı yayılabilir, depo, metastok, müze, Museria-global.

yayılabilir - bu, düğümleri bir ağda birleştirmenize olanak tanıyan ana, en düşük katmandır. Şu ana kadar yaklaşık 10000 sunucuya dayanarak kısmen uyguladığım bir algoritma içeriyor. Algoritmanın tam sürümünün uygulanması çok daha zordur ve birkaç ek ay (belki daha fazla) gerektirir.

Bu makalede yayılabilirliği detaylı olarak anlatmayacağım; bir gün ayrı bir tane yazmak daha iyi olur. Burada sadece bazı özelliklere dikkat edeceğim:

  • http/https üzerinden çalışır.
  • Belirli bir görev için ayrı bir ağ oluşturabilirsiniz; bu, her bir projenin yükünü, hepsinin aynı ağda olmasına kıyasla önemli ölçüde azaltacaktır.
  • Başlangıçta zaman aşımlarına ve diğer küçük şeylere sahip bir mekanizma düşünülmüştü. Bu, hem istemcideki hem de düğümdeki tüm yöntemler için işe yarar. Ayarları uygulamanızın içinden esnek bir şekilde yönetebilirsiniz.
  • Kütüphane nodejs ile yazılmıştır. Yığının performans sorunları, merkezi olmayan yapısıyla dengeleniyor. Düğüm sayısı artırılarak yük "yayılabilir". Buna karşılık birçok avantaj var: büyük bir topluluk, basitlik ve kullanım kolaylığı, eşbiçimli bir istemci, dış bağımlılıkların olmaması vb.

depo dosyaları ağda saklamanıza olanak tanıyan, yayılabilir katmandan miras alınan bir katmandır. Her dosyanın, daha sonra almak için kullanılabilecek kendi içeriği karması vardır. Dosyalar bloklara bölünmez, tamamen saklanır.

metastok - yayılabilirden miras alınan, ağda veri depolamanıza izin veren, ancak dosyaları saklamanıza izin vermeyen bir katman. Arayüz Nosql veritabanına benzer. Örneğin, storacle'a bir dosya ekleyebilir, hash'ini alabilir ve onu bir şeye bağlantıyla birlikte metastocle'a yazabilirsiniz.

müze - depo ve metastokludan miras alınmıştır. Bu katman doğrudan müziğin depolanmasından sorumludur. Depolama yalnızca mp3 dosyaları ve id3 etiketleriyle çalışır.

Şarkının “anahtarı” olarak tam adı formda kullanılmıştır Sanatçı (TPE1) - Başlık (TIT2). Örneğin:

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

Şarkı adlarının nasıl oluştuğunu mümkün olduğunca ayrıntılı olarak öğrenebilirsiniz. burada. Fonksiyona bakmanız gerekiyor utils.beautifySongTitle().

Düğüm ayarlarında tanımlanan eşleşmelerin yüzdesi, eşleşme olarak kabul edilir. Örneğin, 0.85 değeri, anahtar karşılaştırma işlevi (şarkı adları) %85'ten fazla bir benzerlik bulduğunda bunun aynı şarkı olduğu anlamına gelir.

Benzerliği belirlemeye yönelik algoritma, fonksiyonda mevcuttur. utils.getSongSimilarity().

Şarkının daha sonra alınması için cover'ı etiketlerle de eklenebilir (APIC). Yardımcı programlar, etiketleri almak ve işlemek için gerekli tüm yöntemlere sahiptir.

Bir istemci aracılığıyla depolamayla çalışmanın bir örneğini şu adreste bulabilirsiniz: beni oku.

Yukarıdaki katmanların tümü bağımsızdır ve diğer projeler için alt katmanlar olarak ayrı ayrı kullanılabilir. Örneğin, kitapların saklanması için bir katman oluşturma fikri zaten var.

Museria-global küresel müzik ağında kendi düğümünüzü başlatmak için önceden yapılandırılmış bir git deposudur. Klonlama npm ben && npm başlayın ve temelde hepsi bu. Daha ayrıntılı olarak yapılandırabilir, Docker'da vb. çalıştırabilirsiniz. Detaylı bilgi şu adreste mevcuttur: github.

Depo güncellendiğinde düğümünüzü güncellemeniz gerekir. Ana veya alt sürüm numarası değişirse bu eylem zorunludur, aksi takdirde eski düğümler ağ tarafından göz ardı edilecektir.

Şarkılarla manuel ve programlı olarak çalışabilirsiniz. Her düğüm farklı görevler için bir sunucu çalıştırır. Varsayılan uç noktayı ziyaret ettiğinizde müzikle çalışmak için bir arayüz alacaksınız. Örneğin şu adrese gidebilirsiniz: kök düğüm (bağlantı daha sonra alakalı olmayabilir, giriş düğümleri şuradan da elde edilebilir: telgrafveya Github'daki güncellemeleri arayın).

Bu şekilde şarkıları arayabilir ve depolama alanına yükleyebilirsiniz. Şarkıların yüklenmesi iki modda gerçekleştirilebilir: normal ve moderatörlü. İkinci mod, işin bir program tarafından değil, bir kişi tarafından gerçekleştirildiği anlamına gelir. Ve eğer eklerken bu kutuyu işaretlerseniz captcha'yı çözmeniz gerekecektir. Şarkılar -1, 0 veya 1 öncelikleriyle eklenebilir. Öncelik 1 yalnızca yönetilen modda ayarlanabilir. Mevcut bir şarkıyı yenisiyle değiştirmeye çalıştığınızda depolama biriminin ne yapacağınıza daha etkili bir şekilde karar verebilmesi için önceliklere ihtiyaç vardır. Öncelik ne kadar yüksek olursa, mevcut bir dosyanın üzerine yazma olasılığınız da o kadar artar. Bu, spam ile mücadeleye yardımcı olur ve indirilen şarkıların kalitesini artırır.

Depolama alanınıza şarkı eklemeye başlarsanız, bu alan zorunlu olmasa da resim (kapak) eklemeyi deneyin. Vakaların %99'unda şarkı adlarına göre Google'da ilk çıkan görseller albüm kapaklarıdır.

Özetle, teknik olarak dosya ekleme işlemi nasıl gerçekleşir:

  • Müşteri, bir süreliğine koordinatör olacak olan serbest bir düğümün adresini alır.
  • Şarkı ekleme işlevi tetiklenir (bir kişi veya kod tarafından) ve uç noktaya bir koordinatör eklenmesi için bir istek yapılır.
  • Koordinatör kaç kopyanın saklanması gerektiğini hesaplar (yapılandırılabilir parametre).
  • Kaydetmeye en uygun düğümler aranır.
  • Dosya doğrudan bu düğümlere gider.

Dosyalar teknik olarak nasıl alınır?

  • Müşteri, bir süreliğine koordinatör olacak olan serbest bir düğümün adresini alır.
  • Bir şarkıyı (bir kişi veya bir kod tarafından) alma işlevi tetiklenir ve koordinatörün uç noktasında şarkıyı almak için bir istek yapılır.
  • Koordinatör önbellekte bağlantının varlığını kontrol eder. Eğer bir tane varsa ve çalışıyorsa, hemen müşteriye geri gönderilir, aksi takdirde düğümler kullanılabilirlik açısından sorgulanır.
  • Dosya bulunursa bağlantıdan alınır.

Müzik Yaratıcıları için Alternatifler

Pek çok yaratıcı çalışmanın değerinin objektif olarak nasıl değerlendirilebileceği sorusu her zaman ilgimi çekmiştir. Örneğin bir insan müzik albümünü neden 10 dolara teklif eder? Ya 20$ ya da 100$. Algoritma nerede? Mesela fiziki bir üründen, hatta birçok hizmet türünden bahsettiğimizde en azından maliyetini hesaplayıp ona göre hareket edebiliriz.

Tamam, diyelim ki 10$ bahis oynadık. Bu çok etkili mi? Diyelim ki bir yerden bir albüm ya da oradan bir şarkı dinledim ve minnettarlığımı göstermeye karar verdim. Ama duygularıma ve yeteneklerime göre tavanım 3 dolar. Yani ne yapmalıyız? Büyük ihtimalle çoğu insan gibi hiçbir şey yapmayacağım.

Yaratıcı çalışma için bir tür sabit fiyat belirleyerek, kendinizi sınırlandırmış olursunuz, daha fazla sayıda insanın size daha az para göndermesini engellersiniz, bu da toplamda sizin belirlediğiniz fiyattan satın alacak olanlardan daha etkileyici olabilir. Bana öyle geliyor ki yaratıcılık tam da bağışların ilk hakim olması gereken alan. Bunu yapmak için ihtiyacınız olan:

  • İnsanlara bu şekilde şükretmeyi öğretin. İçerik oluşturucuların kendileri bağış almak istediklerini açıkça göstermeli, her yere farklı ödeme yöntemlerine bağlantılar eklemeli vb.
  • Bu süreçleri basitleştirmek ve güçlendirmek için daha fazla mekanizmaya ihtiyaç vardır. Örneğin, telif hakkı bağlantılarını kullanarak yaratıcılık için bağışta bulunabileceğiniz bir tür küresel web sitesi oluşturun.

    Diyelim ki bağlantı şöyle bir şey:

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

    Bunu müzisyenlere daraltırsak, o zaman:

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

    Sanatçının takma adını doğrulaması ve ona eklemesi gerekiyor.

    Museria istemcisine böyle bir bağlantı oluşturmak için bir işlev ekliyoruz ve depoyu kullanan tüm projeler, web sitelerinde/uygulamalarında şarkıların yanına bu bağlantıların bulunduğu bağış düğmelerini yerleştirebilir. Kullanıcılar çok hızlı ve kolay bir şekilde bağış yapma olanağına sahiptir. Doğal olarak bu yaklaşım sadece depolama yoluyla değil, her türlü projede ve yaratıcılık kategorisinde kullanılabilir.

Tam olarak neden bir müzik depolama tesisine ihtiyacınız var ve buna nasıl katılabilirsiniz?

  • Müzikle ilgili bir proje üzerinde çalışıyorsanız veya bir proje oluşturmayı planlıyorsanız, her şey bunun için tasarlandı. Şarkıları depolamak ve almak için museria'yı kullanabilir, böylece şarkıların çevrimiçi akışını artırabilirsiniz. Aynı zamanda kendinize ait en az bir düğümü yükseltme ve tutma yeteneğine sahipseniz, bu, ağın gelişimine en iyi katkı olacaktır.
  • Belki başka bir rol üstlenmeye hazırsınız: kod konusunda yardım etmek veya veritabanını doldurup yönetmek, proje hakkındaki bilgileri arkadaşlarınıza dağıtmak vb.
  • Belki fikri beğendiniz ve her şeyin yaşaması ve gelişmesi için maddi olarak yardım etmeye hazırsınız. Ne kadar çok düğüm, o kadar çok şarkı.
  • Veya bir noktada bir şarkı bulup indirmeniz yeterlidir. Bunu çok basit bir şekilde yapabilirsiniz, örneğin: telgraf botu.

Proje şu anda en başlangıç ​​aşamasındadır. Bir test ağı başlatıldı, düğümler sık ​​sık yeniden başlatılabilir, güncelleme gerektirebilir vb. Değerlendirme döneminde kritik bir sorun yaşanmadığı takdirde aynı ağ ana ağa dönüştürülür.

Düğüm hakkındaki bilgileri dışarıdan görüntüleyebilirsiniz: şarkı sayısı, boş alan vb. gibi bir bağlantıyı kullanarak http://node-address/status veya http://node-address/status?pretty

Benim rehber:

Kaynak: habr.com

Yorum ekle