オンラインミーティングが始まったら自動で点灯するオンエアーネオンライト作った

家で仕事するようになったときからずっとオンラインミーティング始まったら自動で点灯するネオンサインみたいなのあったら良いなぁと思ってた。 まぁぼんやり思ってるだけだったんだけど、ちょっとやる気が出たのでガッと組んでみた(確定申告の書類集めとかしてるとそうなるよねー)

雑要件定義

  • 絶対に自動でON/OFF
  • 取り回しのためPCとは直接有線で繋げない
  • ミーティングはZoomだったりGoogle Meetだったりあるのである程度汎用的な方法

ミーティングの自動判別

たまにネットで出てくる記事でよく使われているZoomアプリのプロセス監視するのはGoogle Meetに対応できないので無し。カレンダー監視してミーティングの時間とか考えたけど、精度低いし突発の仕様相談とかに対応できないので無し。

結局仕事のミーティングはすべてカメラONにして行っているのでカメラの監視をすることにした。たまにゲームでDiscordつかって音声だけのときもあるけど、奥さん的要件としてはカメラに映り込みたくないというのが大きのでカメラの監視をすることにした。

で、カメラがつながっているかどうかではなく、実際に起動しているかどうかの監視はlsofコマンドで行える。

# lsof /dev/video0 
COMMAND    PID     USER FD   TYPE DEVICE SIZE/OFF NODE NAME
pipewire  2019 yoshiori 52u   CHR   81,0      0t0 2289 /dev/video0
wireplumb 2020 yoshiori 47u   CHR   81,0      0t0 2289 /dev/video0

linuxだとこんな感じ。(pipewireとかwireplumbはWayland下でオーディオデバイス扱うやつなので無視して大丈夫) 多分Macでも似たようなもんだと思う。

あとはこれをループで監視すればON/OFFが判別できる。

ライトのオンオフをリモートで操作

PCで会議のイベントは取れるようになったのであとはプログラムからネオンライトを操作できれば良い。昔ならIFTTTとか使おうとか考えたんだけど、今やIFTTTのwebhookは高級有料プランになってしまったので無し。スマートデバイス、PCから扱うのはじつは面倒くさいんだよなぁとか思いつつ、なんか他に無いかなぁと思ってたらSwitchBotはAPIを公開してた!マジでAPI公開してる企業は政府から補助出てほしい!!ありがとうSwitchBot!!

で、Rubyのgemもあったのでめっちゃあっさりできた。

    class Light
      def client
        @client ||= Switchbot::Client.new(ENV["TOKEN"], ENV["SECRET"])
      end

      def on
        client.device(ENV["DEVICE_ID"]).on
      end

      def off
        client.device(ENV["DEVICE_ID"]).off
      end
    end

これで道具は揃ったのであとは作るだけ。

材料

ON AIR ネオンライト

物理スイッチなので本体のスイッチはいれっぱなしにしてスマートプラグでON/OFF操作できる。あと電池も対応しているけど有線でも使えて接続口がUSB-Cなのも地味に嬉しい。

スマートプラグ

商品説明にはAPIについて全く触れられていない。なぜなのか!?(マニアックだから?)

【Option】薄型 USB-C ケーブル

USB-C のコネクタ側が薄型のL字なので接続時に綺麗に見える。初代Apple Pencilの突き刺さりが美しいと思った人はいらないと思う。

プログラム

github.com

ということで前回かいた「超楽にRubyで雑に書いたスクリプトをsystemdで管理したい! - 宇宙行きたい」はこれを動かすためでした。

まとめ

SwitchBotが実はAPI公開しててさくっと色々なハックが出来るのはもっともっと知られてほしい!!!!最高便利!ありがとう!!!

超楽にRubyで雑に書いたスクリプトをsystemdで管理したい!

ちょっとした雑なスクリプト書いてそれを常に起動しておきたいときないですか?僕はあります。

しかもめんどくさがり屋なのでghq管理化のディレクトリでgemに頼って雑に書いたスクリプトがそのまま動いてほしいんです。

systemd使えば出来るんだろうなぁと思いつつ「色々面倒くさいんだろうな」と思って手を出していなかったんだけどやってみたら拍子抜けするほど簡単だったので共有です。

雑要件定義

  • rubyはrbenvで管理してるんでそれそのまま使ってほしい
  • 実行ファイルをgit&ghq管理化のディレクトリでそのまま使いたい
    • 他の場所にインストールとかコード管理ダルい
  • bundle exec 的なのもやって依存ライブラリもうまいことやってほしい

