SlackbotカスタムレスポンスでNKODICEする

TL;DR

Slackの標準機能のSlackbotカスタムレスポンスで、話題のゲームNKODICEができるようにしてみた。

f:id:haranicle:20210620074830p:plain
顧客が求めていたもの

設定方法だけ知りたい人はここだけ読めばOK

Slackbotカスタムレスポンスへの設定方法

NKODICEとは

ksymさんが開発した「チンチロ」をベースとしたゲーム。

store.steampowered.com

(今回この記事の公開についてksymさんにご快諾いただきました。ありがとうございます🙏)

Slackbotカスタムレスポンスとは

slack.com

Slackにデフォルトに入っている機能*1で、Slackで任意のキーワードが発言された時にSlackbotに事前に設定した返答をさせることができる。

返答の内容は、改行で区切ることよって複数の候補の中からランダムに選択させることができる。

f:id:haranicle:20210620070350p:plain
Add Slackbotカスタムレスポンス

f:id:haranicle:20210620070430p:plain
Slackbotカスタムレスポンスの例

返答の最大文字数

ドキュメントなどには書かれていないが、調査したところ返答に設定できる文字数は

最大で4000 (改行も1文字としてカウント)だった。

返答をPythonで作る

すべての返答を手作業で作ると大変なので、Pythonで作る。 サイコロが3つのときは、こんな感じのコードでできそうだ。

dice = ['お', 'ち', 'ま', 'う', 'ん', 'こ']
for i in dice:
    for j in dice:
        for k in dice:
            print(f'{i}{j}{k}')

NKODICEに必要な返答の文字数

サイコロがn個の時、返答をすべて書き出すのに必要な文字数(改行込み)は以下の数式によって求められる。

6n*(n+1)-1

この解をまとめるとこう

サイコロの個数 返答をすべて書き出すのに必要な文字数
1 11
2 107
3 863
4 6479
5 46655
6 326591
7 2239487

返答に登録できる最大文字数は4000なので、サイコロは3つが限界だった。

サイコロが3つだと、最強の役であるOCHINCHINが成立しない。悲しい。どうにかしてOCHINCHINしたい。

文字数を節約してサイコロの個数を増やす方法を考える

同じ出目は削除する

赤青緑の3つのサイコロを投げた時、 が出ることがあるが、NKODICEは順不同なのでどちらも同じ出目として扱う。

出目の表現に必要な文字数を節約するために、同じ組み合わせの出目を削除した。

同じ組み合わせの出目の削除は目のソート結果をsetに代入するで実装した。

dice = ['お', 'ち', 'ま', 'う', 'ん', 'こ']
all_rolls = set()
for i in range(6):
    for j in range(6):
        for k in range(6):
            sorted_roll = sorted([i]+[j]+[k])
            a = ''
            for r in sorted_roll:
                a += str(dice[r])
            all_rolls.add(a)
for r in all_rolls:
    print(r)

ただし、この手を使うと役が出る確率が代わってしまう。

例えば、赤と青のコインを投げたときの結果を書き出すと以下のようになる。

本来は 表裏 の組み合わせが出る確率は50%だが、同じ組み合わせの出目を削除する処理をすると、 表裏 の組み合わせが出る確率は33.3%になってしまう。

今回はどうしてもOCHINCHINしたかったので、この問題を許容することにした。

役はCustom Emojiで表現

役ができた時に派手な表現をしたかったのでCustom Emojiを使った。 Custom Emojiの作成にはMEGAMOJIを使わせていただいた。

zk-phi.github.io

f:id:haranicle:20210620080853g:plainf:id:haranicle:20210620080858p:plainf:id:haranicle:20210620080901p:plainf:id:haranicle:20210620080904p:plainf:id:haranicle:20210620080908p:plainf:id:haranicle:20210620080911p:plainf:id:haranicle:20210620080914p:plain

返答も含めて出力するコードはここ。サイコロ5個が限界だった。

github.com

サイコロ5個あればOCHINCHINを出すことができる。良かった。

Slackbotカスタムレスポンスへの設定方法

Slackbotカスタムレスポンス

slack.com

  • When someone says に んこ,nko を入力
  • Slackbot respondsに以下を入力

Slackbot respondsに書く内容

Custom Emojiの登録

ワークスペースにカスタム絵文字を追加する | Slack

