|
☆しゃべる!はねる!消える! ― 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.4Betaで「封書を受け取ったあと、未読のままで、メンバーリストを更新すると、 未読メッセージ数までクリアされてしまうので、未読の封書を読むことができなくなる」 という不具合が発覚し、修正しました。 これでいよいよ、ロジック的な不具合は修正しきったかな?
今後は、Mac OS X v10.2 にも対応したバージョン、 つまり、Ver.0.5Betaの不具合修正のみをしていくものと、 Mac OS X v10.3 ならではの機能をどんどんとりいれるバージョンの 2系列で開発を続けていく予定。
Mac OS X v10.3 ならではの機能としては、以下のものを予定しています。
Ver.0.3Alpha公開直後に気がついた不具合をようやく修正しました。
これは、 IPMessenger プロトコルの仕様の読み間違いという根本的な原因によるものでした。 開発環境を Panther 上の Xcode に移しました
(多分、以前のプロジェクトファイルで、Project Builder でもビルドできると思います)。 仕様としてはほぼ満足できるものになったので、これをもって、βリリースします。
英語版のリソースと、ヘルプが残課題かな。
※メンバーリスト更新に関するバグがありました。Ver.0.5Betaで修正。
Ver.0.2Alpha において、仕様バグが存在していることに気がつき、
修正しました。 また、UI色の組み合わせを切り替えることができるようにするなど、 いくつかの機能を加えました。 このバージョンで重要な不具合が出ないようであれば、
βリリースしたいと思います。 英語版のリソースをまじめにつくっていないので、
※現段階では、言語環境が「英語」となっている環境下ではまともに使えません。
※Ver.0.4Betaで修正した大きな不具合がありますので、ご利用は推奨しません。
ごく最近まで(これは、開発当初のはなしです)わたしは、 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を使ったことのある方でも、 最初はとまどうことでしょう。
メインウィンドウ: どハデなカラーリングが特徴。 上部の黄色い部分がメンバーリスト。 下部の赤い部分がメッセージパネル。 メッセージ作成用シート: 青い部分。 メンバーリストから、送信先を選択(クリック)すると出現。 環境設定シート: カラー・セットの切替やおしゃべりの頻度を切り替えられるところが特徴。 |
|
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に関する、ご意見、ご感想、ご提案、不具合報告は歓迎しますが、 かわいはそれらに対する返答や、不具合修正の義務を負いません。
オリジナル版 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 でCFBundleHelpFolder、CFBundleHelpName を設定すればよいらしいのだが、うまくいかない。 ひょっとして、Cocoa-Java アプリからは、CFBundle*は利用できない?
手っ取り早い方法は、Info.plit に、NSHelpFileというエントリをつくり、クラスに文字列、値にファイル名(HTML)を設定する方法。
この方式だと、WEBブラウザが立ち上がり、簡単にヘルプを読むことができる。 へルプビューアーの起動を待たずにすむので、非常に軽快。 その反面、図を含めたりと言った多様な表現はできないようだ。
とはいえ、この方式はどうやら、お勧めの方法ではないらしい。 はてさて。
非常にアホなことを告白すると、ずっとずっと、送受信文字列の終端に'\0'が含まれているべきであることに気がつかなかった。 最後の一文字が重要になるようなパケットを受け取ったときに、妙な現象が生じていたのだ。
Cだと、'\0'は文字列の終端記号であるが、Javaだと、文字列の終端を意味する記号は無い。 受信した文字列は、終端の'\0'も文字列の一部としてカウントされる。 この文字列の取り扱いの食い違いによって、うっかりが生じていた。
perl だと、読み込んだ文字列(改行コード含む)をまずは、chop するでしょ。 それみたいな処理が必要だった。