Posts for: #Device

クラウド経由で tapo を制御する方法がわからない

0時に寝て7時に起きて8時過ぎまでだらだらしてた。オフィスのエアコンの効き具合がよくなくて昼間暑くてやる気にならなかった。

先日 ifttt で tapo p105 の制御 を行った。これが動くということはなんらかのクラウドの api 経由で tapo p105 を制御できている。次の記事をみながらやってみようと試してみた。結論から言ってクラウドの api 経由ではできなかった。

アクセストークンを取得する。terminalUUID は適当に生成すればよい。

$ curl -s -X POST -H "Content-Type: application/json" -d '{"method": "login", "params": {"appType": "iphone", "cloudUserName": "xxx@example.com", "cloudPassword": "***", "terminalUUID": "bf63e1d0-d5dc-4636-abf1-7eeada585935"}}' https://wap.tplinkcloud.com/ | jq .
{
  "error_code": 0,
  "result": {
    "accountId": "142785160",
    "regTime": "2023-06-11 04:59:43",
    "countryCode": "JP",
    "riskDetected": 0,
    "email": "xxx@example.com",
    "token": "***-***"
  }
}

ここで取得したアクセストークンを使ってデバイスの一覧を取得する。

$ curl -s -X POST -H "Content-Type: application/json" -d '{"method": "getDeviceList"}' https://wap.tplinkcloud.com/?token=***-*** | jq .
{
  "error_code": 0,
  "result": {
    "deviceList": [
      {
        "deviceType": "SMART.TAPOPLUG",
        "role": 0,
        "fwVer": "1.3.6 Build 20230308 Rel. 52591",
        "appServerUrl": "https://aps1-wap.tplinkcloud.com",
        "deviceRegion": "ap-southeast-1",
        "deviceId": "802241DA5175CF114E567DE8D72A3094210CB12D",
        "deviceName": "P105",
        "deviceHwVer": "1.0.0",
        "alias": "U21hcnQgUGx1ZyAoS2F6YW1vcmkgT2ZmaWNlKQ==",
        "deviceMac": "482254AC1D25",
        "oemId": "495AC9D888EB711C42A28BECF62071CF",
        "deviceModel": "P105",
        "hwId": "58070BD9D8ECC915CD3D6F20A2172712",
        "fwId": "1D18AD293A25ABDE41405B20C6F98816",
        "isSameRegion": true,
        "status": 0
      }
    ]
  }
}

ここまでは従来のスマートプラグと同様に動く。ここから先の手順は従来の hs105 と tapo p105 では手順が異なるみたい。passthrough というメソッドを呼び出してみてもエラーが返ってくる。

$ curl -s -X POST -H "Content-Type: application/json" -d '{"method":"passthrough", "params": {"deviceId": "802241DA5175CF114E567DE8D72A3094210CB12D", "requestData": "{\"system\":{\"get_sysinfo\":null},\"emeter\":{\"get_realtime\":null}}"}}' https://wap.tplinkcloud.com/?token=***-*** | jq .
{
  "error_code": -20571,
  "msg": "Device is offline"
}

どうやら tapo シリーズはスマートプラグ自体が web api のエンドポイントを提供していて、ローカルからデバイスの web api を呼び出して制御できるらしい。例えば、次の記事でその手順が書いてあって、同様のやり方で実装した野生のライブラリもたくさんみつかる。

うちのシェアオフィスのネットワークはローカルの ip アドレスへの通信をすべて拒否しているようなのでこのやり方はうちのオフィスでは検証できない。しかし、tp-link 社のスマホアプリと ifttt の webhook 経由で p105 の制御ができているため、おそらくローカルのエンドポイントに接続する以外の別の手段があるのだと推測する。それをインターネット上で数時間探してみたものの、発見できなかった。この前 interop の展示で聞いた話しだと ifttt は非公開 api を使ってインテグレーションを実装しているという話しだったけど、どうやってクラウド経由で通信しているのだろう?と不思議に思った。

アイディアのコラボレーション

2時に寝て何度か起きて7時に起きた。今日は勉強会の登板なのになにも準備できてなくてどうしようとか思いながら寝た。

パッケージングとリリースのドキュメント

5月の落ち穂拾いの時期にプロジェクトの開発ドキュメントを刷新していろいろな要項を書き残している。最後に残ったまだ書いていないドキュメントに次の2つがある。水曜日から課題管理やコードレビューの隙間時間に書き出していって3日ほどかけて一通り書き終えた。私は文章を書くのが遅いのと、1回ですべての内容を網羅できなくて、書いているうちに思い出して追記したり、寝かした文章をあとで見返して推敲したりすることが多い。そのため、ドキュメントを1週間ぐらいかけて書いたりする。

  • パッケージング
  • リリース

