最近買って良かったモノ DJI Action 2

DJI Action 2 というカメラを買った。 1週間使ってみてかなり気に入っている。

DJI Action 2 - 撮る、遊ぶ、もっと自在に - DJI

胸ポケットに入るコンパクトなサイズ。 気軽に持ち運べるのでちょっとした外出やアウトドアでも荷物にならないのが嬉しい。

動画の手ブレ補正がすごい。 見た通りジンバルでは無いのだが、ジンバルで取ったかのようなスムーズな動画が撮れる。

音声の録音も優秀で屋外で喋っている声もしっかりと聞き取りやすく録音できる。

クイッククリップという、 短い動画を撮るモードがあってそれが楽しい。 デフォルトでは15秒。

身につけたままタイムラプス撮影をして歩いても楽しい映像が取れる。

スマホアプリで簡単にスマートフォンに取り込むことができる。

スマホで撮る写真や動画も高画質高品質になってきて撮影するのが楽しいが、こういうスマホとは違うものが撮れるカメラは楽しい。買ってよかった。

Google CloudのAssociate Cloud Engineer を受けようとしている

Google CloudのAssociate Cloud Engineer Certificationを受けようとしている。

Coursera とQwiklabsして勉強してその後に公式の模擬試験を受けて本番に望めば多分受かるんじゃないかと思う。アソシエイトの試験なのでそんなに難しくはないはず。プロフェッショナルの方は難易度が高いので多分受けない。

GoogleクラウドはCoursera でたくさんコース提供しているので勉強しやすい。Qwiklabs はハンズオンラボのサービスで、Googleに買収されているのでGoogle Cloudのハンズオンがいっぱいある。

仕事で主に使っているのはAWSなのでなんでGoogle Cloudなんだと言う感じだが、好みの問題なのでしょうがない。

見出しを5W1Hにするとわかりやすいドキュメントがかけそう

見出しを5W1Hにするとわかりやすいドキュメントがかけそう。読む人の知りたいことを言語化するとなぜ・なに・なんのためのような形になると思うで読む人にとっては負荷が低くなりそう。

f:id:nakaoka3:20211103231253p:plain
見出しがWhat, How, Whyの例 https://simperium.com/overview/

あと、例を書くときに目立つようにDO / DON'T をつけるとわかりやすい。「何々をしてください」 「何々をしないでください」 と書かれるとちゃんと読まないと反対の意味に取ってしまう。 やる・やらないを目立つように書いて、さらに色や記号で使っていると一瞬でわかってありがたい。

f:id:nakaoka3:20211103231124p:plain
わかりやすいDO / DON'Tの例 https://material.io/components/app-bars-top#anatom

読者の負荷をどのように下げるかと言うことを考えるとわかりやすいドキュメントが作れそうだ。

古くなったGitHubのissueを自動で閉じるようにした

古くなって忘れ去られそうになったissueに対して自動でリマンドし、さらに時間が経過すると自動で閉じるようにした。

GitHub - actions/stale: Marks issues and pull requests that have not had recent interaction

モチベーション

放置されがちなissueが多いのでなんとかしたいっていうのが動機だ。 それに加えて自分たちのチームではSlackやミーティングなどリアルタイムでのコミニケーションに頼っていることが多いと感じている。 なのでissueのような 非同期で行える 場所を活用したいと考えている。 ミーティングのコストが大きいと言うこともあるし、いろんな事情を抱えた人と働いているので必ずしも同じ時間に働く必要はないと考えている。

非同期なコミニケーションやっていきたいねという話は前にも書いていた。

リモートワーク - nakaoka3のはてなブログ

やったこと

手動で古いissueをチェックして「閉じ忘れていませんか」とメンションを飛ばしたりするのは手間がかかりすぎるのでGithub Actionsを使って自動で行うようにした。 本当は30日ぐらいでリマインドする設定をしたかったが、先の予定をissueに入れる場合があるという意見があったため、90日でリマンドしてそこからさらに14日経過すると閉じるようにした。

主な設定は以下。

GitHub - actions/stale: Marks issues and pull requests that have not had recent interaction

          days-before-issue-stale: 90
          days-before-issue-close: 14
          stale-issue-label: "stale"
          exempt-issue-labels: "自動で閉じないで"
          days-before-pr-stale: -1
          days-before-pr-close: -1

