WhalebirdとFedistarでPixelfedのサポートを開始した

Pixelfedは長らくOAuthのcode認証に問題があり,redirect_urlにurn:ietf:wg:oauth:2.0:oobを指定した場合,エラーで認証できなくなっていた. これがようやく解消され,

github.com

その後ちょっと問題はあったものの

github.com

現状のpixelfed.socialでは解消されている. これでようやくcode認証ができるようになって,oauth tokenが取れるようになった.

というわけで,megalodn側のPixelfedサポートを開始し,同時にWhalebirdとFedistarでもPixelfedが使えるようになっている.

制約とか

まぁ認証方法は揃えられたのでそこは問題なし.問題があるとすると,そもそもPixelfedはWebSocketによるストリーミングを提供していないので,そこに関連する機能が軒並み使えない.例えば通知とかね.タイムラインの自動更新とかね.これはWeb版でも存在していなかったので,実装されてないんじゃないかなぁ.ドキュメントは空っぽだった.

beta-preview.pixelfed.io

もしかしたらそのうち実装されるのかもしれない.

あと,代表的なものとしてリストが存在しない.そのためリスト関連の機能は全滅している.また,もともと写真を共有するSNSをコンセプトにしている都合上,添付ファイルなしの文字だけの投稿を受け付けていない.そのためこちらについてはバリデーションを追加する対応が必要だったりする.

まぁでもそんなところか.

Fedistarのtauriをv2にアップデートした

migration guideは

v2.tauri.app

の通り. 先にやっとくこととしては,Cargo.tomlをlibに変更しておいて

[lib]
name = "app_lib"
crate-type = ["staticlib", "cdylib", "rlib"]

今までmain.rsだったものをlib.rsに変更して

#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
    // your code here
}

main.rsを新設してlibの関数を呼ぶように変更しておく.

#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]

fn main() {
  app_lib::run();
}

残りのコード変換はauto migration commandが用意されている.

$ npm run tauri migrate

Fedistarで,自動的にmigrateされたのはこの辺.

github.com

JS側とtauriの基本的な設定はこれでmigrateできる.ただし,rust側のコードを厚くしていると,これはあんまりmigrateされていなかったので,書いておく.

Rust側で対応が必要なこと

パッケージ構造の変更

まず,パッケージの変更がかなり行われている.例えば,今まで tauri::MenuItem だったものが tauri::menu::MenuItem になっていたり.こういうパッケージの変更はJS側もかなり起こっているが,なぜだがJS側はauto migrationされており,Rust側だけ残っていた.

ここは地道にRust Docを漁ってパッケージを追いかけるしかない.一応大きなものはCrate Changesに書いてある.

Upgrade from Tauri 1.0 | Tauri

AppHandleが参照に変わった

これはかなり影響範囲がでかかった. 通常,

tauri::Builder::default().setup(|app| {
  let app_handle = app.handle();
})
.run(tauri::generate_context!())

みたいなコードを書いていると思うが,このhandle が返すものが AppHandleから&AppHandleに変更になった.これをもともとArcなんかくるんでいると,盛大にコンパイルエラーがでるので修正する必要がある. 幸いこいつはCloneトレイトを持っているのでcloneしてしまっても問題ない.

tauri::api::pathが消えた

もともと

let user_dir = tauri::api::path::data_dir();

こういうのを,setup前に呼び出してディレクトリにconfigを保存したりしていたんだけど,このパッケージ自体が消えた.

MigrationGuideによると

tauri::Builder::default().setup(|app| {
  let user_dir = app.path().data_dir();
})

というようにsetup内に閉じ込める必要がある.これは結構きつかった. data_dirなんてstaticにしてもいいくらいなのに,setupに閉じ込められるとなると,クロージャー内で参照したりするときに結構困る.まぁpathなのでcloneしても何ら問題ないといえばないのだが.

on_menu_eventがAppのメソッドになった

tauri::Builder::default()
  .on_menu_event(|event| {
  })
  .setup(|app| {
  })

これが

tauri::Builder::default().setup(|app| {
  app.on_menu_event(|app, event| {})
})

になった.

これはまず,MenuBuilderというものができた.

let menu = MenuBuilder::new(app_handle).build()?;
let submenu = SubmenuBuilder::new(app_handle, "File").quit().build()?;
menu.append(&submenu);

みたいな感じになる. tauri側で用意されているメニューもあるので,そういうのは .quit()とか .minimize() とかで追加していって,最後に build()してやれば良い.

これはまぁ慣れればそんなに違和感はない.

emit_allがemitになった

単純.今まで

app_handle.emit_all("event", obj);

