Daidoquer2 (ddq2) という艮鮟鱇さんが作った読み上げボットをローカルのマシンで立ち上げ、 Discord のテキストチャンネルに書いた内容がボイスチャンネルで読み上げられるようにしたという記録です。 割と苦戦して、艮鮟鱇さんにヘルプ求めまくりながらやったところなんとか動くようになりました。 問題の原因はほとんど使っていた Docker イメージが古かっただけということもしなくもない。
TL; DR 的なサムシング 書いていたら思いの外前置きが長くなったので、(たぶん)順当に構築できた場合の手順との差分を最初に書いておきます。
docker-compose.yml が指しているイメージを最新にする ddq2 の images のところを書き換え ここを見て最新のやつを使ったほうが良さげ 他の人が喋っていたら音量を下げる機能を無効化する なぜか FFmpeg が死亡するので config/runtime.exs の ms_before_stop_low_voice を 0 に設定 Daidoquer2 って何なのよ (たぶん)数多ある Discord の読み上げボットの 1 つです。README が詳しいのでここであんまり書いても仕方ないんですが、Discord のボイスチャンネルで喋れない人が、 テキストチャンネルに何か投げるとそれが合成音声でボイスチャンネルに流される感じです。
既存のファイルシステムを暗号化もできるらしい。 とりあえず使い捨ての環境でやってみたのでメモしておく。使ってる環境でやるならバックアップ取ってからやった方がいいと思う。
まず、Arch のインストールメディアで起動する。
ここでは /dev/nvme0n1p2 に rootfs があって、それ以上は分割されていないものとする。 複数のパーティションを 1 つの暗号化パーティションに入れることができるかは分からない。
LUKS のヘッダ分のスペースを空けないといけないので、まず ext4 のファイルシステムを縮小する。 僕はデータが入り切る最小サイズまで縮小した。計算が得意な人はギリギリのサイズに縮小してもいいと思うけど、 ext4 だとデータはあんまりバラけてないはず(多分)なのでどのくらい意味があるのかは不明。 (あと、僕はどうせミスる)
Arch Linux を LVM on LUKS の root filesystem にインストールしたのでメモ。 LVM を使うこと自体は完全にオプションで、LUKS の上に ext4 のファイルシステムを作っても別に良い(はず)。
これがどういう構成かというと、物理パーティションの上に LUKS で暗号化したパーティションを作り、 その上の LVM2 の LV の上の ext4 のパーティションに rootfs を作るというもの(オフチョベットしたテフをマブガッドしてリットにしてそうな説明)。
(意外にもとハマらずにできたので情報としての価値は低めです。)
インストールガイド に従ってパーティションを切るところまでやる。
パーティションはこんな感じで切った。
ディレクトリ 範囲 説明 /boot 1 MiB–1 GiB ブートローダとか諸々用 / 残り全部 残りのディレクトリ用。暗号化する。LVMを使うので後で分割も可能。 /boot 大きめっすね。
LVMというのは抽象化したレイヤーを通して物理的なストレージにアクセスするというやつ(適当)。 物理的なストレージを直接使うよりもいろいろ変なことができるので嬉しいらしい。
雑に概念を説明 LVM には PV(Physical Volume)、VG(Volume Group)、LV(Logical Volume) という概念がある。
まず、PV というのは物理的なストレージに一対一で対応する概念で、SATA 接続のストレージだと /dev/sda1 で一個、 /dev/sda2 で一個みたいになる。 SSD をパーティションで区切っていない場合は /dev/sda で一個の PV とか。
次に、VG というのは、普通にストレージを使っているときは 1 個のストレージデバイスに対応する概念(のような気がする)で、 1 個以上の PV をまとめて 1 個のボリュームにできるというもの。 普通のストレージと違うのは、複数のデバイスとかパーティションにまたがっていてもいいという点。
systemd のデフォルトでは /tmp は tmpfs でマウントされるようになっている。 でも Ubuntu では /tmp で tmpfs を使わないようにしてある。何度か /tmp を tmpfs にする試みはあったらしい1が……。
まあどうでもいいといえばどうでもいいが、Ubuntu の /tmp を tmpfs にする方法。
$ sudo systemctl enable /usr/share/systemd/tmp.mount $ sudo reboot これだけ。
通常、systemd では /tmp は tmp.mount でマウントされる。 Ubuntu でもこのファイルは /usr/share/systemd にインストールされるようになっていて、ユーザの好みに合わせて使える。 ただし、ここはユニットファイルの検索パスに入っていないので普通に指定すると有効化できない。 というわけで、フルパスを指定して mount unit を有効化することで、直接使えるようにしている。
起動中に /tmp をマウントし直すと中に置いてあるファイルが見えなくなってしまうので、再起動するのが安全だと思う。
FSF のショップにある Emacs のマグカップを買ってみました。
テカテカで映り込みそうなのであんまり写真は上げていないんですが、なかなか良いです。 ロゴの色は FSF のページの写真よりちょっと青っぽいですね。これは個体差なんでしょうか。
これを注文したのは 11/29 とかだったのですが、届いたのは年が明けて 1/25 とかでした。 箱に何故か中国郵政のステッカーが貼ってあったので、誤配送で中国を経由してしまった説はあります。 (一番安い配送オプションを選んだせいもあると思います。)
1 ヶ月後に控えた引っ越しに間に合うかとビクビクしていたんですが、何もメールが来なかったのは FSF に登録しているメールアドレスを 更新し忘れていたせいだと後で気づきました。
お久しぶりです。 どうでもいいことを気軽に書けるように(ブログサービスではなく)自分のブログを作っているのに、あんまり気軽に書けてないなと感じている今日この頃です。 で、普段からどうでもいいことを書いていないとどうでもいいことも書きづらくなってしまうな(?)と思ったわけで、質にはこだわらずにどうでもいい記事をぽんぽん出していこうと 思ったわけですね。でも書くからには何かネタがないと厳しいなというわけで、適当にそのへんの OSS のコードを読んでそれを記事にするというのをひとまず続けてみようと思っています。 コード読んで解説くらいだったらそんなに負荷も高くないので続けられそうという希望的観測もあります。 あと他人のコード読むといろいろ学べるところもありますしね。
備忘録。 出てこないなーとか思ってたら普通に書いてあった。
単に -D で指定するときに subproject名:オプション名 というふうに指定すればいいだけだった。
例えば subproject hoge でだけ warning_level を 3 にしたい場合は
$ meson configure -Dhoge:warning_level=3 のように指定すれば ok。
ちなみにモジュール (meson.build の中で import とかして使うやつ) ごとのオプションは . で区切る。
なので pkgconfig の relocatable を true にする場合とかは -Dpkgconfig.relocatable=true とかを指定すればいい。
参考 Built-in options
Free Software Foundation に寄付すると毎年(?頻度は忘れた)GNU Bulletin という冊子を送ってくるようになる。 しかもアメリカから送ってくるのでこの送料も馬鹿にならないのではないだろうか…。
てことでいらないので止めてもらった。
ここ の Donations のところに メール送ったらオプトアウトできると書いてあるので、適当にメールを送る。
僕は
I’d like to opt-out from print version of newsletters. My FSF username is “kofuk”.
というような怪しい英語のメールを送った。 今見直すと “opt-out from” は明らかに “opt-out of” と書くべきだったとかいろいろあるが、僕は外国人なので仕方ない(適当)
Windows 11 のエクスプローラーにタブ機能がついたというので、 QTTabBar を無理矢理消したら、 フォルダをひらくたびにエクスプローラーのウィンドウが増殖する問題に悩まされた。
レジストリをいじれば一発で直る。 HKEY_CLASSES_ROOT\Folder\shell にある「(既定)」というやつに値が入っていたら、それを消せばいい。
HKEY_CLASSES_ROOT というのはファイルタイプの開き方を保存しているらしい。 Windows のことはよく知らないので雰囲気で書いているが、新しいウィンドウが開いてしまうのはフォルダを開いたときに QTTabBar のルーチンが呼び出されるように設定されていることが原因のようだ。 QTTabBar はアンインストールされているので実際にはこの呼び出しは失敗するが、 そのフォールバックでエクスプローラーで開く(explorer フォルダ というコマンドを実行する)という動作になっているので、 毎回新しいウィンドウが開かれてしまっていたということのような気がする。