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 をはじめてみよう

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

2010/03/26

GAE上でのログイン・ログアウト周り [ GAE ]

前回の続き?

GAEでGoogleのユーザサービスを使うには前回の記事のようにUserServiceオブジェクトを
使ってゴリゴリします。このUserServiceオブジェクトから、ログイン・ログアウトを
実行する画面のURLを取得する事ができます。以下にJavaDocの引用を。

ログイン

createLoginURL

java.lang.String createLoginURL(java.lang.String destinationURL)
ログイン ページをユーザーに表示する場合に使用できる URL を返します。
パラメータ:
destinationURL - ログインしたユーザーをリダイレクトする場合。
戻り値:
ログイン プロンプトを表示する URL。
スローする値:
java.lang.IllegalArgumentException - destinationURL が大きすぎる場合。


ログアウト
createLogoutURL

java.lang.String createLogoutURL(java.lang.String destinationURL)
現在のユーザーがこのアプリケーションからログアウトする場合に使用できる URL を返します。
パラメータ:
destinationURL - ログアウトしたユーザーをリダイレクトする場合。
戻り値:
ユーザーがログアウトする URL。
スローする値:
java.lang.IllegalArgumentException - destinationURL が大きすぎる場合。


上記のメソッドを使用する事で簡単にログイン・ログアウト画面に遷移する事が
可能です。便利!という訳で実際に使ってみました。


■ログイン
前回のポストと全く同じですが、ServletのdoGetメソッドに以下のようなコードを用意します。

UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();

if (user != null) {
 resp.setContentType("text/plain");
 resp.getWriter().println("Hello, " + user.getNickname());

} else {
 resp.sendRedirect(userService.createLoginURL(req.getRequestURI()));
}

これでログイン時はGoogleアカウントのニックネームが表示され、未ログイン時は
ログイン画面が表示されるはずです。早速アクセスしてみると…



表示されました。特に何も用意せず、かえってきた値に遷移すればログインできるっていうのは
便利ですね。ただ便利な反面、GAEでGoogleアカウントにログインする画面はこの画面固定って
事なんでしょうかね。デザインいじれないのが逆に痛いかも。

■ログアウト
今度は先程のコードをこんなふうに変更してみました。

UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();

if (user != null) {
 //resp.setContentType("text/plain");
 //resp.getWriter().println("Hello, " + user.getNickname());
 resp.setContentType("text/html");
 resp.getWriter().println("You can <a href=" + userService.createLogoutURL(req.getRequestURI()) +">Sign out</a>");
} else {
 resp.sendRedirect(userService.createLoginURL(req.getRequestURI()));
}

これにより、まず最初は先程と同じようにログイン画面が表示されます。



ここでログインボタンを押すと・・・



ログアウトのリンクが表示され、それをクリックすると・・・



戻ってきました。無事ログアウト完了。ここで一つ、ログインログアウトともに
メソッドの引数にStringがありましたよね?

>>java.lang.String createLoginURL(java.lang.String destinationURL)
>>java.lang.String createLogoutURL(java.lang.String destinationURL)
このパラメータの文字列に渡す値ですが、JavaDocによるとログイン・ログアウト
完了後にリダイレクトするアドレスのようです。
例えば、ショピングモール系であればログイン完了後に当初見ていた商品のページに
遷移させる、または個人の管理ページに遷移させる・・・
ログアウト完了後にログアウト確認画面に遷移、またはトップページに遷移させる・・・
といった使い方ができるみたいですね。
今回はテストのためにリクエストのURLをそのまま返すようにコーディングしてあります。

Googleのユーザ情報の使い方はだいたいわかったのでそろそろデータストアの
勉強に入りたい所です。

2010/03/25

UserServiceクラスの作り方 [ GAE ]

GAEにてGoogleのログイン関係の操作を行う際に、
UserServiceインタフェースを使用します。
例えばGoogleアカウントのニックネームを使用する場合は、

UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();

if (user != null) {
 resp.setContentType("text/plain");
 resp.getWriter().println("Hello, " + user.getNickname());

} else {
 resp.sendRedirect(userService.createLoginURL(req.getRequestURI()));
}

こんな感じで記述します。まぁGoogleのGAEスタートアップの
コードそのまんまなんですが。
で、ちょっと気になったのがここ。

>>UserServiceFactory.getUserService();

ファクトリクラス使ってオブジェクトを生成してるよう。
という事は何らかの条件によって生成されるUserServiceの
実装クラスが変わるのか・・・?