たまたまメンバーにあるモジュールをリファクタリングのために再実装してもらっている。その開発を完了したら古いモジュールと入れ替える必要があるので、開発だけではなく、パッケージングやリリース周りの作業を把握してもらう、よい機会と言える。これまでパッケージングやリリース周りのインフラはほとんど私が作って運用をまわしてきたので徐々にそれらを引き継ぐタイミングとも言える。開発者はインフラのことを気にせず、アプリケーションを開発してコミットすれば後はすべて ci/cd が自動的にいろいろやってくれて便利ぐらいの感覚で扱えるようにするのが、外資系などではプラットフォームに投資しろと言われたりするものだと推測する。うちらが開発しているプロダクトはコンテナ、RPM、Windows インストーラーとパッケージングする種類が多い。その要項に加えて QA 責任の考え方などについても書いておいた。主には私がいなくなった後に役に立つドキュメントとなるだろう。

チーム勉強会

本当は go の generics の勉強会をやりますと先週宣言していた。しかし、私が遊んでいて全然準備できなかったので代わりに決済とスマートプラグの話しをした。先週末と月曜日 に作った決済とスマートプラグを組み合わせたもの。サービスや仕組みを簡単に説明して、実際にデモを動かして電球を灯す。

参加者からスマートプラグをラズベリーパイに置き換えてパワーリレーというモジュールを使えばもっとスマートにできるんじゃないかという意見が出た。たしかにラズベリーパイなら stripe の決済イベントを受け取るサーバーをデバイス内に同梱させることもできるかもしれない。そうすると、スマートプラグのような電源の on/off だけではなく、ラズベリーパイが扱えるセンサーとインテグレーションすることもできそう。また時間のあるときにやってみたい。コラボレーションって正にこういうことを言うとわかってきた。私が1人でこの仕組みを実装していたときにはラズベリーパイというキーワードはまったく頭の中になかった。他者の視点が加わるから新しいアイディアが広がる。

ネットワークからスマートプラグの制御

昨日は夕方に親が立ち寄るかもしれないというから待機していたのに空振りに終わった。0時に寝ようとしてあまり眠れなくて7時に起きた。ここ最近寝ているのか寝てないのかよく分からない眠り方になる。

決済してスマートプラグを ON にしろ

昨日の続き 。夕方に Tapo P105 が届いたので業務を終えてからさっそく使ってみた。

オフィスの wifi に接続して、tp-link 社のスマホアプリからデバイス登録する。スマホアプリからはすぐに on/off できた。スマホで電源の on/off を制御できてあまり嬉しいことはパッと思いつかないけど、プログラムから制御できるならなにか遊べそうな気もしてくる。ifttt というインテグレーションサービスがあって、それを使うと tp-link 社のデバイスと ifttt 社の web api 経由で制御できる。おそらくなんらかの web api が tp-link 社からも提供されているはず。それが公開されていれば ifttt を使う必要はないし、すでにハックされているものを使うのでもよいかもしれない。ひとまず動かすことを目的とするので ifttt を使う。スマートプラグに電球をつなげて、決済したら電球が灯って3秒後に消えるようなサンプルアプリを作った。一通り最後まで動かすことができておもしろかった。

スマートプラグ制御の調査

23時に寝てうまく眠れなくて5時に起きた。そのまま10時ぐらいまでだらだらしてた。

スマートプラグの通電テスター

昨日の続き 。スマートプラグを検索すると TP-Link 社の製品がよく出てくるのでミニスマート wifi プラグの Tapo P105 を購入してみた。この製品だとネットワーク経由で電源の on/off ができそう。ifttt というサービスが TP-Link Tapo インテグレーションを公開している。TP-Link 社も自前で TP-LINK Cloud というサービスを提供していて、どうやらその web api は公開されていないようだけど、おそらくそこで使っている web api を調べてライブラリにしたのが tplink-cloud-api のようにみえる。サイトをみる限りはカメラしかサポートしていないようにもみえる。スマートプラグのようなデバイスがハックしやすい性質のせいか、書いてある情報が曖昧で実際にどうやってデバイスを制御したらよいのかネット上の記事からよくわからない。実際に購入したもので試してみるのが早そう。明日届く予定。

このスマートプラグによる電源 on/off のテスターに、ダイソーで電球を購入してきた。電源ソケットアダプタが100円、電球は100円、200円、300円とそれぞれあったんだけど、100円の差異でどうせ買うなら精度のよいものをと考えて300円のものを購入した。LED で電力消費も少ない。