やること

systemdをユーザーレベルで使うときは ~/.config/systemd/user/にファイルを置けば良い。ディレクトリ無かったら作る

mkdir -p ~/.config/systemd/user/

そこにsystemd ユニットファイルを作る。例えばhogeっていうプロジェクトならhoge.serviceという名前のファイルを作る。中身はこんな感じ。

[Unit]
Description=hoge

[Service]
Type=simple
Restart=always
Environment="PATH=%h/.rbenv/shims:/usr/local/bin:/usr/bin:/usr/local/sbin:"
ExecStart=%h/src/github.com/yoshiori/hoge/bin/run
WorkingDirectory=%h/src/github.com/yoshiori/hoge

[Install]
WantedBy=default.target
  • Environment
    • ここにPATH設定をかいてrbenvをにもパスを通す。
  • ExecStart
    • 実行するコマンド
  • WorkingDirectory

%hsystemdが定義しいる置き換え文字でユーザーのホームディレクトリになる

で、実行するファイルの中でbundler/setup呼んであげれば良い。

#!/usr/bin/env ruby
# frozen_string_literal: true

require "bundler/setup"

デバッグ

とりあえず実行

systemctl --user start サービス名.service

動かなかったらログ見る

 journalctl --user -eu サービス名.service

修正したらリロード

 systemctl --user daemon-reload     

あとは正常に動くようになるまで微調整

登録

ここまできたらいつものsystemdと使い方変わらない

登録

systemctl --user enable サービス名.service

登録されていることを確認

systemctl --user list-dependencies 

おわり

まとめ

簡単だからsystemdをユーザーレベルで使えばよい。そうすればログイン時に起動するデーモン作れる。

JavaでUUID.compareToの挙動が思ってたのと違った

UUIDはv6,v7,v8とかで時間ベースのソートが出来るようになった。べんりー

なのでUUIDの上下関係が大事になったんだけどJavaのUUID.compareToはそこまで考慮されていなさそうだった。

たとえば2つのUUIDを用意してみる。

  • 00000000-0000-7dda-8cc3-13f289aa2814
    • 1970/01/01とかでつくったUUID
  • e677d1fe-e676-7224-be39-f88d1cd436d8
    • 9999/12/31とかでつくったUUID
    • こっちのほうが大きくなってほしい

まあ、見た目通り文字列で比較すればe677d1fe-e676-7224-be39-f88d1cd436d8のほうが大きい。 ちなみに postgres で比較するとそのとおりの挙動になる

neko=>  select ('00000000-0000-7dda-8cc3-13f289aa2814')::uuid < ('e677d1fe-e676-7224-be39-f88d1cd436d8')::uuid;
 ?column?
----------
 t
(1 row)

でも、Java(21)でUUIDオブジェクトとして比較すると逆になる

# jshell                                                                                                     2023ms  20240222154921秒
|  Welcome to JShell -- Version 21.0.2
|  For an introduction type: /help intro

jshell> UUID max = UUID.fromString("e677d1fe-e676-7224-be39-f88d1cd436d8");
max ==> e677d1fe-e676-7224-be39-f88d1cd436d8

jshell> UUID min = UUID.fromString("00000000-0000-7dda-8cc3-13f289aa2814");
min ==> 00000000-0000-7dda-8cc3-13f289aa2814

jshell> max.compareTo(min)
$3 ==> -1

ちなみに文字列にして比較すると(当たり前だけど)見た目通りの挙動になる。

jshell> max.toString().compareTo(min.toString())
$4 ==> 53

なぜかと言うとOpenJDKの実装では前半と後半にわけて(符号付きの)longとして保持している。

    public UUID(long mostSigBits, long leastSigBits) {
        this.mostSigBits = mostSigBits;
        this.leastSigBits = leastSigBits;
    }

https://github.com/openjdk/jdk/blob/d60331a21c30271340f7d6d58f3122f0e6431a04/src/java.base/share/classes/java/util/UUID.java#L140-L143

で、compareToも実装されていていて、最初に前半のlongで比較している

    @Override
    public int compareTo(UUID val) {
        // The ordering is intentionally set up so that the UUIDs
        // can simply be numerically compared as two numbers
        int mostSigBits = Long.compare(this.mostSigBits, val.mostSigBits);
        return mostSigBits != 0 ? mostSigBits : Long.compare(this.leastSigBits, val.leastSigBits);
    }

