2020年12月第3週レポート
インプット
📝 Power Automateについて調べた
ひょんなことからPowerAutomateに触れる機会が巡ってきたので、MS公式ドキュメントベースでPowerAutomateについて調べました。ざっくりいうとMS製のRPAツールでOffice365(SharePointとかTeamsとか)との親和性が高く、Office365を業務で使っているユーザならばいろいろできそうです。 実際に触った感想としては、基本GUIでポチポチするだけで設定できるけど、ちょっと凝ったことをしようとするとプログラミング的な思考というか、正常系/異常系ともに仕様を明確にして各コネクタの挙動を理解して…とわりとパワーは必要なので、現時点では便利ツールというよりはDSLに近いかなあと思っています。
Microsoft Power Automateのドキュメント
📝 ValueObjectについて思いを馳せる
僕はValueObject&完全コンストラクタパターンを多用しています。ValueObjectについては以下の記事がとても参考になります。
設計要件をギッチギチに詰めたValueObjectで低凝集クラスを爆殺する
その一方、以下の記事にもあるように、実装の面倒くさいというのも確かに感じています(のいえさんが作ったC#用ライブラリすごい!)
UnitGenerator - C# 9.0 SourceGeneratorによるValueObjectパターンの自動実装とSourceGenerator実装Tips
Equalいちいち実装するの面倒、内部のプリミティブ型と同じ演算を定義するの面倒と、結構うへぇと思いながら実装することもあります。EqualについてはValueObjectの抽象基底クラスを用意して各プロパティの等価性を評価する、みたいなデフォルト実装を用意して多少は負荷を軽減してはいますが、それでも面倒なものは面倒。
今はその面倒さよりもメリットの方が上回っていると感じているのでスタンスを変えるつもりはないのですが、もう少し簡単に扱えるような仕組みをTypeScriptでも考えてみたいなあと思いました。
📝 Rustのフォーマット文字列について調べた。
引き続きRust勉強中。 GLBコンバータを書こうと思ったのですが、glTFの構造体定義でほとんど時間を使いそうであまりおもしろさを感じなかったので、エミュレータの実装に題材を変更しました。ディスプレイ出力やCPU内のレジスタ、スタック、プログラムカウンタの状態をとりあえず標準出力に出したかったので、これまでふいんきで使っていたフォーマット文字列についてちゃんと使えるようになろうと思い調べてみました。
[Rust] 文字列のフォーマット指定(println! / format!)
アウトプット
🛠️ Chip-8をRustで実装した
Rustの勉強がてら、Chip-8のエミュレータを実装してみました。
テストROMを通すこと目標に実装。条件分岐に使う0x3と0x4のオペコードはパス。 pic.twitter.com/gkqrOnpMY2
— d_yama (@dy_karous) December 19, 2020
ディスプレイ pic.twitter.com/Z5aqsGTVJj
— d_yama (@dy_karous) December 20, 2020
だいたいのROMが動く気はするとこまでは実装した。 pic.twitter.com/knWLr1WmMc
— d_yama (@dy_karous) December 20, 2020
Chip-8は超Tinyな仮想マシンで、エミュレータ実装の第一歩としての題材としてよく使われるようです。内部のCPUは35個の命令セットを持ち命令長も固定とかなりシンプルで実装は用意でした。割り込みがないのでちょっと面白みには欠けるのですが、1〜2日程度で仕様把握から実装までだいたいもっていくことができました。
次はx86のエミュレータのRust実装が面白そうかなー、と思っています。ちょうど書籍がKindle Unlimitedで手に入ったことだし。