YAPC::Kyoto 2023に参加した

YAPC::Kyoto 2023に参加した。

印象に残ってるトーク

2023年春のPerl by charsbarさん

ここ数年、Perlは意欲的に新機能を追加してきており、そのあたりをわかりやすく説明されていてとてもよかった。 また、機能の紹介の前にPerlの開発体制の変更にも触れられており、よかった。 なるほど、"行政府"がパンプキンからPerl Steering Councilに変わったと。

qron: Cloud Native Cron Alternativeの今 by aerealさん

以前の発表でaws step functionsについて話されており、それが面白かったので今回もたのしみにしていた。 タイトル通りクラウドのパーツを組み合わせjob queue, cronを実現したことを説明されており、力強かった。

聞きながらあとで伺いたいことをメモっていたのだが、いまいち声をかける機会がなかった。 今後おそらくオフラインカンファレンスが増えていくと思うので、そこでお見かけしたら質問できるように一応ここに書いておこう。

  • dynamodbからのitemの削除はいつやってるのか。
  • workerへのjobの伝達手段にはpushとpullがあると思っており、今回の構成はpushだと思う。実際運用してそれは確かによかったか。

感想

久しぶりのオフラインカンファレンスで、いろいろな方と対面でお話しできて大変よかった。 運営の方々、スポンサーの方々には、このカンファレンスを開催するにあたり、大変な苦労があったことは想像に難くない。ありがとうございます。

さて、僕は、YAPC系のイベント期間中にCPANモジュールを開発しリリースすることを個人的目標としている。 今回も Parallel::Pipes をリリースした。cpm もリリースして、YAPCを締めたい。

次回のYAPCもたのしみ!

YAPC::Tokyo 2019に参加した

YAPC::Tokyo 2019に参加した。

聞いたトークは以下。

  • チームが前に進み続けるために僕たちが考えたこと (papixさん)
  • 2019年冬のPerl (charsbarさん)
  • メッセージングのプロトコル (加藤さん)
  • Perl5の静的解析入門 機械と人間双方の歩み寄りによる平和編 (macopyさん)
  • PerlプログラムでPerlプログラムを修正する方法 (Kang-min Liuさん)
  • レガシーPerlビルド 〜現代に蘇るPerl[1..5].0とPerl6〜 (八雲アナグラさん)
  • WebVRで作品を作って展示しよう (hitode909さん)
  • CPAN Module Hacks (akiymさん)
  • ISUCON8予選問題作成の裏側 (karupaneruraさん)
  • 多くのCPAN Authorに育てられ、息をするようにCPANモジュールを書けるようになり、そして分かったこと (Songmuさん)
  • Keynote (tokuhiromさん)

いくつかのトークでcpmやp6envのことをとりあげてもらった。 また、Songmuさんはトークの中で僕との出会いを1つの出来事としてとりあげてくれていた。 Songmuさんは、僕を日本のPerlコミニュティへ導いてくれた人である。とても感謝しています。ありがとうございます。 そしてベストスピーカー賞おめでとうございます!

これらは、とてもうれしいし感謝しきりだが、同時に何か不思議な感じもしている。 僕や僕の書いたコードが、言って見れば赤の他人にこんなにも受け入れられるなんて。

懇親会では、macopyさんにPerl輪読会、いつ開催予定ですか?と聞いたり、 gugodさんにMouseのissueあげるかもしれないのでよろしくと言われたりした。 いろいろな方といろいろな話ができとてもよかった。

心残りとしては、機運高まって、CPAN関係の何かをYAPC中にやろうと思ったが、何もやらなかったこと。 YAPC期間中に、コードで交流する時間があるといいなとは思っている。

kfly8さんをはじめとするオーガナイザー、スタッフのみなさま、 素敵なYAPCをありがとうございました。次回も楽しみです!

My YAPC::Okinawa 2018 ONNASON

3/3に行われたYAPC::Okinawa 2018 ONNASONに行ってきたので感想などを書きたい。

day0 前夜祭

buildersconに引き続き、shibataさんとお話しすることができた。 「Perlのbleadは結構長い期間、version.pmを再ビルドするとぶっ壊れる状態なんですよ」「Rubyはtrunkにテストが通らないcommitがなされると、すぐrevertされてしまう」といったお話しができてよかった。

最後にnginx unitに関する飛び込みLTをさせてもらった。 nginx unitについては、もっとちゃんと触って別の機会でも話したいと思っている。

github.com

day1 本編

Perl6のecosystemの話をさせてもらった。

speakerdeck.com

charsbarさんの話を聞いて、今年はどこかの海外カンファレンスに行きたいなと思ったり、yappoさんの名前の由来を聞いて、ほーと思ったりしていた。あとまかまかさんの-Moistがよかった。

懇親会では、yappoさん、大西さんとマネジメントの話をすることができた。 僕は昨年10月から僕含めて7人のチームのリーダ的なポジションになっているため、 非常に参考になるお話だった。特に印象に残ったのは1on1に関する話で、お二人ともアラートに気づく目的でそれをされているとのこと。これは1on1を経験学習における内省の場と捉えているヤフーとは異なる。とくにどちらがいい悪いということはないけど、目的意識が違うとわかってよかった。

day2 perl::hack in okinawa 2018

常々、YAPCに著名なPerl hackerが集まるのに発表だけで終わるのはもったいない、との思いがあったため、今回試みにハッカソン的なことをやってみた。

