2008年7月21日月曜日

Skype4Java Linux版新バージョンの改良点

Mac版に引き続き、Linux版も作り直しました。

改良点は以下の通りです。
  • MacのSkype.frameworkと似たAPIを持つ下支えのクラスを導入
  • 使うまでに設定が必要なD-Busを使わず、X11を使うように一本化
  • 接続時のエラーを適切にハンドリング
  • 関連ファイル群を整理
  • エラー時に例外を投げるように
  • リソース利用を最適化
  • メモリリークの解決
開発・テストは、Ubuntu 7.10で行っています。
試してみたい方は、CVSからチェックアウトしてお使いください。

2008年6月13日金曜日

Skype4Java Mac版新バージョン完成!

Skype4Javaは上位のアプリケーション向けAPIと、下位のSkypeとの通信APIからなっています。

Skypeとの通信は各OSごとに仕組みが異なるため、それぞれ異なった実装となっています。
  • Windows (Windowメッセージを用いて通信)
    • C言語 + JNIでWin32を用いて実装
    • SWTのOSクラスでWin32を用いて実装
  • Linux(DBus、X11メッセージのいずれかを用いて通信)
    • C言語 + JNIで実装
  • Mac(Skype.frameworkを用いて通信)
    • C言語(Carbon) + JNIで実装
Linux、Mac版はBart氏に実装していただいたのですが、今回Mac版を新規に作り直しました。
実際の案件でSkype4Javaが必要となったのですが、既存のMac版では品質面で問題があったためです。

新バージョンでは、以下の改良を加えています。
  • メモリリーク問題の解決
  • 初期化と接続が一体になってしまっていて再接続ができない問題の解決
  • 長い文字列がやりとりされた場合に途中で切れてしまう問題の解決
  • 日本語が文字化けする問題の解決
  • 障害時に例外を通知する仕組みの追加
  • 効率的なメモリ管理の実現
  • isRunning()、getInstalledPath()メソッドの追加
  • イベントループをon/offできる機能の追加
  • Skype.frameworkをシステムフォルダに実行時にインストールしない形に変更
試してみたい方は、CVSからチェックアウトしてお使いください。

2008年5月24日土曜日

Skype連携ソフトの複数デバッグ用Eclipseプラグインの開発

Skype連携ソフトの複数デバッグを一つのマシンで行えれば、やりとりを行うソフトの開発が非常に楽になります。
ですので、今日はこの方法を探ってみました。

まずは、Skype自体を複数アカウントで起動します。
その方法は、以前のitmediaの記事「Skypeを2つ同時に起動する」に詳しいです。
上記記事では、Windowsに標準搭載のrunasコマンドを使っています。
ですが、毎回パスワード入力するのが面倒であれば、
等をインストールして使う手もあります。

次はSkype連携ソフト自体を複数アカウントで起動する方法です。
通常のEclipseの起動オプションでは、別アカウントでJavaアプリケーションを起動という選択肢がありません。
いろいろ探しましたが、このような目的を実現するEclipseプラグインも発見することができませんでした。

となると、自分でプラグインを作るしかありません!

最初はEclipseのアプリケーション起動関係のフレームワークについて、「The Launching Framework in Eclipse」を読んで調査します。

その後、EclipseのJavaアプリケーション起動のコードを読んでいくと、内部ではjava.lang.Runtime#execを呼び出してプロセスを起動していることが分かりました。
起動後は、java.lang.Processインスタンスがそのまま保持されて制御に使われています。
Processインスタンスを使わない形に変更してプラグインを実現するとなると非常に多くのコード修正が必要そうです。
ですので、この仕組みはそのまま使う形でプラグインを実装することにしました。

方向性が固まったので、次は別アカウントで実行されたプロセスに結びつくjava.lang.Processインスタンスを生成する方法を考えなければいけません。
Processクラスを拡張 + JNI等を使って、別アカウントでのJavaアプリケーションと結びつく独自のクラスを作ることも可能ですが非常に大変です。
ですので、上記のRunAsXコマンドを使ってラップして実現します。
java.lang.Processインスタンスを作る前に、RunAsXコマンドを使う形にコマンド文字列を修正して、java.lang.Runtime#execに渡す方法です。