していたものが,

app_handle.emit("event", obj);

になる.emitで特に指定なくallに呼び出しがかかるようになった.逆に特定のwindowに贈りたいときは emit_toを使う.

JS側の修正はゼロでいけた

auto migrationのみでそのまま動いた.パッケージ変更のみでメソッドの変更はそんなになかったのかね.

また,tauri.conf.jsonも結構変わっている.のだがこれももちろんauto migrationされるので,特に変更する必要はなくなった.allowListを更新するときはcapabilitiesに追加するのを忘れないようにしたい.

Rust側はコンパイルエラーを解消すれば動くので,結構楽にいけた.

Montreux Jazz Festival 2024で15年ぶりのSeatbelts&菅野よう子

2024年12月6日の回に行ってきた.7日も出るのだが1日しかチケットが取れなかった. 生で見るのは2009年の七夕ソニック以来,実に15年ぶりである.配信のライブが2020年にあったので,そこまで久しぶり感はないのだが,それでも嬉しい. 2009年時点で,次回は22世紀と告知されたので,もうライブを見ることもないと思っていたので感無量だ.

2009年は,朝から物販に並んで夜からライブで……みたいなスケジュールだったのだが,流石に令和にもなると物販はオンライン販売しているし,だからこそ物販開始も開場時間と同時だった.それでも物販に人は並んでいたけどね. そしてライブ後に速やかにセットリストが公開されるところも,時代の進歩を感じる…….まぁ会場でもセットリストを紙で配布していたが.

seatbelts.live

というわけで今日のセットリスト.

  • TANK!
  • RUSH
  • BAD DOG NO BISCUITS
  • CAR 24
  • TIME TO KNOW ~ BE WALTZ
  • ELM
  • I DO
  • UN SOFFIO DI VENTO
  • KIDS ON THE SLOPE
  • RIDE ON TECHNOLOGY
  • WHAT PLANET IS THIS!?
  • BLUE
  • RISE
  • SPACE LION
  • THE REAL FOLK BLUES

大方の予想通りTank!で始まる.ので大盛り上がりなわけだ.Tank!は今までライブでもほぼ原曲通りの構成,本田雅人のサックスソロが入るところだけアドリブ多めで長くなったりすることはあった,くらいだった.が,今回後半はがっつり変えてきていて,ちょっと長めのアレンジになっていた.Tank!がこういうアレンジされてるのを聴くのは初めてだ.そのおかげで七夕ソニックのときのような1分に及ぶ本田雅人ソロのラストというのはなかった.

RUSH, BAD DOG NO BISCUITSあたりは事前に公開されてたyoutubeからも予想できる流れ.

www.youtube.com

Car24, Time to knowあたりのおちゃめ曲が入ってちょっと和む.

そしてセットリストを見てみると,途中でボーカル曲が入っている.そう,ゲストボーカルが来ていた.それもまさかのIlaria Grazianoが来ていた.ELM,I do, UN SOFFIO DI VENTOとIlariaが歌った.これ告知されてなかったよな……?

しかも,I doは泣く.これはあまりにも涙腺に響く.

What Planet Is Thisはみんなで叫ぶ.だいたいこれもどのライブでもやるよね. これを聴くと劇場版の板野サーカスを思い出す.ソードフィッシュがミサイルを避け続け,延々背景動画が続くあのシーンが思い出される.

そして数曲インストを挟んでからのBLUEだ.そう,ゲストボーカルがもう一人,山根麻以も来ていた.これも告知されてないよな……?

流石にOrigaはこられないので,RISEの歌声は録音.逆にピアノが生というご褒美.

SPACE LIONではパーカッションいっぱい.これは分厚い打楽器がすごく心地よい.

あっという間にThe Real Fork Bluesで終わり.今回アンコールはなし(これは他のアーティストも同じだった).

今回,ほぼビバップの曲から持ってくるのかと思っていたけど,意外とS.A.Cや坂道のアポロンからも持ってきていた.KIDS ON THE SLOPEなんて何度も聞いてたはずなのに,ここで流れると思ってなかったから最初気づかなかったぞ. RIDE ON THECHNOLOGYなんて全然予想外よ.

強いて言うなら,Piano Blackを生で聞きたかったな.

令和っぽさとして,ライブ後にセットリストと同じプレイリストが公開されるというのもある.

seatbelts.live

www.youtube.com

これは7日の分も公開されてると思う.

メンバーについては,結構変わっている.特にSeatbeltsホーンズに関しては2009年とかなり変わってるんじゃないかな.

