つれづれ日記 2023年5月

予定

毎日


2023年5月31日 (水曜日)

21:58:23 # Life ひさびさにChrome ExtensionをいじったらManifest v3を使えと言われてなんじゃそりゃと思ってみたらだいぶAPIが変わっていて辛い。 チェックリストがあるので一つづつこなしていったがなんかだいぶ変わっているので今までよくわからずに書いていた部分がどう書き換えたら良いのかわからなくなって涙目。 アイコンクリックしたら反応するところとか、Service Workerがいつ起動するのか、全然わからない。

2023年5月27日 (土曜日)

11:25:01 # Life 今月読んだ本の読書メモ。

2023年5月21日 (日曜日)

22:29:54 # Life Nature Remoのホスト名。なんて名前だったかなとローカルAPIを叩くのに調べる必要があったのでメモ。 Nature Remo Mini1のときはRemo-(MACの16進数下6桁).localというホスト名だったのだが、 Nature Remo Mini2は違う名前になっていてRemo-mini(MACの16進数下6桁).localというホスト名になっていた。 あと検索のしかたとしてはavahi-browse _remo._tcpでよかった。

2023年5月20日 (土曜日)

15:47:26 # Life 時間管理。 最近は今後二週間ではたりなくなったので今後4週間ができるようにしてみた。時間管理。 超シンプルな気がするんだけどこれでもたまに書くの忘れて、書くのずっと忘れているときは多分だいぶ調子に乗っているのでやばい。 ポモドーロなどで休憩を強制したいのだが人とのミーティングには休憩が入らないことがあって困る。

21:35:57 # Life 共有ライブラリのロードって順番にやっているけど一気にやったほうが速いんじゃないか。最初の2kBくらいだけ読めばDT_NEEDEDセクションの内容が見えるはず、そこから並列に他の共有ライブラリもロードしてDT_NEEDEDを順番にたぐっていけば高速に必要な共有ライブラリのリストができるんじゃないか。それを並列でreadahead(2)しておけばその後にld.soはmmapしたメモリ領域のページフォルトがディスクに行く回数が減って高速にロードできるんじゃないか。 そういう仮説をもって作成してみたツール。とりあえず手元ではblenderの起動が若干高速になったので満足。 sopreload。 雑に作ったのでまだいろいろ詰めないといけないですが、まぁ実証実験としては面白かった。

2023年5月18日 (木曜日)

22:42:23 # Life git rebaseで最初のコミットを編集したい。めったにないんだけどたまに必要。 今日やろうと思ったらコミットを指定できるのは二番目以降で困った。 このために--rootというフラグということを発見、git rebase -i --rootでやりたいことができました。

2023年5月7日 (日曜日)

18:21:34 # Life chrome tracingのためのデータを吐く。 Trace Event Formatという ドキュメントがあって、それが一番よいっぽい。 二種類サポートしているらしくて、かんたんな方のフォーマットだとJSONのObjectのArray([{..}])をはけばよみこんでくれるらしい。 イベントをB(開始)とE(終了)の二回出力するのとかちょっと面食らったけどまぁよいのかな。 あと、終了の]を省略することができるのだけど、省略しないと前の行を,で終わらせると有効なJSONではなくなってしまうのにハマった。 これデータ形式としてはndjson(改行区切りのJSON)が良かったんじゃないか?

2023年5月3日 (水曜日)

17:44:29 # Life glibc の共有ライブラリローダーとhwcap。ld.so はELFバイナリをロードするときに共有ライブラリを複数の場所から検索する。 CPUの提供する機能によって特定の共有ライブラリに切り替える機能というのがあって、より特異なすべての機能を組み合わせた共有ライブラリがおいてあるディレクトリから先に検索して一般的な共有ライブラリを使うという段階でいく。 getauxvalでAT_HWCAPをみるとどういうパラメーターで確認しているのかわかる。 x86_64はどうもいまのところ2つのhwcapを見ていて、x86_64というのとavx512というのをみているっぽい。 あとTLS使っているか違うのかというのもみるらしく、/usr/lib/,/usr/lib/x86_64-linux-gnu, /lib/それぞれに対して以下のような組み合わせを試す。

柔軟なのはよいとしても欠点としては組み合わせ爆発が起きていてすくなくとも16のパスを検索する羽目になっているのと、TLSじゃないってどういうことよ、というのとx86_64なのにx86_64じゃないってなんじゃそりゃ、というのと x86_64/x86_64ってなに?と意味不明な点がいくつかある。 これを力技で解決する仕組みが/etc/ld.so.cacheで通常は事前にldconfigが作成したキャッシュを見てそれで解決しているようだ。 ただしChrome Remote DesktopなどをつかっているとLD_LIBRARY_PATHが設定されていて、その影響でld.so.cacheが使えず全部のパスを検索しているっぽい。 という残念なことを発見したのが今日。

18:30:57 # Life C++20のsplit_view. 歴史改変されているらしく、C++20発表当時のsplit_viewは現在はlazy_split_viewになっている。 しかし、困ったことにDebian bookwormに入ったg++ / clang++はlazy_split_view相当のものが入っている模様。 文字列のSplitが便利になった気がしたのに便利なのが使えないという。

2023年5月1日 (月曜日)

16:23:27 # Life 5月になってしまった。 Rustのコードとかパッケージングとかいじりながら既存のC++のコードも盆栽的にいじっている。 イマイチな構成だなぁというのを放置しないでいじるというのは精神衛生上よいのかもしれない。


Junichi Uekawa