NaaN日記

やったこと、覚えたことを発信する場

3年ぶりリアル開催のOSC(Tokyo/Spring@浅草)に行ってきた

id:CNaan です。
2023/4/1(土)に開催された【3年ぶりのリアル開催】4/1 オープンソースカンファレンス2023 Tokyo/Spring@浅草 - connpassに行ってきました。

オフライン時代には、OSC広島とか、香川、徳島に参加したことがあって、関東地方のOSCには初参加でした。
久々、ということもあって関東以外の出展もあって賑やかでした。

今までは大学のサークルでの出展側での参加だったので、出展じゃない立場としての参加もこれが初めてかも。

入手したものとか

来場者プレゼントでポーチ的なもの(画像左)をいただいたのですが小さなシールを入れたりするのにとっても便利でした。
cartoonみのあるopenSUSEのシールがとてもかわいい。
Mozillaの紙バッグやOSCのTシャツもかわいいですね。 id:tmiyahar さんありがとうございます!

入手したいくつかのノベルティ


他には、軽く立ち読みして内容が面白かったので、親方Projectさんの「技術同人誌を書こう!」を買いました。

「サークル参加方法、抽選に落ちたときどうするか、ネタだし、執筆環境、印刷部数、etc.」と20章色々な話題を書いていて、読み物として面白そうだったのが購入の決め手でした。
直近で執筆するような予定はないけれども、書くぞ!となったときには参考にしていきたいですね。

調べたところ、oyakata - BOOTH親方Project | 技術書典もあるようでした。

「技術同人誌を書こう!」の同じ本は今入手するなら技術同人誌を書こう! アウトプットのススメ | 親方Project |本 | 通販 | Amazonになるのかな?(BOOTHなどにある「ワンストップ!技術同人誌を書こう」との内容差分は知らないです)

親方Projectさんの「Podcastを始めよう」「技術同人誌を書こう!」

この本が好きそうな友人に、帰宅してから「これ買ったよ〜」とお伝えすると、2017年の冬コミで買った、と写真が送られてきました。

ワンストップ!技術同人誌を書こう

既に持っていてやっぱりこの本好きだったか、と納得しました。

出展まわるの良いね

本当は10時くらいに到着して回る予定だったのだけれど、早起きに失敗して12時すぎくらいに到着しました。
前日に会社のSlackで宣伝していた効果か、同じ会社の方(お忍びではなかった id:miki_bene さん)とも会えて、途中同じ建物の8Fでハンバーグを食べたりもしましたが、ちょうど全部回った頃に16時くらい、で4時間(実質3時間無いくらい?)じっくり楽しめました。

セミナーが無いと無計画でゆっくり回れるメリットがありますね。

基本的に端から回っていって、人があまり集まっていないところから見ていきました。
人が集まっているところは空いたタイミングを見て行きました。
今回久々だったからか元々そうだったか?、ほとんどのブースが眺めていると声かけ〜展示物の説明をしてくださる感じの雰囲気でした。

大学時代に原稿のやりとりでお世話になった、ユニバーサル・シェル・プログラミング研究所の方とも初めてお会いして会話できたのでよかったです。
振袖の方だよね……?と言われたのがちょっと面白かったです。そういえばそんなこともあったなと。
近影に良い写真がなくて、成人式関係で撮った写真を送りつけたのでした。

見た出展の感想をいくつか

特に印象に残っている出展をいくつか挙げると、

OSGeo日本支部さんは、ラズパイ(だったかな)に会場近辺の地図データを入れていて、関東のこのくらいの範囲なら、この中に地図データを入れることができるので、災害時でも公衆トイレ・交番・病院などのデータをオフラインで閲覧することができるのです、という展示をされていました。

自分の子供のためにプログラミング言語を作ってそれを自分の子供にやらせながら出展している方がいて、出展がうまい……!と思いました。
Scratchの次の言語としてCとかPythonをやらせるのはちょっと難しいので……というのでわかります〜!めっちゃ良いですね!!と会話したりしました。
今URLを調べていて、HPで坂井さんのブースだったことに気づいたので、かなり納得をしました(当日ふらふらとしていたので何も気づいていなかった……)。
坂井さんのところでSecHack365やりたい、と昔思っていたのですよね。

