チャット機能(ファーストネームは恥ずかしい)

チャット機能(ファーストネームは恥ずかしい)

- Tatsuya Shirai の投稿
返信数: 7

 一仕事終わったので,先日から気になっていた点について試してみました.

 チャットです.

 サーバに負担が掛かるとも聞いていたのですが,チャット自体の有用性は無視できないので久しぶりに試してみました.気のせいか,以前と比べてインタフェースがオシャレになったような気がしますね(気のせい?).

 何が気になっていたのかと言うと,メッセージを入力して,それが出力されるときに,発言者の名前として”firstname"が表示される点です...普段から,"Steve"とか"John"とファーストネームで呼び合っているのなら良いのですが,突然,”達也”と表示されると戸惑います...学生とチャットをしても,右端のオンラインユーザの一覧を見ながら,「ええと,太郎は山田のことだな」と変換しないといけない.
(もちろん,日本人の国際感覚を養うのであれば,これで良いのかも知れませんが赤面

 mod/chat/lib.phpのfunction chat_format_message_manually(),660行あたり.

    } else if (substr($text, 0, 1) == '/') {     /// It's a user command
        if (trim(substr($text, 0, 4)) == '/me') {
            $special = true;
            $outinfo = $message->strtime;
//          $outmain = $sender->firstname.' '.substr($text, 4);
            $outmain = $sender->lastname.' '.$sender->firstname.' '.substr($text, 4);
        }
    }

    if(!$special) {
//      $outinfo = $message->strtime.' '.$sender->firstname;
        $outinfo = $message->strtime.' '.$sender->lastname.' '.$sender->firstname;
        $outmain = $text;
    }

これでフルネームで名前が表示されます.メッセージの頭に'/me'を付ける御利益がいまひとつ良く分からないのですが,一応,上の方の修正箇所はそのためのものです.

 firstnameかlastnameか(上記修正ではフルネームです)は言語パッケージによって判断すべきかも知れません.

 あるいは,チャット用のニックネームを利用できるようにしても良いのかも知れません.これは簡単では無さそうなので諦めましたが,実は意外と簡単?(データベースに登録するのではなく,入室時に入力可能とするならば)

添付 Chat_NameFormat.jpg
Tatsuya Shirai への返信

Re: チャット機能(ファーストネームは恥ずかしい)

- Haruhiko Okumura の投稿
チャットだけでなく,いくつかの場面でこういうことが起こります。
で,三重大版Moodleは,全部を書き換える代わりに,firstnameに姓を,lastnameに名を入れたのです。中国語版も簡体か繁体か忘れましたが同じアイデアを使っています。

あと,三重大版はオリジナルにない「さん」を言語ファイルに入れて,日本語のときだけ「さん」が入るようにしたところがいくつかあります。

Haruhiko Okumura への返信

Re: チャット機能(ファーストネームは恥ずかしい)

- Tatsuya Shirai の投稿

 いやはや同感です.評価のダウンロードでも入れ替えないとかなり気持ち悪いですしね.(でも,せっかく言語パックで対応できるようになっているのだから本家もそれに合わせてくれるといいのに)

 ちなみに韓国の方はファーストネームを重用するのでしょうか?
 以前に会社にいたときに韓国の人と仕事をしたのですが,キムさんが沢山居て.でも不思議と混乱はしなかったような気もします.「ああ,あっちのキムさんか」と話の流れで分かるからかな?

Tatsuya Shirai への返信

Re: チャット機能(ファーストネームは恥ずかしい)

- Tatsuya Shirai の投稿

 チャットルームに入室する際に,ラジオボタンで”姓”,”名”,”姓名”,”ニックネーム”を選べると面白いかな? 右端の入室しているユーザーの一覧は写真つきで実名(+ニックネーム)で表示すれば,”他人のフリ”はできませんし.
 ニックネーム,いいな.個性が出るので.

#先生だけ名前を太文字,ということも考えましたが,ちょっと悪趣味ですよねウインク

