XMessenger

XMessenger

☆しゃべる!はねる!消える! ― Mac OS X ならではの機能を満載!

☆ウィンドウが散らばらない、邪魔にならない。

☆独自UIによる IPMessenger 互換メッセンジャーアプリ

概要

XMessenger は、H.Shirouzu(白水啓章)さんが作成した、 IPMessenger と互換性のあるメッセンジャーアプリケーションです。 IPMessengerで用いられているプロトコルの主要な部分を実装していますので、 通常の使用においては問題なく、 LAN内の「IPMessengerの輪」に参加することができるはずです。

XMessenger をベータバージョンとして公開します。 ソースはもちろん、 開発Projectもまるごと公開しますので、 Project Builder or Xcode を持っている方なら、 そのままビルドが可能なはずです。 一応、ビルド後の XMessenger.appも同梱していますので、 開発環境を持たない方はこれを使ってみてください。

ただし、XMessenger は IPMessenger クローン・アプリケーションではありませんし、 それを目指すものでもありません。 透明になったり、しゃべったり、シートが飛び出てきたりといった、 Mac OS X ならではのギミックを楽しむことに力点を置いているような気がします;-P (オリジナル版のUIにのっとったCocoa版IPMessengerとして、 石綿豪介さんによるIP Messenger for Mac OS Xが公開されています。 オリジナルのIPMessengerのUIを好む方はそちらをご利用するのがよいのではないでしょうか。)

XMessenger は、Mac OS X ネイティブなアプリケーションです。 Cocoaフレームワークの上で、Javaで書かれています。 Project Builder と、Interface Builder を用い、 JavaでCocoaでプログラミングするのは、楽しいです (Ver.0.4以降、開発環境をXcodeに切り替えてみました)。 実装にあたって 竹内仁さんのRuby版、 加澤恒央さんのJava版の実装を参考にさせていただきました。

Ver.0.5Betaについて

Ver.0.4Betaで「封書を受け取ったあと、未読のままで、メンバーリストを更新すると、 未読メッセージ数までクリアされてしまうので、未読の封書を読むことができなくなる」 という不具合が発覚し、修正しました。 これでいよいよ、ロジック的な不具合は修正しきったかな?

今後は、Mac OS X v10.2 にも対応したバージョン、 つまり、Ver.0.5Betaの不具合修正のみをしていくものと、 Mac OS X v10.3 ならではの機能をどんどんとりいれるバージョンの 2系列で開発を続けていく予定。

Mac OS X v10.3 ならではの機能としては、以下のものを予定しています。

Ver.0.4Betaについて

Ver.0.3Alpha公開直後に気がついた不具合をようやく修正しました。 これは、 IPMessenger プロトコルの仕様の読み間違いという根本的な原因によるものでした。 開発環境を Panther 上の Xcode に移しました (多分、以前のプロジェクトファイルで、Project Builder でもビルドできると思います)。 仕様としてはほぼ満足できるものになったので、これをもって、βリリースします。 英語版のリソースと、ヘルプが残課題かな。
※メンバーリスト更新に関するバグがありました。Ver.0.5Betaで修正。

Ver.0.3Alphaについて

Ver.0.2Alpha において、仕様バグが存在していることに気がつき、 修正しました。 また、UI色の組み合わせを切り替えることができるようにするなど、 いくつかの機能を加えました。 このバージョンで重要な不具合が出ないようであれば、 βリリースしたいと思います。 英語版のリソースをまじめにつくっていないので、
※現段階では、言語環境が「英語」となっている環境下ではまともに使えません。
※Ver.0.4Betaで修正した大きな不具合がありますので、ご利用は推奨しません。

IPMessengerについて

ごく最近まで(これは、開発当初のはなしです)わたしは、 IPMessengerについてはよく知りませんでした。 ICQや、MSN Messenger の一種と思ってました。

ふとしたことから、会社で「IPMessengerの輪」ができていることを知りました。 興味をもって調べてみると、IPMessengerはソースまで公開されており、 各種プラットフォームへの移植も進んでいることを知りました。 Mac OS Xネイティブ版の実装は存在していないようでしたので、 自分でつくってみようと思いました。

入手〜インストール方法

.dmgファイル(をzip、またはgzip圧縮したもの)を以下からダウンロードしてください。

最新版

  

以前のバージョン

zip、またはgzip圧縮をかけてありますので、まず、それを「解凍」してください。 「xmessenger-v**.dmg」をダブルクリックして、マウントしてください。 マウントされた仮想ドライブの中には、 ビルド後の"XMessenger.app" と、 "XMessenger"フォルダがあります。

