Raspberry Pi + スマートプラグでFire TVリモコンをPCモニタに対応させる

新しいPCモニタとFire TV stickを購入しました。ウキウキでセットアップしたものの少し問題が。 PCモニタではFire TVのリモコンで音量調整やモニタの電源のオンオフができません。買い物はちゃんと調べてからしようという教訓ですね。

リモコンでの音量調整はBluetoothスピーカーをペアリングさせることで可能になりましたが、モニタの電源切替はなんとかするしかないということで、スマートプラグを用意してRaspberry Pi経由で操作できるようにしました。

インターネット上には似た記事がたくさんありますが、備忘録兼2024年版として残しておきます。

続きを読む

Blade Rondoのリモート対戦用Discord Botを作り直しました

以前作成した、Domina Games様より大好評販売中のボードゲームである『Blade Rondo』(ブレイドロンド)シリーズのリモート対戦を実現するための Discord botを作り直しました。

github.com

更新内容は以下の通りです。

  • Discord.jsのバージョンをv13に更新
  • スラッシュコマンド対応
    • /newgame normal 通常フォーマットの手札配布
    • /newgame hybrid 混成フォーマットの手札配布
    • /bake パン焼き
    • /help ヘルプ
  • 対戦可能フォーマットの追加

これまでに導入しているサーバーがある場合、権限の更新のため再度の招待が必要です。ご了承ください。

記事の残りは経緯と説明です。詳しいことは上記Githubをご覧ください。

続きを読む

Blade Rondoのリモート対戦用Discord Botを作りました

Domina Games様より大好評販売中のボードゲームである『Blade Rondo』(ブレイドロンド)シリーズのリモート対戦を実現するための Discord botを作成しました。

github.com

以下はその経緯と説明です。使いたい方はgithubをご覧ください。

Botを作った経緯

Domina Games様より大好評販売中のボードゲームである『Blade Rondo』シリーズをご存知でしょうか。 このゲームは2人用の対戦カードゲームで、同梱の20種40枚の山札を用いて戦います。

ゲームの最初に各プレイヤーは山札から15枚ずつカードを受け取り、配布された中から7枚を選んで手札として対戦を行います。 自分の持っていない残り25枚のカードから相手の構成を予想し、最高の7枚をチョイスするプロセスと予想の答え合わせが非常に面白いゲームです。

しかしながら、感染症の流行する昨今では顔を合わせてゲームをする機会が減り、初期山札を共有するBlade Rondoシリーズは すぐには遊びにくいゲームとなってしまったように思います。

TCGのようなお互いにデッキを持ち寄ってできるゲームやDomina Games様から販売されている『Geminoa』では通話アプリを通じたリモート対戦が可能ですが、 まさかBlade Rondoで片方のプレイヤーが相手の分の15枚をめくって伝えるというわけにはいきません。ゲーム性が破綻してしまいます。

そこで、初期手札を配布するDiscordのbotを作って対戦をしやすくすることにしました。 お互いに同じ製品を所持しているという前提はありますが、持ってなかったら買ってもらうことで対戦が可能になりますし、 買ってもらって布教してもらうことでユーザーが更に増えることが期待できます。良い事だらけに違いありません。

利用したもの

アプリケーションをweb上から手軽に動かせる『Glitch』というサービス上で開発を行いました。(出来上がったbotはGlitchではなく個人のVPS上で動かしています) glitch.com

