週記 2022/07/18~2022/07/24

2022/07/18

16時ごろに起きる。

たまに食べているインスタントうどんと同じシリーズの焼きそばを入手したので、それを食べてみる。インスタント焼きそばは沢山の種類を食べた事が無いのでアレだけど、一般的なカップ焼きそばとあまり変わらない感じだった。

なんだか物足りない感じだったので、賞味期限切れのカレーメシも食べた。お湯を入れた直後は水気が多くてどうなるものかと思ったけど、混ぜているうちにちゃんとしたカレーになってすごい。カップヌードルの謎肉に似たものが入ったりしていたので、今度はお湯を入れる前にちゃんと見てみるか。

腹ごしらえを終えて暇になったので、とりあえず相撲を眺めてみる。最近ほぼ毎日相撲を観ている気がするな。同じ時間帯に他局でやっている番組は、あまり面白いものも無いので、相撲が安定している気がする。

昨日のABCで解けなかった問題の解説を読む。やっぱりC++std::set相当のものを使うのね...。Pythonのsetはハッシュを使う実装になっているので、C++みたいな事は出来んのよな。どうしたものか

2022/07/19

11時ごろに起きる。

本当はもっと寝るつもりだったけど、雷に叩き起こされてしまった。なんとか再度寝ようとしても、雷が収まらずにずっとゴロゴロ鳴っていて寝れない…

BrainfuckをWebassemblyに変換するやつを書く。今日はブロックの実装をした。ブロックの構造めんどくさそ〜と思っていたけど、思っていたより簡単でちょっと拍子抜けした。Brainfuck相当のWebAssemblyが作れるだけで十分なので、全体的に実装は軽くなった。

これでBrainfuckをWebAssemblyに変換する機能が完成!マンデルブロ集合を描画するやつとかハノイの塔を解くやつとかを動かして遊んでみる。自分が書いたプログラムがこうやって動いていると嬉しいわね。

PCや前のiPadでは有線のヘッドホンを使っている/いたのだけど、iPadが新しくなり、iPhoneも加わった今、有線のヘッドホンを使える機器はPCのみになってしまった。安直にBluetooth対応のヘッドホンを買ったら済むだろ...と思っていたら、PCがBluetoothに対応していない事が判明。あちらを立てればこちらが立たずな状態に自分は置かれていることが判明した。

PCにBluetoothを増設しても良いのだけど、それも面倒くさいというかなんというか...。有線無線両対応のヘッドホンを買うのが素直な気がしてきているのだけど、どんなものを買えば良いんだろう...。重量とかやばそう

2022/07/20

14時ごろに起きる。

5000円をICOCAにチャージしようと思い、駅の中にある券売機を物色してまわる。4つ程度見ただろうか、最後に見た一つを除く全ての券売機が1000円札のみ受付でちょっと困ってしまった。5000円札を受け入れてくれる券売機を操作してみると、「チャージの単位は1000円、2000円、3000円だよ!」と表示される。同じ事を2ターンやるのか…と思っていると、「電車が来るぜ!!」というアナウンスが鳴り始めて、結局チャージが出来ないまま電車に乗り込んだ。

目的地の駅にある券売機も物色してみたけど、どれも1000円札のみだった。むむむむ...

帰り際にファミリーマートでおやつを購入。急いで出発したから腹が減っているのだ。

買ったのはいつものファミチキSPAMむすび(唐揚げマヨネーズ)。SPAMむすびの新種が出たら全部購入しているのだけど、これはかなりうまい。オリジナルのツナマヨとこれだったら迷っちゃうな。マヨネーズ最強!

最近はiPhoneで写真を撮っているけど、iPadと比べると画面が小さくてピントが合っているか、手ぶれが無いかの確認が難しい。確認するためだけにAirDropするのも面倒くさい。

BrainfuckをWebAssemblyに変換するおもちゃが動くようになってきたので、いろいろなBrainfuckのコードを食わせて遊んでいると、円周率を計算するコードが動かない事に気が付いた。一応何かしらかを出力しているけど、その内容が変という感じ。

最初は出力しているWebAssemblyの命令列を間違えているのでは?と疑っていたけど、どうやらそうでもないらしい。ならば最適化処理が怪しいと思い、最適化を一つずつ無効にしながら確認してみると、[->++<]のようなループを掛け算の命令に変換する最適化がおかしいという結果に。