こちらもオンラインにて公開されている.

  • Dr: Yasuo Sano
  • Ba: Keisuke Torigoe
  • Gt: Tsuneo Imahori
  • Perc: MATARO
  • Tp1: Koji Nishimura
  • Tp2: Sho Okumura
  • Tp3: Reiya Terakubo
  • A.Sax: Masato Honda
  • T.Sax: Shuuichi Kuwata
  • T.Sax: Yoshiki Okazaki
  • B.Sax: Kei Suzuki
  • Tb1: Yoichi Murata
  • Tb2: Azusa Tojo
  • B.Tb: Katsuhisa Asari
  • Mnp: Takashi Nakayama
  • Vo: A-sha Mai Yamane
  • Vo: Ilaria Graziano
  • Vo: Origa
  • Cho: The Little Singers of Tokyo.

またろう,佐野康夫今堀恒雄本田雅人,あたりはいつものメンバー.この辺は2009年から,もっというと初期のSeatbeltsからあまり変わってないと思う.

ベースは,2020年配信のときは渡辺等で,初期も渡辺等だったと思うけど,今回は変わっている.2009年のときはバカボン鈴木だったね.

席はVIP席を買っていたので,アリーナ.Bブロックの先頭だったので,割とよく見えたほう. 2009年は席を選べなかったのでかなり遠かったけど,今回はよく見えた.

アンコールに期待していたんだけど,ワンマンライブじゃないと難しいのかな.

VIP専用ラウンジで配ってたビール

アニメの,OPEDならまだしもBGMであるサントラ曲をこんなに長い間引っ張っているコンテンツも珍しいと思う. ましてやこれはCOWBOY BEBOPのライブですらない,Seatbeltsのライブだ.こういうのが20年以上続いてくれていることが本当に嬉しいし,20年以上追いかける人がこんなに大勢いることも凄い. 総じて熱量の高いライブだった.

次はいつ聞けるかな.

余談

オープニングはD-YAMA(MOGRA)という方のDJだったのだが,ちょいちょい知っている曲が流れていて嬉しかった.特に

  • Boomerang Boogie (PE'Z)
  • サンバ・テンペラード (大野雄二)

あたりは盛り上がる.

いつの間にかFirefishの終了が決まってた

ちょっと前の話で,気づいてなかったんだけど,Firefishが終わるらしい.

info.firefish.dev

2024年中にサポートを終了しメンテナンスモードになるようである.

理由は↑にかかれている通り,突然Kainoaがオーナーを移譲してきて,それ以降一人でメンテナンスしていたが,きつくなってしまったらしい.

Over the past seven months, I have been maintaining Firefish alone. All other former maintainers have left, leaving me solely responsible for managing issues, reviewing merge requests, testing, and releasing new versions. This situation has had a significant impact on my personal life.

でかいOSSだとそうなるよな.コミュニティが育ってなかったのだろうか.

せっかくmegalodonもFirefishサポートしたのに

h3poteto.hatenablog.com

1年ちょっとでFirefishが終わってしまうとは悲しい.

とりあえずOSS自体がEOLになったとして,サーバはメンテナンスモードでもしばらくは運用され続けるだろうから,クライアントとしてのFirefishサポートは残しておこうと思う.

次はSharkeyあたりをサポート対象にしておこうと思ったんだけど,そもそもSharkeyはMastodon互換APIを持つので,(どの程度本当に互換かは確認してないけど)あまり苦労せずにサポートできそう.

叶 匠壽庵 寿長生の郷に行ってきた

以前桜餅の記事で触れたのだが,

h3poteto.hatenablog.com

叶匠壽庵は新宿で売ってる桜餅で優勝している(俺調べ).

寿長生の郷はそんな叶匠壽庵がやっている場所.ちょっと田舎にある里山.工場もあるけど(見学不可),茶室とか食事処とか畑とか梅林とか山がある.そんな寿長生の郷に行ってきた.

事前予約すると良いものがいくつかあって,ひとつは懐石料理.

kanou.com

これはお菓子はあまり関係ないけど,食事をしたいのであれば予約制なので予約すべきだろう.俺は結局こちらは予約しなかった.

予約せずに入れる食事処もあるしね.

kanou.com

もう一つ予約すべきなのは茶室.

kanou.com

こちらは予約して行ってきた.

茶室はもちろん抹茶だけど,季節の生菓子が出るので良い. 案外生菓子が食べられるのは,茶室くらいなんじゃないだろうか.

甘味処はいくつかあるので,食べられるお菓子は結構あるけどね.

こちらは屋外に出ていた屋台で売ってたもち.

豆乳のアイスも売ってる.

そして,あもで作るお汁粉.