kozos.jp


プラレール計算機はすごかった!


サイボウズさんのブースでは、自作CPUと、自作CPUにテストを走らせるところを見せていただいたりとかしました。

「自作CPUに興味はありますか?」と聞かれて、可愛い女の子が表紙の本(伝説の名著をご紹介!『CPUの創りかた』|Tech Book Zone Manatee)を昔少し読んだのですが、最後まで読まずに積読になってしまっていて……と言ったのですが今思うと正直すぎたなと。

積読を一冊ずつ消化していかないとな……。


あとは、あのダークな学生だった id:masawadaくんが今では君のメンターになっているの……?という話をしたり、
masawadaくん結婚(1年前)おめでとうございます!と伝言を頼まれたりとか。

その他

終わった後、同僚と一緒にちょっとお寺の方へ歩いておみくじを引きました。
旗を持った人へついていく人たちや、写真を撮る人など、とても賑わっていました。

おみくじは初めてのYAPC - NaaN日記から引き続き大吉でした。
今年は良い一年になりそう?

その後、そういえば以前メンチカツを食べたいと id:yamakenji24 が言っていたのを思い出して(以前は閉まっていた)、買いに行きました。

浅草メンチ

衣に味がついているような、濃いめのメンチカツでした。

次回CNaanに会えるイベントは

未定です!7月末くらいのOSCには多分いるんじゃ無いかな〜?

初めてのYAPC

3/18〜京都に行って、YAPCとその前日祭を聴講しにいきました。
yapcjapan.org


前日祭では、LTが行われていて、特にPerl初心者が書いたコードのレビューについての発表が、共感できて好きでした。
空リストの判定の書き方とそのレビューが、あるあるだなーって思いました。

夜は、Helpfeel Techさんの懇親会に参加していました。
店について最初に頼んだ唐揚げが出てきたのが2時間後とかで、ここの注文はスタックなのか??とか会話していたのが楽しかったです。

当日は、前日に聴講するものを全て選んでから行きました。

前日祭で、低身長だと後ろの方に座るとスライドの下半分が見えない、ということに気づいたので、当日は前の方に座るようにしました。
そうしたら夜首が痛かったです。

どっちにいくか迷ったら知り合いではない方を見に行きました。
今回、あとから配信がありそうなのが大変嬉しいですね。

YAPCの全体的な感想

直接的なPerlの話が思ったより無かったのが意外でした。
もっとPerlのニッチな話を聞くイベントだと思っていたら、Perlを心に秘めた人たちの話でした。

個人的に、Perlの話をしている人の話が特に面白いな、と思ったけど(なぜなら最近Perlを一番書いてるから)、それ以外の話も実用的な話が多くて楽しかったです。
次は何か話題を持っていきたいですね〜。
参加しての満足度は120%くらいです。
他の企業の方とかと喋るのが本当に久々だったので、すごく楽しかったです。

ひとこと感想的なコーナー
  • 小さく始め、長く続けるOSS開発と貢献
    • コードの多様性の話が面白かった。CNaanさんのコードは〇〇だね〜〜っていつか褒められたい!
    • なんだかんだゆっくりでも仕事ができてしまうので、ゆっくり仕事してしまうけど、ショートカットが使えたら一回数秒の短縮になる、とかそういうちょっとの短縮もやっていくかあ、とモチベを上げられた(発表とはあまり関係ないかもな感想)
  • 入門 障害対応 「サービス運用はTry::Catchの繰り返しだよ、ワトソン君」
    • 外型監視のアラートで原因がわからないときは挟み撃ち法を使っている、L7→L3→L6……みたいな
    • 障害対応訓練と聞くと準備(エンジニア的な準備や訓練のための時間を貰う調整)にコストがかかりそう、というイメージだったけど、そんなに準備のかからない(準備に30分とか)訓練をやっている、とのことだった
  • 様々な環境へコマンドラインツールを提供する上での苦労とその対策
    • OS × Pythonのサポートがしんどいという話をされていて、大学の授業でみんながみんな色々なPythonの環境構築をしているのでサポートする側が大変だった、というのを思い出した(先生によってAnacondaだったりpipだったりした)
  • my new error...
    • アラートの監視の仕事だけをする、というのが大変そうだった。オオカミ少年問題を解決するために、ログレベルと使い分ける、といった参考になる話が聞けた
    • 個人的に例外投げるよりエラーオブジェクト返す方が好きなので、全体的に共感できる話だった
