Compare commits
No commits in common. "master" and "nagoya-deramas-after-report" have entirely different histories.
master
...
nagoya-der
|
@ -9,16 +9,15 @@ jobs:
|
|||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: true # Fetch Hugo themes (true OR recursive)
|
||||
fetch-depth: 1
|
||||
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
|
||||
|
||||
- name: Setup Hugo
|
||||
uses: peaceiris/actions-hugo@v3
|
||||
uses: peaceiris/actions-hugo@v2
|
||||
with:
|
||||
hugo-version: "0.144.2"
|
||||
extended: true
|
||||
hugo-version: "0.139.3"
|
||||
|
||||
- name: Build
|
||||
run: hugo --minify
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
{
|
||||
"cSpell.words": [
|
||||
"Fediverse"
|
||||
],
|
||||
"errorLens.excludePatterns": [
|
||||
"**/*.md"
|
||||
]
|
||||
}
|
|
@ -9,8 +9,7 @@ defaultContentLanguage = "ja"
|
|||
# pluralizeListTitles = "true" # hugo function useful for non-english languages, find out more in https://gohugo.io/getting-started/configuration/#pluralizelisttitles
|
||||
|
||||
enableRobotsTXT = true
|
||||
# paginate = 10
|
||||
pagination.pagerSize = 10
|
||||
paginate = 10
|
||||
summaryLength = 100
|
||||
|
||||
buildDrafts = true
|
||||
|
|
|
@ -18,15 +18,3 @@ name = "技術"
|
|||
parent = "カテゴリ"
|
||||
pageRef = "/categories/技術"
|
||||
weight = 10
|
||||
|
||||
[[main]]
|
||||
name = "旅行"
|
||||
parent = "カテゴリ"
|
||||
pageRef = "/categories/旅行"
|
||||
weight = 20
|
||||
|
||||
[[main]]
|
||||
name = "その他"
|
||||
parent = "カテゴリ"
|
||||
pageRef = "/categories/その他"
|
||||
weight = 100
|
||||
|
|
Before Width: | Height: | Size: 976 KiB |
|
@ -2,7 +2,7 @@
|
|||
author: usbharu
|
||||
draft: false
|
||||
categories:
|
||||
- その他
|
||||
- null
|
||||
date: 2024-02-17T14:52:17+09:00
|
||||
tags:
|
||||
- null
|
||||
|
|
Before Width: | Height: | Size: 1.8 MiB |
Before Width: | Height: | Size: 3.5 MiB |
Before Width: | Height: | Size: 5.6 KiB |
|
@ -1,123 +0,0 @@
|
|||
---
|
||||
author: usbharu
|
||||
draft: true
|
||||
categories:
|
||||
- 技術
|
||||
date: 2024-12-17T22:30:31+09:00
|
||||
tags:
|
||||
- Rust
|
||||
- "DCS World"
|
||||
- embassy
|
||||
- Raspberry Pi
|
||||
- Raspberry Pi Pico
|
||||
- Embedded Rust
|
||||
- 組み込み
|
||||
- Tauri
|
||||
- React
|
||||
keywords:
|
||||
- Rust
|
||||
- "DCS World"
|
||||
- embassy
|
||||
- Raspberry Pi
|
||||
- Raspberry Pi Pico
|
||||
- Embedded Rust
|
||||
- 組み込み
|
||||
- Tauri
|
||||
- React
|
||||
title: "DCS Worldをラズピコから操作したい"
|
||||
relpermalink: posts/2024-12-17/
|
||||
url: posts/2024-12-17/
|
||||
decription: "DCS Worldをラズピコから操作したい"
|
||||
---
|
||||
|
||||
## 何をしたか
|
||||
|
||||
### DCS Worldとは
|
||||
|
||||
DCS World、通称DCSっていう超リアルな戦闘機のシミュレーターがあります。
|
||||
|
||||
[Digital Combat Simulator | DCS World | Combat Simulator](https://www.digitalcombatsimulator.com/en/)
|
||||
|
||||
### なぜ外部から操作したいか
|
||||
|
||||
このシミュレーター、本物の戦闘機を可能な限り忠実に再現しているのでただ離陸するだけでもクソみたいな数の操作をしないといけません。まぁそう言うのが好きでやってるんですが、ともかく操作が多いのでマウスでポチポチやるのはしんどいわけです。ましてや戦闘中にいちいちマウスを触る余裕はありません。特にVRだと視点が動くとカーソルも動くのでめっちゃ操作しづらいです。というわけで手元に物理的なボタンが欲しくなったので試行錯誤の記録です。なお未完成で、後述するソフトから送られてくるデータの読み取りには成功していますが書き込みはまだできていません。
|
||||
|
||||
### なぜラズピコなのか
|
||||
|
||||
たまたま手元にあったから
|
||||
|
||||
### 使用技術
|
||||
|
||||
- DCS-BIOS
|
||||
- Rust
|
||||
- Embassy-rp
|
||||
- Raspberry Pi Pico W
|
||||
- Tauri
|
||||
|
||||
DCS-BIOSはDCSにデータを送ったりDCSからデータを取得したりすることができるツール群です。Arduinoライブラリとかもあります。
|
||||
|
||||
Embassyは組み込みRustの非同期ランタイムとかです。それのrp2040用がEmbassy-rp
|
||||
|
||||
今回はWiFiに接続してデータを受け取るのでPico Wでやりますが、最終的に通信できたら何でも良いです。
|
||||
|
||||
残念ながらラズピコからデータを読んだり書き込んだりする部分は完成してないので、TauriでGUI作ってライブラリが正しく動くことを確認しました。ボタンが多すぎてIOエキスパンダやらなんやらが必要なんですけど基板に収まらなくて発注しないといけない。そんな金は無いので停滞中。
|
||||
|
||||
## DCS-BIOSについて
|
||||
|
||||
[DCS-Skunkworks/dcs-bios: Data export tool for DCS.](https://github.com/DCS-Skunkworks/dcs-bios)
|
||||
|
||||
もとはGolangで書かれてたみたいですがフォークされてLuaに書き直されたみたいです。LuaはDCSのプラグインの言語なんでわかるんですけどなんでGolangで書かれてたんだろう…。
|
||||
|
||||
### DCS-BIOSのプロトコル
|
||||
|
||||
日本語での解説は皆無だと思うのでここに書いておきます。DCS-BIOSはメモリの変化の情報をそのまま抜き出してきたような感じのプロトコルで、アドレスとかはありますがアドレスに1対1で対応したデータが送られてくるわけではありません。例えば0x00というアドレスで8バイト分のデータが送られてきたとします。このときデータを見ただけでは0x00からのデータが文字列なのか数値なのかの判断をすることはおろか、データ間の区切りすらわかりません。データを受け取る側は欲しいデータの型と長さとアドレスを知っておく必要があります。あと場合によってはビットマスクの値とビットシフトの値も必要です。
|
||||
|
||||
で、それがこんな感じ。なんとなく書いたけどいらんなこれ…
|
||||
|
||||

|
||||
|
||||
Data Address以降は何回も繰り返される可能性があります。全ての数値はリトルエンディアンなので読むときは注意する必要があります。
|
||||
|
||||
データを受け取る側、クライアントは受け取ったデータの内必要な部分を保持しておく必要があります。もちろん全てのデータを保持する必要はないので、65kbもメモリを持っていかれるわけじゃないんですが、いまいちどこが必要なのか探すのが面倒なので私は全部保持してます。PCだとなんとも無いけど組み込みだとちょっと辛い。
|
||||
|
||||
実装時の注意点として、DCS-BIOSから送られてくるアドレスはあくまでもメモリに変化があった箇所の始点のアドレスなのでそのまま使ってはいけないです。もちろんそのまま使うこともできますが、データが歯抜けになります。(1敗)
|
||||
|
||||
機体のスピードなんかは同時に変化し続けるのでまとめてデータが送られてきます。例えば0x0050から10バイトぐらいが機体のスピードに関するデータが書き込まれている場所だとします。DCS-BIOSは0x0050から10バイトの長さで変更があったよ~と教えてくれるわけです。このとき変化するアドレスは0x0050、0x0051、0x0052...となるわけですが、0x0052のデータが欲しいからと言って0x0052とDCS-BIOSのプロトコルのData Address(今回は0x0050)を直接比較してしまうと当然falseになります。するとこれも当然ながら0x0050以外の箇所はデータがない事になってしまいます。DCS-BIOSはデータを纏めて送ってくるという知識があればすぐに気づく当然のことなんですが、全然気づかなかったのでここに書いておきます。
|
||||
|
||||
## Embassyについて
|
||||
|
||||
### I2Cについて
|
||||
|
||||
まだ全然分からん感じなので大したことかけないんですが、Embassyを使いながらでもEmbedded HALのライブラリは使えることに気づくのに時間がかかったので、これもここに書いておきます。
|
||||
|
||||
[Embedded HALのI2Cを使っているところ](https://github.com/usbharu/DCS-F18/blob/10a4b46d4c6c1570f1407369335486df5121739f/Software/firmware/dcs-f18-ddi/src/ddi.rs)
|
||||
|
||||
Embassy-rpのHALもEmbedded HALといい感じに互換性があるみたいです。詳しいことはよくわからないのでそのうちちゃんと読みます。
|
||||
|
||||
|
||||
### 外部入力割り込みについて
|
||||
|
||||
これもさっぱり分からんのですが、どうやらTaskを起動して中でinputの`wait_for_high().await`とかを呼ぶことで実現している…?みたいです。
|
||||
|
||||
[embassy/examples/rp/src/bin/gpio_async.rs at 8b36a32ed5d834b23e970d5b723dd7df1f1c94a2 · embassy-rs/embassy](https://github.com/embassy-rs/embassy/blob/8b36a32ed5d834b23e970d5b723dd7df1f1c94a2/examples/rp/src/bin/gpio_async.rs)
|
||||
|
||||
よくわからんのでExample
|
||||
|
||||
## Tauriについて
|
||||
|
||||
すごい簡単でいいですねこれ Electronが流行るのもわかる
|
||||
|
||||
Tauriを選んだ理由とかは特に無いんですけど、ラズピコで動くコードがそのままデスクトップでも動くのでバグが入り込む場所が少なくなっていいかなと思って採用しました。
|
||||
|
||||
なんか書きたいんですけどGitHubがクソ重たくて全然コード見れないので今日はこの辺にしておきます。
|
||||
|
||||
|
||||
## その他
|
||||
|
||||
ハード側は3Dプリンターの記事でも書いた通りある程度できてきていますが、大量のボタンをまとめてラズピコに送る部分ができてません。
|
||||
|
||||

|
||||
|
||||
## 次に向けて
|
||||
|
||||
とりあえず基板設計し終えたい。ソフト側もこちらからの書き込みに対応したい。
|
Before Width: | Height: | Size: 1.1 MiB |
|
@ -1,315 +0,0 @@
|
|||
---
|
||||
author: usbharu
|
||||
draft: false
|
||||
categories:
|
||||
- その他
|
||||
date: 2024-12-21T22:22:00+09:00
|
||||
tags:
|
||||
- ミリシタ
|
||||
- アイマス
|
||||
- ミリマス
|
||||
- ActivityPub
|
||||
- Rust
|
||||
- Golang
|
||||
- Kotlin
|
||||
- SpringBoot
|
||||
keywords:
|
||||
- ミリシタ
|
||||
- アイマス
|
||||
- ミリマス
|
||||
- ActivityPub
|
||||
- Rust
|
||||
- Golang
|
||||
- Kotlin
|
||||
- SpringBoot
|
||||
title: 2024年振り返り
|
||||
relpermalink: posts/2024-12-21/
|
||||
url: posts/2024-12-21/
|
||||
decription: 2024年振り返り
|
||||
---
|
||||
|
||||
1年を振り返って書き殴ったふわふわ記事です。頻繁に語尾が変わります。
|
||||
|
||||
## 1年の目標
|
||||
|
||||
最初に、今年の目標だったものを書いておきます。
|
||||
|
||||
https://misskey.usbharu.dev/notes/9nyr5ab4xp
|
||||
> - 資格を取る
|
||||
> - AP実装をリリースする
|
||||
|
||||
https://misskey.usbharu.dev/notes/9vkfi9m0my
|
||||
> 追加 車の免許を取る
|
||||
|
||||
こんな感じでした。応用情報技術者試験に受かったのであとから追加で車の免許を取ることを入れました。
|
||||
|
||||
## スパム祭り
|
||||
|
||||
まー面倒でした。僕のメアド名乗って脅迫メール送られたので一応警察行ったけどおっちゃん何もわかってなかったでしょ。
|
||||
|
||||
https://misskey.usbharu.dev/notes/9pt74kl8r7
|
||||
> @usbharu.dev のアドレスが乗っているお問い合わせなどはすべて私ではありません。送られたメール、お問い合わせなどはすべて無視してください。
|
||||
|
||||
このブログでもこんな記事を出しました。
|
||||
|
||||
[usbharu.devのメールアドレス名義でのお問合せフォームへ脅迫文等が送られている件について](https://blog.usbharu.dev/posts/2024-02-17/)
|
||||
|
||||
このときは色んな場所で色んな人が協力し合ってみんなでFediverseを守ろうとしていて、今思い返してみるとちょっと楽しかったなと思います。当時はそれどころじゃなかったんですけどね。連合ホワイトリスト制に関する議論が進んだのもこのときでした。まぁ~大炎上しましたが。ちなみに僕は鍵投稿に関しては連合ホワイトリスト制的なものが一番バランスが良いと思ってます。信用できないサーバーには送信しないのが原則。まぁ問題は実装と運用のコストですが…
|
||||
|
||||
## 学校
|
||||
|
||||
やっぱこれが一番でかいイベントじゃないでしょうか。5年ぐらい家に引きこもってたので体力的に持つかが一番大きな懸念でした。意外にもなんとかなっています。学校ではすごい基礎的な部分からやるので今は授業が暇すぎて暇すぎて仕方ないのですが、まぁそのうち面白い内容の授業を受けることができるはずなので、楽しみにしています。~~今は技術英語が一番役に立つ~~
|
||||
|
||||
中学校ぶりにプログラミングの話ができる友だちができました。授業の課題を速攻で終わらせていろんな技術の話をしたり、まだ終わってない友達を一緒に見守ったりしています。僕はJava/Kotlinをメインで扱ってきたので他の言語の文化に触れることができて楽しかった。特にJavaだとIDEとの高度な連携が前提の文化まぁまぁ多いですからね、アノテーション関係は大体そうだし変数名は多少長くても正確に表しているなら気にしないし。
|
||||
|
||||
https://misskey.usbharu.dev/notes/9ytlkd44bx
|
||||
> 私は今、オンライン授業って説明に書いてたから履修申請したのにいざ始まってみたら対面だった授業のために学校に残っています。本当は帰れる時間なのに
|
||||
|
||||
秋になってからはオンライン授業だったはずの授業が対面授業になっていて、なぜか5限まで学校にいることになったりしました。いやまだあと5回ほど続くんですが。他の5限の授業を取ってる友達と寒いね、暗いね、なんで5限の授業取っちゃったんだろうねなんて言いながら帰るのもちょっと楽しくなってきています。
|
||||
|
||||
## 応用情報技術者試験
|
||||
|
||||
受かったぜうぇーい これで同級生と2年ぐらいは差がついたわけです。知らんけど
|
||||
|
||||
あんまり覚えてないので時期がズレてるかもしれませんが、申し込んでから1月末ぐらいまではやる気がなくてほとんど勉強せず、2月に少しだけ午前の勉強を始めるぐらいの感じでした。2月末ぐらいに唐突に受かりたくなってきてしまったので、こっからちゃんと勉強を始めました。3月中頃ぐらいからは午後の勉強もしていたような気がしますが、過去問道場の記録を見る限りそんなに勉強してなかったみたいです。真面目に勉強したつもりだったんだけど実はそんなに勉強してなかったらしい。入学してからはあまり時間はとれませんでしたが、同じクラスにすでにAP受かってる人が居たので、焦りを感じ始めていたような記憶です。
|
||||
|
||||
いざ受けてしまえばもう次の日には勉強したこと全部忘れた! みたいな感じです。受験会場が寒すぎて風邪引いたのではしゃげませんでしたが、もう試験終わって無敵!って感じでした。採点遅すぎて合格発表まで3ヶ月ぐらいありますからね。
|
||||
|
||||
## 車の免許
|
||||
|
||||
APの試験も終わって一段落した5月中頃に、まぁ~夏休みぐらいには教習所行きたいよね~合宿で。って言ったら何故か次の週ぐらいに普通に通うタイプの教習所行くことになってました。なんでや
|
||||
|
||||
教習は一回だけ怒られが発生しましたがそれ以外は問題なくストレートで通過しました。途中風邪(多分マイコプラズマ)にかかったり、後述する情報安全確保支援士の勉強やらで1ヶ月ぐらい期間が開くことが何度かありましたが、教習期限等には引っかからず結果的にはスムーズだったかな
|
||||
|
||||
ちなみにこの記事を書いている時点では教習所は卒業しましたが、本免学科試験がまだ終わってません。免許センターは平日以外もやってくれ~
|
||||
|
||||
## 情報安全確保支援士試験
|
||||
|
||||
RISS(登録情報安全確保支援士の英略)ってかっこよくない!? APに受かったので次は何取ろうかな~と思ってたらSC取ると良いよって教えてくれたのでSCの合格目指して勉強することにしました。過去問道場やって本買って難しさに絶望して試験3週間前ぐらいまで一切勉強せずに放置してたけど!
|
||||
|
||||
とりあえず午前は突破してそうです。午後は知らん。300ページぐらいある午後対策の本を試験4日前に買って3日で終わらせる、何ていう過去に類を見ないレベルの真面目な勉強(当社比)をしましたが、まぁなんか落ちてる気がします。
|
||||
|
||||
## DDD(ドメイン駆動設計)
|
||||
|
||||
今まで雰囲気で設計していたものを、しっかり設計して作れるようになりたいなぁと勉強を始めました。そのおかげか、自分の書いたコードにある程度理由がつけられるようになった気がします。なぜこのコードがここにあるのかとかそういうやつ。
|
||||
|
||||
あとエンティティについての誤解が解けました。最初に使ったORMがSpring Data JPAだったので色々ややこしくてちゃんと理解してなかった部分が多かった。
|
||||
|
||||
## Kubernetes
|
||||
|
||||
未だにスペル覚えてません。2回挑戦して2回目で結構いい感じになりました。挑戦の記録?は
|
||||
|
||||
k8s+ArgoCDに入門したかった · usbharu - blog
|
||||
https://blog.usbharu.dev/posts/2024-11-23/
|
||||
に
|
||||
|
||||
いずれは家で動いてるものほとんどk8sに乗せてしまいたいな~と思っています。ファイルサーバーぐらいかな そのまま動かすの
|
||||
|
||||
## ActivityPubと関連技術
|
||||
|
||||
信じられないかもしれないけど、上の方で書いた学校の友達とぐっと距離が縮まった(なと勝手に思ってる)きっかけの一つにActivityPubの話があります。バックエンドメインで書いてる人って人にぱっと見せれるような成果物って少ないと思うんですが、このときもお互い見せれるものが無くてなんとなくこんな物作ってるんだ~という話をしてました。そのときになんとなくActivityPubを知っているか聞いてみたら、なんと!知っているとのことで一気に話が進みました。RFC9421の話とかLD-Signatureの話とかMisskeyの話とかで盛り上がりました。
|
||||
|
||||
ちょうど当時RFC9421が個人的にアツくて、RFCの日本語訳なんかも挑戦していました。(普通に実装が完成したので放棄されています)また、AP実装にはほぼ必須のジョブキューなどの自作、ActivityStreamsのシリアライズ・デシリアライズなんかもやっていました。何が僕をここまで突き動かしているのか知りませんが、やはりMisskeyの開発思想が自分に合わないことを痛感することが多かったからでしょうか。
|
||||
|
||||
usbharu/http-signature at rfc9421
|
||||
https://github.com/usbharu/http-signature/tree/rfc9421
|
||||
|
||||
## GolangとRust
|
||||
|
||||
GolangはKotlinの実行環境(要はJavaのランタイム環境)を用意するのが面倒な環境で動かす小さいものを書くために勉強しました。が、Rustを書けるようになった今さらに深く勉強する理由はあんまりないかな、と思っています。非同期処理とか並列処理とかなんかそのへんが必要になったらまた勉強するかな
|
||||
|
||||
usbharu/now-playing - now-playing - Gitea for usbharu
|
||||
https://git.usbharu.dev/usbharu/now-playing
|
||||
|
||||
Rustはまぁなんか流行ってるし勉強しとくか~みたいなノリで始めました。今は組み込みRustメインで書いています。
|
||||
|
||||
DCS Worldをラズピコから操作したい · usbharu - blog
|
||||
https://blog.usbharu.dev/posts/2024-12-17/
|
||||
|
||||
## Kotlin
|
||||
|
||||
Kotlin 2.0出ましたね! コンパイル速度大して変わってねぇ~~~~~
|
||||
|
||||
メインで書いている言語ですが、基本Spring Bootといっしょに使っているだけなのでKotlin自体の変化にはあまりついていけていません。
|
||||
|
||||
Kotlin MultiplatformなMarkdownパーサを作った · usbharu - blog
|
||||
https://blog.usbharu.dev/posts/2024-11-17/
|
||||
|
||||
usbharu/Hideout: [WIP] Social Networking System
|
||||
https://github.com/usbharu/Hideout
|
||||
|
||||
## 1週間プロジェクト
|
||||
|
||||
特に名前をつけてなかったので、今名付けました。大体土曜~翌週月曜の夜に記事を書いています。自分の性格として、ダラダラ続けて結局完成しないまま放置されるというのが多いです。ので、大体1週間ぐらいで完成できる粒度で区切って何としてでも完成させることを目標としたものをやってみました。結果としてはあまり良くない感じ
|
||||
|
||||
1週目 完成
|
||||
|
||||
Kotlin MultiplatformなMarkdownパーサを作った · usbharu - blog
|
||||
https://blog.usbharu.dev/posts/2024-11-17/
|
||||
|
||||
2週目 微妙
|
||||
|
||||
k8s+ArgoCDに入門したかった · usbharu - blog
|
||||
https://blog.usbharu.dev/posts/2024-11-23/
|
||||
|
||||
3週目 完成こそしたけど微妙
|
||||
|
||||
おうちk8sでMisskeyとNowPlayingを動かし始めたよ · usbharu - blog
|
||||
https://blog.usbharu.dev/posts/2024-12-01/
|
||||
|
||||
4週目 体調不良で何もせず
|
||||
|
||||
5週目 間に合わず
|
||||
|
||||
DCS Worldをラズピコから操作したい · usbharu - blog
|
||||
https://blog.usbharu.dev/posts/2024-12-17/
|
||||
|
||||
6週目 粒度をミスって1日で終わった
|
||||
|
||||
問題点は
|
||||
|
||||
- ハードウェアが関わってくると買いに行く時間や、お金の問題が増えて1週間では終わらないことが多い
|
||||
- ソフトウェアは題材選びが9割
|
||||
- そもそも1週間の内しっかり作業できるのは土日だけ
|
||||
- 環境構築や予備調査で時間が溶ける
|
||||
|
||||
ですね。来年は適切な粒度で程よく難易度の高い題材を選べるようにしたい。あと延長できるルールとかも明文化したい
|
||||
|
||||
---
|
||||
|
||||
## アイドルマスター
|
||||
|
||||
今年はアイマスにどっぷり漬かった年でした。去年もそんな感じだった気がしますが…
|
||||
|
||||
学園アイドルマスターがリリースされるまでは去年から引き続きシャニマス(アイドルマスターシャイニーカラーズ)を聞き続けて、学園アイドルマスターがリリースされてからはFighting My Wayをもう死ぬほど聞き続けてました。7~8月にじっくり時間をかけてミリオンライブ(アイドルマスターミリオンライブ!)にハマっていきます。
|
||||
|
||||
こんなところまで読んでいる物好きがいるのかは知りませんが、一応アイマスの説明をしておくと、アイマスはこんな感じで現行で6ブランドに分かれています。カッコ内は登場するアイドルたち全員を指す名前
|
||||
|
||||
- アイドルマスター (765PRO ALLSTARSとか時期と登場人物によっていろいろ)
|
||||
- アイドルマスターシンデレラガールズ (知らん)
|
||||
- アイドルマスターミリオンライブ! (MILLIONSTARS)
|
||||
- アイドルマスターSideM (知らん)
|
||||
- アイドルマスターシャイニーカラーズ (シャイニーカラーズ)
|
||||
- 学園アイドルマスター (初星学園(?))
|
||||
|
||||
それぞれのブランド間で基本的に関わりはありませんが、アイドルマスターとミリオンライブ!だけは同じ世界の同じ事務所ということで、話がつながっている部分が多いですし、同じアイドルが出てきます。(2つ合わせて765 MILLION ALLSTARSなんて言うみたいです)
|
||||
|
||||
### Spotify統計
|
||||
|
||||

|
||||
|
||||
トップアーティスト
|
||||
|
||||
1. シャイニーカラーズ (アイドルマスターシャイニーカラーズ)
|
||||
2. ストレイライト (アイドルマスターシャイニーカラーズ内のユニット)
|
||||
3. ミツキヨ
|
||||
4. イルミネーションスターズ (アイドルマスターシャイニーカラーズ内のユニット)
|
||||
5. 初星学園 (学園アイドルマスター)
|
||||
|
||||
トップソング
|
||||
|
||||
1. Dye the sky. - 2023 Version / シャイニーカラーズ (アイドルマスターシャイニーカラーズ)
|
||||
2. Dye the sky. - 25 colors / シャイニーカラーズ (アイドルマスターシャイニーカラーズ)
|
||||
3. VOY@GER - ミリオンライブ! Ver. / 高坂海美,白石紬,望月杏奈 (アイドルマスターミリオンライブ!のアイドル)
|
||||
4. Fighting My Way / 花海咲季 (学園アイドルマスターのアイドル)
|
||||
5. 青春コンプレックス / 結束バンド
|
||||
|
||||
トップアーティスト、トップソングどちらも4/5がアイマスと。聴いた時間は学校行くようになったのでちょっと短いですね。Dye the sky.が2バージョンともランキング乗ってるの流石にキショくない? そんな聴いた? 片方だけで658回も聴いてるらしい… 聴いてたわ…
|
||||
|
||||
https://misskey.usbharu.dev/notes/a1e5kl1ayn
|
||||
|
||||
|
||||
### ミリオンライブ!とミリシタにドハマりした
|
||||
|
||||
もうシャニマスにハマっていた頃はシャニマス以外のアイマスってなんか古い感じするし、ハマることは無いだろうなぁって思ってました。まぁそもそも当時アイドルマスター(765PRO ALLSTARS)もミリオンライブ!も知らなかったし。デレステ(アイドルマスターシンデレラガールズのゲーム)とSideMは知ってたけどそこまで好きじゃなかった。
|
||||
|
||||
そんなときにたまたまTwitterで横浜中華街とコラボしているアニメ ミリオンライブ!の佐竹美奈子のイラストと出会った。それがこれ
|
||||
|
||||
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ミリシタに衣装ちょうだい<a href="https://twitter.com/hashtag/%E4%BD%90%E7%AB%B9%E7%BE%8E%E5%A5%88%E5%AD%90?src=hash&ref_src=twsrc%5Etfw">#佐竹美奈子</a> <a href="https://t.co/myu8o4YT7O">pic.twitter.com/myu8o4YT7O</a></p>— kamille /12서코CA87,88 (@kamille_765) <a href="https://twitter.com/kamille_765/status/1824406293316051193?ref_src=twsrc%5Etfw">August 16, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
|
||||
|
||||
茶髪碧眼サイドテール(※佐竹美奈子はどちらかというとポニーテール)ってもう完全にどストライクだった。
|
||||
|
||||
https://misskey.usbharu.dev/notes/9x0ebkwdg3
|
||||
> 佐竹美奈子ってキャラめちゃくちゃかわいいな
|
||||
|
||||
https://misskey.usbharu.dev/notes/9x0edexrg4
|
||||
> アイマス、シャニマスと学マス以外興味なかったけどミリマスにも手を出しそう やばい
|
||||
|
||||
はい。4か月前の自分に教えてあげたいですね あなたは無事ミリオンライブ!に手を出し、ドハマリしてグッズを買い漁るようになります。そしてそのまま金がなくなってバイトを始めます。ゲームを始めて毎日のようにプレイし、ついには学校の友達も沼に沈めます。まぁどちらかというと彼は沼への入口を教えたら勝手に飛び込んできたような気もしますが…
|
||||
|
||||
このイラストでミリオンライブ!やその他のブランドのことを知りました。それまではアイマスってなんかいっぱいあるんだなぁ ぐらいにしか思ってませんでした。ただ、この後すぐにミリオンライブ!にハマったわけではなくて、だんだんハマっていきます。
|
||||
|
||||
全部書いたら酷いことになりそうなので雑に時系列を書いておくとこんな感じでした
|
||||
|
||||
(Spotifyオススメで馬場このみのTo…→)Twitterのフォロイーで何度でも笑おうとアイ NEED YOUを知る→横浜中華街コラボ美奈子(https://x.com/kamille_765/status/1824406293316051193)→ミリオンライブを知る→アイ NEED YOUを思い出す→アイマスチャンネル漁り→VOY@GER→Brand new TheaterかUNIONの39人ライブ→周年まとめ(?)→桜守歌織→4ラグ→電波感傷→沼へ
|
||||
|
||||
ミリオンライブ!のゲームとしてミリオンライブ!シアターデイズって言うのがあって、ミリシタって呼ばれています。一応音ゲーなんですが、あんまり音ゲー要素はなくてMV見るために1プレイする、みたいな感じでやっています。このMVがすごく好きで、アイドルに好きな衣装着させて好きに配置して歌って踊らせる事ができます。歌い分けシステムとか39人同時ライブとかカッコいいカメラワークとか7年前のゲームとは思えないクオリティですごい好きです。39人が自分の配置に合わせてちゃんとパート分けして歌うんですよ!? やばくないですか!?
|
||||
|
||||
<details><summary>参考(?)</summary>
|
||||
|
||||
2024/9/6
|
||||
https://misskey.usbharu.dev/notes/9xudho8ytm
|
||||
> ミリシタもデレステも学マスもシャニマスもシャニソンもスタマスもやりたいんですけどどうしたらいいんですか?
|
||||
|
||||
2024/9/18
|
||||
https://misskey.usbharu.dev/notes/9ybetcnt42
|
||||
> いまミリシタ始めたら死ぬいまミリシタ始めたら死ぬいまミリシタ始めたら死ぬいまミリシタ始めたら死ぬ
|
||||
|
||||
2024/9/20
|
||||
https://misskey.usbharu.dev/notes/9yebf2qpdk
|
||||
> IPA試験終わったらミリシタか崩壊3rdやろっと
|
||||
|
||||
2024/10/13
|
||||
https://misskey.usbharu.dev/notes/9zasqczujn
|
||||
> ミリシタやるぞ~~
|
||||
</details>
|
||||
|
||||
この後はもう毎日のようにミリシタMVを漁って週1ぐらいのペースで好きな曲が変わったりしてます。
|
||||
|
||||
### その後
|
||||
|
||||
でらますミリオンで名古屋に行ったり
|
||||
|
||||
[でらますミリオンに行ってきたよレポート · usbharu - blog](https://blog.usbharu.dev/posts/2024-11-24/)
|
||||
|
||||
[でらますミリオンの戦利品レポート · usbharu - blog](https://blog.usbharu.dev/posts/2024-12-12/)
|
||||
|
||||
CDを買ったり
|
||||
|
||||
アニメ アイドルマスターミリオンライブ!を観たり
|
||||
|
||||
https://misskey.usbharu.dev/notes/a210vv1i9x
|
||||
> ミリアニ見るぞ~
|
||||
|
||||
してます。ラジオとか配信とかも見るようになりました。
|
||||
|
||||
## その他ゲーム
|
||||
|
||||
- 原神
|
||||
- 崩壊スターレイル
|
||||
- ブルーアーカイブ
|
||||
- VRChat
|
||||
- DEATH STRANDING
|
||||
- Ready or Not
|
||||
- DCS World
|
||||
- 学園アイドルマスター
|
||||
- Factorio
|
||||
- WarThunder
|
||||
|
||||
ソシャゲは時間が吸われるからやらない!つってDEATH STRANDING買ったけどミリシタにハマったせいで積んでる 意味ないやん
|
||||
|
||||
### 原神・崩壊スターレイル
|
||||
|
||||
原神はフォンテーヌが終わり、ナタに突入したあたりで飽きてやめちゃいました。フリーナを2凸しようとしたら4凸まで行けてしまったりして、盛り上がったなぁ~
|
||||
|
||||
スタレはホタル実装に合わせて復帰して、2凸までしました。が、急に作業ゲーになってしまったので飽きてやめちゃいました。まぁ同時に何個もゲームはできないのでしょうがないかな… 学校の友達でスタレをやっている人が多いのでまた復帰するかもしれない。
|
||||
|
||||
### VRChat
|
||||
|
||||
Misskeyのフォロワーがどんどん始めたので僕も始めてみました。楽しいけど結局コミュ力を要求されるので馴染めず…
|
||||
|
||||
時々やるぐらいの感じになっています。最近忙しいしね
|
||||
|
||||
[usbharu - VRChat](https://vrchat.com/home/user/usr_83224894-b9e9-4504-8bd3-b07cd50bf845)
|
||||
|
||||
他にももっといっぱい書こうかと思ったけどアイマス書きすぎて燃え尽きてしまった…
|
|
@ -1,120 +0,0 @@
|
|||
---
|
||||
author: usbharu
|
||||
draft: false
|
||||
categories:
|
||||
- ボツ記事
|
||||
date: 2024-12-26T15:05:47+09:00
|
||||
tags:
|
||||
- Kubernetes
|
||||
- Docker
|
||||
keywords:
|
||||
- Kubernetes
|
||||
- Docker
|
||||
title: ボツ記事 k8s内に構築したPostgreSQLをCronJobでバックアップする
|
||||
relpermalink: posts/2024-12-26/
|
||||
url: posts/2024-12-26/
|
||||
decription: k8s内に構築したPostgreSQLをCronJobでバックアップする
|
||||
---
|
||||
|
||||
[おうちk8sでMisskeyとNowPlayingを動かし始めたよ · usbharu - blog](https://blog.usbharu.dev/posts/2024-12-01/)でCloudNative PostgreSQLをやめ、k8s内で普通のPostgreSQLを動かし始めました。同時にバックアップ手段も失ったので、今回は自動バックアップを構築する記事です。
|
||||
|
||||
## やりたいこと
|
||||
|
||||
k8sのCronJobでPostgreSQLをバックアップのpg_dumpを作成してオブジェクトストレージにアップロードしたい。
|
||||
|
||||
## 出来上がったもの
|
||||
|
||||
[usbharu/pg_backup_job - pg_backup_job - Gitea for usbharu](https://git.usbharu.dev/usbharu/pg_backup_job)
|
||||
|
||||
今回ほとんどChatGPTに作ってもらいました。これぐらいなら余裕ですね!
|
||||
コメント等もほぼChatGPTが出力したままです。
|
||||
|
||||
```Dockerfile
|
||||
# ベースイメージにPostgreSQL 15の公式クライアントを使用
|
||||
FROM postgres:16
|
||||
|
||||
# 必要なツールをインストール
|
||||
RUN apt-get update && apt-get install -y \
|
||||
curl \
|
||||
awscli \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# 作業ディレクトリ
|
||||
WORKDIR /backup
|
||||
|
||||
# スクリプトをコピー
|
||||
COPY backup.sh /backup/backup.sh
|
||||
|
||||
# 実行権限を付与
|
||||
RUN chmod +x /backup/backup.sh
|
||||
|
||||
# エントリーポイントを設定
|
||||
ENTRYPOINT ["/backup/backup.sh"]
|
||||
|
||||
|
||||
```
|
||||
|
||||
```bash
|
||||
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# 必須環境変数リスト
|
||||
REQUIRED_VARS=(
|
||||
PG_HOST
|
||||
PG_PORT
|
||||
PG_USER
|
||||
PG_PASSWORD
|
||||
PG_DATABASE
|
||||
S3_BUCKET
|
||||
AWS_ACCESS_KEY_ID
|
||||
AWS_SECRET_ACCESS_KEY
|
||||
)
|
||||
|
||||
# 未設定の環境変数をチェック
|
||||
for VAR in "${REQUIRED_VARS[@]}"; do
|
||||
if [ -z "${!VAR}" ]; then
|
||||
echo "エラー: 必須環境変数 '${VAR}' が設定されていません。" >&2
|
||||
MISSING_ENV=true
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$MISSING_ENV" = true ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 環境変数の設定
|
||||
export AWS_ACCESS_KEY_ID="${AWS_ACCESS_KEY_ID}"
|
||||
export AWS_SECRET_ACCESS_KEY="${AWS_SECRET_ACCESS_KEY}"
|
||||
export AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION:-us-east-1}"
|
||||
|
||||
# ダンプファイル名
|
||||
DUMP_FILE="dump_$(date +%Y%m%d%H%M%S).sql"
|
||||
|
||||
# pg_dumpを実行
|
||||
export PGPASSWORD="${PG_PASSWORD}"
|
||||
pg_dump -h "${PG_HOST}" -p "${PG_PORT}" -U "${PG_USER}" -d "${PG_DATABASE}" -F c -b -v -f "${DUMP_FILE}"
|
||||
|
||||
# S3にアップロード
|
||||
if [[ -n "${S3_ENDPOINT}" ]]; then
|
||||
# カスタムエンドポイント指定時
|
||||
aws --endpoint-url "${S3_ENDPOINT}" s3 cp "${DUMP_FILE}" "s3://${S3_BUCKET}/${DUMP_FILE}"
|
||||
else
|
||||
# デフォルトエンドポイント
|
||||
aws s3 cp "${DUMP_FILE}" "s3://${S3_BUCKET}/${DUMP_FILE}"
|
||||
fi
|
||||
|
||||
# ローカルのダンプファイルを削除
|
||||
rm -f "${DUMP_FILE}"
|
||||
|
||||
echo "バックアップとアップロードが完了しました。"
|
||||
```
|
||||
|
||||
こっちの方もちょっと変わっていて、CronJobとそれに必要なSecretが追加されています。
|
||||
|
||||
[usbharu/usbharu-lab at e067db4ea302c3d3ee63c375d5058e1c2c6bedf1](https://github.com/usbharu/usbharu-lab/tree/e067db4ea302c3d3ee63c375d5058e1c2c6bedf1)
|
||||
|
||||
---
|
||||
|
||||
- ボツ理由:ChatGPTで生成したんなら記事各意味なくね?
|
||||
- 状態:書きかけ
|
|
@ -1,68 +0,0 @@
|
|||
---
|
||||
author: usbharu
|
||||
draft: false
|
||||
categories:
|
||||
- 技術
|
||||
date: 2025-01-06T15:19:35+09:00
|
||||
tags:
|
||||
- Kubernetes
|
||||
- misskey
|
||||
keywords:
|
||||
- Kubernetes
|
||||
- misskey
|
||||
title: Misskey on k8sと本番環境でやらかしちゃった人
|
||||
relpermalink: posts/2025-01-06/
|
||||
url: posts/2025-01-06/
|
||||
decription: Misskey on k8sと本番環境でやらかしちゃった人
|
||||
---
|
||||
|
||||
あけましておめでとうございます。年末にMisskey on k8sを少し改良しました。ついでにやらかしちゃったので懺悔(?)です。
|
||||
|
||||
## 現状
|
||||
|
||||
usbharu.devでは、k8sを使ってMisskeyを構築しており、DBにCloudnative PostgreSQL、Redisは普通にDeploymentを使用して構築しています。ArgoCDとHelmのRelease機能を活用してyamlをコピペするだけでドメイン等含めて全自動で新しいMisskeyインスタンスが生えてくる状態になっています。
|
||||
|
||||
## 改良
|
||||
|
||||
[misskeyの設定をvaluesからできるように · usbharu/usbharu-lab@3f24732](https://github.com/usbharu/usbharu-lab/commit/3f247329f968bc692e3d5e3e4f24c09f48c3d6b0)
|
||||
|
||||
[メンテナンスページを出せるように · usbharu/usbharu-lab@6f7afdb](https://github.com/usbharu/usbharu-lab/commit/6f7afdb15307f26a66d3838edd6e1a864f20ae7e)
|
||||
|
||||
MisskeyのJobQueueに関する設定をhelmのvalues.yamlから変更できるようになりました。それと、Misskeyをメンテナンスしているときにアクセスが来たときに表示する、メンテナンスページをを簡単に表示できるようになりました。
|
||||
|
||||
[メンテナンスページのテストの様子](https://mk.yopo.work/notes/a2jrhk78vg)
|
||||
|
||||
それと、バックアップのスケジュールがUTCなのをすっかり忘れて昼間の12時にしていたのでタイムゾーンを設定するようにしました。
|
||||
|
||||
```yaml
|
||||
spec:
|
||||
timeZone: "Asia/Tokyo"
|
||||
schedule: {{ cron式k8s版 }}
|
||||
```
|
||||
|
||||
結果的にこのタイムゾーン設定忘れのお陰で救われるんですがそれはまた後ほど。
|
||||
|
||||
## やらかし
|
||||
|
||||
[negi by usbharu · Pull Request #7 · usbharu/usbharu-lab](https://github.com/usbharu/usbharu-lab/pull/7)
|
||||
|
||||
訳合って新しいMisskeyサーバーを生やしたときのPRです。このPRの中にやらかしが混じっています。
|
||||
|
||||
前述の通り、コピペするだけで新しくMisskeyを生やすことができるわけですが、正確にはコピペした後変更する必要がある場所があります。例えばドメイン(当然)とか、ArgoCDのApplication名とか。
|
||||
|
||||
HelmのRelease名を変えてArgoCDのApplicationの`metadata.name`を変更するのを忘れると、新しく作ったApplication(に常になるのか、優先順位がどうなってるのかは知らん)に上書きされます。当然元のApplicationは消えPostgreSQLのクラスタは削除されあらゆるデータが削除されます。
|
||||
|
||||
というのをやらかしました……夜10時ぐらいにPRをマージして、気づいたときには時既にお寿司🍣。元からあった自分のお一人様`misskey.usbharu.dev`が消えました。今まで数分のロールバックはありましたが、DB全部ふっ飛ばしたことは初めてです。幸いk8sの移行後ちゃんと自動バックアップを取るようにしていたので、バックアップが失敗していなければ数時間ロールバックしますが復旧できます。ファイルはオブジェクトストレージにアップロードしているので問題なし。通知とアンテナが消えることはいつものことなので気にしたら負けです。
|
||||
|
||||
朝3時に自動バックアップを設定していたので大体20時間ぐらい巻き戻るはず…だったんですが上に書いたようにタイムゾーン間違えてたので結果的には10時間の巻き戻りで済みました。その間にフォロー等はなかったので不整合も最低限です。
|
||||
|
||||
## 対策
|
||||
|
||||
[うっかり削除しちゃっても大丈夫なようにした · usbharu/usbharu-lab@f276d15](https://github.com/usbharu/usbharu-lab/commit/f276d150cf31aacf4b29308f43c20b19889ef134)
|
||||
|
||||
RedisとCloudnativePGのClusterのannotationsにArgoCDが自動でリソースを削除しないよう指示しました。うまく動くかは知りません。
|
||||
|
||||
```yaml
|
||||
annotations:
|
||||
argocd.argoproj.io/sync-options: Delete=false
|
||||
```
|
|
@ -1,64 +0,0 @@
|
|||
---
|
||||
author: usbharu
|
||||
draft: false
|
||||
categories:
|
||||
- その他
|
||||
date: 2025-01-11T01:33:44+09:00
|
||||
tags:
|
||||
- misskey
|
||||
keywords:
|
||||
- null
|
||||
title: 2025年1月11日0時頃から同1時頃までの障害について
|
||||
relpermalink: posts/2025-01-11/
|
||||
url: posts/2025-01-11/
|
||||
decription: 2025年1月11日0時頃から同1時頃にかけて発生した連合先インスタンスからの投稿がタイムラインに表示されない障害についての文章です。(真面目な文章ではありません)
|
||||
---
|
||||
|
||||
## 概要
|
||||
|
||||
2025年1月11日0時頃から同1時頃にかけて発生した連合先インスタンスからの投稿がタイムラインに表示されない障害についての文章です。(真面目な文章ではありません)
|
||||
|
||||
## 障害発生時刻
|
||||
|
||||
2025年1月11日0時頃
|
||||
|
||||
## 障害復旧時刻
|
||||
|
||||
2025年1月11日1時頃
|
||||
|
||||
## 障害内容
|
||||
|
||||
`https://negi.usbharu.dev`においてInboxが詰まり、連合先インスタンスからの配送の処理が止まりました。投稿がタイムラインに表示されず、リアクションなども受け取れていませんでした。
|
||||
|
||||
## 障害範囲
|
||||
|
||||
- `https://negi.usbharu.dev`に存在する全てのローカルアカウント
|
||||
|
||||
## 発生原因
|
||||
|
||||
多分リモートユーザーの中にピン留めノートの数がすごい多い人がいて、制限に引っかかってエラーが発生しそのままリトライになった結果Inboxが爆発したと思われる。ちゃんとした調査はしてない。
|
||||
|
||||
## 一次対応
|
||||
|
||||
- Inboxのジョブキューの設定を大幅に強化し、パワーでぶん殴りました。
|
||||
- ジョブの強制リトライを手動実行しました。
|
||||
- リモートユーザーに対してピン留めノート数の制限を大幅に緩めました。
|
||||
|
||||
## 今後の対応
|
||||
|
||||
- ジョブキューの監視をおこない早期に対処できるようにします。
|
||||
- GTLの監視をおこないInboxの問題を早期に対処できるようにします。
|
||||
|
||||
## 障害経緯
|
||||
|
||||
|タイムスタンプ|事象|
|
||||
|-|-|
|
||||
|2025年1月11日 0時頃|Inboxが詰まり始める|
|
||||
|2025年1月11日 0時52分頃|音ゲーを開始|
|
||||
|2025年1月11日 0時54分|利用者からのDM|
|
||||
|2025年1月11日 0時55分|DMをチラ見しながらフルコンを逃す|
|
||||
|2025年1月11日 0時55分|DMを確認 対応を開始|
|
||||
|2025年1月11日 0時57分|ジョブキューの設定を変更|
|
||||
|2025年1月11日 1時00分|変更した設定が反映される|
|
||||
|2025年1月11日 1時02分|障害解消を確認 利用者にDM|
|
||||
|2025年1月11日 1時30分頃|障害原因を推定 ピン留めノートの数の制限を緩和|
|
|
@ -1,322 +0,0 @@
|
|||
---
|
||||
author: usbharu
|
||||
draft: false
|
||||
categories:
|
||||
- 技術
|
||||
date: 2025-01-12T14:08:58+09:00
|
||||
tags:
|
||||
- Kotlin
|
||||
- ActivityPub
|
||||
- Kotlin
|
||||
- ActivityStreams
|
||||
- ActivityVocabulary
|
||||
keywords:
|
||||
- Kotlin
|
||||
- ActivityPub
|
||||
- Kotlin
|
||||
- ActivityStreams
|
||||
- ActivityVocabulary
|
||||
title: ActivityStreamsをKotlinでいい感じに扱いたい(デシリアライズ編)
|
||||
relpermalink: posts/2025-01-12/
|
||||
url: posts/2025-01-12/
|
||||
decription: ActivityStreamsをKotlinでいい感じに扱いたい(デシリアライズ編)
|
||||
---
|
||||
|
||||
ActivityPubで使われてる[ActivityStreams](https://www.w3.org/TR/activitystreams-core/)をKotlinでいい感じに扱いたくて、試行錯誤すること数ヶ月。ようやくPoC的なコードが動いたので記事になりました。
|
||||
|
||||
[usbharu/activity-streams-serialization at 55ea9a0c858ce4f9be27bc85088a471a627240c0](https://github.com/usbharu/activity-streams-serialization/tree/55ea9a0c858ce4f9be27bc85088a471a627240c0)
|
||||
|
||||
## ActivityStreamsの簡単な解説
|
||||
|
||||
ActivityStreamsは主に2つの仕様を組み合わせて作られています。
|
||||
|
||||
### JSON-LD
|
||||
|
||||
JSONでXMLみたいなことをするやつで、検索するとカスSEO業者のクソ記事しか出てこないので理解に苦労しました。XMLの真似事してるだけあってRDFだかなんだか色々出てきます。雑に言うとJSONに共通の型をつけて、URIみたいなので管理する仕組みです。
|
||||
|
||||
### Activity Vocabulary
|
||||
|
||||
ActivityStreamsのJSON-LDのプロパティとかを色々決めてるやつで、ここに書いてあるやつを実装したら(ActivityVocabularyとしては)9割ぐらい完成です。残り1割はなんか書いてないけど必要だったりするやつです。
|
||||
|
||||
## ActivityStreamsの実例
|
||||
|
||||
JSON-LD Playgroundにある例をそのまま持ってきますが、
|
||||
|
||||
```json
|
||||
{
|
||||
"@context": "https://www.w3.org/ns/activitystreams",
|
||||
"@type": "Create",
|
||||
"actor": {
|
||||
"@type": "Person",
|
||||
"@id": "acct:sally@example.org",
|
||||
"name": "Sally"
|
||||
},
|
||||
"object": {
|
||||
"@type": "Note",
|
||||
"content": "This is a simple note"
|
||||
},
|
||||
"published": "2015-01-25T12:34:56Z"
|
||||
}
|
||||
```
|
||||
|
||||
というJSONがあったとして、これをJSON-LDのExpandedな形に変形すると
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"@type": [
|
||||
"https://www.w3.org/ns/activitystreams#Create"
|
||||
],
|
||||
"https://www.w3.org/ns/activitystreams#actor": [
|
||||
{
|
||||
"@id": "acct:sally@example.org",
|
||||
"@type": [
|
||||
"https://www.w3.org/ns/activitystreams#Person"
|
||||
],
|
||||
"https://www.w3.org/ns/activitystreams#name": [
|
||||
{
|
||||
"@value": "Sally"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"https://www.w3.org/ns/activitystreams#object": [
|
||||
{
|
||||
"@type": [
|
||||
"https://www.w3.org/ns/activitystreams#Note"
|
||||
],
|
||||
"https://www.w3.org/ns/activitystreams#content": [
|
||||
{
|
||||
"@value": "This is a simple note"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"https://www.w3.org/ns/activitystreams#published": [
|
||||
{
|
||||
"@type": "http://www.w3.org/2001/XMLSchema#dateTime",
|
||||
"@value": "2015-01-25T12:34:56Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
こうなります。ActivityPub実装してるときに最初にぶち当たる壁って大体署名で次がJSONの形が自由すぎて意味が分からん!!だと思うんですが(n=1)、JSON-LDでちゃんと拡張してあげると決まった形になります。`@type`が配列って時点でほとんどのJSONシリアライザが使えないということがわかると思います。
|
||||
|
||||
## 実装時の苦労ポイント
|
||||
|
||||
### やっぱりJSONが自由すぎる問題
|
||||
|
||||
JSON-LDになってこれで自由なJSON問題は解決~とか思ってたら次の壁にぶち当たります。そう、各プロパティに入ってくる型がめっちゃ自由です。例えば`Object`型の`attributedTo`プロパティ、W3Cの勧告みると`Object`か`Link`だよ!って書いてあるんですが要は`Note`かもしれないし`Person`かもしれないし`Create`かもしれないし`Link`と`Object`両方かもしれないってことです。なんならActivityStreams意外のJSON-LDの型も含まれてるかもしれません。
|
||||
|
||||
KotlinでJSONをシリアライズ・デシリアライズするときって大体data class作ってそこにいい感じにマッピングすると思うんですが、これだとカスタムシリアライザーが大変なことになります([1敗](https://github.com/usbharu/Hideout/blob/1f2feb6668fe9e0d4c22ae0928315a329c9e56ad/hideout/hideout-activitypub/src/main/kotlin/dev/usbharu/hideout/activitypub/domain/model/ObjectDeserializer.kt))。ここまでしてもまだ完全にはデシリアライズできないんので、そもそも仕組みを変える必要がありそうです。
|
||||
|
||||
### JSONシリアライザに依存しすぎる問題
|
||||
|
||||
たとえ完璧なカスタムシリアライザーが出来上がったとしても、それはとんでもないクソデカコードでJSONシリアライザーの実装にべったり依存してるでしょう。新しく連合したいプロパティができるたびにカスタムシリアライザーをいじらないといけないなんてゴメンです。
|
||||
|
||||
### 独自プロパティ生やすのめんどくさすぎ問題
|
||||
|
||||
ActivityPub実装に使いたいので、独自のプロパティを簡単に生やせる機能は必須です。いま実際に送りつけあってるJSONみると何やねんこれ見たいなプロパティがいっぱい生えてます。[fediverse/fep: Fediverse Enhancement Proposals - Codeberg.org](https://codeberg.org/fediverse/fep)とか見ると「何お前?」みたいなのありますね。
|
||||
|
||||
### HTTP/HTTPS問題
|
||||
|
||||
`http://`から始まるURIと`https://`から始まるURIを区別しないでほしいんですが、普通のJSONシリアライザってそこまで器用なこと多分できないのでこれもカスタムシリアライザー作る必要があります。
|
||||
|
||||
## 実装
|
||||
|
||||
上の問題を全部簡単に解決する方法、それはもう~~TypeScriptを使う~~データの実体はMapに格納し、getter/setterでMapにアクセスするぐらいしか無いでしょう。Mapなら独自プロパティも格納し放題ですし、型のことも考えなくて済みます。(これもうJavaScriptじゃね?)
|
||||
|
||||
アノテーションと様々な黒魔術(リフレクション、動的プロキシ、動的バイトコード生成)を組み合わせて実現することも考えましたが、そのへんはよくわかんなかったので無理でした。そのうち勉強しときます。
|
||||
|
||||
```kotlin
|
||||
|
||||
interface JsonLd {
|
||||
var json: JsonNode
|
||||
val jsonObject: JsonObject
|
||||
get() {
|
||||
require(json.isObject)
|
||||
return json as JsonObject
|
||||
}
|
||||
var type: List<String>
|
||||
get() {
|
||||
return jsonObject[Properties.TYPE]?.asArray()?.mapNotNull { it.asStringLiteralOrNull()?.value }
|
||||
?: return emptyList()
|
||||
}
|
||||
set(value) {
|
||||
return jsonObject.setOrRemove(Properties.TYPE, value.map { JsonString(it) }.toJsonArray())
|
||||
}
|
||||
var id: URI?
|
||||
get() {
|
||||
val string = jsonObject.obtain(ID)?.asStringLiteralOrNull() ?: return null
|
||||
return URI.create(string.value)
|
||||
}
|
||||
set(value) {
|
||||
jsonObject.setOrRemove(ID, value?.toString()?.let { JsonString(it) })
|
||||
}
|
||||
|
||||
fun getAsObjectOrLink(id: String): List<ObjectOrLink> {
|
||||
val jsonNode = jsonObject.obtain(id) ?: return emptyList()
|
||||
return jsonNode.asArray().map { ObjectFactory.factory(it) as ObjectOrLink }
|
||||
}
|
||||
|
||||
fun setAsObjectOrLink(id: String, `object`: List<ObjectOrLink>) {
|
||||
jsonObject.setOrRemove(
|
||||
id,
|
||||
`object`.map { ObjectFactory.toJsonNode(it) }.toJsonArray()
|
||||
)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
これは全てのJSONの基底となるJsonLdクラスで、`jsonObject`がMapだと思ってOKです。こんな感じで生えているべきプロパティをinterfaceにgetter/setterとともに定義し、デフォルト実装を書いておきます。利用時は必要なインターフェースを全て実装したクラスを定義して、`ObjectFactory.factory(json)`で作成します。
|
||||
|
||||
```kotlin
|
||||
inline fun <reified T : JsonLd> JsonLd.asTypeOfNull(type: String): T? {
|
||||
if (this.type.contains(type).not()) {
|
||||
return null
|
||||
}
|
||||
return this as? T
|
||||
}
|
||||
```
|
||||
|
||||
前述の通り`type`は配列なのでtypeに変換したい型が含まれていることを確認した後キャストします。
|
||||
|
||||
```kotlin
|
||||
abstract class AbstractActivityStream : Activity, JsonLd, Object, ObjectOrLink, CollectionPage, Collection,
|
||||
OrderedCollection, OrderedCollectionPage, Image, ImageOrLink, UriOrLink, Link, Note {
|
||||
}
|
||||
|
||||
//このjsonはJsonLdインターフェースのjson
|
||||
class DefaultActivityStream(override var json: JsonNode) : AbstractActivityStream() {
|
||||
|
||||
}
|
||||
|
||||
object ObjectFactory {
|
||||
fun factory(jsonNode: JsonNode): JsonLd {
|
||||
return DefaultActivityStream(jsonNode) //ここを独自プロパティを生やしたinterfaceを定義したクラスなどに差し替えることで対応する。
|
||||
}
|
||||
|
||||
fun toJsonNode(jsonLd: JsonLd): JsonNode {
|
||||
return jsonLd.json
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
このやる気のない`ObjectFactory`はとりあえず作ってそのまま放置されてるやつで、そのうち直します。
|
||||
|
||||
実装の方針としてListはnon-nullable、その他はnullableで定義しました。あとMutableListじゃなくてListで定義してますがMutableListでやっても行けそうなので今後変えていくかも。
|
||||
|
||||
|
||||
## 現時点での使い方
|
||||
|
||||
```kotlin
|
||||
|
||||
@Test
|
||||
fun name() {
|
||||
|
||||
val jsonElement = Json.parseToJsonElement(
|
||||
"""
|
||||
[
|
||||
{
|
||||
"https://www.w3.org/ns/activitystreams#content": [
|
||||
{
|
||||
"@value": "I am fine."
|
||||
}
|
||||
],
|
||||
"@id": "http://www.test.example/notes/1",
|
||||
"https://www.w3.org/ns/activitystreams#replies": [
|
||||
{
|
||||
"https://www.w3.org/ns/activitystreams#items": [
|
||||
{
|
||||
"https://www.w3.org/ns/activitystreams#content": [
|
||||
{
|
||||
"@value": "I am glad to hear it."
|
||||
}
|
||||
],
|
||||
"https://www.w3.org/ns/activitystreams#inReplyTo": [
|
||||
{
|
||||
"@id": "http://www.test.example/notes/1"
|
||||
}
|
||||
],
|
||||
"https://www.w3.org/ns/activitystreams#summary": [
|
||||
{
|
||||
"@value": "A response to the note"
|
||||
}
|
||||
],
|
||||
"@type": [
|
||||
"https://www.w3.org/ns/activitystreams#Note"
|
||||
]
|
||||
}
|
||||
],
|
||||
"https://www.w3.org/ns/activitystreams#totalItems": [
|
||||
{
|
||||
"@type": "http://www.w3.org/2001/XMLSchema#nonNegativeInteger",
|
||||
"@value": 1
|
||||
}
|
||||
],
|
||||
"@type": [
|
||||
"https://www.w3.org/ns/activitystreams#Collection"
|
||||
]
|
||||
}
|
||||
],
|
||||
"https://www.w3.org/ns/activitystreams#summary": [
|
||||
{
|
||||
"@value": "A simple note"
|
||||
}
|
||||
],
|
||||
"@type": [
|
||||
"https://www.w3.org/ns/activitystreams#Note"
|
||||
]
|
||||
}
|
||||
]
|
||||
""".trimIndent()
|
||||
)
|
||||
val convert = KotlinxSerializationImpl.convert(jsonElement)
|
||||
println(convert)
|
||||
|
||||
val factory = ObjectFactory.factory(convert.asArray()[0])
|
||||
val note = factory.asTypeOfNull<Note>(Type.NOTE) ?: return
|
||||
println(note.content.getAsMap()["default"])
|
||||
println(note.summary)
|
||||
println(note.id)
|
||||
println(note.replies)
|
||||
println(note.replies?.totalItems)
|
||||
println(note.replies?.items)
|
||||
note
|
||||
.replies
|
||||
?.items
|
||||
.orEmpty()
|
||||
.mapNotNull {
|
||||
it.asTypeOfNull<Note>(Type.NOTE)
|
||||
}
|
||||
.map {
|
||||
println(it.summary)
|
||||
println(it.type)
|
||||
println(it.content)
|
||||
it.inReplyTo.map {
|
||||
println(it.id)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
### 出力例
|
||||
|
||||
println(note.content.getAsMap()["default"])
|
||||
```
|
||||
I am fine.
|
||||
```
|
||||
|
||||
println(note.summary)
|
||||
```
|
||||
[LangString(language=null, value=A simple note)]
|
||||
```
|
||||
|
||||
## 次に向けて
|
||||
|
||||
- デシリアライズがある程度できたのでシリアライズの実験もしたい
|
||||
- `ObjectFactory`がうんこなのでなんとかしたい
|
|
@ -1,100 +0,0 @@
|
|||
---
|
||||
author: usbharu
|
||||
draft: false
|
||||
categories:
|
||||
- 技術
|
||||
date: 2025-01-20T14:08:58+09:00
|
||||
tags:
|
||||
- Kotlin
|
||||
- ActivityPub
|
||||
- Kotlin
|
||||
- ActivityStreams
|
||||
- ActivityVocabulary
|
||||
keywords:
|
||||
- Kotlin
|
||||
- ActivityPub
|
||||
- Kotlin
|
||||
- ActivityStreams
|
||||
- ActivityVocabulary
|
||||
title: ActivityStreamsをKotlinでいい感じに扱いたい(DSL編)
|
||||
relpermalink: posts/2025-01-20/
|
||||
url: posts/2025-01-20/
|
||||
decription: ActivityStreamsをKotlinでいい感じに扱いたい(シリアライズ・DSL編)
|
||||
---
|
||||
|
||||
前回([ActivityStreamsをKotlinでいい感じに扱いたい(デシリアライズ編) · usbharu - blog](https://blog.usbharu.dev/posts/2025-01-12/))デシリアライズの実装をした際にシリアライズの部分も作ってしまっていたのでDSLのついでに紹介します。
|
||||
|
||||
## シリアライズ
|
||||
|
||||
シリアライズというかマッピングのほうが正しいような気もする
|
||||
|
||||
usbharu/activity-streams-serialization at 00dc4f7939655fb9a1c4276016040821569e4f9a
|
||||
https://github.com/usbharu/activity-streams-serialization/tree/00dc4f7939655fb9a1c4276016040821569e4f9a
|
||||
|
||||
|
||||
(注) CollectionはKotlinのCollectionではなくて独自のCollection
|
||||
|
||||
```kotlin
|
||||
var replies: Collection?
|
||||
get() = replies()
|
||||
set(value) {
|
||||
jsonObject.setOrRemove(Properties.REPLIES, value?.json)
|
||||
}
|
||||
|
||||
fun Object?.replies(objectFactory: ObjectFactory? = this?.objectFactory): Collection? {
|
||||
if (this == null) {
|
||||
return null
|
||||
}
|
||||
requireNotNull(objectFactory)
|
||||
val jsonNode = jsonObject.obtain(Properties.REPLIES)?.asArray()?.firstOrNull() ?: return null
|
||||
require(jsonNode.isObject)
|
||||
return objectFactory.create(jsonNode) as Collection
|
||||
}
|
||||
```
|
||||
|
||||
シリアライズの方もデシリアライズと同じで、SetterでJsonNodeを直接弄っています。
|
||||
|
||||
## DSL
|
||||
|
||||
テストがすっげぇ~~~面倒なのでDSLを作り始めました。
|
||||
|
||||
[DSL](https://github.com/usbharu/activity-streams-serialization/blob/00dc4f7939655fb9a1c4276016040821569e4f9a/src/test/kotlin/dev/usbharu/hideout/activitystreams/core/ObjectTest.kt#L77-L86)
|
||||
|
||||
```
|
||||
val object1 = JsonLdBuilder().Note {
|
||||
attachment {
|
||||
listOf(
|
||||
Image {
|
||||
content("This is what he looks like.")
|
||||
url("http://example.org/cat.jpeg")
|
||||
})
|
||||
}
|
||||
name("Have you seen my cat?")
|
||||
}
|
||||
```
|
||||
|
||||
こんな感じでオブジェクトを組み立てることができます。attachmentのlistOfをなくせるように作ることも考えたんですが、仕組みが複雑になる割にメリット無いのでやめました。
|
||||
|
||||
KotlinでDSL作るのって簡単そうに見えて意外とややこしいですよね
|
||||
|
||||
### 実装
|
||||
|
||||
[オブジェクトの作成](https://github.com/usbharu/activity-streams-serialization/blob/00dc4f7939655fb9a1c4276016040821569e4f9a/src/main/kotlin/dev/usbharu/hideout/activitystreams/dsl/JsonLd.kt)
|
||||
|
||||
```kotlin
|
||||
class JsonLdBuilder(var objectFactory: ObjectFactory = DefaultObjectFactory) {
|
||||
fun Object(block: ObjectBuilder.() -> Unit = {}): Object {
|
||||
val objectBuilder = ObjectBuilder(objectFactory, this)
|
||||
objectBuilder.block()
|
||||
return objectBuilder.Object
|
||||
}
|
||||
```
|
||||
|
||||
[プロパティの設定](https://github.com/usbharu/activity-streams-serialization/blob/00dc4f7939655fb9a1c4276016040821569e4f9a/src/main/kotlin/dev/usbharu/hideout/activitystreams/dsl/ObjectBuilder.kt)
|
||||
|
||||
```kotlin
|
||||
fun attachment(objectOrLink: ObjectOrLink?): ObjectBuilder {
|
||||
Object.attachment += objectOrLink ?: return this
|
||||
return this
|
||||
}
|
||||
```
|
|
@ -1,101 +0,0 @@
|
|||
---
|
||||
author: usbharu
|
||||
draft: false
|
||||
categories:
|
||||
- 技術
|
||||
date: 2025-01-27T14:08:58+09:00
|
||||
tags:
|
||||
- Kotlin
|
||||
- ActivityPub
|
||||
- Kotlin
|
||||
- ActivityStreams
|
||||
- ActivityVocabulary
|
||||
keywords:
|
||||
- Kotlin
|
||||
- ActivityPub
|
||||
- Kotlin
|
||||
- ActivityStreams
|
||||
- ActivityVocabulary
|
||||
title: Kotlinで作るDSL
|
||||
relpermalink: posts/2025-01-27/
|
||||
url: posts/2025-01-27/
|
||||
decription: KotlinでデータとDSLが分離されたタイプのDSLの作成
|
||||
---
|
||||
|
||||
[usbharu/kotlin-dsl-demo](https://github.com/usbharu/kotlin-dsl-demo)
|
||||
|
||||
KotlinでひたすらDSLを書いてたらだいぶノウハウが溜まってきたので共有
|
||||
|
||||
KotlinのDSL作成でググるとこんな記事が出てくると思いますが、大半の人は下の記事を読むだけで作りたいものが作れると思うのでぜひ読んでください。
|
||||
|
||||
[Kotlin で書く DSL](https://improve-future.com/kotlin-dsl.html)
|
||||
|
||||
[Type-safe builders | Kotlin Documentation](https://kotlinlang.org/docs/type-safe-builders.html)
|
||||
|
||||
## データの実体とDSLが分離されたタイプのDSL
|
||||
|
||||
上で紹介した記事では全部データの実体となるクラスに直接DSLを生やしています。これはこれで綺麗にまとまっていいのかもしれませんが、僕は頭Javaな人なのでBuilderに相当する部分は分けられていてほしいです。特に内部でStringBuilderなどを使うようになってくるとややこしくなってきます。
|
||||
|
||||
分離すると何が嬉しいかというと
|
||||
- DSL上の構造と実際のデータ構造が大幅に乖離しているときにDSLを書きやすい
|
||||
- StringBuilderなどが使いやすい
|
||||
- データ保持側に手を入れなくていい(責務の分離)
|
||||
- クソややこしいDSLを書いたときにデータ保持側を読みやすい
|
||||
- パフォーマンスが向上する場合がある(とりあえずListに溜め込んでbuild時に生成するStringBuilder的なアプローチがとれる)
|
||||
|
||||
逆にデメリットは
|
||||
- 単純に考えて必要なクラス数が増える(どこまで凝るかによるが2倍以上)
|
||||
- それに伴う保守性の低下
|
||||
- プロパティの露出
|
||||
|
||||
### メリット
|
||||
|
||||
#### DSL上の構造と実際のデータ構造が大幅に乖離しているときにDSLを書きやすい
|
||||
|
||||
実際のデータにDSLを生やした場合全然関係ないインスタンスを操作することは可能ですが不自然です。しかし、DSL部分を分離するとそのへんの制約は完全になくなって自由になります。
|
||||
|
||||
#### StringBuilderなどが使いやすい
|
||||
|
||||
上と同じで、データ側がStringBuilderをもともと持っているなら自然に使えますが、持ってない場合StringBuilderの意味がなくなります。
|
||||
|
||||
#### データ保持側に手を入れなくていい
|
||||
|
||||
そう、責務の分離ってやつです。わざわざ説明するまでもない
|
||||
|
||||
#### クソややこしいDSLを書いたときにデータ保持側を読みやすい
|
||||
|
||||
例えば[一つのオブジェクトのDSLに300行以上あったら](https://github.com/usbharu/activity-streams-serialization/blob/6e34c1ce3f2d070396c908f139b0863312262c45/src/main/kotlin/dev/usbharu/activitystreamsserialization/dsl/ObjectBuilder.kt)すごいややこしくないですか? そういうときに読みやすいです。
|
||||
|
||||
#### パフォーマンスが向上する場合がある
|
||||
|
||||
StringBuilderがいい例なんですが、一旦Listに溜め込んで、build時にインスタンスの生成するっていうアプローチを取れます。
|
||||
|
||||
これはKotlin標準のDSL
|
||||
|
||||
```kotlin
|
||||
val buildString = buildString {
|
||||
append("hello")
|
||||
append(" ")
|
||||
append("world")
|
||||
|
||||
|
||||
for (i in 1..10) {
|
||||
append(i)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### デメリット
|
||||
|
||||
#### 必要なクラス数が増える & 保守性の低下
|
||||
|
||||
データのクラスとそれに対応するBuilderというかDSLの分増えるので雑に計算すると2倍です。共通化できる部分もあるのでもうちょっと少ない場合もあるかも。それに伴って保守性も低下します。
|
||||
|
||||
#### プロパティの露出
|
||||
|
||||
デフォルト実装作ろうとするとinterfaceはprotectedにできないしpackage-privateも無いのでpublicにせざるを得ず、触ってほしくないプロパティまで露出してしまいます。一応internalはありますが、プロジェクト内で使うDSLとかだと微妙だし~~[そもそもinternalは無視できる](https://stackoverflow.com/questions/62500464/is-it-possible-to-access-internal-class-with-reflection-in-kotlin)~~
|
||||
|
||||
|
||||
というわけで色々実践してみたリポジトリ
|
||||
|
||||
[usbharu/kotlin-dsl-demo](https://github.com/usbharu/kotlin-dsl-demo)
|
|
@ -1,62 +0,0 @@
|
|||
---
|
||||
author: usbharu
|
||||
draft: true
|
||||
categories:
|
||||
- 技術
|
||||
date: 2025-02-02T14:52:40+09:00
|
||||
tags:
|
||||
- Golang
|
||||
- Misskey
|
||||
- Prometheus
|
||||
keywords:
|
||||
- Golang
|
||||
- Misskey
|
||||
- Prometheus
|
||||
title: misskeyのPrometheus Exporterを作った
|
||||
relpermalink: posts/2025-02-02/
|
||||
url: posts/2025-02-02/
|
||||
decription: misskeyのPrometheus Exporterを作った
|
||||
---
|
||||
|
||||
[usbharu/misskey-exporter - misskey-exporter - Gitea for usbharu](https://git.usbharu.dev/usbharu/misskey-exporter)
|
||||
|
||||
[misskey-exporter - Gitea for usbharu](https://git.usbharu.dev/usbharu/-/packages/container/misskey-exporter/4dc8585)
|
||||
|
||||
皆さん監視 やってますか? 僕はkube-prometheus-stackを動かし始めたは良いものの微妙に面倒くさくて放置してます。k8sの監視は色々ややこしくてよくわからん ということでとりあえずPrometheusから理解していくことにしました。Prometheusがpull型とか言うのは知ってたんですが、それ以外は知らなかったので手始めに自分でexporterを作ってみることにしました。ちょうどこの記事で
|
||||
|
||||
[2025年1月11日0時頃から同1時頃までの障害について · usbharu - blog](https://blog.usbharu.dev/posts/2025-01-11/)
|
||||
|
||||
> 今後の対応
|
||||
> ジョブキューの監視をおこない早期に対処できるようにします。
|
||||
> GTLの監視をおこないInboxの問題を早期に対処できるようにします。
|
||||
|
||||
って言っちゃったのでMisskeyのExporterを作りました。
|
||||
|
||||
## 使用技術
|
||||
|
||||
- Golang
|
||||
- PrometheusのGolang公式Client Library
|
||||
- go-misskey
|
||||
|
||||
[yitsushi/go-misskey: Misskey Go SDK](https://github.com/yitsushi/go-misskey)
|
||||
|
||||
特筆すべき技術的な特徴なんかは1ミリも無く、ただ愚直に実装しただけなのでコードの紹介なんかはないです。
|
||||
|
||||
## 出来上がったもの
|
||||
|
||||
[usbharu/misskey-exporter - misskey-exporter - Gitea for usbharu](https://git.usbharu.dev/usbharu/misskey-exporter)
|
||||
|
||||
<iframe src="https://misskey.usbharu.dev/embed/notes/a3pew0er9r?rounded=false&border=false" data-misskey-embed-id="v1_2e808ffe-a2aa-4f6b-8ae8-f0c05b4ab978" loading="lazy" referrerpolicy="strict-origin-when-cross-origin" style="border: none; width: 100%; max-width: 500px; height: 300px; color-scheme: light dark;"></iframe>
|
||||
<script defer src="https://misskey.usbharu.dev/embed.js"></script>
|
||||
|
||||
とりあえずジョブキュー、GTL/LTLのレスポンスタイムとそのHistogram(〇〇パーセンタイル計算用)、ユーザー/ノート数を取得できるようになりました。今後オンラインユーザーとかも計測できるようにしたいな~って感じです。Misskeyは最近自動で閉鎖サーバーへの配送停止するようになったのでJobのDelayedがほぼ無くてさみしいですね(?)
|
||||
|
||||
あとまだexporter作っただけでPrometheusとかGrafanaがよくわかってないので本番運用はしていません。
|
||||
|
||||
## 次に向けて
|
||||
|
||||
- Prometheusのアラートを作れるようになりたい
|
||||
- オンラインユーザーを取得できるようにしたい
|
||||
- メディア等の情報を取れるようにしたい(オブジェクトストレージ/ローカルストレージ等も)
|
||||
- 投稿のAPIのレスポンスタイムを測れるようにしたい
|
||||
- メディアプロ棋士とか配送用のプロ棋士の監視に対応したい
|
Before Width: | Height: | Size: 464 KiB |
Before Width: | Height: | Size: 114 KiB |
Before Width: | Height: | Size: 5.3 KiB |
|
@ -1,24 +0,0 @@
|
|||
---
|
||||
author: usbharu
|
||||
draft: false
|
||||
categories:
|
||||
- null
|
||||
date: 2025-02-08T18:31:01+09:00
|
||||
tags:
|
||||
- null
|
||||
keywords:
|
||||
- null
|
||||
title: Misskey 2025.1.0アップデートの概要
|
||||
relpermalink: posts/2025-02-08/
|
||||
url: posts/2025-02-08/
|
||||
decription: Misskey 2025.1.0アップデートの概要
|
||||
---
|
||||
|
||||
- カスタム絵文字の管理画面が新しくなります。
|
||||
- 元のカスタム絵文字の管理画面も引き続き使えます。 
|
||||
- ワードミュートで検知されたワードを表示できるようになります。 
|
||||
- 表示しないままにすることもできます。
|
||||
- リモートのノートのリンクをコピーできるようになります。
|
||||
- 添付ファイル一覧のタブがプロフィールから見れるようになります。 
|
||||
- リモートの絵文字のインポート時に詳細を確認できるようになります。
|
||||
- チャンネルが複数列で表示されるらしいです(未確認)
|
|
@ -1,25 +0,0 @@
|
|||
---
|
||||
author: usbharu
|
||||
draft: false
|
||||
categories:
|
||||
- 技術
|
||||
date: 2025-02-25T01:18:03+09:00
|
||||
tags:
|
||||
- Kotlin
|
||||
- Mockito
|
||||
keywords:
|
||||
- Kotlin
|
||||
- Mockito
|
||||
title: Mockitoの@InjectMocksはKotlinのデフォルト引数を持つコンストラクタを発見できない
|
||||
relpermalink: posts/2025-02-25/
|
||||
url: posts/2025-02-25/
|
||||
decription: Mockitoの@InjectMocksはKotlinのデフォルト引数を持つコンストラクタを発見できない
|
||||
---
|
||||
|
||||
タイトルがどこまで正確なのかはわかりませんがともかくMockitoの`@InjectMocks`をKotlinのデフォルト引数を持つコンストラクタがデフォルトコンストラクタのクラスで使おうとすると引数が0個のデフォルトコンストラクタが無い!!!って怒られて使えません。
|
||||
|
||||
解決策は単純でデフォルト引数を使わないか@InjectMocksを使わない
|
||||
|
||||
もっと単純な解決法を見つけたら追記しておきます。
|
||||
|
||||
このことを書こうとしたら使ってるhugo古すぎて新規記事作成時にエラーでたんで直してるうちにすごい時間経ってしまった…
|
|
@ -1,203 +0,0 @@
|
|||
---
|
||||
author: usbharu
|
||||
draft: false
|
||||
categories:
|
||||
- 技術
|
||||
date: 2025-02-28T00:14:48+09:00
|
||||
tags:
|
||||
- VSCode
|
||||
- 開発環境
|
||||
keywords:
|
||||
- VSCode
|
||||
- 開発環境
|
||||
title: VSCodeの設定がいい感じになってきた
|
||||
relpermalink: posts/2025-02-28/
|
||||
url: posts/2025-02-28/
|
||||
decription: VSCodeの設定がいい感じになってきた
|
||||
---
|
||||
|
||||
コードエディタ、何使ってますか? 僕はAtom派だったんですが、なくなっちゃったのでVSCode使ってます。学校とかでも結構これを勧められることが多いんじゃないでしょうか。僕は特にこだわりとかはなく、プラグインが豊富で補完がある程度使い物になるコードエディタと言ったらもうこれぐらいしか無いので使ってます。
|
||||
|
||||
プログラミングするときは基本的にIDE使うんですが、RustとフロントエンドはVSCodeで書いています。
|
||||
|
||||
## 拡張機能
|
||||
|
||||
主にJS/TSとRustに関連するプラグインのみインストールしています。Reactとかは必要なプロジェクトのみで有効化したりしていますが、あんまりこだわりはないです。
|
||||
|
||||
### IntelliSense系
|
||||
|
||||
- IntelliCode
|
||||
- IntelliCode API Usage Examples
|
||||
- IntelliSense for CSS class names in HTML
|
||||
- HTML CSS Support
|
||||
- Path Intellisense
|
||||
|
||||
### フロントエンドとかGUIで使う系
|
||||
|
||||
僕はバックエンドでJS/TSは使わない(使うときはWebStorm使う)のでJS/TS系もここに入れています。
|
||||
|
||||
- Biome
|
||||
- JavaScript and TypeScript Nightly
|
||||
- Tauri
|
||||
- IntelliSense for CSS class names in HTML
|
||||
- HTML CSS Support
|
||||
|
||||
### Rust系
|
||||
|
||||
Docs ViewとかError LensとかはRustでしか使わないのでここに入れた。今後Rustのデバッグ関連増えていきそうな予感
|
||||
|
||||
- Tauri
|
||||
- rust-analyzer
|
||||
- Serial Monitor
|
||||
- Docs View
|
||||
- Error Lens
|
||||
- Even Better TOML
|
||||
|
||||
### その他
|
||||
|
||||
Dockerは正直いらんかも
|
||||
|
||||
- Japanese Language Pack for Visual Studio Code
|
||||
- Docker
|
||||
- Code Spell Checker
|
||||
- Markdown All in One
|
||||
- YAML
|
||||
- WakaTime
|
||||
|
||||
## 設定
|
||||
|
||||
### 本体の設定系
|
||||
|
||||
#### workbench.startupEditor
|
||||
|
||||
起動時の画面
|
||||
|
||||
`"workbench.startupEditor": "none"`
|
||||
|
||||
起動時にそんな画面要らないよね
|
||||
|
||||
#### editor.wordWrap
|
||||
|
||||
折り返しの設定
|
||||
|
||||
`"editor.wordWrap": "on"`
|
||||
|
||||
これの設定ステータスバーから変更できるようにしてほしい
|
||||
|
||||
#### window.autoDetectColorScheme
|
||||
|
||||
ダークモードをシステムのモードとあわせる
|
||||
|
||||
`"window.autoDetectColorScheme": true`
|
||||
|
||||
Auto Dark Mode(Windowsのソフト)とかと合わせていい感じ
|
||||
|
||||
#### editor.suggest.showKeywordsとeditor.suggest.showWords
|
||||
|
||||
サジェストに文中の単語を表示するか
|
||||
|
||||
`"editor.suggest.showKeywords": false`
|
||||
`"editor.suggest.showWords": false`
|
||||
|
||||
IntelliSenseとかの賢い補完以外は邪魔なので無効化
|
||||
|
||||
#### emmet.showExpandedAbbreviation
|
||||
|
||||
なんかよくわからないけどhtmlのタグとかを簡単に出せる機能らしいです。
|
||||
|
||||
`"emmet.showExpandedAbbreviation": "inMarkupAndStylesheetFilesOnly"`
|
||||
|
||||
最っっっっ高に邪魔なのでhtml/css以外で無効化 なんでこれ既定値が`always`なんだよ
|
||||
|
||||
#### editor.linkedEditing
|
||||
|
||||
htmlタグをいい感じに編集できるようになったりする
|
||||
|
||||
`"editor.linkedEditing": true`
|
||||
|
||||
便利
|
||||
|
||||
#### explorer.confirmDelete
|
||||
|
||||
ファイルの削除時に聞かない
|
||||
|
||||
`"explorer.confirmDelete": false`
|
||||
|
||||
まぁうざいよね
|
||||
|
||||
#### files.autoSaveとfiles.autoSaveWhenNoErrors
|
||||
|
||||
エディターがフォーカスを失ったときに自動で保存
|
||||
|
||||
`"files.autoSave": "onFocusChange"`
|
||||
|
||||
ファイルにエラーがあったときは自動保存しない
|
||||
|
||||
`"files.autoSaveWhenNoErrors": true,`
|
||||
|
||||
これはホットロードが結構使われてるフロントエンド界隈だと便利かも? Tauri&Rustの組み合わせと相性は悪いみたいですが…
|
||||
|
||||
### Git系
|
||||
|
||||
#### git.autofetch
|
||||
|
||||
定期的にgit fetchしてくれるやつ
|
||||
|
||||
`"git.autofetch": true`
|
||||
|
||||
まぁ便利
|
||||
|
||||
#### git.confirmSync
|
||||
|
||||
gitで同期前(pullかな?)に確認をしない
|
||||
|
||||
`"git.confirmSync": false`
|
||||
|
||||
#### git.enableSmartCommit
|
||||
|
||||
ステージされた変更がゼロのときは自動で全部の変更をコミット
|
||||
|
||||
`"git.enableSmartCommit": true`
|
||||
|
||||
たまにやらかすけど便利
|
||||
|
||||
### 言語系
|
||||
|
||||
#### Rust
|
||||
|
||||
多いのでまとめて
|
||||
|
||||
```json
|
||||
"rust-analyzer.inlayHints.bindingModeHints.enable": true,
|
||||
"rust-analyzer.inlayHints.closureCaptureHints.enable": true,
|
||||
"rust-analyzer.inlayHints.closureReturnTypeHints.enable": "always",
|
||||
"rust-analyzer.inlayHints.discriminantHints.enable": "always",
|
||||
"rust-analyzer.inlayHints.expressionAdjustmentHints.enable": "always",
|
||||
"rust-analyzer.inlayHints.genericParameterHints.lifetime.enable": true,
|
||||
"rust-analyzer.inlayHints.genericParameterHints.type.enable": true,
|
||||
"rust-analyzer.inlayHints.lifetimeElisionHints.useParameterNames": true,
|
||||
"rust-analyzer.inlayHints.rangeExclusiveHints.enable": true,
|
||||
"rust-analyzer.inlayHints.reborrowHints.enable": "always",
|
||||
"rust-analyzer.inlayHints.typeHints.hideClosureInitialization": true,
|
||||
"rust-analyzer.inlayHints.typeHints.hideNamedConstructor": true,
|
||||
```
|
||||
|
||||
とにかく全ての情報を表示する設定になっています。必要な~と思ったらだんだん消していこうかなと
|
||||
|
||||
`"rust-analyzer.check.command": "clippy"`
|
||||
|
||||
Lintをclippyに変更
|
||||
Rustをメインで使っている分野が組み込みなので実行前にできるだけ不確定要素(?)を減らしたいのでちょっと重いけどClippy使ってます。
|
||||
|
||||
#### JS/TS
|
||||
|
||||
関数の補完時にカッコを入力する
|
||||
|
||||
`"javascript.suggest.completeFunctionCalls": true`
|
||||
`"typescript.suggest.completeFunctionCalls": true`
|
||||
|
||||
逆になんでカッコ入らないの設定がデフォルトなのか
|
||||
|
||||
## さいごに
|
||||
|
||||
こんなもんじゃないでしょうか。さすがにIDEと比べると全然機能不足って感じですが、軽量なことを考えると十分使えると思います。他に強化するとしたらあとは後置補完とか、リファクタリング機能とかですかね。あんまりやりすぎて重たくなったら本末転倒なのでいい塩梅を見つけたいです。
|
Before Width: | Height: | Size: 5.0 MiB |
Before Width: | Height: | Size: 5.0 MiB |
Before Width: | Height: | Size: 5.1 MiB |
Before Width: | Height: | Size: 5.0 MiB |
Before Width: | Height: | Size: 5.0 MiB |
Before Width: | Height: | Size: 5.1 MiB |
Before Width: | Height: | Size: 5.4 MiB |
Before Width: | Height: | Size: 5.0 MiB |
Before Width: | Height: | Size: 6.2 MiB |
Before Width: | Height: | Size: 5.8 MiB |
Before Width: | Height: | Size: 4.5 MiB |
Before Width: | Height: | Size: 6.2 MiB |
Before Width: | Height: | Size: 4.9 MiB |
Before Width: | Height: | Size: 6.2 MiB |
Before Width: | Height: | Size: 2.1 MiB |
Before Width: | Height: | Size: 2.1 MiB |
Before Width: | Height: | Size: 3.6 MiB |
Before Width: | Height: | Size: 3.7 MiB |
Before Width: | Height: | Size: 3.2 MiB |
Before Width: | Height: | Size: 2.2 MiB |
Before Width: | Height: | Size: 4.0 MiB |
Before Width: | Height: | Size: 2.2 MiB |
Before Width: | Height: | Size: 2.3 MiB |
Before Width: | Height: | Size: 3.3 MiB |
Before Width: | Height: | Size: 2.2 MiB |
Before Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 2.1 MiB |
|
@ -1,139 +0,0 @@
|
|||
---
|
||||
author: usbharu
|
||||
draft: false
|
||||
categories:
|
||||
- 旅行
|
||||
date: 2025-03-07T10:04:19+09:00
|
||||
tags:
|
||||
- 旅行
|
||||
- 航空自衛隊
|
||||
- 航空祭
|
||||
keywords:
|
||||
- 旅行
|
||||
- 航空自衛隊
|
||||
- 航空祭
|
||||
title: 小牧基地航空祭に行ってきたよレポート
|
||||
relpermalink: posts/2025-03-07/
|
||||
url: posts/2025-03-07/
|
||||
decription: 小牧基地航空祭に行ってきたよレポート
|
||||
---
|
||||
|
||||

|
||||
|
||||
2025年3月2日に航空自衛隊 小牧基地で開催された小牧基地航空祭に家族で行ってきました。航空自衛隊創設70周年記念+小牧市政70周年記念+名古屋空港開設20周年記念のビッグなお祭りだったみたいで、普段は来ないブルーインパルスが展示飛行をしました。
|
||||
|
||||
名古屋の観光もしたのでそれはまた別の記事にまとめたいと思います。
|
||||
|
||||
## 航空祭前日
|
||||
|
||||
前日の3月1日にも招待客?のみでのなにかがあったみたいで、ブルーインパルスの展示飛行とかその他の展示飛行を見ることができました。敷地内には入れないので基地の外から見てたんですが、結果的にすげぇ近くから着陸を撮影できたので嬉しかったです。
|
||||
|
||||

|
||||
|
||||
航空祭当日は雨予報で、急遽前日の予定を変更して前日の展示飛行を見に来ました。到着してすぐぐらいからブルーインパルスの展示飛行が始まりました。
|
||||
|
||||

|
||||
|
||||
僕のカメラは連写とオートフォーカスが使い物にならないのであまり飛行機を撮るのは向いてないんですが、このときはめちゃくちゃオートフォーカスの調子が良かったので良い感じの写真が取れました。(それでもピンボケしてますが)
|
||||
|
||||

|
||||
|
||||
やはり晴れていると映えますね。
|
||||
|
||||

|
||||
|
||||
ボケてる感が否めませんが着陸の様子
|
||||
|
||||

|
||||
|
||||
## 航空祭当日
|
||||
|
||||
usbharu君初めての航空祭、ワクワクでした。
|
||||
|
||||
とりあえず入場してすぐF-15の写真を撮りに行きました。
|
||||
|
||||

|
||||
|
||||
海上自衛隊 UP-3Dらしいです。P-3Cにしてはレドーム多いなと思ったんですが、Wikipedia的には電子戦訓練支援機、会場の説明的には多用途機らしいです。
|
||||
|
||||

|
||||
|
||||
航空自衛隊 UH-60J…かな? 説明の写真撮り忘れました。軍用ヘリといえばこいつのイメージがあるので好き となりに陸自のUH-60JAもありました
|
||||
|
||||

|
||||
|
||||
コブラ うっすい
|
||||
|
||||

|
||||
|
||||
迫力がすごかった
|
||||
|
||||

|
||||
|
||||
旋回がとにかくかっこよかった このあと救助の実演してました。
|
||||
|
||||

|
||||
|
||||
格納庫内で行われていた物産展(?)と陸自の展示を見に行きました。なんと、16MCVの展示がありました。
|
||||
|
||||

|
||||
|
||||
10式/90式/74式は総火演で見たことあるのでこれで61式以外の(機動)戦(闘)車を見ることができたということになります。嬉しいですね、16式の実弾射撃もみてみたいです。
|
||||
|
||||
空中給油機です。航空自衛隊が運用する改造元がボーイング747の機種全部が揃ってたらしいですがあんまり詳しくないので謎。
|
||||
|
||||

|
||||
|
||||
C-1試作機と量産型かな? 覚えてない
|
||||
|
||||

|
||||
|
||||
747ファミリー
|
||||
|
||||

|
||||
|
||||
AWACS!!!!!!!!!!!!くっそ珍しいですこれ。機密の塊ですよ~
|
||||
|
||||

|
||||
|
||||
本命、ブルーインパルスの展示飛行
|
||||
|
||||

|
||||
|
||||
残念ながら曇りだったので前日みたいに青空が映えません。
|
||||
|
||||

|
||||
|
||||
15時で航空祭は終了して帰宅中に撮った写真。AWACSが飛んでる様子を撮れるのはちょっと珍しいんじゃないでしょうか
|
||||
|
||||

|
||||
|
||||
## その他
|
||||
|
||||
技名わからないけどかっこよかったやつ
|
||||
|
||||

|
||||
|
||||
いい感じに撮れたやつ
|
||||
|
||||

|
||||
|
||||
いい感じに撮れたやつ2
|
||||
|
||||

|
||||
|
||||
待機中のブルーインパルス
|
||||
|
||||

|
||||
|
||||
着陸しているときのブルーインパルス(前日撮影)
|
||||
|
||||

|
||||
|
||||
着陸しているときのブルーインパルス2(前日撮影)
|
||||
|
||||

|
||||
|
||||
## 感想
|
||||
|
||||
初めての航空祭、楽しかったです。急遽予定を変更した都合で下調べができずに空港の周りをぐるっと歩き回ったり(結果的に牛山→味美歩いたり)したのですが、結果的にブルーインパルスの着陸を真下から撮影できて良かったです。
|
Before Width: | Height: | Size: 2.8 MiB |
Before Width: | Height: | Size: 2.1 MiB |
Before Width: | Height: | Size: 1.6 MiB |
Before Width: | Height: | Size: 3.0 MiB |
Before Width: | Height: | Size: 3.2 MiB |
Before Width: | Height: | Size: 2.6 MiB |
Before Width: | Height: | Size: 2.4 MiB |
Before Width: | Height: | Size: 3.2 MiB |
Before Width: | Height: | Size: 3.7 MiB |
Before Width: | Height: | Size: 2.7 MiB |
Before Width: | Height: | Size: 2.8 MiB |
Before Width: | Height: | Size: 2.6 MiB |
Before Width: | Height: | Size: 3.4 MiB |
Before Width: | Height: | Size: 2.1 MiB |
Before Width: | Height: | Size: 4.1 MiB |
Before Width: | Height: | Size: 2.7 MiB |
Before Width: | Height: | Size: 2.4 MiB |
Before Width: | Height: | Size: 3.8 MiB |
Before Width: | Height: | Size: 1.8 MiB |
Before Width: | Height: | Size: 1.9 MiB |
Before Width: | Height: | Size: 1.9 MiB |
Before Width: | Height: | Size: 1.8 MiB |
Before Width: | Height: | Size: 2.1 MiB |
Before Width: | Height: | Size: 647 KiB |
|
@ -1,175 +0,0 @@
|
|||
---
|
||||
author: usbharu
|
||||
draft: false
|
||||
categories:
|
||||
- 旅行
|
||||
date: 2025-03-09T10:58:44+09:00
|
||||
tags:
|
||||
- 旅行
|
||||
- 名古屋
|
||||
- アイマス
|
||||
- シャニマス
|
||||
- ミリマス
|
||||
keywords:
|
||||
- 旅行
|
||||
- 名古屋
|
||||
- アイマス
|
||||
- シャニマス
|
||||
- ミリマス
|
||||
title: 名古屋旅行2025
|
||||
relpermalink: posts/2025-03-09/
|
||||
url: posts/2025-03-09/
|
||||
decription: 名古屋旅行2025
|
||||
---
|
||||
|
||||
[このまえ](https://blog.usbharu.dev/posts/2025-03-07/)小牧基地航空祭に行ってきましたが、3日間の滞在の内二日目の夜と三日目は名古屋をブラブラして遊びました。月曜日なこともあって殆どの施設が閉まってたので、また名古屋行きたいです。(でらますシャイニーカラーズもあるみたいだしね!)
|
||||
|
||||
|
||||
時系列としては[航空祭前日](https://blog.usbharu.dev/posts/2025-03-07/#%E8%88%AA%E7%A9%BA%E7%A5%AD%E5%89%8D%E6%97%A5)→[一日目夜](#一日目夜)→[航空祭当日](https://blog.usbharu.dev/posts/2025-03-07/#%E8%88%AA%E7%A9%BA%E7%A5%AD%E5%BD%93%E6%97%A5)→[二日目夜](#二日目夜)→[三日目](#三日目)という感じです。
|
||||
|
||||
## 一日目夜
|
||||
|
||||
[前回](http://localhost:1313/posts/2024-11-24/#%E7%9F%A2%E5%A0%B4%E3%81%A8%E3%82%93)矢場とんに来たときに次はとんかつ食うぞ!!!!ってなってたので来ました。
|
||||
|
||||
わらじとんかつのみそだれとソースのやつを食べました。
|
||||
|
||||

|
||||
|
||||
[名古屋名物みそかつ 矢場とん - 名古屋と言えば「みそかつ」。「みそかつ」と言えば「矢場とん」](https://www.yabaton.com/)
|
||||
|
||||
## 二日目夜
|
||||
|
||||
### 四代目 一八 きしめん 久屋御殿
|
||||
|
||||
四代目 一八 きしめん 久屋御殿ってところできしめん食べました。
|
||||
|
||||

|
||||
|
||||
[名古屋名物きしめんの老舗で伝統の味-四代目 一八 | 観光やランチにおすすめ](https://nagoya-kishimen-ippachi.com/)
|
||||
|
||||
僕が食べたやつはピリ辛で美味しかったです。
|
||||
|
||||
### 中部電力MIRAI TOWER
|
||||
[前回](https://blog.usbharu.dev/posts/2024-11-24/#%E3%83%9E%E3%83%B3%E3%82%AC%E5%B1%95%E4%B8%AD%E9%83%A8%E9%9B%BB%E5%8A%9Bmirai-tower)すぐ近くまで行ったのに行くの忘れていたので、夜でしたが行くことにしました。
|
||||
|
||||
夜景がこんな感じ
|
||||
|
||||

|
||||
|
||||
全く知らなかったんですが、[JR東海のアイマスコラボのシャニマス編](https://recommend.jr-central.co.jp/oshi-tabi/travel_medley/vol03/)が名古屋でやっていたみたいで、中部電力MIRAI TOWERもコラボしていたみたいです。
|
||||
|
||||
ライブ衣装も展示されていました。真ん中は放クラでしょうか?
|
||||

|
||||
|
||||
冬優子以外わかんなかったですが、三峰結華(黒髪)、有栖川夏葉(赤髪)らしいです。
|
||||

|
||||
|
||||
上の写真で光り輝いていた黄色の物体、ひよこプリンみたいなやつらしいです。
|
||||
|
||||

|
||||
|
||||
### オアシス21
|
||||
|
||||
オアシス21です。ここは前回マンガ展さんに来たときに来ました。
|
||||
|
||||

|
||||
|
||||
謎にあったハリポタのお店
|
||||
|
||||

|
||||
|
||||
## 三日目
|
||||
|
||||
### コメダ和喫茶おかげ庵
|
||||
|
||||
[おかげ庵](https://www.komeda.co.jp/okagean/)
|
||||
|
||||
二日目の夜に見つけて面白そうだったので行ってみた
|
||||

|
||||
|
||||
団子ちょっと焦げちゃった…
|
||||

|
||||
|
||||
### 大須
|
||||
|
||||
その後大須へ向かいましたが雨だったりしたのであんまり写真がありません
|
||||
|
||||
Alice on Wednesday だそう
|
||||

|
||||
|
||||
### TGIフライデーズ
|
||||
|
||||
ハンバーガー屋さん…? おいしかった
|
||||

|
||||
|
||||
### 香源
|
||||
|
||||
ここも前回行けなかったのでリベンジ
|
||||
|
||||

|
||||
|
||||
まだ少しだけでらますの桃子のお香残っていました。
|
||||
|
||||
あと…
|
||||
|
||||
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">香源の店員さんがお話してくれたんだけど<br>篠宮可憐×でらますお香がコラボ終了後も在庫の問い合わせが多かった事を受けて<br>最近発売した写真のお香(レモングラス)を可憐お香にとても近しい香りに仕上げてくれたそうです<br>可憐の香りが忘れられない人は是非試してみて下さい<a href="https://twitter.com/hashtag/%E9%A6%99%E6%BA%90?src=hash&ref_src=twsrc%5Etfw">#香源</a><a href="https://twitter.com/hashtag/%E3%81%A7%E3%82%89%E3%81%BE%E3%81%99%E3%83%9F%E3%83%AA%E3%82%AA%E3%83%B3?src=hash&ref_src=twsrc%5Etfw">#でらますミリオン</a> <a href="https://t.co/tVgJyNx48C">pic.twitter.com/tVgJyNx48C</a></p>— 副代 (@Fukudai_7710) <a href="https://twitter.com/Fukudai_7710/status/1854704106855973012?ref_src=twsrc%5Etfw">November 8, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
|
||||
|
||||
|
||||
らしいです。
|
||||
|
||||
僕も買いました。
|
||||
|
||||
### 名古屋駅周辺
|
||||
|
||||
前回も行った青柳総本家さん、妙香園さんでカエルまんじゅうとお茶を購入
|
||||
|
||||
ここでもシャニマスコラボやっていて、智代子がいました。あとこれ撮った日は月曜でした。
|
||||

|
||||
|
||||
このあとnamco名古屋駅前店行ったりもしました。
|
||||
|
||||
### ミッドランドスクエア
|
||||
|
||||
「2階建てエレベーター」最初聞いたとき意味わからんかった。文字通り2階建てのエレベーターです。
|
||||

|
||||
|
||||
ごっちゃごちゃしていて面白いですね 再現ジオラマとか見てみたいです。
|
||||

|
||||
|
||||
## 戦利品
|
||||
|
||||
### トミカ 重装輪回収車
|
||||
|
||||
人生で2代目のトミカです。まさか19歳でトミカに一目惚れするとは思わんかった…
|
||||
|
||||
小牧基地航空祭の屋台で購入
|
||||
|
||||

|
||||

|
||||
|
||||
### お香
|
||||
|
||||
桃子のお香とレモングラスのお香と香立です。他にも名刺香なるものも売っていたらしいですが見逃していました。
|
||||
レモングラス、おすすめです。
|
||||
|
||||
香源さんで購入
|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
### 天海春香アクスタ
|
||||
|
||||
可愛すぎて衝動買いしたアクスタ
|
||||
|
||||
namco名古屋駅前店のアイマスショップで購入
|
||||
|
||||

|
||||
|
||||
----
|
||||
|
||||
その他、Tシャツ、カバン等(写真撮り忘れ)
|
||||
|
||||
## まとめ
|
||||
|
||||
この記事書き始めたときはまた名古屋に行きたい!って言ってたんですが、早速名古屋に行く予定ができてしまったのでまた名古屋に行ってきます。航空祭楽しかった~
|
Before Width: | Height: | Size: 3.1 MiB |
Before Width: | Height: | Size: 2.7 MiB |
Before Width: | Height: | Size: 3.9 MiB |
Before Width: | Height: | Size: 4.2 MiB |
Before Width: | Height: | Size: 4.3 MiB |
Before Width: | Height: | Size: 4.7 MiB |
Before Width: | Height: | Size: 4.9 MiB |
Before Width: | Height: | Size: 3.0 MiB |
Before Width: | Height: | Size: 2.9 MiB |
Before Width: | Height: | Size: 3.7 MiB |
Before Width: | Height: | Size: 3.6 MiB |
Before Width: | Height: | Size: 2.9 MiB |
Before Width: | Height: | Size: 3.9 MiB |
Before Width: | Height: | Size: 3.2 MiB |
Before Width: | Height: | Size: 2.8 MiB |
Before Width: | Height: | Size: 3.4 MiB |
Before Width: | Height: | Size: 621 KiB |
|
@ -1,101 +0,0 @@
|
|||
---
|
||||
author: usbharu
|
||||
draft: false
|
||||
categories:
|
||||
- 旅行
|
||||
date: 2025-03-24T20:28:06+09:00
|
||||
tags:
|
||||
- 旅行
|
||||
- アイマス
|
||||
- ツアマス
|
||||
keywords:
|
||||
- 旅行
|
||||
- アイマス
|
||||
- ツアマス
|
||||
title: 高槻やよいのバースデーイベントに行ってきたよレポート
|
||||
relpermalink: posts/2025-03-24/
|
||||
url: posts/2025-03-24/
|
||||
decription: 高槻やよいのバースデーイベントに行ってきたよレポート
|
||||
---
|
||||
|
||||

|
||||
|
||||
3/22日に高槻の安満遺跡公園で開催された、高槻やよいバースデーイベントに行ってきました。
|
||||
|
||||
[⾼槻やよい「たかつき観光⼤使就任4周年記念」の詳細を発表!3月22日はバースデーイベントを実施! | 観光協会からのお知らせ | 高槻市観光協会公式サイト たかつきマルマルナビ](https://www.takatsuki-kankou.org/info/3248/)
|
||||
|
||||
起きたら昼だった&新快速に乗れなかったのダブルコンボで、マンホールお披露目イベントに間に合わなかったことをあらかじめここに白状しておきます。
|
||||
|
||||
## やよい軒
|
||||
|
||||

|
||||
お昼はやよい軒に行きました。高槻市と高槻やよいがコラボすることになった起源的なところでしょう。僕もアイドルマスターを知る前から、高槻やよいの誕生日にファンが来てご飯を食べる、ということを知っていました。
|
||||
|
||||
|
||||

|
||||
なんとなくもやし入ってそうと思って生姜焼き定食を頼みましたが、目論見通りもやしが使われてました。このあと行われたトークイベントで、「味噌カツ煮定食・豚汁変更」が話題に上がっていたので、次来たときはそれを食べたいと思います。
|
||||
|
||||

|
||||
近くの駿河屋にはやよいのパネルと色紙が置かれていて、寄せ書き的なことが行われていたみたいです。
|
||||
|
||||
## 安満遺跡公園
|
||||
|
||||
昼ご飯を食べたあとは大急ぎで公園に来ました。結構都会なのに広い公園があっていいですね。移動販売車とかでめちゃくちゃ賑わってました。
|
||||
|
||||

|
||||
なんとなく撮った写真でしたが、ここにマンホールとかパネルとかが展示されていました。
|
||||
|
||||
### トークショー
|
||||
|
||||
トークショーは撮影禁止っぽかったので写真はありません。
|
||||
|
||||
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">⚫――ふたマス!!!!!!――⚫<br><br>「高槻やよいバースデーイベント」にて<a href="https://twitter.com/hashtag/%E9%AB%98%E6%A7%BB%E3%82%84%E3%82%88%E3%81%84?src=hash&ref_src=twsrc%5Etfw">#高槻やよい</a> マンホールをお披露目!<br><br>マンホールは後日、大阪府高槻市に設置予定です。<br>ぜひ高槻市に足をお運びくださいね🌟<br><br>ふたマス!!!!!!特設サイトはこちら:<a href="https://t.co/S9YYntGOLD">https://t.co/S9YYntGOLD</a><a href="https://twitter.com/hashtag/%E3%82%A2%E3%82%A4%E3%83%9E%E3%82%B920%E5%91%A8%E5%B9%B4%E3%82%A4%E3%83%A4%E3%83%BC?src=hash&ref_src=twsrc%5Etfw">#アイマス20周年イヤー</a> <a href="https://twitter.com/hashtag/%E3%81%B5%E3%81%9F%E3%83%9E%E3%82%B9?src=hash&ref_src=twsrc%5Etfw">#ふたマス</a> <a href="https://t.co/Rw106ieLK4">pic.twitter.com/Rw106ieLK4</a></p>— アイドルマスター公式 (@imas_official) <a href="https://twitter.com/imas_official/status/1903329126200545384?ref_src=twsrc%5Etfw">March 22, 2025</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
|
||||
|
||||
2枚目の何処かに写っているはずですが、自分でも見つけられませんでした。
|
||||
|
||||
トークショー内でやよい軒でご飯を食べた話や、20年後の話がありました。やよい軒では味噌カツ煮定食・豚汁変更を食べたそうなので、3/25日は近所のやよい軒で味噌カツ煮定食・豚汁変更を食べてこようかな~と思っています。
|
||||
|
||||
### やよいライナー
|
||||
|
||||
グッズ買って乗車会に応募みたいなやつあったみたいですが、トークショー終わってから知ったので買ってませんでした。到着してすぐトークショーに行ったので買えなかったんですけども…
|
||||
|
||||

|
||||
市営でバス持ってるのいいですね~
|
||||

|
||||
ナンバーが841でお~と思いました。
|
||||

|
||||
乗る機会があったら乗ってみたいところです。
|
||||
|
||||
### マンホールとパネルの展示
|
||||
|
||||
全然どこに展示されているのか知らなかったので諦めて帰ろうとしているときに人だかりを見つけて、まさかな…と思って入った建物で展示されていました。かなり並んでいましたが、お目当てのマンホールを見ることができたので満足です。
|
||||
|
||||

|
||||
前方後円墳モチーフかな?観光大使の衣装の展示
|
||||
|
||||

|
||||
それを着たやよいの等身大パネルの展示
|
||||
|
||||

|
||||
お目当て「ふたマス」のマンホール
|
||||
|
||||

|
||||
最初見たときどんなスカートだよ 網かよと思ったんですが、胸元の飾りと下の文字を見るに将棋盤ですかね?
|
||||
|
||||
|
||||

|
||||
全部片足あげててかわいいですね
|
||||
|
||||
## namco大阪日本橋
|
||||
|
||||
このあと心斎橋に用事があったのでついでに行ってきました。
|
||||
|
||||
日本橋には全員分の等身大パネルが展示されていると聞いていたので撮るだけ撮って退散。
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
## まとめ
|
||||
|
||||
人がいっぱい集まるイベントは初めてだったので楽しかった。来年も参加したい
|
|
@ -10,8 +10,11 @@
|
|||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"wrangler": "^3.109.3"
|
||||
"wrangler": "^3.1.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@cloudflare/workers-types": "^4.20230518.0",
|
||||
"typescript": "^5.1.6",
|
||||
"vitest": "^0.32.2"
|
||||
}
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 113 KiB |
Before Width: | Height: | Size: 49 KiB |