hsimyu's diary

ゲームなどをします。

10/18 ラ レヴュー ド ソワレ

10/17 (水)

ごはん

朝: オールブラン

昼: サンドイッチ、サラダ、わかめスープ

夜: 稲荷、ハンバーグ、切り干し大根

仕事

細かいのをぷちぷち。今月のコードフリーズは心穏やかに迎えられそうだ。明日はドキュメントをひたすら修正する予定。あとは設計。

10/18 (木)

ごはん

朝: オールブラン

昼: 鰆のレモンマスタードソースがけ

夜: たらこスパ、餃子スープ

仕事

レビュー対応とかドキュメント更新とか。改めてザーッと見ていくと古いドキュメントが結構あって、悲しい。API リファレンスでもコードスニペットでもないドキュメントを継続的にメンテしていくためのベストプラクティス、何かないかな。「このページは〜〜が責任持ってメンテする」みたいに担当つけるといいのかな〜と思ったけど、逆にメンテサボってもバレなくなる可能性が高くなって終わりな気がする。

明日もドキュメント。

みかん

みかんの写真無かったのでこれで我慢していただけると幸いです。

その他

みなさんはもう「少女☆歌劇 レヴュースタァライト」劇中歌アルバムVol.2「ラ レヴュー ド ソワレ」を何枚買いましたか?僕は1データ買いました。

電子データのアルバムを数える単位は何?

3日くらい家でコード書く気力が出てきていない。うーん。

10/16 ゾンビ

10/16 (火)

ごはん

朝: チーズパン、野菜スープ

昼: お弁当(ししゃも)

夜: 切り干し大根の煮付け、海藻サラダ、牛肉の玉ねぎソース煮込み、たらこ

仕事

昨日の続き。来月の作業に取り掛かるために今月用の細かいのをほぼ終わらせた。明日も引き続き。リファクタの件は GOOD な感じに書き直せたので良かった。

みかん

ダンボールに入って首だけ出してた。写真撮る前に逃げられた。

ゾンビランドサガ

始まり方にインパクトがありすぎる。いや大体予想できたけど!というかサガってそういうことかよ!!!!!この宮野真守、若干鳳凰院凶真っぽくない?

コンセプトはゾンビxアイマスですか?ヘドバンしてるシーンの絵面がヤバすぎる。

あのギャルヤンキーは絶対いい人ですね。たまごっち飼ってるし。

2話観たらマジで何を目指してるアニメなのか分からなくなってしまった。色んな音楽ジャンルを席巻していくアニメか?

std::intptr_t のユースケース

やっぱりあんまりいい例が出てこない。 がメモリ管理コード書く時にめっちゃ便利だよ!という意見はあった。

stackoverflow.com

これは何となく分かる。ポインタには色んな演算子が定義されてないから、比較とかビット演算とか、その辺の演算をアドレス値同士で安全にやりたいという要求が特に低レイヤーから出てくるのは分かる。

ただ intptr_t を使う必要性はあんまり分からない。上記記事でも uintptr_t のが良いよという意見が多い。汎用整数として int が使われてるシステム内で型変換なしに比較とかやるためかな?

その他

先週、研究関連でエラー箇所分かる?ってメールが来たので返した件、6日くらい返事なし。

お前、ほんまに、ほんまに……

10/15 This is

10/15 (月)

ごはん

朝: オールブラン

昼: 豆乳担々麺

夜: まぐろ漬け丼、ししゃもフライ、焼き厚揚げ、ナスの味噌汁

仕事

いい感じ。worktree リポジトリ生やしまくったので小さい課題をパイプライン処理する時の効率が激上がりした。4リポジトリくらいあると大きい作業2個小さい作業2個くらいでいい感じっぽい。たまにビルドするリポジトリ間違えたりするけど、そのうち慣れるだろう。そろそろ来月末向けの作業を始めたいので、その前準備とか。

Emscripten

C/C++LLVM フロントエンド → LLVM-IR→ EmscriptenJavascript

という変換をする OSS プロジェクト。OpenGLWebGL に変換したりもする。性能とかどうなんだろ?というか「Webで動かしたい」が目的だと思うので、バックエンドで出力するならむしろ WebAssembly の方が良さそう。

qiita.com

この辺とか?

