週報

週報 2024.04.29 - 2024.05.05

2024-05-05

今週はなんか虚無感をとても感じた。 実際クネクネしていた時間が多いように感じる、生活リズムが崩れまくったのもあるのかもしれない。 精神を安定させるためにもちゃんと生活を整えたい。

この週報であるが、こっそり始めたつもりでいたが何人かにバレていて (しかも読まれていて) びっくりした。 あるキーワードを入力したら週報の内容が読めるみたいな機能を付けようかなとちょっと考えたりした。

芸術の春

先週の週報で、絵を描くぞ!という目標を立てたので絵を描いたり、YouTube で絵の書き方だったりの動画を見てみたりした。 かなり難しい。バランスを取るというか描いてみるとなんか違うなぁとどうしても感じてしまう。 それはそれとして絵を描くという行為はとても楽しい。時間が溶ける。 もっと上手に描けるようになったらもっと楽しくなるのかなぁと思った。 人に見せられるくらいには上手くなってみたいのでもうちょっと頑張ってみたい。

自炊

先週、外食をしすぎた印象があったのでできるだけ自炊を心がけた。 欲に負けてラーメン屋に行ってしまったりしたが自炊の楽しさを再確認することができた。

やはりチャーハンが楽で美味しく作れるのでとてもよい。 普段はラードを使って作っているが、鶏皮を買ってそれを焼いて鶏油を取り出して代わりにそれを使って作ってみたがこれが意外と良かった。

x86 エミュレータ自作

書きはじめた。現状はまじで簡単な命令だけを実行できるだけであるが、x86-emu というリポジトリで細々と作っている。 大学の図書館から借りた「自作エミュレータで学ぶ x86 アーキテクチャ」という本をやりながら進めているがかなりいい感じ。

なんとこれまた Zig で書いているのだがやはり辛い部分がちょっとある。

実装においては Zig の面白い部分も活用していて、例えば以下に示すコードとかがそれである。 C とかでこういったものを実装する際には enum の最後にその大きさを表す FOOBAR_NUM みたいなのを入れると思うが、 Zig は enum の中に定数を入れれるのと std.meta.fields というやつがあるので、よりわかりやすい感じになることに気づいた。

pub const Register = enum {
    EAX,
    ECX,
    EDX,
    EBX,
    ESP,
    EBP,
    ESI,
    EDI,

    pub const len = @import("std").meta.fields(@This()).len;
    pub const name = @import("std").meta.fieldNames(@This());
};

面白い。

その他

AC 部屋に行くとなぜか木工作業がされていた。 どうやらサーバの静音化のための作業だそうで、時間があったので軽く手伝った。 木工作業は久しぶりであったが楽しかった。

kawaii ロゴが巷で流行っていたので jsys のロゴを作ってみた。 まともなソフトウェアを持っていなかったのでパワポでポチポチして作った。 これまた楽しい。

友人に勧められて購入した Fog of World というアプリが面白くて、霧を晴らすために散歩している。 健康が増進されてとてもよいのだが、これって手段と目的というか何かが逆転していないか…?と感じてしまっている。

ac-library-zig を空き時間にちまちま実装したりして segtree をついに実装した。(#3) テストを書くのを頑張った。ところで本家にはあるアサートを入れていないことに気づいた。 いろいろ調べてみると、std.debug.assert() というものがあり、内部実装を読んでみると以下のようなコメントが付いていた

/// This function invokes undefined behavior when `ok` is `false`.
/// In Debug and ReleaseSafe modes, calls to this function are always
/// generated, and the `unreachable` statement triggers a panic.
/// In ReleaseFast and ReleaseSmall modes, calls to this function are
/// optimized away, and in fact the optimizer is able to use the assertion
/// in its heuristics.
/// Inside a test block, it is best to use the `std.testing` module rather
/// than this function, because this function may not detect a test failure
/// in ReleaseFast and ReleaseSmall mode. Outside of a test block, this assert
/// function is the correct function to use.

らしいので割とまじでこれを使うべきだな~となった。

目標の振り返り

来週の目標