閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

wena3のBodyEnergy

wena3では歩数や睡眠時間の他にBodyEnergyとかいうのも計れるみたいなんですが、いまいち値の意味がわからない。100%が一番具合が良く、ストレスを受けると減って寝るなどすると回復するみたいですがこれがもうずっと50%以下。昨日はついに0になりました。

たくさん寝れば時間に比例してそこそこ回復しますが、平日も12時間くらい寝ないと収支合わない気がする。時間より、睡眠の質が低いんですかねぇ。

f:id:wata_d:20210121212206p:plain

f:id:wata_d:20210121212224p:plain

ラムダッシュの刃を替えた

年も明けたことだし、刃を買い換えました。

パナソニック 替刃 メンズシェーバー用 セット刃 ES9036

パナソニック 替刃 メンズシェーバー用 セット刃 ES9036

  • 発売日: 2017/09/01
  • メディア: ホーム&キッチン

公式サイトでも1-2年で更新した方が良いと書かれていますが、実際雑に使っていると1年で切れ味が落ち、時間もかかる上剃り残しなどが気になってきます。しかし刃を替えるだけで新品同様の剃り味に戻ってくれます。リモートワークだからと数日剃らずに放っておいたものも秒で剃れて最高に気持ちいい。

内刃と外刃のセットは9000円くらいしますが、本体よりは安いですし、なんか半額くらいで買えるみたいなので1年使うものとして考えれば十分なコスパかと。

替え刃は本体毎に用意されていて店頭で見ると何が何だか、という感じになりますが、本体の型番で検索すればすぐ出てくるので近年は通販で買ってます。通販ならサイトにログが残るので再購入も楽ですし。

髭剃りも消耗品と考えると、こういうの定期的に送ってくれるサブスクリプションとかもあってのいいのかも? 化粧品はもうあるみたいですね。

OpenCVのSIMD

qiita.com

今度はOpenCVについて復習というか予習しようとネットサーフィンしていました。前一瞬触ったときはバージョン2だったと思いますが、もう4になっているんですね。で、上記のQiita記事もなるほど~と読んでいました。

ただ、ループ版が遅いのはatメンバ関数が遅いのもあるのでは?とポインタ(cv::Mat::data)を直に触ってみたりしましたが、それでもcv::max等の方が圧倒的に速い。なんでやとソースを見てみると、SIMDを使って最適化されているようです(するかどうかはコンパイル時のオプションによるので環境次第)。

SIMDは仕事でも使う機会がなかったので単語しか知らなかったのですが、複数の変数を一括で処理するための仕組みらしい。コンピュータ将棋とかではよく見るのですがAVXとかSSEとか、呪文みたいだなとスルーしていました。今年も使う機会あまりなさそうですが、暇だったのでちょっとソース読んでみました。

8bitグレースケールの画像だと画像はucharの配列で表せますが、これを1要素ずつ処理するのではなく、16要素(int128の変数に入れて)ずつにまとめて処理することでループ回数をそれだけ減らせて嬉しい、ということのようです。

これを自分で使いたい、と思うと環境毎に使える関数が違ったりと面倒ですが、OpenCVではこれ自体をラップしたAPIも提供しているようで、これを使えば自分でもある程度パフォーマンスを気にしたコードが書けるようです。よくできてますね。

qiita.com

画像処理を速くしたいとなるとCUDAとかに行っちゃいそうですが、思ったより手軽ですしこれも選択肢のひとつとして頭に入れておくと良さそうですね。

強くてニューゲーム

新しい技術を覚え始める時、それがある程度成熟しているタイミングから始めるのが「つよくてニューゲーム」感あるな、とふと思った。

React.jsに触れたのがHooks実装後だったけど、これかなりいいタイミングだったんじゃないかと。いい体験でした。もっと後なら、もっと良かったのかもしれない。

