@kyanny's blog

My thoughts, my life. Views/opinions are my own.

PostgreSQL: timestamp 型の秒の小数点以下の桁数は0桁から6桁

8.5. 日付/時刻データ型

time、timestampおよびintervalは秒フィールドに保有されている小数点以下の桁数を指定する精度値pをオプションで受け付けます。 デフォルトでは、精度についての明示的な限界はありません。 pの許容範囲は0から6です。

Go でテストコードを書いていて、これに関連しそうなバグ?でハマった。

time.Time 型のデータを database/sql と lib/pq を使って PostgreSQL に INSERT し、その後 SELECT して構造体にマッピングしたものを reflect.DeepEqual で比較したり go-cmp の Diff で差分をとると、秒以下の桁数が異なっていて不一致となった(Go プログラム内で time.Now() で生成したものは9桁、 PostgreSQL から SELECT したものは6桁)

想像だが、 Go のレイヤーでは9桁(ナノ秒)の精度を持っているが PostgreSQL のレイヤーでは6桁(マイクロ秒)の精度しかなく、 PostgreSQL のレイヤーを一度通過することで6桁まで丸められてしまったのではないか。

Skitch のバージョンアップ?

f:id:a666666:20201227213946p:plain

スクリーンショットに注釈を入れるのに愛用している Skitch を、最近立ち上げるとアップデートを促すダイアログ?が出るようになった。よく見てみると内容がおかしい。見覚えがある感じ。おそらくアップデートをチェックするプログラムが取得するリソースが S3 あたりにおいてあって、それが失効したのだろう。

Git: patch id について

git rebase した時に commit sha1 が違うが diff が同一のコミットが自動的に skip された。ふと、 Git は一体どうやってコミットの同一性を判断しているのだろう、と思って少し調べたところ、「パッチ ID」というものを使っているらしい。

Git は、コミットの SHA-1 チェックサム以外にもうひとつのチェックサムを計算しています。これは、そのコミットで投入されたパッチから計算したものです。 これを「パッチ ID」と呼びます。

Git - リベース

It turns out that in addition to the commit SHA-1 checksum, Git also calculates a checksum that is based just on the patch introduced with the commit. This is called a “patch-id”.

Git - Rebasing

git-patch-id というコマンドで調べることができる。

Git - git-patch-id Documentation

例: ea852c2e8696230decb0ab1d053557445023fb172f415a567355e7b672109797436393d6cc58f388 は同じ diff を持つ異なるコミット。

$ git show ea852c2e | git patch-id
aef46abb5e284e605d56bcbcaaa58b66c0711006 ea852c2e8696230decb0ab1d053557445023fb17
$ git show 2f415a56 | git patch-id
aef46abb5e284e605d56bcbcaaa58b66c0711006 2f415a567355e7b672109797436393d6cc58f388

The first string is the patch ID, and the second string is the commit ID.

パッチ ID は同じであることがわかる。

この10年で一番良かった買い物

間違いなく電気ケトル。飲み物も食べ物も、お湯を使うものはこれのおかげで格段に作りやすくなった。生活に革命をもたらした。

これのピンク色を買った。

https://www.amazon.co.jp/dp/B002NCCL1O/ref=cm_sw_r_cp_awdb_imm_c_eRg6FbPA55JSJ

10年くらい使って、ついに壊れた(底のパーツが脱落)。ずいぶん持ったと思う。次もタイガーで、後継モデルっぽそうなやつを注文した。