hitode909の日記

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

Perlアプリケーションの依存モジュールの更新についてWEB+DB PRESS vol.120のPerl Hackers Hubに寄稿しました

id:hitode909です。今日発売のWEB+DB PRESS vol.120のPerl Hackers Hubにて、Perlアプリケーションの依存モジュールの管理手法や、アップデートを自動化するupdate-cpanfileの紹介について書いています。

Perl Hackers Hubは2010年から続く連載で、Perlを書いてて困ったときには幾度となく助けてもらったものです。
今回、改めて初回から読み直していたのですが、業務で必要になりそうな知識はだいたい書いてあり、他の言語からPerl界に入りたい人向けの入門情報としても有用そうです。言語の詳細などの本を読むよりは、エコシステムなどを含めた、その時どきのホットな話題を追っていける方が効率よくキャッチアップできそう。
今回の寄稿で、Perl Hackerの仲間入りを果たせたことを、うれしく思います。

文章を書く

文章を書くのは好きで、日記は毎日書いているのですが、商業レベルのアウトプットをしたことはなく、今回雑誌に寄稿するのも初めての経験でした。
本の形をした物体は作ったことがあったのですが、ブログの過去記事から流し込んで終わりだったので、誤字脱字があったり、そもそも収録されるコンテンツも夢日記なので、何の意味もない文章が含まれていたり、というクオリティで、手売りで数十冊さばけたくらいでした。
blog.sushi.money

今回雑誌用の記事を書いてみてわかったのは、原稿を編集の方がガリッと直してくださるということで、意味は変わらず研ぎ澄まされて意味の通った日本語になっていて感動しました。
あの(inao記法)のinaoさんに編集していただけて、自分の書いた日本語をinaoさんのコミットで上書きしてもらうことができます。ぜひみなさまも執筆の声がかかったら体験してみてください。

update-cpanfileについて

update-cpanfileは7月ごろから作っているPerlの依存ライブラリのアップデートツールで、以前このブログでも紹介していました。
blog.sushi.money

普段開発しているマンガビューワや、社内のPerl製プロダクトの依存モジュールアップデートに使っていて、しばらく安定し使えているということもあるので、今回雑誌でも紹介しました。
ついでに、なぜこのようなツールが必要であるかとか、Perlのアプリケーションの依存モジュールを手で更新したいときはこうするよ、みたいな手順も紹介しています。
自動化ツールにすべて任せてしまうと、もし壊れたときに手動で直せないと困ってしまうので、自動化手順を知る際には手動での手順も知っておくと良いように感じます。

update-cpanfile利用者の声

社内の利用者から声を集めてきたので紹介します。

アップデートすべきライブラリが多数あっても、1個ずつPull Requestをくれるので、changesをみてマージできて便利

もともとツールを作ろうと思ったきっかけも、アップデート対象を見つけるところが面倒、というものだったので、ツールでうまく解消されてよかったと思います。

(フロントエンドのライブラリアップデートを怠りがちなのと比べて)意外とレビューが負担にならずにマージできている

フロントエンドとちがって、サーバーサイドでは実行環境は1つであり、クロスブラウザ対応とか考えなくていいので気楽なのかもしれません。とはいえ、サーバーサイドが壊れたときにはマスタデータを破壊してしまうリスクもあるので、どっちもどっちかもしれません。

Pull Requestにコメントを付けていたら翌日Pull Requestが作り直されてコメントが消えたので悲しかった

社内ではpeter-evans/create-pull-requestを毎日動かす構成なのですが、このcreate-pull-requestの設計思想として、実行したら必ずやりきる、force pushしてでもPull Requestづくりを完遂させるという方針なようです。
上書きさせたくないときはactionの実行を避けるベし、というコメントがあったので、ワークフロー側で調整するとよさそう。時間があったらちょっと試してみます。

List::Utilがいつのまにかアップデートされてて sampleが使えるようになったのが最高にうれしかった

perl本体のバージョンを上げなくてもライブラリを上げていけば便利になるのでおもしろいですね。perl本体を上げられるに越したことはないですが…。

cpanfile自体のアップデート方法は知らないが、更新作業が自動化されていてBreaking Changeの有無のチェックなどに専念できていて助かっている

今日発売のWEB+DB PRESSを読んでください!

買ってください!!!

今日発売です。いますぐ本屋に急ごう!!