なんとなく気になったので調べてみました。
早速appengine-api-1.0-sdk-1.3.1.jarを解凍して
UserServiceFactory.classをJADで逆コンパイルした結果……!

return new UserServiceImpl();

実装クラスをnewしてるだけだったーー!
…という訳で特に条件分岐とかはしていませんでした。
まぁいつでも切り替えられるようにという意味では
確かにこういう作りにしておくのが安牌なのでしょうね。
勉強になります。

無駄に気になった疑問は解消されたので、
今度はログインURL周りについてかこうと思います。

が、そのまえに仕事に戻ります。

2010/03/23

GAEでアプリを削除するには? [ GAE ]

GAEのサンプルプログラムを作成しながら勉強してて
いざデプロイ!アカウントも作成済!

…と思った時にふと疑問。GAEってアプリが10個しか
登録できませんよね?
登録したアプリ削除したくなったらどうするん?

という訳でまずは管理画面を開いてみると・・・



こんな感じ。英語。無理。はい戻るボタンぽちっ。

とはいえ削除できないのも困り物ですので早速Google先生に聞いてみた所
一番上に即回答が。

GAEアプリの削除方法

タイトルもそのものズバリでした。
詳細はリンク先の記事をみて頂くとして、ザッとかいつまんで説明すると

1.管理画面から削除するアプリのページを開く
2.AdministrationのApplication Settingsをクリック
3.Disable or Delete Applicationのボタンをクリック

後はしつこく削除するか確認されるのでポチポチ削除を押していくみたいですね。
10個しか無いのでこれは割と重要な情報だと思いました。
そして今仕事中という。ダメ社員でごめんなさい。

[update] maitoさんがフォローしてくれましたが、どうやら
一度削除した名前のアプリケーションはもう作成できないようです。

ちなみに削除の仕方に関する公式のソースはこちら

また、一度削除した名前が予約されて使えないっていうのは多分この部分。

英語苦手だけど多分あってるよな!

2010/03/21

Macでのスクリーンショットの取り方(そして保存先変更) [ Mac ]

Mac楽しい。大人のおもちゃって感じですね。

・・・大人のおもちゃってそういう意味じゃないぞ!

という訳で現在BlogもMacから書いてるんですが、開発してると
スクリーンショットを取りたくなるものです。
という訳でMacでのスクリーンショットの取り方を以下に。

1.画面すべてをとる
command + shift + 3

上記コマンドにて画面全体のスクリーンショットがとれます。

2.対象を選択してからとる
command + shift + 4

上記コマンド入力後、範囲を選択するカーソルが表示されるので
それにて画面を選択する。


さて、上記コマンドにて保存される画像ファイルは何故か
デスクトップ固定です。BlogにUpするための画像はすべて
同じフォルダで一元管理できた方が便利だよね?と思ったので
今度はその変更方法を。ただこちらはターミナルからしか
分かりませんでした。

1.アプリケーション→ユーティリティ→ターミナルを選択する
2.画像を保存したいアドレスをメモっておく
3.ターミナルにて以下のように入力

defaults write com.apple.screencapture location [保存したいアドレス]

上記のように入力したのちに、

killall SystemUIServer

上記のように入力すれば完了です。

2010/03/20

MacBook購入! [ Mac, 買い物 ]

何故かMacBookを購入してしまいました。
使わないのに。

いや、一応これからこのMacBookを開発機として使って
バリバリ稼ぐ予定です。あくまで予定。多分1円も稼げない。

そんな訳で人生初Macです!



じゃーん!すげーMacパッケージからかっこいいよMac
おれAppleあんま好きじゃないっていうか嫌いだよMac!

中をあけるとこんな感じ。



ぴんぼけじゃん!じゃなくてこんな所もスタイリッシュ!
Windowsマシンのノートとかもっと開けたら無骨だよね。
俺はAppleは嫌いだからこの会社のソフト・ハードともどもユーザインタフェースに
関するこだわりは素直に凄いと思う。優秀。

さらに開梱していくと・・・



うん。綺麗。ほんとそれに尽きる。
こういう所に気が届いてるといちいちわくわくするわ。
…と、こういう風にユーザは感じるんだなって事を開発する時にも
忘れないように
しないといけないですよね。肝に命じておこう。

さ、そして遂に本体とのご対面でございます・・わくわく・・・!




