閑古鳥

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

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

今は透析ついでに週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の方が出てきてしまって具合が悪いですね。

C++の予習

十年ぶりくらいにC++もちゃんと(?)触れることになりそうなので、C++も予習しています。日本語の情報が充実していて素晴らしいですね。

cpprefjp.github.io

cppmap.github.io

functionやbindがBoostなくても普通に使えるようになったの便利ですね。autoやinitializer_listのおかげで結構楽な書き方もできるし、今風の言語として使っていけそうです。

CLIの予習

これまでずっとGUIばかりやっていましたが、来年はCUIもやっていくことになりそうなのでとりあえずMS Docsなど眺めています。

docs.microsoft.com

標準出力にエスケープシーケンス(\x1b)を渡すことで文字の色を変えたりすでに出力している文字を消したりできる。プログレスバー的なのはこれで実装しているわけですね(サイトによっては \033だったりもしますが、こちらは8進数で意味は同じ)。

PowerShellだとデフォルトでこれに対応していないようですが、SetConsoleModeでENABLE_VIRTUAL_TERMINAL_PROCESSINGを設定してあげれば良いようです(SamplesのEnableVTModeがまんま流用できる)。

コードの一覧はWikipediaの方が見やすくまとまっているかも。

en.wikipedia.org

wena 3購入

wena.jp

機能的にはよくあるスマートウォッチですが、時計そのものが付属しておらず、他の好きな時計を取り付けられるというコンセプトが面白くて気になっていたもの。3でついにSuicaに対応したこともあり、ポチってしまいました。ちなみに時計を付けずにこれ単体で使えるバージョンもあります。

Suicaに対応したとはいえ、定期は未対応。スマホで使っているモバイルSuicaと連動もできず、別に財布を持つ形になるのでまだ微妙なところではありますが、コロナ禍で定期を買わなくなってしまったのでこれはこれでアリかも、ということになりました(自分の中で)。財布どころかスマホも出さず、手首をかざすだけで改札を通ったり自販機から飲み物を買えるのはかなり気分がいいです。フリーパス!(フリーではない)

メタルバンドは時計の取り付け自体は確かに簡単にできるのですが、バンドの長さ調整は時計修理店にお願いしてね、という投げっぷりで結構ハードル高いです。レザーの方が手軽かな…。時計修理店は近所にもあるみたいでしたが、バネ外し棒というのが数百円で買えたのでこれで自力で調整しました。手先が不器用なのでどうかと思いましたが、割となんとかなりました。

Alexaも搭載されていますが、マイクだけでスピーカーはないので回答は文字で返ってきます。特に思いつきませんがテキストで答えが欲しいときにはいいのかも。イヤホンもGoogle Assistant対応しているので、頼る機会は少なそう。個人的にはこの辺、眼鏡(スマートグラス)が出てくれば音声もテキストも対応できていいんじゃないかなと思っていますが、まだかかりそうですね。

自分は利き手に時計を付けるので、手首側に本体のあるタイプだとPCのマウスを使う時にちょっと邪魔かもしれません。いや、買う前に気付けよって話ですが…。時計にもこだわりがないので、Rubberの方でもよかったかもなぁ。こっちのが安いし。このベルトによる値段差や、時計のヘッドの方が本体より高い状況を見ると、デジタルって安く根付けされてるよなって思います。ちなみにベルトはアクセサリーとして別売りしているので、後から他のタイプに切り替えることも可能です。カスタマイズできるおもちゃっていいですね。

JavaScriptのDateクラスで日にちの増減を行う

JavaScriptのDateクラスにはAddとか、AddDaysのようなメソッドがありません。moment.jsなどを入れるとかTemporalを試してもいいのですが、手軽にDateだけでなんとかしたい。

DateにはsetDateなどset系のメソッドがありますが、ここに負の値などを入れてもいい感じに計算してくれるのでこれで代用できるようです。

const date = new Date(2020, 0, 1); // 2020-1-1
date.setDate(date.getDate() - 1);
// date = 2019-12-31

setDateはDateインスタンスの現在時刻から日付だけを変更するもので、getDateの戻り値と任意の日数を足してあげればAddDaysみたいなことができます。

昔は日付の計算でよく月末の翌日を単純に日付だけ足し算でやって8月32日になってしまったり、とかありがちでしたが、単純にnew Date(2020, 8, 32)と書いても9/1になってくれるようで優しいですね。.NETだと例外になるみたいですが、果たしてどちらが親切なのか(ケースバイケースか)。