登録するファイルは以下の好きな方からダウンロード。(zipでダウンロードがおすすめ)

*1:プラグインなどの導入が不要なのでどんな環境でも利用しやすいのが良いところ

「死の体験旅行」に行ってきた

一番好きなゲームはなにかと聞かれたときは、迷わずヴィーナス & ブレイブスと答えている。

www.youtube.com

不老不死の主人公が、100年後にやってくる大災厄に備えて、騎士団を運営するゲームだ。
若い騎士団のメンバーは、年齢とともに成長し、やがて老いて衰退し、最終的には退団させることになる。
駒となる人間が活躍できる時間はほんの僅かだ。
彼らは何を想って生き、そして死んでいくのか。

死の体験旅行とは

死を体験するワークショップだ。
1年ほど前から気になっていたが、なかなか予約が取れなかったり、コロナの影響で開催されていなかったりで行けなかったのだけど、やっと参加することができた。

753an-ws2020718.peatix.com

ざっくり内容

はじめに自分の大事な「物」「人」「自然・思い出」「活動・行動」をそれぞれ5つずつカードに書く。
(「自然・思い出」はわかりにくいが、単に場所だと理解した。地元や思い出の場所など)
主催の方のナレーションによって自分が少しずつ死んでいく様子をリアルに想像できるようになっていて、死が近づくにつれて少しずつカードをクシャッと丸めて捨てるように促される。
「捨てるの」概念は、放棄するというよりは二度と 会えない/使えない/行けない/できない というふうに捉えて実施した。

この動画で雰囲気がわかると思う。 www.youtube.com

感想

めちゃくちゃ泣いた。

自分の場合、「パソコン」を捨てるときに大きな喪失感を感じた。
自分のスキルの多くが「パソコン」がないと成立せず、これを捨てることは即ち社会とのつながりを断つことのように感じた。
パソコンを捨てたあとは、単に生きてる生物として、大事な人と会うことだけが重要と思うようになった。

また、両親のどちらかを捨てなければいけないときが来たときも大きな戸惑いを感じた。
両親から十分な愛情を受けて育った証拠だと思った。もう少し頻繁に実家に帰るようにしようと思う。

ワークショップの最後にすべてのカードを失って死ぬ体験をすると同時に、生きている自分は多くの大事なものを持っていることに気付かされた。
生きていることはとても豊かだ。

1年後にもう一度受けたいと思った。
実際、リピーターも多くいるらしく、激しい人だと月イチで通っているらしい。

ツボを売りつけられるとか、何かの宗教への勧誘とかはまったくないので安心して参加できると思う。

まとめ

なかなか死について深く考える機会は少ないが、終わりを意識することで大切なもの、そうじゃないものが見えてきた。
まだ死ぬ予定はしばらくないが、いつその時が来るのかわからないので、エンディングノート書いてみるなど、終活をしようと思った。

CocoaPodsがXcodeのBuild Settingsをどういじっているか

本来であればCocoaPodsが自動でやってくれるXcodeのBuild Settingsの変更を手作業でしたくなったので、自分用メモ。
pod intall したときにCocoaPodsがXcodeのBuild Settingsをどういじっているか。

github.com

このあたりを見ると良さそう。
例えば PODS_BUILD_DIR には ${BUILD_DIR} がセットされている。

ステイホームでスマートホームした

家の照明、以下の理由により気に入ってなかったので買い替えた。

  • ちょっと暗い
  • LEDじゃない
  • 赤外線リモコンの反応がいまいち
    • AlexaからNature Remo経由で操作したときに反応しないことがよくあった

シーリングライト

さまざま検討した結果これにした。

f:id:haranicle:20200510121318j:plain

好きなところを照らせるので良い。5480円とお手頃価格。 プルスイッチの紐は邪魔なので外した。


スマート電球

トリゴ

シーリングライトを買ったお店ではトリゴがおすすめされていた。


1つ2750円。迫力ある。買わなかった。

トロードフリ

IKEAのスマート電球。リモコン付きで999円と破格。いっぱい買った。

www.ikea.com

なお、スマートフォンやAlexaから操作するためにはゲートウェイが必要。
電球がZigBeeという規格をしゃべるためらしい。

www.ikea.com

ja.wikipedia.org

モーションセンサー

