hsimyu's diary

ゲームなどをします。

10/13-15 首が痛い。

10/13 (日)

晴れているので Nintendo Live を冷やかしにいった。が、人が多くて体験並ぶのもな〜って感じで、ぶらーっと回って国際会館周りの空気を吸って四条へ。タピオカ

なんだかずっと頭がぼーっとしていて、なかなか大変だった。低気圧?妻が娘の寝かしつけをしている隣で、娘より先に寝落ちたらしい。そのあと体の上にみかんが乗っていた記憶がうっすらある。

ごはん

朝: トースト

昼: シチュー?

夜: シチュー?

Docker image と Docker compose の構成を可視化

Reverse-engineer docker files and visualize docker-compose files

https://itnext.io/reverse-engineer-docker-files-and-visualize-docker-compose-files-80a86c33e031?source=rss----5b301f10ddcd---4

dive

docker image を探検できる。

https://github.com/wagoodman/dive/releases/download/v0.8.1/dive_0.8.1_linux_amd64.deb

dive hoge_image:latest

CI=true dive hoge_image とすると、CI ビルドプロセス上で動かすこともできる。

Docker-Compose-Viz

Docker-Compose の記述内容が GraphViz で 可視化される。コレ自体も docker イメージとして動かせる。

docker run --rm -it --name dcv -v $(pwd):/input pmsipilot/docker-compose-viz render -m image docker-compose.yml

10/14 (月)

あまり天気が良くないので、遠出はなし。娘と二人だけでお散歩したり。

みかんの顎の毛が剥がれ落ちて血が出ていた。顎ニキビの悪化による炎症?全然改善しないので、病院に行くことにした。

放課後さいころ倶楽部

ボードゲームアニメ。休日に活動するなら放課後じゃないのでは……というところは置いといて、ボードゲーム紹介アニメとしては中々いいのでは。視聴継続予定。

本好きの下克上

作画とか演出が朝放映の子供向けアニメな雰囲気で、そこに異世界ものな脚本が載ってるみたいなアニメ。意外に味がある。というかこの主人公、文字書いて興奮するのは本好きというか、本当の意味での活字中毒では?予想に反して、知識無双みたいなことにはならなさそうなのがおもしろい。たぶんちまちま観ると思う。

ごはん

朝: オールブラン

昼: 焼きそば

夜: いいしゃぶしゃぶ

AT&T 記法

%rax のように、レジスタに % がついている。

左が src、右が dest

mov $1, %eax ; comment

; 以降がコメント

GCC インラインアセンブリの文法と互換性がある。

Intel 記法

レジスタは % なしで記述する。

左が dest、右が src

mov eax, 1 # comment

# 以降がコメント

10/15 (火)

仕事は不調。首が痛いのと、なんだか色々と進みが悪くて一瞬で業務時間を消費してしまった。ウーン。docker volume 全然わからん。気持ちがわからん。

娘は叫ぶ。キッチンの方へ向かっていくので途中で止めると、奇声を上げて怒るようになった。「自分はこれがしたいのに!」みたいな欲求が強くでてきたのかもしれない。

僕ヤバ

やばいよ!山田が「!」となるコマ、全部好き。 小林、気付いてるだろ流石に!!!!

ごはん

朝: オールブラン

昼: 肉いため

夜: 焼きかます

C++: scoped_allocator_adaptor

ネストしたコンテナにアロケータを適用するためのもの。

    #include <vector>
    #include <scoped_allocator>
    #include <boost/interprocess/managed_shared_memory.hpp>
    #include <boost/interprocess/allocators/adaptive_pool.hpp>
    namespace bi = boost::interprocess;
    template<class T> using alloc = bi::adaptive_pool<T,
                                        bi::managed_shared_memory::segment_manager>;
    using ipc_row = std::vector<int, alloc<int>>;
    using ipc_matrix = std::vector<ipc_row, std::scoped_allocator_adaptor<alloc<ipc_row>>>;

