閑古鳥

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

ヨドバシカメラの通販は+350円でクロネコヤマトを指定できる

一人暮らしで宅配ボックスもないので、注文時に配送業者にクロネコヤマトを指定して配送前に届くメールから配送先を近所のPUDOに変更というのをやっています。これで再配達もなく、帰宅ついでに受け取れて快適です。配送業者を指定できればネットで話題のデリバリーなんちゃらの問題もなくなって良いのではないでしょうか。

Amazonは注文時点でコンビニ受け取りを指定できたりするけど、そういうのが標準化してくれればもっと楽になるんですけどね。今後に期待です。

ヨドバシ.com - 配達会社の選択について

食事内容の記録をExcelからAccessで取るようにしてみる

2016年から食事内容を記録するようにしていたのだけど、思うところありそこに大雑把なカロリーやたんぱく質も書き込むようになり、ここまでやるならExcelよりAccessの方がいいのかな? と2020年分からAccess(accdb)にしてみた。

Excelでも、選択範囲内のセルの統計(合計とか平均)を取れるのでその日のカロリー合計とかもそれなりに簡単に見られるけど、AccessならSQLで一発だし、閲覧性はこの方が良いかも。しばらくこれで試してみたい。

f:id:wata_d:20200114212751p:plain

これが、

f:id:wata_d:20200114212820p:plain

こう。

記録はレコーディングダイエット…などではなく(むしろ体重は増やしたい)、血液検査の結果と比較するため。3年以上経ってもいまいち相関が取れないのだけど、今年こそコツを掴みたい。

Office 365 Soloには他にPubliserもついているけど、さすがにこれは使い道ないかなぁ…。

Fluent Assertionsのソースを少し読んでみた

先日のエントリに書いた例ですが、

Add(1, 2).Should().Be(3);
// => Expected Add(1, 2) to be 3, but found 2.

これ、 Add(1, 2) の部分どうやって取ってるんだろう、と思ってソース読んでみました。StackTraceでそこまで取れるのかなぁと思ったんですが、テストコードの実装(*.cs)を直接見ていたみたいです。

CallerIdentifierクラスのDetermineCallerIdentityメソッドが目的のメソッドですが、ここでStackTraceクラスを使ってソースファイルのパス、行番号を取ってきてそれを元にソースファイルからコードを読み込んでいるようです。

確かに手元にソースがある状態でなら、あらゆる情報が取れますね…。

別解として、PowerAssert.Netだとアサーションにラムダを渡すことでLambdaExpressionから処理内容を取り出しているものがありました。

using PowerAssert;

int Add(int x, int y) => 2;

[Test]
public void Test()
{
    PAssert.IsTrue(() => Add(1, 2) == 3);
}

実行結果:

System.Exception : IsTrue failed, expression was:

PowerAssertTests.ParserTest.Add(1, 2) == 3
                                . .     __
                                \ /     |
                                 |      False
                                 2

こちらはテストメソッドがIsTrueだけで覚える事が少なくてシンプルです(Throwsは割愛)。思想の差が面白いですね。

再度、はてなブログの記法をはてな記法からMarkdownにしてみる

最近VSCodeでブログの下書きを書いているけど、これだと当然はてな記法よりMarkdownの方が書きやすいな。VSCode上で色も付くしプレビューもできる。

…もう静的サイトでいいんじゃないの、という気もするけど。

あるいはAPIあるのからブラウザでコピペせず、ここ(VSCode)から直に上げられるようにすればいいのかなぁ。

2000年代はnDiary使ってて、xyzzynDiary-modeで日記書いてHTML生成、FTPでアップまでを全部xyzzy上でやっていたけどあの頃が一番効率が良かった気がする。2020年らしく楽をしていかねばな……。

FluentAssersions

Fluent Assertions