GL言語間の変換だけの層と、LLVM → 「Web で動くコードの出力」という二層に分けた方がむしろ汎用性高いのではと思う。もちろん Emscripten が既にそうなっている可能性もありそう。

ReSharper

jetbrains が出してる C# (というか .NET) で開発してる時に使える Visual Studio 用の便利ユーティリティ。リファクタ、コード解析、コーディング規約チェック、InteliSense 拡張とか?

https://www.jetbrains.com/resharper/

有料らしい。

std::intptr_t とか

てっきり int* を汎用的に表すみたいな型かと思ってたが、違った。ポインタ値を int 型で持つ、が正しい。

    int value = 42;
    std::intptr_t pointer_value = reinterpret_cast<std::intptr_t>(&value);
    std::cout << std::hex << "0x" << pointer_value << std::endl;

std::uint16_t とかもある。

何に使うの?

  1. ポインタ値を一意な ID として利用する
    • 変数アドレスはそのままユニークな ID として使える。(もちろん同じメモリ上限定)
  2. コールバック関数に渡す引数として、任意のオブジェクトを設定する

    つまり以下のような「整数型ひとつをコールバック関数の引数として渡せる API 」を書ける。

        void callback_api(
            std::function<void(std::intptr_t)> callback, std::intptr_t arg)
        {
            callback(arg);
        }

これができると何が嬉しいか?

あるオブジェクトへのポインタを一度 intptr_t に変換して、コールバック関数に渡す。コールバック関数は任意のオブジェクトを受け取れる。

テンプレートだとこれは無理?と思って適当に書いてみたら動いたので無理ではないっぽい。が、下記のような感じで「 X* という型を静的に知らないと無理」になる。

        struct X {};
        
        void callback_api(
            std::function<void(std::intptr_t)> callback, std::intptr_t arg)
        {
            callback(arg);
        }
        
        void on_call(std::intptr_t arg)
        {
            // do hoge
        }
        
        template<typename T>
        void callback_api_template(
            std::function<void(T)> callback, T arg)
        {
            callback(arg);
        }
        
        template<typename T>
        void on_call_template(T arg)
        {
            // do hoge
        }
        
        int main()
        {
            X* x = new X();
            callback_api(on_call, reinterpret_cast<std::intptr_t>(x));
            // => 呼べる
            callback_api_template(on_call_template<X*>, x);
            // => 呼べる
            callback_api_template<X*>(on_call_template, x);
            // => 呼べない (on_call<T> が実体化しない)
            callback_api_template<X*>(on_call_template<X*>, x);
            // => 呼べる
            ...
        }

wandbox: https://wandbox.org/permlink/azLEp3c2mScKwI0s

実行時に何が送られてくるか分からないような状況でのポインタ型として使うと便利?でも結局オブジェクト型に戻すなら何かしらの方法 (タグ送るとか) で識別して reinterpret_cast しなきゃいけないんだから void* でいいのでは?という気持ちになってしまう。もう少し応用例を調べた方が良さそうだ。仕事には特に関係ありません。

エアロバイク

折りたたみタイプも結構ある?最低価格3万円から、くらいの感覚でいたけど、2~2.5万出せば良さそう。ジムに1回800円(で1時間くらい)かけるよりは長期的に効率いいよな~という気がしてきた。あと、1F 住みなので下への音とか気にしなくていいのもマッチしてる。もう少し検討する。

その他

ダクソリマスタードのめちゃくちゃ丁寧な説明、なぜか面白さを感じてしまう。Switch で新しいユーザー層狙ってるのかな。

www.youtube.com

猫えさ、あごニキビが改善しないかな~というのを狙って新しいのを買ってみた。 明日届く予定。今の食べ終わったら変えてみる。

10/14 ピエリ守山

10/14 (日)

ごはん

朝: なし

昼: アフタヌーンティー

夜: うどん、パン

みかん

アフタヌーンティー

初めてピエリ守山の方に行ってみた。台風被害がすごくて笑った。

妻の希望でアフタヌーンティー。一応婚約記念日ということになっている。

ティーセレクションを茶葉瓶付きで選ばせてくれるの良かった。あとマスカットDAIFUKUが美味しかった。

CaveStory+