https://github.com/openjdk/jdk/blob/d60331a21c30271340f7d6d58f3122f0e6431a04/src/java.base/share/classes/java/util/UUID.java#L557-L562

で、このmostSigBitsの値が一定の大きさを超えたUUIDではマイナスになる(まぁ、それはそう)。 例えば上記のものは内部的には下記のような感じ

max = {UUID@3077} "e677d1fe-e676-7224-be39-f88d1cd436d8"
 mostSigBits = -1839771030039137756
 leastSigBits = -4739483847872989480

ちなみに変換ロジックはこれ

    public static UUID fromString(String name) {
        if (name.length() == 36) {
            char ch1 = name.charAt(8);
            char ch2 = name.charAt(13);
            char ch3 = name.charAt(18);
            char ch4 = name.charAt(23);
            if (ch1 == '-' && ch2 == '-' && ch3 == '-' && ch4 == '-') {
                long msb1 = parse4Nibbles(name, 0);
                long msb2 = parse4Nibbles(name, 4);
                long msb3 = parse4Nibbles(name, 9);
                long msb4 = parse4Nibbles(name, 14);
                long lsb1 = parse4Nibbles(name, 19);
                long lsb2 = parse4Nibbles(name, 24);
                long lsb3 = parse4Nibbles(name, 28);
                long lsb4 = parse4Nibbles(name, 32);
                if ((msb1 | msb2 | msb3 | msb4 | lsb1 | lsb2 | lsb3 | lsb4) >= 0) {
                    return new UUID(
                            msb1 << 48 | msb2 << 32 | msb3 << 16 | msb4,
                            lsb1 << 48 | lsb2 << 32 | lsb3 << 16 | lsb4);
                }
            }
        }
        return fromString1(name);
    }

https://github.com/openjdk/jdk/blob/d60331a21c30271340f7d6d58f3122f0e6431a04/src/java.base/share/classes/java/util/UUID.java#L242C1-L265C6

まぁ、Java のUUIDは4くらいまでしか対象にしていない気がするのでしょうがないような気がするし、これが仕様なのかバグなのかは人によって捉え方が違うと思う。

ただ、UUIDv7とかのロジックで生成したUUIDをJava上でオブジェクトとして比較すると順番が思ったのと違うことになるというお話でした。 僕はとりあえずtoString()して比較するようにします。

この10年で何がみえるようになって何が変わったのかという発表をします。

event.shoeisha.jp

久しぶりにデブサミがオフラインでやる!って事で僕も発表します!!!

で、なんの話をするのかとういのを概要でなんとかまとめたつもりなんだけど書ききれなかった部分とかあるので書いていきます。

基本的には10年前にデブサミ関西で基調講演させてもらったときの続きのお話です。「10年後...」ってやつですね。

speakerdeck.com

でもただ続きの話するんじゃなくてそこから変わったこと、変わらなかったことの話をしていければと思っています。

偉そうなこと言ってるけど10年後も同じこと言えるの?

「生き方」的な発表を聞くと素直に感動する反面「偉そうなこと言ってるけど10年後も同じこと言えんのかね?」とか心の片隅で思ったことありません? 俺はいつも思ってます。

映画なんかやらないって言ってたお笑い芸人が映画撮ってたりあるじゃないですか。

でもそれを否定しているわけじゃないんですよ。多分それから色々立場が変わったりして見える景色が変わったり実は深く考えたらそちらの考えになったことって絶対あると思うんですよ。

で、実は一番大事なのはなぜ変わったのかだと思うんだよね。より深くみるようになった方かもしれないし、立場が変わってもっと上からみたら実はこうだったとか。

何が見えてどう感じて変わったのか。これが聞きたいんだけどあんまり話してくれる人いない。まぁなんか言い訳っぽくなっちゃって話しづらいのもあるかもしれないけど、そういった部分を聞きたいなって僕自身が思っていたのでそのへんの話をしようと思います。

すべての歌に懺悔しな!!

すべての歌に懺悔しな!!

40代とか若者以外もキャリア悩んでるんだ!

なんか「エンジニアの生き方」みたいなセッションあると20代後半から30代前半ぐらいをターゲットにしてること多いじゃないですか。でも実は30代後半、40代以降の人もキャリア悩んでるんですよ。だってWeb業界は業界自体が若いからその年齢になると前例が少ないんですよね。出てきても「著名なOSSのコミッタ」とか「xxx社のCTO」とかの話で普通のエンジニアにはなかなか参考にならないんですよね。