展示とか

カヤックさんでおみくじを引きました。

カヤックさんのおみくじ(大吉)

大吉やった〜🙌

絵馬にもお祈りをして、無事お祈りは後日叶いました。ありがとうございます!!


DeNaさんのブースでコップをいただきました。

YAPC KYOTO 2023コップ

そのほか、さくらインターネットさんや、マネーフォワードさんのブースで色々お話できて楽しかったです。

YAPCの話はここまでです。

つぎのひ

月曜日、出社のついでに会社の人に連れて行ってもらって、カレーを食べました。

Kamalのカレー

高校の同級生に会いました。桜が綺麗でした。

さいごに

次回CNaanに会えるイベントはコレです!!

ospn.connpass.com

浅草でお会いしましょう〜〜。

ゆるぼ: 4/2にお花見BBQがあるらしいんですが、一緒に誰か行きませんか〜。

Perlでテーブル駆動テストを書くのにハマっている

この記事は、はてなエンジニア Advent Calendar 2022 - Hatena Developer Blogの45日目の記事です。

昨日はid:cohalz さんのGitHub ActionsでJobやStepをデフォルトブランチだけ動かすようにする (2023年版) - Re:cohalzでした。
github.event.repository.default_branch、初めて知りましたが便利。

明日はid:dekokun さんのGuardDutyの検知結果をslack投稿するアーキテクチャを考えた(あるいはAWSでイベントのフィルタを行うときに考えたこと) - でこてっくろぐ ねおです。


テーブル駆動テスト、使っていますか。
大体同じようなことをテストするけど、

  1. AとBでちょっとだけ違う処理をしたい
  2. AとBで結果を変えたい

といった時に、テーブル駆動テストの書き方は便利です。

CNaanがテーブル駆動テストを知ったのは、今から約4ヶ月前で、id:papix さんが業務でリファクタリングのPullRequestを作成していて、そのPRをレビューしたときに「こういう書き方があるのか」と知りました。
id:papix さんはよくflaky testの修正やリファクタリングPRを作成しています。
姿勢を見習っていきたい。
それ以降、使えそうなところではできるだけテーブル駆動の書き方で書いてみることを心がけています。

私が思うテーブル駆動テストを書くことのメリット

1. リポジトリ内でテーブル駆動テストを使っている例を見つけやすい

大体下記の流れで書くので、$cases =とかで検索すると、他の人がどういうテストを書いているかが見つけやすい。
似たような書き方になるので統一感もある気がする。

my $cases = [
    +{
        description => '〇〇のとき',
        mock => sub {
            # サブルーチンも使える
        },
        expected => 1,
    },
    (略)
];

for my $case (@$cases) {
    subtest $case->{description} => sub {
        # 特定のcaseのみ実行する処理はcase経由で呼ぶ
        $case->{mock}->();
        # 全てのcaseで実行する処理
        sample();
        (略)
        is, $result, $case->{expected};
    };
}

done_testing();

2. テストの冒頭で何をテストするかがまとまっていて見やすい

$cases = []の中を読めばこれから何のテストをやっているかがわかる。
テーブル駆動(ループ)を使わずコピー&ペーストでテストを書いていたら、上から下まで見ていく必要がある。
コピー&ペーストだと可読性が下がるし、一つの変更をする時に複数箇所変更する必要があって、変更し忘れなどの漏れが起きやすい気がする。

3. 新しいケースを追加するとき、簡単に追加できる

$casesに差を追加するだけで、増やせるし、減らしたい時はコメントアウトすれば良い。

4. 似た処理の流れをまとめられる

