大きな実装を2つしました。 ## 1つは⭐️機能。 1人10個まで押せます。 連打を楽しめるはずですが、まだなぜか気持ちよく連打できないバグがあるようです。 数回に分かれても、自動的にたされて10回までは増えます。 これってホントはNostrの仕様では不可能なのだけど 4隅の背景色と同じ発想で、MY PACEとしての拡張タグで実現しました MY PACE以外のクライアントで見ると⭐️1のままなのです   あと、押した星を消せる機能もつけました ⭐️でなくその下の数字部分をクリックすると、⭐️してくれた人と回数がポップアップします そこで自分の付けたのだけは `Remove` できて、0個にリセット可能! 以上の⭐️インフレ機能や、消すUIは はてぶを参考に、私なりに再解釈してデザインしました はてぶは日本語の勉強のために2年間くらいみっちりやって 何度もカラースターをもらったのですー はてぶでインプットしまくったことを咀嚼して アプリとしてアウトプットするターンが今なので、ぶくまはお休みしてるのですー   実装がめっちゃ難しくて、2時間くらい掛かっちゃった Zapの勉強はこれからだけど、カラー⭐️として 意識しないまま楽しめるようにできないかなー、と期待してる ちなみに、MY PACEでは⭐️はスターじゃなくてステラと読む トニト(サムダウン)は付けないですけど……
いま直したバグ - モーダル投稿のカーソル: cursor: defaultに(クリッカブルでなくす) - 長文モード投稿後: 自動的に短文モードに戻る - MY PACEデフォルト: getBooleanのバグ修正(新規ユーザーでONになるように) - 箇条書きの点、数字が見えてなかった。 つぎは、リプライの投稿に背景色が反映されず テーマ固定の色になってる現象をなおします。
今したClaude Codeとの会話です > 投稿済みの自分の投稿をエディットしたら、それまでのステラが消えました。泣いちゃいます。これは仕様?制約?バグ?教えてClaude Code様 ● Nostrプロトコルの制約です。 理由: Nostrではイベント(投稿)は不変です。「編集」は実際には: 1. 古い投稿を削除(kind 5イベント) 2. 新しい投稿を作成(新しいevent ID) という2ステップで実装されています。 星(リアクション)が消える理由: - リアクション(kind 7)は元の投稿のevent IDに紐づいている - 編集後の投稿は別のevent IDになる - 古いリアクションは新しい投稿に引き継がれない これはNostrの設計上の制約で、mypaceのバグではありません。 他のNostrクライアント(Damus、Amethyst等)でも同じ動作になります。 > 無理やり引き継ぐことは原理上できないのですか。nsecがわからないし無理ですか。喜ぶことはなんでもします ● その通りです。原理上、不可能です。 リアクションは他のユーザーが自分のnsecで署名したイベントなので: - 署名を偽造できない - 他人のnsecは持っていない - 新しいevent IDへの再署名を強制できない 抜け道もありません。 Nostrの署名ベースの設計上、これは避けられない制約です。 唯一の回避策は「編集しない」ことですが、それも現実的ではないですね。 > くそがー。星つけてくれた人、消してごめんね。たった1文字の誤字修正のせいで……
バグ報告ありがとうございます。 まずAPIのレスポンスに、原因調査のログを埋めました。 ついでにリレーも増やしてみました。 ```ts 23 - const RELAYS = ['wss://relay.damus.io', 'wss://nos.lol', 'wss://relay.nostr.band'] 23 + const RELAYS = [ 24 + 'wss://relay.damus.io', 25 + 'wss://nos.lol', 26 + 'wss://relay.nostr.band', 27 + 'wss://nostr.wine', 28 + 'wss://relay.snort.social', 29 + ] ``` ちなみに、リレーは設定画面からは変更できません。 ほかのNostrクライアントをいろいろ使ったのですが みんな設定画面でリレーを自由に増減できるデザインでした なぜMY PACEではそうしなかったかというと、原理上できないためです MY PACEは、みんながこれを表示してるブラウザがNostrネットワークに直接参加してるのでなく Cloudfrare Workersで動いてるHonoのバックエンドが 代表してNostrネットワークと送受信してるんです ブラウザはHono製のAPIを呼んでるだけなんです   なぜこのアーキテクチャにしたか、というと 受信した皆さんの書き込みに、サーバー側で - この部分は埋め込みに変換する! - この部分は文字化けを直す! - この文字が含まれてるってことは中国語と判定して、フィルタで日本語のみにしてるユーザーには間引く! みたいな処理をぶんぶんしてるんです なので、ブラウザ内のjsではセキュリティ上できなくなったはずの 埋め込みができてるんです SNSのSSRという発想? コードは でオープンだから あやしいことしてないかチェックできます 強い人たちにチェックされるのは恥ずかしいけど そういうの怖がってたら進撃ファンっぽくないしなー
画面のデザインは少年にヒントをもらいました 既存のNostrクライアントはもちろん 既存のすべてのSNSとかぶらないデザイン それってつまり 「誰でも思いつくけどあえて誰もやらなかった」地雷を踏むリスクMaxのアプローチなので 営利ではやっちゃだめな発想ですが 営利じゃないし、あははーーー って気軽さでやりました   最初に浮かんだアイデアは 投稿1つ1つを意味する四角い領域、どのSNSもカード状に見せてるけど あえて境界をもやもやにぼかしたら......? 脳内かコスモゾーンかわかんないけど 漫画でいうところの、ふきだしでなく背景に溶け込んだ思考の文みたいになって 全員が溶け込んだlain的、L結界密度高すぎな命のスープみたいな印象になって これはイケるのでは!? って30分でプロトタイプを作ったんだけど   イケるかーー! ってボーボボのように画面を殴るくらい、キモい見た目になったので スクショすら残ってない ただ、その時のアイデアが次に繋がった 投稿の境界線をなくすと、ユーザーの区別がつかないので 個性を表現する手段として、投稿の背景色を、投稿ごとに持てるようにしていたのです その指定方法は、PS1のFF7をリスペクトしました ウィンドウの4隅の色を自由に決められる、という仕様です 全部を青にすればFF5っぽく 上2つを白に、下2つを青にすればFF6っぽく 考えた人、天才だろ……って尊敬してます   その翌日に、少年が遊んでるロブロックスのブレインロットの画面を見てて この明るさ、イイッ!! って思って、 あれ……? 夜に作業することの多い個人開発者は いかにもモダンな黒とか白とかのクールなデザインは エディタで散々見てるんだから エディタから離れて1分程度で、セカイに対して くぅー疲れました的な進捗を書くSNSとしては むしろ、ロブロックス的なイカれたな派手さのほうが ああ……明るい……でも、光属性じゃないから癒やされる…… って、くせになるのでは? って思ったの   そしたら、投稿はむしろビビッドなカード状になって 4隅の色を個人の識別、自己主張、その時の気分の表現など 汎用的な目的で、投稿に埋め込める という仕様と、カチャカチャカチャ!っとキレイにハマった! ロブロックスだけに! ドラえもん誕生のF先生のように「これだーー!」って思った こんな感じで 誤字や文法が狂ってても コーディングハイなまま投稿して許される場を作りたいんだ
やりたいことは、ひとことでいうと 「プログラマー向けSNS」なのです QiitaやZennはブログであって、短文が許されない空気 お絵描きなら、線画の時点で「線画かんせいー、これから塗ります」みたいに 中間報告する文化があるじゃないですか   プログラミングだと、 - 完成までにかかる時間が、絵や文章より長い - ちゃんと動いてから初めて言え、的な伝統 があって、SNSとの相性は劇わるっ CLIのexeなんて、SNSに動作の様子を貼れないし 仮想環境で標準出力を見せてくれるサービスは多くあっても、SNSの外部だし HTML5ゲームはまだ相性がいいはずなのに 埋め込ませてくれないしよォォォォオォォオオ ないなら作るかの精神が、ハッカーだろう? そうだろ、松! 投稿内の埋め込みって、負荷はクライアント側なんだから サービス側は防ぐ必要ないと思うのよね 1クリック必要だから、実行は自己責任だし おぅ……ってなる画像とかと、同じルールでいいと思うのよね   まぁ、そんな感じで 開発者向けの、気軽な中間報告の文化を作りたくて その道具としてのマイペースなのです FFの設定資料が30年ぶりに発掘された、みたいなニュースって たいていマップとか敵デザインとか企画書とか、画像中心で コードがないんだよぉおおおおお なんだよぉぉ、上流ばっかかよぉおおおお 実装がいなきゃ、FFは存在してないんだよぉおおおおお ってジークイエーガーのように思ったのだけど それってコーダーが交流に興味ない界隈なせいもあるなーって思った 少なくとも、私が見たコーダーたちは みてみて、この関数エレガントでしょー? って言いたいのに、言う場所がなくて すでにあるSNSでいってもキラキラと相性悪いし そういう場所だったはずのはてなも 関数1つのウンチクだけで投稿できる空気でなくなったようだし コードでなら饒舌に語れる人なのに もったいないなーって思ってたので、作ってあげたかった   ユーザープロフィールがそのままポートフォリオになる的な? かわいいスターが飛び交うGist的な? 夜な夜な作ってる様子を実況して 誰かに知ってもらえれば、がんばれーみたいな応援が届いて それがなかったら飽きて完成できなかったものが、完成して そのリポジトリが、とんでもない発展を将来したら 超おもしろくない? 初期にスターつけてた人みんなが わしが育てた って証拠付きでいえるんやで? そういう場を で作りたいのです
まだバグだらけなので、バグを見つけたら教えてね ……といえるレベルに到達してません 20個くらいは把握してるので 今日も直していきます 最大のバグは、そもそもタイムライン表示がまだ擬似的ってこと 過去を辿れないんです! 新着は検知できたんですけど! でもそれもイマイチで、50件ずつの読み込みにしてるんだけど いっぺんに51件以上の新着があったら、新しい50件を優先するので 古い1件は表示されないままになっちゃうでしょ? そうならないように、この範囲に未取得が何件ありますよー ってクリック領域をつくるよう実装したはずなの でも、まだバグで表示されないの ナンデ!?ナンデ!?   本当はユーザープロフィール画面では その人の投稿を最初の1回まで、無限スクロールで読み込めるようにしたいのだけど その方法も今日Nostrの仕様を調べながら書く 直ってなかったら、金沢の雪のせいだと思ってください ふぶきふぶき氷のセカイ
MY PACEはいわゆる 「わたしがかんがえたさいきょうのSNS」を作りたくて 1週間前からNostrを勉強しながら作ってるものです 短文と長文の両対応した とにかく明るくてマイペースに続けられるがコンセプト 長文だと**Vimモード**に対応済み 長文を書いてもええんやで を作者自身が示す例として、以下に書いてみます ## mdが使えます、こえて、すべてmdとしてデコード表示されます! 画像もURLも貼れますし 私が使ったことあるーって思えるサイトは 埋め込みに対応してます YouTubeはともかく、いまのXってフツーは埋め込めないのですが 技術で殴って埋め込みました HTML5のゲームとかも埋め込めて そのまま全画面で遊べます 画像のURLとか サイトのURLとかは md的には、勝手に埋め込みやリンクになったりしないものですが これはSNSなので、特別扱いで発動します ホントはadocにも対応したかったのですが 軽いパーサーがなかったので、箇条書き記号だけはadoc形式でも認識するぜー みたいな、キモい折衷(キメラ)mdですー ## 下書きは常にブラウザ内に自動セーブされてます 長文が消えないので安心 `:w` で投稿するまで、こつこつ書きだめればいいし `:q` でタイムラインに戻ったくらいでは消えないぜー 投稿後でも、`EDIT` を押せば何度でも編集できるし 追記する前提で、小分けに投稿してもいいんだッ 1文字誤字ったら直すにお金かかるXと違って お財布に優しいSNSなんだ なんかいま再編集したら、それまでに付いてた★が消えたけど それがバグなのか仕様なのか、作者にもわからない発展途上のSNSなんだ
あれ、スクショやアプリ名は テスト書き込みに書いてたけど MY PACEのURLは書いてなかったような…… 書いてたっけ……寝ながら作ってるから覚えてない…… 発見する人、すごいなー テスト環境と分けてないので 今日もどんどん画面が変わってくと思うけど それも含めて楽しんでもらえたら幸いです
image 写真のexif情報が、添付で消えるかの実験 金沢港方面に見えたエヴァ3号機です