2011年12月27日火曜日

GWT: Objectifyで得た検索結果をGWT-RPCへ直接送る方法

御存知の通り、GWT-RPCでは送受信するクラスに制約があります。Objectifyで検索をした場合、結果に複数の結果を受け取るときは、QueryクラスやIterableインタフェースで受け取ることになります。この結果をGWT-RPCを利用して直接クライアント側に返す時には、Iterableインタフェース等は送信できないのでようなので、下記のようにリストに変換してから返すことになります。
Query ql = cdao.ofy.query(XXXX.class).filter("key", Key);
List list = ql.list();
return list;


2011年12月21日水曜日

インドア・ストリートビュー・ハンズオンに参加してきました




京都GTUGで開催されたインドア・ストリートビュー・ハンズオンに参加してきました。GoogleMap Expertの勝又さんによる講習です。

インドア・ストリートビューとは
簡単にいうと、GoogleMapに実装されているストリートビューというのがありますが、それの屋内版です。EverySpaceというのが同様のサービスをやってますね。

作成のポイント
今回は、最後までストリートビュー上で見れる段階まで実装する時間がありませんでしたが、ポイントはわかりました。ずばり、如何によい写真を用意しておくかです。実装の部分は定型的なものですので、インドア・ストリートビューのコンテンツづくりが肝です。

写真撮影方法
カメラならなんでもOKですが、魚眼レンズのような視野角の広いと良いです。本ハンズオンでは
円形魚眼レンズ ( KSW-4 )
を利用しました。これを用いで、1枚ずつ体を回転させながら360度の写真をとって行きます。最低でも1周で6枚ほどは欲しいところです(魚眼レンズを利用しないと枚数は増えます)。上方と下方が必要ですので、最低でも18枚は必要ということです。実際やってみると難しいです。慣れも必要ですね。

写真の加工
本ハンズオンでは
PTgui
を利用しました。このソフトである必要はないと思いますが、これがオススメのようです。実はこの加工処理が一番大切で一番時間がかかるところでしょう。冒頭の写真はそのソフトを利用して作成したものです。18枚の写真を組み合わせて作成されています。ちょっとできはイマイチですが、なんとなくそれっぽいでしょ?

ストリートビューへの実装
実はここは時間切れでデキませんでした。。。ストリートビュー用にさらに写真を加工してサーバーに写真をアップし、それから、、、ということのようです。プログラム自体はJavaScriptでできるようです。

インドア・ストリートビュー、、、これはなかなか面白そうな可能性を秘めてますね。研究テーマに何かできないかなぁ。


P.S
360度の写真撮影ですが、
Microsoft PhotoSynth
というフリーのソフトがなんかよさそうです。


少し試してみましたが、ガイド付きで撮影できるので撮影漏れを防げそうで良さそうです。




2011年12月16日金曜日

ObjectifyでRelationShipを利用する

GAEのDataStoreはKVSのデータベースですので、RDBのようなリレーションがないと言われていますが、実際にはRelationshipという所有関係を定義することができます。Objectifyでは比較的容易に設定することができます。

サンプルの設定状況
サンプルプログラムの設定状況は下記の通りになります
  • ユーザを表現するPersonクラス
  • 車を表現するCarクラス
  • Carクラスはユーザ(Person)の情報を持つ
このことを頭にいれて以下を読んでください。

Entityクラスの記述方法
@Parentのアノテーションをつけるのがポイントです。
public class Car
{
    @Id Long id;
    @Parent public Key owner;
    String color;
}

public class Person
{
    @Id Long id;
    String name;
    int grade;
}
リレーションの登録
Keyを割り当てるのがポイントです。
//Personデータを登録し、そのKey情報を得る
Person p = new Person();
p.name="bob"; 
Key pKey = ofy.put(p);

//入手したKey情報を割り当てる
Car car = new Car();
car.id=(long)1002;
car.owner=pKey;
car.color="blue";
リレーションを利用した検索
色が青色の車のユーザを検索する方法は下記のようになります。
Car car = ofy.query(Car.class).filter("color", "blue").get();
Person p = ofy.get(car.owner);
ID情報をベタに管理するよりも簡単に検索することができますね。

2011年12月9日金曜日

インドア・ストリートビュー・ハンズオン

京都GTUGにて、「インドア・ストリートビュー・ハンズオン」が開催されます。
インドア・ストリートビュー・ハンズオン
自分でストリートビューを作るってのは面白そうだと思いませんか?また、教育システムにもなにかいろいろ応用できそうな気がします。僕はスタッフとして参加しますが、これを機にGoogleMap APIについても勉強もしようかと思ってます。

2011年12月7日水曜日

マルチスレッドでコンポーネントを操作する

C#のGUIアプリでいろんな処理を行う場合、マルチスレッドを利用してメインのスレッドとは別に処理を並行実行させるといったことは定石ですが、
  • 原則として別スレッドからコントロール対して操作をすることができない
という制約があります。もちろん原則としてということですから抜け道はあります。以下はその方法です。
参考サイト(ソースコード):

Windowsアプリケーションにおけるマルチスレッドの注意点(C#と諸々)


2011年12月1日木曜日

JSiSE関西支部学生研究発表会について


関西支部 学生研究発表会が
 日時:平成24年3月10日(土) 13時から
 場所:関西学院大学大阪梅田キャンパス 10階
にて開催されます。

  • 申し込み締切:平成24年1月25日(水) 17時
  • 原稿提出締切:平成24年2月10日(水) 17時

詳細につきましては、関西支部HPをご覧ください。

---
本ラボからもエントリーする予定です。