既に述べたメリットと似ているけど、やはり似た処理をまとめられるのが便利。
業務で書くテストでも、ユーザーを作って、とかしているけれど、それをテストケースの数だけコピー&ペーストで書くのは、後々見返した時に見るのが辛い。
一つのサブルーチンに対してのテストで複数の条件分岐が発生しそうなときは、subtest; subtest; subtest;とするのではなく、for my $case (@$cases){subtest;}とテーブル駆動テストを使ってまとめるようにしたい。

なんとなく苦手意識があるテストファイルの行数を数えると1800行くらいでした。私は2000行近くなってくると苦手意識が生まれるようです。
したがって、条件を網羅しつつ、シンプルにテストを書けることが理想です。

おわり

さて、今はテーブル駆動テストな書き方にハマってますが、読者の好きな書き方を布教して頂けると嬉しいです。
CNaanのこれからの活躍にご期待ください。


こんな感じで書いている、という例を用意しようと思ったけど微妙な例になってしまったのでここで供養。

use strict;
use warnings;
use utf8;

use Test2::V0;

my $cases = [
    +{
        description => 'ゲストユーザーのとき',
        create_user => sub {
            create_test_user();
        },
        is_guest => 1,
    },
    +{
        description => 'ログインユーザーのとき',
        create_user => sub {
            create_test_user('test');
        },
        is_guest => 0,
    },
];

for my $case (@$cases) {
    subtest $case->{description} => sub {
        my $user = $case->{create_user}->();
        is $user->{is_guest}, $case->{is_guest};
    };
}

sub create_test_user {
    my ($name) = @_;

    if ( defined $name ) {
        return +{
            name     => $name,
            is_guest => 0,
        };
    }
    return +{
        name     => undef,
        is_guest => 1
    };
}

done_testing();

$ prove sample.t

All tests successful.
Files=1, Tests=2,  1 wallclock secs ( 0.00 usr  0.00 sys +  0.05 cusr  0.01 csys =  0.06 CPU)
Result: PASS

平日休暇をとったときに、スマートフォンのSlackからサインアウトしてみた

こんにちは、はじめて源泉徴収票を貰い、社会保険料をこんなに支払ったんだなと思ったCNaanです。
入社してもう9ヶ月とかになろうとしているのか、とびっくりしています。

今日はタイトルにもある通り、平日の有給休暇でSlackからサインアウトする試みをしたことの感想です。
CNaanは休みの日でもSlackに未読があるとちょっと気になって読んでしまうタイプです。
ということで、試しにサインアウトしました。

つい癖でSlack見てしまいませんか

弊社は雑談チャンネルとかもたくさんあって、仕事の話、趣味の話、色々な話題が流れています。

つい、何か新しい話で盛り上がってないかなー、とか、同じチームの人たち元気だろうか、とか、streamチャンネル (Scrapboxや、GitHubでの議論が流れてくる場所) に面白い話題が流れていないだろうかとか、
手癖でSlackを開いてしまうことがあるんですよね。

そこで、休みの日にもSlackを見てしまうのはどうなんだろう、という話をチームでしていると、
「サインアウトしてみると良いのでは」という助言を貰いました。

※ 通知オフというのもありますが、通知オフだとSlackを見ようと思えば見れてしまうのでこれは選択肢から外しました。

というわけで、重要な用事があったら電話して下さい、と周囲に伝えた上で、サインアウトして休日を過ごすことにしました。
前日から、翌日の休暇の日にCNaanが実装したものがリリースされないように気をつけました(リリースするものは無かったけど)。

結果どうだったか

Good

  • 会社のことを考えなくて済んだ
  • スマートフォンを見る時間が減った(たぶん)
  • Slackを見ていた時間を他のことに使えた

仕事が気になって悩む、ということがない一日を過ごせました。

Bad

  • メンションが来ても気づけない
    • 他の人がCNaanさん今日居ないですよってフォローしてくださっていたのでサインインしてから返信した
    • まあこれはアンインストールではなく通知オフでも気付けないし、重要だったら電話くるはずなのでそんなにBadではない
  • 出していたPRのレビューコメント通知のメールが来てしまった

次回の挑戦

体験としては結構良かったので、時々いろいろ試してみようと思います。

新卒で入社して7ヶ月くらいが経過しました

こんにちは、id:CNaanです。