のように書くことで、ipc_matrix 内の ipc_row の各要素は外側の scoped_allocator_adaptor を通して確保される。具体的な挙動はあまりよく分かってないので、使ってみないとなんとも。

10/11-12 台風

10/11 (金)

娘が早起きでわれわれも早く起きる。早めに帰りたいので早めに出勤することにした。

仕事は可視化屋さん、自動化屋さん。色々と一区切りで、まあまあ気持ちよく週末を迎えられる状態で退勤。

台風だ〜

Kibana の気持ちになる

集約する→一定範囲のレコードをまとめる

  • X 軸で集約: 1日毎にまとめる
  • Y 軸で集約: 一定範囲ごとにまとめる

バケット: クエリ対象になったレコードが入っている

  • バケットに入っているものに対して X 軸を指定する

メトリック: 各レコードの何を表示するか

グラフの種類:

  • Line: レコードごとに対するメトリックを線でつないで表示
  • VerticalBar: 積み上げグラフ、棒グラフなど

TIPS:

  • 1日に1レコードしかないなら、Max でも Min でも平均でも同じ

Canvas

おれの体重

71.80 kg

ごはん

朝: オールブラン

昼: まぜそば

夜: 鶏肉、もやしナムル、焼売スープ

10/12 (土)

娘はおにぎり食べてみる。お粥じゃなくても食べられた!ママ〜って言える回数が増えた。

関東は台風で大変そうだが、こちらは特にライブ感なし。ここまで雨が酷いと結構な被害状況になってそうだなあ……。

みかん

ごはん

朝: トースト

昼: おにぎり、米粉パンケーキ

夜: うどん、蒸し鶏

10/8-10 あ

10/8 (火)

VM の用意ができたのでお世話を開始。初めて docker を実運用したが、docker-compose が便利で一日でベース環境ができた。なるほどなあ。

最近ターミナル上で生きる機会が少なかったのでほとんどまともに環境整備してなかったんだけど、二年ぶりに dotfiles を引っ張ってきたら vimrc が全然動かなかった。辛いな~。

娘、ちゃんと顔をこっちに向けて呼びかけの音声を発してくることが増えた。おれの名前は「あ!」です。

ごはん

朝: オールブラン

昼: 豆腐チゲ

夜: 豚肉と野菜炒め

10/9 (水)

仕事は細かいこと色々。まあまあ成果が出ている。

娘はおしゃべりがこれまでになく多い。すごいぞー

みかんは悪い子。おれの右手がボロボロになっていく。あと、最近家にいるとずっと鼻の中が痒くて、猫アレルギーかもしれん。

Logstash: filter: Aggregate

task_id でイベントをまとめて一つにできる。code 内で ruby hash な map 変数に値をためていくイメージ。

ごはん

朝: オールブラン

昼: 豆腐

夜: 豚肉

10/10 (木)

仕事は Logstash をいじいじ。一日やっていたら、なんとなく ELK 界の気持ちがつかめてきた。

娘は呼びかけが多い。いいぞ〜

なんだか眠かった。

Elasticsearch: マッピング

データの登録方法を mapping と呼ぶ。RDB におけるテーブルスキーマにあたる。基本的には Elasticsearch が自動で推測してくれる。

動的マッピングの調整をするのは、基本的に elasticsearch 側でやる

array より nested?

https://qiita.com/nakamura-tsuyoshi/items/69b37f1386e4eac134f4#array-datatypeへのクエリーを投げる

https://medium.com/hello-elasticsearch/elasticsearch-nested-type-vs-array-objects-2ea7bac68ed8

[ {"key": "value"}, {"key": "value2"} ] のようなデータを突っ込む場合は nested にする方がよい。 -> 間違いだった。nest をやめろ

ごはん

朝: オールブラン

昼: 豚肉

夜: 鯖

10/6-7 priority queue

10/6 (日)

お昼に妻が友人とランチということで、おれは特に何もしない日。娘も一緒にお出かけしていったが、人見知りもせず、だいぶ良い子にしてたようだ。