Tatsuya Shirai への返信

Re: チャット機能(ファーストネームは恥ずかしい)

- Tatsuya Shirai の投稿

 チャットで名前の代わりにハンドルネームを使用可能とすることを考えて,ちょっと調査をしてみました.

 チャットルームに入室している全員のハンドルネームをサーバが把握している必要があります.例えば入室の際にハンドルネームを入力して貰って,それをPHPの引数で受け渡す(?や&などで)方法や$_SESSIONでは,サーバにアクセスしているクライアント各人の情報しかサーバは知ることが出来ない.
 となると,moodledata/tempあたりにchatフォルダを作成して,テキストファイルで保存するか,あるいはチャットのセッション毎にデータベースに入室した全員のハンドルネームを保存し,不要になったら削除する必要がある.この方向性はちょっと技術的に大げさ過ぎますよね.


 次に考えたのは,ユーザプロファイルの情報を利用する方法.チャットのメッセージを送出する際に各ユーザのユーザIDから氏名の情報を得て,それを表示しているのだから,$userのメンバを利用して表示すれば良いのではないか.

  1. 基本的なユーザプロファイル
    例えばYahoo! IDなどの項目をハンドル名に読み替える.これが一番実現は簡単なのですが,もし本当にYahoo! IDを入力している人がいた場合,チャットルームに入室すると,ハンドル名としてYahoo! IDが出力されてしまう.
  2. ユーザプロファイルフィールド
    ”その他のカテゴリ”である追加のフィールにハンドルネームというテキストの項目を追加して見ました.多分,この実現方法が一番自然だとは思います.

いま2の方法でチャットのハンドルネームの実装を試験中です.ただ,1の基本的なユーザプロファイルはあちこちで利用されるので簡単に読み出し可能なのですが,ユーザプロファイルフィールドはわざわざ読み出す手間があります.(多分,ユーザプロファイルの表示,でしか利用されていない?) チャットルームに入室したタイミングなどで基本的なユーザプロファイルに追加するなどすれば良いと思うのですが,チャットのメッセージを全チャットルーム入室者に送出する際に毎回データベースから読み出すと,かなりサーバの負担になりますよね.

$user変数を読み出す関数に,ユーザプロファイルフィールドのうち,ハンドルネーム(ショート名でhandlenameなど)を追加する機能を組み込むことも考えていますが,そうするとチャット利用時以外もデータベースへの余計なアクセスが増えてしまいますから,どのタイミングで読み出すのかをもう少し解析する必要がありそうです.

 もし既にチャットでハンドルネームの利用を可能とする改良を行っている方が居ましたら情報をよろしくお願いします.それともチャットは使わない(使わせない)というサイトが大半でしょうか?

P.S. うちの学生に聞いたところ,”ボイスチャット”の方が好きだそうです.テキストのチャットだと”微妙なニュアンス”を伝えにくい,会話のテンポが遅くなる,キーボードの入力が遅い人が会話についていけない,という理由だそうです.うーむ,時代が変わった? 古いタイプのネットワーカーの単なる拘りでしょうか.

Tatsuya Shirai への返信

Re: チャット機能(ファーストネームは恥ずかしい)

- Haruhiko Okumura の投稿
family nameとgiven nameのどちらを先に出すかだけでなく,どちらかで呼ぶ場合どちらを使うかということも考えなければならず,他の国の人が対応するのは難しそうです。

幸い,日本(おそらく中国や韓国も)は姓-名の順で,どちらかで呼ぶ際には姓を呼ぶということになっているので,姓=firstname,名=lastnameですべての問題が解決するようです(そもそもfirstが先,lastが後なのはどの国語でも同じ気がしますが,firstがgiven nameである国とsurnameである国があるということでしょうか。日本ではfirst nameがlastに来るというと形容矛盾のように思われそうです)。
Haruhiko Okumura への返信

チャットでハンドルネーム