対象の命令列の中に別の最適化で生成された命令(0代入命令[-]相当)が混ざっていても最適化をするように作っていたのだけれど、その処理に関して詰めが甘く、予期しない動作をしているぽい。詳しい原因まで理解する元気がもう無かったので、とりあえず無効化して放置することにした。

2022/07/21

10時ごろに起きる。

イオンで昼食を漁る。最初はマクドナルドで何か買っていく予定だったけど、なんだか米が食いたくなったので海苔巻きを購入。セルフレジで会計をしたのだけど、一緒に買った干しブドウをレジに通し忘れてしまい、危うく万引き犯になるところだった。理由がしょうもなさすぎる

世間はうなぎに盛り上がっているようで、どこのコンビニに行っても、それこそイオンでもうなぎの予約を受け付けていた。こんなに前から予約が必要なほど需要が増えるのかね?とか思いつつ、やっぱりうなぎは食べたい。パックで1匹分売っているようなアレに噛り付きたいわね

処方箋の薬を受け取りにいく必要があるのだけど、おくすり手帳が行方不明で困った。今日明日で薬は切れてしまうし、無いと困るのだけど...。探してみるものの、置き場所に関する記憶が全くないため、いくつかあるいろんな物が雑多に積まれている山(通称「地層」)を掘り返さないといけないかも。めんどくせ~~~

BrainfuckをWebAssemblyに変換するやつをいじる。大方コードは書きあがった感じなので、細かい所を整備して使いやすくしていく。これまで処理内に直書きだった最適化処理を関数に切り出したり、複雑な処理を分割して簡潔にしたりといろいろ。完全に忘れていた標準入力を受け取る処理も実装した。標準出力と同じく、WASIと格闘することになるかと思っていたけど、処理は標準出力にかなり似ていて簡単に終わった。先人に感謝...。

友人氏とSplatoon2をする。最近友人氏との間でイカ熱が再燃しており、夜にプレイすることが増えている。今日はサーモンランと、リーグマッチをした感じ。サーモンランを久しぶりにプレイして、仕事に優先順位を付けるのが大事だというのを再確認(タワー、カタパッド絶対殺すマン)。リーグマッチはガチホコだった。開始直後のホコ割りで相手の3/4が死んだ時、「今こそホコを運べ!!」と思っていたら誰も運ばず、なんやかんやで結局負けてしまった。連携むずかしい...

2022/07/22

17時ごろに起きる。

YouTubeを観たりして、18時ごろに活動を開始。

1ヶ月位前にrust-s3へ投げていたPRがマージされていた。他にもいくつかのPRがマージされて、即リリースされていた。はやい

以前にDependabotがAtCoderProblemsへrust-s3を更新するPRを作成していたのだけど、依存しているライブラリのバージョン指定が雑でコンパイルが通らなかった。これを解決するための小さいPR。

github.com

BrainfuckをWebAssemblyに変換するやつをいじる。前に、最適化処理のバグが見つかってヤバい!という事があったけど、この問題の理解を試みる。最適化の内容としては、[->++<]のような掛け算を行うループを簡潔な命令列に置き換えるという感じ。ループが始まった時点のポインターの値と、現時点のポインターの値の差を覚えておきながら、その差ごとにどれだけ加算/減算されたかを記録(上の例だと、差が0の値に-1、差が1の値に2と記録される)。原理上、[>++>[-]+<<]のようなコードも最適化できるので、そのような実装をしたのだけど、それが雑だったようだ。

どの点が雑だったかというと、実装当時は何故か「代入先の値を掛け算した値で上書きする」という理解をしていて、これは実際の動作とは異なるものだった。ちゃんと考えてみると、「代入先を特定の値で上書きする」が正しい動作なので、これを実装してみると以前動かなかったコードも動くようになり、最適化も効くようになってより高速になった。やったぜ

この実装に伴って、if相当のコードを扱えるようになったので、同等の定型ループ([ほげほげ[-]]のようなコード)をifに最適化できるようにしたいわね。