この仕組みを実現するため、既存のメソッドの一部を変えたいのですが、Eclipseの既存のクラスがこのような拡張を意図して作られていません。
ですので、メソッドレベルではなく、クラスレベルで構造を変える形で挑戦してみます。

結構なコード量が必要でしたが、この形で別アカウントでの起動に成功しました!!!

起動に成功したので、設定を行う起動ダイアログ等も作り込んでみました。




このプラグインで別アカウントのJavaアプリケーションをデバッグしている画面です。



残りの問題や改良を加えたら、Skype連携ソフト開発用Eclipseプラグインとして公開したいと思います。

2008年5月17日土曜日

Skype4Java 2.0の計画

Skype4Java 1.0をリリースしてから一年半ほど経つので、Skype4Java 2.0をリリースしたいと思っています。
メジャーバージョンアップするにあたっては、世界最高水準のライブラリを目指したいので計画をまとめてみます。
2.0では五つの方向性で機能を向上させます。

「安定性の向上」
  • Mac、Linuxコネクタの修正
    • 実装をJNAに変更
  • アプリケーションAPIレベルでテストカバレッジ100%の達成
「機能の充実」
  • Skype4COM、Skype4Pyと同レベルのSkype APIサポート
  • AP2AP機能を使ったRMIサポート
  • 使いやすい音声録音機能
    • mp3、OggVorbisへのリアルタイム録音
    • 会議通話の録音サポート
「配備の容易性」
  • Maven2セントラルリポジトリへの登録
  • jarのeclipseプラグイン化(OSGiバンドル化)
「ドキュメントの充実」
  • 日本語のjavadoc追加
  • 状態遷移図の追加
「サンプルプログラムの充実」
  • Appletでの利用例
  • JNLPでの利用例
  • サーブレットでの利用例
  • RESTful Webサービス化
  • 各種マッシュアップアプリケーション

2008年5月10日土曜日

Skype APIを使ってSkype連携ソフトを作る最初の一歩

Skype APIを使うことにより、Skypeと連携するソフトを作ることができます。

Skype APIを使い始めるにあたっては、まずSkype自体について情報収集しなければいけません。
  1. Skypeの基礎知識を習得
    1. Skype公式サイトで製品、サービス情報をチェック
    2. Wikipedia(日本本家)でSkypeの概要、歴史、関連情報をチェック
    3. Skypeの動作の仕組みについて学ぶ
    4. Skypeのキーワード「P2P」へのセキュリティ懸念への反論を学ぶ
  2. Skypeの業界動向を調査
    1. Skype市場の成長、大きさについて学ぶ
    2. Skypeハードウェアについて学ぶ
    3. Skypeソフトウェアについて学ぶ
  3. Skypeの過去のニュースや動きを調査
    1. Skype NewsブログのSkypeカテゴリの過去エントリをチェック(その1その2Skype関連製品カテゴリ)
    2. にっき (n-yoshi@lares)ブログのSkypeカテゴリの過去エントリをチェック
    3. Skype日本語ブログの過去エントリをチェック
  4. Skypeの最新情報が集まる仕組みを作る
    1. Skype関連のブログのRSSを登録
    2. SkypeキーワードのRSSを登録
    3. Googleアラートに追加
    4. Twitterユーザを追加
その後、Skype APIについて情報収集します。
  1. Skype APIの入門記事で学ぶ
  2. Skype API仕様書に目を通す
  3. 自分が使っているプログラミング言語用のSkype APIライブラリを選ぶ
  4. 簡単なアプリケーションを作ってみる
  5. Skype APIの最新情報が集まる仕組みを作る
    1. Skype API関連のブログのRSSを登録
  6. Skype Extraにして販売する方法を学ぶ (Skype Extraにせず、普通のアプリケーションのままリリースすることも可)
ここまでくれば、後は目的のSkype連携ソフトを作り上げてリリースするだけです。