2022 年の振り返り

これは 天久保 Advent Calendar 2022 - Adventar の 8 日目の記事です。

連日パソコンの話を書くのは無理なので 1 年の振り返り記事でお茶を濁します。

労働

8 月から 9 月の間はメルカリでお世話になっていました。 毎年長期休暇に稼いだお金でなんとか食い繋いでいます。ありがとうございます。

それ以外の時期もアルバイトはしているのですが、あんまり働いていない上にお金遣いが荒いのでお金がありません。

パソコン

パソコン関連で何かやっても外に出せるように整えるのが億劫で発表しないがちだったのですが、エンジニアとして今後やっていくにはやったことを発信した方がいいよね、という思いで最近は頑張っています。 正確にはここ 1 年くらい頑張るつもりではあったのですが、あんまり頑張れていなかったので 12 月に入ってからアドベントカレンダー1で勢いをつけて頑張っています。

学業

相変わらず成績は不振ですが、今年は進級に要件があるので頑張っています2

秋学期はおおむね朝から大学に行って課題やバイトをする健全な大学生活を送っています。そのおかげで少なくとも今学期に出席不足で落としそうな単位はありません。 いい話です。

ちなみに春学期の頃は全く危機感がなかったのでめちゃくちゃ単位を落としています。バカですね。

生活

学業のセクションでも言いましたが、最近は朝から大学に行っています。 今学期からオフライン授業が増えた影響といえばそうなのですが、これまで大学に行くどころか午前起床も難しかった自分の生活習慣を考えると非常に進歩しています。

また、食生活についてもラーメン屋や中華料理屋での食事の比重を減らし、定食屋の比重を増やすことで健康的になりました。 天久保二丁目にあるコスモスという定食屋にめちゃくちゃ通っています。

tabelog.com

コスモスは定食を頼むとキャベツの山がついてくるのでありがたいです。 あと定食屋なので日替わり定食があって意思決定のコストを払わずに豊富な種類の料理を食べることができます。 最近は友人との食事にもよくこのお店を提案するので、友人からコスモス大好き好きくんだと思われているらしいです。そうなのかも。

さらに、最近デスク付きのエアロバイクを買って以降は家で運動もするようになりました。 これまで家では椅子に座りっぱなしでだったので、エアロバイクをめちゃくちゃ漕ぐようになってだいぶ健康になった気がします。 来年以降もこの習慣は続けていきたいところです。

以上、生活サイクル・食事・運動と三拍子揃ってだいぶ成長した 1 年でした。

最後に

自分としては昨年に続き今年も成長の 1 年だったのですが、なんかこういうことを普通の人は普通にできていて、そこがスタートラインらしいと聞いてすごいなと思いました(浅)


  1. 天久保 Advent Calendar 2022 - Adventar のことです。
  2. 2020 年度入学の筑波大学情報学群情報科学類生は 3 年次から 4 年次への進級以外に進級要件らしきものがない。

2021年の振り返り

大学の先輩に「1年の振り返り記事書いてね」と言われたので書きます(何?)。

引っ越し

プライベートで一番大きなイベントは引っ越しです。元々自分は大学の学生寮に住んでいたのですが、10月に学生寮に近いマンションに引っ越しました。

防音性と広さを兼ね備えた部屋でかなり住み心地がいいです。少なくとも過去数回どんちゃん騒ぎをしてもまだ苦情が来ていませんし、自分の部屋に別の部屋の音が聞こえたこともありません。広さも学生の一人暮らしには十分です。

強いて言うなら光回線を引けなかったことが不満ですが、そこそこマシな無料インターネットがあるのでなんとかなっています。

食事

去年の秋に一人暮らしを始めたのですが、一人暮らし開始当初はあまりにも食事ができませんでした。具体的には食事を気にしない性質のせいで3食カロリーメイトで済ませたり、普通に何も食べずに数日過ごすといったことを平然とやっていました。

このままだと気づかないうちに餓死してしまいそうだったので今年の1年の目標を「食欲を高める」に設定しました。そして、

  • いきなり自炊をするのは難しいのでほとんど毎食外食することで食事を取る習慣を付ける
  • 空腹を放置すると空腹感がなくなってしまうのでお腹が空いたタイミングですぐに何か食べる

などの活動を通じて食欲を高めて行きました。もの凄い勢いでお金がなくなって行くようになりましたが、食欲は人並にある状態になったのでよかったです。

それとは別に、あまりにも料理ができず「カップ麺すら作れない」の称号を得る程だった自炊能力も湯煎でレトルト食品を調理できる程度には成長しました。この自炊力の成長はかなりえらいと思っています。

