hitode909の日記

以前はプログラミング日記でしたが、今は子育て日記です

数ヶ月前は、次は海外どこ行こうかなとのんきなことを言っていたけど、あまり出かけられる雰囲気ではなくなってきた。突然海外に行けるのは平和だったなと思う。海外に行けないということはまとまった休みがあっても意味がないということを意味している。

GARMINのBody BatteryをSlack statusに設定する

GARMINのBody Batteryを計測できる時計が身の回りで流行っていて、Slackに「いまbody battery70です」とか書いて元気さをアピールしたり、Body Batteryめっちゃ下がってるので難しいことをする気力はないという表明をしたりしていた。
わざわざ近況を手で書かなくても、Slackのstatusとして見えるようになってると便利そうと思ったので自動化するスクリプトを書いてみることにした。

既存手法と実装方針

GARMINはfitbitとちがって個人向けのAPIを用意してくれていない。同僚が申請してみたところビジネスプランを書けって弾かれたと話していた。そのため人々はさまざまな苦労の末にデータを取り出している。

一日中スクショを撮りまくるわけにもいかないのでPuppeteerを使うことにして、Slackに投稿する部分はとりあえず手抜きでlegacy tokenを使うことにした(のでそのうち動かなくなる)。
これでもバージョン2のプロトタイプで、バージョン1として書いてみた版ではより治安が悪くて、ブラウザでログインして得たセッションcookieをハードコードしたRubyのスクリプトで、定期実行はBitBarのディレクトリに放り込むことで1分ごとに自動実行する、BitBar as a cronというアーキテクチャを構築していた。
24時間ほどすると動かなくなったので、ログインセッションが永久に続くわけではないことが分かったので、Puppeteerを使うように切り替えることにした。
github.com

ぽくつなさんの記事を思い出してgtsを使ってみたらTypeScriptをすぐに書き始められて便利だった。
blog.pokutuna.com

様子

スクリプトを実行するとこういうステータスになる。体力21 ストレス31 心拍数70 コンディションは😣ということがわかる。今週ずっと低調で寝てもあまりシャキッとしない。今日は家でチャングムの誓いを見てたら一日が終わった。

f:id:hitode909:20200307185054p:plain
体力21 ストレス31 心拍数70 コンディションは😣

ストレスの表示がいけてないと思っていて、🧠30と🧠80が並んでるときにどっちが何なのかわからない。正解は🧠30だとリラックスしていて🧠80だと緊張感が上がっている。
ステータスの絵文字は10段階で😫😖😣😞😉🙂😅😃😆🤩が出る。カスタマイズも可能で、絵文字のカスタマイズもできるようにしている。EMOJIS=':ant: :butterfly: :bee:'で調子悪いときは🐜、平常時は🦋、調子良いときは🐝が出る。
プロトタイプなのだからべつに絵文字変えられなくてもいいのだけど日によって気分を変えたいかと切り替えられるようにしてみた。

そんなにリアルタイムに送られるわけでもなく、まず時計で計測がおこなわれ、スマホに転送されたのちにスクリプトを実行されてようやく反映されるので、たとえば会議中にゲキ詰めされていて、その結果ストレスがぐんぐん上がる様子が観測される、みたいな精度は出なくて、今日の午後は体力ぼちぼちですね、くらいの頻度に落ち着くと思われる。精度や即時性を求める人は、時計の文字盤にカメラをくくりつけてライブ中継するのが良いと思う。

しばらく様子を見て便利だったらSlackとの認証をちゃんとしたOAuthにしたり、パスワード預かりたくはないのでウェブアプリにする線はなしで、Electronアプリにしたらよいかなと考えている。GARMIN Connectへのスクレイピングもやめたいので、ちゃんと起業してプライバシーポリシーやビジネスプランなど用意してちゃんと申請したい気もする。

GARMIN機器を持ってない人はとりあえず買ってみてください。昨年10月に買ってまだ気に入っていて会う人全員に勧めている。

blog.sushi.money

ユーザーがURLを決められるパターン

ユーザーがURLを決められるパターンについて雑談していた。我社のメンバーはサブドメインに名前を入れられるのを見かけるとおもしろがってlogin.とか取る。だからサブドメインだとよろしくない、ということもなくて、ディレクトリにしたとしても、/.well-known/的な仕様が新たに増えたときに、すでに、.well-knownさんがいると困る。いまどき/~hitode909/みたいに~を入れるのは味わいがありすぎる。

たまに思い出すのが、Scroll To Text Fragmentの話題で、Googleのインデックスからマッチしないものを探したという話で、へえと思った。そういう配慮があるのはありがたい・

これを踏まえ、 URL の仕様の範囲で 1, 2 文字では無く 3 文字の組み合わせで候補が出され、 Google の過去 5 年の URL 履歴でヒットしないものがリストアップされた。
~&~

~

~@~

Scroll To Text Fragment と :~:text | blog.jxck.io

みすず書房の本を手に取ると、この上品な装丁はすばらしい、という気持ちになる。同じ本をKindleで読んでると口にホースが繋がってて水を直接吸ってるような気持ちになる。

ImageMagickでSlackのカスタム絵文字のダークモード対応する

こういうSlackのカスタム絵文字があるとして、背景が透過されているのでダークモードを使っていると黒背景に黒文字になってしまい見えない。

f:id:hitode909:20200305172253p:plainf:id:hitode909:20200305172253p:plainf:id:hitode909:20200305172253p:plain

透過部分に白いシャドウを入れられるとよくて、ImageMagickを使うと1コマンドでシャドウを入れることができる。

convert original.png \
   \( +clone -background white -shadow 100x8+0+0 \) \
   -background none -compose DstOver -flatten -compose Over \
  out.png

ドキュメント的にはこのあたり。暇なときにImageMagickのUsageをひたすら見ておくと、これImageMagickのUsageで見たやつだと進研ゼミ的に思い出せて便利。


白いシャドウが入っていても白背景の人は気づかないし、Solarized的な優しい色にしている人にも白い影は認知されず、黒背景の人だけ気づけるようになって便利。

f:id:hitode909:20200305172552p:plainf:id:hitode909:20200305172552p:plainf:id:hitode909:20200305172552p:plain


と言いつつ僕はダークモードを使っていないので、こういうおもてなしをしてあげることはなくて、ダークモードを使ってる人から絵文字が見えないとクレームが来たら、こういうImageMagickのコマンドで変換できるのでよろしく!!という案内をすることになると思う。

早く帰って家焼き肉したところ油の多い肉を買いすぎて気持ち悪くなりながらもいいから焼くぞとなって疲れた。次は赤身の肉を選んで買うようにしたい。
チャングムの誓いの3話を観て、これ見始めると延々と続くことになるので暮らしが破壊されそう。