この記事ははてなエンジニア Advent Calendar 2020の24日目でした。
前日はid:pokutunaでした。微妙なエスケープ処理については不便に思うことがあったので便利そう。ポクツナさんはこういう身の回りの不便なものを直して使われていてかっこいいなと思います。僕も昔は遊びでChrome拡張を作っていたけどことごとく飽きて壊れてしまった…。明日はid:yutailang0119です。
blog.pokutuna.com

そして、この記事はPerl Advent Calendar 2020の24日目でもあります。
前日はid:anatofuzでした。awesomeかどうかは状況によるよな〜と思うので難しい。サービス規模が大きければ問題を分割して、複数のコンピュータ上で協調して動けばawesomeだし、小規模なソフトウェアなら、1ファイルでぺろっと動くとawesome、という話だと思うのですが、世間のawesome界はそのあたりどう向かってるんでしょう。そんな疑問を投げかけたところで、こちらのカレンダーでは、明日はid:papixです。
anatofuz.hatenablog.com


それぞれお楽しみに!WEB+DB PRESS買ってください!

gihyo.jp

家が寒くて働けないという新たな悩み

冬のオフィスは、PCにディスプレイに…と家電がたくさん置いてあって、CO2濃度が上がっていき、暑い!空気悪い!となっていたのが、今年は家に引きこもっているため家を自分で暖める必要がある。
ここしばらく家が寒すぎて震えながら仕事していて、寒すぎてスクワットしながらミーティングしたりとか、あまり集中できていなかった。
知的なことをするには集中する必要があり、そのためにはまず、集中できるくらい家を快適にするところから、と、アウトプットを出すための道のりが昨年より長くなったと思う。
各自の立場で見ると言えが寒いという話だけど、ちょっと引いてみると、全員集まって部屋をポカポカにすればいいのに、各自の家で個別にポカポカにしているのは無駄が大きい。企業という立場で電気代だけ見ると、同じ利益を稼ぎ出しても電気代で出ていく金額が増えることで、従業員の幸福度は下がっているということになる。

今年良かったことは酒をやめられたこと

幼少期に父親が飲み会に行くと泥酔して帰ってくるのでそれまでに寝室に避難しておくというカルチャーがあってあまり良い思い出ではなかった。
いつしか自分が泥酔する側となって、大学の先生の家での新年会から帰り、タクシーから降りたら歩けなくて道をゴロゴロ転がり、家に帰ったら風呂の場所がわからず全裸でウロウロしてるのを父親に救出してもらっていた。
そうして実家を出てからは泥酔して木屋町でケバブを買い、食べる前に寝てしまって朝起きたらケバブを握りしめていた。
この負の連鎖を断ち切らなければならない。


以前は毎日休まず飲んでいたのが、10月末のリモート飲み会で飲みすぎて、11月のはじめから酒を飲んでなくて、今日まで飲んでないのでかつてない状態。今日でたぶん50日くらい飲んでない。
何かのクーポンでもらった缶ビールや実家でもらったウイスキーも捨てた。
以前は、酒を飲まない意味とは、残りの人生何をして過ごすのか、とか考えていたけど、ただ飲まなければいいし、そのほうが良いと気づいて、は〜本当に良かったなって酒をやめられた喜びを噛みしめている。
3月に買った未開封のスパークリングワインがあるけど、このまま開封せず熟成していき、ある日コルクが爆発するか、将来子どもが生まれて成人になったらその日に開けようとしてやっぱりコルクが爆発することになると思う。


物理的に集うことが不可能となり、川でビールを飲む催しやバーベキューなどを開催できなくなったのは悲しくも良いニュースで、外に出られず、家にいれば酒を飲むことができない。
あとは、年をとったことで周りから行動を強制されることがなくなったのもよくて、以前なら、法事でもあれば親戚のおっさんとかがやってきて、まあ飲みなされってついでくれる。今なら、あちらもこちらも大人なんだから、嫌なら断ればいいじゃんと思えるようになった。
このように、環境によって後押しされた側面がある。


状況が変わったことで、酒を飲まないなら車に乗れるなと思ってきて、近所の自動車教習所でペーパードライバー講習を受けようとしたら今はやってなかった。車に乗れたら、どんなに電車が混んでいても道路を使って移動することはできるので獲得しておくべきスキルだと思う。
12年ぶりにいきなり公道に出るのは怖すぎるのでなんとかしたい。予想では駐車場の中をぐるぐる回ってみるだけでもあちこちぶつけて再起不能になると思う。無限に広い空間に車がぽつんと置いてあって進むことができる、みたいな環境で練習したい。


