MJHD

エモさ駆動開発

2022年振り返り 学んだことと来年の抱負

去年の振り返り

mjhd.hatenablog.com

 

早いもので一年も終わり。年々一年経つのが早くなっており、今年は3か月分ぐらいの記憶しかありませんが、振り返ってみたいと思います。

今年学んだこと

今年も、例年に引き続き

  • 低レイヤー周り
  •  CS・数学
  • 哲学・思想

の三軸で色々お勉強をしました。

 

低レイヤー周り

OS

去年の抱負にもあった「OS自作本」ですが、有休消化期間を使って進めました。(実は転職したんです)

ゼロからのOS自作本

ゼロからのOS自作入門 | 内田 公太 |本 | 通販 | Amazon

 

結果としてx86の闇を知ることができたり、マルチタスクの仕組みなど学ぶことができました。x86、OSを作るための機能がモリモリで、逆にARMとかどうしてるんだと心配になっています。

本を進める中で、いくつか罠を踏んでトラブルシューティングをしたのですが、こういった経験ができたのも大きな学びだったなと思いました。

github.com

 

PlayStationエミュレータ

去年の抱負では「GBAエミュレータ作りの続きをやっていきたい」と書きましたが、気が付いたらPlayStationエミュレータ作りに変わっていました。

詳しい内容は記事に書いたのですが、MIPSアーキテクチャに親しみが持てるようになったのは大きな学びだったなと思っています。

また、今までのレトロゲームとは違い、ようやくGPUに近いプロセッサを実装したので、世のGPUドライバがどんなことやってるんだろう~、という疑問がなんとなく想像ついた気がします。

 

現在はCDドライブの実装を続けており、BIOSがデータの読み出しを行ってDMAによってRAMに転送されるところまでは動いています。が、そこから先まだ動作しないため要実装です。何かROMが動くと良いな。

zenn.dev

github.com

 

Flutterのリンダリングパイプライン

これは比較的高レイヤーにはなるのですが、Flutterのレンダリングパイプラインについてたくさん勉強をして記事を書きました。

お仕事でFlutterを触る機会も増えたため、豊富なドキュメントやソースコードを読み漁りました。

PlayStationエミュレータ開発の知識も相まって、GPU~ブラウザの間で行われている処理について何となく全体感が分かるようになってきました。

また意外にも、FlutterとChromeは関連するところが多く、Flutterを学ぶことでWebフロントエンドについても理解が深まりました。もっというとFlutterはReactにも影響を受けているので、少し距離を置いてReactを見つめなおすことができました。

こういう、無関係に思える概念同士が繋がる瞬間はとても楽しいですね。

developers.cyberagent.co.jp

zenn.dev

 

関連して、Flutter系の記事執筆や登壇をしました。一年間で十分深ぼれたんじゃないかな…満足です。

アクセシブルFlutter: Semantics入門 (zenn.dev)

Flutterの課題、Early-onset jankとは何か (zenn.dev)

FlutterのRaster Cacheを追ってみる (zenn.dev)

Flutter前史: ChromeがFlutterになるまで (zenn.dev)

Flutterリプレースの難易度と取り組んだこと | CA BASE NEXT - CyberAgent Developer Conference by Next Generations

 

その他

CHIP-8のエミュレータをzig言語で書いてみたり、学生時代からメンテしているアセンブラとシミュレータが新しい本で採用されたので、アプデを行ったりしていました。

mj-hd/zhip8: chip-8 emulator in Zig (github.com)

mj-hd/ASC-Simulator-and-Assembler: 「算数で読み解く コンピュータのしくみ」より、ASC用アセンブラとシミュレータ (github.com)

gihyo.jp

 

CS・数学

今年はフワフワしてる分野の学び直しを重点的に学習しました。

線型代数(学び直し)

学部でやったころの記憶が完全に吹っ飛んでいたので、放送大学の「線型代数学」を受講しつつ、「実例で学ぶゲーム3D数学」を読みました。

ジョルダン標準形までの一通りを放送大学で復習しつつ、ゲーム3D数学の本で幾何的イメージを付ける、といった流れで実際の活用例まで理解することができ学びだったなと思います。

低レイヤー周りの勉強とも繋がってきて、GPU周りの用語や概念はゲーム3D数学を読んだ後だとスッと入ってきました。

bangumi.ouj.ac.jp

www.oreilly.co.jp

 

統計学(学び直し)

仕事でFlutterのパフォーマンスチューニングをしていて、「統計的有意な差がある」とは何なのか、ちゃんと説明できなかったので学びました。

放送大学の授業内容は理論的な話に持ち込まず、いろいろな統計手法の簡単な原理と特徴の説明と例題を解く感じだったので、まだ少しフワフワしています。

目的の benchmarkhor | Dart Package (pub.dev) というパッケージがどのように統計的解析をしているのかはキチンと説明ができるようになったのでヨシとしますが、自分で検定の設計ができる程度にはどこかで学びたいな…。

bangumi.ouj.ac.jp

 

ブロックチェーン

巷でWeb3というものが話題になっていたので、理論をちゃんと学んでおきたいよね、ということで例の論文 bitcoin.pdf を読む勉強会を3人ぐらいでやりました。ギャンブラー破産問題面白かったです。

おかげで某Web3の本のアレな部分にも気づけました。

とはいえ、大学の卒論がこの辺りだったのであんまり新しい学びはないかも。

 

制御工学

カルマンフィルタの基礎

www.amazon.co.jp

友人と数年間続けている勉強会の題材を考えていて、次に学ぶことに迷いすぎて気が付いたらカルマンフィルタの学習を始めていました。

