2023/11/24 08:58:00
BlueskyBluesky Advent Calendar 2023にエントリーした
Bluesky Advent Calendar 2023に流れ上エントリーしてしまった。
となると記事をあげるならここに書くことになるはず。
1回しか記事書いて公開していないので公開方法忘れてる感じがするので、お試しの記事を書いて手順を思い出す事にする。
まずはDirectusに入稿するところから。
2023/11/24 08:58:00
BlueskyBluesky Advent Calendar 2023に流れ上エントリーしてしまった。
となると記事をあげるならここに書くことになるはず。
1回しか記事書いて公開していないので公開方法忘れてる感じがするので、お試しの記事を書いて手順を思い出す事にする。
まずはDirectusに入稿するところから。
2023/12/16 00:00:00
Blueskyこの記事は Bluesky Advent Calendar 2023 の 16日目 の記事です。Bluesky で私が作ったおもちゃとその裏の仕組みのお話をしたいと思います。
私は @shigepon.net というアカウントで Bluesky に 5/10 より参加しています。 元々私はエンジニアですので Bluesky に来ても何か作れないかなと思っていたのですが、とりあえず私の自宅の炊飯器でご飯が炊けたら「ご飯が炊けたよ!」ってポストするだけの ボット だけ作って普通に SNS として利用していました。 ところが、カスタムフィードっちゅうもんが案外簡単に作れそうだっていうことを気付かせてもらったので、これはいっちょ作ったろか、っていうことでカスタムフィード職人の道を志す事になりました。
過去に作ったカスタムフィードはこんなのがあります。
とまぁこんな感じです。
動かしているサーバがどうなってるのかと言うと、カスタムフィードを提供するフィードジェネレータを自宅サーバ上で動作させています。なのでカスタムフィードに何を出すのかというアルゴリズムを自分で書いたプログラム次第で好き勝手表示させている(SkyFeed のような決められた仕組の中ではなく AtProto の限界まで自由にできる)のです。
また、奈良とかランダムについてはElasticsearchを動かしてそこにインデックスを作成しています。ここに入れるポストを格納する方法が以下の基準になっています。
なのでlangsにjaを入れて発言した人のポストからその人の最初のポストまでがElasticsearchに入って、ランダムや奈良で参照される事になります。langsにjaを入れているけれども日本語ではないポストも中には存在しますが数が少ないので放置しています。
最近、Blueskyのサーバの挙動が変わったようで、以前はカスタムフィードにアクセスがある度にその回数だけフィードジェネレータにアクセスがあったんですけど、最近はカスタムフィードを表示しようとしても勝手にサーバでキャッシュした内容を返却するようになっていて、ちょっとやそっとどうやったところで以前のようなテンポの良いカスタムフィードの挙動にならないのです。まぁ正式サービスじゃないので仕方のない事とはいえ、しょんぼりしているのは事実です。とりあえず、過去に選択したのと同じ分岐をたどると、以前に分岐した時に表示したタイムラインを表示する挙動になってしまったので、カスタムフィードを使ったゲームブックを遊ぶ際には、遊ぶ側である程度慮った操作をする必要が出てきます。ごめんなさい。私が悪いんじゃないって言いたいですけど。
この時、3.の症状になった時に1回しかリロードしないようにしないと、連続して同じ選択肢を何度も選択したことになってしまい、ストーリーが知らないところでずんずんすすんでしまうので、ていねいに操作しないといけないのです。まぁ仕様変更かかるだろうと思いながら公開したので仕方ないですが、このシステムの上でシナリオ作成をしていただいた方には申し訳ないと思っています。
さて、さらに仕組の奥の方の話にすすめていきます。技術的な色合いが濃くなっていくのですが、エンジニア枠なので技術の話にも触れていきます。
これらのプログラムは実は Rust で書かれています。Rust 上で AtProto を扱うライブラリは既に他の方が用意されているものもあったのですが、Firehose を使ったライブラリがその時点ではなさそうだった(調査不足の可能性あり)のと、AtProto をたたくことそのものはそんなに難しくなさそうなのと、Lexicon からコードを起こすソフトウェアを書いてみたかったのとで、結局自前で用意してしまいました。この自前で用意したライブラリは、@kojira.io さんに唆されてうっかり crates.io で公開してしまいました。aerostream という形で公開していますし、ソースコードも GitHub で shigepon7/aerostream として公開しています。まぁロクにテストコードも書いていないので、自分でツール作りながらへこへこデバッグしているような状況ですので、もし不具合見つけたら GitHub に Issue あげてもらえるとうれしいです。いちおうこのライブラリにはコマンドラインプログラムとしてもビルドできるようになっていって、ログインせずにただ条件に合致したポストをだらだら眺めるだけのアプリとして利用する事もできるようになっています。こういうような道具立てで、Rust のプログラムをコンテナイメージにビルドしています。もっぱらコンテナのベースは ArchLinux を使っています。Rust も最新のライブラリ追いかけないとけっこう動作環境シビアで、ArchLinux のような最新を追いかけるようなディストリビューションを使っておかないとついていけないので。
いちおう簡単にですが aerostream を使ってカスタムフィードを自作する方法を説明しておきます。
https://github.com/shigepon7/aerostream/blob/main/examples/feed_generator.rs
ここに過去に作成した「美味」のカスタムフィードのソースコードがあるのでこれを見ながら簡単に解説します。基本的にやることは以下の流れになります。
美味フィードの場合はこれに加えて Firehose でポストの情報を検索できるようにするために Subscription trait の実装 も行っています。Subscription も Algorithm 同様に FeedGenerator に対して set_subscription することで、Firehose からのイベントを受けられるようになります。
実際の挙動としては、カスタムフィードにアクセスがあれば、Algorithm の handler() が呼ばれ、既に蓄積されているカスタムフィードとして表示すべきポストの AtUri の一覧を返します。cursor や limit の処理は FeedPosts にポストの内容を登録しておくことで自動で処理してくれるようになっています。「美味」カスタムフィードの場合は、このポストの一覧は Subscription で受け取ったポストの一覧から必要なものを餞別して FeedPosts に格納するようになっています。一方、カスタムフィードへのアクセスとは別に、 Firehose からは常時イベントが流れ続けていて、こちらは Subscription の handler() でそれを読み出すことができます。一度に送られてきたイベントの中から Post の create と delete だけを選別して、text に「美味」を含むポストの create であれば FeedPosts に追加、delete であれば FeedPosts より削除するという形でカスタムフィードとして表示すべき情報を蓄積していきます。この2つの動作の組み合わせでカスタムフィードを実現しています。FeedGenerator は http を直接ハンドリングでき、FeedGenerator の start() を実行すると 8000番のポートを listen しますので、インターネットからの http アクセスをこのポートに接続すれば、実際にカスタムフィードとして機能するようになります。
ちょっと話を切り換えて自宅サーバの話をするのですが、PC を 7 台ほど組み合わせて Kubernetes のクラスタを組んでいます。これを Cloudflare をリバースプロキシにして公開しています。自宅は固定 IP ではなく普通のフレッツの契約ですので、Cloudflare を DDNS 代わりに利用させてもらっています。WAN 側の IP を調べて Cloudflare に登録している IP から変わっていたら Cloudflare をたたいて DNS のエントリを変えてもらうようにしています。ただ、うちの家は外からの入口のルータに NVR510 を使っていて、ここに 小型 ONU を直接挿す形にしているので、ひかり電話の SIP サーバも NVR510 が担当している形になっています。世の中に SIP サーバ公開すると、アホみたいに攻撃パケットとんできていて、どうも 1 日に 1 回くらい再起動かけてあげないと電話の着信もできなくなってたようなので(詳しい原因の調査までは面倒でやってない)、毎日 AM3 時になると NVR510 を再起動かけるようにしています。ルータ再起動かけると WAN 側 IP が変わるので AM3 時前後はもしかするとカスタムフィードが見えないかもしれません。このへんは自宅サーバの方が楽しいから、という理由でクラウドを使わない私の個人的な嗜好の問題ですので、動いてなかったらごめんなさい。クラウド借りる方が電気代より安いんじゃないかとか思ったりする時もありますが気付かなかったことにします。自宅はエネファームと太陽光発電とどっちもついてる上に蓄電池までついているので停電には強いと信じています。これらのエネルギー機器もほぼ趣味で自宅に導入しちゃいました。
ついでに言うと、ご飯が炊けたよボットは、元々自宅のスマートホームシステム(これも Rust で書いてあって、自分で EchonetLite をしゃべって家電の状況を知ったり制御したり、ネットの情報をスクレイピングで収集して自宅に雨降ってるのか教えてくれたり、JR が遅れてるのか教えてくれたり、川が増水してないか教えてくれたり、監視カメラで動体検出すると教えてくれたりするもの)を動かしていたところに、Bluesky に投げても良さそうな、ご飯が炊けた、という情報だけポストさせるようにしたものになります。スマートホームシステムの本体は UI には Slack を利用していて、家庭内で発生したあらゆるイベントが監視カメラ画像をアニメ GIF にしたものも含めて時系列に並ぶアプリになっています。家の鍵を持たずに出かけた子供が家の鍵を開けて欲しい時には「監視カメラの前で踊れ」という指示を出しているので、時々うちの子供は監視カメラの前で踊ります。そうすると Slack に電子錠の解錠コマンドを遠隔で入力して鍵を開ける仕組みになっています。踊り認証システムです。でも最近、子供も学習したので踊らずに LINE で「鍵開けて」って送ってくるようになりました。その方が確実ですしね。
話が脱線しましたので、このへんでそろそろ〆めにかかろうかと思います。こういう家に帰っても技術どっぷり浸かってるような変人が運営するカスタムフィードですので、ちゃんと動いてなくてもブチ切れたりせずに、生暖かい目で見守ってやってください。もし良ければ、動いてないよって優しい口調で教えていただけると泣いて喜ぶと思います。これからもお付き合いよろしくお願いします。
2024/04/24 21:00:00
BlueskyBluesky meetup in Osaka Vol.2 が 2024/4/14(日) に知る人ぞ知る形で開催されました。Bluesky チームの Why さんが来日するが、東京だけじゃなく大阪までも来てくれるというので、これは歓迎せねば!というのが事の発端なのです。
場所は うかわ さんが親切にも提供してくれる事が早々に決まりました。イベントで出るゴミもビルの回収にのせて良いことになりました。もう本当にこれには感謝しかないです。NTT データさんめっちゃ良い会社ですよ。
イベントとしては Why さんに質問して、ケータリング頼んで飲食するというスタイルは早々に決まっていたのですが、発起人の こじら さんから無邪気な発言が。
2024/03/13 22:00 たこ焼き焼いたりできないかなあ。流石に無理か
これに対してうかわさんも
2024/03/13 22:05 たこ焼きは OK ですが現状復帰できる範囲でw
と回答すると、さらに クコ さんがそれにかぶせる形で
2024/03/13 22:11 BRUNO ならうちありますよー
と、とんとん拍子でたこ焼き焼く流れに。
私 もつられて、
2024/03/13 22:13 bruno うちにもあるぞ
ということでたこ焼き器 2 台体制でのタコパ開催の流れに。
事前にテレカンで役割分担等決めたのですが、私、特段、お手伝いできる点がなさそうだったんで、たこ焼き準備の主担当を担うことにしました。
GIGAZINE さんは関西だし声かけようということで、こちらはクコさんが突撃してくれることになり、きっちり参加してくれることになりました。当日も何かあったらまた気軽に呼んでねって言うてくれはったので、気軽に声かけて良さそうです。
ステッカー等のグッズについても開発チームに Koji さん(えるたん さんに Bluesky のアカウント教えてもらいました!ありがとうございます!) がチームメンバーにかけあってくれて、こっちで作っても良いし、チームの方で用意しているものも送ってもらえる事になりました。ステッカーのデザイン (connpass の告知画像等もですけど) は みりめい さんがお忙しい中、さくさく作ってはりました。この方、本当に仕事が早くて尊敬しかないです。
あと、今回は実現しなかったのですが、「月化粧」に好きな図案をプリントできるっていうサービスがあって、こういうのをおみやげに持って帰ってもらうのも良さそうだとう話はあったんですが、手配するふんぎりがつかずに流れていきました。おもしろそうなので個人的に何か使ってみたい気はします。
あと、ビンゴ大会と開催するのであれば必要かも?と思って実は BINGO っていうカスタムフィードも用意していました。このカスタムフィードは、閲覧する人ごとに 1 ~ 75 までのランダムな数字の系列を、Reload する度に 1 つずつ生成するフィードになっています。それだけではなくて @bot.shigepon.net に対して view <handle or did>
というメンションを送ると、その対象のユーザーが生成した数字の系列を閲覧することができる仕組になっていて、ビンゴ大会に参加している人たちが「数字なに?」っていちいち聞き返さなくてもスムーズにビンゴ大会が進行できる仕組も実は仕掛けられていました。これ別に普段から公開しているので使いたい人いたら勝手に使ってください。view モードを解除する場合には、同様に @bot.shigepon.net に対してメンションする形で reset
とポストすれば、自分で数字の系列を生成するモードに戻ります。
準備としてはたこ焼きの準備に集中する事になりそうだったので、まずはたこ焼きのレシピを発掘するところから。粉はたこ焼き粉を買ってくる想定だったので、粉の販売元のレシピを参考にするのが良かろうということで これ を参考にしました。実際には粉の袋に書いているレシピよりも卵の分量が少なかったので、当日にうかわさんに卵を 6 コ追加で買ってもらいました。これも申し訳なかったです。
買い出しは前日に行くことにしましたが、急に言うて急に買えないものもあるだろうということでそれだけ Amazon で購入しました。それは「舟」です。どうせみんな写真とるだろうからビジュアル的に、ザ ★ たこ焼きにしたくて舟買いました。ただこれ、実は器の厚さ的に熱を通しやすいので、焼きたてのたこ焼きを入れたら熱くて持てなかったので、本当に見た目だけのものでした。机の上に置いて食べるスタイルなら良いと思いますが、ソースをダバダバにかけると継ぎ目のところからソースが漏れるので、そのあたりも含めて楽しむべきものと割り切って利用するのが良さそうです。ダバダバにかけるのがいかんのです。
あと、事前に準備するものについてはスプレッドシートでちまちまと書きためていたのですが、こんなのあったら良いよ、こういうのは必須だよ的にいろいろ yukotan さんに教えてもらいました。ありがとうございます。実は、会場にはパントリーというか、水道とシンクもあったので、洗い物ができてしまうという素敵な会場だったのですが、粉を下水道に流したりするとそれはそれで配管詰まりを発生させるリスクもあったので、掃除関係のグッズの手配のアドバイスが非常に参考になりました。もしステッカー必要なら LINE の匿名配送で送りますのでまた連絡ください。あと、全く関係なく にゃりん は単純にステッカーくれって言うただけなのですが、にゃりんにもステッカー送ろうかなとは思います。
で、残りのものはうかわさんと二人で私の車でロピアと併設のダイソーまで買い出しに行きました。Bluesky meetup in Tokyo の裏ですがタコを買いおきするわけにもいかないので、クルマで買い出しまわりながら東京の様子をスマホで確認して買い物してました。荷物が多くなると当日持って行くのだけで大変だったので、そのままクルマで乗りつけて、事前に切らないといけないタコ以外は全部会場に事前に搬入しました。会場にはなんと冷蔵庫もあるので、ネギとか冷蔵すべき品物もちゃんと前日搬入で冷蔵保管できたのです。ほんまに NTT データさん良い会社です。
前日搬入して、調理スペースの場所、ケータリングの配置場所を決定し、100 均で購入したブルーシートをセッティングしておきました。ゴミを気軽に捨てて良いという選択肢がとれたのでブルーシートも使用後はそのまま廃棄させてもらいました。ただビジュアル的にはブルーシートは若干物々しさが滲み出たのでそこはマイナスだったかもしれません。とはいえ、原状復帰するにあたっては非常に役にたったのでこれはこれで良しということにします。
で、実はここで非常に重大な事実が発覚します。それは
日曜は集中管理の空調が停止する、運転させるには 4 ~ 5 万円費用が発生する
ということでした。さすがにその空調費用を負担できるスポンサーもないので「窓を開放してしのぐ」という作戦を取らざるをえませんでした。これは参加者の方には大変申し訳なかったなと思いますが、当日そこまで大問題にはならなかったのはまだ時期的にそこまで暑い時期ではなかった事に救われたのだと思います。
前日の搬入も終了し、帰り際に 551 の蓬莱買って帰るということで、わざわざ天王寺まで寄り道して 551 を買って帰り、にゃりんにもらったうなぎコーラと一緒に食べました。うなぎコーラは疲労した体には最初はおいしいと思えたのですが、2 口目以降は漢方薬の味がしました。まぁタコパの前日の滋養強壮になったと信じます。
そして当日。前日タコ切るのは疲れて無理だったので、当日の朝にさばきましたが、こりゃタコ多かったなっていうくらいタコまみれだったので、包丁の峰の部分に人差し指があたってマメができてつぶれてしまいました。なかなか強敵でした。
で、当日。事前にスタッフだけが集合。ケータリングだのドリンクだのの配達を受け取ったり。Why さんが「ファミキチ食いたい」って言うので昼食に一部メンバーで Why さんとファミキチ買いに行ってましたが、全員で行くわけにいかないので留守番してたら空腹のままタコパに突入する羽目に。これはたこ焼きを焼く覚悟をしていた自分としては選択ミスだったなと思います。まぁでも事前に Why さんとしゃべって名刺ももらえたし、スタッフとしての役得もあったんでそれはそれで良かったかなと。ないへぶ さんのリアル名刺もゲットしたし。
ということで、ぼちぼち会場に参加者が到着し始めたものの…入口が日曜なので表ではなく裏の保安の横から入る事になったりとか、最寄り駅の本町が非常に巨大な駅だとかで参加者も会場になかなかたどりつけない羽目に。セキュリティドアもあるので、建物の入口と、会場の入口のセキュリティドアの前に人を配置して会場に誘導。なんやかんやあったものの各自会場にはどうにか入れた模様。
会場に入っても席に座らずにおられた ねふ さんがおられたので声をかけたら、一六タルトをわざわざ持ってきていただいたということで、ケータリングの横に配置して早いもの勝ちでご賞味いただくことにしました。私も一切れいただきました。遠くから参加していただいて、手土産まで持ってきていただいて、本当に感謝です。広島に住んでた時は四国もよく出かけたのでタルトも食べる機会多かったのですが、関西に移ってきてからは機会も減ってしまってなつかしく味わいました。
なんやかんやばたばたしたものの、meetup が開始されました。私はたこ焼き器の近く、会場の後方に座席を確保していました。ただ空調がなく窓を開放していたために、窓の外からの自動車のロードノイズや緊急車両のサイレン音が非常にけたたましくて、実はほぼ音声が聞こえず、会場にいながら YouTube 配信の字幕見てました…。土曜なら空調使えるらしいので、日曜は絶対に回避すべし。
しのさん が移動中に作成した前日の東京開催のまとめとか、この人、鉄人か?と思うようなタフっぷりで、たんたんとイベントは進行。Why さんへの質問もゆるゆる進行しながら徐々にタコパタイムが近づく。もうそろそろ質問タイムも終了というタイミングで、おもむろに生地の仕込みのためにパントリーへ。カメラの前を遮ってごめんなさい。生地はダマダマの生地になってしまいました。まぁこのへんは事前の段取りもなかったのでやむなし。焼いたらわからん、ということでそのまま勢いで焼いてしまうことにしました。
で、タコパ開始になりましたが、なぜかめっちゃめちゃたこ焼きを焼くところを注目される羽目に。あれ?焼いてる人を見る会だったっけ?たこ焼きを賞味する会じゃないのだっけ?焼き方については ちらいむ さんに「一気に反転させると丸くならないので、ちょっとずつ回すのが良い」とアドバイスいただいたので、意識して焼かせてもらうことに。なんでこのタイミングでここまで緊張せんといかんのだろう?主旨違うんじゃない?ってずっと思いながらたこ焼きを焼いていました。初回のたこ焼きが一式焼きあがると注目も減ったので作業に集中できましたが、これいつまでたっても何も食えねぇパターンだなと思ってたら、ないへぶさん、tama ちゃん、あかい さんが焼くのを変わってくれました。おかげさまで、食事もできましたし、ちょっと参加者とも交流できました。これまた感謝です。ケータリングはあかいさんがサンドイッチを取り置きしてくれていましたし、たこ焼きは計算上 300 コ焼ける形にしていたので十分に数があったから私の分も残っていました。あと、あかいさんの着てたシャツはほぼ 1 年前の Bluesky meetup in Osaka Vol.1 と同じでした。
タコパはクコさん側のたこ焼き器の方は昨年の Bluesky meetup in Osaka Vol.1 という名の BBQ でも肉焼きで大変お世話になった Hidari さんが、去年に引き続きクコさんとの絶妙なコンビプレーでたこ焼きも焼いておられました。Hidari さんは写真撮影もしていただいて非常に感謝です。Hidari さんの写真って非常にやさしい感じの写真で、被写体がみんなやわらかい感じになるんで大好きです。
若干、一部界隈で噂になっていた「あのたこ焼きソースは関西人が選択したベストオブたこ焼きソースに違いない」(超意訳)というたこ焼きソースですが、全くそんなことはありません。ロピアに買いに行った時に「これくらい入ってるボトルだと足りなくなることなさそうだよね」って言って適当に買いました。なので、決してこだわりのソースではありません。まぁでもたこ焼きソースって言われるとこんな感じの味だよねっていう味ではあったので、そんなに奇を衒ったものでもなく、比較的オーソドックスなソースだったと思います。
で、会場は 18 時に完全撤収の予定だったのに、たこ焼きがなかなか焼き終わらなかったので、焼き終わりを待たずに洗い物を開始。ボールを水洗いできるのは本当にありがたかったです。あと、できるだけ汚れが残らないようにキッチンペーパーで粉をふきとったりしましたが、紅しょうがの汁の臭いだけは取れませんでした。まぁやむなし。
とかなんとかしてると、なぜか最後にしのさんに前に呼ばれて何かしゃべれと。いや、なにそのむちゃぶり。たこ焼き番長とか言うけど、ちゃいます。私はただこのイベントが成功するようにと願ってご奉仕させていただいているものです。特に何もネタ用意してなかったので「帰るまでが遠足です」しか言えなかった。もうちょっとアドリブきくように精進しないといけないなと思いました。
本番も終わりばたばたと後始末。ドリンクの残りを、司会を務めてくれた ばいそに さんが一気飲みしたり、ゴミをまとめて搬出したりテーブルの上をウェットティッシュで拭いてまわったり。床に多少の食べカスも落ちたりしていましたが、これまた会場据付の掃除機で吸ったりして香ばしい香り以外は元の状態にきれいに戻すことができました。このあたりの手際も非常に良かったと思います。
その後、Why さん、その友人の kumavis さん、一般参加者なのに急遽通訳してくれた チャド さん (ばいそにさんと yukotan さんにアカウント教えてもらったのでフォローしました) と、スタッフとで慰労会を開催しました。スポンサーしてくださった全力機械さんの代表取締役のやましんさんに直接慰労会の会場まで探してもらって、スポンサーとしても慰労会の突撃隊長としてもどちらも感謝です。慰労会では横に座って酒談義してました。やましんさん、いつでもうち遊びに来てください。慰労会では、kumavis さん、めちゃめちゃおもしろかったです。鰹の酒盗にものすごくはまってしまって、Why さんと一緒にもりもり食べてましたし、日本酒もかなり好きなようで辛口が良いと言いながら、東洋美人を何度もオーダーしてました。へぎそばもおいしかったし、普通に宴会してました。そのあと持ってきたホットプレートやボウルやその他を大量に抱えて電車に乗って帰宅。大和路線に乗るやいなや爆睡した私を最寄り駅で起こしてくれたうかわさんには感謝しかないです。ありがとうも言わずにダッシュで駅で降りたのですが、その時の頭の中には「迎えにきてくれてる奥さんがいるのに電車ちゃんと降りられなかったら申し訳ない」しかなかったです。お酒の飲み過ぎには注意しましょう。
振り返っての感想なんですが、惜しむらくは、誰も「マサラのこ」を持ってこなかったことです。 ミツジ さんにも事前にネタふりされていたのに、準備に終われてそこまで心の余裕がなく気付いた時には後の祭りでした。今度(あるのか?)あれば必ずや、例の SNS でやりとりされる体内摂取目的の粉を準備せねばならない、と心に強く誓うのでした。
あと、ほぼ働き詰めだったんで写真はほとんど撮影できてないです。この文章も文字ばっかりやけど堪忍な。
2024/09/23 21:00:00
Bluesky書かねばって思ってた気持ちすら忘れてしまうくらい後になって書いている(日付は9/23にしているけど書いてるのはもう11月末)ので、記載している内容は記憶にたよったあやふやなものにはなっていますが、まぁ気にせずに読み物だと思って読んでいただければ幸いです。やり始めると細かいことが気になってしまう性格なので、着手するまでのハードルが高いのが問題なんですよね。
あと、自作ブログサイトの作りが手抜きで画像貼るのができない(やり方忘れた)ので文字ばっかりで見苦しい。覚悟して読むように。
ということで当時のやりとりを掘り起こしながら遡ってみています。
まず、ないへぶさんが Dan さんのポストに反応したのが、meetup 開催のきっかけだったんですよね。で、それに対してこじらさんが、どうしよう?って四谷ラボで声をかけたのが9/15。それもそもそも福岡の meetup をどうしようか?っていう相談をしている話題の中で。そこから2日ほど間があいて9/17にやろうぜっていう話で関係者に号令がかかった感じ。やるとは言っても、場所の確保もできていない状態でほんまにできるのだろうか?とか私は思ってました。まぁ、とりあえず、ないへぶさんがほぼ責任者的な形で動いてくれる感じになっていたので、サポートするよっていうスタンスで私はのぞんでました。
で、日程の方は 9/21(!) に開催って、最初に連絡あったのが 9/15 で、日付を決めたのが 9/17 なんですけど大丈夫?とはなったものの、ともかく Dan さんにないへぶさんが連絡したら、Dan さんから速攻で返事が返ってきて後戻りできない状態に。
んでまぁ、飲食どうする?場所どうする?とか考えるのに人数把握せんといかんよねということで、ないへぶさんが参加希望者を募るGoogle Formsを作成。人数的には10を越えるけど20は越えないだろうということで、ないへぶさんの知り合いの泥書房さんのイベントスペースを利用できそうなので、さっさとおさえちゃいましょうということに。とんさんにも場所の候補のご提案をいただいたのですが、今回はないへぶさんのところをおさえにいくことになりました。とんさんとはこの後また似た者システムの件でからみがあるとはこの時点では想像もついてはいませんでした。懇親会は、昔大学の頃に友人がバイトしていた、まんざら亭NISHIKIの予約が取れたということでそちらで開催に。私自身はとりあえず場所さえ確保できれば後はどうにかなんじゃない?くらいの気軽な気持ちでもうこの時点では考えていましたが、配信をひだりさんが手持ちの機材できると申し出ていただいて、いやまーみなさんすげーな、って思ってました。できることないし、おみやげくらい持っていくかー、的な感覚でした。
ただ、ライトニングトークやりませんか?というのが9/19に日付が変わったくらいにないへぶさんから提案あったんで、カスタムフィードでFollowing作った話くらいならできますよということで、協力する姿勢を見せることにしました。何も実質やってないんで。で、資料はもう9/19のうちにさっさと書いてしまってました。通訳が用意できない可能性が高そうだったので、しゃべりは日本語にするにはしても、スライドは英語で書いておけば Dan さんにも読んでもらえるだろうと資料は英語で記載することにしておきました。とかなんとかで開催できる方向にほぼないへぶさんが全部頑張ってやってくれました。感謝。
泥書房さんが飲食可能ということでしたので、おみやげは Dan さんの奥さん(一緒に日本に来てるけど meetup には参加しない予定だった)に手ぬぐい(海外の人には手ぬぐいは用途がないので使いにくいと言われたけれど)と柿ようかん(甘味ならきっと食ってくれるだろう日持ちもするし)を買っておいて、当日参加者でもしゃもしゃ食うのに柿の葉寿司を当日の朝に買っておきました。まぁ保冷はそこまで心配しなくても良いかなとは思ったのですが、何かあるといけないと思ったので柿の葉寿司に自宅から保冷剤を追加して紙袋に入れて持って行きました。
集合の方は、泥書房さんの場所がわかりにくい(実際かなり奥まった場所なので普通に迷子になれるレベル)ので事前に集合しましょうということになっていましたが、初めて会う人もいたので、ないへぶさんがベイマックスの帽子をかぶってくれることになっていましたが、ないへぶさんは実際にはかぶっていませんでした。まぁ阪急烏丸の駅前で集合している怪しげな中年の集団(中年じゃない参加者の方ごめんなさい)ということで傍目にはわかりやすかったようで特段目印がなくても問題はなかったようです。まぁ逆に言うと一般の方々にも怪しげな中年な一行に見えていたわけで…まぁいいか。
あ、あとGIGAZINEさんも来てくれました。大阪でたこ焼き焼いた時に気軽に呼んでって言うてたのを真に受けて、声をかけたら来てくれた感じになっています。ただ、京都で最初にお見かけした時に「あれ、この人誰だっけ、絶対見たことあるのに思い出せない」と自分の記憶と密かに長時間バトルしていたのはここだけの話にしておいてください。
で、実は会場にみんな集合してから入ってからの設営だったので、Dan さんと実際には参加してくれた Dan さんの奥さんも含めて、最初はちょっと待ちぼうけな感じになっちゃってました。なので、もうその合間を見はからって、Dan さんの奥さんに買ってきたプレゼントを渡そうとしたのですが、もうね、恥ずかしいくらいに私がモジモジしちゃって、持ってきたものを、ハンドタオルと…?ようかん?英語でようかんって何って言うの?ってテンパってしまって、スイーツとかなんとか適当にちょろまかして渡しておきました。ただ、柿の葉寿司の紙袋と一緒に手ぬぐいと柿ようかんを入れてしまっていたために、保冷剤の水滴が奥さんに渡すための紙袋にべっちょりついてしまって大変申し訳ないことなってしまいました。我ながら想像力の欠如にイヤになりました。
通訳に関しては VoicePing というサービスを利用してシェアする形になりました。まぁ技術的にはできるところまできてるよねというのが形になってるものなのですが、いやーすごい時代になったよね、って一般人目線で思ってました。
とかなんとかいうてわちゃわちゃしている間に meetup が開始。まずは Dan さんからの Atproto に関するお話。内容はあちこちでシェアされているので割愛します。フロントのエンジニアということで話を聞いていたのですが、けっこうがっつりと思想の話、プロトコルの話があって、かつ、便利ツール系の話もあってエンジニア枠としては楽しめました。
で、Dan さんとの Q&A コーナー。今回の参加者の中に子連れの方もおられて質問したい感じに見えたのですが、子供に手をとられてなかなかタイミングを取れてなさそうだったので、うかわ さんと共謀して会場の外に連れ出して、しばらく子供と遊んでました。ただ、私は自分のライトニングトークもあるので途中でうかわさんにお願いしてしまいましたが、うかわさんはその後近所の公園まで行ってがっつり一緒に遊んでいたそうです。聞き分けの良い子で、話をしたい内容がいっぱい持ってそうな、頭のまわりそうな感じの子でした。このくらいちゃんとした子ならどうとでもなります。とことんガチャガチャしたのいっぱい知ってる。
ここでいったん休憩。Dan さんもがっつり1時間しゃべったし、Q&Aもがっつり時間かけて話をしていたのもあって中休み。持ってきた柿の葉寿司を全員でもしゃもしゃ食ってました。Dan さん夫妻もお付き合いではなく、食べてくれていたので良かった良かった。Why さんにたこ焼きをふるまったのと同様に日本食を楽しんでいただけたのであったら良かったと思う。いちおう12人の参加者で1人3コずつ食べる計算で買って行ったので数が不足することはなかったし、GIGAZINEさんもどうぞって言うたら初めて食べはったのか、おいしい、っていうリアクションいただきました。やっぱり奈良に関連ないと柿の葉寿司食べないよね。柿の葉寿司に関してはみりめいさんより「たなか派ですか!?」っていうツッコミが入りました。奈良県民は柿の葉寿司に派閥がやっぱりある模様。私は外様(京都出身)なので、奥さんの実家のオススメをそのまま購入しているのだけど、やはり進物として持っていくものだから、こだわりがありそうだけどその話をし始めると、京都関係なくなるのでいったん保留となった。奈良で meetup するなら柿の葉寿司の食べ比べせねばならんな。ちなみに広島県民にはもみじ饅頭の派閥がある。私は藤い屋派である。ちなみにもみじ饅頭でなくて良いならやまだ屋さんの桐葉菓がおいしい。満月さんの阿闍梨餅に匹敵すると信じている。グルメサイトではないので話を戻そう。
さて休憩明けは私のライトニングのパート。資料はどっかにあげた。ちょっとだけ内容に触れておく。
ねふさんに「自分のfollowしている人の人気ポストだけのフィードとかないかな(意訳)」って言われたのがきっかけで、「クライアントでやった方が楽やん(意訳)」って返事したものの、「フォロー関係のデータも事前に収集しておいたらカスタムフィードでもできるやん?(意訳)」って思って、とりあえず人気かどうかは置いておいて「カスタムフィードでFollowing」を作ってみた。今でも動いているはず。ただ、アクセスがあった時点でElasticsearchをえっちらおっちら検索するのでめちゃめちゃ遅いし、できる事はAppView経由で見た方が全然早いしこれそのものはほぼ無意味。まぁRelayが遅くなった時にRelayを経由せずに実はFollowingを見るのに役立ったりしたようなしなかったような気もするけれど。で、そこから Repost が1回以上あったポストだけを並べる形にして元のねふさんの要望の「Highlights」を完成させた。というお話。それに対して Dan さんからのコメントは "make sense"。エンジニアの気持ちはエンジニアにはわかるし、やった事の価値を認めてくれるっていうのが一番ありがたい。短い一言にそれが詰まっててうれしかったねぇ。
で、その次のライトニングトークはえるたんさん。彼の提供する RepostNextPost というカスタムフィードが、最新のポストから遅延するのと戦った話を紹介。えるたんさんはこの時だけではなく今もまだ遅延と戦っている様子で、このネタでまたライトニングトークの続編ができるんじゃないかと微かに期待をしている。
その後はみんなで Dan さんへの寄せ書きを書いたり、集合写真の撮影をしたりして徐々に meetup の終了に向けて進行。徐々に懇親会モードに移行するのかと思いきや、Dan さんは時差ボケでしんどいので懇親会はやめとく、ということだったので、懇親会は Dan さん抜きで行くことに。まぁ奥さんもいるし体調良くないなら無理することもないよねということで、懇親会には泥書房の方に代役で来てもらうことになりました。泥書房さんには本当にいろいろとお世話なりました。ありがとうございます。で、懇親会までまだちょっと時間あるよねってことで、泥書房さんところで京都の古い町並みのお話であったりとか、祇園祭の保存ってどういうのとかそういう話をしばらくしていました。こういう本来の会とは違うけれど、いろんな縁の中で聞ける話とかいうのも meetup の醍醐味だし楽しいねって思う。
とかなんとかしてる間に懇親会へ。
懇親会のまんざら亭で予約できた個室は「蔵」。直前に予約した割にはかなり雰囲気のある良いお部屋に通していただいてめちゃ感謝。私は懇親会は調子にのって泥書房のスタッフさんと日本酒頼みまくって、うめぇうめぇ連発してました。いや、やっぱりまんざら亭良いですよ。
食事の様子は当日のポストで確認してもらうとして。最初のビール、お通し、刺身、焼物、悦凱陣、椀物、酢物とヤマサン正宗、揚物、御飯と汁物、デザート。
で、ここで解散かと思いきや、まだラーメン食いに行くという話に。おまえたち、今日ずっと食ってやいないか?大丈夫か?とか言ってたかもう記憶はないけど近くのムギュへ。私は濃厚鶏そばをいただいた。さすがに御飯ものをまだ食べるのは控えたがやっても良かったのかもしれない。
懇親会に関する文章が少ないのは酒飲んでる時の記憶があまり残っていないためです。すんません。
わずか短時間で少人数とはいえ非常に濃密な場を設けていただいて、会の運営に携わっていただいた方、会に参加していただいた方、みなさんありがとうございました。ちゃんと全員の顔が見える規模の meetup は非常に距離感が近くて、濃くてなかなか良い感じだと思いますし、これ見て、なんかちょっとおもしろそう、って思った方がおられれば、次回開催時にはまた参加いただければと思います。
2024/11/22 07:00:00
Blueskyそれは8/18のことだった。こじらさんが「カラオケいこー」と言ったのに対して、しのさんが「シャケェェェ」と応えた後、うかわさんが「福岡でな」と言った結果、こじらさんが「福岡meetup、11月中旬~末くらいとか」と言ったのが発端だった。なので私は福岡でカラオケ大会するのが福岡meetupだと信じていた。
どの程度のニーズがあるのかのヒアリングをしたのは8/23のことだった。うかわさんのこのポスト。ぜひ参加したい=repost=14人、可能性ある=like=17人、幹事としてお手伝いできる=repost&like=8人だった。私はこの時点では参加表明していない。家族を置いてカラオケに福岡には行けないからだ。
そこそこニーズがありそうということだったので準備を開始することとなった。基本的には先の幹事としてお手伝いできるという意向表明をしたメンバーが中心だが、なぜか私もそこのメンバーに含められてしまっていた。が、私はずっと傍観していた。カラオケ大会に違いないと思っていたからだ。言い出しっぺがうかわさんなので、うかわさんが遠隔にも関わらず積極的に段取りをしていた。
うかわさんということもあり、大阪の「たこ焼き」に匹敵する食べ物を準備したいということになっていた。当初はしのさんが持参した米を現地で炊いて、参加者で明太子おにぎりを作って、それを食べるという会になるという話だった。カラオケではなさそうだが、それは私には「炊き出し」に見えていた。石原軍団のやるやつ。
場所は、たらさんがエンジニアカフェさんと話をつけてくれていた。歴史的建造物なので火気厳禁のため炊飯は無理そうだったが、イベントに必要な機材もそろっているし条件的には好条件そうだった。実際、行ってものすごく良かったし、スタッフさんもいい人だった。たらさん良い仕事。
Danさんが京都に来るということで開催された京都meetupはDanさんからの連絡があってから1週間で開催しあっという間に福岡meetupを追い抜いていった。
みりめいさんは福岡でもステッカー作成を請け負っていただいている。ご本人めちゃくちゃ忙しかろうと思うのに無限の体力と圧倒的な手際の良さでなんでもこなしておられる。今回ももつ鍋&明太子なステッカーを作成いただいた。この時期体調不良も重なっておられたようだが、さっさと治療して海外に飛んでおられた。さすがや…。
家族に福岡までイベントあるので行ってくるけど良いか?と聞いたら「いいよ」とあっさり許可が出た。カラオケ大会とか明太子ごはん食べに行く会だったらいかんかったと思うけど「例の開発の」と言ったら許可が出た。Blueskyって説明するのが面倒なので、いつも引き籠って自宅で開発しているもの(何かは家族も知らない)を指差して「例の開発」と呼んでいるためだ。何かお手伝いする?って聞いたところ京都meetupのまとめやれと言われた。参加レポート書いてねーぞ、やべーな、ってこの時は思ってた。
で、まぁ参加する事になったから宿でも取るかいね、って思ったら博多近辺の宿は6万円以上するお部屋しか空いていなかった。私は自分の目を疑った。パラレルワールドに転生したのかと思った。が、そうではなかった。大相撲だのコンサートだのポケモンGOのイベントだのが全部11/16に重なってしまっていた(という事実は後から知った)ので宿が予約でいっぱいだったようだ。え、こんなの無理じゃん。
結局、宿がないなら朝までカラオケすればええやないか、どうせ、meetupの後は宿に戻って休むほど時間ないくらいどっかで何かしてるだろうって話だった。まぁカラオケで寝てもいいしという話ではあった。歌える曲がないって言ったら、こじらさんに今から覚えてって言われてしまった。緑黄色社会の花になって、でも歌うかなぁ、クリープハイプの憂、燦々でも歌うかなぁ、とかぼんやり考えてた。どうせ夜が更けたらイエモンのJAMを大声で歌うんだろうなとか。
ちょうどその頃、ボット+リスト、という今までのフィードジェネレータとは違うアプローチで、似た者を見つけるシステムを作っていた。とんさんから「ブルスコ勉強会でロジック解説とかしてもらえる日をとても楽しみにしています」とリクエストを受けてしまったので、んじゃ福岡でLTやれば?ってなったので、京都meetupの振り返りはないへぶさんにおまかせして自分は似た者システムのプレゼンをする事にした。京都のことはまとめられる自信がなかったので実はほっとしていた。
開催一週間前の11/9にこじらさんがマイコプラズマっぽい症状で完治しないと参加は厳しいという連絡あり。結局、こじらさんの病状は改善せず当日は欠席となるのであった。結果、こじらさんが担当する予定だった配信はしのさんにバトンタッチ。ばいそにさんも家族が感染性の病気ということで参加不可能に。司会はばいそにさんからうかわさんにバトンタッチ。
3ヶ月も前から話がスタートしていたが、病に倒れたお二人の影響もあって、当日の段取りは前日にばたばたしながら確認。ここで、京都meetupの振り返りをするないへぶさんが、現地ではなくリモートで参加する事が判明。とりあえずないへぶさんには動画を撮影してもらうことになったが、ないへぶさんあっさり対応していた。ただ、ないへぶさんは顔出しはなく、顔の部分はオコジョになっていた。なお、オコジョかどうかは諸説ある。
イベントの翌日、マサラキッチンまで行ってみたいと軽い気持ちで言ってみたら、当日の朝にたらさんより、もともとばいそにさんと行く計画だったので日曜行ける、っていうありがたいお返事をいただいた。え、めっちゃうれしいんですけど。たらさん、良い人だ。
当日、会社に行くのとそう大差のない時間に家を出て新大阪へ。新大阪で大阪みやげ何か買わねば…と思って、みるく饅頭月化粧を買ったが、後から考えてみれば、これほぼ博多通りもんとほぼ同一ではないか。時間がない中で大阪っぽいものと思って選択したがどうやら選択ミスだったようだ。
自宅のノートPCが調子悪くなってたのでプレゼンに利用できそうなPCが10年もののLenovoしかなかったのでChromeOSに入れ替えた上で現地に持って行ったのだが、HDMIのポートが腐っていたようなのでこれは使えねーわとなった。PDF化した資料をしのさんに渡してしのさんのPCでプレゼンさせてもらうことに。おい、このしのさんのPC良いな。欲しいわ。買おう。ということで突如ノートPC購入欲が芽生えてしまった。そして結果的に買った。Pavilion Aero13でZen4で1kg未満だよ。
とりあえず早めに現地に着いたけどしのさんが配信用の機材のセットアップでめちゃめちゃ忙しそうにしていたのだけど何もできないからぼーっとしてた。うかわさんが建物の横にネコがおったよと言うので見に行ったけどいなかった。そんなこんなしてる間にいとさんが参加できないのに差し入れだけもってきてくれた。神か。
そうこうしている間に参加者が徐々に到着。事前にうかわさんからくまーさんはようしゃべるよって聞いてたので覚悟していたけど実際のくまーさんはたしかにようしゃべってた。けどクルマを出してくれてケータリングの準備から当日の飲み物や名札等の小物の買い出しから率先して何でも動いてくれていて、あーすげー人だって純粋に感動してた。
なんとか準備も整ったということで開始。うかわさん一切の台本もなく、演歌の大御所のような貫禄っぷりで司会。こういうのやってもらうと本当に人柄もあって上手に雰囲気作ってくれる。まぁもう踏んでる場数が違うのやろねーって思って余計なこと言わないかひやひやしながら見てた。配信もしてたしね。
エンジニアカフェのコミュニティマネージャーさんも登壇して話をしてくれた。というかむしろめっちゃしゃべりが上手で、あ、そんなにしゃべってくれるの?すごくない?って感じだった。けっこう気さくに何でもリクエストに答えてもらえる感じだったし、会が終わってからもいろんなことをしゃべってた。こういう場所近くにあると良いなぁ。
で、過去のmeetupの振り返りでPaulの動画を再生したり、しのさんが東京meetupの話を紹介したり、ないへぶさんの京都meetupの動画を再生したりして会は進行。というかさ、会の進行が当初想定していたタイムスケジュールを完全に無視してものすごいスピードで進行していってた。なにこれ早くケータリングにありつきたいってこと?私、ダラダラしゃべって大丈夫?結婚式の披露宴で乾杯の挨拶でめっちゃしゃべる上司みたいに顰蹙かったりしない?とかってちょっとあせってた。
ということで似た者システムの説明の登壇。資料はこちらなので見ておいてもらえれば。みんな空腹に耐えながら好意的に話を聞いてくれてありがたかった。懇親の時間を除いて一番時間をくったのが私の時間で大変申し訳なかったです。
みりめいさんは宿が確保できなかったので弾丸フェリーツアーで今回福岡に参加しておられた。けっこう安価にフェリーで往復できると教えてもらった。フェリーなんて宮島行く時とうどんで香川に巡礼した帰りと大久野島に行くのくらいしか乗ったことないのでちょっとフェリーも良いなと思った。ただフェリーの時間があるので懇親会も早々に撤収されていた。なので懇親会前に記念撮影。みりめいさんには道中の食事になるようにとケータリングからにぎりめしをくまーさんに持たされていた。なんかいい画だった。
ケータリングはぶっちゃけめちゃめちゃおいしかった。ダイキョーバリューさんというお惣菜の有名なスーパーのよう。くまーさんが手配してくれていたし、実際あぶらあげの中にひたひたに具が入って含め煮にしたものが異常においしかった。にぎりめしもおばあちゃん家に帰省した時みたいに大量にあって1コずつ食べたけどどれもおいしかった。家賃も安いから良いよってたらさんにすすめられたけど、食べるものもおいしいしたしかにこれは住んでみたい土地だなぁって思った。
九州のいろんな銘菓が一同に介するお菓子博覧会みたいにもなってた。月化粧持って行ったけど正直不要だった。通りもん、ざびえる、祝うてサンド、なんばん往来、めんべい、他にもあったかもしれん。何せ何食ってもうまかった。ケータリングも量があったので参加者もけっこうお腹ふくれていた模様。
しろるさんとも挨拶をさせてもらった。しろるさんは、ブルスこんにちは、っていう挨拶を流行らそうと思ってるって言ってた。え、そんなの流行るの?って最初は内心思ってた。けど、なんか使ってみると案外悪くない。ブルスコ + こんにちは、まぁそんなにひねりもないし、短くてテンポが良いわけでもない。でもなんかそのていねいさが逆に挨拶としての存在感になっている気がして、流行らせるのにちょっとでも貢献できないかって最近は意図して使ってる。
本来来るはずだったこじらさんとばいそにさんがDiscordで接続して懇親会の様子を眺めていた。こじらさんはマジで声が出なさそうで会話は無理そうだった。ばいそにさんは隔離されているだけなので普通に会話できてはいたが、現地の音声がなかなか届きにくかったのと、現地ではむしゃむしゃ食ってる感じだったので見てても退屈だったんじゃなかろうか。PCの前まで行ってぐれさんさんがばいそにさんとしゃべってる風景を懇親会で見守るのは若干シュールだった。
カスタムフィードを支える各種サービスが最近のアカウント増加や投稿数の増加でけっこう運営大変そうになってるので、軽量に動作させる事だけを念頭においたカスタムフィード作成ツール(利用者が自由に設定できるもの)っていうのを作ろうと思って作りかけのつっかいにくいUIのを作ってたんだけどせっかくなので懇親会の後半でお披露目した。いちおうOAuth2で認証して、なんかタイムラインが出るのでポスト選択すると形態素解析した結果が出てきて、単語をいくつか選択して条件式に入れてあげたものに、名前をつけてあげるとカスタムフィードになるというもの。案外みんな使ってくれた。もうちょっとこれ洗練させねば。
ということで時間がきたので懇親会も終了。片付けもみなさん全員で手伝ってくれる感じでテキパキと片付いてしまったので、片付いた後ちょっと時間があまってしまった感じになった。この協力的な感じ本当にすばらしいし、福岡meetupの参加者さんみなさん本当に協力的で良い人ばっかりだった。ゴミはくまーさんが引き取ってくれるってことになったし、本当にくまーさんめちゃいい人。
さてここで宿のない、うかわ、しのさん、私の3名に対してくまーさんより犬と雑魚寝で良いなら家に来てもらって良いよというありがたい申し出をいただいた。しのさんはまだしもうかわさんも私ももう若くもない年齢なので非常にありがたいということで犬と雑魚寝する選択肢を採用させていただいた。本当にありがたい。
夕飯食べるには時間早いしとりあえずνガンダム見に行こうぜってことでくまーさんに運転をしてもらってららぽーとへ。νガンダムじっくり堪能しました。巨大な造形物いいですよねぇ。その後SIDE-Fにも行った。しのさんが物欲とずっとバトルしていたがどうも理性が物欲に勝った模様。で出てきたらちょうどνガンダムが動く時間帯だったので動画撮影した。いや、堪能したね。
ということで夕飯へ。しのさんが寿司食いてぇって言うので玄界丸へ。当然サーモンをオーダー。炙りサーモンが異常においしかった。回転寿司のクオリティも高かったなぁ。もちろんサーモン以外も食ってるんだけど、そこそこの人数でサーモン一斉に頼むとやっぱり壮観ではある。うかわさんがビール飲みたそうだったのでおつきあいで1杯だけ飲んだ。夕飯はなぜかうかわさんが全部持ってくれた。他人の好意には全力でのっかるタイプなのでのっかっておいた。
さてカラオケっていう段なんだが結局カラオケは行かなかった。もうみんななんだか疲れていたし、こじらさんもいなかったし、宿泊する場所も貸してもらえることになったし。でも結局それで良かったんじゃないかと思う。
くまーさん家に行って思いきりワンコをわしゃわしゃした。至福の時間だった。もちろんうちのマルプーさんもかわいいんだけど、もそっとした大きな塊がずんずんのっかってくるのも非常に良い。そんなこんなで犬に囲まれながら寝た。いろんなことをよくしてもらえたので宿を提供してくれたくまーさんには奈良の天極堂さんの葛湯を送っておいた。喜んでもらえたようで良かった。
カラオケ大会だと思って行かないつもりしてたけど行って良かった。何より人とのつながりができたのが本当に良かった。翌日に阿蘇に行ったお話はまた別でまとめます。こっちはこっちでなかなか濃かったのよ。
2024/11/23 07:00:00
Bluesky前日の博多での青空会合を終え、我々は朝食のために星巴克珈琲に居た。麺麭を齧り珈琲を啜る。前日の余韻が冷めやらず皆、電脳携帯電話を用いて青空で遠隔の従者と対話を為て居る。然う斯うする中に、鱈氏と合流する時間が迫ってきた。今日は鱈さんの運転する自動車に乗せて頂いて阿蘇まで咖喱を嗜みに向かうのだ。片道一刻と半刻余の長旅。昨日初めて会った旦那と二人で沈黙に耐えられるか心中不安で仕方が無かった。然し刻は満ちた。いざ参らん。
案ずるより産むが易し。鱈氏は青空で拝見する御姿と変わらず実物も大層饒舌で在った。道案内は自動車経路誘導機構に任せる姿勢では在ったが、慣れた物腰で加速踏板と減速踏板と操舵装置で自動車を意の儘に操る。道中は誠に数多の話を為た。家族の話、生業の話、旅先の話。然うした話を通じて鱈氏の理念や信条の様な物を知る貴重な時間を得る事が出来た。高速道路の走行中燃料切れの危機が訪れた為、休憩施設に寄って給油為んと誓ったにも拘らず、対話に夢中で休憩施設を通過為て仕舞った。高速交差点を降りて警告通知に怯えながら最初の給油所で無事に給油を終え事無きを得た。
目的地の香辛料台所には午後を半刻程過ぎた頃に到着為た。阿蘇神社の駐車場は既に満車で有り香辛料台所の店主の三辻氏に鱈氏より架電為て肥後銀行の駐車場に停めるが良いとの情報を得る。鱈氏は三辻氏の指示に従い銀行の駐車場に駐車。吾は礑と気付いた。此処は肥後銀行では無く熊本銀行で在る。鱈氏にその旨を伝え隣の肥後銀行へと自動車を誘う。漸く目的地に到着した。此処が彼の有名な咖喱の聖地で在る。吾は感動を禁じ得ず其の御姿を電脳携帯電話を用いて撮影し青空に送信為た。
扨、香辛料台所に入店為たが多くの海外からの観光客が既に食事を為て居り満席。暫し待つ。漸く着席。注文は鹿咖喱と熊咖喱の相掛を大盛。加えて発酵乳飲料も追加為た。程無く咖喱を載せた皿を持った三辻氏が現る。一つの皿に数多の小料理と咖喱が混在し少し宛味変為ながら頂く形式で在る。熊本の野生材料の咖喱は肉と香辛料とが絶妙に配合されて居り無尽蔵に食欲を掻き立てられる。純粋に美味で在る。吾は御代を為たい衝動に駆られたが既の所で踏み滞った。食事を終えた頃には店内には他の客人は一対のみ。其の客人も程無く退店。店内には三辻氏と鱈氏と吾の三名と成った。
食事後も三辻氏と鱈氏と吾の三名で暫く談話為た。三辻氏の阿蘇への想い、平時の取組、世間への露出。一つ一つが理に叶って居り彼も又熱き漢で在った。其の後、昨日の福岡の青空会合で紹介為た特注時系列作成手段を三辻氏にも伝授為た。三辻氏にも興味を持って頂いた有り難い。本手段は早々に完成せねば成らぬ。吾は心に誓った。
香辛料台所の営業時間は疾うに過ぎ談話に夢中で後回しに成っていた発酵乳飲料(洋杯の意匠が復古調で趣きが有る)を頂き新幹線の乗車時刻の心配も在った為漸く退店。香辛料台所の滞在時間は一刻と半刻を回って居た。土産に香辛料の粉を五つ購入。御会計を為たが明らかに鱈氏に多額の請求を為れた様だ。鱈氏に往復の交通費の精算も請うたが此方も計算が怪しく少額請求で在った。鱈氏は非常に楽しんだので良きと仰ったのだが後で幾ら考えても腑に落ちぬ。吾は感謝で涙為た(誇張)。
流石に帰路は無口で在ろうと想像したが然に非ず。旅の追想等、一刻と半刻と四半刻(帰路は市内が渋滞の為時間が掛った)殆ど談話して居た。此の御仁如何程の対話の懐の深さで在るか。改めて尊敬の念と感謝の情に言葉を失った(失ってない、喋ってた)。博多駅まで送って頂き通りもんを三つ会計為て予約して居た新幹線に飛び乗った。非常に濃密な二日間で有った。鱈氏には未だ何も送って居ない。何時か雪辱を果たさん。
文章書くのに漢字一杯使ったろって思って書いたら古文現代文漢字かなぐちゃ混じりの変な文章になったけど書き直す余裕もないので勘弁してね。たらさん往復運転ありがとうございました。いつか何か送りつけます。ミツジさんも長時間ありがとうございました。会社でマサラのこをいつもお世話になってるメンバーにプレゼントしたら家族が何にでもかけまくって大好評って言うてました。もうちょっと布教活動頑張ります。
2024/12/18 18:00:00
Bluesky本記事はBluesky Advent Calendar 2024の12/18の記事になります。作ってくれたgirigiribauerさんありがとうございます。先日、ご本人にもお会いしましたが至極まっとうな方でした。私とは大違い。イナバウアーでもベッケンバウアーでもなくジャックバウアーだって教えてもらいました。
自前のカスタムフィードはaerostream2というRustのcrateをこれまた自作して作ってます。コードはそこそこ楽に書けるようにしていますがこれの利用者はこじらさんだけの想定。ブルスコちゃんをRustで書き直すのに使いたいっていう話があったけどどうなったのかなぁ。
世の中の人はSkyFeedを使ってカスタムフィードを作成している人が多そう。SkyFeedは勝手カスタムフィードのホストも担ってくれるし本当に素晴しいサービスだと思います。過去のポストを検索するような運用もしていてバックエンドに巨大なデータベースを抱えてるのだと思うと尊敬しかありません。
最近ユーザが増えてきたってことでSkyFeedさんも磐石ではなさそうに拝見するので、ちょっとでも負荷軽減するために私もカスタムフィードのデザインとフィードジェネレーターをホスティングするようなツールを提供しても良いかなって思ったのがきっかけです。特に日本語の形態素解析やってるのでフィルタ作る時に精度高くなる可能性もあるなと思ってました。
いずれにせよフィードジェネレータをホスティングしないといけないので、サーバは用意せねばなりません。既存の私のカスタムフィード提供用のサーバは上記の図のようにfirehoseからデータを引っ張ってくるのですが、これと同じものを別でもう1つ用意するとトラフィックが大変。ということで、私のカスタムフィード提供サーバの後段に別のサーバを用意して、元々あるサーバのからfirehoseのデータをスルーパスしてもらうことにしました。
SkyFeedはデータベースに蓄積したデータを検索して結果を返しているように見えるのですが同じことを私がやると大変なので、firehoseをの中から条件を満たすポストをカスタムフィード毎に蓄積して、カスタムフィードにアクセスがあったら蓄積していたポストの一覧を返してあげる、そんな挙動でいいなと思っていました。過去ポストのデータベースはN-FeedやU-Feedを実現するのに持ってますがこれに負荷かけるとN-FeedやU-Feedがうまく動かなくなるリスクがあるので、過去ポストのデータベースは使わない仕様にしようと思いました。
ということで、カスタムフィードの本体であるフィードジェネレータの機能は、
上記を達成すれば完成することになります。
ただし、条件式を手動で書くのはかなり大変だろうと思うので、条件式を書くところだけはブラウザアプリを書かないといけません。私はブラウザアプリを作成するのは得意ではないですが今回は書きました。ReactではなくSvelteでもなくSolidJSで書きました。ReactよりSolidの方が組込上がりの私にはしっくりきます。CSSは便利なフレームワーク使っても良いのですが何となくtsxに全部書けてしまうのでTailWindCSSにしてみました。結果的に言えば考えないといけない事が増えて大変ではありました。まぁCSSなんてデザインできる人の使うものです、組込エンジニアにはUIがわからんのです。
構成としてはバックエンドのフィードジェネレータと、ブラウザ内で動作する条件式作成ツールの組み合わせになりますが、まずは、バックエンドのフィードジェネレータから作成する事にしました。条件式としてどこまで記述可能にするのかを先に定義しないと、ブラウザアプリの開発の手戻りが発生するので。いや、手戻りは実際発生しまくりなんですけども。
あまり私はパーザとか書いた事がなかったのですが条件式をフィルタに変換するにはパーザを書かねばなりません。過去にnomは使ったことがあったのですが、いまいち思った通りに使えなかった(私がたぶん何か理解が及んでいなかった)ので別のを使ってみようと思って今回はpestを使ってみることにしました。PEGを書いておくといい具合に処理してくれるということなのでこりゃ良いわいっていう話です。で、実際にりようしているPEGは以下です。
word = { (!")" ~ ANY)+ }
operation = { "FROM" | "TEXT" | "MENTION" | "LINK" | "TAG" | "RECORD" | "EXTERNAL" | "IMAGE" | "VIDEO" | "LABEL" | "WORD" | "COMPLEX" }
flag = { "HAS_MENTION" | "HAS_LINK" | "HAS_TAG" | "HAS_RECORD" | "HAS_FEEDGEN" | "HAS_POST" | "HAS_LIST" |
"HAS_STARTERPACK" | "HAS_EXTERNAL" | "HAS_IMAGE" | "HAS_VIDEO" | "HAS_LABEL" | "IS_REPLY" }
regex_op = { "REGEX" }
regex_word = { "/" ~ (!"/" ~ ANY)+ ~ "/" }
single_condition = { (operation ~ "(" ~ word ~ ")") | flag | (regex_op ~ "(" ~ regex_word ~ ")") }
not_condition = { "!" ~ ((operation ~ "(" ~ word ~ ")") | flag)}
and_condition = { some_condition ~ WHITE_SPACE* ~ "&&" ~ WHITE_SPACE* ~ some_condition ~
(WHITE_SPACE* ~ "&&" ~ WHITE_SPACE* ~ some_condition)* }
or_condition = { some_condition ~ WHITE_SPACE* ~ "||" ~ WHITE_SPACE* ~ some_condition ~
(WHITE_SPACE* ~ "||" ~ WHITE_SPACE* ~ some_condition)* }
some_condition = _{ ("(" ~ WHITE_SPACE* ~ (or_condition | and_condition) ~ WHITE_SPACE* ~ ")") | single_condition | not_condition }
condition = _{ WHITE_SPACE* ~ (or_condition | and_condition | single_condition | not_condition) ~ WHITE_SPACE* }
こんなもん読めるかいな!ってなると思うので日本語で解釈しておくと…
処理の種類(パラメータ)
もしくは 処理の種類
)
は含まないREGEX
)の場合は '/' で囲む!
をつける&&
でつなぐ||
でつなぐ()
で囲む(省略不可)()
の省略はできないけれど &&
と ||
のネストを許容する感じです。TEXT(ブルスコ)
と書けばブルスコを含むポストを、TEXT(ブルスコ) && TEXT(初)
と書けばブルスコと初を両方含むポストを、TEXT(ブルスコ) || TEXT(ブルスカ)
と書けばブルスコとブルスカのいずれかを含むポストを、(TEXT(ブルスコ) || TEXT(ブルスカ)) && TEXT(初)
と書けばブルスコかブルスカのいずれかを含み初も含むポストを示す条件式になります。
条件式では以下のような設定が処理できます
FROM(パラメータ)
TEXT(パラメータ)
MENTION(パラメータ)
LINK(パラメータ)
TAG(パラメータ)
RECORD(パラメータ)
EXTERNAL(パラメータ)
IMAGE(パラメータ)
VIDEO(パラメータ)
LABEL(パラメータ)
WORD(パラメータ)
COMPLEX([パラメータ1,パラメータ2,...])
REGEX(/パラメータ/)
HAS_MENTION
HAS_LINK
HAS_TAG
HAS_RECORD
HAS_FEEDGEN
HAS_POST
HAS_LIST
HAS_STARTERPACK
HAS_EXTERNAL
HAS_IMAGE
HAS_VIDEO
HAS_LABEL
IS_REPLY
aerostream2にはフィードジェネレータを作成するのに必要な処理をある程度カバーしてくれる仕組みを用意しています。特に今回のように「カスタムフィードにアクセスがあった時に全員に同じタイムラインを見せる」系のカスタムフィードであればポストのリストにポストをどんどん追加していけば、勝手にカスタムフィードとして見せてくれる仕組みがあります。aerostream2の説明はまたcrates.ioにpublishする覚悟が決まったらまた別途説明しますが、要はたいして時間かからずにフィードジェネレータは作成できちゃいました。フィードジェネレータの挙動を変えるためのAPIはおおよそ以下のようなものを揃えました。
/register
/unregister
/reg
/unreg
/tag
/condition
/analyze
/test
/add_word
/rm_word
カスタムフィードを作成するのにこれとブラウザアプリがセットになるのですが、正しいブラウザアプリかどうかの判別は特には行わない想定で、今はCORSの設定をしています。ブラウザアプリを私が作るよりもきっとうまく作ることができるとBluesky meetup in Fukuokaで宣言されたしのさんのような方が自由にブラウザアプリを作成するのを阻害するつもりもありませんので。もし、しのさんみたいな申し出があれば上記のAPIの詳細は公開しますので連絡いただければと思います。喜んでブラウザアプリの開発から私は手を引きます。
とはいえ、自分が作ったカスタムフィードを他人が改変するというような事がないようにするところだけは配慮しました。App Passwordを使ってサーバ側でカスタムフィードのレコードを作成する場合は良いのですが、OAuth認証の場合はカスタムフィードのレコードをブラウザアプリの中で作成する実装にしています。その場合でもサーバサイドでそのカスタムフィードを作成できたかどうかを識別できるようにするために、サーバから渡した適当な文字列をカスタムフィードのレコードの中に埋め込んでもらった事をサーバ側で確認した上でサーバ側にエンジンを登録できるようにしています。
実際のところフィードジェネレータの作成は比較的とんとん拍子でできてしまいました。
ブラウザアプリの作成方針としては、APIの全機能を引き出す事は当初から考えていませんでした。そんなことをするとUIが複雑になってしまうので、きっと利用する事が難しくなるだろうと思っていました。一方で、私のフィードジェネレータは形態素解析をした結果を用いているというところは特徴だと思っていたので、形態素解析を前面に押し出すようなUIにしたいと思っていました。
それらを踏まえ、カスタムフィードを作成する時の流れとしては以下のような感じにしようと思っていました。
これでできることよりも複雑な条件式は、もはやテキストで入力してもらってAPIをたたく、くらいの雑な作りで良いと割り切っていました。そこまで割り切る事でなんとか苦手なブラウザアプリを開発するモチベーションを維持していたというのが正直なところです。
先ほどフィードジェネレータの方でOAuth認証をあたかも最初から想定して作成していたかのような書き方をしていましたが、実際にはブラウザアプリを作成し始めてから「あ、OAuthでも認証できんじゃん」と思って後からOAuth認証に対応しました。なので、ブラウザアプリを作成してから/reg
や/unreg
といったAPIを作成していますのでAPIの名前が雑になっています。
OAuthもサーバ側で認証プロセスを仲介する方法としない方法と両方あるようで、通常ブラウザアプリであってもWebサーバくらいあるでしょ、だから前者推奨だとみたいな事をどっかに書いていた気もしましたが、面倒なので後者で対応しちゃいました。というか認証のプロセスそのものはライブラリ依存にしちゃってますが、ライブラリの使い方とかいちいちきっちりおさえにいくのがぶっちゃけ面倒になってしまったのです。こういう面倒だからもういいじゃん、というあきらめは、個人開発においては非常に重要だと思っています。まぁ仕事でも枝葉の仕様はそれくらいの割り切りはあって良いと思いますけど。OAuthの認証方式が枝葉かどうかはともかくとして。
そんなこんなでブラウザアプリも上記程度のものであればどうにか動くようになるところまではこぎつけることができました。
で、まぁ、この時点ではまだ一般に公開できるようなものではなかったと思っています。実際、考慮漏れいっぱいあったんで、フィードジェネレータはともかく、ブラウザアプリはレベル的にはまぁいまいちでした。
とはいえ、これ以上のレベルを求めるとなると、私以外の方にも使ってもらいたいなぁというのはちょっと思っていました。ですので、ひで部でちょろっと公開したんですが、反応はいまいちでした。ないへぶさんが、ポスト選択したら形態素解析できる!うひょー!、とカスタムフィードを作成できる機能とは別なところで感動していた程度で。
そう思ってるところでBluesky meetup in Fukuokaが開催されました。世の中一般に公開するとなんかちょっと面倒だなぁと思っていたのですが、meetupの参加者だけに公開して反応もらうのはありだなと思いましたので、事前に想定されていたプログラムには含まれなかったのですが、Bluesky meetup in Fukuokaの懇親会の時間の一部を借りて、ちょっと触ってもらうことにしました。
歴史的建造物を流用したエンジニアカフェという素敵な場所で、おいしそうな山盛りのケータリングを前にして、カスタムフィード作成ツールの説明をする私と、その話の内容に従って黙々とスマホを操作する参加者、という非常にシュールな光景が展開されてはいましたが、参加された方は比較的興味をもっていじってくださいました。しろるさんは、広めようと思ってます!という「ブルスこんにちは」という挨拶を含むカスタムフィードを作成しておられました。ブルスこんにちは、非常に良い挨拶だなと思ってます。世界に広げようブルスこんにちはの輪。
けっこう簡単に作れるねっていうところは好評でしたが、作った瞬間は何もカスタムフィードに表示されないので、該当するであろうポストをテスト的に投稿しないとわかんないね、というのは事前にわかっていたものの課題でした。あと、モバイルでの利用を想定したUIになってなかったのでそこも使いにくいポイントではありました。今でも使いにくいですけど。ただまぁデザインセンスは皆無なので課題についてはすっぱりあきらめました。個人開発はあきらめが肝心。
で、実は私はこのカスタムフィード作成ツールで実現したい事が1つありました。それは既存の私の提供するカスタムフィードや似た者システムとも共通で利用できる「ユーザによる単語登録機能」です。
N-FeedやU-Feedや似た者システムについては、形態素解析した結果の単語を使って「似たポスト」「あまり話題にされない単語」「その人固有の単語」といった特徴を抽出しているのですが、利用している辞書は教科書的な単語のみを収録しているので、SNSでよく使われるような単語であったりとか、新しく作られた固有名詞みたいなものは辞書に単語が存在していません。
例えば、みりめいさんが、鉄道漫画×位置情報ゲーム「あみてつ」というアプリを開発されていますが、この「あみてつ」という単語は形態素解析にかけると「あみ」と「てつ」の2単語に分割されてしまいます。ですので「あみてつ」という単語を特徴とするアカウントと似ているかどうかを判定して欲しいにもかかわらず、辞書にない言葉なのでそれができないために、みりめいさんが似た者システムを利用しても似てる人が見つからないという悲しい結果になってしまっていました。これは改善したい。
単語登録をするところはまぁえっちらおっちらやったらなんとか実現できました。N-FeedやU-Feedは過去のポストのデータベース(Elasticsearch)で形態素解析をしていますが、この形態素解析のエンジンに単語登録する、とか、カスタムフィード作成ツールのWORD()によるポストの収集処理でも、登録した単語を利用するというのは実現できました。
ただ、ここで問題が発生します。
先ほども紹介をした「ブルスこんにちは」というカスタムフィードは「ブルス」と「こんにちは」という2つの単語が連続して現れた場合(条件式でいうところのCOMPLEX())にポストを抽出するように条件式が作成されているのですが、「ブルスこんにちは」という単語を登録すると形態素解析の結果として2単語ではなく1単語を返してしまうために、元のカスタムフィードが機能しなくなってしまうのです。
これは非常にマズいので、どうにかして解決できないかを考えてはみたのですが、またしても面倒になったので、COMPLEX()の利用は非推奨にする、既存のCOMPLEXを利用しているカスタムフィードは手動で私の方で単語登録してWORD(<登録した単語>)という条件式のカスタムフィードに書き換える、ということで対応することにしました。単語の登録削除は誰でもできるようにはしていますが、複合語による検索を除外することで「単語登録すれば機能する」し「単語削除すれば機能しなくなる」というわかりやすい仕様にすることでもういいやという風に結論づけるとこにしました。単語登録と条件式の書き換えは私の方で手動でやるってここには書いていますがまだ実際にはやっていません。面倒になっちゃったんで。またどこかで時間見つけてやっておきます。
ということで、ここまででおおよそ現在のカスタムフィード作成ツールの形になりました。
まずURLはhttps://customfeed.shigepon.net/になります。あくまで永遠のα版です。
メニューバーは↑のような構成になっています。私のアイコンは私の印象を植えつけるための刷り込みですので気にしないでください。カスタムフィード作成ツールという名前はダサいですが考えるの面倒なので見てわかる形にしています。未ログインの部分はOAuthで認証が通っているとハンドル名になります。ここまでは表示しているだけのメニューです。
まずは「ログイン(OAuth)」と書かれたエリアを押してください。ボタンに見えないのは私のデザインセンスがないからです。気にしないで先にすすみましょう。
ここにカスタムフィードを公開する際に利用するハンドルを入力してください。その上で認証ボタンを押します。そうするとBlueskyの認証画面に遷移します。
ここはApp Passwordではなくアカウントのマスターパスワード(で呼ぶんでいいんだけ?)を入力してください。OAuth認証で権限許諾するにはApp PasswordではできないようにBluesky側の仕組みができています。認証に成功すると認可画面に遷移します。
認可画面は何書いてんだかわかんないと思いますが「あなたが誰であるかを識別する、ということと、App Passwordで利用できる権限相当をこのWebサイトに許可してええか?」と聞いてはります。App Passwordをアプリに入力するのと同じ事だと理解してください。良かったらAcceptを押します。
そうするとこんな感じで右上の「未ログイン」が「<入力したハンドル名>でログイン中」に変わります。同時にFollowingのポストが一覧表示されます。ここから適当に1つポストを選択します。そうすると形態素解析が実行されます。
カスタムフィードを作成する時はこの右側の形態素解析済みの単語リストから単語を選択します。黄色に帯がかかっている単語はN-Feed等のカスタムフィードでこの人はこういう単語を発言しているという認識をする際に使う名詞になっています。あまり気にしなくて大丈夫ですが、特徴をつかみやすい単語になってるケースが多いです。ここでは「豚肉」と「もやし」を選択して、条件式の上にあるボタンのうち「単語(全てを含む)を追加」を選択します。
そうするとこんな感じで条件式のところに、選択した単語にWORDという処理を介したものを&&で結合した条件式が出現しました。これで「豚肉」と「もやし」の両方を含むポストを選択する条件式が作成されました。この&&の左右の条件式の要素はボタンになっていて押すと条件式から削除されるようになっています。今回はこのままカスタムフィードにしちゃいましょう。黒い帯にある「フィードの公開」というボタンに見えないボタンを押します。
そうすると公開するのに必要な情報を入力する画面になります。パスの末尾にはカスタムフィードを識別するための名称を入力してください。アカウント×パスの末尾、の情報でカスタムフィードが唯一に決まるので、この組み合わせを同じにして公開しなおせば、カスタムフィードの条件式を上書きして公開する事が可能です。名前は外から見た時に見える名前ですのでわかりやすい名前を入力してください。説明文は名前の下に表示される説明文ですのでこちらもわかりやすいように入力してください。説明文は省略する事も可能です。ここまで入力できれば「公開」ボタンを押します。これでカスタムフィードが完成します。クライアントで見てみると確かにカスタムフィードができています。
ではこのカスタムフィードを表示してみます。
何も表示されません。サーバのリソースをできるだけ使わないようにするために、カスタムフィードを作成してから条件に合致するポストを発言した場合にのみ蓄積しているからです。では、この条件にひっかかるポストを実験的に発言してみましょう。
はい、こんな感じで条件に合致するポストをするとちゃんとカスタムフィードとして機能していることが確認できます。簡単でしたよね?おおよそこんな流れでカスタムフィードを作ることができます。
メニューに表示されているボタンの機能をします。
条件式の上に並んでいるボタンの機能についても説明します。
だいたいできることはこんなもんです。UIで入力するのがまどろっこしかったら、もはやテキストで直接入力するほぼUIにした意味ねーじゃんみたいなツールになってしまいます。α版なので良いのです。もし何か要望等あればBlueskyで@shigepon.netまでご連絡ください。なんだか1月から仕事が急に忙しくなりそうで、土日を侵食してきそうな勢いなのですが、気が向いたら対応します。
明日12/19はShin-ichi Kamikura (sinnchan.k)lさんの「Bluesky 2年目の様子など書いてみます」の予定です。おたのしみに。
皆様、お身体にお気をつけて年末年始お過ごしください。私はちょっと覚悟決めて仕事に望みたいと思います。