これから期待すること

ただ単にissueの数を減らしたいと思っているのではない。 issueを入れた時は忙しくて着手できなくても、少し時間をとってリマインドされたらその時には着手できたり、いいプランが 思い浮かぶかもしれない。そういったきっかけにしたいと思っている。

メモアプリとデータポータビリティ

最近 Simplenotes にちょっとしたメモを書くことが増えた。

メインで使っているメモアプリObsidianのデータをiCloud に移したことで、Appleのデバイス以外からアクセスできなくなったのが 理由の1つだ。

Simplenotesの開発をしているのはautomatticと言う会社だ。 WordPress.comのオーナーであり、少し前だとTumblrを買収したことでもニュースになっていた。

Automattic – Making the web a better place

愛用しているpodcastアプリのPocket Castsもこの会社が保有している。 何年か前に日記アプリとして流行っていたDay Oneもこの会社が保有している。 Tumblrのように買収したアプリだろう。自社サービスの一覧を見るとなかなか自分の好みにあったアプリ・サービスを保有している。

久しぶりにDay Oneをインストールしてみた。 こういうメモ型のアプリで気にしているのがデータトランスポータビリティーだ。つまり自分のデータを扱いやすい形でエクスポートできるかというのを重視している。

Obsidianを使っているのも、データが全てMarkdownのテキストファイルで簡単に移動できるからだ。

Simplenotes 及び Day One の2つのアプリでそれぞれエクスポートをしたところ、ユーザにやさしいデータ形式でエクスポートされた。

Day One が1つのjsonファイル。 画像がある場合は画像のファイルも一緒にダウンロードできた。 simplenotes は同じように json のファイル。それに加えてページごとにテキストファイルも一緒にダウンロードできた。

2つとも データポータビリティーの高いアプリなので安心して使うことができる。 このautomatticと言う会社はポータビリティーを大切にしている企業なのだと思う。好感が持てる。

GDPRにもデータポータビリティーの権利に関する記述がある。

GDPRにおけるデータポータビリティの権利とは、①事業者等に自ら提供した個人データを本人が再利用しやすい形式で受け取る権利、②技術的に実行可能な場合には別の事業者等に対して直接個人データを移行させる権利とされている(図表1-3-1-11)。このような権利を設定することで、個人データの保護を図るとともに、個人データの囲い込みの防止による競争の促進、個人データを活用したイノベーションの創出、ユーザーのコントロール下での個人データの共有の促進によるユーザーの利便性向上といったメリットが期待されている。すなわち、データポータビリティには、個人の権利の確立・保障という側面と、競争政策的な側面の両面がある。 (https://www.soumu.go.jp/johotsusintokei/whitepaper/ja/r01/html/nd113130.html)

ユーザとしてはエクスポートできるのは当然として、再利用しやすい形でエクスポートしたい。そういう機能を提供しているアプリは積極的に使っていきたい。 アプリを作る側としては、 ユーザの権利を守るためにこういった機能を後回しにせずに実装していきたい。 メモアプリだけではなく、ブログのようなユーザが文章などのコンテンツを投稿するサービスでも必須だと思う。

MySQLでもjupyter notebook を使いたい

DBにクエリを叩いて調査していて、SQLでもJypyter notebookやR notebook のようなUIの環境がほしい!と思った。

jupyterとpython(pymysql, pandas)でやったらやりたいことができた。

jupyterを起動して、セルに以下のようなコードを書く。

import pymysql
conn = pymysql.connect(host=host,user=user,password=password,db=db, charset='utf8')

import pandas as pd
pd.read_sql_query("select * from hoge where id=123", conn)
# 下に結果のテーブルが表示される

何が嬉しいかというと、クエリ1を実行して何かを確認して、クエリ2でまた何かを確認して、クエリ1や2で取得した情報をクエリ3で使って……というようなことを1画面でできる。ノートを取りながらクエリを実行するよりも思考の流れに近い形で行うことができる。

さらには Python なので old_id = "hoge", new_id = "foobar" のように変数にすればどのIDがどういう意味だっけということを覚えておく必要がなくなる。

後から見直すことがあってもわかりやすい。markdownなどのフォーマとでエクスポートすることもできる。