困ったときには(FAQ)

ダイスボットが特定のチャンネルで巧く動きません

 国内のIRCでは、伝統的にiso-2022-jp(いわゆるJISコード)が採用されています。
 ところが実はIRCでは、多バイトコードについての規定がありません。
 国内でもUTF-8を使っている所もありますし、海外に至ってはシフトJISの所もあるそうな。
 そんな訳で、IRCで特別な意味がある文字(「,」とか「:」)と同じ文字コードが含まれている全角文字はIRCサーバーの方で誤解してしまう原因になる訳です。
 多くの国内サーバは、そんな日本語特有の不具合を回避するパッチをあてて対処しているようです。

 さて、実は現状私のダイスボットに使われている「NET-IRC」というモジュールは古くからあるIRCモジュールの一つです。
 このモジュールはIRCの規格通りに動こうとするのです。
 従って「:」や「,」の含まれる全角文字を使ってチャンネルを作ると、そのチャンネルでは上手く動作しません。
 とはいっても、そんな文字判らないよ!という方が普通だと思います。

 正直、私も判りません(笑

 ネットを調べると、ちゃんとそういう問題について調べている方がいるものです。
 チャンネル名に使用できる文字の制限

 書かれた時期が少々古いですが、国内サーバでも全て対処されたと限らない様子ですね。
 いずれにせよ、ユーザの賢い対応策としてサーバにとって紛らわしい文字はチャンネル名に使うのを避けるというのが間違いないと思います。
 いずれほとんどのサーバが対応する(もしくは現状している)のは確実と思われますので、ダイスボットの対応も考えていこうとは思っています。

| | コメント (0) | トラックバック (0)

Perlを勉強するのに、どんな本を読んだらいいですか?

 実際に聞かれたので、ちょっと書いておきます。

 色々良書はあるのですが、とりあえず一冊あげろと言われて私が思い浮かぶ本は初めてのPerl(通称 リャマ本)です。
 文章が平易で読みやすく、プログラム言語としてよく使われる機能優先に説明されています。(CGI向け解説本は、当然CGI向けの機能中心です)
 私が公開しているプログラムの中に出てくるものは一通り出てくると思います。
 この本で食い足りなかったら「ラクダ本」なり「続」へ進んで、これが難しかったらさらに入門向きの本を探すと良いでしょう。
 大体概要が掴めたら、ネット上の解説サイトをあさってみるのも悪くありません。

 私が「え~っと、アレってどう書くんだったっけ?」なんて時に真っ先に取り出す本は、今でもコレだったりします。
 どっちにしても無駄にならない本だと思います。

| | コメント (4) | トラックバック (0)

ツールのライセンスは何ですか?

 修正BSDライセンスにしています。(MITライセンスでもほぼ同じなんですよね)

 完全無保証な代わりに、改造や利用が無制限です。(商業利用含みます)
 不具合報告の他に、利用報告や改造報告などもお待ちしています。
 かなり励みになるものなのです。

 特に制約は無いのですが、私の作ったツールを利用してプレイする場合にはプレイするゲームのルールブックは所有しているのが望ましいです。
 基本的に私のツールは自分の好きなゲームに対応しているので、ツールがあるからといってルールブックが不要にはなりにくいように考えているつもりです。
 好きなゲームが先細りになっていくのは、誰でも悲しいですしね。

| | コメント (2) | トラックバック (0)

質問・バグ報告・改造報告などはどこにしたら良いでしょう?

 該当エントリのコメントやトラックバック、もしくはメールでお願いします。

 改造報告は、長くなるでしょうからコメントは避けた方が良いでしょう。
 私から本体に移植する許可を頂き、正式対応とする場合があります。

 どこに付けたら良いかさっぱり判らない場合は、このエントリに付けるのが良いかと思われます。
 なお、当ブログならびに私の作成したツールに無関係なコメントやトラックバックは削除する事がありますのでご了承ください。

| | コメント (0) | トラックバック (0)

未対応のゲームに対応して欲しいのですが……

 要望があれば対応することがあります。

 ただし、私が所有しているルールブックの場合は問題ないのですが、未所持の場合は要望について詳細に教えて貰わないと実装できない場合があります。
 持ってる場合でも現場の意見は重要なので、実際の処理について聞くこともあります。
 その場合でも実装する保証はありません……が努力はします(笑
 コメント、トラックバック、メールなどでお願いします。

--

 と書いておいて必要そうなルール詳細のテンプレートを書き忘れてました(笑


Q1.判定に関する質問
Q1-1.判定に使うダイスは何ですか?またダイス目の読み方が特殊なら教えてください。
Q1-2.また目標値以下で成功と以上で成功のどちらですか?対抗判定はどうなっていますか?
Q1-3.クリティカルのルールを教えてください。
Q1-4.ファンブルのルールを教えてください。
Q1-5.クリティカルとファンブル以外に成功段階、もしくは失敗段階があれば教えてください。
Q1-6.目標値と出た目の差が重要なルールがあれば教えてください。
Q1-7.他に特殊なルールがあれば教えてください。

Q2.加算ロール(おもにダメージ)に関する質問
Q2-1.ダイス目の読み方が特殊なら教えてください。
Q2-2.加算ロールでクリティカルがありますか?
Q2-3.加算ロールでファンブルがありますか?
Q2-4.その他、特殊なルールがあれば教えてください。


 大体こんな感じで良いと思います。

(2009/02/24追記)

| | コメント (0) | トラックバック (0)

モジュールが見つからないときの確認チャート

 あれ?インストールしたいモジュールが見つからない!
 そんなときのステップ・バイ・ステップ確認チャート?を書いてみました。(Thanks タイガさん)


1.ActivePerlをお使いですか?
 Yes -> 2.へ
 No -> CPANを使いましょう。詳しくは....え~と「CPAN」で検索してみてください!(オイ

2.PPMを起動してみるとPPMウィンドウ下の「Status」に「Synchronizing Database done」と表示が出ますか?
 Yes -> 3.へ
 No -> PPMがネットワークにつながっていません。ファイアウォールやアンチウイルスソフトの設定を確認してPPMの通信を許可してあげてください。

3.PPMのアイコンメニューで「灰色の箱」をクリックしてください。[CTRL]と[1]のキー同時押しでもOK。
 モジュールがズラズラと沢山出てきますか?
 Yes -> 4.へ
 No -> PPMが通信出来ていないか、指定されたレポジトリが古いか間違っている可能性があります。ActivePerlを最新版にするのをオススメします。

4.虫眼鏡のサーチボックスにモジュールパッケージ名を入力してみてください。(途中まででOK)
 目的のモジュールは表示されましたか?
 Yes -> You Win !インストールしましょう。
 No -> 入力が半角英数になっているか確認しましょう。全角文字と区別しにくい文字が混じっている場合が要チェックです。またモジュールパッケージは接続文字が「:」ではなく「-」です。


 さて、これでアウトだった場合はコメントで質問してみてください。答えられるかもしれません。
 そのときは、「どんなモジュール」を入れようとして、「どこまでOK」で「どこでNG」だったか。
 そして、NGの時に「どんなメッセージが表示されたか」が書いてあるとより答えやすくなります。(というか、それらがないと原因が判りませんw)

| | コメント (0) | トラックバック (0)

なんとまぁ

 ゆきだるまさん お悩み中。

 利用したい人が困っていると、何とかならないかと思ってしまうのが作ってる人間の人情というもので(笑

 どうもチャンネル名の文字コードがiso-2022-jpチャンネル内の会話の文字コードがUTF-8という変則的なサーバがあるのかもしれないという話です。

# 上記はActivePerl5.10において、encodingの挙動が変化したものによるようです。
# 当時はソースがShift-Jisでしたが、現在はソースをUTF-8で記述することで回避しています。
# (2008/10/05追記)

 もっとも、LimeChat2のサーバ設定で文字コードがiso-2022-jpというのですから、LimeChat2で会話の文字コード自動判別でもしてない限り、UTF-8で会話したら文字化けするんじゃないかと思うのですが、なんでそんな変則的な運用してるんでしょうね?
 チャンネルリスト取るときに問題があるのかな?

 いろいろ疑問がありますが、問題がはっきりしないと解決は難しいでしょう。
 そこで、テスト用にチャンネル名と会話の文字コードを別々に指定出来るVerを書いてみました。

 私のテスト環境では、-iオプションと-rオプションで設定を変えて実験してみた所

1.ボットのチャンネル名はiso-2022-jp
2.ボットの会話がUTF-8
3.LimeChat2.28でサーバの文字コード設定をUTF-8

にして繋ぐと、上手く動作しませんでした。
 Inviteしようとすると文字化けしてボットが訳のわからない部屋に入ってしまいます。
 3つ全てUTF-8だと問題なく動作しました。

 同様に

1.ボットのチャンネル名はiso-2022-jp
2.ボットの会話がUTF-8
3.LimeChat2.28でサーバの文字コード設定をiso-2022-jp

 にすると、Inviteは出来ますが、ボットのコンソールを見ると会話が文字化けして見えているのが判ります。

 変なのは

1.ボットのチャンネル名はUTF-8
2.ボットの会話がiso-2022-jp
3.LimeChat2.28でサーバの文字コード設定をiso-2022-jp

 にするとボットのコンソール上で部屋名が化けてるのに何故かInvite出来てしまいます。
 サーバの設定(や実装)に依存するのかなぁ。

 あくまで試験用ですが、こんな感じで設定を変えて問題点を見つけだすのには使えるかも知れません。

「SR4用ダイスボットv1.2 test用」をダウンロード

 本来ならLimeChat2のサーバ設定で文字コードがiso-2022-jpなら、ボットのIRC用文字コードも全てiso-2022-jpで揃えれば上手く動くと思うんですけどね~。

| | コメント (0) | トラックバック (0)

PPM(GUI)からのモジュールのインストール方法について

 どうもここ数日、PPMからのモジュールインストール方法が良く判らない人が見に来ておられるようです。
 WindowsのActivePerlではPPM(Perl Package Manager)というGUIツールがあって、これを利用すると簡単にモジュールがインストール出来ます。
 Readmeにも書いてあるのですが、私のツールに興味がないけどインストールで困ってる人に「ダウンロードして読め」とは言いにくいので、ちょっと書いておきます。

---

1. PPMを起動しよう

 スタート > すべてのプログラム > Active Perl xxx build xxx > Perl Package Manager と辿ってPPMを起動します。
 PPMはネット上からレポジトリ(モジュール情報)のデータベースと通信しますので、ネットワークへのアクセスを許可してあげてください。
 下のStatusタブでSynchronizing Databaseと出るのは、データベースの最新情報にアップデートしてますよという意味です。
 これがDoneになればアップデート完了ですので、しばらく待ってあげてください。

 アップデートが完了したら、次はモジュールを探しましょう。

2.モジュールを探そう

 英語で「File」「Edit」...などと並んでいるメニューの下にアイコンがあると思います。
 このアイコンは左から

グレーの箱 -> 全てのモジュールパッケージ
・黄色い箱 -> インストール済みのモジュールパッケージ
・黄色い箱に緑の★マーク -> インストール済みで、もっと新しいモジュールパッケージがみつかったもの
・黄色い箱に緑の「→」 -> アクションに予約されているモジュール一覧(後で出てきます)

 となっています。
 今は、インストールされていないモジュールをインストールしますので、グレーの箱のアイコンをクリックします。 [CTRL]キーを押しながら[1]のキー押してもOKです。

 すると、ずらずら~っとモジュールパッケージのリストが並ぶと思います。
 これを一つ一つ探すのは大変です。

 アイコンが並んでいる真ん中あたりに虫眼鏡アイコンのあるテキストボックスがありますね?
 これは、検索用入力なのです。

 ここにインストールしたいモジュールパッケージの名前(一部でもOK)を入力しましょう。
 検索するときは大文字と小文字の区別はされませんがすべて半角で入力する必要があります。
 また、Perlのプログラムの中ではモジュールは「Net::IRC」などと「:(コロン)」で区切って書きますが、モジュールパッケージ名は「Net-IRC」のように「-(ハイフン,半角のマイナス)」で区切るので注意が必要です。
 入力途中でどんどん検索されていきますので「net-ir」あたりまで打てば、「Net-IRC」がすぐ見つかると思います。
 もちろん全部書いてしまってもOKです。

 うまく見つかりましたか?

3.モジュールを予約しよう

 見つかったら、モジュールパッケージをクリックしておいてから「Action」メニューをクリックすると「Install モジュ-ルパッケージ名 +」と出てきますね?
 これはアクションにモジュールパッケージのインストールを予約しますよという意味です。
 クリックして予約に追加してしまいましょう。
 他にもインストールしたいモジュールパッケージがあれば、どんどん同じように検索して、Actionメニューで予約してください。
 上手く予約できたかは、黄色い箱に緑の「→」がついているアイコンをクリックすると判ります。
 インストールするか、アンインストールするモジュールパッケージの予約一覧が表示されます。

4.インストール開始

 インストールしたいモジュールパッケージが全て予約出来たら、早速インストールを実行しましょう。
 「File」メニューに「Run Marked Actions」とあるはずです。
 これがグレーになっていると、アクションの予約が上手くいっていません。もう一度モジュールを探して予約してください。
 予約が上手くいっていたら、Run Marked Actionsを実行してください。
 あとはモジュールパッケージを次々とダウンロードしてインストールしてくれるはずです。
 マニュアル類を展開したりしていますので、ちょっと時間がかかります。

 モジュールパッケージをインストールしたら、概ねすぐ使えますがOSによっては再起動が必要な場合もあります。
 インストールしたのに上手く動かないときは、OSの再起動を行ってみてください。

---

 という訳で、文章で説明するとちょっとくどいですが、実際に見ればすぐ判ると思います。

| | コメント (0) | トラックバック (0)

コマンドラインでのモジュールのインストール方法について

 とある知人からコマンドラインのPPMからのモジュールインストール法を聞かれました。
 PPMがGUI化して久しいので、珍しいなと思いましたが防備録代わりに書いておきます。

---

 スタートメニュー → すべてのプログラム → アクセサリ から、コマンドプロンプトを起動して「PPM」と入力しましょう。
 立ち上がったらまずはNET::IRCモジュールをインストールします。
 まずは「s NET-IRC」でレポジトリを探します。
 見つかったら番号で表示されるのでバージョンを見て「install (番号)」です。
 括弧()は入れないでください。

 お次はMath::Random::MTです。
 これはメルセンヌ・ツイスターという乱数モジュールで、より自然に近い乱数が使えるようになる物です。
 「s Math-Random-MT」で検索したら、「install (番号)」で同じようにインストールしてください。

---

 さほど難しい話では無いと思いますが、参考になれば幸いです。

| | コメント (0) | トラックバック (0)

IRCの文字コード

 実はとある友人の募集をみてビックリ。チャンネル名に半角カナが混じってるじゃありませんか。

 日本でのIRCの文字コードは伝統的にiso-2022-jp(いわゆるJISコード)が採用されていますが、こいつには半角カナが割り付けられて無いのです。当然半角カナは使えません
 不正な文字を受け取った場合、どういう動作をするかは受け取るソフト任せです。
 フールプルーフなソフトなら全角に自動変換したり、半角カナだけ別の文字コード扱いしたりと上手いこと対応してくれるのでしょうが、そうでないソフトもあります。
 従って、IRCで半角カナを発言したり、半角カナのチャンネル名を作るのは文字化けなどの原因になるためやっちゃいけない訳です。
 もちろん私のダイスボットもiso-2022-jpで半角カナを受け取ると内部で文字化けしてます(笑

 実を言うと私は半角カナが大嫌いです。
 電子メールの普及でようやく根絶かと安心したら、見事携帯のお陰で返り咲き。
 まったく迷惑な話です。私だけかもしれないけど(笑

 さて、最近国内IRC事情も国際化したのかハングルや中国語が読めないと不便な事になってきた様子です。
 そのため、「UTF-8」を使うサーバ(やチャンネル)もポツポツと現れたようですね。
 もともとIRCの規格では、送受信する文字コードが「8ビットオクテットを使う」ということしか決まっていませんので、文字コードの問題は付いて回りそうです。

 とりあえず私が一番困るのはオンセ用のボットの送受信が文字化けする事なので、先にボット側の対応を行っておきました。
 「文字コードの識別文字列って何?」ってな方も多分居るでしょうが、当分必要のないオプションですし、「iso-2022-jp」と「utf-8」以外が必要な方は、自分で調べた方が早い気がします。
 なんせPerlで扱える文字コードは結構多いのだ(笑

| | コメント (0) | トラックバック (0)