ルート分岐とかあるらしい。カーリー生存とかできるの!??!聖域???みたいな感じで2周目をやったほうが良さそうということが分かってきた。

ヒューマンリソースマシーン

クリアした。最後の方で最適な行数とか手順数を一発で達成できると嬉しい。ソートは流石に行数が膨れて辛めだった。

あとエンディングが良い。これ多分セブンビリオンヒューマンズの展開に繋がるんだよな。

UQ ホルダー

17巻が届いたので17巻と18巻を読んだ。回想多めだけどネギまファンが読みたかった部分を的確に提供してくれるので嬉しい。あと、カリン先輩の話が予想以上にスケールでかくて笑ってしまった。

その他

ベビーモニター: https://my-best.com/1568

ふむー

10/13 だらだら

10/13

昼まで寝て、少しゲームして、イオンに買い物にいって、ゲームしてたら一日が終わった。学びのない一日だった。そういうこともある。

外を歩いてたら冬の始まりを感じた。いい空気。

ごはん

朝: オールブラン

昼: チーズバーガー、チキンフィレオカップヌードルカレー

夜: そば

みかん

色んな寝方。

CaveStory+

クリアした。スーパーミサイルがつえー。カーリーちゃんがボンベを主人公に託して死ぬところで悲しくなってしまった。

いいゲームだったが、ボリューム感的に Switch 版 4000 円は流石にちょっとふっかけすぎだと思った。

ヒューマンリソースマシーンとセブンビリオンヒューマンズ

Switch 版 20 年目くらいで止まってたので進めた。セブンビリオンヒューマンズは PV 見た感じだとマルチスレッドプログラミングをやらされるっぽい。絶対楽しいやつじゃん。

その他

Oxygen Not Included を買おうかどうかずっと迷っているが、早期アクセスだしまだ焦って買わなくてもいいかな〜という気持ちもある。

なんかマルチプレイのゲームやりたいんですけど、いい案が思い浮かばない。

10/12 コードレビューありがたみ

10/12

ごはん

朝: オールブランとサンドイッチ

昼: 焼きそば、みたらし団子、タコス、クレープ、ステーキ丼、甘いもの

夜: これから。ラーメンかカップ焼きそば予定

みかん

仕事

リファクタとか新しいAPI書いたりとか。分散野郎業は特に進まず。

昨日パフォーマンス改善のために少し可読性を犠牲にしてしまった部分について、「背景をしっかりコメントとして書いてるのは良い、良いんだけどもう一歩進んで可読性も保つ工夫があるとなお良い」という指摘を貰った。仰る通りで、一人で計算用コード書いてた時の姿勢からかパフォーマンスが良くなったからまあ良し!みたいな気持ちがちょっとあった。反省。よさげなリファクタ案は思いついてるので月曜日に修正投げようと思う。 こういう指摘を貰えるの、めっちゃ有り難い。めっちゃ有り難いので、Confluence にひたすらレビューで指摘された点を書くページを作って配属時から記録している。

その他

研究用コードのエラーについて問い合わせが来た件、「エラーログ読めば分かる通りだけど、こうしたらいいのでは?」って返信したら返答無し。怒っていいか?

GameMakerStudio2 ちょっと触ってみたくなってきたな。

と思ったけど無料版は機能制限がすごい?完

10/11 エラーログを読んでくれ

10/11

ごはん

朝: 鍋の残りにぶちこんだうどん

昼: サンドイッチ、サラダバー、ミネストローネ

夜: とりにく

仕事

ビルド業と計測業の続き。どちらもケリをつけた。unordered_map のキーに文字列を使っているのでアクセス時にハッシュ計算が走っていて微妙に遅い、みたいなところを気にすることになるなんて。負荷かかってる部分特定するのを含めて合計で3時間〜4時間くらい使ったけど、30 マイクロ秒くらいしか稼げなかったのでコスパ悪かった気がする。どうせだからもうちょっと欲張って別のところも書き直せばよかったかな……。まあ全体から見たらゴミみたいな量なので良し。

明日はあんまり時間ないけど、3つくらい小さい調整出せるといいかな〜

Mt:G アリーナ

蝉さんから誘われたので、ちょうどいいし始めようかな。

「フレンド対戦とかはこれから実装です!」アー