トロードフリシリーズのモーションセンサーもあったので買ってみた。
玄関と洗面所に近づいただけで明るくなるようにした。 ゲートウェイが優秀なのか、電球とゲートウェイの間に壁があっても問題なく機能する。

www.ikea.com

my new gear...

f:id:haranicle:20200510124019j:plain

全部で13000円ぐらい。

感想

  • 部屋が明るくなってうれしい
  • 電球はちょっと赤め
  • モーションセンサーの反応は良いが消えるまでの時間が長い (測ってないけど3分ぐらい)
  • Alexaから100発100中で操作できて最高
  • IKEAアプリのUIが謎すぎてセットアップが難しかった
  • 4つ以上スマート電球を買うならIKEAが安くておすすめ

コロナ時代の転職活動

こんにちは @haranicleです。 急に無職になったので4月はずっと就活をしていた。いままで転職するときはエンジニア枠だったが、今回はプロダクトマネージャー(以下PdM)枠で仕事をさがしてみた。

事前準備

職務経歴書

GitHubのSecret GistでMarkdown形式で書いて、URLを共有する運用をしていた。エンジニア的な人には概ね好評だった。
しかし、pdfをくれと言われることが多いので、md-to-pdfを使って、pdf化していた。
本当は、privateなリポジトリでmdファイル管理して、GitHubのActionsでpush時に自動的にpdfファイルも生成するようにしたかったが、そこまではやっていない。

個人的に、職務経歴書はごちゃごちゃ書かれていて理解するのが難しい文書だとおもっているので、以下のような構成にした。
重要なものから先に書いて認知コストを下げる工夫をしている。

  • 強み
    • 言語化したもの、「起業経験」などなど
  • スキル
    • プログラミングスキルやTOEIC点数など
  • 経歴
    • 時系列降順
  • その他
    • 登壇歴、個人開発などについて

ポートフォリオ

職務経歴書の「経歴」の部分は、文字だけでは伝えきれないので、ポートフォリオを作った。
とはいえ、デザイナーではないので、見た目はかなりテキトー。ファクトだけ伝わればいいというレベル。
内容は公開済みの情報だけから構成するように気をつけた。

Google スライドで作って、元同僚などに雑に共有し、コメントを入れてもらって修正した。
(ご協力ありがとうございました。)

Google スライドから直でpdfにエクスポートしたが、フォントが汚くなってしまって残念だった。
もし次にポートフォリオを作ることがあれば、Google スライドは使わないかも。

履歴書

Google スプレッドシートで作って、pdfでエクスポートした。
ほぼ使わなかった。

応募

経路

以下の4経路で応募した。結果的にはエージェント経由の会社に就職することにした。

  • 知人経由のリファラ
  • Coral Family内のリファラ
  • Bizreachからの直スカウト
    • 前職で採用する側で利用しており、仕様をざっくり理解していたのでBizreachを選択した
  • エージェント経由
    • Bizreachに登録すると大量にエージェントから連絡が来るのでその中から選んだ

採用クローズ

各社情勢がきびしかったようで、途中で採用自体をクローズする会社が何社かあった。
こちらとしても良いフィルタリングになっていたので逆に助かった。
(とはいえ、御社のほうからスカウトしておいて、やっぱりクローズのパターン多すぎ)

面接

スケジュール調整

はじめのうちはメールで、候補日を複数連絡するみたいなオペレーションをしていたが、この作業がめんどくさいのと、スケジュールが流動的に変わるので、publicな Google カレンダーで空き時間を直接共有するようした。

f:id:haranicle:20200421182342p:plain

また、各所からめちゃくちゃいっぱいメール/電話/メッセージが来るので、常に通知に気付けるように家の中でもずっとApple Watchをつけるようにしていた。

1分で話せ

面接の限られた時間内で効果的に話すためにこの本を読み直した。
1分で話せ 世界のトップが絶賛した大事なことだけシンプルに伝える技術

余談だが、bitFlyerで働いていたときに、当時代表の加納さんがこの本を強くオススメしていて、Exective席エリアの棚にこの本が飾られていた。

練習

DMM英会話の講師に、
「いま無職で就活中だから、面接官になったとおもって色々質問してくれ」
と頼んで、面接練習をした。

アイスブレイク

面接する側もある程度緊張するので、事前にアイスブレイクを考えておく。
天気の話題とかなんでもいい。

リモート面接