- Tatsuya Shirai の投稿

 技術的に比較的簡単に実現可能であることが分かりました.

 まずチャットに参加しているメンバのユーザIDと氏名のデータのキャッシュですが,mod/chat/lib/php内のfunction chat_format_message()内で,static宣言された$usersという変数があり,この変数にキャッシングしています.したがって,このキャッシュにユーザIDと結び付けられたユーザの顔写真や氏名のデータと一緒に,ハンドルネーム(登録されているならば)を登録してしまえば,2度目以降はデータベースを検索しないで済みます.

 あとはチャット時の名前を出力する箇所を関数化し,設定に従って,

//  $fsCFG->chatName = 1;       // firstname (名)
//  $fsCFG->chatName = 2;       // lastname (姓)
//  $fsCFG->chatName = 3;       // fullname (姓名)
//  $fsCFG->chatName = 4;       // ハンドルネームかfirstname
//  $fsCFG->chatName = 5;       // ハンドルネームかlastname
    $fsCFG->chatName = 6;       // ハンドルネームかfullname

の6種類を選べるようにしてみました.現状はこのようにサイト全体に有効な設定ですので,チャットモジュールのインスタンス毎とか,コース毎とか,ユーザ毎とか,チャットルームに入室する毎,に選択することは出来ません.

 ハンドルネームはユーザプロファイルに新たにショートネームhandlenameで項目を追加してあれば,それをデータベースから読み出して設定します.変数の設定が1から3の場合はハンドルネームが設定されていても無視.4から6の場合はハンドルネームが設定されていればそれを出力します.フルネームに関しては,lib/moodlelib.php内のfunction fullname()を用います.

 もう少し試用して見て仕様に変更を加える点がないと判断しましたら,パッチを公開します.

添付 handlename.jpg
Tatsuya Shirai への返信

チャットの機能について知りたいこと&要求したいこと

- Tatsuya Shirai の投稿

 ハンドルネームを付ける機能は,昨日公開したfs_moodle2.7に試験的に組み込みました.

 さて,前からチャットを試用するたびに気になっていた点について質問します.私の勘違いである可能性も高いので,その場合は遠慮なく御指摘ください.

  1. 退室方法
    入室はともかくとして,チャットから”気持ちよく”抜ける方法が分かりません.ウィンドウをクローズ(×ボタンをクリック)するのはとても野蛮ですよね.何か他に退室する方法があるのでしょうか.アイドル時間が一定時間を過ぎると自動的に退室するような感じはするのですが,明示的に「抜ける」ことができないと,他の参加者は私が抜けたことに気付かずに話しかけてきてしまうのではないかと思うと気になります.
     とはいえ「じゃあ,そろそろ抜けます」と発言して話の流れを妨害するのも気が引けますし,ウィンドウをクローズする際に間違えて元のMoodleのウィンドウを閉じてしまった時はガックリします.
     先日気付いたchat.phpのtypoのメッセージに,”通常の退室”という文言がありましたので,タイムアウト以外に退室する手段があると思うのですが,まだ探し出せていません.
  2. ログの保存方法
    ”過去のチャットセッションを表示”というリンクはありますが,これで過去のチャットが表示されたことがありません.”次回のチャッとタイム”を設定するとその時間からのチャットセッションはデータベースに記録される,という限定的なものなのでしょうか?
     Webブラウザ上に表示されたログを全選択してテキストエディタに貼る,という方法でログを残すのも不安です.F5(ブラウザの更新)を押してしまうと過去のチャットのログは消えてしまいますし.

 もし,退出する方法が無いのであれば「退出」ボタンを,もしチャットタイム以外のチャットのログを保存する機能が無いのであれば保存する選択肢を,さらにチャットの全ログをダウンロード(HTML形式/テキスト形式)できる機能があっても良いでしょう.
 チャットのログをmoodledataの各コースのmodフォルダ内に保存するようにするのも一つの選択肢かと思いますね.