なんで「著名なOSSのコミッタ」とか「xxx社のCTO」ではない1エンジニアの話って結構役に立つんじゃないかなって思っています。

自分で言うのもアレなんですが、それなりに執筆とか公演とかの依頼いただいたり転職したらインタビューしていただけたりするので「ただの普通」ではないとは理解しているつもりです。

でもエンジニアとして僕よりすごい人はいっぱいいるしマネージャとしてもすごい人はいっぱいいるし、能力的にはやっぱり僕は「普通」なんですよね。

そんな普通な僕がどんなことを考えて、どういう決断をしてきていまのキャリアになってるのかっていうのを話せればなと思っています。

「著名なOSSのコミッタ」とか「xxx社のCTO」のキャリアが才能*1の話とすれば、僕のは普通のエンジニアとして挑戦し続けるスキルの話ですね。

スキルなんで才能いらなくて意識して練習すれば出来るようになるやつです。そういった話をしようと思っています。

僕も誰かの言葉に背中を押してもらった

僕自身もなにか決断をするとき、誰かの言葉を参考にしたり、背中押されたりするんですよ。

例えば前職でお家騒動的なので社内がぐちゃぐちゃなときに「人事部長やってくれ」て言われたとき、寝耳に水だし領域違いすぎるし断る気でいたとき*2任天堂元社長・岩田さんのインタビューの言葉に背中を押されました。

当事者になれるチャンスがあるのに
それを見過ごして
「手を出せば状況がよくできるし、
 なにかを足してあげられるけど、
 たいへんになるからやめておこう」
と当事者にならないままでいるのは
わたしは嫌いというか、
そうしないで生きてきたんです。

ほぼ日刊イトイ新聞 - 社長に学べ!

この「当事者になれるのにたいへんになるからやめておこうっていうのは嫌い」っていうのに「あー、めっちゃロックだな」ってすごく共感して引き受けることにしました。

さらにその後、会社の元同僚が僕のデブサミ関西のスライドをみて影響を受けたと書いてくれていました。

当時在籍していた同僚のこのスライドを見て「あぁ、僕より先を進んでいる先輩が大胆に挑戦しているのに、だいぶ縮こまってるなぁ」と感じ、せっかくなら違うことに挑戦してみようかなという気持ちに。

デザイン基盤を整えるため、サービス開発から少し離れた話|ふじけん / kenshir0f

めちゃめちゃ光栄だし嬉しかったとともに自分の言葉が誰かの背中を押すこともあるんだっていうことに気付かされました。

僕は誰かの言葉に背中押されて、その僕の言葉にふじけんは背中押され、そして誰かがふじけんの言葉に背中押される。

なんか言葉にするとこっ恥ずかしいけどそうやって少しづつでも誰かの背中を押すことが出来るって素晴らしいなと思って猛烈に僕もなにかしたくなったのを覚えています。

このふじけんの記事を読んだときから「いつかデブサミ関西の続きの話したいなぁ」と漠然と思っていたのが今回実現した感じです。

この物語の主人公ではなくなるのか

家庭では子供生まれたり家購入したり、仕事でも管理職になったり若手エンジニアがガンガン成果をだしているのをみるとすごく嬉しい反面、ちょっと自分が少し脇役になってくるような感覚になるのかなぁと。なんとなく最前線ではなくなった感じ、ちょっと「あ、僕中心の物語じゃないのかもしれない」という感覚。子供出来たらそりゃ子供中心に生活はなるんですよね。仕事でもちょっと俯瞰してみる立場になって最前線でガンガンな昔とくらべるとちょっとさみしい。たまにそんなこと思うこともあるよねーっていう。

家庭や仕事の中心が自分じゃなくなっても人生の中心は自分だっていう感覚、結構大事だと思うんですよ。そのへんの話も出来たらなぁと思っています。

ターゲットは若者ではなくなった人たち

オトナノススメ~35th 愛されSP~

オトナノススメ~35th 愛されSP~

なので今回の発表内容は30代後半から40代のキャリアの話です。ターゲットももちろんメインはその層になると思いますがふじけんの例のように若者が聴いてもなにか持って帰れるような発表にしたいと思うので是非聞きに来てください!

 