面接は最終面接を含めて すべてリモート だった。 物理的な移動がない分、楽だった。
とはいえ、MPを消費するので、1日に3件が限界だった。
コロナ後もリモート面接の文化は続くと思っていて、少なくともカジュアル面談ぐらいはリモートになると思っている。

進捗管理

各社の選考の進捗はTrelloで管理した。
社名でカードを作って、どこ経由応募なのかをラベルにし、各社に関するメモはコメントに書いておいた。

f:id:haranicle:20200430083600p:plain

課題

選考過程で課題を出される会社もあった。
面接は瞬間的なパフォーマンスを見る意味では効果的なのかもしれないが、スキルを確認するためには課題のほうが合理的だと思った。

PdM職ゆえのむずかしさ

PdMの定義

そもそもこの職業の抽象度が高いので、マッチングがめちゃくちゃ難しいと思った。
社内でPdMという職種の要件が決められていないパターンもあり、面接の中で「御社にはPdM職は必要ないのでは?」みたいな会話をしたこともあった。
PdMの評価軸が決まっておらず、本質的でない質問をされるパターンも多かった。「いまの質問の意図はなんですか?」と逆に聞いてしまうこともあった。
エージェントからは「PdMはコミュニケーション力と地頭の良さを見られることが多い」と言われたけど、それってつまり評価軸をうまく言語化できていないってことなのでは?と思ってしまった。

ビジョンへの共感

PdMという職業柄、プロダクトを愛せるかが重要だと思っているので、取締役レベルの人にはビジョンについて質問するようにしていた。
特に「プロダクトを通してどういう世界観を作りたいか」という部分に自分がしっかり共感できるかを面接の場で確認するようにしていた。
そういう意味では志望理由がかなり重要なので、面接前に時間をとってじっくり考えるようにした。

感想

社会が痛みを伴いながら急速に変化していく時代に就活をできたのは貴重な体験だった。
どの業界の会社を選ぶべきかを後出しジャンケン的に選ぶことができたので、その点はとても良かった。

JVCEAの仮想通貨取引月次データをグラフ化してみた

JVCEA

日本の仮想通貨取引所は、JVCEAという自主規制団体に加盟しています。
JVCEAは、金融庁にも認められており、業界の成長と利用者保護のために活動しています。
そんな、JVCEAが日本の仮想通貨取引所を横断した面白いデータを公開していたのでグラフにしてみました。

統計情報 | 一般社団法人 日本仮想通貨交換業協会(JVCEA)

グラフ

f:id:haranicle:20200416114207p:plain

f:id:haranicle:20200416114220p:plain

f:id:haranicle:20200416114232p:plain

利用者口座数

利用者数のデータがあるのが面白いですよね。 GMOコインは独自に口座数を発表していました。 また、ハッキング事件や業務改善命令などで口座開設が停止されていた期間もあるのでそれらも表記してみました。

f:id:haranicle:20200416114249p:plain

2018年11月と2019年1月が対前月設定口座数増減がマイナスに。 ユーザーが自ら口座を閉鎖することに対してインセンティブはあまりないので、取引所側が閉鎖したと考えられます。

配色

こちらを使わせていただきました。
Play With Your Toys Color Scheme » Blue » SchemeColor.com

Redashで自分用KPIダッシュボードを作った

f:id:haranicle:20200412134749p:plain

以前作った 英語の語彙力をどうにかするためのツール をゆるゆる使っているが、成果が目に見えたほうがやる気が出ると思い、KPIダッシュボードを作ってみた。

Redash

Redash をEC2上で稼働させている。 手順は簡単で公式のドキュメント通りポチポチやるだけ。

Setting up a Redash Instance

t2.micro だと起動しなくて少しハマった。

Google Spreadsheetとの連携

英語の語彙力をどうにかするためのツール はデータベースにGoogle Spreadsheetを使っているが、RedashがSpreadsheetに対応しているため簡単に連携できた。

Redash と Google Spreadsheet を連携する (2019年9月版)

上記記事にも書いてあるとおり、Google Spreadsheetのデータに直接クエリを投げることができないため、Query Resultsを経由する必要があった。

メモ

自分用KPIダッシュボードは自然と目に付く場所にあってほしいので、Redashは最高の解決策ではなさそう。 iOSWidgetApple Watchで見れるようにしたいけど、アプリを作る必要があり工数が大きくなってしまうので、既存のアプリでどうにかならないかしら。