@kyanny's blog

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

Google One 100 GB

MacBook Air のストレート容量を空けたくて、なぜか Googleフォトにアップロードできなかった写真や動画をとりあえず Google Drive にアップロードしたら Google アカウントの容量が残り少なくなって警告滅が出るようになったので、 Google One のメンバーシップを購入した。とりあえず一番安い 100 GB プランを年額支払いで。 Google アカウントに iPhone のデータをバックアップしたくはないのでアプリは入れなかった。というか個別のアプリなどで実質バックアップされてるようなものだ。

Google Nest Hub から Duo を使って自分のスマホに電話をかけたいがうまくいかない

やり方調べてやってみたが、なかなか期待通りに動かない。ファーストネームではいけるが、家庭内での自分のニックネーム(仮にクマ太郎とする)ではうまくいかない。

まず、 Google アシスタント全体的にいえることだが、発話内容の認識精度が悪い。「ナガエケンスケに電話して」を「永井謙介」と解釈したりする。そんな人、アドレス帳にいないのに。

次に、参照するアドレス帳(コンタクトリスト)がどれなのかが曖昧でデバッグしづらい。「OK Google クマ太郎に電話をかけて」に対して「クマ太郎さんにハングアウトで通話します...エラーが発生しました」となってしまった(エラーメッセージの細かい言い回しは違ったかもしれない)。

なぜ Duo ではなくハングアウトなのかわからなかったが、 Google Home アプリの「マイアクティビティ」から Google アシスタントがどのコンタクトリストを対象に選んだのかの手がかりが得られた。

f:id:a666666:20210115214933p:plain f:id:a666666:20210115214947p:plain f:id:a666666:20210115214959p:plain

この場合、「クマ太郎」で選ばれた連絡先は電話番号が登録されていないため、 Duo ではなくハングアウトを使おうとしたのだな、と推測できる。

連絡先の中に「クマ太郎」で登録されたものがないか探したが、無かった。連絡先に無いのになぜ Google アシスタントはこの連絡先を探し出せたのか?が謎だったが、「よく使う連絡先」というのの中に「クマ太郎」という名称で該当のメールアドレスを持つ連絡先があった。これを削除することで、「クマ太郎」で間違った連絡先にハングアウトしようとする挙動は直った。

f:id:a666666:20210115215551p:plain

しかし、今度は「クマ太郎」だと連絡先の中にだぶって二件ある妻の連絡先を選択して「どちらですか」みたいなことを聞いてくる。妻の連絡先には当然「クマ太郎」とはどこにも書いていない。

ならばと連絡先に「クマ太郎」というニックネーム・連絡先名で自分の電話番号を登録したが、これでもうまくいかない。「よく使う連絡先」にあったのが検出されてたのなら「連絡先」に登録してあるものは優先的に検出されても不思議では無いのに、まったく検出されないというのは納得いかない。

ここで行き詰まっている。 Google の連絡先には「その他の連絡先」というのもあり、こちらは過去に Gmail でやりとりした連絡先などが大量にあり、しかも一括削除できない困ったものだが、ここから「クマ太郎」という名前の連絡先を探して消しても改善しない。「マイアクティビティ」をみると、対象のアドレスを選べていない様子で、見つからないのでアシスタントがよく使う?連絡先を提案した結果、妻の連絡先が出ているのだろう。

まぁぶっちゃけ、自分のスマホから自宅の Nest Hub に Duo で電話をかけることのほうが重要で(妻が在宅だがスマホに電話しても気づかないことがあり、固定電話があればなぁと思うことが稀にあるので、それはできているので逆方向はできなくても構わないのだけど(俺が外出中に妻が電話をかける用事があるのであれば、わざわざ Nest Hub など使わずスマホで電話なり LINE なりすれば良いので)、なんか中途半端なのと、うまくいかない理由がわからないのがとにかく気持ち悪くて困る。

Git: リモートで削除済みのローカルブランチを消す

リモートで削除済みのブランチを調べるには git branch -v オプションを使う。

[gone] とマークされているのが削除されているブランチ。それを git branch -d なり -Dなりで削除すれば良い。

削除済みリモートブランチを追跡しているローカルブランチを1発で全削除するコマンド - Technology Engineering

(ちょっと [gone] を手元でうまく再現できないので、上記ブログから例を拝借)

$ git branch -v
* develop           fef1cdd Merge pull request #30 from abcdef/fix/bazbarfoo
  feature/foo       e57408f [gone] Fix deploy
  feature/bar       a9b73ad [gone] Upload image
  feature/baz       b833113 [gone] Fix test
  feature/foobar    703e2ad [gone] Add foobar.c
  feature/foobaz    1587581 [gone] Fix foobaz.rb
  feature/barfoo    37265cb [gone] Add barfoo.php
  feature/barbaz    3c121ca [gone] Fix barbaz.py
  feature/bazfoo    cb69767 [gone] Add bazfoo.go
  feature/bazbar    bb8575f [gone] Fix bazbar.pl
  feature/foobarbaz 66d2807 [gone] Fix README.md
  fix/foobazbar     84a781e [gone] Add gitignore
  fix/bazfoobar     cd36a6b [gone] Fix ci
  master            0a41ce8 Merge pull request #20 from abcdef/develop

[gone] とは何か、については git for-each-ref のドキュメントで触れられている。

Git - git-for-each-ref Documentation

upstream

The name of a local ref which can be considered “upstream” from the displayed ref. Respects :short, :lstrip and :rstrip in the same way as refname above. Additionally respects :track to show "[ahead N, behind M]" and :trackshort to show the terse version: ">" (ahead), "<" (behind), "<>" (ahead and behind), or "=" (in sync). :track also prints "[gone]" whenever unknown upstream ref is encountered. Append :track,nobracket to show tracking information without brackets (i.e "ahead N, behind M").

Django: select_related, prefetch_related, Prefetch の使い所

Django: select_related と prefetch_related についてメモ - @kyanny's blog

以前メモしたが、やはり自分で手を動かさないと腹落ちしないので。

サンプルコードと実行例は以下に置いた。

github.com

モデルが Question has many Choice という関係であるとき、

  • select_related は choice.question というアクセスで N+1 クエリが発生するのを防ぐ(JOIN によって)
  • prefetch_related は question.choice_set (choices) というアクセスで N+1 クエリが発生するのを防ぐ(IN によって)
  • Prefetchprefetch_related で関連先をとるときに WHERE で条件を指定したい場合に使う(WHERE question_id IN (...) AND votes = 0)