一方で食欲を高めた副作用で肉が付きつつあるので、今後は運動する習慣を身につけて行きたいです。健康優良男性になるぞ!

労働

今年はやたらとインターンをした1年でした。今年の頭にはまだWebっぽいものに逆張りするオタクくんだったのですが、すっかりWebエンジニア風学生になってしまいました。

具体的には2月のCookpadインターンを皮切りにWantedly、LINEなどのWeb系企業で働いたり、ちょくちょく1 Dayインターンに行ったりしていました。特に夏休みはWantedlyとLINEのインターンで労働時間的にはフルタイムになっており、今思い出してもびっくりします。「意外と労働だけならフルタイムでできるんだな~、でもフルタイム労働を一生やるのは無理そうだな~」という気持ちです。

今年は労働にエネルギーを奪われてしまっていたので、来年はもっと労働の比重を下げて行きたいです。労働の比重は下げたいけどお金は欲しいので高い時給で雇ってくれる会社を募集しています。

学業

春学期は過去最高に成績の悪い学期でした。実は入学したころから学期ごとのGPAが単調減少を続けており、今年の春学期(2年春学期)は過去最低の1.xを記録しました。

これはイカンということで「秋学期は労働を減らして学業をやるぞ!」と思っていたのですが、引っ越しで思った以上にお金がなくなったり成行で労働が増えたりした結果、学業に集中できたとは言い難いです。秋学期の成績はまだ出ていませんが春学期から多少回復してくれたらいいな~と思っています。頼む~

さいごに

今年は労働の1年だったので来年は趣味のプログラミングや学業にもっとエネルギーを割いて行きたいです。特に趣味のプログラミングをやった記憶が一切ないくらいにはやっていないので、来年は力を入れて行きたいところ。

他にも来年は大学院進学か就職かを決めて進路に向けた活動(受験や就活)をしていく必要があるので、そのこともボチボチ考えて行きたいです。

セキュリティキャンプ2020 Y-3 Cコンパイラゼミを自作してみよう!ゼミに参加しました

 私はcoins20アドベントカレンダー2020に2回連続で遅刻しました。

 というわけでこの記事はcoins20アドベントカレンダーの12月6日の記事です。

adventar.org

 これは自分が参加したゼミ内での発表スライド azarashi2931.github.io

 以下の内容は半分位発表スライドと重複しています。

つくったもの

 作業ログの方にセキュキャン期間中自分がなにをやっていたか大体書いてある。
 作業の経過はそっちにあるので、ここでは感想を中心に書く。

 以下、作ったコンパイラをazccと呼ぶ。

Y-3 Cコンパイラゼミを自作してみよう!ゼミ

ゼミの紹介文から引用すると、