"XMessenger.app"はそのまま実行できます。 好きなところにコピーして利用するのがよいでしょう。

"XMessenger"フォルダの中には、 ビルドに必要なプロジェクト一式が揃っています。 Project Builder( Ver.0.4Beta 以降は Xcode ) を用いて、 そのままビルドできる状態となっています。 また、"doc"フォルダの下には、javadocにより生成した、 ドキュメントを収録しています。 javadoc、便利です。

使い方

独自のポリシーのもとにユーザーインタフェースを設計したために、 XMessenger のユーザーインタフェースは、 やや独自のものとなっています。 IPMessengerを使ったことのある方でも、 最初はとまどうことでしょう。


メインウィンドウ: どハデなカラーリングが特徴。 上部の黄色い部分がメンバーリスト。 下部の赤い部分がメッセージパネル。


メッセージ作成用シート: 青い部分。 メンバーリストから、送信先を選択(クリック)すると出現。


環境設定シート: カラー・セットの切替やおしゃべりの頻度を切り替えられるところが特徴。
メンバーリスト:
  • 現在、ログインしているメンバーのニックネームとグループ名がリストされています。 一番左の欄は、その人から届いた未読メッセージ数が表示されています。
  • 未読メッセージ数欄をクリックすると、 その人から届いた一番古い未読メッセージが、 メッセージパネルに表示されます。 表示されると、既読になるので、未読メッセージ数が1減ります。
  • あるメンバーにメッセージを送信したいときは、 そのひとのニックネームか、 グループ名の欄をクリックしてください。 メッセージ作成用シートがにょろっと表示されます。
  • 未読メッセージ数、ニックネーム、 グループ名のそれぞれの欄のラベル部分をクリックすると、 メンバーリストがそれぞれの項目をもとにソートされます。
  • メッセージを送受信したり、 未読メッセージを開封したら、 そのメンバーがメンバーリストのトップに自動的に移動します。 「IPMessengerの輪」に参加しているメンバーが多い場合、 親しくメッセージの送受を行っている相手ほど、 自動的に上の方に表示されるようになるわけです。
  • 未読の封書が残っているのに、 その送信者がログアウトしてしまった場合、 メンバーリスト上のその送信者の名前の表示色が変わります。 封書をすべて開封したら、ログアウト済みのメンバーはリストから消えます。
  • 気がつきにくいですが、 メンバーリストの右上の角はボタンとなっています。 このボタンをクリックすると、メンバーリストを更新します。
メッセージパネル:
  • 送受信されたメッセージや、 その他の情報が表示されます。 スクロールできます。
  • 受信メッセージは、 オリジナル版IPMessengerのように、 ひとつひとつ独立したダイアログとして表示されるのではなく、 このメッセージパネルに集約して表示されます。
メッセージ作成用シート:
  • 最上部には、送信先の名前が表示されます。ご確認ください。
  • 青い部分に自由にメッセージを書き込んでください。
  • 封書にしたい場合は、「封書」チェックボックスにチェックを入れてください。
  • 「送信」ボタンをクリックすると、 あなたの書いたメッセージが送信されます。
環境設定シート:
  • メニューから「環境設定...」を選択すると、にょろっと出現します。 ここで設定したものは、セーブされ、毎回の起動時にも反映されます。
  • プロフィール欄の3項目は、IPMessenger と同じです。
  • カラー・セット欄でUIの色の組み合わせを選択できます。 クリックしたものが即時反映されます。
  • おしゃべり欄では、おしゃべりの頻度を変更できます。
そのほか:
  • 送信パネルの一番下の「不在」「Logout」
  • メニュー、ならびにDockメニューは見ればわかるでしょう。
  • 非アクティブ化してしばらく経つと、徐々に透明になり消えます。

動作環境

PowerBookG4(12inch, 867MHz)、Mac OS X Ver.10.3.2(Panther) ならびに、 PowerBookG4(15inch, 400MHz)、Mac OS X Ver.10.2.8 での動作を確認しています。

Ver.0.4Beta以降の開発には、上記12inch上の Xcode Ver.1.1、 Interface Builder 2.4(v349) を用いました。

Ver.0.3Alphaの開発には、 Project Builder Ver.2.1(December 2002 Developer Tools), Interface Builder 2.3.2(v291)を用いました。

使用条件と免責

Ver.0.4Beta 以降、一般公開用のベータリリースとしました。 本ソースコードならびにバイナリ、 および、それらを修正したものについて、 オリジナルについての記載(たとえば、公式サイトURLの紹介)があれば、 雑誌、CD-ROM等の他媒体への収録、 他のWEBページ、FTPサイト等への転載、再配布は自由です。 その際、特に許可は必要ありませんが、ひとことメールでもいただくとありがたいです (といいつつ、はなはだ失礼ですが、いただいたメールへの返事はしないと思います)。

