2010/05/03

GAE/J入門 第三回 ~Googleアカウントの使用~ [ GAE ]

GAEではGoogleアカウントにログインしているユーザは
Googleアカウント情報を使ったサービスを提供する事ができます。
今回はそのGoogleアカウントの使用方法を。
例によって参照してるのはこちら

1.GoogleAccount情報の取得
GoogleAccountの使用方法は非常に簡単で、UserServiceクラスを使えば
ほとんどこのクラスからGoogleAccount情報を取得できます。
作成方法も簡単。

UserService userService = UserServiceFactory.getUserService();


これだけ!
このUserServiceクラスについては以前こちらこちらである程度書いたので
割愛しますが、こんな簡単な方法でGoogleAccount情報を使う事ができます。


2.アクセス制限をかける
次に、アクセス制限をかける方法です。
JavaではFilterという物を使うとServletが呼び出される前にFilterの
プログラムが実行されるらしいです。
具体的にはjavax.servelt.Filterインタフェースを実装します。
このインタフェースのdoFilterメソッドを実装する事で、権限を持たない
ユーザの場合はTOPへリダイレクトさせたりすることができます。
ただし勿論このFilterインタフェースを実装したクラスを作るだけでは
ダメで、web.xmlにFilterの設定を行う必要があります。

記述方法は今までのservlet等とほとんど同じです。まずFilter自体の記述を

<filter>
 <filter-name>[Filterの名称]</filter-name>
 <filter-class>[実装したFilterクラスのクラスパス]</filter-class>
</filter>


上記のように記述します。後は↑で定義したFilterのマッピングの定義を

<filter-mapping>
 <filter-name>[適用したいFilterの名前]</filter-name>
 <url-pattern>[Filterが適用されるUrlパターン]</url-pattern>
 <dispatcher>[Filterが適用されるタイミング]</dispatcher>
</filter-mapping>


