YoshikuniJujo's avatar
YoshikuniJujo
YoshikuniJujo@yoshikunijujo.github.io
npub1a7y7...fdm2
Haskell好き
YoshikuniJujo's avatar
YoshikuniJujo 1 month ago
NIP-51 kind 10000あたりを念頭に目玉をミュートしようと思ってたんだけど、リレーもクライアントもあんまりまだこれは実装してないのかな。
YoshikuniJujo's avatar
YoshikuniJujo 1 month ago
目玉の話。 リレー側だったら「目玉アカウント」を検出した時点でIPアドレスを数時間ブロックするみたいな感じで対応できそう。
YoshikuniJujo's avatar
YoshikuniJujo 1 month ago
image Haskellのコードの「量」だけならだんとつ。 「量」は「愛」だからね。
YoshikuniJujo's avatar
YoshikuniJujo 1 month ago
僕はHaskellでコードにできるものすべてに関心があります。
YoshikuniJujo's avatar
YoshikuniJujo 1 month ago
目玉、kind7でcontentが目玉だったとき、そのアカウントが過去1年kind1を発行してなければミュートするみたいなクライアントを作ればいいんじゃないかな。 あとkind0がないことも確認かな。
YoshikuniJujo's avatar
YoshikuniJujo 1 month ago
/run hs import Data.Char main = putStrLn $ chr <$> [12390, 12377, 12392]
YoshikuniJujo's avatar
YoshikuniJujo 1 month ago
/run hs import Data.Char main = putStrLn $ char <$> [12390, 12377, 12392]
YoshikuniJujo's avatar
YoshikuniJujo 1 month ago
めんどくさいけど、とりあえずさっき定義したテーブルを作成して、Event型の値と秘密鍵からSQLのINSERT文を作る関数でも作ろうかな。で、サンプルを2から3個INSERTしておこう。
YoshikuniJujo's avatar
YoshikuniJujo 1 month ago
Nostrのイベントを格納するデータベースは id 文字列 pubkey 文字列 created_at 整数 kind 整数 a 文字列 b 文字列 c 文字列 ... A 文字列 B 文字列 C 文字列 ... content 文字列 sig 文字列 って感じかな。 タグのあたりがやっかいなのだけど、「一文字タグはすべて保存し、それ以外は無視。タグについては「値」より後の内容は無視することにする。 JSONはゆるすぎるので、データベースにするときにちょっとやっかいだったりする。
YoshikuniJujo's avatar
YoshikuniJujo 1 month ago
なんだかめんどくさくなってきたけど、流れとしては次の感じ。 データベースのテーブルを作成する JSONをEvent型の値に変換 Event型の値の署名を検証 Event型の値をデータベースに書き込む Eventの構読要求が来たとき、めんどくさいのがfilterの組み立てなのだけど、とりあえずJSONをSQL文に変換する関数を書いておけばいいかな。これは、まあまあめんどくさい気がする。 JSONとSQL文のあいだにFilter型の値をはさんだほうが良さそうだ。 で、Filter型の値を簡単に作成できるような関数とテスト用のデータを用意して、対話環境で試しながら書くのがいいかと。 でFilterを表すSQL文ができれば、あとはデータベースから取り出したEventをEvent型の値に変換して、それをJSONに変換してクライアントに送ればいい。 とりあえずそこまでやるか。
YoshikuniJujo's avatar
YoshikuniJujo 1 month ago
リレーは投稿の署名を検証しなくちゃいけないのかな。原理的に言えば「しなくてもいい」となりそうだけど、もちろん「したほうがいい」のは「それはそう」なんだけど仕様としてはどうなってるのかな。
YoshikuniJujo's avatar
YoshikuniJujo 1 month ago
Nip-11を実装しようとしたらwebsocketパッケージは使えないな。HTTPで接続してからWebSocketsにUpgradeするまでのあいだにHTTPでサーバの情報を送らなくちゃならないってことだと思うので。多分そういうことだと思う。 あと、よく考えたらWebSocketsじゃないHTTPクライアントから接続されたときに、何かしらの「まあまあちゃんとしたもの」を返すようにしておいたほうがいいのかもしれない。 となるとWebSocketを実装する他のパッケージを探すか、あるいは自分で書かなくちゃならない。