Node.jsのライブラリであるdiscord.js(https://discord.js.org/)を用いたbotのテンプレート(https://glitch.com/~pumped-chopper)があったので ありがたくRemixし、あとはDiscordとGlitchを往復してメッセージをbotにひたすら送りながら開発しました。

リプライで引数を受け取ってそれに応じて反応するだけのものなので、中身は非常にシンプルで済みました。 大したことしなくても自分の欲しい機能作れるのはライブラリ様様ですね。

実装した機能

今回実装した機能は3つです。

  1. 対戦するプレイヤーのDMに山札から15枚(Bread Rondoの場合は10枚)を配布する
    • 被りがないように配布する
    • 遊ぶルールがプリセットから指定できる
  2. パンを焼く
    • Bread Rondoの対戦に必須の機能
    • チャンネル別にパンの山札を管理してそこから抜き出してくる
  3. ヘルプを表示する
    • 使い方の説明をチャンネルに投稿する
    • 内容はgithubのreadmeに書いたものとだいたい同じ

あくまで山札を共有するというリモート対戦上の問題点を解決するためのbotなので、 山札周りの機能+ヘルプという単純な機能のみです。

カード配布機能は公式が用意している山札を共有するルールである、各製品単体で遊ぶ場合とブレイドシュトローム(無印とNight Theaterの混成ルール) を指定できるようにしています。

実装が面倒でさらに需要がわからないため、独自の山札を指定する機能やドラフトルールの実装は見送っています。 リモート対戦の需要が自分以外にあるのかわからない状態で作っているため、自分が対戦に使うルールのみ作成しました。

実際の動作

twitterで実際の動作を画像投稿してたのでその引用です。

カード番号が存在するBread Rondo以外のシリーズではカード番号順にカードを配布します。 物理攻撃は⚔️、魔法攻撃は🧙‍♂️などの絵文字でカード種別を特定できるようにしています。

Bread Rondoのパンを焼く動作は、オーブンの火力が最大になったときに山札から1枚めくるのとほぼ同じ動作のため、 各プレイヤーに配布するのではなくコマンド入力で1枚ずつ山札から引いていくようにしました。

おわりに

自分の使いたいものを作っただけですが、このツールを通じて対戦を楽しむソーディア(Blade Rondoプレイヤー)の方が私以外にいてくれれば幸いです。

また、ほしいカードプールやバグ等ございましたらtwitter(@tolt_santyoku)に連絡をいただければどうにかします。

Simple Membershipプラグイン(WordPressプラグイン)のおぼえがき

目次

  • 目次
  • はじめに
  • Simple Membershipについて
  • Loco Translateを導入したが一部の翻訳がされていない
  • 有料登録プロセス
  • 有料登録(定期購読)したユーザの登録解除
  • 定期購読の支払い時差による二重支払いリスク
  • localhostでテストをする際PayPal決済をしても登録できない
  • ローカル環境でメール送信ができない

はじめに

当記事は筆者が以前仕事で使用したWordPressプラグインである「Simple Membership」についてのおぼえがきです。 筆者と同様の問題で躓いた方の助けになれば幸いです。

本章以降の内容はすべて以下の環境で利用したもので、変化がある可能性があります。 最新の情報については、各プラグインの公式ページを参照してください。 また、本記事では決済方法としてPayPalを利用することを前提としています。

名称 バージョン
WordPress 5.4.2
Simple Membership 3.9.7
Loco Translate 2.3.3
続きを読む

B-スプライン曲線(NURBS曲線)で90°の円弧を描く

※この記事は前回記事の続きです。 tecofalltolt.hatenablog.jp

目次

  • 目次
  • はじめに
  • NURBS曲線
  • 90°の円弧状に曲げる
  • 実践
  • おわりに

はじめに

前回、B-スプライン曲線でへにょりレーザー(東方Projectに登場する曲がるレーザー)を作成する記事を公開しました。 確かに制御点に従ってきれいに曲がる曲線は作成できるのですが、円弧を描こうとするとうまくいきません。

f:id:tolt:20200606013207p:plain
円弧を描こうとして失敗した例

もちろん、制御点を増やすことで円弧を描くことは可能ですが、制御点が増えるということは曲線の軌道の計算量と制御点の作成コストが増えるばかりで望ましくありません。

f:id:tolt:20200606013309p:plain
制御点を15個にした例

そこで、前回の最後に名前だけ登場した、B-スプライン曲線を拡張した形であるNURBS曲線を利用します。

続きを読む

B-スプライン曲線でへにょりレーザーを実装する

目次

  • 目次
  • はじめに
  • B-スプライン曲線
  • ノットベクトル
  • 開一様ノットベクトル
  • 実装
  • 実際の動き
  • 課題
  • おわりに
  • 続きの記事(NURBS曲線)
  • 参考資料

はじめに

東方Projectシリーズには、「へにょりレーザー」と呼ばれるレーザーがあります。 魅力的な模様を描きながら読みづらい軌道で飛んできて、残機を刈り取っていくレーザーです。 このへにょりレーザー、ずっと三角関数でアレコレしているんだと思ってましたが、どうやらスプライン曲線のようです。

確かにスプライン曲線ならあれこれ難しい処理を作らなくてもへにょりレーザーの軌道が表現できる!すごい!というわけでへにょりレーザーをスプライン曲線で実装します。

続きを読む

Pythonの勉強でWebアプリを作る話

Pythonの勉強をしようと思い、FlaskでTwitter上の漫画を見やすくするアプリケーションを開発しました。

twMangaView

こんな感じで動きます。

続きを読む