一時流行った(?)流れるメソッド的なアレでテストが書けるライブラリ。もしくはSpec的なやつ。最近のNUnitもこれに近い記法になるけど、冗長じゃないかな? と思っていたけどテストコードより、その結果が重要という感じみたい。失敗した時、なぜ失敗したのかがすぐわかるようでなければ不便でしょ、と。確かに。

using FluentAssertions;
using Xunit;

static int Add(int x, int y) => 2;

[Fact]
public void Test1()
{
    Assert.Equal(3, Add(1, 2));
}

[Fact]
public void Test2()
{
    Add(1, 2).Should().Be(3);
}

あからさまに雑な例ですが、このようなテストを実行したときの結果が以下のようになります。

メッセージ
xUnit.net Assert.Equal() Failure
Expected: 3
Actual: 2
Fluent Assersions Expected Add(1, 2) to be 3, but found 2.

なるほどリッチ。実行速度は50倍くらい遅くなりますが、許容範囲内ですかね?

AssersionScope

AssersionScopeというクラスがあり、普通アサーションに失敗するとそこでテストは終わりますが、このスコープ内にあるうちは続けてテストを行うみたいな機能もあるようです。1つのテストにアサーションを何個も書くなという話ではありますが、これはこれであると嬉しいシーンもあるかも。

using FluentAssertions;
using FluentAssertions.Execution;
using Xunit;

[Fact]
public void Test3()
{
    using var scope = new AssertionScope();

    3.Should().BeLessThan(2);                    // ↑scopeがなければここで終了するが
    (new int[] { 1, 2, 3 }).Should().Contain(0); // ←scopeがあるのでこれも実行される
}

// 実行結果
//   メッセージ: 
//    Expected value to be less than 2, but found 3.
//    Expected collection {1, 2, 3} to contain 0.

10連休だった

あっという間に終わってしまった。睡眠と通院の合間に娯楽フィードに耽溺するだけの週末。

"耽溺"という言葉はこの本に頻出する単語で、なかなか真似したくなりますね。マーダーボットを自称する警備ユニット(ロボット)の日記で、楽しく読みました。ロボットなのにコミュ障で、一人称視点の話だけどそのコミュ障っぷりが大いに共感できてよかった。人の顔が見られない、見られるのはいや、鏡も嫌い、などなど。あらゆるものがネットに繋がった社会で電子戦も多め。

最近AIに萌えるっぽい。なんなら人間がいないAI同士の掛け合いだけでも楽しめる。まぁ、「そういう設定」のただの掛け合いなんですけど、設定がおいしいのです。

あと、そろそろ少しWebGLも触っておこうかなと思ったけど、例によって教科書読んだり下から追おうとするとモチベーションが続かないのでthree.jsを軽く触って遊んでいました。OpenGLとかの経験があれば、割と似たノリでやっていけそうな感じ。お手軽で面白いです。

古のglu/glut系の関数は大体標準もしくはサンプル漁れば出てくる感じ。ティーポットもあるよ(OpenGLは10年くらい前に触っていたので幼少期の記憶並に薄く、古いのだ…)。

ただ結構破壊的変更が多いみたいでソース検索して貼り付けるとクラスがなかったりdeprecatedだとログに出てきたりすることが結構ありました。後者はログに移行先も出てくるのでそれほど困りませんでしたが。今年はこれも飯の種になるといいなぁ。

ギガを使わない生活

これは11月の話で、12月は連休もありさらに節約して0.96GBに抑えることができました。基本電車内でTwitterせずにダウンロード済みの本を読むようにすればそれほど通信せずに済むのですが、しかしたかが1000円のために禁欲するのもなぁ……という気もします。もう少し細かい刻みで金額が変わるといいんですけどね。

ネットは固定回線含めて、従量制になっていくのかと思っていたら5G以後は定額が普通になっていくみたいな話を見てちょっと意外に感じていますが、ヘビーユーザにひとりあたりの通信量がかさ上げされて設定される定額料金が高めになるとそれはそれでキツいかなぁという気も。まぁ、ユーザ的には定額ないし天井がある方が安心はできるんですが。