Masteries

技術的なことや仕事に関することを書いていきます.

小ネタ: 久々にMinillaでCPANモジュールをリリースする

papix.hatenablog.com

昨日Pull Requestを送ったRouter::Simple::Reversibleですが, サクッとcomaintをもらったのでMinillaでリリースすることにしました(id:motemenさんありがとうございます!). が, あまりに久々すぎて何もかも忘れてしまっていたので備忘録がてらやったことをメモしておきます.

.pauseの確認

まずは ~/.pause があるか確認します. ここには, PAUSEのユーザー名とパスワードを置いておきます.

user PAPIX
password XXXXXXXX

PAUSEはCPANモジュールをアップロードするときに使うアップロードサーバーです. Request PAUSE accountというメニューから, PAUSEのアカウントをリクエストすることができます(人力で認証しているので, リクエストしてから発行されるまで数日かかることがあります).

pause.perl.org

Minillaのインストール

Minillaで管理されているモジュールであれば, リリースにあたってMinillaそのものと, Version::Next, CPAN::Uploaderが要求されるのでインストールしておきます.

$ cpanm Minilla Version::Next CPAN::Uploader

必要に応じて以下のモジュールもインストールしておくとリリース前のテスト項目が増えて安心度が上がります.

$ cpanm Test::CPAN::Meta Test::MinimumVersion::Fast Test::PAUSE::Permissions Test::Pod Test::Spellunker

# 2021/01/11追記: 次のコマンドでもいけます (id:Songmu:detail さんありがとうございます!)
$ cpanm --with-recommends Minilla

リリース

あとは,

$ minil release

をすれば, Minillaがいい感じにガイドしてくれます. 簡単ですね!!!


...ということで, 先のPull Requestを盛り込んだRouter::Simple::Reversibleの0.02を無事にリリースすることができました. もうちょっとすればmetacpanなどにも反映され, 利用できるようになるのではないかと思います.

metacpan.org

追記 (2021/01/11)

id:Songmu さんより以下コメントがありました.

オプショナルな依存モジュールは、一個一個指定せずとも
% cpanm --with-recommends Minilla
で一撃で入れることができるのぢゃ。以下の記事にも書いてあるゾイ。
https://gihyo.jp/dev/serial/01/perl-hackers-hub/005001

--with-recommends !!! そういえばありましたね, 完全に忘れてました. 改めてPerl Hackers Hubの「Minillaを使ったモダンなCPANモジュール開発」を読んでキャッチアップしようと思います!!!

gihyo.jp

Router::Simple::ReversibleにPull Requestを送りました

metacpan.org

Router::Simple::Reversibleは, Router::Simpleを拡張して, controllerとaction(とパラメータ)からpathを生成できるpath_forメソッドを追加したものです. pathからcontrollerやactionを決めるRouter::Simpleの逆ができるのでReversible, という訳ですね.

SYNOPSISのコードを見ていただければ, どういった機能が提供されるのかがよくわかると思います.

# Same as Router::Simple
$router->connect('/blog/{year}/{month}', {controller => 'Blog', action => 'monthly'});
 
$router->path_for({ controller => 'Blog', action => 'monthly' }, { year => 2015, month => 10 });
# => '/blog/2015/10'

...で, Router::Simple::Reversibleですが, 一部のパターンでwarningのメッセージが出る場合があったので, それを抑制するPull Requestを投げました.

github.com

mergeしてもらったので, 近々リリースされるのではないかと思います.

小ネタ: Big SurでXML::Parserのインストールに失敗する件

MacのBig SurかつPerl 5.32.0の環境でXML::Parserをインストールしようとしたところ, 次のように失敗しました:

--> Working on XML::Parser
Fetching http://www.cpan.org/authors/id/T/TO/TODDR/XML-Parser-2.46.tar.gz ... OK
Configuring XML-Parser-2.46 ... OK
Building and testing XML-Parser-2.46 ... FAIL
! Installing XML::Parser failed. See /path/to/.cpanm/work/1612254113.90705/build.log for details. Retry with --force to force install it.
! Installing the dependencies failed: Module 'XML::Parser' is not installed

~/.cpanm/build.log にログがあるので読んでみると, 次のようなメッセージがありました.

Can't load '/path/to/.cpanm/work/1612254113.90705/XML-Parser-2.46/blib/arch/auto/XML/Parser/Expat/Expat.bundle' for module XML::Parser::Expat: dlopen(/Users/papix/.cpanm/work/1612254113.90705/XML-Parser-2.46/blib/arch/auto/XML/Parser/Expat/Expat.bundle, 2): Symbol not found: _XML_DefaultCurrent

