8 điểm bởi GN⁺ 2024-11-29 | 1 bình luận | Chia sẻ qua WhatsApp
  • Hệ thống thư viện phân tán tĩnh hoàn toàn dựa trên IPFS, SQLite và GitHub
  • Có thể lưu trữ các instance được tự động cập nhật trên Netlify và GitHub Pages

Thư viện phân tán

  • Ứng dụng web TeaTime được tách biệt hoàn toàn khỏi cơ sở dữ liệu và các tệp mà nó truy xuất.
  • Cơ sở dữ liệu được sử dụng là kho lưu trữ GitHub có gắn chủ đề teatime-database, được xuất bản trên GitHub Pages.
  • Mỗi kho lưu trữ bao gồm một tệp config.json trỏ đến cơ sở dữ liệu SQLite.
  • Trước khi người dùng thực hiện tìm kiếm, họ chọn cơ sở dữ liệu sẽ dùng và TeaTime truy vấn cơ sở dữ liệu SQLite bằng sql.js-httpvfs.
  • Mỗi hàng trong cơ sở dữ liệu SQLite là một mục của thư viện, và cột băm tệp được dùng để lấy mục đó từ IPFS.
  • Vì ứng dụng web là một trang tĩnh và cơ sở dữ liệu được cấu thành từ các tệp tĩnh, nên có thể dễ dàng fork, sao chép và triển khai.
  • Instance frontend là một kho lưu trữ GitHub có gắn chủ đề teatime-instance.
  • Vì các tệp được phân phối từ IPFS, kiến trúc phân tán này làm tăng khả năng phục hồi của TeaTime.

Tính năng

  • Có thể tìm kiếm theo tiêu đề, tác giả, năm hoặc định dạng
  • Duy trì lịch sử đọc và quay lại đúng trang khi mở lại tệp
  • Tải tệp về máy cục bộ
  • Cache tệp trong IndexedDB để tải nhanh hơn
  • Kéo thả tệp vào TeaTime để render
  • Chế độ tối và chế độ toàn màn hình
  • Không cookie, không đăng nhập
  • Hoàn toàn phân tán

Phát triển frontend

  • TeaTime là một ứng dụng Nuxt.js.
  • Có thể chạy cục bộ dễ dàng: clone kho lưu trữ rồi thực hiện các bước sau
    1. Cài đặt phụ thuộc: npm install
    2. Chạy máy chủ: npm run dev
    3. Truy cập http://localhost:3000
  • Có thể tham khảo tài liệu Nuxt để biết thêm thông tin

Tạo cơ sở dữ liệu

  • Có thể tạo cơ sở dữ liệu bằng cách fork kho lưu trữ cơ sở dữ liệu dựa trên JSON và điều chỉnh các tệp JSON theo nhu cầu.
  • GitHub Actions tạo tệp SQLite và tải nó lên GitHub Pages.
  • Nếu muốn tạo thủ công một cơ sở dữ liệu SQLite có thể hoạt động với TeaTime, hãy làm theo ví dụ trong kho lưu trữ cơ sở dữ liệu.
  • Mỗi cơ sở dữ liệu SQLite chứa một bảng với schema bên dưới. Tên cột có thể được điều chỉnh trong tệp 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)  
    );  
    
  • Nếu tệp SQLite quá lớn thì có thể chia nhỏ. Cần tham khảo thông tin tối ưu hóa cơ sở dữ liệu. Khuyến nghị dùng FTS.
  • Xuất bản kho lưu trữ lên GitHub Pages và gán chủ đề teatime-database cho kho lưu trữ

Đóng góp

  • Ngay cả khi không biết lập trình, bạn vẫn có thể đóng góp bằng cách fork kho lưu trữ này và kho lưu trữ cơ sở dữ liệu yêu thích của mình.
  • Khi fork kho lưu trữ, nên fork thủ công để tránh bị liên kết trực tiếp (git clone && git remote add your-origin ... && git push your-origin main).
  • Gắn sao cho các kho lưu trữ cơ sở dữ liệu hữu ích cũng là một cách hay. Điều này quyết định thứ tự của cơ sở dữ liệu trong giao diện người dùng TeaTime, giúp người dùng khác dễ dàng tìm thấy những cơ sở dữ liệu tốt nhất.

1 bình luận

 
GN⁺ 2024-11-29
Ý kiến trên Hacker News
  • Một người đóng góp cho IPFS đề xuất các cách có thể cải thiện việc xử lý tải xuống từ nhiều gateway trên IPFS

    • Có thể dùng @helia/verified-fetch, cho phép chấp nhận CID qua API tương tự Fetch và xử lý content routing cùng tra cứu P2P
    • Nếu có thể kết nối trực tiếp tới gateway, cũng có thể truyền gateway vào
  • Framework Pear P2P có thể giúp thoát khỏi GitHub và chuyển sang một hệ thống thực sự phân tán

    • Họ đặt câu hỏi rằng nếu chỉ mục vẫn phải nằm trên GitHub thì việc lưu tệp trên IPFS còn có ý nghĩa gì
  • Đang cân nhắc dùng Helia để người dùng có thể đóng góp như các node trong mạng

    • Khi tìm thông tin về Helia, điều này gợi nhớ đến OrbitDB
  • Có vấn đề bị chặn bởi chính sách CORS khi truy cập một số tài nguyên nhất định

    • Có thể lấy tài nguyên với CORS bị vô hiệu hóa bằng cách đặt chế độ của request thành no-cors
  • Mọi thứ đều diễn ra trong trình duyệt, không có người dùng, cookie hay theo dõi

    • Dùng LocalStorage và IndexedDB để lưu vị trí đọc gần nhất và vị trí trong tệp
    • Họ rất thích tính năng này và bày tỏ sự cảm ơn
  • Cơ sở dữ liệu được dùng trong TeaTime là một kho GitHub được xuất bản trên GitHub Pages

    • Có vẻ người dùng ác ý có thể sử dụng thẻ này, nên đây có thể là một vấn đề bảo mật
  • Vì không biết trong cơ sở dữ liệu có gì nên không biết phải tìm kiếm điều gì

    • Họ đề xuất thêm tính năng duyệt khám phá
  • Có câu hỏi về việc liệu có thể dùng một instance ví dụ hay không

  • Họ tự hỏi liệu có thể tích hợp bookmark Pocket hay không

    • Hy vọng có thể cache ngoại tuyến mọi thứ muốn đọc, ngăn link rot và cho phép truy vấn chúng