プログラミング言語の本格的なコンパイラを書いてみたいと思ったことがある人は多いのではないでしょうか? この講義では、簡単なプログラムが実際にコンパイルできるようなC言語コンパイラを、C言語を使って開発します。ひとまずの目標は、自作コンパイラを自作コンパイラ自身でコンパイルする(セルフホストする)ことですが、さらに最適化や異なるアーキテクチャへの対応を行いたいという方も大歓迎です。この講義を終えればコンピュータとプログラミング言語一般、そしてC言語についての深い理解が得られていることでしょう。実際に講師の私(植山)はセルフホスト可能なCコンパイラ8cc(https://github.com/rui314/8cc)をゼロから書いた経験がありますが、それはソフトウェアエンジニアとしての実力をぐっとアップさせるような、他には得難い貴重な体験でした。コンパイラ作成のような大きな目標を達成するためには、入念な事前準備が必要です。 プログラミング言語の理論や実装の基本的な構成などは事前に勉強していただく必要がありますが、それらはもちろん講師陣が手厚くサポートしていくので、心配する必要はありません。必要なものは、プログラミング言語に対する情熱です。多くの皆さんの応募をお待ちしています。

ということでC言語でCコンパイラを書くなどした。

 教材には講師の植山先生が公開している低レイヤを知りたい人のためのCコンパイラ作成入門を使用した。

www.sigbus.info

開発の際の自分ルール

  • エラー処理の関数などはcompilerbookからのコピペで済ませる一方で、トークナイザ、パーサ、コードジェネレータなどはなるべく参考実装を見ないで実装する。
  • セルフホストが重要なマイルストーンなので、Cコンパイラの実装はC言語で行う。

やった

式、文のパース

 intchar型のみをサポートし、それ以外はセルホストにいらないのでサポートしていない。
 式を1つ評価するとスタックに1つ値が積まれること、文を評価する前後でスタックは変化しないことに注意して実装したほうがよいということがわかってきた(n回スタックを破壊したので)。
 (実はこの記事を書いている途中にもスタック破壊を1つ見つけて修正した)

ローカル変数、グローバル変数の定義と初期化

 グローバル変数の初期化はint型のリテラルのみをサポートし、それ以外はサポートしていない。これはグローバル変数の初期化式が定数式でなければならないが、複雑な式を定数式であるか判定するのは面倒なので省略したため。あとでいいかんじの定数伝播を実装して複雑な定数式も受け取れるようにしたい。
 ローカル変数については実行時に値が決定すればよいので、azccでコンパイルできる任意の式を初期化式にできる。

関数の定義、宣言、6つ以上の引数をもつ関数を含む関数呼び出し

 コンパイラを実装するとき、関数の呼び出しや定義はコンパイラの成果物のターゲットの呼び出し規約*1にあわせて実装する必要がある。
 自分はABIを満たさない実装をした結果何度か破滅した。

構造体

 構造体のアライメントが難しいと聞いていたのでその辺に気をつけて実装した結果、割とすんなり実装できた。
 構造体を実装するときsizeof_Alignof*2があるとテストしやすいという話も聞いていたのでついでに実装した。
 構造体のアライメントに関する仕様はワンパスで実装できるような仕様であるはずだ、というところからエスパーするなどした。

_Bool

 どうしてそんな仕様にしましたか…?
 ちゃんとABIを見て実装した方がいい。自分は破滅した2。

やる

 スライドのこの項目に書いた内容は、実は翌日までにやってしまっているのである!

セルフホスト

 現状ではコードジェネレータ以外の部分は自分自身でコンパイルできているが、正常に動いているのはごく一部だけ。かなしい。
 コードジェネレータに関しては可変長引数関数の定義が含まれており、azccが可変長引数関数に未対応なのでコンパイルできていない。これはソースコードから可変長引数関数の定義を排除することで解決するつもりでいる。
 正常に動いていない部分に関しては、少なくとも関数呼び出し部分に問題があることがわかっているが、おそらくこれ以外にも多くのバグが埋まっている。書いてる間に解決した。やった~~。が、バグがたくさん埋まっているのは変わらず…
 機能追加はこれ以上必要ないと思うが、それでもセルフホストまでの道程は遠そう…

セルフホストしたらやりたい

  • 最適化パス
    • 自分のコンパイラが吐き出したものが速いと→うれしい!ので。
  • デバッグ情報の出力
    • 自分のコンパイラが吐いたバイナリに不具合があるときにどこが問題なのかわからず困っているため。

やる予定がない

ビット演算

 ビット演算を使わなくてもコンパイラは作れるので。

浮動小数点数

 同じくコンパイラにいらないので。

その他感想

  • オンラインでアバターを使って発表するための知見が得られてよかった。
  • せっかくセキュキャンに来たのに講師やチューターの方をあまり活用(?)できなかった感があり、もったいない。
  • チューターの方とクローズドな場所でセキュキャンに関するコミュニケーションをとって内容をゼミ内で共有してなかったのはあまり良くなかった。
  • 大学図書館ってやつがめちゃめちゃ便利で、良さげな文献がタダでシュッと出てくる。
  • 週に1回の講義という形態だったため、週初めに問題が起きて週末に質問するか~と思ったらその週のうちに解決してしまい質問がなくなる、などもあった。
  • compilerbookには「このステップができるとhogeのようなテストが通るはずです」のように書かれがちなので、テスト駆動開発っぽいことがやりやすかった。
  • だんだんとセルホスト最悪仕草*3が身についてきた。
  • 再帰下降構文解析アセンブラ、ABI、C言語の仕様に関する知識は大きな収穫だったし、C言語での開発経験(という程のものでもないかもしれないが)を積めたのは非常によかった。

さいごに

 年末までにセルフホストするぞするぞするぞするぞ。

*1:今回はSystem V AMD64 ABI

*2:自分はこのときはじめて_Alignofなるものを知った

*3:「UBなので何をやってもええんじゃ!」、「ま、コードの正しさはGCCが検証してくれるんで」など

2020年のハイライト

 この記事はcoins20アドベントカレンダーの12月1日の記事ですが、時空が歪んでいるので12月2日に書いています。

adventar.org

目次

これはなに?

 自分の2020年を振り返ってマジで自分のことだけを語るやつです。

大学

入学まで

 これが

 こうして  こう

入学後

学年

 大学に入学はしたものの、コロナってやつのせいで大学生っぽいイベントは全て流れてしまった。
 しかしcoins20に関してはオタクがいいかんじにコミュニケーションの場を生成してくれていたので非常に助かった。
 課題の期限や内容、大学周辺の飯情報の共有やイベント、大学の授業実況などの形でライブ感のある受講など、コロナ以前はリアルで行われていたであろうコミュニケーションがわりとでできていた。これがなかったら春学期の履修の時点で破滅していたと思われるので、めちゃくちゃ感謝している。

サークル

 サークルはWORD編集部、雙峰祭実行委員会情報システム局、つくバーチャルに所属、つくバーチャルに所属しており、AmusementCreators、TPCが見学状態。
 WORD編集部には毎週木曜日の対面体育のあと入り浸っている。オタクの部屋の和集合みたいな部屋なのでやたらと居心地がよい。しかしWORDの記事は書いていませんごめんなさい。
 jsysでは何かやった覚えがなく、オタクSlack+αくらいの認識をしている節がある。
 つくバーチャルはVket5に出展するということだったのだが、自分は準備からバックれをカマした(最悪)。土下座をします。
 AmusementCreators、TPCは新歓の時期を逃したのか元からなかったのか知らんけどそういうのがないのでよくわからんね、ということで見学状態で放置している。よくわからんね。

先輩

 先輩とはWORD、jsys、つくバーチャル、VRChatでの関わりが主で、自分は結構先輩と関わりがある方だということがわかってきている。
 どの先輩にもかなり飯を奢られており、かなり感謝している。つくばに引っ越したあとは最悪食生活をしているため、おそらくこの奢りがなかったら餓死していた。
 お礼は後輩への奢りで、とのことなので、後輩への奢りの機運が高まっている。coins21~人材は @azarashi_uni まで言ってくれれば飛んでいきます。

VRChat

 5月くらいにVRChatをはじめて沼へと沈んでいった。
 今ではTwitterもVRC垢にしか見えませんね、になっている。リア垢兼技術垢だったのにどうして…
 一番やってた時期は1日少なくとも10時間はインしてるという感じだった。おしまいです。
 VRChatに関する気持ちを書いた記事も生やしたくなってきた、あとで生やしますね。

Cコンパイラとセキュキャン

 セキュキャンに書類をシュッとしたらなんと選考を通り、参加することになった。
 自分が参加したのはYトラックのCコンパイラのセルフホストを目指すゼミなので、当然Cコンパイラを書くことになる。
 自分はC言語なんもわからず、アセンブラなんもわからず、Linuxなんもわからない人間なのだが、いつの間にかCコンパイラらしき物体が生えておりびっくりした。
 まだセルフホストには到達できていないが、年内に達成したいと思っている。

 セキュキャンが終わったあたりで参加記を書く予定なので、詳しくはそっちに書く。

OS

 coins20に自作OSコミュニティを生やしたにも関わらず何もやっておらずごめんなさい、というかんじ。
 これだけならいいんですが、実は情報科学特別演習でOS関係のなんかをやると言って担当教員にはついてもらっている ∩ 担当教員はいるが履修失敗 ∩ その上でバックれているという最悪の状況なので、どうしたもんかなあとなっている。土下座をします2。

一人暮らし

 9月28日に引越しをした。

 一人暮らしをはじめたんですが、なんと初手から銀行口座の暗証番号がわからないため残高照会も引き出しも不可能(デビットカードのみ使用可能)でスタートを切った。
 この時点で破滅は半分見えていたが、11月18日までは上に書いた奢りなどでなんとか生き延びることに成功。

 しかし、

ということで破滅レースを完走した。タイムは51日、対戦ありがとうございました。

 真面目なことを言うと、このときにはいろいろな人から食料を送って頂きここでもなんとか生き延びることができました。
 送って下さった各位、本当にありがとうございます。なんらかの形でお礼をしたいので、各位は干し芋ややってほしいことなどをしたためて送りつけてくださると幸いです。

さいごに

 coins20各位はcoins20 アドカレに参加しような!

Unityで実行時に外部のフォントファイルを読み込む

 メモっぽいの。

背景

 Unity で作ってるゲームのローカライズ機能を実装する過程で、ビルドした後でも外部のフォントファイルを取り込めるようにしたくなった。

環境

 Windows 10
 Unity 2019.4.4f1

コード

中身

 UnityEngine の Font クラスをフォントファイルへのパスを引数としてインスタンス化したのち、TextMeshPro の FontAsset に変換する。この Font クラスのインスタンスは、本来の目的では利用できないが、TextMeshPro の FontAsset のソースとしては利用できる。
 otf、ttf、ttcの 3 つの形式のフォントファイルを読み込むことができる。

参考

HOWTO: Load ttf font files at runtime - Unity Forum