つまり `>` が嫌いで `<` が好きという話。
数直線のイメージで書いてくれた方が理解しやすい気がするんだけどみなさまはいかが?
つまり `>` が嫌いで `<` が好きという話。
数直線のイメージで書いてくれた方が理解しやすい気がするんだけどみなさまはいかが?
ギガっていうの受け入れちゃったね*1。
数年前 IIJmio に乗り換え、以来便利に使っているのだけれど、最近は気がつくと月のデータ通信量を使い切って破滅、と言ったことが増えてきた*2。
それほど困っているわけではないが、一体いつ使い切ったのか調べようとすると、公式のアプリでは5日ほどしか遡れず、また1日単位でしか確認ができないのでよくわからない。
調べてみると API があるとのことなので、mackerel にサービスメトリックとして投稿することで可視化してみた。
IIJmioクーポンスイッチAPI | クーポンについて | IIJmio
これをみながら実装する。
認証周りをエイヤし、`/mobile/d/v2/coupon/` API を叩くとのようなレスポンスを得られる*3。
{ "returnCode": "OK", "couponInfo": [ { "hddServiceCode": "XXXXXX", "coupon": [ { "volume": 0, "expire": "202209", "type": "bundle" }, { "volume": 4000, "expire": "202210", "type": "bundle" }, { "volume": 0, "expire": "202209", "type": "topup" }, { "volume": 0, "expire": "202210", "type": "topup" }, { "volume": 0, "expire": "202211", "type": "topup" }, { "volume": 0, "expire": "202212", "type": "topup" } ], "hdoInfo": [ { "couponUse": true, "coupon": [ { "volume": 0, "expire": null, "type": "sim" } ], "hdoServiceCode": "XXXX", "sms": true, "number": "090XXXXXXXX", "regulation": false, "iccid": "XXXXXXXXXXXXXXXX", "voice": true } ], "plan": null } ] }
あとは好きな方法で mackerel に投稿できるフォーマットへ変換する。以下のようなコードを書いた。
const input = require("fs").readFileSync(process.stdin.fd, "utf8"); const couponResponse = JSON.parse(input) const targetServiceCode = 'XXXXXXXX' const coupon = couponResponse.couponInfo.find(e => e.hddServiceCode === targetServiceCode).coupon const body = coupon.map(c => {return {'name': `iijmio.${targetServiceCode}.${c.type}-${c.expire}`, "time": Math.floor(Number(new Date())/1000), 'value': c.volume}}) console.log(JSON.stringify(body))
最終的に、 `curl IIJmio APIリクエスト` | node format.js | `curl mackerel サービスメトリック投稿`
と言った風にパイプをつなげた shell script を cron で実行すれば終わり。
ここまでできれば、最初の画像のようなグラフが自動で生成されます。
さらに mackerel の機能を使うことで、例えば過剰に使っている時にアラートを出すなども簡単に実現できますね。
それでは皆様、よき監視ライフを!
去年の秋ぐらいに raspberry pi が不調になり、そのタイミングから自室のco2モニタリングが動かなくなっていた。
当初いくつか試したところハードウェアのトラブルが疑わしいように感じた。ので、新しく CO2mini を購入し直すことにしたがメーカー欠品ということでこの春まで手に入らなかった*1。
時は流れ、春先に新品が届いたのだがAmazonの袋に入った状態で半年ほど寝かしていたところ、昨晩急にやる気が発生したのでやっと開封した。こういうやる気任せなのがダメなんだよな、多分、わかっちゃいるんだけど、、、。
で、新しいデバイスでもやっぱり動かない。これはソフトが怪しいということで既存の Python モジュールで動かしてみると普通に値が読み取れる。
どうやら自作のソフトがダメだったっぽい。不思議なこともある*2。新しいハードウェアでは暗号化が解かれているらしいけど、当時はハードも変えてないわけだし。
ともかくハードの問題じゃなさそうだし、もし新しいハードが非暗号化版だとすると逆に古いコードは動かないことがわかったので https://github.com/heinemml/CO2Meter/ で mackerel の拡張を作り直した。
udev ルールは上記のリポジトリの README をそのまま利用させてもらった。作り直した拡張は以下の通り。
実行時は以下のような形で co2mini の置き場所とデバイスがマウントされているパスを指定する。
./mackerel-plugin-co2mini --local bed-side --path /dev/co2mini0
サービスアカウントのロール付与で試行錯誤が必要だったのでメモです。ロールで権限付与していくならこれが一番コンパクトだと思う。
.github/workflows/actions.yml
の定義
*1:1年ぐらい前に go のプロジェクトで同じことやったときは不要だった気がする、今回は node だから使ってるのかな?
アジャイルレトロスペクティブズ 強いチームを育てる「ふりかえり」の手引き
読んだ。社会人になって5年ぐらい、大体のチームでふりかえりはやってきたけど、ちゃんと勉強したこと無いことに気がついて正月ぐらいからちまちま読んでいた。
ふりかえりの効果について整理できたことや、ファシリテータの役割や進行時の注意点について学べたこと、イテレーションごとのふりかえりとプロジェクトのふりかえりの違い、みたいなのを確認できてよかった。
また、3章にあった「あなたの管理」っていう節はいいこと書いてあったので定期的に読みたい。
それ以降はアクティビティカタログみたいな感じで、ふりかえりのフェーズごとにアクティビティが紹介されている。ここはやってみたいとわからないことが多そうだったのであんまり理解できなかった。
付録のCにこの本で紹介されているアクティビティを俯瞰できる表があるので、ここをみながら気になるアクティビティについて読んで見る、ぐらいの距離感が良さそう。
ところでこの本は読むにあたってなぜかめちゃくちゃ目が滑って大変だった。文章と僕の相性の他、過去の失敗したふりかえりや計画が思い出されて意識を奪われる感じ。
そこで Scrapbox でガツガツメモを取りながら読むというアプローチをとった。
章を進むごとにページを作り、メモを取りながら読み進めて、最後にメモのまとめを上記の様にまとめて終わり、というスタイル。4章以降はカタログっぽかったのでやめたけど、メモを取りながら読むのはハイカロリーな反面、うまく頭に入らない内容でも読み進めることができてよかった。