「perl Symbol not found: _XML_DefaultCurrent」でググってみると, 次のStack Overflowがヒット.

stackoverflow.com

これはM1 Macでの話ですが, コメントを見ると,

Installing the latest beta release of ExtUtils::MakeMaker (7.57_02) should solve your problem. It will probably be released as a stable release soon.

とありました. 調べてみると, 2021年2月2日現在のExtUtils::MakeMakerの最新版は7.58だったので, 先に cpanm ExtUtils::MakeMake してから改めて cpanm XML::Parser すると, うまくインストールできました.

Mackerelを基準にした在宅勤務環境の監視

新型コロナウイルスのアレコレが発生するまでは「昼はオフィス/夜は自宅」という生活でしたが, ここ1年は昼も夜もずっと自宅で過ごす状態が続いています. こういった状況はまだまだ続きそうなので, 少しずつ自宅環境を良くするためにアレコレ試みています.

その一環として, 自宅(自室)の気温/湿度/CO2濃度について, 適切な値になっているかをMackerelで監視/可視化する仕組みを作ったので紹介します.

気温&湿度の計測

まず, 気温と湿度の計測には, nature remoを使っています. これを, EdgeRouter X上で動くmackerel-plugin-nature-remoでMackerelに投稿する形で監視を実現しています.

papix.hatenablog.com

papix.hatenablog.com

監視ルールはこんな感じ. 温度は割と体感で暑い/寒いがわかるので, 若干わかりにくい湿度について, 低湿度(30%以下でCritical)と高湿度(55%以上でWarning, 60%以上でCritical)の監視を入れています.

f:id:papix:20210128234323p:plain

CO2濃度の計測

続いてCO2濃度. 本当はnetatmoとか, 計測できる器具を買おうと思ったんですが... まあ高いですよね. とりあえずさっくり計測してみたかったので, 部屋に転がっている古いRaspberry PiとCCS811というセンサーを使って, CO2濃度を監視する仕組みを組んでみました.

こんな感じ. 実はブレッドボードとか使ったことなかったのだけれど, 英語で書かれたサイトとか参考にしながらなんとか動くようになりました.

f:id:papix:20210128235046j:plain

blog.eldermael.io

Raspberry Piは, 以下のブログで公開されていたPythonのスクリプトに少し手を入れて, Mackerelのpython用APIクライアントを使ってMackerelに投稿するようにしています.

tech.unifa-e.com

ただCO2濃度の計測については問題点も多く... まずは値が安定しにくい点(特に起動すると, 暫く検測下限値の400ppmを指し続ける. これはそういうもの, という説明があるものの, それっぽい値を指すようになるまでだいぶ時間がかかる... ような気がする), あとは1日に1回くらいのペースでRaspberry Pi上で動くPythonのスクリプトが暴走? して計測が不可能になるという出来事が発生しています. 特に後者は致命的なので, もう少し手を入れてなんとかしたいなーと思っています.

監視ルールはこんな感じで, 1000ppmを越えたらWarning, 1500ppmを越えたらCriticalとしています.

f:id:papix:20210128234510p:plain

最近運動不足解消のためにFit Boxing2で遊んでいるのですが, 運動すると値が上昇したり, あるいは部屋を締め切ると徐々に値が上がっていったりするので, まあ値の正確さはともかく増減を検知する用途には使える... のかな? と思っています. いろいろ手を入れてみて, 余りにも不安定なら諦めてnetatmoとか導入するのを検討してもよさそうです. あるいは, Nature RemoにCO2濃度計測機能が追加されたりしたら最高ですね!

ダッシュボード

最後に自宅の環境がひと目でわかるダッシュボードをご紹介. Mackerelは, とにかく綺麗なダッシュボードが作りやすくて便利最高ですね.

f:id:papix:20210128235848p:plain

...というわけで, Mackerelを中心にして在宅勤務の監視/可視化環境を構築したお話でした. まだまだ在宅勤務する事になりそうですし, 皆様も是非自宅の監視を始めてみてはいかがでしょうか.

「CI/CD活用事例&TIPS発表会」で「はてなにおけるGitHub Actions活用事例」という話をしました

techplay.jp

「CI/CD活用事例&TIPS発表会」という勉強会に参加させていただく機会を得まして, 「はてなにおけるGitHub Actions活用事例」という話をしました.

10分以上話す登壇が久々すぎて塩梅がわからず, 案の定資料が多くて若干駆け足になってしまいましたが, 社内のGitHub Actionsへの移行事例の様子やおもしろテクなど話させていただきました. ご参加頂いた皆様, ありがとうございました.