8 ポイント 投稿者 GN⁺ 2024-11-29 | 1件のコメント | WhatsAppで共有
  • IPFS、SQLite、GitHub を基盤とする完全な静的分散ライブラリシステム
  • Netlify と GitHub Pages で自動更新されるインスタンスをホスティング可能

分散ライブラリ

  • TeaTime の Web アプリケーションは、データベースおよび取得するファイルから完全に分離されている。
  • 使用されるデータベースは、GitHub Pages に公開された teatime-database トピック付きの GitHub リポジトリ。
  • 各リポジトリには、SQLite データベースを指す config.json ファイルが含まれる。
  • ユーザーは検索を実行する前に使用するデータベースを選択し、TeaTime は sql.js-httpvfs を使って SQLite データベースにクエリを実行する。
  • SQLite データベースの各行はライブラリ内の項目であり、ファイルハッシュ列は IPFS から項目を取得するために使われる。
  • Web アプリケーションは静的サイトであり、データベースも静的ファイルで構成されているため、簡単にフォーク、複製、デプロイできる。
  • フロントエンドのインスタンスは、teatime-instance トピック付きの GitHub リポジトリ。
  • ファイルは IPFS から配信されるため、この分散アーキテクチャは TeaTime の耐障害性を高める。

機能

  • タイトル、著者、年、または形式で検索可能
  • 読書履歴を保持し、ファイルを再度開いたときにそのページへ戻れる
  • ファイルをローカルにダウンロード
  • IndexedDB にファイルをキャッシュして高速読み込み
  • TeaTime にファイルをドロップしてレンダリング
  • ダークモードおよび全画面モード
  • クッキーなし、ログインなし
  • 完全に分散化

フロントエンド開発

  • TeaTime は Nuxt.js アプリケーション。
  • ローカルで簡単に実行可能: リポジトリをクローンして次の手順を実行
    1. 依存関係をインストール: npm install
    2. サーバーを起動: npm run dev
    3. http://localhost:3000 に移動
  • 追加情報は Nuxt のドキュメントを参照

データベース作成

  • JSON ベースのデータベースリポジトリをフォークし、JSON ファイルを必要に応じて調整することでデータベースを作成できる。
  • GitHub Actions が SQLite ファイルを生成し、GitHub Pages にアップロードする。
  • TeaTime と連携できる SQLite データベースを手動で作成する場合は、データベースリポジトリの例に従う。
  • 各 SQLite データベースには、以下のスキーマを持つテーブルが含まれる。列名は 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 ファイルが大きすぎる場合は分割可能。データベース最適化情報を参照する必要があり、FTS の利用を推奨。
  • リポジトリを GitHub Pages に公開し、リポジトリに teatime-database トピックを割り当てる

貢献

  • コーディングができなくても、このリポジトリやお気に入りのデータベースリポジトリをフォークして貢献できる。
  • リポジトリをフォークする際は、直接的に関連付けられないよう手動でフォークするのが望ましい(git clone && git remote add your-origin ... && git push your-origin main)。
  • 有用なデータベースリポジトリにスターを付けるのも良い方法。これは TeaTime ユーザーインターフェース上でデータベースの表示順を決め、他のユーザーが最良のデータベースを見つけやすくする。

1件のコメント

 
GN⁺ 2024-11-29
Hacker Newsのコメント
  • IPFSのコントリビューターが、IPFSで複数のゲートウェイからのダウンロード処理を改善する方法を提案している

    • @helia/verified-fetch を使えば、Fetchに似たAPIを通じてCIDを受け取り、コンテンツルーティングとP2P探索を処理できる
    • ゲートウェイに直接接続できる場合は、ゲートウェイを渡すこともできる
  • Pear P2Pフレームワークは、GitHubから離れて真に分散されたシステムへ移行する助けになるかもしれない

    • インデックスがGitHub上になければならないなら、IPFSにファイルを保存することにどんな意味があるのかという疑問を呈している
  • Heliaを使って、ユーザーがネットワークのノードとして貢献できるようにすることを検討している

    • Heliaについて調べる中でOrbitDBを思い出した
  • 特定のリソースにアクセスする際、CORSポリシーによってブロックされる問題が発生している

    • リクエストのモードを no-cors に設定すれば、CORSを無効化した状態でリソースを取得できる
  • すべての処理はブラウザ上で行われ、ユーザー、Cookie、トラッキングが存在しない

    • LocalStorageとIndexedDBを使って、最後に読んだ位置とファイル内での位置を保存している
    • この機能をとても気に入っており、感謝の意を示している
  • TeaTimeで使われているデータベースは、GitHub Pagesに公開されたGitHubリポジトリである

    • 悪意のあるユーザーがこのタグを利用できそうで、セキュリティ上の問題になり得る
  • データベースに何が入っているのかわからないため、何を検索すればよいのかわからない

    • ブラウズ機能を提案している
  • サンプルインスタンスを利用できるかという質問がある

  • Pocketのブックマークを統合できるか気にしている

    • 読みたいものをすべてオフラインでキャッシュし、リンク切れを防ぎ、クエリできることを期待している