2011年4月21日木曜日

GWTでChannelAPIクライアントを実装する

昨日に引き続いて、Channel APIの話題です。ライブラリを使って意外と簡単にGWTで実装できましたので、取り急ぎ報告します。あ、まだGAE上では試してません。

gwt-gae-channelライブラリを使う
gwt-gae-channelプロジェクトというのがありますので、これを使いました。まだバージョン0.3αですがいちおう動くようです。なお、gwt.xmlファイルへの記述は、
  • <inherits name='com.google.gwt.appengine.channel.Channel' />
となります。
Tokenの入手
これは、前回の記事を参考にして、まずはTokenを入手してください。入手方法はお好きなように、、、まあ、GWTユーザならGWT-RPCを使うのが普通でしょう。
Channelの接続
ここで、gwt-gae-channelのライブラリを使います。以下のような記述でOK。
ChannelFactory.createChannel(token, new ChannelCreatedCallback() {
            @Override
            public void onChannelCreated(Channel channel) {
                channel.open(new SocketListener() {
                    @Override
                    public void onOpen() {
                        Window.alert("Channel opened!");
                    }
                    @Override
                    public void onMessage(String message) {
                        Window.alert("Received: " + message);
                    }

                    @Override
                    public void onError(SocketError error) {
                        Window.alert("Error: " + error.getDescription());
                    }

                    @Override
                    public void onClose() {
                        Window.alert("Channel closed!");
                    }
                });
            }
        });
この記述は、Tokenを入手した直後にするのが無難でしょう。接続が確立すると、onOpenメソッドが反応します。この処理を終えることで、サーバとのcomet接続が維持されます。

Pushの呼び出し
上記の処理が終えた後、サーバー側でpushをする処理(前日の記事を参照)を実行させれば、上記のonMessageが反応します。push処理の呼び出し方は、サーブレットでもいいし、GWT-RPCでもいいです。

正直、なんでこれでpushされてくるのかイマイチがところはあります(笑)。サンプルとか殆どないのでわかりにくいですが、cometのことがわかっていれば理解可能だと思います。

2011年4月20日水曜日

GAEのChannelAPIを理解する ~サーバ編~

GAEで、1.4から採用されたChannel APIについてちょっとわかってきたので簡単に報告します。

ChannelAPIとは
これは俗にいうCometの処理に相当します。チャットのようなPushするプログラミングを作成する際に、GAEのリソースを利用して実装できるというのは大きな魅力でしょう。

ChannelAPIにおいて理解しておくべき最低限の用語2つ
  • Token ・・・ ユーザとコネクションを貼るためのトークン。サーバーは最初の接続要求の時に、このTokenの値をクライアントに渡す必要があります。
  • channelKey ・・・接続チャンネル。ユーザごとに区別するような方法が一般的らしい。
最初の接続処理Tokenの生成部分
ChannelService channelService = ChannelServiceFactory.getChannelService();
String token = channelService.createChannel(channelKey);

//ここで生成されたtokenをクライアントに渡すこと


プッシュ処理(ユーザへの送信)部分
String message="なにか来ました"
ChannelService channelService = ChannelServiceFactory.getChannelService();
channelService.sendMessage(new ChannelMessage(channelKey, message));

とまあ、驚くほど簡単にできたりします。

ちょっとchannelKeyの設定の仕方はいろいろあるようですが、例えば1つに固定にしておくとそのchannelKeyで接続したユーザ全てに同じメッセージを送ることができました。単純にブロードキャストするだけでしたら、そういった方法もいいかもしれません。個別にプッシュ対応する場合は、該当するchannelKeyに対してのみ、sendMessageメソッドを呼び出せば良いのでしょう。

なお、GAE上で本格的に稼働させたわけではないので、どれぐらいの負荷がかかるのかは不明です。

クライアント編については、また後日。。。

2011年4月19日火曜日

Androidの開発環境を構築する ~ SDK,AVD設定編 ~

Androidの開発環境に関する覚書です。とりあえず、SDKとAVDの設定について

1. Android SDKをインストールする
まず、公式サイトよりSDKをダウンロードします。
http://developer.android.com/sdk/index.html
zip形式のファイルがいいかもしれません。ファイルは展開し、適切な場所に保存してください。

2.SDKManagerの起動
SDKの中にSDK Manager.exeというファイルがあるのでそれを起動します。すると、各種SDKがダウンロードされます(この処理はかなり時間がかかりますのでそのつもりでお願いします)。

3.仮想デバイスの設定
Andoridの開発では、Androidの仮想マシンをPC上に用意することになります。AndoridはiPhoneと異なり様々な種類のハードやOSのバージョンが存在します。それを事前に構築しておく必要があります。起動したSDKManagerにはAVDManagerの機能もあり、そこで仮想デバイスを設定します。






Vistual Deviceを選択し、【New】ボタンを押すと下記のとおり設定画面が出ますので、適当に(いやほんとはターゲットマシンを明確にする必要があるかと思いますが)設定します。




以上で、SDK周りの設定が終わりました。あとは、開発環境でのプラグイン設定です。それは後日の記事で紹介します。





2011年4月14日木曜日

オープンソースカンファレンス2011 Kansai@Kobeのお知らせ

きたる2011/4/16(土)に、神戸産業振興センターにて「オープンソースカンファレンス2011 Kansai@Kobe」が開催されます。公式サイトはこちら

公式サイトを見てもらえればわかりますが、代表的なソフトウェア会社の協賛やコミュニティの参加があり、オープンソースを活用したソフトウェア業界のホットな話が聞けるでしょう。都合がつく方はぜひ参加してみてはいかがでしょうか?

2011年4月5日火曜日

第2回 Android Hackathon in Kyoto 開催のお知らせ

京都GTUG(Google Technology User Group)主催の第2回 Android Hackathon in Kyoto が5月に開催されます。案内はこちらです。

今更言うまでもなく、AndroidはスマートフォンOSとして急速に普及しており、教育システムのプラットフォームとして無視できません。本ラボでも、Android関係の研究テーマを今年の卒論でやろうかと検討しており、絶好の機会かなと思ってます。
京都GTUGは、私もいちおう名ばかりスタッフとして協力してますので、スケジュールの都合が合えば参加&協力する予定です。

2011年4月1日金曜日

2011年度始まる!

新年度(2011年度)がスタートしました。2011年度のゼミ生の陣営は
  • 院生1名
  • 学部生5名
と例年より学部生が少ないのがちょっと残念ですが、そのぶん生産性を高めていこうかと思ってます。

就活は当然大切ですが、就活に追われて卒研で何も学ばずに社会に出ていくことはとても時間とお金の無駄なことです。特に情報系は即戦力が求められます。プログラミング技術は当然のこと、「ソフトウェア開発」とはどういうことなのか、何を考えておかないといけないのかを、卒研でのシステム開発を通して経験しておかないと、社会に出たときにワケのわからないシステムを産出してしまうでしょう。卒研は仕事のリアリティを感じる絶好の機会なのです。

今年は、
  • Google関係の技術導入をさらに加速
  • Windowsアプリ系のC#への積極的移行
を目指し、アプリケーションやサービスを公開していこうと思ってます。毎年思っていることなんですが、その技術的土壌ができてきたという手応えがあります。