keitairc

morimoto@xantia.citroen.org
$Id: index.html,v 1.11 2004-06-06 13:33:23 morimoto Exp $

説明

i-mode などのブラウザフォンから irc をするもの。 plum などの pirc (irc プロキシ) に接続して使われることを想定しています。

動作環境

Perl 5.6 (かな?) と、以下に示す Perl ライブラリが動作するホスト。
すでに plum などの pirc を使っているユーザの利用を推奨します。

インストール

  1. 必要なライブラリをインストールします。 Debian GNU/Linux 3.0 `woody' 以降なら apt-get install libjcode-pm-perl libpoe-component-irc-perl liburi-perl libwww-perl libappconfig-perl
    ほかの OS なら、適宜それと同じものを適宜インストール。
  2. keitairc をどっかに置く。
  3. dot.keitairc を設定して ~/.keitairc として置く。

.keitairc の設定

以下に、keitairc の設定ファイルの例を示します。 irc.example.com という irc server に、port 6667, パスワード javel で 接続し、その様子を、keitairc 動作ホストの port 1234, つまり http://そのホスト:1234/ に接続して見たり書いたりできるようにします。 携帯端末などから http://そのホスト:1234/ に接続する際に、 ユーザID「andre」、パスワード「2055」でアクセス認証します。

# sample ~/.keitairc

################################################################
# irc connection
################################################################

# nick を指定 (plum 経由のときは意味ないので適当でいい)
irc_nick = adr

# username を指定 (plum 経由のときは意味ないから適当でいい)
irc_username = andre

# フルネームを指定 (plum 経由のときは意味ないから適当でいい)
irc_desc = Andre Limmoenman

# irc server, port and password (if any)
irc_server = irc.example.com
irc_port = 6667
irc_password = javel


################################################################
# web (i-mode) connection
################################################################

# listening port
web_port = 1234

# page title
web_title = keitairc

# チャネルごとに、この行数まで記憶
web_lines = 20

# アクセス認証. ここを省略してしまうと
# パスワード認証しないので、接続は簡単ですが、URL がばれてしまうと
# 誰でも読めますし、誰でもあなたに成りすまして発言できます。
web_username = andre
web_password = 2055

# 発言後 未読メッセージのみを表示するか 全発言を表示するか?
# ディフォルトは全発言表示
# show_newmsgonly = yes

# もし J-Phone などの http port を指定できない端末で、port 80 を
# 占有せず keitairc を使いたいなら、たとえば keitairc を port 8765 で
# 立ちあげ、apache の httpd.conf の
#   ProxyPass /irc/ http://your.host.com:8765/
# とし、
#   http://your.host.com/irc/
# に対して接続する手があります。この場合、keitairc の見かけ上の
# トップディレクトリは /irc/ になりますので、これを指定します。
# web_root = /irc/

このファイルを /etc/keitairc として設置すれば、そのサーバで稼働する keitairc 全体に対する設定になります。
また、これらの設定は keitairc 起動時のオプション引数としても 指定可能です。(例: -web_port 5678)
/etc/keitairc よりも ~/.keitairc の設定内容が優先されます。
~/.keitairc の設定内容よりも起動時オプションの設定内容が優先されます。

使い方

keitairc を起動して携帯からアクセスすると、 いま参加している全てのチャネルのリストが出ます。 発言内容が新しいチャネルから順に並びます。 チャネルのリストは電話機の 0 を押すと更新できます。

チャネルをクリックするとそのチャネルの発言内容を読めます。 前に keitairc で見たときよりも新しい発言がたまっているチャネル、 つまり未読内容のあるチャネルには名前の後ろに未読行数がつきます。 未読行数をクリックすると、未読部分だけを読むことができます。 未読部分だけを読んでいて、既読部分も見たい場合は、...more[5] をクリックすると既読部分も見ることができます。

チャネルの発言内容を読んでいて、 発言したい場合はページのてっぺんにあるテキストエリアに記入し、 OK ボタンを押します。 OK ボタンのかわりに端末の 1 でもかまいません。

何も書かないで OK または 1 を押すと画面更新になります。

電話機の 7 を押すとページ先頭へ、 電話機の 8 を押すとチャネルのリストへ、 電話機の 9 を押すとページ末尾に飛びます。

開発

Changes

1.19
チャネルリストの発言数表示がおかしいことがあった
foo@bar 形式を mailto リンクにしないようにした
https:// 形式もリンクに
誰かが channel から抜けたときのメッセージを書式変更
誰かが channel に join してきたときにメッセージを追加
1.18
jis のチャネル名を uri escape して引数に渡すと WAP ゲートウェイが 勝手に unescape してしまい、xhtml 端末でチャネル名の受け渡しがおか しくなるので、いちいち uri_unescape() したものを uri_escape() する ように変更(ISHIKAWA)
1.17
発言後のディフォルトの挙動をオリジナルの全発言表示に戻す。 未読のみの表示にしたい時は .keitairc に show_newmsgonly を設定 してください(ISHIKAWA)
1.16
相対パスでのリンクがxhtml端末でうまく機能しないの 絶対パスに変更 (ISHIKAWA)
1.15
xhtml端末でのキャッシュ抑制 (ISHIKAWA)
1.14
</head>が抜けていたとこがあったので挿入 (ISHIKAWA)
1.13
細かい修正
1.12
他のユーザが channel を part したときに keitairc のチャネルリストから そのチャネルが消えてしまう件を修正。どのユーザが抜けたかも表示。 (thanks to Ichiro FUKUHARA <ichiro at ichiro.org>)
1.11
未読行数を示すリンクを新設(未読のみを読むことができる。 (未読のみのページからアクセスキー [5] ですべてを表示) (thanks to Ichiro FUKUHARA <ichiro at ichiro.org>)
1.9
未読行数を表示。まだ発言のないチャネルに対しても発言可能に (thanks to Ichiro FUKUHARA <ichiro at ichiro.org>)
1.8
10個め以降のチャネルへのリンクがおかしかった
(thanks to Akira Tagoh)
1.7
</head>を出力するのを忘れていました (thanks to ishikawa[@]netvillage.co.jp)
1.6
チャネルを見ている状態のページタイトルがおかしかった
ソース文字列を jis に決めうちして文字化け減少
ProxyPass 用に web_root オプション追加
i-mode 絵文字は使わないことにした
1.5
keitairc からの発言内容が自分からは (keitairc からは) 文字化けしてみえることがあったのを修正
1.4
join していたチャネルを part したときに プログラムが停止してしまっていたのを修正
発言内容が新しいチャネルからリストアップするよう修正
1.3
半角スペースが+に変換されていたのを修正
1.1
公開

FAQ

keitairc 単体で irc server に直接つないでも使えるよう 機能を増やしてください
それはおそらく私はしません。相手がパケット代のかかる携帯端末なので、 機能は最小限にしたいのです。
また、まともに irc をつかう人なら plum などの pirc は必ず使っていることでしょう。
また、keitairc をいくら拡張したとしてもフルスペックな irc クライアント 同等には決してならないですし、そういう irc クライアント「だけ」で irc サーバにつないで勝負するのは、コミュニケーションミスを併発する だけなんじゃないかと思います。
J-Phone で使える?
工夫すれば使えます。
J-Phone は http://host:port/ 書式がつかえません。つまり URL で http port を 指定することができません。http は port 80 に対するアクセスしかできません。 かといって、あるホストの port 80 を keitairc のために空けておく、 つまり keitairc 専用にホストを1台使うのももったいないでしょう。 apache の mod_proxy を使って、host:port を apache が管理している port 80 で提供されているところの web コンテンツツリーのどっかに位置するように見せかけるといいでしょう。 この場合は web_root オプションも利用してください。上記の設定サンプルを 参考にしてください。
EZweb で使える?
最近の xhtml 対応端末なら使えます。
他に使える端末は?
AirH" PHONE (AH-J3001V/AH-J3002V/AH-K3001V)でも動作しました。 あとは確認してません。
新規チャネルに join できません
keitairc には新規チャネルに join する機能はありません。
plum につないで使っていますが、「自分」の発言が keitairc に出てきません。
いま keitairc が接続しているのと同じ plum の port に接続している 他の irc クライアント (つまり、さらに別の自分) から発言すると、 POE::Component::IRC (というか POE::Filter::IRC) ではこれを拾えない ようです。
plum は irc command を小文字 (lower case) で出力しているようで、 これもトラブルの原因のようです。RFC では irc command は upper case で規定されているようなのですが (まだちゃんと調べてない)。 どっちかというと plum が悪いような気がするんですが、 とりあえず回避策としては POE/Filter/IRC.pm で irc command line を parse している部分を case insensitive にして逃げる手があります。 (ほかにも POE/Filter/IRC.pm が regexp match に失敗して へんなイベントを投げてくることがあるので、 ほかの同様の部分もそうしておいたほうがいいような気がする)
--- /usr/share/perl5/POE/Filter/IRC.pm.org	2003-05-09 18:24:31.000000000 +0900
+++ /usr/share/perl5/POE/Filter/IRC.pm	2003-05-08 22:03:33.000000000 +0900
@@ -44,7 +44,7 @@
       push @$events, { name => 'ping', args => [$1] };
 
       # PRIVMSG and NOTICE
-    } elsif ($line =~ /^:(\S+) +(PRIVMSG|NOTICE) +(\S+) +(.+)$/) {
+    } elsif ($line =~ /^:(\S+) +(PRIVMSG|NOTICE) +(\S+) +(.+)$/i) {
       if ($2 eq 'NOTICE') {
 	push @$events, { name => 'notice',
 			 args => [$1, [split /,/, $3], _decolon( $4 )] };
なんで Ruby で書かないの
ちょっと POE も、おもしろいから。

Copyright

Copyright (c) 2003,2004 Jun Morimoto <morimoto@xantia.citroen.org>
This program is covered by the GNU General Public License 2 SourceForge.jp