Avatar
S. Ota
8721cdf007e798f80549a4bf174b973dc388e01952f0a952f5473c2cf84a7f60
A programmer. An author of nostr-keyx. Interests: Reinforcement Learning, Natural Language Processing and Artificial General Intelligence.

stacker news 、いわゆる `like` も sat だから、 sat たくさん持ってる人が影響力を持つってことかな?

stacker news の FAQ を読んでる。

- 投稿とコメントには最低 1 sat が必要で、スパム避けとクオリティ維持のため。

> each post and comment requires a small fee to prevent spam and to encourage quality contributions.

> Post and comment fees start at 1 sat.

https://stacker.news/faq

Twitter API がいつ使えなくなるのか待っているが、今朝も使えてた。2/14 だけエラーになった。

- 2/13 OK

- 2/14 エラー

- 2/15 OK

- 2/16 OK

https://twitter.com/TwitterDev/status/1625234161010343941

`a few more days` と言っているのでそろそろ使えなくなりそう。

> There has been an immense amount of enthusiasm for the upcoming changes with Twitter API.

> Twitter APIの今後の変化に対する熱意は計り知れないものがあります。

あと、皮肉が効きすぎている :D

あと、Iris で青ではなく黄色のバッジが付くユーザは何なのか調べてみたら、

- フォローしてないが友達が10人以上フォローしているユーザ

という意味らしい。Iris がフォローをおすすめしているような感じでしょうか。

https://github.com/irislib/faq#color-badges-on-user-names

Replying to Avatar S. Ota

https://stacker.news のアカウントの作り方

- stacker.news で sign in を押す

- 表示される LNURL をコピー

- Alby で Send 押す

- LNURL をペースト

これでアカウント作れました。

https://stacker.news/s_ota

Sign in じゃなくて Sign up でした。

https://stacker.news のアカウントの作り方

- stacker.news で sign in を押す

- 表示される LNURL をコピー

- Alby で Send 押す

- LNURL をペースト

これでアカウント作れました。

https://stacker.news/s_ota

snort を local で動かすと速くなる気がする件は、多分プラシーボ... しばらく使ってるとやはりレスポンス遅くなる時がある。

snort で使える markdown は CommonMark から link, linkReference, image, imageReference, definition を除いたもの。

https://commonmark.org/help/

https://github.com/v0l/snort/blob/94bdd44192337909a82dae6f3c0fe3c76359b7f7/packages/app/src/Element/Text.tsx#L162

とりあえず、snort は markdown link には対応していない。末尾にスペースつけるだけ。ってことでいいのかな。

> fiatjaf deleted the safer-markdown branch 2 weeks ago

となってる。

まあ、markdown は使わないことにしよう。でも # つけると意図せずでかい文字になったりするのはやめてほしい

https://github.com/v0l/snort/pull/153

結局この後どうなったのか追いきれていない。

snort の markdown 対応がよくわからない XD

Test for snort's markdown link.

[link1](https://snort.social/)

[link2](https://snort.social/#test)

[link3](github.com/getAlby/lightning-browser-extension/blob/ce1b4b0e48493ec82fbc4af46fa7237af3ce0d02/src/extension/background-script/state.ts#L98)

snort をローカルで立ち上げてるんだけど、https://snort.social/ よりサクサク動く気がする。

例えば、ページスクロールして一番下まで行った時に、次のポストが表示されるまでの時間が明らかに速い。

でも、アクセスログを見るとサーバにはリクエストが来てないから、ブラウザ側の処理かリレーからの返答の時間なんだと思うけど、この違いはなぜ起きるのかな?

docker 使える人試してみてください。

```

git clone https://github.com/v0l/snort.git

cd snort

docker build -t snort .

docker run --rm -it -p 80:80 snort

# http://localhost にブラウザでアクセス

```

[ソース1](https://github.com/getAlby/lightning-browser-extension/blob/ce1b4b0e48493ec82fbc4af46fa7237af3ce0d02/src/extension/background-script/state.ts#L98)

`decryptData` は AES。password は平文。

```

const password = get().password as string;

const privateKey = decryptData(account.nostrPrivateKey as string, password);

```

[ソース2](https://github.com/getAlby/lightning-browser-extension/blob/ce1b4b0e48493ec82fbc4af46fa7237af3ce0d02/src/extension/background-script/state.ts#L131)

pick で password を除外されるので `browser.storage.sync` には保存されていないはず。

```

saveToStorage: () => {

const current = get();

const data = {

...browserStorageDefaults,

...pick(current, browserStorageKeys),

};

return browser.storage.sync.set(data);

},

```

```

% cat ~/Library/Application\ Support/Google/Chrome/Default/Sync\ Extension\ Settings/iokeahhehimjnekafflcihljlcjccdbe/000003.log

password はなかった。

```

NIP-07 の実装の件、Alby はどうなってるのかなと思って調べてみた。

- 秘密鍵は AES で暗号化した上で `browser.storage.sync` に保存

- AES のパスワードは平文だが `browser.storage.sync` には保存していない(おそらくメモリのみ)

- AES のパスワードは Chrome 起動毎に入力

という感じなのでちゃんと実装されているようです。Lightning 方面はさっぱりわかりませんが、NIP-07 に関しては Alby で良いかもしれないです。

詳細は次のポストで。

NIP-05 のこれか。

> Showing just the domain as an identifier

>

> Clients may treat the identifier _@domain as the "root" identifier, and choose to display it as just the . For example, if Bob owns bob.com, he may not want an identifier like bob@bob.com as that is redundant. Instead, Bob can use the identifier _@bob.com and expect Nostr clients to show and treat that as just bob.com for all purposes.

https://github.com/nostr-protocol/nips/blob/master/05.md#showing-just-the-domain-as-an-identifier

もう少しマシな方法としては、OS が管理しているキーチェーン(macOS なら`キーチェーンアクセス.app`)に秘密鍵を置いて、そこから情報をもらうという方法があります。

Chrome の Native Messaging という仕組みを使うと、外部コマンドと stdin/stdout で情報をやり取りできるようなので、外部コマンド内でキーチェーンにアクセスして秘密鍵を取得して、外部コマンド内で署名を行って、その結果を Chrome に返すという方法があります。これだと Chrome には秘密鍵を保存せずに済みます。

NativeMessagingを用いたnostr NIP-07実装例については #[0] さんがプロトタイプを作成されています。

https://github.com/gpsnmeajp/nip07ex

nostr-keyx では、共通鍵(AES-GCM)で暗号化しているので、共通鍵を手に入れないと復号化は難しいです。共通鍵はメモリに置いているのでディスクのバックアップでコピーされることはないと思います。

% cat 000003.log

encryptedPrivateKey

"[\"0FsY962F4VMLS4My1HyfKWLSm/Rl6fdTM5i/ni0Z251o4Fgbfx5njvj+x5XSHhniZlQsOuxAQSu6y4Zjl+8Xn3bM6+139ov0WYp+APMOu+Q=\",\"/11uhVPrZeKcCbl9vbYE6Q==\",\"m96A5oRooKs9Ut3/aeHkWA==\"]"

共通鍵はメモリに置いているので Chrome を終了すると共通鍵は消去されます。なので Chrome を起動する毎にパスワードを入力して共通鍵を生成しないといけないということと、もし Chrome のメモリを覗き見されて共通鍵がバレると秘密鍵は復号化されてしまいます。

https://github.com/susumuota/nostr-keyx