connpass.com

参加者のみなさんが、有意義な時間を過ごし、いくつかの成果を出せたことを期待したい。

僕はと言えば

などをやっていた。

なお、このハッカソンの会場費はJPAが出してくれた。感謝します。

おわりに

Kさんはじめスタッフの方々、すてきなYAPCをありがとうございました。 次も楽しみです。

YAPC::Fukuokaに参加し、cpmの話をした

7/1に行われたYAPC::Fukuokaに参加し、cpmの話をした。

guest speakerとして

今回、僕はなぜかguest speakerとしての参加となった。 最初にpapixさんからこのお話しをいただいたとき、断ろうと思っていた。 もっと優秀なPerl Hackerが大勢いる中で、なぜ僕が、と思ったからだ。

しかし、いろいろ考えたあげく、受けるべきと考え直し、お受けした。

トーク

speakerdeck.com

github.com

(注: スライドのなかのdemoは https://asciinema.org/~skaji にある)

cpmについて話した。cpmについては、もう何度も発表しているのだが

  • まだまだCPANまわりはやることがたくさんあり、また何でもできると伝えたい
  • PerlCLIアプリケーションを並列化する例を伝えたい

の思いから再びcpmを選んだ。

発表後、いくつか質問、コメントをいただいた。

まず、もうcpmをどんどん使っていいのか、ということ。僕は毎日使っているし、相当バグは潰したつもりだ。僕が言えることのは、どうぞ使ってくださいということだけ:)

次に、Cartonとの関係性。実際のところcpmはcpanfile.snapshotをresolverとする機能を搭載している。よってsnapshot作成の部分以外は、Cartonと同じように使える。

Cartonとの関係性については、まだしっかりと言語化ができていないので、次のXX.pmにて、ぜひみなさんと議論したい。

印象に残ったトーク

印象に残ったトークをすこしだけあげる。

まずはmoznionさんのエラーメッセージに関するトーク。 moznionさんは、いつも対象を丁寧に捉え、そして的確な命名をし、分かりやすい説明をしてくれる。今回もまさにそういったトークだった。素晴らしかった。

次にkeynote 山本さんのトーク。家族をもつエンジニアが、どうNYでsurviveしていくかというトークだった。よかった。

最後に

papixさんをはじめとするスタッフの方々、 素晴らしい場を作ってくださりありがとうございました。 YAPC、とても楽しかったです!

次はokinawa!

travis ciで失敗したテストを再実行する

perlのmoduleを開発しているとき、travis ciでときどき失敗するテストがあり、失敗するたびにRestart buildボタンをポチっと押すという不毛なことをしていた。

もちろん失敗する原因をちゃんと特定し、テストをなおすのが一番だが、とりあえず失敗したテストを自動でリトライさせるなら下記のように書けばいいことを最近知った。

language: perl
perl:
  - '5.24'
  - '5.22'
  - '5.20'
script:
  - prove --state save -l t || prove --state failed -l
sudo: false

最初のproveで--state saveを指定しておき結果を.proveファイルに保存する。そして失敗したときは、--state failedのテストを対象にproveを再び走らせている。

実際cpmでこうしている。

forkを使うテストではTest2::IPCを使うといい

perlでforkを使うテストでは Test::SharedFork をuseしておくと安心なことが知られているが、最近その実装をみたところTest2がロードされていたら、そのIPC実装を使うように変わっていた。

よっていま、forkを使ったテストを新しく書くなら、直接Test2::IPCを使えばいいと思う。

use strict;
use warnings;
use Test2::IPC;
use Test::More;

my $pid = fork // die;
if ($pid == 0) {
    is 1 + 1, 2;
    exit;
}
waitpid $pid, 0;

done_testing;

実際、Mojo::IOLoop::Signalのテストでそうした。

pipeを他プロセスから読み書きする

長らくpipeは自プロセスもしくは 親子プロセスでしか読み書きできないものと思っていたが、 最近、他のプロセスからも読み書き可能なことを発見した。つまり/proc/pid/fdを使えばよい。

自分としてはかなりの驚きであった。

例えば、

#!/usr/bin/env perl
use strict;
use warnings;

pipe my $read, my $write or die $!;

while (my $line = <$read>) {
    warn "-> GOT: $line";
}

というのを用意したとき下記のように通信できる。

$ perl pipe.pl &
[1] 13801

$ ls -l /proc/13801/fd
total 0
lrwx------ 1 skaji skaji 64 Nov  6 15:30 0 -> /dev/pts/6
lrwx------ 1 skaji skaji 64 Nov  6 15:30 1 -> /dev/pts/6
lrwx------ 1 skaji skaji 64 Nov  6 15:30 2 -> /dev/pts/6
lr-x------ 1 skaji skaji 64 Nov  6 15:30 3 -> pipe:[4096813]
l-wx------ 1 skaji skaji 64 Nov  6 15:30 4 -> pipe:[4096813]

# filedescriptor4が書き込み用pipeなのでそこに書き込む。
$ perl -E 'open my $fh, ">", "/proc/13801/fd/4" or die $!; say {$fh} "hello from $$"'
-> GOT: hello from 13843

なお、同じやり方で例えば tmpfile(3)によってopen、すぐunlinkされたファイルも他プロセスから読み書き可能だ。