夕方は髪の毛を切る。特に希望はないので毎回同じくらいの長さまで切ってくれればなんでもいいんだけど、なかなか定量的に伝わらないのが難点。

あとで読むリスト・あとで調べるリスト・やりたいゲームリスト・読みたい本リストの運用、優先度付きキューにしたら「次に何やろうかな」の判断コストが減っていい感じに。特に、空き時間ができた時に都度選ぶ方式だと、どうしてもそのウィンドウ内で完結するものを選んでしまったりして重いものが残りがちだったので、空き時間の幅を考慮せずに手をつけていくことにした。

ごはん

朝: パン

昼: チャーハン

夜: サイゼリア

10/7 (月)

仕事は色々雑務を潰す。先週スクリプトのバグかと思ってたやつは結局ツール側の不具合を洗い出せてたようで、QA として効果を発揮していたという結果に。まだテスト側を信用できないのでツール側不具合と断定できないのが難点だが、それもそろそろ解消されるだろう。

自動テスト、ウィンドウフォーカス周りの処理が上手く行かずに失敗することが多くて難儀していたが、今日ついに天啓がおりてきて「どんなツールでも超高確率でウィンドウを前面に表示させることができちゃう」技法を発明した。勝ったな……。

娘は手づかみ食べに挑戦してみるも、バナナが手から飛んでいった。

あと、うどんトライ(3回目)してみたら発疹が出てしまったようで、小麦アレルギー疑惑は消えず。(前回は大丈夫だった)やはりアレルギー検査したほうがいいかも。

ごはん

朝: オールブラン

昼: ロースカツ

夜: さんま定食

10/3-5 ママ

10/3 (木)

朝は娘のおしっこ漏れでドタバタ。

仕事はスクリプトのメンテと作成。CI マシンでだけほぼ確定で発生するエラー、謎すぎ。

ムートくんが docker on win のインストールに苦しんでるのを応援してたら、おれも docker お世話太郎になることになった。来週で docker のプロになるか。

勤務時間が4時間くらい足りてない。帰る時間は遅くしたくないので、早朝出社を心がけねば。

FF12TZA

ドンアクガばら撒いてくるボスが出てきて萎えた。ガンビットってどのくらい自由に設定できるんだっけ、というのが気になってプレイしてたけど、概ね把握できたのでもういいかなー。

ごはん

朝: オールブラン

昼: 米

夜: 唐揚げ

10/4 (金)

仕事は引き続きスクリプトのメンテとか、ビルド屋さんとか。自動テスト基盤の課題が見えてきたので一日でガガーっと全部解決した。テスト、大切だけどひたすら書くフェイズになると創造性がなく楽しくないので、どうしても下回り改善とかをやっている方が楽しくなってしまう。が、がーっと作りきってメンテフェイズに移行した方が精神に良さそう。

ライザのアトリエを買うかどうか迷っている。

みかん

ごはん

朝: オールブラン

昼: どんぶり

夜: 餃子

10/5 (土)

娘が夕ご飯前に愚図り始めたので書斎で一緒にアンパンマン観てたら寝てしまった。パパの膝の上で寝るのはかなりレアかもしれない。

「ママ」と明確に聞き取れる発声をした!!ママは感極まって泣いてた。

今後の人生計画の見積もりをした。なんとなく今後 25 年くらいのビジョンが見えた。問題はグローバルな予測が見積もりの中に入ってないことですが……。

ごはん

朝: パン

昼: 焼きそば

夜: ?

10/1-2 唐揚げ

10/1 (火)

仕事はミーティング多め。あまり進捗なし。先輩のタスクが積み上がってて大変そうだったのでいくつか引き取る。

娘はまあまあご機嫌?少しおしゃべりの種類(口から出てくる音のタイプ)が増えてきた気がするけど、まだ大人の真似はなし。

FF12TZA

Switch Lite 買ったので通勤時間で再開。敵が多すぎるよ~~倍速モードないと絶対に投げてしまう。もしかしたら昔無印やった時はボムと戦ったあたりで投げたのかもしれない。記憶がない。