3月に大学を卒業、4月から社会人となり、半年が経ちました。
という内容で先月書いていたのを出していなかったので、7ヶ月経ってしまいました。

そろそろ入社してからを振り返ろうと思います。

  • 4月
  • 5月
    • プロジェクトに配属し、機能を少しずつ追加できるようになる
  • 8月

Perlは4月に入社してから初めて触りましたが、Rubyは触ったことがあったので、Rubyっぽいところは慣れやすかったかな、と思っています。
一方で、blessなどは中々理解できず(自分でblessを使って頑張ることには遭遇していませんが)、大変でした。

仕事でちょっと意識していたこと

小さい仕事を拾う

ちょっと空いた時間や、息抜きの時間に、非推奨となった書き方をリファクタリングしたり、ときどき落ちるテスト(Flaky Test)を直せそうだったら拾ってみたりしました。
ときどき落ちるテストの例だと、データがRedisに残っていて、そのせいでたまに落ちる、といったことがありました。
ほかだと、JSON::PP::falseはTest2::Tools::Compareで、T()とF()*1のどちらで比較してもテストにパスしてしまっていることを発見しました。JSON::PP::falseで丁寧に比較するように変更PRを出しました。
これによって、過去テスト用のサブルーチンでtypoしていて、存在しないものを参照していた(けどテストは通っていた)ことが判明したりしました(テストだけでよかった!)。

途中から入っているので、規模が大きくて完全に把握できていない箇所があったりするのですが、小さい仕事を拾うと、把握できていないところを簡単なタスクを通して見ることができるので楽しいです。

コミュニケーションでCNaanが意識していること

新卒チケットを積極的に使っていく

世間ではラストエリクサー症候群、という言葉があるらしいですが、id:CNaanは、新卒チケットは希少な消費アイテムではなくサブスクだと思うことにしています。

特に入社初期の頃などは、「多分新卒/チーム経験が浅い人視点の意見があると嬉しいかな」と思ってコメントを残す、などしていました。

最近では、障害対応などのときに「何もできませんが覚えたいのでちょっと書記しながら眺めます」というチケットの使い方をしています。(役立ってないですが新卒なので許してください!というのをもう少し続けます)

一人称をCNaanにする

これは本当にどうでもいい話ですが、一人称を自分の名前にした方が、主語がしっかりする気がしています。

id:CNaan「私はこう考えています」

id:CNaan「CNaanはこう考えています」

なんとなく、一人称を名前にしておくと、受け取り手の「私」→「CNaan」の一回分の変換作業を減らせるんじゃないかな、と思ったりもします。
あとは議事録とか取る時に、そのまま発言を転載しても誰のことかがわかりやすくて良さそう、と今思いました。
そういう理由から、自分のことを名前で呼ぶように意識しています。

おわり

こんな感じで日々を生き抜いています。
毎日楽しく働けているので、同僚の方々には感謝しています!

さいごに、入社して最初の大きなリリースである、モーニング・ツーをよろしくお願いします!
morningtwo.com
Featuredな作品が動画サムネイルにする機能を実装*2しているところがポイントです!
(※ Safariの場合省電力モードにしていると動画が再生されません)
2022/11/4現在だとピアノの森/ザ・ゲームスターズ/恋じゃねえから/会社帰りのパ・ド・ドゥの4作品の動くサムネイルを見ることができます。一回クリックして見てください!かっこいいので!!
毎週動画がカッコ良いので、週の後半の楽しみです。これを見るために仕事を頑張れている、と言っても良い。
毎週木曜正午に更新されるのでお見逃しなく!

                                    • -

最近読んだおすすめ漫画です。気になる漫画、まだ全部読めてないのでどんどん読んでいきたい!

犬好きにはたまらない読み切りです。
comic-days.com

男子中学生と母の元カノたちの関係が素敵な作品。最終話まで配信されているので、一気に読めます。
comic-days.com

最近個人的に人外医療漫画が熱いです。

comic-days.com

comic-days.com

余談ですが、Viewerの埋め込み、かっこよくて好みです。

open.talentio.com

*1:Tはtrue、Fはfalseを意味します

*2:私が機能を追加しました