event.shoeisha.jp

*1:もちろんそれ以上に努力とか色々あると思います

*2:というか実際数回断った

2023 年買ってよかったもの

今年は夏くらいからキャンプにハマり始めてそれ系のものを買うことが多くなったのですが今回はそれ以外で買ってよかったものをまとめています。

 

Amazonベーシック 乾電池 アルカリ 20個セット

いままでエネループみたいな充電式の電池を使ってたんだけど充電式だと肝心なときに充電されていなかったりしてちょっと苛つくことがある。

今年になって子供のおもちゃで電池を使うものも増えてきてエネループ補充するのもなぁと思って電池買いだめしてみたら便利!

一回よく知らないメーカーの電池買ってみたらすぐになくなったり品質的に満足できなかったんだけどAmazonベーシックのは安定しているのでこれをとりあえず買うようになった。充電式よりストレス減って最高!。

 

サンワダイレクト フットレスト

椅子に座るとき、物書きをする人は前傾姿勢になるんだけど、僕みたいにキーボード使ってディスプレイ見る人は後傾姿勢にしたほうが腰にも楽なのです。

で、机を低めにしてキーボードを椅子の肘置きと同じくらいの高さにするとすごく楽なんだけど、僕の昇降机はそこまで低くならない。逆の発想で少し椅子を高くすると丁度いい高さになるんだけどそうすると今度は足が少し浮いてしまう(正確には浮きはしないんだけどちょっと違和感がある)

なのでこのフットレストを買ってみたんだけど思いの外よかった。足の位置が少し上になるのもそうなんだけど、いい感じに角度があることで椅子から少しづつおしりが前にずれてきてしまうのも防げて本当に楽になった。

サンコー モニターアーム用ポール

モニターアームはエルゴトロンの例のあれを使っています。

 

で、後継姿勢で座っていると顔は少し上を見るようになるんだけどすこしモニターアームの長さが足りない。のでサンコーのポール買ったらピッタリでした。ちょっと机の強度が気になったので補強プレートも一緒に買いました。

Anker Soundcore AeroFit

更に後傾姿勢になると椅子のヘッドレストに頭をつけることが多くなるんだけど、そうなると骨伝導イヤフォンの首の後ろをまわるグルッとした部分がじゃまになるんだよね。でも仕事中にAirPods Proとかは耳が塞がるのが嫌だなぁと思ってた。メインは仕事中かゲームやってるときに使うので

  • 無線である
  • 耳を塞がずに外の音が聞こえる
  • 外に音がもれない

ことが大事。でノイズキャンセリングとかはいらないというのを考えて骨伝導にしてたんだけどよく考えると上記を満たせば骨伝導である必要はないことに気がついた。

Ankerの AeroFit は指向性のあるスピーカーで耳の穴に向けて音をとばしているので耳の穴を塞がないし外に音も漏れにくい。耳にかけるだけで振動もしていないので本当に求めている体験だった。

さらにマルチポイントに対応しているので複数機器に繋げられるのも便利!

Belkin 3 in 1 MagSafe充電器

iPhone 14 pro あたりから後ろのカメラの出っ張りがドンドンでかくなってきて立てかけるようなワイヤレス充電台に乗せるとちょっと浮くようになっちゃってきた(15 Pro で少し出っ張り小さくなった気がする)

なのでMagSafe充電器探してたんだけどApple公式認証していないと15wの最速充電が出来なくてなんとなく嫌なのでそれに対応していてAirPods ProもAppleWatchも充電できるの探してみるとあんまり選択肢がない。なので高いけどBelkinのこれにしたら台座の重量的にも安定していてMagSafe剥がすときも安心なので最高でした!

Anker PowerLine III Flow USB-C & USB-C ケーブル

すごく柔らかくクネクネしたUSB-Cケーブル、これは触ってみないとわからないと思うんだけどめちゃめちゃ柔らかいので持ち歩きのUSBケーブルとして最高だった。PD 100W対応しているけど映像出力は対応していないのでそれだけ注意(というか映像出力対応させるとケーブル太くなりすぎるよね。。。)

Anker Nano II 65Wと合わせてiPad ProとかMac Book Proとかの充電用に持ち歩いてます。

 

バッファロー BUFFALO USB3.2