ごはん

朝: 黒糖パン

昼: 肉炒め

夜: お好み焼

10/2 (水)

仕事は今後のための新しい布石をいくつか打った。VM お世話太郎

娘はいい子。京都へおでかけしたらしい。

きっちり時間を決めて寝かしつけをするようになってから、寝かしつけは基本的に妻にお願いしてきたのだが、そろそろおれでも大丈夫なんじゃない?と思ってトライ。だめだった。ママがいない時の泣き方で20分くらい泣いて、ママが出現したら2分くらいで寝た。まだ駄目かあ。

ごらく部振り返り (10 月)

■9月良かったもの

■10月の予定

■今オススメしたいもの

マガポケのマズ飯エルフ~ってやつが結構好きで読んでる。チケットで1日1話読めます。

ごはん

朝: オールブラン

昼: 鶏肉

夜: 唐揚げ

Live++

C++ ホットリロード用のミドルウェアUE4 4.22 から組み込まれている。

https://molecular-matters.com/products_livepp.html

https://molecular-matters.com/docs/livepp/documentation.html

    // DLL のロード
    HMODULE livePP = lpp::lppLoadAndRegister(L"pathToLivePP", "AGroupName");
    
    // Enable Live++ for the calling module (EXE or DLL) and all its import modules (DLLs).
    lpp::lppEnableAllCallingModulesSync(livePP);
    // ↑ は DLL 側では呼んではいけない。実行ファイル内でだけ呼ぶ。

Business: €199.00 / year (excl. VAT) うーん。高いな。

9/28-30 ehon

9/28 (土)

お出かけ。妻が、京都の絵本専門店みたいなところに行きたいということで行ってみたのだが、結局何も買わなかった。併設されてる児童遊び場みたいなところに遊びにくる子が結構多いようで、店主が入店してきた子供たちに「おお〜おっきくなったなあ!」とか言っててローカルコミュニティ!!!!と思ってそのまま出てきた。

そのあと三条の方まで行って色々買い物。久しぶりで足が疲れた。娘は比較的良い子で、いつもより相当長めにベビーカーに乗っていてくれた。

夜もご機嫌。離乳食もぱくぱく。

ごはん

朝: ドーナツ

昼: ベジタブルチキンサンド

夜: イオンの巻きずし、唐揚げ

9/29 (日)

溜まった雑務を片付けるデイ。エアコン掃除もしてみたが、内部のタービンの汚れが相当ひどくて、秋の間に業者に洗浄頼んだ方が良さそうだ。

娘はまあまあご機嫌。一日よく遊び、疲れたのかしっかり寝てくれた。

食戟のソーマ 22-35 巻

途中から買ってないけどそろそろ終わりそうだし読むか~~とずっと思ってたけど、来週完結らしいのでまとめ買いして読んだ。い、異能バトルものになっとる~~どう考えても連隊食戟で終わらせておくべきだったのでは?田所ちゃんがたくましくなってるのは嬉しい。

彼方のアストラ(アニメ)

最終話みた。演出がかなり良かった。着陸前の円陣組んで回想するところでちょっと泣きそうになった。エピローグも原作より少し丁寧に描写されてる感じで良かった。

ごはん

朝: ドーナツ

昼: オムライス

夜: そば

9/30 (月)

仕事はまあまあの進捗。ずっと WIP だった PR を一件まとめ終えた。もう一件あるんだけど、今月間に合うかしらん。色々とアレな事態が発生して、先輩が大変そうだった。

娘はうどんを少し食べる。発疹でなかったし、うどんは大丈夫かも!小麦全般大丈夫だといいなあ。

ごはん

朝: ハムチーズトースト

昼: 炒め系

夜: おさかな

9/25-27 健康診断

9/25 (水)

仕事はあまり進まなかった。イテレーションが悪い……。

侍道外伝 KATANAKAMI