C++もいまからならかなり熟れていて、ラムダもあるしstd::functionもあればautoに範囲for文もある。Borland C++ Builderとか使っていた頃はBoost入れてどうにかstd::for_each(...boost::bind(...とか長々書いてやりくりしていたものが、もう必要ないわけです(無いこともない)。

まあ高速道路が整備され巨人の肩に椅子が拵えられるまで待っている間に人生が終わっちゃう可能性もあるわけで、待てばいいというものでもないのでしょうが……。先行者利益とかもあるでしょうしね。

ちゃんと食べないとリンが上がる?

今は透析ついでに週1で血液検査を行い、食事管理などがちゃんとできているか測っています。個人的に特に気を遣っているのがリンの値で、高値が出ても即座に影響はないものの、長期化すると色々体に悪影響が出てくるものです。この管理がなかなか難して、度々上がってしまうのが悩みです。リンが上がるのは、当然リンを含む食事(果物とか)を食べ過ぎたせいなのですが、1日1食とかろくに食べなかった週にも上がることがあり、「これは食べなかった場合も上がるのでは?」とずっと思っていました。

たとえば"たんぱく質が不足して、筋肉が溶けた結果そこに含まれるリンも再吸収される"とか? 世には「カタボリック」という単語もあるようです……ってこれはググっても民間ブログしか出てこないので眉唾ですが、まぁそんな妄想をしていたわけです。

ただ考えていても仕方が無いので、2020年から食事ログに摂取カロリーとたんぱく質も記入してみることにしました。と言ってもあらゆる商品にカロリーとかが記載されているわけではないのでカロリーSlism - 栄養成分/カロリー計算などのサイトも参照しつつ、参考値としてのものですが、それと翌週の血液検査の結果を比較してみよう、というのが以下のプロットです。

f:id:wata_d:20210102192112p:plain

一週間分の食事とその後の血液検査の結果をseabornのpairplotで描きました。2020年はずっとリンが高くて恥ずかしいところもありますが……*1。見てみるともっとも相関が出ているのが摂取カロリーで、これが少ない=食べる量が少ないほどリンが高くなる傾向があるように見えます。この傾向が見えてきたのが昨年末で、やっぱり食べないとあかんのや!ということで毎日なるべく3食、1日1800kcalくらい頑張って食べるようにしたら血中リンが6を超えることがなくなりました。

去年はリン吸着薬の量や種類も何度か変わっていて前提条件が異なるので、これだけで結論は出せませんが、少なくとも絶食はすぐ痩せてしまうしあまり良いことはなさそうです。なんか去年も同じ事言っていた気がしますが、今年はちゃんと食べてやっていくというのを意識したいですね。

この辺、検索しても以下のブログが出てくるくらいで同じような主張をあまり見かけないんですが、日本は透析患者も多いしこれが真ならもっと知見もありそうなんですよねぇ。それが見つからないのでは、やっぱたまたまなのかなぁ、なんて思ったりもしています(どっちやねん)。

ameblo.jp

*1:P = 5.5以下が目標

2020年振り返り

…的なエントリを書いたことがなかったんですが、暇だし書いてみる。

映画

ここ数年、障害者手帳を手に入れてから特に良く見に行くようになりましたが、今年はさすがにあまり行けませんでした。……と思ったけど数えてみるとそれでも15回は見に行っていたようです。SHIROBAKOを緊急事態宣言の前に駆け込みみたいな感じで見ましたが、面白かったですね。

Gレコの劇場版が2月放映の2話で止まっていますが来年は続きが見られるといいなぁ…。あと、1月のシン・エヴァが楽しみですね。

ゲーム

買ったけどクリアせず、もしくは未開封で積んでしまうことが増えていましたが今年は購入までいくことも減ってしまいました。クリアまでいったのは、天穂のサクナヒメくらいかな? 米作りはとても面白かったです。アクションは苦手ですが、米を作って物理で殴れるシステムで良かった(笑)。

どうぶつの森は軽く遊んでいるけど、最近のアップデートがあまりできておらず。まぁ来年また遊べるかな。ゼルダ無双は体験版をDLしたところで止まっており、年が明ける前にプレイできるかな……。

仕事

2004年に就職して以来、リーマンショック東日本大震災の時より今年が一番キツかった気がします。まぁ、大変なのは営業でプログラマは仕事がなくても社内ニートしているだけなんですが……。給料が歩合みたいになっているので遊んでいても罪悪感はあまり感じなくなりましたが、餓死について少し考えたりしました(嘘)。一応仕事のある状態で年越しできたので、懸念が残らなかったのは良かったですか。

お仕事ではC#/GUIないしWeb系が最近メインだったところが、C++/CUIとか結構やることが変わりそうなので来年は新鮮な気持ちで楽しめそうです。

Web系は去年から今年の頭にかけて、TypeScript/Reactでごにょごにょしていましたが、React Hooksがあまりに便利で感動していました。バックエンドも全部一人でやっていましたがPHP(Laravel)とC#(ASP.NET)をごった煮でカオスなつくりでやっていましたが、どちらのフレームワークもよくできてて面白かったです。SignalRでエイヤっとやったりしました。

おわり

なんか暇だった時期含め、一年ぼーっとしていたような気がする。技術書もそんなに読めなかったしなぁ。

今年は急に在宅勤務が始まりましたが、来年もしばらくは続きそうなので自宅の環境も改善したいような、いつ終わるかわからないのでどこまで投資すべきなのか……。とか考えてるとまた1年過ぎてしまいそう。

C++で標準出力

適当にググって見ると、色周りは以下のブログが分かりやすかったです。まぁ情報としては先日のと同じなんですが。

jafrog.com

この辺のコードとか定数で定義されていると楽なんだけどなぁ、と思ったけどそうもいかないか。

面白みはありませんが、とりあえず書いてみるとこんな感じですか。

#include <iostream>
#include <string>
#include <Windows.h>

constexpr const char* ESC = "\x1b";
constexpr const char* CSI = "\x1b[";

bool EnableVTMode()
{
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    if (hOut == INVALID_HANDLE_VALUE)
    {
        return false;
    }

    DWORD dwMode = 0;
    if (!GetConsoleMode(hOut, &dwMode))
    {
        return false;
    }

    dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
    if (!SetConsoleMode(hOut, dwMode))
    {
        return false;
    }
    return true;
}

int main()
{
    if (!EnableVTMode()) {
        return -1;
    }
   
    for (auto i = 1; i < 7; ++i) {
        std::cout << CSI << std::to_string(30 + i) << "m"; // 文字の色を変更
        std::cout << "Hello World";
        
        Sleep(500);

        std::cout << "\r";          // カーソルを先頭に戻す
        std::cout << CSI << "K";    // 行末まで出力した文字列を削除
    }

    return 0;
}

f:id:wata_d:20201229200900g:plain

どうでもいいけれどC++CLIという単語を組み合わせるとCommon Language Infrastructureの方が出てきてしまって具合が悪いですね。