- Query<xxxx> ql = cdao.ofy.query(XXXX.class).filter("key", Key);
- List list = ql.list();
- return list;
- </xxxx>
2011-12-27
GWT: Objectifyで得た検索結果をGWT-RPCへ直接送る方法
御存知の通り、GWT-RPCでは送受信するクラスに制約があります。Objectifyで検索をした場合、結果に複数の結果を受け取るときは、QueryクラスやIterableインタフェースで受け取ることになります。この結果をGWT-RPCを利用して直接クライアント側に返す時には、Iterableインタフェース等は送信できないのでようなので、下記のようにリストに変換してから返すことになります。
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では比較的容易に設定することができます。
サンプルの設定状況
サンプルプログラムの設定状況は下記の通りになります
Keyを割り当てるのがポイントです。
色が青色の車のユーザを検索する方法は下記のようになります。
サンプルの設定状況
サンプルプログラムの設定状況は下記の通りになります
- ユーザを表現するPersonクラス
- 車を表現するCarクラス
- Carクラスはユーザ(Person)の情報を持つ
このことを頭にいれて以下を読んでください。
Entityクラスの記述方法
@Parentのアノテーションをつけるのがポイントです。
- public class Car
- {
- @Id Long id;
- @Parent public Key<person> owner;
- String color;
- }
- public class Person
- {
- @Id Long id;
- String name;
- int grade;
- }
- </person>
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<person> pKey = ofy.put(p);
- //入手したKey情報を割り当てる
- Car car = new Car();
- car.id=(long)1002;
- car.owner=pKey;
- car.color="blue";
- </person>
//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);
Car car = ofy.query(Car.class).filter("color", "blue").get(); Person p = ofy.get(car.owner);ID情報をベタに管理するよりも簡単に検索することができますね。
2011-12-09
インドア・ストリートビュー・ハンズオン
京都GTUGにて、「インドア・ストリートビュー・ハンズオン」が開催されます。
インドア・ストリートビュー・ハンズオン自分でストリートビューを作るってのは面白そうだと思いませんか?また、教育システムにもなにかいろいろ応用できそうな気がします。僕はスタッフとして参加しますが、これを機にGoogleMap APIについても勉強もしようかと思ってます。
2011-12-07
マルチスレッドでコンポーネントを操作する
C#のGUIアプリでいろんな処理を行う場合、マルチスレッドを利用してメインのスレッドとは別に処理を並行実行させるといったことは定石ですが、
参考サイト(ソースコード):
Windowsアプリケーションにおけるマルチスレッドの注意点(C#と諸々)
- 原則として別スレッドからコントロール対して操作をすることができない
参考サイト(ソースコード):
Windowsアプリケーションにおけるマルチスレッドの注意点(C#と諸々)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
MethodInvoker process = (MethodInvoker)delegate() | |
{ | |
// コントロールの操作を行う処理をここに書く | |
}; | |
ControlUtil.SafelyOperated(/*ここの引数に対象のコントロール*/, process); | |
//ここでの、ControlUtilクラスというのは下記のようになります。 | |
public static class ControlUtil | |
{ | |
public static object SafelyOperated(Control context, Delegate process) | |
{ | |
return ControlUtil.SafelyOperated(context, process, null); | |
} | |
public static object SafelyOperated(Control context, Delegate process, params object[] args) | |
{ | |
if (context == null) | |
{ | |
throw new ArgumentNullException("context"); | |
} | |
if (process == null) | |
{ | |
throw new ArgumentNullException("process"); | |
} | |
if (!(context.IsHandleCreated)) | |
{ | |
return null; | |
} | |
if (context.InvokeRequired) | |
{ | |
return context.Invoke(process, args); | |
} | |
else | |
{ | |
return process.DynamicInvoke(args); | |
} | |
} | |
} |
2011-12-01
JSiSE関西支部学生研究発表会について
関西支部 学生研究発表会が
日時:平成24年3月10日(土) 13時から
場所:関西学院大学大阪梅田キャンパス 10階
にて開催されます。
- 申し込み締切:平成24年1月25日(水) 17時
- 原稿提出締切:平成24年2月10日(水) 17時
詳細につきましては、関西支部HPをご覧ください。
---
本ラボからもエントリーする予定です。
登録:
投稿 (Atom)