https://www.inside-games.jp/article/2019/09/24/124821.html

面白そう。和風 Moonlighter かな?

ごはん

朝: オールブラン

昼: 秋ごはん

夜: 豆乳鍋

9/26 (木)

仕事はあまり進まない。Slack の Incoming Webhooks で遊んでた。

健康診断を受ける。最近入力量を減らしていたおかげで、体重はなんとか "微増" に抑えることができた。このまま入社前の体重まで戻したい。

ごはん

昼: なにか

夜: 鍋の残りとか

9/27 (金)

仕事はまあまあの進捗。職人と化してきた。

娘はかなりご機嫌。ご機嫌過ぎておやすみの時間になってもびよんびよんしていた。

ごはん

朝: オールブラン

昼: ハンバーグ

夜: 豚肉

9/24 発疹

9/24 (火)

仕事は割と集中して進む。もうちょっとスクリプトを作りやすい環境を構築したほうが良さそうだ。

娘、目の周りに蕁麻疹が出る。軽度だが、これまで三度くらい出てて確定っぽい。遺伝かな~~ごめんよ~~~。ひどくならないことを祈るばかり。ちなみにおれが小さかったときはもっと酷かったらしい。全然覚えてないけど。

ごはん

朝: オールブラン

昼: 揚げ魚

夜: 麻婆豆腐

9/22-23 シーニュ

9/22 (日)

午前中、妻が出かけるので子守り。泣き続けるかな〜と思ったが、アンパンマンのパワーでママがいなくなったことに気付く前に寝た。起きた後もなかなか大人しかった、良かった。

昨日から、寝付いた後1時間周期くらいで何度か起きてしまう。起きた時にママが隣にいないと不安になってしまう?夜は3時間くらい眠るのだが。

とけだせみぞれちゃん

読み切りから連載化して5話分くらい読んで読むのやめてたけど、TL に流れてきたのでふと読み直したら面白くなってた。ここ、妖怪村じゃん!!!りんちゃんが可愛い。

Reviewdog

https://github.com/reviewdog/reviewdog

コードフォーマッターを利用して自動コードレビューを行うツール。Github Actions に対応したらしい。割と色々な CI サービスに対応している。

C/C++: プリプロセッサメタプログラミングをやる

https://qiita.com/168irohairoha/items/4ecec632dd2da30c8d88

ちらっと読んだ感じ面白そうだったので、あとで詳しく追いたい

ごはん

朝: オールブラン

昼: 焼きそば

夜: 白菜豚肉鍋

9/23 (月)

午前〜午後、ずっと機嫌悪め。というかママの後追いがひどくなっている気がする。ママがいないときの泣きだけ「んまぁ〜」とか「まぁー」って音が混じってるのだが、これはママって言いたいのだろうか?

あと、言葉の意味が分かるようになってきたっぽい?バンザイに反応するようになってきた。そうです、言葉には対象があるんです。

おれの体重

73.5 kg。入力を減らしてたら、ちょっと減ってきた。

エンジニアのためのプログラミング以外入門

https://kirimin-chan.booth.pm/items/1575077

プログラミング以外の部分(チーム・組織での働き方、学び方)について、一通り丁寧に解説していて良かった。「プログラミング以外」と書いてあるけど、プログラマ以外にも普通に当てはまる本だと思う。「(エンジニアのための)組織でのはたらきかた入門」とかでも良かったのでは。最後に参考書が挙げてあるのも良かった。

左利きのエレン

ジャンプ+の連載で何となく読んでなかったやつを読む活動2。 めちゃ良かった。美術漫画だけど、ブルーピリオドとはまた違った視点の話で、更に凡才が頑張る話も充実しているので良い。過去編/現代編、というくくりじゃなくて、複数のタイムラインを入り交じらせて進めていく形なので、伏線も回収が早くて読みやすい。早く現代の光一編進めてほしいよ〜〜

ごはん

朝: オールブラン

昼: パン

夜: ムニエル

C++: std::variant (C++17~)