試しにオフィスにあった amazon 純正スマートプラグ経由で接続して alexa アプリで on/off したら意図したように電球が灯ってテスターの代替にできた。デモのために使うのでそれぐらいわかりやすいのがよい。

モロゾフ

昨日参加したもくもく会を借りていた 中央区文化センター には2フロアに渡って大小いくつかの会議室がある。それぞれの会議室には張り紙をしていて借り主の名前が外からわかる。たまたま通ったところに「モロゾフ労働組合」と書いてあって、どこかの会社の労組が会議しているんだなと覚えていた。今日になって来週の東京出張のお土産を探していたらモロゾフというお店があることに気付いた。モロゾフの歩み によると1931年創業の神戸本店の洋菓子の会社らしい。これもなにかの縁だと思って今回はモロゾフさんの神戸本店へ行って ブロードランド 15個入 をお土産用に購入した。

自分用にアーモンドケーキを買って食べてみた。しっとり食感で控え目にアーモンドの風味がして甘過ぎなくて後味のよいケーキでおいしかった。

yubikey bio を完全にマスターした

2時に寝て遅くまで飲んでいたせいか、やや吐き気もしながら朝起きてだらだらして11時ぐらいに起きた。

1password のロック解除を yubikey で行う

先日購入して触っていた yubikey bio の設定 の続き。1password のロック解除を指紋認証で行いたかったが、1password の 8.10.4 のアプリではロック解除をシステム認証で行おうとするとエラーが発生していた (バグってた) 。5月の頭に 8.10.6 がリリースされていてシステム認証のバグが直っていることに気付いた。1password のアプリケーションがどうやって linux のシステム認証を使っているかは次の1文に書いてある。

システム認証は、Linux のユーザーアカウントに組み込まれたアクセス制御機構を使用します。これは polkit と PAM (Pluggable Authentication Modules) という2つの Linux 標準に依存しています。この2つを組み合わせることで、安全な認証サービスを提供します

https://support.1password.com/system-authentication-linux/#about-system-authentication-security