今まで学んだどの科目とも違う分野で、つまづくことがかなり多いです。脳負荷が高くて良い。

そもそも古典制御をおろそかにしていたので、古典制御を学びつつカルマンフィルタの本を進めています。ラプラス変換、神、ナニコレ。

 

その他

様相論理の本を買って読むなどしましたが、途中で放置してます…。知識論理や信条論理などの面白い派生や、モデル検査など応用の幅が広いしエンジニアにもかなり近い分野なのでそのうち読破したいです。

www.morikita.co.jp

 

哲学・思想

ここ3年?ぐらい、哲学や思想を放送大学の授業や入門書によって学習してきました。最近は入門本ではなくて翻訳書を読み始めています。

以前は独学で翻訳書を読んで撃沈することが多かったのですが、有料の勉強会を見つけたので解説を交えつつ読むことができるようになってきました。

ルネ・デカルト方法序説

方法序説

http://www.the-five-books.com/lecture/34

The Five Booksという、一か月ほどかけて哲学書を読む勉強会に参加し、デカルトの「方法序説」を読みました。

試論を含まない序説だけならかなり薄い本で、内容もそこまで難しくないため、本自体はサクッと読むことができ、デカルトの生き方に学ぶことが多かったです。

例えば、明晰判明という概念はソフトウェア工学とかなり相性が良いのではと感じますし、彼の定める格率は自分より年下の年齢で考えたと思うと素晴らしいなと感じます。

勉強会の方では、時代背景や他の勉強会参加者の意見を聞く場面があるなど、独学で読む数倍の学びでした。

The Five Booksはかなり推しなので来年はライプニッツの「モナドジー」を読む会に参加したいと思います。(むずそう)

 

カンタン・メイヤスー「有限性の後で」

そもそも思想を学び始めたきっかけがグレアム・ハーマンのオブジェクト指向存在論(もっというとOOUI)なのですが、避けては通れないカンタン・メイヤスーの「有限性の後で」を年末年始で読んでいます。

読み始めてから後悔したのですが、先にカントの純粋理性批判を読んでおきたかった…。

有限性の後で

www.jimbunshoin.co.jp

 

趣味

今年はいくつか趣味も開拓しました。

VRChat

www.moguravr.com

お砂糖文化やVR睡眠文化に憧れて、Meta Quest2とゲーミングPCをポチって、VRゲームのVRChatを始めました。気が付いたらTrustedになっててびっくりしてます。

基本的にはワールド巡り(観光)や、DJイベント、フレンドとお喋りがメインの楽しみ方をしてます。お酒を飲みながらVRChatするのが楽しすぎて肝臓がダメになったので、最近はノンアルコールです。

VRの世界には正解がありません。常識的なものはないので、どんな楽しみ方をしても(人に迷惑をかけなければ)OKです。

対面の会話が苦手だな~下手だな~と自分で思うことが多いのですが、VRChatはアバターという仮面をつけた状態でコミュニケーションの成功体験を積むことができるので良いです。似たような報告は色々と見かけるので、こういう仮面舞踏会状態のコミュニケーションって良いものなんだろうなと感じます。

関連して、BlenderやUnityとちょっと仲良くなりました。昔メタセコイア触ったりUnityでゲームを作ったことがあったのですが、あのあたり経験が無駄にならずに済んだ。

 

お絵かき

こちらの記事に触発され、お絵かきの練習を始めました。

note.com

お絵かきは、少なくとも死ぬまでに自分で満足いく程度で良いのでファンアートなど描けるようになりたい、と思っていた夢の一つでした。

そもそも自分は恐らく自分一人でゲームを作りたいんだろうな、と思うことがあり、取り組んでいます。(プログラミングのきっかけもゲームだった)

 

基礎的な練習をしつつ、たまに下手な絵を描いてお絵かきコミュニティに投稿すると少ないですが「いいね」を貰えて嬉しいです。前述したVRChatで使っているアバターのファンアートを描いたらアバターの作者さんがRTしてくれて感動してむせび泣きました。こういう体験ができただけでも始めた甲斐があったのかなぁ…と思います。

それにしても巷の絵師、みんな改めてすごすぎる、上手すぎる。

 

DJ

ひょんなことからDJコン(DDJ-400)を手に入れてたまに小さな仲間内でDJするようになりました。DJライブはずっと好きだったのですが、自分で一度やってみるとパフォーマンスの解像度が上がってさらにライブを楽しめるようになりました。良い。

転職もそうですが、同じ事柄を少しずらした別の視点から観測すると、3Dメガネのように一気に解像度が上がりますね。

 

ゲーム

朝早起きして少しずつゲームをプレイしました。

www.gamecity.ne.jp

www.compileheart.com

www.marv.jp

 

抱負「均し」はどうだったか

去年、抱負として「均し」を上げ、ハードワーク燃え尽きサイクルからの脱却を目指し、コンスタントにパフォーマンスを出していきたいという目標でした。

達成率: 50%、といった印象です。

技術的・人生的な学びもありつつ、6-8月ぐらいに体力・精神的なバーンアウトをしました。

バーンアウトしない計画的なアウトプットというものが大事だと気づかされました。

 

でも、例年2-3回ぐらい燃え尽きてたので多少改善してそうです。気持ちの切り替えができるようになってきて偉い。

 

来年の抱負

去年の抱負の「均し」をより具体的にして「力をうまく抜く」です。

世の中の色々は思ってるより頑張らなくても勝手にどうにかなってしまうものも多いなと思い始めています。(仕事もプライベートも)

ビリヤードの玉のようにせわしなく行ったり来たり、どうしても生き急いでしまうところがあるので、来年はうまく肩の力を抜いてドッシリ構えていけたらなと思っています。