閑古鳥

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

朝、意味も無くドトールにコーヒーを飲みに行ったりしている

朝起きて、わざわざ駅前のドトールまで行ってコーヒー飲んでまた家に帰ってきて始業する、みたいなことをやっています。

目覚ましと、僅かながら歩数稼ぎと、ついでに抜きがちな朝食を食べておいて痩せないようにしたい、という辺りが目的。

通勤……というか通勤電車に乗るのは嫌だけど、まったく体を動かさないのもなぁということで。特にやっててよかったとか体感できるところはありませんが、退店時に「いってらっしゃいませ」と言ってもらいながら、帰るんですけどね~と思いつつ帰路につくのはちょっと楽しいです。

体のためというならついでにラジオ体操とかやる方がよっぽど良さそうではありますが…やるか?

OpenCVのMat構造体で任意の列を処理したいとき

メモリ構造を考えるとそれはそう、という話なんですが、こういうコードを書くと実行時間に差が出ます。

cv::TickMeter ticks;
ticks.start();

for (int i = 0; i < 1000; ++i)
{
    const auto m = cv::mean(mat.row(i))[0];
}

ticks.stop();
std::cout << ticks << std::endl;

ticks.reset();
ticks.start();

for (int i = 0; i < 1000; ++i)
{
    const auto m = cv::mean(mat.col(i))[0]; // ここの処理はなんでもいい (この例だとreduceで良くなっちゃうけど)
}

ticks.stop();
std::cout << ticks << std::endl;
0.0058812sec // mat.row
0.343708sec  // mat.col

ずっと一次元のデータと戯れてきたため二次元とか行列は知見がなくて、こういう時どうするのが良いんでしょう。transposeしちゃう?

cv::transpose(mat, mat);
for (int i = 0; i < 1000; ++i)
{
    const auto m = cv::mean(mat.row(i))[0];
}

OpenCVのMatが強かった

C++版のMat構造体って表現力豊かだなーと思っていましたが、oepratorも色々用意されていて今まで書いてたコードも冗長だったなと気付かされました。

OpenCV: cv::MatExpr Class Reference

Matとdoubleを比較してマスクを得る…みたいなことができるので、これを使うとPythonと同じくらいのコード量で同じことができます。

Pythonというかnumpyだと、配列(画像)中の0以外の値を全部255にしたい、という場合に以下のように書けますが

mat = np.array([
    0, 1, 0,
    1, 1, 1,
    0, 1, 0])
mat[mat != 0] = 255

C++もこれだけでいけました。

cv::Mat mat = (cv::Mat_<uint8_t>(3, 3) <<
            0, 1, 0,
            1, 1, 1,
            0, 1, 0);
mat.setTo(255, mat != 0);

さすがに直接代入することはできなさそうですが、十分簡潔です。OpenCVの場合、大抵は用意されている関数を使う方がパフォーマンスも出るので、用意されている機能はゴリゴリ使う方がコードもどんどん短くなって気持ちよさそうです。

ヤクルトの宅配を頼んでみた

なんとなく、透析導入してから1日1本ヤクルトを飲んでいます。特に便秘が改善するとか体感できる何かはないのですが、量が少ないので飲み過ぎることもなくていいかな、と。

ただスーパーで10本入りのものを10日置きに買うのも面倒になってきたので、宅配を頼んでみました。これもいわゆるサブスクですか。

ヤクルトの宅配なら送料無料のヤクルト届けてネット

ネットで申し込めて、支払いはカード、週一で置き配してくれるので人との接触が一切無しで完結していて素晴らしいです。

毎週一週間分置いていってくれ、翌週の分から不要になったらやはりネットでキャンセルもできるようです。旅行に行くから一時停止とかもしやすそうで、なかなかよいUXですね。いや、本来あらゆるネットサービスがこうあるべきだと思いますが…。

ヤクルト、店売りだとNewヤクルトでシロタ株200億含んでいるみたいですが宅配用のヤクルト400だと400億、さらにヤクルト1000だと1,000億とインフラがすごいことになっています。なんかストレスも軽減されるみたいなので頼んでみたけど1週間で987円はちょっとブルジョア感ありますね。まぁ1杯500円のコーヒーとか飲んでるのに比べればまだまだですが(何が?)。

ネックスピーカー買ってみた

仕事で使っていたUSBヘッドセットが断線したのか音がうまく聞こえなくなってしまい、線がないやつなら切れることもなくなるのでは?とワイヤレスのものを買ってみました。

SRS-NB10 | アクティブスピーカー/ネックスピーカー | ソニー

Bluetooth接続、充電はUSB Type-C。

ヘッドホン付けて長時間通話することなんて滅多にないのですが、1時間以上話す場合はこういうタイプの方が耳が痛くならなくていいかも。思ったより軽くて、首にかけていても負担もありませんでした。

当たり前ですが無線になると通話中に移動とかもできるので、ちょっと離れたところにある物を取りに行くとか、なんならトイレにも行けるので(試したことはありませんが)通話中のちょっとしたストレスみたいなのからも解放されて良いですね。

Coke On Pass

Coke ON Pass 毎日飲める自販機サブスク!|Coke ON(コーク オン)

月2700円で、1日1回Coke On対応自販機で飲み物がもらえるというサービス。毎日100円以上の飲み物を交換するとまぁちょっとお得になるよというやつ。

家のすぐ近くの自販機がCoke Onに対応していたので試しに使って見ています。特に特筆するようなことはないですが、自販機を冷蔵庫代わりにできるのは悪くないなと思いました。

よく頼むのはジョージアのカフェラテいろはすの桃。なんだかんだ容量多い方がごくごく飲めていいですね。500mlはほぼ1日分の飲水量なので、あまりごくごく飲んではいけないのですが…。

単価だけ見るとCOSTAが270mlで180円と一番高く、元を取ろうとするならこれなんですが、乳製品ばかりだとリンが高くなってしまうのでたまの贅沢になっています。食事制限考えると100円の麦茶とかの方が無難なんですよね…。

新型コロナウイルスの予防接種を受けてきた

7/15に接種券が届き、自治体の接種に応募して受けてもらってきました(ファイザー)。接種券すらなかなか届かない、と嘆いていましたが今日時点で接種率が5割程度というのを見ると、十分速かったな…と思います。基礎疾患持ちの致死率の高さに怯えていましたが、少しは安心できそうです。

2週間経つまでは変わらぬ感染対策は必要ですし、2週間経った後は抗体も減り続けるので、生活自体は変わらないと思いますが(そもそも常時デバフ持ちになってから、マスクは基本装備だったので正常運転ではある)。

1日目

肩が痛くなっただけで、大きな副反応はありませんでした。着替えがちょっと辛いくらい。

2日目

肩の痛みは1回目より軽かったです(慣れた?)が、今回は発熱もついてきました。と言っても38.2度くらいで、38度未満なら普通に活動できるくらいなので、大したことはなかったです。関節痛とかもほとんどありませんでしたし。

副反応全く無いとそれはそれで気になりそうなので、ほどよく反応してくれて良かったかもしれません。