いや、分かるっちゃ分かるので左右盲、ってわけではないと思うけど、結構迷う。とっさに「この画像の右上にある…」などと口にすると大体逆だったり。
他にも円高と円安、ミクロとマクロ、LatitudeとLongitude辺りはどっちがどっちだっけ?と悩む。
rowとcolumnは平気なので大体は慣れなんだろうと思うけど、左右だけはなぜ慣れないのか……。あとインフレとデフレもさすがに大丈夫。たぶん。
ニンテンドースイッチのゲーム50本遊んで感想書いたのでまとめ(23〜47) 探偵..
こちら、すばらしいまとめですね。アドベンチャーゲームがたくさん紹介されています。自分もプレイ済みのゲームが一部含まれていて、それゆえ「好みが合いそう!」とピンときたので参考にして色々やってみたいな、と思いました。レインコードはやらなきゃなーと思っていましたし。
ただ最近はゲーム機起動するにもエネルギーが必要で、どこまでやれるかは分かりませんが…。うーん、ADVも中高生の頃はやりまくっていたんだけどなあ。
PythonとC++で、同じような実装をしたつもりが結果が異なるので少しハマりました。
# Python import cv2 import numpy as np mat = np.zeros((100, 100), np.uint8) + 100 cv2.rectangle(mat, (20, 20), (80, 80), 128, cv2.FILLED) roi = mat[20:80, 20:80] mat[20:80, 20:80] = cv2.blur(roi, (11, 11))
// C++ cv::Mat mat = cv::Mat1b::zeros(100, 100) + 100; cv::rectangle(mat, cv::Rect(20, 20, 60, 60), cv::Scalar(128), cv::FILLED); cv::Mat roi = mat(cv::Rect(20, 20, 60, 60)); cv::blur(roi, roi, { 11, 11 }); // この時点のmatが、Pythonと異なる
まあこの例だと一目なんですが、実際はもう少し入り組んでいたので最小化するのに苦労しました。roiにだけ処理したいのですが外側の画素値も見ちゃうんですね。それはそうか、という気もするような、しないような。本能的にコピーを避けようとしてしまうのですが、Pythonと同じ結果にしたければ、コピーすれば良いです。
cv::Mat mat = cv::Mat1b::zeros(100, 100) + 100; cv::rectangle(mat, cv::Rect(20, 20, 60, 60), cv::Scalar{128}, cv::FILLED); cv::Mat roi = mat(cv::Rect(20, 20, 60, 60)).clone(); cv::blur(roi, roi, { 11, 11 }); mat(cv::Rect(20, 20, 60, 60)) = roi;
逆にC++の元の実装と同じ挙動をPythonで実現したくなったら、結構面倒そうですね。
ちなみにblurのboderType引数にBORDER_ISOLATEDというものがありますが、これを使っても外側の値は参照されるようです。コメントにはdo not look outside of ROI
と書いてあるんですが、これはまた暇なときにソースを読んでみようかな。
病気になっていつまで生きられるか分からないしiDeCoはいいかな…という気持ちと、老後が不安だし2000万くらいは貯めておこうという気持ちがあり、どっちやねんと思いつつぼんやり生きている。まあ、そんなに稼いでいるわけではないからNISAで十分ではあるかもしれない。新NISAも始まるのでもうこれだけで良いでしょう。
血液透析患者の予後については楽観的な話も悲観的な話も、ネット上にはなんでもあるけれど日本の透析医療は移植が(法的に)弱い分進んでいて30年以上透析している人も普通にいるし、当時よりは今の方が進歩しているものもあるので合併症などなければ人並みには生きるんじゃないかという気もしている。なんやかんや9年くらい続けていて、最近はそんなに変化はなさそうですが。電解水透析という言葉は出てきているけどこれは利用していないし。
仮に長生きしても「老後の楽しみ」なんかそんなにないだろうという気もしている。体の自由は常に今が一番効くはずなので、やりたいことは今やるべきなのでしょう。食事に限っては、将来的に腎移植ができて食事制限がなくなる可能性はあるけれど、その頃は胃が終わっているかもしれないし…。宵越しの銭は持たぬとまではいかないものの、貯め込んで使わずに終わるよりはそれなりに使っていく方がいいのだろうなぁ。
うーん、まとまりがない。結局行き当たりばったりですな。
たとえばOpenCVで以下のようなコードを書くと落ちるのは、分かるんですが、分からないときがある。
cv::Mat GetImage() { std::vector<uint8_t> buf = ...; return cv::Mat(128, 128, CV_8U, buf.data()); } const auto mat = GetImage(); cv::mean(mat); // 死
このくらい近ければぱっと見でも分かるのですが、実行時エラーになるので距離があると悩んでしまったり。cv::Matのこのコンストラクタは渡されたバッファをコピーしないので、関数を抜けると参照先(buf変数)が解放されてしまうというやつ。
機械学習ライブラリとかでもデータ渡してテンソルを作るぞ!みたいなクラスで同じ事をやって、計算中に落ちてあれーってなったり。
毎回コピーするような実装だとパフォーマンスも気になってしまうのでそれはそれで…ということで、C++難しいです。マニュアルをちゃんと読みなさいという話ではあります。