どーん!綺麗!かっこいい!Apple!りんご!
ちなみにiPhoneを買う気もありません。頑張れGoogle!
頑張れAndroid!

そしてドキドキを抑えて電源ボタンを押すと一瞬で立ち上がるOS。



かっこいー!でも壁紙は早く可愛い女の子とか萌え萌えな画像に変更せねば!


という訳でiPhoneアプリの開発もしないのに買ったMacBookの開梱日記でした。
ここで感じたのは↑でも書いたけどユーザの満足度ってのは結局こういう所で
満たされるんだなって所ですね。
実際開発してるとどんなにユーザ目線に立とうしても、開発者の目線で見てしまうもの。

『いや、ここはこういう画面にした方が保守性が~』とか、
『ここのレスポンスが3秒もかかっちゃうのはこのモジュールが~』みたいな
言い訳(正当化?)はエンジニアなら一度はやった事があるはず。

でも使うユーザはそんな事どうでもいいってか知らん。
そんな細かい所どうでもよくね・・・といった所で満足度を感じるのが
エンドユーザなんだろな、という事を今回のMacBook購入で感じました。

難しいのぉ。

2010/03/16

google app engine 奮闘記 第1回 ~まずは登録から~ [ GAE ]

突然だけど最近元同期が始めたgoogle app engineに手を出してみようと思いました。
理由は最近バンド仲間とPHP勉強会を開こうって流れになったからです。

…理由になってないけど、実際それが理由でなんとなく初めて
みようと思った次第です。あ、PythonだけじゃなくてJavaが使える
ように気づいたらなってたってのもありますけど。

で、折角なのでgoogle app engine(以下めんどいのでGAE)を勉強していく
様を書いていこうかと思います。
ただ筆不精なもんで途中で終わったらすいません。

さて、第1回はお約束のHello,World!!!・・・かと思ったんですが
今職場なのでそもそもSDKのインストールも出来ない! という事で
第1回は導入編でいこうと思います。
ただこの記事書く前にすでにアカウント登録を済ませてしまったので
うろ覚えですが。手順は以下の通り。

~アカウント作成~
1.http://code.google.com/intl/ja/appengine/にアクセス



2.右側のスタートガイドにそって、"登録"をクリック
3."Create an Application"をクリック(確かここから英語…)
4.Countryで"Japan"を選択
5.4でJapanを選択するとキャリアを選択できるようになるので、自分の携帯を選択
6.自分の携帯のメアドの@以前を入力し、"Send"を押す
7.携帯にアカウントコードのメールがくるので、それを入力する

~アプリ領域の作成~
8.Create an Applicationの画面にて、Application Identifierを入力する(任意)
9.Application Titleを入力する(任意)
10.Saveをクリック

~SDKの導入~
といっても、今回はEclipseを使用するのを前提で話を進めていくので
EclipseにてSDKのインストールを行います。
これならSDKとEclipse用のプラグインが同時にインストール出来ますし。
11.Eclipseを起動し、メニューのヘルプから新規ソフトウェアのインストール...を選択する。



12.使用可能なソフトウェアの所で自分のEclipseのバージョンにあった物を入力する
(今回自分は3.5なのでhttp://dl.google.com/eclipse/plugin/3.5を入力)
13.出てきたインストール項目にてSDKをチェック



後はもう次へ次へと進めていけば自動的にインストールされていきます。
とても便利・・・!
あ、ただ会社のPCでシコシコ開発しようとかしてるとプロキシ鯖で弾かれたりと忙しい事になります。

さぁ、次回からGAEのスタートアップに沿って一通り画面表示、リクエストの飛ばし方、
受け取り方と学習してこうかと思います。
しかしPythonじゃなくてJavaにしちゃったけど大丈夫なのだろうか・・・

2010/01/29

そして一年以上が過ぎた。

一年以上書いていませんでした。
お久しぶりです。

仕事が激務になりしばらくBlogから離れている内に、
昔あった仕事・技術に対する向上心がどんどんと薄れて
いってしまったために完全に放置状態になってしまいました。

このまま完全にブログ離れしてしまうかなと思ったんですが
やっぱり日々感じた事や、検索して初めて知った事とか、
アウトプットとして自分の中を通して外に出すっていう行為は
割と大事な気もするのでボチボチ続けようかと考えなおしました。

ただやっぱり技術的な観点ではとても書き続けられないので
今後は適当に日常やゲームやエロゲーやらに関してつらつらと
書いていこうと思います。


とりあえず、働きたくない。