あとは、トレイラーパークボーイズを観てると、俺はアルコールの問題があって治療が必要なんだ、みたいな話をしていて、酒を飲まずにこういうドラマを見ている意味とは、と一瞬思うけど、これまでもコカインをたしなむわけでもないのにパルプ・フィクション観ていたので特に問題ないと思った。
トレイラーパークボーイズかなり好きなのだけど内容が無さすぎるゆえに、または、映像の小汚さゆえに、周りに観てる人が全然いなくて困っている。みんな観てください。
https://www.netflix.com/title/70153385

マサワダスロットポータブル

全国のマサワダスロットファンに朗報!!あのマサワダスロットがポータブルデバイスで遊べるようになりました!!
バッテリーが内蔵されているので、いつでもどこでも、ジョギング中でもマサワダスロットで遊ぶことができます!!

M5Stack

M5StackはArduino言語を動かせるデバイスで、ディスプレイがついていたり、ボタンがついていたり、microSDを読み書きできたり、Wi-Fi、bluetoothにもつながる、というものです。
以前触ったArduinoと比べると、箱に入っていて、とっちらかっていないのが魅力的なのと、LED光らせていた時代と比べると、ディスプレイがついてて画像を出せるのはおもしろそう。
開発中もこれをUSBケーブルでPCにつなげば完結していて配線もスッキリしている。

f:id:hitode909:20201220121321j:plainf:id:hitode909:20201220121307j:plain
スッキリしている

実装

Arduino IDEでコードを書いて実機で動かす形で開発していきます。4年前に買ったMacBookで開発していたところ、コンパイルに30秒くらい待たされたりして、意外とのんびりしている。
Hello, Worldが動くことを確認してから、何段階かのステップに分けて実装しました。

毎フレームランダムな4つの数字を描画し、1つずつ止めていく。フレームカウントに応じた周波数の音を出す。

インタラクティブなプログラムを書くときには、画像が出てないだけで動いているのか、それとも、まったく動いていないのか、の判断のためにとりあえず音を出しておくと便利です。画像の描画が間に合わず真っ黒な画面が出ているだけ、みたいなことも考えられる。
仮で入れてた音だけど、ずっと聞いてるとマサワダ…マサワダ…ってメロディーに聞こえてきたので、そのまま残すことにしました。


LCDに直接描画するとチラつくので、スプライトを使うと良いようでした。

github.com


末永く遊べるようにするため、最初はマサワダの文字も三角形を組み合わせて書こうとしていたのですが、ダを書くのが面倒になってきて、画像を読み込んで完成にしました。
SDカードから画像を読む必要があるかと思って近所の電気屋まで買いに行ってしまったけど、実はSDカードは不要で、バイナリデータを実行ファイルに組み込んでpushImageすれば画像を表示できました。
PNGをpushImageで扱える形式のバイナリに変換するのはこのツールを使いました。ありがたい。
github.com

みどころ紹介

各画像がヘッダファイルに書き出されているので順番にincludeしている。PROGMEM const uint16_t ma[]って変数にマの文字のバイナリデータが入っています。

#include "ma.png.h"
#include "sa.png.h"
#include "wa.png.h"
#include "da.png.h"

ボタンの入力もこんな感じで取れて簡単。

if (M5.BtnA.wasPressed() || M5.BtnB.wasPressed() || M5.BtnC.wasPressed()) {

現在のフレームカウント*10のヘルツの音を80ミリ秒鳴らしたいとき。

M5.Speaker.tone(frame * 10, 80);

コードはここに置いています。画像のバイナリを抜きにすると全部で60行くらいでスロットが動いています。forkして画像を差し替えると任意のスロットを作れるはず。
github.com

いかがでしたか

これに限らず、加速度センサーとかついているので、年末年始に何か作って遊んでみようと思います。
f:id:hitode909:20201220115455j:plain


この記事はmasawada Advent Calendar 2020の20日目でした。19日目のid:toyaはまだ出てなさそう。
明日はid:koudenpaです。M5Stackを買ってみようとなったのもkoudenpaさんのブログを読んだのがきっかけでした。サンキューです。
koudenpa.hatenablog.com