Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHP x Nostr
Search
Hakkadaikon
November 21, 2024
Programming
170
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PHP x Nostr
第170回 PHP勉強会@東京で発表した内容
https://phpstudy.connpass.com/event/335943/
Hakkadaikon
November 21, 2024
More Decks by Hakkadaikon
See All by Hakkadaikon
Just do it ! で 走り抜けてきたけど ちょっと立ち止まってみた
hakkadaikon
0
860
自作WebSocket (RFC6455)
hakkadaikon
0
140
routstrについて
hakkadaikon
0
160
Nostr x BTC
hakkadaikon
0
64
Blueskyのプラグインを作ってみた
hakkadaikon
1
820
Emacs x Nostr
hakkadaikon
2
400
My Introduction To Nostr
hakkadaikon
0
250
Nostr × C#
hakkadaikon
0
260
思考の速さで使うクライアント ~vimクライアント作ってみた~
hakkadaikon
0
510
Other Decks in Programming
See All in Programming
The Arts and Crafts of Work in the AI Era — Toward Mastery in Software Development
kuranuki
1
730
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.6k
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
320
Oxlintのカスタムルールの現況
syumai
6
1k
The NotImplementedError Problem in Ruby
koic
1
650
AIとRubyの静的型付け
ukin0k0
0
550
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.3k
Vite+ Unified Toolchain for the Web
naokihaba
0
130
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
100
AI時代のUIはどこへ行く?その2!
yusukebe
19
6.9k
Copilot CLI の継戦能力を高める コンテキスト管理
nozomutu
1
1.2k
AI駆動開発で崩れていくコードベースを立て直す
kyoko_nr_nr
1
440
Featured
See All Featured
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
600
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
150
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
220
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
200
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
140
The World Runs on Bad Software
bkeepers
PRO
72
12k
The Curious Case for Waylosing
cassininazir
1
380
How to make the Groovebox
asonas
2
2.2k
Optimising Largest Contentful Paint
csswizardry
37
3.7k
Navigating Team Friction
lara
192
16k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
220
Transcript
イラスト: @Bitpopart https://nostr-php.dev
自己紹介
名前 : 発火大根 PHP歴 : 3-4年くらい PHP勉強会 : offで1回参加したことあり 自己紹介1
自己紹介2 ~直近の活動~ 2024/9/23, Nostrの国際カンファレンスの 発起人をやりました。 (参加者99人、海外から参加/登壇多数) 登壇したり Nostrを提唱したfiatjaf氏に メッセージ貰ったり マグロの
解体ショーも!
Q.Nostrとは?
A.プロトコルです
Twitter(X)ぽいSNSとか Damus Nostter
クックパッド みたいなサービスとか zap.cooking
NoteやQiitaみたいな エントリ投稿できるやつとか YakiHonne
色々作れます
①WebSocket通信で速い ②電話番号メールアドレスいらない ③潰れない Nostrの特徴
①WebSocket通信で速い Nostr Websocket TCP / IP Ethernet Physical パケット クライアント
リレー (サーバー)
②電話番号メールアドレスいらない { "content": "test", “created_at”: 1726456407, "id": "7b31d7a9d9e8f65b1e3102a4cdc...", "kind": 1,
"pubkey": "101b30ee88c27a13de68bf7...", "sig": "3d7d019db85deece5c1d704c987393957bb8c5c61458...", "tags": [] } ・アカウント=鍵(公開鍵/秘密鍵) ・全てのイベント発行時に電子署名する
③潰れない ・自分で選んだ複数のリレーにデータをバラまく
今年から、他の界隈 x Nostrの組み合わせで 何回かLTをやっています 2024/2/10 Nostr x Vim 2024/4/27 Nostr
x C# 2024/10/27 Nostr x Emacs 2024/11/21 Nostr x PHP <- 今日
PHPでも Nostr開発 してみよう
使うOSS (PHP製のNostrプロトコルスタック) 8.1以上で動くよ
STEP1. laravelのプロジェクトを作る $composer create-project --prefer-dist laravel/laravel nostr-console
STEP2. nostr-phpをインストール $ composer require swentel/nostr-php
STEP3. artisanコマンドを作る $ php artisan make:command FetchTimelineCommand
STEP4. ちょろっと ソース書く(38L) <?php namespace App¥Console¥Commands; use Illuminate¥Console¥Command; use swentel¥nostr¥Filter¥Filter;
use swentel¥nostr¥Message¥RequestMessage; use swentel¥nostr¥Relay¥Relay; use swentel¥nostr¥Request¥Request; use swentel¥nostr¥Subscription¥Subscription; class FetchTimelineCommand extends Command { protected $signature = 'app:fetch-timeline-command {--kinds=1} {--limit=1}'; protected $description = 'Fetch the nostr timeline'; public function handle() { $kinds = array_map('intval', explode(',', $this->option('kinds'))); $limit = intval($this->option('limit')); $subid = (new Subscription())->setId(); $filter = (new Filter())->setKinds($kinds)->setLimit($limit); $response = ( new Request( new Relay('wss://yabu.me'), new RequestMessage($subid, [$filter]) ) )->send(); echo sprintf("%s¥n", json_encode($response, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); return 0; } }
NostrのTLを取得する コンソールアプリが 出来ました
早速動かしてみよう! $ php artisan app:fetch-timeline-command --kinds=1 --limit=1 --kinds : イベント種別
(0:プロフィール 1:投稿 7:リアクション etc…) --limit : イベント取得件数
{ "wss://yabu.me": [ { "type": "EVENT", "isSuccess": true, "message": "",
"subscriptionId": "Wd2SDCfvkh9T0eO6I1Mgw85iJbqGURLtjEr7BKmAyPasZNXHo4cFYuQ3lzxpnV", "event": { "content": "てすと", "created_at": 1732172057, "id": "de20ad56d21cf4c2e1fae1c67a58dbe475120fecded61c4563ed1faeff7b9839", "kind": 1, "pubkey": "101b30ee88c27a13de68bf7c8c06368ea3e3e837641595c18675677d18a46a45", "sig": "4d7002e71853282e61cb97ff0e093457d3dfd5c99fd512b1e074aaaca1a50a84250b3d16f6b895b7ebf0c8df1f247aee1cd0569f7075f937ed5e8ddf5bd0f36d", "tags": [] } }, { "type": "EOSE", "isSuccess": true, "message": "", "subscriptionId": "Wd2SDCfvkh9T0eO6I1Mgw85iJbqGURLtjEr7BKmAyPasZNXHo4cFYuQ3lzxpnV" } ] } こういうjsonが取れます
結構カンタンに つくれる
awesome- nostr-japan
気軽にやってみよう!仕組みはシンプル
Thank you for your attention !