Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Nostr x Gorilla Vim Collaboration

Nostr x Gorilla Vim Collaboration

Takuma Shinohara

February 10, 2024
Tweet

More Decks by Takuma Shinohara

Other Decks in Technology

Transcript

  1. Nostr の 耐障害性 と
    WebSocket を
    使い倒す
    2024/2/10 Shino3(しのさん)

    View full-size slide

  2. お題目
    • 簡単な自己紹介
    • Nostr とは?
    • 日本国内でのNostr
    • 耐障害性のお話
    • 通信の仕組み
    • 活用事例の提案
    • 実際に作ったもの
    • これからの展望

    View full-size slide

  3. 自己紹介
    通称名: Shino3(しのさん)
    Twitter: SHINOHARATTT
    GitHub: ShinoharaTa
    Nostr: @shino3.net
    Bluesky: @shino3.net
    Domain: shino3.net
    NostrRelay: relay-jp.shino3.net

    View full-size slide

  4. 自己紹介
    • 工業高校出身
    • 電気科、電気回路、電子回路メイン
    • 専門の短大出身
    • 電気回路、電子回路
    • メーカー勤務
    • 組み込み開発 2年
    • システム開発 4年
    • 都内、受託開発系
    • Webシステム系 5年

    View full-size slide

  5. 自己紹介
    • 経験してきた言語
    • C言語、C++、C#
    • PHP、Laravel
    • JavaScript、TypeScript
    Vue、Nuxt、Svelte
    • 勉強中
    • Rust
    • Flutter(Dart)
    • インフラ、Grafana等

    View full-size slide

  6. 自己紹介
    • 経験してきた言語
    • C言語、C++、C#
    • PHP、Laravel
    • JavaScript、TypeScript
    Vue、Nuxt、Svelte
    • 勉強中
    • Rust
    • Flutter(Dart)
    • インフラ、Grafana等
    Vim経験:0秒

    View full-size slide

  7. プライベート
    • 趣味
    • プログラミング
    • 車の競技(参加者側)
    • DIY
    • 好きなもの
    • キングサーモン
    • アトランティックサーモン
    • トラウトサーモン
    • 信州サーモン
    • 推し
    • 檜山沙耶さん
    • アトランティックサーモン

    View full-size slide

  8. Notes and Other Stuff
    Transmitted by Relays
    リレーによって通信される
    ノートやそれ以外のもの

    View full-size slide

  9. NIP という
    Nostr Implementation Possibilities
    プロトコル仕様を
    管理する仕組みがある

    View full-size slide

  10. NIP-01 という仕様で
    単一の JSON 構造を
    定義する

    View full-size slide

  11. 複数のサーバーと同時接続
    冗長化される

    View full-size slide

  12. 複数のサーバーと
    複数の管理者が
    存在する

    View full-size slide

  13. 接続は
    WebSocketを
    使用する

    View full-size slide

  14. 究極の分散

    View full-size slide

  15. 真の
    分散型SNS

    View full-size slide

  16. 日本国内での
    Nostr

    View full-size slide

  17. 日本国内での Nostr
    • 2月 : 凍結祭りのときに Damus がリリースされる
    • 2月 : Nostr 勉強会(日本初)を開催(以降、定期的に開催)
    • 5月 : 技術書典で Nostr の本を出版した
    • 7月 : X(Twitter) の API リミットでユーザー数が大幅増加
    • 11月 : Nostrasia イベントが開催
    Twitter 創設者のジャック・ドーシーが来日
    • 11月 : 技術書典で Nostr の本(二冊目)を出版した

    View full-size slide

  18. SoftwareDesign 誌への連載

    View full-size slide

  19. 技術書典で本を販売
    • 物理本:200冊 完売
    • 電子版:160冊 販売中
    • 物理本:150冊 完売
    • 電子版:128冊 販売中

    View full-size slide

  20. Nostrasia での一幕

    View full-size slide

  21. Nostrの
    耐障害性

    View full-size slide

  22. Nostrの特徴:冗長性

    View full-size slide

  23. Nostrの特徴:冗長性
    EMERGENCY

    View full-size slide

  24. Nostrの特徴:冗長性
    DOWN
    DOWN

    View full-size slide

  25. DOWN
    DOWN
    Nostrの特徴:冗長性
    つながる!

    View full-size slide

  26. 通信の仕組み

    View full-size slide

  27. WEB Socket を
    使用する

    View full-size slide

  28. 一度接続した
    コネクションを

    View full-size slide

  29. 無限に
    使い倒す

    View full-size slide

  30. 再接続をしないので

    View full-size slide

  31. 爆速!!
    鬼速い!!

    View full-size slide

  32. 駅で・・・

    View full-size slide

  33. 街中で・・・

    View full-size slide

  34. つながる!

    View full-size slide

  35. {
    "id": "シリアライズされたイベントデータのSHA-256(32バイト)を
    小文字の16進数で表記したもの",
    "pubkey": "公開鍵(32バイト)を小文字の16進数で表記したもの",
    “created_at”: “秒単位の生成時刻",
    "kind": "イベントの種類",
    "tags": [
    ["e", "..."],
    ["...", "他の種類のタグが後に追加される可能性がある"]
    ],
    "content":"任意の文字列",
    "sig": "シリアライズされたイベントデータのSHA-256
    (IDフィールドと同じ)に対する署名を16進数で表記したもの"
    }
    NIP-01 に基づく JSON 構造

    View full-size slide

  36. データ種別の定義
    • Kind 0 : ユーザーのプロフィールなど
    • Kind 1 : みんなの投稿
    • Kind 6 : リポスト
    • Kind 7 : いいねなどのリアクション
    • Kind 40 : パブリックチャット(チャットルームなど
    • Kind 42 : パブリックチャットのコメント

    View full-size slide

  37. Kind 30023
    Long-form content

    View full-size slide

  38. Kind 30078
    Application-specific data

    View full-size slide

  39. 野洲田川
    定点観測所

    View full-size slide

  40. 流速ちゃん
    Bot

    View full-size slide

  41. 活用事例の
    提案

    View full-size slide

  42. 通信の軽さ

    View full-size slide

  43. 耐障害性

    View full-size slide

  44. 災害時
    情報配信サービス

    View full-size slide

  45. 能登半島地震

    View full-size slide

  46. 起きていたこと
    •インターネットが繋がらない
    • 被災地周辺でのパケ詰まり

    View full-size slide

  47. 実際に
    作ったもの

    View full-size slide

  48. 気象
    警戒
    システム

    View full-size slide

  49. 仕組み
    緊急地震速報

    View full-size slide

  50. WEB クライアント
    仕組み
    緊急地震速報
    Kind 1
    投稿
    Kind 1
    投稿
    Kind 1
    投稿
    Kind 1
    投稿

    View full-size slide

  51. 補足
    https://www.docswell.com/s/matsuu/KNRMQG-2023-02-23-002146

    View full-size slide

  52. リアルタイム
    緊急地震速報
    表示システム

    View full-size slide

  53. https://github.com/ShinoharaTa
    - eew2nostr
    - eew2nostr-viewer

    View full-size slide

  54. 緊急地震速報表示システム
    WEB クライアント
    仕組み
    緊急地震速報
    Kind 1
    投稿
    Kind 1
    投稿
    Kind 1
    投稿
    Kind 1
    投稿
    Kind 30078
    アプリ利用
    データ

    View full-size slide

  55. 今後やりたいこと
    •Information Dashboard
    • 災害情報、警戒情報
    • 津波、震度情報
    • 潮位、河川水位
    • etc

    View full-size slide

  56. 開発の協力者も
    募集してます

    View full-size slide

  57. 大量の情報社会

    View full-size slide

  58. 確実に情報を
    届けるための
    手段

    View full-size slide

  59. 必要なくなる日を
    期待します

    View full-size slide