https://calmmtg.hatenablog.com/entry/2018/07/26/【MTG】MTGアリーナのススメと始め方【雑記】

https://calmmtg.hatenablog.com/entry/2018/08/01/120000

は、ハースストーン

エラーログを読め

昨日の件、とりあえずログないとよく分かんないからエラーログ送って、って言ったら、めっちゃエラーの原因(入力データが悪い)が書いてあるログが送られてきて頭が混乱した。英語だからか?英語で出力したから悪いんか?

Cave Story+

やったことなかったので、Switch 版をやり始めた。クリアしたらケロブラスターやるぞ〜

武器が育ってくのが面白い。敵を倒した時の爽快感が気持ちいいゲームかしら。

その他

Visual Studio の spec は build specification の略?

http://dlit.hatenablog.com/entry/2018/10/10/080521

https://anond.hatelabo.jp/20181010122823

https://anond.hatelabo.jp/20181011010934

流れが面白い。業界事情が明らかになるのはよい。

10/10 お湯がうまい

10/10

ごはん

朝: オールブラン

昼: お弁当(魚、春巻)

夜: 鶏きのこ鍋

仕事

メインの仕事は小さい調整入れつつ、別件。git worktree でワーカーリポジトリを生やしまくっていた。submodule の init も作成時に行ってほしいな。面倒だから。

午前午後ともにひたすらビルド業。午後は計測屋さんもやっていた。

妊婦健診

少しだけ早く退勤して同行。26週目。特に問題なし。お疲れ様でした。

Protocol Buffer

次のような感じでメッセージを定義する。各フィールドには整数値のタグをつける。

    // 点
    message Point {
      required int32 x = 1;
      required int32 y = 2;
      optional string label = 3;
    }

XML より小さくて、XML パースするより高速(という主張)

https://ja.wikipedia.org/wiki/Protocol_Buffers

RPC で実際に使われている?JSON, XML に代わるシリアライズ形式として有望?

qiita.com

上記の記事だと、シリアライズよりもスキーマ(定義?)言語として優秀という意見。

Protobufはスキーマ言語だ!

一般的にはProtobufは「Googleが内部で利用しているシリアライゼーション形式」とか解説されていて、それは嘘ではない。ただ正直なところ、幾つかの理由でシリアライゼーションはどうでも良いと思う。

プロセス内部の簡素なデータ構造をシリアライズするためにスキーマ定義用のドメイン特化言語があって、こいつがなかなか優秀だというのがProtobufが生き残っている理由だろう。

言語仕様としてタグが定義されてて、こいつがあることによってフィールドが追加されたりしてもシリアライズが失敗しないように(互換性が保たれるように)なっているというのが重要?

色んなところで使いまわすためのデータ構造を定義するため(だけ)の形式で、ここから各種アプリケーションで使うためのデータ構造(定義)を自動生成できる。

スキーマ言語が必要なのはおわかり頂いたとして、なぜProtobufが良いのか。 簡単に言えば、シリアライゼーション形式としてJSONが良いのと同じ理由だと思う。

簡素で可読で、プログラミング言語から独立で、任意のデータを表現できるわけではないが十分に適用可能範囲が広い。すべてのニーズを満たそうとして仕様が膨れあがったりしていない。

仕様が小さいので、実装間の意図せぬ非互換性で苦しめられることが少ない。そして、周辺ツールを簡単に開発して足りない物を自分で補える。

納得

あくまでデータ構造定義のためだけの言語で、データから切り離されているというところがミソっぽい気がする。

その他

紅葉さんのおっぱい、デッッッッッッッッッッカ

スケールを間違えて提出したのか?

朝起きたら院生時代に共同研究してた先生から「コードにバグが出てて分からんから助けて〜」みたいなメールが来てたんだけど、エラーログなしで推察するの無理すぎる。ワロタ。

10/9 みかん 3.4 kg

10/8

天気が良かった。昼まで寝て、ご飯食べて、昼寝した。

ごはん

昼: サンドイッチ

夜: ナポリタン的なもの

Rust

Programming Rust を読み始めた。

  • ? で Result<T, E>を展開するのは便利。なにかエラーが起きたら、それがそのまま関数の返り値になる ⇒ Result を返す関数内でだけ使える?main 関数は返り値がないので、main 内では使えない。初心者がよくやるミス
  • Result<T> = std::result::Result<T, Error>は構文糖的に std::io モジュール内でj定義されてる。