格納されうる候補の型リストに含まれる型のオブジェクトを切り替えながら保持する記憶域型。継承関係にない複数の型を単一のオブジェクトに代入・切り替えができる。つまり、インターフェースのみによる多態性を実現している。ただし、宣言時に型を指定しないといけないため、任意型を取ることはできない。

    // 継承関係のないクラス群
    struct A { void f() {} };
    struct B { void f() {} };
    struct C { void f() {} };
    
    std::variant<A, B, C> v = A{}; // A のインスタンスを代入
    v = B{}; // B に切り替え
    
    if (std::holds_alternative<B>(v)) {
        B& b = std::get<B>(v);
    }
    
    // v を visit して、どの型が代入されていたとしても共通のインターフェースを呼び出す。
    std::visit([](auto& x) {
        x.f();
    }, v);

std::variant<T> は動的メモリ確保は行わない。index でのアクセスもできる。

テンプレート引数を取って「ユーザーが指定した型」および「ライブラリが標準で指定する型」を取りうるバリアント型オブジェクトを宣言することは可能な気がする。

Boost Variant Libirary には再帰バリアントが指定できたが、C++17 の std::variant ではできない。

C++: std::visit

https://faithandbrave.hateblo.jp/entry/2016/08/02/164531

Variant にアクセスし、型ごとに異なった処理を行ったりできる。

    struct visitor {
        void operator() (int x) {
            std::cout << "int: " << x << std::endl;
        }
    
        void operator() (const std::string& x) {
            std::cout << "std::string: " << x << std::endl;
        }
    
        void operator() (double x) {
            std::cout << "double: " << x << std::endl;
        }
    };
    
    int main() {
        std::variant<int, std::string, double> v;
    
        // 代入したり
        v = "hello";
    
        // 代入されている型によらず、共通の操作をする
        std::visit([](auto x) {
            std::cout << "auto: " << x << std::endl;
        }, v);
    
        // 代入されている型ごとに異なる処理を適用する
        std::visit(visitor(), v);
    }

型マッチングビジターをラムダのみで書くことも可能である。

    using var_t = std::variant<int, long, double, std::string>;
    template<class T> struct always_false : std::false_type {};
    
    int main() {
        std::vector<var_t> vec = {10, 15l, 1.5, "hello"};
        for (auto& v : vec) {
            std::visit([](auto&& arg) {
                using T = std::decay_t<decltype(arg)>; // 値から型を取り出す.
                if constexpr (std::is_same_v<T, int>) {
                    std::cout << "int: " << arg << std::endl;
                } else if constexpr (std::is_same_v<T, long>) {
                    std::cout << "long: " << arg << std::endl;
                } else if constexpr (std::is_same_v<T, double>) {
                    std::cout << "double: " << arg << std::endl;
                } else if constexpr (std::is_same_v<T, std::string>) {
                    std::cout << "std::string: " << std::quoted(arg) << std::endl;
                } else {
                    static_assert(always_false<T>::value, "non-exhaustive visitor!");
                }
            }, v);
        }
    }

ラムダを可変引数テンプレート内で継承 & 展開することで、こんなことも可能である。

    using var_t = std::variant<int, long, double, std::string>;
    
    // 再帰的に using T::operator() するクラス
    // ラムダ式が関数オブジェクトを使って実現されていることを利用している
    template<class... Ts> struct overloaded : Ts... { using Ts::operator()...; };
    
    // helper 関数 overloaded が overloaded<Ts...> 型を返す
    template<class... Ts> overloaded(Ts...) -> overloaded<Ts...>;
    
    int main() {
        std::vector<var_t> vec = {10, 15l, 1.5, "hello"};
        for (auto& v : vec) {
            std::visit(overloaded {
                [](auto arg) { std::cout << "auto: " << arg << std::endl; },
                [](double arg) { std::cout << "double: " << arg << std::endl; },
                [](const std::string& arg) { std::cout << "std::string:" << std::quoted(arg) << std::endl; },
            }, v);
        }
    }