私は polkit を使ったことがなくて初見でよく分かっていないが、どうやら polkit から pam を介して認証しているようにみえる。pam.d 配下の設定を調べてみると /etc/pam.d/polkit-1 がある。前回の設定で pam.d の設定とテストの方法を理解していた。ここまでくれば Module Arguments のドキュメントをみながらオプションを設定するだけ。1Password のロック解除をYubiKeyでやる の記事で origin/appid にホスト名を指定しているが、最新のモジュールだと指定しないときはデフォルトでホスト名が使われるようにみえる。

  • origin: FIDO 認証手順の party ID を設定する、値が指定されない場合は識別子 pam://$HOSTNAME が使用される
  • appid: FIDO 認証手順の application ID を設定する、値を指定しない場合は origin で使用されたものと同じ値が使用される (origin も指定しない場合は pam://$HOSTNAME)
  • nouserok: 認証しようとするユーザーが authfile 内に存在しない場合や authfile が欠落/不正確な場合でも、認証の試行を成功させるように設定する
  • cue: タッチすることを促すメッセージを表示するように設定する

これらを踏まえて u2f で認証が成功したらそれ以降の処理をスキップするように次の設定を先頭に追加する。

$ sudo vi /etc/pam.d/polkit-1
auth   sufficient   pam_u2f.so nouserok cue
...

cue を指定したことでパスワードプロンプトを表示せず、デバイスをタッチするように促される。よい感じ。

$ pamtester polkit-1 t2y authenticate
Please touch the device.
pamtester: successfully authenticated

これで pam の polkit の設定が正しいことを検証できる。この後に 1password のアプリケーションでロック解除するときに u2f を使って指紋認証できた。めっちゃ便利。

法人決算の続き

0時に寝て何度か起きて6時過ぎに起きた。休日は朝だらだらしてオフィスへ行くのが9-10時ぐらいになることが多いのだけど、今日は普通に8時過ぎに行けた。

法人決算

朝から法人決算の続き。昨日たまたま消費税の計算をして、祝日やのに e-tax 稼働しているんやと思いながら申告した。これまで休日や祝日は稼働していなかった気がするので時代の変化にあわせてシステムはなるべく24時間稼働するように少しずつ変わってきている。今日も法人決算の続きをやっていて、課税所得を確認して、カテゴリ的には3つに分類される法人3税と呼ばれる税金を算出した。具体的には6つの税金を算出しないといけない。

  • 法人税 (=> 国税 => e-tax)
    • 法人税
    • 地方法人税
  • 法人住民税 (=> 地方税 => eltax)
    • 法人県民税
    • 法人市民税
  • 法人事業税 (=> 地方税 => eltax)
    • 法人事業税
    • 特別法人事業税

過去の法人決算の経験からまず法人住民税と法人事業税を確定させてから法人決算の申告をすべきだというプラクティスがある。というのは、法人住民税と法人事業税の数値になんらかの誤りがあると法人決算で提出する別表の数字も修正しないといけないため、先に地方税を確定させた方が手戻りを少なくできる可能性が高い。電子申請するとそれぞれの書類の数値のバリデーションが機能するので手計算や手入力で誤りがあったときに発見できる可能性がある。これは電子申請をするメリットの1つでもある。

地方税を管轄するのが eltax で国税を管轄するのが e-tax で別システムになる。いまとなっては、事前にチェックしておけばよかったなと思うところだが、あとの祭り。e-tax は5月3-4日が稼働していて5-7日が休止している。eltax は5月3-5日が休止していて6-7日が稼働しているというスケジュールになっていた。双方のシステムが稼働していれば今日中に終えられたものが、なんともちぐはぐなスケジュールで申告を完了させるのは来週以降に持ち越すことになる。また来年やるときはこのそれぞれのシステムの稼働スケジュールを事前にチェックして法人決算の作業日程を決めるように法人決算の issue に書き込んでおいた。来年はもっとうまくやる。

今日のところは法人3税の税金を算出し終えて、それらと関係ない別表の大半を作成した。基本的には決算の試算表から数値を転記したり、特例措置の申請のための書類を作ったりでなにも難しくない。

iijmio と iphone で作るモバイル wifi ルーター

今年に入ってから 実家のオフィス化 の準備を着々と進めている。晩年は足が不自由だった祖父が生活できるよう、倉庫の一部を改築して車椅子でも生活できるような部屋になっていて、ある種の離れのようなスペースになっている。祖父が他界してからは誰も使っていない。トイレもお風呂もキッチンもついていて広さで言えば14畳ぐらいある。これまで使いにくかった理由は2つあってエアコンとインターネットがなかった。この前、母にお願いしてエアコンを購入してもらい、つい先日、設置が完了したらしい。

インターネットの回線をひくことも検討していたが、どうやら5000円/月ぐらいかかることがわかってきた。母はインターネットを必要としていないので月1回ぐらいしか使わないのに5000円も支払うのはもったいないなと一旦ストップしていた。スマートフォンのテザリングでお仕事できないわけではないから当初はそれでもいいかと考えていた。私の個人のスマホとインターネット回線は iijmio を使っていて iij さん好きなので同じように pocket wifi 的なものはないのかな?と調べたら正にそういう記事をみつけた。

よくよく考えたらデータ専用の sim を購入したらあとはモバイル wifi ルーターだけあればよいことに気付いて、それって iphone でできるやんということに気付いて、過去に使っていた古い iphone 11 を再利用できることに気付いた。さらにいまは esim という物理 sim を必要としないソフトウェアベースの sim もあるようで月額の料金も esim の方が安い。 音声通話なしのデータ専用プランで税込で次の金額になる。さらに使わなかったらデータ量は翌月以降に繰越できる。プランによって繰越できる期間が異なる。例えば2GiBなら翌月末まで繰越できる。繰越という概念はたまにしか使わない私の用途にぴったりでひとまず2GiBプランを選択してお試し運用してみることにした。

  • 1GiB: 165円/月
  • 2GiB: 440円/月
  • 5GiB: 660円/月
  • 10GiB: 1,100円/月
  • 20GiB: 1,650円/月

esim というソフトウェアベースのものだと、申し込みして5分後に設定できましたというメールが届き、すぐにアクティベートして iphone 11 に esim の設定をしたら10分後にはインターネットに接続できるようになった。その後 apn の設定を行ってテザリングもできるようになって、30分後には iphone 11 をモバイル wifi ルーターとして macbook からインターネットにアクセスできるかの疎通確認を終えた。

つまりソフトウェアベースで業務を行うことのワークフローの効率が半端なく高い。これが物理 sim なら数人の人手と待ち時間がかかることは容易に想像できる。物理的にしかできなかったことをソフトウェアベースにしてワークフローを洗練化させることの強力さを実感した。常々、私が課題管理の文脈でコミュニケーションコストを減らせれば生産性が上がると開発者に啓蒙していることと同じで自分がやろうとしていることの概念を追体験するような経験となった。ワークフローの効率を極端に落とすのは人間である。

yubikey bio を触ってみた

3時半に寝て7時に起きた。リリース終えたので晩ご飯を食べてから自分の会社のお仕事をしていたら遅くなった。

ストレッチ

今週もリリース明けでそれほど座っている時間が長かったわけでもないため、腰の張りはあまりなく、負荷は低くなっているのではないかと推測する。今日の開脚幅は開始前156cmで、ストレッチ後158cmだった。右股関節周りの硬さは相変わらず大きく変化はないが、他がよくなった分、右ふともも前の筋を伸ばすと張りがきつくてしんどいように感じた。しばらく余裕のある生活ができるので歩いたりストレッチしたりする余裕が出てくるかもしれない。

yubikey bio を触ってみた

先日 yubikey bio をオンラインストアで購入 した。会社の経費で業務で使うことを目的に購入したのでこの場合は商用利用の輸入にあたる。また別途、輸入についての会計処理を書く。yubico はスウェーデンの会社でどうやら日本向けはスウェーデンの首都ストックホルムから発送されてきたらしい。安いエコノミープランで注文していた。発送メールを受け取ったのが 4/17 でオフィスの郵便受けに入っていることに気付いたのが 4/29 になる。12日で届いたことになる。船便にしては早いからなにかしら航空便の安いプランで届いたのだと推測する。

Economy - 10-20 Working Days - No tracking available

早速、接続していろいろ触ってみた。結論から言って ubuntu 22.04 で fido2 pin を設定して u2f を使って2要素認証のメソッドとして pam や web アプリケーションから問題なく使えた。ubuntu 向けのアプリケーションも ppa のリポジトリを追加して apt からインストールできる。

このドキュメントには次の4つのアプリケーションのインストールが書いてある。

  • YubiKey Manager (CLI): sudo apt install yubikey-manager
  • YubiKey Personalization Tool: sudo apt install yubikey-personalization-gui
  • libpam-yubico: sudo apt install libpam-yubico
  • libpam-u2f: sudo apt install libpam-u2f

yubikey は他にもいろいろな認証の用途に使えるらしい。今回は fido2 の設定のみを紹介する。fido2 pin を登録するには YubiKey Manager の GUI を使った方が簡単なので次のアプリケーションも一緒にインストールするとよい。

$ sudo apt install -y yubikey-manager-qt
$ ykman-gui

おそらく ykman の cli でも登録できると思うけど、yubikey や認証設定に慣れていない初心者は gui のナビゲーションに従って作業して結果を確認した方が安心だと思う。fido2 pin は ssh でいうところのパスフレーズのようなものなのかな?デバイスが盗まれるのを防ぐために pin があるという。一方で web アプリケーションが fido2 で認証するときに pin を要求するかどうかは任意になるらしい。よくあるパターンは初めて使うときは pin を要求して2回目以降はスキップするといった用途が多いのではないかと推測する。

この fido2 pin を使って Universal 2nd Factor (u2f) の設定を行う。

$ mkdir -p ~/.config/Yubico
$ pamu2fcfg > ~/.config/Yubico/u2f_keys
Enter PIN for /dev/hidraw3: ***  <= このときに yubikey manager で設定した fido2 pin を入力

この後 yubikey デバイスが点滅するので丸いセンサー部分を指でタッチすると完了する。このときに指紋登録しているのか、物理的にタッチすることを要求しているだけなのか、よくわかっていない。この前に chrome で指紋登録 をしていたのでそれが使われているのかもしれない。いま ykman で設定をみたら Fingerprints registered とあるのでどこかしらに指紋登録されているらしい。おそらく chrome じゃないかと推測する。

$ ykman fido info
WARNING: PC/SC not available. Smart card (CCID) protocols will not function.
PIN is set, with 8 attempt(s) remaining.
Fingerprints registered, with 3 attempt(s) remaining.
Always Require User Verification is turned on.

linux で認証時に u2f を使いたいときは pam_u2f.so を使って pam の設定をするとよい。ubuntu だと /etc/pam.d/ 配下にいろんな認証設定がある。例えば login 時に2要素認証をしたい場合は次のようにフックする。パスワード入力した後に yubikey のセンサーを物理的にタッチして指紋認証を行える。セキュリティに厳しい会社はこういった運用をしているのかもしれない。

$ sudo vi /etc/pam.d/login
...
# Standard Un*x authentication.
@include common-auth
auth       required    pam_u2f.so

パスワード認証の代替として使いたい場合は通常の認証の前に sufficient として呼び出せば指紋認証が成功したときにそれ以降の処理がスキップされる。

auth       sufficient    pam_u2f.so
@include common-auth

これらの設定を確認にするには pamtester というツールを使うと簡単にできる。認証の設定を誤るとログインできなくなってしまうので慎重にテストして振る舞いを確認した上で実際の運用を行うとよい。

$ pamtester login t2y authenticate  <= このときに yubikey デバイスが点滅するので指紋認証する
pamtester: successfully authenticated

せっかく購入したので 1password アカウントや github の2要素認証に設定してみた。ワンタイムパスワードの otp の代替として使える。ワンタイムパスワードを入力するより yubikey のセンサーをタッチする方が日々の運用としては少しお手軽と言える。設定していて otp と yubikey でお互いに2要素認証のバックアップを兼ねることに気付いた。認証方法が増えるのでセキュリティ的には脆弱になるけれど、サービスとセキュリティのトレードオフの考え方から、yubikey の分だけ脆弱になっても物理的なセキュリティを担保できるのであれば利便性を考慮してよいように私には思えた。

yubikey bio を購入してみた

0時に寝て7時に起きた。午前中は洗濯して、昨日届いたお肉を焼いて朝ご飯にしながらドラクエタクトやってた。

yubikey bio の購入

デスクトップマシンが不調だった1-2ヶ月ほど m2 macbook air でお仕事をしていた。デスクトップマシンと比べて明らかに便利だったことがある。1password にログインするときに os のシステムアカウントも利用できて、具体的には指紋認証によりパスワード入力を必要としなかった。デフォルトでは2週間ごとにパスワード入力を必要とする設定になっているが、これも無効にすることもできる。パスワードを忘れないように1ヶ月に1回ぐらいは手入力してもよいかもしれない。生体認証はその精度にまだ懸念はあるそうだけど、こういった日常的な認証における用途ならそれほど高い精度を要求しないことに気付いた。私は個人でお仕事しているから日常でオフィスに保管している物理的なデバイスを盗むのは難しい。他にも linux で使える指紋認証のデバイスを探してみた。しかし、現時点では usb の指紋認証デバイスは windows 一択になっていて linux はサポートされていない。YubiKey ぐらいしか、私はみつけることができなかった。

YubiKey Bio - FIDO Edition をオンラインストアで購入した。船便で購入したので届くまで1ヶ月ほどかかる。急ぐものではないので気長に待つ。

YubiKey Bio - FIDO Edition
$90

Shipping & handling
Economy - 10-20 Working Days - No tracking available
$5

Duties, taxes and/or carrier subcharges
$14.68 USD

日本にお店がないので輸入扱いで関税がかかるのかな?また会計システムに登録するときに税金の計上方法を調べる必要がありそう。

自分たちでやろうとしないことを他人は助けられない

他社のプロジェクト開発のお手伝いでプロジェクトマネージャーとしてこの半年をマネジメントしてきて分かるようになったことが1つある。米軍がアフガニスタンから撤退するときの方便のようにみかけ、ロシアのウクライナ侵攻のときにウクライナ軍が善戦して西側諸国の支持を得たことでその正しさを再確認できた言葉がある。

バイデン大統領は演説で「当事国の軍隊が戦う意思がないのにアメリカが戦うわけにはいかない」という趣旨を繰り返した。

アフガニスタン崩壊と日本への教訓

2月からプロジェクトの開発遅れがみえていてスケジュール調整している。プロジェクトの開発がうまくいかないことの全責任は私にあることは間違いない。その点には一切の懸念も疑問もない。昨今の働き方改革で有休取得が大事なことも理解していて、平均して取得するなら毎月1-2日休むことになる。それは理解できるが、開発が遅延していても有休で休み、その遅延をマネージャである私が休出して開発を肩代わりするという調整を1ヶ月以上続けてきて、この歪みは開発やプロジェクトにとってよくないということもわかってきた。

私個人のモチベーション管理にも多少の影響はあるが、私は指示されて休出しているわけではなく、自分の目的のためにやっているのでこの影響はそれほど重要ではない。

なにが問題かというとプロダクトオーナーシップを開発者がもたないという点にある。私はお手伝いであるから、いずれいなくなる。周りからどうみえようと最終的にプロダクトオーナーシップは契約形態としてもてない。そして、お手伝い先の開発メンバーがもつようになるのが望ましい。しかし、そういう雰囲気はみえない。これまで他社の人間がマネージャーをやっているようなプロジェクトに私が参加したことがなかったためにそういった視点がなかった。そして、私は自分がイニシアティブをもって開発するプロダクトはすべてプロダクトオーナーシップをもって臨んできた。そのため、開発者に裁量を与えることで必然的にプロダクトオーナーシップをもつようになると信じてきたが、いまのやり方だとそうならない気がしている。なぜならば、放っておいても問題になる前に私が勝手に対応してしまうために開発者のインセンティブやモチベーションを阻害してしまうからだ。

プロジェクトにおけるスケジュールや品質を担保するためにはマネージャーである私が一定の尽力をするのは合理的ではある。一方でそれをやり過ぎることで開発メンバーのプロダクトオーナーシップを遠ざけてしまう。プロダクトオーナーシップをもっていない開発者が休出してまで開発に尽力する意味など普通にはない。仮に私が開発メンバーでもそう思うだろう。昔の上長 がやっていたことをみて私が学んだことを、外部の人間として開発メンバーに教えることはとても難しいことを理解できた。

ubuntu の環境構築

0時に寝て8時に起きた。昨日は出張から遅くに帰ってきたのでバテた。

ストレッチ

昨日はもくもく会で遅くに帰ってきたので毎週のストレッチを土曜日から日曜日に変更していた。ここ1-2ヶ月ほどでは最も調子がよかった。今週は出張していて普段より健康的な生活をしていた。というのは、お手伝い先のオフィスでは原則として私は9-18時でしか働けないため、業務の都合でずっと座りっぱなしにならない。例えば、自社のオフィスだとだいたい8時から始業して遅いと23時ぐらいまでずっと座りっぱなしになってしまう。たまたまホテルもいつもよりも離れた場所にとり、10分ほど歩く距離だったのでちょうどよかった。帰ってからホテルで2-3時間作業していたりもするのだが、それでも同じ姿勢でずっと座り続けている方が体にとってはよくないことがわかる。今日の開脚幅は開始前152cmで、ストレッチ後156cmだった。座っている時間が短かったために腰の張りはほとんどなかった。

ubuntu 22.04 lts の環境構築

先日 マシンに ubuntu をインストールした 続きの話し。東京出張があったり、開発の終盤でいろいろやっている中で開発環境を作り直すインセンティブが低かったので環境構築が遅くなった。過去の環境構築の issue が残っているのでそれをみながらやれば5-6時間もあれば作り直せた。結論から言って、マシンスペックが上がって、os も新しいものに変わったので開発環境としてはめちゃくちゃ快適になった。好みだが、私はリソースの潤沢なデスクトップマシンに linux をインストールして開発するのが一番しっくりくる。主観的に感情的にその構成が好きだというもの。

realforce の bluetooth キーボードの設定をするのにもう1つキーボードが必要なことに気付いた。私は bluez というツールを使って bluetooth キーボードのペアリングをしている。ペアリングするためには bluez の bluetoothctl という cli から操作してペアリングを行う。realforce のキーボードは有線/bluetooth 接続を両方同時につなぐことはできないため、bluetooth 接続するためには別のキーボードを接続して cli 操作しないといけない。

$ bluetoothctl
[bluetooth]# power on
[bluetooth]# agent on
[bluetooth]# scan on

bluetooth キーボードから接続要求を送る。

...
[NEW] Device F6:9D:A5:41:B7:1F REALFORCE_2
...
[bluetooth]# info F6:9D:A5:41:B7:1F
Device F6:9D:A5:41:B7:1F (random)
	Name: REALFORCE_2
	Alias: REALFORCE_2
	Appearance: 0x03c1
	Icon: input-keyboard
	Paired: no
	Trusted: no
	Blocked: no
	Connected: no
	LegacyPairing: no
	UUID: Human Interface Device    (00001812-0000-1000-8000-00805f9b34fb)
	RSSI: -51

マシンからデバイスを検出したらデバイス情報を確認してペアリングを実行する。

[bluetooth]# pair F6:9D:A5:41:B7:1F
Attempting to pair with F6:9D:A5:41:B7:1F
[CHG] Device F6:9D:A5:41:B7:1F Connected: yes
[agent] Passkey: ***

これでペアリングが実行されて bluetooth 接続できるようになる。ubuntu 20.04 lts の頃より進化しているのは接続/切断時に電池の残量も表示されるようになった。キーボードには充電池を使っているので地味に嬉しい。残量が少なくなってきたら帰るときに充電を仕掛けて帰れる。

今回の環境構築で1つはまったものがある。vagrant の仮想環境として virtualbox を使う。secure boot のために virtualbox をインストールするときにパスワードを mok (Machine-Owner Key) に登録しないといけない。この作業手順が分からなくて右往左往していた。インストール時に mok のダイアログが表示されてパスワードを登録するが、この後に os を再起動して bios 起動時に特別なダイアログが表示されて mok に登録したいパスワードを入力する。アプリケーションのインストール時に bios の設定が必要という概念が私の頭の中になくて分からなかった。これをやらないと virtualbox サービスが正常に起動しない。調べていると ubuntu 標準の virtualbox は壊れていて 3rd party の contrib なパッケージを使えという古い記事も出てくる。22.04 なら ubuntu 標準の virtualbox でも問題なく、mok の登録後に systemd から virtualbox サービスが起動することを確認した。再起動後の mok のダイアログは1度しか出てこないのでうっかり見逃してしまったら再設定しないといけない。次の cli で再設定できる。

sudo dpkg-reconfigure virtualbox-dkms

ubuntu のインストール

1時に寝て5時に起きて7時に起きた。今週も開発に集中していたのでバテ気味。時間がなくて2ヶ月以上行ってなかった散髪に行ってきた。前髪が目にかかって鬱陶しかったのでいつもよりも短くしてもらった。頭が軽いと日々の生活のストレスも軽減しそう。

ストレッチ

今日の開脚幅は開始前153cmで、ストレッチ後153cmだった。ストレッチ後の開脚幅はいつもとは計り方を変えたので数値は低くなっているが普段と同じぐらいのものだろう。すねの外側の筋は気にならないぐらいになったので復調したと言っていいだろう。今日は右股関節から太ももにかけての張りと右腰の張りが大きかった。今週も根を詰めて長時間オフィスで作業していたので座っているとかかる部位の負荷が高くなっていると想定される。納期が4月末なのでこの生活はもうしばらく続くといったところ。

dell マシンに ubuntu をインストール

いつも通りオフィスで会社の事務手続きをしながら、並行して 購入した dell マシン に ubuntu をインストールする。いまお仕事で開発しているアプリケーションの成果物は amd64 をターゲットにしているのでローカルに amd64 の開発環境がないとインフラ周りやコンテナ周りの検証に一手間かかる。この状況を解消するために早くローカルの dell マシンを置き換えて開発環境を構築したい。dvd-r から ubuntu 22.04.01 (サイズ超過で dvd-r におさまらなくて 22.04.02 は断念) のインストールを行う。bios で一時的に secure boot の機能を無効にしないと署名チェックで起動しなかった。インストール作業中に予期せぬ不具合が発生しました的なポップアップが2-3回発生したけど、無視して継続できた。インストールして普通に起動すればいいやと緩い感覚で進めた。いつもはパーティションも自分で設定したりしているけれど、今回は windows 領域を残してデュアルブートな環境にしてみた。ディスク領域もインストーラーから windows 領域を 160GiB、残りをすべて ubuntu 領域にするといった設定ができた。すごい簡単。余裕があるときに windows の wsl を使うのも試してみれればと思う。

デスクトップマシンの買い替え

1時に寝て5時に起きて7時に起きた。昨日も吐き気がしてうまく眠れなかった。

dell マシンの買い替え

1月頃からデスクトップマシンの調子が悪かった 。ちょうど3年経ったところでそろそろ故障してもおかしくないと言える。ちょうど年度末なので dell の半期に一度の大感謝祭を待って購入することにした。これまでは vostro を使っていた。そろそろメモリが16GiBだと厳しくなってきたところ。メモリが32GiBついているデスクトップマシンは限られてくる。 その制約もあって xps マシンを購入をすることにした。

昨日のお昼過ぎに注文したのに翌日の午前中にマシンが届いた。あまりの早さに驚いた。dell の配送のワークフローの凄さを実感した。デスクトップマシンを注文して1週間ぐらいで来たらいいと普通の感覚で思っていたら翌日なんやもんな。24時間も経ってなかったしな。

グラフィックボードからモニタに接続しようとしたら4つのインターフェースのうち3つが displayport で1つが hdmi になっていた。いまどきは displayport が主流なんやね。そんなことすらも知らなくて変換アダプタ買わないととか思っていたら、モニターも displayport をもっていて、モニターの箱にも displayport ケーブルが同梱されていて、そのまま接続できることに気付いた。3年ぐらいでマシンを買い替えないとハードウェアのデバイスの変更にもついていけないのだなということも実感した。

私はもう世の中についていけてなくて、たまに普段やらないことをやるとそこで起きることに驚いて右往左往している。windows を起動して dell update から bios やファームウェアを最新のもの更新したりしていた。windows 上からダウンロードして設定して、再起動時に自動的に bios の更新がかかるような振る舞いをする。uefi のなせる技なんだろうけど、こういうところにも驚いて感心したりする。

ubuntu 22.04.02 が 4.8GiB あって dvd-r にぎりぎりおさまらない。もう dvd-r でもインストールメディアを作ることができなくなったんやなと気付く。22.04.01 は 3.6 GiB なので1つ前のバージョンをインストールしてアップグレードすればいいかとやってみたらブート時に次のようなエラーになった。

Verification failed:(0x1A) Security Violation

bios に secure boot 機能なるものがあって 22.04.01 ではインストールできないように署名チェックが行われるらしい。古いディストリビューションをインストールするには secure boot を一時的に無効にするしかなさそう。