その他

PowerShell で time コマンド的なことをやるなら Measure-Command コマンドレット

    > measure-command { command }

10/9

ごはん

朝: オールブラン

昼: お弁当(オムレツ、ウィンナーとか)

夜: 焼き魚

仕事

先週末に書いた議事録の清書とか、先週入れたデカいPRの細かい調整とか。割りと進んだ感があった。やはり見た目が良くなると満足感が出る。仕事が増えたので明日はそちらを優先で潰す。

物性理論大学院生の日常〜研究室は解散しました

面白かった。おすすめです。

物性理論大学院生の日常〜研究室は解散しました(新井パグナス) - カクヨム

std::decay

decay - cpprefjp C++日本語リファレンス

配列と関数ポインタに関して、関数テンプレートと同様に推論された型を取得する。

???

コードを見たらなんとなく分かった。クラステンプレートに参照渡しできない?配列と関数ポインタに関して、関数テンプレートの規則に従って推論された型を取得するために使う?

    #include <type_traits>
    
    template <class T1, class T2>
    struct my_pair {
      T1 first;
      T2 second;
    
      template <class U1, class U2>
      my_pair(const U1& a, const U2& b)
        : first(a), second(b) {}
    };
    
    template <class T1, class T2>
    my_pair<T1, T2> my_bad_make_pair(const T1& a, const T2& b)
    {
      return my_pair<T1, T2>(a, b);
    }

こんなテンプレートがあるときに、

    auto p = my_bad_make_pair("hello", "world");
    // => コンパイルエラー: 配列をコンストラクタの初期化子で初期化できない

これはコンパイルが通らない。なぜなら、この場合 T1, T2 は const char* ではなくて const char[6] として推論されていて、U1, U2const char[6]& と推論されている?(この辺合ってなさそう)

これを関数テンプレートの規則に従って const char* と推論されるようにしたい。このような時に std::decay が使える。

    template <class T1, class T2>
    my_pair<
      typename std::decay<const T1>::type,
      typename std::decay<const T2>::type
    >
      my_make_pair(const T1& a, const T2& b)
    {
      return my_pair<
               typename std::decay<const T1>::type,
               typename std::decay<const T2>::type
              >(a, b);
    }

std::decay は以下のことをする。

  1. 参照外し
  2. 配列型なら、ポインタに変換
  3. 関数型なら、関数ポインタに変換
  4. そうでないなら、const, volatile 外し

こうやってクラステンプレートに渡す型を std::decay を通せば、コンパイルできる。

    // OK
    // decltype(q) == my_pair<const char*, const char*>
    auto q = my_make_pair("hello", "world");

参考:

なんか理解しきれてないので、もうちょっと調べよう。

その他

Marble It Up!: 面白そう

jp.ign.com

10/7 amadeus

10/7

ごはん

昼: オールブラン

昼: たこやき、餃子、唐揚げ、小籠包

夜: つけめん

大津祭

行ってみた。The 地元の祭り、って感じだった。グルメ祭りみたいのも一緒に開催されてて、選んだ食い物が割と当たりで良かった。

おっさんの存在感すごいな。

シュタゲゼロ

おもしれー。いくつかの後出し要素はあるものの、破綻なくβ世界線が進んでる気がする。

あとオカリンがまともだから、「おいバカ!そこで厨二病やめろ!!」みたいなイライラがない。

WORK×WORK

インストラクターバトルの発想は面白い。が、シーン切り替え毎の Loading が地味に長くてちょっとフラストレーション溜まる。

TV 画面でやる必要はなさそうなゲームなので、携帯モードで地道に進めるぞ〜。

ドラガリアロスト

イベント、信頼度稼ぎが結構渋くて辛い。ガチャは何か割りと虹が出てる気がする。

育成の道筋が分かりやすいので育てやすいが、結構沼感強い。

ベビーカー

四輪(2タイヤx4)のタイプが良さそう。ちゃんとタイヤが回転するやつ。あと持ち手の安定性にかなり差があることが分かった。実際触って気に入ったのを買う方が良さそうだ。