利用に関する条件は特にありません。 と同時に、かわいは、XMessenger 利用者に関し、 いかなる責任も負いません。

XMessengerに関する、ご意見、ご感想、ご提案、不具合報告は歓迎しますが、 かわいはそれらに対する返答や、不具合修正の義務を負いません。

known bugs

fix するつもりがあるもの

ひょっとしたら実装しないかもしれない機能

履歴

2004.03.28
Ver.0.5Betaとして公開。
2004.03.18
Ver.0.4Betaとして公開。
2003.10.14
Ver.0.3Alphaとして公開。
2002.02.09
Ver.0.2Alphaとして公開。
2002.01.31
Ver.0.1Alphaを公開

開発メモ

オリジナル版について

オリジナル版 IPMessenger を使ってみて、まず、ディスプレイ内にウィンドウやダイアログがばらばらと表示されるのが邪魔だと感じました。 そこで、本XMessenger ではオリジナル版のUIから離れ、すべてのGUI要素がひとつのウィンドウ内で完結するデザインとしました。 Mac OS X(cocoa)には、これを実現するのに都合のよいGUI要素が存在しました。 例えば、環境設定パネルは、メインウィンドウにくっついた「シート」という形で表示されます。

しかし、一方でそのようなデザインスタイルにしたばっかりに、 仕様の矛盾や穴が生じることになりました。 あらためて、オリジナル版のGUIデザインの合理性に気が付き、 感心しました。

例えば、封書が届いたとします。 こちらが開封する前に、封書の送付元のユーザーがログアウトしてしまった場合、 XMessenger では、封書が届いたことを未読メッセージ数のカウントで示すと同時に、 そのユーザーがログアウトしたことを表示を薄くして示すという、 ややわかりにくい表現をとっています。 オリジナル版では、このような問題はそもそも生じません。

オリジナル版では、簡潔なGUIデザインにより、 「できること」=「みえてるもの」となっており、 「できないこと」は、ユーザーの目から自然に隠されているのです。 実に巧妙なGUIデザインだと思います。

それはそれとして、XMessenger が、 Mac OS X ならではのギミック(しゃべる、はねる、透ける、ベロッとシートが出る)が満載された楽しいコミュニケーションツールとなったことには満足しています。

明日のための覚え書き

自分のための備忘録ってことで。

アウトレット

hogeButtonというような名称のアウトレットがあったとすると、 そのインスタンス生成時(nib読み込み時)に、setHogeButton()というメソッドが自動的に呼ばれるらしい。

ひょっとして、cocoaフレームワークのもともとの仕様?

これに気づかず、speakLevelBtnsという NSMatrix クラスのアウトレットがあるのに、 setSpeakLevelBtns()というメソッドを自前で定義していた。 speakLevelBtnsの値がnullのままとか、 呼んでもないメソッドsetSpeakLevelBtns()が勝手に呼び出されている、 などの怪奇現象が発生し、 Ver.0.4Betaの開発がほぼ収束した段階で、悩みに悩んでしまってました。

ヘルプ

いろいろ試したのだけど、へルプの正しい設定方法がわからない。

調べたところでは、HTMLでファイルを用意し、 Info.plist でCFBundleHelpFolderCFBundleHelpName を設定すればよいらしいのだが、うまくいかない。 ひょっとして、Cocoa-Java アプリからは、CFBundle*は利用できない?

手っ取り早い方法は、Info.plit に、NSHelpFileというエントリをつくり、クラスに文字列、値にファイル名(HTML)を設定する方法。

この方式だと、WEBブラウザが立ち上がり、簡単にヘルプを読むことができる。 へルプビューアーの起動を待たずにすむので、非常に軽快。 その反面、図を含めたりと言った多様な表現はできないようだ。

とはいえ、この方式はどうやら、お勧めの方法ではないらしい。 はてさて。

文字列の終端記号

非常にアホなことを告白すると、ずっとずっと、送受信文字列の終端に'\0'が含まれているべきであることに気がつかなかった。 最後の一文字が重要になるようなパケットを受け取ったときに、妙な現象が生じていたのだ。

Cだと、'\0'は文字列の終端記号であるが、Javaだと、文字列の終端を意味する記号は無い。 受信した文字列は、終端の'\0'も文字列の一部としてカウントされる。 この文字列の取り扱いの食い違いによって、うっかりが生じていた。

perl だと、読み込んだ文字列(改行コード含む)をまずは、chop するでしょ。 それみたいな処理が必要だった。