上記のように定義します。filter-nameはそのまんま、url-patternもそのままですね。
例えばhttp://localhost:8080/admin/配下へのアクセスをフィルタリングしたい場合
このurl-patternは/admin/*となる訳です。
最後にdispatcherという項目がありますが、ここは指定できる値が決まってます。
具体的には以下の通りです。

REQUEST URLがリクエストされた時
FORWARD フォワードが行われた時
INCLUDE インクルードが行われた時
ERROR エラーページへ処理が移る時

普通はREQUESTを使う事になると思われます。

以上で簡単にアクセス制限を行う事が可能となります。

3.データをソートして取得する方法
お次はDataStoreからデータをソートして取得する方法です。
現時点でデータの取得は
1.とあるクラスに対して永続化されているデータを全件取得する
2.とあるクラスのidを指定して1件だけデータを取得する
上記二通りの方法だけでした。これに加えて今度はデータをソートして
取得する方法です。やり方は簡単。
まずそもそもデータを全件取得する方法のおさらいから。

1.取得したいクラスを指定して、Queryクラスを作る。
 Query query = pm.newQuery(Post.class); ←pmはPersistenceManagerクラス
2.Queryクラスのインスタンスのexecuteメソッドを実行する
 List list = (List) query.execute();

こんな感じでした。ソートを行う場合はこの1.と2.の間でsetOrderingメソッドを
実行します。例えば降順にしたかったら

 query.setOrdering("date desc");


こんな一行を挟めばOKです。
…しかし思いっきりSQLを直書きしている感じなんですが…(´・ω・`)
項目名といいて降順・昇順といい・・・もっと綺麗に書く方法があるのだろか?



という訳で今回は以上で終了です。まとめると
・GoogleAccount情報を取得するにはUserServiceクラスを使用する
・アクセス制限を行う方法の一つにFilterクラスという物がある
・データ取得におけるソートの方法
ですね。
さー次はなんだろか。

2010/04/23

GAE/J入門 第二回 ~データの読み込み・更新~ [ GAE ]

前回に引き続きGAE/Jです。
今日はこちら(Chapter3)を参考にして読み込みと更新にチャレンジします。

1.特定のクラス情報を全て取得
といっても取得したいクラスを全件取ってくるだけなら非常に簡単。

まずはQueryクラスを、取得したいクラスを指定してインスタンス化します。
例えば前回の例を引き続き使って、Postクラスを全件取得する場合はまず、

Query query = pm.newQuery(Post.class);

こうなる。勿論pmはPersistenceManagerね。
で、後はこのqueryを実行するのみ。実行はそのまんま

query.execute();

で実行できます。ただexecuteメソッドはObjectを返すので
これはキャストしないといけないですね。

List list = (List) query.execute();

こうかな?
(未検査のキャストになるためこれは警告が出ます。気持ち悪い…
 これは今後解決されるのでしょうか?)

あ、後わすれがちですがPersistenceManagerクラスからQueryのインスタンスを
取得するタイミング、またその後Queryのexecuteメソッドを実行するタイミングで
各々try-catch節で囲む必要があります。またqueryはcloseAllメソッドで、
pmはcloseメソッドで各々finally節の中でちゃんと閉じてあげましょう。


2.特定のクラスを、IDの値を指定して取得
今度は特定のクラスに対して、idの値(永続化が行われるクラスは必ずidを持つ)を
指定して取得する方法です。こちらは
PersistenceManagerのgetObjectById()メソッドを使います。
第一引数がクラス、第二引数がIDの値という事で・・・

getObjectById(Class arg0, Long arg1);

こんな感じですね。

3.データの更新
今度は永続したデータの更新なんですが、これが割と簡単。
2.で取得したクラスに対して値を再度セットしたのちに
新規登録の時と同じように永続化を行うだけ。具体的には
PersistenceManagerオブジェクトのmakePersistentメソッドを
実行するだけ。これで更新できます。


3章の内容として後JSPの使い方ってのもあったんですがこれは
GAEの本質からちょっとずれるので今回はパスします。

これで現在GAEを使って

1.データの登録(RDBのInsert)
2.データの取得(RDBのSelect・・といっても主キー指定と全件どちらか)
3.データの更新(RDBのupdate)

までできるようになった!(`・ω・´)

2010/04/20

さぁ、才能に目覚めよう [ 書籍 ]

***読書期間 2010/04/20 ~ 2010/04/22***




いいかげんこのエンジニアという職種が自分に向いているのか
わからなくなった時、そしてエンジニアを続ける・続けないに
関わらず自分にどんな仕事が向いているのか悩んでいる時に
見つけたのがこの本でした。


勝間さんがやたらと勧めている事で有名な本ですね。
正直この本を買った理由としては、本の中身が読みたい訳ではなく
この本を購入する事で一度受ける事ができるStrengthFinderという
物に興味があったからです。
いざ読んでみると(StrengthFinder自体も勿論興味深かったですが)才能に
目覚める、という内容よりもマネジメントよりの内容だった気がします。

この本では、今日ほとんどの企業は以下の二点の誤った認識を
持っていると書いています。

1.人は誰でも全ての事において能力を発揮できる
2.一番伸ばせる部分はその人の一番弱い部分である

しかし、実際にはこの認識が真逆であり、

1.人の才能はその人独自の物で、未来永劫変わる事はない
2.一番成長が期待できるのは本人が持っている才能

といった事を主張しています。結局この本のほぼ全ては
上記の事を細かく説明しているだけだった気がします。
ただ、"だけ"と言っても才能の見つけ方・伸ばし方・適材適所に
配置するための方法等事細かに説明が続きます。
人事や人材育成に金をかけていない会社は勿論、金をかけているのに
なかなか成果が上がらない、そもそも数値として対費用効果が
分からないといった会社に是非読んでもらいたい所です。

また、個人的に共感した点として、今の社会では弱みを表す言葉は
非常に多彩なのに比べ、強みを表す言葉は非常に語彙が乏しいといった
記述がありました。
これには自分の就職活動を重ねあわせて非常に納得がいきました。
就職活動中、面接用に自己分析を行った時に自分の長所って奴を並べてみると

・明るい
・時間を守る
・責任感がある

のような物ばかり。どれも
『暗い人なんてだれが雇いたいんですか?』
『時間を守らない社会人なんてその時点で雇用対象外ですよね?』
『責任感が無い人と仕事したくありません。』
なんてバッサリ切られても文句言えない感じがします。

その点自分の短所はそれはそれはボロボロ出てくる事出てくる事。
当時結局自分は、自分・友人に考えて貰った長所は一旦捨てておき、
"短所としてあがった事を別の視点から考え、長所に変える。"といった
作業をひたすらやっていました。
この本を読んだ時、
『あぁ、自分の長所も短所もあくまで"自分"という個性の一部であり、
 それを長所にするか短所にするかは自分次第、環境次第なんだな』
と感じました。

総評として、1600円でStrengthFinderを1回受けられる、自分の短所に
嫌気がさしている人は思考を切り替える事ができるかも、自分・部下の
マネジメントを行うという点で一読してみると面白いと思います。

最後に自分の才能は以下の五つでした。

・調和性
・回復志向
・アレンジ
・共感
・コミュニケーション

やっぱり、と思う物からそうかぁ? と思う物まで・・・
さて、俺はこの情報を元に今後自分のキャリアをどう
マネジメントしていくべきなのでしょうか・・・?

2010/04/15

コロニーな生活 [ コロプラ, 遊び ]

流行に乗り遅れてはいますが、

コロプラ始めました。

さて、はまるかめんどくて放置するか・・・。

しかしこういう商売よく考えつくよなぁ。
マジ頭いいと思う。

2010/04/14

ビデオカメラのエンコード(Canon iVIS HG10) [ エンコード, 動画 ]

突然ですが一年ぐらい前に友人からビデオカメラを買いました。

こんなの。

で、まぁビデオカメラとしての機能はいいんですが……
最近のビデオカメラって、PCに取り込むというよりもDVDやBDへ焼いて
再生する事を念頭に置いてるのかなんなのか、AVCHDなんですよね…
mpeg等に変換するのにとても四苦八苦したので備忘録として
ここに現在使っている変換方法を書いておきます。

1.M2TSからmpeg2へ
まず、付属のCorelのアプリで動画を取り込むとM2TS形式で保存されます。
これをmpeg2に保存するために使っているツールがFree HD Converterです。
このツールを使ってまずM2TSファイルをMPEGに変換します。
他にもaviやFLVも対応してるようだ。

2.欲しい部分のみをカット
で、ビデオカメラって大体どうでもいい無駄な時間が入っている物。
そこで編集が必要な訳ですが、カットにはFree Video Dubというツールを
使ってます。本当にカットしかできないみたいなんですが再エンコを
行わないために非常に軽いです。便利。

以上の方法で画質を落としてHDDに保存しています。
面倒…。

2010/04/09

GAE/J入門 第一回 ~データストアへの書き込み~ [ GAE ]

さてさて、やると言ってからだいぶ時間が
経ってしまいましたが

こちらのGAE/J入門に手を
出してみるとします。
こちらの入門の第一回は環境の構築なんですが書いてある通りに進めれば
特に問題なくできると思いますのでスルー。
第二回のデータストアからという事で。

1.データの永続化を行うクラスの作成
データストアでは今までのRDBのように、SQLを発行して(全略)
といったようにデータの保存(永続化)を行う訳ではないようです。
JavaではJDOを利用する事で、とあるクラスのインスタンスが保持
しているデータをそのままデータストアに格納するらしい。

既にこの時点で割と意味不明だったんですが、途中で「そもそも
RDBという物を前提に考えてしまうのが恐らく間違い」と思い
とにかく言われた通りコードを書いてみる事にしました。

という訳でクラスをデータストアに保存するための条件は
以下の3点です。

・クラスに@PersistenceCapable(identifyType = IdentifyType.APPLICATION)アノテーションをつける
・メンバ変数にLong型のidを定義し、[@PrimaryKey] アノテーションと[@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)] アノテーションをつける
・永続化したいメンバ変数に@Persistenceアノテーションをつける

…この時点で、なんとなくLong型のIDって奴がKey-ValueのKeyの役割を果たしそうな
気がしますね。

2.クラスの永続化…の準備
次は上記のようにして作ったクラスを永続化する方法です。
永続化を行う際はPersistenceManagerクラスのmakePersistentメソッドを
使います。ただし、このPersistenceManagerクラスを生成するためには
PersistenceMangerFactoryクラスが必要なようです。
このPersistenceMangerFactoryクラスは永続化に必要な設定ファイル
(jdconfig.xmlファイルが作成したプロジェクトのsrc配下に作成される)
の情報を読み込むのですが、このxmlのパラーメータの名前が
"transactions-optional"なので、この文字列を指定します。
具体的には

 PersistenceManagerFactory pmfInstance = JDOHelper
.getPersistenceManagerFactory("transactions-optional");

こんな感じになります。ただ、データの永続化を行う度にこの
文字列を入力するのはバグの元になる上、この処理で生成される
ファクトリクラスは毎回同じ物になるのでstaticな変数として
定義します。以上によりPersistenceMangerFactoryを
生成するクラスは以下の通り。

public class PMF {
  private static final PersistenceManagerFactory pmfInstance = JDOHelper
    .getPersistenceManagerFactory("transactions-optional");

  private PMF() {
  }

  public static PersistenceManagerFactory get() {
    return pmfInstance;
  }

}

とりあえず現状は、データの永続化を行う際は必ず上記のような
ファクトリクラスを作る必要があるんだな、と覚えておくことにします。

3.クラスの永続化
1.と2.のステップをこなしていれば後は簡単。
PersistenceManagerクラスのインスタンスを生成し、makePersistent
メソッドに永続化対象のクラスを放り込むだけ。具体的には。

//PersistenceManagerクラスの生成
PersistenceManager pm = PMF.get().getPersistenceManager();
//永続化
pm.makePersistent([対象のインスタンス]);

これだけ。ただmakePersistentを実行する際には、永続化
終了後に必ずPersistenceManagerを閉じる処理が必要なので
実際には以下のようにして永続化を行う必要があります。

try {
  pm.makePersistent(e);
} finally {
  pm.close();
}

↑こういうコードはRDBの頃から腐るほど書いてる人が
多いと思うのでまぁ問題ないなと思います。
ってだからRDBと比較して考えちゃダメだーー(´・ω・`)

後はテキストの通り、作ったServletに対してPOSTするhtmlを
書いてTitleとContentに何か入力してPOSTしてみる。



こんな感じ。
試しにタイトルには"Testタイトル1"、Contentに"内容abc123bcd456"と
入力してPOSTしてみました。その後GAE管理画面からDataを見てみると・・



ちゃんと登録されている!
という訳でデータの永続化に成功しました。
今後これをどう使っていくかはまた今後という事で。

とりあえず今日の復習。

1.データの永続化を行いたいクラスは、決められた約束を守らなければならない。
・クラスに@PersistenceCapable(identifyType = IdentifyType.APPLICATION)アノテーションをつける
・メンバ変数にLong型のidを定義し、[@PrimaryKey] アノテーションと[@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)] アノテーションをつける
・永続化したいメンバ変数に@Persistenceアノテーションをつける
2.PersistenceManagerクラスを作る必要がある。(staticなファクトリクラスが便利)
3.後はPersistenceManagerクラスを用いて永続化対象クラスのインスタンスを永続化。

こんな所ですかね?
まともなアプリが作れるようになるのは遠い・・・

2010/03/31

GAE/J入門! [ GAE ]

maitoさんの記事で面白そうな物が
紹介されていたので備忘録にペタリ。

Google App Engine をはじめてみよう

これにそって第一回から(正確には一回は準備編みたいなので二回からかな?)
勉強しなおしてみようかと思います。