週記 2022/01/31~2022/02/06
2022/01/31
9時ごろに起きる。妙に早起きしてしまい、微妙な感じに。数時間後に出かけないといけないので、昼寝チキンレースをした。
ファミリーマートでおやつを探す。しばらく見ないうちに、謎のスイーツが追加されていたりして目が離せない(?)
クリスピーチキン(ゆず七味)を食べる。ゆず感と七味の辛さがいい感じ。
早起きしてハイパー眠くて頭が回らなかったので、Brainfuckの処理系は書かなかった。
友人とFortniteをする。スポーツカーで敵をひき殺したりした。早い車で奇襲が結構強い?
2022/02/01
15時ごろに起きる。
チーズトースト、良い…
Brainfuckの処理系を書くにあたって、ボトルネックとなっている処理を知りたくなり、WSL内でValgrindを使ってみた。変なメモリ操作をしていないかチェックしたり、CPUのキャッシュヒット率とかを測ったりできて、プロファイリングはおまけな感じ。
valgrind —tools=callgrind hoge —fuga
のようなコマンドで計測ができて、計測結果を見るのは、WindowsだとQCachegrindが良さそう?あんまり分かっていない。
結構いい感じにプロファイリング結果を見れて良さげ。整数のキャストが思ったより重くて、回数を減らしたりした。とはいえ、まだ細かいパフォーマンスを気にする段階ではないと思うので、あまり詳しくは調べないことにした。
しばらくはWSL+Valgrindで試してみよう。
2022/02/02
14時ごろに起きる。
散髪に行く。最近外に出ると頭・肩が痒くなって困っていて、よりによって散髪中に頭が痒くなってしまい大変な事に。何かの修行かな?
うまいチョコビスケットを入手。うまい
キムチを食べていたら、ガッツリ汁を服にこぼしてしまった…返り血というか、ニュージーランドの星🇳🇿というか…
適当にググってみると、「食器用洗剤を付けて軽く叩け!」という感じだったので、しばらくやってみると、色は薄くなったけど依然まだ赤いな〜という感じ。ぐぬぬ…
なんかやるぞと思ってPCの電源を入れたけど、夕飯を食べたり服を叩いたりしていてその事を忘れてしまった。まあこんな日も…
Twitterを徘徊していると、WebAssemblyを使ってブラウザ上で動くLinux環境の話題が流れてきた。iPadでも動いて驚き。
Pythonが動いたり、cowsayとかがちゃんと動いてて凄い。(iPadでも動くのが尚更)
2022/02/03
11時ごろに起きる。
某所へ出かけるため、駅に向かったものの乗り遅れてしまった。これでは予定に遅れてしまうので、何とかならんかと時刻表を眺める。すると、次発の快速列車に乗って、そこから普通列車でちょっと折り返すと予定に間に合う事が判明した。ちょっと奇妙な経路だけど、まあ…
快速列車に1区間だけ乗って、反対方面の普通列車に乗り換える前に、改札を出ないと不正乗車となってしまう(所謂折り返し乗車)ので、一旦改札を出て、すぐにICOCAを当てて再度改札に入る。不審者
なんだかんだで予定には間に合ったのでヨシ!
節分という事で、恵方巻きを買う。色々と悪魔的なものが販売されていたけど、マグロとかのスタンダードなやつを購入。うまい(年中やってくれ〜〜)
Googleドライブが常にピンチなので、そろそろ課金しようかという気持ちになる。月250円で100GB、結構安い気がするけど、どうなんだろう。
家が燃えてもなんとかなるようにゴリゴリのクラウドストレージを用意したい気持ちもある。
Brainfuckの処理系を書く。[->+<]
(mem[p+1]+=mem[p]; mem[p]=0;
)のような処理を、mem[p+1] += 1*mem[p]; mem[p]=0
のように、掛け算を使う誤った最適化をしていた。原因を調べてみると、足し算の最適化パターンが不十分で、掛け算のパターン([->++<]
とか)が適用されてしまっていた。足し算のパターンをちゃんと書いて解決。
最適化したコードをC言語にトランスコンパイルしたものを眺めてみると、まだ定形ループがいくつかあるように見えた。これの最適化処理を書く前に、最適化の依存関係を実装しておくと便利そう?グラフを作ってトポロジカルソートが素直な気がするので、とりあえずこれを実装してみよう。
2022/02/04
11時ごろに起きる。
用事があるので早起き(当社比)したけど、現地で1時間程度待つ事になってしまい微妙な気持ちに。待っている間にオリンピックのスケートを観ていると、アイスダンス(?)の演目で「デス・スパイラル」という強い名前の技が出てきて面白かった。
セブンイレブンでドーナツを買う。もっちり系のドーナツが4個入っているやつ。砂糖、砂糖+チョコ、チョコ、イチゴという感じで、ファットサイドの力が強い。ちょっとパン感があってうまい。
Brainfuckの処理系を書く。ステップ実行を実装したくなり、実装方法を考える。.step()的なメソッドを呼び出したら1ステップ…みたいな実装で、じゃあイテレーターにしてみようぜ!という気持ちに。
InterPrinter構造体にIteratorを実装してみると、なかなかいい感じ。.count()で簡単にステップ数が数えられるのがお気に入り。
WebAssemblyで動いたら面白いんじゃないかと思い、調べてみる。コマンドラインで動かしたいので、cargoに--target wasm32-hogeを指定して、wasmtimeで動かすのが一番楽そう。
適当にコンパイルして早速実行してみたものの、エラーが出て動かない。「unreachebleに到達しちゃったよ!」というエラーで、何かしらのバグを踏んでいる気がするけど、調査する元気も無く、そのまま眠る…
2022/02/05
15時に起きる。
モノグサプログラミングコンテスト2022(AtCoder Beginner Contest 238)に出る。9172人中2904位で、パフォーマンスは873でレーティングは-2。
A問題
問題文の通りに判定するとTLEしそう?
2Nをループで計算して、途中でN2を超えたら出力をして打ち切る感じ。
B問題
Aを累積和して360で割ったあまりの、隣り合う要素の最大の差を出力、
最初はサンプルが合わなくて困ったけど、あまりをとった後にソートするのを忘れていた…
C問題
問題文の関数fを実装して眺めてみる。しばらく眺めて、規則性が分かったのでそれを実装して提出。
Brainfuckの処理系をいじる。ハノイの塔はかなり高速化するけど、マンデルブロ集合は高速化しない原因を探る。
最適化はループを別の処理に置き換えるという設計になっていて、隣接する命令とループに関わりがある処理の最適化が苦手ぽい(できない)。C言語からコンパイルしたらそんなに気にならない気がするけど、インタープリンターは結構遅い。
いまいち最適化パターンがわからなくなってきて、そろそろ限界かな…?
Microsoft Storeからwingetを入れようと思って、入手ボタンを押そうとした瞬間にボタンが消えてしまい、インストールできず…
オードリーのオールナイトニッポンを聴く。コロナ感染後一発目の放送。療養中の話の中に若林が突然子供が産まれたことを発表したりして、なかなか情報量の多い回に。
2022/02/06
16時ごろに起きる。
レトルトカレーといちご大福を食べる。夜に書いていて、思い出すのに時間がかかった…
オリンピックを観る。スキーとかアイスホッケーとか、昔は生意気に「自分もいけるんじゃないか」と思ったりしたけど、今となるとできる気がしない(それはそう)。開始3秒くらいで靭帯を全部損傷しそう
Brainfuckの処理系を書く。細かい変更をちょびちょび。
ペットボトルのお茶を飲んで、キャップを閉めようと思ったけど見当たらない。10分くらい辺りを探し回って、どうしたものか…と思っていると、テーブルの上にキャップが乗っているのを発見。ちゃんと探したつもりだけど、無意識に無視していたのかな…
進撃の巨人の後、ドラマの再放送が面白そうだったので観ることにした。どうやら一気見企画の一環だそうで、そのまま観続けていると深夜3時くらいに…NHKプラスが良い。