仕事用に新しいPCを組んだ - 宇宙行きたい に書いたようにArch Linuxで普段は仕事しているんだけどたまにブートイメージ欲しくなるときがある。そんなときに使っているこれが地味に便利。なんとUSB-AとUSB-Cの口が両側についている。どっちでも使える!(普段はディスプレイのUSB-Cに挿しているんだけどのっぴきならないときはHHKを直接つなげてキーボードのUSB-Aに挿して対応したりしてる)

フォトフレーム ましかくフレーム

子供の写真は毎月ALBUS(アルバス)で印刷しているんだけど子供かわいいしアルバムに入り切らないどころか3倍位毎回頼んでしまうんだよね。公式の木のフレーム買って机の前に飾ってたりもするんだけどもっと飾りたい!とおもって探してたら出てきたのがコレ。公式じゃないんだけどサイズピッタリなので愛用しています。(公式で出してくれー)

 

 

@june29 とワイワイ喋ってきた

 

というのを聞いて「適当に話す役やります!」って立候補したら実現したのでいっぱい喋りました。

ひさしぶりに話すの楽しくて途中で予約してたDMM英会話もキャンセルしつつ話し続けてしまった。結果4本という形になってしまい編集すいません><って気分です。

ヨシオリさんと(1) 数年ぶりのおしゃべりと、Launchableでのお仕事のお話

june29.substack.com

一個目はお仕事の話メインで話しています。あと久しぶりなので「久しぶりー」的な会話も、あとjune29の読み方とかゲーム業界に存在するであろうもうひとりの Yoshioriの話もしています。

ヨシオリさんと(2) 英語と英会話の練習、ソフトウェア・テスティング

june29.substack.com

これは英語とか英会話の話をしています。どっかで記事にしようと思って結局書いていないんだけどDMM英会話のデイリーニュースは

  1. 興味のある記事を選ぶ
  2. 記事に出てくる単語を学ぶ
  3. 記事を音読して読む
  4. 記事に対するちょっとしたクイズに答える
  5. 記事の内容に関する議題について語る

という感じで、単語と、その単語がどのように使われるのかを見た後に実際記事を読んでディスカッションするという良い流れなので結構好きという話をしました。

ヨシオリさんと(3) 漫画とゲーム

june29.substack.com

で、趣味的な漫画とゲームの話。

ジョジョへの言い訳と呪術廻戦がマジでよく出来ているという話をしました。

ちなみにここでjune29におすすめされた「とんがり帽子のアトリエ」は1巻読んでみたらめっちゃ面白かったので全巻買って出張に持っていきました。

ヨシオリさんと(4) 仕事に使う道具たち

june29.substack.com

ここ2年位Linuxつかって仕事してるけどそのへん含めた仕事の道具の話ですね。

またここでもとちぎの話ししています。

toruby.connpass.com

まとめ

hidek のpodcast出てから3年位ぶりに出たポッドキャストでした。めっちゃ楽しかったのでまたぜひ呼んでください!

とちぎのあのチームからしか摂取できないテスト系の栄養がある

個人的には「わかる人はわかるだろ?」的なことを言うのはあまり好きなスタンスではないんだけど、こればっかりはなんかうまく言語化できなくて……でもなんというかわかってくれる人は居そうだろうなぁと思いながら書いています。

いわゆる toRuby の人たち、というかあのへんの人たちというか咳さんのチームのひとたちというかなんと表現していいのかわからないんだけど、あの人たちと話さないと摂取できない栄養素的なのがソフトウェアテスティングまわりにはある。

言い切っちゃったけど少なくとも俺にはある。

ソフトウェアテスティングで色々考えてて自分だけで考えててもなんか煮詰まってきたなぁって時にほんとふと「あの人たちに聞いてもらいたい」って頭に浮かんでくる。

というのをなんで長々と書いているのかというと、久しぶりにそういう感情が出てきてもう我慢できなくなってしまったので思い切ってつぶやいてみた。

そしたらあれよあれよと言う間にイベント開催まで決定してもらえたのです。若干狙って質問した下心はあったけど素直に嬉しい。

toruby.connpass.com

僕はここ数年はソフトウェアテスティングに関しては趣味が仕事になった感もあって仕事中にも色々考えれるし、プライベートでも妄想できるしで幸せなのですが、そのへんの話の中でまだモヤモヤしてたりうまく言語化出来ていないものをぶつけるために発表しに行くつもりです。

なんか咳さんはRubyKaigiでボツにしたネタ喋るみたいだしみんなでとちぎにいこう!!!!!!!!