TeaTime - SQLite, IPFS और GitHub से संचालित एक विकेंद्रीकृत लाइब्रेरी सिस्टम
(github.com/bjesus)- IPFS, SQLite और GitHub पर आधारित एक पूरी तरह static विकेंद्रीकृत लाइब्रेरी सिस्टम
- Netlify और GitHub Pages पर अपने-आप अपडेट होने वाले instance host किए जा सकते हैं
विकेंद्रीकृत लाइब्रेरी
- TeaTime वेब application डेटाबेस और प्राप्त की जाने वाली फ़ाइलों से पूरी तरह अलग है।
- उपयोग किया जाने वाला डेटाबेस
teatime-databasetopic के साथ टैग किया गया GitHub repository है, जिसे GitHub Pages पर प्रकाशित किया गया है। - हर repository में एक
config.jsonफ़ाइल शामिल होती है, जो SQLite डेटाबेस की ओर संकेत करती है। - उपयोगकर्ता search करने से पहले उपयोग किए जाने वाले डेटाबेस का चयन करता है, और TeaTime
sql.js-httpvfsका उपयोग करके SQLite डेटाबेस को query करता है। - SQLite डेटाबेस की हर row लाइब्रेरी की एक item होती है, और file hash column का उपयोग IPFS से item प्राप्त करने के लिए किया जाता है।
- वेब application एक static site है और डेटाबेस static files से बना है, इसलिए इसे आसानी से fork, replicate और deploy किया जा सकता है।
- frontend instance
teatime-instancetopic के साथ टैग किया गया GitHub repository है। - चूंकि फ़ाइलें IPFS से serve की जाती हैं, यह विकेंद्रीकृत architecture TeaTime की resilience बढ़ाता है।
सुविधाएँ
- शीर्षक, लेखक, वर्ष या format के आधार पर search किया जा सकता है
- reading history बनाए रखना और फ़ाइल दोबारा खोलने पर उसी page पर वापस जाना
- फ़ाइलों को local में download करना
- तेज़ loading के लिए फ़ाइलों को IndexedDB में cache करना
- render करने के लिए फ़ाइलों को TeaTime में drop करना
- dark mode और full screen mode
- कोई cookies नहीं, कोई login नहीं
- पूरी तरह विकेंद्रीकृत
frontend development
- TeaTime एक Nuxt.js application है।
- इसे local में आसानी से चलाया जा सकता है: repository को clone करें और ये steps करें
- dependencies install करें:
npm install - server चलाएँ:
npm run dev http://localhost:3000पर जाएँ
- dependencies install करें:
- अतिरिक्त जानकारी के लिए Nuxt documentation देखें
डेटाबेस बनाना
- JSON-आधारित डेटाबेस repository को fork करके और JSON फ़ाइलों को अपनी ज़रूरत के अनुसार समायोजित करके डेटाबेस बनाया जा सकता है।
- GitHub Actions SQLite फ़ाइल बनाता है और उसे GitHub Pages पर upload करता है।
- TeaTime के साथ काम करने वाला SQLite डेटाबेस manually बनाने के लिए डेटाबेस repository के उदाहरणों का पालन करें।
- हर SQLite डेटाबेस में नीचे दिए गए schema वाली एक table शामिल होती है। column names को
config.jsonफ़ाइल में समायोजित किया जा सकता है।CREATE TABLE "books" ( "id" INTEGER, "title" TEXT, "author" TEXT, "year" INTEGER, "lang" TEXT, "size" INTEGER, "ext" TEXT, "ipfs_cid" TEXT, PRIMARY KEY("id" AUTOINCREMENT) ); - अगर SQLite फ़ाइल बहुत बड़ी हो, तो उसे split किया जा सकता है। डेटाबेस optimization की जानकारी देखनी चाहिए। FTS के उपयोग की सिफारिश की जाती है।
- repository को GitHub Pages पर publish करें और repository को
teatime-databasetopic असाइन करें
योगदान
- अगर आप coding नहीं भी कर सकते, तब भी इस repository और अपनी पसंदीदा डेटाबेस repository को fork करके योगदान दे सकते हैं।
- repository को fork करते समय, सीधे जुड़े बिना manually fork करना बेहतर है (
git clone&&git remote add your-origin ...&&git push your-origin main)। - उपयोगी डेटाबेस repository पर star जोड़ना भी एक अच्छा तरीका है। इससे TeaTime user interface में डेटाबेस की क्रम-व्यवस्था तय होती है, ताकि दूसरे उपयोगकर्ता आसानी से सबसे अच्छे डेटाबेस खोज सकें।
1 टिप्पणियां
Hacker News टिप्पणियाँ
एक IPFS contributor ने सुझाव दिया कि IPFS में कई gateways से डाउनलोड को हैंडल करने के तरीके को बेहतर बनाया जा सकता है
@helia/verified-fetchका उपयोग करने पर Fetch-जैसे API के जरिए CIDs स्वीकार किए जा सकते हैं और content routing तथा P2P lookup को हैंडल किया जा सकता हैPear P2P framework, GitHub से बाहर निकलकर एक वास्तविक distributed system में जाने में मदद कर सकता है
Helia का उपयोग करके users को network के node के रूप में योगदान देने देने पर विचार किया जा रहा है
कुछ resources तक पहुँचते समय CORS policy के कारण block होने की समस्या आ रही है
no-corsपर सेट करके CORS को disable स्थिति में रखकर resource लाया जा सकता हैब्राउज़र में ही सब कुछ होता है, और कोई user, cookie या tracking नहीं है
TeaTime में इस्तेमाल होने वाला database, GitHub Pages पर प्रकाशित GitHub repository है
database में क्या है, यह पता नहीं होने से यह भी नहीं पता चलता कि क्या खोजें
पूछा गया कि क्या कोई example instance उपलब्ध है
यह जानना चाहा गया कि क्या Pocket bookmarks को integrate किया जा सकता है