WebAssrmbly自体がランタイム側でどれくらい最適化されるのかが気になっている。ランタイムによるだろと言われたらお終いだが、例えば2を掛ける操作をビットシフトに変換したりするような細かい最適化のみが行われるのか、もっと大きく大胆な最適化も行われるのか。一旦有名なランタイムのコードを読んでみようかしら。読む前に予想してみると、LLVMやCraneliftのIRに変換して、それらに最適化を丸投げしているだろうと思う(つまりどんな最適化が行われるかは生成するIRの品質による?)。

今の実装はメモリセルのビット数(8bitが主流だけど、ちょっと特殊な16bitを想定したプログラムを動かしたい)など、ハードコードされている値が多いので、その辺をいい感じにしたいわね。最終的にはブラウザで動くWasmを出力できるようになると嬉しい。

最近TLでブルーアーカイブに関する話題がたくさん流れてくるので(主にTERRYさん)、ゲームをインストールしてみることにした。序盤でガッツリ撃たれた時に「いてて…この弾違法な弾丸じゃないですか!痕が残るんですよ!」とキャラクターが怒るシーンがやけに印象に残っている。体丈夫すぎだろ

2022/07/23

16時頃に起きる。

店舗の地下でかっぱを強制労働させているという噂がある回転寿司屋へ。とは言っても、ここ最近は回転していなくて新幹線風なものが直接運んできてくれる。土曜の夜という一番混みそうな時間帯なのに、そんなに客が居なくてびっくり。空いているから品物はすぐに届いて嬉しいのだけど、それ以上に店の経営が心配になる。

5億年ぶりにうにを食べた気がする。うまい

AtCoder Beginner Contest 261に出る。ABCの3完で、順位は9106人中3226位。パフォーマンスは828で、レーティングは834から833になった。

A問題

区間が重なっている部分の長さを出力する。

atcoder.jp

B問題

問題文を読み始めて、なんだか面倒くさそうだぞ!と思っていたけど、問題文の中に矛盾があるかどうかを判定する方法が記載してあったのでそのまま実装してAC。

atcoder.jp

C問題

collections.Counterに突っ込みながら出力していく。

atcoder.jp

2022/07/24

13時ごろに起きる。

諸々をやっつけるために学校へ。相変わらずギリ遅刻くらいの時間に到着した。どうにかならんか…

期末試験に合わせてレポートや授業の出席状況を確認してみると、出席日数が足りずにいつの間にか情報の単位を落としていた事が判明!!どうやら授業の予定を見落としていたようで、知らないうちに「こいつ出席回数足りんな...単位落としたろ!」となっていたようだ。自分で時間割を組む学校なので、毎年何人かは同様のミスをして単位を落としているらしい。そういえば体育も似たような事で単位を落としたな...

電話回線の準備が遅れており、多機能携帯電話かすら怪しくなっていたiPhone。とうとう電話回線を契約しに行ったのだけど、SIMカードの準備に1時間半近くかかるらしい。1時間半も店舗で待ちぼうけしたくないので、散髪に行ったものの思ったより早く終わってしまい(30分)暇になった。

あと一時間もあるし、夕食を食べに行くことにした。いろいろ注文して料理が届いた途端に「SIMカードができたぞ!!!」という連絡が来た。ちょうど1時間経ったくらいだろうか。いつもは予定より早く終わるとうれしいものだけど、こういう時にそうなると困っちゃうわね。

麺類を放置していくわけにもいかないので、そのまま食べてからSIMカードを受け取りに行った。

リンガーハットの野菜たっぷりちゃんぽんだけど、毎回食べる前に「前になんかあった気がするな...」と思いながら注文して、食べ始めてから「量がめっちゃ多い!!」と思い出した。たぶん以前もこれと同じことをしていて、毎回こうしている気がする。何とか食いきれるくらいの量な気がする。

いろいろゴタゴタがありながら、何とか回線が開通。外でも猫動画を観られるようになった。うれしい

SIMカードを入れた後に、電話が通じるかの試験をしたのだけど、どうやら試験専用の番号があるらしい。番号に電話をかけると「試験を始めるぜ!」と言った後に電話が切れて、数秒後に折り返しの電話がかかってくる。電話を取ると試験は終了で、無事に回線が開通という事になる。便利~